From 9e443bdde82091d1e03dbab389547858aed2f6fe Mon Sep 17 00:00:00 2001 From: "Ron B. Yeh" Date: Mon, 26 Aug 2024 13:16:50 -0700 Subject: [PATCH] Release VexFlow 4.2.6 --- build/cjs/vexflow-bravura.js | 7 + build/cjs/vexflow-bravura.js.map | 1 + build/cjs/vexflow-core.js | 7 + build/cjs/vexflow-core.js.map | 1 + build/cjs/vexflow-debug-with-tests.js | 54852 ++++++++++++++++ build/cjs/vexflow-debug-with-tests.js.map | 1 + build/cjs/vexflow-debug.js | 36477 ++++++++++ build/cjs/vexflow-debug.js.map | 1 + build/cjs/vexflow-font-bravura.js | 2 + build/cjs/vexflow-font-bravura.js.map | 1 + build/cjs/vexflow-font-custom.js | 2 + build/cjs/vexflow-font-custom.js.map | 1 + build/cjs/vexflow-font-gonville.js | 2 + build/cjs/vexflow-font-gonville.js.map | 1 + build/cjs/vexflow-font-leland.js | 2 + build/cjs/vexflow-font-leland.js.map | 1 + build/cjs/vexflow-font-petaluma.js | 2 + build/cjs/vexflow-font-petaluma.js.map | 1 + build/cjs/vexflow-gonville.js | 7 + build/cjs/vexflow-gonville.js.map | 1 + build/cjs/vexflow-leland.js | 7 + build/cjs/vexflow-leland.js.map | 1 + build/cjs/vexflow-petaluma.js | 7 + build/cjs/vexflow-petaluma.js.map | 1 + build/cjs/vexflow.js | 7 + build/cjs/vexflow.js.map | 1 + build/esm/entry/vexflow-bravura.js | 10 + build/esm/entry/vexflow-core.js | 54 + build/esm/entry/vexflow-debug-with-tests.js | 11 + build/esm/entry/vexflow-debug.js | 8 + build/esm/entry/vexflow-font-bravura.js | 7 + build/esm/entry/vexflow-font-custom.js | 7 + build/esm/entry/vexflow-font-gonville.js | 7 + build/esm/entry/vexflow-font-leland.js | 7 + build/esm/entry/vexflow-font-petaluma.js | 7 + build/esm/entry/vexflow-gonville.js | 10 + build/esm/entry/vexflow-leland.js | 10 + build/esm/entry/vexflow-petaluma.js | 10 + build/esm/entry/vexflow.js | 8 + build/esm/package.json | 3 + build/esm/src/accidental.js | 366 + build/esm/src/annotation.js | 239 + build/esm/src/articulation.js | 279 + build/esm/src/barnote.js | 60 + build/esm/src/beam.js | 642 + build/esm/src/bend.js | 203 + build/esm/src/boundingbox.js | 59 + build/esm/src/boundingboxcomputation.js | 107 + build/esm/src/canvascontext.js | 203 + build/esm/src/chordsymbol.js | 608 + build/esm/src/clef.js | 137 + build/esm/src/clefnote.js | 51 + build/esm/src/crescendo.js | 78 + build/esm/src/curve.js | 118 + build/esm/src/dot.js | 137 + build/esm/src/easyscore.js | 375 + build/esm/src/element.js | 246 + build/esm/src/factory.js | 467 + build/esm/src/flow.js | 304 + build/esm/src/font.js | 263 + build/esm/src/fonts/bravura_glyphs.js | 3543 + build/esm/src/fonts/common_metrics.js | 384 + build/esm/src/fonts/custom_glyphs.js | 42 + build/esm/src/fonts/gonville_glyphs.js | 1119 + build/esm/src/fonts/leland_glyphs.js | 1191 + build/esm/src/fonts/load_all.js | 12 + build/esm/src/fonts/load_bravura.js | 6 + build/esm/src/fonts/load_custom.js | 6 + build/esm/src/fonts/load_gonville.js | 6 + build/esm/src/fonts/load_leland.js | 6 + build/esm/src/fonts/load_petaluma.js | 83 + build/esm/src/fonts/petaluma_glyphs.js | 1639 + build/esm/src/fonts/petalumascript_glyphs.js | 863 + build/esm/src/fonts/robotoslab_glyphs.js | 863 + build/esm/src/fonts/sans_bold_text_metrics.js | 862 + build/esm/src/fonts/sans_text_metrics.js | 870 + build/esm/src/fonts/serif_text_metrics.js | 870 + build/esm/src/fonts/textfonts.js | 104 + build/esm/src/formatter.js | 621 + build/esm/src/fraction.js | 172 + build/esm/src/frethandfinger.js | 157 + build/esm/src/ghostnote.js | 50 + build/esm/src/glyph.js | 341 + build/esm/src/glyphnote.js | 56 + build/esm/src/gracenote.js | 133 + build/esm/src/gracenotegroup.js | 130 + build/esm/src/gracetabnote.js | 12 + build/esm/src/index.js | 89 + build/esm/src/keymanager.js | 99 + build/esm/src/keysignature.js | 258 + build/esm/src/keysignote.js | 28 + build/esm/src/modifier.js | 128 + build/esm/src/modifiercontext.js | 111 + build/esm/src/multimeasurerest.js | 174 + build/esm/src/music.js | 322 + build/esm/src/note.js | 369 + build/esm/src/notehead.js | 169 + build/esm/src/notesubgroup.js | 59 + build/esm/src/ornament.js | 216 + build/esm/src/parenthesis.js | 79 + build/esm/src/parser.js | 165 + build/esm/src/pedalmarking.js | 191 + build/esm/src/registry.js | 81 + build/esm/src/rendercontext.js | 24 + build/esm/src/renderer.js | 113 + build/esm/src/repeatnote.js | 21 + build/esm/src/stave.js | 612 + build/esm/src/stavebarline.js | 186 + build/esm/src/staveconnector.js | 200 + build/esm/src/stavehairpin.js | 121 + build/esm/src/staveline.js | 216 + build/esm/src/stavemodifier.js | 77 + build/esm/src/stavenote.js | 875 + build/esm/src/staverepetition.js | 159 + build/esm/src/stavesection.js | 63 + build/esm/src/stavetempo.js | 95 + build/esm/src/stavetext.js | 83 + build/esm/src/stavetie.js | 147 + build/esm/src/stavevolta.js | 68 + build/esm/src/stem.js | 134 + build/esm/src/stemmablenote.js | 195 + build/esm/src/stringnumber.js | 245 + build/esm/src/strokes.js | 202 + build/esm/src/svgcontext.js | 466 + build/esm/src/system.js | 161 + build/esm/src/tables.js | 1215 + build/esm/src/tabnote.js | 302 + build/esm/src/tabslide.js | 77 + build/esm/src/tabstave.js | 17 + build/esm/src/tabtie.js | 19 + build/esm/src/textbracket.js | 145 + build/esm/src/textdynamics.js | 83 + build/esm/src/textformatter.js | 219 + build/esm/src/textnote.js | 182 + build/esm/src/tickable.js | 214 + build/esm/src/tickcontext.js | 170 + build/esm/src/timesigglyph.js | 89 + build/esm/src/timesignature.js | 119 + build/esm/src/timesignote.js | 32 + build/esm/src/tremolo.js | 49 + build/esm/src/tuning.js | 58 + build/esm/src/tuplet.js | 243 + build/esm/src/typeguard.js | 30 + build/esm/src/util.js | 61 + build/esm/src/version.js | 3 + build/esm/src/vex.js | 52 + build/esm/src/vibrato.js | 100 + build/esm/src/vibratobracket.js | 51 + build/esm/src/voice.js | 191 + build/esm/src/web.js | 15 + build/esm/tests/accidental_tests.js | 974 + build/esm/tests/annotation_tests.js | 372 + build/esm/tests/articulation_tests.js | 424 + build/esm/tests/auto_beam_formatting_tests.js | 551 + build/esm/tests/bach_tests.js | 335 + build/esm/tests/barline_tests.js | 58 + build/esm/tests/beam_tests.js | 651 + build/esm/tests/bend_tests.js | 209 + build/esm/tests/boundingbox_tests.js | 53 + .../esm/tests/boundingboxcomputation_tests.js | 183 + build/esm/tests/chordsymbol_tests.js | 387 + build/esm/tests/clef_tests.js | 131 + build/esm/tests/crossbeam_tests.js | 306 + build/esm/tests/curve_tests.js | 118 + build/esm/tests/dot_tests.js | 119 + build/esm/tests/easyscore_tests.js | 488 + build/esm/tests/factory_tests.js | 44 + build/esm/tests/font_tests.js | 135 + build/esm/tests/formatter/framestack.js | 61 + build/esm/tests/formatter/tests.js | 203 + build/esm/tests/formatter_tests.js | 721 + build/esm/tests/fraction_tests.js | 72 + build/esm/tests/ghostnote_tests.js | 77 + build/esm/tests/glyphnote_tests.js | 113 + build/esm/tests/gracenote_tests.js | 413 + build/esm/tests/gracetabnote_tests.js | 79 + build/esm/tests/index.js | 69 + build/esm/tests/key_clef_tests.js | 106 + build/esm/tests/keymanager_tests.js | 68 + build/esm/tests/keysignature_tests.js | 332 + build/esm/tests/mocks.js | 71 + build/esm/tests/modifier_tests.js | 24 + build/esm/tests/multimeasurerest_tests.js | 141 + build/esm/tests/music_tests.js | 161 + build/esm/tests/notehead_tests.js | 221 + build/esm/tests/notesubgroup_tests.js | 149 + build/esm/tests/offscreencanvas_tests.js | 47 + build/esm/tests/ornament_tests.js | 332 + build/esm/tests/parser_tests.js | 122 + build/esm/tests/pedalmarking_tests.js | 64 + build/esm/tests/percussion_tests.js | 180 + build/esm/tests/qunit/qunit.js | 5643 ++ build/esm/tests/registry_tests.js | 64 + build/esm/tests/renderer_tests.js | 113 + build/esm/tests/rests_tests.js | 260 + build/esm/tests/rhythm_tests.js | 357 + build/esm/tests/stave_tests.js | 560 + build/esm/tests/staveconnector_tests.js | 402 + build/esm/tests/stavehairpin_tests.js | 90 + build/esm/tests/staveline_tests.js | 122 + build/esm/tests/stavemodifier_tests.js | 51 + build/esm/tests/stavenote_tests.js | 928 + build/esm/tests/stavetie_tests.js | 108 + build/esm/tests/stringnumber_tests.js | 283 + build/esm/tests/strokes_tests.js | 275 + build/esm/tests/style_tests.js | 96 + build/esm/tests/tabnote_tests.js | 474 + build/esm/tests/tabslide_tests.js | 133 + build/esm/tests/tabstave_tests.js | 23 + build/esm/tests/tabtie_tests.js | 171 + build/esm/tests/textbracket_tests.js | 100 + build/esm/tests/textformatter_tests.js | 134 + build/esm/tests/textnote_tests.js | 217 + build/esm/tests/threevoice_tests.js | 132 + build/esm/tests/tickcontext_tests.js | 36 + build/esm/tests/timesignature_tests.js | 143 + build/esm/tests/tremolo_tests.js | 75 + build/esm/tests/tuning_tests.js | 56 + build/esm/tests/tuplet_tests.js | 450 + build/esm/tests/typeguard_tests.js | 82 + build/esm/tests/unison_tests.js | 74 + build/esm/tests/vexflow_test_helpers.js | 296 + build/esm/tests/vf_prefix_tests.js | 115 + build/esm/tests/vibrato_tests.js | 86 + build/esm/tests/vibratobracket_tests.js | 45 + build/esm/tests/voice_tests.js | 69 + build/types/entry/vexflow-bravura.d.ts | 2 + build/types/entry/vexflow-core.d.ts | 2 + build/types/entry/vexflow-debug.d.ts | 2 + build/types/entry/vexflow-font-bravura.d.ts | 3930 ++ build/types/entry/vexflow-font-custom.d.ts | 429 + build/types/entry/vexflow-font-gonville.d.ts | 1506 + build/types/entry/vexflow-font-leland.d.ts | 1578 + build/types/entry/vexflow-font-petaluma.d.ts | 2026 + build/types/entry/vexflow-gonville.d.ts | 2 + build/types/entry/vexflow-leland.d.ts | 2 + build/types/entry/vexflow-petaluma.d.ts | 2 + build/types/entry/vexflow.d.ts | 2 + build/types/src/accidental.d.ts | 75 + build/types/src/annotation.d.ts | 61 + build/types/src/articulation.d.ts | 68 + build/types/src/barnote.d.ts | 30 + build/types/src/beam.d.ts | 153 + build/types/src/bend.d.ts | 73 + build/types/src/boundingbox.d.ts | 42 + build/types/src/boundingboxcomputation.d.ts | 33 + build/types/src/canvascontext.d.ts | 89 + build/types/src/chordsymbol.d.ts | 167 + build/types/src/clef.d.ts | 59 + build/types/src/clefnote.d.ts | 18 + build/types/src/crescendo.d.ts | 27 + build/types/src/curve.d.ts | 41 + build/types/src/dot.d.ts | 20 + build/types/src/easyscore.d.ts | 152 + build/types/src/element.d.ts | 229 + build/types/src/factory.d.ts | 279 + build/types/src/flow.d.ts | 265 + build/types/src/font.d.ts | 201 + build/types/src/fonts/bravura_glyphs.d.ts | 3543 + build/types/src/fonts/common_metrics.d.ts | 384 + build/types/src/fonts/custom_glyphs.d.ts | 42 + build/types/src/fonts/gonville_glyphs.d.ts | 1119 + build/types/src/fonts/leland_glyphs.d.ts | 1191 + build/types/src/fonts/load_all.d.ts | 1 + build/types/src/fonts/load_bravura.d.ts | 1 + build/types/src/fonts/load_custom.d.ts | 1 + build/types/src/fonts/load_gonville.d.ts | 1 + build/types/src/fonts/load_leland.d.ts | 1 + build/types/src/fonts/load_petaluma.d.ts | 1 + build/types/src/fonts/petaluma_glyphs.d.ts | 1639 + .../src/fonts/petalumascript_glyphs.d.ts | 863 + build/types/src/fonts/robotoslab_glyphs.d.ts | 863 + .../src/fonts/sans_bold_text_metrics.d.ts | 862 + build/types/src/fonts/sans_text_metrics.d.ts | 870 + build/types/src/fonts/serif_text_metrics.d.ts | 870 + build/types/src/fonts/textfonts.d.ts | 1 + build/types/src/formatter.d.ts | 215 + build/types/src/fraction.d.ts | 62 + build/types/src/frethandfinger.d.ts | 22 + build/types/src/ghostnote.d.ts | 16 + build/types/src/glyph.d.ts | 140 + build/types/src/glyphnote.d.ts | 20 + build/types/src/gracenote.d.ts | 19 + build/types/src/gracenotegroup.d.ts | 33 + build/types/src/gracetabnote.d.ts | 5 + build/types/src/index.d.ts | 89 + build/types/src/keymanager.d.ts | 25 + build/types/src/keysignature.d.ts | 54 + build/types/src/keysignote.d.ts | 11 + build/types/src/modifier.d.ts | 97 + build/types/src/modifiercontext.d.ts | 48 + build/types/src/multimeasurerest.d.ts | 61 + build/types/src/music.d.ts | 91 + build/types/src/note.d.ts | 238 + build/types/src/notehead.d.ts | 71 + build/types/src/notesubgroup.d.ts | 18 + build/types/src/ornament.d.ts | 83 + build/types/src/parenthesis.d.ts | 22 + build/types/src/parser.d.ts | 45 + build/types/src/pedalmarking.d.ts | 67 + build/types/src/registry.d.ts | 40 + build/types/src/rendercontext.d.ts | 64 + build/types/src/renderer.d.ts | 35 + build/types/src/repeatnote.d.ts | 6 + build/types/src/stave.d.ts | 198 + build/types/src/stavebarline.d.ts | 28 + build/types/src/staveconnector.d.ts | 65 + build/types/src/stavehairpin.d.ts | 56 + build/types/src/staveline.d.ts | 54 + build/types/src/stavemodifier.d.ts | 53 + build/types/src/stavenote.d.ts | 154 + build/types/src/staverepetition.d.ts | 32 + build/types/src/stavesection.d.ts | 16 + build/types/src/stavetempo.d.ts | 25 + build/types/src/stavetext.d.ts | 25 + build/types/src/stavetie.d.ts | 63 + build/types/src/stavevolta.d.ts | 21 + build/types/src/stem.d.ts | 58 + build/types/src/stemmablenote.d.ts | 39 + build/types/src/stringnumber.d.ts | 35 + build/types/src/strokes.d.ts | 33 + build/types/src/svgcontext.d.ts | 142 + build/types/src/system.d.ts | 118 + build/types/src/tables.d.ts | 97 + build/types/src/tabnote.d.ts | 44 + build/types/src/tabslide.d.ts | 34 + build/types/src/tabstave.d.ts | 7 + build/types/src/tabtie.d.ts | 18 + build/types/src/textbracket.d.ts | 55 + build/types/src/textdynamics.d.ts | 39 + build/types/src/textformatter.d.ts | 123 + build/types/src/textnote.d.ts | 55 + build/types/src/tickable.d.ts | 140 + build/types/src/tickcontext.d.ts | 82 + build/types/src/timesigglyph.d.ts | 15 + build/types/src/timesignature.d.ts | 90 + build/types/src/timesignote.d.ts | 11 + build/types/src/tremolo.d.ts | 17 + build/types/src/tuning.d.ts | 23 + build/types/src/tuplet.d.ts | 111 + build/types/src/typeguard.d.ts | 99 + build/types/src/util.d.ts | 31 + build/types/src/version.d.ts | 3 + build/types/src/vex.d.ts | 18 + build/types/src/vibrato.d.ts | 29 + build/types/src/vibratobracket.d.ts | 33 + build/types/src/voice.d.ts | 109 + build/types/src/web.d.ts | 2 + package-lock.json | 4 +- package.json | 2 +- 350 files changed, 171018 insertions(+), 3 deletions(-) create mode 100644 build/cjs/vexflow-bravura.js create mode 100644 build/cjs/vexflow-bravura.js.map create mode 100644 build/cjs/vexflow-core.js create mode 100644 build/cjs/vexflow-core.js.map create mode 100644 build/cjs/vexflow-debug-with-tests.js create mode 100644 build/cjs/vexflow-debug-with-tests.js.map create mode 100644 build/cjs/vexflow-debug.js create mode 100644 build/cjs/vexflow-debug.js.map create mode 100644 build/cjs/vexflow-font-bravura.js create mode 100644 build/cjs/vexflow-font-bravura.js.map create mode 100644 build/cjs/vexflow-font-custom.js create mode 100644 build/cjs/vexflow-font-custom.js.map create mode 100644 build/cjs/vexflow-font-gonville.js create mode 100644 build/cjs/vexflow-font-gonville.js.map create mode 100644 build/cjs/vexflow-font-leland.js create mode 100644 build/cjs/vexflow-font-leland.js.map create mode 100644 build/cjs/vexflow-font-petaluma.js create mode 100644 build/cjs/vexflow-font-petaluma.js.map create mode 100644 build/cjs/vexflow-gonville.js create mode 100644 build/cjs/vexflow-gonville.js.map create mode 100644 build/cjs/vexflow-leland.js create mode 100644 build/cjs/vexflow-leland.js.map create mode 100644 build/cjs/vexflow-petaluma.js create mode 100644 build/cjs/vexflow-petaluma.js.map create mode 100644 build/cjs/vexflow.js create mode 100644 build/cjs/vexflow.js.map create mode 100644 build/esm/entry/vexflow-bravura.js create mode 100644 build/esm/entry/vexflow-core.js create mode 100644 build/esm/entry/vexflow-debug-with-tests.js create mode 100644 build/esm/entry/vexflow-debug.js create mode 100644 build/esm/entry/vexflow-font-bravura.js create mode 100644 build/esm/entry/vexflow-font-custom.js create mode 100644 build/esm/entry/vexflow-font-gonville.js create mode 100644 build/esm/entry/vexflow-font-leland.js create mode 100644 build/esm/entry/vexflow-font-petaluma.js create mode 100644 build/esm/entry/vexflow-gonville.js create mode 100644 build/esm/entry/vexflow-leland.js create mode 100644 build/esm/entry/vexflow-petaluma.js create mode 100644 build/esm/entry/vexflow.js create mode 100644 build/esm/package.json create mode 100644 build/esm/src/accidental.js create mode 100644 build/esm/src/annotation.js create mode 100644 build/esm/src/articulation.js create mode 100644 build/esm/src/barnote.js create mode 100644 build/esm/src/beam.js create mode 100644 build/esm/src/bend.js create mode 100644 build/esm/src/boundingbox.js create mode 100644 build/esm/src/boundingboxcomputation.js create mode 100644 build/esm/src/canvascontext.js create mode 100644 build/esm/src/chordsymbol.js create mode 100644 build/esm/src/clef.js create mode 100644 build/esm/src/clefnote.js create mode 100644 build/esm/src/crescendo.js create mode 100644 build/esm/src/curve.js create mode 100644 build/esm/src/dot.js create mode 100644 build/esm/src/easyscore.js create mode 100644 build/esm/src/element.js create mode 100644 build/esm/src/factory.js create mode 100644 build/esm/src/flow.js create mode 100644 build/esm/src/font.js create mode 100644 build/esm/src/fonts/bravura_glyphs.js create mode 100644 build/esm/src/fonts/common_metrics.js create mode 100644 build/esm/src/fonts/custom_glyphs.js create mode 100644 build/esm/src/fonts/gonville_glyphs.js create mode 100644 build/esm/src/fonts/leland_glyphs.js create mode 100644 build/esm/src/fonts/load_all.js create mode 100644 build/esm/src/fonts/load_bravura.js create mode 100644 build/esm/src/fonts/load_custom.js create mode 100644 build/esm/src/fonts/load_gonville.js create mode 100644 build/esm/src/fonts/load_leland.js create mode 100644 build/esm/src/fonts/load_petaluma.js create mode 100644 build/esm/src/fonts/petaluma_glyphs.js create mode 100644 build/esm/src/fonts/petalumascript_glyphs.js create mode 100644 build/esm/src/fonts/robotoslab_glyphs.js create mode 100644 build/esm/src/fonts/sans_bold_text_metrics.js create mode 100644 build/esm/src/fonts/sans_text_metrics.js create mode 100644 build/esm/src/fonts/serif_text_metrics.js create mode 100644 build/esm/src/fonts/textfonts.js create mode 100644 build/esm/src/formatter.js create mode 100644 build/esm/src/fraction.js create mode 100644 build/esm/src/frethandfinger.js create mode 100644 build/esm/src/ghostnote.js create mode 100644 build/esm/src/glyph.js create mode 100644 build/esm/src/glyphnote.js create mode 100644 build/esm/src/gracenote.js create mode 100644 build/esm/src/gracenotegroup.js create mode 100644 build/esm/src/gracetabnote.js create mode 100644 build/esm/src/index.js create mode 100644 build/esm/src/keymanager.js create mode 100644 build/esm/src/keysignature.js create mode 100644 build/esm/src/keysignote.js create mode 100644 build/esm/src/modifier.js create mode 100644 build/esm/src/modifiercontext.js create mode 100644 build/esm/src/multimeasurerest.js create mode 100644 build/esm/src/music.js create mode 100644 build/esm/src/note.js create mode 100644 build/esm/src/notehead.js create mode 100644 build/esm/src/notesubgroup.js create mode 100644 build/esm/src/ornament.js create mode 100644 build/esm/src/parenthesis.js create mode 100644 build/esm/src/parser.js create mode 100644 build/esm/src/pedalmarking.js create mode 100644 build/esm/src/registry.js create mode 100644 build/esm/src/rendercontext.js create mode 100644 build/esm/src/renderer.js create mode 100644 build/esm/src/repeatnote.js create mode 100644 build/esm/src/stave.js create mode 100644 build/esm/src/stavebarline.js create mode 100644 build/esm/src/staveconnector.js create mode 100644 build/esm/src/stavehairpin.js create mode 100644 build/esm/src/staveline.js create mode 100644 build/esm/src/stavemodifier.js create mode 100644 build/esm/src/stavenote.js create mode 100644 build/esm/src/staverepetition.js create mode 100644 build/esm/src/stavesection.js create mode 100644 build/esm/src/stavetempo.js create mode 100644 build/esm/src/stavetext.js create mode 100644 build/esm/src/stavetie.js create mode 100644 build/esm/src/stavevolta.js create mode 100644 build/esm/src/stem.js create mode 100644 build/esm/src/stemmablenote.js create mode 100644 build/esm/src/stringnumber.js create mode 100644 build/esm/src/strokes.js create mode 100644 build/esm/src/svgcontext.js create mode 100644 build/esm/src/system.js create mode 100644 build/esm/src/tables.js create mode 100644 build/esm/src/tabnote.js create mode 100644 build/esm/src/tabslide.js create mode 100644 build/esm/src/tabstave.js create mode 100644 build/esm/src/tabtie.js create mode 100644 build/esm/src/textbracket.js create mode 100644 build/esm/src/textdynamics.js create mode 100644 build/esm/src/textformatter.js create mode 100644 build/esm/src/textnote.js create mode 100644 build/esm/src/tickable.js create mode 100644 build/esm/src/tickcontext.js create mode 100644 build/esm/src/timesigglyph.js create mode 100644 build/esm/src/timesignature.js create mode 100644 build/esm/src/timesignote.js create mode 100644 build/esm/src/tremolo.js create mode 100644 build/esm/src/tuning.js create mode 100644 build/esm/src/tuplet.js create mode 100644 build/esm/src/typeguard.js create mode 100644 build/esm/src/util.js create mode 100644 build/esm/src/version.js create mode 100644 build/esm/src/vex.js create mode 100644 build/esm/src/vibrato.js create mode 100644 build/esm/src/vibratobracket.js create mode 100644 build/esm/src/voice.js create mode 100644 build/esm/src/web.js create mode 100644 build/esm/tests/accidental_tests.js create mode 100644 build/esm/tests/annotation_tests.js create mode 100644 build/esm/tests/articulation_tests.js create mode 100644 build/esm/tests/auto_beam_formatting_tests.js create mode 100644 build/esm/tests/bach_tests.js create mode 100644 build/esm/tests/barline_tests.js create mode 100644 build/esm/tests/beam_tests.js create mode 100644 build/esm/tests/bend_tests.js create mode 100644 build/esm/tests/boundingbox_tests.js create mode 100644 build/esm/tests/boundingboxcomputation_tests.js create mode 100644 build/esm/tests/chordsymbol_tests.js create mode 100644 build/esm/tests/clef_tests.js create mode 100644 build/esm/tests/crossbeam_tests.js create mode 100644 build/esm/tests/curve_tests.js create mode 100644 build/esm/tests/dot_tests.js create mode 100644 build/esm/tests/easyscore_tests.js create mode 100644 build/esm/tests/factory_tests.js create mode 100644 build/esm/tests/font_tests.js create mode 100644 build/esm/tests/formatter/framestack.js create mode 100644 build/esm/tests/formatter/tests.js create mode 100644 build/esm/tests/formatter_tests.js create mode 100644 build/esm/tests/fraction_tests.js create mode 100644 build/esm/tests/ghostnote_tests.js create mode 100644 build/esm/tests/glyphnote_tests.js create mode 100644 build/esm/tests/gracenote_tests.js create mode 100644 build/esm/tests/gracetabnote_tests.js create mode 100644 build/esm/tests/index.js create mode 100644 build/esm/tests/key_clef_tests.js create mode 100644 build/esm/tests/keymanager_tests.js create mode 100644 build/esm/tests/keysignature_tests.js create mode 100644 build/esm/tests/mocks.js create mode 100644 build/esm/tests/modifier_tests.js create mode 100644 build/esm/tests/multimeasurerest_tests.js create mode 100644 build/esm/tests/music_tests.js create mode 100644 build/esm/tests/notehead_tests.js create mode 100644 build/esm/tests/notesubgroup_tests.js create mode 100644 build/esm/tests/offscreencanvas_tests.js create mode 100644 build/esm/tests/ornament_tests.js create mode 100644 build/esm/tests/parser_tests.js create mode 100644 build/esm/tests/pedalmarking_tests.js create mode 100644 build/esm/tests/percussion_tests.js create mode 100644 build/esm/tests/qunit/qunit.js create mode 100644 build/esm/tests/registry_tests.js create mode 100644 build/esm/tests/renderer_tests.js create mode 100644 build/esm/tests/rests_tests.js create mode 100644 build/esm/tests/rhythm_tests.js create mode 100644 build/esm/tests/stave_tests.js create mode 100644 build/esm/tests/staveconnector_tests.js create mode 100644 build/esm/tests/stavehairpin_tests.js create mode 100644 build/esm/tests/staveline_tests.js create mode 100644 build/esm/tests/stavemodifier_tests.js create mode 100644 build/esm/tests/stavenote_tests.js create mode 100644 build/esm/tests/stavetie_tests.js create mode 100644 build/esm/tests/stringnumber_tests.js create mode 100644 build/esm/tests/strokes_tests.js create mode 100644 build/esm/tests/style_tests.js create mode 100644 build/esm/tests/tabnote_tests.js create mode 100644 build/esm/tests/tabslide_tests.js create mode 100644 build/esm/tests/tabstave_tests.js create mode 100644 build/esm/tests/tabtie_tests.js create mode 100644 build/esm/tests/textbracket_tests.js create mode 100644 build/esm/tests/textformatter_tests.js create mode 100644 build/esm/tests/textnote_tests.js create mode 100644 build/esm/tests/threevoice_tests.js create mode 100644 build/esm/tests/tickcontext_tests.js create mode 100644 build/esm/tests/timesignature_tests.js create mode 100644 build/esm/tests/tremolo_tests.js create mode 100644 build/esm/tests/tuning_tests.js create mode 100644 build/esm/tests/tuplet_tests.js create mode 100644 build/esm/tests/typeguard_tests.js create mode 100644 build/esm/tests/unison_tests.js create mode 100644 build/esm/tests/vexflow_test_helpers.js create mode 100644 build/esm/tests/vf_prefix_tests.js create mode 100644 build/esm/tests/vibrato_tests.js create mode 100644 build/esm/tests/vibratobracket_tests.js create mode 100644 build/esm/tests/voice_tests.js create mode 100644 build/types/entry/vexflow-bravura.d.ts create mode 100644 build/types/entry/vexflow-core.d.ts create mode 100644 build/types/entry/vexflow-debug.d.ts create mode 100644 build/types/entry/vexflow-font-bravura.d.ts create mode 100644 build/types/entry/vexflow-font-custom.d.ts create mode 100644 build/types/entry/vexflow-font-gonville.d.ts create mode 100644 build/types/entry/vexflow-font-leland.d.ts create mode 100644 build/types/entry/vexflow-font-petaluma.d.ts create mode 100644 build/types/entry/vexflow-gonville.d.ts create mode 100644 build/types/entry/vexflow-leland.d.ts create mode 100644 build/types/entry/vexflow-petaluma.d.ts create mode 100644 build/types/entry/vexflow.d.ts create mode 100644 build/types/src/accidental.d.ts create mode 100644 build/types/src/annotation.d.ts create mode 100644 build/types/src/articulation.d.ts create mode 100644 build/types/src/barnote.d.ts create mode 100644 build/types/src/beam.d.ts create mode 100644 build/types/src/bend.d.ts create mode 100644 build/types/src/boundingbox.d.ts create mode 100644 build/types/src/boundingboxcomputation.d.ts create mode 100644 build/types/src/canvascontext.d.ts create mode 100644 build/types/src/chordsymbol.d.ts create mode 100644 build/types/src/clef.d.ts create mode 100644 build/types/src/clefnote.d.ts create mode 100644 build/types/src/crescendo.d.ts create mode 100644 build/types/src/curve.d.ts create mode 100644 build/types/src/dot.d.ts create mode 100644 build/types/src/easyscore.d.ts create mode 100644 build/types/src/element.d.ts create mode 100644 build/types/src/factory.d.ts create mode 100644 build/types/src/flow.d.ts create mode 100644 build/types/src/font.d.ts create mode 100644 build/types/src/fonts/bravura_glyphs.d.ts create mode 100644 build/types/src/fonts/common_metrics.d.ts create mode 100644 build/types/src/fonts/custom_glyphs.d.ts create mode 100644 build/types/src/fonts/gonville_glyphs.d.ts create mode 100644 build/types/src/fonts/leland_glyphs.d.ts create mode 100644 build/types/src/fonts/load_all.d.ts create mode 100644 build/types/src/fonts/load_bravura.d.ts create mode 100644 build/types/src/fonts/load_custom.d.ts create mode 100644 build/types/src/fonts/load_gonville.d.ts create mode 100644 build/types/src/fonts/load_leland.d.ts create mode 100644 build/types/src/fonts/load_petaluma.d.ts create mode 100644 build/types/src/fonts/petaluma_glyphs.d.ts create mode 100644 build/types/src/fonts/petalumascript_glyphs.d.ts create mode 100644 build/types/src/fonts/robotoslab_glyphs.d.ts create mode 100644 build/types/src/fonts/sans_bold_text_metrics.d.ts create mode 100644 build/types/src/fonts/sans_text_metrics.d.ts create mode 100644 build/types/src/fonts/serif_text_metrics.d.ts create mode 100644 build/types/src/fonts/textfonts.d.ts create mode 100644 build/types/src/formatter.d.ts create mode 100644 build/types/src/fraction.d.ts create mode 100644 build/types/src/frethandfinger.d.ts create mode 100644 build/types/src/ghostnote.d.ts create mode 100644 build/types/src/glyph.d.ts create mode 100644 build/types/src/glyphnote.d.ts create mode 100644 build/types/src/gracenote.d.ts create mode 100644 build/types/src/gracenotegroup.d.ts create mode 100644 build/types/src/gracetabnote.d.ts create mode 100644 build/types/src/index.d.ts create mode 100644 build/types/src/keymanager.d.ts create mode 100644 build/types/src/keysignature.d.ts create mode 100644 build/types/src/keysignote.d.ts create mode 100644 build/types/src/modifier.d.ts create mode 100644 build/types/src/modifiercontext.d.ts create mode 100644 build/types/src/multimeasurerest.d.ts create mode 100644 build/types/src/music.d.ts create mode 100644 build/types/src/note.d.ts create mode 100644 build/types/src/notehead.d.ts create mode 100644 build/types/src/notesubgroup.d.ts create mode 100644 build/types/src/ornament.d.ts create mode 100644 build/types/src/parenthesis.d.ts create mode 100644 build/types/src/parser.d.ts create mode 100644 build/types/src/pedalmarking.d.ts create mode 100644 build/types/src/registry.d.ts create mode 100644 build/types/src/rendercontext.d.ts create mode 100644 build/types/src/renderer.d.ts create mode 100644 build/types/src/repeatnote.d.ts create mode 100644 build/types/src/stave.d.ts create mode 100644 build/types/src/stavebarline.d.ts create mode 100644 build/types/src/staveconnector.d.ts create mode 100644 build/types/src/stavehairpin.d.ts create mode 100644 build/types/src/staveline.d.ts create mode 100644 build/types/src/stavemodifier.d.ts create mode 100644 build/types/src/stavenote.d.ts create mode 100644 build/types/src/staverepetition.d.ts create mode 100644 build/types/src/stavesection.d.ts create mode 100644 build/types/src/stavetempo.d.ts create mode 100644 build/types/src/stavetext.d.ts create mode 100644 build/types/src/stavetie.d.ts create mode 100644 build/types/src/stavevolta.d.ts create mode 100644 build/types/src/stem.d.ts create mode 100644 build/types/src/stemmablenote.d.ts create mode 100644 build/types/src/stringnumber.d.ts create mode 100644 build/types/src/strokes.d.ts create mode 100644 build/types/src/svgcontext.d.ts create mode 100644 build/types/src/system.d.ts create mode 100644 build/types/src/tables.d.ts create mode 100644 build/types/src/tabnote.d.ts create mode 100644 build/types/src/tabslide.d.ts create mode 100644 build/types/src/tabstave.d.ts create mode 100644 build/types/src/tabtie.d.ts create mode 100644 build/types/src/textbracket.d.ts create mode 100644 build/types/src/textdynamics.d.ts create mode 100644 build/types/src/textformatter.d.ts create mode 100644 build/types/src/textnote.d.ts create mode 100644 build/types/src/tickable.d.ts create mode 100644 build/types/src/tickcontext.d.ts create mode 100644 build/types/src/timesigglyph.d.ts create mode 100644 build/types/src/timesignature.d.ts create mode 100644 build/types/src/timesignote.d.ts create mode 100644 build/types/src/tremolo.d.ts create mode 100644 build/types/src/tuning.d.ts create mode 100644 build/types/src/tuplet.d.ts create mode 100644 build/types/src/typeguard.d.ts create mode 100644 build/types/src/util.d.ts create mode 100644 build/types/src/version.d.ts create mode 100644 build/types/src/vex.d.ts create mode 100644 build/types/src/vibrato.d.ts create mode 100644 build/types/src/vibratobracket.d.ts create mode 100644 build/types/src/voice.d.ts create mode 100644 build/types/src/web.d.ts diff --git a/build/cjs/vexflow-bravura.js b/build/cjs/vexflow-bravura.js new file mode 100644 index 0000000000..906a0a1048 --- /dev/null +++ b/build/cjs/vexflow-bravura.js @@ -0,0 +1,7 @@ +/*! + * VexFlow 4.2.6 2024-08-26T20:16:17.134Z 103aad2b14837418c5e96c9e078edd036fcddf60 + * Copyright (c) 2010 Mohit Muthanna Cheppudira + * https://www.vexflow.com https://github.com/0xfe/vexflow + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Vex=e():t.Vex=e()}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var a in i)t.o(i,a)&&!t.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:i[a]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};t.d(e,{default:()=>i});var i={};function a(t,e,i=!0){if("object"!=typeof t||null===t)return!1;let a=t.constructor;if(i){for(;null!==t;){if(a=t.constructor,"CATEGORY"in a&&a.CATEGORY===e)return!0;t=Object.getPrototypeOf(t)}return!1}return"CATEGORY"in a&&a.CATEGORY===e}t.r(i),t.d(i,{Accidental:()=>at,Annotation:()=>mt,AnnotationHorizontalJustify:()=>ct,AnnotationVerticalJustify:()=>dt,Articulation:()=>yt,BEAM_BOTH:()=>Re,BEAM_LEFT:()=>Me,BEAM_RIGHT:()=>Oe,BarNote:()=>At,Barline:()=>Nt,BarlineType:()=>Ct,Beam:()=>Le,Bend:()=>Ft,BoundingBox:()=>B,BoundingBoxComputation:()=>E,Builder:()=>Ke,CanvasContext:()=>Qt,Category:()=>x,ChordSymbol:()=>Ot,ChordSymbolHorizontalJustify:()=>Dt,ChordSymbolVerticalJustify:()=>Bt,Clef:()=>be,ClefNote:()=>We,Crescendo:()=>ze,Curve:()=>Ue,CurvePosition:()=>Ie,Dot:()=>Rt,EasyScore:()=>Qe,EasyScoreGrammar:()=>Xe,Element:()=>L,Factory:()=>vi,Flow:()=>Ni,Font:()=>M,FontStyle:()=>k,FontWeight:()=>P,Formatter:()=>ke,Fraction:()=>C,FretHandFinger:()=>Lt,GhostNote:()=>ti,Glyph:()=>Z,GlyphNote:()=>ei,GraceNote:()=>ii,GraceNoteGroup:()=>Xt,GraceTabNote:()=>wi,KeyManager:()=>Ci,KeySigNote:()=>ai,KeySignature:()=>_e,Modifier:()=>tt,ModifierContext:()=>me,ModifierPosition:()=>J,MultiMeasureRest:()=>si,Music:()=>et,Note:()=>vt,NoteHead:()=>Wt,NoteSubGroup:()=>Vt,Ornament:()=>Kt,OutlineCode:()=>$,Parenthesis:()=>$t,Parser:()=>He,PedalMarking:()=>li,Piece:()=>Ve,Registry:()=>R,RenderContext:()=>ft,Renderer:()=>le,RendererBackends:()=>ae,RendererLineEndType:()=>ne,RepeatNote:()=>hi,Repetition:()=>xe,RuntimeError:()=>g,SVGContext:()=>ie,Stave:()=>Ce,StaveConnector:()=>Be,StaveHairpin:()=>Di,StaveLine:()=>di,StaveModifier:()=>kt,StaveModifierPosition:()=>wt,StaveNote:()=>Ut,StaveSection:()=>ge,StaveTempo:()=>pe,StaveText:()=>ye,StaveTie:()=>Gt,Stem:()=>nt,StemmableNote:()=>zt,StringNumber:()=>re,Stroke:()=>he,SymbolModifiers:()=>Pt,SymbolTypes:()=>Et,System:()=>mi,TabNote:()=>bi,TabSlide:()=>Bi,TabStave:()=>_i,TabTie:()=>Yt,TextBracket:()=>pi,TextBracketPosition:()=>gi,TextDynamics:()=>yi,TextFormatter:()=>ht,TextJustification:()=>se,TextNote:()=>ue,TickContext:()=>Ee,Tickable:()=>Tt,TimeSigNote:()=>fi,TimeSignature:()=>Te,TimeSignatureGlyph:()=>Se,Tremolo:()=>Ei,Tuning:()=>Pi,Tuplet:()=>Ae,TupletLocation:()=>Ne,Vex:()=>Ii,Vibrato:()=>ce,VibratoBracket:()=>Si,Voice:()=>jt,VoiceMode:()=>Ht,Volta:()=>fe,VoltaType:()=>oe,defined:()=>u,drawDot:()=>St,globalObject:()=>p,isAccidental:()=>n,isAnnotation:()=>s,isBarline:()=>o,isCategory:()=>a,isDot:()=>l,isGraceNote:()=>r,isGraceNoteGroup:()=>h,isHTMLCanvas:()=>Jt,isHTMLDiv:()=>qt,isNote:()=>c,isRenderContext:()=>d,isStaveNote:()=>m,isStemmableNote:()=>b,isTabNote:()=>_,log:()=>y,midLine:()=>S,normalizeAngle:()=>v,prefix:()=>T,sumArray:()=>w,warn:()=>f});const n=t=>a(t,x.Accidental),s=t=>a(t,x.Annotation),o=t=>a(t,x.Barline),l=t=>a(t,x.Dot),r=t=>a(t,x.GraceNote),h=t=>a(t,x.GraceNoteGroup),c=t=>a(t,x.Note),d=t=>a(t,x.RenderContext),m=t=>a(t,x.StaveNote),b=t=>a(t,x.StemmableNote),_=t=>a(t,x.TabNote);var x;!function(t){t.Accidental="Accidental",t.Annotation="Annotation",t.Articulation="Articulation",t.Barline="Barline",t.BarNote="BarNote",t.Beam="Beam",t.Bend="Bend",t.ChordSymbol="ChordSymbol",t.Clef="Clef",t.ClefNote="ClefNote",t.Crescendo="Crescendo",t.Curve="Curve",t.Dot="Dot",t.Element="Element",t.Fraction="Fraction",t.FretHandFinger="FretHandFinger",t.GhostNote="GhostNote",t.Glyph="Glyph",t.GlyphNote="GlyphNote",t.GraceNote="GraceNote",t.GraceNoteGroup="GraceNoteGroup",t.GraceTabNote="GraceTabNote",t.KeySignature="KeySignature",t.KeySigNote="KeySigNote",t.Modifier="Modifier",t.MultiMeasureRest="MultiMeasureRest",t.Note="Note",t.NoteHead="NoteHead",t.NoteSubGroup="NoteSubGroup",t.Ornament="Ornament",t.Parenthesis="Parenthesis",t.PedalMarking="PedalMarking",t.RenderContext="RenderContext",t.RepeatNote="RepeatNote",t.Repetition="Repetition",t.Stave="Stave",t.StaveConnector="StaveConnector",t.StaveHairpin="StaveHairpin",t.StaveLine="StaveLine",t.StaveModifier="StaveModifier",t.StaveNote="StaveNote",t.StaveSection="StaveSection",t.StaveTempo="StaveTempo",t.StaveText="StaveText",t.StaveTie="StaveTie",t.Stem="Stem",t.StemmableNote="StemmableNote",t.StringNumber="StringNumber",t.Stroke="Stroke",t.System="System",t.TabNote="TabNote",t.TabSlide="TabSlide",t.TabStave="TabStave",t.TabTie="TabTie",t.TextBracket="TextBracket",t.TextDynamics="TextDynamics",t.TextNote="TextNote",t.Tickable="Tickable",t.TimeSignature="TimeSignature",t.TimeSigNote="TimeSigNote",t.Tremolo="Tremolo",t.Tuplet="Tuplet",t.Vibrato="Vibrato",t.VibratoBracket="VibratoBracket",t.Voice="Voice",t.Volta="Volta"}(x||(x={}));class g extends Error{constructor(t,e=""){super("[RuntimeError] "+t+": "+e),this.code=t}}function p(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:Function("return this")()}function u(t,e="undefined",i=""){if(void 0===t)throw new g(e,i);return t}function y(t,...e){if(!e)return;const i=Array.prototype.slice.call(e).join(" ");p().console.log(t+": "+i)}function f(...t){const e=t.join(" "),i=new Error;p().console.log("Warning: ",e,i.stack)}function S(t,e){let i=e+(t-e)/2;var a,n;return i%2>0&&(i=((a=10*i)%(n=5)>=n/2?parseInt(""+a/n,10)*n+n:parseInt(""+a/n,10)*n)/10),i}function T(t){return`vf-${t}`}function v(t){return(t%=2*Math.PI)<0&&(t+=2*Math.PI),t}function w(t){return t.reduce(((t,e)=>t+e),0)}class C{static get CATEGORY(){return x.Fraction}static GCD(t,e){if("number"!=typeof t||Number.isNaN(t)||"number"!=typeof e||Number.isNaN(e))throw new g("BadArgument",`Invalid numbers: ${t}, ${e}`);let i;for(;0!==e;)i=e,e=t%e,t=i;return t}static LCM(t,e){return t*e/C.GCD(t,e)}static LCMM(t){return 0===t.length?0:1===t.length?t[0]:2===t.length?C.LCM(t[0],t[1]):C.LCM(t.shift(),C.LCMM(t))}constructor(t,e){this.numerator=1,this.denominator=1,this.set(t,e)}set(t=1,e=1){return this.numerator=t,this.denominator=e,this}value(){return this.numerator/this.denominator}simplify(){let t=this.numerator,e=this.denominator;const i=C.GCD(t,e);return t/=i,e/=i,e<0&&(e=-e,t=-t),this.set(t,e)}add(t=0,e=1){const[i,a]=D(t,e),n=C.LCM(this.denominator,a),s=n/this.denominator,o=n/a,l=this.numerator*s+i*o;return this.set(l,n)}subtract(t=0,e=1){const[i,a]=D(t,e),n=C.LCM(this.denominator,a),s=n/this.denominator,o=n/a,l=this.numerator*s-i*o;return this.set(l,n)}multiply(t=1,e=1){const[i,a]=D(t,e);return this.set(this.numerator*i,this.denominator*a)}divide(t=1,e=1){const[i,a]=D(t,e);return this.set(this.numerator*a,this.denominator*i)}equals(t){const e=C.__staticFractionA.copy(t).simplify(),i=C.__staticFractionB.copy(this).simplify();return e.numerator===i.numerator&&e.denominator===i.denominator}greaterThan(t){const e=C.__staticFractionB.copy(this);return e.subtract(t),e.numerator>0}greaterThanEquals(t){const e=C.__staticFractionB.copy(this);return e.subtract(t),e.numerator>=0}lessThan(t){return!this.greaterThanEquals(t)}lessThanEquals(t){return!this.greaterThan(t)}clone(){return new C(this.numerator,this.denominator)}copy(t){return"number"==typeof t?this.set(t,1):this.set(t.numerator,t.denominator)}quotient(){return Math.floor(this.numerator/this.denominator)}remainder(){return this.numerator%this.denominator}makeAbs(){return this.denominator=Math.abs(this.denominator),this.numerator=Math.abs(this.numerator),this}toString(){return`${this.numerator}/${this.denominator}`}toSimplifiedString(){return C.__staticFractionTmp.copy(this).simplify().toString()}toMixedString(){let t="";const e=this.quotient(),i=C.__staticFractionTmp.copy(this);return e<0&&i.makeAbs(),0!==e?(t+=e,0!==i.numerator&&(t+=` ${i.toSimplifiedString()}`)):t=0===i.numerator?"0":i.toSimplifiedString(),t}parse(t){const e=t.split("/"),i=parseInt(e[0],10),a=e[1]?parseInt(e[1],10):1;return this.set(i,a)}}function D(t,e=1){return"number"==typeof t?[t,e]:[t.numerator,t.denominator]}C.__staticFractionA=new C,C.__staticFractionB=new C,C.__staticFractionTmp=new C;class B{static copy(t){return new B(t.x,t.y,t.w,t.h)}constructor(t,e,i,a){this.x=t,this.y=e,this.w=i,this.h=a}getX(){return this.x}getY(){return this.y}getW(){return this.w}getH(){return this.h}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setW(t){return this.w=t,this}setH(t){return this.h=t,this}move(t,e){return this.x+=t,this.y+=e,this}clone(){return B.copy(this)}mergeWith(t){const e=t,i=this.xthis.x2)&&(this.x2=t),(isNaN(this.y1)||ethis.y2)&&(this.y2=e)}addX(t){this.addPoint(t,this.y1)}addY(t){this.addPoint(this.x1,t)}addQuadraticCurve(t,e,i,a,n,s){this.addPoint(t,e),this.addPoint(n,s);const o=i-t;let l=o-(n-i);if(0!=l){const e=o/l;if(e>0&&e<1){const a=1-e;this.addX(a*a*t+2*a*e*i+e*e*n)}}const r=a-e;if(l=r-(s-a),0!=l){const t=r/l;if(t>0&&t<1){const i=1-t;this.addY(i*i*e+2*i*t*a+t*t*s)}}}addBezierCurve(t,e,i,a,n,s,o,l){const r=[t,e],h=[i,a],c=[n,s],d=[o,l];let m;this.addPoint(r[0],r[1]),this.addPoint(d[0],d[1]);const b=(t,e)=>Math.pow(1-t,3)*r[e]+3*Math.pow(1-t,2)*t*h[e]+3*(1-t)*Math.pow(t,2)*c[e]+Math.pow(t,3)*d[e];for(m=0;m<=1;m++){const t=6*r[m]-12*h[m]+6*c[m],e=-3*r[m]+9*h[m]-9*c[m]+3*d[m],i=3*h[m]-3*r[m];if(0===e){if(0===t)continue;const e=-i/t;0=600;{const e=parseInt(t,10);return isNaN(e)?"bold"===t.toLowerCase():e>=600}}return!1}static isItalic(t){return!!t&&t.toLowerCase()===k.ITALIC}static loadWebFont(t,e,i=!0){return N(this,void 0,void 0,(function*(){const a=new FontFace(t,(i?`url(${e}2) format('woff2'), `:"")+`url(${e}) format('woff')`);return yield a.load(),document.fonts.add(a),a}))}static loadWebFonts(){return N(this,void 0,void 0,(function*(){const t=M.WEB_FONT_HOST,e=M.WEB_FONT_FILES;for(const i in e){const a=e[i];M.loadWebFont(i,t+a)}}))}static load(t,e,i){let a=F[t];return a||(a=new M(t),F[t]=a),e&&a.setData(e),i&&a.setMetrics(i),a}constructor(t){this.name=t}getName(){return this.name}getData(){return u(this.data,"FontError","Missing font data")}getMetrics(){return u(this.metrics,"FontError","Missing metrics")}setData(t){this.data=t}setMetrics(t){this.metrics=t}hasData(){return void 0!==this.data}getResolution(){return this.getData().resolution}getGlyphs(){return this.getData().glyphs}lookupMetric(t,e){const i=t.split(".");let a=this.getMetrics();for(let t=0;tt[e]))}}return[]}getElementsByType(t){return this.getElementsByAttribute("type",t)}getElementsByClass(t){return this.getElementsByAttribute("class",t)}onUpdate(t){return["id","type","class"].includes(t.name)&&this.updateIndex(t),this}}class L{static get CATEGORY(){return x.Element}static newID(){return"auto"+L.ID++}constructor(){var t;this.children=[],this.attrs={id:L.newID(),type:this.getCategory(),class:""},this.rendered=!1,null===(t=R.getDefaultRegistry())||void 0===t||t.register(this)}addChildElement(t){return this.children.push(t),this}getCategory(){return this.constructor.CATEGORY}setStyle(t){return this.style=t,this}setGroupStyle(t){return this.style=t,this.children.forEach((e=>e.setGroupStyle(t))),this}getStyle(){return this.style}applyStyle(t=this.context,e=this.getStyle()){return e&&t?(t.save(),e.shadowColor&&t.setShadowColor(e.shadowColor),e.shadowBlur&&t.setShadowBlur(e.shadowBlur),e.fillStyle&&t.setFillStyle(e.fillStyle),e.strokeStyle&&t.setStrokeStyle(e.strokeStyle),e.lineWidth&&t.setLineWidth(e.lineWidth),this):this}restoreStyle(t=this.context,e=this.getStyle()){return e&&t?(t.restore(),this):this}drawWithStyle(){this.checkContext(),this.applyStyle(),this.draw(),this.restoreStyle()}hasClass(t){var e;return!!this.attrs.class&&-1!=(null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ").indexOf(t))}addClass(t){var e;return this.hasClass(t)||(this.attrs.class?this.attrs.class=`${this.attrs.class} ${t}`:this.attrs.class=`${t}`,null===(e=this.registry)||void 0===e||e.onUpdate({id:this.attrs.id,name:"class",value:t,oldValue:void 0})),this}removeClass(t){var e,i;if(!this.hasClass(t))return this;const a=null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ");return a&&(a.splice(a.indexOf(t)),this.attrs.class=a.join(" ")),null===(i=this.registry)||void 0===i||i.onUpdate({id:this.attrs.id,name:"class",value:void 0,oldValue:t}),this}onRegister(t){return this.registry=t,this}isRendered(){return this.rendered}setRendered(t=!0){return this.rendered=t,this}getAttributes(){return this.attrs}getAttribute(t){return this.attrs[t]}getSVGElement(t=""){const e=T(this.attrs.id+t),i=document.getElementById(e);if(i)return i}setAttribute(t,e){var i;const a=this.attrs.id,n=this.attrs[t];return this.attrs[t]=e,null===(i=this.registry)||void 0===i||i.onUpdate({id:a,name:t,value:e,oldValue:n}),this}getBoundingBox(){return this.boundingBox}getContext(){return this.context}setContext(t){return this.context=t,this}checkContext(){return u(this.context,"NoContext","No rendering context attached to instance.")}set font(t){this.setFont(t)}get font(){return M.toCSSString(this.textFont)}setFont(t,e,i,a){const n=this.constructor.TEXT_FONT,s="object"==typeof t,o="string"==typeof t,l=void 0===t,r=void 0===e&&void 0===i&&void 0===a;return this.textFont=s?Object.assign(Object.assign({},n),t):o&&r?M.fromCSSString(t):l&&r?Object.assign({},n):M.validate(null!=t?t:n.family,null!=e?e:n.size,null!=i?i:n.weight,null!=a?a:n.style),this}getFont(){return this.textFont||this.resetFont(),M.toCSSString(this.textFont)}resetFont(){this.setFont()}get fontInfo(){return this.textFont||this.resetFont(),Object.assign({},this.textFont)}set fontInfo(t){this.setFont(t)}setFontSize(t){const e=this.fontInfo;return this.setFont(e.family,t,e.weight,e.style),this}getFontSize(){return this.fontSize}set fontSize(t){this.setFontSize(t)}get fontSize(){let t=this.fontInfo.size;return"number"==typeof t&&(t=`${t}pt`),t}get fontSizeInPoints(){return M.convertSizeToPointValue(this.fontSize)}get fontSizeInPixels(){return M.convertSizeToPixelValue(this.fontSize)}get fontStyle(){return this.fontInfo.style}set fontStyle(t){const e=this.fontInfo;this.setFont(e.family,e.size,e.weight,t)}get fontWeight(){return this.fontInfo.weight+""}set fontWeight(t){const e=this.fontInfo;this.setFont(e.family,e.size,t,e.style)}}L.ID=1e3,L.TEXT_FONT={family:M.SANS_SERIF,size:M.SIZE,weight:P.NORMAL,style:k.NORMAL};const W=16384,z={"1/2":32768,1:16384,2:8192,4:4096,8:2048,16:1024,32:512,64:256,128:128,256:64},I={w:"1",h:"2",q:"4",b:"256"},U={C:{num:0},Am:{num:0},F:{acc:"b",num:1},Dm:{acc:"b",num:1},Bb:{acc:"b",num:2},Gm:{acc:"b",num:2},Eb:{acc:"b",num:3},Cm:{acc:"b",num:3},Ab:{acc:"b",num:4},Fm:{acc:"b",num:4},Db:{acc:"b",num:5},Bbm:{acc:"b",num:5},Gb:{acc:"b",num:6},Ebm:{acc:"b",num:6},Cb:{acc:"b",num:7},Abm:{acc:"b",num:7},G:{acc:"#",num:1},Em:{acc:"#",num:1},D:{acc:"#",num:2},Bm:{acc:"#",num:2},A:{acc:"#",num:3},"F#m":{acc:"#",num:3},E:{acc:"#",num:4},"C#m":{acc:"#",num:4},B:{acc:"#",num:5},"G#m":{acc:"#",num:5},"F#":{acc:"#",num:6},"D#m":{acc:"#",num:6},"C#":{acc:"#",num:7},"A#m":{acc:"#",num:7}},G={treble:{line_shift:0},bass:{line_shift:6},tenor:{line_shift:4},alto:{line_shift:3},soprano:{line_shift:1},percussion:{line_shift:0},"mezzo-soprano":{line_shift:2},"baritone-c":{line_shift:5},"baritone-f":{line_shift:5},subbass:{line_shift:7},french:{line_shift:-1}},Y={C:{index:0,int_val:0},CN:{index:0,int_val:0,accidental:"n"},"C#":{index:0,int_val:1,accidental:"#"},"C##":{index:0,int_val:2,accidental:"##"},CB:{index:0,int_val:11,accidental:"b"},CBB:{index:0,int_val:10,accidental:"bb"},D:{index:1,int_val:2},DN:{index:1,int_val:2,accidental:"n"},"D#":{index:1,int_val:3,accidental:"#"},"D##":{index:1,int_val:4,accidental:"##"},DB:{index:1,int_val:1,accidental:"b"},DBB:{index:1,int_val:0,accidental:"bb"},E:{index:2,int_val:4},EN:{index:2,int_val:4,accidental:"n"},"E#":{index:2,int_val:5,accidental:"#"},"E##":{index:2,int_val:6,accidental:"##"},EB:{index:2,int_val:3,accidental:"b"},EBB:{index:2,int_val:2,accidental:"bb"},F:{index:3,int_val:5},FN:{index:3,int_val:5,accidental:"n"},"F#":{index:3,int_val:6,accidental:"#"},"F##":{index:3,int_val:7,accidental:"##"},FB:{index:3,int_val:4,accidental:"b"},FBB:{index:3,int_val:3,accidental:"bb"},G:{index:4,int_val:7},GN:{index:4,int_val:7,accidental:"n"},"G#":{index:4,int_val:8,accidental:"#"},"G##":{index:4,int_val:9,accidental:"##"},GB:{index:4,int_val:6,accidental:"b"},GBB:{index:4,int_val:5,accidental:"bb"},A:{index:5,int_val:9},AN:{index:5,int_val:9,accidental:"n"},"A#":{index:5,int_val:10,accidental:"#"},"A##":{index:5,int_val:11,accidental:"##"},AB:{index:5,int_val:8,accidental:"b"},ABB:{index:5,int_val:7,accidental:"bb"},B:{index:6,int_val:11},BN:{index:6,int_val:11,accidental:"n"},"B#":{index:6,int_val:12,accidental:"#"},"B##":{index:6,int_val:13,accidental:"##"},BB:{index:6,int_val:10,accidental:"b"},BBB:{index:6,int_val:9,accidental:"bb"},R:{index:6,rest:!0},X:{index:6,accidental:"",octave:4,code:"noteheadXBlack",shift_right:5.5}},H={"#":{code:"accidentalSharp",parenRightPaddingAdjustment:-1},"##":{code:"accidentalDoubleSharp",parenRightPaddingAdjustment:-1},b:{code:"accidentalFlat",parenRightPaddingAdjustment:-2},bb:{code:"accidentalDoubleFlat",parenRightPaddingAdjustment:-2},n:{code:"accidentalNatural",parenRightPaddingAdjustment:-1},"{":{code:"accidentalParensLeft",parenRightPaddingAdjustment:-1},"}":{code:"accidentalParensRight",parenRightPaddingAdjustment:-1},db:{code:"accidentalThreeQuarterTonesFlatZimmermann",parenRightPaddingAdjustment:-1},d:{code:"accidentalQuarterToneFlatStein",parenRightPaddingAdjustment:0},"++":{code:"accidentalThreeQuarterTonesSharpStein",parenRightPaddingAdjustment:-1},"+":{code:"accidentalQuarterToneSharpStein",parenRightPaddingAdjustment:-1},"+-":{code:"accidentalKucukMucennebSharp",parenRightPaddingAdjustment:-1},bs:{code:"accidentalBakiyeFlat",parenRightPaddingAdjustment:-1},bss:{code:"accidentalBuyukMucennebFlat",parenRightPaddingAdjustment:-1},o:{code:"accidentalSori",parenRightPaddingAdjustment:-1},k:{code:"accidentalKoron",parenRightPaddingAdjustment:-1},bbs:{code:"vexAccidentalMicrotonal1",parenRightPaddingAdjustment:-1},"++-":{code:"accidentalBuyukMucennebSharp",parenRightPaddingAdjustment:-1},ashs:{code:"vexAccidentalMicrotonal3",parenRightPaddingAdjustment:-1},afhf:{code:"vexAccidentalMicrotonal4",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaUp:{code:"accSagittal5v7KleismaUp",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaDown:{code:"accSagittal5v7KleismaDown",parenRightPaddingAdjustment:-1},accSagittal5CommaUp:{code:"accSagittal5CommaUp",parenRightPaddingAdjustment:-1},accSagittal5CommaDown:{code:"accSagittal5CommaDown",parenRightPaddingAdjustment:-1},accSagittal7CommaUp:{code:"accSagittal7CommaUp",parenRightPaddingAdjustment:-1},accSagittal7CommaDown:{code:"accSagittal7CommaDown",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisUp:{code:"accSagittal25SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisDown:{code:"accSagittal25SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisUp:{code:"accSagittal35MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisDown:{code:"accSagittal35MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisUp:{code:"accSagittal11MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisDown:{code:"accSagittal11MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisUp:{code:"accSagittal11LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisDown:{code:"accSagittal11LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisUp:{code:"accSagittal35LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisDown:{code:"accSagittal35LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SDown:{code:"accSagittalSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalFlat25SUp:{code:"accSagittalFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7CDown:{code:"accSagittalSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7CUp:{code:"accSagittalFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5CDown:{code:"accSagittalSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5CUp:{code:"accSagittalFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kDown:{code:"accSagittalSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kUp:{code:"accSagittalFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalSharp:{code:"accSagittalSharp",parenRightPaddingAdjustment:-1},accSagittalFlat:{code:"accSagittalFlat",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kUp:{code:"accSagittalSharp5v7kUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kDown:{code:"accSagittalFlat5v7kDown",parenRightPaddingAdjustment:-1},accSagittalSharp5CUp:{code:"accSagittalSharp5CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5CDown:{code:"accSagittalFlat5CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7CUp:{code:"accSagittalSharp7CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7CDown:{code:"accSagittalFlat7CDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SUp:{code:"accSagittalSharp25SUp",parenRightPaddingAdjustment:-1},accSagittalFlat25SDown:{code:"accSagittalFlat25SDown",parenRightPaddingAdjustment:-1},accSagittalSharp35MUp:{code:"accSagittalSharp35MUp",parenRightPaddingAdjustment:-1},accSagittalFlat35MDown:{code:"accSagittalFlat35MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11MUp:{code:"accSagittalSharp11MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11MDown:{code:"accSagittalFlat11MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11LUp:{code:"accSagittalSharp11LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11LDown:{code:"accSagittalFlat11LDown",parenRightPaddingAdjustment:-1},accSagittalSharp35LUp:{code:"accSagittalSharp35LUp",parenRightPaddingAdjustment:-1},accSagittalFlat35LDown:{code:"accSagittalFlat35LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp25SDown:{code:"accSagittalDoubleSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat25SUp:{code:"accSagittalDoubleFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7CDown:{code:"accSagittalDoubleSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7CUp:{code:"accSagittalDoubleFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5CDown:{code:"accSagittalDoubleSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5CUp:{code:"accSagittalDoubleFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v7kDown:{code:"accSagittalDoubleSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v7kUp:{code:"accSagittalDoubleFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp:{code:"accSagittalDoubleSharp",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat:{code:"accSagittalDoubleFlat",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaUp:{code:"accSagittal7v11KleismaUp",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaDown:{code:"accSagittal7v11KleismaDown",parenRightPaddingAdjustment:-1},accSagittal17CommaUp:{code:"accSagittal17CommaUp",parenRightPaddingAdjustment:-1},accSagittal17CommaDown:{code:"accSagittal17CommaDown",parenRightPaddingAdjustment:-1},accSagittal55CommaUp:{code:"accSagittal55CommaUp",parenRightPaddingAdjustment:-1},accSagittal55CommaDown:{code:"accSagittal55CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v11CommaUp:{code:"accSagittal7v11CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v11CommaDown:{code:"accSagittal7v11CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisUp:{code:"accSagittal5v11SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisDown:{code:"accSagittal5v11SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SDown:{code:"accSagittalSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SUp:{code:"accSagittalFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CDown:{code:"accSagittalSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CUp:{code:"accSagittalFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalSharp55CDown:{code:"accSagittalSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalFlat55CUp:{code:"accSagittalFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17CDown:{code:"accSagittalSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalFlat17CUp:{code:"accSagittalFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kDown:{code:"accSagittalSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kUp:{code:"accSagittalFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kUp:{code:"accSagittalSharp7v11kUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kDown:{code:"accSagittalFlat7v11kDown",parenRightPaddingAdjustment:-1},accSagittalSharp17CUp:{code:"accSagittalSharp17CUp",parenRightPaddingAdjustment:-1},accSagittalFlat17CDown:{code:"accSagittalFlat17CDown",parenRightPaddingAdjustment:-1},accSagittalSharp55CUp:{code:"accSagittalSharp55CUp",parenRightPaddingAdjustment:-1},accSagittalFlat55CDown:{code:"accSagittalFlat55CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CUp:{code:"accSagittalSharp7v11CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CDown:{code:"accSagittalFlat7v11CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SUp:{code:"accSagittalSharp5v11SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SDown:{code:"accSagittalFlat5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v11SDown:{code:"accSagittalDoubleSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v11SUp:{code:"accSagittalDoubleFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11CDown:{code:"accSagittalDoubleSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11CUp:{code:"accSagittalDoubleFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp55CDown:{code:"accSagittalDoubleSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat55CUp:{code:"accSagittalDoubleFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17CDown:{code:"accSagittalDoubleSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17CUp:{code:"accSagittalDoubleFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11kDown:{code:"accSagittalDoubleSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11kUp:{code:"accSagittalDoubleFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittal23CommaUp:{code:"accSagittal23CommaUp",parenRightPaddingAdjustment:-1},accSagittal23CommaDown:{code:"accSagittal23CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v19CommaUp:{code:"accSagittal5v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal5v19CommaDown:{code:"accSagittal5v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisUp:{code:"accSagittal5v23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisDown:{code:"accSagittal5v23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SDown:{code:"accSagittalSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SUp:{code:"accSagittalFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CDown:{code:"accSagittalSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CUp:{code:"accSagittalFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CDown:{code:"accSagittalSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalFlat23CUp:{code:"accSagittalFlat23CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CUp:{code:"accSagittalSharp23CUp",parenRightPaddingAdjustment:-1},accSagittalFlat23CDown:{code:"accSagittalFlat23CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CUp:{code:"accSagittalSharp5v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CDown:{code:"accSagittalFlat5v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SUp:{code:"accSagittalSharp5v23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SDown:{code:"accSagittalFlat5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v23SDown:{code:"accSagittalDoubleSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v23SUp:{code:"accSagittalDoubleFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v19CDown:{code:"accSagittalDoubleSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v19CUp:{code:"accSagittalDoubleFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23CDown:{code:"accSagittalDoubleSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23CUp:{code:"accSagittalDoubleFlat23CUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaUp:{code:"accSagittal19SchismaUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaDown:{code:"accSagittal19SchismaDown",parenRightPaddingAdjustment:-1},accSagittal17KleismaUp:{code:"accSagittal17KleismaUp",parenRightPaddingAdjustment:-1},accSagittal17KleismaDown:{code:"accSagittal17KleismaDown",parenRightPaddingAdjustment:-1},accSagittal143CommaUp:{code:"accSagittal143CommaUp",parenRightPaddingAdjustment:-1},accSagittal143CommaDown:{code:"accSagittal143CommaDown",parenRightPaddingAdjustment:-1},accSagittal11v49CommaUp:{code:"accSagittal11v49CommaUp",parenRightPaddingAdjustment:-1},accSagittal11v49CommaDown:{code:"accSagittal11v49CommaDown",parenRightPaddingAdjustment:-1},accSagittal19CommaUp:{code:"accSagittal19CommaUp",parenRightPaddingAdjustment:-1},accSagittal19CommaDown:{code:"accSagittal19CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v19CommaUp:{code:"accSagittal7v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v19CommaDown:{code:"accSagittal7v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisUp:{code:"accSagittal49SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisDown:{code:"accSagittal49SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisUp:{code:"accSagittal23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisDown:{code:"accSagittal23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisUp:{code:"accSagittal5v13MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisDown:{code:"accSagittal5v13MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisUp:{code:"accSagittal11v19MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisDown:{code:"accSagittal11v19MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisUp:{code:"accSagittal49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisDown:{code:"accSagittal49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisUp:{code:"accSagittal5v49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisDown:{code:"accSagittal5v49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisUp:{code:"accSagittal49LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisDown:{code:"accSagittal49LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisUp:{code:"accSagittal11v19LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisDown:{code:"accSagittal11v19LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisUp:{code:"accSagittal5v13LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisDown:{code:"accSagittal5v13LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SDown:{code:"accSagittalSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat23SUp:{code:"accSagittalFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp49SDown:{code:"accSagittalSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalFlat49SUp:{code:"accSagittalFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CDown:{code:"accSagittalSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CUp:{code:"accSagittalFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp19CDown:{code:"accSagittalSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat19CUp:{code:"accSagittalFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CDown:{code:"accSagittalSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CUp:{code:"accSagittalFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalSharp143CDown:{code:"accSagittalSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalFlat143CUp:{code:"accSagittalFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17kDown:{code:"accSagittalSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalFlat17kUp:{code:"accSagittalFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sDown:{code:"accSagittalSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalFlat19sUp:{code:"accSagittalFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sUp:{code:"accSagittalSharp19sUp",parenRightPaddingAdjustment:-1},accSagittalFlat19sDown:{code:"accSagittalFlat19sDown",parenRightPaddingAdjustment:-1},accSagittalSharp17kUp:{code:"accSagittalSharp17kUp",parenRightPaddingAdjustment:-1},accSagittalFlat17kDown:{code:"accSagittalFlat17kDown",parenRightPaddingAdjustment:-1},accSagittalSharp143CUp:{code:"accSagittalSharp143CUp",parenRightPaddingAdjustment:-1},accSagittalFlat143CDown:{code:"accSagittalFlat143CDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CUp:{code:"accSagittalSharp11v49CUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CDown:{code:"accSagittalFlat11v49CDown",parenRightPaddingAdjustment:-1},accSagittalSharp19CUp:{code:"accSagittalSharp19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat19CDown:{code:"accSagittalFlat19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CUp:{code:"accSagittalSharp7v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CDown:{code:"accSagittalFlat7v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp49SUp:{code:"accSagittalSharp49SUp",parenRightPaddingAdjustment:-1},accSagittalFlat49SDown:{code:"accSagittalFlat49SDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SUp:{code:"accSagittalSharp23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat23SDown:{code:"accSagittalFlat23SDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13MUp:{code:"accSagittalSharp5v13MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13MDown:{code:"accSagittalFlat5v13MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19MUp:{code:"accSagittalSharp11v19MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19MDown:{code:"accSagittalFlat11v19MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49MUp:{code:"accSagittalSharp49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat49MDown:{code:"accSagittalFlat49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v49MUp:{code:"accSagittalSharp5v49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v49MDown:{code:"accSagittalFlat5v49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49LUp:{code:"accSagittalSharp49LUp",parenRightPaddingAdjustment:-1},accSagittalFlat49LDown:{code:"accSagittalFlat49LDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19LUp:{code:"accSagittalSharp11v19LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19LDown:{code:"accSagittalFlat11v19LDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13LUp:{code:"accSagittalSharp5v13LUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13LDown:{code:"accSagittalFlat5v13LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23SDown:{code:"accSagittalDoubleSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23SUp:{code:"accSagittalDoubleFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp49SDown:{code:"accSagittalDoubleSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat49SUp:{code:"accSagittalDoubleFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v19CDown:{code:"accSagittalDoubleSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v19CUp:{code:"accSagittalDoubleFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19CDown:{code:"accSagittalDoubleSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19CUp:{code:"accSagittalDoubleFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp11v49CDown:{code:"accSagittalDoubleSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat11v49CUp:{code:"accSagittalDoubleFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp143CDown:{code:"accSagittalDoubleSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat143CUp:{code:"accSagittalDoubleFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17kDown:{code:"accSagittalDoubleSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17kUp:{code:"accSagittalDoubleFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19sDown:{code:"accSagittalDoubleSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19sUp:{code:"accSagittalDoubleFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalShaftUp:{code:"accSagittalShaftUp",parenRightPaddingAdjustment:-1},accSagittalShaftDown:{code:"accSagittalShaftDown",parenRightPaddingAdjustment:-1},accSagittalAcute:{code:"accSagittalAcute",parenRightPaddingAdjustment:-1},accSagittalGrave:{code:"accSagittalGrave",parenRightPaddingAdjustment:-1},accSagittal1MinaUp:{code:"accSagittal1MinaUp",parenRightPaddingAdjustment:-1},accSagittal1MinaDown:{code:"accSagittal1MinaDown",parenRightPaddingAdjustment:-1},accSagittal2MinasUp:{code:"accSagittal2MinasUp",parenRightPaddingAdjustment:-1},accSagittal2MinasDown:{code:"accSagittal2MinasDown",parenRightPaddingAdjustment:-1},accSagittal1TinaUp:{code:"accSagittal1TinaUp",parenRightPaddingAdjustment:-1},accSagittal1TinaDown:{code:"accSagittal1TinaDown",parenRightPaddingAdjustment:-1},accSagittal2TinasUp:{code:"accSagittal2TinasUp",parenRightPaddingAdjustment:-1},accSagittal2TinasDown:{code:"accSagittal2TinasDown",parenRightPaddingAdjustment:-1},accSagittal3TinasUp:{code:"accSagittal3TinasUp",parenRightPaddingAdjustment:-1},accSagittal3TinasDown:{code:"accSagittal3TinasDown",parenRightPaddingAdjustment:-1},accSagittal4TinasUp:{code:"accSagittal4TinasUp",parenRightPaddingAdjustment:-1},accSagittal4TinasDown:{code:"accSagittal4TinasDown",parenRightPaddingAdjustment:-1},accSagittal5TinasUp:{code:"accSagittal5TinasUp",parenRightPaddingAdjustment:-1},accSagittal5TinasDown:{code:"accSagittal5TinasDown",parenRightPaddingAdjustment:-1},accSagittal6TinasUp:{code:"accSagittal6TinasUp",parenRightPaddingAdjustment:-1},accSagittal6TinasDown:{code:"accSagittal6TinasDown",parenRightPaddingAdjustment:-1},accSagittal7TinasUp:{code:"accSagittal7TinasUp",parenRightPaddingAdjustment:-1},accSagittal7TinasDown:{code:"accSagittal7TinasDown",parenRightPaddingAdjustment:-1},accSagittal8TinasUp:{code:"accSagittal8TinasUp",parenRightPaddingAdjustment:-1},accSagittal8TinasDown:{code:"accSagittal8TinasDown",parenRightPaddingAdjustment:-1},accSagittal9TinasUp:{code:"accSagittal9TinasUp",parenRightPaddingAdjustment:-1},accSagittal9TinasDown:{code:"accSagittal9TinasDown",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaUp:{code:"accSagittalFractionalTinaUp",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaDown:{code:"accSagittalFractionalTinaDown",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlat:{code:"accidentalNarrowReversedFlat",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlatAndFlat:{code:"accidentalNarrowReversedFlatAndFlat",parenRightPaddingAdjustment:-1},accidentalWilsonPlus:{code:"accidentalWilsonPlus",parenRightPaddingAdjustment:-1},accidentalWilsonMinus:{code:"accidentalWilsonMinus",parenRightPaddingAdjustment:-1}},j={"a.":{code:"augmentationDot",between_lines:!0},av:{aboveCode:"articStaccatissimoAbove",belowCode:"articStaccatissimoBelow",between_lines:!0},"a>":{aboveCode:"articAccentAbove",belowCode:"articAccentBelow",between_lines:!0},"a-":{aboveCode:"articTenutoAbove",belowCode:"articTenutoBelow",between_lines:!0},"a^":{aboveCode:"articMarcatoAbove",belowCode:"articMarcatoBelow",between_lines:!1},"a+":{code:"pluckedLeftHandPizzicato",between_lines:!1},ao:{aboveCode:"pluckedSnapPizzicatoAbove",belowCode:"pluckedSnapPizzicatoBelow",between_lines:!1},ah:{code:"stringsHarmonic",between_lines:!1},"a@":{aboveCode:"fermataAbove",belowCode:"fermataBelow",between_lines:!1},"a@a":{code:"fermataAbove",between_lines:!1},"a@u":{code:"fermataBelow",between_lines:!1},"a@s":{aboveCode:"fermataShortAbove",belowCode:"fermataShortBelow",between_lines:!1},"a@as":{code:"fermataShortAbove",between_lines:!1},"a@us":{code:"fermataShortBelow",between_lines:!1},"a@l":{aboveCode:"fermataLongAbove",belowCode:"fermataLongBelow",between_lines:!1},"a@al":{code:"fermataLongAbove",between_lines:!1},"a@ul":{code:"fermataLongBelow",between_lines:!1},"a@vl":{aboveCode:"fermataVeryLongAbove",belowCode:"fermataVeryLongBelow",between_lines:!1},"a@avl":{code:"fermataVeryLongAbove",between_lines:!1},"a@uvl":{code:"fermataVeryLongBelow",between_lines:!1},"a|":{code:"stringsUpBow",between_lines:!1},am:{code:"stringsDownBow",between_lines:!1},"a,":{code:"pictChokeCymbal",between_lines:!1}},X={mordent:{code:"ornamentShortTrill"},mordent_inverted:{code:"ornamentMordent"},turn:{code:"ornamentTurn"},turn_inverted:{code:"ornamentTurnSlash"},tr:{code:"ornamentTrill"},upprall:{code:"ornamentPrecompSlideTrillDAnglebert"},downprall:{code:"ornamentPrecompDoubleCadenceUpperPrefix"},prallup:{code:"ornamentPrecompTrillSuffixDandrieu"},pralldown:{code:"ornamentPrecompTrillLowerSuffix"},upmordent:{code:"ornamentPrecompSlideTrillBach"},downmordent:{code:"ornamentPrecompDoubleCadenceUpperPrefixTurn"},lineprall:{code:"ornamentPrecompAppoggTrill"},prallprall:{code:"ornamentTremblement"},scoop:{code:"brassScoop"},doit:{code:"brassDoitMedium"},fall:{code:"brassFallLipShort"},doitLong:{code:"brassLiftMedium"},fallLong:{code:"brassFallRoughMedium"},bend:{code:"brassBend"},plungerClosed:{code:"brassMuteClosed"},plungerOpen:{code:"brassMuteOpen"},flip:{code:"brassFlip"},jazzTurn:{code:"brassJazzTurn"},smear:{code:"brassSmear"}};class V{static currentMusicFont(){if(0===V.MUSIC_FONT_STACK.length)throw new g("NoFonts","The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).");return V.MUSIC_FONT_STACK[0]}static clefProperties(t){if(!t||!(t in G))throw new g("BadArgument","Invalid clef: "+t);return G[t]}static keyProperties(t,e="treble",i){let a={octave_shift:0,duration:"4"};"object"==typeof i&&(a=Object.assign(Object.assign({},a),i));const n=V.sanitizeDuration(a.duration),s=t.split("/");if(s.length<2)throw new g("BadArguments",`First argument must be note/octave or note/octave/glyph-code: ${t}`);const o=s[0].toUpperCase(),l=Y[o];if(!l)throw new g("BadArguments","Invalid key name: "+o);l.octave&&(s[1]=l.octave.toString());let r=parseInt(s[1],10);r-=a.octave_shift;let h=(7*r-28+l.index)/2;h+=V.clefProperties(e).line_shift;let c=0;h<=0&&2*h%2==0&&(c=1),h>=6&&2*h%2==0&&(c=-1);const d=void 0!==l.int_val?12*r+l.int_val:void 0,m=l.code,b=l.shift_right;let _={};if(s.length>2&&s[2]){const t=s[2].toUpperCase();_={code:this.codeNoteHead(t,n)}||{}}return Object.assign({key:o,octave:r,line:h,int_value:d,accidental:l.accidental,code:m,stroke:c,shift_right:b,displaced:!1},_)}static integerToNote(t){if(void 0===t||t<0||t>11)throw new g("BadArguments",`integerToNote() requires an integer in the range [0, 11]: ${t}`);const e={0:"C",1:"C#",2:"D",3:"D#",4:"E",5:"F",6:"F#",7:"G",8:"G#",9:"A",10:"A#",11:"B"}[t];if(!e)throw new g("BadArguments",`Unknown note value for integer: ${t}`);return e}static tabToGlyphProps(t,e=1){let i,a=0,n=0;if("X"===t.toUpperCase()){const t=new Z("accidentalDoubleSharp",V.TABLATURE_FONT_SCALE).getMetrics();if(i="accidentalDoubleSharp",null==t.width||null==t.height)throw new g("InvalidMetrics","Width and height required");a=t.width,n=-t.height/2}else a=V.textWidth(t);return{text:t,code:i,getWidth:()=>a*e,shift_y:n}}static textWidth(t){return 7*t.toString().length}static articulationCodes(t){return j[t]}static accidentalCodes(t){return H[t]}static ornamentCodes(t){return X[t]}static keySignature(t){const e=U[t];if(!e)throw new g("BadKeySignature",`Bad key signature spec: '${t}'`);if(!e.acc)return[];const i={b:[2,.5,2.5,1,3,1.5,3.5],"#":[0,1.5,-.5,1,2.5,.5,2]}[e.acc],a=[];for(let t=0;tZ.getWidth(s,t)}),a)}}V.UNISON=!0,V.SOFTMAX_FACTOR=10,V.STEM_WIDTH=1.5,V.STEM_HEIGHT=35,V.STAVE_LINE_THICKNESS=1,V.RENDER_PRECISION_PLACES=3,V.RESOLUTION=W,V.MUSIC_FONT_STACK=[],V.NOTATION_FONT_SCALE=39,V.TABLATURE_FONT_SCALE=39,V.SLASH_NOTEHEAD_WIDTH=15,V.STAVE_LINE_DISTANCE=10,V.TEXT_HEIGHT_OFFSET_HACK=1,V.accidentalMap=H,V.accidentalColumnsTable={1:{a:[1],b:[1]},2:{a:[1,2]},3:{a:[1,3,2],b:[1,2,1],second_on_bottom:[1,2,3]},4:{a:[1,3,4,2],b:[1,2,3,1],spaced_out_tetrachord:[1,2,1,2]},5:{a:[1,3,5,4,2],b:[1,2,4,3,1],spaced_out_pentachord:[1,2,3,2,1],very_spaced_out_pentachord:[1,2,1,2,1]},6:{a:[1,3,5,6,4,2],b:[1,2,4,5,3,1],spaced_out_hexachord:[1,3,2,1,3,2],very_spaced_out_hexachord:[1,2,1,2,1,2]}},V.unicode={sharp:String.fromCharCode(9839),flat:String.fromCharCode(9837),natural:String.fromCharCode(9838),triangle:String.fromCharCode(9651),"o-with-slash":String.fromCharCode(248),degrees:String.fromCharCode(176),circle:String.fromCharCode(9675)},V.validTypes={n:{name:"note"},r:{name:"rest"},h:{name:"harmonic"},m:{name:"muted"},s:{name:"slash"},g:{name:"ghost"},d:{name:"diamond"},x:{name:"x"},ci:{name:"circled"},cx:{name:"circle x"},sf:{name:"slashed"},sb:{name:"slashed backward"},sq:{name:"square"},tu:{name:"triangle up"},td:{name:"triangle down"}},V.TIME4_4={num_beats:4,beat_value:4,resolution:W};const K={"1/2":{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restDoubleWhole",rest:!0,position:"B/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},1:{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restWhole",ledger_code_head:"restWholeLegerLine",rest:!0,position:"D/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},2:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restHalf",ledger_code_head:"restHalfLegerLine",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},4:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restQuarter",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1.5,line_below:1.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},8:{common:{code_head:"",stem:!0,flag:!0,beam_count:1,stem_beam_extension:0,code_flag_upstem:"flag8thUp",code_flag_downstem:"flag8thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest8th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:1},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},16:{common:{code_head:"",beam_count:2,stem_beam_extension:0,stem:!0,flag:!0,code_flag_upstem:"flag16thUp",code_flag_downstem:"flag16thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest16th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},32:{common:{code_head:"",beam_count:3,stem_beam_extension:7.5,stem:!0,flag:!0,code_flag_upstem:"flag32ndUp",code_flag_downstem:"flag32ndDown",stem_up_extension:9,stem_down_extension:9,tabnote_stem_up_extension:9,tabnote_stem_down_extension:9,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest32nd",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},64:{common:{code_head:"",beam_count:4,stem_beam_extension:15,stem:!0,flag:!0,code_flag_upstem:"flag64thUp",code_flag_downstem:"flag64thDown",stem_up_extension:13,stem_down_extension:13,tabnote_stem_up_extension:13,tabnote_stem_down_extension:13,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest64th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},128:{common:{code_head:"",beam_count:5,stem_beam_extension:22.5,stem:!0,flag:!0,code_flag_upstem:"flag128thUp",code_flag_downstem:"flag128thDown",stem_up_extension:22,stem_down_extension:22,tabnote_stem_up_extension:22,tabnote_stem_down_extension:22,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest128th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-2.5,line_above:3,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}}};var $,J;!function(t){t[t.MOVE=0]="MOVE",t[t.LINE=1]="LINE",t[t.QUADRATIC=2]="QUADRATIC",t[t.BEZIER=3]="BEZIER"}($||($={}));class q{constructor(t,e,i){this.point=-1,this.metrics=Z.loadMetrics(t,e,i),this.bbox=Z.getOutlineBoundingBox(this.metrics.outline,this.metrics.scale,this.metrics.x_shift,this.metrics.y_shift),i&&(this.point=Z.lookupFontMetric(this.metrics.font,i,e,"point",-1))}}class Q{constructor(t,e,i,a){this.outline=t,this.originX=e,this.originY=i,this.scale=a,this.i=0,this.precision=1,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES)}done(){return this.i>=this.outline.length}next(){return Math.round(this.outline[this.i++]*this.precision/this.precision)}nextX(){return Math.round((this.originX+this.outline[this.i++]*this.scale)*this.precision)/this.precision}nextY(){return Math.round((this.originY-this.outline[this.i++]*this.scale)*this.precision)/this.precision}static parse(t){const e=[],i=t.split(" ");let a=0;for(;a{const e=t.getTickContext();n&&t.setStave(n),e.setXOffset(s)}))}}class et{static get NUM_TONES(){return this.canonical_notes.length}static get roots(){return["c","d","e","f","g","a","b"]}static get root_values(){return[0,2,4,5,7,9,11]}static get root_indices(){return{c:0,d:1,e:2,f:3,g:4,a:5,b:6}}static get canonical_notes(){return["c","c#","d","d#","e","f","f#","g","g#","a","a#","b"]}static get diatonic_intervals(){return["unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","octave"]}static get diatonic_accidentals(){return{unison:{note:0,accidental:0},m2:{note:1,accidental:-1},M2:{note:1,accidental:0},m3:{note:2,accidental:-1},M3:{note:2,accidental:0},p4:{note:3,accidental:0},dim5:{note:4,accidental:-1},p5:{note:4,accidental:0},m6:{note:5,accidental:-1},M6:{note:5,accidental:0},b7:{note:6,accidental:-1},M7:{note:6,accidental:0},octave:{note:7,accidental:0}}}static get intervals(){return{u:0,unison:0,m2:1,b2:1,min2:1,S:1,H:1,2:2,M2:2,maj2:2,T:2,W:2,m3:3,b3:3,min3:3,M3:4,3:4,maj3:4,4:5,p4:5,"#4":6,b5:6,aug4:6,dim5:6,5:7,p5:7,"#5":8,b6:8,aug5:8,6:9,M6:9,maj6:9,b7:10,m7:10,min7:10,dom7:10,M7:11,maj7:11,8:12,octave:12}}static get scales(){return{major:[2,2,1,2,2,2,1],minor:[2,1,2,2,1,2,2],ionian:[2,2,1,2,2,2,1],dorian:[2,1,2,2,2,1,2],phyrgian:[1,2,2,2,1,2,2],lydian:[2,2,2,1,2,2,1],mixolydian:[2,2,1,2,2,1,2],aeolian:[2,1,2,2,1,2,2],locrian:[1,2,2,1,2,2,2]}}static get scaleTypes(){return{M:et.scales.major,m:et.scales.minor}}static get accidentals(){return["bb","b","n","#","##"]}static get noteValues(){return{c:{root_index:0,int_val:0},cn:{root_index:0,int_val:0},"c#":{root_index:0,int_val:1},"c##":{root_index:0,int_val:2},cb:{root_index:0,int_val:11},cbb:{root_index:0,int_val:10},d:{root_index:1,int_val:2},dn:{root_index:1,int_val:2},"d#":{root_index:1,int_val:3},"d##":{root_index:1,int_val:4},db:{root_index:1,int_val:1},dbb:{root_index:1,int_val:0},e:{root_index:2,int_val:4},en:{root_index:2,int_val:4},"e#":{root_index:2,int_val:5},"e##":{root_index:2,int_val:6},eb:{root_index:2,int_val:3},ebb:{root_index:2,int_val:2},f:{root_index:3,int_val:5},fn:{root_index:3,int_val:5},"f#":{root_index:3,int_val:6},"f##":{root_index:3,int_val:7},fb:{root_index:3,int_val:4},fbb:{root_index:3,int_val:3},g:{root_index:4,int_val:7},gn:{root_index:4,int_val:7},"g#":{root_index:4,int_val:8},"g##":{root_index:4,int_val:9},gb:{root_index:4,int_val:6},gbb:{root_index:4,int_val:5},a:{root_index:5,int_val:9},an:{root_index:5,int_val:9},"a#":{root_index:5,int_val:10},"a##":{root_index:5,int_val:11},ab:{root_index:5,int_val:8},abb:{root_index:5,int_val:7},b:{root_index:6,int_val:11},bn:{root_index:6,int_val:11},"b#":{root_index:6,int_val:0},"b##":{root_index:6,int_val:1},bb:{root_index:6,int_val:10},bbb:{root_index:6,int_val:9}}}isValidNoteValue(t){return t>=0&&t=0&&t3)throw new g("BadArguments","Invalid note name: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|bb|n|#|##)?$/.exec(e);if(null!==i){return{root:i[1],accidental:i[2]}}throw new g("BadArguments","Invalid note name: "+t)}getKeyParts(t){if(!t||t.length<1)throw new g("BadArguments","Invalid key: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|#)?(mel|harm|m|M)?$/.exec(e);if(null!==i){const t=i[1],e=i[2];let a=i[3];return a||(a="M"),{root:t,accidental:e,type:a}}throw new g("BadArguments",`Invalid key: ${t}`)}getNoteValue(t){const e=et.noteValues[t];if(void 0===e)throw new g("BadArguments",`Invalid note name: ${t}`);return e.int_val}getIntervalValue(t){const e=et.intervals[t];if(void 0===e)throw new g("BadArguments",`Invalid interval name: ${t}`);return e}getCanonicalNoteName(t){if(!this.isValidNoteValue(t))throw new g("BadArguments",`Invalid note value: ${t}`);return et.canonical_notes[t]}getCanonicalIntervalName(t){if(!this.isValidIntervalValue(t))throw new g("BadArguments",`Invalid interval value: ${t}`);return et.diatonic_intervals[t]}getRelativeNoteValue(t,e,i=1){if(1!==i&&-1!==i)throw new g("BadArguments",`Invalid direction: ${i}`);let a=(t+i*e)%et.NUM_TONES;return a<0&&(a+=et.NUM_TONES),a}getRelativeNoteName(t,e){const i=this.getNoteParts(t),a=this.getNoteValue(i.root);let n=e-a;if(Math.abs(n)>et.NUM_TONES-3){let i=1;n>0&&(i=-1);const s=(e+1+(a+1))%et.NUM_TONES*i;if(Math.abs(s)>2)throw new g("BadArguments",`Notes not related: ${t}, ${e})`);n=s}if(Math.abs(n)>2)throw new g("BadArguments",`Notes not related: ${t}, ${e})`);let s=i.root;if(n>0)for(let t=1;t<=n;++t)s+="#";else if(n<0)for(let t=-1;t>=n;--t)s+="b";return s}getScaleTones(t,e){const i=[t];let a=t;for(let n=0;ne.line-t.line));const c=[];let d=0;for(let t=0;tc[i+t],s=t=>t.map(n),o=(t,e)=>{const[i,a]=s([t,e]).map((t=>t.line));return i-a},l=(...t)=>t.map(s).every((([t,e])=>!this.checkCollision(t,e))),r=a-i+1;let h,d,b=this.checkCollision(c[i],c[a])?"a":"b";switch(r){case 3:"a"===b&&.5===o(1,2)&&.5!==o(0,1)&&(b="second_on_bottom");break;case 4:l([0,2],[1,3])&&(b="spaced_out_tetrachord");break;case 5:"b"===b&&l([1,3])&&(b="spaced_out_pentachord",l([0,2],[2,4])&&(b="very_spaced_out_pentachord"));break;case 6:l([0,3],[1,4],[2,5])&&(b="spaced_out_hexachord"),l([0,2],[2,4],[1,3],[3,5])&&(b="very_spaced_out_hexachord")}if(r>=7){let e=2,i=!0;for(;!0===i;){i=!1;for(let t=0;t+ed?m:d}else for(h=t;h<=a;h++)d=V.accidentalColumnsTable[r][b][h-t],c[h].column=d,m=m>d?m:d;t=a}const b=[],_=[];for(let t=0;t<=m;t++)b[t]=0,_[t]=0;b[0]=n+d,_[0]=n,c.forEach((t=>{t.width>b[t.column]&&(b[t.column]=t.width)}));for(let t=1;t{let e=0;const i=g+t.numAcc;for(;g0?(a=e.flatLine||e.dblSharpLine?2.5:3,t.dblSharpLine&&(i-=.5)):(a=t.flatLine||t.dblSharpLine?2.5:3,e.dblSharpLine&&(i-=.5));const n=Math.abs(i){const e=new C(0,1);t.getTickables().forEach((t=>{if(t.shouldIgnoreTicks())return;const n=a[e.value()];n?n.push(t):(i.push(e.value()),a[e.value()]=[t]),e.add(t.getTicks())}))}));const s=new et;e||(e="C");const o=s.createScaleMap(e),l={};i.forEach((t=>{const e=a[t],i=[],r=t=>{if(!m(t)||t.isRest()||t.shouldIgnoreTicks())return;const e=t;e.keys.forEach(((t,a)=>{const r=s.getNoteParts(t.split("/")[0]),h=t.split("/")[1],c=r.accidental||"n",d=r.root+c;l[r.root+h]||(l[r.root+h]=o[r.root]);const m=l[r.root+h]===d,b=i.indexOf(t)>-1;if(e.getModifiers().forEach(((t,i)=>{n(t)&&t.type==c&&t.getIndex()==a&&e.getModifiers().splice(i,1)})),!m||m&&b){l[r.root+h]=d;const n=new at(c);e.addModifier(n,a),i.push(t)}})),e.getModifiers().forEach((t=>{h(t)&&t.getGraceNotes().forEach(r)}))};e.forEach(r)}))}constructor(t){super(),it("New accidental: ",t),this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE,parenLeftPadding:2,parenRightPadding:2},this.accidental=V.accidentalCodes(this.type),u(this.accidental,"ArgumentError",`Unknown accidental type: ${t}`),this.cautionary=!1,this.reset()}reset(){const t=this.render_options.font_scale;this.glyph=new Z(this.accidental.code,t),this.glyph.setOriginX(1),this.cautionary&&(this.parenLeft=new Z(V.accidentalCodes("{").code,t),this.parenRight=new Z(V.accidentalCodes("}").code,t),this.parenLeft.setOriginX(1),this.parenRight.setOriginX(1))}getWidth(){if(this.cautionary){const t=u(this.parenLeft),e=u(this.parenRight),i=t.getMetrics().width+e.getMetrics().width+this.render_options.parenLeftPadding+this.render_options.parenRightPadding;return this.glyph.getMetrics().width+i}return this.glyph.getMetrics().width}setNote(t){return u(t,"ArgumentError",`Bad note value: ${t}`),this.note=t,r(t)&&(this.render_options.font_scale=25,this.reset()),this}setAsCautionary(){return this.cautionary=!0,this.render_options.font_scale=28,this.reset(),this}draw(){const{type:t,position:e,index:i,cautionary:a,x_shift:n,y_shift:s,glyph:o,render_options:{parenLeftPadding:l,parenRightPadding:r}}=this,h=this.checkContext(),c=this.checkAttachedNote();this.setRendered();const d=c.getModifierStartXY(e,i);let m=d.x+n;const b=d.y+s;if(it("Rendering: ",t,m,b),a){const t=u(this.parenLeft),e=u(this.parenRight);e.render(h,m,b),m-=e.getMetrics().width,m-=r,m-=this.accidental.parenRightPaddingAdjustment,o.render(h,m,b),m-=o.getMetrics().width,m-=l,t.render(h,m,b)}else o.render(h,m,b)}}at.DEBUG=!1;class nt extends L{static get CATEGORY(){return x.Stem}static get UP(){return 1}static get DOWN(){return-1}static get WIDTH(){return V.STEM_WIDTH}static get HEIGHT(){return V.STEM_HEIGHT}constructor(t){super(),this.stem_up_y_offset=0,this.stem_down_y_offset=0,this.stem_up_y_base_offset=0,this.stem_down_y_base_offset=0,this.x_begin=(null==t?void 0:t.x_begin)||0,this.x_end=(null==t?void 0:t.x_end)||0,this.y_top=(null==t?void 0:t.y_top)||0,this.y_bottom=(null==t?void 0:t.y_bottom)||0,this.stem_extension=(null==t?void 0:t.stem_extension)||0,this.stem_direction=(null==t?void 0:t.stem_direction)||0,this.hide=(null==t?void 0:t.hide)||!1,this.isStemlet=(null==t?void 0:t.isStemlet)||!1,this.stemletHeight=(null==t?void 0:t.stemletHeight)||0,this.renderHeightAdjustment=0,this.setOptions(t)}setOptions(t){this.stem_up_y_offset=(null==t?void 0:t.stem_up_y_offset)||0,this.stem_down_y_offset=(null==t?void 0:t.stem_down_y_offset)||0,this.stem_up_y_base_offset=(null==t?void 0:t.stem_up_y_base_offset)||0,this.stem_down_y_base_offset=(null==t?void 0:t.stem_down_y_base_offset)||0}setNoteHeadXBounds(t,e){return this.x_begin=t,this.x_end=e,this}setDirection(t){this.stem_direction=t}setExtension(t){this.stem_extension=t}getExtension(){return this.stem_extension}setYBounds(t,e){this.y_top=t,this.y_bottom=e}getHeight(){const t=this.stem_direction===nt.UP?this.stem_up_y_offset:this.stem_down_y_offset;return(this.y_bottom-this.y_top+(nt.HEIGHT-t+this.stem_extension))*this.stem_direction}getBoundingBox(){throw new g("NotImplemented","getBoundingBox() not implemented.")}getExtents(){const t=this.stem_direction===nt.UP,e=[this.y_top,this.y_bottom],i=nt.HEIGHT+this.stem_extension,a=(t?Math.min:Math.max)(...e),n=(t?Math.max:Math.min)(...e);return{topY:a+i*-this.stem_direction,baseY:n}}setVisibility(t){return this.hide=!t,this}setStemlet(t,e){return this.isStemlet=t,this.stemletHeight=e,this}adjustHeightForFlag(){this.renderHeightAdjustment=V.currentMusicFont().lookupMetric("stem.heightAdjustmentForFlag",-3)}adjustHeightForBeam(){this.renderHeightAdjustment=-nt.WIDTH/2}draw(){if(this.setRendered(),this.hide)return;const t=this.checkContext();let e,i;const a=this.stem_direction;let n=0;a===nt.DOWN?(e=this.x_begin,i=this.y_top+this.stem_down_y_offset,n=this.stem_down_y_base_offset):(e=this.x_end,i=this.y_bottom-this.stem_up_y_offset,n=this.stem_up_y_base_offset);const s=this.getHeight();!function(...t){nt.DEBUG&&y("Vex.Flow.Stem",t)}("Rendering stem - ","Top Y: ",this.y_top,"Bottom Y: ",this.y_bottom);const o=this.isStemlet?s-this.stemletHeight*this.stem_direction:0;t.save(),this.applyStyle(),t.openGroup("stem",this.getAttribute("id"),{pointerBBox:!0}),t.beginPath(),t.setLineWidth(nt.WIDTH),t.moveTo(e,i-o+n),t.lineTo(e,i-s-this.renderHeightAdjustment*a),t.stroke(),t.closeGroup(),this.restoreStyle(),t.restore()}}function st(...t){ht.DEBUG&&y("Vex.Flow.TextFormatter",t)}nt.DEBUG=!1;const ot={},lt={},rt={};class ht{static getFontFamilies(){const t=[];for(const e in rt){const i=rt[e];t.push(Object.assign({},i))}return t}static create(t={}){st("create: ",t),t.family||(t.family=M.SANS_SERIF);const e=[],i=t.family.split(/\s*,\s*/);for(const t of i){for(const i in rt)i.startsWith(t)&&e.push(rt[i]);if(e.length>0)break}let a;if(0===e.length)a=new ht(Object.values(rt)[0]);else if(1===e.length)a=new ht(e[0]);else{const i=M.isBold(t.weight),n=M.isItalic(t.style),s=e.find((t=>t.bold===i&&t.italic===n));if(s)a=new ht(s);else{const t=e.find((t=>t.italic===n||t.bold===i));a=new ht(t||e[0])}}const n=t.size;if(void 0!==n){const t=M.convertSizeToPointValue(n);a.setFontSize(t)}return a}static getInfo(t){return rt[t]}static registerInfo(t,e=!1){st("registerInfo: ",t,e);const i=t.family;(void 0===rt[i]||e)&&(rt[i]=t)}constructor(t){this.family="",this.size=14,this.resolution=1e3,this.glyphs={},this.serifs=!1,this.monospaced=!1,this.italic=!1,this.bold=!1,this.superscriptOffset=0,this.subscriptOffset=0,this.maxSizeGlyph="@",this.cacheKey="",this.updateParams(t)}get localHeightCache(){var t;return void 0===lt[this.cacheKey]&&(lt[this.cacheKey]={}),null!==(t=lt[this.cacheKey])&&void 0!==t?t:{}}updateParams(t){t.family&&(this.family=t.family),t.resolution&&(this.resolution=t.resolution),t.glyphs&&(this.glyphs=t.glyphs),t.serifs&&(this.serifs=t.serifs),t.monospaced&&(this.monospaced=t.monospaced),t.italic&&(this.italic=t.italic),t.bold&&(this.bold=t.bold),t.maxSizeGlyph&&(this.maxSizeGlyph=t.maxSizeGlyph),t.superscriptOffset&&(this.superscriptOffset=t.superscriptOffset),t.subscriptOffset&&(this.subscriptOffset=t.subscriptOffset),this.updateCacheKey()}updateCacheKey(){const t=this.family.replace(/\s+/g,"_"),e=this.size,i=this.bold?P.BOLD:P.NORMAL,a=this.italic?k.ITALIC:k.NORMAL;this.cacheKey=`${t}%${e}%${i}%${a}`}getGlyphMetrics(t){return this.glyphs[t]?this.glyphs[t]:this.glyphs[this.maxSizeGlyph]}get maxHeight(){return this.getGlyphMetrics(this.maxSizeGlyph).ha/this.resolution*this.fontSizeInPixels}getWidthForCharacterInEm(t){var e;const i=this.getGlyphMetrics(t);if(i){return(null!==(e=i.advanceWidth)&&void 0!==e?e:0)/this.resolution}return.65}getYForCharacterInPx(t){const e=this.getGlyphMetrics(t),i={yMin:0,yMax:this.maxHeight,height:this.maxHeight};return e?("number"==typeof e.y_min&&(i.yMin=e.y_min/this.resolution*this.fontSizeInPixels),"number"==typeof e.y_max&&(i.yMax=e.y_max/this.resolution*this.fontSizeInPixels),i.height=i.yMax-i.yMin,i):i}getYForStringInPx(t){const e=this.localHeightCache,i={yMin:0,yMax:this.maxHeight,height:this.maxHeight},a=e[t];if(void 0!==a)return a;for(let e=0;et>e?t:e)),r+=(this.text_line+1)*V.STAVE_LINE_DISTANCE+o,d&&i===nt.DOWN&&(r=Math.max(r,h.topY+o+c*this.text_line))}else if(this.verticalJustification===dt.CENTER){const t=e.getYForTopText(this.text_line)-1;r=t+(m.getYForBottomText(this.text_line)-t)/2+o/2}else if(this.verticalJustification===dt.TOP){r=Math.min(...e.getYs())-(this.text_line+1)*V.STAVE_LINE_DISTANCE,d&&i===nt.UP&&(c=h.topY=1}function pt(t,e){return gt(t,e)?e===bt?Math.ceil:Math.floor:Math.round}const ut=t=>m(t)||r(t);class yt extends tt{static get CATEGORY(){return x.Articulation}static format(t,e){if(!t||0===t.length)return!1;let i=0;const a=(t,e,i)=>xt(pt(e,i),u(t.glyph.getMetrics().height)/10+.5);t.forEach((t=>{const n=t.checkAttachedNote();i=Math.max(n.getGlyphProps().getWidth(),i);let s=5;const o=n.hasStem()?n.getStemDirection():nt.UP;let l=0;if(b(n)){const t=n.getStem();t&&(l=Math.abs(t.getHeight())/V.STAVE_LINE_DISTANCE)}const r=n.getStave();if(r&&(s=r.getNumLines()),t.getPosition()===bt){let i=n.getLineNumber(!0);o===nt.UP&&(i+=l);let r=a(t,e.top_text_line,bt);const h=i+e.top_text_line+.5;!t.articulation.between_lines&&ht.getWidth())).reduce(((t,e)=>Math.max(e,t))),s=Math.min(Math.max(n-i,0),Math.max(n-(e.left_shift+e.right_shift),0));return e.left_shift+=s/2,e.right_shift+=s/2,!0}static easyScoreHook({articulations:t},e,i){if(!t)return;const a={staccato:"a.",tenuto:"a-",accent:"a>"};t.split(",").map((t=>t.trim().split("."))).map((([t,e])=>{const n={type:a[t]};return e&&(n.position=tt.PositionString[e]),i.getFactory().Articulation(n)})).map((t=>e.addModifier(t,0)))}constructor(t){super(),this.type=t,this.position=bt,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.reset()}reset(){this.articulation=V.articulationCodes(this.type),this.articulation||(this.articulation={code:this.type,between_lines:!1},this.type.endsWith("Above")&&(this.position=bt),this.type.endsWith("Below")&&(this.position=_t));const t=(this.position===bt?this.articulation.aboveCode:this.articulation.belowCode)||this.articulation.code;this.glyph=new Z(null!=t?t:"",this.render_options.font_scale),u(this.glyph,"ArgumentError",`Articulation not found: ${this.type}`),this.setWidth(u(this.glyph.getMetrics().width))}setBetweenLines(t=!0){return this.articulation.between_lines=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=this.checkIndex(),{position:a,glyph:n,text_line:s}=this,o=this.articulation.between_lines,l=e.checkStave(),r=l.getSpacingBetweenLines(),h=_(e),{x:c}=e.getModifierStartXY(a,i),d=!o||h,m=function(t,e){const i=e===bt&&t.getStemDirection()===nt.UP||e===_t&&t.getStemDirection()===nt.DOWN;return ut(t)?t.hasStem()&&i?.5:1:t.hasStem()&&i?1:0}(e,a),b=V.currentMusicFont().lookupMetric(`articulation.${n.getCode()}.padding`,0);let x={[bt]:()=>{n.setOrigin(.5,1);const t=function(t,e){const i=t.getStemDirection(),{topY:a,baseY:n}=t.getStemExtents();if(ut(t))return t.hasStem()?i===nt.UP?a:n:Math.min(...t.getYs());if(_(t))return t.hasStem()&&i===nt.UP?a:t.checkStave().getYForTopText(e);throw new g("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,s)-(s+m)*r;return d?Math.min(l.getYForTopText(yt.INITIAL_OFFSET),t):t},[_t]:()=>{n.setOrigin(.5,0);const t=function(t,e){const i=t.getStemDirection(),{topY:a,baseY:n}=t.getStemExtents();if(ut(t))return t.hasStem()?i===nt.UP?n:a:Math.max(...t.getYs());if(_(t))return t.hasStem()?i===nt.UP?t.checkStave().getYForBottomText(e):a:t.checkStave().getYForBottomText(e);throw new g("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,s)+(s+m)*r;return d?Math.max(l.getYForBottomText(yt.INITIAL_OFFSET),t):t}}[a]();if(!h){const t=a===bt?-1:1,s=e.getKeyProps()[i].line,l=(e.getYs()[i]-x)/r+Number(s),h=function(t,e,i,a){const n=xt(pt(e,i),e);if(t&>(n,i)&&n%1==0)return n+.5*-a;return n}(o,l,a,t);gt(h,a)&&n.setOrigin(.5,.5),x+=Math.abs(h-l)*r*t+b*t}!function(...t){yt.DEBUG&&y("Vex.Flow.Articulation",t)}(`Rendering articulation at (x: ${c}, y: ${x})`),n.render(t,c,x)}}yt.DEBUG=!1,yt.INITIAL_OFFSET=-.5;class ft{static get CATEGORY(){return x.RenderContext}set font(t){this.setFont(t)}get font(){return this.getFont()}setRawFont(t){return this.setFont(t),this}}function St(t,e,i,a="#F55"){t.save(),t.setFillStyle(a),t.beginPath(),t.arc(e,i,3,0,2*Math.PI,!1),t.closePath(),t.fill(),t.restore()}class Tt extends L{static get CATEGORY(){return x.Tickable}constructor(){super(),this._preFormatted=!1,this._postFormatted=!1,this.ticks=new C(0,1),this.intrinsicTicks=0,this.tickMultiplier=new C(1,1),this.width=0,this.x_shift=0,this.modifiers=[],this.tupletStack=[],this.align_center=!1,this.center_x_shift=0,this.ignore_ticks=!1,this.formatterMetrics={freedom:{left:0,right:0},duration:"",iterations:0,space:{used:0,mean:0,deviation:0}}}reset(){return this}getTicks(){return this.ticks}shouldIgnoreTicks(){return this.ignore_ticks}setIgnoreTicks(t){return this.ignore_ticks=t,this}setWidth(t){this.width=t}getWidth(){if(!this._preFormatted)throw new g("UnformattedNote","Can't call GetWidth on an unformatted note.");return this.width+(this.modifierContext?this.modifierContext.getWidth():0)}setXShift(t){return this.x_shift=t,this}getXShift(){return this.x_shift}getX(){return this.checkTickContext("Can't getX() without a TickContext.").getX()+this.x_shift}getFormatterMetrics(){return this.formatterMetrics}getCenterXShift(){return this.isCenterAligned()?this.center_x_shift:0}setCenterXShift(t){return this.center_x_shift=t,this}isCenterAligned(){return this.align_center}setCenterAlignment(t){return this.align_center=t,this}getVoice(){return u(this.voice,"NoVoice","Tickable has no voice.")}setVoice(t){this.voice=t}getTuplet(){return this.tuplet}getTupletStack(){return this.tupletStack}resetTuplet(t){let e,i;if(t){const a=this.tupletStack.indexOf(t);return-1!==a&&(this.tupletStack.splice(a,1),e=t.getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i)),this}for(;this.tupletStack.length;)e=(t=this.tupletStack.pop()).getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i);return this}setTuplet(t){if(t){this.tupletStack.push(t);const e=t.getNoteCount(),i=t.getNotesOccupied();this.applyTickMultiplier(i,e)}return this.tuplet=t,this}addToModifierContext(t){this.modifierContext=t;for(let t=0;t0){const a=_.space.deviation,n=a>=0?"+":"";t.setFillStyle("red"),t.fillText(n+Math.round(a),o+e.getXShift(),i-10)}t.restore()}static parseDuration(t){if(!t)return;const e=/(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/.exec(t);if(!e)return;return{duration:e[1],dots:e[2].length,type:e[3]||"n"}}static parseNoteStruct(t){const e=vt.parseDuration(t.duration);if(!e)return;let i=t.type;if(i&&!V.validTypes[i])return;const a=[];i||(i=e.type||"n",void 0!==t.keys&&t.keys.forEach(((t,e)=>{const n=t.split("/");a[e]=n&&3===n.length?n[2]:i})));let n=V.durationToTicks(e.duration);if(!n)return;const s=t.dots?t.dots:e.dots;if("number"!=typeof s)return;let o=n;for(let t=0;tV.getGlyphProps(this.duration,t))),this.playNote=void 0,this.ignore_ticks=!1,this.width=0,this.leftDisplacedHeadPx=0,this.rightDisplacedHeadPx=0,this.x_shift=0,this.ys=[],t.align_center&&this.setCenterAlignment(t.align_center),this.render_options={annotation_spacing:5,glyph_font_scale:1,stroke_px:1,scale:1,font:"",y_shift:0}}getPlayNote(){return this.playNote}setPlayNote(t){return this.playNote=t,this}isRest(){return!1}addStroke(t,e){return e.setNote(this),e.setIndex(t),this.modifiers.push(e),this.preFormatted=!1,this}getStave(){return this.stave}checkStave(){return u(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this.setYs([t.getYForLine(0)]),this.setContext(this.stave.getContext()),this}getLeftDisplacedHeadPx(){return this.leftDisplacedHeadPx}getRightDisplacedHeadPx(){return this.rightDisplacedHeadPx}setLeftDisplacedHeadPx(t){return this.leftDisplacedHeadPx=t,this}setRightDisplacedHeadPx(t){return this.rightDisplacedHeadPx=t,this}shouldIgnoreTicks(){return this.ignore_ticks}getLineNumber(t){return 0}getLineForRest(){return 0}getGlyph(){return this.glyphProps}getGlyphProps(){return this.glyphProps}getGlyphWidth(){return this.glyphProps.getWidth(this.render_options.glyph_font_scale)}setYs(t){return this.ys=t,this}getYs(){if(0===this.ys.length)throw new g("NoYValues","No Y-values calculated for this note.");return this.ys}getYForTopText(t){return this.checkStave().getYForTopText(t)}getVoice(){if(!this.voice)throw new g("NoVoice","Note has no voice.");return this.voice}setVoice(t){return this.voice=t,this.preFormatted=!1,this}getTickContext(){return this.checkTickContext()}setTickContext(t){return this.tickContext=t,this.preFormatted=!1,this}getDuration(){return this.duration}isDotted(){return this.getModifiersByType(x.Dot).length>0}hasStem(){return!1}getNoteType(){return this.noteType}getBeam(){return this.beam}checkBeam(){return u(this.beam,"NoBeam","No beam attached to instance")}hasBeam(){return null!=this.beam}setBeam(t){return this.beam=t,this}addModifier(t,e=0){const i="Note.addModifier(modifier: Modifier, index: number=0)";if("string"==typeof e&&(e=parseInt(e),console.warn(i+" expected a number for `index`, but received a string.")),"object"!=typeof t||"number"!=typeof e)throw new g("WrongParams","Incorrect call signature. Use "+i+" instead.");return t.setNote(this),t.setIndex(e),super.addModifier(t),this}getModifiersByType(t){return this.modifiers.filter((e=>e.getCategory()===t))}getModifierStartXY(t,e,i){if(!this.preFormatted)throw new g("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");return{x:this.getAbsoluteX(),y:this.ys[0]}}getRightParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getRightDisplacedHeadPx():0}getLeftParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getLeftDisplacedHeadPx()-this.x_shift:-this.x_shift}getFirstDotPx(){let t=this.getRightDisplacedHeadPx();return 0!==this.checkModifierContext().getMembers("Parenthesis").length&&(t+=V.currentMusicFont().lookupMetric("parenthesis.default.width")),t}getMetrics(){if(!this.preFormatted)throw new g("UnformattedNote","Can't call getMetrics on an unformatted note.");const t=this.modifierContext?this.modifierContext.getState().left_shift:0,e=this.modifierContext?this.modifierContext.getState().right_shift:0,i=this.getWidth();return{width:i,glyphWidth:this.getGlyphWidth(),notePx:i-t-e-this.leftDisplacedHeadPx-this.rightDisplacedHeadPx,modLeftPx:t,modRightPx:e,leftDisplacedHeadPx:this.leftDisplacedHeadPx,rightDisplacedHeadPx:this.rightDisplacedHeadPx,glyphPx:0}}getAbsoluteX(){let t=this.checkTickContext("Can't getAbsoluteX() without a TickContext.").getX();return this.stave&&(t+=this.stave.getNoteStartX()+V.currentMusicFont().lookupMetric("stave.padding")),this.isCenterAligned()&&(t+=this.getCenterXShift()),t}static getPoint(t){return"default"==t?V.NOTATION_FONT_SCALE:V.NOTATION_FONT_SCALE/5*3}getStemDirection(){throw new g("NoStem","No stem attached to this note.")}getStemExtents(){throw new g("NoStem","No stem attached to this note.")}getTieRightX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t+=-this.width/2+this.width+2,t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t-=this.width/2+2,t}getKeys(){return this.keys}getKeyProps(){return this.keyProps}}var wt,Ct,Dt,Bt,Et,Pt;!function(t){t[t.CENTER=0]="CENTER",t[t.LEFT=1]="LEFT",t[t.RIGHT=2]="RIGHT",t[t.ABOVE=3]="ABOVE",t[t.BELOW=4]="BELOW",t[t.BEGIN=5]="BEGIN",t[t.END=6]="END"}(wt||(wt={}));class kt extends L{static get CATEGORY(){return x.StaveModifier}static get Position(){return wt}constructor(){super(),this.width=0,this.x=0,this.padding=10,this.position=wt.ABOVE}getPosition(){return this.position}setPosition(t){return this.position=t,this}getStave(){return this.stave}checkStave(){return u(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this}getWidth(){return this.width}setWidth(t){return this.width=t,this}getX(){return this.x}setX(t){return this.x=t,this}placeGlyphOnLine(t,e,i,a=0){t.setYShift(e.getYForLine(null!=i?i:0)-e.getYForGlyphs()+a)}getPadding(t){return void 0!==t&&t<2?0:this.padding}setPadding(t){return this.padding=t,this}setLayoutMetrics(t){return this.layoutMetrics=t,this}getLayoutMetrics(){return this.layoutMetrics}draw(...t){}}!function(t){t[t.SINGLE=1]="SINGLE",t[t.DOUBLE=2]="DOUBLE",t[t.END=3]="END",t[t.REPEAT_BEGIN=4]="REPEAT_BEGIN",t[t.REPEAT_END=5]="REPEAT_END",t[t.REPEAT_BOTH=6]="REPEAT_BOTH",t[t.NONE=7]="NONE"}(Ct||(Ct={}));class Nt extends kt{static get CATEGORY(){return x.Barline}static get type(){return Ct}static get typeString(){return{single:Ct.SINGLE,double:Ct.DOUBLE,end:Ct.END,repeatBegin:Ct.REPEAT_BEGIN,repeatEnd:Ct.REPEAT_END,repeatBoth:Ct.REPEAT_BOTH,none:Ct.NONE}}constructor(t){super(),this.thickness=V.STAVE_LINE_THICKNESS;const e=Ct;this.widths={},this.widths[e.SINGLE]=5,this.widths[e.DOUBLE]=5,this.widths[e.END]=5,this.widths[e.REPEAT_BEGIN]=5,this.widths[e.REPEAT_END]=5,this.widths[e.REPEAT_BOTH]=5,this.widths[e.NONE]=5,this.paddings={},this.paddings[e.SINGLE]=0,this.paddings[e.DOUBLE]=0,this.paddings[e.END]=0,this.paddings[e.REPEAT_BEGIN]=15,this.paddings[e.REPEAT_END]=15,this.paddings[e.REPEAT_BOTH]=15,this.paddings[e.NONE]=0,this.layoutMetricsMap={},this.layoutMetricsMap[e.SINGLE]={xMin:0,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.DOUBLE]={xMin:-3,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.END]={xMin:-5,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_END]={xMin:-10,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BEGIN]={xMin:-2,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BOTH]={xMin:-10,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.NONE]={xMin:0,xMax:0,paddingLeft:5,paddingRight:5},this.setPosition(wt.BEGIN),this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?Nt.typeString[t]:t,this.setWidth(this.widths[this.type]),this.setPadding(this.paddings[this.type]),this.setLayoutMetrics(this.layoutMetricsMap[this.type]),this}draw(t){const e=t.checkContext();switch(this.setRendered(),this.applyStyle(e),e.openGroup("stavebarline",this.getAttribute("id")),this.type){case Ct.SINGLE:this.drawVerticalBar(t,this.x,!1);break;case Ct.DOUBLE:this.drawVerticalBar(t,this.x,!0);break;case Ct.END:this.drawVerticalEndBar(t,this.x);break;case Ct.REPEAT_BEGIN:this.drawRepeatBar(t,this.x,!0),t.getX()!==this.x&&this.drawVerticalBar(t,t.getX());break;case Ct.REPEAT_END:this.drawRepeatBar(t,this.x,!1);break;case Ct.REPEAT_BOTH:this.drawRepeatBar(t,this.x,!1),this.drawRepeatBar(t,this.x,!0)}e.closeGroup(),this.restoreStyle(e)}drawVerticalBar(t,e,i){const a=t.checkContext(),n=t.getTopLineTopY(),s=t.getBottomLineBottomY();i&&a.fillRect(e-3,n,1,s-n),a.fillRect(e,n,1,s-n)}drawVerticalEndBar(t,e){const i=t.checkContext(),a=t.getTopLineTopY(),n=t.getBottomLineBottomY();i.fillRect(e-5,a,1,n-a),i.fillRect(e-2,a,3,n-a)}drawRepeatBar(t,e,i){const a=t.checkContext(),n=t.getTopLineTopY(),s=t.getBottomLineBottomY();let o=3;i||(o=-5),a.fillRect(e+o,n,1,s-n),a.fillRect(e-2,n,3,s-n);i?o+=4:o-=4;const l=e+o+1;let r=(t.getNumLines()-1)*t.getSpacingBetweenLines();r=r/2-t.getSpacingBetweenLines()/2;let h=n+r+1;a.beginPath(),a.arc(l,h,2,0,2*Math.PI,!1),a.fill(),h+=t.getSpacingBetweenLines(),a.beginPath(),a.arc(l,h,2,0,2*Math.PI,!1),a.fill()}}class At extends vt{static get CATEGORY(){return x.BarNote}constructor(t=Ct.SINGLE){super({duration:"b"}),this.metrics={widths:{}};const e=Ct;this.metrics.widths={[e.SINGLE]:8,[e.DOUBLE]:12,[e.END]:15,[e.REPEAT_BEGIN]:14,[e.REPEAT_END]:14,[e.REPEAT_BOTH]:18,[e.NONE]:0},this.ignore_ticks=!0,this.setType(t),this.barline=new Nt(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?Nt.typeString[t]:t,this.setWidth(this.metrics.widths[this.type]),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkContext();!function(...t){At.DEBUG&&y("Vex.Flow.BarNote",t)}("Rendering bar line at: ",this.getAbsoluteX()),this.applyStyle(t),t.openGroup("barnote",this.getAttribute("id")),this.barline.setType(this.type),this.barline.setX(this.getAbsoluteX()),this.barline.draw(this.checkStave()),t.closeGroup(),this.restoreStyle(t),this.setRendered()}}At.DEBUG=!1;class Ft extends tt{static get CATEGORY(){return x.Bend}static get UP(){return 0}static get DOWN(){return 1}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let a=0;at{const s=t+a,o=i;e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,i),e.quadraticCurveTo(s,o,t+a,n),e.stroke(),e.restore()},c=(t,i,a,n)=>{e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,n),e.quadraticCurveTo(t+a,n,t+a,i),e.stroke(),e.restore()},d=(t,i,a)=>{const n=i+4*a;e.beginPath(),e.moveTo(t,i),e.lineTo(t-4,n),e.lineTo(t+4,n),e.closePath(),e.fill()},m=(t,i)=>{e.save(),e.setFont(this.textFont);const a=t-e.measureText(i).width/2;e.fillText(i,a,r),e.restore()};let b,_=0,x=0;if(null===(t=this.tap)||void 0===t?void 0:t.length){m(i.getModifierStartXY(tt.Position.CENTER,this.index).x,this.tap)}for(let t=0;t0){const e=h.symbolBlocks[t-1];Ot.isSuperscript(e)||(n=a)}s&&n>0&&(g=!0,e.xShift=e.xShift+(n-a),a=n,n=0,h.setEnableKerning(!1)),i||s||(n=0),e.vAlign=g,a+=e.width,_=a}if(h.updateKerningAdjustments(),h.updateOverBarAdjustments(),h.getVertical()===Bt.TOP?(h.setTextLine(e.top_text_line),e.top_text_line+=x):(h.setTextLine(e.text_line+1),e.text_line+=x+1),h.getReportWidth()&&b(m)){const t=m.getGlyphProps().getWidth();h.getHorizontal()===Dt.LEFT?(l=Math.max(t,l),s=Math.max(s,_)+Ot.minPadding):h.getHorizontal()===Dt.RIGHT?(r=Math.max(t,r),o=Math.max(o,_)):(s=Math.max(s,_/2)+Ot.minPadding,o=Math.max(o,_/2),l=Math.max(t/2,l),r=Math.max(t/2,r))}a=0}const h=Math.min(Math.max(o-r,0),Math.max(o-e.right_shift,0)),c=Math.min(Math.max(s-l,0),Math.max(s-e.left_shift,0));return e.left_shift+=c,e.right_shift+=h,!0}constructor(){super(),this.symbolBlocks=[],this.horizontal=Dt.LEFT,this.vertical=Bt.TOP,this.useKerning=!0,this.reportWidth=!0,this.resetFont()}static get TEXT_FONT(){let t="Roboto Slab, Times, serif";return"Petaluma"===V.currentMusicFont().getName()&&(t="PetalumaScript, Arial, sans-serif"),{family:t,size:12,weight:P.NORMAL,style:k.NORMAL}}get superscriptOffset(){return Ot.superscriptOffset*this.textFormatter.fontSizeInPixels}get subscriptOffset(){return Ot.subscriptOffset*this.textFormatter.fontSizeInPixels}setReportWidth(t){return this.reportWidth=t,this}getReportWidth(){return this.reportWidth}updateOverBarAdjustments(){const t=this.symbolBlocks.findIndex((({symbolType:t,glyph:e})=>t===Et.GLYPH&&void 0!==e&&"csymDiagonalArrangementSlash"===e.code));if(t<0)return;const e=this.symbolBlocks[t].width/4,i=.25*this.textFormatter.fontSizeInPixels;let a=0;for(;a0?this.symbolBlocks[t-1]:void 0;let a=0;e.symbolType===Et.GLYPH&&void 0!==e.glyph&&e.glyph.code===Ot.glyphs.over.code&&(a+=e.glyph.metrics.x_shift),void 0!==i&&i.symbolType===Et.GLYPH&&void 0!==i.glyph&&i.glyph.code===Ot.glyphs.over.code&&(a+=i.glyph.metrics.x_shift);let n=!1,s=!1;void 0!==i&&i.symbolType===Et.TEXT&&(n=Ot.upperKerningText.some((t=>t===i.text[i.text.length-1])),s=Ot.lowerKerningText.some((t=>t===i.text[i.text.length-1])));const o=Ot.kerningOffset*this.textFormatter.fontSizeInPixels;return n&&e.symbolModifier===Pt.SUPERSCRIPT&&(a+=o),s&&e.symbolType===Et.TEXT&&(e.text[0]>="a"&&e.text[0]<="z"&&(a+=o/2),Ot.upperKerningText.some((t=>t===(null==i?void 0:i.text[i.text.length-1])))&&(a+=o/2)),a}getSymbolBlock(t={}){var e,i,a;const n=null!==(e=t.symbolType)&&void 0!==e?e:Et.TEXT,s={text:null!==(i=t.text)&&void 0!==i?i:"",symbolType:n,symbolModifier:null!==(a=t.symbolModifier)&&void 0!==a?a:Pt.NONE,xShift:0,yShift:0,vAlign:!1,width:0};if(n===Et.GLYPH&&"string"==typeof t.glyph){const e=Ot.glyphs[t.glyph],i=20;s.glyph=new Z(e.code,i,{category:"chordSymbol"})}else n===Et.TEXT?s.width=this.textFormatter.getWidthForTextInEm(s.text):n===Et.LINE&&(s.width=t.width);return s}addSymbolBlock(t){return this.symbolBlocks.push(this.getSymbolBlock(t)),this}addText(t,e={}){const i=Et.TEXT;return this.addSymbolBlock(Object.assign(Object.assign({},e),{text:t,symbolType:i}))}addTextSuperscript(t){const e=Et.TEXT,i=Pt.SUPERSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addTextSubscript(t){const e=Et.TEXT,i=Pt.SUBSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addGlyphSuperscript(t){const e=Et.GLYPH,i=Pt.SUPERSCRIPT;return this.addSymbolBlock({glyph:t,symbolType:e,symbolModifier:i})}addGlyph(t,e={}){const i=Et.GLYPH;return this.addSymbolBlock(Object.assign(Object.assign({},e),{glyph:t,symbolType:i}))}addGlyphOrText(t,e={}){let i="";for(let a=0;a0&&(this.addText(i,e),i=""),this.addGlyph(n,e)):i+=n}return i.length>0&&this.addText(i,e),this}addLine(t,e={}){const i=Et.LINE;return this.addSymbolBlock(Object.assign(Object.assign({},e),{symbolType:i,width:t}))}setFont(t,e,i,a){return super.setFont(t,e,i,a),this.textFormatter=ht.create(this.textFont),this}setEnableKerning(t){return this.useKerning=t,this}setVertical(t){return this.vertical="string"==typeof t?Ot.VerticalJustifyString[t]:t,this}getVertical(){return this.vertical}setHorizontal(t){return this.horizontal="string"==typeof t?Ot.HorizontalJustifyString[t]:t,this}getHorizontal(){return this.horizontal}getWidth(){let t=0;return this.symbolBlocks.forEach((e=>{t+=e.vAlign?0:e.width})),t}getYOffsetForText(t){var e;let i=0,a=0;for(a=0;a0?i/n*-1:0}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),t.save(),this.applyStyle(),t.openGroup("chordsymbol",this.getAttribute("id"));const i=e.getModifierStartXY(tt.Position.ABOVE,this.index);let a;t.setFont(this.textFont);const n=e.hasStem(),s=e.checkStave();if(this.vertical===Bt.BOTTOM){if(a=s.getYForBottomText(this.text_line+V.TEXT_HEIGHT_OFFSET_HACK),n){const t=e.checkStem().getExtents(),i=s.getSpacingBetweenLines(),n=1===e.getStemDirection()?t.baseY:t.topY;a=Math.max(a,n+i*(this.text_line+2))}}else{const t=Math.min(...e.getYs());if(a=Math.min(s.getYForTopText(this.text_line),t-10),n){const t=e.checkStem().getExtents(),i=s.getSpacingBetweenLines();a=Math.min(a,t.topY-5-i*this.text_line)}}let o=i.x;o=this.horizontal===Dt.LEFT?i.x:this.horizontal===Dt.RIGHT?i.x+this.getWidth():this.horizontal===Dt.CENTER?i.x-this.getWidth()/2:e.getStemX()-this.getWidth()/2,Mt("Rendering ChordSymbol: ",this.textFormatter,o,a),this.symbolBlocks.forEach((e=>{const i=Ot.isSuperscript(e),n=Ot.isSubscript(e);let s=a;if(Mt("shift was ",e.xShift,e.yShift),Mt("curY pre sub ",s),i&&(s+=this.superscriptOffset),n&&(s+=this.subscriptOffset),Mt("curY sup/sub ",s),e.symbolType===Et.TEXT){if((i||n)&&(t.save(),this.textFont)){const{family:e,size:i,weight:a,style:n}=this.textFont,s=M.scaleSize(i,Ot.superSubRatio);t.setFont(e,s,a,n)}Mt("Rendering Text: ",e.text,o+e.xShift,s+e.yShift),t.fillText(e.text,o+e.xShift,s+e.yShift),(i||n)&&t.restore()}else e.symbolType===Et.GLYPH&&e.glyph?(s+=e.yShift,Mt("Rendering Glyph: ",e.glyph.code,o+e.xShift,s),e.glyph.render(t,o+e.xShift,s)):e.symbolType===Et.LINE&&(Mt("Rendering Line : ",e.width,o,s),t.beginPath(),t.setLineWidth(1),t.moveTo(o,a),t.lineTo(o+e.width,s),t.stroke());o+=e.width,e.vAlign&&(o+=e.xShift)})),t.closeGroup(),this.restoreStyle(),t.restore()}}Ot.DEBUG=!1,Ot.HorizontalJustify=Dt,Ot.HorizontalJustifyString={left:Dt.LEFT,right:Dt.RIGHT,center:Dt.CENTER,centerStem:Dt.CENTER_STEM},Ot.VerticalJustify=Bt,Ot.VerticalJustifyString={top:Bt.TOP,above:Bt.TOP,below:Bt.BOTTOM,bottom:Bt.BOTTOM},Ot.glyphs={diminished:{code:"csymDiminished"},dim:{code:"csymDiminished"},halfDiminished:{code:"csymHalfDiminished"},"+":{code:"csymAugmented"},augmented:{code:"csymAugmented"},majorSeventh:{code:"csymMajorSeventh"},minor:{code:"csymMinor"},"-":{code:"csymMinor"},"(":{code:"csymParensLeftTall"},leftParen:{code:"csymParensLeftTall"},")":{code:"csymParensRightTall"},rightParen:{code:"csymParensRightTall"},leftBracket:{code:"csymBracketLeftTall"},rightBracket:{code:"csymBracketRightTall"},leftParenTall:{code:"csymParensLeftVeryTall"},rightParenTall:{code:"csymParensRightVeryTall"},"/":{code:"csymDiagonalArrangementSlash"},over:{code:"csymDiagonalArrangementSlash"},"#":{code:"accidentalSharp"},b:{code:"accidentalFlat"}},Ot.symbolTypes=Et,Ot.symbolModifiers=Pt,Ot.noFormat=!1;class Rt extends tt{static get CATEGORY(){return x.Dot}static getDots(t){return t.getModifiersByType(Rt.CATEGORY)}static buildAndAttach(t,e){for(const i of t)if(null==e?void 0:e.all)for(let t=0;te.line-t.line));let s=i,o=0,l=null,r=null,h=null,c=0;for(let t=0;to?s:o,l=m,r=i}return e.right_shift+=o,!0}constructor(){super(),this.position=tt.Position.RIGHT,this.radius=2,this.setWidth(5),this.dot_shiftY=0}setNote(t){return this.note=t,r(t)&&(this.radius*=.5,this.setWidth(3)),this}setDotShiftY(t){return this.dot_shiftY=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.checkStave().getSpacingBetweenLines(),a=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0});_(e)&&(a.y=e.getStemExtents().baseY);const n=a.x+this.x_shift+this.width-this.radius,s=a.y+this.y_shift+this.dot_shiftY*i;t.beginPath(),t.arc(n,s,this.radius,0,2*Math.PI,!1),t.fill()}}class Lt extends tt{static get CATEGORY(){return x.FretHandFinger}static format(t,e){const{left_shift:i,right_shift:a}=e;if(!t||0===t.length)return!1;const n=[];let s=null,o=0,l=0;for(let r=0;re.line-t.line));let r=0,h=0,c=0,d=0,m=null,b=null;for(let t=0;tc?e:c):o===tt.Position.RIGHT&&(_.setXShift(h),e=l+u,d=e>d?e:d),m=x,b=s}return e.left_shift+=c,e.right_shift+=d,!0}static easyScoreHook({fingerings:t}={},e,i){null==t||t.split(",").map((t=>{const e=t.trim().split("."),a={number:e[0]};return e[1]&&(a.position=e[1]),i.getFactory().Fingering(a)})).map(((t,i)=>e.addModifier(t,i)))}constructor(t){super(),this.finger=t,this.width=7,this.position=tt.Position.LEFT,this.x_shift=0,this.y_shift=0,this.x_offset=0,this.y_offset=0,this.resetFont()}setFretHandFinger(t){return this.finger=t,this}getFretHandFinger(){return this.finger}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let a=i.x+this.x_shift+this.x_offset,n=i.y+this.y_shift+this.y_offset+5;switch(this.position){case tt.Position.ABOVE:a-=4,n-=12;break;case tt.Position.BELOW:a-=2,n+=10;break;case tt.Position.LEFT:a-=this.width;break;case tt.Position.RIGHT:a+=1;break;default:throw new g("InvalidPosition",`The position ${this.position} does not exist`)}t.save(),t.setFont(this.textFont),t.fillText(""+this.finger,a,n),t.restore()}}Lt.TEXT_FONT={family:M.SANS_SERIF,size:9,weight:P.BOLD,style:k.NORMAL};class Wt extends vt{static get CATEGORY(){return x.NoteHead}constructor(t){super(t),this.custom_glyph=!1,this.stem_up_x_offset=0,this.stem_down_x_offset=0,this.index=t.index,this.x=t.x||0,this.y=t.y||0,t.note_type&&(this.noteType=t.note_type),this.displaced=t.displaced||!1,this.stem_direction=t.stem_direction||nt.UP,this.line=t.line||0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),u(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),(this.line>5||this.line<0)&&this.glyphProps.ledger_code_head&&(this.glyphProps.code_head=this.glyphProps.ledger_code_head),this.glyph_code=this.glyphProps.code_head,this.x_shift=t.x_shift||0,t.custom_glyph_code&&(this.custom_glyph=!0,this.glyph_code=t.custom_glyph_code,this.stem_up_x_offset=t.stem_up_x_offset||0,this.stem_down_x_offset=t.stem_down_x_offset||0),this.setStyle(t.style),this.slashed=t.slashed||!1,this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE}),this.setWidth(!this.custom_glyph||this.glyph_code.startsWith("noteheadSlashed")||this.glyph_code.startsWith("noteheadCircled")?this.glyphProps.getWidth(this.render_options.glyph_font_scale):Z.getWidth(this.glyph_code,this.render_options.glyph_font_scale))}getWidth(){return this.width}isDisplaced(){return!0===this.displaced}setX(t){return this.x=t,this}getY(){return this.y}setY(t){return this.y=t,this}getLine(){return this.line}setLine(t){return this.line=t,this}getAbsoluteX(){const t=this.preFormatted?super.getAbsoluteX():this.x,e=nt.WIDTH/2,i=V.currentMusicFont(),a=i.lookupMetric("notehead.shiftX",0)*this.stem_direction,n=i.lookupMetric("noteHead.displacedShiftX",0)*this.stem_direction;return t+a+(this.displaced?(this.width-e)*this.stem_direction+n:0)}getBoundingBox(){const t=this.checkStave().getSpacingBetweenLines(),e=t/2,i=this.y-e;return new B(this.getAbsoluteX(),i,this.width,t)}setStave(t){const e=this.getLine();return this.stave=t,this.stave&&(this.setY(this.stave.getYForNote(e)),this.setContext(this.stave.getContext())),this}preFormat(){if(this.preFormatted)return this;const t=this.getWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx;return this.setWidth(t),this.preFormatted=!0,this}draw(){const t=this.checkContext();this.setRendered();let e=this.getAbsoluteX();this.custom_glyph&&(e+=this.stem_direction===nt.UP?this.stem_up_x_offset+(this.glyphProps.stem?this.glyphProps.getWidth(this.render_options.glyph_font_scale)-this.width:0):this.stem_down_x_offset);const i=this.y;!function(...t){Wt.DEBUG&&y("Vex.Flow.NoteHead",t)}("Drawing note head '",this.noteType,this.duration,"' at",e,i);const a=this.stem_direction,n=this.render_options.glyph_font_scale,s=`${this.glyph_code}Stem${a===nt.UP?"Up":"Down"}`;if("s"===this.noteType){const n=this.checkStave().getSpacingBetweenLines();!function(t,e,i,a,n,s){const o=V.SLASH_NOTEHEAD_WIDTH;t.save(),t.setLineWidth(V.STEM_WIDTH);let l=!1;if(V.durationToNumber(e)>2&&(l=!0),l||(i-=V.STEM_WIDTH/2*n),t.beginPath(),t.moveTo(i,a+s),t.lineTo(i,a+1),t.lineTo(i+o,a-s),t.lineTo(i+o,a),t.lineTo(i,a+s),t.closePath(),l?t.fill():t.stroke(),V.durationToFraction(e).equals(.5)){const e=[-3,-1,o+1,o+3];for(let n=0;nt.getCategory()===x.Dot&&0===t.getIndex())).length!==l.note.getModifiers().filter((t=>t.getCategory()===x.Dot&&0===t.getIndex())).length||t<1&&t>0||JSON.stringify(s.note.getStyle())!==JSON.stringify(l.note.getStyle())?(d=c+2,s.stemDirection===l.stemDirection?s.note.setXShift(d):l.note.setXShift(d)):s.note.voice!==l.note.voice&&s.stemDirection===l.stemDirection&&(s.line!=l.line?(d=c+2,s.note.setXShift(d)):1===l.stemDirection&&(l.stemDirection=-1,l.note.setStemDirection(-1)))}else t<1?(d=c+2,s.note.durationt.postFormat())),!0)}constructor(t){var e,i,a;super(t),this.minLine=0,this.maxLine=0,this.sortedKeyProps=[],this.ledgerLineStyle={},this.clef=null!==(e=t.clef)&&void 0!==e?e:"treble",this.octave_shift=null!==(i=t.octave_shift)&&void 0!==i?i:0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),u(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),this.displaced=!1,this.dot_shiftY=0,this.use_default_head_x=!1,this._noteHeads=[],this.modifiers=[],this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE,stroke_px:t.stroke_px||Ut.LEDGER_LINE_OFFSET}),this.calculateKeyProps(),this.buildStem(),t.auto_stem?this.autoStem():this.setStemDirection(null!==(a=t.stem_direction)&&void 0!==a?a:nt.UP),this.reset(),this.buildFlag()}reset(){super.reset();const t=this._noteHeads.map((t=>t.getStyle()));this.buildNoteHeads(),this._noteHeads.forEach(((e,i)=>{const a=t[i];a&&e.setStyle(a)}));const e=this.stave;return e&&this.setStave(e),this.calcNoteDisplacements(),this}setBeam(t){return this.beam=t,this.calcNoteDisplacements(),this.stem&&this.stem.setExtension(this.getStemExtension()),this}buildStem(){return this.setStem(new nt({hide:!!this.isRest()})),this}buildNoteHeads(){this._noteHeads=[];const t=this.getStemDirection(),e=this.getKeys();let i,a,n,s,o,l=!1;t===nt.UP?(n=0,s=e.length,o=1):(n=e.length-1,s=-1,o=-1);for(let e=n;e!==s;e+=o){const n=this.sortedKeyProps[e].keyProps,s=n.line;void 0===i?i=s:(a=Math.abs(i-s),0===a||.5===a?l=!l:(l=!1,this.use_default_head_x=!0)),i=s;const o=new Wt({duration:this.duration,note_type:this.noteType,displaced:l,stem_direction:t,custom_glyph_code:n.code,glyph_font_scale:this.render_options.glyph_font_scale,x_shift:n.shift_right,stem_up_x_offset:n.stem_up_x_offset,stem_down_x_offset:n.stem_down_x_offset,line:n.line});this.addChildElement(o),this._noteHeads[this.sortedKeyProps[e].index]=o}return this._noteHeads}autoStem(){this.setStemDirection(this.calculateOptimalStemDirection())}calculateOptimalStemDirection(){this.minLine=this.sortedKeyProps[0].keyProps.line,this.maxLine=this.sortedKeyProps[this.keyProps.length-1].keyProps.line;return(this.minLine+this.maxLine)/2<3?nt.UP:nt.DOWN}calculateKeyProps(){let t;for(let e=0;e0&&(this.keyProps[e-1].displaced=!0)),t=s,this.keyProps.push(n)}this.keyProps.forEach(((t,e)=>{this.sortedKeyProps.push({keyProps:t,index:e})})),this.sortedKeyProps.sort(((t,e)=>t.keyProps.line-e.keyProps.line))}getBoundingBox(){var t,e;if(!this.preFormatted)throw new g("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const{width:i,modLeftPx:a,leftDisplacedHeadPx:n}=this.getMetrics(),s=this.getAbsoluteX()-a-n;let o=0,l=0;const r=(null!==(e=null===(t=this.getStave())||void 0===t?void 0:t.getSpacingBetweenLines())&&void 0!==e?e:0)/2,h=2*r;if(this.isRest()){const t=this.ys[0],e=V.durationToFraction(this.duration);e.equals(1)||e.equals(2)?(o=t-r,l=t+r):(o=t-this.glyphProps.line_above*h,l=t+this.glyphProps.line_below*h)}else if(this.glyphProps.stem){const t=this.getStemExtents();t.baseY+=r*this.getStemDirection(),o=Math.min(t.topY,t.baseY),l=Math.max(t.topY,t.baseY)}else{o=0,l=0;for(let t=0;te&&(e=a):a1}hasStem(){return this.glyphProps.stem}hasFlag(){return super.hasFlag()&&!this.isRest()}getStemX(){return"r"===this.noteType?this.getCenterGlyphX():super.getStemX()+(this.stem_direction?nt.WIDTH/(2*-this.stem_direction):0)}getYForTopText(t){const e=this.getStemExtents();return Math.min(this.checkStave().getYForTopText(t),e.topY-this.render_options.annotation_spacing*(t+1))}getYForBottomText(t){const e=this.getStemExtents();return Math.max(this.checkStave().getYForTopText(t),e.baseY+this.render_options.annotation_spacing*t)}setStave(t){super.setStave(t);const e=this._noteHeads.map((e=>(e.setStave(t),e.getY())));if(this.setYs(e),this.stem){const{y_top:t,y_bottom:e}=this.getNoteHeadBounds();this.stem.setYBounds(t,e)}return this}isDisplaced(){return this.displaced}setNoteDisplaced(t){return this.displaced=t,this}getTieRightX(){let t=this.getAbsoluteX();return t+=this.getGlyphWidth()+this.x_shift+this.rightDisplacedHeadPx,this.modifierContext&&(t+=this.modifierContext.getRightShift()),t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.x_shift-this.leftDisplacedHeadPx,t}getLineForRest(){let t=this.keyProps[0].line;if(this.keyProps.length>1){const e=this.keyProps[this.keyProps.length-1].line;t=S(Math.max(t,e),Math.min(t,e))}return t}getModifierStartXY(t,e,i={}){var a,n;if(!this.preFormatted)throw new g("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new g("NoYValues","No Y-Values calculated for this note.");const{ABOVE:s,BELOW:o,LEFT:l,RIGHT:r}=tt.Position;let h=0;return t===l?h=-2:t===r?(h=this.getGlyphWidth()+this.x_shift+2,this.stem_direction===nt.UP&&this.hasFlag()&&(i.forceFlagRight||((t,e)=>e===(t.getStemDirection()===nt.UP?t.keyProps.length-1:0))(this,e))&&(h+=null!==(n=null===(a=null==this?void 0:this.flag)||void 0===a?void 0:a.getMetrics().width)&&void 0!==n?n:0)):t!==o&&t!==s||(h=this.getGlyphWidth()/2),{x:this.getAbsoluteX()+h,y:this.ys[e]}}setStyle(t){return super.setGroupStyle(t)}setStemStyle(t){const e=this.getStem();return e&&e.setStyle(t),this}getStemStyle(){var t;return null===(t=this.stem)||void 0===t?void 0:t.getStyle()}setLedgerLineStyle(t){this.ledgerLineStyle=t}getLedgerLineStyle(){return this.ledgerLineStyle}setFlagStyle(t){var e;null===(e=this.flag)||void 0===e||e.setStyle(t)}getFlagStyle(){var t;return null===(t=this.flag)||void 0===t?void 0:t.getStyle()}setKeyStyle(t,e){return this._noteHeads[t].setStyle(e),this}setKeyLine(t,e){return this.keyProps[t].line=e,this.reset(),this}getKeyLine(t){return this.keyProps[t].line}getVoiceShiftWidth(){return this.getGlyphWidth()*(this.displaced?2:1)}calcNoteDisplacements(){this.setLeftDisplacedHeadPx(this.displaced&&this.stem_direction===nt.DOWN?this.getGlyphWidth():0),this.setRightDisplacedHeadPx(!this.hasFlag()&&this.displaced&&this.stem_direction===nt.UP?this.getGlyphWidth():0)}preFormat(){if(this.preFormatted)return;let t=0;this.modifierContext&&(this.modifierContext.preFormat(),0===this.modifierContext.getWidth()&&(t=Ut.minNoteheadPadding));let e=this.getGlyphWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx+t;this.shouldDrawFlag()&&this.stem_direction===nt.UP&&(e+=this.getGlyphWidth()),this.setWidth(e),this.preFormatted=!0}getNoteHeadBounds(){let t,e,i,a,n=1/0,s=-1/0,o=this.checkStave().getNumLines(),l=1,r=o,h=l;return this._noteHeads.forEach((c=>{const d=c.getLine(),m=c.getY();n=Math.min(m,n),s=Math.max(m,s),void 0===e&&c.isDisplaced()&&(e=c.getAbsoluteX()),void 0!==t||c.isDisplaced()||(t=c.getAbsoluteX()),o=Math.max(d,o),l=Math.min(d,l),c.isDisplaced()?(i=void 0===i?d:Math.max(d,i),a=void 0===a?d:Math.min(d,a)):(r=Math.max(d,r),h=Math.min(d,h))}),this),{y_top:n,y_bottom:s,displaced_x:e,non_displaced_x:t,highest_line:o,lowest_line:l,highest_displaced_line:i,lowest_displaced_line:a,highest_non_displaced_line:r,lowest_non_displaced_line:h}}getNoteHeadBeginX(){return this.getAbsoluteX()+this.x_shift}getNoteHeadEndX(){return this.getNoteHeadBeginX()+this.getGlyphWidth()}get noteHeads(){return this._noteHeads.slice()}get note_heads(){return console.warn("StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.","This accessor will be removed in VexFlow 5.0."),this.noteHeads}drawLedgerLines(){const t=this.checkStave(),{glyphProps:e,render_options:{stroke_px:i}}=this,a=this.checkContext(),n=e.getWidth()+2*i,s=2*(e.getWidth()+i)-nt.WIDTH/2;if(this.isRest())return;if(!a)throw new g("NoCanvasContext","Can't draw without a canvas context.");const{highest_line:o,lowest_line:l,highest_displaced_line:r,highest_non_displaced_line:h,lowest_displaced_line:c,lowest_non_displaced_line:d,displaced_x:m,non_displaced_x:b}=this.getNoteHeadBounds();if(o<6&&l>0)return;const _=Math.min(null!=m?m:0,null!=b?b:0),x=(t,e,o)=>{let l;l=o&&e?_-i:e?(null!=b?b:0)-i:(null!=m?m:0)-i;const r=e&&o?s:n;a.beginPath(),a.moveTo(l,t),a.lineTo(l+r,t),a.stroke()},p=Object.assign(Object.assign({},t.getDefaultLedgerLineStyle()),this.getLedgerLineStyle());this.applyStyle(a,p);for(let e=6;e<=o;++e){const i=void 0!==b&&e<=h,a=void 0!==r&&e<=r;x(t.getYForNote(e),i,a)}for(let e=0;e>=l;--e){const i=void 0!==b&&e>=d,a=void 0!==c&&e>=c;x(t.getYForNote(e),i,a)}this.restoreStyle(a,p)}drawModifiers(t){const e=this.checkContext();for(let i=0;i{e.applyStyle(t),t.openGroup("notehead",e.getAttribute("id"),{pointerBBox:!0}),e.setContext(t).draw(),this.drawModifiers(e),t.closeGroup(),e.restoreStyle(t)}))}drawStem(t){const e=this.checkContext();t&&this.setStem(new nt(t)),this.shouldDrawFlag()&&this.stem&&this.stem.adjustHeightForFlag(),this.stem&&this.stem.setContext(e).draw()}getStaveNoteScale(){return 1}getStemExtension(){const t=super.getStemExtension();if(!this.glyphProps.stem)return t;const e=this.getStemDirection();if(e!==this.calculateOptimalStemDirection())return t;let i;i=e===nt.UP?3-this.maxLine:this.minLine-3;const a=i-3.5;if(a<=0)return t;const n=this.getStave();let s=10;return null!=n&&(s=n.getSpacingBetweenLines()),t+a*s}draw(){if(!1===this.render_options.draw)return;if(0===this.ys.length)throw new g("NoYValues","Can't draw note without Y values.");const t=this.checkContext(),e=this.getNoteHeadBeginX(),i=this.hasStem()&&!this.beam;if(this._noteHeads.forEach((t=>t.setX(e))),this.stem){const t=this.getStemX();this.stem.setNoteHeadXBounds(t,t)}!function(...t){Ut.DEBUG&&y("Vex.Flow.StaveNote",t)}("Rendering ",this.isChord()?"chord :":"note :",this.keys),this.applyStyle(),t.openGroup("stavenote",this.getAttribute("id")),this.drawLedgerLines(),i&&this.drawStem(),this.drawNoteHeads(),this.drawFlag(),t.closeGroup(),this.restoreStyle(),this.setRendered()}}Ut.DEBUG=!1;class Gt extends L{static get CATEGORY(){return x.StaveTie}constructor(t,e){super(),this.setNotes(t),this.text=e,this.render_options={cp1:8,cp2:12,text_shift_x:0,first_x_shift:0,last_x_shift:0,y_shift:7,tie_spacing:0},this.resetFont()}setDirection(t){return this.direction=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new g("BadArguments","Tie needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new g("BadArguments","Tied notes must have same number of indices.");return this.notes=t,this}isPartial(){return!this.notes.first_note||!this.notes.last_note}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new g("BadArguments","No Y-values to render");const e=this.checkContext();let i=this.render_options.cp1,a=this.render_options.cp2;Math.abs(t.last_x_px-t.first_x_px)<10&&(i=2,a=8);const n=this.render_options.first_x_shift,s=this.render_options.last_x_shift,o=this.render_options.y_shift*t.direction,l=this.notes.first_indices,r=this.notes.last_indices;this.applyStyle(),e.openGroup("stavetie",this.getAttribute("id"));for(let h=0;hMath.pow(this.options.softmaxFactor,e.getTicks().value()/t)))),this.expTicksUsed}softmax(t){this.expTicksUsed||(this.expTicksUsed=this.reCalculateExpTicksUsed());const e=this.ticksUsed.value();return(t=>Math.pow(this.options.softmaxFactor,t/e))(t)/this.expTicksUsed}addTickable(t){if(!t.shouldIgnoreTicks()){const e=t.getTicks();if(this.ticksUsed.add(e),this.expTicksUsed=0,(this.mode===Ht.STRICT||this.mode===Ht.FULL)&&this.ticksUsed.greaterThan(this.totalTicks))throw this.ticksUsed.subtract(e),new g("BadArgument","Too many ticks.");e.lessThan(this.smallestTickCount)&&(this.smallestTickCount=e.clone()),this.resolutionMultiplier=this.ticksUsed.denominator,this.totalTicks.add(0,this.ticksUsed.denominator)}return this.tickables.push(t),t.setVoice(this),this}addTickables(t){for(let e=0;e{e.getStave()||e.setStave(t)})),this.preFormatted=!0,this}checkStave(){return u(this.stave,"NoStave","No stave attached to instance.")}draw(t=this.checkContext(),e){let i;e=null!=e?e:this.stave,this.setRendered();for(let a=0;a1){const e=new Le(t);e.render_options.beam_width=3,e.render_options.partial_beam_length=4,this.beams.push(e)}return this}setWidth(t){return this.width=t,this}getWidth(){return this.width+Ut.minNoteheadPadding}getGraceNotes(){return this.grace_notes}draw(){const t=this.checkContext(),e=this.checkAttachedNote();if(this.setRendered(),function(...t){Xt.DEBUG&&y("Vex.Flow.GraceNoteGroup",t)}("Drawing grace note group for:",e),this.alignSubNotesWithNote(this.getGraceNotes(),e),this.grace_notes.forEach((e=>e.setContext(t).draw())),this.beams.forEach((e=>e.setContext(t).draw())),this.show_slur){const i=m(e),a=i?Gt:Yt;this.slur=new a({last_note:this.grace_notes[0],first_note:e,first_indices:[0],last_indices:[0]}),this.slur.render_options.cp2=12,this.slur.render_options.y_shift=(i?7:5)+this.render_options.slur_y_shift,this.slur.setContext(t).draw()}}}Xt.DEBUG=!1;class Vt extends tt{static get CATEGORY(){return x.NoteSubGroup}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let e=0;e{t.setIgnoreTicks(!1)})),this.width=0,this.formatter=new ke,this.voice=new jt({num_beats:4,beat_value:4,resolution:V.RESOLUTION}).setStrict(!1),this.voice.addTickables(this.subNotes)}preFormat(){this.preFormatted||(this.formatter.joinVoices([this.voice]).format([this.voice],0),this.setWidth(this.formatter.getMinTotalWidth()),this.preFormatted=!0)}setWidth(t){return this.width=t,this}getWidth(){return this.width}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),this.alignSubNotesWithNote(this.subNotes,e),this.subNotes.forEach((e=>e.setContext(t).drawWithStyle()))}}class Kt extends tt{static get CATEGORY(){return x.Ornament}static get minPadding(){return V.currentMusicFont().lookupMetric("noteHead.minPadding")}static format(t,e){if(!t||0===t.length)return!1;let i=0,a=e.right_shift,n=e.left_shift,s=0;for(let o=0;o=0&&(l.x_shift+=a+2),Kt.ornamentAttack.indexOf(l.type)>=0&&(l.x_shift-=n+2),l.reportedWidth&&l.x_shift<0?n+=l.reportedWidth:l.reportedWidth&&l.x_shift>=0?a+=l.reportedWidth+Kt.minPadding:i=Math.max(l.getWidth(),i),Kt.ornamentArticulation.indexOf(l.type)>=0){u(l.note,"NoAttachedNote").getLineNumber()>=3||l.getPosition()===tt.Position.ABOVE?(e.top_text_line+=r,l.y_shift+=s,s-=l.glyph.bbox.getH()):(e.text_line+=r,l.y_shift+=s,s+=l.glyph.bbox.getH())}else l.getPosition()===tt.Position.ABOVE?(l.setTextLine(e.top_text_line),e.top_text_line+=r):(l.setTextLine(e.text_line),e.text_line+=r)}return e.left_shift=n+i/2,e.right_shift=a+i/2,!0}static get ornamentNoteTransition(){return["flip","jazzTurn","smear"]}static get ornamentAttack(){return["scoop"]}static get ornamentAlignWithNoteHead(){return["doit","fall","fallLong","doitLong","bend","plungerClosed","plungerOpen","scoop"]}static get ornamentRelease(){return["doit","fall","fallLong","doitLong","jazzTurn","smear","flip"]}static get ornamentArticulation(){return["bend","plungerClosed","plungerOpen"]}getMetrics(){const t=V.currentMusicFont().getMetrics().ornament;if(!t)throw new g("BadMetrics","ornament missing");return t[this.ornament.code]}constructor(t){super(),this.type=t,this.delayed=!1,this.render_options={font_scale:V.NOTATION_FONT_SCALE,accidentalLowerPadding:3,accidentalUpperPadding:3},this.ornament=V.ornamentCodes(this.type);const e=this.getMetrics();if(this.adjustForStemDirection=!1,this.reportedWidth=e&&e.reportedWidth?e.reportedWidth:0,this.stemUpYOffset=e&&e.stemUpYOffset?e.stemUpYOffset:0,this.ornamentAlignWithNoteHead=Kt.ornamentAlignWithNoteHead.indexOf(this.type)>=0,!this.ornament)throw new g("ArgumentError",`Ornament not found: '${this.type}'`);this.x_shift=e?e.xOffset:0,this.y_shift=e?e.yOffset:0,this.glyph=new Z(this.ornament.code,this.render_options.font_scale,{category:`ornament.${this.ornament.code}`}),Kt.ornamentNoteTransition.indexOf(this.type)>=0&&(this.delayed=!0),e||this.glyph.setOrigin(.5,1)}setDelayed(t){return this.delayed=t,this}setUpperAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalUpper=new Z(V.accidentalCodes(t).code,e),this.accidentalUpper.setOrigin(.5,1),this}setLowerAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalLower=new Z(V.accidentalCodes(t).code,e),this.accidentalLower.setOrigin(.5,1),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getStemDirection(),a=e.checkStave();this.applyStyle(),t.openGroup("ornament",this.getAttribute("id"));const n=e.checkStem().getExtents();let s=i===nt.DOWN?n.baseY:n.topY;_(e)&&(e.hasStem()?i===nt.DOWN&&(s=a.getYForTopText(this.text_line)):s=a.getYForTopText(this.text_line));const o=i===nt.DOWN,l=a.getSpacingBetweenLines();let r=1;!o&&e.hasBeam()&&(r+=.5);const h=s-l*(this.text_line+r),c=e.getModifierStartXY(this.position,this.index);let d=c.x,m=this.ornamentAlignWithNoteHead?c.y:Math.min(a.getYForTopText(this.text_line),h);if(m+=this.y_shift,this.delayed){let t=0;const i=d-a.getNoteStartX();if(void 0!==this.delayXShift)t=this.delayXShift;else{t+=this.glyph.getMetrics().width/2;const n=e.getVoice().getTickables(),s=n.indexOf(e),o=s+1=0&&(m=e.checkStave().getBoundingBox().getY()+40),this.glyph.render(t,d+this.x_shift,m),this.accidentalUpper&&(m-=this.glyph.getMetrics().height+this.render_options.accidentalUpperPadding,this.accidentalUpper.render(t,d,m)),t.closeGroup(),this.restoreStyle()}}Kt.DEBUG=!1;class $t extends tt{static get CATEGORY(){return x.Parenthesis}static buildAndAttach(t){for(const e of t)for(let t=0;tr+n.width?a:r+n.width),o===J.LEFT&&(r=s.getLeftParenthesisPx(l),i=i>r+n.width?i:r+n.width),n.setXShift(r)}return e.left_shift+=i,e.right_shift+=a,!0}constructor(t){var e;super(),this.position=null!=t?t:tt.Position.LEFT,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width"))}setNote(t){var e,i;return this.note=t,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width")),r(t)&&(this.point=null!==(i=V.currentMusicFont().lookupMetric("parenthesis.gracenote.point"))&&void 0!==i?i:vt.getPoint("gracenote"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.gracenote.width"))),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0}),a=i.x+this.x_shift,n=i.y+this.y_shift;this.position==tt.Position.RIGHT?Z.renderGlyph(t,a+1,n,this.point,"noteheadParenthesisRight",{category:"noteHead.standard.noteheadParenthesisRight"}):this.position==tt.Position.LEFT&&Z.renderGlyph(t,a-2,n,this.point,"noteheadParenthesisLeft",{category:"noteHead.standard.noteheadParenthesisLeft"})}}function Jt(t){if(!t)return!1;const e=p();return"function"==typeof e.HTMLCanvasElement&&t instanceof e.HTMLCanvasElement||"function"==typeof t.getContext&&"function"==typeof t.toDataURL}function qt(t){if(!t)return!1;const e=p();return"function"==typeof e.HTMLDivElement&&t instanceof e.HTMLDivElement||"function"==typeof t.appendChild&&"object"==typeof t.style}class Qt extends ft{static get WIDTH(){return 600}static get HEIGHT(){return 400}static get CANVAS_BROWSER_SIZE_LIMIT(){return 32767}static sanitizeCanvasDims(t,e){const i=this.CANVAS_BROWSER_SIZE_LIMIT;return Math.max(t,e)>i&&(f("Canvas dimensions exceed browser limit. Cropping to "+i),t>i&&(t=i),e>i&&(e=i)),[t,e]}constructor(t){super(),this.textHeight=0,this.context2D=t,t.canvas?this.canvas=t.canvas:this.canvas={width:Qt.WIDTH,height:Qt.HEIGHT}}clear(){this.context2D.clearRect(0,0,this.canvas.width,this.canvas.height)}openGroup(t,e,i){}closeGroup(){}add(t){}setFillStyle(t){return this.context2D.fillStyle=t,this}setBackgroundFillStyle(t){return this}setStrokeStyle(t){return this.context2D.strokeStyle=t,this}setShadowColor(t){return this.context2D.shadowColor=t,this}setShadowBlur(t){const e=this.context2D.getTransform(),i=Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c+e.d*e.d);return this.context2D.shadowBlur=i*t,this}setLineWidth(t){return this.context2D.lineWidth=t,this}setLineCap(t){return this.context2D.lineCap=t,this}setLineDash(t){return this.context2D.setLineDash(t),this}scale(t,e){return this.context2D.scale(t,e),this}resize(t,e,i){var a;const n=this.context2D.canvas,s=null!==(a=null!=i?i:p().devicePixelRatio)&&void 0!==a?a:1;return[t,e]=Qt.sanitizeCanvasDims(t*s,e*s),t=t/s|0,e=e/s|0,n.width=t*s,n.height=e*s,Jt(n)&&(n.style.width=t+"px",n.style.height=e+"px"),this.scale(s,s)}rect(t,e,i,a){return this.context2D.rect(t,e,i,a),this}fillRect(t,e,i,a){return this.context2D.fillRect(t,e,i,a),this}clearRect(t,e,i,a){return this.context2D.clearRect(t,e,i,a),this}beginPath(){return this.context2D.beginPath(),this}moveTo(t,e){return this.context2D.moveTo(t,e),this}lineTo(t,e){return this.context2D.lineTo(t,e),this}bezierCurveTo(t,e,i,a,n,s){return this.context2D.bezierCurveTo(t,e,i,a,n,s),this}quadraticCurveTo(t,e,i,a){return this.context2D.quadraticCurveTo(t,e,i,a),this}arc(t,e,i,a,n,s){return this.context2D.arc(t,e,i,a,n,s),this}fill(){return this.context2D.fill(),this}stroke(){return this.context2D.stroke(),this}closePath(){return this.context2D.closePath(),this}measureText(t){const e=this.context2D.measureText(t);let i=0,a=0;return e.fontBoundingBoxAscent?(i=-e.fontBoundingBoxAscent,a=e.fontBoundingBoxDescent+e.fontBoundingBoxAscent):(i=-e.actualBoundingBoxAscent,a=e.actualBoundingBoxDescent+e.actualBoundingBoxAscent),{x:0,y:i,width:e.width,height:a}}fillText(t,e,i){return this.context2D.fillText(t,e,i),this}save(){return this.context2D.save(),this}restore(){return this.context2D.restore(),this}set fillStyle(t){this.context2D.fillStyle=t}get fillStyle(){return this.context2D.fillStyle}set strokeStyle(t){this.context2D.strokeStyle=t}get strokeStyle(){return this.context2D.strokeStyle}setFont(t,e,i,a){const n=M.validate(t,e,i,a);return this.context2D.font=M.toCSSString(n),this.textHeight=M.convertSizeToPixelValue(n.size),this}getFont(){return this.context2D.font}}const Zt={path:{x:!0,y:!0,width:!0,height:!0,"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},rect:{"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},text:{width:!0,height:!0}},te="http://www.w3.org/2000/svg",ee=2*Math.PI;class ie extends ft{constructor(t){super(),this.width=0,this.height=0,this.precision=1,this.backgroundFillStyle="white",this.fontCSSString="",this.element=t,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES);const e=this.create("svg");this.element.appendChild(e),this.svg=e,this.parent=this.svg,this.groups=[this.svg],this.path="",this.pen={x:NaN,y:NaN},this.lineWidth=1;const i={"font-family":M.SANS_SERIF,"font-size":M.SIZE+"pt","font-weight":P.NORMAL,"font-style":k.NORMAL};this.state=Object.assign({scaleX:1,scaleY:1},i),this.attributes=Object.assign({"stroke-width":.3,"stroke-dasharray":"none",fill:"black",stroke:"black"},i),this.groupAttributes=[],this.applyAttributes(e,this.attributes),this.groupAttributes.push(Object.assign({},this.attributes)),this.shadow_attributes={width:0,color:"black"},this.state_stack=[]}round(t){return Math.round(t*this.precision)/this.precision}create(t){return document.createElementNS(te,t)}openGroup(t,e,i){const a=this.create("g");return this.groups.push(a),this.parent.appendChild(a),this.parent=a,t&&a.setAttribute("class",T(t)),e&&a.setAttribute("id",T(e)),i&&i.pointerBBox&&a.setAttribute("pointer-events","bounding-box"),this.applyAttributes(a,this.attributes),this.groupAttributes.push(Object.assign(Object.assign({},this.groupAttributes[this.groupAttributes.length-1]),this.attributes)),a}closeGroup(){this.groups.pop(),this.groupAttributes.pop(),this.parent=this.groups[this.groups.length-1]}add(t){this.parent.appendChild(t)}setFillStyle(t){return this.attributes.fill=t,this}setBackgroundFillStyle(t){return this.backgroundFillStyle=t,this}setStrokeStyle(t){return this.attributes.stroke=t,this}setShadowColor(t){return this.shadow_attributes.color=t,this}setShadowBlur(t){return this.shadow_attributes.width=t,this}setLineWidth(t){return this.attributes["stroke-width"]=t,this.lineWidth=t,this}setLineDash(t){if("[object Array]"===Object.prototype.toString.call(t))return this.attributes["stroke-dasharray"]=t.join(","),this;throw new g("ArgumentError","lineDash must be an array of integers.")}setLineCap(t){return this.attributes["stroke-linecap"]=t,this}resize(t,e){this.width=t,this.height=e,this.element.style.width=t.toString(),this.svg.style.width=t.toString(),this.svg.style.height=e.toString();const i={width:t,height:e};return this.applyAttributes(this.svg,i),this.scale(this.state.scaleX,this.state.scaleY),this}scale(t,e){this.state.scaleX=this.state.scaleX?this.state.scaleX*t:t,this.state.scaleY=this.state.scaleY?this.state.scaleY*e:e;const i=this.width/this.state.scaleX,a=this.height/this.state.scaleY;return this.setViewBox(0,0,i,a),this}setViewBox(t,e,i,a){if("string"==typeof t)this.svg.setAttribute("viewBox",t);else{const n=t+" "+e+" "+i+" "+a;this.svg.setAttribute("viewBox",n)}}applyAttributes(t,e){const i=Zt[t.nodeName];for(const a in e)i&&i[a]||!e[a]||0!=this.groupAttributes.length&&e[a]==this.groupAttributes[this.groupAttributes.length-1][a]||t.setAttributeNS(null,a,e[a]);return t}clear(){for(;this.svg.lastChild;)this.svg.removeChild(this.svg.lastChild);this.scale(this.state.scaleX,this.state.scaleY)}rect(t,e,i,a,n){a<0&&(e+=a,a*=-1);const s=this.create("rect");return n=null!=n?n:{fill:"none","stroke-width":this.lineWidth,stroke:"black"},t=this.round(t),e=this.round(e),i=this.round(i),a=this.round(a),this.applyAttributes(s,Object.assign({x:t,y:e,width:i,height:a},n)),this.add(s),this}fillRect(t,e,i,a){const n={fill:this.attributes.fill,stroke:"none"};return this.rect(t,e,i,a,n),this}clearRect(t,e,i,a){return this.rect(t,e,i,a,{fill:this.backgroundFillStyle,stroke:"none"}),this}beginPath(){return this.path="",this.pen.x=NaN,this.pen.y=NaN,this}moveTo(t,e){return t=this.round(t),e=this.round(e),this.path+="M"+t+" "+e,this.pen.x=t,this.pen.y=e,this}lineTo(t,e){return t=this.round(t),e=this.round(e),this.path+="L"+t+" "+e,this.pen.x=t,this.pen.y=e,this}bezierCurveTo(t,e,i,a,n,s){return n=this.round(n),s=this.round(s),t=this.round(t),e=this.round(e),i=this.round(i),a=this.round(a),this.path+="C"+t+" "+e+","+i+" "+a+","+n+" "+s,this.pen.x=n,this.pen.y=s,this}quadraticCurveTo(t,e,i,a){return i=this.round(i),a=this.round(a),t=this.round(t),e=this.round(e),this.path+="Q"+t+" "+e+","+i+" "+a,this.pen.x=i,this.pen.y=a,this}arc(t,e,i,a,n,s){let o=t+i*Math.cos(a),l=e+i*Math.sin(a);o=this.round(o),l=this.round(l);const r=v(a),h=v(n);if(!s&&n-a>=ee||s&&a-n>=ee||r===h){let n=t+i*Math.cos(a+Math.PI),s=e+i*Math.sin(a+Math.PI);n=this.round(n),s=this.round(s),i=this.round(i),this.path+=`M${o} ${l} A${i} ${i} 0 0 0 ${n} ${s} `,this.path+=`A${i} ${i} 0 0 0 ${o} ${l}`,this.pen.x=o,this.pen.y=l}else{let c,d=t+i*Math.cos(n),m=e+i*Math.sin(n);a=r,n=h,c=Math.abs(n-a)n&&(c=!c);const b=!s;d=this.round(d),m=this.round(m),i=this.round(i),this.path+=`M${o} ${l} A${i} ${i} 0 ${+c} ${+b} ${d} ${m}`,this.pen.x=d,this.pen.y=m}return this}closePath(){return this.path+="Z",this}getShadowStyle(){const t=this.shadow_attributes;return`filter: drop-shadow(0 0 ${t.width/1.5}px ${t.color})`}fill(t){const e=this.create("path");return void 0===t&&(t=Object.assign(Object.assign({},this.attributes),{stroke:"none"})),t.d=this.path,this.shadow_attributes.width>0&&(t.style=this.getShadowStyle()),this.applyAttributes(e,t),this.add(e),this}stroke(){const t=this.create("path"),e=Object.assign(Object.assign({},this.attributes),{fill:"none","stroke-width":this.lineWidth,d:this.path});return this.shadow_attributes.width>0&&(e.style=this.getShadowStyle()),this.applyAttributes(t,e),this.add(t),this}measureText(t){return ie.measureTextCache.lookup(t,this.svg,this.attributes)}fillText(t,e,i){if(!t||t.length<=0)return this;e=this.round(e),i=this.round(i);const a=Object.assign(Object.assign({},this.attributes),{stroke:"none",x:e,y:i}),n=this.create("text");return n.textContent=t,this.applyAttributes(n,a),this.add(n),this}save(){return this.state_stack.push({state:{"font-family":this.state["font-family"],"font-weight":this.state["font-weight"],"font-style":this.state["font-style"],"font-size":this.state["font-size"],scale:this.state.scale},attributes:{"font-family":this.attributes["font-family"],"font-weight":this.attributes["font-weight"],"font-style":this.attributes["font-style"],"font-size":this.attributes["font-size"],fill:this.attributes.fill,stroke:this.attributes.stroke,"stroke-width":this.attributes["stroke-width"],"stroke-dasharray":this.attributes["stroke-dasharray"]},shadow_attributes:{width:this.shadow_attributes.width,color:this.shadow_attributes.color},lineWidth:this.lineWidth}),this}restore(){const t=this.state_stack.pop();if(t){const e=t;this.state["font-family"]=e.state["font-family"],this.state["font-weight"]=e.state["font-weight"],this.state["font-style"]=e.state["font-style"],this.state["font-size"]=e.state["font-size"],this.state.scale=e.state.scale,this.attributes["font-family"]=e.attributes["font-family"],this.attributes["font-weight"]=e.attributes["font-weight"],this.attributes["font-style"]=e.attributes["font-style"],this.attributes["font-size"]=e.attributes["font-size"],this.attributes.fill=e.attributes.fill,this.attributes.stroke=e.attributes.stroke,this.attributes["stroke-width"]=e.attributes["stroke-width"],this.attributes["stroke-dasharray"]=e.attributes["stroke-dasharray"],this.shadow_attributes.width=e.shadow_attributes.width,this.shadow_attributes.color=e.shadow_attributes.color,this.lineWidth=e.lineWidth}return this}set fillStyle(t){this.setFillStyle(t)}get fillStyle(){return this.attributes.fill}set strokeStyle(t){this.setStrokeStyle(t)}get strokeStyle(){return this.attributes.stroke}setFont(t,e,i,a){const n=M.validate(t,e,i,a);this.fontCSSString=M.toCSSString(n);const s={"font-family":n.family,"font-size":n.size,"font-weight":n.weight,"font-style":n.style};return this.attributes=Object.assign(Object.assign({},this.attributes),s),this.state=Object.assign(Object.assign({},this.state),s),this}getFont(){return this.fontCSSString}}var ae,ne,se,oe;ie.measureTextCache=new class{constructor(){this.cache={}}lookup(t,e,i){let a=this.cache[t];void 0===a&&(a={},this.cache[t]=a);const n=`${i["font-family"]}%${i["font-size"]}%${i["font-weight"]}%${i["font-style"]}`;let s=a[n];return void 0===s&&(s=this.measureImpl(t,e,i),a[n]=s),s}measureImpl(t,e,i){let a=this.txt;a||(a=document.createElementNS(te,"text"),this.txt=a),a.textContent=t,i["font-family"]&&a.setAttributeNS(null,"font-family",i["font-family"]),i["font-size"]&&a.setAttributeNS(null,"font-size",`${i["font-size"]}`),i["font-style"]&&a.setAttributeNS(null,"font-style",i["font-style"]),i["font-weight"]&&a.setAttributeNS(null,"font-weight",`${i["font-weight"]}`),e.appendChild(a);const n=a.getBBox();return e.removeChild(a),{x:n.x,y:n.y,width:n.width,height:n.height}}},function(t){t[t.CANVAS=1]="CANVAS",t[t.SVG=2]="SVG"}(ae||(ae={})),function(t){t[t.NONE=1]="NONE",t[t.UP=2]="UP",t[t.DOWN=3]="DOWN"}(ne||(ne={}));class le{static buildContext(t,e,i,a,n="#FFF"){const s=new le(t,e);i&&a&&s.resize(i,a);const o=s.getContext();return o.setBackgroundFillStyle(n),le.lastContext=o,o}static getCanvasContext(t,e,i,a){return le.buildContext(t,le.Backends.CANVAS,e,i,a)}static getSVGContext(t,e,i,a){return le.buildContext(t,le.Backends.SVG,e,i,a)}static drawDashedLine(t,e,i,a,n,s){t.beginPath();const o=a-e,l=n-i,r=Math.atan2(l,o);let h=e,c=i;t.moveTo(e,i);let d=0,m=!0;for(;!(o<0?h<=a:h>=a)||!(l<0?c<=n:c>=n);){const e=s[d++%s.length],i=h+Math.cos(r)*e;h=o<0?Math.max(a,i):Math.min(a,i);const b=c+Math.sin(r)*e;c=l<0?Math.max(n,b):Math.min(n,b),m?t.lineTo(h,c):t.moveTo(h,c),m=!m}t.closePath(),t.stroke()}constructor(t,e){if(d(t))this.ctx=t;else{if(void 0===e)throw new g("InvalidArgument","Missing backend argument");const i=e;let a;if("string"==typeof t){const e=document.getElementById(t);if(!e)throw new g("BadElementId",`Can't find element with ID "${e}"`);a=e}else a=t;if(i===le.Backends.CANVAS){if(!Jt(a))throw new g("BadElement","CANVAS context requires an HTMLCanvasElement.");const t=a.getContext("2d",{willReadFrequently:!0});if(!t)throw new g("BadElement","Can't get canvas context");this.ctx=new Qt(t)}else{if(i!==le.Backends.SVG)throw new g("InvalidBackend",`No support for backend: ${i}`);if(!qt(a))throw new g("BadElement","SVG context requires an HTMLDivElement.");this.ctx=new ie(a)}}}resize(t,e){return this.ctx.resize(t,e),this}getContext(){return this.ctx}}le.Backends=ae,le.LineEndType=ne,le.lastContext=void 0;class re extends tt{static get CATEGORY(){return x.StringNumber}static get metrics(){var t;return null!==(t=V.currentMusicFont().getMetrics().stringNumber)&&void 0!==t?t:{verticalPadding:0,stemPadding:0,leftPadding:0,rightPadding:0}}static format(t,e){const i=e.left_shift,a=e.right_shift;if(!t||0===t.length)return!1;const n=[];let s=null,o=0,l=0;for(let i=0;ie.line-t.line));let r=0,h=0,c=0,d=null,b=null;for(let t=0;tc?g:c),d=m,b=e}return e.left_shift+=h,e.right_shift+=c,!0}constructor(t){super(),this.string_number=t,this.position=tt.Position.ABOVE,this.x_shift=0,this.y_shift=0,this.text_line=0,this.stem_offset=0,this.x_offset=0,this.y_offset=0,this.dashed=!0,this.leg=le.LineEndType.NONE,this.radius=8,this.drawCircle=!0,this.setWidth(2*this.radius+4),this.resetFont()}setLineEndType(t){return t>=le.LineEndType.NONE&&t<=le.LineEndType.DOWN&&(this.leg=t),this}setStringNumber(t){return this.string_number=t,this}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}setLastNote(t){return this.last_note=t,this}setDashed(t){return this.dashed=t,this}setDrawCircle(t){return this.drawCircle=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index),a=e.hasStem()?e.getStemDirection():nt.UP;let n=i.x+this.x_shift+this.x_offset,s={};e.hasStem()&&(s=e.checkStem().getExtents());let o=i.y+this.y_shift+this.y_offset;switch(this.position){case tt.Position.ABOVE:o=e.getYs().reduce(((t,e)=>tt>e?t:e)),e.hasStem()&&a==nt.DOWN&&(o=s.topY-re.metrics.stemPadding),o+=this.radius+re.metrics.verticalPadding+this.text_line*V.STAVE_LINE_DISTANCE;break;case tt.Position.LEFT:n-=this.radius/2+re.metrics.leftPadding;break;case tt.Position.RIGHT:n+=this.radius/2+re.metrics.rightPadding;break;default:throw new g("InvalidPosition",`The position ${this.position} is invalid`)}t.save(),this.drawCircle&&(t.beginPath(),t.arc(n,o,this.radius,0,2*Math.PI,!1),t.setLineWidth(1.5),t.stroke()),t.setFont(this.textFont);const l=n-t.measureText(this.string_number).width/2;t.fillText(""+this.string_number,l,o+4.5);const r=this.last_note;if(b(r)){const i=r.getStemX()-e.getX()+5;let a,s;switch(t.setStrokeStyle("#000000"),t.setLineCap("round"),t.setLineWidth(.6),this.dashed?le.drawDashedLine(t,n+10,o,n+i,o,[3,3]):le.drawDashedLine(t,n+10,o,n+i,o,[3,0]),this.leg){case le.LineEndType.UP:a=-10,s=this.dashed?[3,3]:[3,0],le.drawDashedLine(t,n+i,o,n+i,o+a,s);break;case le.LineEndType.DOWN:a=10,s=this.dashed?[3,3]:[3,0],le.drawDashedLine(t,n+i,o,n+i,o+a,s)}}t.restore()}}re.TEXT_FONT={family:M.SANS_SERIF,size:M.SIZE,weight:P.BOLD,style:k.NORMAL};class he extends tt{static get CATEGORY(){return x.Stroke}static format(t,e){const i=e.left_shift;if(!t||0===t.length)return!1;const a=t.map((t=>{const e=t.getNote(),i=t.checkIndex();if(m(e)){const{line:a}=e.getKeyProps()[i];return{line:a,shift:e.getLeftDisplacedHeadPx(),stroke:t}}if(_(e)){const{str:a}=e.getPositions()[i];return{line:a,shift:0,stroke:t}}throw new g("Internal","Unexpected instance.")})),n=i,s=a.reduce(((t,{stroke:e,shift:i})=>(e.setXShift(n+i),Math.max(e.getWidth()+0,t))),0);return e.left_shift+=s,!0}constructor(t,e){super(),this.options=Object.assign({all_voices:!0},e),this.all_voices=this.options.all_voices,this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.resetFont(),this.setXShift(0),this.setWidth(10)}getPosition(){return this.position}addEndNote(t){return this.note_end=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let a=e.getYs(),n=i.y,s=i.y;const o=i.x-5,l=e.checkStave().getSpacingBetweenLines(),r=this.checkModifierContext().getMembers(e.getCategory());for(let t=0;t0){a-=o.map((t=>t.getTextHeight())).reduce(((t,e)=>t>e?t:e))/V.STAVE_LINE_DISTANCE+1}else e.top_text_line+=1;for(let e=0;e=t.line?i.above:i.below}}this.placeGlyphOnLine(a,this.checkStave(),t.line),this.glyphs.push(a);const s=this.xPositions[this.xPositions.length-1],o=a.getMetrics().width+n;this.xPositions.push(s+o),this.width+=o}cancelKey(t){return this.formatted=!1,this.cancelKeySpec=t,this}convertToCancelAccList(t){const e=V.keySignature(t),i=this.accList.length>0&&e.length>0&&e[0].type!==this.accList[0].type,a=i?e.length:e.length-this.accList.length;if(a<1)return;const n=[];for(let t=0;t0?e[0].type:void 0;let a;if(this.cancelKeySpec&&(a=this.convertToCancelAccList(this.cancelKeySpec)),this.alterKeySpec&&this.convertToAlterAccList(this.alterKeySpec),this.accList.length>0){const n=(this.position===wt.END?t.getEndClef():t.getClef())||t.getClef();a&&this.convertAccLines(n,a.type,a.accList),this.convertAccLines(n,i,e);for(let t=0;t0?"PlusSmall":"Plus";break;case"(":a=i.length>0?"ParensLeftSmall":"ParensLeft";break;case")":a=i.length>0?"ParensRightSmall":"ParensRight"}const n=new Z("timeSig"+a,this.timeSignature.point);this.topGlyphs.push(n),l+=null!==(o=n.getMetrics().width)&&void 0!==o?o:0,r=Math.max(r,n.getMetrics().height)}let h=0;for(let t=0;t22?1:0,this.width=Math.max(l,h),this.xMin=this.getMetrics().x_min,this.topStartX=(this.width-l)/2,this.botStartX=(this.width-h)/2,this.reset()}getMetrics(){return{x_min:this.xMin,x_max:this.xMin+this.width,width:this.width}}renderToStave(t){const e=this.checkStave(),i=this.checkContext();let a=t+this.topStartX,n=0;n=this.botGlyphs.length>0?e.getYForLine(this.timeSignature.topLine-this.lineShift):(e.getYForLine(this.timeSignature.topLine)+e.getYForLine(this.timeSignature.bottomLine))/2;for(let t=0;t{const e=t.split("/");if(2!==e.length&&"+"!==e[0]&&"-"!==e[0])throw new g("BadTimeSignature",`Invalid time spec: ${t}. Must be in the form "/"`);e.forEach((e=>{if(0==/^[0-9+\-()]+$/.test(e))throw new g("BadTimeSignature",`Invalid time spec: ${t}. Must contain valid signatures.`)}))})(t);const a=t.split("/");return{line:0,num:!0,glyph:this.makeTimeSignatureGlyph(null!==(e=a[0])&&void 0!==e?e:"",null!==(i=a[1])&&void 0!==i?i:"")}}makeTimeSignatureGlyph(t,e){return new Se(this,t,e,"timeSig0",this.point)}getInfo(){const{line:t,is_numeric:e,glyph:i}=this;return{line:t,num:e,glyph:i}}setTimeSig(t){this.timeSpec=t;const e=this.parseTimeSpec(t);return this.setGlyph(e.glyph),this.is_numeric=e.num,this.line=e.line,this}getTimeSpec(){return this.timeSpec}getLine(){return this.line}setLine(t){this.line=t}getGlyph(){return this.glyph}setGlyph(t){this.glyph=t,this.setWidth(u(this.glyph.getMetrics().width))}getIsNumeric(){return this.is_numeric}setIsNumeric(t){this.is_numeric=t}draw(){const t=this.checkStave(),e=t.checkContext();this.setRendered(),this.applyStyle(e),e.openGroup("timesignature",this.getAttribute("id")),this.glyph.setStave(t),this.glyph.setContext(e),this.placeGlyphOnLine(this.glyph,t,this.line),this.glyph.renderToStave(this.x),e.closeGroup(),this.restoreStyle(e)}}const ve={[Nt.CATEGORY]:0,[be.CATEGORY]:1,[_e.CATEGORY]:2,[Te.CATEGORY]:3},we={[Te.CATEGORY]:0,[_e.CATEGORY]:1,[Nt.CATEGORY]:2,[be.CATEGORY]:3};class Ce extends L{static get CATEGORY(){return x.Stave}static get defaultPadding(){const t=V.currentMusicFont();return t.lookupMetric("stave.padding")+t.lookupMetric("stave.endPaddingMax")}static get rightPadding(){return V.currentMusicFont().lookupMetric("stave.endPaddingMax")}constructor(t,e,i,a){super(),this.height=0,this.x=t,this.y=e,this.width=i,this.formatted=!1,this.start_x=t+5,this.end_x=t+i,this.modifiers=[],this.measure=0,this.clef="treble",this.endClef=void 0,this.resetFont(),this.options=Object.assign({vertical_bar_width:10,num_lines:5,fill_style:"#999999",left_bar:!0,right_bar:!0,spacing_between_lines_px:V.STAVE_LINE_DISTANCE,space_above_staff_ln:4,space_below_staff_ln:4,top_text_position:1,bottom_text_position:4,line_config:[]},a),this.bounds={x:this.x,y:this.y,w:this.width,h:0},this.defaultLedgerLineStyle={strokeStyle:"#444",lineWidth:1.4},this.resetLines(),this.addModifier(new Nt(this.options.left_bar?Ct.SINGLE:Ct.NONE)),this.addEndModifier(new Nt(this.options.right_bar?Ct.SINGLE:Ct.NONE))}setDefaultLedgerLineStyle(t){this.defaultLedgerLineStyle=t}getDefaultLedgerLineStyle(){return Object.assign(Object.assign({},this.getStyle()),this.defaultLedgerLineStyle)}space(t){return this.options.spacing_between_lines_px*t}resetLines(){this.options.line_config=[];for(let t=0;ti.getWidth()&&(e-=i.getWidth()),e}setRepetitionType(t,e=0){return this.modifiers.push(new xe(t,this.x,e)),this}setVoltaType(t,e,i){return this.modifiers.push(new fe(t,e,this.x,i)),this}setSection(t,e,i=0,a,n=!0){const s=new ge(t,this.x+i,e,n);return a&&s.setFontSize(a),this.modifiers.push(s),this}setTempo(t,e){return this.modifiers.push(new pe(t,this.x,e)),this}setText(t,e,i={}){return this.modifiers.push(new ye(t,e,i)),this}getHeight(){return this.height}getSpacingBetweenLines(){return this.options.spacing_between_lines_px}getBoundingBox(){return new B(this.x,this.y,this.width,this.getBottomY()-this.y)}getBottomY(){const t=this.options,e=t.spacing_between_lines_px;return this.getYForLine(t.num_lines)+t.space_below_staff_ln*e}getBottomLineY(){return this.getYForLine(this.options.num_lines)}getYForLine(t){const e=this.options,i=e.spacing_between_lines_px,a=e.space_above_staff_ln;return this.y+t*i+a*i}getLineForY(t){const e=this.options,i=e.spacing_between_lines_px,a=e.space_above_staff_ln;return(t-this.y)/i-a}getYForTopText(t=0){return this.getYForLine(-t-this.options.top_text_position)}getYForBottomText(t=0){return this.getYForLine(this.options.bottom_text_position+t)}getYForNote(t){const e=this.options,i=e.spacing_between_lines_px,a=e.space_above_staff_ln;return this.y+a*i+5*i-t*i}getYForGlyphs(){return this.getYForLine(3)}addModifier(t,e){return void 0!==e&&t.setPosition(e),t.setStave(this),this.formatted=!1,this.modifiers.push(t),this}addEndModifier(t){return this.addModifier(t,wt.END),this}setBegBarType(t){const{SINGLE:e,REPEAT_BEGIN:i,NONE:a}=Ct;return t!==e&&t!==i&&t!==a||(this.modifiers[0].setType(t),this.formatted=!1),this}setEndBarType(t){return t!==Ct.REPEAT_BEGIN&&(this.modifiers[1].setType(t),this.formatted=!1),this}setClefLines(t){return this.clef=t,this}setClef(t,e,i,a){void 0===a&&(a=wt.BEGIN),a===wt.END?this.endClef=t:this.clef=t;const n=this.getModifiers(a,be.CATEGORY);return 0===n.length?this.addClef(t,e,i,a):n[0].setType(t,e,i),this}getClef(){return this.clef}setEndClef(t,e,i){return this.setClef(t,e,i,wt.END),this}getEndClef(){return this.endClef}setKeySignature(t,e,i){void 0===i&&(i=wt.BEGIN);const a=this.getModifiers(i,_e.CATEGORY);return 0===a.length?this.addKeySignature(t,e,i):a[0].setKeySig(t,e),this}setEndKeySignature(t,e){return this.setKeySignature(t,e,wt.END),this}setTimeSignature(t,e,i){void 0===i&&(i=wt.BEGIN);const a=this.getModifiers(i,Te.CATEGORY);return 0===a.length?this.addTimeSignature(t,e,i):a[0].setTimeSig(t),this}setEndTimeSignature(t,e){return this.setTimeSignature(t,e,wt.END),this}addKeySignature(t,e,i){return void 0===i&&(i=wt.BEGIN),this.addModifier(new _e(t,e).setPosition(i),i),this}addClef(t,e,i,a){return void 0===a||a===wt.BEGIN?this.clef=t:a===wt.END&&(this.endClef=t),this.addModifier(new be(t,e,i),a),this}addEndClef(t,e,i){return this.addClef(t,e,i,wt.END),this}addTimeSignature(t,e,i){return this.addModifier(new Te(t,e),i),this}addEndTimeSignature(t,e){return this.addTimeSignature(t,e,wt.END),this}addTrebleGlyph(){return this.addClef("treble"),this}getModifiers(t,e){const i=void 0===t,a=void 0===e;return i&&a?this.modifiers:i?this.modifiers.filter((t=>e===t.getCategory())):a?this.modifiers.filter((e=>t===e.getPosition())):this.modifiers.filter((i=>t===i.getPosition()&&e===i.getCategory()))}sortByCategory(t,e){for(let i=t.length-1;i>=0;i--)for(let a=0;ae[t[a+1].getCategory()]){const e=t[a];t[a]=t[a+1],t[a+1]=e}}format(){const t=this.modifiers[0],e=this.modifiers[1],i=this.getModifiers(wt.BEGIN),a=this.getModifiers(wt.END);let n,s,l;this.sortByCategory(i,ve),this.sortByCategory(a,we),i.length>1&&t.getType()===Ct.REPEAT_BEGIN&&(i.push(i.splice(0,1)[0]),i.splice(0,0,new Nt(Ct.SINGLE))),a.indexOf(e)>0&&a.splice(0,0,new Nt(Ct.NONE));let r=0,h=this.x;for(let t=0;t0){t.save(),t.setFont(this.textFont);const e=t.measureText(""+this.measure).width;n=this.getYForTopText(0)+3,t.fillText(""+this.measure,this.x-e/2,n),t.restore()}return this}getVerticalBarWidth(){return this.options.vertical_bar_width}getConfigForLines(){return this.options.line_config}setConfigForLine(t,e){if(t>=this.options.num_lines||t<0)throw new g("StaveConfigError","The line number must be within the range of the number of lines in the Stave.");if(void 0===e.visible)throw new g("StaveConfigError","The line configuration object is missing the 'visible' property.");if("boolean"!=typeof e.visible)throw new g("StaveConfigError","The line configuration objects 'visible' property must be true or false.");return this.options.line_config[t]=e,this}setConfigForLines(t){if(t.length!==this.options.num_lines)throw new g("StaveConfigError","The length of the lines configuration array must match the number of lines in the Stave");for(const e in t)null==t[e].visible&&(t[e]=this.options.line_config[e]),this.options.line_config[e]=Object.assign(Object.assign({},this.options.line_config[e]),t[e]);return this.options.line_config=t,this}static formatBegModifiers(t){const e=e=>{let i=0;t.forEach((t=>{const a=t.getModifiers(wt.BEGIN,e);a.length>0&&a[0].getX()>i&&(i=a[0].getX())}));let a=0;t.forEach((t=>{a=0;t.getModifiers(wt.BEGIN,e).forEach((t=>{i-t.getX()>a&&(a=i-t.getX())}));const n=t.getModifiers(wt.BEGIN);let s=!1;n.forEach((t=>{t.getCategory()===e&&(s=!0),s&&a>0&&t.setX(t.getX()+a)})),t.setNoteStartX(t.getNoteStartX()+a)}))};t.forEach((t=>{t.formatted||t.format()})),e(x.Clef),e(x.KeySignature),e(x.TimeSignature);let i=0;t.forEach((t=>{t.getNoteStartX()>i&&(i=t.getNoteStartX())})),t.forEach((t=>{t.setNoteStartX(i)})),i=0,t.forEach((t=>{t.getModifiers(wt.BEGIN,x.Barline).forEach((t=>{t.getType()==Ct.REPEAT_BEGIN&&t.getX()>i&&(i=t.getX())}))})),t.forEach((t=>{t.getModifiers(wt.BEGIN,x.Barline).forEach((t=>{t.getType()==Ct.REPEAT_BEGIN&&t.setX(i)}))}))}}function De(t,e,i,a,n){if(e!==Be.type.BOLD_DOUBLE_LEFT&&e!==Be.type.BOLD_DOUBLE_RIGHT)throw new g("InvalidConnector","A REPEAT_BEGIN or REPEAT_END type must be provided.");let s=3,o=3.5;e===Be.type.BOLD_DOUBLE_RIGHT&&(s=-5,o=3),t.fillRect(i+s,a,1,n-a),t.fillRect(i-2,a,o,n-a)}Ce.TEXT_FONT={family:M.SANS_SERIF,size:8,weight:P.NORMAL,style:k.NORMAL};class Be extends L{static get CATEGORY(){return x.StaveConnector}constructor(t,e){super(),this.thickness=V.STAVE_LINE_THICKNESS,this.width=3,this.top_stave=t,this.bottom_stave=e,this.type=Be.type.DOUBLE,this.resetFont(),this.x_shift=0,this.texts=[]}setType(t){const e="string"==typeof t?Be.typeString[t]:t;return Object.values(Be.type).includes(e)&&(this.type=e),this}getType(){return this.type}setText(t,e={}){return this.texts.push({content:t,options:Object.assign({shift_x:0,shift_y:0},e)}),this}setXShift(t){if("number"!=typeof t)throw new g("InvalidType","x_shift must be a Number");return this.x_shift=t,this}getXShift(){return this.x_shift}draw(){const t=this.checkContext();this.setRendered();let e=this.top_stave.getYForLine(0),i=this.bottom_stave.getYForLine(this.bottom_stave.getNumLines()-1)+this.thickness,a=this.width,n=this.top_stave.getX();(this.type===Be.type.SINGLE_RIGHT||this.type===Be.type.BOLD_DOUBLE_RIGHT||this.type===Be.type.THIN_DOUBLE)&&(n=this.top_stave.getX()+this.top_stave.getWidth());let s=i-e;switch(this.type){case Be.type.SINGLE:case Be.type.SINGLE_LEFT:case Be.type.SINGLE_RIGHT:a=1;break;case Be.type.DOUBLE:n-=this.width+2,e-=this.thickness,s+=.5;break;case Be.type.BRACE:{a=12;const n=this.top_stave.getX()-2+this.x_shift,o=e,l=n,r=i,h=n-a,c=o+s/2,d=h-.9*a,m=o+.2*s,b=n+1.1*a,_=c-.135*s,x=b,g=c+.135*s,p=d,u=r-.2*s,y=h-a,f=u,S=n+.4*a,T=c+.135*s,v=S,w=c-.135*s,C=y,D=m;t.beginPath(),t.moveTo(n,o),t.bezierCurveTo(d,m,b,_,h,c),t.bezierCurveTo(x,g,p,u,l,r),t.bezierCurveTo(y,f,S,T,h,c),t.bezierCurveTo(v,w,C,D,n,o),t.fill(),t.stroke();break}case Be.type.BRACKET:e-=6,i+=6,s=i-e,Z.renderGlyph(t,n-5,e,40,"bracketTop"),Z.renderGlyph(t,n-5,i,40,"bracketBottom"),n-=this.width+2;break;case Be.type.BOLD_DOUBLE_LEFT:De(t,this.type,n+this.x_shift,e,i-this.thickness);break;case Be.type.BOLD_DOUBLE_RIGHT:De(t,this.type,n,e,i-this.thickness);break;case Be.type.THIN_DOUBLE:a=1,s-=this.thickness;break;case Be.type.NONE:break;default:throw new g("InvalidType",`The provided StaveConnector.type (${this.type}) is invalid.`)}this.type!==Be.type.BRACE&&this.type!==Be.type.BOLD_DOUBLE_LEFT&&this.type!==Be.type.BOLD_DOUBLE_RIGHT&&this.type!==Be.type.NONE&&t.fillRect(n,e,a,s),this.type===Be.type.THIN_DOUBLE&&t.fillRect(n-3,e,a,s),t.save(),t.setLineWidth(2),t.setFont(this.textFont);for(let e=0;et.isCenterAligned()))}getMetrics(){const{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:a,rightDisplacedHeadPx:n,modLeftPx:s,modRightPx:o,totalLeftPx:l,totalRightPx:r}=this;return{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:a,rightDisplacedHeadPx:n,modLeftPx:s,modRightPx:o,totalLeftPx:l,totalRightPx:r}}getCurrentTick(){return this.currentTick}setCurrentTick(t){this.currentTick=t,this.preFormatted=!1}addTickable(t,e){if(!t)throw new g("BadArgument","Invalid tickable added.");if(!t.shouldIgnoreTicks()){const e=t.getTicks();e.greaterThan(this.maxTicks)&&(this.maxTicks=e.clone(),this.maxTickable=t),(null==this.minTicks||e.lessThan(this.minTicks))&&(this.minTicks=e.clone(),this.minTickable=t)}return t.setTickContext(this),this.tickables.push(t),this.tickablesByVoice[e||0]=t,this.preFormatted=!1,this}preFormat(){if(this.preFormatted)return this;for(let t=0;t{e.addToModifierContext(new me);const a=(new Ee).addTickable(e).preFormat(),n=a.getMetrics();return a.setX(t+n.totalLeftPx),t+a.getWidth()+n.totalRightPx+i}),e)}static plotDebugging(t,e,i,a,n,s){const o=i+(s=Object.assign({stavePadding:V.currentMusicFont().lookupMetric("stave.padding")},s)).stavePadding,l=e.contextGaps;t.save(),t.setFont(M.SANS_SERIF,8),l.gaps.forEach((e=>{var i,s,l;i=o+e.x1,s=o+e.x2,l="rgba(100,200,100,0.4)",t.beginPath(),t.setStrokeStyle(l),t.setFillStyle(l),t.setLineWidth(1),t.fillRect(i,a,Math.max(s-i,0),n-a),t.setFillStyle("green"),t.fillText(Math.round(e.x2-e.x1).toString(),o+e.x1,n+12)})),t.setFillStyle("red"),t.fillText(`Loss: ${(e.totalCost||0).toFixed(2)} Shift: ${(e.totalShift||0).toFixed(2)} Gap: ${l.total.toFixed(2)}`,o-20,n+27),t.restore()}static FormatAndDraw(t,e,i,a){let n={auto_beam:!1,align_rests:!1};"object"==typeof a?n=Object.assign(Object.assign({},n),a):"boolean"==typeof a&&(n.auto_beam=a);const s=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(i),o=n.auto_beam?Le.applyAndGetBeams(s):[];return(new ke).joinVoices([s]).formatToStave([s],e,{align_rests:n.align_rests,stave:e}),s.setStave(e).draw(t,e),o.forEach((e=>e.setContext(t).draw())),s.getBoundingBox()}static FormatAndDrawTab(t,e,i,a,n,s,o){let l={auto_beam:s,align_rests:!1};"object"==typeof o?l=Object.assign(Object.assign({},l),o):"boolean"==typeof o&&(l.auto_beam=o);const r=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(n),h=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(a),c=l.auto_beam?Le.applyAndGetBeams(r):[];(new ke).joinVoices([r]).joinVoices([h]).formatToStave([r,h],i,{align_rests:l.align_rests}),r.draw(t,i),h.draw(t,e),c.forEach((e=>e.setContext(t).draw())),new Be(i,e).setContext(t).draw()}static AlignRestsToNotes(t,e,i){t.forEach(((a,n)=>{if(m(a)&&a.isRest()){if(a.getTuplet()&&!i)return;const s=a.getGlyphProps().position.toUpperCase();if("R/4"!==s&&"B/4"!==s)return;if(e||a.getBeam()){const e=a.getKeyProps()[0];if(0===n)e.line=Pe(t,e.line,n,!1);else if(n>0&&nke.AlignRestsToNotes(t.getTickables(),e)))}preCalculateMinTotalWidth(t){const e=V.currentMusicFont().lookupMetric("stave.unalignedNotePadding");let i=0,a=0,n=0;const s=[],o=[];if(this.hasMinTotalWidth)return this.minTotalWidth;if(!t)throw new g("BadArgument","'voices' required to run preCalculateMinTotalWidth");this.createTickContexts(t);const{list:l,map:r}=this.tickContexts;this.minTotalWidth=0,l.forEach((e=>{const l=r[e];l.preFormat(),l.getTickables().length{a+=t.getMetrics().width,n+=t.getTicks().value(),s.push(t.getMetrics().width),o.push(t.getTicks().value())}));const h=l.getWidth();this.minTotalWidth+=h})),this.hasMinTotalWidth=!0;const h=a>0?a/s.length:1/s.length,c=w(s.map((t=>Math.pow(t-h,2)))),d=Math.pow(c/s.length,.5)/h,m=n/o.length,b=w(o.map((t=>Math.pow(t-m,2)))),_=Math.pow(b/o.length,.5)/m,x=Math.max(_,d)*l.length*e,p=e*i;return this.minTotalWidth+Math.max(p,x)}getMinTotalWidth(){if(!this.hasMinTotalWidth)throw new g("NoMinTotalWidth","Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'");return this.minTotalWidth}static getResolutionMultiplier(t){if(!t||!t.length)throw new g("BadArgument","No voices to format");const e=t[0].getTotalTicks();return t.reduce(((t,i)=>{if(!i.getTotalTicks().equals(e))throw new g("TickMismatch","Voices should have same total note duration in ticks.");if(i.getMode()===jt.Mode.STRICT&&!i.isComplete())throw new g("IncompleteVoice","Voice does not have enough notes.");return Math.max(t,C.LCM(t,i.getResolutionMultiplier()))}),1)}createModifierContexts(t){if(0==t.length)return;const e=ke.getResolutionMultiplier(t),i=new Map,a=[];t.forEach((t=>{const n=new C(0,e);t.getTickables().forEach((t=>{const e=n.numerator;let s=i.get(t.getStave());if(s||(i.set(t.getStave(),{}),s=i.get(t.getStave())),!(s?s[e]:void 0)){const t=new me;a.push(t),s[e]=t}t.addToModifierContext(s[e]),n.add(t.getTicks())}))})),this.modifierContexts.push({map:i,array:a,resolutionMultiplier:e})}createTickContexts(t){const e=function(t,e,i){if(0==t.length)return{map:{},array:[],list:[],resolutionMultiplier:0};const a={},n=[],s=[],o=ke.getResolutionMultiplier(t);return t.forEach(((t,l)=>{const r=new C(0,o);t.getTickables().forEach((t=>{const o=r.numerator;if(!a[o]){const t=e({tickID:o});s.push(t),a[o]=t,n.push(o)}i(t,a[o],l),r.add(t.getTicks())}))})),{map:a,array:s,list:n.sort(((t,e)=>t-e)),resolutionMultiplier:o}}(t,(t=>new Ee(t)),((t,e,i)=>e.addTickable(t,i)));this.tickContexts=e;const i=this.tickContexts.array;return i.forEach((t=>{t.tContexts=i})),e}getTickContexts(){return this.tickContexts}preFormat(t=0,e,i,a){const n=this.tickContexts;if(!n)throw new g("NoTickContexts","preFormat requires TickContexts");const{list:s,map:o}=n;this.lossHistory=[],i&&a&&i.forEach((t=>t.setStave(a).preFormat()));let l=0,r=0;this.minTotalWidth=0;let h=0;s.forEach((t=>{const e=o[t];e.preFormat();const i=e.getWidth();this.minTotalWidth+=i;const a=e.getMaxTicks().value();h+=a;const n=e.getMetrics();l=l+r+n.totalLeftPx,e.setX(l),r=i-n.totalLeftPx}));const{globalSoftmax:c,softmaxFactor:d,maxIterations:m}=this.formatterOptions,b=w(s.map((t=>Math.pow(d,o[t].getMaxTicks().value()/h))));if(this.minTotalWidth=l+r,this.hasMinTotalWidth=!0,t<=0)return this.evaluate();const _=o[s[0]],x=o[s[s.length-1]];function p(t){return s.map(((e,i)=>{const a=o[e],n=a.getTickablesByVoice();let l;if(i>0){const e=o[s[i-1]];for(let r=i-1;r>=0;r--){const i=o[s[r]].getTickablesByVoice(),m=[];if(Object.keys(n).forEach((t=>{i[t]&&m.push(t)})),m.length>0){let s=0,o=1/0,r=0;if(m.forEach((t=>{const e=i[t].getTicks().value();e>s&&(l=i[t],s=e);const a=n[t],r=a.getX()-(a.getMetrics().modLeftPx+a.getMetrics().leftDisplacedHeadPx),h=i[t].getMetrics(),c=i[t].getX()+h.notePx+h.modRightPx+h.rightDisplacedHeadPx;o=Math.min(o,r-c)})),o=Math.min(o,a.getX()-(e.getX()+.05*t)),c){const e=h;r=Math.pow(d,s/e)/b*t}else void 0!==l&&(r=l.getVoice().softmax(s)*t);return{expectedDistance:r,maxNegativeShiftPx:o,fromTickable:l}}}}return{expectedDistance:0,fromTickablePx:0,maxNegativeShiftPx:0}}))}function y(t){const e=f/2;let i=0;return s.forEach(((a,n)=>{const s=o[a];if(n>0){const e=s.getX(),a=t[n],o=u(a.fromTickable).getX()+a.expectedDistance-(e+i);let l=0;o>0?i+=o:o<0&&(l=Math.min(a.maxNegativeShiftPx,Math.abs(o)),i+=-l),s.setX(e+i)}s.getCenterAlignedTickables().forEach((t=>{t.setCenterXShift(e-s.getX())}))})),x.getX()-_.getX()}const f=t-x.getMetrics().notePx-x.getMetrics().totalRightPx-_.getMetrics().totalLeftPx,S=V.currentMusicFont(),T=S.lookupMetric("stave.endPaddingMin"),v=S.lookupMetric("stave.endPaddingMax"),C=S.lookupMetric("stave.padding");let D=f;const B=p(D);let E=y(B);if(1===s.length)return 0;const P=((t,e)=>{let i=t/2;if(e.length>1)for(let t=1;t{let e=0;const i=x&&x.getMaxTickable();if(i){const a=i.getVoice();if(a.getTicksUsed().value()>a.getTotalTicks().value())return 2*vF&&M>0||E+N1;)D-=E-F,N=k(D),A=N-(v-T),E=y(p(D)),M--;return this.justifyWidth=t,this.evaluate()}evaluate(){const t=this.tickContexts,e=this.justifyWidth;this.contextGaps={total:0,gaps:[]},t.list.forEach(((e,i)=>{if(0===i)return;const a=t.list[i-1],n=t.map[a],s=t.map[e],o=n.getMetrics(),l=s.getMetrics(),r=n.getX()+o.notePx+o.totalRightPx,h=s.getX()-l.totalLeftPx,c=h-r;this.contextGaps.total+=c,this.contextGaps.gaps.push({x1:r,x2:h}),s.getFormatterMetrics().freedom.left=c,n.getFormatterMetrics().freedom.right=c})),this.durationStats={};const i=this.durationStats;this.voices.forEach((t=>{t.getTickables().forEach(((t,a,n)=>{const s=t.getTicks().clone().simplify().toString(),o=t.getMetrics(),l=t.getFormatterMetrics(),r=t.getX()+o.notePx+o.modRightPx+o.rightDisplacedHeadPx;let h=0;if(a{t.getTickables().forEach((t=>{const e=t.getTicks().clone().simplify().toString(),n=t.getFormatterMetrics();n.space.mean=i[e].mean,n.duration=e,n.iterations+=1,n.space.deviation=n.space.used-n.space.mean,a+=Math.pow(n.space.deviation,2)}))})),this.totalCost=Math.sqrt(a),this.lossHistory.push(this.totalCost),this.totalCost}tune(t){var e;const i=this.tickContexts;if(!i)return 0;const a=null!==(e=null==t?void 0:t.alpha)&&void 0!==e?e:.5;let n=0;return this.totalShift=0,i.list.forEach(((t,e,s)=>{const o=i.map[t],l=e>0?i.map[s[e-1]]:void 0,r=et.getFormatterMetrics().space.deviation)));h>0?n=-Math.min(o.getFormatterMetrics().freedom.right,Math.abs(h)):h<0&&(n=r?Math.min(r.getFormatterMetrics().freedom.right,Math.abs(h)):0),n*=a,this.totalShift+=n})),this.evaluate()}postFormat(){return this.modifierContexts.forEach((t=>{t.array.forEach((t=>t.postFormat()))})),this.tickContexts.list.forEach((t=>{this.tickContexts.map[t].postFormat()})),this}joinVoices(t){return this.createModifierContexts(t),this.hasMinTotalWidth=!1,this}format(t,e,i){const a=Object.assign({align_rests:!1},i);this.voices=t;const n=this.formatterOptions.softmaxFactor;return n&&this.voices.forEach((t=>t.setSoftmaxFactor(n))),this.alignRests(t,a.align_rests),this.createTickContexts(t),this.preFormat(e,a.context,t,a.stave),a.stave&&this.postFormat(),this}formatToStave(t,e,i){const a=Object.assign({context:e.getContext()},i),n=e.getNoteEndX()-e.getNoteStartX()-Ce.defaultPadding;return function(...t){ke.DEBUG&&y("Vex.Flow.Formatter",t)}("Formatting voices to width: ",n),this.format(t,n,a)}getTickContext(t){var e;return null===(e=this.tickContexts)||void 0===e?void 0:e.map[t]}}var Ne;ke.DEBUG=!1,function(t){t[t.BOTTOM=-1]="BOTTOM",t[t.TOP=1]="TOP"}(Ne||(Ne={}));class Ae extends L{static get CATEGORY(){return x.Tuplet}static get LOCATION_TOP(){return Ne.TOP}static get LOCATION_BOTTOM(){return Ne.BOTTOM}static get NESTING_OFFSET(){return 15}static get metrics(){const t=V.currentMusicFont().getMetrics().tuplet;if(!t)throw new g("BadMetrics","tuplet missing");return t}constructor(t,e={}){if(super(),this.numerator_glyphs=[],this.denom_glyphs=[],!t||!t.length)throw new g("BadArguments","No notes provided for tuplet.");this.options=e,this.notes=t,this.num_notes=null!=this.options.num_notes?this.options.num_notes:t.length,this.options.beats_occupied&&this.beatsOccupiedDeprecationWarning(),this.notes_occupied=this.options.notes_occupied||this.options.beats_occupied||2,null!=this.options.bracketed?this.bracketed=this.options.bracketed:this.bracketed=t.some((t=>!t.hasBeam())),this.ratioed=null!=this.options.ratioed?this.options.ratioed:Math.abs(this.notes_occupied-this.num_notes)>1,this.point=3*V.NOTATION_FONT_SCALE/5,this.y_pos=16,this.x_pos=100,this.width=200,this.setTupletLocation(this.options.location||Ae.LOCATION_TOP),ke.AlignRestsToNotes(t,!0,!0),this.resolveGlyphs(),this.attach()}attach(){for(let t=0;t=1;)this.numerator_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10);for(this.denom_glyphs=[],t=this.notes_occupied;t>=1;)this.denom_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10)}getNestedTupletCount(){const t=this.location,e=this.notes[0];let i=n(e,t),a=n(e,t);function n(t,e){return t.getTupletStack().filter((t=>t.location===e)).length}return this.notes.forEach((e=>{const s=n(e,t);i=s>i?s:i,a=s0&&(a=Math.min(s,a))}}}else{let t=Ae.metrics.bottomLine;this.notes.forEach((e=>{const i=e.getModifierContext();i&&(t=Math.max(t,i.getState().text_line+1))})),a=i.checkStave().getYForLine(t)+Ae.metrics.noteHeadOffset;for(let t=0;ta&&(a=e)}}return a+t+e}draw(){const t=this.checkContext();this.setRendered();const e=this.notes[0],i=this.notes[this.notes.length-1];this.bracketed?(this.x_pos=e.getTieLeftX()-5,this.width=i.getTieRightX()-this.x_pos+5):(this.x_pos=e.getStemX(),this.width=i.getStemX()-this.x_pos),this.y_pos=this.getYPosition();const a=(t,e)=>t+u(e.getMetrics().width);let n=this.numerator_glyphs.reduce(a,0);this.ratioed&&(n=this.denom_glyphs.reduce(a,n),n+=.32*this.point);const s=this.x_pos+this.width/2-n/2;if(this.bracketed){const e=this.width/2-n/2-5;e>0&&(t.fillRect(this.x_pos,this.y_pos,e,1),t.fillRect(this.x_pos+this.width/2+n/2+5,this.y_pos,e,1),t.fillRect(this.x_pos,this.y_pos+(this.location===Ae.LOCATION_BOTTOM?1:0),1,10*this.location),t.fillRect(this.x_pos+this.width,this.y_pos+(this.location===Ae.LOCATION_BOTTOM?1:0),1,10*this.location))}const o=V.currentMusicFont().lookupMetric("digits.shiftY",0);let l=0;if(this.numerator_glyphs.forEach((e=>{e.render(t,s+l,this.y_pos+this.point/3-2+o),l+=u(e.getMetrics().width)})),this.ratioed){const e=s+l+.16*this.point,i=.06*this.point;t.beginPath(),t.arc(e,this.y_pos-.08*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),t.beginPath(),t.arc(e,this.y_pos+.12*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),l+=.32*this.point,this.denom_glyphs.forEach((e=>{e.render(t,s+l,this.y_pos+this.point/3-2+o),l+=u(e.getMetrics().width)}))}}}function Fe(t){let e=0;return t.forEach((t=>{t.keyProps&&t.keyProps.forEach((t=>{e+=t.line-3}))})),e>=0?nt.DOWN:nt.UP}const Me="L",Oe="R",Re="B";class Le extends L{static get CATEGORY(){return x.Beam}getStemDirection(){return this.stem_direction}static getDefaultBeamGroups(t){t&&"c"!==t||(t="4/4");const e={"1/2":["1/2"],"2/2":["1/2"],"3/2":["1/2"],"4/2":["1/2"],"1/4":["1/4"],"2/4":["1/4"],"3/4":["1/4"],"4/4":["1/4"],"1/8":["1/8"],"2/8":["2/8"],"3/8":["3/8"],"4/8":["2/8"],"1/16":["1/16"],"2/16":["2/16"],"3/16":["3/16"],"4/16":["2/16"]}[t];if(void 0!==e)return e.map((t=>(new C).parse(t)));{const e=parseInt(t.split("/")[0],10),i=parseInt(t.split("/")[1],10);if(e%3==0)return[new C(3,i)];if(i>4)return[new C(2,i)];if(i<=4)return[new C(1,i)]}return[new C(1,4)]}static applyAndGetBeams(t,e,i){return Le.generateBeams(t.getTickables(),{groups:i,stem_direction:e})}static generateBeams(t,e={}){e.groups&&e.groups.length||(e.groups=[new C(2,8)]);const i=e.groups.map((t=>{if(!t.multiply)throw new g("InvalidBeamGroups","The beam groups must be an array of Vex.Flow.Fractions");return t.clone().multiply(V.RESOLUTION,1)})),a=t;let n=0,s=[],o=[];function l(){i.length-1>n?n+=1:n=0}!function(){let t=[],e=new C(0,1);a.forEach((a=>{if(t=[],a.shouldIgnoreTicks())return s.push(o),void(o=t);o.push(a);const r=i[n].clone(),h=(c=o,c.reduce(((t,e)=>e.getTicks().clone().add(t)),new C(0,1))).add(e);var c;const d=V.durationToNumber(a.getDuration())<8;if(d&&a.getTuplet()&&(r.numerator*=2),h.greaterThan(r)){if(!d){const e=o.pop();e&&t.push(e)}s.push(o);do{e=h.subtract(i[n]),l()}while(e.greaterThanEquals(i[n]));o=t}else h.equals(r)&&(s.push(o),e=new C(0,1),o=t,l())})),o.length>0&&s.push(o)}(),function(){const t=[];s.forEach((i=>{let a=[];i.forEach(((i,n,s)=>{const o=0===n||n===s.length-1,l=s[n-1],r=!e.beam_rests&&i.isRest(),h=e.beam_rests&&e.beam_middle_only&&i.isRest()&&o;let c=!1;if(e.maintain_stem_directions&&l&&!i.isRest()&&!l.isRest()){const t=l.getStemDirection();c=i.getStemDirection()!==t}const d=parseInt(i.getDuration(),10)<8;r||h||c||d?(a.length>0&&t.push(a),a=c?[i]:[]):a.push(i)})),a.length>0&&t.push(a)})),s=t}(),s.forEach((t=>{let i;if(e.maintain_stem_directions){const e=function(t){for(let e=0;e{t.setStemDirection(e)}))}(t,i)}));const r=s.filter((t=>{if(t.length>1){let e=!0;return t.forEach((t=>{t.getIntrinsicTicks()>=V.durationToTicks("4")&&(e=!1)})),e}return!1})),h=function(){const t=[];return s.forEach((e=>{let i;e.forEach((e=>{const a=e.getTuplet();a&&i!==a&&(i=a,t.push(i))}))})),t}(),c=[];return r.forEach((t=>{const i=new Le(t);e.show_stemlets&&(i.render_options.show_stemlets=!0),e.secondary_breaks&&(i.render_options.secondary_break_ticks=V.durationToTicks(e.secondary_breaks)),!0===e.flat_beams&&(i.render_options.flat_beams=!0,i.render_options.flat_beam_offset=e.flat_beam_offset),c.push(i)})),h.forEach((t=>{const e=t.notes[0].stem_direction===nt.DOWN?Ne.BOTTOM:Ne.TOP;t.setTupletLocation(e);let i=!1;for(let e=0;e=V.durationToTicks("4"))throw new g("BadArguments","Beams can only be applied to notes shorter than a quarter note.");let i,a;this.stem_direction=t[0].getStemDirection();let n=this.stem_direction;if(e&&m(t[0]))n=Fe(t);else if(e&&_(t[0])){const e=t.reduce(((t,e)=>t+e.getStemDirection()),0);n=e>-1?nt.UP:nt.DOWN}for(i=0;it.getGlyphProps().beam_count)).reduce(((t,e)=>e>t?e:t))}breakSecondaryAt(t){return this.break_on_indices=t,this}setPartialBeamSideAt(t,e){return this.forcedPartialDirections[t]=e,this}unsetPartialBeamSideAt(t){return delete this.forcedPartialDirections[t],this}getSlopeY(t,e,i,a){return i+(t-e)*a}calculateSlope(){const{notes:t,stem_direction:e,render_options:{max_slope:i,min_slope:a,slope_iterations:n,slope_cost:s}}=this,o=t[0],l=function(t,e){const i=t.getStemExtents().topY,a=t.getStemX();return(e.getStemExtents().topY-i)/(e.getStemX()-a)}(o,t[t.length-1]),r=(i-a)/n;let h=Number.MAX_VALUE,c=0,d=0;for(let n=a;n<=i;n+=r){let i=0,a=0;for(let s=1;sn)&&(r=n,o=Math.min(...a.getYs()),l=a.getBeamCount())}let h=s/t.length;const c=a+l*(1.5*i),d=o+c*-e;e===nt.DOWN&&hd&&(h=o-c),n?(e===nt.DOWN&&h>n||e===nt.UP&&h=8&&(c=-1!==this.break_on_indices.indexOf(r),this.render_options.secondary_break_ticks&&l>=this.render_options.secondary_break_ticks&&(l=0,c=!0));const d=h.getIntrinsicTicks(){const i=e.getStem();if(i){const a=e.getStemX();i.setNoteHeadXBounds(a,a),i.setContext(t).draw()}}),this)}drawBeamLines(t){const e=["4","8","16","32","64"],i=this.notes[0];let a=this.getBeamYToDraw();const n=i.getStemX(),s=this.render_options.beam_width*this.stem_direction;for(let i=0;i0||!0===e;return!e||n>0||(this.pos=a),o?this.matchSuccess():this.matchFail(a),{success:o,results:i,numMatches:n}}expectZeroOrMore(t){return this.expectOneOrMore(t,!0)}expect(t){if(Ge("Evaluating rule function:",t),!t)throw new g("Invalid rule function");let e;const i=t.bind(this.grammar)();if(i.token)e=this.matchToken(i.token,!0===i.noSpace),e.success&&(this.pos+=e.incrementPos);else{if(!i.expect)throw Ge(i),new g("Bad grammar! No `token` or `expect` property "+i);e=i.oneOrMore?this.expectOneOrMore(i):i.zeroOrMore?this.expectZeroOrMore(i):this.expectOne(i)}const a=[];return e.matches=a,e.results&&e.results.forEach((t=>a.push(Ye(t)))),i.run&&e.success&&i.run({matches:a}),e}}function je(...t){Qe.DEBUG&&y("Vex.Flow.EasyScore",t)}He.DEBUG=!1;class Xe{constructor(t){this.builder=t}begin(){return this.LINE}LINE(){return{expect:[this.PIECE,this.PIECES,this.EOL]}}PIECE(){return{expect:[this.CHORDORNOTE,this.PARAMS],run:()=>this.builder.commitPiece()}}PIECES(){return{expect:[this.COMMA,this.PIECE],zeroOrMore:!0}}PARAMS(){return{expect:[this.DURATION,this.TYPE,this.DOTS,this.OPTS]}}CHORDORNOTE(){return{expect:[this.CHORD,this.SINGLENOTE],or:!0}}CHORD(){return{expect:[this.LPAREN,this.NOTES,this.RPAREN],run:t=>this.builder.addChord(t.matches[1])}}NOTES(){return{expect:[this.NOTE],oneOrMore:!0}}NOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE]}}SINGLENOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE],run:t=>{const e=t;this.builder.addSingleNote(e.matches[0],e.matches[1],e.matches[2])}}}ACCIDENTAL(){return{expect:[this.MICROTONES,this.ACCIDENTALS],maybe:!0,or:!0}}DOTS(){return{expect:[this.DOT],zeroOrMore:!0,run:t=>this.builder.setNoteDots(t.matches)}}TYPE(){return{expect:[this.SLASH,this.MAYBESLASH,this.TYPES],maybe:!0,run:t=>this.builder.setNoteType(t.matches[2])}}DURATION(){return{expect:[this.SLASH,this.DURATIONS],maybe:!0,run:t=>this.builder.setNoteDuration(t.matches[1])}}OPTS(){return{expect:[this.LBRACKET,this.KEYVAL,this.KEYVALS,this.RBRACKET],maybe:!0}}KEYVALS(){return{expect:[this.COMMA,this.KEYVAL],zeroOrMore:!0}}KEYVAL(){return{expect:[this.KEY,this.EQUALS,this.VAL],run:t=>this.builder.addNoteOption(t.matches[0],t.matches[2].slice(1,-1))}}VAL(){return{expect:[this.SVAL,this.DVAL],or:!0}}KEY(){return{token:"[a-zA-Z][a-zA-Z0-9]*"}}DVAL(){return{token:'["][^"]*["]'}}SVAL(){return{token:"['][^']*[']"}}NOTENAME(){return{token:"[a-gA-G]"}}OCTAVE(){return{token:"[0-9]+"}}ACCIDENTALS(){return{token:"bb|b|##|#|n"}}MICROTONES(){return{token:"bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o"}}DURATIONS(){return{token:"[0-9whq]+"}}TYPES(){return{token:"[rRsSmMhHgG]"}}LPAREN(){return{token:"[(]"}}RPAREN(){return{token:"[)]"}}COMMA(){return{token:"[,]"}}DOT(){return{token:"[.]"}}SLASH(){return{token:"[/]"}}MAYBESLASH(){return{token:"[/]?"}}EQUALS(){return{token:"[=]"}}LBRACKET(){return{token:"\\["}}RBRACKET(){return{token:"\\]"}}EOL(){return{token:"$"}}}class Ve{constructor(t){this.chord=[],this.dots=0,this.options={},this.duration=t}}class Ke{constructor(t){this.commitHooks=[],this.factory=t,this.reset()}reset(t){this.options=Object.assign({stem:"auto",clef:"treble"},t),this.elements={notes:[],accidentals:[]},this.rollingDuration="8",this.resetPiece()}getFactory(){return this.factory}getElements(){return this.elements}addCommitHook(t){this.commitHooks.push(t)}resetPiece(){je("resetPiece"),this.piece=new Ve(this.rollingDuration)}setNoteDots(t){je("setNoteDots:",t),t&&(this.piece.dots=t.length)}setNoteDuration(t){je("setNoteDuration:",t),this.rollingDuration=this.piece.duration=t||this.rollingDuration}setNoteType(t){je("setNoteType:",t),t&&(this.piece.type=t)}addNoteOption(t,e){je("addNoteOption: key:",t,"value:",e),this.piece.options[t]=e}addNote(t,e,i){je("addNote:",t,e,i),this.piece.chord.push({key:t,accid:e,octave:i})}addSingleNote(t,e,i){je("addSingleNote:",t,e,i),this.addNote(t,e,i)}addChord(t){je("startChord"),"object"!=typeof t[0]?this.addSingleNote(t[0]):t.forEach((t=>{t&&this.addNote(...t)})),je("endChord")}commitPiece(){je("commitPiece");const{factory:t}=this;if(!t)return;const e=Object.assign(Object.assign({},this.options),this.piece.options),i=u(e.stem,"BadArguments","options.stem is not defined").toLowerCase(),a=u(e.clef,"BadArguments","options.clef is not defined").toLowerCase(),{chord:n,duration:s,dots:o,type:l}=this.piece,r=et.accidentals,h=n.map((t=>{var e;return t.key+(r.includes(null!==(e=t.accid)&&void 0!==e?e:"")?t.accid:"")+"/"+t.octave})),c="auto"===i,d="g"==(null==l?void 0:l.toLowerCase())?t.GhostNote({duration:s,dots:o}):t.StaveNote({keys:h,duration:s,dots:o,type:l,clef:a,auto_stem:c});c||d.setStemDirection("up"===i?nt.UP:nt.DOWN);const m=[];n.forEach(((e,i)=>{const a=e.accid;if("string"==typeof a){const e=t.Accidental({type:a});d.addModifier(e,i),m.push(e)}else m.push(void 0)}));for(let t=0;tt(e,d,this))),this.elements.notes.push(d),this.elements.accidentals.push(m),this.resetPiece()}}function $e(t,e){void 0!==t.id&&e.setAttribute("id",t.id)}const Je=/\s*,\s*/;function qe(t,e){void 0!==t.class&&t.class.split(Je).forEach((t=>e.addClass(t)))}class Qe{constructor(t={}){this.defaults={clef:"treble",time:"4/4",stem:"auto"},this.setOptions(t)}set(t){return this.defaults=Object.assign(Object.assign({},this.defaults),t),this}setOptions(t){var e,i;const a=t.factory,n=null!==(e=t.builder)&&void 0!==e?e:new Ke(a);return this.options=Object.assign(Object.assign({commitHooks:[$e,qe,yt.easyScoreHook,Lt.easyScoreHook],throwOnError:!1},t),{factory:a,builder:n}),this.factory=a,this.builder=n,this.grammar=new Xe(this.builder),this.parser=new He(this.grammar),null===(i=this.options.commitHooks)||void 0===i||i.forEach((t=>this.addCommitHook(t))),this}setContext(t){return this.factory.setContext(t),this}parse(t,e={}){this.builder.reset(e);const i=this.parser.parse(t);if(!i.success&&this.options.throwOnError)throw je(i),new g("Error parsing line: "+t);return i}beam(t,e){return this.factory.Beam({notes:t,options:e}),t}tuplet(t,e){return this.factory.Tuplet({notes:t,options:e}),t}notes(t,e={}){return e=Object.assign({clef:this.defaults.clef,stem:this.defaults.stem},e),this.parse(t,e),this.builder.getElements().notes}voice(t,e={}){return e=Object.assign({time:this.defaults.time},e),this.factory.Voice(e).addTickables(t)}addCommitHook(t){this.builder.addCommitHook(t)}}Qe.DEBUG=!1;const Ze="Ghost note must have valid initialization data to identify duration.";class ti extends zt{static get CATEGORY(){return x.GhostNote}constructor(t){if(!t)throw new g("BadArguments",Ze);let e;if("string"==typeof t)e={duration:t};else{if("object"!=typeof t)throw new g("BadArguments",Ze);e=t}super(e),this.setWidth(0)}isRest(){return!0}setStave(t){return super.setStave(t),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){this.setRendered();for(let t=0;t=li.type.TEXT&&t<=li.type.MIXED&&(this.type=t),this}setCustomText(t,e){return this.custom_depress_text=t||"",this.custom_release_text=e||"",this}setLine(t){return this.line=t,this}drawBracketed(){const t=this.checkContext();let e,i,a=!1;this.notes.forEach(((n,s,o)=>{var l;a=!a;const r=n.getAbsoluteX(),h=n.checkStave().getYForBottomText(this.line+3);if(r{var a;e=!e;const n=i.checkStave(),s=i.getAbsoluteX(),o=n.getYForBottomText(this.line+3),l=null!==(a=V.currentMusicFont().lookupMetric(`pedalMarking.${e?"down":"up"}.point`))&&void 0!==a?a:V.NOTATION_FONT_SCALE;let r=0;e?this.custom_depress_text?(r=t.measureText(this.custom_depress_text).width,t.fillText(this.custom_depress_text,s-r/2,o)):oi("pedal_depress",t,s,o,l):this.custom_release_text?(r=t.measureText(this.custom_release_text).width,t.fillText(this.custom_release_text,s-r/2,o)):oi("pedal_release",t,s,o,l)}))}draw(){const t=this.checkContext();this.setRendered(),t.save(),t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color),t.setFont(this.textFont),function(...t){li.DEBUG&&y("Vex.Flow.PedalMarking",t)}("Rendering Pedal Marking"),this.type===li.type.BRACKET||this.type===li.type.MIXED?(t.setLineWidth(this.render_options.bracket_line_width),this.drawBracketed()):this.type===li.type.TEXT&&this.drawText(),t.restore()}}li.DEBUG=!1,li.TEXT_FONT={family:M.SERIF,size:12,weight:P.BOLD,style:k.ITALIC},li.GLYPHS={pedal_depress:{code:"keyboardPedalPed"},pedal_release:{code:"keyboardPedalUp"}},li.type={TEXT:1,BRACKET:2,MIXED:3},li.typeString={text:li.type.TEXT,bracket:li.type.BRACKET,mixed:li.type.MIXED};const ri={1:"repeat1Bar",2:"repeat2Bars",4:"repeat4Bars",slash:"repeatBarSlash"};class hi extends ei{static get CATEGORY(){return x.RepeatNote}constructor(t,e,i){super(new Z(ri[t]||"repeat1Bar",V.currentMusicFont().lookupMetric("repeatNote.point",40),{category:"repeatNote"}),Object.assign({duration:"q",align_center:"slash"!==t},e),i)}}function ci(t,e,i,a,n,s,o){t.beginPath(),t.moveTo(e,i),t.lineTo(a,n),t.lineTo(s,o),t.lineTo(e,i),t.closePath(),t.fill()}class di extends L{static get CATEGORY(){return x.StaveLine}constructor(t){super(),this.setNotes(t),this.text="",this.resetFont(),this.render_options={padding_left:4,padding_right:3,line_width:1,line_dash:void 0,rounded_end:!0,color:void 0,draw_start_arrow:!1,draw_end_arrow:!1,arrowhead_length:10,arrowhead_angle:Math.PI/8,text_position_vertical:di.TextVerticalPosition.TOP,text_justification:di.TextJustification.CENTER}}setText(t){return this.text=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new g("BadArguments","Notes needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new g("BadArguments","Connected notes must have same number of indices.");return this.notes=t,this.first_note=t.first_note,this.first_indices=t.first_indices,this.last_note=t.last_note,this.last_indices=t.last_indices,this}applyLineStyle(){const t=this.checkContext(),e=this.render_options;e.line_dash&&t.setLineDash(e.line_dash),e.line_width&&t.setLineWidth(e.line_width),e.rounded_end?t.setLineCap("round"):t.setLineCap("square")}applyFontStyle(){const t=this.checkContext();t.setFont(this.textFont);const e=this.render_options.color;e&&(t.setStrokeStyle(e),t.setFillStyle(e))}drawArrowLine(t,e,i){const a=this.render_options.draw_start_arrow&&this.render_options.draw_end_arrow,n=e.x,s=e.y,o=i.x,l=i.y,r=Math.sqrt((o-n)*(o-n)+(l-s)*(l-s)),h=(r-this.render_options.arrowhead_length/3)/r;let c,d,m,b;this.render_options.draw_end_arrow||a?(c=Math.round(n+(o-n)*h),d=Math.round(s+(l-s)*h)):(c=o,d=l),this.render_options.draw_start_arrow||a?(m=n+(o-n)*(1-h),b=s+(l-s)*(1-h)):(m=n,b=s),this.render_options.color&&(t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color)),t.beginPath(),t.moveTo(m,b),t.lineTo(c,d),t.stroke(),t.closePath();const _=Math.atan2(l-s,o-n),x=Math.abs(this.render_options.arrowhead_length/Math.cos(this.render_options.arrowhead_angle));let g,p,u,y,f,S;(this.render_options.draw_end_arrow||a)&&(g=_+Math.PI+this.render_options.arrowhead_angle,u=o+Math.cos(g)*x,y=l+Math.sin(g)*x,p=_+Math.PI-this.render_options.arrowhead_angle,f=o+Math.cos(p)*x,S=l+Math.sin(p)*x,ci(t,u,y,o,l,f,S)),(this.render_options.draw_start_arrow||a)&&(g=_+this.render_options.arrowhead_angle,u=n+Math.cos(g)*x,y=s+Math.sin(g)*x,p=_-this.render_options.arrowhead_angle,f=n+Math.cos(p)*x,S=s+Math.sin(p)*x,ci(t,u,y,n,s,f,S))}draw(){const t=this.checkContext();this.setRendered();const e=this.first_note,i=this.last_note,a=this.render_options;t.save(),this.applyLineStyle();let n={x:0,y:0},s={x:0,y:0};this.first_indices.forEach(((o,l)=>{const r=this.last_indices[l];n=e.getModifierStartXY(2,o),s=i.getModifierStartXY(1,r);const h=n.y>s.y;n.x+=e.getMetrics().modRightPx+a.padding_left,s.x-=i.getMetrics().modLeftPx+a.padding_right;const c=e.getGlyphProps().getWidth();e.getKeyProps()[o].displaced&&1===e.getStemDirection()&&(n.x+=c+a.padding_left);i.getKeyProps()[r].displaced&&-1===i.getStemDirection()&&(s.x-=c+a.padding_right),n.y+=h?-3:1,s.y+=h?2:0,this.drawArrowLine(t,n,s)})),t.restore();const o=t.measureText(this.text).width,l=a.text_justification;let r=0;if(l===di.TextJustification.LEFT)r=n.x;else if(l===di.TextJustification.CENTER){r=(s.x-n.x)/2+n.x-o/2}else l===di.TextJustification.RIGHT&&(r=s.x-o);let h=0;const c=a.text_position_vertical;return c===di.TextVerticalPosition.TOP?h=e.checkStave().getYForTopText():c===di.TextVerticalPosition.BOTTOM&&(h=e.checkStave().getYForBottomText(V.TEXT_HEIGHT_OFFSET_HACK)),t.save(),this.applyFontStyle(),t.fillText(this.text,r,h),t.restore(),this}}di.TEXT_FONT=Object.assign({},L.TEXT_FONT),di.TextVerticalPosition={TOP:1,BOTTOM:2},di.TextJustification=se;class mi extends L{static get CATEGORY(){return x.System}constructor(t={}){super(),this.setOptions(t),this.partStaves=[],this.partStaveInfos=[],this.partVoices=[]}setOptions(t={}){if(!t.factory)throw new g("NoFactory","System.setOptions(options) requires a factory.");this.factory=t.factory,this.options=Object.assign(Object.assign({factory:this.factory,x:10,y:10,width:500,spaceBetweenStaves:12,autoWidth:!1,noJustification:!1,debugFormatter:!1,formatIterations:0,noPadding:!1},t),{details:Object.assign({alpha:.5},t.details),formatOptions:Object.assign({},t.formatOptions)}),!1===this.options.noJustification&&void 0===t.width&&(this.options.autoWidth=!0)}getX(){return this.options.x}setX(t){this.options.x=t,this.partStaves.forEach((e=>{e.setX(t)}))}getY(){return this.options.y}setY(t){this.options.y=t,this.partStaves.forEach((e=>{e.setY(t)}))}getStaves(){return this.partStaves}getVoices(){return this.partVoices}setContext(t){return super.setContext(t),this.factory.setContext(t),this}addConnector(t="double"){return this.connector=this.factory.StaveConnector({top_stave:this.partStaves[0],bottom_stave:this.partStaves[this.partStaves.length-1],type:t}),this.connector}addStave(t){var e;const i=Object.assign({left_bar:!1},t.options),a=null!==(e=t.stave)&&void 0!==e?e:this.factory.Stave({x:this.options.x,y:this.options.y,width:this.options.width,options:i}),n=Object.assign(Object.assign({spaceAbove:0,spaceBelow:0,debugNoteMetrics:!1,noJustification:!1},t),{options:i}),s=this.getContext();return n.voices.forEach((t=>{t.setContext(s).setStave(a).getTickables().forEach((t=>t.setStave(a))),this.partVoices.push(t)})),this.partStaves.push(a),this.partStaveInfos.push(n),a}addVoices(t){const e=this.getContext();t.forEach((t=>{t.setContext(e),this.partVoices.push(t)}))}format(){const t=this.options.details;let e=0;const i=new ke(t);this.formatter=i;let a=this.options.y,n=0;const s=[];this.partStaves.forEach(((t,e)=>{a+=t.space(this.partStaveInfos[e].spaceAbove),t.setY(a),a+=t.space(this.partStaveInfos[e].spaceBelow),a+=t.space(this.options.spaceBetweenStaves),this.partStaveInfos[e].debugNoteMetrics&&(s.push({y:a,stave:t}),a+=15),n=Math.max(n,t.getNoteStartX())})),this.partVoices.forEach((t=>{t.getTickables().forEach((t=>{const e=t.getStave();e&&t.setStave(e)}))})),i.joinVoices(this.partVoices),this.partStaves.forEach((t=>t.setNoteStartX(n))),this.options.autoWidth&&this.partVoices.length>0?(e=i.preCalculateMinTotalWidth(this.partVoices),this.options.width=e+Ce.rightPadding+(n-this.options.x),this.partStaves.forEach((t=>{t.setWidth(this.options.width)}))):e=this.options.noPadding?this.options.width-(n-this.options.x):this.options.width-(n-this.options.x)-Ce.defaultPadding,this.partVoices.length>0&&i.format(this.partVoices,this.options.noJustification?0:e,this.options.formatOptions),i.postFormat();for(let e=0;e{this.partVoices.forEach((i=>{i.getTickables().forEach((i=>{i.getStave()===e.stave&&vt.plotMetrics(t,i,e.y)}))}))}))}}class bi extends zt{static get CATEGORY(){return x.TabNote}constructor(t,e=!1){super(t),this.glyphPropsArr=[],this.greatestString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>t>e?t:e)),this.leastString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>tthis.width}setStave(t){super.setStave(t);const e=t.getContext();if(this.setContext(e),e){this.width=0;for(let t=0;ti.width),this.width=Math.max(i.getWidth(),this.width)}this.glyphProps.getWidth=()=>this.width}const i=this.positions.map((({str:e})=>t.getYForLine(Number(e)-1)));return this.setYs(i),this.stem&&this.stem.setYBounds(this.getStemY(),this.getStemY()),this}getPositions(){return this.positions}getModifierStartXY(t,e){if(!this.preFormatted)throw new g("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new g("NoYValues","No Y-Values calculated for this note.");let i=0;if(t===tt.Position.LEFT)i=-2;else if(t===tt.Position.RIGHT)i=this.width+2;else if(t===tt.Position.BELOW||t===tt.Position.ABOVE){i=this.glyphProps.getWidth()/2}return{x:this.getAbsoluteX()+i,y:this.ys[e]}}getLineForRest(){return Number(this.positions[0].str)}preFormat(){this.preFormatted||(this.modifierContext&&this.modifierContext.preFormat(),this.preFormatted=!0)}getStemX(){return this.getCenterGlyphX()}getStemY(){const t=this.checkStave().getNumLines()-.5,e=nt.UP===this.stem_direction?-.5:t;return this.checkStave().getYForLine(e)}getStemExtents(){return this.checkStem().getExtents()}drawFlag(){var t;const{beam:e,glyphProps:i,render_options:{draw_stem:a}}=this,n=this.checkContext(),s=null==e&&a;if(i.flag&&s){const e=this.getStemX(),i=this.getStemDirection()===nt.DOWN?this.getStemY()-this.checkStem().getHeight()-(this.glyphProps?this.glyphProps.stem_down_extension:0):this.getStemY()-this.checkStem().getHeight()+(this.glyphProps?this.glyphProps.stem_up_extension:0);null===(t=this.flag)||void 0===t||t.render(n,e,i)}}drawModifiers(){this.modifiers.forEach((t=>{l(t)&&!this.render_options.draw_dots||(t.setContext(this.getContext()),t.drawWithStyle())}))}drawStemThrough(){const t=this.getStemX(),e=this.getStemY(),i=this.checkContext(),a=this.render_options.draw_stem,n=this.render_options.draw_stem_through_stave;if(a&&n){const a=function(t,e,i,a){const n=1!==a,s=-1!==a,o=i.getSpacingBetweenLines(),l=i.getNumLines(),r=[];return e.forEach((e=>{const h=e.indexOf(l)>-1,c=e.indexOf(1)>-1;if(n&&c||s&&h)return;1===e.length&&e.push(e[0]);const d=[];e.forEach(((e,n,s)=>{const r=1===e,h=e===l;let c=i.getYForLine(e-1);0!==n||r?n!==s.length-1||h||(c+=o/2-1):c-=o/2-1,d.push(c),1===a&&r?d.push(t-2):-1===a&&h&&d.push(t+2)})),r.push(d.sort(((t,e)=>t-e)))})),r}(e,function(t,e){const i=[];let a=[];for(let n=1;n<=t;n++)e.indexOf(n)>-1?(i.push(a),a=[]):a.push(n);return a.length>0&&i.push(a),i}(this.checkStave().getNumLines(),this.positions.map((t=>Number(t.str)))),this.checkStave(),this.getStemDirection());i.save(),i.setLineWidth(nt.WIDTH),a.forEach((e=>{0!==e.length&&(i.beginPath(),i.moveTo(t,e[0]),i.lineTo(t,e[e.length-1]),i.stroke(),i.closePath())})),i.restore()}}drawPositions(){var t;const e=this.checkContext(),i=this.getAbsoluteX(),a=this.ys;for(let n=0;n{const i=yi.GLYPHS[e];if(!i)throw new g("Invalid dynamics character: "+e);const a=u(this.render_options.glyph_font_size),n=new Z(i.code,a,{category:"textNote"});this.glyphs.push(n),t+=i.width})),this.setWidth(t),this.preFormatted=!0,this}draw(){this.setRendered();const t=this.getAbsoluteX(),e=this.checkStave().getYForLine(this.line+-3);ui("Rendering Dynamics: ",this.sequence);let i=t;this.glyphs.forEach(((t,a)=>{const n=this.sequence[a];t.render(this.checkContext(),i,e),i+=yi.GLYPHS[n].width}))}}yi.DEBUG=!1;class fi extends vt{static get CATEGORY(){return x.TimeSigNote}constructor(t,e){super({duration:"b"}),this.timeSig=new Te(t,e),this.setWidth(this.timeSig.getGlyph().getMetrics().width),this.ignore_ticks=!0}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkStave(),e=this.checkContext();this.setRendered();const i=this.timeSig.getGlyph();i.getContext()||i.setContext(e),i.setStave(t),i.setYShift(t.getYForLine(2)-t.getYForGlyphs()),i.renderToStave(this.getAbsoluteX())}}class Si extends L{static get CATEGORY(){return x.VibratoBracket}constructor(t){super(),t.start&&(this.start=t.start),t.stop&&(this.stop=t.stop),this.line=1,this.render_options={harsh:!1,wave_height:6,wave_width:4,wave_girth:2,vibrato_width:0}}setLine(t){return this.line=t,this}setHarsh(t){return this.render_options.harsh=t,this}draw(){const t=this.checkContext();this.setRendered();const e=this.start&&this.start.checkStave().getYForTopText(this.line)||this.stop&&this.stop.checkStave().getYForTopText(this.line)||0,i=this.start&&this.start.getAbsoluteX()||this.stop&&this.stop.checkStave().getTieStartX()||0,a=this.stop&&this.stop.getAbsoluteX()-this.stop.getWidth()-5||this.start&&this.start.checkStave().getTieEndX()-10||0;this.render_options.vibrato_width=a-i,function(...t){Si.DEBUG&&y("Vex.Flow.VibratoBracket",t)}("Rendering VibratoBracket: start_x:",i,"stop_x:",a,"y:",e),ce.renderVibrato(t,i,e,this.render_options)}}function Ti(...t){vi.DEBUG&&y("Vex.Flow.Factory",t)}Si.DEBUG=!1;class vi{static newFromElementId(t,e=500,i=200){return new vi({renderer:{elementId:t,width:e,height:i}})}constructor(t={}){Ti("New factory: ",t),this.options={stave:{space:10},renderer:{elementId:"",width:500,height:200,background:"#FFF"},font:vi.TEXT_FONT},this.setOptions(t)}reset(){this.renderQ=[],this.systems=[],this.staves=[],this.voices=[],this.stave=void 0}setOptions(t){this.options=Object.assign(Object.assign({},this.options),t),this.initRenderer(),this.reset()}initRenderer(){const{elementId:t,width:e,height:i,background:a}=this.options.renderer;if(null==t)return;if(""==t)throw Ti(this),new g("renderer.elementId not set in FactoryOptions");let n=this.options.renderer.backend;if(void 0===n){n=Jt(document.getElementById(t))?le.Backends.CANVAS:le.Backends.SVG}this.context=le.buildContext(t,n,e,i,a)}getContext(){return this.context}setContext(t){return this.context=t,this}getStave(){return this.stave}getVoices(){return this.voices}Stave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1*e}},t),a=new Ce(i.x,i.y,i.width,i.options);return this.staves.push(a),a.setContext(this.context),this.stave=a,a}TabStave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1.3*e}},t),a=new _i(i.x,i.y,i.width,i.options);return this.staves.push(a),a.setContext(this.context),this.stave=a,a}StaveNote(t){const e=new Ut(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GlyphNote(t,e,i){const a=new ei(t,e,i);return this.stave&&a.setStave(this.stave),a.setContext(this.context),this.renderQ.push(a),a}RepeatNote(t,e,i){const a=new hi(t,e,i);return this.stave&&a.setStave(this.stave),a.setContext(this.context),this.renderQ.push(a),a}GhostNote(t){const e=new ti(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TextNote(t){const e=new ue(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}BarNote(t={}){const e=new At(t.type);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}ClefNote(t){const e=Object.assign({type:"treble",options:{size:"default",annotation:void 0}},t),i=new We(e.type,e.options.size,e.options.annotation);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}TimeSigNote(t){const e=Object.assign({time:"4/4"},t),i=new fi(e.time);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}KeySigNote(t){const e=new ai(t.key,t.cancelKey,t.alterKey);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TabNote(t){const e=new bi(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GraceNote(t){const e=new ii(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),e}GraceNoteGroup(t){const e=new Xt(t.notes,t.slur);return e.setContext(this.context),e}Accidental(t){const e=new at(t.type);return e.setContext(this.context),e}Annotation(t){const e=Object.assign({text:"p",hJustify:ct.CENTER,vJustify:dt.BOTTOM},t),i=new mt(e.text);return i.setJustification(e.hJustify),i.setVerticalJustification(e.vJustify),i.setFont(e.font),i.setContext(this.context),i}ChordSymbol(t){const e=Object.assign({vJustify:"top",hJustify:"center",kerning:!0,reportWidth:!0},t),i=new Ot;return i.setHorizontal(e.hJustify),i.setVertical(e.vJustify),i.setEnableKerning(e.kerning),i.setReportWidth(e.reportWidth),"string"==typeof e.fontFamily&&"number"==typeof e.fontSize?"string"==typeof e.fontWeight?i.setFont(e.fontFamily,e.fontSize,e.fontWeight):i.setFont(e.fontFamily,e.fontSize,""):"number"==typeof e.fontSize&&i.setFontSize(e.fontSize),i.setContext(this.context),i}Articulation(t){var e;const i=new yt(null!==(e=null==t?void 0:t.type)&&void 0!==e?e:"a.");return null!=(null==t?void 0:t.position)&&i.setPosition(t.position),null!=(null==t?void 0:t.betweenLines)&&i.setBetweenLines(t.betweenLines),i.setContext(this.context),i}Ornament(t,e){const i=Object.assign({type:t,position:0,accidental:""},e),a=new Kt(t);return a.setPosition(i.position),i.upperAccidental&&a.setUpperAccidental(i.upperAccidental),i.lowerAccidental&&a.setLowerAccidental(i.lowerAccidental),void 0!==i.delayed&&a.setDelayed(i.delayed),a.setContext(this.context),a}TextDynamics(t){const e=Object.assign({text:"p",duration:"q",dots:0,line:0},t),i=new yi({text:e.text,line:e.line,duration:e.duration,dots:e.dots});return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}Fingering(t){const e=Object.assign({number:"0",position:"left"},t),i=new Lt(e.number);return i.setPosition(e.position),i.setContext(this.context),i}StringNumber(t,e=!0){const i=new re(t.number);return i.setPosition(t.position),i.setContext(this.context),i.setDrawCircle(e),i}TickContext(){return new Ee}ModifierContext(){return new me}MultiMeasureRest(t){const e=u(t.number_of_measures,"NoNumberOfMeasures"),i=new si(e,t);return i.setContext(this.context),this.renderQ.push(i),i}Voice(t){const e=Object.assign({time:"4/4"},t),i=new jt(e.time);return this.voices.push(i),i}StaveConnector(t){const e=new Be(t.top_stave,t.bottom_stave);return e.setType(t.type).setContext(this.context),this.renderQ.push(e),e}Formatter(t){return new ke(t)}Tuplet(t){const e=Object.assign({notes:[],options:{}},t),i=new Ae(e.notes,e.options).setContext(this.context);return this.renderQ.push(i),i}Beam(t){var e,i,a,n,s;const o=new Le(t.notes,null===(e=t.options)||void 0===e?void 0:e.autoStem).setContext(this.context);return o.breakSecondaryAt(null!==(a=null===(i=t.options)||void 0===i?void 0:i.secondaryBeamBreaks)&&void 0!==a?a:[]),(null===(n=t.options)||void 0===n?void 0:n.partialBeamDirections)&&Object.entries(null===(s=t.options)||void 0===s?void 0:s.partialBeamDirections).forEach((([t,e])=>{o.setPartialBeamSideAt(Number(t),e)})),this.renderQ.push(o),o}Curve(t){const e=new Ue(t.from,t.to,t.options).setContext(this.context);return this.renderQ.push(e),e}StaveTie(t){var e;const i=new Gt({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices},t.text);return(null===(e=t.options)||void 0===e?void 0:e.direction)&&i.setDirection(t.options.direction),i.setContext(this.context),this.renderQ.push(i),i}StaveLine(t){var e,i;const a=new di({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices});return(null===(e=t.options)||void 0===e?void 0:e.text)&&a.setText(t.options.text),(null===(i=t.options)||void 0===i?void 0:i.font)&&a.setFont(t.options.font),a.setContext(this.context),this.renderQ.push(a),a}VibratoBracket(t){const e=new Si({start:t.from,stop:t.to});return t.options.line&&e.setLine(t.options.line),t.options.harsh&&e.setHarsh(t.options.harsh),e.setContext(this.context),this.renderQ.push(e),e}TextBracket(t){const e=new pi({start:t.from,stop:t.to,text:t.text,superscript:t.options.superscript,position:t.options.position});return t.options.line&&e.setLine(t.options.line),t.options.font&&e.setFont(t.options.font),e.setContext(this.context),this.renderQ.push(e),e}System(t={}){t.factory=this;const e=new mi(t).setContext(this.context);return this.systems.push(e),e}EasyScore(t={}){return t.factory=this,new Qe(t)}PedalMarking(t){const e=Object.assign({notes:[],options:{style:"mixed"}},t),i=new li(e.notes);return i.setType(li.typeString[e.options.style]),i.setContext(this.context),this.renderQ.push(i),i}NoteSubGroup(t){const e=Object.assign({notes:[]},t),i=new Vt(e.notes);return i.setContext(this.context),i}draw(){const t=this.context;this.systems.forEach((e=>e.setContext(t).format())),this.staves.forEach((e=>e.setContext(t).draw())),this.voices.forEach((e=>e.setContext(t).draw())),this.renderQ.forEach((e=>{e.isRendered()||e.setContext(t).draw()})),this.systems.forEach((e=>e.setContext(t).draw())),this.reset()}}vi.DEBUG=!1,vi.TEXT_FONT=Object.assign({},L.TEXT_FONT);class wi extends bi{static get CATEGORY(){return x.GraceTabNote}constructor(t){super(t,!1),this.render_options=Object.assign(Object.assign({},this.render_options),{y_shift:.3,scale:.6,font:`7.5pt ${M.SANS_SERIF}`}),this.updateWidth()}}class Ci{constructor(t){this.music=new et,this.setKey(t)}setKey(t){return this.key=t,this.reset(),this}getKey(){return this.key}reset(){this.keyParts=this.music.getKeyParts(this.key),this.keyString=this.keyParts.root,this.keyParts.accidental&&(this.keyString+=this.keyParts.accidental);if(!et.scaleTypes[this.keyParts.type])throw new g("BadArguments",`Unsupported key type: ${this.key}`);this.scale=this.music.getScaleTones(this.music.getNoteValue(this.keyString),et.scaleTypes[this.keyParts.type]),this.scaleMap={},this.scaleMapByValue={},this.originalScaleMapByValue={};const t=et.root_indices[this.keyParts.root];for(let e=0;ea?Bi.SLIDE_DOWN:Bi.SLIDE_UP}this.direction=e,this.render_options.cp1=11,this.render_options.cp2=14,this.render_options.y_shift=.5,this.resetFont()}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new g("BadArguments","No Y-values to render");const e=this.checkContext(),i=t.first_x_px,a=t.first_ys,n=t.last_x_px,s=t.direction;if(s!==Bi.SLIDE_UP&&s!==Bi.SLIDE_DOWN)throw new g("BadSlide","Invalid slide direction");const o=this.notes.first_indices;for(let t=0;tthis.tuningValues.length)throw new g("BadArguments",`String number must be between 1 and ${this.tuningValues.length}:${t}`);return this.tuningValues[e-1]}getValueForFret(t,e){const i=this.getValueForString(e),a=Number(t);if(a<0)throw new g("BadArguments",`Fret number must be 0 or higher: ${t}`);return i+a}getNoteForFret(t,e){const i=this.getValueForFret(t,e),a=Math.floor(i/12),n=i%12;return`${V.integerToNote(n)}/${a}`}}var ki=function(t,e,i,a){return new(i||(i=Promise))((function(n,s){function o(t){try{r(a.next(t))}catch(t){s(t)}}function l(t){try{r(a.throw(t))}catch(t){s(t)}}function r(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,l)}r((a=a.apply(t,e||[])).next())}))};class Ni{static get BUILD(){return{VERSION:"4.2.6",ID:"103aad2b14837418c5e96c9e078edd036fcddf60",DATE:"2024-08-26T20:16:17.134Z"}}static setMusicFont(...t){const e=t.map((t=>M.load(t)));return V.MUSIC_FONT_STACK=e,Z.MUSIC_FONT_STACK=e.slice(),Z.CURRENT_CACHE_KEY=t.join(","),e}static fetchMusicFont(t,e){return ki(this,void 0,void 0,(function*(){}))}static getMusicFont(){return V.MUSIC_FONT_STACK.map((t=>t.getName()))}static getMusicFontStack(){return V.MUSIC_FONT_STACK}static get RENDER_PRECISION_PLACES(){return V.RENDER_PRECISION_PLACES}static set RENDER_PRECISION_PLACES(t){V.RENDER_PRECISION_PLACES=t}static get SOFTMAX_FACTOR(){return V.SOFTMAX_FACTOR}static set SOFTMAX_FACTOR(t){V.SOFTMAX_FACTOR=t}static get NOTATION_FONT_SCALE(){return V.NOTATION_FONT_SCALE}static set NOTATION_FONT_SCALE(t){V.NOTATION_FONT_SCALE=t}static get TABLATURE_FONT_SCALE(){return V.TABLATURE_FONT_SCALE}static set TABLATURE_FONT_SCALE(t){V.TABLATURE_FONT_SCALE=t}static get RESOLUTION(){return V.RESOLUTION}static set RESOLUTION(t){V.RESOLUTION=t}static get SLASH_NOTEHEAD_WIDTH(){return V.SLASH_NOTEHEAD_WIDTH}static set SLASH_NOTEHEAD_WIDTH(t){V.SLASH_NOTEHEAD_WIDTH=t}static get STAVE_LINE_DISTANCE(){return V.STAVE_LINE_DISTANCE}static set STAVE_LINE_DISTANCE(t){V.STAVE_LINE_DISTANCE=t}static get STAVE_LINE_THICKNESS(){return V.STAVE_LINE_THICKNESS}static set STAVE_LINE_THICKNESS(t){V.STAVE_LINE_THICKNESS=t}static get STEM_HEIGHT(){return V.STEM_HEIGHT}static set STEM_HEIGHT(t){V.STEM_HEIGHT=t}static get STEM_WIDTH(){return V.STEM_WIDTH}static set STEM_WIDTH(t){V.STEM_WIDTH=t}static get TIME4_4(){return V.TIME4_4}static get accidentalMap(){return V.accidentalMap}static get unicode(){return V.unicode}static keySignature(t){return V.keySignature(t)}static hasKeySignature(t){return V.hasKeySignature(t)}static getKeySignatures(){return V.getKeySignatures()}static clefProperties(t){return V.clefProperties(t)}static keyProperties(t,e,i){return V.keyProperties(t,e,i)}static durationToTicks(t){return V.durationToTicks(t)}}Ni.Accidental=at,Ni.Annotation=mt,Ni.Articulation=yt,Ni.Barline=Nt,Ni.BarNote=At,Ni.Beam=Le,Ni.Bend=Ft,Ni.BoundingBox=B,Ni.BoundingBoxComputation=E,Ni.CanvasContext=Qt,Ni.ChordSymbol=Ot,Ni.Clef=be,Ni.ClefNote=We,Ni.Crescendo=ze,Ni.Curve=Ue,Ni.Dot=Rt,Ni.EasyScore=Qe,Ni.Element=L,Ni.Factory=vi,Ni.Font=M,Ni.Formatter=ke,Ni.Fraction=C,Ni.FretHandFinger=Lt,Ni.GhostNote=ti,Ni.Glyph=Z,Ni.GlyphNote=ei,Ni.GraceNote=ii,Ni.GraceNoteGroup=Xt,Ni.GraceTabNote=wi,Ni.KeyManager=Ci,Ni.KeySignature=_e,Ni.KeySigNote=ai,Ni.Modifier=tt,Ni.ModifierContext=me,Ni.MultiMeasureRest=si,Ni.Music=et,Ni.Note=vt,Ni.NoteHead=Wt,Ni.NoteSubGroup=Vt,Ni.Ornament=Kt,Ni.Parenthesis=$t,Ni.Parser=He,Ni.PedalMarking=li,Ni.Registry=R,Ni.RenderContext=ft,Ni.Renderer=le,Ni.RepeatNote=hi,Ni.Repetition=xe,Ni.Stave=Ce,Ni.StaveConnector=Be,Ni.StaveHairpin=Di,Ni.StaveLine=di,Ni.StaveModifier=kt,Ni.StaveNote=Ut,Ni.StaveTempo=pe,Ni.StaveText=ye,Ni.StaveTie=Gt,Ni.Stem=nt,Ni.StringNumber=re,Ni.Stroke=he,Ni.SVGContext=ie,Ni.System=mi,Ni.TabNote=bi,Ni.TabSlide=Bi,Ni.TabStave=_i,Ni.TabTie=Yt,Ni.TextBracket=pi,Ni.TextDynamics=yi,Ni.TextFormatter=ht,Ni.TextNote=ue,Ni.TickContext=Ee,Ni.TimeSignature=Te,Ni.TimeSigNote=fi,Ni.Tremolo=Ei,Ni.Tuning=Pi,Ni.Tuplet=Ae,Ni.Vibrato=ce,Ni.VibratoBracket=Si,Ni.Voice=jt,Ni.Volta=fe,Ni.AnnotationHorizontalJustify=ct,Ni.AnnotationVerticalJustify=dt,Ni.ChordSymbolHorizontalJustify=Dt,Ni.ChordSymbolVerticalJustify=Bt,Ni.SymbolTypes=Et,Ni.SymbolModifiers=Pt,Ni.CurvePosition=Ie,Ni.FontWeight=P,Ni.FontStyle=k,Ni.ModifierPosition=J,Ni.RendererBackends=ae,Ni.RendererLineEndType=ne,Ni.BarlineType=Ct,Ni.StaveModifierPosition=wt,Ni.VoltaType=oe,Ni.TextBracketPosition=gi,Ni.TextJustification=se,Ni.VoiceMode=Ht;const Ai={glyphs:{bracketTop:{x_min:0,x_max:469,y_min:0,y_max:295,ha:295,o:"m 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z"},bracketBottom:{x_min:0,x_max:469,y_min:-295,y_max:0,ha:295,o:"m 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z"},barlineTick:{x_min:0,x_max:36,y_min:868,y_max:1120,ha:252,o:"m 52 1250 l 52 1613 l 0 1613 l 0 1250 z"},breathMarkTick:{x_min:0,x_max:500,y_min:0,y_max:502,ha:502,o:"m 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z"},segno:{x_min:4,x_max:550,y_min:-27,y_max:759,ha:786,o:"m 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z"},coda:{x_min:-4,x_max:955,y_min:-158,y_max:898,ha:1056,o:"m 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z"},gClef:{x_min:0,x_max:671,y_min:-658,y_max:1098,ha:1756,o:"m 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z"},cClef:{x_min:0,x_max:699,y_min:-506,y_max:506,ha:1012,o:"m 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z"},fClef:{x_min:-5,x_max:684,y_min:-635,y_max:262,ha:897,o:"m 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z"},unpitchedPercussionClef1:{x_min:0,x_max:382,y_min:-250,y_max:250,ha:500,o:"m 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z"},"6stringTabClef":{x_min:-3,x_max:408,y_min:-748,y_max:764,ha:1512,o:"m 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z"},timeSig0:{x_min:20,x_max:450,y_min:-250,y_max:251,ha:501,o:"m 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z"},timeSig1:{x_min:20,x_max:314,y_min:-250,y_max:251,ha:501,o:"m 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z"},timeSig2:{x_min:20,x_max:426,y_min:-257,y_max:254,ha:511,o:"m 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z"},timeSig3:{x_min:20,x_max:401,y_min:-251,y_max:249,ha:500,o:"m 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z"},timeSig4:{x_min:20,x_max:450,y_min:-250,y_max:251,ha:501,o:"m 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z"},timeSig5:{x_min:20,x_max:383,y_min:-251,y_max:246,ha:497,o:"m 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z"},timeSig6:{x_min:20,x_max:414,y_min:-249,y_max:251,ha:500,o:"m 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z"},timeSig7:{x_min:20,x_max:421,y_min:-250,y_max:249,ha:499,o:"m 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z"},timeSig8:{x_min:20,x_max:416,y_min:-259,y_max:259,ha:518,o:"m 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z"},timeSig9:{x_min:20,x_max:414,y_min:-249,y_max:251,ha:500,o:"m 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z"},timeSigCommon:{x_min:5,x_max:424,y_min:-249,y_max:251,ha:500,o:"m 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z"},timeSigCutCommon:{x_min:0,x_max:418,y_min:-359,y_max:361,ha:720,o:"m 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z"},timeSigPlus:{x_min:-1,x_max:499,y_min:-250,y_max:250,ha:500,o:"m 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z"},timeSigPlusSmall:{x_min:-1,x_max:255,y_min:-133,y_max:123,ha:256,o:"m 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z"},timeSigMinus:{x_min:0,x_max:448,y_min:-35,y_max:40,ha:75,o:"m 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z"},timeSigParensRight:{x_min:0,x_max:184,y_min:-489,y_max:491,ha:980,o:"m 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z"},timeSigParensRightSmall:{x_min:0,x_max:110,y_min:-251,y_max:249,ha:500,o:"m 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z"},timeSigParensLeft:{x_min:0,x_max:184,y_min:-489,y_max:491,ha:980,o:"m 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z"},timeSigParensLeftSmall:{x_min:0,x_max:110,y_min:-251,y_max:249,ha:500,o:"m 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z"},noteheadDoubleWhole:{x_min:0,x_max:599,y_min:-155,y_max:155,ha:310,o:"m 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z"},noteheadWhole:{x_min:0,x_max:422,y_min:-125,y_max:125,ha:250,o:"m 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z"},noteheadHalf:{x_min:0,x_max:295,y_min:-125,y_max:125,ha:250,o:"m 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z"},noteheadBlack:{x_min:0,x_max:295,y_min:-125,y_max:125,ha:250,o:"m 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z"},noteheadXDoubleWhole:{x_min:0,x_max:546,y_min:-155,y_max:155,ha:310,o:"m 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z"},noteheadXWhole:{x_min:0,x_max:377,y_min:-125,y_max:125,ha:250,o:"m 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z"},noteheadXHalf:{x_min:0,x_max:334,y_min:-125,y_max:125,ha:250,o:"m 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z"},noteheadXBlack:{x_min:0,x_max:290,y_min:-125,y_max:125,ha:250,o:"m 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z"},noteheadCircleXDoubleWhole:{x_min:0,x_max:422,y_min:-155,y_max:155,ha:310,o:"m 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z"},noteheadCircleXWhole:{x_min:0,x_max:249,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z"},noteheadCircleXHalf:{x_min:0,x_max:250,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z"},noteheadCircleX:{x_min:0,x_max:249,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z"},noteheadCircledDoubleWhole:{x_min:0,x_max:603,y_min:-218,y_max:213,ha:431,o:"m 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z"},noteheadCircledWhole:{x_min:0,x_max:437,y_min:-225,y_max:211,ha:436,o:"m 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z"},noteheadCircledHalf:{x_min:-18,x_max:311,y_min:-162,y_max:167,ha:329,o:"m 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z"},noteheadCircledBlack:{x_min:-21,x_max:321,y_min:-171,y_max:167,ha:338,o:"m 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:416,y_min:-190,y_max:198,ha:388,o:"m 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z"},noteheadSquareWhite:{x_min:0,x_max:313,y_min:-125,y_max:125,ha:250,o:"m 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z"},noteheadSquareBlack:{x_min:0,x_max:313,y_min:-125,y_max:125,ha:250,o:"m 451 -180 l 451 180 l 0 180 l 0 -180 z"},noteheadTriangleDownDoubleWhole:{x_min:0,x_max:483,y_min:-155,y_max:155,ha:310,o:"m 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z"},noteheadTriangleDownWhole:{x_min:0,x_max:319,y_min:-125,y_max:125,ha:250,o:"m 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z"},noteheadTriangleDownHalf:{x_min:0,x_max:285,y_min:-125,y_max:125,ha:250,o:"m 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z"},noteheadTriangleDownBlack:{x_min:0,x_max:292,y_min:-125,y_max:125,ha:250,o:"m 207 -180 l 420 180 l 0 180 z"},noteheadTriangleUpDoubleWhole:{x_min:0,x_max:483,y_min:-155,y_max:155,ha:310,o:"m 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z"},noteheadTriangleUpWhole:{x_min:0,x_max:319,y_min:-125,y_max:125,ha:250,o:"m 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z"},noteheadTriangleUpHalf:{x_min:0,x_max:285,y_min:-125,y_max:125,ha:250,o:"m 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z"},noteheadTriangleUpBlack:{x_min:0,x_max:293,y_min:-125,y_max:125,ha:250,o:"m 422 -180 l 207 180 l 0 -180 z"},noteheadSlashedDoubleWhole1:{x_min:0,x_max:596,y_min:-179,y_max:168,ha:347,o:"m 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z"},noteheadSlashedWhole1:{x_min:-22,x_max:433,y_min:-157,y_max:148,ha:305,o:"m 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z"},noteheadSlashedHalf1:{x_min:-67,x_max:386,y_min:-142,y_max:160,ha:302,o:"m 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z"},noteheadSlashedBlack1:{x_min:-80,x_max:375,y_min:-165,y_max:167,ha:332,o:"m 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z"},noteheadSlashedDoubleWhole2:{x_min:0,x_max:596,y_min:-178,y_max:169,ha:347,o:"m 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z"},noteheadSlashedWhole2:{x_min:-18,x_max:436,y_min:-154,y_max:151,ha:305,o:"m 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z"},noteheadSlashedHalf2:{x_min:-73,x_max:380,y_min:-134,y_max:168,ha:302,o:"m 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z"},noteheadSlashedBlack2:{x_min:-79,x_max:376,y_min:-164,y_max:168,ha:332,o:"m 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:432,y_min:-155,y_max:155,ha:310,o:"m 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z"},noteheadDiamondWhole:{x_min:0,x_max:270,y_min:-125,y_max:125,ha:250,o:"m 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z"},noteheadDiamondHalf:{x_min:0,x_max:251,y_min:-125,y_max:125,ha:250,o:"m 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z"},noteheadDiamondBlack:{x_min:0,x_max:250,y_min:-125,y_max:125,ha:250,o:"m 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z"},noteheadParenthesis:{x_min:-73,x_max:368,y_min:-180,y_max:182,ha:362,o:"m 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z"},noteheadParenthesisRight:{x_min:-36,x_max:73,y_min:-181,y_max:181,ha:362,o:"m -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z"},noteheadParenthesisLeft:{x_min:0,x_max:109,y_min:-181,y_max:181,ha:362,o:"m 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z"},noteheadMoonBlack:{x_min:0,x_max:315,y_min:-125,y_max:125,ha:250,o:"m 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:339,y_min:-125,y_max:125,ha:250,o:"m 488 -180 l 0 180 l 0 -180 z"},noteheadTriangleRightBlack:{x_min:0,x_max:339,y_min:-125,y_max:125,ha:250,o:"m 488 180 l 0 -180 l 488 -180 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:278,y_min:-125,y_max:125,ha:250,o:"m 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z"},augmentationDot:{x_min:0,x_max:100,y_min:-50,y_max:50,ha:100,o:"m 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z"},tremolo1:{x_min:-150,x_max:150,y_min:-93,y_max:94,ha:187,o:"m 216 -45 l 216 135 l -216 46 l -216 -134 z"},flag8thUp:{x_min:0,x_max:264,y_min:-810,y_max:9,ha:819,o:"m 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z"},flag8thDown:{x_min:0,x_max:306,y_min:-14,y_max:808,ha:822,o:"m 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z"},flag16thUp:{x_min:0,x_max:279,y_min:-813,y_max:2,ha:815,o:"m 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z"},flag16thDown:{x_min:0,x_max:291,y_min:-9,y_max:812,ha:821,o:"m 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z"},flag32ndUp:{x_min:0,x_max:261,y_min:-812,y_max:149,ha:961,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag32ndDown:{x_min:0,x_max:273,y_min:-172,y_max:812,ha:984,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z"},flag64thUp:{x_min:0,x_max:261,y_min:-812,y_max:347,ha:1159,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag64thDown:{x_min:0,x_max:273,y_min:-376,y_max:812,ha:1188,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z"},flag128thUp:{x_min:0,x_max:261,y_min:-812,y_max:533,ha:1345,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag128thDown:{x_min:0,x_max:273,y_min:-580,y_max:812,ha:1392,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z"},accidentalFlat:{x_min:0,x_max:226,y_min:-175,y_max:439,ha:614,o:"m 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z"},accidentalNatural:{x_min:0,x_max:168,y_min:-335,y_max:341,ha:676,o:"m 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z"},accidentalSharp:{x_min:0,x_max:249,y_min:-348,y_max:350,ha:698,o:"m 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z"},accidentalDoubleSharp:{x_min:0,x_max:247,y_min:-125,y_max:127,ha:252,o:"m 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z"},accidentalDoubleFlat:{x_min:0,x_max:411,y_min:-175,y_max:437,ha:612,o:"m 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z"},accidentalParensLeft:{x_min:0,x_max:141,y_min:-248,y_max:247,ha:495,o:"m 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z"},accidentalParensRight:{x_min:0,x_max:141,y_min:-248,y_max:247,ha:495,o:"m 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z"},accidentalQuarterToneFlatStein:{x_min:1,x_max:227,y_min:-175,y_max:439,ha:614,o:"m 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:1,x_max:466,y_min:-175,y_max:439,ha:614,o:"m 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:179,y_min:-353,y_max:307,ha:660,o:"m 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z"},accidentalThreeQuarterTonesSharpStein:{x_min:3,x_max:317,y_min:-347,y_max:369,ha:716,o:"m 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z"},accidentalBuyukMucennebFlat:{x_min:1,x_max:287,y_min:-174,y_max:438,ha:612,o:"m 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z"},accidentalBuyukMucennebSharp:{x_min:0,x_max:341,y_min:-350,y_max:348,ha:698,o:"m 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z"},accidentalBakiyeFlat:{x_min:-1,x_max:286,y_min:-175,y_max:439,ha:614,o:"m 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z"},accidentalKomaSharp:{x_min:0,x_max:229,y_min:-337,y_max:322,ha:659,o:"m 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z"},accidentalKucukMucennebSharp:{x_min:-1,x_max:339,y_min:-338,y_max:321,ha:659,o:"m 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z"},accidentalKoron:{x_min:0,x_max:300,y_min:-472,y_max:157,ha:629,o:"m 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z"},accidentalSori:{x_min:0,x_max:421,y_min:-318,y_max:328,ha:646,o:"m 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z"},articAccentAbove:{x_min:0,x_max:339,y_min:1,y_max:245,ha:244,o:"m 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z"},articAccentBelow:{x_min:0,x_max:339,y_min:-244,y_max:0,ha:244,o:"m 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z"},articTenutoAbove:{x_min:-1,x_max:338,y_min:0,y_max:48,ha:48,o:"m 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z"},articTenutoBelow:{x_min:-1,x_max:338,y_min:-48,y_max:0,ha:48,o:"m 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z"},articStaccatoAbove:{x_min:0,x_max:84,y_min:0,y_max:84,ha:84,o:"m 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z"},articStaccatoBelow:{x_min:0,x_max:84,y_min:-84,y_max:0,ha:84,o:"m 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z"},articStaccatissimoAbove:{x_min:1,x_max:100,y_min:-2,y_max:293,ha:295,o:"m 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z"},articStaccatissimoBelow:{x_min:1,x_max:100,y_min:-295,y_max:0,ha:295,o:"m 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z"},articMarcatoAbove:{x_min:-1,x_max:235,y_min:-1,y_max:253,ha:254,o:"m 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z"},articMarcatoBelow:{x_min:-1,x_max:235,y_min:-254,y_max:0,ha:254,o:"m 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z"},fermataAbove:{x_min:3,x_max:605,y_min:-3,y_max:329,ha:332,o:"m 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z"},fermataBelow:{x_min:3,x_max:605,y_min:-332,y_max:0,ha:332,o:"m 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z"},fermataLongAbove:{x_min:0,x_max:603,y_min:-1,y_max:333,ha:334,o:"m 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z"},fermataLongBelow:{x_min:0,x_max:603,y_min:-333,y_max:1,ha:334,o:"m 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z"},fermataVeryLongAbove:{x_min:0,x_max:715,y_min:0,y_max:408,ha:408,o:"m 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z"},fermataVeryLongBelow:{x_min:0,x_max:715,y_min:-408,y_max:0,ha:408,o:"m 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z"},fermataVeryShortAbove:{x_min:0,x_max:726,y_min:0,y_max:449,ha:449,o:"m 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z"},fermataVeryShortBelow:{x_min:0,x_max:726,y_min:-449,y_max:0,ha:449,o:"m 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z"},fermataShortAbove:{x_min:0,x_max:604,y_min:0,y_max:341,ha:341,o:"m 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z"},fermataShortBelow:{x_min:0,x_max:604,y_min:-341,y_max:0,ha:341,o:"m 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z"},breathMarkComma:{x_min:1,x_max:152,y_min:2,y_max:251,ha:249,o:"m 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z"},breathMarkUpbow:{x_min:1,x_max:249,y_min:1,y_max:495,ha:494,o:"m 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z"},caesura:{x_min:0,x_max:384,y_min:-1,y_max:532,ha:533,o:"m 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z"},caesuraCurved:{x_min:0,x_max:373,y_min:0,y_max:530,ha:530,o:"m 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z"},restMaxima:{x_min:0,x_max:381,y_min:-249,y_max:250,ha:499,o:"m 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z"},restDoubleWhole:{x_min:0,x_max:125,y_min:0,y_max:250,ha:250,o:"m 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z"},restWhole:{x_min:0,x_max:282,y_min:-135,y_max:9,ha:144,o:"m 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z"},restWholeLegerLine:{x_min:-117,x_max:399,y_min:-135,y_max:20,ha:155,o:"m -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z"},restHalf:{x_min:0,x_max:282,y_min:-2,y_max:142,ha:144,o:"m 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z"},restHalfLegerLine:{x_min:-117,x_max:399,y_min:-13,y_max:142,ha:155,o:"m 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z"},restQuarter:{x_min:1,x_max:270,y_min:-375,y_max:373,ha:748,o:"m 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z"},rest8th:{x_min:0,x_max:247,y_min:-251,y_max:174,ha:425,o:"m 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z"},rest16th:{x_min:0,x_max:320,y_min:-500,y_max:179,ha:679,o:"m 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z"},rest32nd:{x_min:0,x_max:363,y_min:-500,y_max:426,ha:926,o:"m 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z"},rest64th:{x_min:0,x_max:423,y_min:-753,y_max:430,ha:1183,o:"m 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z"},rest128th:{x_min:0,x_max:485,y_min:-750,y_max:689,ha:1439,o:"m 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z"},dynamicPiano:{x_min:-89,x_max:366,y_min:-142,y_max:274,ha:416,o:"m 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z"},dynamicMezzo:{x_min:-20,x_max:446,y_min:-10,y_max:274,ha:284,o:"m 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z"},dynamicForte:{x_min:-141,x_max:364,y_min:-152,y_max:444,ha:596,o:"m 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z"},dynamicRinforzando:{x_min:-20,x_max:277,y_min:0,y_max:274,ha:274,o:"m 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z"},dynamicSforzando:{x_min:0,x_max:229,y_min:-10,y_max:273,ha:283,o:"m 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z"},dynamicZ:{x_min:-30,x_max:244,y_min:-10,y_max:268,ha:278,o:"m 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z"},ornamentTrill:{x_min:0,x_max:521,y_min:-10,y_max:390,ha:400,o:"m 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z"},ornamentTurn:{x_min:0,x_max:460,y_min:0,y_max:218,ha:218,o:"m 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z"},ornamentTurnSlash:{x_min:0,x_max:460,y_min:-90,y_max:306,ha:396,o:"m 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z"},ornamentMordent:{x_min:1,x_max:729,y_min:-73,y_max:319,ha:392,o:"m 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z"},ornamentShortTrill:{x_min:0,x_max:725,y_min:0,y_max:245,ha:245,o:"m 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z"},ornamentTremblement:{x_min:1,x_max:985,y_min:0,y_max:244,ha:244,o:"m 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:1119,y_min:0,y_max:481,ha:481,o:"m 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:2,x_max:1150,y_min:-367,y_max:245,ha:612,o:"m 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:1048,y_min:-367,y_max:331,ha:698,o:"m 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:949,y_min:0,y_max:381,ha:381,o:"m 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:1278,y_min:0,y_max:247,ha:247,o:"m 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:0,x_max:1277,y_min:-62,y_max:333,ha:395,o:"m 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:859,y_min:-222,y_max:246,ha:468,o:"m 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z"},brassScoop:{x_min:1,x_max:320,y_min:-373,y_max:13,ha:386,o:"m 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z"},brassDoitMedium:{x_min:0,x_max:489,y_min:-40,y_max:346,ha:386,o:"m 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z"},brassFallLipShort:{x_min:1,x_max:293,y_min:-345,y_max:42,ha:387,o:"m 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z"},brassLiftMedium:{x_min:0,x_max:811,y_min:0,y_max:852,ha:852,o:"m 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z"},brassFallRoughMedium:{x_min:0,x_max:811,y_min:0,y_max:852,ha:852,o:"m 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z"},brassBend:{x_min:0,x_max:392,y_min:0,y_max:282,ha:282,o:"m 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z"},brassMuteClosed:{x_min:0,x_max:272,y_min:0,y_max:272,ha:272,o:"m 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z"},brassMuteOpen:{x_min:0,x_max:304,y_min:0,y_max:304,ha:304,o:"m 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z"},brassFlip:{x_min:0,x_max:379,y_min:0,y_max:282,ha:282,o:"m 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z"},brassJazzTurn:{x_min:0,x_max:620,y_min:0,y_max:245,ha:245,o:"m 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z"},brassSmear:{x_min:1,x_max:306,y_min:0,y_max:170,ha:170,o:"m 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z"},stringsDownBow:{x_min:0,x_max:312,y_min:0,y_max:318,ha:318,o:"m 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z"},stringsUpBow:{x_min:1,x_max:249,y_min:1,y_max:495,ha:494,o:"m 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z"},stringsHarmonic:{x_min:0,x_max:200,y_min:0,y_max:200,ha:200,o:"m 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:200,y_min:0,y_max:300,ha:300,o:"m 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:200,y_min:0,y_max:300,ha:300,o:"m 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z"},pluckedLeftHandPizzicato:{x_min:0,x_max:272,y_min:0,y_max:272,ha:272,o:"m 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z"},keyboardPedalPed:{x_min:0,x_max:1019,y_min:-8,y_max:555,ha:563,o:"m 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z"},keyboardPedalUp:{x_min:0,x_max:450,y_min:0,y_max:450,ha:450,o:"m 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z"},pictChokeCymbal:{x_min:1,x_max:152,y_min:2,y_max:251,ha:249,o:"m 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z"},wiggleArpeggiatoUp:{x_min:-33,x_max:292,y_min:0,y_max:119,ha:119,o:"m 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z"},arrowheadBlackUp:{x_min:0,x_max:228,y_min:0,y_max:299,ha:299,o:"m 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z"},arrowheadBlackDown:{x_min:0,x_max:228,y_min:0,y_max:299,ha:299,o:"m 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z"},arpeggiatoUp:{x_min:1,x_max:229,y_min:7,y_max:1511,ha:1504,o:"m 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z"},arpeggiatoDown:{x_min:1,x_max:229,y_min:-4,y_max:1500,ha:1504,o:"m 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z"},repeat1Bar:{x_min:0,x_max:532,y_min:-250,y_max:279,ha:529,o:"m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z"},repeat2Bars:{x_min:0,x_max:762,y_min:-250,y_max:279,ha:529,o:"m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z"},repeat4Bars:{x_min:0,x_max:1232,y_min:-250,y_max:279,ha:529,o:"m 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z"},repeatBarSlash:{x_min:0,x_max:532,y_min:-250,y_max:279,ha:529,o:"m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z"},csymDiminished:{x_min:0,x_max:473,y_min:0,y_max:473,ha:473,o:"m 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z"},csymHalfDiminished:{x_min:-16,x_max:488,y_min:-15,y_max:489,ha:504,o:"m 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z"},csymAugmented:{x_min:0,x_max:395,y_min:1,y_max:396,ha:395,o:"m 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z"},csymMajorSeventh:{x_min:0,x_max:558,y_min:1,y_max:477,ha:476,o:"m 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z"},csymMinor:{x_min:0,x_max:325,y_min:216,y_max:260,ha:44,o:"m 468 374 l 0 374 l 0 311 l 468 311 z"},csymParensLeftTall:{x_min:1,x_max:185,y_min:0,y_max:997,ha:997,o:"m 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z"},csymParensRightTall:{x_min:-20,x_max:164,y_min:0,y_max:997,ha:997,o:"m -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z"},csymBracketLeftTall:{x_min:0,x_max:155,y_min:0,y_max:1e3,ha:1e3,o:"m 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z"},csymBracketRightTall:{x_min:1,x_max:156,y_min:0,y_max:1e3,ha:1e3,o:"m 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z"},csymParensLeftVeryTall:{x_min:0,x_max:122,y_min:0,y_max:993,ha:993,o:"m 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z"},csymParensRightVeryTall:{x_min:-15,x_max:107,y_min:0,y_max:993,ha:993,o:"m -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z"},csymDiagonalArrangementSlash:{x_min:0,x_max:999,y_min:0,y_max:1e3,ha:1e3,o:"m 1439 1380 l 1377 1440 l 0 60 l 62 0 z"},accSagittal5v7KleismaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z"},accSagittal5v7KleismaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z"},accSagittal5CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z"},accSagittal5CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z"},accSagittal7CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z"},accSagittal7CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z"},accSagittal25SmallDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z"},accSagittal25SmallDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z"},accSagittal35MediumDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z"},accSagittal35MediumDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittal11MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z"},accSagittal11MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z"},accSagittal11LargeDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z"},accSagittal11LargeDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal35LargeDiesisUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal35LargeDiesisDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittalSharp25SDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z"},accSagittalFlat25SUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z"},accSagittalSharp7CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z"},accSagittalFlat7CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z"},accSagittalSharp5CDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z"},accSagittalFlat5CUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z"},accSagittalSharp5v7kDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z"},accSagittalFlat5v7kUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z"},accSagittalSharp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z"},accSagittalFlat:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z"},accSagittalSharp5v7kUp:{x_min:0,x_max:312,y_min:-361,y_max:172,ha:533,o:"m 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z"},accSagittalFlat5v7kDown:{x_min:0,x_max:312,y_min:-172,y_max:361,ha:533,o:"m 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z"},accSagittalSharp5CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z"},accSagittalFlat5CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z"},accSagittalSharp7CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z"},accSagittalFlat7CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z"},accSagittalSharp25SUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z"},accSagittalFlat25SDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z"},accSagittalSharp35MUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z"},accSagittalFlat35MDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z"},accSagittalSharp11MUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z"},accSagittalFlat11MDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z"},accSagittalSharp11LUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat11LDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalSharp35LUp:{x_min:0,x_max:500,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat35LDown:{x_min:0,x_max:500,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalDoubleSharp25SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z"},accSagittalDoubleFlat25SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z"},accSagittalDoubleSharp7CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z"},accSagittalDoubleFlat7CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z"},accSagittalDoubleSharp5CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z"},accSagittalDoubleFlat5CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z"},accSagittalDoubleSharp5v7kDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z"},accSagittalDoubleFlat5v7kUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z"},accSagittalDoubleSharp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z"},accSagittalDoubleFlat:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z"},accSagittal7v11KleismaUp:{x_min:0,x_max:219,y_min:-359,y_max:172,ha:531,o:"m 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z"},accSagittal7v11KleismaDown:{x_min:0,x_max:219,y_min:-172,y_max:359,ha:531,o:"m 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z"},accSagittal17CommaUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal17CommaDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal55CommaUp:{x_min:0,x_max:219,y_min:-359,y_max:172,ha:531,o:"m 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z"},accSagittal55CommaDown:{x_min:0,x_max:219,y_min:-172,y_max:359,ha:531,o:"m 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z"},accSagittal7v11CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z"},accSagittal7v11CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal5v11SmallDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z"},accSagittal5v11SmallDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittalSharp5v11SDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat5v11SUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp7v11CDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z"},accSagittalFlat7v11CUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z"},accSagittalSharp55CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z"},accSagittalFlat55CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z"},accSagittalSharp17CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z"},accSagittalFlat17CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z"},accSagittalSharp7v11kDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z"},accSagittalFlat7v11kUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z"},accSagittalSharp7v11kUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z"},accSagittalFlat7v11kDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z"},accSagittalSharp17CUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat17CDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp55CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z"},accSagittalFlat55CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z"},accSagittalSharp7v11CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z"},accSagittalFlat7v11CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z"},accSagittalSharp5v11SUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z"},accSagittalFlat5v11SDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalDoubleSharp5v11SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat5v11SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp7v11CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z"},accSagittalDoubleFlat7v11CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z"},accSagittalDoubleSharp55CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z"},accSagittalDoubleFlat55CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z"},accSagittalDoubleSharp17CDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z"},accSagittalDoubleFlat17CUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z"},accSagittalDoubleSharp7v11kDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z"},accSagittalDoubleFlat7v11kUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z"},accSagittal23CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z"},accSagittal23CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z"},accSagittal5v19CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z"},accSagittal5v19CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittal5v23SmallDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z"},accSagittal5v23SmallDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittalSharp5v23SDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z"},accSagittalFlat5v23SUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z"},accSagittalSharp5v19CDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z"},accSagittalFlat5v19CUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z"},accSagittalSharp23CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z"},accSagittalFlat23CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z"},accSagittalSharp23CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z"},accSagittalFlat23CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z"},accSagittalSharp5v19CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z"},accSagittalFlat5v19CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z"},accSagittalSharp5v23SUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z"},accSagittalFlat5v23SDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z"},accSagittalDoubleSharp5v23SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z"},accSagittalDoubleFlat5v23SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z"},accSagittalDoubleSharp5v19CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z"},accSagittalDoubleFlat5v19CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z"},accSagittalDoubleSharp23CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z"},accSagittalDoubleFlat23CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z"},accSagittal19SchismaUp:{x_min:0,x_max:125,y_min:-359,y_max:172,ha:531,o:"m 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z"},accSagittal19SchismaDown:{x_min:0,x_max:125,y_min:-172,y_max:359,ha:531,o:"m 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z"},accSagittal17KleismaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal17KleismaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal143CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z"},accSagittal143CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal11v49CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z"},accSagittal11v49CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z"},accSagittal19CommaUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z"},accSagittal19CommaDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z"},accSagittal7v19CommaUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z"},accSagittal7v19CommaDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z"},accSagittal49SmallDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal49SmallDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal23SmallDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal23SmallDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal5v13MediumDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z"},accSagittal5v13MediumDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z"},accSagittal11v19MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z"},accSagittal11v19MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z"},accSagittal49MediumDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z"},accSagittal49MediumDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z"},accSagittal5v49MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z"},accSagittal5v49MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z"},accSagittal49LargeDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z"},accSagittal49LargeDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z"},accSagittal11v19LargeDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z"},accSagittal11v19LargeDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z"},accSagittal5v13LargeDiesisUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z"},accSagittal5v13LargeDiesisDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z"},accSagittalSharp23SDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z"},accSagittalFlat23SUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp49SDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z"},accSagittalFlat49SUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z"},accSagittalSharp7v19CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z"},accSagittalFlat7v19CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z"},accSagittalSharp19CDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z"},accSagittalFlat19CUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z"},accSagittalSharp11v49CDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat11v49CUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z"},accSagittalSharp143CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat143CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp17kDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z"},accSagittalFlat17kUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z"},accSagittalSharp19sDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z"},accSagittalFlat19sUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z"},accSagittalSharp19sUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z"},accSagittalFlat19sDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z"},accSagittalSharp17kUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat17kDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp143CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z"},accSagittalFlat143CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp11v49CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z"},accSagittalFlat11v49CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z"},accSagittalSharp19CUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat19CDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalSharp7v19CUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat7v19CDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalSharp49SUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat49SDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp23SUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat23SDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp5v13MUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z"},accSagittalFlat5v13MDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z"},accSagittalSharp11v19MUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat11v19MDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalSharp49MUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z"},accSagittalFlat49MDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z"},accSagittalSharp5v49MUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z"},accSagittalFlat5v49MDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z"},accSagittalSharp49LUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z"},accSagittalFlat49LDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z"},accSagittalSharp11v19LUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z"},accSagittalFlat11v19LDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z"},accSagittalSharp5v13LUp:{x_min:0,x_max:500,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat5v13LDown:{x_min:0,x_max:500,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalDoubleSharp23SDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z"},accSagittalDoubleFlat23SUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z"},accSagittalDoubleSharp49SDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z"},accSagittalDoubleFlat49SUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z"},accSagittalDoubleSharp7v19CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z"},accSagittalDoubleFlat7v19CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z"},accSagittalDoubleSharp19CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z"},accSagittalDoubleFlat19CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z"},accSagittalDoubleSharp11v49CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat11v49CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp143CDown:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat143CUp:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp17kDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z"},accSagittalDoubleFlat17kUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z"},accSagittalDoubleSharp19sDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z"},accSagittalDoubleFlat19sUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z"},accSagittalShaftUp:{x_min:0,x_max:31,y_min:-359,y_max:172,ha:531,o:"m 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z"},accSagittalShaftDown:{x_min:0,x_max:31,y_min:-172,y_max:359,ha:531,o:"m 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z"},accSagittalAcute:{x_min:0,x_max:125,y_min:-62,y_max:125,ha:187,o:"m 0 0 l 0 -89 l 180 89 l 180 180 z"},accSagittalGrave:{x_min:0,x_max:125,y_min:-125,y_max:62,ha:187,o:"m 180 -180 l 180 -89 l 0 89 l 0 0 z"},accSagittal1MinaUp:{x_min:-7,x_max:124,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal1MinaDown:{x_min:-7,x_max:124,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal2MinasUp:{x_min:-7,x_max:218,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal2MinasDown:{x_min:-7,x_max:218,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal1TinaUp:{x_min:0,x_max:93,y_min:16,y_max:107,ha:91,o:"m 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z"},accSagittal1TinaDown:{x_min:0,x_max:93,y_min:-107,y_max:-16,ha:91,o:"m 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z"},accSagittal2TinasUp:{x_min:0,x_max:94,y_min:16,y_max:107,ha:91,o:"m 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal2TinasDown:{x_min:0,x_max:94,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z"},accSagittal3TinasUp:{x_min:-7,x_max:124,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal3TinasDown:{x_min:-7,x_max:124,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal4TinasUp:{x_min:0,x_max:187,y_min:16,y_max:107,ha:91,o:"m 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z"},accSagittal4TinasDown:{x_min:0,x_max:187,y_min:-107,y_max:-16,ha:91,o:"m 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z"},accSagittal5TinasUp:{x_min:0,x_max:218,y_min:16,y_max:107,ha:91,o:"m 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal5TinasDown:{x_min:0,x_max:218,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z"},accSagittal6TinasUp:{x_min:-7,x_max:218,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal6TinasDown:{x_min:-7,x_max:218,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal7TinasUp:{x_min:0,x_max:281,y_min:16,y_max:107,ha:91,o:"m 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z"},accSagittal7TinasDown:{x_min:0,x_max:281,y_min:-107,y_max:-16,ha:91,o:"m 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z"},accSagittal8TinasUp:{x_min:0,x_max:312,y_min:16,y_max:107,ha:91,o:"m 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal8TinasDown:{x_min:0,x_max:312,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z"},accSagittal9TinasUp:{x_min:-7,x_max:312,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal9TinasDown:{x_min:-7,x_max:312,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittalFractionalTinaUp:{x_min:-3,x_max:35,y_min:73,y_max:111,ha:38,o:"m -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z"},accSagittalFractionalTinaDown:{x_min:-3,x_max:35,y_min:-111,y_max:-73,ha:38,o:"m -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:164,y_min:-194,y_max:421,ha:615,o:"m 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:414,y_min:-194,y_max:421,ha:615,o:"m 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z"},accidentalWilsonPlus:{x_min:0,x_max:281,y_min:-203,y_max:203,ha:406,o:"m 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z"},accidentalWilsonMinus:{x_min:0,x_max:281,y_min:-186,y_max:186,ha:372,o:"m 0 112 l 405 -268 l 405 -112 l 0 268 z"}},fontFamily:"Bravura",resolution:1e3,generatedOn:"2022-12-18T09:06:51.407Z"},Fi={smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}};const Mi={resolution:1e3,fontFamily:"VexFlowCustom",glyphs:{vexAccidentalMicrotonal1:{x_min:-171.5,x_max:483.1875,ha:493,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 "},vexAccidentalMicrotonal3:{x_min:0,x_max:430.75,ha:360,o:"m -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z "},vexAccidentalMicrotonal4:{x_min:0,x_max:430.75,ha:360,o:"m 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z "},vexNoteHeadRectBlack:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 "},vexNoteHeadRectWhite:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100"},vexWiggleArpeggioUp:{x_min:58.53125,x_max:228.671875,ha:294,o:"m 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 "}}};const Oi={spacing:50,glyphs:{" ":{x_min:0,x_max:250,y_min:0,y_max:500,ha:500,leftSideBearing:0,advanceWidth:250},0:{x_min:33,x_max:534,y_min:-13,y_max:751,ha:764,leftSideBearing:33,advanceWidth:570},1:{x_min:48,x_max:235,y_min:-17,y_max:734,ha:751,leftSideBearing:48,advanceWidth:286},2:{x_min:56,x_max:571,y_min:-19,y_max:741,ha:760,leftSideBearing:56,advanceWidth:626},3:{x_min:50,x_max:528,y_min:-7,y_max:731,ha:738,leftSideBearing:50,advanceWidth:589},4:{x_min:38,x_max:564,y_min:-13,y_max:743,ha:756,leftSideBearing:38,advanceWidth:614},5:{x_min:42,x_max:601,y_min:-34,y_max:743,ha:777,leftSideBearing:42,advanceWidth:648},6:{x_min:47,x_max:606,y_min:-16,y_max:743,ha:759,leftSideBearing:47,advanceWidth:667},7:{x_min:47,x_max:567,y_min:5,y_max:739,ha:734,leftSideBearing:0,advanceWidth:615},8:{x_min:40,x_max:541,y_min:-15,y_max:752,ha:767,leftSideBearing:40,advanceWidth:585},9:{x_min:40,x_max:537,y_min:-52,y_max:736,ha:788,leftSideBearing:40,advanceWidth:592},"!":{x_min:49,x_max:180,y_min:-7,y_max:761,ha:768,leftSideBearing:49,advanceWidth:230},'"':{x_min:39,x_max:304,y_min:596,y_max:804,ha:208,leftSideBearing:39,advanceWidth:353},"#":{x_min:33,x_max:599,y_min:-8,y_max:765,ha:773,leftSideBearing:33,advanceWidth:648},$:{x_min:53,x_max:495,y_min:-111,y_max:823,ha:934,leftSideBearing:53,advanceWidth:560},"%":{x_min:35,x_max:656,y_min:-128,y_max:808,ha:936,leftSideBearing:35,advanceWidth:711},"&":{x_min:53,x_max:441,y_min:-3,y_max:753,ha:756,leftSideBearing:53,advanceWidth:500},"'":{x_min:43,x_max:161,y_min:590,y_max:811,ha:221,leftSideBearing:43,advanceWidth:217},"(":{x_min:41,x_max:311,y_min:-36,y_max:845,ha:881,leftSideBearing:41,advanceWidth:308},")":{x_min:-8,x_max:257,y_min:-21,y_max:852,ha:873,leftSideBearing:-8,advanceWidth:280},"*":{x_min:59,x_max:539,y_min:175,y_max:589,ha:414,leftSideBearing:59,advanceWidth:601},"+":{x_min:33,x_max:361,y_min:180,y_max:587,ha:407,leftSideBearing:33,advanceWidth:400},",":{x_min:15,x_max:176,y_min:-129,y_max:92,ha:221,leftSideBearing:15,advanceWidth:205},"-":{x_min:40,x_max:380,y_min:317,y_max:452,ha:135,leftSideBearing:40,advanceWidth:422},".":{x_min:48,x_max:185,y_min:-56,y_max:84,ha:140,leftSideBearing:48,advanceWidth:227},"/":{x_min:-58,x_max:654,y_min:-122,y_max:844,ha:966,leftSideBearing:-58,advanceWidth:626},":":{x_min:65,x_max:225,y_min:97,y_max:536,ha:439,leftSideBearing:65,advanceWidth:302},";":{x_min:13,x_max:295,y_min:-139,y_max:536,ha:675,leftSideBearing:13,advanceWidth:334},"<":{x_min:28,x_max:438,y_min:-1,y_max:607,ha:608,leftSideBearing:28,advanceWidth:475},"=":{x_min:40,x_max:383,y_min:199.9598640852289,y_max:541,ha:341.0401359147711,leftSideBearing:40,advanceWidth:422},">":{x_min:35,x_max:421,y_min:28,y_max:632,ha:604,leftSideBearing:35,advanceWidth:466},"?":{x_min:45,x_max:548,y_min:-17,y_max:767,ha:784,leftSideBearing:45,advanceWidth:592},"@":{x_min:51,x_max:730,y_min:-78,y_max:753,ha:831,leftSideBearing:51,advanceWidth:781},A:{x_min:37,x_max:554,y_min:-4,y_max:746,ha:750,leftSideBearing:37,advanceWidth:617},B:{x_min:37,x_max:532,y_min:3,y_max:783,ha:780,leftSideBearing:37,advanceWidth:579},C:{x_min:37,x_max:583,y_min:-3,y_max:775,ha:778,leftSideBearing:37,advanceWidth:623},D:{x_min:50,x_max:530,y_min:-15,y_max:749,ha:764,leftSideBearing:50,advanceWidth:579},E:{x_min:45,x_max:531,y_min:-1,y_max:743,ha:744,leftSideBearing:45,advanceWidth:585},F:{x_min:45,x_max:459,y_min:23,y_max:727,ha:704,leftSideBearing:45,advanceWidth:510},G:{x_min:31,x_max:577,y_min:-8,y_max:733,ha:741,leftSideBearing:31,advanceWidth:611},H:{x_min:37,x_max:493,y_min:-22,y_max:758,ha:780,leftSideBearing:37,advanceWidth:535},I:{x_min:47,x_max:501,y_min:-3,y_max:731,ha:734,leftSideBearing:47,advanceWidth:541},J:{x_min:33,x_max:531,y_min:-23,y_max:725,ha:748,leftSideBearing:33,advanceWidth:573},K:{x_min:43,x_max:505,y_min:-10,y_max:740,ha:750,leftSideBearing:43,advanceWidth:560},L:{x_min:49,x_max:457,y_min:-2,y_max:746,ha:748,leftSideBearing:49,advanceWidth:510},M:{x_min:35,x_max:699,y_min:1,y_max:744,ha:743,leftSideBearing:35,advanceWidth:743},N:{x_min:34,x_max:533,y_min:-17,y_max:761,ha:778,leftSideBearing:34,advanceWidth:579},O:{x_min:41,x_max:608,y_min:-5,y_max:735,ha:740,leftSideBearing:41,advanceWidth:667},P:{x_min:53,x_max:451,y_min:-18,y_max:735,ha:753,leftSideBearing:53,advanceWidth:497},Q:{x_min:40,x_max:599,y_min:-67,y_max:744,ha:811,leftSideBearing:40,advanceWidth:648},R:{x_min:39,x_max:487,y_min:16,y_max:735,ha:719,leftSideBearing:39,advanceWidth:535},S:{x_min:35,x_max:552,y_min:-47,y_max:708,ha:755,leftSideBearing:35,advanceWidth:604},T:{x_min:26,x_max:656,y_min:-13,y_max:718,ha:731,leftSideBearing:26,advanceWidth:705},U:{x_min:41,x_max:518,y_min:-20,y_max:748,ha:768,leftSideBearing:41,advanceWidth:567},V:{x_min:47,x_max:509,y_min:-26,y_max:744,ha:770,leftSideBearing:47,advanceWidth:567},W:{x_min:44,x_max:789,y_min:-35,y_max:720,ha:755,leftSideBearing:44,advanceWidth:833},X:{x_min:63,x_max:635,y_min:-10,y_max:745,ha:755,leftSideBearing:63,advanceWidth:680},Y:{x_min:43,x_max:503,y_min:-21,y_max:734,ha:755,leftSideBearing:43,advanceWidth:541},Z:{x_min:42,x_max:584,y_min:-10,y_max:739,ha:749,leftSideBearing:42,advanceWidth:629},"[":{x_min:46,x_max:346,y_min:-150,y_max:884,ha:1034,leftSideBearing:46,advanceWidth:291},"\\":{x_min:20,x_max:616,y_min:-100,y_max:797,ha:897,leftSideBearing:20,advanceWidth:645},"]":{x_min:-76,x_max:226,y_min:-150,y_max:881,ha:1031,leftSideBearing:-76,advanceWidth:297},"^":{x_min:43,x_max:437,y_min:517,y_max:812,ha:295,leftSideBearing:43,advanceWidth:478},_:{x_min:29,x_max:563,y_min:-110,y_max:-1,ha:109,leftSideBearing:29,advanceWidth:598},"`":{x_min:54,x_max:321,y_min:540,y_max:747,ha:207,leftSideBearing:54,advanceWidth:368},a:{x_min:20,x_max:447,y_min:-17,y_max:495,ha:512,leftSideBearing:20,advanceWidth:494},b:{x_min:37,x_max:466,y_min:-27,y_max:770,ha:797,leftSideBearing:37,advanceWidth:510},c:{x_min:35,x_max:456,y_min:-9,y_max:507,ha:516,leftSideBearing:35,advanceWidth:460},d:{x_min:45,x_max:520,y_min:-15,y_max:764,ha:779,leftSideBearing:45,advanceWidth:560},e:{x_min:33,x_max:370,y_min:-5,y_max:501,ha:506,leftSideBearing:33,advanceWidth:397},f:{x_min:35,x_max:411,y_min:-13,y_max:695,ha:708,leftSideBearing:35,advanceWidth:453},g:{x_min:33,x_max:551,y_min:-257,y_max:505,ha:762,leftSideBearing:33,advanceWidth:611},h:{x_min:32,x_max:458,y_min:-29,y_max:743,ha:772,leftSideBearing:32,advanceWidth:491},i:{x_min:45,x_max:167,y_min:-13,y_max:631,ha:644,leftSideBearing:45,advanceWidth:220},j:{x_min:-127,x_max:261,y_min:-231,y_max:601,ha:832,leftSideBearing:-127,advanceWidth:308},k:{x_min:39,x_max:443,y_min:-3,y_max:700,ha:703,leftSideBearing:39,advanceWidth:497},l:{x_min:58,x_max:168,y_min:-8,y_max:686,ha:694,leftSideBearing:58,advanceWidth:227},m:{x_min:39,x_max:688,y_min:-14,y_max:501,ha:515,leftSideBearing:39,advanceWidth:718},n:{x_min:45,x_max:491,y_min:-32,y_max:512,ha:544,leftSideBearing:45,advanceWidth:541},o:{x_min:41,x_max:424,y_min:-12,y_max:493,ha:505,leftSideBearing:41,advanceWidth:447},p:{x_min:25,x_max:529,y_min:-260,y_max:500,ha:760,leftSideBearing:25,advanceWidth:573},q:{x_min:53,x_max:603,y_min:-235,y_max:514,ha:749,leftSideBearing:53,advanceWidth:623},r:{x_min:32,x_max:407,y_min:-7,y_max:492,ha:499,leftSideBearing:32,advanceWidth:460},s:{x_min:49,x_max:416,y_min:-12,y_max:519,ha:531,leftSideBearing:49,advanceWidth:460},t:{x_min:32,x_max:442,y_min:-5,y_max:684,ha:689,leftSideBearing:32,advanceWidth:469},u:{x_min:41,x_max:487,y_min:-5,y_max:507,ha:512,leftSideBearing:41,advanceWidth:510},v:{x_min:16,x_max:441,y_min:-20,y_max:542,ha:562,leftSideBearing:16,advanceWidth:456},w:{x_min:39,x_max:639,y_min:-22,y_max:505,ha:527,leftSideBearing:39,advanceWidth:661},x:{x_min:15,x_max:505,y_min:-39,y_max:539,ha:578,leftSideBearing:15,advanceWidth:541},y:{x_min:-98,x_max:501,y_min:-242,y_max:511,ha:753,leftSideBearing:-98,advanceWidth:548},z:{x_min:27,x_max:479,y_min:-3,y_max:494,ha:497,leftSideBearing:27,advanceWidth:494},"{":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"|":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"}":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"~":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308}},fontFamily:"PetalumaScript",resolution:1e3,generatedOn:"2020-06-14T18:33:25.407Z"},Ri={spacing:50,glyphs:{" ":{x_min:0,x_max:509,y_min:0,y_max:2e3,ha:2e3,leftSideBearing:0,advanceWidth:509},0:{x_min:121,x_max:1048,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1168},1:{x_min:117,x_max:767,y_min:0,y_max:1456,ha:1456,leftSideBearing:117,advanceWidth:844},2:{x_min:75.8474576645637,x_max:1040,y_min:0,y_max:1477,ha:1477,leftSideBearing:75,advanceWidth:1131},3:{x_min:74.85365853658536,x_max:994,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1106},4:{x_min:63,x_max:1114,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1187},5:{x_min:96.8448275474953,x_max:982,y_min:-21,y_max:1456,ha:1477,leftSideBearing:96,advanceWidth:1081},6:{x_min:121,x_max:1067,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1144},7:{x_min:76,x_max:1060,y_min:0,y_max:1456,ha:1456,leftSideBearing:-30,advanceWidth:1128},8:{x_min:92,x_max:1039,y_min:-21,y_max:1477,ha:1498,leftSideBearing:92,advanceWidth:1131},9:{x_min:84,x_max:1026,y_min:-21,y_max:1477,ha:1498,leftSideBearing:84,advanceWidth:1154},"!":{x_min:143,x_max:340,y_min:0,y_max:1456,ha:1456,leftSideBearing:143,advanceWidth:483},'"':{x_min:166,x_max:634,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:770},"#":{x_min:63,x_max:1179,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1246},$:{x_min:81.92156915727656,x_max:1012,y_min:-208,y_max:1693,ha:1901,leftSideBearing:81,advanceWidth:1110},"%":{x_min:77,x_max:1384,y_min:-21,y_max:1477,ha:1498,leftSideBearing:77,advanceWidth:1460},"&":{x_min:74,x_max:1242,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1289},"'":{x_min:166,x_max:324,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:460},"(":{x_min:114,x_max:650,y_min:-463,y_max:1636,ha:2099,leftSideBearing:114,advanceWidth:662},")":{x_min:11,x_max:547,y_min:-463,y_max:1636,ha:2099,leftSideBearing:11,advanceWidth:654},"*":{x_min:66,x_max:893,y_min:607,y_max:1456,ha:849,leftSideBearing:66,advanceWidth:958},"+":{x_min:73,x_max:1071,y_min:146,y_max:1206,ha:1060,leftSideBearing:73,advanceWidth:1145},",":{x_min:23,x_max:315,y_min:-311,y_max:221,ha:532,leftSideBearing:23,advanceWidth:404},"-":{x_min:154,x_max:643,y_min:538,y_max:692,ha:154,leftSideBearing:154,advanceWidth:797},".":{x_min:145,x_max:342,y_min:0,y_max:202,ha:202,leftSideBearing:145,advanceWidth:493},"/":{x_min:0,x_max:774,y_min:-125,y_max:1456,ha:1581,leftSideBearing:0,advanceWidth:824},":":{x_min:145,x_max:342,y_min:0,y_max:1082,ha:1082,leftSideBearing:145,advanceWidth:419},";":{x_min:53,x_max:345,y_min:-311,y_max:1082,ha:1393,leftSideBearing:53,advanceWidth:424},"<":{x_min:76,x_max:892,y_min:107,y_max:1013,ha:906,leftSideBearing:76,advanceWidth:1017},"=":{x_min:147,x_max:981,y_min:407,y_max:987,ha:580,leftSideBearing:147,advanceWidth:1127},">":{x_min:125,x_max:980,y_min:87,y_max:993,ha:906,leftSideBearing:125,advanceWidth:1060},"?":{x_min:65.92660602419838,x_max:890,y_min:0,y_max:1477,ha:1477,leftSideBearing:65,advanceWidth:953},"@":{x_min:84.3592218305664,x_max:1705.2346925277395,y_min:-453,y_max:1431,ha:1884,leftSideBearing:84,advanceWidth:1821},A:{x_min:70,x_max:1463,y_min:0,y_max:1456,ha:1456,leftSideBearing:70,advanceWidth:1533},B:{x_min:81,x_max:1253,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1322},C:{x_min:80,x_max:1174,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1290},D:{x_min:81,x_max:1291,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1356},E:{x_min:81,x_max:1190,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1306},F:{x_min:81,x_max:1176,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1256},G:{x_min:80,x_max:1226,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1346},H:{x_min:81,x_max:1497,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1578},I:{x_min:81,x_max:604,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:685},J:{x_min:60,x_max:1100,y_min:-21,y_max:1456,ha:1477,leftSideBearing:60,advanceWidth:1169},K:{x_min:81,x_max:1427,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1501},L:{x_min:81,x_max:1130,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1210},M:{x_min:94,x_max:1888,y_min:0,y_max:1456,ha:1456,leftSideBearing:94,advanceWidth:1982},N:{x_min:83,x_max:1509,y_min:0,y_max:1456,ha:1456,leftSideBearing:83,advanceWidth:1592},O:{x_min:70,x_max:1281,y_min:-21,y_max:1477,ha:1498,leftSideBearing:70,advanceWidth:1351},P:{x_min:81,x_max:1242,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1297},Q:{x_min:70,x_max:1348,y_min:-245,y_max:1477,ha:1722,leftSideBearing:70,advanceWidth:1376},R:{x_min:81,x_max:1285,y_min:0,y_max:1455,ha:1455,leftSideBearing:81,advanceWidth:1385},S:{x_min:115,x_max:1116,y_min:-21,y_max:1477,ha:1498,leftSideBearing:115,advanceWidth:1206},T:{x_min:96,x_max:1306,y_min:0,y_max:1456,ha:1456,leftSideBearing:96,advanceWidth:1406},U:{x_min:70,x_max:1452,y_min:-21,y_max:1456,ha:1477,leftSideBearing:70,advanceWidth:1522},V:{x_min:65,x_max:1443,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1508},W:{x_min:72,x_max:2057,y_min:0,y_max:1456,ha:1456,leftSideBearing:72,advanceWidth:2129},X:{x_min:80,x_max:1449,y_min:0,y_max:1456,ha:1456,leftSideBearing:80,advanceWidth:1529},Y:{x_min:65,x_max:1396,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1461},Z:{x_min:90,x_max:1107,y_min:0,y_max:1456,ha:1456,leftSideBearing:90,advanceWidth:1197},"[":{x_min:157,x_max:541,y_min:-312,y_max:1664,ha:1976,leftSideBearing:157,advanceWidth:573},"\\":{x_min:36,x_max:830,y_min:-125,y_max:1456,ha:1581,leftSideBearing:36,advanceWidth:841},"]":{x_min:23,x_max:408,y_min:-312,y_max:1664,ha:1976,leftSideBearing:23,advanceWidth:552},"^":{x_min:71,x_max:802,y_min:729,y_max:1456,ha:727,leftSideBearing:71,advanceWidth:864},_:{x_min:119,x_max:1041,y_min:-154,y_max:0,ha:154,leftSideBearing:119,advanceWidth:1168},"`":{x_min:40,x_max:456,y_min:1288,y_max:1560,ha:272,leftSideBearing:40,advanceWidth:496},a:{x_min:79,x_max:1053,y_min:-21,y_max:1102,ha:1123,leftSideBearing:79,advanceWidth:1132},b:{x_min:-16,x_max:1071,y_min:-21,y_max:1560,ha:1581,leftSideBearing:-16,advanceWidth:1145},c:{x_min:78,x_max:988,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1067},d:{x_min:78,x_max:1156,y_min:-21,y_max:1560,ha:1581,leftSideBearing:78,advanceWidth:1218},e:{x_min:74,x_max:980,y_min:-21,y_max:1102,ha:1123,leftSideBearing:74,advanceWidth:1059},f:{x_min:64,x_max:731,y_min:0,y_max:1581,ha:1581,leftSideBearing:64,advanceWidth:725},g:{x_min:78,x_max:1133,y_min:-437,y_max:1102,ha:1539,leftSideBearing:78,advanceWidth:1157},h:{x_min:49,x_max:1255,y_min:0,y_max:1560,ha:1560,leftSideBearing:49,advanceWidth:1315},i:{x_min:67,x_max:590,y_min:0,y_max:1560,ha:1560,leftSideBearing:67,advanceWidth:652},j:{x_min:-56,x_max:381,y_min:-437,y_max:1560,ha:1997,leftSideBearing:-56,advanceWidth:525},k:{x_min:64,x_max:1248,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:1287},l:{x_min:64,x_max:587,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:653},m:{x_min:74,x_max:1905,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1977},n:{x_min:74,x_max:1278,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1343},o:{x_min:78,x_max:1046,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1124},p:{x_min:34,x_max:1119,y_min:-416,y_max:1102,ha:1518,leftSideBearing:34,advanceWidth:1197},q:{x_min:78,x_max:1135,y_min:-416,y_max:1102,ha:1518,leftSideBearing:78,advanceWidth:1139},r:{x_min:72,x_max:808,y_min:0,y_max:1102,ha:1102,leftSideBearing:72,advanceWidth:854},s:{x_min:104,x_max:933,y_min:-21,y_max:1102,ha:1123,leftSideBearing:104,advanceWidth:1022},t:{x_min:24,x_max:678,y_min:-17,y_max:1343,ha:1360,leftSideBearing:24,advanceWidth:730},u:{x_min:52,x_max:1181,y_min:-21,y_max:1082,ha:1103,leftSideBearing:52,advanceWidth:1245},v:{x_min:26,x_max:1176,y_min:0,y_max:1082,ha:1082,leftSideBearing:26,advanceWidth:1206},w:{x_min:52,x_max:1777,y_min:0,y_max:1082,ha:1082,leftSideBearing:52,advanceWidth:1823},x:{x_min:42,x_max:1163,y_min:0,y_max:1082,ha:1082,leftSideBearing:42,advanceWidth:1203},y:{x_min:24,x_max:1172,y_min:-437,y_max:1082,ha:1519,leftSideBearing:24,advanceWidth:1192},z:{x_min:88,x_max:960,y_min:0,y_max:1082,ha:1082,leftSideBearing:88,advanceWidth:1032},"{":{x_min:63,x_max:671,y_min:-364,y_max:1597,ha:1961,leftSideBearing:63,advanceWidth:701},"|":{x_min:150,x_max:307,y_min:-270,y_max:1456,ha:1726,leftSideBearing:150,advanceWidth:451},"}":{x_min:27,x_max:635,y_min:-364,y_max:1597,ha:1961,leftSideBearing:27,advanceWidth:701},"~":{x_min:121,x_max:1257,y_min:401,y_max:803,ha:402,leftSideBearing:121,advanceWidth:1386}},fontFamily:"Roboto Slab",resolution:2048,generatedOn:"2020-06-15T19:12:58.120Z"},Li={glyphs:{0:{x_min:86,x_max:1038,y_min:-25,y_max:1472,ha:1497,leftSideBearing:86,advanceWidth:1139},1:{x_min:162,x_max:806,y_min:0,y_max:1472,ha:1472,leftSideBearing:162,advanceWidth:1139},2:{x_min:51,x_max:1036,y_min:0,y_max:1472,ha:1472,leftSideBearing:51,advanceWidth:1139},3:{x_min:77,x_max:1051,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},4:{x_min:38,x_max:1092,y_min:0,y_max:1472,ha:1472,leftSideBearing:38,advanceWidth:1139},5:{x_min:91,x_max:1077,y_min:-25,y_max:1446,ha:1471,leftSideBearing:91,advanceWidth:1139},6:{x_min:87,x_max:1066,y_min:-25,y_max:1472,ha:1497,leftSideBearing:87,advanceWidth:1139},7:{x_min:87,x_max:1048,y_min:0,y_max:1446,ha:1446,leftSideBearing:87,advanceWidth:1139},8:{x_min:83,x_max:1047,y_min:-26,y_max:1472,ha:1498,leftSideBearing:83,advanceWidth:1139},9:{x_min:65,x_max:1044,y_min:-26,y_max:1472,ha:1498,leftSideBearing:65,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:184,x_max:488,y_min:0,y_max:1466,ha:1466,leftSideBearing:184,advanceWidth:682},'"':{x_min:112,x_max:869,y_min:945,y_max:1466,ha:521,leftSideBearing:112,advanceWidth:971},"#":{x_min:18,x_max:1115,y_min:-25,y_max:1491,ha:1516,leftSideBearing:18,advanceWidth:1139},$:{x_min:70,x_max:1048,y_min:-205,y_max:1584,ha:1789,leftSideBearing:70,advanceWidth:1139},"%":{x_min:89,x_max:1725,y_min:-59,y_max:1491,ha:1550,leftSideBearing:89,advanceWidth:1821},"&":{x_min:90,x_max:1446,y_min:-38,y_max:1491,ha:1529,leftSideBearing:90,advanceWidth:1479},"'":{x_min:92,x_max:398,y_min:945,y_max:1466,ha:521,leftSideBearing:92,advanceWidth:487},"(":{x_min:107,x_max:616,y_min:-431,y_max:1491,ha:1922,leftSideBearing:107,advanceWidth:682},")":{x_min:67,x_max:576,y_min:-431,y_max:1491,ha:1922,leftSideBearing:67,advanceWidth:682},"*":{x_min:28,x_max:753,y_min:792,y_max:1491,ha:699,leftSideBearing:28,advanceWidth:797},"+":{x_min:85,x_max:1110,y_min:211,y_max:1236,ha:1025,leftSideBearing:85,advanceWidth:1196},",":{x_min:117,x_max:421,y_min:-327,y_max:281,ha:608,leftSideBearing:117,advanceWidth:569},"-":{x_min:115,x_max:667,y_min:391,y_max:672,ha:281,leftSideBearing:115,advanceWidth:682},".":{x_min:147,x_max:428,y_min:0,y_max:281,ha:281,leftSideBearing:147,advanceWidth:569},"/":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},":":{x_min:201,x_max:482,y_min:0,y_max:1062,ha:1062,leftSideBearing:201,advanceWidth:682},";":{x_min:170,x_max:474,y_min:-327,y_max:1062,ha:1389,leftSideBearing:170,advanceWidth:682},"<":{x_min:95,x_max:1100,y_min:167,y_max:1281,ha:1114,leftSideBearing:95,advanceWidth:1196},"=":{x_min:85,x_max:1110,y_min:372,y_max:1074,ha:702,leftSideBearing:85,advanceWidth:1196},">":{x_min:95,x_max:1101,y_min:166,y_max:1279,ha:1113,leftSideBearing:95,advanceWidth:1196},"?":{x_min:106,x_max:1158,y_min:0,y_max:1481,ha:1481,leftSideBearing:106,advanceWidth:1251},"@":{x_min:61,x_max:1990,y_min:-431,y_max:1492,ha:1923,leftSideBearing:61,advanceWidth:1997},A:{x_min:0,x_max:1471,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1479},B:{x_min:150,x_max:1378,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},C:{x_min:97,x_max:1374,y_min:-25,y_max:1491,ha:1516,leftSideBearing:97,advanceWidth:1479},D:{x_min:148,x_max:1377,y_min:0,y_max:1466,ha:1466,leftSideBearing:148,advanceWidth:1479},E:{x_min:149,x_max:1264,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},F:{x_min:151,x_max:1156,y_min:0,y_max:1466,ha:1466,leftSideBearing:151,advanceWidth:1251},G:{x_min:98,x_max:1469,y_min:-25,y_max:1491,ha:1516,leftSideBearing:98,advanceWidth:1593},H:{x_min:150,x_max:1322,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},I:{x_min:140,x_max:436,y_min:0,y_max:1466,ha:1466,leftSideBearing:140,advanceWidth:569},J:{x_min:35,x_max:973,y_min:-25,y_max:1466,ha:1491,leftSideBearing:35,advanceWidth:1139},K:{x_min:153,x_max:1475,y_min:0,y_max:1466,ha:1466,leftSideBearing:153,advanceWidth:1479},L:{x_min:157,x_max:1189,y_min:0,y_max:1454,ha:1454,leftSideBearing:157,advanceWidth:1251},M:{x_min:145,x_max:1561,y_min:0,y_max:1466,ha:1466,leftSideBearing:145,advanceWidth:1706},N:{x_min:152,x_max:1315,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1479},O:{x_min:89,x_max:1511,y_min:-25,y_max:1491,ha:1516,leftSideBearing:89,advanceWidth:1593},P:{x_min:149,x_max:1272,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},Q:{x_min:89,x_max:1566,y_min:-147,y_max:1491,ha:1638,leftSideBearing:89,advanceWidth:1593},R:{x_min:150,x_max:1468,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},S:{x_min:74,x_max:1266,y_min:-26,y_max:1491,ha:1517,leftSideBearing:74,advanceWidth:1366},T:{x_min:44,x_max:1209,y_min:0,y_max:1466,ha:1466,leftSideBearing:44,advanceWidth:1251},U:{x_min:147,x_max:1316,y_min:-25,y_max:1466,ha:1491,leftSideBearing:147,advanceWidth:1479},V:{x_min:-1,x_max:1364,y_min:0,y_max:1466,ha:1466,leftSideBearing:-1,advanceWidth:1366},W:{x_min:7,x_max:1931,y_min:0,y_max:1466,ha:1466,leftSideBearing:7,advanceWidth:1933},X:{x_min:0,x_max:1363,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1366},Y:{x_min:-3,x_max:1368,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},Z:{x_min:22,x_max:1213,y_min:0,y_max:1466,ha:1466,leftSideBearing:22,advanceWidth:1251},"[":{x_min:146,x_max:644,y_min:-413,y_max:1466,ha:1879,leftSideBearing:146,advanceWidth:682},"\\":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},"]":{x_min:38,x_max:536,y_min:-413,y_max:1466,ha:1879,leftSideBearing:38,advanceWidth:682},"^":{x_min:115,x_max:1080,y_min:692,y_max:1491,ha:799,leftSideBearing:115,advanceWidth:1196},_:{x_min:-19,x_max:1149,y_min:-405,y_max:-223,ha:182,leftSideBearing:-19,advanceWidth:1139},"`":{x_min:42,x_max:495,y_min:1192,y_max:1491,ha:299,leftSideBearing:42,advanceWidth:682},a:{x_min:73,x_max:1070,y_min:-24,y_max:1086,ha:1110,leftSideBearing:73,advanceWidth:1139},b:{x_min:135,x_max:1172,y_min:-24,y_max:1466,ha:1490,leftSideBearing:135,advanceWidth:1251},c:{x_min:85,x_max:1087,y_min:-24,y_max:1086,ha:1110,leftSideBearing:85,advanceWidth:1139},d:{x_min:84,x_max:1121,y_min:-24,y_max:1466,ha:1490,leftSideBearing:84,advanceWidth:1251},e:{x_min:65,x_max:1057.2517482517483,y_min:-24,y_max:1086,ha:1110,leftSideBearing:65,advanceWidth:1139},f:{x_min:24,x_max:742,y_min:0,y_max:1491,ha:1491,leftSideBearing:24,advanceWidth:682},g:{x_min:84,x_max:1120,y_min:-431,y_max:1086,ha:1517,leftSideBearing:84,advanceWidth:1251},h:{x_min:146,x_max:1113,y_min:0,y_max:1466,ha:1466,leftSideBearing:146,advanceWidth:1251},i:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},j:{x_min:-94,x_max:422,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:569},k:{x_min:137,x_max:1119,y_min:0,y_max:1466,ha:1466,leftSideBearing:137,advanceWidth:1139},l:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},m:{x_min:126,x_max:1688,y_min:0,y_max:1086,ha:1086,leftSideBearing:126,advanceWidth:1821},n:{x_min:145,x_max:1113,y_min:0,y_max:1086,ha:1086,leftSideBearing:145,advanceWidth:1251},o:{x_min:82,x_max:1178,y_min:-24,y_max:1086,ha:1110,leftSideBearing:82,advanceWidth:1251},p:{x_min:139,x_max:1175,y_min:-404,y_max:1086,ha:1490,leftSideBearing:139,advanceWidth:1251},q:{x_min:91,x_max:1122,y_min:-404,y_max:1086,ha:1490,leftSideBearing:91,advanceWidth:1251},r:{x_min:135,x_max:823,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:797},s:{x_min:48,x_max:1040,y_min:-24,y_max:1086,ha:1110,leftSideBearing:48,advanceWidth:1139},t:{x_min:31,x_max:657,y_min:-24,y_max:1437,ha:1461,leftSideBearing:31,advanceWidth:682},u:{x_min:141,x_max:1107,y_min:-24,y_max:1062,ha:1086,leftSideBearing:141,advanceWidth:1251},v:{x_min:11,x_max:1114,y_min:0,y_max:1062,ha:1062,leftSideBearing:11,advanceWidth:1139},w:{x_min:9,x_max:1592,y_min:0,y_max:1062,ha:1062,leftSideBearing:9,advanceWidth:1593},x:{x_min:12,x_max:1120,y_min:0,y_max:1062,ha:1062,leftSideBearing:12,advanceWidth:1139},y:{x_min:14,x_max:1106,y_min:-431,y_max:1062,ha:1493,leftSideBearing:14,advanceWidth:1139},z:{x_min:34,x_max:982,y_min:0,y_max:1062,ha:1062,leftSideBearing:34,advanceWidth:1024},"{":{x_min:60,x_max:744,y_min:-431,y_max:1491,ha:1922,leftSideBearing:60,advanceWidth:797},"|":{x_min:176,x_max:399,y_min:-431,y_max:1491,ha:1922,leftSideBearing:176,advanceWidth:573},"}":{x_min:45,x_max:729,y_min:-431,y_max:1491,ha:1922,leftSideBearing:45,advanceWidth:797},"~":{x_min:67,x_max:1129,y_min:519,y_max:924,ha:405,leftSideBearing:67,advanceWidth:1196}},fontFamily:"Arial",resolution:2048,generatedOn:"2022-11-04T20:05:21.000Z"},Wi={smufl:!1,name:"SANS",spacing:50,Description:"Built-in sans-serif font",bold:!0,italic:!0,monospaced:!1,serifs:!1,glyphs:{0:{x_min:85,x_max:1041,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139},1:{x_min:223,x_max:763,y_min:0,y_max:1472,ha:1472,leftSideBearing:223,advanceWidth:1139},2:{x_min:61.840001123045234,x_max:1031,y_min:0,y_max:1472,ha:1472,leftSideBearing:61,advanceWidth:1139},3:{x_min:86,x_max:1046,y_min:-26,y_max:1472,ha:1498,leftSideBearing:86,advanceWidth:1139},4:{x_min:26,x_max:1040,y_min:0,y_max:1466,ha:1466,leftSideBearing:26,advanceWidth:1139},5:{x_min:85,x_max:1057,y_min:-25,y_max:1446,ha:1471,leftSideBearing:85,advanceWidth:1139},6:{x_min:77,x_max:1045,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},7:{x_min:97,x_max:1046,y_min:0,y_max:1447,ha:1447,leftSideBearing:97,advanceWidth:1139},8:{x_min:83,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:83,advanceWidth:1139},9:{x_min:85,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:176,x_max:399,y_min:0,y_max:1466,ha:1466,leftSideBearing:176,advanceWidth:569},'"':{x_min:94,x_max:631,y_min:947,y_max:1466,ha:519,leftSideBearing:94,advanceWidth:727},"#":{x_min:21,x_max:1113,y_min:-25,y_max:1491,ha:1516,leftSideBearing:21,advanceWidth:1139},$:{x_min:73,x_max:1043,y_min:-211,y_max:1601,ha:1812,leftSideBearing:73,advanceWidth:1139},"%":{x_min:119,x_max:1695,y_min:-54,y_max:1491,ha:1545,leftSideBearing:119,advanceWidth:1821},"&":{x_min:88,x_max:1319,y_min:-34,y_max:1491,ha:1525,leftSideBearing:88,advanceWidth:1366},"'":{x_min:90,x_max:295,y_min:947,y_max:1466,ha:519,leftSideBearing:90,advanceWidth:391},"(":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},")":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},"*":{x_min:64,x_max:725,y_min:867,y_max:1491,ha:624,leftSideBearing:64,advanceWidth:797},"+":{x_min:114,x_max:1082,y_min:237,y_max:1206,ha:969,leftSideBearing:114,advanceWidth:1196},",":{x_min:170,x_max:387,y_min:-290,y_max:205,ha:495,leftSideBearing:170,advanceWidth:569},"-":{x_min:65,x_max:618,y_min:440,y_max:621,ha:181,leftSideBearing:65,advanceWidth:682},".":{x_min:186,x_max:391,y_min:0,y_max:205,ha:205,leftSideBearing:186,advanceWidth:569},"/":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},":":{x_min:185,x_max:390,y_min:0,y_max:1062,ha:1062,leftSideBearing:185,advanceWidth:569},";":{x_min:170,x_max:387,y_min:-290,y_max:1062,ha:1352,leftSideBearing:170,advanceWidth:569},"<":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"=":{x_min:114,x_max:1082,y_min:417,y_max:1030,ha:613,leftSideBearing:114,advanceWidth:1196},">":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"?":{x_min:90,x_max:1036,y_min:0,y_max:1491,ha:1491,leftSideBearing:90,advanceWidth:1139},"@":{x_min:111,x_max:2005,y_min:-431,y_max:1493,ha:1924,leftSideBearing:111,advanceWidth:2079},A:{x_min:-3,x_max:1369,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},B:{x_min:150,x_max:1257,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},C:{x_min:102,x_max:1398,y_min:-25,y_max:1491,ha:1516,leftSideBearing:102,advanceWidth:1479},D:{x_min:158,x_max:1370,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1479},E:{x_min:162,x_max:1256,y_min:0,y_max:1466,ha:1466,leftSideBearing:162,advanceWidth:1366},F:{x_min:168,x_max:1157,y_min:0,y_max:1466,ha:1466,leftSideBearing:168,advanceWidth:1251},G:{x_min:109,x_max:1465,y_min:-25,y_max:1491,ha:1516,leftSideBearing:109,advanceWidth:1593},H:{x_min:164,x_max:1314,y_min:0,y_max:1466,ha:1466,leftSideBearing:164,advanceWidth:1479},I:{x_min:191,x_max:385,y_min:0,y_max:1466,ha:1466,leftSideBearing:191,advanceWidth:569},J:{x_min:58.84976474807333,x_max:865,y_min:-25,y_max:1466,ha:1491,leftSideBearing:58,advanceWidth:1024},K:{x_min:150,x_max:1362,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},L:{x_min:150,x_max:1066,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1139},M:{x_min:152,x_max:1551,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1706},N:{x_min:156,x_max:1311,y_min:0,y_max:1466,ha:1466,leftSideBearing:156,advanceWidth:1479},O:{x_min:99,x_max:1501,y_min:-25,y_max:1492,ha:1517,leftSideBearing:99,advanceWidth:1593},P:{x_min:158,x_max:1277,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1366},Q:{x_min:88,x_max:1518,y_min:-114,y_max:1492,ha:1606,leftSideBearing:88,advanceWidth:1593},R:{x_min:161,x_max:1453,y_min:0,y_max:1466,ha:1466,leftSideBearing:161,advanceWidth:1479},S:{x_min:92,x_max:1259,y_min:-25,y_max:1491,ha:1516,leftSideBearing:92,advanceWidth:1366},T:{x_min:48,x_max:1210,y_min:0,y_max:1466,ha:1466,leftSideBearing:48,advanceWidth:1251},U:{x_min:161,x_max:1314,y_min:-25,y_max:1466,ha:1491,leftSideBearing:161,advanceWidth:1479},V:{x_min:9,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},W:{x_min:25,x_max:1910,y_min:0,y_max:1466,ha:1466,leftSideBearing:25,advanceWidth:1933},X:{x_min:9,x_max:1353,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},Y:{x_min:6,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:6,advanceWidth:1366},Z:{x_min:41,x_max:1200,y_min:0,y_max:1466,ha:1466,leftSideBearing:41,advanceWidth:1251},"[":{x_min:139,x_max:536,y_min:-407,y_max:1466,ha:1873,leftSideBearing:139,advanceWidth:569},"\\":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},"]":{x_min:39,x_max:436,y_min:-407,y_max:1466,ha:1873,leftSideBearing:39,advanceWidth:569},"^":{x_min:54,x_max:907,y_min:690,y_max:1491,ha:801,leftSideBearing:54,advanceWidth:961},_:{x_min:-31,x_max:1162,y_min:-407,y_max:-277,ha:130,leftSideBearing:-31,advanceWidth:1139},"`":{x_min:89,x_max:465,y_min:1194,y_max:1474,ha:280,leftSideBearing:89,advanceWidth:682},a:{x_min:74,x_max:1052,y_min:-24,y_max:1086,ha:1110,leftSideBearing:74,advanceWidth:1139},b:{x_min:134,x_max:1055,y_min:-24,y_max:1466,ha:1490,leftSideBearing:134,advanceWidth:1139},c:{x_min:80,x_max:1005,y_min:-24,y_max:1086,ha:1110,leftSideBearing:80,advanceWidth:1024},d:{x_min:70,x_max:991,y_min:-24,y_max:1466,ha:1490,leftSideBearing:70,advanceWidth:1139},e:{x_min:75,x_max:1054,y_min:-24,y_max:1086,ha:1110,leftSideBearing:75,advanceWidth:1139},f:{x_min:19,x_max:640,y_min:0,y_max:1491,ha:1491,leftSideBearing:19,advanceWidth:569},g:{x_min:66,x_max:1002,y_min:-431,y_max:1086,ha:1517,leftSideBearing:66,advanceWidth:1139},h:{x_min:135,x_max:1e3,y_min:0,y_max:1466,ha:1466,leftSideBearing:135,advanceWidth:1139},i:{x_min:136,x_max:316,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:455},j:{x_min:-94,x_max:314,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:455},k:{x_min:136,x_max:1016,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:1024},l:{x_min:131,x_max:311,y_min:0,y_max:1466,ha:1466,leftSideBearing:131,advanceWidth:455},m:{x_min:135,x_max:1574,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1706},n:{x_min:135,x_max:998,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1139},o:{x_min:68,x_max:1063,y_min:-24,y_max:1086,ha:1110,leftSideBearing:68,advanceWidth:1139},p:{x_min:135,x_max:1057,y_min:-407,y_max:1086,ha:1493,leftSideBearing:135,advanceWidth:1139},q:{x_min:72,x_max:992,y_min:-407,y_max:1086,ha:1493,leftSideBearing:72,advanceWidth:1139},r:{x_min:133,x_max:710,y_min:0,y_max:1086,ha:1086,leftSideBearing:133,advanceWidth:682},s:{x_min:63,x_max:945,y_min:-24,y_max:1086,ha:1110,leftSideBearing:63,advanceWidth:1024},t:{x_min:36,x_max:554,y_min:-14,y_max:1433,ha:1447,leftSideBearing:36,advanceWidth:569},u:{x_min:131,x_max:992,y_min:-24,y_max:1062,ha:1086,leftSideBearing:131,advanceWidth:1139},v:{x_min:26,x_max:1e3,y_min:0,y_max:1062,ha:1062,leftSideBearing:26,advanceWidth:1024},w:{x_min:6,x_max:1463,y_min:0,y_max:1062,ha:1062,leftSideBearing:6,advanceWidth:1479},x:{x_min:15,x_max:1009,y_min:0,y_max:1062,ha:1062,leftSideBearing:15,advanceWidth:1024},y:{x_min:33,x_max:1006,y_min:-431,y_max:1062,ha:1493,leftSideBearing:33,advanceWidth:1024},z:{x_min:40,x_max:980,y_min:0,y_max:1062,ha:1062,leftSideBearing:40,advanceWidth:1024},"{":{x_min:57,x_max:636,y_min:-431,y_max:1491,ha:1922,leftSideBearing:57,advanceWidth:684},"|":{x_min:188,x_max:345,y_min:-431,y_max:1491,ha:1922,leftSideBearing:188,advanceWidth:532},"}":{x_min:47,x_max:626,y_min:-431,y_max:1491,ha:1922,leftSideBearing:47,advanceWidth:684},"~":{x_min:87,x_max:1110,y_min:557,y_max:885,ha:328,leftSideBearing:87,advanceWidth:1196}},fontFamily:"sans-serif",resolution:2048,generatedOn:"2020-10-18T18:48:11.823Z"},zi={smufl:!1,name:"SERIF",spacing:50,Description:"Built-in serif font",bold:!0,italic:!0,monospaced:!1,serifs:!0,glyphs:{0:{x_min:49,x_max:975,y_min:-27,y_max:1383,ha:1410,leftSideBearing:49,advanceWidth:1024},1:{x_min:227,x_max:811,y_min:0,y_max:1383,ha:1383,leftSideBearing:227,advanceWidth:1024},2:{x_min:61,x_max:965,y_min:0,y_max:1383,ha:1383,leftSideBearing:61,advanceWidth:1024},3:{x_min:88,x_max:883,y_min:-27,y_max:1383,ha:1410,leftSideBearing:88,advanceWidth:1024},4:{x_min:25,x_max:967,y_min:0,y_max:1384,ha:1384,leftSideBearing:25,advanceWidth:1024},5:{x_min:66,x_max:898,y_min:-27,y_max:1409,ha:1436,leftSideBearing:66,advanceWidth:1024},6:{x_min:70,x_max:958,y_min:-27,y_max:1401,ha:1428,leftSideBearing:70,advanceWidth:1024},7:{x_min:41,x_max:920,y_min:-16,y_max:1356,ha:1372,leftSideBearing:41,advanceWidth:1024},8:{x_min:115,x_max:911,y_min:-27,y_max:1383,ha:1410,leftSideBearing:115,advanceWidth:1024},9:{x_min:61,x_max:940,y_min:-41,y_max:1383,ha:1424,leftSideBearing:61,advanceWidth:1024}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:512},"!":{x_min:266,x_max:488,y_min:-22,y_max:1383,ha:1405,leftSideBearing:266,advanceWidth:682},'"':{x_min:157.2000021972655,x_max:678.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:157,advanceWidth:836},"#":{x_min:10,x_max:1016,y_min:-1,y_max:1356,ha:1357,leftSideBearing:10,advanceWidth:1024},$:{x_min:90,x_max:936,y_min:-180,y_max:1492,ha:1672,leftSideBearing:90,advanceWidth:1024},"%":{x_min:125,x_max:1581,y_min:-30,y_max:1388,ha:1418,leftSideBearing:125,advanceWidth:1706},"&":{x_min:86,x_max:1536,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1593},"'":{x_min:97.20000219726548,x_max:273.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:97,advanceWidth:369},"(":{x_min:98,x_max:623,y_min:-363,y_max:1383,ha:1746,leftSideBearing:98,advanceWidth:682},")":{x_min:59,x_max:584,y_min:-363,y_max:1383,ha:1746,leftSideBearing:59,advanceWidth:682},"*":{x_min:137.96078522291893,x_max:886.039214777081,y_min:543,y_max:1383,ha:840,leftSideBearing:137,advanceWidth:1024},"+":{x_min:61,x_max:1093,y_min:2,y_max:1034,ha:1032,leftSideBearing:61,advanceWidth:1155},",":{x_min:115,x_max:399,y_min:-291,y_max:208,ha:499,leftSideBearing:115,advanceWidth:512},"-":{x_min:80,x_max:584,y_min:396,y_max:525,ha:129,leftSideBearing:80,advanceWidth:682},".":{x_min:143,x_max:371,y_min:-22,y_max:205,ha:227,leftSideBearing:143,advanceWidth:512},"/":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},":":{x_min:166,x_max:394,y_min:-22,y_max:943,ha:965,leftSideBearing:166,advanceWidth:569},";":{x_min:164,x_max:448,y_min:-290,y_max:943,ha:1233,leftSideBearing:164,advanceWidth:569},"<":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"=":{x_min:61,x_max:1093,y_min:246,y_max:791,ha:545,leftSideBearing:61,advanceWidth:1155},">":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"?":{x_min:139,x_max:848,y_min:-15,y_max:1383,ha:1398,leftSideBearing:139,advanceWidth:909},"@":{x_min:238,x_max:1657,y_min:-29,y_max:1386,ha:1415,leftSideBearing:238,advanceWidth:1886},A:{x_min:31,x_max:1445,y_min:0,y_max:1380,ha:1380,leftSideBearing:31,advanceWidth:1479},B:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},C:{x_min:57,x_max:1296,y_min:-28,y_max:1383,ha:1411,leftSideBearing:57,advanceWidth:1366},D:{x_min:33,x_max:1403,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1479},E:{x_min:25,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},F:{x_min:25,x_max:1119,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1139},G:{x_min:66,x_max:1452,y_min:-28,y_max:1383,ha:1411,leftSideBearing:66,advanceWidth:1479},H:{x_min:39,x_max:1438,y_min:0,y_max:1356,ha:1356,leftSideBearing:39,advanceWidth:1479},I:{x_min:37,x_max:642,y_min:0,y_max:1356,ha:1356,leftSideBearing:37,advanceWidth:682},J:{x_min:20,x_max:758,y_min:-28,y_max:1356,ha:1384,leftSideBearing:20,advanceWidth:797},K:{x_min:70,x_max:1479,y_min:0,y_max:1356,ha:1356,leftSideBearing:70,advanceWidth:1479},L:{x_min:25,x_max:1224,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},M:{x_min:25,x_max:1768,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1821},N:{x_min:25,x_max:1450,y_min:-22,y_max:1356,ha:1378,leftSideBearing:25,advanceWidth:1479},O:{x_min:70,x_max:1409,y_min:-28,y_max:1383,ha:1411,leftSideBearing:70,advanceWidth:1479},P:{x_min:33,x_max:1110,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1139},Q:{x_min:70,x_max:1435,y_min:-364.28571588721996,y_max:1383,ha:1747.28571588722,leftSideBearing:70,advanceWidth:1479},R:{x_min:35,x_max:1347,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},S:{x_min:86,x_max:1006,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1139},T:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1251},U:{x_min:29,x_max:1444,y_min:-28,y_max:1356,ha:1384,leftSideBearing:29,advanceWidth:1479},V:{x_min:33,x_max:1428,y_min:-22,y_max:1356,ha:1378,leftSideBearing:33,advanceWidth:1479},W:{x_min:10,x_max:1906,y_min:-22,y_max:1356,ha:1378,leftSideBearing:10,advanceWidth:1933},X:{x_min:20,x_max:1449,y_min:0,y_max:1356,ha:1356,leftSideBearing:20,advanceWidth:1479},Y:{x_min:45,x_max:1441,y_min:0,y_max:1356,ha:1356,leftSideBearing:45,advanceWidth:1479},Z:{x_min:18,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:18,advanceWidth:1251},"[":{x_min:180,x_max:612,y_min:-319,y_max:1355,ha:1674,leftSideBearing:180,advanceWidth:682},"\\":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},"]":{x_min:70,x_max:502,y_min:-319,y_max:1355,ha:1674,leftSideBearing:70,advanceWidth:682},"^":{x_min:49,x_max:914,y_min:608,y_max:1355,ha:747,leftSideBearing:49,advanceWidth:961},_:{x_min:0,x_max:1024,y_min:-255,y_max:-153,ha:102,leftSideBearing:0,advanceWidth:1024},"`":{x_min:39,x_max:499,y_min:1037,y_max:1392.509803639748,ha:355.50980363974804,leftSideBearing:39,advanceWidth:682},a:{x_min:76,x_max:905,y_min:-20,y_max:942,ha:962,leftSideBearing:76,advanceWidth:909},b:{x_min:6,x_max:958,y_min:-20,y_max:1399,ha:1419,leftSideBearing:6,advanceWidth:1024},c:{x_min:51,x_max:843,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},d:{x_min:55,x_max:1006,y_min:-20,y_max:1399,ha:1419,leftSideBearing:55,advanceWidth:1024},e:{x_min:51,x_max:868,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},f:{x_min:41,x_max:783,y_min:0,y_max:1399,ha:1399,leftSideBearing:41,advanceWidth:682},g:{x_min:57,x_max:963,y_min:-446,y_max:942,ha:1388,leftSideBearing:57,advanceWidth:1024},h:{x_min:18,x_max:997,y_min:0,y_max:1399,ha:1399,leftSideBearing:18,advanceWidth:1024},i:{x_min:33,x_max:516,y_min:0,y_max:1399,ha:1399,leftSideBearing:33,advanceWidth:569},j:{x_min:-142,x_max:397,y_min:-446,y_max:1399,ha:1845,leftSideBearing:-142,advanceWidth:569},k:{x_min:14,x_max:1029,y_min:0,y_max:1399,ha:1399,leftSideBearing:14,advanceWidth:1024},l:{x_min:39,x_max:523,y_min:0,y_max:1399,ha:1399,leftSideBearing:39,advanceWidth:569},m:{x_min:33,x_max:1587,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1593},n:{x_min:33,x_max:993,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1024},o:{x_min:59,x_max:963,y_min:-20,y_max:942,ha:962,leftSideBearing:59,advanceWidth:1024},p:{x_min:10,x_max:964,y_min:-443,y_max:944,ha:1387,leftSideBearing:10,advanceWidth:1024},q:{x_min:49,x_max:999,y_min:-443,y_max:942.0135137169275,ha:1385.0135137169275,leftSideBearing:49,advanceWidth:1024},r:{x_min:10,x_max:685,y_min:0,y_max:944,ha:944,leftSideBearing:10,advanceWidth:682},s:{x_min:104,x_max:713,y_min:-20,y_max:942.0263161804552,ha:962.0263161804552,leftSideBearing:104,advanceWidth:797},t:{x_min:27,x_max:572,y_min:-18,y_max:1186,ha:1204,leftSideBearing:27,advanceWidth:569},u:{x_min:18,x_max:981,y_min:-21,y_max:921,ha:942,leftSideBearing:18,advanceWidth:1024},v:{x_min:39,x_max:976,y_min:-28,y_max:921,ha:949,leftSideBearing:39,advanceWidth:1024},w:{x_min:43,x_max:1423,y_min:-28,y_max:921,ha:949,leftSideBearing:43,advanceWidth:1479},x:{x_min:35,x_max:989,y_min:0,y_max:921,ha:921,leftSideBearing:35,advanceWidth:1024},y:{x_min:29,x_max:976,y_min:-445,y_max:921,ha:1366,leftSideBearing:29,advanceWidth:1024},z:{x_min:55,x_max:855,y_min:0,y_max:921,ha:921,leftSideBearing:55,advanceWidth:909},"{":{x_min:205,x_max:717,y_min:-377,y_max:1397,ha:1774,leftSideBearing:205,advanceWidth:983},"|":{x_min:137,x_max:273,y_min:-512,y_max:1535,ha:2047,leftSideBearing:137,advanceWidth:410},"}":{x_min:266,x_max:778,y_min:-377,y_max:1397,ha:1774,leftSideBearing:266,advanceWidth:983},"~":{x_min:82,x_max:1028,y_min:380,y_max:666,ha:286,leftSideBearing:82,advanceWidth:1108}},fontFamily:"serif",resolution:2048,generatedOn:"2020-10-18T19:03:12.514Z"};class Ii{static sortAndUnique(t,e,i){if(t.length>1){const a=[];let n;t.sort(e);for(let e=0;e {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\nexport { Fraction };\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\nexport { Font };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Element };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave -= options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\nexport { Tables };\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\nexport { Glyph };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accidentalLinePositionsAndSpaceNeeds = [];\n let prevNote = undefined;\n let extraXSpaceNeededForLeftDisplacedNotehead = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n // If the current extra left-space needed isn't as big as this note's,\n // then we need to use this note's.\n extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accidentalLinePositionsAndSpaceNeeds.push({\n y,\n line: accLine,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n spacingBetweenStaveLines: lineSpace,\n });\n }\n else {\n accidentalLinePositionsAndSpaceNeeds.push({\n line: props.line,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n });\n }\n }\n // Sort accidentals by line number.\n accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line);\n const staveLineAccidentalLayoutMetrics = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let maxExtraXSpaceNeeded = 0;\n // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics)\n // from accidentalLinePositionsAndSpaceNeeds\n for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) {\n const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i];\n const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1];\n let currentLineMetric;\n // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric\n if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) {\n currentLineMetric = {\n line: accidentalLinePositionAndSpaceNeeds.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n };\n staveLineAccidentalLayoutMetrics.push(currentLineMetric);\n }\n else {\n currentLineMetric = priorLineMetric;\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' &&\n accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') {\n currentLineMetric.flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') {\n currentLineMetric.dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n currentLineMetric.numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing;\n // if this extraXSpaceNeeded is the largest so far, use it as the starting point for\n // all accidental columns.\n maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded);\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd])\n ? 'a'\n : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) {\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = leftShift + maxExtraXSpaceNeeded;\n columnXOffsets[0] = leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded;\n accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift = totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\nexport { Accidental };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nclass Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\nexport { Stem };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\nexport { TextFormatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\nexport { Annotation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\nexport { Articulation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\nexport { ChordSymbol };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n this.barline = new Barline(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n ctx.openGroup('barnote', this.getAttribute('id'));\n this.barline.setType(this.type);\n this.barline.setX(this.getAbsoluteX());\n this.barline.draw(this.checkStave());\n ctx.closeGroup();\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\nexport { BarNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nclass Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Bend };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { FretHandFinger };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\nexport { NoteHead };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n return this._noteHeads;\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\nexport { StaveNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { StaveTie };\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\nexport { GraceNoteGroup };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - stave.getNoteStartX();\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const tickables = note.getVoice().getTickables();\n const index = tickables.indexOf(note);\n const nextContext = index + 1 < tickables.length ? tickables[index + 1].checkTickContext() : undefined;\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - glyphX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\nexport { Ornament };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = (_b = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : Note.getPoint('gracenote');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height, devicePixelRatio) {\n var _a;\n const canvas = this.context2D.canvas;\n const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : globalObject().devicePixelRatio) !== null && _a !== void 0 ? _a : 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / dpr) | 0;\n height = (height / dpr) | 0;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(dpr, dpr);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\nexport { SVGContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\nexport { Renderer };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\nexport { TextNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { Volta };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n /**\n * The modifier context's left_shift state.\n */\n const left_shift = state.left_shift;\n /**\n * The modifier context's right_shift state.\n */\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let extraXSpaceForDisplacedNotehead = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (pos === Modifier.Position.LEFT) {\n extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: extraXSpaceForDisplacedNotehead,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n let num_x_shift = 0;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + extraXSpaceForDisplacedNotehead);\n num_x_shift = num_width; // spacing\n x_widthL = Math.max(num_x_shift, x_widthL);\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_x_shift += num_width; // spacing\n x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StringNumber };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { Stroke };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\nexport { ModifierContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\nexport { Clef };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nclass KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\nexport { KeySignature };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nclass Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n var _a;\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', {\n category: 'coda',\n });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: Tables.NOTATION_FONT_SCALE / 3,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\nexport { Repetition };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveSection };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveTempo };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { StaveText };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nclass Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n /**\n * treat the stave as if the clef is clefSpec, but don't display the clef\n */\n setClefLines(clefSpec) {\n this.clef = clefSpec;\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Stave };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\nexport { StaveConnector };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\nexport { Formatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\nexport { Crescendo };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\nexport { Parser };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\nexport { EasyScore };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\nexport { PedalMarking };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\nexport { StaveLine };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\nexport { TextBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\nexport { TextDynamics };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\nexport { VibratoBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Factory };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\nexport { StaveHairpin };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { TabSlide };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n doubleCBanjo: 'D/5,C/5,G/4,C/4,G/5',\n doubleDBanjo: 'E/5,D/5,A/4,D/4,A/5',\n sawmillBanjo: 'D/5,C/5,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static getMusicFontStack() {\n return Tables.MUSIC_FONT_STACK;\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\nexport { Flow };\n","export const VERSION = '4.2.6';\nexport const ID = '103aad2b14837418c5e96c9e078edd036fcddf60';\nexport const DATE = '2024-08-26T20:16:17.134Z';\n","export const BravuraFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 469,\n y_min: 0,\n y_max: 295,\n ha: 295,\n o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 469,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 36,\n y_min: 868,\n y_max: 1120,\n ha: 252,\n o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 500,\n y_min: 0,\n y_max: 502,\n ha: 502,\n o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z',\n },\n segno: {\n x_min: 4,\n x_max: 550,\n y_min: -27,\n y_max: 759,\n ha: 786,\n o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z',\n },\n coda: {\n x_min: -4,\n x_max: 955,\n y_min: -158,\n y_max: 898,\n ha: 1056,\n o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z',\n },\n gClef: {\n x_min: 0,\n x_max: 671,\n y_min: -658,\n y_max: 1098,\n ha: 1756,\n o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z',\n },\n cClef: {\n x_min: 0,\n x_max: 699,\n y_min: -506,\n y_max: 506,\n ha: 1012,\n o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z',\n },\n fClef: {\n x_min: -5,\n x_max: 684,\n y_min: -635,\n y_max: 262,\n ha: 897,\n o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 382,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z',\n },\n '6stringTabClef': {\n x_min: -3,\n x_max: 408,\n y_min: -748,\n y_max: 764,\n ha: 1512,\n o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 314,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 426,\n y_min: -257,\n y_max: 254,\n ha: 511,\n o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 401,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 383,\n y_min: -251,\n y_max: 246,\n ha: 497,\n o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 421,\n y_min: -250,\n y_max: 249,\n ha: 499,\n o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 416,\n y_min: -259,\n y_max: 259,\n ha: 518,\n o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z',\n },\n timeSigCommon: {\n x_min: 5,\n x_max: 424,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 418,\n y_min: -359,\n y_max: 361,\n ha: 720,\n o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z',\n },\n timeSigPlus: {\n x_min: -1,\n x_max: 499,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z',\n },\n timeSigPlusSmall: {\n x_min: -1,\n x_max: 255,\n y_min: -133,\n y_max: 123,\n ha: 256,\n o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 448,\n y_min: -35,\n y_max: 40,\n ha: 75,\n o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z',\n },\n timeSigParensLeft: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 599,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 546,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 377,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 290,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 603,\n y_min: -218,\n y_max: 213,\n ha: 431,\n o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z',\n },\n noteheadCircledWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -225,\n y_max: 211,\n ha: 436,\n o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z',\n },\n noteheadCircledHalf: {\n x_min: -18,\n x_max: 311,\n y_min: -162,\n y_max: 167,\n ha: 329,\n o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z',\n },\n noteheadCircledBlack: {\n x_min: -21,\n x_max: 321,\n y_min: -171,\n y_max: 167,\n ha: 338,\n o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 416,\n y_min: -190,\n y_max: 198,\n ha: 388,\n o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 292,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 207 -180 l 420 180 l 0 180 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 293,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 422 -180 l 207 180 l 0 -180 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 596,\n y_min: -179,\n y_max: 168,\n ha: 347,\n o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z',\n },\n noteheadSlashedWhole1: {\n x_min: -22,\n x_max: 433,\n y_min: -157,\n y_max: 148,\n ha: 305,\n o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z',\n },\n noteheadSlashedHalf1: {\n x_min: -67,\n x_max: 386,\n y_min: -142,\n y_max: 160,\n ha: 302,\n o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z',\n },\n noteheadSlashedBlack1: {\n x_min: -80,\n x_max: 375,\n y_min: -165,\n y_max: 167,\n ha: 332,\n o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 596,\n y_min: -178,\n y_max: 169,\n ha: 347,\n o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z',\n },\n noteheadSlashedWhole2: {\n x_min: -18,\n x_max: 436,\n y_min: -154,\n y_max: 151,\n ha: 305,\n o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 380,\n y_min: -134,\n y_max: 168,\n ha: 302,\n o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z',\n },\n noteheadSlashedBlack2: {\n x_min: -79,\n x_max: 376,\n y_min: -164,\n y_max: 168,\n ha: 332,\n o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 432,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 270,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 251,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z',\n },\n noteheadParenthesis: {\n x_min: -73,\n x_max: 368,\n y_min: -180,\n y_max: 182,\n ha: 362,\n o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z',\n },\n noteheadParenthesisRight: {\n x_min: -36,\n x_max: 73,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 109,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 315,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 -180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 180 l 0 -180 l 488 -180 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 278,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z',\n },\n tremolo1: {\n x_min: -150,\n x_max: 150,\n y_min: -93,\n y_max: 94,\n ha: 187,\n o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 264,\n y_min: -810,\n y_max: 9,\n ha: 819,\n o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 306,\n y_min: -14,\n y_max: 808,\n ha: 822,\n o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -813,\n y_max: 2,\n ha: 815,\n o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 291,\n y_min: -9,\n y_max: 812,\n ha: 821,\n o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 149,\n ha: 961,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 273,\n y_min: -172,\n y_max: 812,\n ha: 984,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 347,\n ha: 1159,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -376,\n y_max: 812,\n ha: 1188,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 533,\n ha: 1345,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -580,\n y_max: 812,\n ha: 1392,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 226,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 168,\n y_min: -335,\n y_max: 341,\n ha: 676,\n o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 249,\n y_min: -348,\n y_max: 350,\n ha: 698,\n o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 247,\n y_min: -125,\n y_max: 127,\n ha: 252,\n o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 411,\n y_min: -175,\n y_max: 437,\n ha: 612,\n o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 1,\n x_max: 227,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 1,\n x_max: 466,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 179,\n y_min: -353,\n y_max: 307,\n ha: 660,\n o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 3,\n x_max: 317,\n y_min: -347,\n y_max: 369,\n ha: 716,\n o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 1,\n x_max: 287,\n y_min: -174,\n y_max: 438,\n ha: 612,\n o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 341,\n y_min: -350,\n y_max: 348,\n ha: 698,\n o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z',\n },\n accidentalBakiyeFlat: {\n x_min: -1,\n x_max: 286,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 229,\n y_min: -337,\n y_max: 322,\n ha: 659,\n o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1,\n x_max: 339,\n y_min: -338,\n y_max: 321,\n ha: 659,\n o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 300,\n y_min: -472,\n y_max: 157,\n ha: 629,\n o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 421,\n y_min: -318,\n y_max: 328,\n ha: 646,\n o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 339,\n y_min: 1,\n y_max: 245,\n ha: 244,\n o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 339,\n y_min: -244,\n y_max: 0,\n ha: 244,\n o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z',\n },\n articTenutoAbove: {\n x_min: -1,\n x_max: 338,\n y_min: 0,\n y_max: 48,\n ha: 48,\n o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z',\n },\n articTenutoBelow: {\n x_min: -1,\n x_max: 338,\n y_min: -48,\n y_max: 0,\n ha: 48,\n o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 84,\n y_min: 0,\n y_max: 84,\n ha: 84,\n o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 84,\n y_min: -84,\n y_max: 0,\n ha: 84,\n o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z',\n },\n articStaccatissimoAbove: {\n x_min: 1,\n x_max: 100,\n y_min: -2,\n y_max: 293,\n ha: 295,\n o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z',\n },\n articStaccatissimoBelow: {\n x_min: 1,\n x_max: 100,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z',\n },\n articMarcatoAbove: {\n x_min: -1,\n x_max: 235,\n y_min: -1,\n y_max: 253,\n ha: 254,\n o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z',\n },\n articMarcatoBelow: {\n x_min: -1,\n x_max: 235,\n y_min: -254,\n y_max: 0,\n ha: 254,\n o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z',\n },\n fermataAbove: {\n x_min: 3,\n x_max: 605,\n y_min: -3,\n y_max: 329,\n ha: 332,\n o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z',\n },\n fermataBelow: {\n x_min: 3,\n x_max: 605,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 603,\n y_min: -1,\n y_max: 333,\n ha: 334,\n o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 603,\n y_min: -333,\n y_max: 1,\n ha: 334,\n o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: 0,\n y_max: 408,\n ha: 408,\n o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 715,\n y_min: -408,\n y_max: 0,\n ha: 408,\n o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 726,\n y_min: 0,\n y_max: 449,\n ha: 449,\n o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 726,\n y_min: -449,\n y_max: 0,\n ha: 449,\n o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 604,\n y_min: 0,\n y_max: 341,\n ha: 341,\n o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 604,\n y_min: -341,\n y_max: 0,\n ha: 341,\n o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z',\n },\n breathMarkComma: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n breathMarkUpbow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n caesura: {\n x_min: 0,\n x_max: 384,\n y_min: -1,\n y_max: 532,\n ha: 533,\n o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 373,\n y_min: 0,\n y_max: 530,\n ha: 530,\n o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 381,\n y_min: -249,\n y_max: 250,\n ha: 499,\n o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 282,\n y_min: -135,\n y_max: 9,\n ha: 144,\n o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z',\n },\n restWholeLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -135,\n y_max: 20,\n ha: 155,\n o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -2,\n y_max: 142,\n ha: 144,\n o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z',\n },\n restHalfLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -13,\n y_max: 142,\n ha: 155,\n o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z',\n },\n restQuarter: {\n x_min: 1,\n x_max: 270,\n y_min: -375,\n y_max: 373,\n ha: 748,\n o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 247,\n y_min: -251,\n y_max: 174,\n ha: 425,\n o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 320,\n y_min: -500,\n y_max: 179,\n ha: 679,\n o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 363,\n y_min: -500,\n y_max: 426,\n ha: 926,\n o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -753,\n y_max: 430,\n ha: 1183,\n o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 485,\n y_min: -750,\n y_max: 689,\n ha: 1439,\n o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z',\n },\n dynamicPiano: {\n x_min: -89,\n x_max: 366,\n y_min: -142,\n y_max: 274,\n ha: 416,\n o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z',\n },\n dynamicMezzo: {\n x_min: -20,\n x_max: 446,\n y_min: -10,\n y_max: 274,\n ha: 284,\n o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z',\n },\n dynamicForte: {\n x_min: -141,\n x_max: 364,\n y_min: -152,\n y_max: 444,\n ha: 596,\n o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z',\n },\n dynamicRinforzando: {\n x_min: -20,\n x_max: 277,\n y_min: 0,\n y_max: 274,\n ha: 274,\n o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 229,\n y_min: -10,\n y_max: 273,\n ha: 283,\n o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z',\n },\n dynamicZ: {\n x_min: -30,\n x_max: 244,\n y_min: -10,\n y_max: 268,\n ha: 278,\n o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z',\n },\n ornamentTrill: {\n x_min: 0,\n x_max: 521,\n y_min: -10,\n y_max: 390,\n ha: 400,\n o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 460,\n y_min: 0,\n y_max: 218,\n ha: 218,\n o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 460,\n y_min: -90,\n y_max: 306,\n ha: 396,\n o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z',\n },\n ornamentMordent: {\n x_min: 1,\n x_max: 729,\n y_min: -73,\n y_max: 319,\n ha: 392,\n o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 725,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z',\n },\n ornamentTremblement: {\n x_min: 1,\n x_max: 985,\n y_min: 0,\n y_max: 244,\n ha: 244,\n o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1119,\n y_min: 0,\n y_max: 481,\n ha: 481,\n o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 2,\n x_max: 1150,\n y_min: -367,\n y_max: 245,\n ha: 612,\n o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1048,\n y_min: -367,\n y_max: 331,\n ha: 698,\n o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 949,\n y_min: 0,\n y_max: 381,\n ha: 381,\n o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1278,\n y_min: 0,\n y_max: 247,\n ha: 247,\n o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1277,\n y_min: -62,\n y_max: 333,\n ha: 395,\n o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 859,\n y_min: -222,\n y_max: 246,\n ha: 468,\n o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z',\n },\n brassScoop: {\n x_min: 1,\n x_max: 320,\n y_min: -373,\n y_max: 13,\n ha: 386,\n o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 489,\n y_min: -40,\n y_max: 346,\n ha: 386,\n o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z',\n },\n brassFallLipShort: {\n x_min: 1,\n x_max: 293,\n y_min: -345,\n y_max: 42,\n ha: 387,\n o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 392,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 304,\n y_min: 0,\n y_max: 304,\n ha: 304,\n o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 379,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 620,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z',\n },\n brassSmear: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 170,\n ha: 170,\n o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 318,\n ha: 318,\n o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z',\n },\n stringsUpBow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 200,\n ha: 200,\n o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 1019,\n y_min: -8,\n y_max: 555,\n ha: 563,\n o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 450,\n y_min: 0,\n y_max: 450,\n ha: 450,\n o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -33,\n x_max: 292,\n y_min: 0,\n y_max: 119,\n ha: 119,\n o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z',\n },\n arrowheadBlackUp: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z',\n },\n arrowheadBlackDown: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z',\n },\n arpeggiatoUp: {\n x_min: 1,\n x_max: 229,\n y_min: 7,\n y_max: 1511,\n ha: 1504,\n o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z',\n },\n arpeggiatoDown: {\n x_min: 1,\n x_max: 229,\n y_min: -4,\n y_max: 1500,\n ha: 1504,\n o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 762,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1232,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z',\n },\n csymHalfDiminished: {\n x_min: -16,\n x_max: 488,\n y_min: -15,\n y_max: 489,\n ha: 504,\n o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 395,\n y_min: 1,\n y_max: 396,\n ha: 395,\n o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 558,\n y_min: 1,\n y_max: 477,\n ha: 476,\n o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 325,\n y_min: 216,\n y_max: 260,\n ha: 44,\n o: 'm 468 374 l 0 374 l 0 311 l 468 311 z',\n },\n csymParensLeftTall: {\n x_min: 1,\n x_max: 185,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z',\n },\n csymParensRightTall: {\n x_min: -20,\n x_max: 164,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 155,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 156,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z',\n },\n csymParensRightVeryTall: {\n x_min: -15,\n x_max: 107,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 999,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z',\n },\n accSagittal5v7KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z',\n },\n accSagittal5v7KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z',\n },\n accSagittal5CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z',\n },\n accSagittal5CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z',\n },\n accSagittal7CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z',\n },\n accSagittal7CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal25SmallDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z',\n },\n accSagittal25SmallDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z',\n },\n accSagittal35MediumDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z',\n },\n accSagittal35MediumDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal11MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z',\n },\n accSagittal11MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z',\n },\n accSagittal11LargeDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal11LargeDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp25SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z',\n },\n accSagittalFlat25SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z',\n },\n accSagittalSharp7CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z',\n },\n accSagittalFlat7CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp5CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z',\n },\n accSagittalSharp5v7kDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z',\n },\n accSagittalFlat5v7kUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z',\n },\n accSagittalSharp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z',\n },\n accSagittalSharp5v7kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -361,\n y_max: 172,\n ha: 533,\n o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5v7kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 361,\n ha: 533,\n o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z',\n },\n accSagittalSharp5CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z',\n },\n accSagittalFlat5CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z',\n },\n accSagittalSharp7CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z',\n },\n accSagittalFlat7CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp25SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z',\n },\n accSagittalFlat25SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z',\n },\n accSagittalSharp35MUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z',\n },\n accSagittalFlat35MDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z',\n },\n accSagittalSharp11MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z',\n },\n accSagittalFlat11MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z',\n },\n accSagittalSharp11LUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11LDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp35LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat35LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp25SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z',\n },\n accSagittalDoubleFlat25SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z',\n },\n accSagittalDoubleSharp7CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z',\n },\n accSagittalDoubleFlat7CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z',\n },\n accSagittalDoubleSharp5CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z',\n },\n accSagittalDoubleFlat5CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z',\n },\n accSagittalDoubleSharp5v7kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z',\n },\n accSagittalDoubleFlat5v7kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z',\n },\n accSagittalDoubleSharp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z',\n },\n accSagittalDoubleFlat: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z',\n },\n accSagittal7v11KleismaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z',\n },\n accSagittal7v11KleismaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal55CommaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z',\n },\n accSagittal55CommaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal7v11CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal7v11CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal5v11SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z',\n },\n accSagittal5v11SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat5v11SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z',\n },\n accSagittalFlat7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z',\n },\n accSagittalSharp55CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z',\n },\n accSagittalFlat55CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z',\n },\n accSagittalSharp17CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z',\n },\n accSagittalFlat17CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z',\n },\n accSagittalSharp7v11kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z',\n },\n accSagittalFlat7v11kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z',\n },\n accSagittalSharp7v11kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z',\n },\n accSagittalFlat7v11kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z',\n },\n accSagittalSharp17CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp55CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat55CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z',\n },\n accSagittalSharp7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z',\n },\n accSagittalFlat7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z',\n },\n accSagittalFlat5v11SDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp5v11SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat5v11SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp7v11CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z',\n },\n accSagittalDoubleFlat7v11CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z',\n },\n accSagittalDoubleSharp55CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z',\n },\n accSagittalDoubleFlat55CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z',\n },\n accSagittalDoubleSharp17CDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z',\n },\n accSagittalDoubleFlat17CUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z',\n },\n accSagittalDoubleSharp7v11kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat7v11kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittal23CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z',\n },\n accSagittal23CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z',\n },\n accSagittal5v19CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z',\n },\n accSagittal5v19CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal5v23SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z',\n },\n accSagittal5v23SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittalSharp5v23SDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z',\n },\n accSagittalFlat5v23SUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z',\n },\n accSagittalFlat5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z',\n },\n accSagittalFlat23CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z',\n },\n accSagittalSharp23CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z',\n },\n accSagittalFlat23CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalFlat5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z',\n },\n accSagittalSharp5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z',\n },\n accSagittalDoubleSharp5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z',\n },\n accSagittalDoubleFlat5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z',\n },\n accSagittalDoubleSharp5v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z',\n },\n accSagittalDoubleFlat5v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z',\n },\n accSagittalDoubleSharp23CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalDoubleFlat23CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z',\n },\n accSagittal19SchismaUp: {\n x_min: 0,\n x_max: 125,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z',\n },\n accSagittal19SchismaDown: {\n x_min: 0,\n x_max: 125,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal143CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z',\n },\n accSagittal143CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal11v49CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z',\n },\n accSagittal11v49CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z',\n },\n accSagittal19CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal19CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal7v19CommaUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal7v19CommaDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal49SmallDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal49SmallDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal23SmallDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal23SmallDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal5v13MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z',\n },\n accSagittal5v13MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z',\n },\n accSagittal11v19MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z',\n },\n accSagittal11v19MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z',\n },\n accSagittal49MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z',\n },\n accSagittal49MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z',\n },\n accSagittal5v49MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z',\n },\n accSagittal5v49MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z',\n },\n accSagittal49LargeDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z',\n },\n accSagittal49LargeDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z',\n },\n accSagittal11v19LargeDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z',\n },\n accSagittal11v19LargeDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z',\n },\n accSagittal5v13LargeDiesisUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z',\n },\n accSagittal5v13LargeDiesisDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z',\n },\n accSagittalFlat23SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp49SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z',\n },\n accSagittalFlat49SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalSharp7v19CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z',\n },\n accSagittalFlat7v19CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z',\n },\n accSagittalSharp19CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z',\n },\n accSagittalFlat19CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z',\n },\n accSagittalSharp11v49CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat11v49CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z',\n },\n accSagittalSharp143CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat143CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z',\n },\n accSagittalFlat17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z',\n },\n accSagittalSharp19sDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z',\n },\n accSagittalFlat19sUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z',\n },\n accSagittalSharp19sUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z',\n },\n accSagittalFlat19sDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z',\n },\n accSagittalSharp17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp143CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalFlat143CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp11v49CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z',\n },\n accSagittalFlat11v49CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z',\n },\n accSagittalSharp19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp49SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat49SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp23SUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat23SDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp5v13MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z',\n },\n accSagittalFlat5v13MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z',\n },\n accSagittalSharp11v19MUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11v19MDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp49MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z',\n },\n accSagittalFlat49MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z',\n },\n accSagittalSharp5v49MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z',\n },\n accSagittalFlat5v49MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z',\n },\n accSagittalSharp49LUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z',\n },\n accSagittalFlat49LDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z',\n },\n accSagittalSharp11v19LUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z',\n },\n accSagittalFlat11v19LDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v13LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat5v13LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalDoubleSharp23SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalDoubleFlat23SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z',\n },\n accSagittalDoubleSharp49SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z',\n },\n accSagittalDoubleFlat49SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalDoubleSharp7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalDoubleFlat7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z',\n },\n accSagittalDoubleSharp19CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z',\n },\n accSagittalDoubleFlat19CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z',\n },\n accSagittalDoubleSharp11v49CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat11v49CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp143CDown: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat143CUp: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp17kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat17kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittalDoubleSharp19sDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalDoubleFlat19sUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalShaftUp: {\n x_min: 0,\n x_max: 31,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z',\n },\n accSagittalShaftDown: {\n x_min: 0,\n x_max: 31,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z',\n },\n accSagittalAcute: {\n x_min: 0,\n x_max: 125,\n y_min: -62,\n y_max: 125,\n ha: 187,\n o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z',\n },\n accSagittalGrave: {\n x_min: 0,\n x_max: 125,\n y_min: -125,\n y_max: 62,\n ha: 187,\n o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z',\n },\n accSagittal1MinaUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal1MinaDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal2MinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal2MinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal1TinaUp: {\n x_min: 0,\n x_max: 93,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z',\n },\n accSagittal1TinaDown: {\n x_min: 0,\n x_max: 93,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z',\n },\n accSagittal2TinasUp: {\n x_min: 0,\n x_max: 94,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal2TinasDown: {\n x_min: 0,\n x_max: 94,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z',\n },\n accSagittal3TinasUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal3TinasDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal4TinasUp: {\n x_min: 0,\n x_max: 187,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal4TinasDown: {\n x_min: 0,\n x_max: 187,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal5TinasUp: {\n x_min: 0,\n x_max: 218,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal5TinasDown: {\n x_min: 0,\n x_max: 218,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal6TinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal6TinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal7TinasUp: {\n x_min: 0,\n x_max: 281,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal7TinasDown: {\n x_min: 0,\n x_max: 281,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal8TinasUp: {\n x_min: 0,\n x_max: 312,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal8TinasDown: {\n x_min: 0,\n x_max: 312,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal9TinasUp: {\n x_min: -7,\n x_max: 312,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal9TinasDown: {\n x_min: -7,\n x_max: 312,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittalFractionalTinaUp: {\n x_min: -3,\n x_max: 35,\n y_min: 73,\n y_max: 111,\n ha: 38,\n o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z',\n },\n accSagittalFractionalTinaDown: {\n x_min: -3,\n x_max: 35,\n y_min: -111,\n y_max: -73,\n ha: 38,\n o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 164,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 414,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 281,\n y_min: -203,\n y_max: 203,\n ha: 406,\n o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 281,\n y_min: -186,\n y_max: 186,\n ha: 372,\n o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z',\n },\n },\n fontFamily: 'Bravura',\n resolution: 1000,\n generatedOn: '2022-12-18T09:06:51.407Z',\n};\n","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\nexport { Vex };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base.\n// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts\n// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js).\n// ADD_MUSIC_FONT\n// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts.\n// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts.\n// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js\n// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary.\nimport { Font } from '../font';\nimport { BravuraFont } from './bravura_glyphs';\nimport { CommonMetrics } from './common_metrics';\nexport function loadBravura() {\n Font.load('Bravura', BravuraFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { CustomFont } from './custom_glyphs';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-bravura.ts is the entry point for vexflow-bravura.js.\n// This version bundles the Bravura music engraving font.\nimport { Flow } from '../src/flow';\nimport { loadBravura } from '../src/fonts/load_bravura';\nimport { loadCustom } from '../src/fonts/load_custom';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadBravura();\nloadCustom();\nFlow.setMusicFont('Bravura', 'Custom');\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n// ADD_MUSIC_FONT\n// To make a vexflow-xxx.js build that ONLY loads your new music font, copy this file and name it vexflow-xxx.ts.\n// Replace these lines:\n// import { loadXXX } from '../src/fonts/load_xxx';\n// loadXXX();\n// Flow.setMusicFont('XXX', 'Custom');\n// Feel free to remove references to Custom if you are not using those glyphs.\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","Function","e","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","isCategory","category","checkAncestors","constructorFcn","constructor","CATEGORY","getPrototypeOf","isAccidental","Category","Accidental","isAnnotation","Annotation","isBarline","Barline","isDot","Dot","isGraceNote","GraceNote","isGraceNoteGroup","GraceNoteGroup","isNote","Note","isRenderContext","RenderContext","isStaveNote","StaveNote","isStemmableNote","StemmableNote","isTabNote","TabNote","RuntimeError","Error","code","message","super","globalObject","self","defined","x","undefined","log","block","args","line","Array","slice","join","console","warn","err","stack","midLine","a","b","mid_line","n","parseInt","prefix","text","normalizeAngle","Math","PI","sumArray","arr","reduce","Fraction","GCD","Number","isNaN","t","LCM","LCMM","length","shift","numerator","denominator","set","simplify","u","d","gcd","add","param1","param2","otherNumerator","otherDenominator","getNumeratorAndDenominator","lcm","subtract","multiply","divide","equals","compare","__staticFractionA","copy","__staticFractionB","greaterThan","greaterThanEquals","lessThan","lessThanEquals","clone","other","quotient","floor","remainder","makeAbs","abs","toString","toSimplifiedString","__staticFractionTmp","toMixedString","s","q","f","parse","str","i","split","BoundingBox","that","y","w","h","getX","getY","getW","getH","setX","setY","setW","setH","move","mergeWith","boundingBox","new_x","new_y","new_w","max","new_h","BoundingBoxComputation","x1","NaN","y1","x2","y2","getX1","getY1","width","height","addPoint","addX","addY","addQuadraticCurve","p0x","p0y","p1x","p1y","p2x","p2y","p01x","denom","it","p01y","addBezierCurve","p3x","p3y","p0","p1","p2","p3","pow","c","b2ac","t1","sqrt","t2","FontWeight","FontStyle","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","fontParser","Fonts","Font","convertSizeToPixelValue","fontSize","SIZE","_a","scaleToPxFrom","pt","parseFloat","unit","replace","toLowerCase","convertSizeToPointValue","validate","size","weight","style","fromCSSString","family","SANS_SERIF","NORMAL","cssFontShorthand","document","createElement","font","fontFamily","fontWeight","fontStyle","toCSSString","fontInfo","st","trim","wt","sz","scaleSize","scaleFactor","isBold","parsedWeight","isItalic","ITALIC","loadWebFont","fontName","woffURL","includeWoff2","fontFace","FontFace","load","fonts","loadWebFonts","host","WEB_FONT_HOST","files","WEB_FONT_FILES","fontPath","data","metrics","setData","setMetrics","name","getName","getData","getMetrics","hasData","getResolution","resolution","getGlyphs","glyphs","lookupMetric","defaultValue","keyParts","currObj","SERIF","px","em","in","mm","cm","PetalumaScript","Index","id","type","class","Registry","getDefaultRegistry","defaultRegistry","enableDefaultRegistry","registry","disableDefaultRegistry","index","clear","setIndexValue","elem","updateIndex","oldValue","getElementById","getAttribute","register","setAttribute","onRegister","_b","getElementsByAttribute","attribute","index_attr","index_attr_val","keys","map","k","getElementsByType","getElementsByClass","className","onUpdate","info","includes","Element","newID","ID","children","attrs","getCategory","rendered","addChildElement","child","push","setStyle","setGroupStyle","forEach","getStyle","applyStyle","context","save","shadowColor","setShadowColor","shadowBlur","setShadowBlur","fillStyle","setFillStyle","strokeStyle","setStrokeStyle","lineWidth","setLineWidth","restoreStyle","restore","drawWithStyle","checkContext","draw","hasClass","indexOf","addClass","removeClass","splice","isRendered","setRendered","getAttributes","getSVGElement","suffix","element","oldID","getBoundingBox","getContext","setContext","setFont","textFont","defaultTextFont","TEXT_FONT","fontIsObject","fontIsString","fontIsUndefined","sizeWeightStyleAreUndefined","assign","getFont","resetFont","setFontSize","getFontSize","fontSizeInPoints","fontSizeInPixels","RESOLUTION","durations","durationAliases","keySignatures","C","num","Am","F","acc","Dm","Bb","Gm","Eb","Cm","Ab","Fm","Db","Bbm","Gb","Ebm","Cb","Abm","G","Em","D","Bm","A","E","B","clefs","treble","line_shift","bass","tenor","alto","soprano","percussion","subbass","french","notesInfo","int_val","CN","accidental","CB","CBB","DN","DB","DBB","EN","EB","EBB","FN","FB","FBB","GN","GB","GBB","AN","AB","ABB","BN","BB","BBB","R","rest","X","octave","shift_right","accidentals","parenRightPaddingAdjustment","bb","db","bs","bss","bbs","ashs","afhf","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","articulations","between_lines","av","aboveCode","belowCode","ao","ah","am","ornaments","mordent","mordent_inverted","turn","turn_inverted","tr","upprall","downprall","prallup","pralldown","upmordent","downmordent","lineprall","prallprall","scoop","doit","fall","doitLong","fallLong","bend","plungerClosed","plungerOpen","flip","jazzTurn","smear","Tables","currentMusicFont","MUSIC_FONT_STACK","clefProperties","clef","keyProperties","keyOctaveGlyph","params","options","octave_shift","duration","sanitizeDuration","pieces","toUpperCase","stroke","int_value","customNoteHeadProps","glyphName","codeNoteHead","displaced","integerToNote","integer","noteValue","tabToGlyphProps","fret","scale","glyph","shift_y","glyphMetrics","Glyph","TABLATURE_FONT_SCALE","textWidth","getWidth","articulationCodes","artic","accidentalCodes","ornamentCodes","keySignature","spec","keySpec","notes","acc_list","getKeySignatures","hasKeySignature","durationNumber","durationToFraction","durationToNumber","durationToTicks","ticks","getGlyphProps","durationCodes","glyphTypeProperties","code_head","common","NOTATION_FONT_SCALE","UNISON","SOFTMAX_FACTOR","STEM_WIDTH","STEM_HEIGHT","STAVE_LINE_THICKNESS","RENDER_PRECISION_PLACES","SLASH_NOTEHEAD_WIDTH","STAVE_LINE_DISTANCE","TEXT_HEIGHT_OFFSET_HACK","accidentalMap","accidentalColumnsTable","second_on_bottom","spaced_out_tetrachord","spaced_out_pentachord","very_spaced_out_pentachord","spaced_out_hexachord","very_spaced_out_hexachord","unicode","sharp","String","fromCharCode","flat","natural","triangle","degrees","circle","validTypes","m","ci","cx","sf","sb","sq","tu","td","TIME4_4","num_beats","beat_value","stem","flag","stem_up_extension","stem_down_extension","tabnote_stem_up_extension","tabnote_stem_down_extension","dot_shiftY","line_above","line_below","position","ledger_code_head","beam_count","stem_beam_extension","code_flag_upstem","code_flag_downstem","OutlineCode","ModifierPosition","GlyphCacheEntry","fontStack","point","loadMetrics","bbox","getOutlineBoundingBox","outline","x_shift","y_shift","lookupFontMetric","GlyphOutline","originX","originY","precision","round","nextX","nextY","parts","MOVE","LINE","QUADRATIC","BEZIER","lookupGlyph","x_min","x_max","ha","cached_outline","renderGlyph","ctx","x_pos","y_pos","cache","lookup","customScale","renderOutline","go","beginPath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","fill","bboxComp","penX","penY","topGlyphs","botGlyphs","originShift","setOptions","reset","getCode","setPoint","setStave","stave","getXShift","setXShift","getYshift","setYShift","checkMetrics","metricsScale","setOriginX","xShift","setOriginY","yShift","setOrigin","render","xPos","yPos","checkStave","renderToStave","getYForGlyphs","Map","entries","CURRENT_CACHE_KEY","entry","Modifier","Position","PositionString","center","CENTER","above","ABOVE","below","BELOW","left","LEFT","right","RIGHT","text_line","spacingFromNextModifier","setWidth","getNote","note","checkAttachedNote","setNote","getIndex","checkIndex","setIndex","getModifierContext","modifierContext","checkModifierContext","setModifierContext","getPosition","setPosition","setTextLine","setSpacingFromNextModifier","getSpacingFromNextModifier","alignSubNotesWithNote","subNotes","tickContext","getTickContext","getStave","subNoteXOffset","modLeftPx","modRightPx","subNote","subTickContext","setXOffset","Music","NUM_TONES","canonical_notes","roots","root_values","root_indices","diatonic_intervals","diatonic_accidentals","unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","intervals","b2","min2","S","H","maj2","T","W","b3","min3","maj3","b5","aug4","b6","aug5","maj6","m7","min7","dom7","maj7","scales","major","minor","ionian","dorian","phyrgian","lydian","mixolydian","aeolian","locrian","scaleTypes","M","noteValues","root_index","cn","cb","cbb","dn","dbb","en","eb","ebb","fn","fb","fbb","gn","gb","gbb","an","ab","abb","bn","bbb","isValidNoteValue","isValidIntervalValue","interval","getNoteParts","noteString","match","exec","getKeyParts","keyString","getNoteValue","getIntervalValue","intervalString","getCanonicalNoteName","getCanonicalIntervalName","intervalValue","getRelativeNoteValue","direction","sum","getRelativeNoteName","rootValue","multiplier","reverse_interval","relativeNoteName","getScaleTones","tones","nextNote","getIntervalBetween","note1","note2","difference","createScaleMap","keySigParts","scaleName","keySigString","noteLocation","scaleMap","rootName","noteName","L","DEBUG","format","state","musicFont","noteheadAccidentalPadding","leftShift","left_shift","accidentalSpacing","additionalPadding","accidentalLinePositionsAndSpaceNeeds","prevNote","extraXSpaceNeededForLeftDisplacedNotehead","props","getKeyProps","getLeftDisplacedHeadPx","lineSpace","getSpacingBetweenLines","getYForLine","accLine","extraXSpaceNeeded","spacingBetweenStaveLines","sort","staveLineAccidentalLayoutMetrics","maxExtraXSpaceNeeded","accidentalLinePositionAndSpaceNeeds","priorLineMetric","currentLineMetric","flatLine","dblSharpLine","numAcc","column","totalColumns","noFurtherConflicts","groupStart","groupEnd","checkCollision","getGroupLine","getGroupLines","indexes","lineDifference","indexA","indexB","item","notColliding","indexPairs","every","line1","line2","groupLength","groupMember","endCase","patternLength","collisionDetected","columnWidths","columnXOffsets","totalShift","accCount","lastAccOnLine","clearance","clearanceRequired","collision","applyAccidentals","voices","tickPositions","tickNoteMap","voice","tickPosition","getTickables","shouldIgnoreTicks","notesAtPosition","getTicks","music","scaleMapKey","tickPos","tickables","modifiedPitches","processNote","isRest","staveNote","keyIndex","accidentalString","pitch","sameAccidental","previouslyModified","getModifiers","modifier","addModifier","getGraceNotes","render_options","font_scale","parenLeftPadding","parenRightPadding","cautionary","fontScale","parenLeft","parenRight","parenWidth","setAsCautionary","start","getModifierStartXY","accX","accY","Stem","UP","DOWN","WIDTH","HEIGHT","stem_up_y_offset","stem_down_y_offset","stem_up_y_base_offset","stem_down_y_base_offset","x_begin","x_end","y_top","y_bottom","stem_extension","stem_direction","hide","isStemlet","stemletHeight","renderHeightAdjustment","setNoteHeadXBounds","setDirection","setExtension","ext","getExtension","setYBounds","getHeight","y_offset","getExtents","isStemUp","ys","stemHeight","innerMostNoteheadY","min","outerMostNoteheadY","topY","baseY","setVisibility","isVisible","setStemlet","adjustHeightForFlag","adjustHeightForBeam","stem_x","stem_y","y_base_offset","stemletYOffset","openGroup","pointerBBox","closeGroup","TextFormatter","textWidthCache","textHeightCache","getFontFamilies","registeredFonts","formatterInfo","create","requestedFont","candidates","requestedFamilies","requestedFamily","startsWith","formatter","values","bold","italic","perfectMatch","find","partialMatch","fontSizeInPt","getInfo","registerInfo","overwrite","serifs","monospaced","superscriptOffset","subscriptOffset","maxSizeGlyph","cacheKey","updateParams","localHeightCache","updateCacheKey","BOLD","getGlyphMetrics","character","maxHeight","getWidthForCharacterInEm","advanceWidth","getYForCharacterInPx","rv","yMin","yMax","y_min","y_max","getYForStringInPx","extent","curY","getWidthForTextInEm","cachedWidths","getWidthForTextInPx","AnnotationHorizontalJustify","AnnotationVerticalJustify","minAnnotationPadding","annotations","leftWidth","rightWidth","maxLeftGlyphWidth","maxRightGlyphWidth","annotation","textFormatter","verticalSpaceNeeded","glyphWidth","horizontalJustification","stemDirection","hasStem","getStemDirection","lines","draw_stem","getStem","getNoteType","getNumLines","verticalJustification","VerticalJustify","TOP","noteLine","getLineNumber","leastString","top_text_line","BOTTOM","greatestString","curBottom","rightOverlap","right_shift","leftOverlap","setVerticalJustification","just","VerticalJustifyString","getJustification","setJustification","HorizontalJustifyString","text_width","text_height","getStemX","stem_ext","spacing","has_stem","checkStem","getYs","yt","getYForTopText","getYForBottomText","getTopLineTopY","extents","getStemExtents","fillText","HorizontalJustify","centerStem","CENTER_STEM","top","bottom","roundToNearestHalf","mathFn","isWithinLines","getRoundingFunction","ceil","isStaveOrGraceNote","Articulation","maxGlyphWidth","getIncrement","articulation","increment","curTop","maxWidth","articWidth","overlap","easyScoreHook","builder","articNameToCode","staccato","tenuto","accent","articString","getFactory","endsWith","setBetweenLines","betweenLines","textLine","canSitBetweenLines","staffSpace","isTab","shouldSitOutsideStaff","initialOffset","isOnStemTip","getInitialOffset","padding","stemTipY","stemBaseY","getTopY","INITIAL_OFFSET","getBottomY","offsetDirection","articLine","snappedLine","snapLineToStaff","setRawFont","drawDot","color","arc","closePath","Tickable","_preFormatted","_postFormatted","intrinsicTicks","tickMultiplier","modifiers","tupletStack","align_center","center_x_shift","ignore_ticks","formatterMetrics","freedom","iterations","space","used","mean","deviation","setIgnoreTicks","checkTickContext","getFormatterMetrics","getCenterXShift","isCenterAligned","setCenterXShift","centerXShift","setCenterAlignment","getVoice","setVoice","getTuplet","tuplet","getTupletStack","resetTuplet","noteCount","notesOccupied","getNoteCount","getNotesOccupied","applyTickMultiplier","pop","setTuplet","addToModifierContext","mc","addMember","setTickContext","tc","preFormat","preFormatted","postFormat","postFormatted","getIntrinsicTicks","setIntrinsicTicks","getTickMultiplier","setDuration","getAbsoluteX","plotMetrics","xStart","leftDisplacedHeadPx","xPre1","xAbs","xPost1","notePx","xPost2","rightDisplacedHeadPx","xEnd","xFreedomRight","xWidth","yy","spaceDeviation","parseDuration","durationString","dots","parseNoteStruct","noteStruct","durationProps","customTypes","currentTicks","parsedNoteStruct","JSON","stringify","keyProps","noteType","duration_override","glyphProps","customGlyphs","playNote","annotation_spacing","glyph_font_scale","stroke_px","getPlayNote","setPlayNote","addStroke","setYs","getRightDisplacedHeadPx","setLeftDisplacedHeadPx","setRightDisplacedHeadPx","isTopNote","getLineForRest","getGlyph","getGlyphWidth","getDuration","isDotted","getModifiersByType","getBeam","beam","checkBeam","hasBeam","setBeam","signature","filter","getRightParenthesisPx","getLeftParenthesisPx","getFirstDotPx","getMembers","getState","glyphPx","getNoteStartX","getPoint","getTieRightX","tieStartX","getTieLeftX","tieEndX","getKeys","StaveModifierPosition","BarlineType","ChordSymbolHorizontalJustify","ChordSymbolVerticalJustify","SymbolTypes","SymbolModifiers","StaveModifier","placeGlyphOnLine","customShift","getPadding","setPadding","setLayoutMetrics","layoutMetrics","getLayoutMetrics","typeString","single","SINGLE","double","DOUBLE","end","END","repeatBegin","REPEAT_BEGIN","repeatEnd","REPEAT_END","repeatBoth","REPEAT_BOTH","none","NONE","thickness","TYPE","widths","paddings","layoutMetricsMap","xMin","xMax","paddingLeft","paddingRight","BEGIN","setType","getType","drawVerticalBar","drawVerticalEndBar","drawRepeatBar","double_bar","staveCtx","botY","getBottomLineBottomY","fillRect","begin","dot_x","dot_radius","dot_y","BarNote","barline","Bend","bends","last_width","stringPos","release","phrase","tap","line_width","line_style","bend_width","release_width","updateWidth","setTap","getText","getTextHeight","totalWidth","additional_width","draw_width","lowestY","bend_height","annotation_y","renderBend","cp_x","cp_y","renderRelease","renderArrowHead","yBase","renderText","render_x","measureText","last_bend","last_bend_draw_width","last_drawn_width","ChordSymbol","superSubRatio","global","NO_TEXT_FORMAT","val","noFormat","getMetricForGlyph","glyphCode","engravingFontResolution","spacingBetweenBlocks","getWidthForGlyph","metric","getYShiftForGlyph","yOffset","getXShiftForGlyph","leftSideBearing","kerningOffset","chordSymbol","lowerKerningText","upperKerningText","isSuperscript","symbolModifier","SUPERSCRIPT","isSubscript","SUBSCRIPT","minPadding","symbols","nonSuperWidth","symbol","fontAdj","glyphAdj","symbolWidth","lineSpaces","vAlign","j","symbolBlocks","sup","sub","superSubScale","adj","symbolType","GLYPH","superSubFontSize","TEXT","getYOffsetForText","over","prev","setEnableKerning","updateKerningAdjustments","updateOverBarAdjustments","getVertical","getReportWidth","getHorizontal","horizontal","vertical","useKerning","reportWidth","setReportWidth","barIndex","findIndex","xoff","yoff","symIndex","accum","getKerningAdjustment","currSymbol","prevSymbol","adjustment","preKernUpper","preKernLower","some","xx","kerningOffsetPixels","getSymbolBlock","_c","symbolBlock","glyphArgs","glyphPoints","addSymbolBlock","parameters","addText","addTextSuperscript","addTextSubscript","addGlyphSuperscript","addGlyph","addGlyphOrText","char","addLine","setVertical","vj","setHorizontal","hj","stem_base","isSuper","isSub","smallerFontSize","diminished","dim","halfDiminished","augmented","majorSeventh","leftParen","rightParen","leftBracket","rightBracket","leftParenTall","rightParenTall","symbolTypes","symbolModifiers","getDots","buildAndAttach","all","dot","setDotShiftY","dot_list","max_shift_map","note_id","dot_shift","x_width","last_line","last_note","prev_dotted_space","half_shiftY","radius","forceFlagRight","FretHandFinger","nums","nums_list","prev_note","shiftLeft","shiftRight","pos","textHeight","shiftL","shiftR","numShiftL","numShiftR","xWidthL","xWidthR","lastLine","lastNote","num_shift","numWidth","fingerings","fingeringString","number","Fingering","fingering","finger","x_offset","setFretHandFinger","getFretHandFinger","setOffsetX","setOffsetY","NoteHead","custom_glyph","stem_up_x_offset","stem_down_x_offset","note_type","glyph_code","custom_glyph_code","slashed","isDisplaced","getLine","setLine","displacementStemAdjustment","fontShift","displacedFontShift","half_spacing","min_y","getYForNote","head_x","categorySuffix","staveSpace","breve_lines","drawSlashNoteHead","setStem","buildStem","buildFlag","hasFlag","flagCode","getBaseCustomNoteHeadGlyphProps","getStemLength","getStemExtension","getBeamCount","getStemMinimumLength","setStemDirection","offsets","offsetYBaseStemUp","offsetYTopStemUp","offsetYBaseStemDown","offsetYTopStemDown","getCenterGlyphX","stem_extension_override","setStemLength","drawStem","stemOptions","shiftRestVertical","dir","delta","maxLine","minLine","setKeyLine","getKeyLine","STEM_UP","STEM_DOWN","LEDGER_LINE_OFFSET","minNoteheadPadding","notesList","sortedKeyProps","minL","stemMax","stemMin","maxL","isrest","voice_shift","getVoiceShiftWidth","is_displaced","noteU","noteM","noteL","voiceXShift","lineSpacing","lineDiff","noteUHead","noteLHead","centerRest","ledgerLineStyle","use_default_head_x","_noteHeads","calculateKeyProps","auto_stem","autoStem","noteHeadStyles","noteHead","buildNoteHeads","noteHeadStyle","calcNoteDisplacements","noteProps","notehead","calculateOptimalStemDirection","minY","maxY","halfLineSpacing","frac","resultLine","thisLine","isChord","getNoteHeadBounds","setNoteDisplaced","getRightShift","restLine","isInnerNoteIndex","setStemStyle","getStemStyle","setLedgerLineStyle","getLedgerLineStyle","setFlagStyle","getFlagStyle","setKeyStyle","noteHeadPadding","shouldDrawFlag","nonDisplacedX","displacedX","highestDisplacedLine","lowestDisplacedLine","yTop","Infinity","yBottom","highestLine","lowestLine","highestNonDisplacedLine","lowestNonDisplacedLine","displaced_x","non_displaced_x","highest_line","lowest_line","highest_displaced_line","lowest_displaced_line","highest_non_displaced_line","lowest_non_displaced_line","getNoteHeadBeginX","getNoteHeadEndX","noteHeads","note_heads","drawLedgerLines","doubleWidth","min_x","drawLedgerLine","normal","ledgerWidth","getDefaultLedgerLineStyle","drawModifiers","noteheadParam","noteheadStyle","hasNoBeam","drawFlag","_d","_e","noteStemHeight","flagX","flagY","getStaveNoteScale","drawNoteHeads","super_stem_extension","mid_line_distance","lines_over_octave_from_mid_line","spacing_between_lines","xBegin","shouldRenderStem","stemX","StaveTie","setNotes","cp1","cp2","text_shift_x","first_x_shift","last_x_shift","tie_spacing","first_note","first_indices","last_indices","isPartial","renderTie","first_ys","last_ys","last_x_px","first_x_px","first_y_px","last_y_px","top_cp_y","bottom_cp_y","center_x","getNotes","getTieStartX","getTieEndX","TabTie","createHammeron","createPulloff","VoiceMode","Voice","Mode","time","voiceTime","resolutionMultiplier","mode","STRICT","ticksUsed","largestTickWidth","softmaxFactor","totalTicks","smallestTickCount","getTotalTicks","getTicksUsed","getLargestTickWidth","getSmallestTickCount","getMode","setMode","getResolutionMultiplier","getActualResolution","tickable","setStrict","strict","SOFT","isComplete","FULL","setSoftmaxFactor","factor","expTicksUsed","reCalculateExpTicksUsed","softmax","tickValue","v","exp","addTickable","addTickables","gracenote_groups","group_list","gracenote_group","is_stavenote","formatWidth","group_shift","grace_notes","show_slur","slur","slur_y_shift","beams","Formatter","joinVoices","getMinTotalWidth","beamNotes","Beam","beam_width","partial_beam_length","graceNote","TieClass","NoteSubGroup","groups","group","Ornament","ornament","ornamentRelease","ornamentAttack","reportedWidth","ornamentArticulation","ornamentNoteTransition","ornamentAlignWithNoteHead","ornamentMetrics","delayed","accidentalLowerPadding","accidentalUpperPadding","adjustForStemDirection","stemUpYOffset","xOffset","setDelayed","setUpperAccidental","accid","accidentalUpper","setLowerAccidental","accidentalLower","stemDir","stemExtents","isPlacedOnNoteheadSide","glyphYBetweenLines","glyphX","glyphY","delayXShift","startX","nextContext","Parenthesis","parentheses","x_widthL","x_widthR","parenthesis","isHTMLCanvas","HTMLCanvasElement","toDataURL","isHTMLDiv","HTMLDivElement","appendChild","CanvasContext","CANVAS_BROWSER_SIZE_LIMIT","sanitizeCanvasDims","limit","context2D","canvas","clearRect","cls","setBackgroundFillStyle","blur","getTransform","setLineCap","capType","lineCap","setLineDash","dash","resize","devicePixelRatio","dpr","rect","cp1x","cp1y","cp2x","cp2y","cpx","cpy","startAngle","endAngle","counterclockwise","fontBoundingBoxAscent","fontBoundingBoxDescent","actualBoundingBoxAscent","actualBoundingBoxDescent","ATTRIBUTES_TO_IGNORE","path","SVG_NS","TWO_PI","SVGContext","backgroundFillStyle","fontCSSString","svg","parent","pen","defaultFontAttributes","scaleX","scaleY","attributes","groupAttributes","applyAttributes","shadow_attributes","state_stack","svgElementType","createElementNS","lineDash","visibleWidth","visibleHeight","setViewBox","viewBox_or_minX","viewBoxString","attrNamesToIgnore","nodeName","attrName","setAttributeNS","lastChild","removeChild","rectangle","x0","cos","y0","sin","tmpStartTest","tmpEndTest","large","sweep","getShadowStyle","sa","measureTextCache","txt","textContent","savedState","fontAttributes","RendererBackends","RendererLineEndType","TextJustification","VoltaType","measureImpl","getBBox","Renderer","buildContext","elementId","backend","background","renderer","lastContext","getCanvasContext","Backends","CANVAS","getSVGContext","SVG","drawDashedLine","fromX","fromY","toX","toY","dashPattern","dx","dy","angle","atan2","idx","dashLength","nx","ny","arg0","arg1","maybeElement","willReadFrequently","LineEndType","StringNumber","stringNumber","verticalPadding","stemPadding","leftPadding","rightPadding","extraXSpaceForDisplacedNotehead","glyphLine","num_shiftR","num_width","num_x_shift","string_number","stem_offset","dashed","leg","drawCircle","setLineEndType","setStringNumber","setLastNote","setDashed","setDrawCircle","len","pattern","Stroke","strokes","strokeList","string","getPositions","strokeShift","all_voices","addEndNote","note_end","line_space","arrow","arrow_shift_x","arrow_y","text_y","Type","BRUSH_DOWN","BRUSH_UP","ROLL_DOWN","RASQUEDO_DOWN","ROLL_UP","RASQUEDO_UP","ARPEGGIO_DIRECTIONLESS","strokeLine","Vibrato","vibratos","vibrato","harsh","vibrato_width","wave_height","wave_width","wave_girth","setVibratoWidth","setHarsh","vx","vy","renderVibrato","opts","num_waves","ModifierContext","members","formatted","member","getLeftShift","Clef","types","tab","annotationSmufl","attachment","KeySignature","cancelKeySpec","alterKeySpec","accList","setKeySig","glyphFontScale","xPositions","paddingForced","convertToGlyph","nextAcc","accGlyphData","extraWidth","xPosition","cancelKey","convertToCancelAccList","cancel_accList","different_types","naturals","cancelled","concat","addToStave","convertAccLines","customLines","offset","alterKey","convertToAlterAccList","firstAccidentalType","cancelAccList","getEndClef","getClef","Repetition","symbol_type","setShiftX","setShiftY","CODA_RIGHT","drawCodaFixed","CODA_LEFT","drawSymbolText","SEGNO_LEFT","drawSignoFixed","SEGNO_RIGHT","DC","DC_AL_CODA","DC_AL_FINE","DS","DS_AL_CODA","DS_AL_FINE","FINE","TO_CODA","draw_coda","text_x","symbol_x","modifierWidth","getVerticalBarWidth","StaveSection","section","drawRect","shift_x","setStaveSection","textY","headroom","StaveTempo","tempo","setTempo","bpm","noteTextFont","noteTextFormatter","stem_height","flagMetrics","TextNote","GLYPHS","segno","mordent_upper","mordent_lower","p","z","coda","pedal_open","pedal_close","caesura_straight","caesura_curved","breath","tick","superscript","subscript","smooth","justification","struct","Justification","StaveText","setStaveText","setText","getBottomLineY","Volta","volta","top_y","vert_height","BEGIN_END","TimeSignatureGlyph","timeSignature","topDigits","botDigits","topWidth","timeSigType","topGlyph","botWidth","botGlyph","lineShift","topStartX","botStartX","start_x","topLine","bottomLine","TimeSignature","timeSpec","customPadding","validate_args","is_numeric","fontLineShift","setTimeSig","parseTimeSpec","numbers","test","assertIsValidTimeSig","makeTimeSignatureGlyph","setGlyph","getTimeSpec","getIsNumeric","setIsNumeric","isNumeric","SORT_ORDER_BEG_MODIFIERS","SORT_ORDER_END_MODIFIERS","Stave","defaultPadding","end_x","measure","endClef","vertical_bar_width","num_lines","fill_style","left_bar","right_bar","spacing_between_lines_px","space_above_staff_ln","space_below_staff_ln","top_text_position","bottom_text_position","line_config","bounds","defaultLedgerLineStyle","resetLines","addEndModifier","setDefaultLedgerLineStyle","visible","setNoteStartX","getNoteEndX","setNumLines","mod","setMeasure","getMeasure","getModifierXShift","begBarline","setRepetitionType","setVoltaType","number_t","setSection","staveSection","getLineForY","setBegBarType","setEndBarType","setClefLines","clefSpec","setClef","addClef","setEndClef","setKeySignature","addKeySignature","setEndKeySignature","setTimeSignature","timeSignatures","addTimeSignature","setEndTimeSignature","addEndClef","addEndTimeSignature","addTrebleGlyph","noPosition","noCategory","sortByCategory","items","order","temp","endBarline","begModifiers","endModifiers","lastBarlineIdx","getConfigForLines","setConfigForLine","line_number","setConfigForLines","lines_configuration","formatBegModifiers","staves","adjustCategoryStartX","minStartX","adjustX","allModifiers","bAdjust","maxX","drawBoldDoubleLine","topX","StaveConnector","BOLD_DOUBLE_LEFT","BOLD_DOUBLE_RIGHT","variableWidth","top_stave","bottom_stave","texts","newType","content","SINGLE_RIGHT","THIN_DOUBLE","attachment_height","SINGLE_LEFT","BRACE","x3","y3","cpx1","cpy1","cpx2","cpy2","cpx3","cpy3","cpx4","cpy4","cpx5","cpy5","cpx6","cpy6","cpx7","cpy7","cpx8","cpy8","BRACKET","singleRight","singleLeft","brace","bracket","boldDoubleLeft","boldDoubleRight","thinDouble","TickContext","getNextContext","tContext","contexts","tContexts","tickID","currentTick","maxTicks","maxTickable","minTicks","minTickable","xBase","tickablesByVoice","totalLeftPx","totalRightPx","getTickID","getXBase","setXBase","getXOffset","getMaxTicks","getMinTicks","getMaxTickable","getMinTickable","getTickableForVoice","voiceIndex","getTickablesByVoice","getCenterAlignedTickables","getCurrentTick","setCurrentTick","getRestLineForNextNoteGroup","currRestLine","currNoteIndex","nextRestLine","noteIndex","SimpleFormat","paddingBetween","accumulator","plotDebugging","stavePadding","contextGaps","gaps","gap","totalCost","toFixed","total","FormatAndDraw","auto_beam","align_rests","applyAndGetBeams","formatToStave","FormatAndDrawTab","tabstave","tabnotes","autobeam","notevoice","tabvoice","AlignRestsToNotes","alignAllNotes","alignTuplets","currTickable","prevTickable","formatterOptions","globalSoftmax","maxIterations","justifyWidth","durationStats","minTotalWidth","hasMinTotalWidth","tickContexts","array","list","modifierContexts","lossHistory","alignRests","preCalculateMinTotalWidth","unalignedPadding","unalignedCtxCount","wsum","dsum","createTickContexts","contextList","contextMap","wavg","wvar","ll","wpads","davg","dvar","dpads","padmax","unalignedPad","createModifierContexts","tickToContextMap","integerTicks","staveTickToContextMap","newContext","makeContext","addToContext","tickList","createContexts","contextArray","getTickContexts","renderingContext","voicesParam","evaluate","firstContext","calculateIdealDistances","adjustedJustifyWidth","backTickable","prevContext","backVoices","matchingVoices","maxNegativeShiftPx","expectedDistance","thisTickable","insideLeftEdge","backMetrics","insideRightEdge","fromTickable","fromTickablePx","shiftToIdealDistances","idealDistances","centerX","spaceAccum","contextX","ideal","errorPx","negativeShiftPx","configMinPadding","configMaxPadding","targetWidth","distances","actualWidth","minDistance","mdCalc","di","calcMinDistance","paddingMaxCalc","curTargetWidth","lastTickablePadding","lastTickable","tickWidth","paddingMax","paddingMin","prevTick","prevMetrics","currMetrics","leftNoteEdge","rightNote","rightMetrics","stats","count","updateStats","totalDeviation","tune","alpha","current","cost","optionsParam","TupletLocation","Tuplet","LOCATION_TOP","LOCATION_BOTTOM","NESTING_OFFSET","tupletMetrics","numerator_glyphs","denom_glyphs","num_notes","beats_occupied","beatsOccupiedDeprecationWarning","notes_occupied","bracketed","ratioed","setTupletLocation","location","resolveGlyphs","attach","detach","setBracketed","setRatioed","getBeatsOccupied","setBeatsOccupied","beats","setNotesOccupied","unshift","getNestedTupletCount","maxTupletCount","countTuplets","minTupletCount","tupletCount","getYPosition","nested_tuplet_y_offset","topModifierOffset","modLines","modY","noteHeadOffset","stemOffset","lineCheck","nn","bottom_y","addGlyphWidth","notation_start_x","shiftY","colon_x","colon_radius","calculateStemDirection","lineSum","keyProp","BEAM_LEFT","BEAM_RIGHT","BEAM_BOTH","getDefaultBeamGroups","time_sig","beatTotal","beatValue","generateBeams","config","tickGroups","unprocessedNotes","currentTickGroup","noteGroups","currentGroup","nextTickGroup","nextGroup","currentGroupTotalTicks","unprocessedNote","ticksPerGroup","vf_notes","memo","unbeamable","createGroups","sanitizedGroups","tempGroup","isFirstOrLast","breaksOnEachRest","beam_rests","breaksOnFirstOrLastRest","beam_middle_only","breakOnStemChange","maintain_stem_directions","prevDirection","isUnbeamableDuration","sanitizeGroups","findFirstNote","applyStemDirection","beamedNoteGroups","beamable","allTuplets","uniqueTuplets","noteTuplet","getTuplets","show_stemlets","secondary_breaks","secondary_break_ticks","flat_beams","flat_beam_offset","slope","forcedPartialDirections","stem_weight","break_on_indices","max_slope","min_slope","slope_iterations","slope_cost","stemlet_extension","min_flat_beam_offset","beamCount","breakSecondaryAt","indices","setPartialBeamSideAt","side","unsetPartialBeamSideAt","getSlopeY","calculateSlope","firstNote","initialSlope","firstStemTipY","firstStemX","getStemSlope","minCost","MAX_VALUE","bestSlope","totalStemExtension","yShiftTemp","adjustedStemTipY","diff","idealSlope","calculateFlatSlope","extremeY","extremeBeamCount","currentExtreme","extremeTest","newOffset","getBeamYToDraw","beamY","applyStemExtensions","beamedStemTipY","preBeamExtension","beamExtension","crossStemExtension","totalBeamWidth","lookupBeamDirection","prev_tick","next_tick","forcedBeamDirection","lookup_duration","prev_note_gets_beam","next_note_gets_beam","note_gets_beam","getBeamLines","tick_of_duration","beam_started","beam_lines","current_beam","previous_should_break","tick_tally","should_break","next_note","beam_alone","beam_direction","last_beam","drawStems","drawBeamLines","valid_beam_durations","beamThickness","beamLines","beam_line","startBeamX","startBeamY","lastBeamX","lastBeamY","ClefNote","abs_x","Crescendo","extend_left","extend_right","decrescendo","setHeight","setDecrescendo","decresc","tick_context","next_context","begin_x","half_height","reverse","renderHairpin","CurvePosition","Curve","nearHead","NEAR_HEAD","nearTop","NEAR_TOP","from","to","position_end","invert","cps","renderCurve","first_x","first_y","last_x","last_y","cp0x","cp0y","cp_spacing","end_metric","Parser","flattenMatches","matchedString","results","grammar","errorPos","expect","matchFail","returnPos","matchSuccess","matchToken","token","noSpace","regexp","RegExp","success","incrementPos","expectOne","rule","maybe","allMatches","oneMatch","localPos","or","gotOne","numMatches","expectOneOrMore","more","expectZeroOrMore","ruleFunc","bind","oneOrMore","zeroOrMore","matches","run","EasyScore","EasyScoreGrammar","PIECE","PIECES","EOL","CHORDORNOTE","PARAMS","commitPiece","COMMA","DURATION","DOTS","OPTS","CHORD","SINGLENOTE","LPAREN","NOTES","RPAREN","addChord","NOTE","NOTENAME","ACCIDENTAL","OCTAVE","addSingleNote","MICROTONES","ACCIDENTALS","DOT","setNoteDots","SLASH","MAYBESLASH","TYPES","setNoteType","DURATIONS","setNoteDuration","LBRACKET","KEYVAL","KEYVALS","RBRACKET","KEY","EQUALS","VAL","addNoteOption","SVAL","DVAL","Piece","chord","Builder","commitHooks","elements","rollingDuration","resetPiece","getElements","addCommitHook","commitHook","piece","addNote","standardAccidentals","notePiece","GhostNote","setId","commaSeparatedRegex","setClass","defaults","throwOnError","parser","ERROR_MSG","parameter","GlyphNote","ignoreTicks","SCALE","slash","ret","staveNoteScale","offsetScale","slashBBox","calcBeamedNotesSlashBBox","noteHeadBounds","defaultStemExtention","defaultOffsetY","slashStemOffset","slashBeamOffset","protrusions","beam_slope","beam_angle","atan","iPointOnBeam","slash_angle","protrusion_stem_dx","protrusion_stem_dy","protrusion_beam_dx","protrusion_beam_dy","stem0X","stemY","KeySigNote","semibreve_rest","MultiMeasureRest","number_of_measures","xs","hasPaddingLeft","hasPaddingRight","hasLineThickness","hasSymbolSpacing","padding_left","padding_right","line_thickness","symbol_spacing","use_symbols","show_number","number_line","number_glyph_point","serif_thickness","semibreve_rest_glyph_scale","getXs","drawLine","spacingBetweenLines","lineThicknessHalf","serifThickness","bot","leftIndented","rightIndented","lineTop","lineBottom","drawSymbols","n4","n2","n1","get_semibreve_rest","rest_scale","rest_width","yMiddle","timeSig","drawPedalGlyph","glyph_data","PedalMarking","createSustain","createSostenuto","pedal","MIXED","setCustomText","createUnaCorda","custom_depress_text","custom_release_text","bracket_height","text_margin_right","bracket_line_width","depress","drawBracketed","prev_x","prev_y","is_pedal_depressed","next_is_same","prev_is_same","drawText","pedal_depress","pedal_release","mixed","CODES","RepeatNote","drawArrowHead","StaveLine","line_dash","rounded_end","draw_start_arrow","draw_end_arrow","arrowhead_length","arrowhead_angle","text_position_vertical","TextVerticalPosition","text_justification","applyLineStyle","applyFontStyle","drawArrowLine","pt1","pt2","both_arrows","distance","ratio","end_y","start_y","line_angle","angle1","angle2","top_x","bottom_x","start_position","end_position","first_index","last_index","upwards_slope","notehead_width","vertical_position","System","partStaves","partStaveInfos","partVoices","spaceBetweenStaves","autoWidth","noJustification","debugFormatter","formatIterations","noPadding","details","formatOptions","getStaves","getVoices","addConnector","connector","addStave","staveOptions","spaceAbove","spaceBelow","debugNoteMetrics","addVoices","options_details","debugNoteMetricsYs","part","lastY","glyphPropsArr","positions","ghost","draw_dots","draw_stem_through_stave","setGhost","getStemY","stemDownLine","stemStartLine","flag_x","flag_y","drawStemThrough","stemThrough","stemLines","unused_strings","up_stem","down_stem","line_spacing","total_lines","stem_lines","strings","containsLastString","containsFirstString","line_ys","isTopBound","isBottomBound","getPartialStemLines","strings_used","stem_through","getUnusedStringGroups","drawPositions","tab_x","render_stem","TabStave","addTabGlyph","TextBracket","TextBracketPosition","Positions","PositionsString","stop","show_bracket","underline_superscript","main_measure","main_width","main_height","super_y","super_measure","super_width","super_height","line_y","TextDynamics","sequence","glyph_font_size","total_width","letter","letter_x","current_letter","TimeSigNote","tsGlyph","VibratoBracket","bracket_data","stop_x","Factory","newFromElementId","renderQ","systems","initRenderer","ghostNote","textNote","barNote","clefNote","timeSigNote","keySigNote","hJustify","vJustify","kerning","upperAccidental","lowerAccidental","numMeasures","multiMeasureRest","secondaryBeamBreaks","partialBeamDirections","curve","tie","vibratoBracket","textBracket","system","GraceTabNote","KeyManager","setKey","getKey","scaleMapByValue","originalScaleMapByValue","getAccidental","selectNote","scaleNote","modparts","change","valueNote","originalValueNote","StaveHairpin","FormatByTicksAndDraw","ppt","pixelsPerTick","l_shift_px","left_shift_ticks","r_shift_px","right_shift_ticks","hairpin_options","left_shift_px","right_shift_px","setRenderOptions","hairpin","dis","staff_height","l_shift","r_shift","CRESC","DECRESC","TabSlide","SLIDE_UP","SLIDE_DOWN","createSlideUp","createSlideDown","first_fret","last_fret","slide_y","Tremolo","y_spacing_scale","extra_stroke_scale","y_spacing","Tuning","names","standard","dagdad","dropd","standardBanjo","doubleCBanjo","doubleDBanjo","sawmillBanjo","tuningString","tuningValues","setTuning","noteToInteger","getValueForString","stringNum","getValueForFret","fretNum","stringValue","getNoteForFret","Flow","BUILD","VERSION","DATE","setMusicFont","fontNames","fetchMusicFont","fontModuleOrPath","getMusicFont","getMusicFontStack","BravuraFont","bracketTop","bracketBottom","barlineTick","breathMarkTick","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXDoubleWhole","noteheadXWhole","noteheadXHalf","noteheadXBlack","noteheadCircleXDoubleWhole","noteheadCircleXWhole","noteheadCircleXHalf","noteheadCircleX","noteheadCircledDoubleWhole","noteheadCircledWhole","noteheadCircledHalf","noteheadCircledBlack","noteheadDoubleWholeSquare","noteheadSquareWhite","noteheadSquareBlack","noteheadTriangleDownDoubleWhole","noteheadTriangleDownWhole","noteheadTriangleDownHalf","noteheadTriangleDownBlack","noteheadTriangleUpDoubleWhole","noteheadTriangleUpWhole","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesis","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBuyukMucennebSharp","accidentalBakiyeFlat","accidentalKomaSharp","accidentalKucukMucennebSharp","accidentalKoron","accidentalSori","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","wiggleArpeggiatoUp","arrowheadBlackUp","arrowheadBlackDown","arpeggiatoUp","arpeggiatoDown","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","csymDiminished","csymHalfDiminished","csymAugmented","csymMajorSeventh","csymMinor","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","generatedOn","CommonMetrics","smufl","endPaddingMax","endPaddingMin","unalignedNotePadding","clef_default","shiftX","clef_small","default","gracenote","pedalMarking","digits","shiftLine","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","heightAdjustmentForFlag","staveTempo","clefNote_default","clefNote_small","stroke_straight","stroke_wiggly","CustomFont","vexAccidentalMicrotonal1","vexAccidentalMicrotonal3","vexAccidentalMicrotonal4","vexNoteHeadRectBlack","vexNoteHeadRectWhite","vexWiggleArpeggioUp","PetalumaScriptFont","$","I","J","K","N","O","Q","U","V","Y","Z","_","l","RobotoSlabFont","SansFontBold","SansFont","Description","SerifFont","Vex","sortAndUnique","cmp","eq","newArr","last","contains","canvasSelector","benchmark","start_time","Date","getTime","stackTrace","fontData","description","loadTextFonts"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-core.js b/build/cjs/vexflow-core.js new file mode 100644 index 0000000000..fa8e2f120c --- /dev/null +++ b/build/cjs/vexflow-core.js @@ -0,0 +1,7 @@ +/*! + * VexFlow 4.2.6 2024-08-26T20:16:17.134Z 103aad2b14837418c5e96c9e078edd036fcddf60 + * Copyright (c) 2010 Mohit Muthanna Cheppudira + * https://www.vexflow.com https://github.com/0xfe/vexflow + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Vex=e():t.Vex=e()}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var s in i)t.o(i,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:i[s]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};t.d(e,{default:()=>i});var i={};function s(t,e,i=!0){if("object"!=typeof t||null===t)return!1;let s=t.constructor;if(i){for(;null!==t;){if(s=t.constructor,"CATEGORY"in s&&s.CATEGORY===e)return!0;t=Object.getPrototypeOf(t)}return!1}return"CATEGORY"in s&&s.CATEGORY===e}t.r(i),t.d(i,{Accidental:()=>st,Annotation:()=>gt,AnnotationHorizontalJustify:()=>dt,AnnotationVerticalJustify:()=>lt,Articulation:()=>St,BEAM_BOTH:()=>Oe,BEAM_LEFT:()=>Me,BEAM_RIGHT:()=>Re,BarNote:()=>Dt,Barline:()=>kt,BarlineType:()=>Et,Beam:()=>Le,Bend:()=>Ft,BoundingBox:()=>C,BoundingBoxComputation:()=>N,Builder:()=>Ke,CanvasContext:()=>Qt,Category:()=>u,ChordSymbol:()=>Rt,ChordSymbolHorizontalJustify:()=>Bt,ChordSymbolVerticalJustify:()=>Ct,Clef:()=>me,ClefNote:()=>We,Crescendo:()=>Ie,Curve:()=>Ue,CurvePosition:()=>Ge,Dot:()=>Ot,EasyScore:()=>Qe,EasyScoreGrammar:()=>Ve,Element:()=>L,Factory:()=>bi,Flow:()=>ki,Font:()=>M,FontStyle:()=>A,FontWeight:()=>P,Formatter:()=>Ae,Fraction:()=>E,FretHandFinger:()=>Lt,GhostNote:()=>ti,Glyph:()=>Z,GlyphNote:()=>ei,GraceNote:()=>ii,GraceNoteGroup:()=>Vt,GraceTabNote:()=>wi,KeyManager:()=>Ei,KeySigNote:()=>si,KeySignature:()=>_e,Modifier:()=>tt,ModifierContext:()=>ge,ModifierPosition:()=>J,MultiMeasureRest:()=>ai,Music:()=>et,Note:()=>bt,NoteHead:()=>Wt,NoteSubGroup:()=>zt,Ornament:()=>Kt,OutlineCode:()=>$,Parenthesis:()=>$t,Parser:()=>je,PedalMarking:()=>ri,Piece:()=>ze,Registry:()=>O,RenderContext:()=>yt,Renderer:()=>re,RendererBackends:()=>se,RendererLineEndType:()=>ne,RepeatNote:()=>ci,Repetition:()=>ue,RuntimeError:()=>p,SVGContext:()=>ie,Stave:()=>Ee,StaveConnector:()=>Ce,StaveHairpin:()=>Bi,StaveLine:()=>li,StaveModifier:()=>At,StaveModifierPosition:()=>wt,StaveNote:()=>Ut,StaveSection:()=>pe,StaveTempo:()=>xe,StaveText:()=>Se,StaveTie:()=>Ht,Stem:()=>nt,StemmableNote:()=>It,StringNumber:()=>he,Stroke:()=>ce,SymbolModifiers:()=>Pt,SymbolTypes:()=>Nt,System:()=>gi,TabNote:()=>mi,TabSlide:()=>Ci,TabStave:()=>_i,TabTie:()=>Yt,TextBracket:()=>xi,TextBracketPosition:()=>pi,TextDynamics:()=>Si,TextFormatter:()=>ct,TextJustification:()=>ae,TextNote:()=>fe,TickContext:()=>Ne,Tickable:()=>vt,TimeSigNote:()=>yi,TimeSignature:()=>ve,TimeSignatureGlyph:()=>Te,Tremolo:()=>Ni,Tuning:()=>Pi,Tuplet:()=>De,TupletLocation:()=>ke,Vex:()=>Li,Vibrato:()=>de,VibratoBracket:()=>Ti,Voice:()=>Xt,VoiceMode:()=>jt,Volta:()=>ye,VoltaType:()=>oe,defined:()=>f,drawDot:()=>Tt,globalObject:()=>x,isAccidental:()=>n,isAnnotation:()=>a,isBarline:()=>o,isCategory:()=>s,isDot:()=>r,isGraceNote:()=>h,isGraceNoteGroup:()=>c,isHTMLCanvas:()=>Jt,isHTMLDiv:()=>qt,isNote:()=>d,isRenderContext:()=>l,isStaveNote:()=>g,isStemmableNote:()=>m,isTabNote:()=>_,log:()=>S,midLine:()=>T,normalizeAngle:()=>b,prefix:()=>v,sumArray:()=>w,warn:()=>y});const n=t=>s(t,u.Accidental),a=t=>s(t,u.Annotation),o=t=>s(t,u.Barline),r=t=>s(t,u.Dot),h=t=>s(t,u.GraceNote),c=t=>s(t,u.GraceNoteGroup),d=t=>s(t,u.Note),l=t=>s(t,u.RenderContext),g=t=>s(t,u.StaveNote),m=t=>s(t,u.StemmableNote),_=t=>s(t,u.TabNote);var u;!function(t){t.Accidental="Accidental",t.Annotation="Annotation",t.Articulation="Articulation",t.Barline="Barline",t.BarNote="BarNote",t.Beam="Beam",t.Bend="Bend",t.ChordSymbol="ChordSymbol",t.Clef="Clef",t.ClefNote="ClefNote",t.Crescendo="Crescendo",t.Curve="Curve",t.Dot="Dot",t.Element="Element",t.Fraction="Fraction",t.FretHandFinger="FretHandFinger",t.GhostNote="GhostNote",t.Glyph="Glyph",t.GlyphNote="GlyphNote",t.GraceNote="GraceNote",t.GraceNoteGroup="GraceNoteGroup",t.GraceTabNote="GraceTabNote",t.KeySignature="KeySignature",t.KeySigNote="KeySigNote",t.Modifier="Modifier",t.MultiMeasureRest="MultiMeasureRest",t.Note="Note",t.NoteHead="NoteHead",t.NoteSubGroup="NoteSubGroup",t.Ornament="Ornament",t.Parenthesis="Parenthesis",t.PedalMarking="PedalMarking",t.RenderContext="RenderContext",t.RepeatNote="RepeatNote",t.Repetition="Repetition",t.Stave="Stave",t.StaveConnector="StaveConnector",t.StaveHairpin="StaveHairpin",t.StaveLine="StaveLine",t.StaveModifier="StaveModifier",t.StaveNote="StaveNote",t.StaveSection="StaveSection",t.StaveTempo="StaveTempo",t.StaveText="StaveText",t.StaveTie="StaveTie",t.Stem="Stem",t.StemmableNote="StemmableNote",t.StringNumber="StringNumber",t.Stroke="Stroke",t.System="System",t.TabNote="TabNote",t.TabSlide="TabSlide",t.TabStave="TabStave",t.TabTie="TabTie",t.TextBracket="TextBracket",t.TextDynamics="TextDynamics",t.TextNote="TextNote",t.Tickable="Tickable",t.TimeSignature="TimeSignature",t.TimeSigNote="TimeSigNote",t.Tremolo="Tremolo",t.Tuplet="Tuplet",t.Vibrato="Vibrato",t.VibratoBracket="VibratoBracket",t.Voice="Voice",t.Volta="Volta"}(u||(u={}));class p extends Error{constructor(t,e=""){super("[RuntimeError] "+t+": "+e),this.code=t}}function x(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:Function("return this")()}function f(t,e="undefined",i=""){if(void 0===t)throw new p(e,i);return t}function S(t,...e){if(!e)return;const i=Array.prototype.slice.call(e).join(" ");x().console.log(t+": "+i)}function y(...t){const e=t.join(" "),i=new Error;x().console.log("Warning: ",e,i.stack)}function T(t,e){let i=e+(t-e)/2;var s,n;return i%2>0&&(i=((s=10*i)%(n=5)>=n/2?parseInt(""+s/n,10)*n+n:parseInt(""+s/n,10)*n)/10),i}function v(t){return`vf-${t}`}function b(t){return(t%=2*Math.PI)<0&&(t+=2*Math.PI),t}function w(t){return t.reduce(((t,e)=>t+e),0)}class E{static get CATEGORY(){return u.Fraction}static GCD(t,e){if("number"!=typeof t||Number.isNaN(t)||"number"!=typeof e||Number.isNaN(e))throw new p("BadArgument",`Invalid numbers: ${t}, ${e}`);let i;for(;0!==e;)i=e,e=t%e,t=i;return t}static LCM(t,e){return t*e/E.GCD(t,e)}static LCMM(t){return 0===t.length?0:1===t.length?t[0]:2===t.length?E.LCM(t[0],t[1]):E.LCM(t.shift(),E.LCMM(t))}constructor(t,e){this.numerator=1,this.denominator=1,this.set(t,e)}set(t=1,e=1){return this.numerator=t,this.denominator=e,this}value(){return this.numerator/this.denominator}simplify(){let t=this.numerator,e=this.denominator;const i=E.GCD(t,e);return t/=i,e/=i,e<0&&(e=-e,t=-t),this.set(t,e)}add(t=0,e=1){const[i,s]=B(t,e),n=E.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a+i*o;return this.set(r,n)}subtract(t=0,e=1){const[i,s]=B(t,e),n=E.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a-i*o;return this.set(r,n)}multiply(t=1,e=1){const[i,s]=B(t,e);return this.set(this.numerator*i,this.denominator*s)}divide(t=1,e=1){const[i,s]=B(t,e);return this.set(this.numerator*s,this.denominator*i)}equals(t){const e=E.__staticFractionA.copy(t).simplify(),i=E.__staticFractionB.copy(this).simplify();return e.numerator===i.numerator&&e.denominator===i.denominator}greaterThan(t){const e=E.__staticFractionB.copy(this);return e.subtract(t),e.numerator>0}greaterThanEquals(t){const e=E.__staticFractionB.copy(this);return e.subtract(t),e.numerator>=0}lessThan(t){return!this.greaterThanEquals(t)}lessThanEquals(t){return!this.greaterThan(t)}clone(){return new E(this.numerator,this.denominator)}copy(t){return"number"==typeof t?this.set(t,1):this.set(t.numerator,t.denominator)}quotient(){return Math.floor(this.numerator/this.denominator)}remainder(){return this.numerator%this.denominator}makeAbs(){return this.denominator=Math.abs(this.denominator),this.numerator=Math.abs(this.numerator),this}toString(){return`${this.numerator}/${this.denominator}`}toSimplifiedString(){return E.__staticFractionTmp.copy(this).simplify().toString()}toMixedString(){let t="";const e=this.quotient(),i=E.__staticFractionTmp.copy(this);return e<0&&i.makeAbs(),0!==e?(t+=e,0!==i.numerator&&(t+=` ${i.toSimplifiedString()}`)):t=0===i.numerator?"0":i.toSimplifiedString(),t}parse(t){const e=t.split("/"),i=parseInt(e[0],10),s=e[1]?parseInt(e[1],10):1;return this.set(i,s)}}function B(t,e=1){return"number"==typeof t?[t,e]:[t.numerator,t.denominator]}E.__staticFractionA=new E,E.__staticFractionB=new E,E.__staticFractionTmp=new E;class C{static copy(t){return new C(t.x,t.y,t.w,t.h)}constructor(t,e,i,s){this.x=t,this.y=e,this.w=i,this.h=s}getX(){return this.x}getY(){return this.y}getW(){return this.w}getH(){return this.h}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setW(t){return this.w=t,this}setH(t){return this.h=t,this}move(t,e){return this.x+=t,this.y+=e,this}clone(){return C.copy(this)}mergeWith(t){const e=t,i=this.xthis.x2)&&(this.x2=t),(isNaN(this.y1)||ethis.y2)&&(this.y2=e)}addX(t){this.addPoint(t,this.y1)}addY(t){this.addPoint(this.x1,t)}addQuadraticCurve(t,e,i,s,n,a){this.addPoint(t,e),this.addPoint(n,a);const o=i-t;let r=o-(n-i);if(0!=r){const e=o/r;if(e>0&&e<1){const s=1-e;this.addX(s*s*t+2*s*e*i+e*e*n)}}const h=s-e;if(r=h-(a-s),0!=r){const t=h/r;if(t>0&&t<1){const i=1-t;this.addY(i*i*e+2*i*t*s+t*t*a)}}}addBezierCurve(t,e,i,s,n,a,o,r){const h=[t,e],c=[i,s],d=[n,a],l=[o,r];let g;this.addPoint(h[0],h[1]),this.addPoint(l[0],l[1]);const m=(t,e)=>Math.pow(1-t,3)*h[e]+3*Math.pow(1-t,2)*t*c[e]+3*(1-t)*Math.pow(t,2)*d[e]+Math.pow(t,3)*l[e];for(g=0;g<=1;g++){const t=6*h[g]-12*c[g]+6*d[g],e=-3*h[g]+9*c[g]-9*d[g]+3*l[g],i=3*c[g]-3*h[g];if(0===e){if(0===t)continue;const e=-i/t;0=600;{const e=parseInt(t,10);return isNaN(e)?"bold"===t.toLowerCase():e>=600}}return!1}static isItalic(t){return!!t&&t.toLowerCase()===A.ITALIC}static loadWebFont(t,e,i=!0){return k(this,void 0,void 0,(function*(){const s=new FontFace(t,(i?`url(${e}2) format('woff2'), `:"")+`url(${e}) format('woff')`);return yield s.load(),document.fonts.add(s),s}))}static loadWebFonts(){return k(this,void 0,void 0,(function*(){const t=M.WEB_FONT_HOST,e=M.WEB_FONT_FILES;for(const i in e){const s=e[i];M.loadWebFont(i,t+s)}}))}static load(t,e,i){let s=F[t];return s||(s=new M(t),F[t]=s),e&&s.setData(e),i&&s.setMetrics(i),s}constructor(t){this.name=t}getName(){return this.name}getData(){return f(this.data,"FontError","Missing font data")}getMetrics(){return f(this.metrics,"FontError","Missing metrics")}setData(t){this.data=t}setMetrics(t){this.metrics=t}hasData(){return void 0!==this.data}getResolution(){return this.getData().resolution}getGlyphs(){return this.getData().glyphs}lookupMetric(t,e){const i=t.split(".");let s=this.getMetrics();for(let t=0;tt[e]))}}return[]}getElementsByType(t){return this.getElementsByAttribute("type",t)}getElementsByClass(t){return this.getElementsByAttribute("class",t)}onUpdate(t){return["id","type","class"].includes(t.name)&&this.updateIndex(t),this}}class L{static get CATEGORY(){return u.Element}static newID(){return"auto"+L.ID++}constructor(){var t;this.children=[],this.attrs={id:L.newID(),type:this.getCategory(),class:""},this.rendered=!1,null===(t=O.getDefaultRegistry())||void 0===t||t.register(this)}addChildElement(t){return this.children.push(t),this}getCategory(){return this.constructor.CATEGORY}setStyle(t){return this.style=t,this}setGroupStyle(t){return this.style=t,this.children.forEach((e=>e.setGroupStyle(t))),this}getStyle(){return this.style}applyStyle(t=this.context,e=this.getStyle()){return e&&t?(t.save(),e.shadowColor&&t.setShadowColor(e.shadowColor),e.shadowBlur&&t.setShadowBlur(e.shadowBlur),e.fillStyle&&t.setFillStyle(e.fillStyle),e.strokeStyle&&t.setStrokeStyle(e.strokeStyle),e.lineWidth&&t.setLineWidth(e.lineWidth),this):this}restoreStyle(t=this.context,e=this.getStyle()){return e&&t?(t.restore(),this):this}drawWithStyle(){this.checkContext(),this.applyStyle(),this.draw(),this.restoreStyle()}hasClass(t){var e;return!!this.attrs.class&&-1!=(null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ").indexOf(t))}addClass(t){var e;return this.hasClass(t)||(this.attrs.class?this.attrs.class=`${this.attrs.class} ${t}`:this.attrs.class=`${t}`,null===(e=this.registry)||void 0===e||e.onUpdate({id:this.attrs.id,name:"class",value:t,oldValue:void 0})),this}removeClass(t){var e,i;if(!this.hasClass(t))return this;const s=null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ");return s&&(s.splice(s.indexOf(t)),this.attrs.class=s.join(" ")),null===(i=this.registry)||void 0===i||i.onUpdate({id:this.attrs.id,name:"class",value:void 0,oldValue:t}),this}onRegister(t){return this.registry=t,this}isRendered(){return this.rendered}setRendered(t=!0){return this.rendered=t,this}getAttributes(){return this.attrs}getAttribute(t){return this.attrs[t]}getSVGElement(t=""){const e=v(this.attrs.id+t),i=document.getElementById(e);if(i)return i}setAttribute(t,e){var i;const s=this.attrs.id,n=this.attrs[t];return this.attrs[t]=e,null===(i=this.registry)||void 0===i||i.onUpdate({id:s,name:t,value:e,oldValue:n}),this}getBoundingBox(){return this.boundingBox}getContext(){return this.context}setContext(t){return this.context=t,this}checkContext(){return f(this.context,"NoContext","No rendering context attached to instance.")}set font(t){this.setFont(t)}get font(){return M.toCSSString(this.textFont)}setFont(t,e,i,s){const n=this.constructor.TEXT_FONT,a="object"==typeof t,o="string"==typeof t,r=void 0===t,h=void 0===e&&void 0===i&&void 0===s;return this.textFont=a?Object.assign(Object.assign({},n),t):o&&h?M.fromCSSString(t):r&&h?Object.assign({},n):M.validate(null!=t?t:n.family,null!=e?e:n.size,null!=i?i:n.weight,null!=s?s:n.style),this}getFont(){return this.textFont||this.resetFont(),M.toCSSString(this.textFont)}resetFont(){this.setFont()}get fontInfo(){return this.textFont||this.resetFont(),Object.assign({},this.textFont)}set fontInfo(t){this.setFont(t)}setFontSize(t){const e=this.fontInfo;return this.setFont(e.family,t,e.weight,e.style),this}getFontSize(){return this.fontSize}set fontSize(t){this.setFontSize(t)}get fontSize(){let t=this.fontInfo.size;return"number"==typeof t&&(t=`${t}pt`),t}get fontSizeInPoints(){return M.convertSizeToPointValue(this.fontSize)}get fontSizeInPixels(){return M.convertSizeToPixelValue(this.fontSize)}get fontStyle(){return this.fontInfo.style}set fontStyle(t){const e=this.fontInfo;this.setFont(e.family,e.size,e.weight,t)}get fontWeight(){return this.fontInfo.weight+""}set fontWeight(t){const e=this.fontInfo;this.setFont(e.family,e.size,t,e.style)}}L.ID=1e3,L.TEXT_FONT={family:M.SANS_SERIF,size:M.SIZE,weight:P.NORMAL,style:A.NORMAL};const W=16384,I={"1/2":32768,1:16384,2:8192,4:4096,8:2048,16:1024,32:512,64:256,128:128,256:64},G={w:"1",h:"2",q:"4",b:"256"},U={C:{num:0},Am:{num:0},F:{acc:"b",num:1},Dm:{acc:"b",num:1},Bb:{acc:"b",num:2},Gm:{acc:"b",num:2},Eb:{acc:"b",num:3},Cm:{acc:"b",num:3},Ab:{acc:"b",num:4},Fm:{acc:"b",num:4},Db:{acc:"b",num:5},Bbm:{acc:"b",num:5},Gb:{acc:"b",num:6},Ebm:{acc:"b",num:6},Cb:{acc:"b",num:7},Abm:{acc:"b",num:7},G:{acc:"#",num:1},Em:{acc:"#",num:1},D:{acc:"#",num:2},Bm:{acc:"#",num:2},A:{acc:"#",num:3},"F#m":{acc:"#",num:3},E:{acc:"#",num:4},"C#m":{acc:"#",num:4},B:{acc:"#",num:5},"G#m":{acc:"#",num:5},"F#":{acc:"#",num:6},"D#m":{acc:"#",num:6},"C#":{acc:"#",num:7},"A#m":{acc:"#",num:7}},H={treble:{line_shift:0},bass:{line_shift:6},tenor:{line_shift:4},alto:{line_shift:3},soprano:{line_shift:1},percussion:{line_shift:0},"mezzo-soprano":{line_shift:2},"baritone-c":{line_shift:5},"baritone-f":{line_shift:5},subbass:{line_shift:7},french:{line_shift:-1}},Y={C:{index:0,int_val:0},CN:{index:0,int_val:0,accidental:"n"},"C#":{index:0,int_val:1,accidental:"#"},"C##":{index:0,int_val:2,accidental:"##"},CB:{index:0,int_val:11,accidental:"b"},CBB:{index:0,int_val:10,accidental:"bb"},D:{index:1,int_val:2},DN:{index:1,int_val:2,accidental:"n"},"D#":{index:1,int_val:3,accidental:"#"},"D##":{index:1,int_val:4,accidental:"##"},DB:{index:1,int_val:1,accidental:"b"},DBB:{index:1,int_val:0,accidental:"bb"},E:{index:2,int_val:4},EN:{index:2,int_val:4,accidental:"n"},"E#":{index:2,int_val:5,accidental:"#"},"E##":{index:2,int_val:6,accidental:"##"},EB:{index:2,int_val:3,accidental:"b"},EBB:{index:2,int_val:2,accidental:"bb"},F:{index:3,int_val:5},FN:{index:3,int_val:5,accidental:"n"},"F#":{index:3,int_val:6,accidental:"#"},"F##":{index:3,int_val:7,accidental:"##"},FB:{index:3,int_val:4,accidental:"b"},FBB:{index:3,int_val:3,accidental:"bb"},G:{index:4,int_val:7},GN:{index:4,int_val:7,accidental:"n"},"G#":{index:4,int_val:8,accidental:"#"},"G##":{index:4,int_val:9,accidental:"##"},GB:{index:4,int_val:6,accidental:"b"},GBB:{index:4,int_val:5,accidental:"bb"},A:{index:5,int_val:9},AN:{index:5,int_val:9,accidental:"n"},"A#":{index:5,int_val:10,accidental:"#"},"A##":{index:5,int_val:11,accidental:"##"},AB:{index:5,int_val:8,accidental:"b"},ABB:{index:5,int_val:7,accidental:"bb"},B:{index:6,int_val:11},BN:{index:6,int_val:11,accidental:"n"},"B#":{index:6,int_val:12,accidental:"#"},"B##":{index:6,int_val:13,accidental:"##"},BB:{index:6,int_val:10,accidental:"b"},BBB:{index:6,int_val:9,accidental:"bb"},R:{index:6,rest:!0},X:{index:6,accidental:"",octave:4,code:"noteheadXBlack",shift_right:5.5}},j={"#":{code:"accidentalSharp",parenRightPaddingAdjustment:-1},"##":{code:"accidentalDoubleSharp",parenRightPaddingAdjustment:-1},b:{code:"accidentalFlat",parenRightPaddingAdjustment:-2},bb:{code:"accidentalDoubleFlat",parenRightPaddingAdjustment:-2},n:{code:"accidentalNatural",parenRightPaddingAdjustment:-1},"{":{code:"accidentalParensLeft",parenRightPaddingAdjustment:-1},"}":{code:"accidentalParensRight",parenRightPaddingAdjustment:-1},db:{code:"accidentalThreeQuarterTonesFlatZimmermann",parenRightPaddingAdjustment:-1},d:{code:"accidentalQuarterToneFlatStein",parenRightPaddingAdjustment:0},"++":{code:"accidentalThreeQuarterTonesSharpStein",parenRightPaddingAdjustment:-1},"+":{code:"accidentalQuarterToneSharpStein",parenRightPaddingAdjustment:-1},"+-":{code:"accidentalKucukMucennebSharp",parenRightPaddingAdjustment:-1},bs:{code:"accidentalBakiyeFlat",parenRightPaddingAdjustment:-1},bss:{code:"accidentalBuyukMucennebFlat",parenRightPaddingAdjustment:-1},o:{code:"accidentalSori",parenRightPaddingAdjustment:-1},k:{code:"accidentalKoron",parenRightPaddingAdjustment:-1},bbs:{code:"vexAccidentalMicrotonal1",parenRightPaddingAdjustment:-1},"++-":{code:"accidentalBuyukMucennebSharp",parenRightPaddingAdjustment:-1},ashs:{code:"vexAccidentalMicrotonal3",parenRightPaddingAdjustment:-1},afhf:{code:"vexAccidentalMicrotonal4",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaUp:{code:"accSagittal5v7KleismaUp",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaDown:{code:"accSagittal5v7KleismaDown",parenRightPaddingAdjustment:-1},accSagittal5CommaUp:{code:"accSagittal5CommaUp",parenRightPaddingAdjustment:-1},accSagittal5CommaDown:{code:"accSagittal5CommaDown",parenRightPaddingAdjustment:-1},accSagittal7CommaUp:{code:"accSagittal7CommaUp",parenRightPaddingAdjustment:-1},accSagittal7CommaDown:{code:"accSagittal7CommaDown",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisUp:{code:"accSagittal25SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisDown:{code:"accSagittal25SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisUp:{code:"accSagittal35MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisDown:{code:"accSagittal35MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisUp:{code:"accSagittal11MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisDown:{code:"accSagittal11MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisUp:{code:"accSagittal11LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisDown:{code:"accSagittal11LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisUp:{code:"accSagittal35LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisDown:{code:"accSagittal35LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SDown:{code:"accSagittalSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalFlat25SUp:{code:"accSagittalFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7CDown:{code:"accSagittalSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7CUp:{code:"accSagittalFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5CDown:{code:"accSagittalSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5CUp:{code:"accSagittalFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kDown:{code:"accSagittalSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kUp:{code:"accSagittalFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalSharp:{code:"accSagittalSharp",parenRightPaddingAdjustment:-1},accSagittalFlat:{code:"accSagittalFlat",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kUp:{code:"accSagittalSharp5v7kUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kDown:{code:"accSagittalFlat5v7kDown",parenRightPaddingAdjustment:-1},accSagittalSharp5CUp:{code:"accSagittalSharp5CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5CDown:{code:"accSagittalFlat5CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7CUp:{code:"accSagittalSharp7CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7CDown:{code:"accSagittalFlat7CDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SUp:{code:"accSagittalSharp25SUp",parenRightPaddingAdjustment:-1},accSagittalFlat25SDown:{code:"accSagittalFlat25SDown",parenRightPaddingAdjustment:-1},accSagittalSharp35MUp:{code:"accSagittalSharp35MUp",parenRightPaddingAdjustment:-1},accSagittalFlat35MDown:{code:"accSagittalFlat35MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11MUp:{code:"accSagittalSharp11MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11MDown:{code:"accSagittalFlat11MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11LUp:{code:"accSagittalSharp11LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11LDown:{code:"accSagittalFlat11LDown",parenRightPaddingAdjustment:-1},accSagittalSharp35LUp:{code:"accSagittalSharp35LUp",parenRightPaddingAdjustment:-1},accSagittalFlat35LDown:{code:"accSagittalFlat35LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp25SDown:{code:"accSagittalDoubleSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat25SUp:{code:"accSagittalDoubleFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7CDown:{code:"accSagittalDoubleSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7CUp:{code:"accSagittalDoubleFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5CDown:{code:"accSagittalDoubleSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5CUp:{code:"accSagittalDoubleFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v7kDown:{code:"accSagittalDoubleSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v7kUp:{code:"accSagittalDoubleFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp:{code:"accSagittalDoubleSharp",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat:{code:"accSagittalDoubleFlat",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaUp:{code:"accSagittal7v11KleismaUp",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaDown:{code:"accSagittal7v11KleismaDown",parenRightPaddingAdjustment:-1},accSagittal17CommaUp:{code:"accSagittal17CommaUp",parenRightPaddingAdjustment:-1},accSagittal17CommaDown:{code:"accSagittal17CommaDown",parenRightPaddingAdjustment:-1},accSagittal55CommaUp:{code:"accSagittal55CommaUp",parenRightPaddingAdjustment:-1},accSagittal55CommaDown:{code:"accSagittal55CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v11CommaUp:{code:"accSagittal7v11CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v11CommaDown:{code:"accSagittal7v11CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisUp:{code:"accSagittal5v11SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisDown:{code:"accSagittal5v11SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SDown:{code:"accSagittalSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SUp:{code:"accSagittalFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CDown:{code:"accSagittalSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CUp:{code:"accSagittalFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalSharp55CDown:{code:"accSagittalSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalFlat55CUp:{code:"accSagittalFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17CDown:{code:"accSagittalSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalFlat17CUp:{code:"accSagittalFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kDown:{code:"accSagittalSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kUp:{code:"accSagittalFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kUp:{code:"accSagittalSharp7v11kUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kDown:{code:"accSagittalFlat7v11kDown",parenRightPaddingAdjustment:-1},accSagittalSharp17CUp:{code:"accSagittalSharp17CUp",parenRightPaddingAdjustment:-1},accSagittalFlat17CDown:{code:"accSagittalFlat17CDown",parenRightPaddingAdjustment:-1},accSagittalSharp55CUp:{code:"accSagittalSharp55CUp",parenRightPaddingAdjustment:-1},accSagittalFlat55CDown:{code:"accSagittalFlat55CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CUp:{code:"accSagittalSharp7v11CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CDown:{code:"accSagittalFlat7v11CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SUp:{code:"accSagittalSharp5v11SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SDown:{code:"accSagittalFlat5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v11SDown:{code:"accSagittalDoubleSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v11SUp:{code:"accSagittalDoubleFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11CDown:{code:"accSagittalDoubleSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11CUp:{code:"accSagittalDoubleFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp55CDown:{code:"accSagittalDoubleSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat55CUp:{code:"accSagittalDoubleFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17CDown:{code:"accSagittalDoubleSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17CUp:{code:"accSagittalDoubleFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11kDown:{code:"accSagittalDoubleSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11kUp:{code:"accSagittalDoubleFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittal23CommaUp:{code:"accSagittal23CommaUp",parenRightPaddingAdjustment:-1},accSagittal23CommaDown:{code:"accSagittal23CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v19CommaUp:{code:"accSagittal5v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal5v19CommaDown:{code:"accSagittal5v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisUp:{code:"accSagittal5v23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisDown:{code:"accSagittal5v23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SDown:{code:"accSagittalSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SUp:{code:"accSagittalFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CDown:{code:"accSagittalSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CUp:{code:"accSagittalFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CDown:{code:"accSagittalSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalFlat23CUp:{code:"accSagittalFlat23CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CUp:{code:"accSagittalSharp23CUp",parenRightPaddingAdjustment:-1},accSagittalFlat23CDown:{code:"accSagittalFlat23CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CUp:{code:"accSagittalSharp5v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CDown:{code:"accSagittalFlat5v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SUp:{code:"accSagittalSharp5v23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SDown:{code:"accSagittalFlat5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v23SDown:{code:"accSagittalDoubleSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v23SUp:{code:"accSagittalDoubleFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v19CDown:{code:"accSagittalDoubleSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v19CUp:{code:"accSagittalDoubleFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23CDown:{code:"accSagittalDoubleSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23CUp:{code:"accSagittalDoubleFlat23CUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaUp:{code:"accSagittal19SchismaUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaDown:{code:"accSagittal19SchismaDown",parenRightPaddingAdjustment:-1},accSagittal17KleismaUp:{code:"accSagittal17KleismaUp",parenRightPaddingAdjustment:-1},accSagittal17KleismaDown:{code:"accSagittal17KleismaDown",parenRightPaddingAdjustment:-1},accSagittal143CommaUp:{code:"accSagittal143CommaUp",parenRightPaddingAdjustment:-1},accSagittal143CommaDown:{code:"accSagittal143CommaDown",parenRightPaddingAdjustment:-1},accSagittal11v49CommaUp:{code:"accSagittal11v49CommaUp",parenRightPaddingAdjustment:-1},accSagittal11v49CommaDown:{code:"accSagittal11v49CommaDown",parenRightPaddingAdjustment:-1},accSagittal19CommaUp:{code:"accSagittal19CommaUp",parenRightPaddingAdjustment:-1},accSagittal19CommaDown:{code:"accSagittal19CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v19CommaUp:{code:"accSagittal7v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v19CommaDown:{code:"accSagittal7v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisUp:{code:"accSagittal49SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisDown:{code:"accSagittal49SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisUp:{code:"accSagittal23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisDown:{code:"accSagittal23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisUp:{code:"accSagittal5v13MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisDown:{code:"accSagittal5v13MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisUp:{code:"accSagittal11v19MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisDown:{code:"accSagittal11v19MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisUp:{code:"accSagittal49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisDown:{code:"accSagittal49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisUp:{code:"accSagittal5v49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisDown:{code:"accSagittal5v49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisUp:{code:"accSagittal49LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisDown:{code:"accSagittal49LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisUp:{code:"accSagittal11v19LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisDown:{code:"accSagittal11v19LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisUp:{code:"accSagittal5v13LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisDown:{code:"accSagittal5v13LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SDown:{code:"accSagittalSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat23SUp:{code:"accSagittalFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp49SDown:{code:"accSagittalSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalFlat49SUp:{code:"accSagittalFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CDown:{code:"accSagittalSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CUp:{code:"accSagittalFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp19CDown:{code:"accSagittalSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat19CUp:{code:"accSagittalFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CDown:{code:"accSagittalSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CUp:{code:"accSagittalFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalSharp143CDown:{code:"accSagittalSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalFlat143CUp:{code:"accSagittalFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17kDown:{code:"accSagittalSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalFlat17kUp:{code:"accSagittalFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sDown:{code:"accSagittalSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalFlat19sUp:{code:"accSagittalFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sUp:{code:"accSagittalSharp19sUp",parenRightPaddingAdjustment:-1},accSagittalFlat19sDown:{code:"accSagittalFlat19sDown",parenRightPaddingAdjustment:-1},accSagittalSharp17kUp:{code:"accSagittalSharp17kUp",parenRightPaddingAdjustment:-1},accSagittalFlat17kDown:{code:"accSagittalFlat17kDown",parenRightPaddingAdjustment:-1},accSagittalSharp143CUp:{code:"accSagittalSharp143CUp",parenRightPaddingAdjustment:-1},accSagittalFlat143CDown:{code:"accSagittalFlat143CDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CUp:{code:"accSagittalSharp11v49CUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CDown:{code:"accSagittalFlat11v49CDown",parenRightPaddingAdjustment:-1},accSagittalSharp19CUp:{code:"accSagittalSharp19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat19CDown:{code:"accSagittalFlat19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CUp:{code:"accSagittalSharp7v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CDown:{code:"accSagittalFlat7v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp49SUp:{code:"accSagittalSharp49SUp",parenRightPaddingAdjustment:-1},accSagittalFlat49SDown:{code:"accSagittalFlat49SDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SUp:{code:"accSagittalSharp23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat23SDown:{code:"accSagittalFlat23SDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13MUp:{code:"accSagittalSharp5v13MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13MDown:{code:"accSagittalFlat5v13MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19MUp:{code:"accSagittalSharp11v19MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19MDown:{code:"accSagittalFlat11v19MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49MUp:{code:"accSagittalSharp49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat49MDown:{code:"accSagittalFlat49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v49MUp:{code:"accSagittalSharp5v49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v49MDown:{code:"accSagittalFlat5v49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49LUp:{code:"accSagittalSharp49LUp",parenRightPaddingAdjustment:-1},accSagittalFlat49LDown:{code:"accSagittalFlat49LDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19LUp:{code:"accSagittalSharp11v19LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19LDown:{code:"accSagittalFlat11v19LDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13LUp:{code:"accSagittalSharp5v13LUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13LDown:{code:"accSagittalFlat5v13LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23SDown:{code:"accSagittalDoubleSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23SUp:{code:"accSagittalDoubleFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp49SDown:{code:"accSagittalDoubleSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat49SUp:{code:"accSagittalDoubleFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v19CDown:{code:"accSagittalDoubleSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v19CUp:{code:"accSagittalDoubleFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19CDown:{code:"accSagittalDoubleSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19CUp:{code:"accSagittalDoubleFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp11v49CDown:{code:"accSagittalDoubleSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat11v49CUp:{code:"accSagittalDoubleFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp143CDown:{code:"accSagittalDoubleSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat143CUp:{code:"accSagittalDoubleFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17kDown:{code:"accSagittalDoubleSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17kUp:{code:"accSagittalDoubleFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19sDown:{code:"accSagittalDoubleSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19sUp:{code:"accSagittalDoubleFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalShaftUp:{code:"accSagittalShaftUp",parenRightPaddingAdjustment:-1},accSagittalShaftDown:{code:"accSagittalShaftDown",parenRightPaddingAdjustment:-1},accSagittalAcute:{code:"accSagittalAcute",parenRightPaddingAdjustment:-1},accSagittalGrave:{code:"accSagittalGrave",parenRightPaddingAdjustment:-1},accSagittal1MinaUp:{code:"accSagittal1MinaUp",parenRightPaddingAdjustment:-1},accSagittal1MinaDown:{code:"accSagittal1MinaDown",parenRightPaddingAdjustment:-1},accSagittal2MinasUp:{code:"accSagittal2MinasUp",parenRightPaddingAdjustment:-1},accSagittal2MinasDown:{code:"accSagittal2MinasDown",parenRightPaddingAdjustment:-1},accSagittal1TinaUp:{code:"accSagittal1TinaUp",parenRightPaddingAdjustment:-1},accSagittal1TinaDown:{code:"accSagittal1TinaDown",parenRightPaddingAdjustment:-1},accSagittal2TinasUp:{code:"accSagittal2TinasUp",parenRightPaddingAdjustment:-1},accSagittal2TinasDown:{code:"accSagittal2TinasDown",parenRightPaddingAdjustment:-1},accSagittal3TinasUp:{code:"accSagittal3TinasUp",parenRightPaddingAdjustment:-1},accSagittal3TinasDown:{code:"accSagittal3TinasDown",parenRightPaddingAdjustment:-1},accSagittal4TinasUp:{code:"accSagittal4TinasUp",parenRightPaddingAdjustment:-1},accSagittal4TinasDown:{code:"accSagittal4TinasDown",parenRightPaddingAdjustment:-1},accSagittal5TinasUp:{code:"accSagittal5TinasUp",parenRightPaddingAdjustment:-1},accSagittal5TinasDown:{code:"accSagittal5TinasDown",parenRightPaddingAdjustment:-1},accSagittal6TinasUp:{code:"accSagittal6TinasUp",parenRightPaddingAdjustment:-1},accSagittal6TinasDown:{code:"accSagittal6TinasDown",parenRightPaddingAdjustment:-1},accSagittal7TinasUp:{code:"accSagittal7TinasUp",parenRightPaddingAdjustment:-1},accSagittal7TinasDown:{code:"accSagittal7TinasDown",parenRightPaddingAdjustment:-1},accSagittal8TinasUp:{code:"accSagittal8TinasUp",parenRightPaddingAdjustment:-1},accSagittal8TinasDown:{code:"accSagittal8TinasDown",parenRightPaddingAdjustment:-1},accSagittal9TinasUp:{code:"accSagittal9TinasUp",parenRightPaddingAdjustment:-1},accSagittal9TinasDown:{code:"accSagittal9TinasDown",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaUp:{code:"accSagittalFractionalTinaUp",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaDown:{code:"accSagittalFractionalTinaDown",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlat:{code:"accidentalNarrowReversedFlat",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlatAndFlat:{code:"accidentalNarrowReversedFlatAndFlat",parenRightPaddingAdjustment:-1},accidentalWilsonPlus:{code:"accidentalWilsonPlus",parenRightPaddingAdjustment:-1},accidentalWilsonMinus:{code:"accidentalWilsonMinus",parenRightPaddingAdjustment:-1}},X={"a.":{code:"augmentationDot",between_lines:!0},av:{aboveCode:"articStaccatissimoAbove",belowCode:"articStaccatissimoBelow",between_lines:!0},"a>":{aboveCode:"articAccentAbove",belowCode:"articAccentBelow",between_lines:!0},"a-":{aboveCode:"articTenutoAbove",belowCode:"articTenutoBelow",between_lines:!0},"a^":{aboveCode:"articMarcatoAbove",belowCode:"articMarcatoBelow",between_lines:!1},"a+":{code:"pluckedLeftHandPizzicato",between_lines:!1},ao:{aboveCode:"pluckedSnapPizzicatoAbove",belowCode:"pluckedSnapPizzicatoBelow",between_lines:!1},ah:{code:"stringsHarmonic",between_lines:!1},"a@":{aboveCode:"fermataAbove",belowCode:"fermataBelow",between_lines:!1},"a@a":{code:"fermataAbove",between_lines:!1},"a@u":{code:"fermataBelow",between_lines:!1},"a@s":{aboveCode:"fermataShortAbove",belowCode:"fermataShortBelow",between_lines:!1},"a@as":{code:"fermataShortAbove",between_lines:!1},"a@us":{code:"fermataShortBelow",between_lines:!1},"a@l":{aboveCode:"fermataLongAbove",belowCode:"fermataLongBelow",between_lines:!1},"a@al":{code:"fermataLongAbove",between_lines:!1},"a@ul":{code:"fermataLongBelow",between_lines:!1},"a@vl":{aboveCode:"fermataVeryLongAbove",belowCode:"fermataVeryLongBelow",between_lines:!1},"a@avl":{code:"fermataVeryLongAbove",between_lines:!1},"a@uvl":{code:"fermataVeryLongBelow",between_lines:!1},"a|":{code:"stringsUpBow",between_lines:!1},am:{code:"stringsDownBow",between_lines:!1},"a,":{code:"pictChokeCymbal",between_lines:!1}},V={mordent:{code:"ornamentShortTrill"},mordent_inverted:{code:"ornamentMordent"},turn:{code:"ornamentTurn"},turn_inverted:{code:"ornamentTurnSlash"},tr:{code:"ornamentTrill"},upprall:{code:"ornamentPrecompSlideTrillDAnglebert"},downprall:{code:"ornamentPrecompDoubleCadenceUpperPrefix"},prallup:{code:"ornamentPrecompTrillSuffixDandrieu"},pralldown:{code:"ornamentPrecompTrillLowerSuffix"},upmordent:{code:"ornamentPrecompSlideTrillBach"},downmordent:{code:"ornamentPrecompDoubleCadenceUpperPrefixTurn"},lineprall:{code:"ornamentPrecompAppoggTrill"},prallprall:{code:"ornamentTremblement"},scoop:{code:"brassScoop"},doit:{code:"brassDoitMedium"},fall:{code:"brassFallLipShort"},doitLong:{code:"brassLiftMedium"},fallLong:{code:"brassFallRoughMedium"},bend:{code:"brassBend"},plungerClosed:{code:"brassMuteClosed"},plungerOpen:{code:"brassMuteOpen"},flip:{code:"brassFlip"},jazzTurn:{code:"brassJazzTurn"},smear:{code:"brassSmear"}};class z{static currentMusicFont(){if(0===z.MUSIC_FONT_STACK.length)throw new p("NoFonts","The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).");return z.MUSIC_FONT_STACK[0]}static clefProperties(t){if(!t||!(t in H))throw new p("BadArgument","Invalid clef: "+t);return H[t]}static keyProperties(t,e="treble",i){let s={octave_shift:0,duration:"4"};"object"==typeof i&&(s=Object.assign(Object.assign({},s),i));const n=z.sanitizeDuration(s.duration),a=t.split("/");if(a.length<2)throw new p("BadArguments",`First argument must be note/octave or note/octave/glyph-code: ${t}`);const o=a[0].toUpperCase(),r=Y[o];if(!r)throw new p("BadArguments","Invalid key name: "+o);r.octave&&(a[1]=r.octave.toString());let h=parseInt(a[1],10);h-=s.octave_shift;let c=(7*h-28+r.index)/2;c+=z.clefProperties(e).line_shift;let d=0;c<=0&&2*c%2==0&&(d=1),c>=6&&2*c%2==0&&(d=-1);const l=void 0!==r.int_val?12*h+r.int_val:void 0,g=r.code,m=r.shift_right;let _={};if(a.length>2&&a[2]){const t=a[2].toUpperCase();_={code:this.codeNoteHead(t,n)}||{}}return Object.assign({key:o,octave:h,line:c,int_value:l,accidental:r.accidental,code:g,stroke:d,shift_right:m,displaced:!1},_)}static integerToNote(t){if(void 0===t||t<0||t>11)throw new p("BadArguments",`integerToNote() requires an integer in the range [0, 11]: ${t}`);const e={0:"C",1:"C#",2:"D",3:"D#",4:"E",5:"F",6:"F#",7:"G",8:"G#",9:"A",10:"A#",11:"B"}[t];if(!e)throw new p("BadArguments",`Unknown note value for integer: ${t}`);return e}static tabToGlyphProps(t,e=1){let i,s=0,n=0;if("X"===t.toUpperCase()){const t=new Z("accidentalDoubleSharp",z.TABLATURE_FONT_SCALE).getMetrics();if(i="accidentalDoubleSharp",null==t.width||null==t.height)throw new p("InvalidMetrics","Width and height required");s=t.width,n=-t.height/2}else s=z.textWidth(t);return{text:t,code:i,getWidth:()=>s*e,shift_y:n}}static textWidth(t){return 7*t.toString().length}static articulationCodes(t){return X[t]}static accidentalCodes(t){return j[t]}static ornamentCodes(t){return V[t]}static keySignature(t){const e=U[t];if(!e)throw new p("BadKeySignature",`Bad key signature spec: '${t}'`);if(!e.acc)return[];const i={b:[2,.5,2.5,1,3,1.5,3.5],"#":[0,1.5,-.5,1,2.5,.5,2]}[e.acc],s=[];for(let t=0;tZ.getWidth(a,t)}),s)}}z.UNISON=!0,z.SOFTMAX_FACTOR=10,z.STEM_WIDTH=1.5,z.STEM_HEIGHT=35,z.STAVE_LINE_THICKNESS=1,z.RENDER_PRECISION_PLACES=3,z.RESOLUTION=W,z.MUSIC_FONT_STACK=[],z.NOTATION_FONT_SCALE=39,z.TABLATURE_FONT_SCALE=39,z.SLASH_NOTEHEAD_WIDTH=15,z.STAVE_LINE_DISTANCE=10,z.TEXT_HEIGHT_OFFSET_HACK=1,z.accidentalMap=j,z.accidentalColumnsTable={1:{a:[1],b:[1]},2:{a:[1,2]},3:{a:[1,3,2],b:[1,2,1],second_on_bottom:[1,2,3]},4:{a:[1,3,4,2],b:[1,2,3,1],spaced_out_tetrachord:[1,2,1,2]},5:{a:[1,3,5,4,2],b:[1,2,4,3,1],spaced_out_pentachord:[1,2,3,2,1],very_spaced_out_pentachord:[1,2,1,2,1]},6:{a:[1,3,5,6,4,2],b:[1,2,4,5,3,1],spaced_out_hexachord:[1,3,2,1,3,2],very_spaced_out_hexachord:[1,2,1,2,1,2]}},z.unicode={sharp:String.fromCharCode(9839),flat:String.fromCharCode(9837),natural:String.fromCharCode(9838),triangle:String.fromCharCode(9651),"o-with-slash":String.fromCharCode(248),degrees:String.fromCharCode(176),circle:String.fromCharCode(9675)},z.validTypes={n:{name:"note"},r:{name:"rest"},h:{name:"harmonic"},m:{name:"muted"},s:{name:"slash"},g:{name:"ghost"},d:{name:"diamond"},x:{name:"x"},ci:{name:"circled"},cx:{name:"circle x"},sf:{name:"slashed"},sb:{name:"slashed backward"},sq:{name:"square"},tu:{name:"triangle up"},td:{name:"triangle down"}},z.TIME4_4={num_beats:4,beat_value:4,resolution:W};const K={"1/2":{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-z.STEM_HEIGHT,stem_down_extension:-z.STEM_HEIGHT,tabnote_stem_up_extension:-z.STEM_HEIGHT,tabnote_stem_down_extension:-z.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restDoubleWhole",rest:!0,position:"B/5",dot_shiftY:.5},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},1:{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-z.STEM_HEIGHT,stem_down_extension:-z.STEM_HEIGHT,tabnote_stem_up_extension:-z.STEM_HEIGHT,tabnote_stem_down_extension:-z.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restWhole",ledger_code_head:"restWholeLegerLine",rest:!0,position:"D/5",dot_shiftY:.5},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},2:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restHalf",ledger_code_head:"restHalfLegerLine",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},4:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restQuarter",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1.5,line_below:1.5},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},8:{common:{code_head:"",stem:!0,flag:!0,beam_count:1,stem_beam_extension:0,code_flag_upstem:"flag8thUp",code_flag_downstem:"flag8thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest8th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:1},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},16:{common:{code_head:"",beam_count:2,stem_beam_extension:0,stem:!0,flag:!0,code_flag_upstem:"flag16thUp",code_flag_downstem:"flag16thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest16th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:2},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},32:{common:{code_head:"",beam_count:3,stem_beam_extension:7.5,stem:!0,flag:!0,code_flag_upstem:"flag32ndUp",code_flag_downstem:"flag32ndDown",stem_up_extension:9,stem_down_extension:9,tabnote_stem_up_extension:9,tabnote_stem_down_extension:9,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest32nd",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:2},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},64:{common:{code_head:"",beam_count:4,stem_beam_extension:15,stem:!0,flag:!0,code_flag_upstem:"flag64thUp",code_flag_downstem:"flag64thDown",stem_up_extension:13,stem_down_extension:13,tabnote_stem_up_extension:13,tabnote_stem_down_extension:13,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest64th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:3},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},128:{common:{code_head:"",beam_count:5,stem_beam_extension:22.5,stem:!0,flag:!0,code_flag_upstem:"flag128thUp",code_flag_downstem:"flag128thDown",stem_up_extension:22,stem_down_extension:22,tabnote_stem_up_extension:22,tabnote_stem_down_extension:22,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest128th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-2.5,line_above:3,line_below:3},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}}};var $,J;!function(t){t[t.MOVE=0]="MOVE",t[t.LINE=1]="LINE",t[t.QUADRATIC=2]="QUADRATIC",t[t.BEZIER=3]="BEZIER"}($||($={}));class q{constructor(t,e,i){this.point=-1,this.metrics=Z.loadMetrics(t,e,i),this.bbox=Z.getOutlineBoundingBox(this.metrics.outline,this.metrics.scale,this.metrics.x_shift,this.metrics.y_shift),i&&(this.point=Z.lookupFontMetric(this.metrics.font,i,e,"point",-1))}}class Q{constructor(t,e,i,s){this.outline=t,this.originX=e,this.originY=i,this.scale=s,this.i=0,this.precision=1,this.precision=Math.pow(10,z.RENDER_PRECISION_PLACES)}done(){return this.i>=this.outline.length}next(){return Math.round(this.outline[this.i++]*this.precision/this.precision)}nextX(){return Math.round((this.originX+this.outline[this.i++]*this.scale)*this.precision)/this.precision}nextY(){return Math.round((this.originY-this.outline[this.i++]*this.scale)*this.precision)/this.precision}static parse(t){const e=[],i=t.split(" ");let s=0;for(;s{const e=t.getTickContext();n&&t.setStave(n),e.setXOffset(a)}))}}class et{static get NUM_TONES(){return this.canonical_notes.length}static get roots(){return["c","d","e","f","g","a","b"]}static get root_values(){return[0,2,4,5,7,9,11]}static get root_indices(){return{c:0,d:1,e:2,f:3,g:4,a:5,b:6}}static get canonical_notes(){return["c","c#","d","d#","e","f","f#","g","g#","a","a#","b"]}static get diatonic_intervals(){return["unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","octave"]}static get diatonic_accidentals(){return{unison:{note:0,accidental:0},m2:{note:1,accidental:-1},M2:{note:1,accidental:0},m3:{note:2,accidental:-1},M3:{note:2,accidental:0},p4:{note:3,accidental:0},dim5:{note:4,accidental:-1},p5:{note:4,accidental:0},m6:{note:5,accidental:-1},M6:{note:5,accidental:0},b7:{note:6,accidental:-1},M7:{note:6,accidental:0},octave:{note:7,accidental:0}}}static get intervals(){return{u:0,unison:0,m2:1,b2:1,min2:1,S:1,H:1,2:2,M2:2,maj2:2,T:2,W:2,m3:3,b3:3,min3:3,M3:4,3:4,maj3:4,4:5,p4:5,"#4":6,b5:6,aug4:6,dim5:6,5:7,p5:7,"#5":8,b6:8,aug5:8,6:9,M6:9,maj6:9,b7:10,m7:10,min7:10,dom7:10,M7:11,maj7:11,8:12,octave:12}}static get scales(){return{major:[2,2,1,2,2,2,1],minor:[2,1,2,2,1,2,2],ionian:[2,2,1,2,2,2,1],dorian:[2,1,2,2,2,1,2],phyrgian:[1,2,2,2,1,2,2],lydian:[2,2,2,1,2,2,1],mixolydian:[2,2,1,2,2,1,2],aeolian:[2,1,2,2,1,2,2],locrian:[1,2,2,1,2,2,2]}}static get scaleTypes(){return{M:et.scales.major,m:et.scales.minor}}static get accidentals(){return["bb","b","n","#","##"]}static get noteValues(){return{c:{root_index:0,int_val:0},cn:{root_index:0,int_val:0},"c#":{root_index:0,int_val:1},"c##":{root_index:0,int_val:2},cb:{root_index:0,int_val:11},cbb:{root_index:0,int_val:10},d:{root_index:1,int_val:2},dn:{root_index:1,int_val:2},"d#":{root_index:1,int_val:3},"d##":{root_index:1,int_val:4},db:{root_index:1,int_val:1},dbb:{root_index:1,int_val:0},e:{root_index:2,int_val:4},en:{root_index:2,int_val:4},"e#":{root_index:2,int_val:5},"e##":{root_index:2,int_val:6},eb:{root_index:2,int_val:3},ebb:{root_index:2,int_val:2},f:{root_index:3,int_val:5},fn:{root_index:3,int_val:5},"f#":{root_index:3,int_val:6},"f##":{root_index:3,int_val:7},fb:{root_index:3,int_val:4},fbb:{root_index:3,int_val:3},g:{root_index:4,int_val:7},gn:{root_index:4,int_val:7},"g#":{root_index:4,int_val:8},"g##":{root_index:4,int_val:9},gb:{root_index:4,int_val:6},gbb:{root_index:4,int_val:5},a:{root_index:5,int_val:9},an:{root_index:5,int_val:9},"a#":{root_index:5,int_val:10},"a##":{root_index:5,int_val:11},ab:{root_index:5,int_val:8},abb:{root_index:5,int_val:7},b:{root_index:6,int_val:11},bn:{root_index:6,int_val:11},"b#":{root_index:6,int_val:0},"b##":{root_index:6,int_val:1},bb:{root_index:6,int_val:10},bbb:{root_index:6,int_val:9}}}isValidNoteValue(t){return t>=0&&t=0&&t3)throw new p("BadArguments","Invalid note name: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|bb|n|#|##)?$/.exec(e);if(null!==i){return{root:i[1],accidental:i[2]}}throw new p("BadArguments","Invalid note name: "+t)}getKeyParts(t){if(!t||t.length<1)throw new p("BadArguments","Invalid key: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|#)?(mel|harm|m|M)?$/.exec(e);if(null!==i){const t=i[1],e=i[2];let s=i[3];return s||(s="M"),{root:t,accidental:e,type:s}}throw new p("BadArguments",`Invalid key: ${t}`)}getNoteValue(t){const e=et.noteValues[t];if(void 0===e)throw new p("BadArguments",`Invalid note name: ${t}`);return e.int_val}getIntervalValue(t){const e=et.intervals[t];if(void 0===e)throw new p("BadArguments",`Invalid interval name: ${t}`);return e}getCanonicalNoteName(t){if(!this.isValidNoteValue(t))throw new p("BadArguments",`Invalid note value: ${t}`);return et.canonical_notes[t]}getCanonicalIntervalName(t){if(!this.isValidIntervalValue(t))throw new p("BadArguments",`Invalid interval value: ${t}`);return et.diatonic_intervals[t]}getRelativeNoteValue(t,e,i=1){if(1!==i&&-1!==i)throw new p("BadArguments",`Invalid direction: ${i}`);let s=(t+i*e)%et.NUM_TONES;return s<0&&(s+=et.NUM_TONES),s}getRelativeNoteName(t,e){const i=this.getNoteParts(t),s=this.getNoteValue(i.root);let n=e-s;if(Math.abs(n)>et.NUM_TONES-3){let i=1;n>0&&(i=-1);const a=(e+1+(s+1))%et.NUM_TONES*i;if(Math.abs(a)>2)throw new p("BadArguments",`Notes not related: ${t}, ${e})`);n=a}if(Math.abs(n)>2)throw new p("BadArguments",`Notes not related: ${t}, ${e})`);let a=i.root;if(n>0)for(let t=1;t<=n;++t)a+="#";else if(n<0)for(let t=-1;t>=n;--t)a+="b";return a}getScaleTones(t,e){const i=[t];let s=t;for(let n=0;ne.line-t.line));const d=[];let l=0;for(let t=0;td[i+t],a=t=>t.map(n),o=(t,e)=>{const[i,s]=a([t,e]).map((t=>t.line));return i-s},r=(...t)=>t.map(a).every((([t,e])=>!this.checkCollision(t,e))),h=s-i+1;let c,l,m=this.checkCollision(d[i],d[s])?"a":"b";switch(h){case 3:"a"===m&&.5===o(1,2)&&.5!==o(0,1)&&(m="second_on_bottom");break;case 4:r([0,2],[1,3])&&(m="spaced_out_tetrachord");break;case 5:"b"===m&&r([1,3])&&(m="spaced_out_pentachord",r([0,2],[2,4])&&(m="very_spaced_out_pentachord"));break;case 6:r([0,3],[1,4],[2,5])&&(m="spaced_out_hexachord"),r([0,2],[2,4],[1,3],[3,5])&&(m="very_spaced_out_hexachord")}if(h>=7){let e=2,i=!0;for(;!0===i;){i=!1;for(let t=0;t+el?g:l}else for(c=t;c<=s;c++)l=z.accidentalColumnsTable[h][m][c-t],d[c].column=l,g=g>l?g:l;t=s}const m=[],_=[];for(let t=0;t<=g;t++)m[t]=0,_[t]=0;m[0]=n+l,_[0]=n,d.forEach((t=>{t.width>m[t.column]&&(m[t.column]=t.width)}));for(let t=1;t{let e=0;const i=p+t.numAcc;for(;p0?(s=e.flatLine||e.dblSharpLine?2.5:3,t.dblSharpLine&&(i-=.5)):(s=t.flatLine||t.dblSharpLine?2.5:3,e.dblSharpLine&&(i-=.5));const n=Math.abs(i){const e=new E(0,1);t.getTickables().forEach((t=>{if(t.shouldIgnoreTicks())return;const n=s[e.value()];n?n.push(t):(i.push(e.value()),s[e.value()]=[t]),e.add(t.getTicks())}))}));const a=new et;e||(e="C");const o=a.createScaleMap(e),r={};i.forEach((t=>{const e=s[t],i=[],h=t=>{if(!g(t)||t.isRest()||t.shouldIgnoreTicks())return;const e=t;e.keys.forEach(((t,s)=>{const h=a.getNoteParts(t.split("/")[0]),c=t.split("/")[1],d=h.accidental||"n",l=h.root+d;r[h.root+c]||(r[h.root+c]=o[h.root]);const g=r[h.root+c]===l,m=i.indexOf(t)>-1;if(e.getModifiers().forEach(((t,i)=>{n(t)&&t.type==d&&t.getIndex()==s&&e.getModifiers().splice(i,1)})),!g||g&&m){r[h.root+c]=l;const n=new st(d);e.addModifier(n,s),i.push(t)}})),e.getModifiers().forEach((t=>{c(t)&&t.getGraceNotes().forEach(h)}))};e.forEach(h)}))}constructor(t){super(),it("New accidental: ",t),this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:z.NOTATION_FONT_SCALE,parenLeftPadding:2,parenRightPadding:2},this.accidental=z.accidentalCodes(this.type),f(this.accidental,"ArgumentError",`Unknown accidental type: ${t}`),this.cautionary=!1,this.reset()}reset(){const t=this.render_options.font_scale;this.glyph=new Z(this.accidental.code,t),this.glyph.setOriginX(1),this.cautionary&&(this.parenLeft=new Z(z.accidentalCodes("{").code,t),this.parenRight=new Z(z.accidentalCodes("}").code,t),this.parenLeft.setOriginX(1),this.parenRight.setOriginX(1))}getWidth(){if(this.cautionary){const t=f(this.parenLeft),e=f(this.parenRight),i=t.getMetrics().width+e.getMetrics().width+this.render_options.parenLeftPadding+this.render_options.parenRightPadding;return this.glyph.getMetrics().width+i}return this.glyph.getMetrics().width}setNote(t){return f(t,"ArgumentError",`Bad note value: ${t}`),this.note=t,h(t)&&(this.render_options.font_scale=25,this.reset()),this}setAsCautionary(){return this.cautionary=!0,this.render_options.font_scale=28,this.reset(),this}draw(){const{type:t,position:e,index:i,cautionary:s,x_shift:n,y_shift:a,glyph:o,render_options:{parenLeftPadding:r,parenRightPadding:h}}=this,c=this.checkContext(),d=this.checkAttachedNote();this.setRendered();const l=d.getModifierStartXY(e,i);let g=l.x+n;const m=l.y+a;if(it("Rendering: ",t,g,m),s){const t=f(this.parenLeft),e=f(this.parenRight);e.render(c,g,m),g-=e.getMetrics().width,g-=h,g-=this.accidental.parenRightPaddingAdjustment,o.render(c,g,m),g-=o.getMetrics().width,g-=r,t.render(c,g,m)}else o.render(c,g,m)}}st.DEBUG=!1;class nt extends L{static get CATEGORY(){return u.Stem}static get UP(){return 1}static get DOWN(){return-1}static get WIDTH(){return z.STEM_WIDTH}static get HEIGHT(){return z.STEM_HEIGHT}constructor(t){super(),this.stem_up_y_offset=0,this.stem_down_y_offset=0,this.stem_up_y_base_offset=0,this.stem_down_y_base_offset=0,this.x_begin=(null==t?void 0:t.x_begin)||0,this.x_end=(null==t?void 0:t.x_end)||0,this.y_top=(null==t?void 0:t.y_top)||0,this.y_bottom=(null==t?void 0:t.y_bottom)||0,this.stem_extension=(null==t?void 0:t.stem_extension)||0,this.stem_direction=(null==t?void 0:t.stem_direction)||0,this.hide=(null==t?void 0:t.hide)||!1,this.isStemlet=(null==t?void 0:t.isStemlet)||!1,this.stemletHeight=(null==t?void 0:t.stemletHeight)||0,this.renderHeightAdjustment=0,this.setOptions(t)}setOptions(t){this.stem_up_y_offset=(null==t?void 0:t.stem_up_y_offset)||0,this.stem_down_y_offset=(null==t?void 0:t.stem_down_y_offset)||0,this.stem_up_y_base_offset=(null==t?void 0:t.stem_up_y_base_offset)||0,this.stem_down_y_base_offset=(null==t?void 0:t.stem_down_y_base_offset)||0}setNoteHeadXBounds(t,e){return this.x_begin=t,this.x_end=e,this}setDirection(t){this.stem_direction=t}setExtension(t){this.stem_extension=t}getExtension(){return this.stem_extension}setYBounds(t,e){this.y_top=t,this.y_bottom=e}getHeight(){const t=this.stem_direction===nt.UP?this.stem_up_y_offset:this.stem_down_y_offset;return(this.y_bottom-this.y_top+(nt.HEIGHT-t+this.stem_extension))*this.stem_direction}getBoundingBox(){throw new p("NotImplemented","getBoundingBox() not implemented.")}getExtents(){const t=this.stem_direction===nt.UP,e=[this.y_top,this.y_bottom],i=nt.HEIGHT+this.stem_extension,s=(t?Math.min:Math.max)(...e),n=(t?Math.max:Math.min)(...e);return{topY:s+i*-this.stem_direction,baseY:n}}setVisibility(t){return this.hide=!t,this}setStemlet(t,e){return this.isStemlet=t,this.stemletHeight=e,this}adjustHeightForFlag(){this.renderHeightAdjustment=z.currentMusicFont().lookupMetric("stem.heightAdjustmentForFlag",-3)}adjustHeightForBeam(){this.renderHeightAdjustment=-nt.WIDTH/2}draw(){if(this.setRendered(),this.hide)return;const t=this.checkContext();let e,i;const s=this.stem_direction;let n=0;s===nt.DOWN?(e=this.x_begin,i=this.y_top+this.stem_down_y_offset,n=this.stem_down_y_base_offset):(e=this.x_end,i=this.y_bottom-this.stem_up_y_offset,n=this.stem_up_y_base_offset);const a=this.getHeight();!function(...t){nt.DEBUG&&S("Vex.Flow.Stem",t)}("Rendering stem - ","Top Y: ",this.y_top,"Bottom Y: ",this.y_bottom);const o=this.isStemlet?a-this.stemletHeight*this.stem_direction:0;t.save(),this.applyStyle(),t.openGroup("stem",this.getAttribute("id"),{pointerBBox:!0}),t.beginPath(),t.setLineWidth(nt.WIDTH),t.moveTo(e,i-o+n),t.lineTo(e,i-a-this.renderHeightAdjustment*s),t.stroke(),t.closeGroup(),this.restoreStyle(),t.restore()}}function at(...t){ct.DEBUG&&S("Vex.Flow.TextFormatter",t)}nt.DEBUG=!1;const ot={},rt={},ht={};class ct{static getFontFamilies(){const t=[];for(const e in ht){const i=ht[e];t.push(Object.assign({},i))}return t}static create(t={}){at("create: ",t),t.family||(t.family=M.SANS_SERIF);const e=[],i=t.family.split(/\s*,\s*/);for(const t of i){for(const i in ht)i.startsWith(t)&&e.push(ht[i]);if(e.length>0)break}let s;if(0===e.length)s=new ct(Object.values(ht)[0]);else if(1===e.length)s=new ct(e[0]);else{const i=M.isBold(t.weight),n=M.isItalic(t.style),a=e.find((t=>t.bold===i&&t.italic===n));if(a)s=new ct(a);else{const t=e.find((t=>t.italic===n||t.bold===i));s=new ct(t||e[0])}}const n=t.size;if(void 0!==n){const t=M.convertSizeToPointValue(n);s.setFontSize(t)}return s}static getInfo(t){return ht[t]}static registerInfo(t,e=!1){at("registerInfo: ",t,e);const i=t.family;(void 0===ht[i]||e)&&(ht[i]=t)}constructor(t){this.family="",this.size=14,this.resolution=1e3,this.glyphs={},this.serifs=!1,this.monospaced=!1,this.italic=!1,this.bold=!1,this.superscriptOffset=0,this.subscriptOffset=0,this.maxSizeGlyph="@",this.cacheKey="",this.updateParams(t)}get localHeightCache(){var t;return void 0===rt[this.cacheKey]&&(rt[this.cacheKey]={}),null!==(t=rt[this.cacheKey])&&void 0!==t?t:{}}updateParams(t){t.family&&(this.family=t.family),t.resolution&&(this.resolution=t.resolution),t.glyphs&&(this.glyphs=t.glyphs),t.serifs&&(this.serifs=t.serifs),t.monospaced&&(this.monospaced=t.monospaced),t.italic&&(this.italic=t.italic),t.bold&&(this.bold=t.bold),t.maxSizeGlyph&&(this.maxSizeGlyph=t.maxSizeGlyph),t.superscriptOffset&&(this.superscriptOffset=t.superscriptOffset),t.subscriptOffset&&(this.subscriptOffset=t.subscriptOffset),this.updateCacheKey()}updateCacheKey(){const t=this.family.replace(/\s+/g,"_"),e=this.size,i=this.bold?P.BOLD:P.NORMAL,s=this.italic?A.ITALIC:A.NORMAL;this.cacheKey=`${t}%${e}%${i}%${s}`}getGlyphMetrics(t){return this.glyphs[t]?this.glyphs[t]:this.glyphs[this.maxSizeGlyph]}get maxHeight(){return this.getGlyphMetrics(this.maxSizeGlyph).ha/this.resolution*this.fontSizeInPixels}getWidthForCharacterInEm(t){var e;const i=this.getGlyphMetrics(t);if(i){return(null!==(e=i.advanceWidth)&&void 0!==e?e:0)/this.resolution}return.65}getYForCharacterInPx(t){const e=this.getGlyphMetrics(t),i={yMin:0,yMax:this.maxHeight,height:this.maxHeight};return e?("number"==typeof e.y_min&&(i.yMin=e.y_min/this.resolution*this.fontSizeInPixels),"number"==typeof e.y_max&&(i.yMax=e.y_max/this.resolution*this.fontSizeInPixels),i.height=i.yMax-i.yMin,i):i}getYForStringInPx(t){const e=this.localHeightCache,i={yMin:0,yMax:this.maxHeight,height:this.maxHeight},s=e[t];if(void 0!==s)return s;for(let e=0;et>e?t:e)),h+=(this.text_line+1)*z.STAVE_LINE_DISTANCE+o,l&&i===nt.DOWN&&(h=Math.max(h,c.topY+o+d*this.text_line))}else if(this.verticalJustification===lt.CENTER){const t=e.getYForTopText(this.text_line)-1;h=t+(g.getYForBottomText(this.text_line)-t)/2+o/2}else if(this.verticalJustification===lt.TOP){h=Math.min(...e.getYs())-(this.text_line+1)*z.STAVE_LINE_DISTANCE,l&&i===nt.UP&&(d=c.topY=1}function xt(t,e){return pt(t,e)?e===mt?Math.ceil:Math.floor:Math.round}const ft=t=>g(t)||h(t);class St extends tt{static get CATEGORY(){return u.Articulation}static format(t,e){if(!t||0===t.length)return!1;let i=0;const s=(t,e,i)=>ut(xt(e,i),f(t.glyph.getMetrics().height)/10+.5);t.forEach((t=>{const n=t.checkAttachedNote();i=Math.max(n.getGlyphProps().getWidth(),i);let a=5;const o=n.hasStem()?n.getStemDirection():nt.UP;let r=0;if(m(n)){const t=n.getStem();t&&(r=Math.abs(t.getHeight())/z.STAVE_LINE_DISTANCE)}const h=n.getStave();if(h&&(a=h.getNumLines()),t.getPosition()===mt){let i=n.getLineNumber(!0);o===nt.UP&&(i+=r);let h=s(t,e.top_text_line,mt);const c=i+e.top_text_line+.5;!t.articulation.between_lines&&ct.getWidth())).reduce(((t,e)=>Math.max(e,t))),a=Math.min(Math.max(n-i,0),Math.max(n-(e.left_shift+e.right_shift),0));return e.left_shift+=a/2,e.right_shift+=a/2,!0}static easyScoreHook({articulations:t},e,i){if(!t)return;const s={staccato:"a.",tenuto:"a-",accent:"a>"};t.split(",").map((t=>t.trim().split("."))).map((([t,e])=>{const n={type:s[t]};return e&&(n.position=tt.PositionString[e]),i.getFactory().Articulation(n)})).map((t=>e.addModifier(t,0)))}constructor(t){super(),this.type=t,this.position=mt,this.render_options={font_scale:z.NOTATION_FONT_SCALE},this.reset()}reset(){this.articulation=z.articulationCodes(this.type),this.articulation||(this.articulation={code:this.type,between_lines:!1},this.type.endsWith("Above")&&(this.position=mt),this.type.endsWith("Below")&&(this.position=_t));const t=(this.position===mt?this.articulation.aboveCode:this.articulation.belowCode)||this.articulation.code;this.glyph=new Z(null!=t?t:"",this.render_options.font_scale),f(this.glyph,"ArgumentError",`Articulation not found: ${this.type}`),this.setWidth(f(this.glyph.getMetrics().width))}setBetweenLines(t=!0){return this.articulation.between_lines=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=this.checkIndex(),{position:s,glyph:n,text_line:a}=this,o=this.articulation.between_lines,r=e.checkStave(),h=r.getSpacingBetweenLines(),c=_(e),{x:d}=e.getModifierStartXY(s,i),l=!o||c,g=function(t,e){const i=e===mt&&t.getStemDirection()===nt.UP||e===_t&&t.getStemDirection()===nt.DOWN;return ft(t)?t.hasStem()&&i?.5:1:t.hasStem()&&i?1:0}(e,s),m=z.currentMusicFont().lookupMetric(`articulation.${n.getCode()}.padding`,0);let u={[mt]:()=>{n.setOrigin(.5,1);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(ft(t))return t.hasStem()?i===nt.UP?s:n:Math.min(...t.getYs());if(_(t))return t.hasStem()&&i===nt.UP?s:t.checkStave().getYForTopText(e);throw new p("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)-(a+g)*h;return l?Math.min(r.getYForTopText(St.INITIAL_OFFSET),t):t},[_t]:()=>{n.setOrigin(.5,0);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(ft(t))return t.hasStem()?i===nt.UP?n:s:Math.max(...t.getYs());if(_(t))return t.hasStem()?i===nt.UP?t.checkStave().getYForBottomText(e):s:t.checkStave().getYForBottomText(e);throw new p("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)+(a+g)*h;return l?Math.max(r.getYForBottomText(St.INITIAL_OFFSET),t):t}}[s]();if(!c){const t=s===mt?-1:1,a=e.getKeyProps()[i].line,r=(e.getYs()[i]-u)/h+Number(a),c=function(t,e,i,s){const n=ut(xt(e,i),e);if(t&&pt(n,i)&&n%1==0)return n+.5*-s;return n}(o,r,s,t);pt(c,s)&&n.setOrigin(.5,.5),u+=Math.abs(c-r)*h*t+m*t}!function(...t){St.DEBUG&&S("Vex.Flow.Articulation",t)}(`Rendering articulation at (x: ${d}, y: ${u})`),n.render(t,d,u)}}St.DEBUG=!1,St.INITIAL_OFFSET=-.5;class yt{static get CATEGORY(){return u.RenderContext}set font(t){this.setFont(t)}get font(){return this.getFont()}setRawFont(t){return this.setFont(t),this}}function Tt(t,e,i,s="#F55"){t.save(),t.setFillStyle(s),t.beginPath(),t.arc(e,i,3,0,2*Math.PI,!1),t.closePath(),t.fill(),t.restore()}class vt extends L{static get CATEGORY(){return u.Tickable}constructor(){super(),this._preFormatted=!1,this._postFormatted=!1,this.ticks=new E(0,1),this.intrinsicTicks=0,this.tickMultiplier=new E(1,1),this.width=0,this.x_shift=0,this.modifiers=[],this.tupletStack=[],this.align_center=!1,this.center_x_shift=0,this.ignore_ticks=!1,this.formatterMetrics={freedom:{left:0,right:0},duration:"",iterations:0,space:{used:0,mean:0,deviation:0}}}reset(){return this}getTicks(){return this.ticks}shouldIgnoreTicks(){return this.ignore_ticks}setIgnoreTicks(t){return this.ignore_ticks=t,this}setWidth(t){this.width=t}getWidth(){if(!this._preFormatted)throw new p("UnformattedNote","Can't call GetWidth on an unformatted note.");return this.width+(this.modifierContext?this.modifierContext.getWidth():0)}setXShift(t){return this.x_shift=t,this}getXShift(){return this.x_shift}getX(){return this.checkTickContext("Can't getX() without a TickContext.").getX()+this.x_shift}getFormatterMetrics(){return this.formatterMetrics}getCenterXShift(){return this.isCenterAligned()?this.center_x_shift:0}setCenterXShift(t){return this.center_x_shift=t,this}isCenterAligned(){return this.align_center}setCenterAlignment(t){return this.align_center=t,this}getVoice(){return f(this.voice,"NoVoice","Tickable has no voice.")}setVoice(t){this.voice=t}getTuplet(){return this.tuplet}getTupletStack(){return this.tupletStack}resetTuplet(t){let e,i;if(t){const s=this.tupletStack.indexOf(t);return-1!==s&&(this.tupletStack.splice(s,1),e=t.getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i)),this}for(;this.tupletStack.length;)e=(t=this.tupletStack.pop()).getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i);return this}setTuplet(t){if(t){this.tupletStack.push(t);const e=t.getNoteCount(),i=t.getNotesOccupied();this.applyTickMultiplier(i,e)}return this.tuplet=t,this}addToModifierContext(t){this.modifierContext=t;for(let t=0;t0){const s=_.space.deviation,n=s>=0?"+":"";t.setFillStyle("red"),t.fillText(n+Math.round(s),o+e.getXShift(),i-10)}t.restore()}static parseDuration(t){if(!t)return;const e=/(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/.exec(t);if(!e)return;return{duration:e[1],dots:e[2].length,type:e[3]||"n"}}static parseNoteStruct(t){const e=bt.parseDuration(t.duration);if(!e)return;let i=t.type;if(i&&!z.validTypes[i])return;const s=[];i||(i=e.type||"n",void 0!==t.keys&&t.keys.forEach(((t,e)=>{const n=t.split("/");s[e]=n&&3===n.length?n[2]:i})));let n=z.durationToTicks(e.duration);if(!n)return;const a=t.dots?t.dots:e.dots;if("number"!=typeof a)return;let o=n;for(let t=0;tz.getGlyphProps(this.duration,t))),this.playNote=void 0,this.ignore_ticks=!1,this.width=0,this.leftDisplacedHeadPx=0,this.rightDisplacedHeadPx=0,this.x_shift=0,this.ys=[],t.align_center&&this.setCenterAlignment(t.align_center),this.render_options={annotation_spacing:5,glyph_font_scale:1,stroke_px:1,scale:1,font:"",y_shift:0}}getPlayNote(){return this.playNote}setPlayNote(t){return this.playNote=t,this}isRest(){return!1}addStroke(t,e){return e.setNote(this),e.setIndex(t),this.modifiers.push(e),this.preFormatted=!1,this}getStave(){return this.stave}checkStave(){return f(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this.setYs([t.getYForLine(0)]),this.setContext(this.stave.getContext()),this}getLeftDisplacedHeadPx(){return this.leftDisplacedHeadPx}getRightDisplacedHeadPx(){return this.rightDisplacedHeadPx}setLeftDisplacedHeadPx(t){return this.leftDisplacedHeadPx=t,this}setRightDisplacedHeadPx(t){return this.rightDisplacedHeadPx=t,this}shouldIgnoreTicks(){return this.ignore_ticks}getLineNumber(t){return 0}getLineForRest(){return 0}getGlyph(){return this.glyphProps}getGlyphProps(){return this.glyphProps}getGlyphWidth(){return this.glyphProps.getWidth(this.render_options.glyph_font_scale)}setYs(t){return this.ys=t,this}getYs(){if(0===this.ys.length)throw new p("NoYValues","No Y-values calculated for this note.");return this.ys}getYForTopText(t){return this.checkStave().getYForTopText(t)}getVoice(){if(!this.voice)throw new p("NoVoice","Note has no voice.");return this.voice}setVoice(t){return this.voice=t,this.preFormatted=!1,this}getTickContext(){return this.checkTickContext()}setTickContext(t){return this.tickContext=t,this.preFormatted=!1,this}getDuration(){return this.duration}isDotted(){return this.getModifiersByType(u.Dot).length>0}hasStem(){return!1}getNoteType(){return this.noteType}getBeam(){return this.beam}checkBeam(){return f(this.beam,"NoBeam","No beam attached to instance")}hasBeam(){return null!=this.beam}setBeam(t){return this.beam=t,this}addModifier(t,e=0){const i="Note.addModifier(modifier: Modifier, index: number=0)";if("string"==typeof e&&(e=parseInt(e),console.warn(i+" expected a number for `index`, but received a string.")),"object"!=typeof t||"number"!=typeof e)throw new p("WrongParams","Incorrect call signature. Use "+i+" instead.");return t.setNote(this),t.setIndex(e),super.addModifier(t),this}getModifiersByType(t){return this.modifiers.filter((e=>e.getCategory()===t))}getModifierStartXY(t,e,i){if(!this.preFormatted)throw new p("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");return{x:this.getAbsoluteX(),y:this.ys[0]}}getRightParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getRightDisplacedHeadPx():0}getLeftParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getLeftDisplacedHeadPx()-this.x_shift:-this.x_shift}getFirstDotPx(){let t=this.getRightDisplacedHeadPx();return 0!==this.checkModifierContext().getMembers("Parenthesis").length&&(t+=z.currentMusicFont().lookupMetric("parenthesis.default.width")),t}getMetrics(){if(!this.preFormatted)throw new p("UnformattedNote","Can't call getMetrics on an unformatted note.");const t=this.modifierContext?this.modifierContext.getState().left_shift:0,e=this.modifierContext?this.modifierContext.getState().right_shift:0,i=this.getWidth();return{width:i,glyphWidth:this.getGlyphWidth(),notePx:i-t-e-this.leftDisplacedHeadPx-this.rightDisplacedHeadPx,modLeftPx:t,modRightPx:e,leftDisplacedHeadPx:this.leftDisplacedHeadPx,rightDisplacedHeadPx:this.rightDisplacedHeadPx,glyphPx:0}}getAbsoluteX(){let t=this.checkTickContext("Can't getAbsoluteX() without a TickContext.").getX();return this.stave&&(t+=this.stave.getNoteStartX()+z.currentMusicFont().lookupMetric("stave.padding")),this.isCenterAligned()&&(t+=this.getCenterXShift()),t}static getPoint(t){return"default"==t?z.NOTATION_FONT_SCALE:z.NOTATION_FONT_SCALE/5*3}getStemDirection(){throw new p("NoStem","No stem attached to this note.")}getStemExtents(){throw new p("NoStem","No stem attached to this note.")}getTieRightX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t+=-this.width/2+this.width+2,t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t-=this.width/2+2,t}getKeys(){return this.keys}getKeyProps(){return this.keyProps}}var wt,Et,Bt,Ct,Nt,Pt;!function(t){t[t.CENTER=0]="CENTER",t[t.LEFT=1]="LEFT",t[t.RIGHT=2]="RIGHT",t[t.ABOVE=3]="ABOVE",t[t.BELOW=4]="BELOW",t[t.BEGIN=5]="BEGIN",t[t.END=6]="END"}(wt||(wt={}));class At extends L{static get CATEGORY(){return u.StaveModifier}static get Position(){return wt}constructor(){super(),this.width=0,this.x=0,this.padding=10,this.position=wt.ABOVE}getPosition(){return this.position}setPosition(t){return this.position=t,this}getStave(){return this.stave}checkStave(){return f(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this}getWidth(){return this.width}setWidth(t){return this.width=t,this}getX(){return this.x}setX(t){return this.x=t,this}placeGlyphOnLine(t,e,i,s=0){t.setYShift(e.getYForLine(null!=i?i:0)-e.getYForGlyphs()+s)}getPadding(t){return void 0!==t&&t<2?0:this.padding}setPadding(t){return this.padding=t,this}setLayoutMetrics(t){return this.layoutMetrics=t,this}getLayoutMetrics(){return this.layoutMetrics}draw(...t){}}!function(t){t[t.SINGLE=1]="SINGLE",t[t.DOUBLE=2]="DOUBLE",t[t.END=3]="END",t[t.REPEAT_BEGIN=4]="REPEAT_BEGIN",t[t.REPEAT_END=5]="REPEAT_END",t[t.REPEAT_BOTH=6]="REPEAT_BOTH",t[t.NONE=7]="NONE"}(Et||(Et={}));class kt extends At{static get CATEGORY(){return u.Barline}static get type(){return Et}static get typeString(){return{single:Et.SINGLE,double:Et.DOUBLE,end:Et.END,repeatBegin:Et.REPEAT_BEGIN,repeatEnd:Et.REPEAT_END,repeatBoth:Et.REPEAT_BOTH,none:Et.NONE}}constructor(t){super(),this.thickness=z.STAVE_LINE_THICKNESS;const e=Et;this.widths={},this.widths[e.SINGLE]=5,this.widths[e.DOUBLE]=5,this.widths[e.END]=5,this.widths[e.REPEAT_BEGIN]=5,this.widths[e.REPEAT_END]=5,this.widths[e.REPEAT_BOTH]=5,this.widths[e.NONE]=5,this.paddings={},this.paddings[e.SINGLE]=0,this.paddings[e.DOUBLE]=0,this.paddings[e.END]=0,this.paddings[e.REPEAT_BEGIN]=15,this.paddings[e.REPEAT_END]=15,this.paddings[e.REPEAT_BOTH]=15,this.paddings[e.NONE]=0,this.layoutMetricsMap={},this.layoutMetricsMap[e.SINGLE]={xMin:0,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.DOUBLE]={xMin:-3,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.END]={xMin:-5,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_END]={xMin:-10,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BEGIN]={xMin:-2,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BOTH]={xMin:-10,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.NONE]={xMin:0,xMax:0,paddingLeft:5,paddingRight:5},this.setPosition(wt.BEGIN),this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?kt.typeString[t]:t,this.setWidth(this.widths[this.type]),this.setPadding(this.paddings[this.type]),this.setLayoutMetrics(this.layoutMetricsMap[this.type]),this}draw(t){const e=t.checkContext();switch(this.setRendered(),this.applyStyle(e),e.openGroup("stavebarline",this.getAttribute("id")),this.type){case Et.SINGLE:this.drawVerticalBar(t,this.x,!1);break;case Et.DOUBLE:this.drawVerticalBar(t,this.x,!0);break;case Et.END:this.drawVerticalEndBar(t,this.x);break;case Et.REPEAT_BEGIN:this.drawRepeatBar(t,this.x,!0),t.getX()!==this.x&&this.drawVerticalBar(t,t.getX());break;case Et.REPEAT_END:this.drawRepeatBar(t,this.x,!1);break;case Et.REPEAT_BOTH:this.drawRepeatBar(t,this.x,!1),this.drawRepeatBar(t,this.x,!0)}e.closeGroup(),this.restoreStyle(e)}drawVerticalBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();i&&s.fillRect(e-3,n,1,a-n),s.fillRect(e,n,1,a-n)}drawVerticalEndBar(t,e){const i=t.checkContext(),s=t.getTopLineTopY(),n=t.getBottomLineBottomY();i.fillRect(e-5,s,1,n-s),i.fillRect(e-2,s,3,n-s)}drawRepeatBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();let o=3;i||(o=-5),s.fillRect(e+o,n,1,a-n),s.fillRect(e-2,n,3,a-n);i?o+=4:o-=4;const r=e+o+1;let h=(t.getNumLines()-1)*t.getSpacingBetweenLines();h=h/2-t.getSpacingBetweenLines()/2;let c=n+h+1;s.beginPath(),s.arc(r,c,2,0,2*Math.PI,!1),s.fill(),c+=t.getSpacingBetweenLines(),s.beginPath(),s.arc(r,c,2,0,2*Math.PI,!1),s.fill()}}class Dt extends bt{static get CATEGORY(){return u.BarNote}constructor(t=Et.SINGLE){super({duration:"b"}),this.metrics={widths:{}};const e=Et;this.metrics.widths={[e.SINGLE]:8,[e.DOUBLE]:12,[e.END]:15,[e.REPEAT_BEGIN]:14,[e.REPEAT_END]:14,[e.REPEAT_BOTH]:18,[e.NONE]:0},this.ignore_ticks=!0,this.setType(t),this.barline=new kt(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?kt.typeString[t]:t,this.setWidth(this.metrics.widths[this.type]),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkContext();!function(...t){Dt.DEBUG&&S("Vex.Flow.BarNote",t)}("Rendering bar line at: ",this.getAbsoluteX()),this.applyStyle(t),t.openGroup("barnote",this.getAttribute("id")),this.barline.setType(this.type),this.barline.setX(this.getAbsoluteX()),this.barline.draw(this.checkStave()),t.closeGroup(),this.restoreStyle(t),this.setRendered()}}Dt.DEBUG=!1;class Ft extends tt{static get CATEGORY(){return u.Bend}static get UP(){return 0}static get DOWN(){return 1}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let s=0;st{const a=t+s,o=i;e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,i),e.quadraticCurveTo(a,o,t+s,n),e.stroke(),e.restore()},d=(t,i,s,n)=>{e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,n),e.quadraticCurveTo(t+s,n,t+s,i),e.stroke(),e.restore()},l=(t,i,s)=>{const n=i+4*s;e.beginPath(),e.moveTo(t,i),e.lineTo(t-4,n),e.lineTo(t+4,n),e.closePath(),e.fill()},g=(t,i)=>{e.save(),e.setFont(this.textFont);const s=t-e.measureText(i).width/2;e.fillText(i,s,h),e.restore()};let m,_=0,u=0;if(null===(t=this.tap)||void 0===t?void 0:t.length){g(i.getModifierStartXY(tt.Position.CENTER,this.index).x,this.tap)}for(let t=0;t0){const e=c.symbolBlocks[t-1];Rt.isSuperscript(e)||(n=s)}a&&n>0&&(p=!0,e.xShift=e.xShift+(n-s),s=n,n=0,c.setEnableKerning(!1)),i||a||(n=0),e.vAlign=p,s+=e.width,_=s}if(c.updateKerningAdjustments(),c.updateOverBarAdjustments(),c.getVertical()===Ct.TOP?(c.setTextLine(e.top_text_line),e.top_text_line+=u):(c.setTextLine(e.text_line+1),e.text_line+=u+1),c.getReportWidth()&&m(g)){const t=g.getGlyphProps().getWidth();c.getHorizontal()===Bt.LEFT?(r=Math.max(t,r),a=Math.max(a,_)+Rt.minPadding):c.getHorizontal()===Bt.RIGHT?(h=Math.max(t,h),o=Math.max(o,_)):(a=Math.max(a,_/2)+Rt.minPadding,o=Math.max(o,_/2),r=Math.max(t/2,r),h=Math.max(t/2,h))}s=0}const c=Math.min(Math.max(o-h,0),Math.max(o-e.right_shift,0)),d=Math.min(Math.max(a-r,0),Math.max(a-e.left_shift,0));return e.left_shift+=d,e.right_shift+=c,!0}constructor(){super(),this.symbolBlocks=[],this.horizontal=Bt.LEFT,this.vertical=Ct.TOP,this.useKerning=!0,this.reportWidth=!0,this.resetFont()}static get TEXT_FONT(){let t="Roboto Slab, Times, serif";return"Petaluma"===z.currentMusicFont().getName()&&(t="PetalumaScript, Arial, sans-serif"),{family:t,size:12,weight:P.NORMAL,style:A.NORMAL}}get superscriptOffset(){return Rt.superscriptOffset*this.textFormatter.fontSizeInPixels}get subscriptOffset(){return Rt.subscriptOffset*this.textFormatter.fontSizeInPixels}setReportWidth(t){return this.reportWidth=t,this}getReportWidth(){return this.reportWidth}updateOverBarAdjustments(){const t=this.symbolBlocks.findIndex((({symbolType:t,glyph:e})=>t===Nt.GLYPH&&void 0!==e&&"csymDiagonalArrangementSlash"===e.code));if(t<0)return;const e=this.symbolBlocks[t].width/4,i=.25*this.textFormatter.fontSizeInPixels;let s=0;for(;s0?this.symbolBlocks[t-1]:void 0;let s=0;e.symbolType===Nt.GLYPH&&void 0!==e.glyph&&e.glyph.code===Rt.glyphs.over.code&&(s+=e.glyph.metrics.x_shift),void 0!==i&&i.symbolType===Nt.GLYPH&&void 0!==i.glyph&&i.glyph.code===Rt.glyphs.over.code&&(s+=i.glyph.metrics.x_shift);let n=!1,a=!1;void 0!==i&&i.symbolType===Nt.TEXT&&(n=Rt.upperKerningText.some((t=>t===i.text[i.text.length-1])),a=Rt.lowerKerningText.some((t=>t===i.text[i.text.length-1])));const o=Rt.kerningOffset*this.textFormatter.fontSizeInPixels;return n&&e.symbolModifier===Pt.SUPERSCRIPT&&(s+=o),a&&e.symbolType===Nt.TEXT&&(e.text[0]>="a"&&e.text[0]<="z"&&(s+=o/2),Rt.upperKerningText.some((t=>t===(null==i?void 0:i.text[i.text.length-1])))&&(s+=o/2)),s}getSymbolBlock(t={}){var e,i,s;const n=null!==(e=t.symbolType)&&void 0!==e?e:Nt.TEXT,a={text:null!==(i=t.text)&&void 0!==i?i:"",symbolType:n,symbolModifier:null!==(s=t.symbolModifier)&&void 0!==s?s:Pt.NONE,xShift:0,yShift:0,vAlign:!1,width:0};if(n===Nt.GLYPH&&"string"==typeof t.glyph){const e=Rt.glyphs[t.glyph],i=20;a.glyph=new Z(e.code,i,{category:"chordSymbol"})}else n===Nt.TEXT?a.width=this.textFormatter.getWidthForTextInEm(a.text):n===Nt.LINE&&(a.width=t.width);return a}addSymbolBlock(t){return this.symbolBlocks.push(this.getSymbolBlock(t)),this}addText(t,e={}){const i=Nt.TEXT;return this.addSymbolBlock(Object.assign(Object.assign({},e),{text:t,symbolType:i}))}addTextSuperscript(t){const e=Nt.TEXT,i=Pt.SUPERSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addTextSubscript(t){const e=Nt.TEXT,i=Pt.SUBSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addGlyphSuperscript(t){const e=Nt.GLYPH,i=Pt.SUPERSCRIPT;return this.addSymbolBlock({glyph:t,symbolType:e,symbolModifier:i})}addGlyph(t,e={}){const i=Nt.GLYPH;return this.addSymbolBlock(Object.assign(Object.assign({},e),{glyph:t,symbolType:i}))}addGlyphOrText(t,e={}){let i="";for(let s=0;s0&&(this.addText(i,e),i=""),this.addGlyph(n,e)):i+=n}return i.length>0&&this.addText(i,e),this}addLine(t,e={}){const i=Nt.LINE;return this.addSymbolBlock(Object.assign(Object.assign({},e),{symbolType:i,width:t}))}setFont(t,e,i,s){return super.setFont(t,e,i,s),this.textFormatter=ct.create(this.textFont),this}setEnableKerning(t){return this.useKerning=t,this}setVertical(t){return this.vertical="string"==typeof t?Rt.VerticalJustifyString[t]:t,this}getVertical(){return this.vertical}setHorizontal(t){return this.horizontal="string"==typeof t?Rt.HorizontalJustifyString[t]:t,this}getHorizontal(){return this.horizontal}getWidth(){let t=0;return this.symbolBlocks.forEach((e=>{t+=e.vAlign?0:e.width})),t}getYOffsetForText(t){var e;let i=0,s=0;for(s=0;s0?i/n*-1:0}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),t.save(),this.applyStyle(),t.openGroup("chordsymbol",this.getAttribute("id"));const i=e.getModifierStartXY(tt.Position.ABOVE,this.index);let s;t.setFont(this.textFont);const n=e.hasStem(),a=e.checkStave();if(this.vertical===Ct.BOTTOM){if(s=a.getYForBottomText(this.text_line+z.TEXT_HEIGHT_OFFSET_HACK),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines(),n=1===e.getStemDirection()?t.baseY:t.topY;s=Math.max(s,n+i*(this.text_line+2))}}else{const t=Math.min(...e.getYs());if(s=Math.min(a.getYForTopText(this.text_line),t-10),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines();s=Math.min(s,t.topY-5-i*this.text_line)}}let o=i.x;o=this.horizontal===Bt.LEFT?i.x:this.horizontal===Bt.RIGHT?i.x+this.getWidth():this.horizontal===Bt.CENTER?i.x-this.getWidth()/2:e.getStemX()-this.getWidth()/2,Mt("Rendering ChordSymbol: ",this.textFormatter,o,s),this.symbolBlocks.forEach((e=>{const i=Rt.isSuperscript(e),n=Rt.isSubscript(e);let a=s;if(Mt("shift was ",e.xShift,e.yShift),Mt("curY pre sub ",a),i&&(a+=this.superscriptOffset),n&&(a+=this.subscriptOffset),Mt("curY sup/sub ",a),e.symbolType===Nt.TEXT){if((i||n)&&(t.save(),this.textFont)){const{family:e,size:i,weight:s,style:n}=this.textFont,a=M.scaleSize(i,Rt.superSubRatio);t.setFont(e,a,s,n)}Mt("Rendering Text: ",e.text,o+e.xShift,a+e.yShift),t.fillText(e.text,o+e.xShift,a+e.yShift),(i||n)&&t.restore()}else e.symbolType===Nt.GLYPH&&e.glyph?(a+=e.yShift,Mt("Rendering Glyph: ",e.glyph.code,o+e.xShift,a),e.glyph.render(t,o+e.xShift,a)):e.symbolType===Nt.LINE&&(Mt("Rendering Line : ",e.width,o,a),t.beginPath(),t.setLineWidth(1),t.moveTo(o,s),t.lineTo(o+e.width,a),t.stroke());o+=e.width,e.vAlign&&(o+=e.xShift)})),t.closeGroup(),this.restoreStyle(),t.restore()}}Rt.DEBUG=!1,Rt.HorizontalJustify=Bt,Rt.HorizontalJustifyString={left:Bt.LEFT,right:Bt.RIGHT,center:Bt.CENTER,centerStem:Bt.CENTER_STEM},Rt.VerticalJustify=Ct,Rt.VerticalJustifyString={top:Ct.TOP,above:Ct.TOP,below:Ct.BOTTOM,bottom:Ct.BOTTOM},Rt.glyphs={diminished:{code:"csymDiminished"},dim:{code:"csymDiminished"},halfDiminished:{code:"csymHalfDiminished"},"+":{code:"csymAugmented"},augmented:{code:"csymAugmented"},majorSeventh:{code:"csymMajorSeventh"},minor:{code:"csymMinor"},"-":{code:"csymMinor"},"(":{code:"csymParensLeftTall"},leftParen:{code:"csymParensLeftTall"},")":{code:"csymParensRightTall"},rightParen:{code:"csymParensRightTall"},leftBracket:{code:"csymBracketLeftTall"},rightBracket:{code:"csymBracketRightTall"},leftParenTall:{code:"csymParensLeftVeryTall"},rightParenTall:{code:"csymParensRightVeryTall"},"/":{code:"csymDiagonalArrangementSlash"},over:{code:"csymDiagonalArrangementSlash"},"#":{code:"accidentalSharp"},b:{code:"accidentalFlat"}},Rt.symbolTypes=Nt,Rt.symbolModifiers=Pt,Rt.noFormat=!1;class Ot extends tt{static get CATEGORY(){return u.Dot}static getDots(t){return t.getModifiersByType(Ot.CATEGORY)}static buildAndAttach(t,e){for(const i of t)if(null==e?void 0:e.all)for(let t=0;te.line-t.line));let a=i,o=0,r=null,h=null,c=null,d=0;for(let t=0;to?a:o,r=g,h=i}return e.right_shift+=o,!0}constructor(){super(),this.position=tt.Position.RIGHT,this.radius=2,this.setWidth(5),this.dot_shiftY=0}setNote(t){return this.note=t,h(t)&&(this.radius*=.5,this.setWidth(3)),this}setDotShiftY(t){return this.dot_shiftY=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.checkStave().getSpacingBetweenLines(),s=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0});_(e)&&(s.y=e.getStemExtents().baseY);const n=s.x+this.x_shift+this.width-this.radius,a=s.y+this.y_shift+this.dot_shiftY*i;t.beginPath(),t.arc(n,a,this.radius,0,2*Math.PI,!1),t.fill()}}class Lt extends tt{static get CATEGORY(){return u.FretHandFinger}static format(t,e){const{left_shift:i,right_shift:s}=e;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let h=0;he.line-t.line));let h=0,c=0,d=0,l=0,g=null,m=null;for(let t=0;td?e:d):o===tt.Position.RIGHT&&(_.setXShift(c),e=r+f,l=e>l?e:l),g=u,m=a}return e.left_shift+=d,e.right_shift+=l,!0}static easyScoreHook({fingerings:t}={},e,i){null==t||t.split(",").map((t=>{const e=t.trim().split("."),s={number:e[0]};return e[1]&&(s.position=e[1]),i.getFactory().Fingering(s)})).map(((t,i)=>e.addModifier(t,i)))}constructor(t){super(),this.finger=t,this.width=7,this.position=tt.Position.LEFT,this.x_shift=0,this.y_shift=0,this.x_offset=0,this.y_offset=0,this.resetFont()}setFretHandFinger(t){return this.finger=t,this}getFretHandFinger(){return this.finger}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=i.x+this.x_shift+this.x_offset,n=i.y+this.y_shift+this.y_offset+5;switch(this.position){case tt.Position.ABOVE:s-=4,n-=12;break;case tt.Position.BELOW:s-=2,n+=10;break;case tt.Position.LEFT:s-=this.width;break;case tt.Position.RIGHT:s+=1;break;default:throw new p("InvalidPosition",`The position ${this.position} does not exist`)}t.save(),t.setFont(this.textFont),t.fillText(""+this.finger,s,n),t.restore()}}Lt.TEXT_FONT={family:M.SANS_SERIF,size:9,weight:P.BOLD,style:A.NORMAL};class Wt extends bt{static get CATEGORY(){return u.NoteHead}constructor(t){super(t),this.custom_glyph=!1,this.stem_up_x_offset=0,this.stem_down_x_offset=0,this.index=t.index,this.x=t.x||0,this.y=t.y||0,t.note_type&&(this.noteType=t.note_type),this.displaced=t.displaced||!1,this.stem_direction=t.stem_direction||nt.UP,this.line=t.line||0,this.glyphProps=z.getGlyphProps(this.duration,this.noteType),f(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),(this.line>5||this.line<0)&&this.glyphProps.ledger_code_head&&(this.glyphProps.code_head=this.glyphProps.ledger_code_head),this.glyph_code=this.glyphProps.code_head,this.x_shift=t.x_shift||0,t.custom_glyph_code&&(this.custom_glyph=!0,this.glyph_code=t.custom_glyph_code,this.stem_up_x_offset=t.stem_up_x_offset||0,this.stem_down_x_offset=t.stem_down_x_offset||0),this.setStyle(t.style),this.slashed=t.slashed||!1,this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||z.NOTATION_FONT_SCALE}),this.setWidth(!this.custom_glyph||this.glyph_code.startsWith("noteheadSlashed")||this.glyph_code.startsWith("noteheadCircled")?this.glyphProps.getWidth(this.render_options.glyph_font_scale):Z.getWidth(this.glyph_code,this.render_options.glyph_font_scale))}getWidth(){return this.width}isDisplaced(){return!0===this.displaced}setX(t){return this.x=t,this}getY(){return this.y}setY(t){return this.y=t,this}getLine(){return this.line}setLine(t){return this.line=t,this}getAbsoluteX(){const t=this.preFormatted?super.getAbsoluteX():this.x,e=nt.WIDTH/2,i=z.currentMusicFont(),s=i.lookupMetric("notehead.shiftX",0)*this.stem_direction,n=i.lookupMetric("noteHead.displacedShiftX",0)*this.stem_direction;return t+s+(this.displaced?(this.width-e)*this.stem_direction+n:0)}getBoundingBox(){const t=this.checkStave().getSpacingBetweenLines(),e=t/2,i=this.y-e;return new C(this.getAbsoluteX(),i,this.width,t)}setStave(t){const e=this.getLine();return this.stave=t,this.stave&&(this.setY(this.stave.getYForNote(e)),this.setContext(this.stave.getContext())),this}preFormat(){if(this.preFormatted)return this;const t=this.getWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx;return this.setWidth(t),this.preFormatted=!0,this}draw(){const t=this.checkContext();this.setRendered();let e=this.getAbsoluteX();this.custom_glyph&&(e+=this.stem_direction===nt.UP?this.stem_up_x_offset+(this.glyphProps.stem?this.glyphProps.getWidth(this.render_options.glyph_font_scale)-this.width:0):this.stem_down_x_offset);const i=this.y;!function(...t){Wt.DEBUG&&S("Vex.Flow.NoteHead",t)}("Drawing note head '",this.noteType,this.duration,"' at",e,i);const s=this.stem_direction,n=this.render_options.glyph_font_scale,a=`${this.glyph_code}Stem${s===nt.UP?"Up":"Down"}`;if("s"===this.noteType){const n=this.checkStave().getSpacingBetweenLines();!function(t,e,i,s,n,a){const o=z.SLASH_NOTEHEAD_WIDTH;t.save(),t.setLineWidth(z.STEM_WIDTH);let r=!1;if(z.durationToNumber(e)>2&&(r=!0),r||(i-=z.STEM_WIDTH/2*n),t.beginPath(),t.moveTo(i,s+a),t.lineTo(i,s+1),t.lineTo(i+o,s-a),t.lineTo(i+o,s),t.lineTo(i,s+a),t.closePath(),r?t.fill():t.stroke(),z.durationToFraction(e).equals(.5)){const e=[-3,-1,o+1,o+3];for(let n=0;nt.getCategory()===u.Dot&&0===t.getIndex())).length!==r.note.getModifiers().filter((t=>t.getCategory()===u.Dot&&0===t.getIndex())).length||t<1&&t>0||JSON.stringify(a.note.getStyle())!==JSON.stringify(r.note.getStyle())?(l=d+2,a.stemDirection===r.stemDirection?a.note.setXShift(l):r.note.setXShift(l)):a.note.voice!==r.note.voice&&a.stemDirection===r.stemDirection&&(a.line!=r.line?(l=d+2,a.note.setXShift(l)):1===r.stemDirection&&(r.stemDirection=-1,r.note.setStemDirection(-1)))}else t<1?(l=d+2,a.note.durationt.postFormat())),!0)}constructor(t){var e,i,s;super(t),this.minLine=0,this.maxLine=0,this.sortedKeyProps=[],this.ledgerLineStyle={},this.clef=null!==(e=t.clef)&&void 0!==e?e:"treble",this.octave_shift=null!==(i=t.octave_shift)&&void 0!==i?i:0,this.glyphProps=z.getGlyphProps(this.duration,this.noteType),f(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),this.displaced=!1,this.dot_shiftY=0,this.use_default_head_x=!1,this._noteHeads=[],this.modifiers=[],this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||z.NOTATION_FONT_SCALE,stroke_px:t.stroke_px||Ut.LEDGER_LINE_OFFSET}),this.calculateKeyProps(),this.buildStem(),t.auto_stem?this.autoStem():this.setStemDirection(null!==(s=t.stem_direction)&&void 0!==s?s:nt.UP),this.reset(),this.buildFlag()}reset(){super.reset();const t=this._noteHeads.map((t=>t.getStyle()));this.buildNoteHeads(),this._noteHeads.forEach(((e,i)=>{const s=t[i];s&&e.setStyle(s)}));const e=this.stave;return e&&this.setStave(e),this.calcNoteDisplacements(),this}setBeam(t){return this.beam=t,this.calcNoteDisplacements(),this.stem&&this.stem.setExtension(this.getStemExtension()),this}buildStem(){return this.setStem(new nt({hide:!!this.isRest()})),this}buildNoteHeads(){this._noteHeads=[];const t=this.getStemDirection(),e=this.getKeys();let i,s,n,a,o,r=!1;t===nt.UP?(n=0,a=e.length,o=1):(n=e.length-1,a=-1,o=-1);for(let e=n;e!==a;e+=o){const n=this.sortedKeyProps[e].keyProps,a=n.line;void 0===i?i=a:(s=Math.abs(i-a),0===s||.5===s?r=!r:(r=!1,this.use_default_head_x=!0)),i=a;const o=new Wt({duration:this.duration,note_type:this.noteType,displaced:r,stem_direction:t,custom_glyph_code:n.code,glyph_font_scale:this.render_options.glyph_font_scale,x_shift:n.shift_right,stem_up_x_offset:n.stem_up_x_offset,stem_down_x_offset:n.stem_down_x_offset,line:n.line});this.addChildElement(o),this._noteHeads[this.sortedKeyProps[e].index]=o}return this._noteHeads}autoStem(){this.setStemDirection(this.calculateOptimalStemDirection())}calculateOptimalStemDirection(){this.minLine=this.sortedKeyProps[0].keyProps.line,this.maxLine=this.sortedKeyProps[this.keyProps.length-1].keyProps.line;return(this.minLine+this.maxLine)/2<3?nt.UP:nt.DOWN}calculateKeyProps(){let t;for(let e=0;e0&&(this.keyProps[e-1].displaced=!0)),t=a,this.keyProps.push(n)}this.keyProps.forEach(((t,e)=>{this.sortedKeyProps.push({keyProps:t,index:e})})),this.sortedKeyProps.sort(((t,e)=>t.keyProps.line-e.keyProps.line))}getBoundingBox(){var t,e;if(!this.preFormatted)throw new p("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const{width:i,modLeftPx:s,leftDisplacedHeadPx:n}=this.getMetrics(),a=this.getAbsoluteX()-s-n;let o=0,r=0;const h=(null!==(e=null===(t=this.getStave())||void 0===t?void 0:t.getSpacingBetweenLines())&&void 0!==e?e:0)/2,c=2*h;if(this.isRest()){const t=this.ys[0],e=z.durationToFraction(this.duration);e.equals(1)||e.equals(2)?(o=t-h,r=t+h):(o=t-this.glyphProps.line_above*c,r=t+this.glyphProps.line_below*c)}else if(this.glyphProps.stem){const t=this.getStemExtents();t.baseY+=h*this.getStemDirection(),o=Math.min(t.topY,t.baseY),r=Math.max(t.topY,t.baseY)}else{o=0,r=0;for(let t=0;te&&(e=s):s1}hasStem(){return this.glyphProps.stem}hasFlag(){return super.hasFlag()&&!this.isRest()}getStemX(){return"r"===this.noteType?this.getCenterGlyphX():super.getStemX()+(this.stem_direction?nt.WIDTH/(2*-this.stem_direction):0)}getYForTopText(t){const e=this.getStemExtents();return Math.min(this.checkStave().getYForTopText(t),e.topY-this.render_options.annotation_spacing*(t+1))}getYForBottomText(t){const e=this.getStemExtents();return Math.max(this.checkStave().getYForTopText(t),e.baseY+this.render_options.annotation_spacing*t)}setStave(t){super.setStave(t);const e=this._noteHeads.map((e=>(e.setStave(t),e.getY())));if(this.setYs(e),this.stem){const{y_top:t,y_bottom:e}=this.getNoteHeadBounds();this.stem.setYBounds(t,e)}return this}isDisplaced(){return this.displaced}setNoteDisplaced(t){return this.displaced=t,this}getTieRightX(){let t=this.getAbsoluteX();return t+=this.getGlyphWidth()+this.x_shift+this.rightDisplacedHeadPx,this.modifierContext&&(t+=this.modifierContext.getRightShift()),t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.x_shift-this.leftDisplacedHeadPx,t}getLineForRest(){let t=this.keyProps[0].line;if(this.keyProps.length>1){const e=this.keyProps[this.keyProps.length-1].line;t=T(Math.max(t,e),Math.min(t,e))}return t}getModifierStartXY(t,e,i={}){var s,n;if(!this.preFormatted)throw new p("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new p("NoYValues","No Y-Values calculated for this note.");const{ABOVE:a,BELOW:o,LEFT:r,RIGHT:h}=tt.Position;let c=0;return t===r?c=-2:t===h?(c=this.getGlyphWidth()+this.x_shift+2,this.stem_direction===nt.UP&&this.hasFlag()&&(i.forceFlagRight||((t,e)=>e===(t.getStemDirection()===nt.UP?t.keyProps.length-1:0))(this,e))&&(c+=null!==(n=null===(s=null==this?void 0:this.flag)||void 0===s?void 0:s.getMetrics().width)&&void 0!==n?n:0)):t!==o&&t!==a||(c=this.getGlyphWidth()/2),{x:this.getAbsoluteX()+c,y:this.ys[e]}}setStyle(t){return super.setGroupStyle(t)}setStemStyle(t){const e=this.getStem();return e&&e.setStyle(t),this}getStemStyle(){var t;return null===(t=this.stem)||void 0===t?void 0:t.getStyle()}setLedgerLineStyle(t){this.ledgerLineStyle=t}getLedgerLineStyle(){return this.ledgerLineStyle}setFlagStyle(t){var e;null===(e=this.flag)||void 0===e||e.setStyle(t)}getFlagStyle(){var t;return null===(t=this.flag)||void 0===t?void 0:t.getStyle()}setKeyStyle(t,e){return this._noteHeads[t].setStyle(e),this}setKeyLine(t,e){return this.keyProps[t].line=e,this.reset(),this}getKeyLine(t){return this.keyProps[t].line}getVoiceShiftWidth(){return this.getGlyphWidth()*(this.displaced?2:1)}calcNoteDisplacements(){this.setLeftDisplacedHeadPx(this.displaced&&this.stem_direction===nt.DOWN?this.getGlyphWidth():0),this.setRightDisplacedHeadPx(!this.hasFlag()&&this.displaced&&this.stem_direction===nt.UP?this.getGlyphWidth():0)}preFormat(){if(this.preFormatted)return;let t=0;this.modifierContext&&(this.modifierContext.preFormat(),0===this.modifierContext.getWidth()&&(t=Ut.minNoteheadPadding));let e=this.getGlyphWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx+t;this.shouldDrawFlag()&&this.stem_direction===nt.UP&&(e+=this.getGlyphWidth()),this.setWidth(e),this.preFormatted=!0}getNoteHeadBounds(){let t,e,i,s,n=1/0,a=-1/0,o=this.checkStave().getNumLines(),r=1,h=o,c=r;return this._noteHeads.forEach((d=>{const l=d.getLine(),g=d.getY();n=Math.min(g,n),a=Math.max(g,a),void 0===e&&d.isDisplaced()&&(e=d.getAbsoluteX()),void 0!==t||d.isDisplaced()||(t=d.getAbsoluteX()),o=Math.max(l,o),r=Math.min(l,r),d.isDisplaced()?(i=void 0===i?l:Math.max(l,i),s=void 0===s?l:Math.min(l,s)):(h=Math.max(l,h),c=Math.min(l,c))}),this),{y_top:n,y_bottom:a,displaced_x:e,non_displaced_x:t,highest_line:o,lowest_line:r,highest_displaced_line:i,lowest_displaced_line:s,highest_non_displaced_line:h,lowest_non_displaced_line:c}}getNoteHeadBeginX(){return this.getAbsoluteX()+this.x_shift}getNoteHeadEndX(){return this.getNoteHeadBeginX()+this.getGlyphWidth()}get noteHeads(){return this._noteHeads.slice()}get note_heads(){return console.warn("StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.","This accessor will be removed in VexFlow 5.0."),this.noteHeads}drawLedgerLines(){const t=this.checkStave(),{glyphProps:e,render_options:{stroke_px:i}}=this,s=this.checkContext(),n=e.getWidth()+2*i,a=2*(e.getWidth()+i)-nt.WIDTH/2;if(this.isRest())return;if(!s)throw new p("NoCanvasContext","Can't draw without a canvas context.");const{highest_line:o,lowest_line:r,highest_displaced_line:h,highest_non_displaced_line:c,lowest_displaced_line:d,lowest_non_displaced_line:l,displaced_x:g,non_displaced_x:m}=this.getNoteHeadBounds();if(o<6&&r>0)return;const _=Math.min(null!=g?g:0,null!=m?m:0),u=(t,e,o)=>{let r;r=o&&e?_-i:e?(null!=m?m:0)-i:(null!=g?g:0)-i;const h=e&&o?a:n;s.beginPath(),s.moveTo(r,t),s.lineTo(r+h,t),s.stroke()},x=Object.assign(Object.assign({},t.getDefaultLedgerLineStyle()),this.getLedgerLineStyle());this.applyStyle(s,x);for(let e=6;e<=o;++e){const i=void 0!==m&&e<=c,s=void 0!==h&&e<=h;u(t.getYForNote(e),i,s)}for(let e=0;e>=r;--e){const i=void 0!==m&&e>=l,s=void 0!==d&&e>=d;u(t.getYForNote(e),i,s)}this.restoreStyle(s,x)}drawModifiers(t){const e=this.checkContext();for(let i=0;i{e.applyStyle(t),t.openGroup("notehead",e.getAttribute("id"),{pointerBBox:!0}),e.setContext(t).draw(),this.drawModifiers(e),t.closeGroup(),e.restoreStyle(t)}))}drawStem(t){const e=this.checkContext();t&&this.setStem(new nt(t)),this.shouldDrawFlag()&&this.stem&&this.stem.adjustHeightForFlag(),this.stem&&this.stem.setContext(e).draw()}getStaveNoteScale(){return 1}getStemExtension(){const t=super.getStemExtension();if(!this.glyphProps.stem)return t;const e=this.getStemDirection();if(e!==this.calculateOptimalStemDirection())return t;let i;i=e===nt.UP?3-this.maxLine:this.minLine-3;const s=i-3.5;if(s<=0)return t;const n=this.getStave();let a=10;return null!=n&&(a=n.getSpacingBetweenLines()),t+s*a}draw(){if(!1===this.render_options.draw)return;if(0===this.ys.length)throw new p("NoYValues","Can't draw note without Y values.");const t=this.checkContext(),e=this.getNoteHeadBeginX(),i=this.hasStem()&&!this.beam;if(this._noteHeads.forEach((t=>t.setX(e))),this.stem){const t=this.getStemX();this.stem.setNoteHeadXBounds(t,t)}!function(...t){Ut.DEBUG&&S("Vex.Flow.StaveNote",t)}("Rendering ",this.isChord()?"chord :":"note :",this.keys),this.applyStyle(),t.openGroup("stavenote",this.getAttribute("id")),this.drawLedgerLines(),i&&this.drawStem(),this.drawNoteHeads(),this.drawFlag(),t.closeGroup(),this.restoreStyle(),this.setRendered()}}Ut.DEBUG=!1;class Ht extends L{static get CATEGORY(){return u.StaveTie}constructor(t,e){super(),this.setNotes(t),this.text=e,this.render_options={cp1:8,cp2:12,text_shift_x:0,first_x_shift:0,last_x_shift:0,y_shift:7,tie_spacing:0},this.resetFont()}setDirection(t){return this.direction=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new p("BadArguments","Tie needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new p("BadArguments","Tied notes must have same number of indices.");return this.notes=t,this}isPartial(){return!this.notes.first_note||!this.notes.last_note}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new p("BadArguments","No Y-values to render");const e=this.checkContext();let i=this.render_options.cp1,s=this.render_options.cp2;Math.abs(t.last_x_px-t.first_x_px)<10&&(i=2,s=8);const n=this.render_options.first_x_shift,a=this.render_options.last_x_shift,o=this.render_options.y_shift*t.direction,r=this.notes.first_indices,h=this.notes.last_indices;this.applyStyle(),e.openGroup("stavetie",this.getAttribute("id"));for(let c=0;cMath.pow(this.options.softmaxFactor,e.getTicks().value()/t)))),this.expTicksUsed}softmax(t){this.expTicksUsed||(this.expTicksUsed=this.reCalculateExpTicksUsed());const e=this.ticksUsed.value();return(t=>Math.pow(this.options.softmaxFactor,t/e))(t)/this.expTicksUsed}addTickable(t){if(!t.shouldIgnoreTicks()){const e=t.getTicks();if(this.ticksUsed.add(e),this.expTicksUsed=0,(this.mode===jt.STRICT||this.mode===jt.FULL)&&this.ticksUsed.greaterThan(this.totalTicks))throw this.ticksUsed.subtract(e),new p("BadArgument","Too many ticks.");e.lessThan(this.smallestTickCount)&&(this.smallestTickCount=e.clone()),this.resolutionMultiplier=this.ticksUsed.denominator,this.totalTicks.add(0,this.ticksUsed.denominator)}return this.tickables.push(t),t.setVoice(this),this}addTickables(t){for(let e=0;e{e.getStave()||e.setStave(t)})),this.preFormatted=!0,this}checkStave(){return f(this.stave,"NoStave","No stave attached to instance.")}draw(t=this.checkContext(),e){let i;e=null!=e?e:this.stave,this.setRendered();for(let s=0;s1){const e=new Le(t);e.render_options.beam_width=3,e.render_options.partial_beam_length=4,this.beams.push(e)}return this}setWidth(t){return this.width=t,this}getWidth(){return this.width+Ut.minNoteheadPadding}getGraceNotes(){return this.grace_notes}draw(){const t=this.checkContext(),e=this.checkAttachedNote();if(this.setRendered(),function(...t){Vt.DEBUG&&S("Vex.Flow.GraceNoteGroup",t)}("Drawing grace note group for:",e),this.alignSubNotesWithNote(this.getGraceNotes(),e),this.grace_notes.forEach((e=>e.setContext(t).draw())),this.beams.forEach((e=>e.setContext(t).draw())),this.show_slur){const i=g(e),s=i?Ht:Yt;this.slur=new s({last_note:this.grace_notes[0],first_note:e,first_indices:[0],last_indices:[0]}),this.slur.render_options.cp2=12,this.slur.render_options.y_shift=(i?7:5)+this.render_options.slur_y_shift,this.slur.setContext(t).draw()}}}Vt.DEBUG=!1;class zt extends tt{static get CATEGORY(){return u.NoteSubGroup}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let e=0;e{t.setIgnoreTicks(!1)})),this.width=0,this.formatter=new Ae,this.voice=new Xt({num_beats:4,beat_value:4,resolution:z.RESOLUTION}).setStrict(!1),this.voice.addTickables(this.subNotes)}preFormat(){this.preFormatted||(this.formatter.joinVoices([this.voice]).format([this.voice],0),this.setWidth(this.formatter.getMinTotalWidth()),this.preFormatted=!0)}setWidth(t){return this.width=t,this}getWidth(){return this.width}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),this.alignSubNotesWithNote(this.subNotes,e),this.subNotes.forEach((e=>e.setContext(t).drawWithStyle()))}}class Kt extends tt{static get CATEGORY(){return u.Ornament}static get minPadding(){return z.currentMusicFont().lookupMetric("noteHead.minPadding")}static format(t,e){if(!t||0===t.length)return!1;let i=0,s=e.right_shift,n=e.left_shift,a=0;for(let o=0;o=0&&(r.x_shift+=s+2),Kt.ornamentAttack.indexOf(r.type)>=0&&(r.x_shift-=n+2),r.reportedWidth&&r.x_shift<0?n+=r.reportedWidth:r.reportedWidth&&r.x_shift>=0?s+=r.reportedWidth+Kt.minPadding:i=Math.max(r.getWidth(),i),Kt.ornamentArticulation.indexOf(r.type)>=0){f(r.note,"NoAttachedNote").getLineNumber()>=3||r.getPosition()===tt.Position.ABOVE?(e.top_text_line+=h,r.y_shift+=a,a-=r.glyph.bbox.getH()):(e.text_line+=h,r.y_shift+=a,a+=r.glyph.bbox.getH())}else r.getPosition()===tt.Position.ABOVE?(r.setTextLine(e.top_text_line),e.top_text_line+=h):(r.setTextLine(e.text_line),e.text_line+=h)}return e.left_shift=n+i/2,e.right_shift=s+i/2,!0}static get ornamentNoteTransition(){return["flip","jazzTurn","smear"]}static get ornamentAttack(){return["scoop"]}static get ornamentAlignWithNoteHead(){return["doit","fall","fallLong","doitLong","bend","plungerClosed","plungerOpen","scoop"]}static get ornamentRelease(){return["doit","fall","fallLong","doitLong","jazzTurn","smear","flip"]}static get ornamentArticulation(){return["bend","plungerClosed","plungerOpen"]}getMetrics(){const t=z.currentMusicFont().getMetrics().ornament;if(!t)throw new p("BadMetrics","ornament missing");return t[this.ornament.code]}constructor(t){super(),this.type=t,this.delayed=!1,this.render_options={font_scale:z.NOTATION_FONT_SCALE,accidentalLowerPadding:3,accidentalUpperPadding:3},this.ornament=z.ornamentCodes(this.type);const e=this.getMetrics();if(this.adjustForStemDirection=!1,this.reportedWidth=e&&e.reportedWidth?e.reportedWidth:0,this.stemUpYOffset=e&&e.stemUpYOffset?e.stemUpYOffset:0,this.ornamentAlignWithNoteHead=Kt.ornamentAlignWithNoteHead.indexOf(this.type)>=0,!this.ornament)throw new p("ArgumentError",`Ornament not found: '${this.type}'`);this.x_shift=e?e.xOffset:0,this.y_shift=e?e.yOffset:0,this.glyph=new Z(this.ornament.code,this.render_options.font_scale,{category:`ornament.${this.ornament.code}`}),Kt.ornamentNoteTransition.indexOf(this.type)>=0&&(this.delayed=!0),e||this.glyph.setOrigin(.5,1)}setDelayed(t){return this.delayed=t,this}setUpperAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalUpper=new Z(z.accidentalCodes(t).code,e),this.accidentalUpper.setOrigin(.5,1),this}setLowerAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalLower=new Z(z.accidentalCodes(t).code,e),this.accidentalLower.setOrigin(.5,1),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getStemDirection(),s=e.checkStave();this.applyStyle(),t.openGroup("ornament",this.getAttribute("id"));const n=e.checkStem().getExtents();let a=i===nt.DOWN?n.baseY:n.topY;_(e)&&(e.hasStem()?i===nt.DOWN&&(a=s.getYForTopText(this.text_line)):a=s.getYForTopText(this.text_line));const o=i===nt.DOWN,r=s.getSpacingBetweenLines();let h=1;!o&&e.hasBeam()&&(h+=.5);const c=a-r*(this.text_line+h),d=e.getModifierStartXY(this.position,this.index);let l=d.x,g=this.ornamentAlignWithNoteHead?d.y:Math.min(s.getYForTopText(this.text_line),c);if(g+=this.y_shift,this.delayed){let t=0;const i=l-s.getNoteStartX();if(void 0!==this.delayXShift)t=this.delayXShift;else{t+=this.glyph.getMetrics().width/2;const n=e.getVoice().getTickables(),a=n.indexOf(e),o=a+1=0&&(g=e.checkStave().getBoundingBox().getY()+40),this.glyph.render(t,l+this.x_shift,g),this.accidentalUpper&&(g-=this.glyph.getMetrics().height+this.render_options.accidentalUpperPadding,this.accidentalUpper.render(t,l,g)),t.closeGroup(),this.restoreStyle()}}Kt.DEBUG=!1;class $t extends tt{static get CATEGORY(){return u.Parenthesis}static buildAndAttach(t){for(const e of t)for(let t=0;th+n.width?s:h+n.width),o===J.LEFT&&(h=a.getLeftParenthesisPx(r),i=i>h+n.width?i:h+n.width),n.setXShift(h)}return e.left_shift+=i,e.right_shift+=s,!0}constructor(t){var e;super(),this.position=null!=t?t:tt.Position.LEFT,this.point=null!==(e=z.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:bt.getPoint("default"),this.setWidth(z.currentMusicFont().lookupMetric("parenthesis.default.width"))}setNote(t){var e,i;return this.note=t,this.point=null!==(e=z.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:bt.getPoint("default"),this.setWidth(z.currentMusicFont().lookupMetric("parenthesis.default.width")),h(t)&&(this.point=null!==(i=z.currentMusicFont().lookupMetric("parenthesis.gracenote.point"))&&void 0!==i?i:bt.getPoint("gracenote"),this.setWidth(z.currentMusicFont().lookupMetric("parenthesis.gracenote.width"))),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0}),s=i.x+this.x_shift,n=i.y+this.y_shift;this.position==tt.Position.RIGHT?Z.renderGlyph(t,s+1,n,this.point,"noteheadParenthesisRight",{category:"noteHead.standard.noteheadParenthesisRight"}):this.position==tt.Position.LEFT&&Z.renderGlyph(t,s-2,n,this.point,"noteheadParenthesisLeft",{category:"noteHead.standard.noteheadParenthesisLeft"})}}function Jt(t){if(!t)return!1;const e=x();return"function"==typeof e.HTMLCanvasElement&&t instanceof e.HTMLCanvasElement||"function"==typeof t.getContext&&"function"==typeof t.toDataURL}function qt(t){if(!t)return!1;const e=x();return"function"==typeof e.HTMLDivElement&&t instanceof e.HTMLDivElement||"function"==typeof t.appendChild&&"object"==typeof t.style}class Qt extends yt{static get WIDTH(){return 600}static get HEIGHT(){return 400}static get CANVAS_BROWSER_SIZE_LIMIT(){return 32767}static sanitizeCanvasDims(t,e){const i=this.CANVAS_BROWSER_SIZE_LIMIT;return Math.max(t,e)>i&&(y("Canvas dimensions exceed browser limit. Cropping to "+i),t>i&&(t=i),e>i&&(e=i)),[t,e]}constructor(t){super(),this.textHeight=0,this.context2D=t,t.canvas?this.canvas=t.canvas:this.canvas={width:Qt.WIDTH,height:Qt.HEIGHT}}clear(){this.context2D.clearRect(0,0,this.canvas.width,this.canvas.height)}openGroup(t,e,i){}closeGroup(){}add(t){}setFillStyle(t){return this.context2D.fillStyle=t,this}setBackgroundFillStyle(t){return this}setStrokeStyle(t){return this.context2D.strokeStyle=t,this}setShadowColor(t){return this.context2D.shadowColor=t,this}setShadowBlur(t){const e=this.context2D.getTransform(),i=Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c+e.d*e.d);return this.context2D.shadowBlur=i*t,this}setLineWidth(t){return this.context2D.lineWidth=t,this}setLineCap(t){return this.context2D.lineCap=t,this}setLineDash(t){return this.context2D.setLineDash(t),this}scale(t,e){return this.context2D.scale(t,e),this}resize(t,e,i){var s;const n=this.context2D.canvas,a=null!==(s=null!=i?i:x().devicePixelRatio)&&void 0!==s?s:1;return[t,e]=Qt.sanitizeCanvasDims(t*a,e*a),t=t/a|0,e=e/a|0,n.width=t*a,n.height=e*a,Jt(n)&&(n.style.width=t+"px",n.style.height=e+"px"),this.scale(a,a)}rect(t,e,i,s){return this.context2D.rect(t,e,i,s),this}fillRect(t,e,i,s){return this.context2D.fillRect(t,e,i,s),this}clearRect(t,e,i,s){return this.context2D.clearRect(t,e,i,s),this}beginPath(){return this.context2D.beginPath(),this}moveTo(t,e){return this.context2D.moveTo(t,e),this}lineTo(t,e){return this.context2D.lineTo(t,e),this}bezierCurveTo(t,e,i,s,n,a){return this.context2D.bezierCurveTo(t,e,i,s,n,a),this}quadraticCurveTo(t,e,i,s){return this.context2D.quadraticCurveTo(t,e,i,s),this}arc(t,e,i,s,n,a){return this.context2D.arc(t,e,i,s,n,a),this}fill(){return this.context2D.fill(),this}stroke(){return this.context2D.stroke(),this}closePath(){return this.context2D.closePath(),this}measureText(t){const e=this.context2D.measureText(t);let i=0,s=0;return e.fontBoundingBoxAscent?(i=-e.fontBoundingBoxAscent,s=e.fontBoundingBoxDescent+e.fontBoundingBoxAscent):(i=-e.actualBoundingBoxAscent,s=e.actualBoundingBoxDescent+e.actualBoundingBoxAscent),{x:0,y:i,width:e.width,height:s}}fillText(t,e,i){return this.context2D.fillText(t,e,i),this}save(){return this.context2D.save(),this}restore(){return this.context2D.restore(),this}set fillStyle(t){this.context2D.fillStyle=t}get fillStyle(){return this.context2D.fillStyle}set strokeStyle(t){this.context2D.strokeStyle=t}get strokeStyle(){return this.context2D.strokeStyle}setFont(t,e,i,s){const n=M.validate(t,e,i,s);return this.context2D.font=M.toCSSString(n),this.textHeight=M.convertSizeToPixelValue(n.size),this}getFont(){return this.context2D.font}}const Zt={path:{x:!0,y:!0,width:!0,height:!0,"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},rect:{"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},text:{width:!0,height:!0}},te="http://www.w3.org/2000/svg",ee=2*Math.PI;class ie extends yt{constructor(t){super(),this.width=0,this.height=0,this.precision=1,this.backgroundFillStyle="white",this.fontCSSString="",this.element=t,this.precision=Math.pow(10,z.RENDER_PRECISION_PLACES);const e=this.create("svg");this.element.appendChild(e),this.svg=e,this.parent=this.svg,this.groups=[this.svg],this.path="",this.pen={x:NaN,y:NaN},this.lineWidth=1;const i={"font-family":M.SANS_SERIF,"font-size":M.SIZE+"pt","font-weight":P.NORMAL,"font-style":A.NORMAL};this.state=Object.assign({scaleX:1,scaleY:1},i),this.attributes=Object.assign({"stroke-width":.3,"stroke-dasharray":"none",fill:"black",stroke:"black"},i),this.groupAttributes=[],this.applyAttributes(e,this.attributes),this.groupAttributes.push(Object.assign({},this.attributes)),this.shadow_attributes={width:0,color:"black"},this.state_stack=[]}round(t){return Math.round(t*this.precision)/this.precision}create(t){return document.createElementNS(te,t)}openGroup(t,e,i){const s=this.create("g");return this.groups.push(s),this.parent.appendChild(s),this.parent=s,t&&s.setAttribute("class",v(t)),e&&s.setAttribute("id",v(e)),i&&i.pointerBBox&&s.setAttribute("pointer-events","bounding-box"),this.applyAttributes(s,this.attributes),this.groupAttributes.push(Object.assign(Object.assign({},this.groupAttributes[this.groupAttributes.length-1]),this.attributes)),s}closeGroup(){this.groups.pop(),this.groupAttributes.pop(),this.parent=this.groups[this.groups.length-1]}add(t){this.parent.appendChild(t)}setFillStyle(t){return this.attributes.fill=t,this}setBackgroundFillStyle(t){return this.backgroundFillStyle=t,this}setStrokeStyle(t){return this.attributes.stroke=t,this}setShadowColor(t){return this.shadow_attributes.color=t,this}setShadowBlur(t){return this.shadow_attributes.width=t,this}setLineWidth(t){return this.attributes["stroke-width"]=t,this.lineWidth=t,this}setLineDash(t){if("[object Array]"===Object.prototype.toString.call(t))return this.attributes["stroke-dasharray"]=t.join(","),this;throw new p("ArgumentError","lineDash must be an array of integers.")}setLineCap(t){return this.attributes["stroke-linecap"]=t,this}resize(t,e){this.width=t,this.height=e,this.element.style.width=t.toString(),this.svg.style.width=t.toString(),this.svg.style.height=e.toString();const i={width:t,height:e};return this.applyAttributes(this.svg,i),this.scale(this.state.scaleX,this.state.scaleY),this}scale(t,e){this.state.scaleX=this.state.scaleX?this.state.scaleX*t:t,this.state.scaleY=this.state.scaleY?this.state.scaleY*e:e;const i=this.width/this.state.scaleX,s=this.height/this.state.scaleY;return this.setViewBox(0,0,i,s),this}setViewBox(t,e,i,s){if("string"==typeof t)this.svg.setAttribute("viewBox",t);else{const n=t+" "+e+" "+i+" "+s;this.svg.setAttribute("viewBox",n)}}applyAttributes(t,e){const i=Zt[t.nodeName];for(const s in e)i&&i[s]||!e[s]||0!=this.groupAttributes.length&&e[s]==this.groupAttributes[this.groupAttributes.length-1][s]||t.setAttributeNS(null,s,e[s]);return t}clear(){for(;this.svg.lastChild;)this.svg.removeChild(this.svg.lastChild);this.scale(this.state.scaleX,this.state.scaleY)}rect(t,e,i,s,n){s<0&&(e+=s,s*=-1);const a=this.create("rect");return n=null!=n?n:{fill:"none","stroke-width":this.lineWidth,stroke:"black"},t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.applyAttributes(a,Object.assign({x:t,y:e,width:i,height:s},n)),this.add(a),this}fillRect(t,e,i,s){const n={fill:this.attributes.fill,stroke:"none"};return this.rect(t,e,i,s,n),this}clearRect(t,e,i,s){return this.rect(t,e,i,s,{fill:this.backgroundFillStyle,stroke:"none"}),this}beginPath(){return this.path="",this.pen.x=NaN,this.pen.y=NaN,this}moveTo(t,e){return t=this.round(t),e=this.round(e),this.path+="M"+t+" "+e,this.pen.x=t,this.pen.y=e,this}lineTo(t,e){return t=this.round(t),e=this.round(e),this.path+="L"+t+" "+e,this.pen.x=t,this.pen.y=e,this}bezierCurveTo(t,e,i,s,n,a){return n=this.round(n),a=this.round(a),t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.path+="C"+t+" "+e+","+i+" "+s+","+n+" "+a,this.pen.x=n,this.pen.y=a,this}quadraticCurveTo(t,e,i,s){return i=this.round(i),s=this.round(s),t=this.round(t),e=this.round(e),this.path+="Q"+t+" "+e+","+i+" "+s,this.pen.x=i,this.pen.y=s,this}arc(t,e,i,s,n,a){let o=t+i*Math.cos(s),r=e+i*Math.sin(s);o=this.round(o),r=this.round(r);const h=b(s),c=b(n);if(!a&&n-s>=ee||a&&s-n>=ee||h===c){let n=t+i*Math.cos(s+Math.PI),a=e+i*Math.sin(s+Math.PI);n=this.round(n),a=this.round(a),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 0 0 ${n} ${a} `,this.path+=`A${i} ${i} 0 0 0 ${o} ${r}`,this.pen.x=o,this.pen.y=r}else{let d,l=t+i*Math.cos(n),g=e+i*Math.sin(n);s=h,n=c,d=Math.abs(n-s)n&&(d=!d);const m=!a;l=this.round(l),g=this.round(g),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 ${+d} ${+m} ${l} ${g}`,this.pen.x=l,this.pen.y=g}return this}closePath(){return this.path+="Z",this}getShadowStyle(){const t=this.shadow_attributes;return`filter: drop-shadow(0 0 ${t.width/1.5}px ${t.color})`}fill(t){const e=this.create("path");return void 0===t&&(t=Object.assign(Object.assign({},this.attributes),{stroke:"none"})),t.d=this.path,this.shadow_attributes.width>0&&(t.style=this.getShadowStyle()),this.applyAttributes(e,t),this.add(e),this}stroke(){const t=this.create("path"),e=Object.assign(Object.assign({},this.attributes),{fill:"none","stroke-width":this.lineWidth,d:this.path});return this.shadow_attributes.width>0&&(e.style=this.getShadowStyle()),this.applyAttributes(t,e),this.add(t),this}measureText(t){return ie.measureTextCache.lookup(t,this.svg,this.attributes)}fillText(t,e,i){if(!t||t.length<=0)return this;e=this.round(e),i=this.round(i);const s=Object.assign(Object.assign({},this.attributes),{stroke:"none",x:e,y:i}),n=this.create("text");return n.textContent=t,this.applyAttributes(n,s),this.add(n),this}save(){return this.state_stack.push({state:{"font-family":this.state["font-family"],"font-weight":this.state["font-weight"],"font-style":this.state["font-style"],"font-size":this.state["font-size"],scale:this.state.scale},attributes:{"font-family":this.attributes["font-family"],"font-weight":this.attributes["font-weight"],"font-style":this.attributes["font-style"],"font-size":this.attributes["font-size"],fill:this.attributes.fill,stroke:this.attributes.stroke,"stroke-width":this.attributes["stroke-width"],"stroke-dasharray":this.attributes["stroke-dasharray"]},shadow_attributes:{width:this.shadow_attributes.width,color:this.shadow_attributes.color},lineWidth:this.lineWidth}),this}restore(){const t=this.state_stack.pop();if(t){const e=t;this.state["font-family"]=e.state["font-family"],this.state["font-weight"]=e.state["font-weight"],this.state["font-style"]=e.state["font-style"],this.state["font-size"]=e.state["font-size"],this.state.scale=e.state.scale,this.attributes["font-family"]=e.attributes["font-family"],this.attributes["font-weight"]=e.attributes["font-weight"],this.attributes["font-style"]=e.attributes["font-style"],this.attributes["font-size"]=e.attributes["font-size"],this.attributes.fill=e.attributes.fill,this.attributes.stroke=e.attributes.stroke,this.attributes["stroke-width"]=e.attributes["stroke-width"],this.attributes["stroke-dasharray"]=e.attributes["stroke-dasharray"],this.shadow_attributes.width=e.shadow_attributes.width,this.shadow_attributes.color=e.shadow_attributes.color,this.lineWidth=e.lineWidth}return this}set fillStyle(t){this.setFillStyle(t)}get fillStyle(){return this.attributes.fill}set strokeStyle(t){this.setStrokeStyle(t)}get strokeStyle(){return this.attributes.stroke}setFont(t,e,i,s){const n=M.validate(t,e,i,s);this.fontCSSString=M.toCSSString(n);const a={"font-family":n.family,"font-size":n.size,"font-weight":n.weight,"font-style":n.style};return this.attributes=Object.assign(Object.assign({},this.attributes),a),this.state=Object.assign(Object.assign({},this.state),a),this}getFont(){return this.fontCSSString}}var se,ne,ae,oe;ie.measureTextCache=new class{constructor(){this.cache={}}lookup(t,e,i){let s=this.cache[t];void 0===s&&(s={},this.cache[t]=s);const n=`${i["font-family"]}%${i["font-size"]}%${i["font-weight"]}%${i["font-style"]}`;let a=s[n];return void 0===a&&(a=this.measureImpl(t,e,i),s[n]=a),a}measureImpl(t,e,i){let s=this.txt;s||(s=document.createElementNS(te,"text"),this.txt=s),s.textContent=t,i["font-family"]&&s.setAttributeNS(null,"font-family",i["font-family"]),i["font-size"]&&s.setAttributeNS(null,"font-size",`${i["font-size"]}`),i["font-style"]&&s.setAttributeNS(null,"font-style",i["font-style"]),i["font-weight"]&&s.setAttributeNS(null,"font-weight",`${i["font-weight"]}`),e.appendChild(s);const n=s.getBBox();return e.removeChild(s),{x:n.x,y:n.y,width:n.width,height:n.height}}},function(t){t[t.CANVAS=1]="CANVAS",t[t.SVG=2]="SVG"}(se||(se={})),function(t){t[t.NONE=1]="NONE",t[t.UP=2]="UP",t[t.DOWN=3]="DOWN"}(ne||(ne={}));class re{static buildContext(t,e,i,s,n="#FFF"){const a=new re(t,e);i&&s&&a.resize(i,s);const o=a.getContext();return o.setBackgroundFillStyle(n),re.lastContext=o,o}static getCanvasContext(t,e,i,s){return re.buildContext(t,re.Backends.CANVAS,e,i,s)}static getSVGContext(t,e,i,s){return re.buildContext(t,re.Backends.SVG,e,i,s)}static drawDashedLine(t,e,i,s,n,a){t.beginPath();const o=s-e,r=n-i,h=Math.atan2(r,o);let c=e,d=i;t.moveTo(e,i);let l=0,g=!0;for(;!(o<0?c<=s:c>=s)||!(r<0?d<=n:d>=n);){const e=a[l++%a.length],i=c+Math.cos(h)*e;c=o<0?Math.max(s,i):Math.min(s,i);const m=d+Math.sin(h)*e;d=r<0?Math.max(n,m):Math.min(n,m),g?t.lineTo(c,d):t.moveTo(c,d),g=!g}t.closePath(),t.stroke()}constructor(t,e){if(l(t))this.ctx=t;else{if(void 0===e)throw new p("InvalidArgument","Missing backend argument");const i=e;let s;if("string"==typeof t){const e=document.getElementById(t);if(!e)throw new p("BadElementId",`Can't find element with ID "${e}"`);s=e}else s=t;if(i===re.Backends.CANVAS){if(!Jt(s))throw new p("BadElement","CANVAS context requires an HTMLCanvasElement.");const t=s.getContext("2d",{willReadFrequently:!0});if(!t)throw new p("BadElement","Can't get canvas context");this.ctx=new Qt(t)}else{if(i!==re.Backends.SVG)throw new p("InvalidBackend",`No support for backend: ${i}`);if(!qt(s))throw new p("BadElement","SVG context requires an HTMLDivElement.");this.ctx=new ie(s)}}}resize(t,e){return this.ctx.resize(t,e),this}getContext(){return this.ctx}}re.Backends=se,re.LineEndType=ne,re.lastContext=void 0;class he extends tt{static get CATEGORY(){return u.StringNumber}static get metrics(){var t;return null!==(t=z.currentMusicFont().getMetrics().stringNumber)&&void 0!==t?t:{verticalPadding:0,stemPadding:0,leftPadding:0,rightPadding:0}}static format(t,e){const i=e.left_shift,s=e.right_shift;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let i=0;ie.line-t.line));let h=0,c=0,d=0,l=null,m=null;for(let t=0;td?p:d),l=g,m=e}return e.left_shift+=c,e.right_shift+=d,!0}constructor(t){super(),this.string_number=t,this.position=tt.Position.ABOVE,this.x_shift=0,this.y_shift=0,this.text_line=0,this.stem_offset=0,this.x_offset=0,this.y_offset=0,this.dashed=!0,this.leg=re.LineEndType.NONE,this.radius=8,this.drawCircle=!0,this.setWidth(2*this.radius+4),this.resetFont()}setLineEndType(t){return t>=re.LineEndType.NONE&&t<=re.LineEndType.DOWN&&(this.leg=t),this}setStringNumber(t){return this.string_number=t,this}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}setLastNote(t){return this.last_note=t,this}setDashed(t){return this.dashed=t,this}setDrawCircle(t){return this.drawCircle=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index),s=e.hasStem()?e.getStemDirection():nt.UP;let n=i.x+this.x_shift+this.x_offset,a={};e.hasStem()&&(a=e.checkStem().getExtents());let o=i.y+this.y_shift+this.y_offset;switch(this.position){case tt.Position.ABOVE:o=e.getYs().reduce(((t,e)=>tt>e?t:e)),e.hasStem()&&s==nt.DOWN&&(o=a.topY-he.metrics.stemPadding),o+=this.radius+he.metrics.verticalPadding+this.text_line*z.STAVE_LINE_DISTANCE;break;case tt.Position.LEFT:n-=this.radius/2+he.metrics.leftPadding;break;case tt.Position.RIGHT:n+=this.radius/2+he.metrics.rightPadding;break;default:throw new p("InvalidPosition",`The position ${this.position} is invalid`)}t.save(),this.drawCircle&&(t.beginPath(),t.arc(n,o,this.radius,0,2*Math.PI,!1),t.setLineWidth(1.5),t.stroke()),t.setFont(this.textFont);const r=n-t.measureText(this.string_number).width/2;t.fillText(""+this.string_number,r,o+4.5);const h=this.last_note;if(m(h)){const i=h.getStemX()-e.getX()+5;let s,a;switch(t.setStrokeStyle("#000000"),t.setLineCap("round"),t.setLineWidth(.6),this.dashed?re.drawDashedLine(t,n+10,o,n+i,o,[3,3]):re.drawDashedLine(t,n+10,o,n+i,o,[3,0]),this.leg){case re.LineEndType.UP:s=-10,a=this.dashed?[3,3]:[3,0],re.drawDashedLine(t,n+i,o,n+i,o+s,a);break;case re.LineEndType.DOWN:s=10,a=this.dashed?[3,3]:[3,0],re.drawDashedLine(t,n+i,o,n+i,o+s,a)}}t.restore()}}he.TEXT_FONT={family:M.SANS_SERIF,size:M.SIZE,weight:P.BOLD,style:A.NORMAL};class ce extends tt{static get CATEGORY(){return u.Stroke}static format(t,e){const i=e.left_shift;if(!t||0===t.length)return!1;const s=t.map((t=>{const e=t.getNote(),i=t.checkIndex();if(g(e)){const{line:s}=e.getKeyProps()[i];return{line:s,shift:e.getLeftDisplacedHeadPx(),stroke:t}}if(_(e)){const{str:s}=e.getPositions()[i];return{line:s,shift:0,stroke:t}}throw new p("Internal","Unexpected instance.")})),n=i,a=s.reduce(((t,{stroke:e,shift:i})=>(e.setXShift(n+i),Math.max(e.getWidth()+0,t))),0);return e.left_shift+=a,!0}constructor(t,e){super(),this.options=Object.assign({all_voices:!0},e),this.all_voices=this.options.all_voices,this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:z.NOTATION_FONT_SCALE},this.resetFont(),this.setXShift(0),this.setWidth(10)}getPosition(){return this.position}addEndNote(t){return this.note_end=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=e.getYs(),n=i.y,a=i.y;const o=i.x-5,r=e.checkStave().getSpacingBetweenLines(),h=this.checkModifierContext().getMembers(e.getCategory());for(let t=0;t0){s-=o.map((t=>t.getTextHeight())).reduce(((t,e)=>t>e?t:e))/z.STAVE_LINE_DISTANCE+1}else e.top_text_line+=1;for(let e=0;e=t.line?i.above:i.below}}this.placeGlyphOnLine(s,this.checkStave(),t.line),this.glyphs.push(s);const a=this.xPositions[this.xPositions.length-1],o=s.getMetrics().width+n;this.xPositions.push(a+o),this.width+=o}cancelKey(t){return this.formatted=!1,this.cancelKeySpec=t,this}convertToCancelAccList(t){const e=z.keySignature(t),i=this.accList.length>0&&e.length>0&&e[0].type!==this.accList[0].type,s=i?e.length:e.length-this.accList.length;if(s<1)return;const n=[];for(let t=0;t0?e[0].type:void 0;let s;if(this.cancelKeySpec&&(s=this.convertToCancelAccList(this.cancelKeySpec)),this.alterKeySpec&&this.convertToAlterAccList(this.alterKeySpec),this.accList.length>0){const n=(this.position===wt.END?t.getEndClef():t.getClef())||t.getClef();s&&this.convertAccLines(n,s.type,s.accList),this.convertAccLines(n,i,e);for(let t=0;t0?"PlusSmall":"Plus";break;case"(":s=i.length>0?"ParensLeftSmall":"ParensLeft";break;case")":s=i.length>0?"ParensRightSmall":"ParensRight"}const n=new Z("timeSig"+s,this.timeSignature.point);this.topGlyphs.push(n),r+=null!==(o=n.getMetrics().width)&&void 0!==o?o:0,h=Math.max(h,n.getMetrics().height)}let c=0;for(let t=0;t22?1:0,this.width=Math.max(r,c),this.xMin=this.getMetrics().x_min,this.topStartX=(this.width-r)/2,this.botStartX=(this.width-c)/2,this.reset()}getMetrics(){return{x_min:this.xMin,x_max:this.xMin+this.width,width:this.width}}renderToStave(t){const e=this.checkStave(),i=this.checkContext();let s=t+this.topStartX,n=0;n=this.botGlyphs.length>0?e.getYForLine(this.timeSignature.topLine-this.lineShift):(e.getYForLine(this.timeSignature.topLine)+e.getYForLine(this.timeSignature.bottomLine))/2;for(let t=0;t{const e=t.split("/");if(2!==e.length&&"+"!==e[0]&&"-"!==e[0])throw new p("BadTimeSignature",`Invalid time spec: ${t}. Must be in the form "/"`);e.forEach((e=>{if(0==/^[0-9+\-()]+$/.test(e))throw new p("BadTimeSignature",`Invalid time spec: ${t}. Must contain valid signatures.`)}))})(t);const s=t.split("/");return{line:0,num:!0,glyph:this.makeTimeSignatureGlyph(null!==(e=s[0])&&void 0!==e?e:"",null!==(i=s[1])&&void 0!==i?i:"")}}makeTimeSignatureGlyph(t,e){return new Te(this,t,e,"timeSig0",this.point)}getInfo(){const{line:t,is_numeric:e,glyph:i}=this;return{line:t,num:e,glyph:i}}setTimeSig(t){this.timeSpec=t;const e=this.parseTimeSpec(t);return this.setGlyph(e.glyph),this.is_numeric=e.num,this.line=e.line,this}getTimeSpec(){return this.timeSpec}getLine(){return this.line}setLine(t){this.line=t}getGlyph(){return this.glyph}setGlyph(t){this.glyph=t,this.setWidth(f(this.glyph.getMetrics().width))}getIsNumeric(){return this.is_numeric}setIsNumeric(t){this.is_numeric=t}draw(){const t=this.checkStave(),e=t.checkContext();this.setRendered(),this.applyStyle(e),e.openGroup("timesignature",this.getAttribute("id")),this.glyph.setStave(t),this.glyph.setContext(e),this.placeGlyphOnLine(this.glyph,t,this.line),this.glyph.renderToStave(this.x),e.closeGroup(),this.restoreStyle(e)}}const be={[kt.CATEGORY]:0,[me.CATEGORY]:1,[_e.CATEGORY]:2,[ve.CATEGORY]:3},we={[ve.CATEGORY]:0,[_e.CATEGORY]:1,[kt.CATEGORY]:2,[me.CATEGORY]:3};class Ee extends L{static get CATEGORY(){return u.Stave}static get defaultPadding(){const t=z.currentMusicFont();return t.lookupMetric("stave.padding")+t.lookupMetric("stave.endPaddingMax")}static get rightPadding(){return z.currentMusicFont().lookupMetric("stave.endPaddingMax")}constructor(t,e,i,s){super(),this.height=0,this.x=t,this.y=e,this.width=i,this.formatted=!1,this.start_x=t+5,this.end_x=t+i,this.modifiers=[],this.measure=0,this.clef="treble",this.endClef=void 0,this.resetFont(),this.options=Object.assign({vertical_bar_width:10,num_lines:5,fill_style:"#999999",left_bar:!0,right_bar:!0,spacing_between_lines_px:z.STAVE_LINE_DISTANCE,space_above_staff_ln:4,space_below_staff_ln:4,top_text_position:1,bottom_text_position:4,line_config:[]},s),this.bounds={x:this.x,y:this.y,w:this.width,h:0},this.defaultLedgerLineStyle={strokeStyle:"#444",lineWidth:1.4},this.resetLines(),this.addModifier(new kt(this.options.left_bar?Et.SINGLE:Et.NONE)),this.addEndModifier(new kt(this.options.right_bar?Et.SINGLE:Et.NONE))}setDefaultLedgerLineStyle(t){this.defaultLedgerLineStyle=t}getDefaultLedgerLineStyle(){return Object.assign(Object.assign({},this.getStyle()),this.defaultLedgerLineStyle)}space(t){return this.options.spacing_between_lines_px*t}resetLines(){this.options.line_config=[];for(let t=0;ti.getWidth()&&(e-=i.getWidth()),e}setRepetitionType(t,e=0){return this.modifiers.push(new ue(t,this.x,e)),this}setVoltaType(t,e,i){return this.modifiers.push(new ye(t,e,this.x,i)),this}setSection(t,e,i=0,s,n=!0){const a=new pe(t,this.x+i,e,n);return s&&a.setFontSize(s),this.modifiers.push(a),this}setTempo(t,e){return this.modifiers.push(new xe(t,this.x,e)),this}setText(t,e,i={}){return this.modifiers.push(new Se(t,e,i)),this}getHeight(){return this.height}getSpacingBetweenLines(){return this.options.spacing_between_lines_px}getBoundingBox(){return new C(this.x,this.y,this.width,this.getBottomY()-this.y)}getBottomY(){const t=this.options,e=t.spacing_between_lines_px;return this.getYForLine(t.num_lines)+t.space_below_staff_ln*e}getBottomLineY(){return this.getYForLine(this.options.num_lines)}getYForLine(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+t*i+s*i}getLineForY(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return(t-this.y)/i-s}getYForTopText(t=0){return this.getYForLine(-t-this.options.top_text_position)}getYForBottomText(t=0){return this.getYForLine(this.options.bottom_text_position+t)}getYForNote(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+s*i+5*i-t*i}getYForGlyphs(){return this.getYForLine(3)}addModifier(t,e){return void 0!==e&&t.setPosition(e),t.setStave(this),this.formatted=!1,this.modifiers.push(t),this}addEndModifier(t){return this.addModifier(t,wt.END),this}setBegBarType(t){const{SINGLE:e,REPEAT_BEGIN:i,NONE:s}=Et;return t!==e&&t!==i&&t!==s||(this.modifiers[0].setType(t),this.formatted=!1),this}setEndBarType(t){return t!==Et.REPEAT_BEGIN&&(this.modifiers[1].setType(t),this.formatted=!1),this}setClefLines(t){return this.clef=t,this}setClef(t,e,i,s){void 0===s&&(s=wt.BEGIN),s===wt.END?this.endClef=t:this.clef=t;const n=this.getModifiers(s,me.CATEGORY);return 0===n.length?this.addClef(t,e,i,s):n[0].setType(t,e,i),this}getClef(){return this.clef}setEndClef(t,e,i){return this.setClef(t,e,i,wt.END),this}getEndClef(){return this.endClef}setKeySignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,_e.CATEGORY);return 0===s.length?this.addKeySignature(t,e,i):s[0].setKeySig(t,e),this}setEndKeySignature(t,e){return this.setKeySignature(t,e,wt.END),this}setTimeSignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,ve.CATEGORY);return 0===s.length?this.addTimeSignature(t,e,i):s[0].setTimeSig(t),this}setEndTimeSignature(t,e){return this.setTimeSignature(t,e,wt.END),this}addKeySignature(t,e,i){return void 0===i&&(i=wt.BEGIN),this.addModifier(new _e(t,e).setPosition(i),i),this}addClef(t,e,i,s){return void 0===s||s===wt.BEGIN?this.clef=t:s===wt.END&&(this.endClef=t),this.addModifier(new me(t,e,i),s),this}addEndClef(t,e,i){return this.addClef(t,e,i,wt.END),this}addTimeSignature(t,e,i){return this.addModifier(new ve(t,e),i),this}addEndTimeSignature(t,e){return this.addTimeSignature(t,e,wt.END),this}addTrebleGlyph(){return this.addClef("treble"),this}getModifiers(t,e){const i=void 0===t,s=void 0===e;return i&&s?this.modifiers:i?this.modifiers.filter((t=>e===t.getCategory())):s?this.modifiers.filter((e=>t===e.getPosition())):this.modifiers.filter((i=>t===i.getPosition()&&e===i.getCategory()))}sortByCategory(t,e){for(let i=t.length-1;i>=0;i--)for(let s=0;se[t[s+1].getCategory()]){const e=t[s];t[s]=t[s+1],t[s+1]=e}}format(){const t=this.modifiers[0],e=this.modifiers[1],i=this.getModifiers(wt.BEGIN),s=this.getModifiers(wt.END);let n,a,r;this.sortByCategory(i,be),this.sortByCategory(s,we),i.length>1&&t.getType()===Et.REPEAT_BEGIN&&(i.push(i.splice(0,1)[0]),i.splice(0,0,new kt(Et.SINGLE))),s.indexOf(e)>0&&s.splice(0,0,new kt(Et.NONE));let h=0,c=this.x;for(let t=0;t0){t.save(),t.setFont(this.textFont);const e=t.measureText(""+this.measure).width;n=this.getYForTopText(0)+3,t.fillText(""+this.measure,this.x-e/2,n),t.restore()}return this}getVerticalBarWidth(){return this.options.vertical_bar_width}getConfigForLines(){return this.options.line_config}setConfigForLine(t,e){if(t>=this.options.num_lines||t<0)throw new p("StaveConfigError","The line number must be within the range of the number of lines in the Stave.");if(void 0===e.visible)throw new p("StaveConfigError","The line configuration object is missing the 'visible' property.");if("boolean"!=typeof e.visible)throw new p("StaveConfigError","The line configuration objects 'visible' property must be true or false.");return this.options.line_config[t]=e,this}setConfigForLines(t){if(t.length!==this.options.num_lines)throw new p("StaveConfigError","The length of the lines configuration array must match the number of lines in the Stave");for(const e in t)null==t[e].visible&&(t[e]=this.options.line_config[e]),this.options.line_config[e]=Object.assign(Object.assign({},this.options.line_config[e]),t[e]);return this.options.line_config=t,this}static formatBegModifiers(t){const e=e=>{let i=0;t.forEach((t=>{const s=t.getModifiers(wt.BEGIN,e);s.length>0&&s[0].getX()>i&&(i=s[0].getX())}));let s=0;t.forEach((t=>{s=0;t.getModifiers(wt.BEGIN,e).forEach((t=>{i-t.getX()>s&&(s=i-t.getX())}));const n=t.getModifiers(wt.BEGIN);let a=!1;n.forEach((t=>{t.getCategory()===e&&(a=!0),a&&s>0&&t.setX(t.getX()+s)})),t.setNoteStartX(t.getNoteStartX()+s)}))};t.forEach((t=>{t.formatted||t.format()})),e(u.Clef),e(u.KeySignature),e(u.TimeSignature);let i=0;t.forEach((t=>{t.getNoteStartX()>i&&(i=t.getNoteStartX())})),t.forEach((t=>{t.setNoteStartX(i)})),i=0,t.forEach((t=>{t.getModifiers(wt.BEGIN,u.Barline).forEach((t=>{t.getType()==Et.REPEAT_BEGIN&&t.getX()>i&&(i=t.getX())}))})),t.forEach((t=>{t.getModifiers(wt.BEGIN,u.Barline).forEach((t=>{t.getType()==Et.REPEAT_BEGIN&&t.setX(i)}))}))}}function Be(t,e,i,s,n){if(e!==Ce.type.BOLD_DOUBLE_LEFT&&e!==Ce.type.BOLD_DOUBLE_RIGHT)throw new p("InvalidConnector","A REPEAT_BEGIN or REPEAT_END type must be provided.");let a=3,o=3.5;e===Ce.type.BOLD_DOUBLE_RIGHT&&(a=-5,o=3),t.fillRect(i+a,s,1,n-s),t.fillRect(i-2,s,o,n-s)}Ee.TEXT_FONT={family:M.SANS_SERIF,size:8,weight:P.NORMAL,style:A.NORMAL};class Ce extends L{static get CATEGORY(){return u.StaveConnector}constructor(t,e){super(),this.thickness=z.STAVE_LINE_THICKNESS,this.width=3,this.top_stave=t,this.bottom_stave=e,this.type=Ce.type.DOUBLE,this.resetFont(),this.x_shift=0,this.texts=[]}setType(t){const e="string"==typeof t?Ce.typeString[t]:t;return Object.values(Ce.type).includes(e)&&(this.type=e),this}getType(){return this.type}setText(t,e={}){return this.texts.push({content:t,options:Object.assign({shift_x:0,shift_y:0},e)}),this}setXShift(t){if("number"!=typeof t)throw new p("InvalidType","x_shift must be a Number");return this.x_shift=t,this}getXShift(){return this.x_shift}draw(){const t=this.checkContext();this.setRendered();let e=this.top_stave.getYForLine(0),i=this.bottom_stave.getYForLine(this.bottom_stave.getNumLines()-1)+this.thickness,s=this.width,n=this.top_stave.getX();(this.type===Ce.type.SINGLE_RIGHT||this.type===Ce.type.BOLD_DOUBLE_RIGHT||this.type===Ce.type.THIN_DOUBLE)&&(n=this.top_stave.getX()+this.top_stave.getWidth());let a=i-e;switch(this.type){case Ce.type.SINGLE:case Ce.type.SINGLE_LEFT:case Ce.type.SINGLE_RIGHT:s=1;break;case Ce.type.DOUBLE:n-=this.width+2,e-=this.thickness,a+=.5;break;case Ce.type.BRACE:{s=12;const n=this.top_stave.getX()-2+this.x_shift,o=e,r=n,h=i,c=n-s,d=o+a/2,l=c-.9*s,g=o+.2*a,m=n+1.1*s,_=d-.135*a,u=m,p=d+.135*a,x=l,f=h-.2*a,S=c-s,y=f,T=n+.4*s,v=d+.135*a,b=T,w=d-.135*a,E=S,B=g;t.beginPath(),t.moveTo(n,o),t.bezierCurveTo(l,g,m,_,c,d),t.bezierCurveTo(u,p,x,f,r,h),t.bezierCurveTo(S,y,T,v,c,d),t.bezierCurveTo(b,w,E,B,n,o),t.fill(),t.stroke();break}case Ce.type.BRACKET:e-=6,i+=6,a=i-e,Z.renderGlyph(t,n-5,e,40,"bracketTop"),Z.renderGlyph(t,n-5,i,40,"bracketBottom"),n-=this.width+2;break;case Ce.type.BOLD_DOUBLE_LEFT:Be(t,this.type,n+this.x_shift,e,i-this.thickness);break;case Ce.type.BOLD_DOUBLE_RIGHT:Be(t,this.type,n,e,i-this.thickness);break;case Ce.type.THIN_DOUBLE:s=1,a-=this.thickness;break;case Ce.type.NONE:break;default:throw new p("InvalidType",`The provided StaveConnector.type (${this.type}) is invalid.`)}this.type!==Ce.type.BRACE&&this.type!==Ce.type.BOLD_DOUBLE_LEFT&&this.type!==Ce.type.BOLD_DOUBLE_RIGHT&&this.type!==Ce.type.NONE&&t.fillRect(n,e,s,a),this.type===Ce.type.THIN_DOUBLE&&t.fillRect(n-3,e,s,a),t.save(),t.setLineWidth(2),t.setFont(this.textFont);for(let e=0;et.isCenterAligned()))}getMetrics(){const{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}=this;return{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}}getCurrentTick(){return this.currentTick}setCurrentTick(t){this.currentTick=t,this.preFormatted=!1}addTickable(t,e){if(!t)throw new p("BadArgument","Invalid tickable added.");if(!t.shouldIgnoreTicks()){const e=t.getTicks();e.greaterThan(this.maxTicks)&&(this.maxTicks=e.clone(),this.maxTickable=t),(null==this.minTicks||e.lessThan(this.minTicks))&&(this.minTicks=e.clone(),this.minTickable=t)}return t.setTickContext(this),this.tickables.push(t),this.tickablesByVoice[e||0]=t,this.preFormatted=!1,this}preFormat(){if(this.preFormatted)return this;for(let t=0;t{e.addToModifierContext(new ge);const s=(new Ne).addTickable(e).preFormat(),n=s.getMetrics();return s.setX(t+n.totalLeftPx),t+s.getWidth()+n.totalRightPx+i}),e)}static plotDebugging(t,e,i,s,n,a){const o=i+(a=Object.assign({stavePadding:z.currentMusicFont().lookupMetric("stave.padding")},a)).stavePadding,r=e.contextGaps;t.save(),t.setFont(M.SANS_SERIF,8),r.gaps.forEach((e=>{var i,a,r;i=o+e.x1,a=o+e.x2,r="rgba(100,200,100,0.4)",t.beginPath(),t.setStrokeStyle(r),t.setFillStyle(r),t.setLineWidth(1),t.fillRect(i,s,Math.max(a-i,0),n-s),t.setFillStyle("green"),t.fillText(Math.round(e.x2-e.x1).toString(),o+e.x1,n+12)})),t.setFillStyle("red"),t.fillText(`Loss: ${(e.totalCost||0).toFixed(2)} Shift: ${(e.totalShift||0).toFixed(2)} Gap: ${r.total.toFixed(2)}`,o-20,n+27),t.restore()}static FormatAndDraw(t,e,i,s){let n={auto_beam:!1,align_rests:!1};"object"==typeof s?n=Object.assign(Object.assign({},n),s):"boolean"==typeof s&&(n.auto_beam=s);const a=new Xt(z.TIME4_4).setMode(Xt.Mode.SOFT).addTickables(i),o=n.auto_beam?Le.applyAndGetBeams(a):[];return(new Ae).joinVoices([a]).formatToStave([a],e,{align_rests:n.align_rests,stave:e}),a.setStave(e).draw(t,e),o.forEach((e=>e.setContext(t).draw())),a.getBoundingBox()}static FormatAndDrawTab(t,e,i,s,n,a,o){let r={auto_beam:a,align_rests:!1};"object"==typeof o?r=Object.assign(Object.assign({},r),o):"boolean"==typeof o&&(r.auto_beam=o);const h=new Xt(z.TIME4_4).setMode(Xt.Mode.SOFT).addTickables(n),c=new Xt(z.TIME4_4).setMode(Xt.Mode.SOFT).addTickables(s),d=r.auto_beam?Le.applyAndGetBeams(h):[];(new Ae).joinVoices([h]).joinVoices([c]).formatToStave([h,c],i,{align_rests:r.align_rests}),h.draw(t,i),c.draw(t,e),d.forEach((e=>e.setContext(t).draw())),new Ce(i,e).setContext(t).draw()}static AlignRestsToNotes(t,e,i){t.forEach(((s,n)=>{if(g(s)&&s.isRest()){if(s.getTuplet()&&!i)return;const a=s.getGlyphProps().position.toUpperCase();if("R/4"!==a&&"B/4"!==a)return;if(e||s.getBeam()){const e=s.getKeyProps()[0];if(0===n)e.line=Pe(t,e.line,n,!1);else if(n>0&&nAe.AlignRestsToNotes(t.getTickables(),e)))}preCalculateMinTotalWidth(t){const e=z.currentMusicFont().lookupMetric("stave.unalignedNotePadding");let i=0,s=0,n=0;const a=[],o=[];if(this.hasMinTotalWidth)return this.minTotalWidth;if(!t)throw new p("BadArgument","'voices' required to run preCalculateMinTotalWidth");this.createTickContexts(t);const{list:r,map:h}=this.tickContexts;this.minTotalWidth=0,r.forEach((e=>{const r=h[e];r.preFormat(),r.getTickables().length{s+=t.getMetrics().width,n+=t.getTicks().value(),a.push(t.getMetrics().width),o.push(t.getTicks().value())}));const c=r.getWidth();this.minTotalWidth+=c})),this.hasMinTotalWidth=!0;const c=s>0?s/a.length:1/a.length,d=w(a.map((t=>Math.pow(t-c,2)))),l=Math.pow(d/a.length,.5)/c,g=n/o.length,m=w(o.map((t=>Math.pow(t-g,2)))),_=Math.pow(m/o.length,.5)/g,u=Math.max(_,l)*r.length*e,x=e*i;return this.minTotalWidth+Math.max(x,u)}getMinTotalWidth(){if(!this.hasMinTotalWidth)throw new p("NoMinTotalWidth","Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'");return this.minTotalWidth}static getResolutionMultiplier(t){if(!t||!t.length)throw new p("BadArgument","No voices to format");const e=t[0].getTotalTicks();return t.reduce(((t,i)=>{if(!i.getTotalTicks().equals(e))throw new p("TickMismatch","Voices should have same total note duration in ticks.");if(i.getMode()===Xt.Mode.STRICT&&!i.isComplete())throw new p("IncompleteVoice","Voice does not have enough notes.");return Math.max(t,E.LCM(t,i.getResolutionMultiplier()))}),1)}createModifierContexts(t){if(0==t.length)return;const e=Ae.getResolutionMultiplier(t),i=new Map,s=[];t.forEach((t=>{const n=new E(0,e);t.getTickables().forEach((t=>{const e=n.numerator;let a=i.get(t.getStave());if(a||(i.set(t.getStave(),{}),a=i.get(t.getStave())),!(a?a[e]:void 0)){const t=new ge;s.push(t),a[e]=t}t.addToModifierContext(a[e]),n.add(t.getTicks())}))})),this.modifierContexts.push({map:i,array:s,resolutionMultiplier:e})}createTickContexts(t){const e=function(t,e,i){if(0==t.length)return{map:{},array:[],list:[],resolutionMultiplier:0};const s={},n=[],a=[],o=Ae.getResolutionMultiplier(t);return t.forEach(((t,r)=>{const h=new E(0,o);t.getTickables().forEach((t=>{const o=h.numerator;if(!s[o]){const t=e({tickID:o});a.push(t),s[o]=t,n.push(o)}i(t,s[o],r),h.add(t.getTicks())}))})),{map:s,array:a,list:n.sort(((t,e)=>t-e)),resolutionMultiplier:o}}(t,(t=>new Ne(t)),((t,e,i)=>e.addTickable(t,i)));this.tickContexts=e;const i=this.tickContexts.array;return i.forEach((t=>{t.tContexts=i})),e}getTickContexts(){return this.tickContexts}preFormat(t=0,e,i,s){const n=this.tickContexts;if(!n)throw new p("NoTickContexts","preFormat requires TickContexts");const{list:a,map:o}=n;this.lossHistory=[],i&&s&&i.forEach((t=>t.setStave(s).preFormat()));let r=0,h=0;this.minTotalWidth=0;let c=0;a.forEach((t=>{const e=o[t];e.preFormat();const i=e.getWidth();this.minTotalWidth+=i;const s=e.getMaxTicks().value();c+=s;const n=e.getMetrics();r=r+h+n.totalLeftPx,e.setX(r),h=i-n.totalLeftPx}));const{globalSoftmax:d,softmaxFactor:l,maxIterations:g}=this.formatterOptions,m=w(a.map((t=>Math.pow(l,o[t].getMaxTicks().value()/c))));if(this.minTotalWidth=r+h,this.hasMinTotalWidth=!0,t<=0)return this.evaluate();const _=o[a[0]],u=o[a[a.length-1]];function x(t){return a.map(((e,i)=>{const s=o[e],n=s.getTickablesByVoice();let r;if(i>0){const e=o[a[i-1]];for(let h=i-1;h>=0;h--){const i=o[a[h]].getTickablesByVoice(),g=[];if(Object.keys(n).forEach((t=>{i[t]&&g.push(t)})),g.length>0){let a=0,o=1/0,h=0;if(g.forEach((t=>{const e=i[t].getTicks().value();e>a&&(r=i[t],a=e);const s=n[t],h=s.getX()-(s.getMetrics().modLeftPx+s.getMetrics().leftDisplacedHeadPx),c=i[t].getMetrics(),d=i[t].getX()+c.notePx+c.modRightPx+c.rightDisplacedHeadPx;o=Math.min(o,h-d)})),o=Math.min(o,s.getX()-(e.getX()+.05*t)),d){const e=c;h=Math.pow(l,a/e)/m*t}else void 0!==r&&(h=r.getVoice().softmax(a)*t);return{expectedDistance:h,maxNegativeShiftPx:o,fromTickable:r}}}}return{expectedDistance:0,fromTickablePx:0,maxNegativeShiftPx:0}}))}function S(t){const e=y/2;let i=0;return a.forEach(((s,n)=>{const a=o[s];if(n>0){const e=a.getX(),s=t[n],o=f(s.fromTickable).getX()+s.expectedDistance-(e+i);let r=0;o>0?i+=o:o<0&&(r=Math.min(s.maxNegativeShiftPx,Math.abs(o)),i+=-r),a.setX(e+i)}a.getCenterAlignedTickables().forEach((t=>{t.setCenterXShift(e-a.getX())}))})),u.getX()-_.getX()}const y=t-u.getMetrics().notePx-u.getMetrics().totalRightPx-_.getMetrics().totalLeftPx,T=z.currentMusicFont(),v=T.lookupMetric("stave.endPaddingMin"),b=T.lookupMetric("stave.endPaddingMax"),E=T.lookupMetric("stave.padding");let B=y;const C=x(B);let N=S(C);if(1===a.length)return 0;const P=((t,e)=>{let i=t/2;if(e.length>1)for(let t=1;t{let e=0;const i=u&&u.getMaxTickable();if(i){const s=i.getVoice();if(s.getTicksUsed().value()>s.getTotalTicks().value())return 2*bF&&M>0||N+k1;)B-=N-F,k=A(B),D=k-(b-v),N=S(x(B)),M--;return this.justifyWidth=t,this.evaluate()}evaluate(){const t=this.tickContexts,e=this.justifyWidth;this.contextGaps={total:0,gaps:[]},t.list.forEach(((e,i)=>{if(0===i)return;const s=t.list[i-1],n=t.map[s],a=t.map[e],o=n.getMetrics(),r=a.getMetrics(),h=n.getX()+o.notePx+o.totalRightPx,c=a.getX()-r.totalLeftPx,d=c-h;this.contextGaps.total+=d,this.contextGaps.gaps.push({x1:h,x2:c}),a.getFormatterMetrics().freedom.left=d,n.getFormatterMetrics().freedom.right=d})),this.durationStats={};const i=this.durationStats;this.voices.forEach((t=>{t.getTickables().forEach(((t,s,n)=>{const a=t.getTicks().clone().simplify().toString(),o=t.getMetrics(),r=t.getFormatterMetrics(),h=t.getX()+o.notePx+o.modRightPx+o.rightDisplacedHeadPx;let c=0;if(s{t.getTickables().forEach((t=>{const e=t.getTicks().clone().simplify().toString(),n=t.getFormatterMetrics();n.space.mean=i[e].mean,n.duration=e,n.iterations+=1,n.space.deviation=n.space.used-n.space.mean,s+=Math.pow(n.space.deviation,2)}))})),this.totalCost=Math.sqrt(s),this.lossHistory.push(this.totalCost),this.totalCost}tune(t){var e;const i=this.tickContexts;if(!i)return 0;const s=null!==(e=null==t?void 0:t.alpha)&&void 0!==e?e:.5;let n=0;return this.totalShift=0,i.list.forEach(((t,e,a)=>{const o=i.map[t],r=e>0?i.map[a[e-1]]:void 0,h=et.getFormatterMetrics().space.deviation)));c>0?n=-Math.min(o.getFormatterMetrics().freedom.right,Math.abs(c)):c<0&&(n=h?Math.min(h.getFormatterMetrics().freedom.right,Math.abs(c)):0),n*=s,this.totalShift+=n})),this.evaluate()}postFormat(){return this.modifierContexts.forEach((t=>{t.array.forEach((t=>t.postFormat()))})),this.tickContexts.list.forEach((t=>{this.tickContexts.map[t].postFormat()})),this}joinVoices(t){return this.createModifierContexts(t),this.hasMinTotalWidth=!1,this}format(t,e,i){const s=Object.assign({align_rests:!1},i);this.voices=t;const n=this.formatterOptions.softmaxFactor;return n&&this.voices.forEach((t=>t.setSoftmaxFactor(n))),this.alignRests(t,s.align_rests),this.createTickContexts(t),this.preFormat(e,s.context,t,s.stave),s.stave&&this.postFormat(),this}formatToStave(t,e,i){const s=Object.assign({context:e.getContext()},i),n=e.getNoteEndX()-e.getNoteStartX()-Ee.defaultPadding;return function(...t){Ae.DEBUG&&S("Vex.Flow.Formatter",t)}("Formatting voices to width: ",n),this.format(t,n,s)}getTickContext(t){var e;return null===(e=this.tickContexts)||void 0===e?void 0:e.map[t]}}var ke;Ae.DEBUG=!1,function(t){t[t.BOTTOM=-1]="BOTTOM",t[t.TOP=1]="TOP"}(ke||(ke={}));class De extends L{static get CATEGORY(){return u.Tuplet}static get LOCATION_TOP(){return ke.TOP}static get LOCATION_BOTTOM(){return ke.BOTTOM}static get NESTING_OFFSET(){return 15}static get metrics(){const t=z.currentMusicFont().getMetrics().tuplet;if(!t)throw new p("BadMetrics","tuplet missing");return t}constructor(t,e={}){if(super(),this.numerator_glyphs=[],this.denom_glyphs=[],!t||!t.length)throw new p("BadArguments","No notes provided for tuplet.");this.options=e,this.notes=t,this.num_notes=null!=this.options.num_notes?this.options.num_notes:t.length,this.options.beats_occupied&&this.beatsOccupiedDeprecationWarning(),this.notes_occupied=this.options.notes_occupied||this.options.beats_occupied||2,null!=this.options.bracketed?this.bracketed=this.options.bracketed:this.bracketed=t.some((t=>!t.hasBeam())),this.ratioed=null!=this.options.ratioed?this.options.ratioed:Math.abs(this.notes_occupied-this.num_notes)>1,this.point=3*z.NOTATION_FONT_SCALE/5,this.y_pos=16,this.x_pos=100,this.width=200,this.setTupletLocation(this.options.location||De.LOCATION_TOP),Ae.AlignRestsToNotes(t,!0,!0),this.resolveGlyphs(),this.attach()}attach(){for(let t=0;t=1;)this.numerator_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10);for(this.denom_glyphs=[],t=this.notes_occupied;t>=1;)this.denom_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10)}getNestedTupletCount(){const t=this.location,e=this.notes[0];let i=n(e,t),s=n(e,t);function n(t,e){return t.getTupletStack().filter((t=>t.location===e)).length}return this.notes.forEach((e=>{const a=n(e,t);i=a>i?a:i,s=a0&&(s=Math.min(a,s))}}}else{let t=De.metrics.bottomLine;this.notes.forEach((e=>{const i=e.getModifierContext();i&&(t=Math.max(t,i.getState().text_line+1))})),s=i.checkStave().getYForLine(t)+De.metrics.noteHeadOffset;for(let t=0;ts&&(s=e)}}return s+t+e}draw(){const t=this.checkContext();this.setRendered();const e=this.notes[0],i=this.notes[this.notes.length-1];this.bracketed?(this.x_pos=e.getTieLeftX()-5,this.width=i.getTieRightX()-this.x_pos+5):(this.x_pos=e.getStemX(),this.width=i.getStemX()-this.x_pos),this.y_pos=this.getYPosition();const s=(t,e)=>t+f(e.getMetrics().width);let n=this.numerator_glyphs.reduce(s,0);this.ratioed&&(n=this.denom_glyphs.reduce(s,n),n+=.32*this.point);const a=this.x_pos+this.width/2-n/2;if(this.bracketed){const e=this.width/2-n/2-5;e>0&&(t.fillRect(this.x_pos,this.y_pos,e,1),t.fillRect(this.x_pos+this.width/2+n/2+5,this.y_pos,e,1),t.fillRect(this.x_pos,this.y_pos+(this.location===De.LOCATION_BOTTOM?1:0),1,10*this.location),t.fillRect(this.x_pos+this.width,this.y_pos+(this.location===De.LOCATION_BOTTOM?1:0),1,10*this.location))}const o=z.currentMusicFont().lookupMetric("digits.shiftY",0);let r=0;if(this.numerator_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=f(e.getMetrics().width)})),this.ratioed){const e=a+r+.16*this.point,i=.06*this.point;t.beginPath(),t.arc(e,this.y_pos-.08*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),t.beginPath(),t.arc(e,this.y_pos+.12*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),r+=.32*this.point,this.denom_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=f(e.getMetrics().width)}))}}}function Fe(t){let e=0;return t.forEach((t=>{t.keyProps&&t.keyProps.forEach((t=>{e+=t.line-3}))})),e>=0?nt.DOWN:nt.UP}const Me="L",Re="R",Oe="B";class Le extends L{static get CATEGORY(){return u.Beam}getStemDirection(){return this.stem_direction}static getDefaultBeamGroups(t){t&&"c"!==t||(t="4/4");const e={"1/2":["1/2"],"2/2":["1/2"],"3/2":["1/2"],"4/2":["1/2"],"1/4":["1/4"],"2/4":["1/4"],"3/4":["1/4"],"4/4":["1/4"],"1/8":["1/8"],"2/8":["2/8"],"3/8":["3/8"],"4/8":["2/8"],"1/16":["1/16"],"2/16":["2/16"],"3/16":["3/16"],"4/16":["2/16"]}[t];if(void 0!==e)return e.map((t=>(new E).parse(t)));{const e=parseInt(t.split("/")[0],10),i=parseInt(t.split("/")[1],10);if(e%3==0)return[new E(3,i)];if(i>4)return[new E(2,i)];if(i<=4)return[new E(1,i)]}return[new E(1,4)]}static applyAndGetBeams(t,e,i){return Le.generateBeams(t.getTickables(),{groups:i,stem_direction:e})}static generateBeams(t,e={}){e.groups&&e.groups.length||(e.groups=[new E(2,8)]);const i=e.groups.map((t=>{if(!t.multiply)throw new p("InvalidBeamGroups","The beam groups must be an array of Vex.Flow.Fractions");return t.clone().multiply(z.RESOLUTION,1)})),s=t;let n=0,a=[],o=[];function r(){i.length-1>n?n+=1:n=0}!function(){let t=[],e=new E(0,1);s.forEach((s=>{if(t=[],s.shouldIgnoreTicks())return a.push(o),void(o=t);o.push(s);const h=i[n].clone(),c=(d=o,d.reduce(((t,e)=>e.getTicks().clone().add(t)),new E(0,1))).add(e);var d;const l=z.durationToNumber(s.getDuration())<8;if(l&&s.getTuplet()&&(h.numerator*=2),c.greaterThan(h)){if(!l){const e=o.pop();e&&t.push(e)}a.push(o);do{e=c.subtract(i[n]),r()}while(e.greaterThanEquals(i[n]));o=t}else c.equals(h)&&(a.push(o),e=new E(0,1),o=t,r())})),o.length>0&&a.push(o)}(),function(){const t=[];a.forEach((i=>{let s=[];i.forEach(((i,n,a)=>{const o=0===n||n===a.length-1,r=a[n-1],h=!e.beam_rests&&i.isRest(),c=e.beam_rests&&e.beam_middle_only&&i.isRest()&&o;let d=!1;if(e.maintain_stem_directions&&r&&!i.isRest()&&!r.isRest()){const t=r.getStemDirection();d=i.getStemDirection()!==t}const l=parseInt(i.getDuration(),10)<8;h||c||d||l?(s.length>0&&t.push(s),s=d?[i]:[]):s.push(i)})),s.length>0&&t.push(s)})),a=t}(),a.forEach((t=>{let i;if(e.maintain_stem_directions){const e=function(t){for(let e=0;e{t.setStemDirection(e)}))}(t,i)}));const h=a.filter((t=>{if(t.length>1){let e=!0;return t.forEach((t=>{t.getIntrinsicTicks()>=z.durationToTicks("4")&&(e=!1)})),e}return!1})),c=function(){const t=[];return a.forEach((e=>{let i;e.forEach((e=>{const s=e.getTuplet();s&&i!==s&&(i=s,t.push(i))}))})),t}(),d=[];return h.forEach((t=>{const i=new Le(t);e.show_stemlets&&(i.render_options.show_stemlets=!0),e.secondary_breaks&&(i.render_options.secondary_break_ticks=z.durationToTicks(e.secondary_breaks)),!0===e.flat_beams&&(i.render_options.flat_beams=!0,i.render_options.flat_beam_offset=e.flat_beam_offset),d.push(i)})),c.forEach((t=>{const e=t.notes[0].stem_direction===nt.DOWN?ke.BOTTOM:ke.TOP;t.setTupletLocation(e);let i=!1;for(let e=0;e=z.durationToTicks("4"))throw new p("BadArguments","Beams can only be applied to notes shorter than a quarter note.");let i,s;this.stem_direction=t[0].getStemDirection();let n=this.stem_direction;if(e&&g(t[0]))n=Fe(t);else if(e&&_(t[0])){const e=t.reduce(((t,e)=>t+e.getStemDirection()),0);n=e>-1?nt.UP:nt.DOWN}for(i=0;it.getGlyphProps().beam_count)).reduce(((t,e)=>e>t?e:t))}breakSecondaryAt(t){return this.break_on_indices=t,this}setPartialBeamSideAt(t,e){return this.forcedPartialDirections[t]=e,this}unsetPartialBeamSideAt(t){return delete this.forcedPartialDirections[t],this}getSlopeY(t,e,i,s){return i+(t-e)*s}calculateSlope(){const{notes:t,stem_direction:e,render_options:{max_slope:i,min_slope:s,slope_iterations:n,slope_cost:a}}=this,o=t[0],r=function(t,e){const i=t.getStemExtents().topY,s=t.getStemX();return(e.getStemExtents().topY-i)/(e.getStemX()-s)}(o,t[t.length-1]),h=(i-s)/n;let c=Number.MAX_VALUE,d=0,l=0;for(let n=s;n<=i;n+=h){let i=0,s=0;for(let a=1;an)&&(h=n,o=Math.min(...s.getYs()),r=s.getBeamCount())}let c=a/t.length;const d=s+r*(1.5*i),l=o+d*-e;e===nt.DOWN&&cl&&(c=o-d),n?(e===nt.DOWN&&c>n||e===nt.UP&&c=8&&(d=-1!==this.break_on_indices.indexOf(h),this.render_options.secondary_break_ticks&&r>=this.render_options.secondary_break_ticks&&(r=0,d=!0));const l=c.getIntrinsicTicks(){const i=e.getStem();if(i){const s=e.getStemX();i.setNoteHeadXBounds(s,s),i.setContext(t).draw()}}),this)}drawBeamLines(t){const e=["4","8","16","32","64"],i=this.notes[0];let s=this.getBeamYToDraw();const n=i.getStemX(),a=this.render_options.beam_width*this.stem_direction;for(let i=0;i0||!0===e;return!e||n>0||(this.pos=s),o?this.matchSuccess():this.matchFail(s),{success:o,results:i,numMatches:n}}expectZeroOrMore(t){return this.expectOneOrMore(t,!0)}expect(t){if(He("Evaluating rule function:",t),!t)throw new p("Invalid rule function");let e;const i=t.bind(this.grammar)();if(i.token)e=this.matchToken(i.token,!0===i.noSpace),e.success&&(this.pos+=e.incrementPos);else{if(!i.expect)throw He(i),new p("Bad grammar! No `token` or `expect` property "+i);e=i.oneOrMore?this.expectOneOrMore(i):i.zeroOrMore?this.expectZeroOrMore(i):this.expectOne(i)}const s=[];return e.matches=s,e.results&&e.results.forEach((t=>s.push(Ye(t)))),i.run&&e.success&&i.run({matches:s}),e}}function Xe(...t){Qe.DEBUG&&S("Vex.Flow.EasyScore",t)}je.DEBUG=!1;class Ve{constructor(t){this.builder=t}begin(){return this.LINE}LINE(){return{expect:[this.PIECE,this.PIECES,this.EOL]}}PIECE(){return{expect:[this.CHORDORNOTE,this.PARAMS],run:()=>this.builder.commitPiece()}}PIECES(){return{expect:[this.COMMA,this.PIECE],zeroOrMore:!0}}PARAMS(){return{expect:[this.DURATION,this.TYPE,this.DOTS,this.OPTS]}}CHORDORNOTE(){return{expect:[this.CHORD,this.SINGLENOTE],or:!0}}CHORD(){return{expect:[this.LPAREN,this.NOTES,this.RPAREN],run:t=>this.builder.addChord(t.matches[1])}}NOTES(){return{expect:[this.NOTE],oneOrMore:!0}}NOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE]}}SINGLENOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE],run:t=>{const e=t;this.builder.addSingleNote(e.matches[0],e.matches[1],e.matches[2])}}}ACCIDENTAL(){return{expect:[this.MICROTONES,this.ACCIDENTALS],maybe:!0,or:!0}}DOTS(){return{expect:[this.DOT],zeroOrMore:!0,run:t=>this.builder.setNoteDots(t.matches)}}TYPE(){return{expect:[this.SLASH,this.MAYBESLASH,this.TYPES],maybe:!0,run:t=>this.builder.setNoteType(t.matches[2])}}DURATION(){return{expect:[this.SLASH,this.DURATIONS],maybe:!0,run:t=>this.builder.setNoteDuration(t.matches[1])}}OPTS(){return{expect:[this.LBRACKET,this.KEYVAL,this.KEYVALS,this.RBRACKET],maybe:!0}}KEYVALS(){return{expect:[this.COMMA,this.KEYVAL],zeroOrMore:!0}}KEYVAL(){return{expect:[this.KEY,this.EQUALS,this.VAL],run:t=>this.builder.addNoteOption(t.matches[0],t.matches[2].slice(1,-1))}}VAL(){return{expect:[this.SVAL,this.DVAL],or:!0}}KEY(){return{token:"[a-zA-Z][a-zA-Z0-9]*"}}DVAL(){return{token:'["][^"]*["]'}}SVAL(){return{token:"['][^']*[']"}}NOTENAME(){return{token:"[a-gA-G]"}}OCTAVE(){return{token:"[0-9]+"}}ACCIDENTALS(){return{token:"bb|b|##|#|n"}}MICROTONES(){return{token:"bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o"}}DURATIONS(){return{token:"[0-9whq]+"}}TYPES(){return{token:"[rRsSmMhHgG]"}}LPAREN(){return{token:"[(]"}}RPAREN(){return{token:"[)]"}}COMMA(){return{token:"[,]"}}DOT(){return{token:"[.]"}}SLASH(){return{token:"[/]"}}MAYBESLASH(){return{token:"[/]?"}}EQUALS(){return{token:"[=]"}}LBRACKET(){return{token:"\\["}}RBRACKET(){return{token:"\\]"}}EOL(){return{token:"$"}}}class ze{constructor(t){this.chord=[],this.dots=0,this.options={},this.duration=t}}class Ke{constructor(t){this.commitHooks=[],this.factory=t,this.reset()}reset(t){this.options=Object.assign({stem:"auto",clef:"treble"},t),this.elements={notes:[],accidentals:[]},this.rollingDuration="8",this.resetPiece()}getFactory(){return this.factory}getElements(){return this.elements}addCommitHook(t){this.commitHooks.push(t)}resetPiece(){Xe("resetPiece"),this.piece=new ze(this.rollingDuration)}setNoteDots(t){Xe("setNoteDots:",t),t&&(this.piece.dots=t.length)}setNoteDuration(t){Xe("setNoteDuration:",t),this.rollingDuration=this.piece.duration=t||this.rollingDuration}setNoteType(t){Xe("setNoteType:",t),t&&(this.piece.type=t)}addNoteOption(t,e){Xe("addNoteOption: key:",t,"value:",e),this.piece.options[t]=e}addNote(t,e,i){Xe("addNote:",t,e,i),this.piece.chord.push({key:t,accid:e,octave:i})}addSingleNote(t,e,i){Xe("addSingleNote:",t,e,i),this.addNote(t,e,i)}addChord(t){Xe("startChord"),"object"!=typeof t[0]?this.addSingleNote(t[0]):t.forEach((t=>{t&&this.addNote(...t)})),Xe("endChord")}commitPiece(){Xe("commitPiece");const{factory:t}=this;if(!t)return;const e=Object.assign(Object.assign({},this.options),this.piece.options),i=f(e.stem,"BadArguments","options.stem is not defined").toLowerCase(),s=f(e.clef,"BadArguments","options.clef is not defined").toLowerCase(),{chord:n,duration:a,dots:o,type:r}=this.piece,h=et.accidentals,c=n.map((t=>{var e;return t.key+(h.includes(null!==(e=t.accid)&&void 0!==e?e:"")?t.accid:"")+"/"+t.octave})),d="auto"===i,l="g"==(null==r?void 0:r.toLowerCase())?t.GhostNote({duration:a,dots:o}):t.StaveNote({keys:c,duration:a,dots:o,type:r,clef:s,auto_stem:d});d||l.setStemDirection("up"===i?nt.UP:nt.DOWN);const g=[];n.forEach(((e,i)=>{const s=e.accid;if("string"==typeof s){const e=t.Accidental({type:s});l.addModifier(e,i),g.push(e)}else g.push(void 0)}));for(let t=0;tt(e,l,this))),this.elements.notes.push(l),this.elements.accidentals.push(g),this.resetPiece()}}function $e(t,e){void 0!==t.id&&e.setAttribute("id",t.id)}const Je=/\s*,\s*/;function qe(t,e){void 0!==t.class&&t.class.split(Je).forEach((t=>e.addClass(t)))}class Qe{constructor(t={}){this.defaults={clef:"treble",time:"4/4",stem:"auto"},this.setOptions(t)}set(t){return this.defaults=Object.assign(Object.assign({},this.defaults),t),this}setOptions(t){var e,i;const s=t.factory,n=null!==(e=t.builder)&&void 0!==e?e:new Ke(s);return this.options=Object.assign(Object.assign({commitHooks:[$e,qe,St.easyScoreHook,Lt.easyScoreHook],throwOnError:!1},t),{factory:s,builder:n}),this.factory=s,this.builder=n,this.grammar=new Ve(this.builder),this.parser=new je(this.grammar),null===(i=this.options.commitHooks)||void 0===i||i.forEach((t=>this.addCommitHook(t))),this}setContext(t){return this.factory.setContext(t),this}parse(t,e={}){this.builder.reset(e);const i=this.parser.parse(t);if(!i.success&&this.options.throwOnError)throw Xe(i),new p("Error parsing line: "+t);return i}beam(t,e){return this.factory.Beam({notes:t,options:e}),t}tuplet(t,e){return this.factory.Tuplet({notes:t,options:e}),t}notes(t,e={}){return e=Object.assign({clef:this.defaults.clef,stem:this.defaults.stem},e),this.parse(t,e),this.builder.getElements().notes}voice(t,e={}){return e=Object.assign({time:this.defaults.time},e),this.factory.Voice(e).addTickables(t)}addCommitHook(t){this.builder.addCommitHook(t)}}Qe.DEBUG=!1;const Ze="Ghost note must have valid initialization data to identify duration.";class ti extends It{static get CATEGORY(){return u.GhostNote}constructor(t){if(!t)throw new p("BadArguments",Ze);let e;if("string"==typeof t)e={duration:t};else{if("object"!=typeof t)throw new p("BadArguments",Ze);e=t}super(e),this.setWidth(0)}isRest(){return!0}setStave(t){return super.setStave(t),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){this.setRendered();for(let t=0;t=ri.type.TEXT&&t<=ri.type.MIXED&&(this.type=t),this}setCustomText(t,e){return this.custom_depress_text=t||"",this.custom_release_text=e||"",this}setLine(t){return this.line=t,this}drawBracketed(){const t=this.checkContext();let e,i,s=!1;this.notes.forEach(((n,a,o)=>{var r;s=!s;const h=n.getAbsoluteX(),c=n.checkStave().getYForBottomText(this.line+3);if(h{var s;e=!e;const n=i.checkStave(),a=i.getAbsoluteX(),o=n.getYForBottomText(this.line+3),r=null!==(s=z.currentMusicFont().lookupMetric(`pedalMarking.${e?"down":"up"}.point`))&&void 0!==s?s:z.NOTATION_FONT_SCALE;let h=0;e?this.custom_depress_text?(h=t.measureText(this.custom_depress_text).width,t.fillText(this.custom_depress_text,a-h/2,o)):oi("pedal_depress",t,a,o,r):this.custom_release_text?(h=t.measureText(this.custom_release_text).width,t.fillText(this.custom_release_text,a-h/2,o)):oi("pedal_release",t,a,o,r)}))}draw(){const t=this.checkContext();this.setRendered(),t.save(),t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color),t.setFont(this.textFont),function(...t){ri.DEBUG&&S("Vex.Flow.PedalMarking",t)}("Rendering Pedal Marking"),this.type===ri.type.BRACKET||this.type===ri.type.MIXED?(t.setLineWidth(this.render_options.bracket_line_width),this.drawBracketed()):this.type===ri.type.TEXT&&this.drawText(),t.restore()}}ri.DEBUG=!1,ri.TEXT_FONT={family:M.SERIF,size:12,weight:P.BOLD,style:A.ITALIC},ri.GLYPHS={pedal_depress:{code:"keyboardPedalPed"},pedal_release:{code:"keyboardPedalUp"}},ri.type={TEXT:1,BRACKET:2,MIXED:3},ri.typeString={text:ri.type.TEXT,bracket:ri.type.BRACKET,mixed:ri.type.MIXED};const hi={1:"repeat1Bar",2:"repeat2Bars",4:"repeat4Bars",slash:"repeatBarSlash"};class ci extends ei{static get CATEGORY(){return u.RepeatNote}constructor(t,e,i){super(new Z(hi[t]||"repeat1Bar",z.currentMusicFont().lookupMetric("repeatNote.point",40),{category:"repeatNote"}),Object.assign({duration:"q",align_center:"slash"!==t},e),i)}}function di(t,e,i,s,n,a,o){t.beginPath(),t.moveTo(e,i),t.lineTo(s,n),t.lineTo(a,o),t.lineTo(e,i),t.closePath(),t.fill()}class li extends L{static get CATEGORY(){return u.StaveLine}constructor(t){super(),this.setNotes(t),this.text="",this.resetFont(),this.render_options={padding_left:4,padding_right:3,line_width:1,line_dash:void 0,rounded_end:!0,color:void 0,draw_start_arrow:!1,draw_end_arrow:!1,arrowhead_length:10,arrowhead_angle:Math.PI/8,text_position_vertical:li.TextVerticalPosition.TOP,text_justification:li.TextJustification.CENTER}}setText(t){return this.text=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new p("BadArguments","Notes needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new p("BadArguments","Connected notes must have same number of indices.");return this.notes=t,this.first_note=t.first_note,this.first_indices=t.first_indices,this.last_note=t.last_note,this.last_indices=t.last_indices,this}applyLineStyle(){const t=this.checkContext(),e=this.render_options;e.line_dash&&t.setLineDash(e.line_dash),e.line_width&&t.setLineWidth(e.line_width),e.rounded_end?t.setLineCap("round"):t.setLineCap("square")}applyFontStyle(){const t=this.checkContext();t.setFont(this.textFont);const e=this.render_options.color;e&&(t.setStrokeStyle(e),t.setFillStyle(e))}drawArrowLine(t,e,i){const s=this.render_options.draw_start_arrow&&this.render_options.draw_end_arrow,n=e.x,a=e.y,o=i.x,r=i.y,h=Math.sqrt((o-n)*(o-n)+(r-a)*(r-a)),c=(h-this.render_options.arrowhead_length/3)/h;let d,l,g,m;this.render_options.draw_end_arrow||s?(d=Math.round(n+(o-n)*c),l=Math.round(a+(r-a)*c)):(d=o,l=r),this.render_options.draw_start_arrow||s?(g=n+(o-n)*(1-c),m=a+(r-a)*(1-c)):(g=n,m=a),this.render_options.color&&(t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color)),t.beginPath(),t.moveTo(g,m),t.lineTo(d,l),t.stroke(),t.closePath();const _=Math.atan2(r-a,o-n),u=Math.abs(this.render_options.arrowhead_length/Math.cos(this.render_options.arrowhead_angle));let p,x,f,S,y,T;(this.render_options.draw_end_arrow||s)&&(p=_+Math.PI+this.render_options.arrowhead_angle,f=o+Math.cos(p)*u,S=r+Math.sin(p)*u,x=_+Math.PI-this.render_options.arrowhead_angle,y=o+Math.cos(x)*u,T=r+Math.sin(x)*u,di(t,f,S,o,r,y,T)),(this.render_options.draw_start_arrow||s)&&(p=_+this.render_options.arrowhead_angle,f=n+Math.cos(p)*u,S=a+Math.sin(p)*u,x=_-this.render_options.arrowhead_angle,y=n+Math.cos(x)*u,T=a+Math.sin(x)*u,di(t,f,S,n,a,y,T))}draw(){const t=this.checkContext();this.setRendered();const e=this.first_note,i=this.last_note,s=this.render_options;t.save(),this.applyLineStyle();let n={x:0,y:0},a={x:0,y:0};this.first_indices.forEach(((o,r)=>{const h=this.last_indices[r];n=e.getModifierStartXY(2,o),a=i.getModifierStartXY(1,h);const c=n.y>a.y;n.x+=e.getMetrics().modRightPx+s.padding_left,a.x-=i.getMetrics().modLeftPx+s.padding_right;const d=e.getGlyphProps().getWidth();e.getKeyProps()[o].displaced&&1===e.getStemDirection()&&(n.x+=d+s.padding_left);i.getKeyProps()[h].displaced&&-1===i.getStemDirection()&&(a.x-=d+s.padding_right),n.y+=c?-3:1,a.y+=c?2:0,this.drawArrowLine(t,n,a)})),t.restore();const o=t.measureText(this.text).width,r=s.text_justification;let h=0;if(r===li.TextJustification.LEFT)h=n.x;else if(r===li.TextJustification.CENTER){h=(a.x-n.x)/2+n.x-o/2}else r===li.TextJustification.RIGHT&&(h=a.x-o);let c=0;const d=s.text_position_vertical;return d===li.TextVerticalPosition.TOP?c=e.checkStave().getYForTopText():d===li.TextVerticalPosition.BOTTOM&&(c=e.checkStave().getYForBottomText(z.TEXT_HEIGHT_OFFSET_HACK)),t.save(),this.applyFontStyle(),t.fillText(this.text,h,c),t.restore(),this}}li.TEXT_FONT=Object.assign({},L.TEXT_FONT),li.TextVerticalPosition={TOP:1,BOTTOM:2},li.TextJustification=ae;class gi extends L{static get CATEGORY(){return u.System}constructor(t={}){super(),this.setOptions(t),this.partStaves=[],this.partStaveInfos=[],this.partVoices=[]}setOptions(t={}){if(!t.factory)throw new p("NoFactory","System.setOptions(options) requires a factory.");this.factory=t.factory,this.options=Object.assign(Object.assign({factory:this.factory,x:10,y:10,width:500,spaceBetweenStaves:12,autoWidth:!1,noJustification:!1,debugFormatter:!1,formatIterations:0,noPadding:!1},t),{details:Object.assign({alpha:.5},t.details),formatOptions:Object.assign({},t.formatOptions)}),!1===this.options.noJustification&&void 0===t.width&&(this.options.autoWidth=!0)}getX(){return this.options.x}setX(t){this.options.x=t,this.partStaves.forEach((e=>{e.setX(t)}))}getY(){return this.options.y}setY(t){this.options.y=t,this.partStaves.forEach((e=>{e.setY(t)}))}getStaves(){return this.partStaves}getVoices(){return this.partVoices}setContext(t){return super.setContext(t),this.factory.setContext(t),this}addConnector(t="double"){return this.connector=this.factory.StaveConnector({top_stave:this.partStaves[0],bottom_stave:this.partStaves[this.partStaves.length-1],type:t}),this.connector}addStave(t){var e;const i=Object.assign({left_bar:!1},t.options),s=null!==(e=t.stave)&&void 0!==e?e:this.factory.Stave({x:this.options.x,y:this.options.y,width:this.options.width,options:i}),n=Object.assign(Object.assign({spaceAbove:0,spaceBelow:0,debugNoteMetrics:!1,noJustification:!1},t),{options:i}),a=this.getContext();return n.voices.forEach((t=>{t.setContext(a).setStave(s).getTickables().forEach((t=>t.setStave(s))),this.partVoices.push(t)})),this.partStaves.push(s),this.partStaveInfos.push(n),s}addVoices(t){const e=this.getContext();t.forEach((t=>{t.setContext(e),this.partVoices.push(t)}))}format(){const t=this.options.details;let e=0;const i=new Ae(t);this.formatter=i;let s=this.options.y,n=0;const a=[];this.partStaves.forEach(((t,e)=>{s+=t.space(this.partStaveInfos[e].spaceAbove),t.setY(s),s+=t.space(this.partStaveInfos[e].spaceBelow),s+=t.space(this.options.spaceBetweenStaves),this.partStaveInfos[e].debugNoteMetrics&&(a.push({y:s,stave:t}),s+=15),n=Math.max(n,t.getNoteStartX())})),this.partVoices.forEach((t=>{t.getTickables().forEach((t=>{const e=t.getStave();e&&t.setStave(e)}))})),i.joinVoices(this.partVoices),this.partStaves.forEach((t=>t.setNoteStartX(n))),this.options.autoWidth&&this.partVoices.length>0?(e=i.preCalculateMinTotalWidth(this.partVoices),this.options.width=e+Ee.rightPadding+(n-this.options.x),this.partStaves.forEach((t=>{t.setWidth(this.options.width)}))):e=this.options.noPadding?this.options.width-(n-this.options.x):this.options.width-(n-this.options.x)-Ee.defaultPadding,this.partVoices.length>0&&i.format(this.partVoices,this.options.noJustification?0:e,this.options.formatOptions),i.postFormat();for(let e=0;e{this.partVoices.forEach((i=>{i.getTickables().forEach((i=>{i.getStave()===e.stave&&bt.plotMetrics(t,i,e.y)}))}))}))}}class mi extends It{static get CATEGORY(){return u.TabNote}constructor(t,e=!1){super(t),this.glyphPropsArr=[],this.greatestString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>t>e?t:e)),this.leastString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>tthis.width}setStave(t){super.setStave(t);const e=t.getContext();if(this.setContext(e),e){this.width=0;for(let t=0;ti.width),this.width=Math.max(i.getWidth(),this.width)}this.glyphProps.getWidth=()=>this.width}const i=this.positions.map((({str:e})=>t.getYForLine(Number(e)-1)));return this.setYs(i),this.stem&&this.stem.setYBounds(this.getStemY(),this.getStemY()),this}getPositions(){return this.positions}getModifierStartXY(t,e){if(!this.preFormatted)throw new p("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new p("NoYValues","No Y-Values calculated for this note.");let i=0;if(t===tt.Position.LEFT)i=-2;else if(t===tt.Position.RIGHT)i=this.width+2;else if(t===tt.Position.BELOW||t===tt.Position.ABOVE){i=this.glyphProps.getWidth()/2}return{x:this.getAbsoluteX()+i,y:this.ys[e]}}getLineForRest(){return Number(this.positions[0].str)}preFormat(){this.preFormatted||(this.modifierContext&&this.modifierContext.preFormat(),this.preFormatted=!0)}getStemX(){return this.getCenterGlyphX()}getStemY(){const t=this.checkStave().getNumLines()-.5,e=nt.UP===this.stem_direction?-.5:t;return this.checkStave().getYForLine(e)}getStemExtents(){return this.checkStem().getExtents()}drawFlag(){var t;const{beam:e,glyphProps:i,render_options:{draw_stem:s}}=this,n=this.checkContext(),a=null==e&&s;if(i.flag&&a){const e=this.getStemX(),i=this.getStemDirection()===nt.DOWN?this.getStemY()-this.checkStem().getHeight()-(this.glyphProps?this.glyphProps.stem_down_extension:0):this.getStemY()-this.checkStem().getHeight()+(this.glyphProps?this.glyphProps.stem_up_extension:0);null===(t=this.flag)||void 0===t||t.render(n,e,i)}}drawModifiers(){this.modifiers.forEach((t=>{r(t)&&!this.render_options.draw_dots||(t.setContext(this.getContext()),t.drawWithStyle())}))}drawStemThrough(){const t=this.getStemX(),e=this.getStemY(),i=this.checkContext(),s=this.render_options.draw_stem,n=this.render_options.draw_stem_through_stave;if(s&&n){const s=function(t,e,i,s){const n=1!==s,a=-1!==s,o=i.getSpacingBetweenLines(),r=i.getNumLines(),h=[];return e.forEach((e=>{const c=e.indexOf(r)>-1,d=e.indexOf(1)>-1;if(n&&d||a&&c)return;1===e.length&&e.push(e[0]);const l=[];e.forEach(((e,n,a)=>{const h=1===e,c=e===r;let d=i.getYForLine(e-1);0!==n||h?n!==a.length-1||c||(d+=o/2-1):d-=o/2-1,l.push(d),1===s&&h?l.push(t-2):-1===s&&c&&l.push(t+2)})),h.push(l.sort(((t,e)=>t-e)))})),h}(e,function(t,e){const i=[];let s=[];for(let n=1;n<=t;n++)e.indexOf(n)>-1?(i.push(s),s=[]):s.push(n);return s.length>0&&i.push(s),i}(this.checkStave().getNumLines(),this.positions.map((t=>Number(t.str)))),this.checkStave(),this.getStemDirection());i.save(),i.setLineWidth(nt.WIDTH),s.forEach((e=>{0!==e.length&&(i.beginPath(),i.moveTo(t,e[0]),i.lineTo(t,e[e.length-1]),i.stroke(),i.closePath())})),i.restore()}}drawPositions(){var t;const e=this.checkContext(),i=this.getAbsoluteX(),s=this.ys;for(let n=0;n{const i=Si.GLYPHS[e];if(!i)throw new p("Invalid dynamics character: "+e);const s=f(this.render_options.glyph_font_size),n=new Z(i.code,s,{category:"textNote"});this.glyphs.push(n),t+=i.width})),this.setWidth(t),this.preFormatted=!0,this}draw(){this.setRendered();const t=this.getAbsoluteX(),e=this.checkStave().getYForLine(this.line+-3);fi("Rendering Dynamics: ",this.sequence);let i=t;this.glyphs.forEach(((t,s)=>{const n=this.sequence[s];t.render(this.checkContext(),i,e),i+=Si.GLYPHS[n].width}))}}Si.DEBUG=!1;class yi extends bt{static get CATEGORY(){return u.TimeSigNote}constructor(t,e){super({duration:"b"}),this.timeSig=new ve(t,e),this.setWidth(this.timeSig.getGlyph().getMetrics().width),this.ignore_ticks=!0}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkStave(),e=this.checkContext();this.setRendered();const i=this.timeSig.getGlyph();i.getContext()||i.setContext(e),i.setStave(t),i.setYShift(t.getYForLine(2)-t.getYForGlyphs()),i.renderToStave(this.getAbsoluteX())}}class Ti extends L{static get CATEGORY(){return u.VibratoBracket}constructor(t){super(),t.start&&(this.start=t.start),t.stop&&(this.stop=t.stop),this.line=1,this.render_options={harsh:!1,wave_height:6,wave_width:4,wave_girth:2,vibrato_width:0}}setLine(t){return this.line=t,this}setHarsh(t){return this.render_options.harsh=t,this}draw(){const t=this.checkContext();this.setRendered();const e=this.start&&this.start.checkStave().getYForTopText(this.line)||this.stop&&this.stop.checkStave().getYForTopText(this.line)||0,i=this.start&&this.start.getAbsoluteX()||this.stop&&this.stop.checkStave().getTieStartX()||0,s=this.stop&&this.stop.getAbsoluteX()-this.stop.getWidth()-5||this.start&&this.start.checkStave().getTieEndX()-10||0;this.render_options.vibrato_width=s-i,function(...t){Ti.DEBUG&&S("Vex.Flow.VibratoBracket",t)}("Rendering VibratoBracket: start_x:",i,"stop_x:",s,"y:",e),de.renderVibrato(t,i,e,this.render_options)}}function vi(...t){bi.DEBUG&&S("Vex.Flow.Factory",t)}Ti.DEBUG=!1;class bi{static newFromElementId(t,e=500,i=200){return new bi({renderer:{elementId:t,width:e,height:i}})}constructor(t={}){vi("New factory: ",t),this.options={stave:{space:10},renderer:{elementId:"",width:500,height:200,background:"#FFF"},font:bi.TEXT_FONT},this.setOptions(t)}reset(){this.renderQ=[],this.systems=[],this.staves=[],this.voices=[],this.stave=void 0}setOptions(t){this.options=Object.assign(Object.assign({},this.options),t),this.initRenderer(),this.reset()}initRenderer(){const{elementId:t,width:e,height:i,background:s}=this.options.renderer;if(null==t)return;if(""==t)throw vi(this),new p("renderer.elementId not set in FactoryOptions");let n=this.options.renderer.backend;if(void 0===n){n=Jt(document.getElementById(t))?re.Backends.CANVAS:re.Backends.SVG}this.context=re.buildContext(t,n,e,i,s)}getContext(){return this.context}setContext(t){return this.context=t,this}getStave(){return this.stave}getVoices(){return this.voices}Stave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1*e}},t),s=new Ee(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}TabStave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1.3*e}},t),s=new _i(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}StaveNote(t){const e=new Ut(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GlyphNote(t,e,i){const s=new ei(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}RepeatNote(t,e,i){const s=new ci(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}GhostNote(t){const e=new ti(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TextNote(t){const e=new fe(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}BarNote(t={}){const e=new Dt(t.type);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}ClefNote(t){const e=Object.assign({type:"treble",options:{size:"default",annotation:void 0}},t),i=new We(e.type,e.options.size,e.options.annotation);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}TimeSigNote(t){const e=Object.assign({time:"4/4"},t),i=new yi(e.time);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}KeySigNote(t){const e=new si(t.key,t.cancelKey,t.alterKey);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TabNote(t){const e=new mi(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GraceNote(t){const e=new ii(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),e}GraceNoteGroup(t){const e=new Vt(t.notes,t.slur);return e.setContext(this.context),e}Accidental(t){const e=new st(t.type);return e.setContext(this.context),e}Annotation(t){const e=Object.assign({text:"p",hJustify:dt.CENTER,vJustify:lt.BOTTOM},t),i=new gt(e.text);return i.setJustification(e.hJustify),i.setVerticalJustification(e.vJustify),i.setFont(e.font),i.setContext(this.context),i}ChordSymbol(t){const e=Object.assign({vJustify:"top",hJustify:"center",kerning:!0,reportWidth:!0},t),i=new Rt;return i.setHorizontal(e.hJustify),i.setVertical(e.vJustify),i.setEnableKerning(e.kerning),i.setReportWidth(e.reportWidth),"string"==typeof e.fontFamily&&"number"==typeof e.fontSize?"string"==typeof e.fontWeight?i.setFont(e.fontFamily,e.fontSize,e.fontWeight):i.setFont(e.fontFamily,e.fontSize,""):"number"==typeof e.fontSize&&i.setFontSize(e.fontSize),i.setContext(this.context),i}Articulation(t){var e;const i=new St(null!==(e=null==t?void 0:t.type)&&void 0!==e?e:"a.");return null!=(null==t?void 0:t.position)&&i.setPosition(t.position),null!=(null==t?void 0:t.betweenLines)&&i.setBetweenLines(t.betweenLines),i.setContext(this.context),i}Ornament(t,e){const i=Object.assign({type:t,position:0,accidental:""},e),s=new Kt(t);return s.setPosition(i.position),i.upperAccidental&&s.setUpperAccidental(i.upperAccidental),i.lowerAccidental&&s.setLowerAccidental(i.lowerAccidental),void 0!==i.delayed&&s.setDelayed(i.delayed),s.setContext(this.context),s}TextDynamics(t){const e=Object.assign({text:"p",duration:"q",dots:0,line:0},t),i=new Si({text:e.text,line:e.line,duration:e.duration,dots:e.dots});return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}Fingering(t){const e=Object.assign({number:"0",position:"left"},t),i=new Lt(e.number);return i.setPosition(e.position),i.setContext(this.context),i}StringNumber(t,e=!0){const i=new he(t.number);return i.setPosition(t.position),i.setContext(this.context),i.setDrawCircle(e),i}TickContext(){return new Ne}ModifierContext(){return new ge}MultiMeasureRest(t){const e=f(t.number_of_measures,"NoNumberOfMeasures"),i=new ai(e,t);return i.setContext(this.context),this.renderQ.push(i),i}Voice(t){const e=Object.assign({time:"4/4"},t),i=new Xt(e.time);return this.voices.push(i),i}StaveConnector(t){const e=new Ce(t.top_stave,t.bottom_stave);return e.setType(t.type).setContext(this.context),this.renderQ.push(e),e}Formatter(t){return new Ae(t)}Tuplet(t){const e=Object.assign({notes:[],options:{}},t),i=new De(e.notes,e.options).setContext(this.context);return this.renderQ.push(i),i}Beam(t){var e,i,s,n,a;const o=new Le(t.notes,null===(e=t.options)||void 0===e?void 0:e.autoStem).setContext(this.context);return o.breakSecondaryAt(null!==(s=null===(i=t.options)||void 0===i?void 0:i.secondaryBeamBreaks)&&void 0!==s?s:[]),(null===(n=t.options)||void 0===n?void 0:n.partialBeamDirections)&&Object.entries(null===(a=t.options)||void 0===a?void 0:a.partialBeamDirections).forEach((([t,e])=>{o.setPartialBeamSideAt(Number(t),e)})),this.renderQ.push(o),o}Curve(t){const e=new Ue(t.from,t.to,t.options).setContext(this.context);return this.renderQ.push(e),e}StaveTie(t){var e;const i=new Ht({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices},t.text);return(null===(e=t.options)||void 0===e?void 0:e.direction)&&i.setDirection(t.options.direction),i.setContext(this.context),this.renderQ.push(i),i}StaveLine(t){var e,i;const s=new li({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices});return(null===(e=t.options)||void 0===e?void 0:e.text)&&s.setText(t.options.text),(null===(i=t.options)||void 0===i?void 0:i.font)&&s.setFont(t.options.font),s.setContext(this.context),this.renderQ.push(s),s}VibratoBracket(t){const e=new Ti({start:t.from,stop:t.to});return t.options.line&&e.setLine(t.options.line),t.options.harsh&&e.setHarsh(t.options.harsh),e.setContext(this.context),this.renderQ.push(e),e}TextBracket(t){const e=new xi({start:t.from,stop:t.to,text:t.text,superscript:t.options.superscript,position:t.options.position});return t.options.line&&e.setLine(t.options.line),t.options.font&&e.setFont(t.options.font),e.setContext(this.context),this.renderQ.push(e),e}System(t={}){t.factory=this;const e=new gi(t).setContext(this.context);return this.systems.push(e),e}EasyScore(t={}){return t.factory=this,new Qe(t)}PedalMarking(t){const e=Object.assign({notes:[],options:{style:"mixed"}},t),i=new ri(e.notes);return i.setType(ri.typeString[e.options.style]),i.setContext(this.context),this.renderQ.push(i),i}NoteSubGroup(t){const e=Object.assign({notes:[]},t),i=new zt(e.notes);return i.setContext(this.context),i}draw(){const t=this.context;this.systems.forEach((e=>e.setContext(t).format())),this.staves.forEach((e=>e.setContext(t).draw())),this.voices.forEach((e=>e.setContext(t).draw())),this.renderQ.forEach((e=>{e.isRendered()||e.setContext(t).draw()})),this.systems.forEach((e=>e.setContext(t).draw())),this.reset()}}bi.DEBUG=!1,bi.TEXT_FONT=Object.assign({},L.TEXT_FONT);class wi extends mi{static get CATEGORY(){return u.GraceTabNote}constructor(t){super(t,!1),this.render_options=Object.assign(Object.assign({},this.render_options),{y_shift:.3,scale:.6,font:`7.5pt ${M.SANS_SERIF}`}),this.updateWidth()}}class Ei{constructor(t){this.music=new et,this.setKey(t)}setKey(t){return this.key=t,this.reset(),this}getKey(){return this.key}reset(){this.keyParts=this.music.getKeyParts(this.key),this.keyString=this.keyParts.root,this.keyParts.accidental&&(this.keyString+=this.keyParts.accidental);if(!et.scaleTypes[this.keyParts.type])throw new p("BadArguments",`Unsupported key type: ${this.key}`);this.scale=this.music.getScaleTones(this.music.getNoteValue(this.keyString),et.scaleTypes[this.keyParts.type]),this.scaleMap={},this.scaleMapByValue={},this.originalScaleMapByValue={};const t=et.root_indices[this.keyParts.root];for(let e=0;es?Ci.SLIDE_DOWN:Ci.SLIDE_UP}this.direction=e,this.render_options.cp1=11,this.render_options.cp2=14,this.render_options.y_shift=.5,this.resetFont()}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new p("BadArguments","No Y-values to render");const e=this.checkContext(),i=t.first_x_px,s=t.first_ys,n=t.last_x_px,a=t.direction;if(a!==Ci.SLIDE_UP&&a!==Ci.SLIDE_DOWN)throw new p("BadSlide","Invalid slide direction");const o=this.notes.first_indices;for(let t=0;tthis.tuningValues.length)throw new p("BadArguments",`String number must be between 1 and ${this.tuningValues.length}:${t}`);return this.tuningValues[e-1]}getValueForFret(t,e){const i=this.getValueForString(e),s=Number(t);if(s<0)throw new p("BadArguments",`Fret number must be 0 or higher: ${t}`);return i+s}getNoteForFret(t,e){const i=this.getValueForFret(t,e),s=Math.floor(i/12),n=i%12;return`${z.integerToNote(n)}/${s}`}}var Ai=function(t,e,i,s){return new(i||(i=Promise))((function(n,a){function o(t){try{h(s.next(t))}catch(t){a(t)}}function r(t){try{h(s.throw(t))}catch(t){a(t)}}function h(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,r)}h((s=s.apply(t,e||[])).next())}))};class ki{static get BUILD(){return{VERSION:"4.2.6",ID:"103aad2b14837418c5e96c9e078edd036fcddf60",DATE:"2024-08-26T20:16:17.134Z"}}static setMusicFont(...t){const e=t.map((t=>M.load(t)));return z.MUSIC_FONT_STACK=e,Z.MUSIC_FONT_STACK=e.slice(),Z.CURRENT_CACHE_KEY=t.join(","),e}static fetchMusicFont(t,e){return Ai(this,void 0,void 0,(function*(){}))}static getMusicFont(){return z.MUSIC_FONT_STACK.map((t=>t.getName()))}static getMusicFontStack(){return z.MUSIC_FONT_STACK}static get RENDER_PRECISION_PLACES(){return z.RENDER_PRECISION_PLACES}static set RENDER_PRECISION_PLACES(t){z.RENDER_PRECISION_PLACES=t}static get SOFTMAX_FACTOR(){return z.SOFTMAX_FACTOR}static set SOFTMAX_FACTOR(t){z.SOFTMAX_FACTOR=t}static get NOTATION_FONT_SCALE(){return z.NOTATION_FONT_SCALE}static set NOTATION_FONT_SCALE(t){z.NOTATION_FONT_SCALE=t}static get TABLATURE_FONT_SCALE(){return z.TABLATURE_FONT_SCALE}static set TABLATURE_FONT_SCALE(t){z.TABLATURE_FONT_SCALE=t}static get RESOLUTION(){return z.RESOLUTION}static set RESOLUTION(t){z.RESOLUTION=t}static get SLASH_NOTEHEAD_WIDTH(){return z.SLASH_NOTEHEAD_WIDTH}static set SLASH_NOTEHEAD_WIDTH(t){z.SLASH_NOTEHEAD_WIDTH=t}static get STAVE_LINE_DISTANCE(){return z.STAVE_LINE_DISTANCE}static set STAVE_LINE_DISTANCE(t){z.STAVE_LINE_DISTANCE=t}static get STAVE_LINE_THICKNESS(){return z.STAVE_LINE_THICKNESS}static set STAVE_LINE_THICKNESS(t){z.STAVE_LINE_THICKNESS=t}static get STEM_HEIGHT(){return z.STEM_HEIGHT}static set STEM_HEIGHT(t){z.STEM_HEIGHT=t}static get STEM_WIDTH(){return z.STEM_WIDTH}static set STEM_WIDTH(t){z.STEM_WIDTH=t}static get TIME4_4(){return z.TIME4_4}static get accidentalMap(){return z.accidentalMap}static get unicode(){return z.unicode}static keySignature(t){return z.keySignature(t)}static hasKeySignature(t){return z.hasKeySignature(t)}static getKeySignatures(){return z.getKeySignatures()}static clefProperties(t){return z.clefProperties(t)}static keyProperties(t,e,i){return z.keyProperties(t,e,i)}static durationToTicks(t){return z.durationToTicks(t)}}ki.Accidental=st,ki.Annotation=gt,ki.Articulation=St,ki.Barline=kt,ki.BarNote=Dt,ki.Beam=Le,ki.Bend=Ft,ki.BoundingBox=C,ki.BoundingBoxComputation=N,ki.CanvasContext=Qt,ki.ChordSymbol=Rt,ki.Clef=me,ki.ClefNote=We,ki.Crescendo=Ie,ki.Curve=Ue,ki.Dot=Ot,ki.EasyScore=Qe,ki.Element=L,ki.Factory=bi,ki.Font=M,ki.Formatter=Ae,ki.Fraction=E,ki.FretHandFinger=Lt,ki.GhostNote=ti,ki.Glyph=Z,ki.GlyphNote=ei,ki.GraceNote=ii,ki.GraceNoteGroup=Vt,ki.GraceTabNote=wi,ki.KeyManager=Ei,ki.KeySignature=_e,ki.KeySigNote=si,ki.Modifier=tt,ki.ModifierContext=ge,ki.MultiMeasureRest=ai,ki.Music=et,ki.Note=bt,ki.NoteHead=Wt,ki.NoteSubGroup=zt,ki.Ornament=Kt,ki.Parenthesis=$t,ki.Parser=je,ki.PedalMarking=ri,ki.Registry=O,ki.RenderContext=yt,ki.Renderer=re,ki.RepeatNote=ci,ki.Repetition=ue,ki.Stave=Ee,ki.StaveConnector=Ce,ki.StaveHairpin=Bi,ki.StaveLine=li,ki.StaveModifier=At,ki.StaveNote=Ut,ki.StaveTempo=xe,ki.StaveText=Se,ki.StaveTie=Ht,ki.Stem=nt,ki.StringNumber=he,ki.Stroke=ce,ki.SVGContext=ie,ki.System=gi,ki.TabNote=mi,ki.TabSlide=Ci,ki.TabStave=_i,ki.TabTie=Yt,ki.TextBracket=xi,ki.TextDynamics=Si,ki.TextFormatter=ct,ki.TextNote=fe,ki.TickContext=Ne,ki.TimeSignature=ve,ki.TimeSigNote=yi,ki.Tremolo=Ni,ki.Tuning=Pi,ki.Tuplet=De,ki.Vibrato=de,ki.VibratoBracket=Ti,ki.Voice=Xt,ki.Volta=ye,ki.AnnotationHorizontalJustify=dt,ki.AnnotationVerticalJustify=lt,ki.ChordSymbolHorizontalJustify=Bt,ki.ChordSymbolVerticalJustify=Ct,ki.SymbolTypes=Nt,ki.SymbolModifiers=Pt,ki.CurvePosition=Ge,ki.FontWeight=P,ki.FontStyle=A,ki.ModifierPosition=J,ki.RendererBackends=se,ki.RendererLineEndType=ne,ki.BarlineType=Et,ki.StaveModifierPosition=wt,ki.VoltaType=oe,ki.TextBracketPosition=pi,ki.TextJustification=ae,ki.VoiceMode=jt;const Di={spacing:50,glyphs:{" ":{x_min:0,x_max:250,y_min:0,y_max:500,ha:500,leftSideBearing:0,advanceWidth:250},0:{x_min:33,x_max:534,y_min:-13,y_max:751,ha:764,leftSideBearing:33,advanceWidth:570},1:{x_min:48,x_max:235,y_min:-17,y_max:734,ha:751,leftSideBearing:48,advanceWidth:286},2:{x_min:56,x_max:571,y_min:-19,y_max:741,ha:760,leftSideBearing:56,advanceWidth:626},3:{x_min:50,x_max:528,y_min:-7,y_max:731,ha:738,leftSideBearing:50,advanceWidth:589},4:{x_min:38,x_max:564,y_min:-13,y_max:743,ha:756,leftSideBearing:38,advanceWidth:614},5:{x_min:42,x_max:601,y_min:-34,y_max:743,ha:777,leftSideBearing:42,advanceWidth:648},6:{x_min:47,x_max:606,y_min:-16,y_max:743,ha:759,leftSideBearing:47,advanceWidth:667},7:{x_min:47,x_max:567,y_min:5,y_max:739,ha:734,leftSideBearing:0,advanceWidth:615},8:{x_min:40,x_max:541,y_min:-15,y_max:752,ha:767,leftSideBearing:40,advanceWidth:585},9:{x_min:40,x_max:537,y_min:-52,y_max:736,ha:788,leftSideBearing:40,advanceWidth:592},"!":{x_min:49,x_max:180,y_min:-7,y_max:761,ha:768,leftSideBearing:49,advanceWidth:230},'"':{x_min:39,x_max:304,y_min:596,y_max:804,ha:208,leftSideBearing:39,advanceWidth:353},"#":{x_min:33,x_max:599,y_min:-8,y_max:765,ha:773,leftSideBearing:33,advanceWidth:648},$:{x_min:53,x_max:495,y_min:-111,y_max:823,ha:934,leftSideBearing:53,advanceWidth:560},"%":{x_min:35,x_max:656,y_min:-128,y_max:808,ha:936,leftSideBearing:35,advanceWidth:711},"&":{x_min:53,x_max:441,y_min:-3,y_max:753,ha:756,leftSideBearing:53,advanceWidth:500},"'":{x_min:43,x_max:161,y_min:590,y_max:811,ha:221,leftSideBearing:43,advanceWidth:217},"(":{x_min:41,x_max:311,y_min:-36,y_max:845,ha:881,leftSideBearing:41,advanceWidth:308},")":{x_min:-8,x_max:257,y_min:-21,y_max:852,ha:873,leftSideBearing:-8,advanceWidth:280},"*":{x_min:59,x_max:539,y_min:175,y_max:589,ha:414,leftSideBearing:59,advanceWidth:601},"+":{x_min:33,x_max:361,y_min:180,y_max:587,ha:407,leftSideBearing:33,advanceWidth:400},",":{x_min:15,x_max:176,y_min:-129,y_max:92,ha:221,leftSideBearing:15,advanceWidth:205},"-":{x_min:40,x_max:380,y_min:317,y_max:452,ha:135,leftSideBearing:40,advanceWidth:422},".":{x_min:48,x_max:185,y_min:-56,y_max:84,ha:140,leftSideBearing:48,advanceWidth:227},"/":{x_min:-58,x_max:654,y_min:-122,y_max:844,ha:966,leftSideBearing:-58,advanceWidth:626},":":{x_min:65,x_max:225,y_min:97,y_max:536,ha:439,leftSideBearing:65,advanceWidth:302},";":{x_min:13,x_max:295,y_min:-139,y_max:536,ha:675,leftSideBearing:13,advanceWidth:334},"<":{x_min:28,x_max:438,y_min:-1,y_max:607,ha:608,leftSideBearing:28,advanceWidth:475},"=":{x_min:40,x_max:383,y_min:199.9598640852289,y_max:541,ha:341.0401359147711,leftSideBearing:40,advanceWidth:422},">":{x_min:35,x_max:421,y_min:28,y_max:632,ha:604,leftSideBearing:35,advanceWidth:466},"?":{x_min:45,x_max:548,y_min:-17,y_max:767,ha:784,leftSideBearing:45,advanceWidth:592},"@":{x_min:51,x_max:730,y_min:-78,y_max:753,ha:831,leftSideBearing:51,advanceWidth:781},A:{x_min:37,x_max:554,y_min:-4,y_max:746,ha:750,leftSideBearing:37,advanceWidth:617},B:{x_min:37,x_max:532,y_min:3,y_max:783,ha:780,leftSideBearing:37,advanceWidth:579},C:{x_min:37,x_max:583,y_min:-3,y_max:775,ha:778,leftSideBearing:37,advanceWidth:623},D:{x_min:50,x_max:530,y_min:-15,y_max:749,ha:764,leftSideBearing:50,advanceWidth:579},E:{x_min:45,x_max:531,y_min:-1,y_max:743,ha:744,leftSideBearing:45,advanceWidth:585},F:{x_min:45,x_max:459,y_min:23,y_max:727,ha:704,leftSideBearing:45,advanceWidth:510},G:{x_min:31,x_max:577,y_min:-8,y_max:733,ha:741,leftSideBearing:31,advanceWidth:611},H:{x_min:37,x_max:493,y_min:-22,y_max:758,ha:780,leftSideBearing:37,advanceWidth:535},I:{x_min:47,x_max:501,y_min:-3,y_max:731,ha:734,leftSideBearing:47,advanceWidth:541},J:{x_min:33,x_max:531,y_min:-23,y_max:725,ha:748,leftSideBearing:33,advanceWidth:573},K:{x_min:43,x_max:505,y_min:-10,y_max:740,ha:750,leftSideBearing:43,advanceWidth:560},L:{x_min:49,x_max:457,y_min:-2,y_max:746,ha:748,leftSideBearing:49,advanceWidth:510},M:{x_min:35,x_max:699,y_min:1,y_max:744,ha:743,leftSideBearing:35,advanceWidth:743},N:{x_min:34,x_max:533,y_min:-17,y_max:761,ha:778,leftSideBearing:34,advanceWidth:579},O:{x_min:41,x_max:608,y_min:-5,y_max:735,ha:740,leftSideBearing:41,advanceWidth:667},P:{x_min:53,x_max:451,y_min:-18,y_max:735,ha:753,leftSideBearing:53,advanceWidth:497},Q:{x_min:40,x_max:599,y_min:-67,y_max:744,ha:811,leftSideBearing:40,advanceWidth:648},R:{x_min:39,x_max:487,y_min:16,y_max:735,ha:719,leftSideBearing:39,advanceWidth:535},S:{x_min:35,x_max:552,y_min:-47,y_max:708,ha:755,leftSideBearing:35,advanceWidth:604},T:{x_min:26,x_max:656,y_min:-13,y_max:718,ha:731,leftSideBearing:26,advanceWidth:705},U:{x_min:41,x_max:518,y_min:-20,y_max:748,ha:768,leftSideBearing:41,advanceWidth:567},V:{x_min:47,x_max:509,y_min:-26,y_max:744,ha:770,leftSideBearing:47,advanceWidth:567},W:{x_min:44,x_max:789,y_min:-35,y_max:720,ha:755,leftSideBearing:44,advanceWidth:833},X:{x_min:63,x_max:635,y_min:-10,y_max:745,ha:755,leftSideBearing:63,advanceWidth:680},Y:{x_min:43,x_max:503,y_min:-21,y_max:734,ha:755,leftSideBearing:43,advanceWidth:541},Z:{x_min:42,x_max:584,y_min:-10,y_max:739,ha:749,leftSideBearing:42,advanceWidth:629},"[":{x_min:46,x_max:346,y_min:-150,y_max:884,ha:1034,leftSideBearing:46,advanceWidth:291},"\\":{x_min:20,x_max:616,y_min:-100,y_max:797,ha:897,leftSideBearing:20,advanceWidth:645},"]":{x_min:-76,x_max:226,y_min:-150,y_max:881,ha:1031,leftSideBearing:-76,advanceWidth:297},"^":{x_min:43,x_max:437,y_min:517,y_max:812,ha:295,leftSideBearing:43,advanceWidth:478},_:{x_min:29,x_max:563,y_min:-110,y_max:-1,ha:109,leftSideBearing:29,advanceWidth:598},"`":{x_min:54,x_max:321,y_min:540,y_max:747,ha:207,leftSideBearing:54,advanceWidth:368},a:{x_min:20,x_max:447,y_min:-17,y_max:495,ha:512,leftSideBearing:20,advanceWidth:494},b:{x_min:37,x_max:466,y_min:-27,y_max:770,ha:797,leftSideBearing:37,advanceWidth:510},c:{x_min:35,x_max:456,y_min:-9,y_max:507,ha:516,leftSideBearing:35,advanceWidth:460},d:{x_min:45,x_max:520,y_min:-15,y_max:764,ha:779,leftSideBearing:45,advanceWidth:560},e:{x_min:33,x_max:370,y_min:-5,y_max:501,ha:506,leftSideBearing:33,advanceWidth:397},f:{x_min:35,x_max:411,y_min:-13,y_max:695,ha:708,leftSideBearing:35,advanceWidth:453},g:{x_min:33,x_max:551,y_min:-257,y_max:505,ha:762,leftSideBearing:33,advanceWidth:611},h:{x_min:32,x_max:458,y_min:-29,y_max:743,ha:772,leftSideBearing:32,advanceWidth:491},i:{x_min:45,x_max:167,y_min:-13,y_max:631,ha:644,leftSideBearing:45,advanceWidth:220},j:{x_min:-127,x_max:261,y_min:-231,y_max:601,ha:832,leftSideBearing:-127,advanceWidth:308},k:{x_min:39,x_max:443,y_min:-3,y_max:700,ha:703,leftSideBearing:39,advanceWidth:497},l:{x_min:58,x_max:168,y_min:-8,y_max:686,ha:694,leftSideBearing:58,advanceWidth:227},m:{x_min:39,x_max:688,y_min:-14,y_max:501,ha:515,leftSideBearing:39,advanceWidth:718},n:{x_min:45,x_max:491,y_min:-32,y_max:512,ha:544,leftSideBearing:45,advanceWidth:541},o:{x_min:41,x_max:424,y_min:-12,y_max:493,ha:505,leftSideBearing:41,advanceWidth:447},p:{x_min:25,x_max:529,y_min:-260,y_max:500,ha:760,leftSideBearing:25,advanceWidth:573},q:{x_min:53,x_max:603,y_min:-235,y_max:514,ha:749,leftSideBearing:53,advanceWidth:623},r:{x_min:32,x_max:407,y_min:-7,y_max:492,ha:499,leftSideBearing:32,advanceWidth:460},s:{x_min:49,x_max:416,y_min:-12,y_max:519,ha:531,leftSideBearing:49,advanceWidth:460},t:{x_min:32,x_max:442,y_min:-5,y_max:684,ha:689,leftSideBearing:32,advanceWidth:469},u:{x_min:41,x_max:487,y_min:-5,y_max:507,ha:512,leftSideBearing:41,advanceWidth:510},v:{x_min:16,x_max:441,y_min:-20,y_max:542,ha:562,leftSideBearing:16,advanceWidth:456},w:{x_min:39,x_max:639,y_min:-22,y_max:505,ha:527,leftSideBearing:39,advanceWidth:661},x:{x_min:15,x_max:505,y_min:-39,y_max:539,ha:578,leftSideBearing:15,advanceWidth:541},y:{x_min:-98,x_max:501,y_min:-242,y_max:511,ha:753,leftSideBearing:-98,advanceWidth:548},z:{x_min:27,x_max:479,y_min:-3,y_max:494,ha:497,leftSideBearing:27,advanceWidth:494},"{":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"|":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"}":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"~":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308}},fontFamily:"PetalumaScript",resolution:1e3,generatedOn:"2020-06-14T18:33:25.407Z"},Fi={spacing:50,glyphs:{" ":{x_min:0,x_max:509,y_min:0,y_max:2e3,ha:2e3,leftSideBearing:0,advanceWidth:509},0:{x_min:121,x_max:1048,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1168},1:{x_min:117,x_max:767,y_min:0,y_max:1456,ha:1456,leftSideBearing:117,advanceWidth:844},2:{x_min:75.8474576645637,x_max:1040,y_min:0,y_max:1477,ha:1477,leftSideBearing:75,advanceWidth:1131},3:{x_min:74.85365853658536,x_max:994,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1106},4:{x_min:63,x_max:1114,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1187},5:{x_min:96.8448275474953,x_max:982,y_min:-21,y_max:1456,ha:1477,leftSideBearing:96,advanceWidth:1081},6:{x_min:121,x_max:1067,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1144},7:{x_min:76,x_max:1060,y_min:0,y_max:1456,ha:1456,leftSideBearing:-30,advanceWidth:1128},8:{x_min:92,x_max:1039,y_min:-21,y_max:1477,ha:1498,leftSideBearing:92,advanceWidth:1131},9:{x_min:84,x_max:1026,y_min:-21,y_max:1477,ha:1498,leftSideBearing:84,advanceWidth:1154},"!":{x_min:143,x_max:340,y_min:0,y_max:1456,ha:1456,leftSideBearing:143,advanceWidth:483},'"':{x_min:166,x_max:634,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:770},"#":{x_min:63,x_max:1179,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1246},$:{x_min:81.92156915727656,x_max:1012,y_min:-208,y_max:1693,ha:1901,leftSideBearing:81,advanceWidth:1110},"%":{x_min:77,x_max:1384,y_min:-21,y_max:1477,ha:1498,leftSideBearing:77,advanceWidth:1460},"&":{x_min:74,x_max:1242,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1289},"'":{x_min:166,x_max:324,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:460},"(":{x_min:114,x_max:650,y_min:-463,y_max:1636,ha:2099,leftSideBearing:114,advanceWidth:662},")":{x_min:11,x_max:547,y_min:-463,y_max:1636,ha:2099,leftSideBearing:11,advanceWidth:654},"*":{x_min:66,x_max:893,y_min:607,y_max:1456,ha:849,leftSideBearing:66,advanceWidth:958},"+":{x_min:73,x_max:1071,y_min:146,y_max:1206,ha:1060,leftSideBearing:73,advanceWidth:1145},",":{x_min:23,x_max:315,y_min:-311,y_max:221,ha:532,leftSideBearing:23,advanceWidth:404},"-":{x_min:154,x_max:643,y_min:538,y_max:692,ha:154,leftSideBearing:154,advanceWidth:797},".":{x_min:145,x_max:342,y_min:0,y_max:202,ha:202,leftSideBearing:145,advanceWidth:493},"/":{x_min:0,x_max:774,y_min:-125,y_max:1456,ha:1581,leftSideBearing:0,advanceWidth:824},":":{x_min:145,x_max:342,y_min:0,y_max:1082,ha:1082,leftSideBearing:145,advanceWidth:419},";":{x_min:53,x_max:345,y_min:-311,y_max:1082,ha:1393,leftSideBearing:53,advanceWidth:424},"<":{x_min:76,x_max:892,y_min:107,y_max:1013,ha:906,leftSideBearing:76,advanceWidth:1017},"=":{x_min:147,x_max:981,y_min:407,y_max:987,ha:580,leftSideBearing:147,advanceWidth:1127},">":{x_min:125,x_max:980,y_min:87,y_max:993,ha:906,leftSideBearing:125,advanceWidth:1060},"?":{x_min:65.92660602419838,x_max:890,y_min:0,y_max:1477,ha:1477,leftSideBearing:65,advanceWidth:953},"@":{x_min:84.3592218305664,x_max:1705.2346925277395,y_min:-453,y_max:1431,ha:1884,leftSideBearing:84,advanceWidth:1821},A:{x_min:70,x_max:1463,y_min:0,y_max:1456,ha:1456,leftSideBearing:70,advanceWidth:1533},B:{x_min:81,x_max:1253,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1322},C:{x_min:80,x_max:1174,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1290},D:{x_min:81,x_max:1291,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1356},E:{x_min:81,x_max:1190,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1306},F:{x_min:81,x_max:1176,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1256},G:{x_min:80,x_max:1226,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1346},H:{x_min:81,x_max:1497,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1578},I:{x_min:81,x_max:604,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:685},J:{x_min:60,x_max:1100,y_min:-21,y_max:1456,ha:1477,leftSideBearing:60,advanceWidth:1169},K:{x_min:81,x_max:1427,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1501},L:{x_min:81,x_max:1130,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1210},M:{x_min:94,x_max:1888,y_min:0,y_max:1456,ha:1456,leftSideBearing:94,advanceWidth:1982},N:{x_min:83,x_max:1509,y_min:0,y_max:1456,ha:1456,leftSideBearing:83,advanceWidth:1592},O:{x_min:70,x_max:1281,y_min:-21,y_max:1477,ha:1498,leftSideBearing:70,advanceWidth:1351},P:{x_min:81,x_max:1242,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1297},Q:{x_min:70,x_max:1348,y_min:-245,y_max:1477,ha:1722,leftSideBearing:70,advanceWidth:1376},R:{x_min:81,x_max:1285,y_min:0,y_max:1455,ha:1455,leftSideBearing:81,advanceWidth:1385},S:{x_min:115,x_max:1116,y_min:-21,y_max:1477,ha:1498,leftSideBearing:115,advanceWidth:1206},T:{x_min:96,x_max:1306,y_min:0,y_max:1456,ha:1456,leftSideBearing:96,advanceWidth:1406},U:{x_min:70,x_max:1452,y_min:-21,y_max:1456,ha:1477,leftSideBearing:70,advanceWidth:1522},V:{x_min:65,x_max:1443,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1508},W:{x_min:72,x_max:2057,y_min:0,y_max:1456,ha:1456,leftSideBearing:72,advanceWidth:2129},X:{x_min:80,x_max:1449,y_min:0,y_max:1456,ha:1456,leftSideBearing:80,advanceWidth:1529},Y:{x_min:65,x_max:1396,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1461},Z:{x_min:90,x_max:1107,y_min:0,y_max:1456,ha:1456,leftSideBearing:90,advanceWidth:1197},"[":{x_min:157,x_max:541,y_min:-312,y_max:1664,ha:1976,leftSideBearing:157,advanceWidth:573},"\\":{x_min:36,x_max:830,y_min:-125,y_max:1456,ha:1581,leftSideBearing:36,advanceWidth:841},"]":{x_min:23,x_max:408,y_min:-312,y_max:1664,ha:1976,leftSideBearing:23,advanceWidth:552},"^":{x_min:71,x_max:802,y_min:729,y_max:1456,ha:727,leftSideBearing:71,advanceWidth:864},_:{x_min:119,x_max:1041,y_min:-154,y_max:0,ha:154,leftSideBearing:119,advanceWidth:1168},"`":{x_min:40,x_max:456,y_min:1288,y_max:1560,ha:272,leftSideBearing:40,advanceWidth:496},a:{x_min:79,x_max:1053,y_min:-21,y_max:1102,ha:1123,leftSideBearing:79,advanceWidth:1132},b:{x_min:-16,x_max:1071,y_min:-21,y_max:1560,ha:1581,leftSideBearing:-16,advanceWidth:1145},c:{x_min:78,x_max:988,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1067},d:{x_min:78,x_max:1156,y_min:-21,y_max:1560,ha:1581,leftSideBearing:78,advanceWidth:1218},e:{x_min:74,x_max:980,y_min:-21,y_max:1102,ha:1123,leftSideBearing:74,advanceWidth:1059},f:{x_min:64,x_max:731,y_min:0,y_max:1581,ha:1581,leftSideBearing:64,advanceWidth:725},g:{x_min:78,x_max:1133,y_min:-437,y_max:1102,ha:1539,leftSideBearing:78,advanceWidth:1157},h:{x_min:49,x_max:1255,y_min:0,y_max:1560,ha:1560,leftSideBearing:49,advanceWidth:1315},i:{x_min:67,x_max:590,y_min:0,y_max:1560,ha:1560,leftSideBearing:67,advanceWidth:652},j:{x_min:-56,x_max:381,y_min:-437,y_max:1560,ha:1997,leftSideBearing:-56,advanceWidth:525},k:{x_min:64,x_max:1248,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:1287},l:{x_min:64,x_max:587,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:653},m:{x_min:74,x_max:1905,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1977},n:{x_min:74,x_max:1278,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1343},o:{x_min:78,x_max:1046,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1124},p:{x_min:34,x_max:1119,y_min:-416,y_max:1102,ha:1518,leftSideBearing:34,advanceWidth:1197},q:{x_min:78,x_max:1135,y_min:-416,y_max:1102,ha:1518,leftSideBearing:78,advanceWidth:1139},r:{x_min:72,x_max:808,y_min:0,y_max:1102,ha:1102,leftSideBearing:72,advanceWidth:854},s:{x_min:104,x_max:933,y_min:-21,y_max:1102,ha:1123,leftSideBearing:104,advanceWidth:1022},t:{x_min:24,x_max:678,y_min:-17,y_max:1343,ha:1360,leftSideBearing:24,advanceWidth:730},u:{x_min:52,x_max:1181,y_min:-21,y_max:1082,ha:1103,leftSideBearing:52,advanceWidth:1245},v:{x_min:26,x_max:1176,y_min:0,y_max:1082,ha:1082,leftSideBearing:26,advanceWidth:1206},w:{x_min:52,x_max:1777,y_min:0,y_max:1082,ha:1082,leftSideBearing:52,advanceWidth:1823},x:{x_min:42,x_max:1163,y_min:0,y_max:1082,ha:1082,leftSideBearing:42,advanceWidth:1203},y:{x_min:24,x_max:1172,y_min:-437,y_max:1082,ha:1519,leftSideBearing:24,advanceWidth:1192},z:{x_min:88,x_max:960,y_min:0,y_max:1082,ha:1082,leftSideBearing:88,advanceWidth:1032},"{":{x_min:63,x_max:671,y_min:-364,y_max:1597,ha:1961,leftSideBearing:63,advanceWidth:701},"|":{x_min:150,x_max:307,y_min:-270,y_max:1456,ha:1726,leftSideBearing:150,advanceWidth:451},"}":{x_min:27,x_max:635,y_min:-364,y_max:1597,ha:1961,leftSideBearing:27,advanceWidth:701},"~":{x_min:121,x_max:1257,y_min:401,y_max:803,ha:402,leftSideBearing:121,advanceWidth:1386}},fontFamily:"Roboto Slab",resolution:2048,generatedOn:"2020-06-15T19:12:58.120Z"},Mi={glyphs:{0:{x_min:86,x_max:1038,y_min:-25,y_max:1472,ha:1497,leftSideBearing:86,advanceWidth:1139},1:{x_min:162,x_max:806,y_min:0,y_max:1472,ha:1472,leftSideBearing:162,advanceWidth:1139},2:{x_min:51,x_max:1036,y_min:0,y_max:1472,ha:1472,leftSideBearing:51,advanceWidth:1139},3:{x_min:77,x_max:1051,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},4:{x_min:38,x_max:1092,y_min:0,y_max:1472,ha:1472,leftSideBearing:38,advanceWidth:1139},5:{x_min:91,x_max:1077,y_min:-25,y_max:1446,ha:1471,leftSideBearing:91,advanceWidth:1139},6:{x_min:87,x_max:1066,y_min:-25,y_max:1472,ha:1497,leftSideBearing:87,advanceWidth:1139},7:{x_min:87,x_max:1048,y_min:0,y_max:1446,ha:1446,leftSideBearing:87,advanceWidth:1139},8:{x_min:83,x_max:1047,y_min:-26,y_max:1472,ha:1498,leftSideBearing:83,advanceWidth:1139},9:{x_min:65,x_max:1044,y_min:-26,y_max:1472,ha:1498,leftSideBearing:65,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:184,x_max:488,y_min:0,y_max:1466,ha:1466,leftSideBearing:184,advanceWidth:682},'"':{x_min:112,x_max:869,y_min:945,y_max:1466,ha:521,leftSideBearing:112,advanceWidth:971},"#":{x_min:18,x_max:1115,y_min:-25,y_max:1491,ha:1516,leftSideBearing:18,advanceWidth:1139},$:{x_min:70,x_max:1048,y_min:-205,y_max:1584,ha:1789,leftSideBearing:70,advanceWidth:1139},"%":{x_min:89,x_max:1725,y_min:-59,y_max:1491,ha:1550,leftSideBearing:89,advanceWidth:1821},"&":{x_min:90,x_max:1446,y_min:-38,y_max:1491,ha:1529,leftSideBearing:90,advanceWidth:1479},"'":{x_min:92,x_max:398,y_min:945,y_max:1466,ha:521,leftSideBearing:92,advanceWidth:487},"(":{x_min:107,x_max:616,y_min:-431,y_max:1491,ha:1922,leftSideBearing:107,advanceWidth:682},")":{x_min:67,x_max:576,y_min:-431,y_max:1491,ha:1922,leftSideBearing:67,advanceWidth:682},"*":{x_min:28,x_max:753,y_min:792,y_max:1491,ha:699,leftSideBearing:28,advanceWidth:797},"+":{x_min:85,x_max:1110,y_min:211,y_max:1236,ha:1025,leftSideBearing:85,advanceWidth:1196},",":{x_min:117,x_max:421,y_min:-327,y_max:281,ha:608,leftSideBearing:117,advanceWidth:569},"-":{x_min:115,x_max:667,y_min:391,y_max:672,ha:281,leftSideBearing:115,advanceWidth:682},".":{x_min:147,x_max:428,y_min:0,y_max:281,ha:281,leftSideBearing:147,advanceWidth:569},"/":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},":":{x_min:201,x_max:482,y_min:0,y_max:1062,ha:1062,leftSideBearing:201,advanceWidth:682},";":{x_min:170,x_max:474,y_min:-327,y_max:1062,ha:1389,leftSideBearing:170,advanceWidth:682},"<":{x_min:95,x_max:1100,y_min:167,y_max:1281,ha:1114,leftSideBearing:95,advanceWidth:1196},"=":{x_min:85,x_max:1110,y_min:372,y_max:1074,ha:702,leftSideBearing:85,advanceWidth:1196},">":{x_min:95,x_max:1101,y_min:166,y_max:1279,ha:1113,leftSideBearing:95,advanceWidth:1196},"?":{x_min:106,x_max:1158,y_min:0,y_max:1481,ha:1481,leftSideBearing:106,advanceWidth:1251},"@":{x_min:61,x_max:1990,y_min:-431,y_max:1492,ha:1923,leftSideBearing:61,advanceWidth:1997},A:{x_min:0,x_max:1471,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1479},B:{x_min:150,x_max:1378,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},C:{x_min:97,x_max:1374,y_min:-25,y_max:1491,ha:1516,leftSideBearing:97,advanceWidth:1479},D:{x_min:148,x_max:1377,y_min:0,y_max:1466,ha:1466,leftSideBearing:148,advanceWidth:1479},E:{x_min:149,x_max:1264,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},F:{x_min:151,x_max:1156,y_min:0,y_max:1466,ha:1466,leftSideBearing:151,advanceWidth:1251},G:{x_min:98,x_max:1469,y_min:-25,y_max:1491,ha:1516,leftSideBearing:98,advanceWidth:1593},H:{x_min:150,x_max:1322,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},I:{x_min:140,x_max:436,y_min:0,y_max:1466,ha:1466,leftSideBearing:140,advanceWidth:569},J:{x_min:35,x_max:973,y_min:-25,y_max:1466,ha:1491,leftSideBearing:35,advanceWidth:1139},K:{x_min:153,x_max:1475,y_min:0,y_max:1466,ha:1466,leftSideBearing:153,advanceWidth:1479},L:{x_min:157,x_max:1189,y_min:0,y_max:1454,ha:1454,leftSideBearing:157,advanceWidth:1251},M:{x_min:145,x_max:1561,y_min:0,y_max:1466,ha:1466,leftSideBearing:145,advanceWidth:1706},N:{x_min:152,x_max:1315,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1479},O:{x_min:89,x_max:1511,y_min:-25,y_max:1491,ha:1516,leftSideBearing:89,advanceWidth:1593},P:{x_min:149,x_max:1272,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},Q:{x_min:89,x_max:1566,y_min:-147,y_max:1491,ha:1638,leftSideBearing:89,advanceWidth:1593},R:{x_min:150,x_max:1468,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},S:{x_min:74,x_max:1266,y_min:-26,y_max:1491,ha:1517,leftSideBearing:74,advanceWidth:1366},T:{x_min:44,x_max:1209,y_min:0,y_max:1466,ha:1466,leftSideBearing:44,advanceWidth:1251},U:{x_min:147,x_max:1316,y_min:-25,y_max:1466,ha:1491,leftSideBearing:147,advanceWidth:1479},V:{x_min:-1,x_max:1364,y_min:0,y_max:1466,ha:1466,leftSideBearing:-1,advanceWidth:1366},W:{x_min:7,x_max:1931,y_min:0,y_max:1466,ha:1466,leftSideBearing:7,advanceWidth:1933},X:{x_min:0,x_max:1363,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1366},Y:{x_min:-3,x_max:1368,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},Z:{x_min:22,x_max:1213,y_min:0,y_max:1466,ha:1466,leftSideBearing:22,advanceWidth:1251},"[":{x_min:146,x_max:644,y_min:-413,y_max:1466,ha:1879,leftSideBearing:146,advanceWidth:682},"\\":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},"]":{x_min:38,x_max:536,y_min:-413,y_max:1466,ha:1879,leftSideBearing:38,advanceWidth:682},"^":{x_min:115,x_max:1080,y_min:692,y_max:1491,ha:799,leftSideBearing:115,advanceWidth:1196},_:{x_min:-19,x_max:1149,y_min:-405,y_max:-223,ha:182,leftSideBearing:-19,advanceWidth:1139},"`":{x_min:42,x_max:495,y_min:1192,y_max:1491,ha:299,leftSideBearing:42,advanceWidth:682},a:{x_min:73,x_max:1070,y_min:-24,y_max:1086,ha:1110,leftSideBearing:73,advanceWidth:1139},b:{x_min:135,x_max:1172,y_min:-24,y_max:1466,ha:1490,leftSideBearing:135,advanceWidth:1251},c:{x_min:85,x_max:1087,y_min:-24,y_max:1086,ha:1110,leftSideBearing:85,advanceWidth:1139},d:{x_min:84,x_max:1121,y_min:-24,y_max:1466,ha:1490,leftSideBearing:84,advanceWidth:1251},e:{x_min:65,x_max:1057.2517482517483,y_min:-24,y_max:1086,ha:1110,leftSideBearing:65,advanceWidth:1139},f:{x_min:24,x_max:742,y_min:0,y_max:1491,ha:1491,leftSideBearing:24,advanceWidth:682},g:{x_min:84,x_max:1120,y_min:-431,y_max:1086,ha:1517,leftSideBearing:84,advanceWidth:1251},h:{x_min:146,x_max:1113,y_min:0,y_max:1466,ha:1466,leftSideBearing:146,advanceWidth:1251},i:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},j:{x_min:-94,x_max:422,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:569},k:{x_min:137,x_max:1119,y_min:0,y_max:1466,ha:1466,leftSideBearing:137,advanceWidth:1139},l:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},m:{x_min:126,x_max:1688,y_min:0,y_max:1086,ha:1086,leftSideBearing:126,advanceWidth:1821},n:{x_min:145,x_max:1113,y_min:0,y_max:1086,ha:1086,leftSideBearing:145,advanceWidth:1251},o:{x_min:82,x_max:1178,y_min:-24,y_max:1086,ha:1110,leftSideBearing:82,advanceWidth:1251},p:{x_min:139,x_max:1175,y_min:-404,y_max:1086,ha:1490,leftSideBearing:139,advanceWidth:1251},q:{x_min:91,x_max:1122,y_min:-404,y_max:1086,ha:1490,leftSideBearing:91,advanceWidth:1251},r:{x_min:135,x_max:823,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:797},s:{x_min:48,x_max:1040,y_min:-24,y_max:1086,ha:1110,leftSideBearing:48,advanceWidth:1139},t:{x_min:31,x_max:657,y_min:-24,y_max:1437,ha:1461,leftSideBearing:31,advanceWidth:682},u:{x_min:141,x_max:1107,y_min:-24,y_max:1062,ha:1086,leftSideBearing:141,advanceWidth:1251},v:{x_min:11,x_max:1114,y_min:0,y_max:1062,ha:1062,leftSideBearing:11,advanceWidth:1139},w:{x_min:9,x_max:1592,y_min:0,y_max:1062,ha:1062,leftSideBearing:9,advanceWidth:1593},x:{x_min:12,x_max:1120,y_min:0,y_max:1062,ha:1062,leftSideBearing:12,advanceWidth:1139},y:{x_min:14,x_max:1106,y_min:-431,y_max:1062,ha:1493,leftSideBearing:14,advanceWidth:1139},z:{x_min:34,x_max:982,y_min:0,y_max:1062,ha:1062,leftSideBearing:34,advanceWidth:1024},"{":{x_min:60,x_max:744,y_min:-431,y_max:1491,ha:1922,leftSideBearing:60,advanceWidth:797},"|":{x_min:176,x_max:399,y_min:-431,y_max:1491,ha:1922,leftSideBearing:176,advanceWidth:573},"}":{x_min:45,x_max:729,y_min:-431,y_max:1491,ha:1922,leftSideBearing:45,advanceWidth:797},"~":{x_min:67,x_max:1129,y_min:519,y_max:924,ha:405,leftSideBearing:67,advanceWidth:1196}},fontFamily:"Arial",resolution:2048,generatedOn:"2022-11-04T20:05:21.000Z"},Ri={smufl:!1,name:"SANS",spacing:50,Description:"Built-in sans-serif font",bold:!0,italic:!0,monospaced:!1,serifs:!1,glyphs:{0:{x_min:85,x_max:1041,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139},1:{x_min:223,x_max:763,y_min:0,y_max:1472,ha:1472,leftSideBearing:223,advanceWidth:1139},2:{x_min:61.840001123045234,x_max:1031,y_min:0,y_max:1472,ha:1472,leftSideBearing:61,advanceWidth:1139},3:{x_min:86,x_max:1046,y_min:-26,y_max:1472,ha:1498,leftSideBearing:86,advanceWidth:1139},4:{x_min:26,x_max:1040,y_min:0,y_max:1466,ha:1466,leftSideBearing:26,advanceWidth:1139},5:{x_min:85,x_max:1057,y_min:-25,y_max:1446,ha:1471,leftSideBearing:85,advanceWidth:1139},6:{x_min:77,x_max:1045,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},7:{x_min:97,x_max:1046,y_min:0,y_max:1447,ha:1447,leftSideBearing:97,advanceWidth:1139},8:{x_min:83,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:83,advanceWidth:1139},9:{x_min:85,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:176,x_max:399,y_min:0,y_max:1466,ha:1466,leftSideBearing:176,advanceWidth:569},'"':{x_min:94,x_max:631,y_min:947,y_max:1466,ha:519,leftSideBearing:94,advanceWidth:727},"#":{x_min:21,x_max:1113,y_min:-25,y_max:1491,ha:1516,leftSideBearing:21,advanceWidth:1139},$:{x_min:73,x_max:1043,y_min:-211,y_max:1601,ha:1812,leftSideBearing:73,advanceWidth:1139},"%":{x_min:119,x_max:1695,y_min:-54,y_max:1491,ha:1545,leftSideBearing:119,advanceWidth:1821},"&":{x_min:88,x_max:1319,y_min:-34,y_max:1491,ha:1525,leftSideBearing:88,advanceWidth:1366},"'":{x_min:90,x_max:295,y_min:947,y_max:1466,ha:519,leftSideBearing:90,advanceWidth:391},"(":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},")":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},"*":{x_min:64,x_max:725,y_min:867,y_max:1491,ha:624,leftSideBearing:64,advanceWidth:797},"+":{x_min:114,x_max:1082,y_min:237,y_max:1206,ha:969,leftSideBearing:114,advanceWidth:1196},",":{x_min:170,x_max:387,y_min:-290,y_max:205,ha:495,leftSideBearing:170,advanceWidth:569},"-":{x_min:65,x_max:618,y_min:440,y_max:621,ha:181,leftSideBearing:65,advanceWidth:682},".":{x_min:186,x_max:391,y_min:0,y_max:205,ha:205,leftSideBearing:186,advanceWidth:569},"/":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},":":{x_min:185,x_max:390,y_min:0,y_max:1062,ha:1062,leftSideBearing:185,advanceWidth:569},";":{x_min:170,x_max:387,y_min:-290,y_max:1062,ha:1352,leftSideBearing:170,advanceWidth:569},"<":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"=":{x_min:114,x_max:1082,y_min:417,y_max:1030,ha:613,leftSideBearing:114,advanceWidth:1196},">":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"?":{x_min:90,x_max:1036,y_min:0,y_max:1491,ha:1491,leftSideBearing:90,advanceWidth:1139},"@":{x_min:111,x_max:2005,y_min:-431,y_max:1493,ha:1924,leftSideBearing:111,advanceWidth:2079},A:{x_min:-3,x_max:1369,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},B:{x_min:150,x_max:1257,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},C:{x_min:102,x_max:1398,y_min:-25,y_max:1491,ha:1516,leftSideBearing:102,advanceWidth:1479},D:{x_min:158,x_max:1370,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1479},E:{x_min:162,x_max:1256,y_min:0,y_max:1466,ha:1466,leftSideBearing:162,advanceWidth:1366},F:{x_min:168,x_max:1157,y_min:0,y_max:1466,ha:1466,leftSideBearing:168,advanceWidth:1251},G:{x_min:109,x_max:1465,y_min:-25,y_max:1491,ha:1516,leftSideBearing:109,advanceWidth:1593},H:{x_min:164,x_max:1314,y_min:0,y_max:1466,ha:1466,leftSideBearing:164,advanceWidth:1479},I:{x_min:191,x_max:385,y_min:0,y_max:1466,ha:1466,leftSideBearing:191,advanceWidth:569},J:{x_min:58.84976474807333,x_max:865,y_min:-25,y_max:1466,ha:1491,leftSideBearing:58,advanceWidth:1024},K:{x_min:150,x_max:1362,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},L:{x_min:150,x_max:1066,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1139},M:{x_min:152,x_max:1551,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1706},N:{x_min:156,x_max:1311,y_min:0,y_max:1466,ha:1466,leftSideBearing:156,advanceWidth:1479},O:{x_min:99,x_max:1501,y_min:-25,y_max:1492,ha:1517,leftSideBearing:99,advanceWidth:1593},P:{x_min:158,x_max:1277,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1366},Q:{x_min:88,x_max:1518,y_min:-114,y_max:1492,ha:1606,leftSideBearing:88,advanceWidth:1593},R:{x_min:161,x_max:1453,y_min:0,y_max:1466,ha:1466,leftSideBearing:161,advanceWidth:1479},S:{x_min:92,x_max:1259,y_min:-25,y_max:1491,ha:1516,leftSideBearing:92,advanceWidth:1366},T:{x_min:48,x_max:1210,y_min:0,y_max:1466,ha:1466,leftSideBearing:48,advanceWidth:1251},U:{x_min:161,x_max:1314,y_min:-25,y_max:1466,ha:1491,leftSideBearing:161,advanceWidth:1479},V:{x_min:9,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},W:{x_min:25,x_max:1910,y_min:0,y_max:1466,ha:1466,leftSideBearing:25,advanceWidth:1933},X:{x_min:9,x_max:1353,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},Y:{x_min:6,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:6,advanceWidth:1366},Z:{x_min:41,x_max:1200,y_min:0,y_max:1466,ha:1466,leftSideBearing:41,advanceWidth:1251},"[":{x_min:139,x_max:536,y_min:-407,y_max:1466,ha:1873,leftSideBearing:139,advanceWidth:569},"\\":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},"]":{x_min:39,x_max:436,y_min:-407,y_max:1466,ha:1873,leftSideBearing:39,advanceWidth:569},"^":{x_min:54,x_max:907,y_min:690,y_max:1491,ha:801,leftSideBearing:54,advanceWidth:961},_:{x_min:-31,x_max:1162,y_min:-407,y_max:-277,ha:130,leftSideBearing:-31,advanceWidth:1139},"`":{x_min:89,x_max:465,y_min:1194,y_max:1474,ha:280,leftSideBearing:89,advanceWidth:682},a:{x_min:74,x_max:1052,y_min:-24,y_max:1086,ha:1110,leftSideBearing:74,advanceWidth:1139},b:{x_min:134,x_max:1055,y_min:-24,y_max:1466,ha:1490,leftSideBearing:134,advanceWidth:1139},c:{x_min:80,x_max:1005,y_min:-24,y_max:1086,ha:1110,leftSideBearing:80,advanceWidth:1024},d:{x_min:70,x_max:991,y_min:-24,y_max:1466,ha:1490,leftSideBearing:70,advanceWidth:1139},e:{x_min:75,x_max:1054,y_min:-24,y_max:1086,ha:1110,leftSideBearing:75,advanceWidth:1139},f:{x_min:19,x_max:640,y_min:0,y_max:1491,ha:1491,leftSideBearing:19,advanceWidth:569},g:{x_min:66,x_max:1002,y_min:-431,y_max:1086,ha:1517,leftSideBearing:66,advanceWidth:1139},h:{x_min:135,x_max:1e3,y_min:0,y_max:1466,ha:1466,leftSideBearing:135,advanceWidth:1139},i:{x_min:136,x_max:316,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:455},j:{x_min:-94,x_max:314,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:455},k:{x_min:136,x_max:1016,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:1024},l:{x_min:131,x_max:311,y_min:0,y_max:1466,ha:1466,leftSideBearing:131,advanceWidth:455},m:{x_min:135,x_max:1574,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1706},n:{x_min:135,x_max:998,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1139},o:{x_min:68,x_max:1063,y_min:-24,y_max:1086,ha:1110,leftSideBearing:68,advanceWidth:1139},p:{x_min:135,x_max:1057,y_min:-407,y_max:1086,ha:1493,leftSideBearing:135,advanceWidth:1139},q:{x_min:72,x_max:992,y_min:-407,y_max:1086,ha:1493,leftSideBearing:72,advanceWidth:1139},r:{x_min:133,x_max:710,y_min:0,y_max:1086,ha:1086,leftSideBearing:133,advanceWidth:682},s:{x_min:63,x_max:945,y_min:-24,y_max:1086,ha:1110,leftSideBearing:63,advanceWidth:1024},t:{x_min:36,x_max:554,y_min:-14,y_max:1433,ha:1447,leftSideBearing:36,advanceWidth:569},u:{x_min:131,x_max:992,y_min:-24,y_max:1062,ha:1086,leftSideBearing:131,advanceWidth:1139},v:{x_min:26,x_max:1e3,y_min:0,y_max:1062,ha:1062,leftSideBearing:26,advanceWidth:1024},w:{x_min:6,x_max:1463,y_min:0,y_max:1062,ha:1062,leftSideBearing:6,advanceWidth:1479},x:{x_min:15,x_max:1009,y_min:0,y_max:1062,ha:1062,leftSideBearing:15,advanceWidth:1024},y:{x_min:33,x_max:1006,y_min:-431,y_max:1062,ha:1493,leftSideBearing:33,advanceWidth:1024},z:{x_min:40,x_max:980,y_min:0,y_max:1062,ha:1062,leftSideBearing:40,advanceWidth:1024},"{":{x_min:57,x_max:636,y_min:-431,y_max:1491,ha:1922,leftSideBearing:57,advanceWidth:684},"|":{x_min:188,x_max:345,y_min:-431,y_max:1491,ha:1922,leftSideBearing:188,advanceWidth:532},"}":{x_min:47,x_max:626,y_min:-431,y_max:1491,ha:1922,leftSideBearing:47,advanceWidth:684},"~":{x_min:87,x_max:1110,y_min:557,y_max:885,ha:328,leftSideBearing:87,advanceWidth:1196}},fontFamily:"sans-serif",resolution:2048,generatedOn:"2020-10-18T18:48:11.823Z"},Oi={smufl:!1,name:"SERIF",spacing:50,Description:"Built-in serif font",bold:!0,italic:!0,monospaced:!1,serifs:!0,glyphs:{0:{x_min:49,x_max:975,y_min:-27,y_max:1383,ha:1410,leftSideBearing:49,advanceWidth:1024},1:{x_min:227,x_max:811,y_min:0,y_max:1383,ha:1383,leftSideBearing:227,advanceWidth:1024},2:{x_min:61,x_max:965,y_min:0,y_max:1383,ha:1383,leftSideBearing:61,advanceWidth:1024},3:{x_min:88,x_max:883,y_min:-27,y_max:1383,ha:1410,leftSideBearing:88,advanceWidth:1024},4:{x_min:25,x_max:967,y_min:0,y_max:1384,ha:1384,leftSideBearing:25,advanceWidth:1024},5:{x_min:66,x_max:898,y_min:-27,y_max:1409,ha:1436,leftSideBearing:66,advanceWidth:1024},6:{x_min:70,x_max:958,y_min:-27,y_max:1401,ha:1428,leftSideBearing:70,advanceWidth:1024},7:{x_min:41,x_max:920,y_min:-16,y_max:1356,ha:1372,leftSideBearing:41,advanceWidth:1024},8:{x_min:115,x_max:911,y_min:-27,y_max:1383,ha:1410,leftSideBearing:115,advanceWidth:1024},9:{x_min:61,x_max:940,y_min:-41,y_max:1383,ha:1424,leftSideBearing:61,advanceWidth:1024}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:512},"!":{x_min:266,x_max:488,y_min:-22,y_max:1383,ha:1405,leftSideBearing:266,advanceWidth:682},'"':{x_min:157.2000021972655,x_max:678.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:157,advanceWidth:836},"#":{x_min:10,x_max:1016,y_min:-1,y_max:1356,ha:1357,leftSideBearing:10,advanceWidth:1024},$:{x_min:90,x_max:936,y_min:-180,y_max:1492,ha:1672,leftSideBearing:90,advanceWidth:1024},"%":{x_min:125,x_max:1581,y_min:-30,y_max:1388,ha:1418,leftSideBearing:125,advanceWidth:1706},"&":{x_min:86,x_max:1536,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1593},"'":{x_min:97.20000219726548,x_max:273.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:97,advanceWidth:369},"(":{x_min:98,x_max:623,y_min:-363,y_max:1383,ha:1746,leftSideBearing:98,advanceWidth:682},")":{x_min:59,x_max:584,y_min:-363,y_max:1383,ha:1746,leftSideBearing:59,advanceWidth:682},"*":{x_min:137.96078522291893,x_max:886.039214777081,y_min:543,y_max:1383,ha:840,leftSideBearing:137,advanceWidth:1024},"+":{x_min:61,x_max:1093,y_min:2,y_max:1034,ha:1032,leftSideBearing:61,advanceWidth:1155},",":{x_min:115,x_max:399,y_min:-291,y_max:208,ha:499,leftSideBearing:115,advanceWidth:512},"-":{x_min:80,x_max:584,y_min:396,y_max:525,ha:129,leftSideBearing:80,advanceWidth:682},".":{x_min:143,x_max:371,y_min:-22,y_max:205,ha:227,leftSideBearing:143,advanceWidth:512},"/":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},":":{x_min:166,x_max:394,y_min:-22,y_max:943,ha:965,leftSideBearing:166,advanceWidth:569},";":{x_min:164,x_max:448,y_min:-290,y_max:943,ha:1233,leftSideBearing:164,advanceWidth:569},"<":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"=":{x_min:61,x_max:1093,y_min:246,y_max:791,ha:545,leftSideBearing:61,advanceWidth:1155},">":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"?":{x_min:139,x_max:848,y_min:-15,y_max:1383,ha:1398,leftSideBearing:139,advanceWidth:909},"@":{x_min:238,x_max:1657,y_min:-29,y_max:1386,ha:1415,leftSideBearing:238,advanceWidth:1886},A:{x_min:31,x_max:1445,y_min:0,y_max:1380,ha:1380,leftSideBearing:31,advanceWidth:1479},B:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},C:{x_min:57,x_max:1296,y_min:-28,y_max:1383,ha:1411,leftSideBearing:57,advanceWidth:1366},D:{x_min:33,x_max:1403,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1479},E:{x_min:25,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},F:{x_min:25,x_max:1119,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1139},G:{x_min:66,x_max:1452,y_min:-28,y_max:1383,ha:1411,leftSideBearing:66,advanceWidth:1479},H:{x_min:39,x_max:1438,y_min:0,y_max:1356,ha:1356,leftSideBearing:39,advanceWidth:1479},I:{x_min:37,x_max:642,y_min:0,y_max:1356,ha:1356,leftSideBearing:37,advanceWidth:682},J:{x_min:20,x_max:758,y_min:-28,y_max:1356,ha:1384,leftSideBearing:20,advanceWidth:797},K:{x_min:70,x_max:1479,y_min:0,y_max:1356,ha:1356,leftSideBearing:70,advanceWidth:1479},L:{x_min:25,x_max:1224,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},M:{x_min:25,x_max:1768,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1821},N:{x_min:25,x_max:1450,y_min:-22,y_max:1356,ha:1378,leftSideBearing:25,advanceWidth:1479},O:{x_min:70,x_max:1409,y_min:-28,y_max:1383,ha:1411,leftSideBearing:70,advanceWidth:1479},P:{x_min:33,x_max:1110,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1139},Q:{x_min:70,x_max:1435,y_min:-364.28571588721996,y_max:1383,ha:1747.28571588722,leftSideBearing:70,advanceWidth:1479},R:{x_min:35,x_max:1347,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},S:{x_min:86,x_max:1006,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1139},T:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1251},U:{x_min:29,x_max:1444,y_min:-28,y_max:1356,ha:1384,leftSideBearing:29,advanceWidth:1479},V:{x_min:33,x_max:1428,y_min:-22,y_max:1356,ha:1378,leftSideBearing:33,advanceWidth:1479},W:{x_min:10,x_max:1906,y_min:-22,y_max:1356,ha:1378,leftSideBearing:10,advanceWidth:1933},X:{x_min:20,x_max:1449,y_min:0,y_max:1356,ha:1356,leftSideBearing:20,advanceWidth:1479},Y:{x_min:45,x_max:1441,y_min:0,y_max:1356,ha:1356,leftSideBearing:45,advanceWidth:1479},Z:{x_min:18,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:18,advanceWidth:1251},"[":{x_min:180,x_max:612,y_min:-319,y_max:1355,ha:1674,leftSideBearing:180,advanceWidth:682},"\\":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},"]":{x_min:70,x_max:502,y_min:-319,y_max:1355,ha:1674,leftSideBearing:70,advanceWidth:682},"^":{x_min:49,x_max:914,y_min:608,y_max:1355,ha:747,leftSideBearing:49,advanceWidth:961},_:{x_min:0,x_max:1024,y_min:-255,y_max:-153,ha:102,leftSideBearing:0,advanceWidth:1024},"`":{x_min:39,x_max:499,y_min:1037,y_max:1392.509803639748,ha:355.50980363974804,leftSideBearing:39,advanceWidth:682},a:{x_min:76,x_max:905,y_min:-20,y_max:942,ha:962,leftSideBearing:76,advanceWidth:909},b:{x_min:6,x_max:958,y_min:-20,y_max:1399,ha:1419,leftSideBearing:6,advanceWidth:1024},c:{x_min:51,x_max:843,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},d:{x_min:55,x_max:1006,y_min:-20,y_max:1399,ha:1419,leftSideBearing:55,advanceWidth:1024},e:{x_min:51,x_max:868,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},f:{x_min:41,x_max:783,y_min:0,y_max:1399,ha:1399,leftSideBearing:41,advanceWidth:682},g:{x_min:57,x_max:963,y_min:-446,y_max:942,ha:1388,leftSideBearing:57,advanceWidth:1024},h:{x_min:18,x_max:997,y_min:0,y_max:1399,ha:1399,leftSideBearing:18,advanceWidth:1024},i:{x_min:33,x_max:516,y_min:0,y_max:1399,ha:1399,leftSideBearing:33,advanceWidth:569},j:{x_min:-142,x_max:397,y_min:-446,y_max:1399,ha:1845,leftSideBearing:-142,advanceWidth:569},k:{x_min:14,x_max:1029,y_min:0,y_max:1399,ha:1399,leftSideBearing:14,advanceWidth:1024},l:{x_min:39,x_max:523,y_min:0,y_max:1399,ha:1399,leftSideBearing:39,advanceWidth:569},m:{x_min:33,x_max:1587,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1593},n:{x_min:33,x_max:993,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1024},o:{x_min:59,x_max:963,y_min:-20,y_max:942,ha:962,leftSideBearing:59,advanceWidth:1024},p:{x_min:10,x_max:964,y_min:-443,y_max:944,ha:1387,leftSideBearing:10,advanceWidth:1024},q:{x_min:49,x_max:999,y_min:-443,y_max:942.0135137169275,ha:1385.0135137169275,leftSideBearing:49,advanceWidth:1024},r:{x_min:10,x_max:685,y_min:0,y_max:944,ha:944,leftSideBearing:10,advanceWidth:682},s:{x_min:104,x_max:713,y_min:-20,y_max:942.0263161804552,ha:962.0263161804552,leftSideBearing:104,advanceWidth:797},t:{x_min:27,x_max:572,y_min:-18,y_max:1186,ha:1204,leftSideBearing:27,advanceWidth:569},u:{x_min:18,x_max:981,y_min:-21,y_max:921,ha:942,leftSideBearing:18,advanceWidth:1024},v:{x_min:39,x_max:976,y_min:-28,y_max:921,ha:949,leftSideBearing:39,advanceWidth:1024},w:{x_min:43,x_max:1423,y_min:-28,y_max:921,ha:949,leftSideBearing:43,advanceWidth:1479},x:{x_min:35,x_max:989,y_min:0,y_max:921,ha:921,leftSideBearing:35,advanceWidth:1024},y:{x_min:29,x_max:976,y_min:-445,y_max:921,ha:1366,leftSideBearing:29,advanceWidth:1024},z:{x_min:55,x_max:855,y_min:0,y_max:921,ha:921,leftSideBearing:55,advanceWidth:909},"{":{x_min:205,x_max:717,y_min:-377,y_max:1397,ha:1774,leftSideBearing:205,advanceWidth:983},"|":{x_min:137,x_max:273,y_min:-512,y_max:1535,ha:2047,leftSideBearing:137,advanceWidth:410},"}":{x_min:266,x_max:778,y_min:-377,y_max:1397,ha:1774,leftSideBearing:266,advanceWidth:983},"~":{x_min:82,x_max:1028,y_min:380,y_max:666,ha:286,leftSideBearing:82,advanceWidth:1108}},fontFamily:"serif",resolution:2048,generatedOn:"2020-10-18T19:03:12.514Z"};class Li{static sortAndUnique(t,e,i){if(t.length>1){const s=[];let n;t.sort(e);for(let e=0;eWi(void 0,void 0,void 0,(function*(){const i=M.load(t);if(i.hasData())return;if(!e){if(!(t in Ii))throw new p("UnknownFont",`Music font ${t} does not exist.`);e=Ii[t]}let s;if("string"==typeof e){const i=yield import(e),n=x().VexFlowFont;s=void 0!==n&&void 0!==n[t]?n[t]:i.Font}else s=e;i.setData(s.data),i.setMetrics(s.metrics)})),function(){{const t=Mi,{fontFamily:e,resolution:i,glyphs:s}=t;M.load(e,t);const n="@";ct.registerInfo({family:e,resolution:i,glyphs:s,maxSizeGlyph:n,monospaced:!1,bold:!0,italic:!1,superscriptOffset:.66,subscriptOffset:.66,serifs:!1,description:"Generic SANS font"})}{const t=Ri,{fontFamily:e,resolution:i,glyphs:s}=t;M.load(e,t);const n="@";ct.registerInfo({family:e,resolution:i,glyphs:s,maxSizeGlyph:n,monospaced:!1,bold:!1,italic:!1,superscriptOffset:.66,subscriptOffset:.66,serifs:!1,description:"Generic SANS font"})}{const t=Oi,{fontFamily:e,resolution:i,glyphs:s}=t;M.load(e,t);const n="@";ct.registerInfo({family:e,resolution:i,glyphs:s,maxSizeGlyph:n,monospaced:!1,bold:!1,italic:!1,superscriptOffset:.66,subscriptOffset:.66,serifs:!0,description:"Generic SERIF font"})}{const t=Fi,{fontFamily:e,resolution:i,glyphs:s}=t;M.load(e,t);const n="b";ct.registerInfo({family:e,resolution:i,glyphs:s,maxSizeGlyph:n,monospaced:!1,bold:!1,italic:!1,superscriptOffset:.66,subscriptOffset:.66,serifs:!0,description:"Text font to pair with the Bravura / Gonville music fonts."})}{const t=Di,{fontFamily:e,resolution:i,glyphs:s}=t;M.load(e,t);const n="b";ct.registerInfo({family:e,resolution:i,glyphs:s,maxSizeGlyph:n,monospaced:!1,bold:!1,italic:!1,superscriptOffset:.66,subscriptOffset:.66,serifs:!1,description:"Text font to pair with the Petaluma music font."})}}(),e=e.default})())); +//# sourceMappingURL=vexflow-core.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-core.js.map b/build/cjs/vexflow-core.js.map new file mode 100644 index 0000000000..284afedd45 --- /dev/null +++ b/build/cjs/vexflow-core.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vexflow-core.js","mappings":";;;;;CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAa,IAAID,IAEjBD,EAAU,IAAIC,GACf,CATD,CASsB,oBAAXK,OAAyBA,OAA+B,oBAAfC,WAA6BA,WAAaC,MAAO,IACrG,M,aCTA,IAAIC,EAAsB,CCA1BA,EAAwB,CAACP,EAASQ,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAEV,EAASS,IAC5EE,OAAOC,eAAeZ,EAASS,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,GCNDF,EAAoBQ,EAAI,WACvB,GAA0B,iBAAfV,WAAyB,OAAOA,WAC3C,IACC,OAAOC,MAAQ,IAAIU,SAAS,cAAb,EAChB,CAAE,MAAOC,GACR,GAAsB,iBAAXb,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBG,EAAoBG,EAAI,CAACQ,EAAKC,IAAUR,OAAOS,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFZ,EAAoBgB,EAAKvB,IACH,oBAAXwB,QAA0BA,OAAOC,aAC1Cd,OAAOC,eAAeZ,EAASwB,OAAOC,YAAa,CAAEC,MAAO,WAE7Df,OAAOC,eAAeZ,EAAS,aAAc,CAAE0B,OAAO,GAAO,E,yCCOvD,SAASC,EAAWT,EAAKU,EAAUC,GAAiB,GAEvD,GAAmB,iBAARX,GAA4B,OAARA,EAC3B,OAAO,EAIX,IAAIY,EAAiBZ,EAAIa,YAEzB,GAAIF,EAAgB,CAEhB,KAAe,OAARX,GAAc,CAEjB,GADAY,EAAiBZ,EAAIa,YACjB,aAAcD,GAAkBA,EAAeE,WAAaJ,EAC5D,OAAO,EAEXV,EAAMP,OAAOsB,eAAef,EAChC,CACA,OAAO,CACX,CAGI,MAAO,aAAcY,GAAkBA,EAAeE,WAAaJ,CAE3E,C,s7EACO,MAAMM,EAAgBhB,GAAQS,EAAWT,EAAKiB,EAASC,YACjDC,EAAgBnB,GAAQS,EAAWT,EAAKiB,EAASG,YACjDC,EAAarB,GAAQS,EAAWT,EAAKiB,EAASK,SAC9CC,EAASvB,GAAQS,EAAWT,EAAKiB,EAASO,KAC1CC,EAAezB,GAAQS,EAAWT,EAAKiB,EAASS,WAChDC,EAAoB3B,GAAQS,EAAWT,EAAKiB,EAASW,gBACrDC,EAAU7B,GAAQS,EAAWT,EAAKiB,EAASa,MAC3CC,EAAmB/B,GAAQS,EAAWT,EAAKiB,EAASe,eACpDC,EAAejC,GAAQS,EAAWT,EAAKiB,EAASiB,WAChDC,EAAmBnC,GAAQS,EAAWT,EAAKiB,EAASmB,eACpDC,EAAarC,GAAQS,EAAWT,EAAKiB,EAASqB,SAGpD,IAAIrB,GACX,SAAWA,GACPA,EAAqB,WAAI,aACzBA,EAAqB,WAAI,aACzBA,EAAuB,aAAI,eAC3BA,EAAkB,QAAI,UACtBA,EAAkB,QAAI,UACtBA,EAAe,KAAI,OACnBA,EAAe,KAAI,OACnBA,EAAsB,YAAI,cAC1BA,EAAe,KAAI,OACnBA,EAAmB,SAAI,WACvBA,EAAoB,UAAI,YACxBA,EAAgB,MAAI,QACpBA,EAAc,IAAI,MAClBA,EAAkB,QAAI,UACtBA,EAAmB,SAAI,WACvBA,EAAyB,eAAI,iBAC7BA,EAAoB,UAAI,YACxBA,EAAgB,MAAI,QACpBA,EAAoB,UAAI,YACxBA,EAAoB,UAAI,YACxBA,EAAyB,eAAI,iBAC7BA,EAAuB,aAAI,eAC3BA,EAAuB,aAAI,eAC3BA,EAAqB,WAAI,aACzBA,EAAmB,SAAI,WACvBA,EAA2B,iBAAI,mBAC/BA,EAAe,KAAI,OACnBA,EAAmB,SAAI,WACvBA,EAAuB,aAAI,eAC3BA,EAAmB,SAAI,WACvBA,EAAsB,YAAI,cAC1BA,EAAuB,aAAI,eAC3BA,EAAwB,cAAI,gBAC5BA,EAAqB,WAAI,aACzBA,EAAqB,WAAI,aACzBA,EAAgB,MAAI,QACpBA,EAAyB,eAAI,iBAC7BA,EAAuB,aAAI,eAC3BA,EAAoB,UAAI,YACxBA,EAAwB,cAAI,gBAC5BA,EAAoB,UAAI,YACxBA,EAAuB,aAAI,eAC3BA,EAAqB,WAAI,aACzBA,EAAoB,UAAI,YACxBA,EAAmB,SAAI,WACvBA,EAAe,KAAI,OACnBA,EAAwB,cAAI,gBAC5BA,EAAuB,aAAI,eAC3BA,EAAiB,OAAI,SACrBA,EAAiB,OAAI,SACrBA,EAAkB,QAAI,UACtBA,EAAmB,SAAI,WACvBA,EAAmB,SAAI,WACvBA,EAAiB,OAAI,SACrBA,EAAsB,YAAI,cAC1BA,EAAuB,aAAI,eAC3BA,EAAmB,SAAI,WACvBA,EAAmB,SAAI,WACvBA,EAAwB,cAAI,gBAC5BA,EAAsB,YAAI,cAC1BA,EAAkB,QAAI,UACtBA,EAAiB,OAAI,SACrBA,EAAkB,QAAI,UACtBA,EAAyB,eAAI,iBAC7BA,EAAgB,MAAI,QACpBA,EAAgB,MAAI,OACvB,CAnED,CAmEGA,IAAaA,EAAW,CAAC,IClHrB,MAAMsB,UAAqBC,MAC9B,WAAA3B,CAAY4B,EAAMC,EAAU,IACxBC,MAAM,kBAAoBF,EAAO,KAAOC,GACxCtD,KAAKqD,KAAOA,CAChB,EAIG,SAASG,IACZ,MAA0B,oBAAfzD,WACAA,WAES,oBAAT0D,KACAA,KAEW,oBAAX3D,OACAA,YAEW,IAAX,EAAAW,EACA,EAAAA,EAEJC,SAAS,cAATA,EACX,CAKO,SAASgD,EAAQC,EAAGN,EAAO,YAAaC,EAAU,IACrD,QAAUM,IAAND,EACA,MAAM,IAAIR,EAAaE,EAAMC,GAEjC,OAAOK,CACX,CAGO,SAASE,EAAIC,KAAUC,GAC1B,IAAKA,EACD,OACJ,MAAMC,EAAOC,MAAMnD,UAAUoD,MAAMlD,KAAK+C,GAAMI,KAAK,KACnDX,IAAeY,QAAQP,IAAIC,EAAQ,KAAOE,EAC9C,CAGO,SAASK,KAAQN,GACpB,MAAMC,EAAOD,EAAKI,KAAK,KACjBG,EAAM,IAAIlB,MAChBI,IAAeY,QAAQP,IAAI,YAAaG,EAAMM,EAAIC,MACtD,CAMO,SAASC,EAAQC,EAAGC,GACvB,IAAIC,EAAWD,GAAKD,EAAIC,GAAK,EALjC,IAAgBf,EAAGiB,EASf,OAHID,EAAW,EAAI,IACfA,IAPQhB,EAOqB,GAAXgB,IAPPC,EAOsB,IANrBA,EAAI,EAAIC,SAAS,GAAGlB,EAAIiB,EAAK,IAAMA,EAAIA,EAAIC,SAAS,GAAGlB,EAAIiB,EAAK,IAAMA,GAM5C,IAEnCD,CACX,CAKO,SAASG,EAAOC,GACnB,MAAO,MAAMA,GACjB,CAIO,SAASC,EAAeP,GAK3B,OAJAA,GAAS,EAAIQ,KAAKC,IACV,IACJT,GAAK,EAAIQ,KAAKC,IAEXT,CACX,CAIO,SAASU,EAASC,GACrB,OAAOA,EAAIC,QAAO,CAACZ,EAAGC,IAAMD,EAAIC,GAAG,EACvC,CC9EA,MAAMY,EACF,mBAAW5D,GACP,OAAOG,EAASyD,QACpB,CAKA,UAAOC,CAAId,EAAGC,GACV,GAAiB,iBAAND,GAAkBe,OAAOC,MAAMhB,IAAmB,iBAANC,GAAkBc,OAAOC,MAAMf,GAClF,MAAM,IAAIvB,EAAa,cAAe,oBAAoBsB,MAAMC,KAEpE,IAAIgB,EACJ,KAAa,IAANhB,GACHgB,EAAIhB,EACJA,EAAID,EAAIC,EACRD,EAAIiB,EAER,OAAOjB,CACX,CAEA,UAAOkB,CAAIlB,EAAGC,GACV,OAAQD,EAAIC,EAAKY,EAASC,IAAId,EAAGC,EACrC,CAEA,WAAOkB,CAAK7B,GACR,OAAoB,IAAhBA,EAAK8B,OACE,EAEc,IAAhB9B,EAAK8B,OACH9B,EAAK,GAES,IAAhBA,EAAK8B,OACHP,EAASK,IAAI5B,EAAK,GAAIA,EAAK,IAK3BuB,EAASK,IAAI5B,EAAK+B,QAASR,EAASM,KAAK7B,GAExD,CAEA,WAAAtC,CAAYsE,EAAWC,GACnBhG,KAAK+F,UAAY,EACjB/F,KAAKgG,YAAc,EACnBhG,KAAKiG,IAAIF,EAAWC,EACxB,CAEA,GAAAC,CAAIF,EAAY,EAAGC,EAAc,GAG7B,OAFAhG,KAAK+F,UAAYA,EACjB/F,KAAKgG,YAAcA,EACZhG,IACX,CAEA,KAAAoB,GACI,OAAOpB,KAAK+F,UAAY/F,KAAKgG,WACjC,CAEA,QAAAE,GACI,IAAIC,EAAInG,KAAK+F,UACTK,EAAIpG,KAAKgG,YACb,MAAMK,EAAMf,EAASC,IAAIY,EAAGC,GAO5B,OANAD,GAAKE,EACLD,GAAKC,EACDD,EAAI,IACJA,GAAKA,EACLD,GAAKA,GAEFnG,KAAKiG,IAAIE,EAAGC,EACvB,CAEA,GAAAE,CAAIC,EAAS,EAAGC,EAAS,GACrB,MAAOC,EAAgBC,GAAoBC,EAA2BJ,EAAQC,GACxEI,EAAMtB,EAASK,IAAI3F,KAAKgG,YAAaU,GACrCjC,EAAImC,EAAM5G,KAAKgG,YACftB,EAAIkC,EAAMF,EACVP,EAAInG,KAAK+F,UAAYtB,EAAIgC,EAAiB/B,EAChD,OAAO1E,KAAKiG,IAAIE,EAAGS,EACvB,CAEA,QAAAC,CAASN,EAAS,EAAGC,EAAS,GAC1B,MAAOC,EAAgBC,GAAoBC,EAA2BJ,EAAQC,GACxEI,EAAMtB,EAASK,IAAI3F,KAAKgG,YAAaU,GACrCjC,EAAImC,EAAM5G,KAAKgG,YACftB,EAAIkC,EAAMF,EACVP,EAAInG,KAAK+F,UAAYtB,EAAIgC,EAAiB/B,EAChD,OAAO1E,KAAKiG,IAAIE,EAAGS,EACvB,CAEA,QAAAE,CAASP,EAAS,EAAGC,EAAS,GAC1B,MAAOC,EAAgBC,GAAoBC,EAA2BJ,EAAQC,GAC9E,OAAOxG,KAAKiG,IAAIjG,KAAK+F,UAAYU,EAAgBzG,KAAKgG,YAAcU,EACxE,CAEA,MAAAK,CAAOR,EAAS,EAAGC,EAAS,GACxB,MAAOC,EAAgBC,GAAoBC,EAA2BJ,EAAQC,GAC9E,OAAOxG,KAAKiG,IAAIjG,KAAK+F,UAAYW,EAAkB1G,KAAKgG,YAAcS,EAC1E,CAEA,MAAAO,CAAOC,GACH,MAAMxC,EAAIa,EAAS4B,kBAAkBC,KAAKF,GAASf,WAC7CxB,EAAIY,EAAS8B,kBAAkBD,KAAKnH,MAAMkG,WAChD,OAAOzB,EAAEsB,YAAcrB,EAAEqB,WAAatB,EAAEuB,cAAgBtB,EAAEsB,WAC9D,CAEA,WAAAqB,CAAYJ,GACR,MAAMxC,EAAIa,EAAS8B,kBAAkBD,KAAKnH,MAE1C,OADAyE,EAAEoC,SAASI,GACJxC,EAAEsB,UAAY,CACzB,CAEA,iBAAAuB,CAAkBL,GACd,MAAMxC,EAAIa,EAAS8B,kBAAkBD,KAAKnH,MAE1C,OADAyE,EAAEoC,SAASI,GACJxC,EAAEsB,WAAa,CAC1B,CAEA,QAAAwB,CAASN,GACL,OAAQjH,KAAKsH,kBAAkBL,EACnC,CAEA,cAAAO,CAAeP,GACX,OAAQjH,KAAKqH,YAAYJ,EAC7B,CAEA,KAAAQ,GACI,OAAO,IAAInC,EAAStF,KAAK+F,UAAW/F,KAAKgG,YAC7C,CAEA,IAAAmB,CAAKO,GACD,MAAqB,iBAAVA,EACA1H,KAAKiG,IAAIyB,EAAO,GAGhB1H,KAAKiG,IAAIyB,EAAM3B,UAAW2B,EAAM1B,YAE/C,CAEA,QAAA2B,GACI,OAAO1C,KAAK2C,MAAM5H,KAAK+F,UAAY/F,KAAKgG,YAC5C,CAEA,SAAA6B,GACI,OAAO7H,KAAK+F,UAAY/F,KAAKgG,WACjC,CAEA,OAAA8B,GAGI,OAFA9H,KAAKgG,YAAcf,KAAK8C,IAAI/H,KAAKgG,aACjChG,KAAK+F,UAAYd,KAAK8C,IAAI/H,KAAK+F,WACxB/F,IACX,CAEA,QAAAgI,GACI,MAAO,GAAGhI,KAAK+F,aAAa/F,KAAKgG,aACrC,CAEA,kBAAAiC,GACI,OAAO3C,EAAS4C,oBAAoBf,KAAKnH,MAAMkG,WAAW8B,UAC9D,CAEA,aAAAG,GACI,IAAIC,EAAI,GACR,MAAMC,EAAIrI,KAAK2H,WACTW,EAAIhD,EAAS4C,oBAAoBf,KAAKnH,MAgB5C,OAfIqI,EAAI,GACJC,EAAER,UAEI,IAANO,GACAD,GAAKC,EACe,IAAhBC,EAAEvC,YACFqC,GAAK,IAAIE,EAAEL,yBAIfG,EADqB,IAAhBE,EAAEvC,UACH,IAGAuC,EAAEL,qBAEHG,CACX,CAEA,KAAAG,CAAMC,GACF,MAAMC,EAAID,EAAIE,MAAM,KACd9D,EAAIC,SAAS4D,EAAE,GAAI,IACnBrC,EAAIqC,EAAE,GAAK5D,SAAS4D,EAAE,GAAI,IAAM,EACtC,OAAOzI,KAAKiG,IAAIrB,EAAGwB,EACvB,EAQJ,SAASO,EAA2B/B,EAAGwB,EAAI,GACvC,MAAiB,iBAANxB,EAEA,CAACA,EAAGwB,GAIJ,CAACxB,EAAEmB,UAAWnB,EAAEoB,YAE/B,CAdAV,EAAS4B,kBAAoB,IAAI5B,EACjCA,EAAS8B,kBAAoB,IAAI9B,EACjCA,EAAS4C,oBAAsB,IAAI5C,ECtM5B,MAAMqD,EAIT,WAAOxB,CAAKyB,GACR,OAAO,IAAID,EAAYC,EAAKjF,EAAGiF,EAAKC,EAAGD,EAAKE,EAAGF,EAAKG,EACxD,CACA,WAAAtH,CAAYkC,EAAGkF,EAAGC,EAAGC,GACjB/I,KAAK2D,EAAIA,EACT3D,KAAK6I,EAAIA,EACT7I,KAAK8I,EAAIA,EACT9I,KAAK+I,EAAIA,CACb,CAEA,IAAAC,GACI,OAAOhJ,KAAK2D,CAChB,CAEA,IAAAsF,GACI,OAAOjJ,KAAK6I,CAChB,CAEA,IAAAK,GACI,OAAOlJ,KAAK8I,CAChB,CAEA,IAAAK,GACI,OAAOnJ,KAAK+I,CAChB,CAEA,IAAAK,CAAKzF,GAED,OADA3D,KAAK2D,EAAIA,EACF3D,IACX,CAEA,IAAAqJ,CAAKR,GAED,OADA7I,KAAK6I,EAAIA,EACF7I,IACX,CAEA,IAAAsJ,CAAKR,GAED,OADA9I,KAAK8I,EAAIA,EACF9I,IACX,CAEA,IAAAuJ,CAAKR,GAED,OADA/I,KAAK+I,EAAIA,EACF/I,IACX,CAEA,IAAAwJ,CAAK7F,EAAGkF,GAGJ,OAFA7I,KAAK2D,GAAKA,EACV3D,KAAK6I,GAAKA,EACH7I,IACX,CAEA,KAAAyH,GACI,OAAOkB,EAAYxB,KAAKnH,KAC5B,CAKA,SAAAyJ,CAAUC,GACN,MAAMd,EAAOc,EACPC,EAAQ3J,KAAK2D,EAAIiF,EAAKjF,EAAI3D,KAAK2D,EAAIiF,EAAKjF,EACxCiG,EAAQ5J,KAAK6I,EAAID,EAAKC,EAAI7I,KAAK6I,EAAID,EAAKC,EACxCgB,EAAQ5E,KAAK6E,IAAI9J,KAAK2D,EAAI3D,KAAK8I,EAAGF,EAAKjF,EAAIiF,EAAKE,GAAKa,EACrDI,EAAQ9E,KAAK6E,IAAI9J,KAAK6I,EAAI7I,KAAK+I,EAAGH,EAAKC,EAAID,EAAKG,GAAKa,EAK3D,OAJA5J,KAAK2D,EAAIgG,EACT3J,KAAK6I,EAAIe,EACT5J,KAAK8I,EAAIe,EACT7J,KAAK+I,EAAIgB,EACF/J,IACX,ECjEG,MAAMgK,EACT,WAAAvI,GACIzB,KAAKiK,GAAKzE,OAAO0E,IACjBlK,KAAKmK,GAAK3E,OAAO0E,IACjBlK,KAAKoK,GAAK5E,OAAO0E,IACjBlK,KAAKqK,GAAK7E,OAAO0E,GACrB,CAEA,KAAAI,GACI,OAAOtK,KAAKiK,EAChB,CAEA,KAAAM,GACI,OAAOvK,KAAKmK,EAChB,CAEA,KAAAK,GACI,OAAOxK,KAAKoK,GAAKpK,KAAKiK,EAC1B,CAEA,MAAAQ,GACI,OAAOzK,KAAKqK,GAAKrK,KAAKmK,EAC1B,CAEA,QAAAO,CAAS/G,EAAGkF,IACJpD,MAAMzF,KAAKiK,KAAOtG,EAAI3D,KAAKiK,MAC3BjK,KAAKiK,GAAKtG,IACV8B,MAAMzF,KAAKoK,KAAOzG,EAAI3D,KAAKoK,MAC3BpK,KAAKoK,GAAKzG,IACV8B,MAAMzF,KAAKmK,KAAOtB,EAAI7I,KAAKmK,MAC3BnK,KAAKmK,GAAKtB,IACVpD,MAAMzF,KAAKqK,KAAOxB,EAAI7I,KAAKqK,MAC3BrK,KAAKqK,GAAKxB,EAClB,CAEA,IAAA8B,CAAKhH,GACD3D,KAAK0K,SAAS/G,EAAG3D,KAAKmK,GAC1B,CAEA,IAAAS,CAAK/B,GACD7I,KAAK0K,SAAS1K,KAAKiK,GAAIpB,EAC3B,CAEA,iBAAAgC,CAAkBC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,GACvCnL,KAAK0K,SAASI,EAAKC,GACnB/K,KAAK0K,SAASQ,EAAKC,GACnB,MAAMC,EAAOJ,EAAMF,EAEnB,IAAIO,EAAQD,GADCF,EAAMF,GAEnB,GAAa,GAATK,EAAY,CACZ,MAAM3F,EAAI0F,EAAOC,EACjB,GAAI3F,EAAI,GAAKA,EAAI,EAAG,CAChB,MAAM4F,EAAK,EAAI5F,EACf1F,KAAK2K,KAAKW,EAAKA,EAAKR,EAAM,EAAIQ,EAAK5F,EAAIsF,EAAMtF,EAAIA,EAAIwF,EACzD,CACJ,CACA,MAAMK,EAAON,EAAMF,EAGnB,GADAM,EAAQE,GADKJ,EAAMF,GAEN,GAATI,EAAY,CACZ,MAAM3F,EAAI6F,EAAOF,EACjB,GAAI3F,EAAI,GAAKA,EAAI,EAAG,CAChB,MAAM4F,EAAK,EAAI5F,EACf1F,KAAK4K,KAAKU,EAAKA,EAAKP,EAAM,EAAIO,EAAK5F,EAAIuF,EAAMvF,EAAIA,EAAIyF,EACzD,CACJ,CACJ,CAEA,cAAAK,CAAeV,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKM,EAAKC,GAE9C,MAAMC,EAAK,CAACb,EAAKC,GACXa,EAAK,CAACZ,EAAKC,GACXY,EAAK,CAACX,EAAKC,GACXW,EAAK,CAACL,EAAKC,GACjB,IAAIjD,EACJzI,KAAK0K,SAASiB,EAAG,GAAIA,EAAG,IACxB3L,KAAK0K,SAASoB,EAAG,GAAIA,EAAG,IACxB,MAAMxD,EAAI,CAAC5C,EAAG+C,IAAMxD,KAAK8G,IAAI,EAAIrG,EAAG,GAAKiG,EAAGlD,GACxC,EAAIxD,KAAK8G,IAAI,EAAIrG,EAAG,GAAKA,EAAIkG,EAAGnD,GAChC,GAAK,EAAI/C,GAAKT,KAAK8G,IAAIrG,EAAG,GAAKmG,EAAGpD,GAClCxD,KAAK8G,IAAIrG,EAAG,GAAKoG,EAAGrD,GACxB,IAAKA,EAAI,EAAGA,GAAK,EAAGA,IAAK,CACrB,MAAM/D,EAAI,EAAIiH,EAAGlD,GAAK,GAAKmD,EAAGnD,GAAK,EAAIoD,EAAGpD,GACpChE,GAAK,EAAIkH,EAAGlD,GAAK,EAAImD,EAAGnD,GAAK,EAAIoD,EAAGpD,GAAK,EAAIqD,EAAGrD,GAChDuD,EAAI,EAAIJ,EAAGnD,GAAK,EAAIkD,EAAGlD,GAC7B,GAAU,IAANhE,EAAS,CACT,GAAU,IAANC,EACA,SACJ,MAAMgB,GAAKsG,EAAItH,EACX,EAAIgB,GAAKA,EAAI,IACH,IAAN+C,GACAzI,KAAK2K,KAAKrC,EAAE5C,EAAG+C,IACT,IAANA,GACAzI,KAAK4K,KAAKtC,EAAE5C,EAAG+C,KAEvB,QACJ,CACA,MAAMwD,EAAOhH,KAAK8G,IAAIrH,EAAG,GAAK,EAAIsH,EAAIvH,EACtC,GAAIwH,EAAO,EACP,SACJ,MAAMC,IAAOxH,EAAIO,KAAKkH,KAAKF,KAAU,EAAIxH,GACrC,EAAIyH,GAAMA,EAAK,IACL,IAANzD,GACAzI,KAAK2K,KAAKrC,EAAE4D,EAAIzD,IACV,IAANA,GACAzI,KAAK4K,KAAKtC,EAAE4D,EAAIzD,KAExB,MAAM2D,IAAO1H,EAAIO,KAAKkH,KAAKF,KAAU,EAAIxH,GACrC,EAAI2H,GAAMA,EAAK,IACL,IAAN3D,GACAzI,KAAK2K,KAAKrC,EAAE8D,EAAI3D,IACV,IAANA,GACAzI,KAAK4K,KAAKtC,EAAE8D,EAAI3D,IAE5B,CACJ,EC9HJ,IAUW4D,EAKAC,EAfPC,EAAwC,SAAUC,EAASC,EAAYC,EAAGC,GAE1E,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAU3L,GAAS,IAAM4L,EAAKL,EAAUM,KAAK7L,GAAS,CAAE,MAAOT,GAAKmM,EAAOnM,EAAI,CAAE,CAC1F,SAASuM,EAAS9L,GAAS,IAAM4L,EAAKL,EAAiB,MAAEvL,GAAS,CAAE,MAAOT,GAAKmM,EAAOnM,EAAI,CAAE,CAC7F,SAASqM,EAAKG,GAJlB,IAAe/L,EAIa+L,EAAOC,KAAOP,EAAQM,EAAO/L,QAJ1CA,EAIyD+L,EAAO/L,MAJhDA,aAAiBsL,EAAItL,EAAQ,IAAIsL,GAAE,SAAUG,GAAWA,EAAQzL,EAAQ,KAIjBiM,KAAKN,EAAWG,EAAW,CAC7GF,GAAML,EAAYA,EAAUW,MAAMd,EAASC,GAAc,KAAKQ,OAClE,GACJ,EAaA,IAAIM,GAVJ,SAAWlB,GACPA,EAAmB,OAAI,SACvBA,EAAiB,KAAI,MACxB,CAHD,CAGGA,IAAeA,EAAa,CAAC,IAEhC,SAAWC,GACPA,EAAkB,OAAI,SACtBA,EAAkB,OAAI,QACzB,CAHD,CAGGA,IAAcA,EAAY,CAAC,IAG9B,MAAMkB,EAAQ,CAAC,EACf,MAAMC,EAOF,8BAAOC,CAAwBC,EAAWF,EAAKG,MAC3C,IAAIC,EACJ,GAAwB,iBAAbF,EAEP,OAAOA,EAAWF,EAAKK,cAAcC,GAEpC,CACD,MAAM3M,EAAQ4M,WAAWL,GACzB,GAAIlI,MAAMrE,GACN,OAAO,EAEX,MAAM6M,EAAON,EAASO,QAAQ,WAAY,IAAIC,cAE9C,OAAO/M,GADsD,QAAnCyM,EAAKJ,EAAKK,cAAcG,UAA0B,IAAPJ,EAAgBA,EAAK,EAE9F,CACJ,CAOA,8BAAOO,CAAwBT,EAAWF,EAAKG,MAC3C,IAAIC,EACJ,GAAwB,iBAAbF,EAEP,OAAOA,EAEN,CACD,MAAMvM,EAAQ4M,WAAWL,GACzB,GAAIlI,MAAMrE,GACN,OAAO,EAEX,MAAM6M,EAAON,EAASO,QAAQ,WAAY,IAAIC,cAE9C,OAAO/M,IADuD,QAAnCyM,EAAKJ,EAAKK,cAAcG,UAA0B,IAAPJ,EAAgBA,EAAK,GAAKJ,EAAKK,cAAcC,GAEvH,CACJ,CAQA,eAAOM,CAAS/F,EAAGgG,EAAMC,EAAQC,GAG7B,GAAiB,iBAANlG,QAA2B1E,IAAT0K,QAAiC1K,IAAX2K,QAAkC3K,IAAV4K,EACvE,OAAOf,EAAKgB,cAAcnG,GAE9B,IAAIoG,EA+BJ,MA9BiB,iBAANpG,GAEPoG,EAASpG,EAAEoG,OACXJ,EAAOhG,EAAEgG,KACTC,EAASjG,EAAEiG,OACXC,EAAQlG,EAAEkG,OAIVE,EAASpG,EAEboG,EAASA,QAAuCA,EAASjB,EAAKkB,WAC9DL,EAAOA,QAAmCA,EAAOb,EAAKG,KAAO,KAC7DW,EAASA,QAAuCA,EAASlC,EAAWuC,OACpEJ,EAAQA,QAAqCA,EAAQlC,EAAUsC,OAChD,KAAXL,IACAA,EAASlC,EAAWuC,QAEV,KAAVJ,IACAA,EAAQlC,EAAUsC,QAGF,iBAATN,IACPA,EAAO,GAAGA,OAGQ,iBAAXC,IACPA,EAASA,EAAOvG,YAGb,CAAE0G,SAAQJ,OAAMC,SAAQC,QACnC,CAIA,oBAAOC,CAAcI,GAIZtB,IACDA,EAAauB,SAASC,cAAc,SAExCxB,EAAWiB,MAAMQ,KAAOH,EACxB,MAAM,WAAEI,EAAU,SAAEtB,EAAQ,WAAEuB,EAAU,UAAEC,GAAc5B,EAAWiB,MACnE,MAAO,CAAEE,OAAQO,EAAYX,KAAMX,EAAUY,OAAQW,EAAYV,MAAOW,EAC5E,CAIA,kBAAOC,CAAYC,GACf,IAAIxB,EACJ,IAAKwB,EACD,MAAO,GAEX,IAAIb,EACJ,MAAMc,EAAKD,EAASb,MAOpB,IAAID,EALAC,EADAc,IAAOhD,EAAUsC,QAAiB,KAAPU,QAAoB1L,IAAP0L,EAChC,GAGAA,EAAGC,OAAS,IAGxB,MAAMC,EAAKH,EAASd,OAUpB,IAAID,EARAC,EADAiB,IAAOnD,EAAWuC,QAAiB,KAAPY,QAAoB5L,IAAP4L,EAChC,GAEU,iBAAPA,EACHA,EAAK,IAGLA,EAAGD,OAAS,IAGzB,MAAME,EAAKJ,EAASf,KAEhBA,OADO1K,IAAP6L,EACOhC,EAAKG,KAAO,MAEA,iBAAP6B,EACLA,EAAK,MAILA,EAAGF,OAAS,IAGvB,MAAO,GAAGf,IAAQD,IAASD,IADe,QAA1BT,EAAKwB,EAASX,cAA2B,IAAPb,EAAgBA,EAAKJ,EAAKkB,YAEhF,CAQA,gBAAOe,CAAU/B,EAAUgC,GACvB,GAAwB,iBAAbhC,EACP,OAAQA,EAAWgC,EAKnB,MAAO,GAFO3B,WAAWL,GAEPgC,IADLhC,EAASO,QAAQ,WAAY,KAGlD,CAKA,aAAO0B,CAAOrB,GACV,GAAKA,EAGA,IAAsB,iBAAXA,EACZ,OAAOA,GAAU,IAEhB,CAED,MAAMsB,EAAehL,SAAS0J,EAAQ,IACtC,OAAI9I,MAAMoK,GAC0B,SAAzBtB,EAAOJ,cAGP0B,GAAgB,GAE/B,EAdI,OAAO,CAef,CAKA,eAAOC,CAAStB,GACZ,QAAKA,GAIMA,EAAML,gBAAkB7B,EAAUyD,MAEjD,CAUA,kBAAOC,CAAYC,EAAUC,EAASC,GAAe,GACjD,OAAO5D,EAAUvM,UAAM,OAAQ,GAAQ,YACnC,MAKMoQ,EAAW,IAAIC,SAASJ,GALbE,EAAe,OAAOD,wBAAgC,IACtD,OAAOA,qBASxB,aAJME,EAASE,OAGfxB,SAASyB,MAAMjK,IAAI8J,GACZA,CACX,GACJ,CAYA,mBAAOI,GACH,OAAOjE,EAAUvM,UAAM,OAAQ,GAAQ,YACnC,MAAMyQ,EAAOhD,EAAKiD,cACZC,EAAQlD,EAAKmD,eACnB,IAAK,MAAMX,KAAYU,EAAO,CAC1B,MAAME,EAAWF,EAAMV,GACvBxC,EAAKuC,YAAYC,EAAUQ,EAAOI,EACtC,CACJ,GACJ,CAUA,WAAOP,CAAKL,EAAUa,EAAMC,GACxB,IAAI/B,EAAOxB,EAAMyC,GAWjB,OAVKjB,IACDA,EAAO,IAAIvB,EAAKwC,GAChBzC,EAAMyC,GAAYjB,GAElB8B,GACA9B,EAAKgC,QAAQF,GAEbC,GACA/B,EAAKiC,WAAWF,GAEb/B,CACX,CAKA,WAAAvN,CAAYwO,GACRjQ,KAAKkR,KAAOjB,CAChB,CACA,OAAAkB,GACI,OAAOnR,KAAKkR,IAChB,CACA,OAAAE,GACI,OAAO1N,EAAQ1D,KAAK8Q,KAAM,YAAa,oBAC3C,CACA,UAAAO,GACI,OAAO3N,EAAQ1D,KAAK+Q,QAAS,YAAa,kBAC9C,CACA,OAAAC,CAAQF,GACJ9Q,KAAK8Q,KAAOA,CAChB,CACA,UAAAG,CAAWF,GACP/Q,KAAK+Q,QAAUA,CACnB,CACA,OAAAO,GACI,YAAqB1N,IAAd5D,KAAK8Q,IAChB,CACA,aAAAS,GACI,OAAOvR,KAAKoR,UAAUI,UAC1B,CACA,SAAAC,GACI,OAAOzR,KAAKoR,UAAUM,MAC1B,CAQA,YAAAC,CAAaxR,EAAKyR,GACd,MAAMC,EAAW1R,EAAIuI,MAAM,KAE3B,IAAIoJ,EAAU9R,KAAKqR,aACnB,IAAK,IAAI5I,EAAI,EAAGA,EAAIoJ,EAAShM,OAAQ4C,IAAK,CACtC,MACMrH,EAAQ0Q,EADED,EAASpJ,IAEzB,QAAc7E,IAAVxC,EAEA,OAAOwQ,EAGXE,EAAU1Q,CACd,CAEA,OAAO0Q,CACX,CAEA,QAAA9J,GACI,MAAO,IAAMhI,KAAKkR,KAAO,QAC7B,EAKJzD,EAAKkB,WAAa,oBAElBlB,EAAKsE,MAAQ,yBAEbtE,EAAKG,KAAO,GAGZH,EAAKK,cAAgB,CACjBC,GAAI,EAAI,EACRiE,GAAI,EACJC,GAAI,GACJ,IAAK,IACLC,GAAI,GACJC,GAAI,GAAK,KACTC,GAAI,GAAK,MAOb3E,EAAKiD,cAAgB,yCAMrBjD,EAAKmD,eAAiB,CAClB,cAAe,0CACfyB,eAAgB,wCCvWpB,MAAMC,EACF,WAAA7Q,GACIzB,KAAKuS,GAAK,CAAC,EACXvS,KAAKwS,KAAO,CAAC,EACbxS,KAAKyS,MAAQ,CAAC,CAClB,EAEG,MAAMC,EACT,yBAAOC,GACH,OAAOD,EAASE,eACpB,CAGA,4BAAOC,CAAsBC,GACzBJ,EAASE,gBAAkBE,CAC/B,CACA,6BAAOC,GACHL,EAASE,qBAAkBhP,CAC/B,CACA,WAAAnC,GACIzB,KAAKgT,MAAQ,IAAIV,CACrB,CACA,KAAAW,GAEI,OADAjT,KAAKgT,MAAQ,IAAIV,EACVtS,IACX,CACA,aAAAkT,CAAchC,EAAM9P,EAAOmR,EAAIY,GAC3B,MAAMH,EAAQhT,KAAKgT,MACdA,EAAM9B,GAAM9P,KACb4R,EAAM9B,GAAM9P,GAAS,CAAC,GAE1B4R,EAAM9B,GAAM9P,GAAOmR,GAAMY,CAC7B,CAGA,WAAAC,EAAY,GAAEb,EAAE,KAAErB,EAAI,MAAE9P,EAAK,SAAEiS,IAC3B,MAAMF,EAAOnT,KAAKsT,eAAef,QAChB3O,IAAbyP,GAA0BrT,KAAKgT,MAAM9B,GAAMmC,WACpCrT,KAAKgT,MAAM9B,GAAMmC,GAAUd,GAElCnR,GAAS+R,GACTnT,KAAKkT,cAAchC,EAAM9P,EAAO+R,EAAKI,aAAa,MAAOJ,EAEjE,CAQA,QAAAK,CAASL,EAAMZ,GAEX,KADAA,EAAKA,GAAMY,EAAKI,aAAa,OAEzB,MAAM,IAAIpQ,EAAa,wDAO3B,OAJAgQ,EAAKM,aAAa,KAAMlB,GACxBvS,KAAKkT,cAAc,KAAMX,EAAIA,EAAIY,GACjCnT,KAAKoT,YAAY,CAAEb,KAAIrB,KAAM,OAAQ9P,MAAO+R,EAAKI,aAAa,QAASF,cAAUzP,IACjFuP,EAAKO,WAAW1T,MACTA,IACX,CACA,cAAAsT,CAAef,GACX,IAAI1E,EAAI8F,EACR,OAAmF,QAA3EA,EAA8B,QAAxB9F,EAAK7N,KAAKgT,MAAMT,UAAuB,IAAP1E,OAAgB,EAASA,EAAG0E,UAAwB,IAAPoB,OAAgB,EAASA,EAAGpB,EAC3H,CACA,sBAAAqB,CAAuBC,EAAWzS,GAC9B,MAAM0S,EAAa9T,KAAKgT,MAAMa,GAC9B,GAAIC,EAAY,CACZ,MAAMC,EAAiBD,EAAW1S,GAClC,GAAI2S,EAAgB,CAEhB,OADa1T,OAAO2T,KAAKD,GACbE,KAAKC,GAAMH,EAAeG,IAC1C,CACJ,CACA,MAAO,EACX,CACA,iBAAAC,CAAkB3B,GACd,OAAOxS,KAAK4T,uBAAuB,OAAQpB,EAC/C,CACA,kBAAA4B,CAAmBC,GACf,OAAOrU,KAAK4T,uBAAuB,QAASS,EAChD,CAGA,QAAAC,CAASC,GAKL,MAJqB,CAAC,KAAM,OAAQ,SACnBC,SAASD,EAAKrD,OAC3BlR,KAAKoT,YAAYmB,GAEdvU,IACX,EClGJ,MAAMyU,EACF,mBAAW/S,GACP,OAAOG,EAAS4S,OACpB,CACA,YAAOC,GACH,MAAO,OAAOD,EAAQE,IAC1B,CACA,WAAAlT,GACI,IAAIoM,EAGJ7N,KAAK4U,SAAW,GAChB5U,KAAK6U,MAAQ,CACTtC,GAAIkC,EAAQC,QACZlC,KAAMxS,KAAK8U,cACXrC,MAAO,IAEXzS,KAAK+U,UAAW,EAEyB,QAAxClH,EAAK6E,EAASC,4BAAyC,IAAP9E,GAAyBA,EAAG2F,SAASxT,KAC1F,CAUA,eAAAgV,CAAgBC,GAEZ,OADAjV,KAAK4U,SAASM,KAAKD,GACZjV,IACX,CACA,WAAA8U,GACI,OAAO9U,KAAKyB,YAAYC,QAC5B,CAuBA,QAAAyT,CAAS3G,GAEL,OADAxO,KAAKwO,MAAQA,EACNxO,IACX,CAEA,aAAAoV,CAAc5G,GAGV,OAFAxO,KAAKwO,MAAQA,EACbxO,KAAK4U,SAASS,SAASJ,GAAUA,EAAMG,cAAc5G,KAC9CxO,IACX,CAEA,QAAAsV,GACI,OAAOtV,KAAKwO,KAChB,CAEA,UAAA+G,CAAWC,EAAUxV,KAAKwV,QAAShH,EAAQxO,KAAKsV,YAC5C,OAAK9G,GAEAgH,GAELA,EAAQC,OACJjH,EAAMkH,aACNF,EAAQG,eAAenH,EAAMkH,aAC7BlH,EAAMoH,YACNJ,EAAQK,cAAcrH,EAAMoH,YAC5BpH,EAAMsH,WACNN,EAAQO,aAAavH,EAAMsH,WAC3BtH,EAAMwH,aACNR,EAAQS,eAAezH,EAAMwH,aAC7BxH,EAAM0H,WACNV,EAAQW,aAAa3H,EAAM0H,WACxBlW,MAdIA,IAef,CAEA,YAAAoW,CAAaZ,EAAUxV,KAAKwV,QAAShH,EAAQxO,KAAKsV,YAC9C,OAAK9G,GAEAgH,GAELA,EAAQa,UACDrW,MAJIA,IAKf,CAKA,aAAAsW,GACItW,KAAKuW,eACLvW,KAAKuV,aACLvV,KAAKwW,OACLxW,KAAKoW,cACT,CAEA,QAAAK,CAASpC,GACL,IAAIxG,EACJ,QAAK7N,KAAK6U,MAAMpC,QAE2F,IAAvE,QAA3B5E,EAAK7N,KAAK6U,MAAMpC,aAA0B,IAAP5E,OAAgB,EAASA,EAAGnF,MAAM,KAAKgO,QAAQrC,GAC/F,CAEA,QAAAsC,CAAStC,GACL,IAAIxG,EACJ,OAAI7N,KAAKyW,SAASpC,KAEbrU,KAAK6U,MAAMpC,MAGZzS,KAAK6U,MAAMpC,MAAQ,GAAGzS,KAAK6U,MAAMpC,SAAS4B,IAF1CrU,KAAK6U,MAAMpC,MAAQ,GAAG4B,IAGD,QAAxBxG,EAAK7N,KAAK8S,gBAA6B,IAAPjF,GAAyBA,EAAGyG,SAAS,CAClE/B,GAAIvS,KAAK6U,MAAMtC,GACfrB,KAAM,QACN9P,MAAOiT,EACPhB,cAAUzP,KATH5D,IAYf,CAEA,WAAA4W,CAAYvC,GACR,IAAIxG,EAAI8F,EACR,IAAK3T,KAAKyW,SAASpC,GACf,OAAOrU,KACX,MAAMoF,EAAkC,QAA3ByI,EAAK7N,KAAK6U,MAAMpC,aAA0B,IAAP5E,OAAgB,EAASA,EAAGnF,MAAM,KAWlF,OAVItD,IACAA,EAAIyR,OAAOzR,EAAIsR,QAAQrC,IACvBrU,KAAK6U,MAAMpC,MAAQrN,EAAIjB,KAAK,MAEP,QAAxBwP,EAAK3T,KAAK8S,gBAA6B,IAAPa,GAAyBA,EAAGW,SAAS,CAClE/B,GAAIvS,KAAK6U,MAAMtC,GACfrB,KAAM,QACN9P,WAAOwC,EACPyP,SAAUgB,IAEPrU,IACX,CAEA,UAAA0T,CAAWZ,GAEP,OADA9S,KAAK8S,SAAWA,EACT9S,IACX,CAEA,UAAA8W,GACI,OAAO9W,KAAK+U,QAChB,CAEA,WAAAgC,CAAYhC,GAAW,GAEnB,OADA/U,KAAK+U,SAAWA,EACT/U,IACX,CAEA,aAAAgX,GACI,OAAOhX,KAAK6U,KAChB,CAGA,YAAAtB,CAAarC,GACT,OAAOlR,KAAK6U,MAAM3D,EACtB,CAEA,aAAA+F,CAAcC,EAAS,IACnB,MAAM3E,EAAKzN,EAAO9E,KAAK6U,MAAMtC,GAAK2E,GAC5BC,EAAUrI,SAASwE,eAAef,GACxC,GAAI4E,EACA,OAAOA,CACf,CAEA,YAAA1D,CAAavC,EAAM9P,GACf,IAAIyM,EACJ,MAAMuJ,EAAQpX,KAAK6U,MAAMtC,GACnBc,EAAWrT,KAAK6U,MAAM3D,GAI5B,OAHAlR,KAAK6U,MAAM3D,GAAQ9P,EAEM,QAAxByM,EAAK7N,KAAK8S,gBAA6B,IAAPjF,GAAyBA,EAAGyG,SAAS,CAAE/B,GAAI6E,EAAOlG,OAAM9P,QAAOiS,aACzFrT,IACX,CAEA,cAAAqX,GACI,OAAOrX,KAAK0J,WAChB,CAEA,UAAA4N,GACI,OAAOtX,KAAKwV,OAChB,CAEA,UAAA+B,CAAW/B,GAEP,OADAxV,KAAKwV,QAAUA,EACRxV,IACX,CAEA,YAAAuW,GACI,OAAO7S,EAAQ1D,KAAKwV,QAAS,YAAa,6CAC9C,CAOA,QAAIxG,CAAK1G,GACLtI,KAAKwX,QAAQlP,EACjB,CAEA,QAAI0G,GACA,OAAOvB,EAAK2B,YAAYpP,KAAKyX,SACjC,CAgBA,OAAAD,CAAQxI,EAAMV,EAAMC,EAAQC,GAExB,MAAMkJ,EAAkB1X,KAAKyB,YAAYkW,UACnCC,EAA+B,iBAAT5I,EACtB6I,EAA+B,iBAAT7I,EACtB8I,OAA2BlU,IAAToL,EAClB+I,OAAuCnU,IAAT0K,QAAiC1K,IAAX2K,QAAkC3K,IAAV4K,EAuBlF,OApBIxO,KAAKyX,SAFLG,EAEgBvX,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGN,GAAkB1I,GAE7D6I,GAAgBE,EAELtK,EAAKgB,cAAcO,GAE9B8I,GAAmBC,EAKR1X,OAAO2X,OAAO,CAAC,EAAGN,GAOlBjK,EAAKY,SAASW,QAAmCA,EAAO0I,EAAgBhJ,OAAQJ,QAAmCA,EAAOoJ,EAAgBpJ,KAAMC,QAAuCA,EAASmJ,EAAgBnJ,OAAQC,QAAqCA,EAAQkJ,EAAgBlJ,OAElSxO,IACX,CAKA,OAAAiY,GAII,OAHKjY,KAAKyX,UACNzX,KAAKkY,YAEFzK,EAAK2B,YAAYpP,KAAKyX,SACjC,CAKA,SAAAS,GACIlY,KAAKwX,SACT,CAEA,YAAInI,GAMA,OALKrP,KAAKyX,UACNzX,KAAKkY,YAIF7X,OAAO2X,OAAO,CAAC,EAAGhY,KAAKyX,SAClC,CACA,YAAIpI,CAASA,GACTrP,KAAKwX,QAAQnI,EACjB,CAEA,WAAA8I,CAAY7J,GACR,MAAMe,EAAWrP,KAAKqP,SAEtB,OADArP,KAAKwX,QAAQnI,EAASX,OAAQJ,EAAMe,EAASd,OAAQc,EAASb,OACvDxO,IACX,CAKA,WAAAoY,GACI,OAAOpY,KAAK2N,QAChB,CAKA,YAAIA,CAASW,GACTtO,KAAKmY,YAAY7J,EACrB,CAIA,YAAIX,GACA,IAAIW,EAAOtO,KAAKqP,SAASf,KAIzB,MAHoB,iBAATA,IACPA,EAAO,GAAGA,OAEPA,CACX,CAIA,oBAAI+J,GACA,OAAO5K,EAAKW,wBAAwBpO,KAAK2N,SAC7C,CAIA,oBAAI2K,GACA,OAAO7K,EAAKC,wBAAwB1N,KAAK2N,SAC7C,CAIA,aAAIwB,GACA,OAAOnP,KAAKqP,SAASb,KACzB,CACA,aAAIW,CAAUX,GACV,MAAMa,EAAWrP,KAAKqP,SACtBrP,KAAKwX,QAAQnI,EAASX,OAAQW,EAASf,KAAMe,EAASd,OAAQC,EAClE,CAKA,cAAIU,GACA,OAAOlP,KAAKqP,SAASd,OAAS,EAClC,CACA,cAAIW,CAAWX,GACX,MAAMc,EAAWrP,KAAKqP,SACtBrP,KAAKwX,QAAQnI,EAASX,OAAQW,EAASf,KAAMC,EAAQc,EAASb,MAClE,EAEJiG,EAAQE,GAAK,IAKbF,EAAQkD,UAAY,CAChBjJ,OAAQjB,EAAKkB,WACbL,KAAMb,EAAKG,KACXW,OAAQlC,EAAWuC,OACnBJ,MAAOlC,EAAUsC,QC/XrB,MAAM2J,EAAa,MAKbC,EAAY,CACd,MAAOD,MACP,EAAGA,MACH,EAAGA,KACH,EAAGA,KACH,EAAGA,KACH,GAAIA,KACJ,GAAIA,IACJ,GAAIA,IACJ,IAAKA,IACL,IAAKA,IAEHE,EAAkB,CACpB3P,EAAG,IACHC,EAAG,IACHV,EAAG,IAIH3D,EAAG,OAEDgU,EAAgB,CAClBC,EAAG,CAAEC,IAAK,GACVC,GAAI,CAAED,IAAK,GACXE,EAAG,CAAEC,IAAK,IAAKH,IAAK,GACpBI,GAAI,CAAED,IAAK,IAAKH,IAAK,GACrBK,GAAI,CAAEF,IAAK,IAAKH,IAAK,GACrBM,GAAI,CAAEH,IAAK,IAAKH,IAAK,GACrBO,GAAI,CAAEJ,IAAK,IAAKH,IAAK,GACrBQ,GAAI,CAAEL,IAAK,IAAKH,IAAK,GACrBS,GAAI,CAAEN,IAAK,IAAKH,IAAK,GACrBU,GAAI,CAAEP,IAAK,IAAKH,IAAK,GACrBW,GAAI,CAAER,IAAK,IAAKH,IAAK,GACrBY,IAAK,CAAET,IAAK,IAAKH,IAAK,GACtBa,GAAI,CAAEV,IAAK,IAAKH,IAAK,GACrBc,IAAK,CAAEX,IAAK,IAAKH,IAAK,GACtBe,GAAI,CAAEZ,IAAK,IAAKH,IAAK,GACrBgB,IAAK,CAAEb,IAAK,IAAKH,IAAK,GACtBiB,EAAG,CAAEd,IAAK,IAAKH,IAAK,GACpBkB,GAAI,CAAEf,IAAK,IAAKH,IAAK,GACrBmB,EAAG,CAAEhB,IAAK,IAAKH,IAAK,GACpBoB,GAAI,CAAEjB,IAAK,IAAKH,IAAK,GACrBqB,EAAG,CAAElB,IAAK,IAAKH,IAAK,GACpB,MAAO,CAAEG,IAAK,IAAKH,IAAK,GACxBsB,EAAG,CAAEnB,IAAK,IAAKH,IAAK,GACpB,MAAO,CAAEG,IAAK,IAAKH,IAAK,GACxBuB,EAAG,CAAEpB,IAAK,IAAKH,IAAK,GACpB,MAAO,CAAEG,IAAK,IAAKH,IAAK,GACxB,KAAM,CAAEG,IAAK,IAAKH,IAAK,GACvB,MAAO,CAAEG,IAAK,IAAKH,IAAK,GACxB,KAAM,CAAEG,IAAK,IAAKH,IAAK,GACvB,MAAO,CAAEG,IAAK,IAAKH,IAAK,IAEtBwB,EAAQ,CACVC,OAAQ,CAAEC,WAAY,GACtBC,KAAM,CAAED,WAAY,GACpBE,MAAO,CAAEF,WAAY,GACrBG,KAAM,CAAEH,WAAY,GACpBI,QAAS,CAAEJ,WAAY,GACvBK,WAAY,CAAEL,WAAY,GAC1B,gBAAiB,CAAEA,WAAY,GAC/B,aAAc,CAAEA,WAAY,GAC5B,aAAc,CAAEA,WAAY,GAC5BM,QAAS,CAAEN,WAAY,GACvBO,OAAQ,CAAEP,YAAa,IAErBQ,EAAY,CACdnC,EAAG,CAAE3F,MAAO,EAAG+H,QAAS,GACxBC,GAAI,CAAEhI,MAAO,EAAG+H,QAAS,EAAGE,WAAY,KACxC,KAAM,CAAEjI,MAAO,EAAG+H,QAAS,EAAGE,WAAY,KAC1C,MAAO,CAAEjI,MAAO,EAAG+H,QAAS,EAAGE,WAAY,MAC3CC,GAAI,CAAElI,MAAO,EAAG+H,QAAS,GAAIE,WAAY,KACzCE,IAAK,CAAEnI,MAAO,EAAG+H,QAAS,GAAIE,WAAY,MAC1ClB,EAAG,CAAE/G,MAAO,EAAG+H,QAAS,GACxBK,GAAI,CAAEpI,MAAO,EAAG+H,QAAS,EAAGE,WAAY,KACxC,KAAM,CAAEjI,MAAO,EAAG+H,QAAS,EAAGE,WAAY,KAC1C,MAAO,CAAEjI,MAAO,EAAG+H,QAAS,EAAGE,WAAY,MAC3CI,GAAI,CAAErI,MAAO,EAAG+H,QAAS,EAAGE,WAAY,KACxCK,IAAK,CAAEtI,MAAO,EAAG+H,QAAS,EAAGE,WAAY,MACzCf,EAAG,CAAElH,MAAO,EAAG+H,QAAS,GACxBQ,GAAI,CAAEvI,MAAO,EAAG+H,QAAS,EAAGE,WAAY,KACxC,KAAM,CAAEjI,MAAO,EAAG+H,QAAS,EAAGE,WAAY,KAC1C,MAAO,CAAEjI,MAAO,EAAG+H,QAAS,EAAGE,WAAY,MAC3CO,GAAI,CAAExI,MAAO,EAAG+H,QAAS,EAAGE,WAAY,KACxCQ,IAAK,CAAEzI,MAAO,EAAG+H,QAAS,EAAGE,WAAY,MACzCnC,EAAG,CAAE9F,MAAO,EAAG+H,QAAS,GACxBW,GAAI,CAAE1I,MAAO,EAAG+H,QAAS,EAAGE,WAAY,KACxC,KAAM,CAAEjI,MAAO,EAAG+H,QAAS,EAAGE,WAAY,KAC1C,MAAO,CAAEjI,MAAO,EAAG+H,QAAS,EAAGE,WAAY,MAC3CU,GAAI,CAAE3I,MAAO,EAAG+H,QAAS,EAAGE,WAAY,KACxCW,IAAK,CAAE5I,MAAO,EAAG+H,QAAS,EAAGE,WAAY,MACzCpB,EAAG,CAAE7G,MAAO,EAAG+H,QAAS,GACxBc,GAAI,CAAE7I,MAAO,EAAG+H,QAAS,EAAGE,WAAY,KACxC,KAAM,CAAEjI,MAAO,EAAG+H,QAAS,EAAGE,WAAY,KAC1C,MAAO,CAAEjI,MAAO,EAAG+H,QAAS,EAAGE,WAAY,MAC3Ca,GAAI,CAAE9I,MAAO,EAAG+H,QAAS,EAAGE,WAAY,KACxCc,IAAK,CAAE/I,MAAO,EAAG+H,QAAS,EAAGE,WAAY,MACzChB,EAAG,CAAEjH,MAAO,EAAG+H,QAAS,GACxBiB,GAAI,CAAEhJ,MAAO,EAAG+H,QAAS,EAAGE,WAAY,KACxC,KAAM,CAAEjI,MAAO,EAAG+H,QAAS,GAAIE,WAAY,KAC3C,MAAO,CAAEjI,MAAO,EAAG+H,QAAS,GAAIE,WAAY,MAC5CgB,GAAI,CAAEjJ,MAAO,EAAG+H,QAAS,EAAGE,WAAY,KACxCiB,IAAK,CAAElJ,MAAO,EAAG+H,QAAS,EAAGE,WAAY,MACzCd,EAAG,CAAEnH,MAAO,EAAG+H,QAAS,IACxBoB,GAAI,CAAEnJ,MAAO,EAAG+H,QAAS,GAAIE,WAAY,KACzC,KAAM,CAAEjI,MAAO,EAAG+H,QAAS,GAAIE,WAAY,KAC3C,MAAO,CAAEjI,MAAO,EAAG+H,QAAS,GAAIE,WAAY,MAC5CmB,GAAI,CAAEpJ,MAAO,EAAG+H,QAAS,GAAIE,WAAY,KACzCoB,IAAK,CAAErJ,MAAO,EAAG+H,QAAS,EAAGE,WAAY,MACzCqB,EAAG,CAAEtJ,MAAO,EAAGuJ,MAAM,GACrBC,EAAG,CACCxJ,MAAO,EACPiI,WAAY,GACZwB,OAAQ,EACRpZ,KAAM,iBACNqZ,YAAa,MAoBfC,EAAc,CAChB,IAAK,CAAEtZ,KAAM,kBAAmBuZ,6BAA8B,GAC9D,KAAM,CAAEvZ,KAAM,wBAAyBuZ,6BAA8B,GACrElY,EAAG,CAAErB,KAAM,iBAAkBuZ,6BAA8B,GAC3DC,GAAI,CAAExZ,KAAM,uBAAwBuZ,6BAA8B,GAClEhY,EAAG,CAAEvB,KAAM,oBAAqBuZ,6BAA8B,GAC9D,IAAK,CAAEvZ,KAAM,uBAAwBuZ,6BAA8B,GACnE,IAAK,CAAEvZ,KAAM,wBAAyBuZ,6BAA8B,GACpEE,GAAI,CAAEzZ,KAAM,4CAA6CuZ,6BAA8B,GACvFxW,EAAG,CAAE/C,KAAM,iCAAkCuZ,4BAA6B,GAC1E,KAAM,CAAEvZ,KAAM,wCAAyCuZ,6BAA8B,GACrF,IAAK,CAAEvZ,KAAM,kCAAmCuZ,6BAA8B,GAC9E,KAAM,CAAEvZ,KAAM,+BAAgCuZ,6BAA8B,GAC5EG,GAAI,CAAE1Z,KAAM,uBAAwBuZ,6BAA8B,GAClEI,IAAK,CAAE3Z,KAAM,8BAA+BuZ,6BAA8B,GAC1Exc,EAAG,CAAEiD,KAAM,iBAAkBuZ,6BAA8B,GAC3D1I,EAAG,CAAE7Q,KAAM,kBAAmBuZ,6BAA8B,GAC5DK,IAAK,CAAE5Z,KAAM,2BAA4BuZ,6BAA8B,GACvE,MAAO,CAAEvZ,KAAM,+BAAgCuZ,6BAA8B,GAC7EM,KAAM,CAAE7Z,KAAM,2BAA4BuZ,6BAA8B,GACxEO,KAAM,CAAE9Z,KAAM,2BAA4BuZ,6BAA8B,GACxEQ,wBAAyB,CAAE/Z,KAAM,0BAA2BuZ,6BAA8B,GAC1FS,0BAA2B,CAAEha,KAAM,4BAA6BuZ,6BAA8B,GAC9FU,oBAAqB,CAAEja,KAAM,sBAAuBuZ,6BAA8B,GAClFW,sBAAuB,CAAEla,KAAM,wBAAyBuZ,6BAA8B,GACtFY,oBAAqB,CAAEna,KAAM,sBAAuBuZ,6BAA8B,GAClFa,sBAAuB,CAAEpa,KAAM,wBAAyBuZ,6BAA8B,GACtFc,2BAA4B,CAAEra,KAAM,6BAA8BuZ,6BAA8B,GAChGe,6BAA8B,CAAEta,KAAM,+BAAgCuZ,6BAA8B,GACpGgB,4BAA6B,CAAEva,KAAM,8BAA+BuZ,6BAA8B,GAClGiB,8BAA+B,CAAExa,KAAM,gCAAiCuZ,6BAA8B,GACtGkB,4BAA6B,CAAEza,KAAM,8BAA+BuZ,6BAA8B,GAClGmB,8BAA+B,CAAE1a,KAAM,gCAAiCuZ,6BAA8B,GACtGoB,2BAA4B,CAAE3a,KAAM,6BAA8BuZ,6BAA8B,GAChGqB,6BAA8B,CAAE5a,KAAM,+BAAgCuZ,6BAA8B,GACpGsB,2BAA4B,CAAE7a,KAAM,6BAA8BuZ,6BAA8B,GAChGuB,6BAA8B,CAAE9a,KAAM,+BAAgCuZ,6BAA8B,GACpGwB,wBAAyB,CAAE/a,KAAM,0BAA2BuZ,6BAA8B,GAC1FyB,qBAAsB,CAAEhb,KAAM,uBAAwBuZ,6BAA8B,GACpF0B,uBAAwB,CAAEjb,KAAM,yBAA0BuZ,6BAA8B,GACxF2B,oBAAqB,CAAElb,KAAM,sBAAuBuZ,6BAA8B,GAClF4B,uBAAwB,CAAEnb,KAAM,yBAA0BuZ,6BAA8B,GACxF6B,oBAAqB,CAAEpb,KAAM,sBAAuBuZ,6BAA8B,GAClF8B,yBAA0B,CAAErb,KAAM,2BAA4BuZ,6BAA8B,GAC5F+B,sBAAuB,CAAEtb,KAAM,wBAAyBuZ,6BAA8B,GACtFgC,iBAAkB,CAAEvb,KAAM,mBAAoBuZ,6BAA8B,GAC5EiC,gBAAiB,CAAExb,KAAM,kBAAmBuZ,6BAA8B,GAC1EkC,uBAAwB,CAAEzb,KAAM,yBAA0BuZ,6BAA8B,GACxFmC,wBAAyB,CAAE1b,KAAM,0BAA2BuZ,6BAA8B,GAC1FoC,qBAAsB,CAAE3b,KAAM,uBAAwBuZ,6BAA8B,GACpFqC,sBAAuB,CAAE5b,KAAM,wBAAyBuZ,6BAA8B,GACtFsC,qBAAsB,CAAE7b,KAAM,uBAAwBuZ,6BAA8B,GACpFuC,sBAAuB,CAAE9b,KAAM,wBAAyBuZ,6BAA8B,GACtFwC,sBAAuB,CAAE/b,KAAM,wBAAyBuZ,6BAA8B,GACtFyC,uBAAwB,CAAEhc,KAAM,yBAA0BuZ,6BAA8B,GACxF0C,sBAAuB,CAAEjc,KAAM,wBAAyBuZ,6BAA8B,GACtF2C,uBAAwB,CAAElc,KAAM,yBAA0BuZ,6BAA8B,GACxF4C,sBAAuB,CAAEnc,KAAM,wBAAyBuZ,6BAA8B,GACtF6C,uBAAwB,CAAEpc,KAAM,yBAA0BuZ,6BAA8B,GACxF8C,sBAAuB,CAAErc,KAAM,wBAAyBuZ,6BAA8B,GACtF+C,uBAAwB,CAAEtc,KAAM,yBAA0BuZ,6BAA8B,GACxFgD,sBAAuB,CAAEvc,KAAM,wBAAyBuZ,6BAA8B,GACtFiD,uBAAwB,CAAExc,KAAM,yBAA0BuZ,6BAA8B,GACxFkD,8BAA+B,CAAEzc,KAAM,gCAAiCuZ,6BAA8B,GACtGmD,2BAA4B,CAAE1c,KAAM,6BAA8BuZ,6BAA8B,GAChGoD,6BAA8B,CAAE3c,KAAM,+BAAgCuZ,6BAA8B,GACpGqD,0BAA2B,CAAE5c,KAAM,4BAA6BuZ,6BAA8B,GAC9FsD,6BAA8B,CAAE7c,KAAM,+BAAgCuZ,6BAA8B,GACpGuD,0BAA2B,CAAE9c,KAAM,4BAA6BuZ,6BAA8B,GAC9FwD,+BAAgC,CAAE/c,KAAM,iCAAkCuZ,6BAA8B,GACxGyD,4BAA6B,CAAEhd,KAAM,8BAA+BuZ,6BAA8B,GAClG0D,uBAAwB,CAAEjd,KAAM,yBAA0BuZ,6BAA8B,GACxF2D,sBAAuB,CAAEld,KAAM,wBAAyBuZ,6BAA8B,GACtF4D,yBAA0B,CAAEnd,KAAM,2BAA4BuZ,6BAA8B,GAC5F6D,2BAA4B,CAAEpd,KAAM,6BAA8BuZ,6BAA8B,GAChG8D,qBAAsB,CAAErd,KAAM,uBAAwBuZ,6BAA8B,GACpF+D,uBAAwB,CAAEtd,KAAM,yBAA0BuZ,6BAA8B,GACxFgE,qBAAsB,CAAEvd,KAAM,uBAAwBuZ,6BAA8B,GACpFiE,uBAAwB,CAAExd,KAAM,yBAA0BuZ,6BAA8B,GACxFkE,uBAAwB,CAAEzd,KAAM,yBAA0BuZ,6BAA8B,GACxFmE,yBAA0B,CAAE1d,KAAM,2BAA4BuZ,6BAA8B,GAC5FoE,6BAA8B,CAAE3d,KAAM,+BAAgCuZ,6BAA8B,GACpGqE,+BAAgC,CAAE5d,KAAM,iCAAkCuZ,6BAA8B,GACxGsE,0BAA2B,CAAE7d,KAAM,4BAA6BuZ,6BAA8B,GAC9FuE,uBAAwB,CAAE9d,KAAM,yBAA0BuZ,6BAA8B,GACxFwE,0BAA2B,CAAE/d,KAAM,4BAA6BuZ,6BAA8B,GAC9FyE,uBAAwB,CAAEhe,KAAM,yBAA0BuZ,6BAA8B,GACxF0E,wBAAyB,CAAEje,KAAM,0BAA2BuZ,6BAA8B,GAC1F2E,qBAAsB,CAAEle,KAAM,uBAAwBuZ,6BAA8B,GACpF4E,wBAAyB,CAAEne,KAAM,0BAA2BuZ,6BAA8B,GAC1F6E,qBAAsB,CAAEpe,KAAM,uBAAwBuZ,6BAA8B,GACpF8E,0BAA2B,CAAEre,KAAM,4BAA6BuZ,6BAA8B,GAC9F+E,uBAAwB,CAAEte,KAAM,yBAA0BuZ,6BAA8B,GACxFgF,wBAAyB,CAAEve,KAAM,0BAA2BuZ,6BAA8B,GAC1FiF,yBAA0B,CAAExe,KAAM,2BAA4BuZ,6BAA8B,GAC5FkF,sBAAuB,CAAEze,KAAM,wBAAyBuZ,6BAA8B,GACtFmF,uBAAwB,CAAE1e,KAAM,yBAA0BuZ,6BAA8B,GACxFoF,sBAAuB,CAAE3e,KAAM,wBAAyBuZ,6BAA8B,GACtFqF,uBAAwB,CAAE5e,KAAM,yBAA0BuZ,6BAA8B,GACxFsF,wBAAyB,CAAE7e,KAAM,0BAA2BuZ,6BAA8B,GAC1FuF,yBAA0B,CAAE9e,KAAM,2BAA4BuZ,6BAA8B,GAC5FwF,wBAAyB,CAAE/e,KAAM,0BAA2BuZ,6BAA8B,GAC1FyF,yBAA0B,CAAEhf,KAAM,2BAA4BuZ,6BAA8B,GAC5F0F,gCAAiC,CAAEjf,KAAM,kCAAmCuZ,6BAA8B,GAC1G2F,6BAA8B,CAAElf,KAAM,+BAAgCuZ,6BAA8B,GACpG4F,gCAAiC,CAAEnf,KAAM,kCAAmCuZ,6BAA8B,GAC1G6F,6BAA8B,CAAEpf,KAAM,+BAAgCuZ,6BAA8B,GACpG8F,8BAA+B,CAAErf,KAAM,gCAAiCuZ,6BAA8B,GACtG+F,2BAA4B,CAAEtf,KAAM,6BAA8BuZ,6BAA8B,GAChGgG,8BAA+B,CAAEvf,KAAM,gCAAiCuZ,6BAA8B,GACtGiG,2BAA4B,CAAExf,KAAM,6BAA8BuZ,6BAA8B,GAChGkG,gCAAiC,CAAEzf,KAAM,kCAAmCuZ,6BAA8B,GAC1GmG,6BAA8B,CAAE1f,KAAM,+BAAgCuZ,6BAA8B,GACpGoG,qBAAsB,CAAE3f,KAAM,uBAAwBuZ,6BAA8B,GACpFqG,uBAAwB,CAAE5f,KAAM,yBAA0BuZ,6BAA8B,GACxFsG,uBAAwB,CAAE7f,KAAM,yBAA0BuZ,6BAA8B,GACxFuG,yBAA0B,CAAE9f,KAAM,2BAA4BuZ,6BAA8B,GAC5FwG,6BAA8B,CAAE/f,KAAM,+BAAgCuZ,6BAA8B,GACpGyG,+BAAgC,CAAEhgB,KAAM,iCAAkCuZ,6BAA8B,GACxG0G,0BAA2B,CAAEjgB,KAAM,4BAA6BuZ,6BAA8B,GAC9F2G,uBAAwB,CAAElgB,KAAM,yBAA0BuZ,6BAA8B,GACxF4G,0BAA2B,CAAEngB,KAAM,4BAA6BuZ,6BAA8B,GAC9F6G,uBAAwB,CAAEpgB,KAAM,yBAA0BuZ,6BAA8B,GACxF8G,wBAAyB,CAAErgB,KAAM,0BAA2BuZ,6BAA8B,GAC1F+G,qBAAsB,CAAEtgB,KAAM,uBAAwBuZ,6BAA8B,GACpFgH,sBAAuB,CAAEvgB,KAAM,wBAAyBuZ,6BAA8B,GACtFiH,uBAAwB,CAAExgB,KAAM,yBAA0BuZ,6BAA8B,GACxFkH,wBAAyB,CAAEzgB,KAAM,0BAA2BuZ,6BAA8B,GAC1FmH,yBAA0B,CAAE1gB,KAAM,2BAA4BuZ,6BAA8B,GAC5FoH,wBAAyB,CAAE3gB,KAAM,0BAA2BuZ,6BAA8B,GAC1FqH,yBAA0B,CAAE5gB,KAAM,2BAA4BuZ,6BAA8B,GAC5FsH,gCAAiC,CAAE7gB,KAAM,kCAAmCuZ,6BAA8B,GAC1GuH,6BAA8B,CAAE9gB,KAAM,+BAAgCuZ,6BAA8B,GACpGwH,gCAAiC,CAAE/gB,KAAM,kCAAmCuZ,6BAA8B,GAC1GyH,6BAA8B,CAAEhhB,KAAM,+BAAgCuZ,6BAA8B,GACpG0H,8BAA+B,CAAEjhB,KAAM,gCAAiCuZ,6BAA8B,GACtG2H,2BAA4B,CAAElhB,KAAM,6BAA8BuZ,6BAA8B,GAChG4H,uBAAwB,CAAEnhB,KAAM,yBAA0BuZ,6BAA8B,GACxF6H,yBAA0B,CAAEphB,KAAM,2BAA4BuZ,6BAA8B,GAC5F8H,uBAAwB,CAAErhB,KAAM,yBAA0BuZ,6BAA8B,GACxF+H,yBAA0B,CAAEthB,KAAM,2BAA4BuZ,6BAA8B,GAC5FgI,sBAAuB,CAAEvhB,KAAM,wBAAyBuZ,6BAA8B,GACtFiI,wBAAyB,CAAExhB,KAAM,0BAA2BuZ,6BAA8B,GAC1FkI,wBAAyB,CAAEzhB,KAAM,0BAA2BuZ,6BAA8B,GAC1FmI,0BAA2B,CAAE1hB,KAAM,4BAA6BuZ,6BAA8B,GAC9FoI,qBAAsB,CAAE3hB,KAAM,uBAAwBuZ,6BAA8B,GACpFqI,uBAAwB,CAAE5hB,KAAM,yBAA0BuZ,6BAA8B,GACxFsI,uBAAwB,CAAE7hB,KAAM,yBAA0BuZ,6BAA8B,GACxFuI,yBAA0B,CAAE9hB,KAAM,2BAA4BuZ,6BAA8B,GAC5FwI,2BAA4B,CAAE/hB,KAAM,6BAA8BuZ,6BAA8B,GAChGyI,6BAA8B,CAAEhiB,KAAM,+BAAgCuZ,6BAA8B,GACpG0I,2BAA4B,CAAEjiB,KAAM,6BAA8BuZ,6BAA8B,GAChG2I,6BAA8B,CAAEliB,KAAM,+BAAgCuZ,6BAA8B,GACpG4I,8BAA+B,CAAEniB,KAAM,gCAAiCuZ,6BAA8B,GACtG6I,gCAAiC,CAAEpiB,KAAM,kCAAmCuZ,6BAA8B,GAC1G8I,+BAAgC,CAAEriB,KAAM,iCAAkCuZ,6BAA8B,GACxG+I,iCAAkC,CAAEtiB,KAAM,mCAAoCuZ,6BAA8B,GAC5GgJ,4BAA6B,CAAEviB,KAAM,8BAA+BuZ,6BAA8B,GAClGiJ,8BAA+B,CAAExiB,KAAM,gCAAiCuZ,6BAA8B,GACtGkJ,8BAA+B,CAAEziB,KAAM,gCAAiCuZ,6BAA8B,GACtGmJ,gCAAiC,CAAE1iB,KAAM,kCAAmCuZ,6BAA8B,GAC1GoJ,2BAA4B,CAAE3iB,KAAM,6BAA8BuZ,6BAA8B,GAChGqJ,6BAA8B,CAAE5iB,KAAM,+BAAgCuZ,6BAA8B,GACpGsJ,8BAA+B,CAAE7iB,KAAM,gCAAiCuZ,6BAA8B,GACtGuJ,gCAAiC,CAAE9iB,KAAM,kCAAmCuZ,6BAA8B,GAC1GwJ,6BAA8B,CAAE/iB,KAAM,+BAAgCuZ,6BAA8B,GACpGyJ,+BAAgC,CAAEhjB,KAAM,iCAAkCuZ,6BAA8B,GACxG0J,wBAAyB,CAAEjjB,KAAM,0BAA2BuZ,6BAA8B,GAC1F2J,qBAAsB,CAAEljB,KAAM,uBAAwBuZ,6BAA8B,GACpF4J,wBAAyB,CAAEnjB,KAAM,0BAA2BuZ,6BAA8B,GAC1F6J,qBAAsB,CAAEpjB,KAAM,uBAAwBuZ,6BAA8B,GACpF8J,0BAA2B,CAAErjB,KAAM,4BAA6BuZ,6BAA8B,GAC9F+J,uBAAwB,CAAEtjB,KAAM,yBAA0BuZ,6BAA8B,GACxFgK,wBAAyB,CAAEvjB,KAAM,0BAA2BuZ,6BAA8B,GAC1FiK,qBAAsB,CAAExjB,KAAM,uBAAwBuZ,6BAA8B,GACpFkK,2BAA4B,CAAEzjB,KAAM,6BAA8BuZ,6BAA8B,GAChGmK,wBAAyB,CAAE1jB,KAAM,0BAA2BuZ,6BAA8B,GAC1FoK,yBAA0B,CAAE3jB,KAAM,2BAA4BuZ,6BAA8B,GAC5FqK,sBAAuB,CAAE5jB,KAAM,wBAAyBuZ,6BAA8B,GACtFsK,wBAAyB,CAAE7jB,KAAM,0BAA2BuZ,6BAA8B,GAC1FuK,qBAAsB,CAAE9jB,KAAM,uBAAwBuZ,6BAA8B,GACpFwK,wBAAyB,CAAE/jB,KAAM,0BAA2BuZ,6BAA8B,GAC1FyK,qBAAsB,CAAEhkB,KAAM,uBAAwBuZ,6BAA8B,GACpF0K,sBAAuB,CAAEjkB,KAAM,wBAAyBuZ,6BAA8B,GACtF2K,uBAAwB,CAAElkB,KAAM,yBAA0BuZ,6BAA8B,GACxF4K,sBAAuB,CAAEnkB,KAAM,wBAAyBuZ,6BAA8B,GACtF6K,uBAAwB,CAAEpkB,KAAM,yBAA0BuZ,6BAA8B,GACxF8K,uBAAwB,CAAErkB,KAAM,yBAA0BuZ,6BAA8B,GACxF+K,wBAAyB,CAAEtkB,KAAM,0BAA2BuZ,6BAA8B,GAC1FgL,yBAA0B,CAAEvkB,KAAM,2BAA4BuZ,6BAA8B,GAC5FiL,0BAA2B,CAAExkB,KAAM,4BAA6BuZ,6BAA8B,GAC9FkL,sBAAuB,CAAEzkB,KAAM,wBAAyBuZ,6BAA8B,GACtFmL,uBAAwB,CAAE1kB,KAAM,yBAA0BuZ,6BAA8B,GACxFoL,wBAAyB,CAAE3kB,KAAM,0BAA2BuZ,6BAA8B,GAC1FqL,yBAA0B,CAAE5kB,KAAM,2BAA4BuZ,6BAA8B,GAC5FsL,sBAAuB,CAAE7kB,KAAM,wBAAyBuZ,6BAA8B,GACtFuL,uBAAwB,CAAE9kB,KAAM,yBAA0BuZ,6BAA8B,GACxFwL,sBAAuB,CAAE/kB,KAAM,wBAAyBuZ,6BAA8B,GACtFyL,uBAAwB,CAAEhlB,KAAM,yBAA0BuZ,6BAA8B,GACxF0L,wBAAyB,CAAEjlB,KAAM,0BAA2BuZ,6BAA8B,GAC1F2L,yBAA0B,CAAEllB,KAAM,2BAA4BuZ,6BAA8B,GAC5F4L,yBAA0B,CAAEnlB,KAAM,2BAA4BuZ,6BAA8B,GAC5F6L,0BAA2B,CAAEplB,KAAM,4BAA6BuZ,6BAA8B,GAC9F8L,sBAAuB,CAAErlB,KAAM,wBAAyBuZ,6BAA8B,GACtF+L,uBAAwB,CAAEtlB,KAAM,yBAA0BuZ,6BAA8B,GACxFgM,wBAAyB,CAAEvlB,KAAM,0BAA2BuZ,6BAA8B,GAC1FiM,yBAA0B,CAAExlB,KAAM,2BAA4BuZ,6BAA8B,GAC5FkM,sBAAuB,CAAEzlB,KAAM,wBAAyBuZ,6BAA8B,GACtFmM,uBAAwB,CAAE1lB,KAAM,yBAA0BuZ,6BAA8B,GACxFoM,yBAA0B,CAAE3lB,KAAM,2BAA4BuZ,6BAA8B,GAC5FqM,0BAA2B,CAAE5lB,KAAM,4BAA6BuZ,6BAA8B,GAC9FsM,wBAAyB,CAAE7lB,KAAM,0BAA2BuZ,6BAA8B,GAC1FuM,yBAA0B,CAAE9lB,KAAM,2BAA4BuZ,6BAA8B,GAC5FwM,8BAA+B,CAAE/lB,KAAM,gCAAiCuZ,6BAA8B,GACtGyM,2BAA4B,CAAEhmB,KAAM,6BAA8BuZ,6BAA8B,GAChG0M,8BAA+B,CAAEjmB,KAAM,gCAAiCuZ,6BAA8B,GACtG2M,2BAA4B,CAAElmB,KAAM,6BAA8BuZ,6BAA8B,GAChG4M,gCAAiC,CAAEnmB,KAAM,kCAAmCuZ,6BAA8B,GAC1G6M,6BAA8B,CAAEpmB,KAAM,+BAAgCuZ,6BAA8B,GACpG8M,8BAA+B,CAAErmB,KAAM,gCAAiCuZ,6BAA8B,GACtG+M,2BAA4B,CAAEtmB,KAAM,6BAA8BuZ,6BAA8B,GAChGgN,iCAAkC,CAAEvmB,KAAM,mCAAoCuZ,6BAA8B,GAC5GiN,8BAA+B,CAAExmB,KAAM,gCAAiCuZ,6BAA8B,GACtGkN,+BAAgC,CAAEzmB,KAAM,iCAAkCuZ,6BAA8B,GACxGmN,4BAA6B,CAAE1mB,KAAM,8BAA+BuZ,6BAA8B,GAClGoN,8BAA+B,CAAE3mB,KAAM,gCAAiCuZ,6BAA8B,GACtGqN,2BAA4B,CAAE5mB,KAAM,6BAA8BuZ,6BAA8B,GAChGsN,8BAA+B,CAAE7mB,KAAM,gCAAiCuZ,6BAA8B,GACtGuN,2BAA4B,CAAE9mB,KAAM,6BAA8BuZ,6BAA8B,GAChGwN,mBAAoB,CAAE/mB,KAAM,qBAAsBuZ,6BAA8B,GAChFyN,qBAAsB,CAAEhnB,KAAM,uBAAwBuZ,6BAA8B,GACpF0N,iBAAkB,CAAEjnB,KAAM,mBAAoBuZ,6BAA8B,GAC5E2N,iBAAkB,CAAElnB,KAAM,mBAAoBuZ,6BAA8B,GAC5E4N,mBAAoB,CAAEnnB,KAAM,qBAAsBuZ,6BAA8B,GAChF6N,qBAAsB,CAAEpnB,KAAM,uBAAwBuZ,6BAA8B,GACpF8N,oBAAqB,CAAErnB,KAAM,sBAAuBuZ,6BAA8B,GAClF+N,sBAAuB,CAAEtnB,KAAM,wBAAyBuZ,6BAA8B,GACtFgO,mBAAoB,CAAEvnB,KAAM,qBAAsBuZ,6BAA8B,GAChFiO,qBAAsB,CAAExnB,KAAM,uBAAwBuZ,6BAA8B,GACpFkO,oBAAqB,CAAEznB,KAAM,sBAAuBuZ,6BAA8B,GAClFmO,sBAAuB,CAAE1nB,KAAM,wBAAyBuZ,6BAA8B,GACtFoO,oBAAqB,CAAE3nB,KAAM,sBAAuBuZ,6BAA8B,GAClFqO,sBAAuB,CAAE5nB,KAAM,wBAAyBuZ,6BAA8B,GACtFsO,oBAAqB,CAAE7nB,KAAM,sBAAuBuZ,6BAA8B,GAClFuO,sBAAuB,CAAE9nB,KAAM,wBAAyBuZ,6BAA8B,GACtFwO,oBAAqB,CAAE/nB,KAAM,sBAAuBuZ,6BAA8B,GAClFyO,sBAAuB,CAAEhoB,KAAM,wBAAyBuZ,6BAA8B,GACtF0O,oBAAqB,CAAEjoB,KAAM,sBAAuBuZ,6BAA8B,GAClF2O,sBAAuB,CAAEloB,KAAM,wBAAyBuZ,6BAA8B,GACtF4O,oBAAqB,CAAEnoB,KAAM,sBAAuBuZ,6BAA8B,GAClF6O,sBAAuB,CAAEpoB,KAAM,wBAAyBuZ,6BAA8B,GACtF8O,oBAAqB,CAAEroB,KAAM,sBAAuBuZ,6BAA8B,GAClF+O,sBAAuB,CAAEtoB,KAAM,wBAAyBuZ,6BAA8B,GACtFgP,oBAAqB,CAAEvoB,KAAM,sBAAuBuZ,6BAA8B,GAClFiP,sBAAuB,CAAExoB,KAAM,wBAAyBuZ,6BAA8B,GACtFkP,4BAA6B,CAAEzoB,KAAM,8BAA+BuZ,6BAA8B,GAClGmP,8BAA+B,CAAE1oB,KAAM,gCAAiCuZ,6BAA8B,GACtGoP,6BAA8B,CAAE3oB,KAAM,+BAAgCuZ,6BAA8B,GACpGqP,oCAAqC,CACjC5oB,KAAM,sCACNuZ,6BAA8B,GAElCsP,qBAAsB,CAAE7oB,KAAM,uBAAwBuZ,6BAA8B,GACpFuP,sBAAuB,CAAE9oB,KAAM,wBAAyBuZ,6BAA8B,IAkCpFwP,EAAgB,CAClB,KAAM,CAAE/oB,KAAM,kBAAmBgpB,eAAe,GAChDC,GAAI,CACAC,UAAW,0BACXC,UAAW,0BACXH,eAAe,GAEnB,KAAM,CACFE,UAAW,mBACXC,UAAW,mBACXH,eAAe,GAEnB,KAAM,CACFE,UAAW,mBACXC,UAAW,mBACXH,eAAe,GAEnB,KAAM,CACFE,UAAW,oBACXC,UAAW,oBACXH,eAAe,GAEnB,KAAM,CAAEhpB,KAAM,2BAA4BgpB,eAAe,GACzDI,GAAI,CACAF,UAAW,4BACXC,UAAW,4BACXH,eAAe,GAEnBK,GAAI,CAAErpB,KAAM,kBAAmBgpB,eAAe,GAC9C,KAAM,CAAEE,UAAW,eAAgBC,UAAW,eAAgBH,eAAe,GAC7E,MAAO,CAAEhpB,KAAM,eAAgBgpB,eAAe,GAC9C,MAAO,CAAEhpB,KAAM,eAAgBgpB,eAAe,GAC9C,MAAO,CAAEE,UAAW,oBAAqBC,UAAW,oBAAqBH,eAAe,GACxF,OAAQ,CAAEhpB,KAAM,oBAAqBgpB,eAAe,GACpD,OAAQ,CAAEhpB,KAAM,oBAAqBgpB,eAAe,GACpD,MAAO,CAAEE,UAAW,mBAAoBC,UAAW,mBAAoBH,eAAe,GACtF,OAAQ,CAAEhpB,KAAM,mBAAoBgpB,eAAe,GACnD,OAAQ,CAAEhpB,KAAM,mBAAoBgpB,eAAe,GACnD,OAAQ,CAAEE,UAAW,uBAAwBC,UAAW,uBAAwBH,eAAe,GAC/F,QAAS,CAAEhpB,KAAM,uBAAwBgpB,eAAe,GACxD,QAAS,CAAEhpB,KAAM,uBAAwBgpB,eAAe,GACxD,KAAM,CAAEhpB,KAAM,eAAgBgpB,eAAe,GAC7CM,GAAI,CAAEtpB,KAAM,iBAAkBgpB,eAAe,GAC7C,KAAM,CAAEhpB,KAAM,kBAAmBgpB,eAAe,IAE9CO,EAAY,CACdC,QAAS,CAAExpB,KAAM,sBACjBypB,iBAAkB,CAAEzpB,KAAM,mBAC1B0pB,KAAM,CAAE1pB,KAAM,gBACd2pB,cAAe,CAAE3pB,KAAM,qBACvB4pB,GAAI,CAAE5pB,KAAM,iBACZ6pB,QAAS,CAAE7pB,KAAM,uCACjB8pB,UAAW,CAAE9pB,KAAM,2CACnB+pB,QAAS,CAAE/pB,KAAM,sCACjBgqB,UAAW,CAAEhqB,KAAM,mCACnBiqB,UAAW,CAAEjqB,KAAM,iCACnBkqB,YAAa,CAAElqB,KAAM,+CACrBmqB,UAAW,CAAEnqB,KAAM,8BACnBoqB,WAAY,CAAEpqB,KAAM,uBACpBqqB,MAAO,CAAErqB,KAAM,cACfsqB,KAAM,CAAEtqB,KAAM,mBACduqB,KAAM,CAAEvqB,KAAM,qBACdwqB,SAAU,CAAExqB,KAAM,mBAClByqB,SAAU,CAAEzqB,KAAM,wBAClB0qB,KAAM,CAAE1qB,KAAM,aACd2qB,cAAe,CAAE3qB,KAAM,mBACvB4qB,YAAa,CAAE5qB,KAAM,iBACrB6qB,KAAM,CAAE7qB,KAAM,aACd8qB,SAAU,CAAE9qB,KAAM,iBAClB+qB,MAAO,CAAE/qB,KAAM,eAEnB,MAAMgrB,EAIF,uBAAOC,GACH,GAAuC,IAAnCD,EAAOE,iBAAiB1oB,OACxB,MAAM,IAAI1C,EAAa,UAAW,yFAGlC,OAAOkrB,EAAOE,iBAAiB,EAEvC,CACA,qBAAOC,CAAeC,GAClB,IAAKA,KAAUA,KAAQrU,GACnB,MAAM,IAAIjX,EAAa,cAAe,iBAAmBsrB,GAC7D,OAAOrU,EAAMqU,EACjB,CAOA,oBAAOC,CAAcC,EAAgBF,EAAO,SAAUG,GAClD,IAAIC,EAAU,CAAEC,aAAc,EAAGC,SAAU,KACrB,iBAAXH,IACPC,EAAUxuB,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAG6W,GAAUD,IAExD,MAAMG,EAAWV,EAAOW,iBAAiBH,EAAQE,UAC3CE,EAASN,EAAejmB,MAAM,KACpC,GAAIumB,EAAOppB,OAAS,EAChB,MAAM,IAAI1C,EAAa,eAAgB,iEAAiEwrB,KAE5G,MAAMxuB,EAAM8uB,EAAO,GAAGC,cAChB9tB,EAAQ0Z,EAAU3a,GACxB,IAAKiB,EACD,MAAM,IAAI+B,EAAa,eAAgB,qBAAuBhD,GAC9DiB,EAAMqb,SACNwS,EAAO,GAAK7tB,EAAMqb,OAAOzU,YAC7B,IAAIyU,EAAS5X,SAASoqB,EAAO,GAAI,IAEjCxS,GAAUoS,EAAQC,aAElB,IAAI9qB,GADuB,EAATyY,EAAa,GACPrb,EAAM4R,OAAS,EACvChP,GAAQqqB,EAAOG,eAAeC,GAAMnU,WACpC,IAAI6U,EAAS,EACTnrB,GAAQ,GAAa,EAAPA,EAAY,GAAM,IAChCmrB,EAAS,GACTnrB,GAAQ,GAAa,EAAPA,EAAY,GAAM,IAChCmrB,GAAU,GAEd,MAAMC,OAAqC,IAAlBhuB,EAAM2Z,QAAmC,GAAT0B,EAAcrb,EAAM2Z,aAAUnX,EAEjFP,EAAOjC,EAAMiC,KACbqZ,EAActb,EAAMsb,YAC1B,IAAI2S,EAAsB,CAAC,EAC3B,GAAIJ,EAAOppB,OAAS,GAAKopB,EAAO,GAAI,CAChC,MAAMK,EAAYL,EAAO,GAAGC,cAC5BG,EAAsB,CAAEhsB,KAAMrD,KAAKuvB,aAAaD,EAAWP,KAAe,CAAC,CAC/E,CACA,OAAO1uB,OAAO2X,OAAO,CAAE7X,MACnBsc,SACAzY,OACAorB,YAAWnU,WAAY7Z,EAAM6Z,WAAY5X,OACzC8rB,SACAzS,cAAa8S,WAAW,GAASH,EACzC,CACA,oBAAOI,CAAcC,GACjB,QAAuB,IAAZA,GAA2BA,EAAU,GAAKA,EAAU,GAC3D,MAAM,IAAIvsB,EAAa,eAAgB,6DAA6DusB,KAExG,MAcMC,EAdQ,CACV,EAAG,IACH,EAAG,KACH,EAAG,IACH,EAAG,KACH,EAAG,IACH,EAAG,IACH,EAAG,KACH,EAAG,IACH,EAAG,KACH,EAAG,IACH,GAAI,KACJ,GAAI,KAEgBD,GACxB,IAAKC,EACD,MAAM,IAAIxsB,EAAa,eAAgB,mCAAmCusB,KAE9E,OAAOC,CACX,CACA,sBAAOC,CAAgBC,EAAMC,EAAQ,GACjC,IAAIC,EACAvlB,EAAQ,EACRwlB,EAAU,EACd,GAA2B,MAAvBH,EAAKX,cAAuB,CAC5B,MAAMe,EAAe,IAAIC,EAAM,wBAAyB7B,EAAO8B,sBAAsB9e,aAErF,GADA0e,EAAQ,wBACkBnsB,MAAtBqsB,EAAazlB,OAA6C5G,MAAvBqsB,EAAaxlB,OAChD,MAAM,IAAItH,EAAa,iBAAkB,6BAC7CqH,EAAQylB,EAAazlB,MACrBwlB,GAAWC,EAAaxlB,OAAS,CACrC,MAEID,EAAQ6jB,EAAO+B,UAAUP,GAE7B,MAAO,CACH9qB,KAAM8qB,EACNxsB,KAAM0sB,EACNM,SAAU,IAAM7lB,EAAQslB,EACxBE,UAER,CAGA,gBAAOI,CAAUrrB,GACb,OAAO,EAAIA,EAAKiD,WAAWnC,MAC/B,CACA,wBAAOyqB,CAAkBC,GACrB,OAAOnE,EAAcmE,EACzB,CACA,sBAAOC,CAAgBzX,GACnB,OAAO4D,EAAY5D,EACvB,CACA,oBAAO0X,CAAc1X,GACjB,OAAO6T,EAAU7T,EACrB,CACA,mBAAO2X,CAAaC,GAChB,MAAMC,EAAUlY,EAAciY,GAC9B,IAAKC,EACD,MAAM,IAAIztB,EAAa,kBAAmB,4BAA4BwtB,MAE1E,IAAKC,EAAQ7X,IACT,MAAO,GAEX,MAIM8X,EAJiB,CACnBnsB,EAAG,CAAC,EAAG,GAAK,IAAK,EAAG,EAAG,IAAK,KAC5B,IAAK,CAAC,EAAG,KAAM,GAAK,EAAG,IAAK,GAAK,IAERksB,EAAQ7X,KAC/B+X,EAAW,GACjB,IAAK,IAAIroB,EAAI,EAAGA,EAAImoB,EAAQhY,MAAOnQ,EAAG,CAClC,MAAMzE,EAAO6sB,EAAMpoB,GACnBqoB,EAAS5b,KAAK,CAAE1C,KAAMoe,EAAQ7X,IAAK/U,QACvC,CACA,OAAO8sB,CACX,CACA,uBAAOC,GACH,OAAOrY,CACX,CACA,sBAAOsY,CAAgBL,GACnB,OAAOA,KAAQjY,CACnB,CAOA,uBAAOsW,CAAiBD,GACpB,MAAMkC,EAAiBxY,EAAgBsW,GAIvC,QAHuBnrB,IAAnBqtB,IACAlC,EAAWkC,QAEartB,IAAxB4U,EAAUuW,GACV,MAAM,IAAI5rB,EAAa,eAAgB,uCAAuC4rB,KAElF,OAAOA,CACX,CAEA,yBAAOmC,CAAmBnC,GACtB,OAAO,IAAIzpB,GAAWiD,MAAM8lB,EAAOW,iBAAiBD,GACxD,CAEA,uBAAOoC,CAAiBpC,GACpB,OAAOV,EAAO6C,mBAAmBnC,GAAU3tB,OAC/C,CAEA,sBAAOgwB,CAAgBrC,GACnBA,EAAWV,EAAOW,iBAAiBD,GACnC,MAAMsC,EAAQ7Y,EAAUuW,GACxB,QAAcnrB,IAAVytB,EACA,MAAM,IAAIluB,EAAa,mBAE3B,OAAOkuB,CACX,CACA,mBAAO9B,CAAa/c,EAAMuc,GACtB,IAAI1rB,EAAO,GACX,OAAQmP,GAEJ,IAAK,KACDnP,EAAO,uBACP,MACJ,IAAK,KACDA,EAAO,sBACP,MACJ,IAAK,KAGL,IAAK,KAiDL,IAAK,KACDA,EAAO,uBACP,MA/CJ,IAAK,KACDA,EAAO,0BACP,MACJ,IAAK,KACDA,EAAO,yBACP,MACJ,IAAK,KAGL,IAAK,KA8BL,IAAK,KACDA,EAAO,0BACP,MA5BJ,IAAK,KACDA,EAAO,iBACP,MACJ,IAAK,KACDA,EAAO,gBACP,MACJ,IAAK,KACDA,EAAO,iBACP,MACJ,IAAK,KACDA,EAAO,kBACP,MAEJ,IAAK,KACDA,EAAO,sBACP,MACJ,IAAK,KA4BL,IAAK,KACDA,EAAO,sBACP,MA1BJ,IAAK,KACDA,EAAO,uBACP,MACJ,IAAK,KACDA,EAAO,uBACP,MAIJ,IAAK,KACDA,EAAO,oBACP,MAIJ,IAAK,KACDA,EAAO,4BACP,MACJ,IAAK,OACDA,EAAO,6BACP,MACJ,IAAK,KACDA,EAAO,gBACP,MAIJ,IAAK,KACDA,EAAO,iCACP,MACJ,IAAK,IACL,IAAK,IACD,OAAQ0rB,GACJ,IAAK,MACD1rB,EAAO,6BACP,MACJ,IAAK,IACDA,EAAO,uBACP,MACJ,IAAK,IACDA,EAAO,sBACP,MACJ,QACIA,EAAO,uBAGf,MACJ,IAAK,IACL,IAAK,IACD,OAAQ0rB,GACJ,IAAK,MACD1rB,EAAO,sBACP,MACJ,IAAK,IACDA,EAAO,gBACP,MACJ,IAAK,IACDA,EAAO,eACP,MACJ,QACIA,EAAO,gBAGf,MACJ,IAAK,IACL,IAAK,IACD,OAAQ0rB,GACJ,IAAK,MACD1rB,EAAO,uBACP,MACJ,IAAK,IACDA,EAAO,iBACP,MACJ,IAAK,IACDA,EAAO,gBACP,MACJ,QACIA,EAAO,iBAGf,MACJ,IAAK,KACD,OAAQ0rB,GACJ,IAAK,MACD1rB,EAAO,6BACP,MACJ,IAAK,IACDA,EAAO,uBACP,MACJ,IAAK,IACDA,EAAO,sBACP,MACJ,QACIA,EAAO,kBAGf,MACJ,IAAK,KACD,OAAQ0rB,GACJ,IAAK,MACD1rB,EAAO,6BACP,MACJ,IAAK,IACDA,EAAO,uBACP,MACJ,IAAK,IACDA,EAAO,sBACP,MACJ,QACIA,EAAO,uBAGf,MACJ,IAAK,KACD,OAAQ0rB,GACJ,IAAK,MACD1rB,EAAO,4BACP,MACJ,IAAK,IAGL,IAAK,IACDA,EAAO,sBACP,MACJ,QACIA,EAAO,sBAGf,MACJ,IAAK,KACD,OAAQ0rB,GACJ,IAAK,MACD1rB,EAAO,gCACP,MACJ,IAAK,IACDA,EAAO,0BACP,MACJ,IAAK,IACDA,EAAO,yBACP,MACJ,QACIA,EAAO,0BAGf,MACJ,IAAK,KACD,OAAQ0rB,GACJ,IAAK,MACD1rB,EAAO,kCACP,MACJ,IAAK,IACDA,EAAO,4BACP,MACJ,IAAK,IACDA,EAAO,2BACP,MACJ,QACIA,EAAO,4BAGf,MACJ,IAAK,KACD,OAAQ0rB,GACJ,IAAK,MACD1rB,EAAO,8BACP,MACJ,IAAK,IACDA,EAAO,wBACP,MACJ,IAAK,IACDA,EAAO,uBACP,MACJ,QACIA,EAAO,wBAEf,MACJ,IAAK,KACD,OAAQ0rB,GACJ,IAAK,MACD1rB,EAAO,8BACP,MACJ,IAAK,IACDA,EAAO,wBACP,MACJ,IAAK,IACDA,EAAO,uBACP,MACJ,QACIA,EAAO,yBAIvB,OAAOA,CACX,CAGA,oBAAOiuB,CAAcvC,EAAUvc,EAAO,KAClCuc,EAAWV,EAAOW,iBAAiBD,GAEnC,IAAI1rB,EAAOkuB,EAAcxC,QACZnrB,IAATP,IACAA,EAAOkuB,EAAc,IAGzB,IAAIC,EAAsBnuB,EAAKmP,GAE/B,MAAM+c,EAAelB,EAAOkB,aAAa/c,EAAK0c,cAAeH,GACzC,IAAhBQ,IACAiC,EAAsBnxB,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGwZ,GAAsB,CAAEC,UAAWlC,EAAclsB,KAAMksB,KACjH,MAAMkC,EAAYD,EAAoBC,UAKtC,OAAOpxB,OAAO2X,OAAO3X,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAG3U,EAAKquB,QAAS,CAAErB,SAFpD,CAACP,EAAQzB,EAAOsD,sBAAwBzB,EAAMG,SAASoB,EAAW3B,KAES0B,EAChG,EAEJnD,EAAOuD,QAAS,EAChBvD,EAAOwD,eAAiB,GACxBxD,EAAOyD,WAAa,IACpBzD,EAAO0D,YAAc,GACrB1D,EAAO2D,qBAAuB,EAC9B3D,EAAO4D,wBAA0B,EACjC5D,EAAO9V,WAAaA,EAIpB8V,EAAOE,iBAAmB,GAC1BF,EAAOsD,oBAAsB,GAC7BtD,EAAO8B,qBAAuB,GAC9B9B,EAAO6D,qBAAuB,GAC9B7D,EAAO8D,oBAAsB,GAQ7B9D,EAAO+D,wBAA0B,EACjC/D,EAAOgE,cAAgB1V,EACvB0R,EAAOiE,uBAnkBmB,CACtB,EAAG,CACC7tB,EAAG,CAAC,GACJC,EAAG,CAAC,IAER,EAAG,CACCD,EAAG,CAAC,EAAG,IAEX,EAAG,CACCA,EAAG,CAAC,EAAG,EAAG,GACVC,EAAG,CAAC,EAAG,EAAG,GACV6tB,iBAAkB,CAAC,EAAG,EAAG,IAE7B,EAAG,CACC9tB,EAAG,CAAC,EAAG,EAAG,EAAG,GACbC,EAAG,CAAC,EAAG,EAAG,EAAG,GACb8tB,sBAAuB,CAAC,EAAG,EAAG,EAAG,IAErC,EAAG,CACC/tB,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,GAChBC,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,GAChB+tB,sBAAuB,CAAC,EAAG,EAAG,EAAG,EAAG,GACpCC,2BAA4B,CAAC,EAAG,EAAG,EAAG,EAAG,IAE7C,EAAG,CACCjuB,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GACnBC,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GACnBiuB,qBAAsB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GACtCC,0BAA2B,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,KAwiBnDvE,EAAOwE,QAAU,CAEbC,MAAOC,OAAOC,aAAa,MAE3BC,KAAMF,OAAOC,aAAa,MAE1BE,QAASH,OAAOC,aAAa,MAE7BG,SAAUJ,OAAOC,aAAa,MAE9B,eAAgBD,OAAOC,aAAa,KAEpCI,QAASL,OAAOC,aAAa,KAE7BK,OAAQN,OAAOC,aAAa,OAGhC3E,EAAOiF,WAh3BgB,CACnB1uB,EAAG,CAAEsM,KAAM,QACXjQ,EAAG,CAAEiQ,KAAM,QACXnI,EAAG,CAAEmI,KAAM,YACXqiB,EAAG,CAAEriB,KAAM,SACX9I,EAAG,CAAE8I,KAAM,SACXzQ,EAAG,CAAEyQ,KAAM,SACX9K,EAAG,CAAE8K,KAAM,WACXvN,EAAG,CAAEuN,KAAM,KACXsiB,GAAI,CAAEtiB,KAAM,WACZuiB,GAAI,CAAEviB,KAAM,YACZwiB,GAAI,CAAExiB,KAAM,WACZyiB,GAAI,CAAEziB,KAAM,oBACZ0iB,GAAI,CAAE1iB,KAAM,UACZ2iB,GAAI,CAAE3iB,KAAM,eACZ4iB,GAAI,CAAE5iB,KAAM,kBAm2BhBmd,EAAO0F,QAAU,CACbC,UAAW,EACXC,WAAY,EACZziB,WAAY+G,GAOhB,MAAMgZ,EAAgB,CAClB,MAAO,CACHG,OAAQ,CACJD,UAAW,GACXyC,MAAM,EACNC,MAAM,EACNC,mBAAoB/F,EAAO0D,YAC3BsC,qBAAsBhG,EAAO0D,YAC7BuC,2BAA4BjG,EAAO0D,YACnCwC,6BAA8BlG,EAAO0D,YACrCyC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBzzB,EAAG,CAECwwB,UAAW,kBACXlV,MAAM,EACNoY,SAAU,MACVH,WAAY,IAEhBpsB,EAAG,CAGCioB,SAAU,IAAMhC,EAAO6D,qBACvByC,SAAU,QAGlB,EAAG,CACCjD,OAAQ,CACJD,UAAW,GACXyC,MAAM,EACNC,MAAM,EACNC,mBAAoB/F,EAAO0D,YAC3BsC,qBAAsBhG,EAAO0D,YAC7BuC,2BAA4BjG,EAAO0D,YACnCwC,6BAA8BlG,EAAO0D,YACrCyC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBzzB,EAAG,CAECwwB,UAAW,YACXmD,iBAAkB,qBAClBrY,MAAM,EACNoY,SAAU,MACVH,WAAY,IAEhBpsB,EAAG,CAGCioB,SAAU,IAAMhC,EAAO6D,qBACvByC,SAAU,QAGlB,EAAG,CACCjD,OAAQ,CACJD,UAAW,GACXyC,MAAM,EACNC,MAAM,EACNC,kBAAmB,EACnBC,oBAAqB,EACrBC,0BAA2B,EAC3BC,4BAA6B,EAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBzzB,EAAG,CAECwwB,UAAW,WACXmD,iBAAkB,oBAClBV,MAAM,EACN3X,MAAM,EACNoY,SAAU,MACVH,YAAa,IAEjBpsB,EAAG,CAGCioB,SAAU,IAAMhC,EAAO6D,qBACvByC,SAAU,QAGlB,EAAG,CACCjD,OAAQ,CACJD,UAAW,GACXyC,MAAM,EACNC,MAAM,EACNC,kBAAmB,EACnBC,oBAAqB,EACrBC,0BAA2B,EAC3BC,4BAA6B,EAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBzzB,EAAG,CAECwwB,UAAW,cACXyC,MAAM,EACN3X,MAAM,EACNoY,SAAU,MACVH,YAAa,GACbC,WAAY,IACZC,WAAY,KAEhBtsB,EAAG,CAGCioB,SAAU,IAAMhC,EAAO6D,qBACvByC,SAAU,QAGlB,EAAG,CACCjD,OAAQ,CACJD,UAAW,GACXyC,MAAM,EACNC,MAAM,EACNU,WAAY,EACZC,oBAAqB,EACrBC,iBAAkB,YAClBC,mBAAoB,cACpBZ,kBAAmB,EACnBC,oBAAqB,EACrBC,0BAA2B,EAC3BC,4BAA6B,EAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBzzB,EAAG,CAECwwB,UAAW,UACXyC,MAAM,EACNC,MAAM,EACN5X,MAAM,EACNoY,SAAU,MACVH,YAAa,GACbC,WAAY,EACZC,WAAY,GAEhBtsB,EAAG,CAGCioB,SAAU,IAAMhC,EAAO6D,qBACvByC,SAAU,QAGlB,GAAI,CACAjD,OAAQ,CACJD,UAAW,GACXoD,WAAY,EACZC,oBAAqB,EACrBZ,MAAM,EACNC,MAAM,EACNY,iBAAkB,aAClBC,mBAAoB,eACpBZ,kBAAmB,EACnBC,oBAAqB,EACrBC,0BAA2B,EAC3BC,4BAA6B,EAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBzzB,EAAG,CAECwwB,UAAW,WACXyC,MAAM,EACNC,MAAM,EACN5X,MAAM,EACNoY,SAAU,MACVH,YAAa,GACbC,WAAY,EACZC,WAAY,GAEhBtsB,EAAG,CAGCioB,SAAU,IAAMhC,EAAO6D,qBACvByC,SAAU,QAGlB,GAAI,CACAjD,OAAQ,CACJD,UAAW,GACXoD,WAAY,EACZC,oBAAqB,IACrBZ,MAAM,EACNC,MAAM,EACNY,iBAAkB,aAClBC,mBAAoB,eACpBZ,kBAAmB,EACnBC,oBAAqB,EACrBC,0BAA2B,EAC3BC,4BAA6B,EAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBzzB,EAAG,CAECwwB,UAAW,WACXyC,MAAM,EACNC,MAAM,EACN5X,MAAM,EACNoY,SAAU,MACVH,YAAa,IACbC,WAAY,EACZC,WAAY,GAEhBtsB,EAAG,CAGCioB,SAAU,IAAMhC,EAAO6D,qBACvByC,SAAU,QAGlB,GAAI,CACAjD,OAAQ,CACJD,UAAW,GACXoD,WAAY,EACZC,oBAAqB,GACrBZ,MAAM,EACNC,MAAM,EACNY,iBAAkB,aAClBC,mBAAoB,eACpBZ,kBAAmB,GACnBC,oBAAqB,GACrBC,0BAA2B,GAC3BC,4BAA6B,GAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBzzB,EAAG,CAECwwB,UAAW,WACXyC,MAAM,EACNC,MAAM,EACN5X,MAAM,EACNoY,SAAU,MACVH,YAAa,IACbC,WAAY,EACZC,WAAY,GAEhBtsB,EAAG,CAGCioB,SAAU,IAAMhC,EAAO6D,qBACvByC,SAAU,QAGlB,IAAK,CACDjD,OAAQ,CACJD,UAAW,GACXoD,WAAY,EACZC,oBAAqB,KACrBZ,MAAM,EACNC,MAAM,EACNY,iBAAkB,cAClBC,mBAAoB,gBACpBZ,kBAAmB,GACnBC,oBAAqB,GACrBC,0BAA2B,GAC3BC,4BAA6B,GAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBzzB,EAAG,CAECwwB,UAAW,YACXyC,MAAM,EACNC,MAAM,EACN5X,MAAM,EACNoY,SAAU,MACVH,YAAa,IACbC,WAAY,EACZC,WAAY,GAEhBtsB,EAAG,CAGCioB,SAAU,IAAMhC,EAAO6D,qBACvByC,SAAU,SClxCf,IAAIM,ECHAC,GDIX,SAAWD,GACPA,EAAYA,EAAkB,KAAI,GAAK,OACvCA,EAAYA,EAAkB,KAAI,GAAK,OACvCA,EAAYA,EAAuB,UAAI,GAAK,YAC5CA,EAAYA,EAAoB,OAAI,GAAK,QAC5C,CALD,CAKGA,IAAgBA,EAAc,CAAC,IAClC,MAAME,EACF,WAAA1zB,CAAY2zB,EAAW/xB,EAAM/B,GACzBtB,KAAKq1B,OAAS,EACdr1B,KAAK+Q,QAAUmf,EAAMoF,YAAYF,EAAW/xB,EAAM/B,GAClDtB,KAAKu1B,KAAOrF,EAAMsF,sBAAsBx1B,KAAK+Q,QAAQ0kB,QAASz1B,KAAK+Q,QAAQ+e,MAAO9vB,KAAK+Q,QAAQ2kB,QAAS11B,KAAK+Q,QAAQ4kB,SACjHr0B,IACAtB,KAAKq1B,MAAQnF,EAAM0F,iBAAiB51B,KAAK+Q,QAAQ/B,KAAM1N,EAAU+B,EAAM,SAAU,GAEzF,EAqBJ,MAAMwyB,EACF,WAAAp0B,CAAYg0B,EAASK,EAASC,EAASjG,GACnC9vB,KAAKy1B,QAAUA,EACfz1B,KAAK81B,QAAUA,EACf91B,KAAK+1B,QAAUA,EACf/1B,KAAK8vB,MAAQA,EACb9vB,KAAKyI,EAAI,EACTzI,KAAKg2B,UAAY,EAEjBh2B,KAAKg2B,UAAY/wB,KAAK8G,IAAI,GAAIsiB,EAAO4D,wBACzC,CACA,IAAA7kB,GACI,OAAOpN,KAAKyI,GAAKzI,KAAKy1B,QAAQ5vB,MAClC,CACA,IAAAoH,GACI,OAAOhI,KAAKgxB,MAAOj2B,KAAKy1B,QAAQz1B,KAAKyI,KAAOzI,KAAKg2B,UAAah2B,KAAKg2B,UACvE,CACA,KAAAE,GACI,OAAOjxB,KAAKgxB,OAAOj2B,KAAK81B,QAAU91B,KAAKy1B,QAAQz1B,KAAKyI,KAAOzI,KAAK8vB,OAAS9vB,KAAKg2B,WAAah2B,KAAKg2B,SACpG,CACA,KAAAG,GACI,OAAOlxB,KAAKgxB,OAAOj2B,KAAK+1B,QAAU/1B,KAAKy1B,QAAQz1B,KAAKyI,KAAOzI,KAAK8vB,OAAS9vB,KAAKg2B,WAAah2B,KAAKg2B,SACpG,CACA,YAAOztB,CAAMC,GACT,MAAM2E,EAAS,GACTipB,EAAQ5tB,EAAIE,MAAM,KACxB,IAAID,EAAI,EACR,KAAOA,EAAI2tB,EAAMvwB,QACb,OAAQuwB,EAAM3tB,MACV,IAAK,IACD0E,EAAO+H,KAAK+f,EAAYoB,KAAMxxB,SAASuxB,EAAM3tB,MAAO5D,SAASuxB,EAAM3tB,OACnE,MACJ,IAAK,IACD0E,EAAO+H,KAAK+f,EAAYqB,KAAMzxB,SAASuxB,EAAM3tB,MAAO5D,SAASuxB,EAAM3tB,OACnE,MACJ,IAAK,IACD0E,EAAO+H,KAAK+f,EAAYsB,UAAW1xB,SAASuxB,EAAM3tB,MAAO5D,SAASuxB,EAAM3tB,MAAO5D,SAASuxB,EAAM3tB,MAAO5D,SAASuxB,EAAM3tB,OACpH,MACJ,IAAK,IACD0E,EAAO+H,KAAK+f,EAAYuB,OAAQ3xB,SAASuxB,EAAM3tB,MAAO5D,SAASuxB,EAAM3tB,MAAO5D,SAASuxB,EAAM3tB,MAAO5D,SAASuxB,EAAM3tB,MAAO5D,SAASuxB,EAAM3tB,MAAO5D,SAASuxB,EAAM3tB,OAIzK,OAAO0E,CACX,EAEJ,MAAM+iB,UAAczb,EAGhB,mBAAW/S,GACP,OAAOG,EAASquB,KACpB,CAWA,uBAAO0F,CAAiB5mB,EAAM1N,EAAU+B,EAAMlD,EAAKyR,GAC/C,IAAIxQ,EAAQ4N,EAAK2C,aAAa,UAAUrQ,KAAY+B,KAAQlD,SAAOyD,GAKnE,YAJcA,IAAVxC,IAEAA,EAAQ4N,EAAK2C,aAAa,UAAUrQ,KAAYnB,IAAOyR,IAEpDxQ,CACX,CACA,kBAAOq1B,CAAYrB,EAAW/xB,GAE1B,IAAI0sB,EACA/gB,EAFJtL,EAAQ0xB,EAAW,eAAgB,+BAGnC,IAAK,IAAI3sB,EAAI,EAAGA,EAAI2sB,EAAUvvB,OAAQ4C,IAGlC,GAFAuG,EAAOomB,EAAU3sB,GACjBsnB,EAAQ/gB,EAAKyC,YAAYpO,GACrB0sB,EACA,MAAO,CAAEA,QAAO/gB,QAExB,MAAM,IAAI7L,EAAa,WAAY,SAASE,4BAChD,CACA,kBAAOiyB,CAAYF,EAAW/xB,EAAM/B,GAChC,MAAM,MAAEyuB,EAAK,KAAE/gB,GAASkhB,EAAMuG,YAAYrB,EAAW/xB,GACrD,IAAK0sB,EAAM3vB,EACP,MAAM,IAAI+C,EAAa,WAAY,SAASE,6BAChD,IAAIqyB,EAAU,EACVC,EAAU,EACV7F,EAAQ,EACRxuB,GAAY0N,IACZ0mB,EAAUxF,EAAM0F,iBAAiB5mB,EAAM1N,EAAU+B,EAAM,SAAU,GACjEsyB,EAAUzF,EAAM0F,iBAAiB5mB,EAAM1N,EAAU+B,EAAM,SAAU,GACjEysB,EAAQI,EAAM0F,iBAAiB5mB,EAAM1N,EAAU+B,EAAM,QAAS,IAElE,MAAMqzB,EAAQ3G,EAAM2G,MACdC,EAAQ5G,EAAM4G,MACdC,EAAK7G,EAAM6G,GAIjB,OAHK7G,EAAM8G,iBACP9G,EAAM8G,eAAiBhB,EAAattB,MAAMwnB,EAAM3vB,IAE7C,CACHs2B,QACAC,QACAjB,UACAC,UACA7F,QACA8G,KACAnB,QAAS1F,EAAM8G,eACf7nB,OACAxE,MAAOmsB,EAAQD,EACfjsB,OAAQmsB,EAEhB,CAYA,kBAAOE,CAAYC,EAAKC,EAAOC,EAAO5B,EAAOhyB,EAAMwrB,GAC/C,IAAIhhB,EACJ,MAAMiD,EAAOof,EAAMgH,MAAMC,OAAO9zB,EAAMwrB,aAAyC,EAASA,EAAQvtB,UAC1FyP,EAAUD,EAAKC,SACF,GAAfD,EAAKukB,QACLA,EAAQvkB,EAAKukB,OAEjB,MAAM+B,EAAyF,QAA1EvpB,EAAKghB,aAAyC,EAASA,EAAQiB,aAA0B,IAAPjiB,EAAgBA,EAAK,EACtHiiB,EAAkB,GAARuF,GAAgD,IAA/BtkB,EAAQ/B,KAAKuC,iBAA4BR,EAAQ+e,MAAQsH,EAE1F,OADAlH,EAAMmH,cAAcN,EAAKhmB,EAAQ0kB,QAAS3F,EAAOkH,EAAQjmB,EAAQ2kB,QAAU0B,EAAaH,EAAQlmB,EAAQ4kB,QAAUyB,GAC3GrmB,CACX,CACA,oBAAOsmB,CAAcN,EAAKtB,EAAS3F,EAAOkH,EAAOC,GAC7C,MAAMK,EAAK,IAAIzB,EAAaJ,EAASuB,EAAOC,EAAOnH,GAEnD,IAAInsB,EAAGkF,EACP,IAFAkuB,EAAIQ,aAEID,EAAGlqB,QACP,OAAQkqB,EAAGrqB,QACP,KAAKgoB,EAAYoB,KACbU,EAAIS,OAAOF,EAAGpB,QAASoB,EAAGnB,SAC1B,MACJ,KAAKlB,EAAYqB,KACbS,EAAIU,OAAOH,EAAGpB,QAASoB,EAAGnB,SAC1B,MACJ,KAAKlB,EAAYsB,UACb5yB,EAAI2zB,EAAGpB,QACPrtB,EAAIyuB,EAAGnB,QACPY,EAAIW,iBAAiBJ,EAAGpB,QAASoB,EAAGnB,QAASxyB,EAAGkF,GAChD,MACJ,KAAKosB,EAAYuB,OACb7yB,EAAI2zB,EAAGpB,QACPrtB,EAAIyuB,EAAGnB,QACPY,EAAIY,cAAcL,EAAGpB,QAASoB,EAAGnB,QAASmB,EAAGpB,QAASoB,EAAGnB,QAASxyB,EAAGkF,GAIjFkuB,EAAIa,MACR,CACA,4BAAOpC,CAAsBC,EAAS3F,EAAOkH,EAAOC,GAChD,MAAMK,EAAK,IAAIzB,EAAaJ,EAASuB,EAAOC,EAAOnH,GAC7C+H,EAAW,IAAI7tB,EAErB,IAEIrG,EAAGkF,EAFHivB,EAAOd,EACPe,EAAOd,EAEX,MAAQK,EAAGlqB,QACP,OAAQkqB,EAAGrqB,QACP,KAAKgoB,EAAYoB,KAEbyB,EAAOR,EAAGpB,QACV6B,EAAOT,EAAGnB,QACV,MACJ,KAAKlB,EAAYqB,KACbuB,EAASntB,SAASotB,EAAMC,GACxBD,EAAOR,EAAGpB,QACV6B,EAAOT,EAAGnB,QACV0B,EAASntB,SAASotB,EAAMC,GACxB,MACJ,KAAK9C,EAAYsB,UACb5yB,EAAI2zB,EAAGpB,QACPrtB,EAAIyuB,EAAGnB,QACP0B,EAAShtB,kBAAkBitB,EAAMC,EAAMT,EAAGpB,QAASoB,EAAGnB,QAASxyB,EAAGkF,GAClEivB,EAAOn0B,EACPo0B,EAAOlvB,EACP,MACJ,KAAKosB,EAAYuB,OACb7yB,EAAI2zB,EAAGpB,QACPrtB,EAAIyuB,EAAGnB,QACP0B,EAASrsB,eAAessB,EAAMC,EAAMT,EAAGpB,QAASoB,EAAGnB,QAASmB,EAAGpB,QAASoB,EAAGnB,QAASxyB,EAAGkF,GACvFivB,EAAOn0B,EACPo0B,EAAOlvB,EAInB,OAAO,IAAIF,EAAYkvB,EAASvtB,QAASutB,EAASttB,QAASstB,EAASrtB,QAASqtB,EAASptB,SAC1F,CACA,eAAO4lB,CAAShtB,EAAMgyB,EAAO/zB,GACzB,MAAMwP,EAAOof,EAAMgH,MAAMC,OAAO9zB,EAAM/B,IACnB,GAAfwP,EAAKukB,QACLA,EAAQvkB,EAAKukB,OAEjB,MAAMvF,EAAiB,GAARuF,GAAmD,IAApCvkB,EAAKC,QAAQ/B,KAAKuC,iBAChD,OAAOT,EAAKykB,KAAKrsB,OAAS4mB,CAC9B,CAMA,WAAAruB,CAAY4B,EAAMgyB,EAAOxG,GACrBtrB,QAGAvD,KAAKu1B,KAAO,IAAI5sB,EAAY,EAAG,EAAG,EAAG,GACrC3I,KAAKg4B,UAAY,GACjBh4B,KAAKi4B,UAAY,GACjBj4B,KAAK6uB,QAAU,CAAC,EAChB7uB,KAAK8vB,MAAQ,EACb9vB,KAAKqD,KAAOA,EACZrD,KAAKq1B,MAAQA,EACbr1B,KAAKk4B,YAAc,CAAEv0B,EAAG,EAAGkF,EAAG,GAC9B7I,KAAK01B,QAAU,EACf11B,KAAK21B,QAAU,EACX9G,EACA7uB,KAAKm4B,WAAWtJ,GAGhB7uB,KAAKo4B,OAEb,CAEA,IAAA5hB,IAAQzS,GAER,CACA,OAAAs0B,GACI,OAAOr4B,KAAKqD,IAChB,CAEA,UAAA80B,CAAWtJ,GACP7uB,KAAK6uB,QAAUxuB,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGhY,KAAK6uB,SAAUA,GAC9D7uB,KAAKo4B,OACT,CACA,QAAAE,CAASjD,GAEL,OADAr1B,KAAKq1B,MAAQA,EACNr1B,IACX,CACA,QAAAu4B,CAASC,GAEL,OADAx4B,KAAKw4B,MAAQA,EACNx4B,IACX,CACA,SAAAy4B,GACI,OAAOz4B,KAAK01B,OAChB,CACA,SAAAgD,CAAUhD,GAEN,OADA11B,KAAK01B,QAAUA,EACR11B,IACX,CACA,SAAA24B,GACI,OAAO34B,KAAK21B,OAChB,CACA,SAAAiD,CAAUjD,GAEN,OADA31B,KAAK21B,QAAUA,EACR31B,IACX,CACA,KAAAo4B,GACI,MAAMtnB,EAAOof,EAAMgH,MAAMC,OAAOn3B,KAAKqD,KAAMrD,KAAK6uB,QAAQvtB,UACxDtB,KAAK+Q,QAAUD,EAAKC,SAED,GAAfD,EAAKukB,QACLr1B,KAAKq1B,MAAQvkB,EAAKukB,OAEtBr1B,KAAK8vB,MAAsB,GAAb9vB,KAAKq1B,OAAmD,IAApCr1B,KAAK+Q,QAAQ/B,KAAKuC,iBACpDvR,KAAKu1B,KAAO,IAAI5sB,EAAYmI,EAAKykB,KAAKvsB,OAAShJ,KAAK8vB,MAAOhf,EAAKykB,KAAKtsB,OAASjJ,KAAK8vB,MAAOhf,EAAKykB,KAAKrsB,OAASlJ,KAAK8vB,MAAOhf,EAAKykB,KAAKpsB,OAASnJ,KAAK8vB,MACrJ,CACA,YAAA+I,GACI,OAAOn1B,EAAQ1D,KAAK+Q,QAAS,WAAY,SAAS/Q,KAAKqD,2BAC3D,CACA,UAAAgO,GACI,MAAMN,EAAU/Q,KAAK64B,eACfC,EAAe/nB,EAAQ+e,MAC7B,MAAO,CACH4G,MAAO3lB,EAAQ2lB,MAAQ12B,KAAK8vB,MAAQgJ,EACpCnC,MAAO5lB,EAAQ4lB,MAAQ32B,KAAK8vB,MAAQgJ,EACpCtuB,MAAOxK,KAAKu1B,KAAKrsB,OACjBuB,OAAQzK,KAAKu1B,KAAKpsB,OAClB2mB,MAAO9vB,KAAK8vB,MAAQgJ,EACpBpD,QAAS3kB,EAAQ2kB,QACjBC,QAAS5kB,EAAQ4kB,QACjBF,QAAS1kB,EAAQ0kB,QACjBzmB,KAAM+B,EAAQ/B,KACd4nB,GAAI7lB,EAAQ6lB,GAEpB,CACA,UAAAmC,CAAWp1B,GACP,MAAM,KAAE4xB,GAASv1B,KAEXg5B,GAAUr1B,EADAsB,KAAK8C,IAAIwtB,EAAKvsB,OAASusB,EAAKrsB,SACbqsB,EAAKrsB,OACpClJ,KAAKk4B,YAAYv0B,GAAKq1B,CAC1B,CACA,UAAAC,CAAWpwB,GACP,MAAM,KAAE0sB,GAASv1B,KAEXk5B,GAAUrwB,EADA5D,KAAK8C,IAAIwtB,EAAKtsB,OAASssB,EAAKpsB,SACbosB,EAAKpsB,OACpCnJ,KAAKk4B,YAAYrvB,GAAKqwB,CAC1B,CACA,SAAAC,CAAUx1B,EAAGkF,GACT7I,KAAK+4B,WAAWp1B,GAChB3D,KAAKi5B,WAAWpwB,EACpB,CACA,MAAAuwB,CAAOrC,EAAKpzB,EAAGkF,GACX,MAAMkI,EAAU/Q,KAAK64B,eACfpD,EAAU1kB,EAAQ0kB,QAClB3F,EAAQ9vB,KAAK8vB,MAAQ/e,EAAQ+e,MACnC9vB,KAAK+W,cACL/W,KAAKuV,WAAWwhB,GAChB,MAAMsC,EAAO11B,EAAI3D,KAAKk4B,YAAYv0B,EAAIoN,EAAQ2kB,QACxC4D,EAAOzwB,EAAI7I,KAAKk4B,YAAYrvB,EAAIkI,EAAQ4kB,QAC9CzF,EAAMmH,cAAcN,EAAKtB,EAAS3F,EAAOuJ,EAAMC,GAC/Ct5B,KAAKoW,aAAa2gB,EACtB,CACA,UAAAwC,GACI,OAAO71B,EAAQ1D,KAAKw4B,MAAO,UAAW,iCAC1C,CACA,aAAAgB,CAAc71B,GACV,MAAM6R,EAAUxV,KAAKuW,eACfxF,EAAU/Q,KAAK64B,eACfL,EAAQx4B,KAAKu5B,aACb9D,EAAU1kB,EAAQ0kB,QAClB3F,EAAQ9vB,KAAK8vB,MAAQ/e,EAAQ+e,MACnC9vB,KAAK+W,cACL/W,KAAKuV,aACL,MAAM8jB,EAAO11B,EAAI3D,KAAK01B,QAAU3kB,EAAQ2kB,QAClC4D,EAAOd,EAAMiB,gBAAkBz5B,KAAK21B,QAAU5kB,EAAQ4kB,QAC5DzF,EAAMmH,cAAc7hB,EAASigB,EAAS3F,EAAOuJ,EAAMC,GACnDt5B,KAAKoW,cACT,EAEJ8Z,EAAMgH,MAAQ,IAxWd,MACI,WAAAz1B,GACIzB,KAAKk3B,MAAQ,IAAIwC,GACrB,CACA,MAAAvC,CAAO9zB,EAAM/B,GACT,IAAIq4B,EAAU35B,KAAKk3B,MAAM12B,IAAI0vB,EAAM0J,wBACnBh2B,IAAZ+1B,IACAA,EAAU,CAAC,EACX35B,KAAKk3B,MAAMjxB,IAAIiqB,EAAM0J,kBAAmBD,IAE5C,MAAMx5B,EAAMmB,EAAW,GAAG+B,KAAQ/B,IAAa+B,EAC/C,IAAIw2B,EAAQF,EAAQx5B,GAKpB,YAJcyD,IAAVi2B,IACAA,EAAQ,IAAI1E,EAAgBjF,EAAM3B,iBAAkBlrB,EAAM/B,GAC1Dq4B,EAAQx5B,GAAO05B,GAEZA,CACX,GA2VJ3J,EAAM0J,kBAAoB,GAG1B1J,EAAM3B,iBAAmB,GClYzB,SAAW2G,GACPA,EAAiBA,EAAyB,OAAI,GAAK,SACnDA,EAAiBA,EAAuB,KAAI,GAAK,OACjDA,EAAiBA,EAAwB,MAAI,GAAK,QAClDA,EAAiBA,EAAwB,MAAI,GAAK,QAClDA,EAAiBA,EAAwB,MAAI,GAAK,OACrD,CAND,CAMGA,IAAqBA,EAAmB,CAAC,IAerC,MAAM4E,WAAiBrlB,EAK1B,mBAAW/S,GACP,OAAOG,EAASi4B,QACpB,CAEA,mBAAWC,GACP,OAAO7E,CACX,CACA,yBAAW8E,GACP,MAAO,CACHC,OAAQ/E,EAAiBgF,OACzBC,MAAOjF,EAAiBkF,MACxBC,MAAOnF,EAAiBoF,MACxBC,KAAMrF,EAAiBsF,KACvBC,MAAOvF,EAAiBwF,MAEhC,CACA,WAAAj5B,GACI8B,QACAvD,KAAKwK,MAAQ,EAEbxK,KAAK26B,UAAY,EACjB36B,KAAK20B,SAAWmF,GAASC,SAASS,KAClCx6B,KAAK01B,QAAU,EACf11B,KAAK21B,QAAU,EACf31B,KAAK46B,wBAA0B,CACnC,CAEA,KAAAxC,GAEA,CAEA,QAAA/H,GACI,OAAOrwB,KAAKwK,KAChB,CAEA,QAAAqwB,CAASrwB,GAEL,OADAxK,KAAKwK,MAAQA,EACNxK,IACX,CAEA,OAAA86B,GACI,OAAOp3B,EAAQ1D,KAAK+6B,KAAM,SAAU,wBACxC,CAKA,iBAAAC,GACI,MAAM15B,EAAWtB,KAAK8U,cAEtB,OADApR,EAAQ1D,KAAKgT,MAAO,UAAW,cAAc1R,uBACtCoC,EAAQ1D,KAAK+6B,KAAM,SAAU,cAAcz5B,oBACtD,CAKA,OAAA25B,CAAQF,GAEJ,OADA/6B,KAAK+6B,KAAOA,EACL/6B,IACX,CAEA,QAAAk7B,GACI,OAAOl7B,KAAKgT,KAChB,CAEA,UAAAmoB,GACI,OAAOz3B,EAAQ1D,KAAKgT,MAAO,UAAW,iCAC1C,CAEA,QAAAooB,CAASpoB,GAEL,OADAhT,KAAKgT,MAAQA,EACNhT,IACX,CAEA,kBAAAq7B,GACI,OAAOr7B,KAAKs7B,eAChB,CAEA,oBAAAC,GACI,OAAO73B,EAAQ1D,KAAKs7B,gBAAiB,oBAAqB,4BAC9D,CAEA,kBAAAE,CAAmBxvB,GAEf,OADAhM,KAAKs7B,gBAAkBtvB,EAChBhM,IACX,CAEA,WAAAy7B,GACI,OAAOz7B,KAAK20B,QAChB,CAKA,WAAA+G,CAAY/G,GAGR,OAFA30B,KAAK20B,SAA+B,iBAAbA,EAAwBmF,GAASE,eAAerF,GAAYA,EACnF30B,KAAKo4B,QACEp4B,IACX,CAEA,WAAA27B,CAAY33B,GAER,OADAhE,KAAK26B,UAAY32B,EACVhE,IACX,CAEA,SAAA44B,CAAU/vB,GAEN,OADA7I,KAAK21B,QAAU9sB,EACR7I,IACX,CAEA,0BAAA47B,CAA2Bj4B,GACvB3D,KAAK46B,wBAA0Bj3B,CACnC,CAEA,0BAAAk4B,GACI,OAAO77B,KAAK46B,uBAChB,CAKA,SAAAlC,CAAU/0B,GAQN,OAPA3D,KAAK01B,QAAU,EACX11B,KAAK20B,WAAamF,GAASC,SAASS,KACpCx6B,KAAK01B,SAAW/xB,EAGhB3D,KAAK01B,SAAW/xB,EAEb3D,IACX,CAEA,SAAAy4B,GACI,OAAOz4B,KAAK01B,OAChB,CAEA,IAAAlf,GAEI,MADAxW,KAAKuW,eACC,IAAIpT,EAAa,iBAAkB,4CAC7C,CAEA,qBAAA24B,CAAsBC,EAAUhB,GAE5B,MAAMiB,EAAcjB,EAAKkB,iBACnBlrB,EAAUirB,EAAY3qB,aACtBmnB,EAAQuC,EAAKmB,WACbC,EAAiBH,EAAYhzB,OAAS+H,EAAQqrB,UAAYrrB,EAAQsrB,WAAar8B,KAAK67B,6BAC1FE,EAAS1mB,SAASinB,IACd,MAAMC,EAAiBD,EAAQL,iBAC3BzD,GACA8D,EAAQ/D,SAASC,GACrB+D,EAAeC,WAAWL,EAAe,GAEjD,ECrLG,MAAMM,GAET,oBAAWC,GACP,OAAO18B,KAAK28B,gBAAgB92B,MAChC,CAEA,gBAAW+2B,GACP,MAAO,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC1C,CAEA,sBAAWC,GACP,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC9B,CAEA,uBAAWC,GACP,MAAO,CACH9wB,EAAG,EACH5F,EAAG,EACHzF,EAAG,EACH2H,EAAG,EACH7H,EAAG,EACHgE,EAAG,EACHC,EAAG,EAEX,CAEA,0BAAWi4B,GACP,MAAO,CAAC,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IACxE,CAEA,6BAAWI,GACP,MAAO,CAAC,SAAU,KAAM,KAAM,KAAM,KAAM,KAAM,OAAQ,KAAM,KAAM,KAAM,KAAM,KAAM,SAC1F,CAEA,+BAAWC,GACP,MAAO,CACHC,OAAQ,CAAElC,KAAM,EAAG9f,WAAY,GAC/BiiB,GAAI,CAAEnC,KAAM,EAAG9f,YAAa,GAC5BkiB,GAAI,CAAEpC,KAAM,EAAG9f,WAAY,GAC3BmiB,GAAI,CAAErC,KAAM,EAAG9f,YAAa,GAC5BoiB,GAAI,CAAEtC,KAAM,EAAG9f,WAAY,GAC3BqiB,GAAI,CAAEvC,KAAM,EAAG9f,WAAY,GAC3BsiB,KAAM,CAAExC,KAAM,EAAG9f,YAAa,GAC9BuiB,GAAI,CAAEzC,KAAM,EAAG9f,WAAY,GAC3BwiB,GAAI,CAAE1C,KAAM,EAAG9f,YAAa,GAC5ByiB,GAAI,CAAE3C,KAAM,EAAG9f,WAAY,GAC3B0iB,GAAI,CAAE5C,KAAM,EAAG9f,YAAa,GAC5B2iB,GAAI,CAAE7C,KAAM,EAAG9f,WAAY,GAC3BwB,OAAQ,CAAEse,KAAM,EAAG9f,WAAY,GAEvC,CAEA,oBAAW4iB,GACP,MAAO,CACH13B,EAAG,EACH82B,OAAQ,EACRC,GAAI,EACJY,GAAI,EACJC,KAAM,EACNC,EAAG,EACHC,EAAG,EACH,EAAG,EACHd,GAAI,EACJe,KAAM,EACNC,EAAG,EACHC,EAAG,EACHhB,GAAI,EACJiB,GAAI,EACJC,KAAM,EACNjB,GAAI,EACJ,EAAG,EACHkB,KAAM,EACN,EAAG,EACHjB,GAAI,EACJ,KAAM,EACNkB,GAAI,EACJC,KAAM,EACNlB,KAAM,EACN,EAAG,EACHC,GAAI,EACJ,KAAM,EACNkB,GAAI,EACJC,KAAM,EACN,EAAG,EACHjB,GAAI,EACJkB,KAAM,EACNjB,GAAI,GACJkB,GAAI,GACJC,KAAM,GACNC,KAAM,GACNnB,GAAI,GACJoB,KAAM,GACN,EAAG,GACHviB,OAAQ,GAEhB,CAEA,iBAAWwiB,GACP,MAAO,CACHC,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC1BC,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC1BC,OAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC3BC,OAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC3BC,SAAU,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC7BC,OAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC3BC,WAAY,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC/BC,QAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC5BC,QAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAEpC,CAEA,qBAAWC,GACP,MAAO,CACHC,EAAGnD,GAAMwC,OAAOC,MAChB3L,EAAGkJ,GAAMwC,OAAOE,MAExB,CAEA,sBAAWxiB,GACP,MAAO,CAAC,KAAM,IAAK,IAAK,IAAK,KACjC,CAEA,qBAAWkjB,GACP,MAAO,CACH7zB,EAAG,CAAE8zB,WAAY,EAAG/kB,QAAS,GAC7BglB,GAAI,CAAED,WAAY,EAAG/kB,QAAS,GAC9B,KAAM,CAAE+kB,WAAY,EAAG/kB,QAAS,GAChC,MAAO,CAAE+kB,WAAY,EAAG/kB,QAAS,GACjCilB,GAAI,CAAEF,WAAY,EAAG/kB,QAAS,IAC9BklB,IAAK,CAAEH,WAAY,EAAG/kB,QAAS,IAC/B3U,EAAG,CAAE05B,WAAY,EAAG/kB,QAAS,GAC7BmlB,GAAI,CAAEJ,WAAY,EAAG/kB,QAAS,GAC9B,KAAM,CAAE+kB,WAAY,EAAG/kB,QAAS,GAChC,MAAO,CAAE+kB,WAAY,EAAG/kB,QAAS,GACjC+B,GAAI,CAAEgjB,WAAY,EAAG/kB,QAAS,GAC9BolB,IAAK,CAAEL,WAAY,EAAG/kB,QAAS,GAC/Bpa,EAAG,CAAEm/B,WAAY,EAAG/kB,QAAS,GAC7BqlB,GAAI,CAAEN,WAAY,EAAG/kB,QAAS,GAC9B,KAAM,CAAE+kB,WAAY,EAAG/kB,QAAS,GAChC,MAAO,CAAE+kB,WAAY,EAAG/kB,QAAS,GACjCslB,GAAI,CAAEP,WAAY,EAAG/kB,QAAS,GAC9BulB,IAAK,CAAER,WAAY,EAAG/kB,QAAS,GAC/BzS,EAAG,CAAEw3B,WAAY,EAAG/kB,QAAS,GAC7BwlB,GAAI,CAAET,WAAY,EAAG/kB,QAAS,GAC9B,KAAM,CAAE+kB,WAAY,EAAG/kB,QAAS,GAChC,MAAO,CAAE+kB,WAAY,EAAG/kB,QAAS,GACjCylB,GAAI,CAAEV,WAAY,EAAG/kB,QAAS,GAC9B0lB,IAAK,CAAEX,WAAY,EAAG/kB,QAAS,GAC/Bta,EAAG,CAAEq/B,WAAY,EAAG/kB,QAAS,GAC7B2lB,GAAI,CAAEZ,WAAY,EAAG/kB,QAAS,GAC9B,KAAM,CAAE+kB,WAAY,EAAG/kB,QAAS,GAChC,MAAO,CAAE+kB,WAAY,EAAG/kB,QAAS,GACjC4lB,GAAI,CAAEb,WAAY,EAAG/kB,QAAS,GAC9B6lB,IAAK,CAAEd,WAAY,EAAG/kB,QAAS,GAC/BtW,EAAG,CAAEq7B,WAAY,EAAG/kB,QAAS,GAC7B8lB,GAAI,CAAEf,WAAY,EAAG/kB,QAAS,GAC9B,KAAM,CAAE+kB,WAAY,EAAG/kB,QAAS,IAChC,MAAO,CAAE+kB,WAAY,EAAG/kB,QAAS,IACjC+lB,GAAI,CAAEhB,WAAY,EAAG/kB,QAAS,GAC9BgmB,IAAK,CAAEjB,WAAY,EAAG/kB,QAAS,GAC/BrW,EAAG,CAAEo7B,WAAY,EAAG/kB,QAAS,IAC7BimB,GAAI,CAAElB,WAAY,EAAG/kB,QAAS,IAC9B,KAAM,CAAE+kB,WAAY,EAAG/kB,QAAS,GAChC,MAAO,CAAE+kB,WAAY,EAAG/kB,QAAS,GACjC8B,GAAI,CAAEijB,WAAY,EAAG/kB,QAAS,IAC9BkmB,IAAK,CAAEnB,WAAY,EAAG/kB,QAAS,GAEvC,CACA,gBAAAmmB,CAAiBnG,GACb,OAAOA,GAAQ,GAAKA,EAAO0B,GAAME,gBAAgB92B,MACrD,CACA,oBAAAs7B,CAAqBC,GACjB,OAAOA,GAAY,GAAKA,EAAW3E,GAAMM,mBAAmBl3B,MAChE,CAEA,YAAAw7B,CAAaC,GACT,IAAKA,GAAcA,EAAWz7B,OAAS,EACnC,MAAM,IAAI1C,EAAa,eAAgB,sBAAwBm+B,GAEnE,GAAIA,EAAWz7B,OAAS,EACpB,MAAM,IAAI1C,EAAa,eAAgB,sBAAwBm+B,GAEnE,MAAMvG,EAAOuG,EAAWnzB,cAElBozB,EADQ,8BACMC,KAAKzG,GACzB,GAAc,OAAVwG,EAAgB,CAGhB,MAAO,CACH/hC,KAHS+hC,EAAM,GAIftmB,WAHesmB,EAAM,GAK7B,CAEI,MAAM,IAAIp+B,EAAa,eAAgB,sBAAwBm+B,EAEvE,CAEA,WAAAG,CAAYC,GACR,IAAKA,GAAaA,EAAU77B,OAAS,EACjC,MAAM,IAAI1C,EAAa,eAAgB,gBAAkBu+B,GAE7D,MAAMvhC,EAAMuhC,EAAUvzB,cAGhBozB,EADQ,qCACMC,KAAKrhC,GACzB,GAAc,OAAVohC,EAAgB,CAChB,MAAM/hC,EAAO+hC,EAAM,GACbtmB,EAAasmB,EAAM,GACzB,IAAI/uB,EAAO+uB,EAAM,GAIjB,OAFK/uB,IACDA,EAAO,KACJ,CACHhT,OACAyb,aACAzI,OAER,CAEI,MAAM,IAAIrP,EAAa,eAAgB,gBAAgBu+B,IAE/D,CAEA,YAAAC,CAAaL,GACT,MAAMlgC,EAAQq7B,GAAMoD,WAAWyB,GAC/B,QAAc19B,IAAVxC,EACA,MAAM,IAAI+B,EAAa,eAAgB,sBAAsBm+B,KAEjE,OAAOlgC,EAAM2Z,OACjB,CAEA,gBAAA6mB,CAAiBC,GACb,MAAMzgC,EAAQq7B,GAAMoB,UAAUgE,GAC9B,QAAcj+B,IAAVxC,EACA,MAAM,IAAI+B,EAAa,eAAgB,0BAA0B0+B,KAErE,OAAOzgC,CACX,CAEA,oBAAA0gC,CAAqBnS,GACjB,IAAK3vB,KAAKkhC,iBAAiBvR,GACvB,MAAM,IAAIxsB,EAAa,eAAgB,uBAAuBwsB,KAElE,OAAO8M,GAAME,gBAAgBhN,EACjC,CAEA,wBAAAoS,CAAyBC,GACrB,IAAKhiC,KAAKmhC,qBAAqBa,GAC3B,MAAM,IAAI7+B,EAAa,eAAgB,2BAA2B6+B,KAEtE,OAAOvF,GAAMM,mBAAmBiF,EACpC,CAIA,oBAAAC,CAAqBtS,EAAWqS,EAAeE,EAAY,GACvD,GAAkB,IAAdA,IAAkC,IAAfA,EACnB,MAAM,IAAI/+B,EAAa,eAAgB,sBAAsB++B,KAEjE,IAAIC,GAAOxS,EAAYuS,EAAYF,GAAiBvF,GAAMC,UAG1D,OAFIyF,EAAM,IACNA,GAAO1F,GAAMC,WACVyF,CACX,CAIA,mBAAAC,CAAoB5iC,EAAMmwB,GACtB,MAAMyG,EAAQp2B,KAAKqhC,aAAa7hC,GAC1B6iC,EAAYriC,KAAK2hC,aAAavL,EAAM52B,MAC1C,IAAI4hC,EAAWzR,EAAY0S,EAC3B,GAAIp9B,KAAK8C,IAAIq5B,GAAY3E,GAAMC,UAAY,EAAG,CAC1C,IAAI4F,EAAa,EACblB,EAAW,IACXkB,GAAc,GAElB,MAAMC,GAAqB5S,EAAY,GAAK0S,EAAY,IAAM5F,GAAMC,UAAa4F,EACjF,GAAIr9B,KAAK8C,IAAIw6B,GAAoB,EAC7B,MAAM,IAAIp/B,EAAa,eAAgB,sBAAsB3D,MAASmwB,MAGtEyR,EAAWmB,CAEnB,CACA,GAAIt9B,KAAK8C,IAAIq5B,GAAY,EACrB,MAAM,IAAIj+B,EAAa,eAAgB,sBAAsB3D,MAASmwB,MAE1E,IAAI6S,EAAmBpM,EAAM52B,KAC7B,GAAI4hC,EAAW,EACX,IAAK,IAAI34B,EAAI,EAAGA,GAAK24B,IAAY34B,EAC7B+5B,GAAoB,SAGvB,GAAIpB,EAAW,EAChB,IAAK,IAAI34B,GAAK,EAAGA,GAAK24B,IAAY34B,EAC9B+5B,GAAoB,IAG5B,OAAOA,CACX,CAUA,aAAAC,CAActiC,EAAK09B,GACf,MAAM6E,EAAQ,CAACviC,GACf,IAAIwiC,EAAWxiC,EACf,IAAK,IAAIsI,EAAI,EAAGA,EAAIo1B,EAAUh4B,OAAQ4C,IAClCk6B,EAAW3iC,KAAKiiC,qBAAqBU,EAAU9E,EAAUp1B,IACrDk6B,IAAaxiC,GACbuiC,EAAMxtB,KAAKytB,GAEnB,OAAOD,CACX,CAKA,kBAAAE,CAAmBC,EAAOC,EAAOZ,EAAY,GACzC,GAAkB,IAAdA,IAAkC,IAAfA,EACnB,MAAM,IAAI/+B,EAAa,eAAgB,sBAAsB++B,KAEjE,IAAKliC,KAAKkhC,iBAAiB2B,KAAW7iC,KAAKkhC,iBAAiB4B,GACxD,MAAM,IAAI3/B,EAAa,eAAgB,kBAAkB0/B,MAAUC,KAEvE,IAAIC,EAA2B,IAAdb,EAAkBY,EAAQD,EAAQA,EAAQC,EAG3D,OAFIC,EAAa,IACbA,GAActG,GAAMC,WACjBqG,CACX,CAOA,cAAAC,CAAetS,GACX,MAAMuS,EAAcjjC,KAAKyhC,YAAY/Q,GACrC,IAAKuS,EAAYzwB,KACb,MAAM,IAAIrP,EAAa,eAAgB,mCAC3C,MAAM+/B,EAAYzG,GAAMkD,WAAWsD,EAAYzwB,MAC/C,IAAI2wB,EAAeF,EAAYzjC,KAG/B,GAFIyjC,EAAYhoB,aACZkoB,GAAgBF,EAAYhoB,aAC3BioB,EACD,MAAM,IAAI//B,EAAa,eAAgB,yBAA2ButB,GACtE,MAAMZ,EAAQ9vB,KAAKyiC,cAAcziC,KAAK2hC,aAAawB,GAAeD,GAC5DE,EAAe3G,GAAMK,aAAamG,EAAYzjC,MAC9C6jC,EAAW,CAAC,EAClB,IAAK,IAAI56B,EAAI,EAAGA,EAAIg0B,GAAMG,MAAM/2B,SAAU4C,EAAG,CACzC,MAAMuK,GAASowB,EAAe36B,GAAKg0B,GAAMG,MAAM/2B,OACzCy9B,EAAW7G,GAAMG,MAAM5pB,GAC7B,IAAIuwB,EAAWvjC,KAAKoiC,oBAAoBkB,EAAUxT,EAAMrnB,IAChC,IAApB86B,EAAS19B,SACT09B,GAAY,KAEhBF,EAASC,GAAYC,CACzB,CACA,OAAOF,CACX,ECrWJ,SAASG,MAAKz/B,GACNjC,GAAW2hC,OACX5/B,EAAI,sBAAuBE,EACnC,CAQA,MAAMjC,WAAmBg4B,GAErB,mBAAWp4B,GACP,OAAOG,EAASC,UACpB,CAEA,aAAO4hC,CAAO/mB,EAAagnB,GAEvB,IAAKhnB,GAAsC,IAAvBA,EAAY9W,OAC5B,OACJ,MAAM+9B,EAAYvV,EAAOC,mBACnBuV,EAA4BD,EAAUjyB,aAAa,wCACnDmyB,EAAYH,EAAMI,WAAaF,EAC/BG,EAAoBJ,EAAUjyB,aAAa,gCAC3CsyB,EAAoBL,EAAUjyB,aAAa,0BAC3CuyB,EAAuC,GAC7C,IAAIC,EACAC,EAA4C,EAEhD,IAAK,IAAI37B,EAAI,EAAGA,EAAIkU,EAAY9W,SAAU4C,EAAG,CACzC,MAAMsQ,EAAM4D,EAAYlU,GAClBsyB,EAAOhiB,EAAI+hB,UACXtC,EAAQuC,EAAKmB,WACblpB,EAAQ+F,EAAIoiB,aACZkJ,EAAQtJ,EAAKuJ,cAActxB,GACjC,GAAI+nB,IAASoJ,EAAU,CAEnB,IAAK,IAAIv/B,EAAI,EAAGA,EAAIm2B,EAAK/mB,KAAKnO,SAAUjB,EAGpCw/B,EAA4Cn/B,KAAK6E,IAAIixB,EAAKwJ,yBAA2BxJ,EAAKtC,YAAa2L,GAE3GD,EAAWpJ,CACf,CACA,GAAIvC,EAAO,CACP,MAAMgM,EAAYhM,EAAMiM,yBAClB57B,EAAI2vB,EAAMkM,YAAYL,EAAMrgC,MAC5B2gC,EAAU1/B,KAAKgxB,MAAOptB,EAAI27B,EAAa,GAAK,EAClDN,EAAqChvB,KAAK,CACtCrM,IACA7E,KAAM2gC,EACNC,kBAAmBR,EACnBrrB,MACA8rB,yBAA0BL,GAElC,MAEIN,EAAqChvB,KAAK,CACtClR,KAAMqgC,EAAMrgC,KACZ4gC,kBAAmBR,EACnBrrB,OAGZ,CAEAmrB,EAAqCY,MAAK,CAACrgC,EAAGC,IAAMA,EAAEV,KAAOS,EAAET,OAC/D,MAAM+gC,EAAmC,GAGzC,IAAIC,EAAuB,EAG3B,IAAK,IAAIv8B,EAAI,EAAGA,EAAIy7B,EAAqCr+B,OAAQ4C,IAAK,CAClE,MAAMw8B,EAAsCf,EAAqCz7B,GAC3Ey8B,EAAkBH,EAAiCA,EAAiCl/B,OAAS,GACnG,IAAIs/B,EAECD,IAAoBA,aAAyD,EAASA,EAAgBlhC,QAAUihC,EAAoCjhC,KAYrJmhC,EAAoBD,GAXpBC,EAAoB,CAChBnhC,KAAMihC,EAAoCjhC,KAC1CohC,UAAU,EACVC,cAAc,EACdC,OAAQ,EACR96B,MAAO,EACP+6B,OAAQ,GAEZR,EAAiC7vB,KAAKiwB,IAOW,MAAjDF,EAAoClsB,IAAIvG,MACS,OAAjDyyB,EAAoClsB,IAAIvG,OACxC2yB,EAAkBC,UAAW,GAGoB,OAAjDH,EAAoClsB,IAAIvG,OACxC2yB,EAAkBE,cAAe,GAGrCF,EAAkBG,SAIlBH,EAAkB36B,OAASy6B,EAAoClsB,IAAIsX,WAAa2T,EAGhFgB,EAAuB//B,KAAK6E,IAAIm7B,EAAoCL,kBAAmBI,EAC3F,CAkBA,IAAIQ,EAAe,EAEnB,IAAK,IAAI/8B,EAAI,EAAGA,EAAIs8B,EAAiCl/B,OAAQ4C,IAAK,CAC9D,IAAIg9B,GAAqB,EACzB,MAAMC,EAAaj9B,EACnB,IAAIk9B,EAAWl9B,EACf,KAAOk9B,EAAW,EAAIZ,EAAiCl/B,SAAW4/B,GAE1DzlC,KAAK4lC,eAAeb,EAAiCY,GAAWZ,EAAiCY,EAAW,IAE5GA,IAGAF,GAAqB,EAI7B,MAAMI,EAAgB7yB,GAAU+xB,EAAiCW,EAAa1yB,GACxE8yB,EAAiBC,GAAYA,EAAQ9xB,IAAI4xB,GACzCG,EAAiB,CAACC,EAAQC,KAC5B,MAAOzhC,EAAGC,GAAKohC,EAAc,CAACG,EAAQC,IAASjyB,KAAKkyB,GAASA,EAAKniC,OAClE,OAAOS,EAAIC,CAAC,EAEV0hC,EAAe,IAAIC,IAAeA,EAAWpyB,IAAI6xB,GAAeQ,OAAM,EAAEC,EAAOC,MAAYxmC,KAAK4lC,eAAeW,EAAOC,KAEtHC,EAAcd,EAAWD,EAAa,EAE5C,IAiCIgB,EACAnB,EAlCAoB,EAAU3mC,KAAK4lC,eAAeb,EAAiCW,GAAaX,EAAiCY,IAC3G,IACA,IACN,OAAQc,GACJ,KAAK,EACe,MAAZE,GAA4C,KAAzBX,EAAe,EAAG,IAAuC,KAAzBA,EAAe,EAAG,KACrEW,EAAU,oBAEd,MACJ,KAAK,EACGP,EAAa,CAAC,EAAG,GAAI,CAAC,EAAG,MACzBO,EAAU,yBAEd,MACJ,KAAK,EACe,MAAZA,GAAmBP,EAAa,CAAC,EAAG,MACpCO,EAAU,wBACNP,EAAa,CAAC,EAAG,GAAI,CAAC,EAAG,MACzBO,EAAU,+BAGlB,MACJ,KAAK,EACGP,EAAa,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,MACjCO,EAAU,wBAEVP,EAAa,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,MACzCO,EAAU,6BAUtB,GAAIF,GAAe,EAAG,CAElB,IAAIG,EAAgB,EAChBC,GAAoB,EACxB,MAA6B,IAAtBA,GAA4B,CAC/BA,GAAoB,EACpB,IAAK,IAAI7iC,EAAO,EAAGA,EAAO4iC,EAAgB7B,EAAiCl/B,OAAQ7B,IAC/E,GAAIhE,KAAK4lC,eAAeb,EAAiC/gC,GAAO+gC,EAAiC/gC,EAAO4iC,IAAiB,CACrHC,GAAoB,EACpBD,IACA,KACJ,CAER,CAEA,IAAKF,EAAcj+B,EAAGi+B,GAAef,EAAUe,IAC3CnB,GAAWmB,EAAcj+B,GAAKm+B,EAAiB,EAC/C7B,EAAiC2B,GAAanB,OAASA,EACvDC,EAAeA,EAAeD,EAASC,EAAeD,CAE9D,MAII,IAAKmB,EAAcj+B,EAAGi+B,GAAef,EAAUe,IAC3CnB,EAASlX,EAAOiE,uBAAuBmU,GAAaE,GAASD,EAAcj+B,GAC3Es8B,EAAiC2B,GAAanB,OAASA,EACvDC,EAAeA,EAAeD,EAASC,EAAeD,EAK9D98B,EAAIk9B,CACR,CAaA,MAAMmB,EAAe,GACfC,EAAiB,GACvB,IAAK,IAAIt+B,EAAI,EAAGA,GAAK+8B,EAAc/8B,IAC/Bq+B,EAAar+B,GAAK,EAClBs+B,EAAet+B,GAAK,EAExBq+B,EAAa,GAAKhD,EAAYkB,EAC9B+B,EAAe,GAAKjD,EAGpBiB,EAAiC1vB,SAASrR,IAClCA,EAAKwG,MAAQs8B,EAAa9iC,EAAKuhC,UAC/BuB,EAAa9iC,EAAKuhC,QAAUvhC,EAAKwG,MAAK,IAE9C,IAAK,IAAI/B,EAAI,EAAGA,EAAIq+B,EAAajhC,OAAQ4C,IAErCs+B,EAAet+B,GAAKq+B,EAAar+B,GAAKs+B,EAAet+B,EAAI,GAE7D,MAAMu+B,EAAaD,EAAeA,EAAelhC,OAAS,GAE1D,IAAIohC,EAAW,EACflC,EAAiC1vB,SAASrR,IACtC,IAAIkS,EAAY,EAChB,MAAMgxB,EAAgBD,EAAWjjC,EAAKshC,OAEtC,KAAe2B,EAAWC,EAAeD,IAAY,CACjD,MAAMjO,EAAS+N,EAAe/iC,EAAKuhC,OAAS,GAAKrvB,EAAY8uB,EAC7Dd,EAAqC+C,GAAUluB,IAAI2f,UAAUM,GAG7D9iB,GAAaguB,EAAqC+C,GAAUluB,IAAIsX,WAAa2T,EAC7ER,GAAE,0BAA2Bx/B,EAAKA,KAAMijC,EAAUjO,EACtD,KAGJ2K,EAAMI,WAAaiD,EAAa/C,CACpC,CAEA,qBAAO2B,CAAeW,EAAOC,GACzB,IAAIW,EAAYX,EAAMxiC,KAAOuiC,EAAMviC,KAC/BojC,EAAoB,EAEpBD,EAAY,GAEZC,EAAoBZ,EAAMpB,UAAYoB,EAAMnB,aAAe,IAAM,EAC7DkB,EAAMlB,eACN8B,GAAa,MAIjBC,EAAoBb,EAAMnB,UAAYmB,EAAMlB,aAAe,IAAM,EAC7DmB,EAAMnB,eACN8B,GAAa,KAErB,MAAME,EAAYpiC,KAAK8C,IAAIo/B,GAAaC,EAExC,OADA5D,GAAE,8BAA+B+C,EAAMviC,KAAMwiC,EAAMxiC,KAAMqjC,GAClDA,CACX,CAMA,uBAAOC,CAAiBC,EAAQ7W,GAC5B,MAAM8W,EAAgB,GAChBC,EAAc,CAAC,EAErBF,EAAOlyB,SAASqyB,IACZ,MAAMC,EAAe,IAAIriC,EAAS,EAAG,GACpBoiC,EAAME,eACdvyB,SAAS3P,IACd,GAAIA,EAAEmiC,oBACF,OACJ,MAAMC,EAAkBL,EAAYE,EAAavmC,SAC5C0mC,EAKDA,EAAgB5yB,KAAKxP,IAJrB8hC,EAActyB,KAAKyyB,EAAavmC,SAChCqmC,EAAYE,EAAavmC,SAAW,CAACsE,IAKzCiiC,EAAarhC,IAAIZ,EAAEqiC,WAAW,GAChC,IAEN,MAAMC,EAAQ,IAAIvL,GAEb/L,IACDA,EAAe,KAEnB,MAAMuX,EAAcD,EAAMhF,eAAetS,GACnC2S,EAAW,CAAC,EAClBmE,EAAcnyB,SAAS6yB,IACnB,MAAMC,EAAYV,EAAYS,GAGxBE,EAAkB,GAClBC,EAAe3iC,IAEjB,IAAK7C,EAAY6C,IAAMA,EAAE4iC,UAAY5iC,EAAEmiC,oBACnC,OAGJ,MAAMU,EAAY7iC,EAClB6iC,EAAUv0B,KAAKqB,SAAQ,CAACqsB,EAAW8G,KAC/B,MAAMroC,EAAM6nC,EAAM3G,aAAaK,EAAUh5B,MAAM,KAAK,IAC9C+T,EAASilB,EAAUh5B,MAAM,KAAK,GAE9B+/B,EAAmBtoC,EAAI8a,YAAc,IACrCytB,EAAQvoC,EAAIX,KAAOipC,EAGpBpF,EAASljC,EAAIX,KAAOid,KACrB4mB,EAASljC,EAAIX,KAAOid,GAAUwrB,EAAY9nC,EAAIX,OAClD,MAAMmpC,EAAiBtF,EAASljC,EAAIX,KAAOid,KAAYisB,EAGjDE,EAAqBR,EAAgB1xB,QAAQgrB,IAAc,EAQjE,GANA6G,EAAUM,eAAexzB,SAAQ,CAACyzB,EAAU91B,KACpCpR,EAAaknC,IAAaA,EAASt2B,MAAQi2B,GAAoBK,EAAS5N,YAAcsN,GACtFD,EAAUM,eAAehyB,OAAO7D,EAAO,EAC3C,KAGC21B,GAAmBA,GAAkBC,EAAqB,CAG3DvF,EAASljC,EAAIX,KAAOid,GAAUisB,EAE9B,MAAMztB,EAAa,IAAInZ,GAAW2mC,GAElCF,EAAUQ,YAAY9tB,EAAYutB,GAElCJ,EAAgBlzB,KAAKwsB,EACzB,KAGJ6G,EAAUM,eAAexzB,SAASyzB,IAC1BvmC,EAAiBumC,IACjBA,EAASE,gBAAgB3zB,QAAQgzB,EACrC,GACF,EAENF,EAAU9yB,QAAQgzB,EAAY,GAEtC,CAMA,WAAA5mC,CAAY+Q,GACRjP,QACAigC,GAAE,mBAAoBhxB,GACtBxS,KAAKwS,KAAOA,EACZxS,KAAK20B,SAAWmF,GAASC,SAASS,KAClCx6B,KAAKipC,eAAiB,CAElBC,WAAY7a,EAAOsD,oBAEnBwX,iBAAkB,EAClBC,kBAAmB,GAEvBppC,KAAKib,WAAaoT,EAAOmC,gBAAgBxwB,KAAKwS,MAC9C9O,EAAQ1D,KAAKib,WAAY,gBAAiB,4BAA4BzI,KAEtExS,KAAKqpC,YAAa,EAClBrpC,KAAKo4B,OACT,CACA,KAAAA,GACI,MAAMkR,EAAYtpC,KAAKipC,eAAeC,WACtClpC,KAAK+vB,MAAQ,IAAIG,EAAMlwB,KAAKib,WAAW5X,KAAMimC,GAC7CtpC,KAAK+vB,MAAMgJ,WAAW,GAClB/4B,KAAKqpC,aACLrpC,KAAKupC,UAAY,IAAIrZ,EAAM7B,EAAOmC,gBAAgB,KAAKntB,KAAMimC,GAC7DtpC,KAAKwpC,WAAa,IAAItZ,EAAM7B,EAAOmC,gBAAgB,KAAKntB,KAAMimC,GAC9DtpC,KAAKupC,UAAUxQ,WAAW,GAC1B/4B,KAAKwpC,WAAWzQ,WAAW,GAEnC,CAEA,QAAA1I,GACI,GAAIrwB,KAAKqpC,WAAY,CACjB,MAAME,EAAY7lC,EAAQ1D,KAAKupC,WACzBC,EAAa9lC,EAAQ1D,KAAKwpC,YAC1BC,EAAaF,EAAUl4B,aAAa7G,MACtCg/B,EAAWn4B,aAAa7G,MACxBxK,KAAKipC,eAAeE,iBACpBnpC,KAAKipC,eAAeG,kBACxB,OAAOppC,KAAK+vB,MAAM1e,aAAa7G,MAAQi/B,CAC3C,CAEI,OAAOzpC,KAAK+vB,MAAM1e,aAAa7G,KAEvC,CAEA,OAAAywB,CAAQF,GAQJ,OAPAr3B,EAAQq3B,EAAM,gBAAiB,mBAAmBA,KAClD/6B,KAAK+6B,KAAOA,EAER14B,EAAY04B,KACZ/6B,KAAKipC,eAAeC,WAAa,GACjClpC,KAAKo4B,SAEFp4B,IACX,CAEA,eAAA0pC,GAII,OAHA1pC,KAAKqpC,YAAa,EAClBrpC,KAAKipC,eAAeC,WAAa,GACjClpC,KAAKo4B,QACEp4B,IACX,CAEA,IAAAwW,GACI,MAAM,KAAEhE,EAAI,SAAEmiB,EAAQ,MAAE3hB,EAAK,WAAEq2B,EAAU,QAAE3T,EAAO,QAAEC,EAAO,MAAE5F,EAAOkZ,gBAAgB,iBAAEE,EAAgB,kBAAEC,IAAyBppC,KAC3H+2B,EAAM/2B,KAAKuW,eACXwkB,EAAO/6B,KAAKg7B,oBAClBh7B,KAAK+W,cAEL,MAAM4yB,EAAQ5O,EAAK6O,mBAAmBjV,EAAU3hB,GAChD,IAAI62B,EAAOF,EAAMhmC,EAAI+xB,EACrB,MAAMoU,EAAOH,EAAM9gC,EAAI8sB,EAEvB,GADA6N,GAAE,cAAehxB,EAAMq3B,EAAMC,GACxBT,EAGA,CACD,MAAME,EAAY7lC,EAAQ1D,KAAKupC,WACzBC,EAAa9lC,EAAQ1D,KAAKwpC,YAEhCA,EAAWpQ,OAAOrC,EAAK8S,EAAMC,GAC7BD,GAAQL,EAAWn4B,aAAa7G,MAChCq/B,GAAQT,EACRS,GAAQ7pC,KAAKib,WAAW2B,4BACxBmT,EAAMqJ,OAAOrC,EAAK8S,EAAMC,GACxBD,GAAQ9Z,EAAM1e,aAAa7G,MAC3Bq/B,GAAQV,EACRI,EAAUnQ,OAAOrC,EAAK8S,EAAMC,EAChC,MAdI/Z,EAAMqJ,OAAOrC,EAAK8S,EAAMC,EAehC,EAGJhoC,GAAW2hC,OAAQ,EChenB,MAAMsG,WAAat1B,EACf,mBAAW/S,GACP,OAAOG,EAASkoC,IACpB,CAEA,aAAWC,GACP,OAAO,CACX,CACA,eAAWC,GACP,OAAQ,CACZ,CAEA,gBAAWC,GACP,OAAO7b,EAAOyD,UAClB,CACA,iBAAWqY,GACP,OAAO9b,EAAO0D,WAClB,CACA,WAAAtwB,CAAYotB,GACRtrB,QACAvD,KAAKoqC,iBAAmB,EACxBpqC,KAAKqqC,mBAAqB,EAC1BrqC,KAAKsqC,sBAAwB,EAC7BtqC,KAAKuqC,wBAA0B,EAE/BvqC,KAAKwqC,SAAW3b,aAAyC,EAASA,EAAQ2b,UAAY,EACtFxqC,KAAKyqC,OAAS5b,aAAyC,EAASA,EAAQ4b,QAAU,EAElFzqC,KAAK0qC,OAAS7b,aAAyC,EAASA,EAAQ6b,QAAU,EAClF1qC,KAAK2qC,UAAY9b,aAAyC,EAASA,EAAQ8b,WAAa,EAExF3qC,KAAK4qC,gBAAkB/b,aAAyC,EAASA,EAAQ+b,iBAAmB,EAEpG5qC,KAAK6qC,gBAAkBhc,aAAyC,EAASA,EAAQgc,iBAAmB,EAEpG7qC,KAAK8qC,MAAQjc,aAAyC,EAASA,EAAQic,QAAS,EAChF9qC,KAAK+qC,WAAalc,aAAyC,EAASA,EAAQkc,aAAc,EAC1F/qC,KAAKgrC,eAAiBnc,aAAyC,EAASA,EAAQmc,gBAAkB,EAGlGhrC,KAAKirC,uBAAyB,EAC9BjrC,KAAKm4B,WAAWtJ,EACpB,CACA,UAAAsJ,CAAWtJ,GAEP7uB,KAAKoqC,kBAAoBvb,aAAyC,EAASA,EAAQub,mBAAqB,EACxGpqC,KAAKqqC,oBAAsBxb,aAAyC,EAASA,EAAQwb,qBAAuB,EAC5GrqC,KAAKsqC,uBAAyBzb,aAAyC,EAASA,EAAQyb,wBAA0B,EAClHtqC,KAAKuqC,yBAA2B1b,aAAyC,EAASA,EAAQ0b,0BAA4B,CAC1H,CAEA,kBAAAW,CAAmBV,EAASC,GAGxB,OAFAzqC,KAAKwqC,QAAUA,EACfxqC,KAAKyqC,MAAQA,EACNzqC,IACX,CAEA,YAAAmrC,CAAajJ,GACTliC,KAAK6qC,eAAiB3I,CAC1B,CAEA,YAAAkJ,CAAaC,GACTrrC,KAAK4qC,eAAiBS,CAC1B,CACA,YAAAC,GACI,OAAOtrC,KAAK4qC,cAChB,CAEA,UAAAW,CAAWb,EAAOC,GACd3qC,KAAK0qC,MAAQA,EACb1qC,KAAK2qC,SAAWA,CACpB,CAEA,SAAAa,GACI,MAAMC,EAAWzrC,KAAK6qC,iBAAmBd,GAAKC,GAAKhqC,KAAKoqC,iBAAmBpqC,KAAKqqC,mBAEhF,OADwBrqC,KAAK2qC,SAAW3qC,KAAK0qC,OAASX,GAAKI,OAASsB,EAAWzrC,KAAK4qC,iBAC3D5qC,KAAK6qC,cAClC,CACA,cAAAxzB,GACI,MAAM,IAAIlU,EAAa,iBAAkB,oCAC7C,CAGA,UAAAuoC,GACI,MAAMC,EAAW3rC,KAAK6qC,iBAAmBd,GAAKC,GACxC4B,EAAK,CAAC5rC,KAAK0qC,MAAO1qC,KAAK2qC,UACvBkB,EAAa9B,GAAKI,OAASnqC,KAAK4qC,eAChCkB,GAAsBH,EAAW1mC,KAAK8mC,IAAM9mC,KAAK6E,QAAQ8hC,GACzDI,GAAsBL,EAAW1mC,KAAK6E,IAAM7E,KAAK8mC,QAAQH,GAE/D,MAAO,CAAEK,KADQH,EAAqBD,GAAc7rC,KAAK6qC,eAChCqB,MAAOF,EACpC,CACA,aAAAG,CAAcC,GAEV,OADApsC,KAAK8qC,MAAQsB,EACNpsC,IACX,CACA,UAAAqsC,CAAWtB,EAAWC,GAGlB,OAFAhrC,KAAK+qC,UAAYA,EACjB/qC,KAAKgrC,cAAgBA,EACdhrC,IACX,CACA,mBAAAssC,GACItsC,KAAKirC,uBAAyB5c,EAAOC,mBAAmB3c,aAAa,gCAAiC,EAC1G,CACA,mBAAA46B,GACIvsC,KAAKirC,wBAA0BlB,GAAKG,MAAQ,CAChD,CAEA,IAAA1zB,GAEI,GADAxW,KAAK+W,cACD/W,KAAK8qC,KACL,OACJ,MAAM/T,EAAM/2B,KAAKuW,eACjB,IAAIi2B,EACAC,EACJ,MAAM5B,EAAiB7qC,KAAK6qC,eAC5B,IAAI6B,EAAgB,EAChB7B,IAAmBd,GAAKE,MAExBuC,EAASxsC,KAAKwqC,QACdiC,EAASzsC,KAAK0qC,MAAQ1qC,KAAKqqC,mBAC3BqC,EAAgB1sC,KAAKuqC,0BAIrBiC,EAASxsC,KAAKyqC,MACdgC,EAASzsC,KAAK2qC,SAAW3qC,KAAKoqC,iBAC9BsC,EAAgB1sC,KAAKsqC,uBAEzB,MAAMuB,EAAa7rC,KAAKwrC,aArIhC,YAAcznC,GACNgmC,GAAKtG,OACL5/B,EAAI,gBAAiBE,EAC7B,CAmIQ,CAAE,oBAAqB,UAAW/D,KAAK0qC,MAAO,aAAc1qC,KAAK2qC,UAEjE,MAAMgC,EAAiB3sC,KAAK+qC,UAAYc,EAAa7rC,KAAKgrC,cAAgBhrC,KAAK6qC,eAAiB,EAEhG9T,EAAIthB,OACJzV,KAAKuV,aACLwhB,EAAI6V,UAAU,OAAQ5sC,KAAKuT,aAAa,MAAO,CAAEs5B,aAAa,IAC9D9V,EAAIQ,YACJR,EAAI5gB,aAAa4zB,GAAKG,OACtBnT,EAAIS,OAAOgV,EAAQC,EAASE,EAAiBD,GAC7C3V,EAAIU,OAAO+U,EAAQC,EAASZ,EAAa7rC,KAAKirC,uBAAyBJ,GACvE9T,EAAI5H,SACJ4H,EAAI+V,aACJ9sC,KAAKoW,eACL2gB,EAAI1gB,SACR,EC1JJ,SAAS,MAAKtS,GACNgpC,GAActJ,OACd5/B,EAAI,yBAA0BE,EACtC,CD0JAgmC,GAAKtG,OAAQ,EC9Ib,MAAMuJ,GAAiB,CAAC,EAClBC,GAAkB,CAAC,EAKnBn6B,GAAW,CAAC,EAClB,MAAMi6B,GAIF,sBAAOG,GACH,MAAMC,EAAkB,GACxB,IAAK,MAAMl+B,KAAc6D,GAAU,CAC/B,MAAMs6B,EAAgBt6B,GAAS7D,GAC/Bk+B,EAAgBj4B,KAAK7U,OAAO2X,OAAO,CAAC,EAAGo1B,GAC3C,CACA,OAAOD,CACX,CAQA,aAAOE,CAAOC,EAAgB,CAAC,GAC3B,GAAE,WAAYA,GACTA,EAAc5+B,SACf4+B,EAAc5+B,OAASjB,EAAKkB,YAKhC,MAAM4+B,EAAa,GAGbC,EAAoBF,EAAc5+B,OAAOhG,MAAM,WACrD,IAAK,MAAM+kC,KAAmBD,EAAmB,CAC7C,IAAK,MAAMv+B,KAAc6D,GAGjB7D,EAAWy+B,WAAWD,IACtBF,EAAWr4B,KAAKpC,GAAS7D,IAGjC,GAAIs+B,EAAW1nC,OAAS,EACpB,KAER,CACA,IAAI8nC,EACJ,GAA0B,IAAtBJ,EAAW1nC,OAEX8nC,EAAY,IAAIZ,GAAc1sC,OAAOutC,OAAO96B,IAAU,SAErD,GAA0B,IAAtBy6B,EAAW1nC,OAChB8nC,EAAY,IAAIZ,GAAcQ,EAAW,QAExC,CACD,MAAMM,EAAOpgC,EAAKmC,OAAO09B,EAAc/+B,QACjCu/B,EAASrgC,EAAKqC,SAASw9B,EAAc9+B,OACrCu/B,EAAeR,EAAWS,MAAM1lC,GAAMA,EAAEulC,OAASA,GAAQvlC,EAAEwlC,SAAWA,IAC5E,GAAIC,EACAJ,EAAY,IAAIZ,GAAcgB,OAE7B,CACD,MAAME,EAAeV,EAAWS,MAAM1lC,GAAMA,EAAEwlC,SAAWA,GAAUxlC,EAAEulC,OAASA,IAE1EF,EAAY,IAAIZ,GADhBkB,GAI8BV,EAAW,GAEjD,CACJ,CACA,MAAM5/B,EAAW2/B,EAAch/B,KAC/B,QAAwB,IAAbX,EAA0B,CACjC,MAAMugC,EAAezgC,EAAKW,wBAAwBT,GAClDggC,EAAUx1B,YAAY+1B,EAC1B,CACA,OAAOP,CACX,CAKA,cAAOQ,CAAQl/B,GACX,OAAO6D,GAAS7D,EACpB,CASA,mBAAOm/B,CAAa75B,EAAM85B,GAAY,GAClC,GAAE,iBAAkB95B,EAAM85B,GAC1B,MAAMp/B,EAAasF,EAAK7F,aAEH9K,IADAkP,GAAS7D,IACIo/B,KAC9Bv7B,GAAS7D,GAAcsF,EAE/B,CAKA,WAAA9S,CAAY2rC,GAERptC,KAAK0O,OAAS,GAEd1O,KAAKsO,KAAO,GAEZtO,KAAKwR,WAAa,IAgBlBxR,KAAK0R,OAAS,CAAC,EACf1R,KAAKsuC,QAAS,EACdtuC,KAAKuuC,YAAa,EAClBvuC,KAAK8tC,QAAS,EACd9tC,KAAK6tC,MAAO,EACZ7tC,KAAKwuC,kBAAoB,EACzBxuC,KAAKyuC,gBAAkB,EACvBzuC,KAAK0uC,aAAe,IAEpB1uC,KAAK2uC,SAAW,GAChB3uC,KAAK4uC,aAAaxB,EACtB,CACA,oBAAIyB,GACA,IAAIhhC,EAIJ,YAHuCjK,IAAnCqpC,GAAgBjtC,KAAK2uC,YACrB1B,GAAgBjtC,KAAK2uC,UAAY,CAAC,GAEW,QAAzC9gC,EAAKo/B,GAAgBjtC,KAAK2uC,iBAA8B,IAAP9gC,EAAgBA,EAAK,CAAC,CACnF,CACA,YAAA+gC,CAAahgB,GACLA,EAAOlgB,SACP1O,KAAK0O,OAASkgB,EAAOlgB,QACrBkgB,EAAOpd,aACPxR,KAAKwR,WAAaod,EAAOpd,YACzBod,EAAOld,SACP1R,KAAK0R,OAASkd,EAAOld,QACrBkd,EAAO0f,SACPtuC,KAAKsuC,OAAS1f,EAAO0f,QACrB1f,EAAO2f,aACPvuC,KAAKuuC,WAAa3f,EAAO2f,YACzB3f,EAAOkf,SACP9tC,KAAK8tC,OAASlf,EAAOkf,QACrBlf,EAAOif,OACP7tC,KAAK6tC,KAAOjf,EAAOif,MACnBjf,EAAO8f,eACP1uC,KAAK0uC,aAAe9f,EAAO8f,cAC3B9f,EAAO4f,oBACPxuC,KAAKwuC,kBAAoB5f,EAAO4f,mBAChC5f,EAAO6f,kBACPzuC,KAAKyuC,gBAAkB7f,EAAO6f,iBAClCzuC,KAAK8uC,gBACT,CAEA,cAAAA,GACI,MAAMpgC,EAAS1O,KAAK0O,OAAOR,QAAQ,OAAQ,KACrCI,EAAOtO,KAAKsO,KACZC,EAASvO,KAAK6tC,KAAOxhC,EAAW0iC,KAAO1iC,EAAWuC,OAClDJ,EAAQxO,KAAK8tC,OAASxhC,EAAUyD,OAASzD,EAAUsC,OAEzD5O,KAAK2uC,SAAW,GAAGjgC,KAAUJ,KAAQC,KAAUC,GACnD,CAKA,eAAAwgC,CAAgBC,GACZ,OAAIjvC,KAAK0R,OAAOu9B,GACLjvC,KAAK0R,OAAOu9B,GAGZjvC,KAAK0R,OAAO1R,KAAK0uC,aAEhC,CACA,aAAIQ,GAEA,OADgBlvC,KAAKgvC,gBAAgBhvC,KAAK0uC,cAC1B9X,GAAK52B,KAAKwR,WAAcxR,KAAKsY,gBACjD,CAOA,wBAAA62B,CAAyBnjC,GACrB,IAAI6B,EACJ,MAAMkD,EAAU/Q,KAAKgvC,gBAAgBhjC,GACrC,GAAK+E,EAIA,CAED,OADqD,QAA/BlD,EAAKkD,EAAQq+B,oBAAiC,IAAPvhC,EAAgBA,EAAK,GAC5D7N,KAAKwR,UAC/B,CALI,MAAO,GAMf,CAIA,oBAAA69B,CAAqBrjC,GACjB,MAAM+E,EAAU/Q,KAAKgvC,gBAAgBhjC,GAC/BsjC,EAAK,CAAEC,KAAM,EAAGC,KAAMxvC,KAAKkvC,UAAWzkC,OAAQzK,KAAKkvC,WACzD,OAAKn+B,GAI4B,iBAAlBA,EAAQ0+B,QACfH,EAAGC,KAAQx+B,EAAQ0+B,MAAQzvC,KAAKwR,WAAcxR,KAAKsY,kBAE1B,iBAAlBvH,EAAQ2+B,QACfJ,EAAGE,KAAQz+B,EAAQ2+B,MAAQ1vC,KAAKwR,WAAcxR,KAAKsY,kBAEvDg3B,EAAG7kC,OAAS6kC,EAAGE,KAAOF,EAAGC,KAClBD,GAVAA,CAYf,CACA,iBAAAK,CAAkBnnC,GACd,MAAMqxB,EAAQ75B,KAAK6uC,iBACbe,EAAS,CAAEL,KAAM,EAAGC,KAAMxvC,KAAKkvC,UAAWzkC,OAAQzK,KAAKkvC,WACvDhY,EAAQ2C,EAAMrxB,GACpB,QAAc5E,IAAVszB,EACA,OAAOA,EAEX,IAAK,IAAIzuB,EAAI,EAAGA,EAAID,EAAI3C,SAAU4C,EAAG,CACjC,MAAMonC,EAAO7vC,KAAKqvC,qBAAqB7mC,EAAIC,IAC3CmnC,EAAOL,KAAOtqC,KAAK8mC,IAAI6D,EAAOL,KAAMM,EAAKN,MACzCK,EAAOJ,KAAOvqC,KAAK6E,IAAI8lC,EAAOJ,KAAMK,EAAKL,MACzCI,EAAOnlC,OAASmlC,EAAOJ,KAAOI,EAAOL,IACzC,CAEA,OADA1V,EAAMrxB,GAAOonC,EACNA,CACX,CAIA,mBAAAE,CAAoB/qC,GAChB,MAAM5E,EAAMH,KAAK2uC,SAGjB,IAAIoB,EAAe/C,GAAe7sC,QACbyD,IAAjBmsC,IACAA,EAAe,CAAC,EAChB/C,GAAe7sC,GAAO4vC,GAE1B,IAAIvlC,EAAQulC,EAAahrC,GACzB,QAAcnB,IAAV4G,EAAqB,CACrBA,EAAQ,EACR,IAAK,IAAI/B,EAAI,EAAGA,EAAI1D,EAAKc,SAAU4C,EAC/B+B,GAASxK,KAAKmvC,yBAAyBpqC,EAAK0D,IAEhDsnC,EAAahrC,GAAQyF,CACzB,CACA,OAAOA,CACX,CAEA,mBAAAwlC,CAAoBjrC,GAChB,OAAO/E,KAAK8vC,oBAAoB/qC,GAAQ/E,KAAKsY,gBACjD,CAIA,WAAAH,CAAY7J,GAIR,OAHAtO,KAAKsO,KAAOA,EAEZtO,KAAK8uC,iBACE9uC,IACX,CAEA,oBAAIsY,GACA,OAAOtY,KAAKsO,KAAOb,EAAKK,cAAcC,EAC1C,CACA,aAAAwD,GACI,OAAOvR,KAAKwR,UAChB,EC3SG,IAAIy+B,GAOAC,GDuSXnD,GAActJ,OAAQ,EC7StB,SAAWwM,GACPA,EAA4BA,EAAkC,KAAI,GAAK,OACvEA,EAA4BA,EAAoC,OAAI,GAAK,SACzEA,EAA4BA,EAAmC,MAAI,GAAK,QACxEA,EAA4BA,EAAyC,YAAI,GAAK,aACjF,CALD,CAKGA,KAAgCA,GAA8B,CAAC,IAElE,SAAWC,GACPA,EAA0BA,EAA+B,IAAI,GAAK,MAClEA,EAA0BA,EAAkC,OAAI,GAAK,SACrEA,EAA0BA,EAAkC,OAAI,GAAK,SACrEA,EAA0BA,EAAuC,YAAI,GAAK,aAC7E,CALD,CAKGA,KAA8BA,GAA4B,CAAC,IAO9D,MAAMluC,WAAmB83B,GAErB,mBAAWp4B,GACP,OAAOG,EAASG,UACpB,CAGA,+BAAWmuC,GAEP,OADkB9hB,EAAOC,mBACR3c,aAAa,sBAClC,CAEA,aAAO+xB,CAAO0M,EAAazM,GACvB,IAAKyM,GAAsC,IAAvBA,EAAYvqC,OAC5B,OAAO,EACX,IAAIwqC,EAAY,EACZC,EAAa,EACbC,EAAoB,EACpBC,EAAqB,EACzB,IAAK,IAAI/nC,EAAI,EAAGA,EAAI2nC,EAAYvqC,SAAU4C,EAAG,CACzC,MAAMgoC,EAAaL,EAAY3nC,GACzBioC,EAAgB3D,GAAcM,OAAOoD,EAAWh5B,UAGtD,IAAIk5B,GADe,EAAID,EAAcf,kBAAkBc,EAAW1rC,MAAM0F,QAAU4jB,EAAO8D,oBAEzF,MAAM4I,EAAO0V,EAAWzV,oBAClB4V,EAAa7V,EAAKzJ,gBAAgBjB,WAElCD,EAAYsgB,EAAcV,oBAAoBS,EAAW1rC,MAC3D0rC,EAAWI,0BAA4BZ,GAA4BzV,MACnE+V,EAAoBtrC,KAAK6E,IAAI8mC,EAAYL,GACzCF,EAAYprC,KAAK6E,IAAIumC,EAAWjgB,GAAapuB,GAAWmuC,sBAEnDM,EAAWI,0BAA4BZ,GAA4BvV,OACxE8V,EAAqBvrC,KAAK6E,IAAI8mC,EAAYJ,GAC1CF,EAAarrC,KAAK6E,IAAIwmC,EAAYlgB,KAGlCigB,EAAYprC,KAAK6E,IAAIumC,EAAWjgB,EAAY,GAAKpuB,GAAWmuC,qBAC5DG,EAAarrC,KAAK6E,IAAIwmC,EAAYlgB,EAAY,GAC9CmgB,EAAoBtrC,KAAK6E,IAAI8mC,EAAa,EAAGL,GAC7CC,EAAqBvrC,KAAK6E,IAAI8mC,EAAa,EAAGJ,IAElD,MAAMhY,EAAQuC,EAAKmB,WACb4U,EAAgB/V,EAAKgW,UAAYhW,EAAKiW,mBAAqBjH,GAAKC,GACtE,IAAI6B,EAAa,EACboF,EAAQ,EACZ,GAAIhuC,EAAU83B,GACV,GAAIA,EAAKkO,eAAeiI,UAAW,CAC/B,MAAMhd,EAAO6G,EAAKoW,UACdjd,IACA2X,EAAa5mC,KAAK8C,IAAImsB,EAAKsX,aAAend,EAAO8D,oBAEzD,MAEI0Z,EAAa,OAGhB,GAAI9oC,EAAgBg4B,GAAO,CAC5B,MAAM7G,EAAO6G,EAAKoW,UACdjd,GAA+B,MAAvB6G,EAAKqW,gBACbvF,EAAa5mC,KAAK8C,IAAImsB,EAAKsX,aAAend,EAAO8D,oBAEzD,CAIA,GAHIqG,IACAyY,EAAQzY,EAAM6Y,eAEdZ,EAAWa,wBAA0BtxC,KAAKuxC,gBAAgBC,IAAK,CAC/D,IAAIC,EAAW1W,EAAK2W,eAAc,GAC9BzuC,EAAU83B,KACV0W,EAAWR,GAASlW,EAAK4W,cAAgB,KAEzCb,IAAkB/G,GAAKC,KACvByH,GAAY5F,GAED4F,EAAW9N,EAAMiO,cAAgB,GACnCX,GACTR,EAAW9U,YAAYsV,EAAQQ,GAC/Bd,GAAuBM,EAAQQ,EAC/B9N,EAAMiO,cAAgBjB,IAGtBF,EAAW9U,YAAYgI,EAAMiO,eAC7BjO,EAAMiO,eAAiBjB,EAE/B,MACK,GAAIF,EAAWa,wBAA0BtxC,KAAKuxC,gBAAgBM,OAAQ,CACvE,IAAIJ,EAAWR,EAAQlW,EAAK2W,gBACxBzuC,EAAU83B,KACV0W,EAAW1W,EAAK+W,iBAAmB,GAEnChB,IAAkB/G,GAAKE,OACvBwH,GAAY5F,GAEhB,MAAMkG,EAAYN,EAAW9N,EAAMhJ,UAAY,EAC3CoX,EAAYd,GACZR,EAAW9U,YAAYsV,EAAQc,GAC/BpB,GAAuBM,EAAQc,EAC/BpO,EAAMhJ,UAAYgW,IAGlBF,EAAW9U,YAAYgI,EAAMhJ,WAC7BgJ,EAAMhJ,WAAagW,EAE3B,MAEIF,EAAW9U,YAAYgI,EAAMhJ,UAErC,CACA,MAAMqX,EAAe/sC,KAAK8mC,IAAI9mC,KAAK6E,IAAIwmC,EAAaE,EAAoB,GAAIvrC,KAAK6E,IAAIwmC,EAAa3M,EAAMsO,YAAa,IAC/GC,EAAcjtC,KAAK8mC,IAAI9mC,KAAK6E,IAAIumC,EAAYE,EAAmB,GAAItrC,KAAK6E,IAAIumC,EAAY1M,EAAMI,WAAY,IAGhH,OAFAJ,EAAMI,YAAcmO,EACpBvO,EAAMsO,aAAeD,GACd,CACX,CAMA,WAAAvwC,CAAYsD,GACRxB,QACAvD,KAAK+E,KAAOA,EACZ/E,KAAK6wC,wBAA0BZ,GAA4B/V,OAG3Dl6B,KAAKsxC,sBAAwBpB,GAA0BsB,IACvDxxC,KAAKkY,YAELlY,KAAK66B,SAASxM,EAAO+B,UAAUrrB,GACnC,CAKA,wBAAAotC,CAAyBC,GAErB,OADApyC,KAAKsxC,sBAAwC,iBAATc,EAAoBpwC,GAAWqwC,sBAAsBD,GAAQA,EAC1FpyC,IACX,CAIA,gBAAAsyC,GACI,OAAOtyC,KAAK6wC,uBAChB,CAKA,gBAAA0B,CAAiBH,GAEb,OADApyC,KAAK6wC,wBAA0C,iBAATuB,EAAoBpwC,GAAWwwC,wBAAwBJ,GAAQA,EAC9FpyC,IACX,CAEA,IAAAwW,GACI,MAAMugB,EAAM/2B,KAAKuW,eACXwkB,EAAO/6B,KAAKg7B,oBACZ8V,EAAgB/V,EAAKgW,UAAYhW,EAAKiW,mBAAqBjH,GAAKC,GAChE0G,EAAgB3D,GAAcM,OAAOrtC,KAAKyX,UAC1CkyB,EAAQ5O,EAAK6O,mBAAmB1U,EAAiBkF,MAAOp6B,KAAKgT,OACnEhT,KAAK+W,cAELggB,EAAIthB,OAIJzV,KAAKuV,aACLwhB,EAAI6V,UAAU,aAAc5sC,KAAKuT,aAAa,OAC9CwjB,EAAIvf,QAAQxX,KAAKyX,UACjB,MAAMg7B,EAAa/B,EAAcV,oBAAoBhwC,KAAK+E,MACpD2tC,EAAchC,EAAcf,kBAAkB3vC,KAAK+E,MAAM0F,OAC/D,IAAI9G,EACAkF,EAEAlF,EADA3D,KAAK6wC,0BAA4BZ,GAA4BzV,KACzDmP,EAAMhmC,EAEL3D,KAAK6wC,0BAA4BZ,GAA4BvV,MAC9DiP,EAAMhmC,EAAI8uC,EAETzyC,KAAK6wC,0BAA4BZ,GAA4B/V,OAC9DyP,EAAMhmC,EAAI8uC,EAAa,EAGvB1X,EAAK4X,WAAaF,EAAa,EAEvC,IAAIG,EAAW,CAAC,EACZC,EAAU,EACd,MAAMC,EAAW/X,EAAKgW,UAChBvY,EAAQuC,EAAKxB,aAOnB,GAJIuZ,IACAF,EAAW7X,EAAKgY,YAAYrH,aAC5BmH,EAAUra,EAAMiM,0BAEhBzkC,KAAKsxC,wBAA0BpB,GAA0B2B,OAAQ,CAGjEhpC,EADWkyB,EAAKiY,QACT3tC,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IACrCmE,IAAM7I,KAAK26B,UAAY,GAAKtM,EAAO8D,oBAAsBugB,EACrDI,GAAYhC,IAAkB/G,GAAKE,OACnCphC,EAAI5D,KAAK6E,IAAIjB,EAAG+pC,EAAS3G,KAAOyG,EAAcG,EAAU7yC,KAAK26B,WAErE,MACK,GAAI36B,KAAKsxC,wBAA0BpB,GAA0BhW,OAAQ,CACtE,MAAM+Y,EAAKlY,EAAKmY,eAAelzC,KAAK26B,WAAa,EAEjD9xB,EAAIoqC,GADOza,EAAM2a,kBAAkBnzC,KAAK26B,WACzBsY,GAAM,EAAIP,EAAc,CAC3C,MACK,GAAI1yC,KAAKsxC,wBAA0BpB,GAA0BsB,IAAK,CAEnE3oC,EADa5D,KAAK8mC,OAAOhR,EAAKiY,UAClBhzC,KAAK26B,UAAY,GAAKtM,EAAO8D,oBACrC2gB,GAAYhC,IAAkB/G,GAAKC,KAGnC6I,EAAUD,EAAS3G,KAAOzT,EAAM4a,iBAAmB/kB,EAAO8D,oBAAsB0gB,EAChFhqC,EAAI5D,KAAK8mC,IAAIljC,EAAG+pC,EAAS3G,KAAO4G,GAAW7yC,KAAK26B,UAAY,IAEpE,KACK,CACD,MAAM0Y,EAAUtY,EAAKuY,iBACrBzqC,EAAIwqC,EAAQpH,MAAQoH,EAAQnH,MAAQmH,EAAQpH,MAAQ,EAAIyG,EAAc,CAC1E,EAtPR,YAAc3uC,GACN/B,GAAWyhC,OACX5/B,EAAI,sBAAuBE,EACnC,CAoPQ,CAAE,yBAA0B/D,KAAK+E,KAAMpB,EAAGkF,GAC1CkuB,EAAIwc,SAASvzC,KAAK+E,KAAMpB,EAAGkF,GAC3BkuB,EAAI+V,aACJ9sC,KAAKoW,eACL2gB,EAAI1gB,SACR,EAGJrU,GAAWyhC,OAAQ,EACnBzhC,GAAW2V,UAAYtX,OAAO2X,OAAO,CAAC,EAAGvD,EAAQkD,WAEjD3V,GAAWwxC,kBAAoBvD,GAC/BjuC,GAAWwwC,wBAA0B,CACjCjY,KAAM0V,GAA4BzV,KAClCC,MAAOwV,GAA4BvV,MACnCT,OAAQgW,GAA4B/V,OACpCuZ,WAAYxD,GAA4ByD,aAE5C1xC,GAAWuvC,gBAAkBrB,GAC7BluC,GAAWqwC,sBAAwB,CAC/BlY,MAAO+V,GAA0BsB,IACjCmC,IAAKzD,GAA0BsB,IAC/BnX,MAAO6V,GAA0B2B,OACjC+B,OAAQ1D,GAA0B2B,OAClC5X,OAAQiW,GAA0BhW,OAClCuZ,WAAYvD,GAA0BwD,aC5Q1C,MAAM,MAAEtZ,GAAK,MAAEE,IAAUR,GAASC,SAClC,SAAS8Z,GAAmBC,EAAQ1yC,GAChC,MAA6B,GAAtB0yC,EAAO1yC,EAAQ,GAC1B,CAEA,SAAS2yC,GAAc/vC,EAAM2wB,GACzB,OAAOA,IAAayF,GAAQp2B,GAAQ,EAAIA,GAAQ,CACpD,CACA,SAASgwC,GAAoBhwC,EAAM2wB,GAC/B,OAAIof,GAAc/vC,EAAM2wB,GAChBA,IAAayF,GACNn1B,KAAKgvC,KAGLhvC,KAAK2C,MAIT3C,KAAKgxB,KAEpB,CAeA,MAAMie,GAAsBnZ,GAASl4B,EAAYk4B,IAAS14B,EAAY04B,GA0GtE,MAAMoZ,WAAqBra,GAEvB,mBAAWp4B,GACP,OAAOG,EAASsyC,YACpB,CAmBA,aAAOzQ,CAAOtX,EAAeuX,GACzB,IAAKvX,GAA0C,IAAzBA,EAAcvmB,OAChC,OAAO,EAEX,IAAIuuC,EAAgB,EACpB,MAAMC,EAAe,CAACC,EAActwC,EAAM2wB,IAAakf,GAAmBG,GAAoBhwC,EAAM2wB,GAAWjxB,EAAQ4wC,EAAavkB,MAAM1e,aAAa5G,QAAU,GAFlJ,IAGf2hB,EAAc/W,SAASi/B,IACnB,MAAMvZ,EAAOuZ,EAAatZ,oBAC1BoZ,EAAgBnvC,KAAK6E,IAAIixB,EAAKzJ,gBAAgBjB,WAAY+jB,GAC1D,IAAInD,EAAQ,EACZ,MAAMH,EAAgB/V,EAAKgW,UAAYhW,EAAKiW,mBAAqBjH,GAAKC,GACtE,IAAI6B,EAAa,EAEjB,GAAI9oC,EAAgBg4B,GAAO,CACvB,MAAM7G,EAAO6G,EAAKoW,UACdjd,IACA2X,EAAa5mC,KAAK8C,IAAImsB,EAAKsX,aAAend,EAAO8D,oBAEzD,CACA,MAAMqG,EAAQuC,EAAKmB,WAInB,GAHI1D,IACAyY,EAAQzY,EAAM6Y,eAEdiD,EAAa7Y,gBAAkBrB,GAAO,CACtC,IAAIqX,EAAW1W,EAAK2W,eAAc,GAC9BZ,IAAkB/G,GAAKC,KACvByH,GAAY5F,GAEhB,IAAI0I,EAAYF,EAAaC,EAAc3Q,EAAMiO,cAAexX,IAChE,MAAMoa,EAAS/C,EAAW9N,EAAMiO,cAAgB,IAE3C0C,EAAaA,aAAajoB,eAAiBmoB,EAASvD,IACrDsD,GAAatD,EAAQuD,GAEzBF,EAAa3Y,YAAYgI,EAAMiO,eAC/BjO,EAAMiO,eAAiB2C,CAC3B,MACK,GAAID,EAAa7Y,gBAAkBnB,GAAO,CAC3C,IAAImX,EAAWxsC,KAAK6E,IAAImnC,EAAQlW,EAAK2W,gBAAiB,GAClDZ,IAAkB/G,GAAKE,OACvBwH,GAAY5F,GAEhB,IAAI0I,EAAYF,EAAaC,EAAc3Q,EAAMhJ,UAAWL,IAC5D,MAAMyX,EAAYN,EAAW9N,EAAMhJ,UAAY,IAE1C2Z,EAAaA,aAAajoB,eAAiB0lB,EAAYd,IACxDsD,GAAatD,EAAQc,GAEzBuC,EAAa3Y,YAAYgI,EAAMhJ,WAC/BgJ,EAAMhJ,WAAa4Z,CACvB,KAEJ,MAAM/pC,EAAQ4hB,EACTnY,KAAKqgC,GAAiBA,EAAajkB,aACnChrB,QAAO,CAACovC,EAAUC,IAAezvC,KAAK6E,IAAI4qC,EAAYD,KACrDE,EAAU1vC,KAAK8mC,IAAI9mC,KAAK6E,IAAIU,EAAQ4pC,EAAe,GAAInvC,KAAK6E,IAAIU,GAASm5B,EAAMI,WAAaJ,EAAMsO,aAAc,IAGtH,OAFAtO,EAAMI,YAAc4Q,EAAU,EAC9BhR,EAAMsO,aAAe0C,EAAU,GACxB,CACX,CACA,oBAAOC,EAAc,cAAExoB,GAAiB2O,EAAM8Z,GAC1C,IAAKzoB,EACD,OACJ,MAAM0oB,EAAkB,CACpBC,SAAU,KACVC,OAAQ,KACRC,OAAQ,MAEZ7oB,EACK1jB,MAAM,KACNuL,KAAKihC,GAAgBA,EAAY3lC,OAAO7G,MAAM,OAC9CuL,KAAI,EAAE/C,EAAMyjB,MACb,MAAMpE,EAAQ,CAAE/d,KAAMsiC,EAAgB5jC,IAGtC,OAFIyjB,IACApE,EAAMoE,SAAWmF,GAASE,eAAerF,IACtCkgB,EAAQM,aAAahB,aAAa5jB,EAAM,IAE9Ctc,KAAKsc,GAAUwK,EAAKgO,YAAYxY,EAAO,IAChD,CASA,WAAA9uB,CAAY+Q,GACRjP,QACAvD,KAAKwS,KAAOA,EACZxS,KAAK20B,SAAWyF,GAChBp6B,KAAKipC,eAAiB,CAClBC,WAAY7a,EAAOsD,qBAEvB3xB,KAAKo4B,OACT,CACA,KAAAA,GACIp4B,KAAKs0C,aAAejmB,EAAOiC,kBAAkBtwB,KAAKwS,MAE7CxS,KAAKs0C,eACNt0C,KAAKs0C,aAAe,CAAEjxC,KAAMrD,KAAKwS,KAAM6Z,eAAe,GAClDrsB,KAAKwS,KAAK4iC,SAAS,WACnBp1C,KAAK20B,SAAWyF,IAChBp6B,KAAKwS,KAAK4iC,SAAS,WACnBp1C,KAAK20B,SAAW2F,KAExB,MAAMj3B,GAAQrD,KAAK20B,WAAayF,GAAQp6B,KAAKs0C,aAAa/nB,UAAYvsB,KAAKs0C,aAAa9nB,YAAcxsB,KAAKs0C,aAAajxC,KACxHrD,KAAK+vB,MAAQ,IAAIG,EAAM7sB,QAAmCA,EAAO,GAAIrD,KAAKipC,eAAeC,YACzFxlC,EAAQ1D,KAAK+vB,MAAO,gBAAiB,2BAA2B/vB,KAAKwS,QACrExS,KAAK66B,SAASn3B,EAAQ1D,KAAK+vB,MAAM1e,aAAa7G,OAClD,CAEA,eAAA6qC,CAAgBC,GAAe,GAE3B,OADAt1C,KAAKs0C,aAAajoB,cAAgBipB,EAC3Bt1C,IACX,CAEA,IAAAwW,GACI,MAAMugB,EAAM/2B,KAAKuW,eACXwkB,EAAO/6B,KAAKg7B,oBAClBh7B,KAAK+W,cACL,MAAM/D,EAAQhT,KAAKm7B,cACb,SAAExG,EAAQ,MAAE5E,EAAO4K,UAAW4a,GAAav1C,KAC3Cw1C,EAAqBx1C,KAAKs0C,aAAajoB,cACvCmM,EAAQuC,EAAKxB,aACbkc,EAAajd,EAAMiM,yBACnBiR,EAAQzyC,EAAU83B,IAElB,EAAEp3B,GAAMo3B,EAAK6O,mBAAmBjV,EAAU3hB,GAC1C2iC,GAAyBH,GAAsBE,EAC/CE,EAtLd,SAA0B7a,EAAMpG,GAC5B,MAAMkhB,EAAelhB,IAAayF,IAASW,EAAKiW,qBAAuBjH,GAAKC,IACvErV,IAAa2F,IAASS,EAAKiW,qBAAuBjH,GAAKE,KAC5D,OAAIiK,GAAmBnZ,GACfA,EAAKgW,WAAa8E,EACX,GAKA,EAIP9a,EAAKgW,WAAa8E,EACX,EAGA,CAGnB,CAiK8BC,CAAiB/a,EAAMpG,GACvCohB,EAAU1nB,EAAOC,mBAAmB3c,aAAa,gBAAgBoe,EAAMsI,oBAAqB,GAClG,IAAIxvB,EAAI,CACJ,CAACuxB,IAAQ,KACLrK,EAAMoJ,UAAU,GAAK,GACrB,MAAMtwB,EAvQtB,SAAiBkyB,EAAMwa,GACnB,MAAMzE,EAAgB/V,EAAKiW,oBACnB/E,KAAM+J,EAAU9J,MAAO+J,GAAclb,EAAKuY,iBAClD,GAAIY,GAAmBnZ,GACnB,OAAIA,EAAKgW,UACDD,IAAkB/G,GAAKC,GAChBgM,EAGAC,EAIJhxC,KAAK8mC,OAAOhR,EAAKiY,SAG3B,GAAI/vC,EAAU83B,GACf,OAAIA,EAAKgW,WACDD,IAAkB/G,GAAKC,GAChBgM,EAOJjb,EAAKxB,aAAa2Z,eAAeqC,GAI5C,MAAM,IAAIpyC,EAAa,kBAAmB,gEAElD,CAuO0B+yC,CAAQnb,EAAMwa,IAAaA,EAAWK,GAAiBH,EACjE,OAAOE,EAAwB1wC,KAAK8mC,IAAIvT,EAAM0a,eAAeiB,GAAagC,gBAAiBttC,GAAKA,CAAC,EAErG,CAACyxB,IAAQ,KACLvK,EAAMoJ,UAAU,GAAK,GACrB,MAAMtwB,EA3OtB,SAAoBkyB,EAAMwa,GACtB,MAAMzE,EAAgB/V,EAAKiW,oBACnB/E,KAAM+J,EAAU9J,MAAO+J,GAAclb,EAAKuY,iBAClD,GAAIY,GAAmBnZ,GACnB,OAAIA,EAAKgW,UACDD,IAAkB/G,GAAKC,GAChBiM,EAGAD,EAIJ/wC,KAAK6E,OAAOixB,EAAKiY,SAG3B,GAAI/vC,EAAU83B,GACf,OAAIA,EAAKgW,UACDD,IAAkB/G,GAAKC,GAChBjP,EAAKxB,aAAa4Z,kBAAkBoC,GAGpCS,EAIJjb,EAAKxB,aAAa4Z,kBAAkBoC,GAI/C,MAAM,IAAIpyC,EAAa,kBAAmB,gEAElD,CA2M0BizC,CAAWrb,EAAMwa,IAAaA,EAAWK,GAAiBH,EACpE,OAAOE,EAAwB1wC,KAAK6E,IAAI0uB,EAAM2a,kBAAkBgB,GAAagC,gBAAiBttC,GAAKA,CAAC,GAE1G8rB,KACF,IAAK+gB,EAAO,CACR,MAAMW,EAAkB1hB,IAAayF,IAAS,EAAI,EAC5CqX,EAAW1W,EAAKuJ,cAActxB,GAAOhP,KAErCsyC,GADoBvb,EAAKiY,QAAQhgC,GAASnK,GAAK4sC,EAChBjwC,OAAOisC,GACtC8E,EApSlB,SAAyBf,EAAoBxxC,EAAM2wB,EAAU0hB,GAEzD,MAAME,EAAc1C,GAAmBG,GAAoBhwC,EAAM2wB,GAAW3wB,GAG5E,GAF4BwxC,GAAsBzB,GAAcwC,EAAa5hB,IACzD4hB,EAAc,GAAM,EAGpC,OAAOA,EADkB,IACgBF,EAGzC,OAAOE,CAEf,CAwRgCC,CAAgBhB,EAAoBc,EAAW3hB,EAAU0hB,GACzEtC,GAAcwC,EAAa5hB,IAC3B5E,EAAMoJ,UAAU,GAAK,IACzBtwB,GAAK5D,KAAK8C,IAAIwuC,EAAcD,GAAab,EAAaY,EAAkBN,EAAUM,CACtF,EAjUR,YAActyC,GACNowC,GAAa1Q,OACb5/B,EAAI,wBAAyBE,EACrC,CA+TQ,CAAE,iCAAiCJ,SAASkF,MAC5CknB,EAAMqJ,OAAOrC,EAAKpzB,EAAGkF,EACzB,EAGJsrC,GAAa1Q,OAAQ,EACrB0Q,GAAagC,gBAAkB,GC/UxB,MAAMvzC,GACT,mBAAWlB,GACP,OAAOG,EAASe,aACpB,CACA,QAAIoM,CAAK1G,GACLtI,KAAKwX,QAAQlP,EACjB,CACA,QAAI0G,GACA,OAAOhP,KAAKiY,SAChB,CAKA,UAAAw+B,CAAWnuC,GAEP,OADAtI,KAAKwX,QAAQlP,GACNtI,IACX,EASG,SAAS02C,GAAQ3f,EAAKpzB,EAAGkF,EAAG8tC,EAAQ,QACvC5f,EAAIthB,OACJshB,EAAIhhB,aAAa4gC,GAEjB5f,EAAIQ,YACJR,EAAI6f,IAAIjzC,EAAGkF,EAAG,EAAG,EAAa,EAAV5D,KAAKC,IAAQ,GACjC6xB,EAAI8f,YACJ9f,EAAIa,OACJb,EAAI1gB,SACR,CC3BO,MAAMygC,WAAiBriC,EAC1B,mBAAW/S,GACP,OAAOG,EAASi1C,QACpB,CACA,WAAAr1C,GACI8B,QACAvD,KAAK+2C,eAAgB,EACrB/2C,KAAKg3C,gBAAiB,EAGtBh3C,KAAKqxB,MAAQ,IAAI/rB,EAAS,EAAG,GAC7BtF,KAAKi3C,eAAiB,EACtBj3C,KAAKk3C,eAAiB,IAAI5xC,EAAS,EAAG,GAEtCtF,KAAKwK,MAAQ,EACbxK,KAAK01B,QAAU,EACf11B,KAAKm3C,UAAY,GACjBn3C,KAAKo3C,YAAc,GACnBp3C,KAAKq3C,cAAe,EACpBr3C,KAAKs3C,eAAiB,EAGtBt3C,KAAKu3C,cAAe,EAGpBv3C,KAAKw3C,iBAAmB,CAIpBC,QAAS,CAAEld,KAAM,EAAGE,MAAO,GAG3B1L,SAAU,GAEV2oB,WAAY,EAGZC,MAAO,CACHC,KAAM,EACNC,KAAM,EACNC,UAAW,GAGvB,CAEA,KAAA1f,GACI,OAAOp4B,IACX,CAEA,QAAA+nC,GACI,OAAO/nC,KAAKqxB,KAChB,CAEA,iBAAAwW,GACI,OAAO7nC,KAAKu3C,YAChB,CAEA,cAAAQ,CAAe5jB,GAEX,OADAn0B,KAAKu3C,aAAepjB,EACbn0B,IACX,CAEA,QAAA66B,CAASrwB,GACLxK,KAAKwK,MAAQA,CACjB,CAEA,QAAA6lB,GACI,IAAKrwB,KAAK+2C,cACN,MAAM,IAAI5zC,EAAa,kBAAmB,+CAE9C,OAAOnD,KAAKwK,OAASxK,KAAKs7B,gBAAkBt7B,KAAKs7B,gBAAgBjL,WAAa,EAClF,CAEA,SAAAqI,CAAU/0B,GAEN,OADA3D,KAAK01B,QAAU/xB,EACR3D,IACX,CAEA,SAAAy4B,GACI,OAAOz4B,KAAK01B,OAChB,CAEA,IAAA1sB,GAEI,OADoBhJ,KAAKg4C,iBAAiB,uCACvBhvC,OAAShJ,KAAK01B,OACrC,CAEA,mBAAAuiB,GACI,OAAOj4C,KAAKw3C,gBAChB,CAEA,eAAAU,GACI,OAAIl4C,KAAKm4C,kBACEn4C,KAAKs3C,eAET,CACX,CAEA,eAAAc,CAAgBC,GAEZ,OADAr4C,KAAKs3C,eAAiBe,EACfr4C,IACX,CAEA,eAAAm4C,GACI,OAAOn4C,KAAKq3C,YAChB,CAEA,kBAAAiB,CAAmBjB,GAEf,OADAr3C,KAAKq3C,aAAeA,EACbr3C,IACX,CAKA,QAAAu4C,GACI,OAAO70C,EAAQ1D,KAAK0nC,MAAO,UAAW,yBAC1C,CAEA,QAAA8Q,CAAS9Q,GACL1nC,KAAK0nC,MAAQA,CACjB,CAEA,SAAA+Q,GACI,OAAOz4C,KAAK04C,MAChB,CAEA,cAAAC,GACI,OAAO34C,KAAKo3C,WAChB,CAMA,WAAAwB,CAAYF,GACR,IAAIG,EACAC,EACJ,GAAIJ,EAAQ,CACR,MAAMjwC,EAAIzI,KAAKo3C,YAAY1gC,QAAQgiC,GAQnC,OAPW,IAAPjwC,IACAzI,KAAKo3C,YAAYvgC,OAAOpO,EAAG,GAC3BowC,EAAYH,EAAOK,eACnBD,EAAgBJ,EAAOM,mBAEvBh5C,KAAKi5C,oBAAoBJ,EAAWC,IAEjC94C,IACX,CACA,KAAOA,KAAKo3C,YAAYvxC,QAEpBgzC,GADAH,EAAS14C,KAAKo3C,YAAY8B,OACPH,eACnBD,EAAgBJ,EAAOM,mBAEvBh5C,KAAKi5C,oBAAoBJ,EAAWC,GAExC,OAAO94C,IACX,CAEA,SAAAm5C,CAAUT,GACN,GAAIA,EAAQ,CACR14C,KAAKo3C,YAAYliC,KAAKwjC,GACtB,MAAMG,EAAYH,EAAOK,eACnBD,EAAgBJ,EAAOM,mBAC7Bh5C,KAAKi5C,oBAAoBH,EAAeD,EAC5C,CAEA,OADA74C,KAAK04C,OAASA,EACP14C,IACX,CAMA,oBAAAo5C,CAAqBC,GACjBr5C,KAAKs7B,gBAAkB+d,EACvB,IAAK,IAAI5wC,EAAI,EAAGA,EAAIzI,KAAKm3C,UAAUtxC,SAAU4C,EACzCzI,KAAKs7B,gBAAgBge,UAAUt5C,KAAKm3C,UAAU1uC,IAIlD,OAFAzI,KAAKs7B,gBAAgBge,UAAUt5C,MAC/BA,KAAK+2C,eAAgB,EACd/2C,IACX,CAMA,WAAA+oC,CAAYD,EAAU91B,EAAQ,GAG1B,OAFAhT,KAAKm3C,UAAUjiC,KAAK4zB,GACpB9oC,KAAK+2C,eAAgB,EACd/2C,IACX,CAEA,YAAA6oC,GACI,OAAO7oC,KAAKm3C,SAChB,CAEA,cAAAoC,CAAeC,GACXx5C,KAAKg8B,YAAcwd,EACnBx5C,KAAK+2C,eAAgB,CACzB,CACA,gBAAAiB,CAAiB10C,EAAU,iCACvB,OAAOI,EAAQ1D,KAAKg8B,YAAa,gBAAiB14B,EACtD,CAEA,SAAAm2C,GACQz5C,KAAK+2C,gBAET/2C,KAAKwK,MAAQ,EACTxK,KAAKs7B,kBACLt7B,KAAKs7B,gBAAgBme,YACrBz5C,KAAKwK,OAASxK,KAAKs7B,gBAAgBjL,YAE3C,CAEA,gBAAIqpB,CAAat4C,GACbpB,KAAK+2C,cAAgB31C,CACzB,CACA,gBAAIs4C,GACA,OAAO15C,KAAK+2C,aAChB,CAEA,UAAA4C,GACI,OAAI35C,KAAKg3C,iBAETh3C,KAAKg3C,gBAAiB,GADXh3C,IAGf,CAEA,iBAAI45C,CAAcx4C,GACdpB,KAAKg3C,eAAiB51C,CAC1B,CACA,iBAAIw4C,GACA,OAAO55C,KAAKg3C,cAChB,CAEA,iBAAA6C,GACI,OAAO75C,KAAKi3C,cAChB,CAEA,iBAAA6C,CAAkB7C,GACdj3C,KAAKi3C,eAAiBA,EACtBj3C,KAAKqxB,MAAQrxB,KAAKk3C,eAAezvC,QAAQX,SAAS9G,KAAKi3C,eAC3D,CAEA,iBAAA8C,GACI,OAAO/5C,KAAKk3C,cAChB,CAEA,mBAAA+B,CAAoBlzC,EAAWC,GAC3BhG,KAAKk3C,eAAepwC,SAASf,EAAWC,GACxChG,KAAKqxB,MAAQrxB,KAAKk3C,eAAezvC,QAAQX,SAAS9G,KAAKi3C,eAC3D,CAEA,WAAA+C,CAAYjrB,GACR,MAAMsC,EAAQtC,EAAShpB,WAAasoB,EAAO9V,WAAawW,EAAS/oB,aACjEhG,KAAKqxB,MAAQrxB,KAAKk3C,eAAezvC,QAAQX,SAASuqB,GAClDrxB,KAAKi3C,eAAiBj3C,KAAKqxB,MAAMjwB,OACrC,CACA,YAAA64C,GAEI,OADoBj6C,KAAKg4C,iBAAiB,+CACvBhvC,MACvB,CAEA,kBAAAwyB,CAAmB6d,GAEf,OADAr5C,KAAKs7B,gBAAkB+d,EAChBr5C,IACX,CAEA,kBAAAq7B,GACI,OAAOr7B,KAAKs7B,eAChB,CAEA,oBAAAC,GACI,OAAO73B,EAAQ1D,KAAKs7B,gBAAiB,oBAAqB,iDAC9D,EC9QG,MAAM54B,WAAao0C,GAGtB,mBAAWp1C,GACP,OAAOG,EAASa,IACpB,CAEA,kBAAOw3C,CAAYnjB,EAAKgE,EAAMzB,GAC1B,MAAMvoB,EAAUgqB,EAAK1pB,aACf8oC,EAASpf,EAAKkf,eAAiBlpC,EAAQqrB,UAAYrrB,EAAQqpC,oBAC3DC,EAAQtf,EAAKkf,eAAiBlpC,EAAQqpC,oBACtCE,EAAOvf,EAAKkf,eACZM,EAASxf,EAAKkf,eAAiBlpC,EAAQypC,OACvCC,EAAS1f,EAAKkf,eAAiBlpC,EAAQypC,OAASzpC,EAAQ2pC,qBACxDC,EAAO5f,EAAKkf,eAAiBlpC,EAAQypC,OAASzpC,EAAQ2pC,qBAAuB3pC,EAAQsrB,WACrFue,EAAgBD,GAAQ5f,EAAKkd,sBAAsBR,QAAQhd,OAAS,GACpEogB,EAASF,EAAOR,EACtBpjB,EAAIthB,OACJshB,EAAIvf,QAAQ/J,EAAKkB,WAAY,GAC7BooB,EAAIwc,SAAStuC,KAAKgxB,MAAM4kB,GAAU,KAAMV,EAASpf,EAAKtC,YAAaa,GACnE,MAAMzwB,EAAIywB,EAAO,EACjB,SAASnK,EAAOllB,EAAIG,EAAIusC,EAAOmE,EAAKjyC,GAChCkuB,EAAIQ,YACJR,EAAI9gB,eAAe0gC,GACnB5f,EAAIhhB,aAAa4gC,GACjB5f,EAAI5gB,aAAa,GACjB4gB,EAAIS,OAAOvtB,EAAK8wB,EAAKtC,YAAaqiB,GAClC/jB,EAAIU,OAAOrtB,EAAK2wB,EAAKtC,YAAaqiB,GAClC/jB,EAAI5H,QACR,CACAA,EAAOgrB,EAAQE,EAAO,OACtBlrB,EAAOkrB,EAAOC,EAAM,QACpBnrB,EAAOmrB,EAAMC,EAAQ,SACrBprB,EAAOorB,EAAQE,EAAQ,QACvBtrB,EAAOsrB,EAAQE,EAAM,OACrBxrB,EAAOwrB,EAAMC,EAAe,QAC5BzrB,EAAOgrB,EAASpf,EAAKtC,YAAa0hB,EAAQ,QAC1CzD,GAAQ3f,EAAKujB,EAAOvf,EAAKtC,YAAa5vB,EAAG,QACzC,MAAM2uC,EAAmBzc,EAAKkd,sBAC9B,GAAIT,EAAiBE,WAAa,EAAG,CACjC,MAAMqD,EAAiBvD,EAAiBG,MAAMG,UACxChzC,EAASi2C,GAAkB,EAAI,IAAM,GAC3ChkB,EAAIhhB,aAAa,OACjBghB,EAAIwc,SAASzuC,EAASG,KAAKgxB,MAAM8kB,GAAiBT,EAAOvf,EAAKtC,YAAaa,EAAO,GACtF,CACAvC,EAAI1gB,SACR,CACA,oBAAO2kC,CAAcC,GACjB,IAAKA,EACD,OAEJ,MACM9tC,EADS,mCACOq0B,KAAKyZ,GAC3B,IAAK9tC,EACD,OAKJ,MAAO,CAAE4hB,SAHQ5hB,EAAO,GAGL+tC,KAFN/tC,EAAO,GAAGtH,OAEE2M,KADZrF,EAAO,IAAM,IAE9B,CACA,sBAAOguC,CAAgBC,GAEnB,MAAMC,EAAgB34C,GAAKs4C,cAAcI,EAAWrsB,UACpD,IAAKssB,EACD,OAGJ,IAAI7oC,EAAO4oC,EAAW5oC,KACtB,GAAIA,IAAS6b,EAAOiF,WAAW9gB,GAC3B,OAGJ,MAAM8oC,EAAc,GACf9oC,IACDA,EAAO6oC,EAAc7oC,MAAQ,SAEL5O,IAApBw3C,EAAWpnC,MACXonC,EAAWpnC,KAAKqB,SAAQ,CAACnB,EAAGzL,KACxB,MAAM0E,EAAS+G,EAAExL,MAAM,KAEvB4yC,EAAY7yC,GAAM0E,GAA4B,IAAlBA,EAAOtH,OAAesH,EAAO,GAAKqF,CAAK,KAK/E,IAAI6e,EAAQhD,EAAO+C,gBAAgBiqB,EAActsB,UACjD,IAAKsC,EACD,OAGJ,MAAM6pB,EAAOE,EAAWF,KAAOE,EAAWF,KAAOG,EAAcH,KAC/D,GAAoB,iBAATA,EACP,OAGJ,IAAIK,EAAelqB,EACnB,IAAK,IAAI5oB,EAAI,EAAGA,EAAIyyC,EAAMzyC,IAAK,CAC3B,GAAI8yC,GAAgB,EAChB,OACJA,GAA8B,EAC9BlqB,GAASkqB,CACb,CACA,MAAO,CACHxsB,SAAUssB,EAActsB,SACxBvc,OACA8oC,cACAJ,OACA7pB,QAER,CAOA,WAAA5vB,CAAY25C,GAER,GADA73C,SACK63C,EACD,MAAM,IAAIj4C,EAAa,eAAgB,2EAG3C,MAAMq4C,EAAmB94C,GAAKy4C,gBAAgBC,GAC9C,IAAKI,EACD,MAAM,IAAIr4C,EAAa,eAAgB,uCAAuCs4C,KAAKC,UAAUN,MAGjGp7C,KAAKgU,KAAOonC,EAAWpnC,MAAQ,GAE/BhU,KAAK27C,SAAW,GAChB37C,KAAK+uB,SAAWysB,EAAiBzsB,SACjC/uB,KAAK47C,SAAWJ,EAAiBhpC,KACjCxS,KAAKs7C,YAAcE,EAAiBF,YAChCF,EAAWS,kBAEX77C,KAAKg6C,YAAYoB,EAAWS,mBAI5B77C,KAAK85C,kBAAkB0B,EAAiBnqB,OAE5CrxB,KAAKm3C,UAAY,GAEjBn3C,KAAK87C,WAAaztB,EAAOiD,cAActxB,KAAK+uB,SAAU/uB,KAAK47C,UAC3D57C,KAAK+7C,aAAe/7C,KAAKs7C,YAAYrnC,KAAKvO,GAAM2oB,EAAOiD,cAActxB,KAAK+uB,SAAUrpB,KAEpF1F,KAAKg8C,cAAWp4C,EAEhB5D,KAAKu3C,cAAe,EAEpBv3C,KAAKwK,MAAQ,EACbxK,KAAKo6C,oBAAsB,EAC3Bp6C,KAAK06C,qBAAuB,EAC5B16C,KAAK01B,QAAU,EACf11B,KAAK4rC,GAAK,GAENwP,EAAW/D,cACXr3C,KAAKs4C,mBAAmB8C,EAAW/D,cAGvCr3C,KAAKipC,eAAiB,CAClBgT,mBAAoB,EACpBC,iBAAkB,EAClBC,UAAW,EACXrsB,MAAO,EACP9gB,KAAM,GACN2mB,QAAS,EAEjB,CAKA,WAAAymB,GACI,OAAOp8C,KAAKg8C,QAChB,CAKA,WAAAK,CAAYthB,GAER,OADA/6B,KAAKg8C,SAAWjhB,EACT/6B,IACX,CAOA,MAAAsoC,GACI,OAAO,CACX,CAEA,SAAAgU,CAAUtpC,EAAOmc,GAKb,OAJAA,EAAO8L,QAAQj7B,MACfmvB,EAAOiM,SAASpoB,GAChBhT,KAAKm3C,UAAUjiC,KAAKia,GACpBnvB,KAAK05C,cAAe,EACb15C,IACX,CAEA,QAAAk8B,GACI,OAAOl8B,KAAKw4B,KAChB,CAEA,UAAAe,GACI,OAAO71B,EAAQ1D,KAAKw4B,MAAO,UAAW,iCAC1C,CAEA,QAAAD,CAASC,GAIL,OAHAx4B,KAAKw4B,MAAQA,EACbx4B,KAAKu8C,MAAM,CAAC/jB,EAAMkM,YAAY,KAC9B1kC,KAAKuX,WAAWvX,KAAKw4B,MAAMlhB,cACpBtX,IACX,CAEA,sBAAAukC,GACI,OAAOvkC,KAAKo6C,mBAChB,CAEA,uBAAAoC,GACI,OAAOx8C,KAAK06C,oBAChB,CAEA,sBAAA+B,CAAuB94C,GAEnB,OADA3D,KAAKo6C,oBAAsBz2C,EACpB3D,IACX,CAEA,uBAAA08C,CAAwB/4C,GAEpB,OADA3D,KAAK06C,qBAAuB/2C,EACrB3D,IACX,CAEA,iBAAA6nC,GACI,OAAO7nC,KAAKu3C,YAChB,CAGA,aAAA7F,CAAciL,GACV,OAAO,CACX,CAEA,cAAAC,GACI,OAAO,CACX,CAKA,QAAAC,GACI,OAAO78C,KAAK87C,UAChB,CAEA,aAAAxqB,GACI,OAAOtxB,KAAK87C,UAChB,CAEA,aAAAgB,GACI,OAAO98C,KAAK87C,WAAWzrB,SAASrwB,KAAKipC,eAAeiT,iBACxD,CAKA,KAAAK,CAAM3Q,GAEF,OADA5rC,KAAK4rC,GAAKA,EACH5rC,IACX,CAKA,KAAAgzC,GACI,GAAuB,IAAnBhzC,KAAK4rC,GAAG/lC,OACR,MAAM,IAAI1C,EAAa,YAAa,yCAExC,OAAOnD,KAAK4rC,EAChB,CAKA,cAAAsH,CAAevY,GACX,OAAO36B,KAAKu5B,aAAa2Z,eAAevY,EAC5C,CAEA,QAAA4d,GACI,IAAKv4C,KAAK0nC,MACN,MAAM,IAAIvkC,EAAa,UAAW,sBACtC,OAAOnD,KAAK0nC,KAChB,CAEA,QAAA8Q,CAAS9Q,GAGL,OAFA1nC,KAAK0nC,MAAQA,EACb1nC,KAAK05C,cAAe,EACb15C,IACX,CAEA,cAAAi8B,GACI,OAAOj8B,KAAKg4C,kBAChB,CAEA,cAAAuB,CAAeC,GAGX,OAFAx5C,KAAKg8B,YAAcwd,EACnBx5C,KAAK05C,cAAe,EACb15C,IACX,CAEA,WAAA+8C,GACI,OAAO/8C,KAAK+uB,QAChB,CAEA,QAAAiuB,GACI,OAAOh9C,KAAKi9C,mBAAmBp7C,EAASO,KAAKyD,OAAS,CAC1D,CAEA,OAAAkrC,GACI,OAAO,CACX,CAEA,WAAAK,GACI,OAAOpxC,KAAK47C,QAChB,CAEA,OAAAsB,GACI,OAAOl9C,KAAKm9C,IAChB,CAEA,SAAAC,GACI,OAAO15C,EAAQ1D,KAAKm9C,KAAM,SAAU,+BACxC,CAEA,OAAAE,GACI,OAAoBz5C,MAAb5D,KAAKm9C,IAChB,CAEA,OAAAG,CAAQH,GAEJ,OADAn9C,KAAKm9C,KAAOA,EACLn9C,IACX,CAOA,WAAA+oC,CAAYD,EAAU91B,EAAQ,GAC1B,MAAMuqC,EAAY,wDASlB,GAPqB,iBAAVvqC,IACPA,EAAQnO,SAASmO,GAEjB5O,QAAQC,KAAKk5C,EAAY,2DAIL,iBAAbzU,GAA0C,iBAAV91B,EACvC,MAAM,IAAI7P,EAAa,cAAe,iCAAmCo6C,EAAY,aAKzF,OAHAzU,EAAS7N,QAAQj7B,MACjB8oC,EAAS1N,SAASpoB,GAClBzP,MAAMwlC,YAAYD,GACX9oC,IACX,CAEA,kBAAAi9C,CAAmBzqC,GACf,OAAOxS,KAAKm3C,UAAUqG,QAAQ1U,GAAaA,EAASh0B,gBAAkBtC,GAC1E,CAGA,kBAAAo3B,CAAmBjV,EAAU3hB,EAAO6b,GAChC,IAAK7uB,KAAK05C,aACN,MAAM,IAAIv2C,EAAa,kBAAmB,wDAE9C,MAAO,CACHQ,EAAG3D,KAAKi6C,eACRpxC,EAAG7I,KAAK4rC,GAAG,GAEnB,CACA,qBAAA6R,CAAsBzqC,GAElB,OADchT,KAAKskC,cAActxB,GACpBwc,UAAYxvB,KAAKw8C,0BAA4B,CAC9D,CACA,oBAAAkB,CAAqB1qC,GAEjB,OADchT,KAAKskC,cAActxB,GACpBwc,UAAYxvB,KAAKukC,yBAA2BvkC,KAAK01B,SAAW11B,KAAK01B,OAClF,CACA,aAAAioB,GACI,IAAI3rC,EAAKhS,KAAKw8C,0BAGd,OAFqE,IAAjEx8C,KAAKu7B,uBAAuBqiB,WAAW,eAAe/3C,SACtDmM,GAAMqc,EAAOC,mBAAmB3c,aAAa,8BAC1CK,CACX,CAEA,UAAAX,GACI,IAAKrR,KAAK05C,aACN,MAAM,IAAIv2C,EAAa,kBAAmB,iDAE9C,MAAMi5B,EAAYp8B,KAAKs7B,gBAAkBt7B,KAAKs7B,gBAAgBuiB,WAAW9Z,WAAa,EAChF1H,EAAar8B,KAAKs7B,gBAAkBt7B,KAAKs7B,gBAAgBuiB,WAAW5L,YAAc,EAClFznC,EAAQxK,KAAKqwB,WAQnB,MAAO,CACH7lB,QACAomC,WATe5wC,KAAK88C,gBAUpBtC,OATWhwC,EACX4xB,EACAC,EACAr8B,KAAKo6C,oBACLp6C,KAAK06C,qBAOLte,YACAC,aAEA+d,oBAAqBp6C,KAAKo6C,oBAC1BM,qBAAsB16C,KAAK06C,qBAC3BoD,QAAS,EAEjB,CAMA,YAAA7D,GAGI,IAAIt2C,EAFgB3D,KAAKg4C,iBAAiB,+CAEtBhvC,OAOpB,OANIhJ,KAAKw4B,QACL70B,GAAK3D,KAAKw4B,MAAMulB,gBAAkB1vB,EAAOC,mBAAmB3c,aAAa,kBAEzE3R,KAAKm4C,oBACLx0C,GAAK3D,KAAKk4C,mBAEPv0C,CACX,CAEA,eAAOq6C,CAAS1vC,GAEZ,MAAe,WAARA,EAAoB+f,EAAOsD,oBAAuBtD,EAAOsD,oBAAsB,EAAK,CAC/F,CAEA,gBAAAqf,GACI,MAAM,IAAI7tC,EAAa,SAAU,iCACrC,CAEA,cAAAmwC,GACI,MAAM,IAAInwC,EAAa,SAAU,iCACrC,CAEA,YAAA86C,GACI,IAAIC,EAAYl+C,KAAKi6C,eAIrB,OAFAiE,GADyBl+C,KAAK87C,WAAWzrB,WACT,EAChC6tB,IAAcl+C,KAAKwK,MAAQ,EAAIxK,KAAKwK,MAAQ,EACrC0zC,CACX,CAEA,WAAAC,GACI,IAAIC,EAAUp+C,KAAKi6C,eAInB,OAFAmE,GADyBp+C,KAAK87C,WAAWzrB,WACX,EAC9B+tB,GAAWp+C,KAAKwK,MAAQ,EAAI,EACrB4zC,CACX,CAEA,OAAAC,GACI,OAAOr+C,KAAKgU,IAChB,CAEA,WAAAswB,GACI,OAAOtkC,KAAK27C,QAChB,ECveG,IAAI2C,GCDAC,GCiBAC,GAOAC,GAKAC,GAMAC,IFjCX,SAAWL,GACPA,EAAsBA,EAA8B,OAAI,GAAK,SAC7DA,EAAsBA,EAA4B,KAAI,GAAK,OAC3DA,EAAsBA,EAA6B,MAAI,GAAK,QAC5DA,EAAsBA,EAA6B,MAAI,GAAK,QAC5DA,EAAsBA,EAA6B,MAAI,GAAK,QAC5DA,EAAsBA,EAA6B,MAAI,GAAK,QAC5DA,EAAsBA,EAA2B,IAAI,GAAK,KAC7D,CARD,CAQGA,KAA0BA,GAAwB,CAAC,IAC/C,MAAMM,WAAsBnqC,EAC/B,mBAAW/S,GACP,OAAOG,EAAS+8C,aACpB,CACA,mBAAW7kB,GACP,OAAOukB,EACX,CACA,WAAA78C,GACI8B,QACAvD,KAAKwK,MAAQ,EACbxK,KAAK2D,EAAI,EACT3D,KAAK+1C,QAAU,GACf/1C,KAAK20B,SAAW2pB,GAAsBlkB,KAC1C,CACA,WAAAqB,GACI,OAAOz7B,KAAK20B,QAChB,CACA,WAAA+G,CAAY/G,GAER,OADA30B,KAAK20B,SAAWA,EACT30B,IACX,CACA,QAAAk8B,GACI,OAAOl8B,KAAKw4B,KAChB,CACA,UAAAe,GACI,OAAO71B,EAAQ1D,KAAKw4B,MAAO,UAAW,iCAC1C,CACA,QAAAD,CAASC,GAEL,OADAx4B,KAAKw4B,MAAQA,EACNx4B,IACX,CACA,QAAAqwB,GACI,OAAOrwB,KAAKwK,KAChB,CACA,QAAAqwB,CAASrwB,GAEL,OADAxK,KAAKwK,MAAQA,EACNxK,IACX,CACA,IAAAgJ,GACI,OAAOhJ,KAAK2D,CAChB,CACA,IAAAyF,CAAKzF,GAED,OADA3D,KAAK2D,EAAIA,EACF3D,IACX,CAUA,gBAAA6+C,CAAiB9uB,EAAOyI,EAAOx0B,EAAM86C,EAAc,GAC/C/uB,EAAM6I,UAAUJ,EAAMkM,YAAY1gC,QAAmCA,EAAO,GAAKw0B,EAAMiB,gBAAkBqlB,EAC7G,CACA,UAAAC,CAAW/rC,GACP,YAAiBpP,IAAVoP,GAAuBA,EAAQ,EAAI,EAAIhT,KAAK+1C,OACvD,CACA,UAAAiJ,CAAWjJ,GAEP,OADA/1C,KAAK+1C,QAAUA,EACR/1C,IACX,CACA,gBAAAi/C,CAAiBC,GAEb,OADAl/C,KAAKk/C,cAAgBA,EACdl/C,IACX,CACA,gBAAAm/C,GACI,OAAOn/C,KAAKk/C,aAChB,CAEA,IAAA1oC,IAAQzS,GAER,GCpFJ,SAAWw6C,GACPA,EAAYA,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAAiB,IAAI,GAAK,MACtCA,EAAYA,EAA0B,aAAI,GAAK,eAC/CA,EAAYA,EAAwB,WAAI,GAAK,aAC7CA,EAAYA,EAAyB,YAAI,GAAK,cAC9CA,EAAYA,EAAkB,KAAI,GAAK,MAC1C,CARD,CAQGA,KAAgBA,GAAc,CAAC,IAC3B,MAAMr8C,WAAgB08C,GACzB,mBAAWl9C,GACP,OAAOG,EAASK,OACpB,CACA,eAAWsQ,GACP,OAAO+rC,EACX,CACA,qBAAWa,GACP,MAAO,CACHC,OAAQd,GAAYe,OACpBC,OAAQhB,GAAYiB,OACpBC,IAAKlB,GAAYmB,IACjBC,YAAapB,GAAYqB,aACzBC,UAAWtB,GAAYuB,WACvBC,WAAYxB,GAAYyB,YACxBC,KAAM1B,GAAY2B,KAE1B,CACA,WAAAz+C,CAAY+Q,GACRjP,QACAvD,KAAKmgD,UAAY9xB,EAAO2D,qBACxB,MAAMouB,EAAO7B,GACbv+C,KAAKqgD,OAAS,CAAC,EACfrgD,KAAKqgD,OAAOD,EAAKd,QAAU,EAC3Bt/C,KAAKqgD,OAAOD,EAAKZ,QAAU,EAC3Bx/C,KAAKqgD,OAAOD,EAAKV,KAAO,EACxB1/C,KAAKqgD,OAAOD,EAAKR,cAAgB,EACjC5/C,KAAKqgD,OAAOD,EAAKN,YAAc,EAC/B9/C,KAAKqgD,OAAOD,EAAKJ,aAAe,EAChChgD,KAAKqgD,OAAOD,EAAKF,MAAQ,EACzBlgD,KAAKsgD,SAAW,CAAC,EACjBtgD,KAAKsgD,SAASF,EAAKd,QAAU,EAC7Bt/C,KAAKsgD,SAASF,EAAKZ,QAAU,EAC7Bx/C,KAAKsgD,SAASF,EAAKV,KAAO,EAC1B1/C,KAAKsgD,SAASF,EAAKR,cAAgB,GACnC5/C,KAAKsgD,SAASF,EAAKN,YAAc,GACjC9/C,KAAKsgD,SAASF,EAAKJ,aAAe,GAClChgD,KAAKsgD,SAASF,EAAKF,MAAQ,EAC3BlgD,KAAKugD,iBAAmB,CAAC,EACzBvgD,KAAKugD,iBAAiBH,EAAKd,QAAU,CACjCkB,KAAM,EACNC,KAAM,EACNC,YAAa,EACbC,aAAc,GAElB3gD,KAAKugD,iBAAiBH,EAAKZ,QAAU,CACjCgB,MAAO,EACPC,KAAM,EACNC,YAAa,EACbC,aAAc,GAElB3gD,KAAKugD,iBAAiBH,EAAKV,KAAO,CAC9Bc,MAAO,EACPC,KAAM,EACNC,YAAa,EACbC,aAAc,GAElB3gD,KAAKugD,iBAAiBH,EAAKN,YAAc,CACrCU,MAAO,GACPC,KAAM,EACNC,YAAa,EACbC,aAAc,GAElB3gD,KAAKugD,iBAAiBH,EAAKR,cAAgB,CACvCY,MAAO,EACPC,KAAM,GACNC,YAAa,EACbC,aAAc,GAElB3gD,KAAKugD,iBAAiBH,EAAKJ,aAAe,CACtCQ,MAAO,GACPC,KAAM,GACNC,YAAa,EACbC,aAAc,GAElB3gD,KAAKugD,iBAAiBH,EAAKF,MAAQ,CAC/BM,KAAM,EACNC,KAAM,EACNC,YAAa,EACbC,aAAc,GAElB3gD,KAAK07B,YAAY4iB,GAAsBsC,OACvC5gD,KAAK6gD,QAAQruC,EACjB,CACA,OAAAsuC,GACI,OAAO9gD,KAAKwS,IAChB,CACA,OAAAquC,CAAQruC,GAKJ,OAJAxS,KAAKwS,KAAuB,iBAATA,EAAoBtQ,GAAQk9C,WAAW5sC,GAAQA,EAClExS,KAAK66B,SAAS76B,KAAKqgD,OAAOrgD,KAAKwS,OAC/BxS,KAAKg/C,WAAWh/C,KAAKsgD,SAAStgD,KAAKwS,OACnCxS,KAAKi/C,iBAAiBj/C,KAAKugD,iBAAiBvgD,KAAKwS,OAC1CxS,IACX,CAEA,IAAAwW,CAAKgiB,GACD,MAAMzB,EAAMyB,EAAMjiB,eAIlB,OAHAvW,KAAK+W,cACL/W,KAAKuV,WAAWwhB,GAChBA,EAAI6V,UAAU,eAAgB5sC,KAAKuT,aAAa,OACxCvT,KAAKwS,MACT,KAAK+rC,GAAYe,OACbt/C,KAAK+gD,gBAAgBvoB,EAAOx4B,KAAK2D,GAAG,GACpC,MACJ,KAAK46C,GAAYiB,OACbx/C,KAAK+gD,gBAAgBvoB,EAAOx4B,KAAK2D,GAAG,GACpC,MACJ,KAAK46C,GAAYmB,IACb1/C,KAAKghD,mBAAmBxoB,EAAOx4B,KAAK2D,GACpC,MACJ,KAAK46C,GAAYqB,aAGb5/C,KAAKihD,cAAczoB,EAAOx4B,KAAK2D,GAAG,GAC9B60B,EAAMxvB,SAAWhJ,KAAK2D,GACtB3D,KAAK+gD,gBAAgBvoB,EAAOA,EAAMxvB,QAEtC,MACJ,KAAKu1C,GAAYuB,WACb9/C,KAAKihD,cAAczoB,EAAOx4B,KAAK2D,GAAG,GAClC,MACJ,KAAK46C,GAAYyB,YACbhgD,KAAKihD,cAAczoB,EAAOx4B,KAAK2D,GAAG,GAClC3D,KAAKihD,cAAczoB,EAAOx4B,KAAK2D,GAAG,GAM1CozB,EAAI+V,aACJ9sC,KAAKoW,aAAa2gB,EACtB,CACA,eAAAgqB,CAAgBvoB,EAAO70B,EAAGu9C,GACtB,MAAMC,EAAW3oB,EAAMjiB,eACjB01B,EAAOzT,EAAM4a,iBACbgO,EAAO5oB,EAAM6oB,uBACfH,GACAC,EAASG,SAAS39C,EAAI,EAAGsoC,EAAM,EAAGmV,EAAOnV,GAE7CkV,EAASG,SAAS39C,EAAGsoC,EAAM,EAAGmV,EAAOnV,EACzC,CACA,kBAAA+U,CAAmBxoB,EAAO70B,GACtB,MAAMw9C,EAAW3oB,EAAMjiB,eACjB01B,EAAOzT,EAAM4a,iBACbgO,EAAO5oB,EAAM6oB,uBACnBF,EAASG,SAAS39C,EAAI,EAAGsoC,EAAM,EAAGmV,EAAOnV,GACzCkV,EAASG,SAAS39C,EAAI,EAAGsoC,EAAM,EAAGmV,EAAOnV,EAC7C,CACA,aAAAgV,CAAczoB,EAAO70B,EAAG49C,GACpB,MAAMJ,EAAW3oB,EAAMjiB,eACjB01B,EAAOzT,EAAM4a,iBACbgO,EAAO5oB,EAAM6oB,uBACnB,IAAI3rB,EAAU,EACT6rB,IACD7rB,GAAW,GAEfyrB,EAASG,SAAS39C,EAAI+xB,EAASuW,EAAM,EAAGmV,EAAOnV,GAC/CkV,EAASG,SAAS39C,EAAI,EAAGsoC,EAAM,EAAGmV,EAAOnV,GAGrCsV,EACA7rB,GAAW,EAGXA,GAAW,EAEf,MAAM8rB,EAAQ79C,EAAI+xB,EAAU+rB,EAE5B,IAAIhW,GAAYjT,EAAM6Y,cAAgB,GAAK7Y,EAAMiM,yBACjDgH,EAAWA,EAAW,EAAIjT,EAAMiM,yBAA2B,EAC3D,IAAIid,EAAQzV,EAAOR,EAAWgW,EAE9BN,EAAS5pB,YACT4pB,EAASvK,IAAI4K,EAAOE,EAfD,EAeoB,EAAa,EAAVz8C,KAAKC,IAAQ,GACvDi8C,EAASvpB,OAET8pB,GAASlpB,EAAMiM,yBACf0c,EAAS5pB,YACT4pB,EAASvK,IAAI4K,EAAOE,EApBD,EAoBoB,EAAa,EAAVz8C,KAAKC,IAAQ,GACvDi8C,EAASvpB,MACb,EElLJ,MAAM+pB,WAAgBj/C,GAClB,mBAAWhB,GACP,OAAOG,EAAS8/C,OACpB,CACA,WAAAlgD,CAAY+Q,EAAO+rC,GAAYe,QAC3B/7C,MAAM,CAAEwrB,SAAU,MAClB/uB,KAAK+Q,QAAU,CACXsvC,OAAQ,CAAC,GAEb,MAAMD,EAAO7B,GACbv+C,KAAK+Q,QAAQsvC,OAAS,CAClB,CAACD,EAAKd,QAAS,EACf,CAACc,EAAKZ,QAAS,GACf,CAACY,EAAKV,KAAM,GACZ,CAACU,EAAKR,cAAe,GACrB,CAACQ,EAAKN,YAAa,GACnB,CAACM,EAAKJ,aAAc,GACpB,CAACI,EAAKF,MAAO,GAGjBlgD,KAAKu3C,cAAe,EACpBv3C,KAAK6gD,QAAQruC,GACbxS,KAAK4hD,QAAU,IAAI1/C,GAAQsQ,EAC/B,CAEA,OAAAsuC,GACI,OAAO9gD,KAAKwS,IAChB,CAEA,OAAAquC,CAAQruC,GAIJ,OAHAxS,KAAKwS,KAAuB,iBAATA,EAAoBtQ,GAAQk9C,WAAW5sC,GAAQA,EAElExS,KAAK66B,SAAS76B,KAAK+Q,QAAQsvC,OAAOrgD,KAAKwS,OAChCxS,IACX,CAGA,oBAAAo5C,CAAqBC,GAEjB,OAAOr5C,IACX,CAEA,SAAAy5C,GAEI,OADAz5C,KAAK05C,cAAe,EACb15C,IACX,CAEA,IAAAwW,GACI,MAAMugB,EAAM/2B,KAAKuW,gBA3DzB,YAAcxS,GACN49C,GAAQle,OACR5/B,EAAI,mBAAoBE,EAChC,CAyDQ,CAAE,0BAA2B/D,KAAKi6C,gBAClCj6C,KAAKuV,WAAWwhB,GAChBA,EAAI6V,UAAU,UAAW5sC,KAAKuT,aAAa,OAC3CvT,KAAK4hD,QAAQf,QAAQ7gD,KAAKwS,MAC1BxS,KAAK4hD,QAAQx4C,KAAKpJ,KAAKi6C,gBACvBj6C,KAAK4hD,QAAQprC,KAAKxW,KAAKu5B,cACvBxC,EAAI+V,aACJ9sC,KAAKoW,aAAa2gB,GAClB/2B,KAAK+W,aACT,EAGJ4qC,GAAQle,OAAQ,ECvEhB,MAAMoe,WAAa/nB,GACf,mBAAWp4B,GACP,OAAOG,EAASggD,IACpB,CACA,aAAW7X,GACP,OAAO,CACX,CACA,eAAWC,GACP,OAAO,CACX,CAEA,aAAOvG,CAAOoe,EAAOne,GACjB,IAAKme,GAA0B,IAAjBA,EAAMj8C,OAChB,OAAO,EACX,IAAIk8C,EAAa,EAEjB,IAAK,IAAIt5C,EAAI,EAAGA,EAAIq5C,EAAMj8C,SAAU4C,EAAG,CACnC,MAAMslB,EAAO+zB,EAAMr5C,GACbsyB,EAAOhN,EAAKiN,oBAClB,GAAI/3B,EAAU83B,GAAO,CACjB,MAAMinB,EAAYjnB,EAAK4W,cAAgB,EACnChO,EAAMiO,cAAgBoQ,IACtBre,EAAMiO,cAAgBoQ,EAE9B,CACAj0B,EAAK2K,UAAUqpB,GACfA,EAAah0B,EAAKsC,WAClBtC,EAAK4N,YAAYgI,EAAMiO,cAC3B,CAGA,OAFAjO,EAAMsO,aAAe8P,EACrBpe,EAAMiO,eAAiB,GAChB,CACX,CAkCA,WAAAnwC,CAAYsD,EAAMk9C,GAAU,EAAOC,GAC/B3+C,QACAvD,KAAK+E,KAAOA,EACZ/E,KAAK01B,QAAU,EACf11B,KAAKiiD,QAAUA,EACfjiD,KAAKmiD,IAAM,GACXniD,KAAKkY,YACLlY,KAAKipC,eAAiB,CAClBmZ,WAAY,IACZC,WAAY,UACZC,WAAY,EACZC,cAAe,GAEfL,EACAliD,KAAKkiD,OAASA,GAIdliD,KAAKkiD,OAAS,CAAC,CAAE1vC,KAAMqvC,GAAK7X,GAAIjlC,KAAM/E,KAAK+E,OACvC/E,KAAKiiD,SACLjiD,KAAKkiD,OAAOhtC,KAAK,CAAE1C,KAAMqvC,GAAK5X,KAAMllC,KAAM,MAElD/E,KAAKwiD,aACT,CAEA,SAAA9pB,CAAUt3B,GAGN,OAFApB,KAAK01B,QAAUt0B,EACfpB,KAAKwiD,cACExiD,IACX,CACA,MAAAyiD,CAAOrhD,GAEH,OADApB,KAAKmiD,IAAM/gD,EACJpB,IACX,CAEA,OAAA0iD,GACI,OAAO1iD,KAAK+E,IAChB,CACA,aAAA49C,GAEI,OADsB5V,GAAcM,OAAOrtC,KAAKyX,UAC3By3B,SACzB,CAEA,WAAAsT,GACI,MAAM9R,EAAgB3D,GAAcM,OAAOrtC,KAAKyX,UAIhD,IAAImrC,EAAa,EACjB,IAAK,IAAIn6C,EAAI,EAAGA,EAAIzI,KAAKkiD,OAAOr8C,SAAU4C,EAAG,CACzC,MAAMslB,EAAO/tB,KAAKkiD,OAAOz5C,GACzB,QAAmB7E,IAAfmqB,EAAKvjB,MACLo4C,GAAc70B,EAAKvjB,UAElB,CACD,MAAMq4C,EAAmB90B,EAAKvb,OAASqvC,GAAK7X,GAAKhqC,KAAKipC,eAAeqZ,WAAatiD,KAAKipC,eAAesZ,cACtGx0B,EAAKvjB,MAAQvF,KAAK6E,IAAI+4C,GAXT99C,EAWuCgpB,EAAKhpB,KAVtD2rC,EAAcV,oBAAoBjrC,KAU6B,EAClEgpB,EAAK+0B,WAAa/0B,EAAKvjB,MAAQ,EAC/Bo4C,GAAc70B,EAAKvjB,KACvB,CACJ,CAfoB,IAACzF,EAiBrB,OADA/E,KAAK66B,SAAS+nB,EAAa5iD,KAAK01B,SACzB11B,IACX,CAEA,IAAAwW,GACI,IAAI3I,EACJ,MAAMkpB,EAAM/2B,KAAKuW,eACXwkB,EAAO/6B,KAAKg7B,oBAClBh7B,KAAK+W,cACL,MAAM4yB,EAAQ5O,EAAK6O,mBAAmB9P,GAASC,SAASW,MAAO16B,KAAKgT,OACpE22B,EAAMhmC,GAAK,EACXgmC,EAAM9gC,GAAK,GACX,MAAM6sB,EAAU11B,KAAK01B,QAEfmd,EADQ9X,EAAKxB,aACGkL,yBAChBse,EAAUhoB,EAAKiY,QAAQ3tC,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IAErDs+C,EAAcrZ,EAAM9gC,IAAM7I,KAAK26B,UAAY,GAAKkY,EAAUlJ,EAAM9gC,EAAIk6C,GAAW,EAC/EE,EAAetZ,EAAM9gC,IAAM7I,KAAK26B,UAAY,GAAKkY,EAAUlJ,EAAM9gC,EAAIk6C,GAAW,EAChFG,EAAa,CAACv/C,EAAGkF,EAAG2B,EAAOC,KAC7B,MAAM04C,EAAOx/C,EAAI6G,EACX44C,EAAOv6C,EACbkuB,EAAIthB,OACJshB,EAAIQ,YACJR,EAAI5gB,aAAanW,KAAKipC,eAAemZ,YACrCrrB,EAAI9gB,eAAejW,KAAKipC,eAAeoZ,YACvCtrB,EAAIhhB,aAAa/V,KAAKipC,eAAeoZ,YACrCtrB,EAAIS,OAAO7zB,EAAGkF,GACdkuB,EAAIW,iBAAiByrB,EAAMC,EAAMz/C,EAAI6G,EAAOC,GAC5CssB,EAAI5H,SACJ4H,EAAI1gB,SAAS,EAEXgtC,EAAgB,CAAC1/C,EAAGkF,EAAG2B,EAAOC,KAChCssB,EAAIthB,OACJshB,EAAIQ,YACJR,EAAI5gB,aAAanW,KAAKipC,eAAemZ,YACrCrrB,EAAI9gB,eAAejW,KAAKipC,eAAeoZ,YACvCtrB,EAAIhhB,aAAa/V,KAAKipC,eAAeoZ,YACrCtrB,EAAIS,OAAO7zB,EAAG8G,GACdssB,EAAIW,iBAAiB/zB,EAAI6G,EAAOC,EAAQ9G,EAAI6G,EAAO3B,GACnDkuB,EAAI5H,SACJ4H,EAAI1gB,SAAS,EAEXitC,EAAkB,CAAC3/C,EAAGkF,EAAGq5B,KAC3B,MACMqhB,EAAQ16C,EADA,EACYq5B,EAC1BnL,EAAIQ,YACJR,EAAIS,OAAO7zB,EAAGkF,GACdkuB,EAAIU,OAAO9zB,EAJG,EAIQ4/C,GACtBxsB,EAAIU,OAAO9zB,EALG,EAKQ4/C,GACtBxsB,EAAI8f,YACJ9f,EAAIa,MAAM,EAER4rB,EAAa,CAAC7/C,EAAGoB,KACnBgyB,EAAIthB,OACJshB,EAAIvf,QAAQxX,KAAKyX,UACjB,MAAMgsC,EAAW9/C,EAAIozB,EAAI2sB,YAAY3+C,GAAMyF,MAAQ,EACnDusB,EAAIwc,SAASxuC,EAAM0+C,EAAUR,GAC7BlsB,EAAI1gB,SAAS,EAEjB,IAAIstC,EACAC,EAAuB,EACvBC,EAAmB,EACvB,GAAwB,QAAnBh2C,EAAK7N,KAAKmiD,WAAwB,IAAPt0C,OAAgB,EAASA,EAAGhI,OAAQ,CAEhE29C,EADiBzoB,EAAK6O,mBAAmB9P,GAASC,SAASG,OAAQl6B,KAAKgT,OACpDrP,EAAG3D,KAAKmiD,IAChC,CACA,IAAK,IAAI15C,EAAI,EAAGA,EAAIzI,KAAKkiD,OAAOr8C,SAAU4C,EAAG,CACzC,MAAMslB,EAAO/tB,KAAKkiD,OAAOz5C,GACpBslB,EAAK+0B,aACN/0B,EAAK+0B,WAAa,GACZ,IAANr6C,IACAslB,EAAK+0B,YAAcptB,GACvBmuB,EAAmB91B,EAAK+0B,WAAac,GAA8B,IAANn7C,EAAUitB,EAAU,GAC7E3H,EAAKvb,OAASqvC,GAAK7X,KACf2Z,GAAaA,EAAUnxC,OAASqvC,GAAK7X,IACrCsZ,EAAgB3Z,EAAMhmC,EAAGq/C,EAAa,GAE1CE,EAAWvZ,EAAMhmC,EAAGgmC,EAAM9gC,EAAGg7C,EAAkBb,IAE/Cj1B,EAAKvb,OAASqvC,GAAK5X,OACf0Z,GAAaA,EAAUnxC,OAASqvC,GAAK7X,IACrCqZ,EAAc1Z,EAAMhmC,EAAGgmC,EAAM9gC,EAAGg7C,EAAkBb,GAElDW,GAAaA,EAAUnxC,OAASqvC,GAAK5X,OACrCqZ,EAAgB3Z,EAAMhmC,EAAGgmC,EAAM9gC,GAAI,GACnCw6C,EAAc1Z,EAAMhmC,EAAGgmC,EAAM9gC,EAAGg7C,EAAkBb,IAEjDW,IACDE,EAAmB91B,EAAK+0B,WACxBO,EAAc1Z,EAAMhmC,EAAGgmC,EAAM9gC,EAAGg7C,EAAkBb,KAG1DQ,EAAW7Z,EAAMhmC,EAAIkgD,EAAkB91B,EAAKhpB,MAC5C4+C,EAAY51B,EACZ61B,EAAuB71B,EAAK+0B,WAC5Ba,EAAUhgD,EAAIgmC,EAAMhmC,EACpBgmC,EAAMhmC,GAAKkgD,CACf,CACA,IAAKF,GAA4B//C,MAAf+/C,EAAUhgD,EACxB,MAAM,IAAIR,EAAa,oBAAqB,mBAG5CwgD,EAAUnxC,OAASqvC,GAAK7X,GACxBsZ,EAAgBK,EAAUhgD,EAAIkgD,EAAkBb,EAAa,GAExDW,EAAUnxC,OAASqvC,GAAK5X,MAC7BqZ,EAAgBK,EAAUhgD,EAAIkgD,EAAkBla,EAAM9gC,GAAI,EAElE,EFjOJ,SAAS,MAAK9E,GACN+/C,GAAYrgB,OACZ5/B,EAAI,uBAAwBE,EACpC,CEiOA89C,GAAKlqC,UAAYtX,OAAO2X,OAAO,CAAC,EAAGvD,EAAQkD,WF/N3C,SAAW6mC,GACPA,EAA6BA,EAAmC,KAAI,GAAK,OACzEA,EAA6BA,EAAqC,OAAI,GAAK,SAC3EA,EAA6BA,EAAoC,MAAI,GAAK,QAC1EA,EAA6BA,EAA0C,YAAI,GAAK,aACnF,CALD,CAKGA,KAAiCA,GAA+B,CAAC,IAEpE,SAAWC,GACPA,EAA2BA,EAAgC,IAAI,GAAK,MACpEA,EAA2BA,EAAmC,OAAI,GAAK,QAC1E,CAHD,CAGGA,KAA+BA,GAA6B,CAAC,IAEhE,SAAWC,GACPA,EAAYA,EAAmB,MAAI,GAAK,QACxCA,EAAYA,EAAkB,KAAI,GAAK,OACvCA,EAAYA,EAAkB,KAAI,GAAK,MAC1C,CAJD,CAIGA,KAAgBA,GAAc,CAAC,IAElC,SAAWC,GACPA,EAAgBA,EAAsB,KAAI,GAAK,OAC/CA,EAAgBA,EAA2B,UAAI,GAAK,YACpDA,EAAgBA,EAA6B,YAAI,GAAK,aACzD,CAJD,CAIGA,KAAoBA,GAAkB,CAAC,IAK1C,MAAMmF,WAAoBhqB,GACtB,mBAAWp4B,GACP,OAAOG,EAASiiD,WACpB,CACA,wBAAWC,GACP,OAAOD,GAAY/yC,QAAQizC,OAAOD,aACtC,CAEA,yBAAWE,CAAeC,GACtBJ,GAAYK,SAAWD,CAC3B,CACA,yBAAWD,GACP,OAAOH,GAAYK,QACvB,CACA,wBAAOC,CAAkBC,GACrB,GAAIP,GAAY/yC,QAAQW,OAAO2yC,GAC3B,OAAOP,GAAY/yC,QAAQW,OAAO2yC,EAG1C,CACA,kCAAWC,GACP,OAAOj2B,EAAOC,mBAAmB/c,eACrC,CACA,+BAAWgzC,GACP,OAAOT,GAAY/yC,QAAQizC,OAAOnR,QAAUiR,GAAYQ,uBAC5D,CACA,uBAAOE,CAAiBz0B,GACpB,MAAM00B,EAASX,GAAYM,kBAAkBr0B,EAAM1sB,MACnD,OAAKohD,EAGEA,EAAOrV,aAAe0U,GAAYQ,wBAF9B,GAGf,CACA,wBAAOI,CAAkB30B,GACrB,MAAM00B,EAASX,GAAYM,kBAAkBr0B,EAAM1sB,MACnD,OAAKohD,EAGEA,EAAOE,QAAUb,GAAYQ,wBAFzB,CAGf,CACA,wBAAOM,CAAkB70B,GACrB,MAAM00B,EAASX,GAAYM,kBAAkBr0B,EAAM1sB,MACnD,OAAKohD,GAGI,EAAIA,EAAOI,gBAAmBf,GAAYQ,wBAFxC,CAGf,CACA,4BAAW9V,GACP,OAAOsV,GAAY/yC,QAAQizC,OAAOxV,kBAAoBsV,GAAYQ,uBACtE,CACA,0BAAW7V,GACP,OAAOqV,GAAY/yC,QAAQizC,OAAOvV,gBAAkBqV,GAAYQ,uBACpE,CACA,wBAAWQ,GACP,OAAOhB,GAAY/yC,QAAQizC,OAAOc,cAAgBhB,GAAYQ,uBAClE,CACA,kBAAWvzC,GACP,MAAMg0C,EAAc12B,EAAOC,mBAAmBjd,aAAa0zC,YAC3D,IAAKA,EACD,MAAM,IAAI5hD,EAAa,aAAc,uBACzC,OAAO4hD,CACX,CACA,2BAAWC,GAIP,OAAOlB,GAAY/yC,QAAQizC,OAAOgB,gBACtC,CACA,2BAAWC,GACP,OAAOnB,GAAY/yC,QAAQizC,OAAOiB,gBACtC,CACA,oBAAOC,CAAcphD,GACjB,YAAgCF,IAAzBE,EAAMqhD,gBAAgCrhD,EAAMqhD,iBAAmBxG,GAAgByG,WAC1F,CACA,kBAAOC,CAAYvhD,GACf,YAAgCF,IAAzBE,EAAMqhD,gBAAgCrhD,EAAMqhD,iBAAmBxG,GAAgB2G,SAC1F,CACA,qBAAWC,GAEP,OADkBl3B,EAAOC,mBACR3c,aAAa,sBAClC,CAKA,aAAO+xB,CAAO8hB,EAAS7hB,GACnB,IAAI91B,EACJ,IAAK23C,GAA8B,IAAnBA,EAAQ3/C,OACpB,OAAO,EACX,IAAI2E,EAAQ,EACRi7C,EAAgB,EAChBpV,EAAY,EACZC,EAAa,EACbC,EAAoB,EACpBC,EAAqB,EACzB,IAAK,MAAMkV,KAAUF,EAAS,CAC1B,MAAM73C,EAAWF,EAAKW,wBAAmD,QAA1BP,EAAK63C,EAAOjuC,gBAA6B,IAAP5J,OAAgB,EAASA,EAAGS,MACvGq3C,EAAUl4C,EAAKiC,UAAU/B,EAAU,KACnCi4C,EAAqB,EAAVD,EACX5qB,EAAO2qB,EAAO1qB,oBACpB,IAAI6qB,EAAc,EACdC,EAAa,EACbC,GAAS,EACb,IAAK,IAAIC,EAAI,EAAGA,EAAIN,EAAOO,aAAapgD,SAAUmgD,EAAG,CACjD,MAAMliD,EAAQ4hD,EAAOO,aAAaD,GAC5BE,EAAMpC,GAAYoB,cAAcphD,GAChCqiD,EAAMrC,GAAYuB,YAAYvhD,GAC9BsiD,EAAgBF,GAAOC,EAAMrC,GAAYC,cAAgB,EACzDsC,EAAMviD,EAAMwiD,aAAe5H,GAAY6H,MAAQX,EAAWQ,EAAgBT,EAAUS,GAGtFF,GAAOC,KACPL,EAAa,GAIjB,MAAMn4C,EAAW+3C,EAAOhV,cAAcp4B,iBAChCkuC,EAAmB74C,EAAWy4C,EAmBpC,GAlBItiD,EAAMwiD,aAAe5H,GAAY6H,YAAyB3iD,IAAhBE,EAAMisB,OAChDjsB,EAAM0G,MAAQs5C,GAAYU,iBAAiB1gD,EAAMisB,OAASy2B,EAC1D1iD,EAAMo1B,QAAU4qB,GAAYY,kBAAkB5gD,EAAMisB,OAASy2B,EAC7D1iD,EAAMk1B,QAAU8qB,GAAYc,kBAAkB9gD,EAAMisB,OAASy2B,EAC7D1iD,EAAMisB,MAAMD,MAAQhsB,EAAMisB,MAAMD,MAAQu2B,GAEnCviD,EAAMwiD,aAAe5H,GAAY+H,OACtC3iD,EAAM0G,MAAQ1G,EAAM0G,MAAQg8C,EAC5B1iD,EAAMo1B,QAAUwsB,EAAOgB,kBAAkB5iD,EAAMiB,MAAQshD,GAEvDviD,EAAMwiD,aAAe5H,GAAY6H,YACjB3iD,IAAhBE,EAAMisB,OACNjsB,EAAMisB,MAAM1sB,OAASygD,GAAYpyC,OAAOi1C,KAAKtjD,OAC7CyiD,EAAa,GAEjBhiD,EAAM0G,OAASs5C,GAAYS,qBAAuB52C,EAAWy4C,EAGzDF,GAAOF,EAAI,EAAG,CACd,MAAMY,EAAOlB,EAAOO,aAAaD,EAAI,GAChClC,GAAYoB,cAAc0B,KAC3BnB,EAAgBj7C,EAExB,CACI27C,GAAOV,EAAgB,IACvBM,GAAS,EAETjiD,EAAMk1B,OAASl1B,EAAMk1B,QAAUysB,EAAgBj7C,GAC/CA,EAAQi7C,EACRA,EAAgB,EAEhBC,EAAOmB,kBAAiB,IAEvBX,GAAQC,IACTV,EAAgB,GAEpB3hD,EAAMiiD,OAASA,EACfv7C,GAAS1G,EAAM0G,MACfq7C,EAAcr7C,CAClB,CAYA,GAVAk7C,EAAOoB,2BACPpB,EAAOqB,2BACHrB,EAAOsB,gBAAkBvI,GAA2BjN,KACpDkU,EAAO/pB,YAAYgI,EAAMiO,eACzBjO,EAAMiO,eAAiBkU,IAGvBJ,EAAO/pB,YAAYgI,EAAMhJ,UAAY,GACrCgJ,EAAMhJ,WAAamrB,EAAa,GAEhCJ,EAAOuB,kBAAoBlkD,EAAgBg4B,GAAO,CAClD,MAAM6V,EAAa7V,EAAKzJ,gBAAgBjB,WACpCq1B,EAAOwB,kBAAoB1I,GAA6BhkB,MACxD+V,EAAoBtrC,KAAK6E,IAAI8mC,EAAYL,GACzCF,EAAYprC,KAAK6E,IAAIumC,EAAWwV,GAAe/B,GAAYyB,YAEtDG,EAAOwB,kBAAoB1I,GAA6B9jB,OAC7D8V,EAAqBvrC,KAAK6E,IAAI8mC,EAAYJ,GAC1CF,EAAarrC,KAAK6E,IAAIwmC,EAAYuV,KAGlCxV,EAAYprC,KAAK6E,IAAIumC,EAAWwV,EAAc,GAAK/B,GAAYyB,WAC/DjV,EAAarrC,KAAK6E,IAAIwmC,EAAYuV,EAAc,GAChDtV,EAAoBtrC,KAAK6E,IAAI8mC,EAAa,EAAGL,GAC7CC,EAAqBvrC,KAAK6E,IAAI8mC,EAAa,EAAGJ,GAEtD,CACAhmC,EAAQ,CACZ,CACA,MAAMwnC,EAAe/sC,KAAK8mC,IAAI9mC,KAAK6E,IAAIwmC,EAAaE,EAAoB,GAAIvrC,KAAK6E,IAAIwmC,EAAa3M,EAAMsO,YAAa,IAC/GC,EAAcjtC,KAAK8mC,IAAI9mC,KAAK6E,IAAIumC,EAAYE,EAAmB,GAAItrC,KAAK6E,IAAIumC,EAAY1M,EAAMI,WAAY,IAGhH,OAFAJ,EAAMI,YAAcmO,EACpBvO,EAAMsO,aAAeD,GACd,CACX,CACA,WAAAvwC,GACI8B,QACAvD,KAAKimD,aAAe,GACpBjmD,KAAKmnD,WAAa3I,GAA6BhkB,KAC/Cx6B,KAAKonD,SAAW3I,GAA2BjN,IAC3CxxC,KAAKqnD,YAAa,EAClBrnD,KAAKsnD,aAAc,EACnBtnD,KAAKkY,WACT,CAMA,oBAAWP,GACP,IAAIjJ,EAAS,4BAKb,MAJ4C,aAAxC2f,EAAOC,mBAAmBnd,YAE1BzC,EAAS,qCAEN,CACHA,SACAJ,KAAM,GACNC,OAAQlC,EAAWuC,OACnBJ,MAAOlC,EAAUsC,OAEzB,CAIA,qBAAI4/B,GACA,OAAOsV,GAAYtV,kBAAoBxuC,KAAK0wC,cAAcp4B,gBAC9D,CACA,mBAAIm2B,GACA,OAAOqV,GAAYrV,gBAAkBzuC,KAAK0wC,cAAcp4B,gBAC5D,CACA,cAAAivC,CAAenmD,GAEX,OADApB,KAAKsnD,YAAclmD,EACZpB,IACX,CACA,cAAAinD,GACI,OAAOjnD,KAAKsnD,WAChB,CACA,wBAAAP,GACI,MAAMS,EAAWxnD,KAAKimD,aAAawB,WAAU,EAAGnB,aAAYv2B,WAAYu2B,IAAe5H,GAAY6H,YAAmB3iD,IAAVmsB,GAAsC,iCAAfA,EAAM1sB,OACzI,GAAImkD,EAAW,EACX,OAEJ,MACME,EADM1nD,KAAKimD,aAAauB,GACbh9C,MAAQ,EACnBm9C,EAAO,IAAO3nD,KAAK0wC,cAAcp4B,iBACvC,IAAIsvC,EAAW,EACf,KAAqBA,EAAWJ,IAAYI,EAAU,CAClD,MAAMlC,EAAS1lD,KAAKimD,aAAa2B,GACjClC,EAAO1sB,OAAS0sB,EAAO1sB,OAAS0uB,EAChChC,EAAOxsB,OAASwsB,EAAOxsB,OAASyuB,CACpC,CACA,IAAKC,EAAWJ,EAAW,EAAGI,EAAW5nD,KAAKimD,aAAapgD,SAAU+hD,EAAU,CAC3E,MAAMlC,EAAS1lD,KAAKimD,aAAa2B,GACjClC,EAAO1sB,OAAS0sB,EAAO1sB,OAAS0uB,EAChChC,EAAOxsB,OAASwsB,EAAOxsB,OAASyuB,CACpC,CACJ,CACA,wBAAAb,GACI,IAAIe,EAAQ,EACZ,IAAK,IAAI7B,EAAI,EAAGA,EAAIhmD,KAAKimD,aAAapgD,SAAUmgD,EAAG,CAC/C,MAAMN,EAAS1lD,KAAKimD,aAAaD,GACjC6B,GAAS7nD,KAAK8nD,qBAAqB9B,GACnCN,EAAO1sB,QAAU6uB,CACrB,CACJ,CAEA,oBAAAC,CAAqB9B,GACjB,IAAKhmD,KAAKqnD,WACN,OAAO,EAEX,MAAMU,EAAa/nD,KAAKimD,aAAaD,GAC/BgC,EAAahC,EAAI,EAAIhmD,KAAKimD,aAAaD,EAAI,QAAKpiD,EACtD,IAAIqkD,EAAa,EAEbF,EAAWzB,aAAe5H,GAAY6H,YACjB3iD,IAArBmkD,EAAWh4B,OACXg4B,EAAWh4B,MAAM1sB,OAASygD,GAAYpyC,OAAOi1C,KAAKtjD,OAClD4kD,GAAcF,EAAWh4B,MAAMhf,QAAQ2kB,cAExB9xB,IAAfokD,GACAA,EAAW1B,aAAe5H,GAAY6H,YACjB3iD,IAArBokD,EAAWj4B,OACXi4B,EAAWj4B,MAAM1sB,OAASygD,GAAYpyC,OAAOi1C,KAAKtjD,OAClD4kD,GAAcD,EAAWj4B,MAAMhf,QAAQ2kB,SAG3C,IAAIwyB,GAAe,EACfC,GAAe,OACAvkD,IAAfokD,GAA4BA,EAAW1B,aAAe5H,GAAY+H,OAClEyB,EAAepE,GAAYmB,iBAAiBmD,MAAMC,GAAOA,IAAOL,EAAWjjD,KAAKijD,EAAWjjD,KAAKc,OAAS,KACzGsiD,EAAerE,GAAYkB,iBAAiBoD,MAAMC,GAAOA,IAAOL,EAAWjjD,KAAKijD,EAAWjjD,KAAKc,OAAS,MAE7G,MAAMyiD,EAAsBxE,GAAYgB,cAAgB9kD,KAAK0wC,cAAcp4B,iBAc3E,OAXI4vC,GAAgBH,EAAW5C,iBAAmBxG,GAAgByG,cAC9D6C,GAAcK,GAEdH,GAAgBJ,EAAWzB,aAAe5H,GAAY+H,OAClDsB,EAAWhjD,KAAK,IAAM,KAAOgjD,EAAWhjD,KAAK,IAAM,MACnDkjD,GAAcK,EAAsB,GAEpCxE,GAAYmB,iBAAiBmD,MAAMC,GAAOA,KAAQL,aAA+C,EAASA,EAAWjjD,KAAKijD,EAAWjjD,KAAKc,OAAS,QACnJoiD,GAAcK,EAAsB,IAGrCL,CACX,CAMA,cAAAM,CAAe35B,EAAS,CAAC,GACrB,IAAI/gB,EAAI8F,EAAI60C,EACZ,MAAMlC,EAA0C,QAA5Bz4C,EAAK+gB,EAAO03B,kBAA+B,IAAPz4C,EAAgBA,EAAK6wC,GAAY+H,KACnFgC,EAAc,CAChB1jD,KAA6B,QAAtB4O,EAAKib,EAAO7pB,YAAyB,IAAP4O,EAAgBA,EAAK,GAC1D2yC,aACAnB,eAAiD,QAAhCqD,EAAK55B,EAAOu2B,sBAAmC,IAAPqD,EAAgBA,EAAK7J,GAAgBuB,KAC9FlnB,OAAQ,EACRE,OAAQ,EACR6sB,QAAQ,EACRv7C,MAAO,GAIX,GAAI87C,IAAe5H,GAAY6H,OAAiC,iBAAjB33B,EAAOmB,MAAoB,CACtE,MAAM24B,EAAY5E,GAAYpyC,OAAOkd,EAAOmB,OACtC44B,EAAc,GACpBF,EAAY14B,MAAQ,IAAIG,EAAMw4B,EAAUrlD,KAAMslD,EAAa,CAAErnD,SAAU,eAC3E,MACSglD,IAAe5H,GAAY+H,KAChCgC,EAAYj+C,MAAQxK,KAAK0wC,cAAcZ,oBAAoB2Y,EAAY1jD,MAElEuhD,IAAe5H,GAAYpoB,OAChCmyB,EAAYj+C,MAAQokB,EAAOpkB,OAE/B,OAAOi+C,CACX,CAGA,cAAAG,CAAeC,GAEX,OADA7oD,KAAKimD,aAAa/wC,KAAKlV,KAAKuoD,eAAeM,IACpC7oD,IACX,CAIA,OAAA8oD,CAAQ/jD,EAAM8jD,EAAa,CAAC,GACxB,MAAMvC,EAAa5H,GAAY+H,KAC/B,OAAOzmD,KAAK4oD,eAAevoD,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAG6wC,GAAa,CAAE9jD,OAAMuhD,eACpF,CAEA,kBAAAyC,CAAmBhkD,GACf,MAAMuhD,EAAa5H,GAAY+H,KACzBtB,EAAiBxG,GAAgByG,YACvC,OAAOplD,KAAK4oD,eAAe,CAAE7jD,OAAMuhD,aAAYnB,kBACnD,CAEA,gBAAA6D,CAAiBjkD,GACb,MAAMuhD,EAAa5H,GAAY+H,KACzBtB,EAAiBxG,GAAgB2G,UACvC,OAAOtlD,KAAK4oD,eAAe,CAAE7jD,OAAMuhD,aAAYnB,kBACnD,CAEA,mBAAA8D,CAAoBl5B,GAChB,MAAMu2B,EAAa5H,GAAY6H,MACzBpB,EAAiBxG,GAAgByG,YACvC,OAAOplD,KAAK4oD,eAAe,CAAE74B,QAAOu2B,aAAYnB,kBACpD,CAGA,QAAA+D,CAASn5B,EAAOnB,EAAS,CAAC,GACtB,MAAM03B,EAAa5H,GAAY6H,MAC/B,OAAOvmD,KAAK4oD,eAAevoD,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAG4W,GAAS,CAAEmB,QAAOu2B,eACjF,CAMA,cAAA6C,CAAepkD,EAAM6pB,EAAS,CAAC,GAC3B,IAAIpmB,EAAM,GACV,IAAK,IAAIC,EAAI,EAAGA,EAAI1D,EAAKc,SAAU4C,EAAG,CAClC,MAAM2gD,EAAOrkD,EAAK0D,GACdq7C,GAAYpyC,OAAO03C,IACf5gD,EAAI3C,OAAS,IACb7F,KAAK8oD,QAAQtgD,EAAKomB,GAClBpmB,EAAM,IAEVxI,KAAKkpD,SAASE,EAAMx6B,IAIpBpmB,GAAO4gD,CAEf,CAIA,OAHI5gD,EAAI3C,OAAS,GACb7F,KAAK8oD,QAAQtgD,EAAKomB,GAEf5uB,IACX,CAGA,OAAAqpD,CAAQ7+C,EAAOokB,EAAS,CAAC,GACrB,MAAM03B,EAAa5H,GAAYpoB,KAC/B,OAAOt2B,KAAK4oD,eAAevoD,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAG4W,GAAS,CAAE03B,aAAY97C,UACtF,CAaA,OAAAgN,CAAQlP,EAAGgG,EAAMC,EAAQC,GAGrB,OAFAjL,MAAMiU,QAAQlP,EAAGgG,EAAMC,EAAQC,GAC/BxO,KAAK0wC,cAAgB3D,GAAcM,OAAOrtC,KAAKyX,UACxCzX,IACX,CACA,gBAAA6mD,CAAiB3C,GAEb,OADAlkD,KAAKqnD,WAAanD,EACXlkD,IACX,CAEA,WAAAspD,CAAYC,GAER,OADAvpD,KAAKonD,SAAyB,iBAAPmC,EAAkBzF,GAAYzR,sBAAsBkX,GAAMA,EAC1EvpD,IACX,CACA,WAAAgnD,GACI,OAAOhnD,KAAKonD,QAChB,CAEA,aAAAoC,CAAcC,GAEV,OADAzpD,KAAKmnD,WAA2B,iBAAPsC,EAAkB3F,GAAYtR,wBAAwBiX,GAAMA,EAC9EzpD,IACX,CACA,aAAAknD,GACI,OAAOlnD,KAAKmnD,UAChB,CACA,QAAA92B,GACI,IAAI7lB,EAAQ,EAIZ,OAHAxK,KAAKimD,aAAa5wC,SAASqwC,IACvBl7C,GAASk7C,EAAOK,OAAS,EAAIL,EAAOl7C,KAAK,IAEtCA,CACX,CACA,iBAAAk8C,CAAkB3hD,GACd,IAAI8I,EACJ,IAAIkL,EAAM,EACNtQ,EAAI,EACR,IAAKA,EAAI,EAAGA,EAAI1D,EAAKc,SAAU4C,EAAG,CAC9B,MAAMsI,EAAU/Q,KAAK0wC,cAAc1B,gBAAgBjqC,EAAK0D,IACxD,GAAIsI,EAAS,CACT,MAAMy+B,EAAgC,QAAxB3hC,EAAKkD,EAAQ2+B,aAA0B,IAAP7hC,EAAgBA,EAAK,EACnEkL,EAAMy2B,EAAOz2B,EAAMy2B,EAAOz2B,CAC9B,CACJ,CACA,MAAMvH,EAAaxR,KAAK0wC,cAAcn/B,gBACtC,OAAO9I,EAAI,EAAUsQ,EAAMvH,GAAX,EAAyB,CAC7C,CAEA,IAAAgF,GACI,MAAMugB,EAAM/2B,KAAKuW,eACXwkB,EAAO/6B,KAAKg7B,oBAClBh7B,KAAK+W,cAELggB,EAAIthB,OACJzV,KAAKuV,aACLwhB,EAAI6V,UAAU,cAAe5sC,KAAKuT,aAAa,OAC/C,MAAMo2B,EAAQ5O,EAAK6O,mBAAmB9P,GAASC,SAASK,MAAOp6B,KAAKgT,OAEpE,IAAInK,EADJkuB,EAAIvf,QAAQxX,KAAKyX,UAIjB,MAAMs5B,EAAUhW,EAAKgW,UACfvY,EAAQuC,EAAKxB,aACnB,GAAIv5B,KAAKonD,WAAa3I,GAA2B5M,QAG7C,GADAhpC,EAAI2vB,EAAM2a,kBAAkBnzC,KAAK26B,UAAYtM,EAAO+D,yBAChD2e,EAAS,CACT,MAAM6B,EAAW7X,EAAKgY,YAAYrH,aAC5BmH,EAAUra,EAAMiM,yBAChBilB,EAAwC,IAA5B3uB,EAAKiW,mBAA2B4B,EAAS1G,MAAQ0G,EAAS3G,KAC5EpjC,EAAI5D,KAAK6E,IAAIjB,EAAG6gD,EAAY7W,GAAW7yC,KAAK26B,UAAY,GAC5D,MAEC,CAED,MAAMsR,EAAOhnC,KAAK8mC,OAAOhR,EAAKiY,SAE9B,GADAnqC,EAAI5D,KAAK8mC,IAAIvT,EAAM0a,eAAelzC,KAAK26B,WAAYsR,EAAO,IACtD8E,EAAS,CACT,MAAM6B,EAAW7X,EAAKgY,YAAYrH,aAC5BmH,EAAUra,EAAMiM,yBACtB57B,EAAI5D,KAAK8mC,IAAIljC,EAAG+pC,EAAS3G,KAAO,EAAI4G,EAAU7yC,KAAK26B,UACvD,CACJ,CACA,IAAIh3B,EAAIgmC,EAAMhmC,EAEVA,EADA3D,KAAKmnD,aAAe3I,GAA6BhkB,KAC7CmP,EAAMhmC,EAEL3D,KAAKmnD,aAAe3I,GAA6B9jB,MAClDiP,EAAMhmC,EAAI3D,KAAKqwB,WAEdrwB,KAAKmnD,aAAe3I,GAA6BtkB,OAClDyP,EAAMhmC,EAAI3D,KAAKqwB,WAAa,EAI5B0K,EAAK4X,WAAa3yC,KAAKqwB,WAAa,EAE5C,GAAE,0BAA2BrwB,KAAK0wC,cAAe/sC,EAAGkF,GACpD7I,KAAKimD,aAAa5wC,SAASqwC,IACvB,MAAMiE,EAAU7F,GAAYoB,cAAcQ,GACpCkE,EAAQ9F,GAAYuB,YAAYK,GACtC,IAAI7V,EAAOhnC,EAUX,GATA,GAAE,aAAc68C,EAAO1sB,OAAQ0sB,EAAOxsB,QACtC,GAAE,gBAAiB2W,GACf8Z,IACA9Z,GAAQ7vC,KAAKwuC,mBAEbob,IACA/Z,GAAQ7vC,KAAKyuC,iBAEjB,GAAE,gBAAiBoB,GACf6V,EAAOY,aAAe5H,GAAY+H,KAAM,CACxC,IAAIkD,GAAWC,KACX7yB,EAAIthB,OACAzV,KAAKyX,UAAU,CACf,MAAM,OAAE/I,EAAM,KAAEJ,EAAI,OAAEC,EAAM,MAAEC,GAAUxO,KAAKyX,SACvCoyC,EAAkBp8C,EAAKiC,UAAUpB,EAAMw1C,GAAYC,eACzDhtB,EAAIvf,QAAQ9I,EAAQm7C,EAAiBt7C,EAAQC,EACjD,CAMJ,GAAE,mBAAoBk3C,EAAO3gD,KAAMpB,EAAI+hD,EAAO1sB,OAAQ6W,EAAO6V,EAAOxsB,QACpEnC,EAAIwc,SAASmS,EAAO3gD,KAAMpB,EAAI+hD,EAAO1sB,OAAQ6W,EAAO6V,EAAOxsB,SACvDywB,GAAWC,IACX7yB,EAAI1gB,SAEZ,MACSqvC,EAAOY,aAAe5H,GAAY6H,OAASb,EAAO31B,OACvD8f,GAAQ6V,EAAOxsB,OACf,GAAE,oBAAqBwsB,EAAO31B,MAAM1sB,KAAMM,EAAI+hD,EAAO1sB,OAAQ6W,GAC7D6V,EAAO31B,MAAMqJ,OAAOrC,EAAKpzB,EAAI+hD,EAAO1sB,OAAQ6W,IAEvC6V,EAAOY,aAAe5H,GAAYpoB,OACvC,GAAE,oBAAqBovB,EAAOl7C,MAAO7G,EAAGksC,GACxC9Y,EAAIQ,YACJR,EAAI5gB,aAAa,GACjB4gB,EAAIS,OAAO7zB,EAAGkF,GACdkuB,EAAIU,OAAO9zB,EAAI+hD,EAAOl7C,MAAOqlC,GAC7B9Y,EAAI5H,UAERxrB,GAAK+hD,EAAOl7C,MACRk7C,EAAOK,SACPpiD,GAAK+hD,EAAO1sB,OAChB,IAEJjC,EAAI+V,aACJ9sC,KAAKoW,eACL2gB,EAAI1gB,SACR,EAEJytC,GAAYrgB,OAAQ,EAEpBqgB,GAAYtQ,kBAAoBgL,GAChCsF,GAAYtR,wBAA0B,CAClCjY,KAAMikB,GAA6BhkB,KACnCC,MAAO+jB,GAA6B9jB,MACpCT,OAAQukB,GAA6BtkB,OACrCuZ,WAAY+K,GAA6B9K,aAE7CoQ,GAAYvS,gBAAkBkN,GAC9BqF,GAAYzR,sBAAwB,CAChCsB,IAAK8K,GAA2BjN,IAChCrX,MAAOskB,GAA2BjN,IAClCnX,MAAOokB,GAA2B5M,OAClC+B,OAAQ6K,GAA2B5M,QAGvCiS,GAAYpyC,OAAS,CACjBo4C,WAAY,CACRzmD,KAAM,kBAEV0mD,IAAK,CACD1mD,KAAM,kBAEV2mD,eAAgB,CACZ3mD,KAAM,sBAEV,IAAK,CACDA,KAAM,iBAEV4mD,UAAW,CACP5mD,KAAM,iBAEV6mD,aAAc,CACV7mD,KAAM,oBAEV87B,MAAO,CACH97B,KAAM,aAEV,IAAK,CACDA,KAAM,aAEV,IAAK,CACDA,KAAM,sBAEV8mD,UAAW,CACP9mD,KAAM,sBAEV,IAAK,CACDA,KAAM,uBAEV+mD,WAAY,CACR/mD,KAAM,uBAEVgnD,YAAa,CACThnD,KAAM,uBAEVinD,aAAc,CACVjnD,KAAM,wBAEVknD,cAAe,CACXlnD,KAAM,0BAEVmnD,eAAgB,CACZnnD,KAAM,2BAEV,IAAK,CACDA,KAAM,gCAEVsjD,KAAM,CACFtjD,KAAM,gCAEV,IAAK,CACDA,KAAM,mBAEVqB,EAAG,CACCrB,KAAM,mBAGdygD,GAAY2G,YAAc/L,GAC1BoF,GAAY4G,gBAAkB/L,GAE9BmF,GAAYK,UAAW,EG3rBhB,MAAM/hD,WAAY03B,GACrB,mBAAWp4B,GACP,OAAOG,EAASO,GACpB,CAEA,cAAOuoD,CAAQ5vB,GACX,OAAOA,EAAKkiB,mBAAmB76C,GAAIV,SACvC,CAEA,qBAAOkpD,CAAe/5B,EAAOhC,GACzB,IAAK,MAAMkM,KAAQlK,EACf,GAAIhC,aAAyC,EAASA,EAAQg8B,IAC1D,IAAK,IAAIpiD,EAAI,EAAGA,EAAIsyB,EAAK/mB,KAAKnO,OAAQ4C,IAAK,CACvC,MAAMqiD,EAAM,IAAI1oD,GAChB0oD,EAAIC,aAAahwB,EAAK+gB,WAAWtnB,YACjCuG,EAAKgO,YAAY+hB,EAAKriD,EAC1B,MAEC,GAAyE7E,OAApEirB,aAAyC,EAASA,EAAQ7b,OAAqB,CACrF,MAAM83C,EAAM,IAAI1oD,GAChB0oD,EAAIC,aAAahwB,EAAK+gB,WAAWtnB,YACjCuG,EAAKgO,YAAY+hB,EAAKj8B,aAAyC,EAASA,EAAQ7b,MACpF,KACK,CACD,MAAM83C,EAAM,IAAI1oD,GAChB0oD,EAAIC,aAAahwB,EAAK+gB,WAAWtnB,YACjCuG,EAAKgO,YAAY+hB,EAAK,EAC1B,CAER,CAEA,aAAOpnB,CAAOwX,EAAMvX,GAChB,MAAMsO,EAActO,EAAMsO,YAE1B,IAAKiJ,GAAwB,IAAhBA,EAAKr1C,OACd,OAAO,EACX,MAAMmlD,EAAW,GACXC,EAAgB,CAAC,EACvB,IAAK,IAAIxiD,EAAI,EAAGA,EAAIyyC,EAAKr1C,SAAU4C,EAAG,CAClC,MAAMqiD,EAAM5P,EAAKzyC,GACXsyB,EAAO+vB,EAAIhwB,UACjB,IAAIuJ,EACAv+B,EACJ,GAAIjD,EAAYk4B,GAAO,CACnB,MAAM/nB,EAAQ83C,EAAI3vB,aAClBkJ,EAAQtJ,EAAKuJ,cAActxB,GAE3BlN,EAAQi1B,EAAK4iB,eACjB,KACK,KAAI16C,EAAU83B,GAMf,MAAM,IAAI53B,EAAa,WAAY,wBALnCkhC,EAAQ,CAAErgC,KAAM,IAChB8B,EAAQmsC,CAKZ,CACA,MAAMiZ,EAAUnwB,EAAKxnB,aAAa,MAClCy3C,EAAS91C,KAAK,CAAElR,KAAMqgC,EAAMrgC,KAAM+2B,OAAMmwB,UAASJ,QACjDG,EAAcC,GAAWjmD,KAAK6E,IAAImhD,EAAcC,IAAYplD,EAAOA,EACvE,CAEAklD,EAASlmB,MAAK,CAACrgC,EAAGC,IAAMA,EAAEV,KAAOS,EAAET,OACnC,IAAImnD,EAAYlZ,EACZmZ,EAAU,EACVC,EAAY,KACZC,EAAY,KACZC,EAAoB,KACpBC,EAAc,EAClB,IAAK,IAAI/iD,EAAI,EAAGA,EAAIuiD,EAASnlD,SAAU4C,EAAG,CACtC,MAAM,IAAEqiD,EAAG,KAAE/vB,EAAI,QAAEmwB,EAAO,KAAElnD,GAASgnD,EAASviD,GAE1CzE,IAASqnD,GAAatwB,IAASuwB,IAC/BH,EAAYF,EAAcC,IAEzBnwB,EAAKuN,UAAYtkC,IAASqnD,IACA,KAAvBpmD,KAAK8C,IAAI/D,EAAO,GAEhBwnD,EAAc,GAIdA,EAAc,GACG,MAAbF,GAAsBA,EAAUhjB,UAAyB,MAAb+iB,GAAqBA,EAAYrnD,GAAS,GAIjFA,EAAOwnD,IAAgBD,IAE5BC,GAAe,IAJfA,GAAe,KASvBzwB,EAAKuN,SACLwiB,EAAIt2B,aAAeg3B,EAGnBV,EAAIt2B,YAAcg3B,EAEtBD,EAAoBvnD,EAAOwnD,EAC3BV,EAAIpyB,UAAUyyB,GACdA,GAAaL,EAAIz6B,WArED,EAsEhB+6B,EAAUD,EAAYC,EAAUD,EAAYC,EAC5CC,EAAYrnD,EACZsnD,EAAYvwB,CAChB,CAGA,OADA4I,EAAMsO,aAAemZ,GACd,CACX,CACA,WAAA3pD,GACI8B,QACAvD,KAAK20B,SAAWmF,GAASC,SAASW,MAClC16B,KAAKyrD,OAAS,EACdzrD,KAAK66B,SAAS,GACd76B,KAAKw0B,WAAa,CACtB,CACA,OAAAyG,CAAQF,GAMJ,OALA/6B,KAAK+6B,KAAOA,EACR14B,EAAY04B,KACZ/6B,KAAKyrD,QAAU,GACfzrD,KAAK66B,SAAS,IAEX76B,IACX,CACA,YAAA+qD,CAAaliD,GAET,OADA7I,KAAKw0B,WAAa3rB,EACX7I,IACX,CACA,IAAAwW,GACI,MAAMugB,EAAM/2B,KAAKuW,eACXwkB,EAAO/6B,KAAKg7B,oBAClBh7B,KAAK+W,cACL,MACMytB,EADQzJ,EAAKxB,aACKkL,yBAClBkF,EAAQ5O,EAAK6O,mBAAmB5pC,KAAK20B,SAAU30B,KAAKgT,MAAO,CAAE04C,gBAAgB,IAE/EzoD,EAAU83B,KACV4O,EAAM9gC,EAAIkyB,EAAKuY,iBAAiBpH,OAEpC,MAAMvoC,EAAIgmC,EAAMhmC,EAAI3D,KAAK01B,QAAU11B,KAAKwK,MAAQxK,KAAKyrD,OAC/C5iD,EAAI8gC,EAAM9gC,EAAI7I,KAAK21B,QAAU31B,KAAKw0B,WAAagQ,EACrDzN,EAAIQ,YACJR,EAAI6f,IAAIjzC,EAAGkF,EAAG7I,KAAKyrD,OAAQ,EAAa,EAAVxmD,KAAKC,IAAQ,GAC3C6xB,EAAIa,MACR,EC/IJ,MAAM+zB,WAAuB7xB,GACzB,mBAAWp4B,GACP,OAAOG,EAAS8pD,cACpB,CAEA,aAAOjoB,CAAOkoB,EAAMjoB,GAChB,MAAM,WAAEI,EAAU,YAAEkO,GAAgBtO,EAEpC,IAAKioB,GAAwB,IAAhBA,EAAK/lD,OACd,OAAO,EACX,MAAMgmD,EAAY,GAClB,IAAIC,EAAY,KACZC,EAAY,EACZC,EAAa,EACjB,IAAK,IAAIvjD,EAAI,EAAGA,EAAImjD,EAAK/lD,SAAU4C,EAAG,CAClC,MAAMmQ,EAAMgzC,EAAKnjD,GACXsyB,EAAOniB,EAAIkiB,UACXmxB,EAAMrzC,EAAI6iB,cACVzoB,EAAQ4F,EAAIuiB,aACZkJ,EAAQtJ,EAAKuJ,cAActxB,GAE3Bk5C,EADgBnf,GAAcM,OAAOz0B,EAAInB,UACdy3B,UAOjC,GANIt2B,EAAI+b,WAAaO,EAAiBkF,QAClCuJ,EAAMiO,eAAiBsa,EAAa79B,EAAO8D,oBAAsB,IAEjEvZ,EAAI+b,WAAaO,EAAiBoF,QAClCqJ,EAAMhJ,WAAauxB,EAAa79B,EAAO8D,oBAAsB,IAE7D4I,IAAS+wB,EAAW,CACpB,IAAK,IAAIlnD,EAAI,EAAGA,EAAIm2B,EAAK/mB,KAAKnO,SAAUjB,EACjB,IAAfm/B,IACAgoB,EAAY9mD,KAAK6E,IAAIixB,EAAKwJ,yBAA0BwnB,IAEpC,IAAhB9Z,IACA+Z,EAAa/mD,KAAK6E,IAAIixB,EAAKyhB,0BAA2BwP,IAG9DF,EAAY/wB,CAChB,CACA8wB,EAAU32C,KAAK,CACX6lB,OACAniB,MACAqzC,MACAjoD,KAAMqgC,EAAMrgC,KACZmoD,OAAQJ,EACRK,OAAQJ,GAEhB,CAEAH,EAAU/mB,MAAK,CAACrgC,EAAGC,IAAMA,EAAEV,KAAOS,EAAET,OACpC,IAAIqoD,EAAY,EACZC,EAAY,EACZC,EAAU,EACVC,EAAU,EACVC,EAAW,KACXC,EAAW,KACf,IAAK,IAAIjkD,EAAI,EAAGA,EAAIojD,EAAUhmD,SAAU4C,EAAG,CACvC,IAAIkkD,EAAY,EAChB,MAAM,KAAE5xB,EAAI,IAAEkxB,EAAG,IAAErzC,EAAG,KAAE5U,EAAI,OAAEmoD,EAAM,OAAEC,GAAWP,EAAUpjD,GAEvDzE,IAASyoD,GAAY1xB,IAAS2xB,IAC9BL,EAAYtoB,EAAaooB,EACzBG,EAAYra,EAAcma,GAE9B,MAAMQ,EAAWh0C,EAAIyX,WAzDL,EA0DZ47B,IAAQnyB,GAASC,SAASS,MAC1B5hB,EAAI8f,UAAUqL,EAAasoB,GAC3BM,EAAY5oB,EAAa6oB,EACzBL,EAAUI,EAAYJ,EAAUI,EAAYJ,GAEvCN,IAAQnyB,GAASC,SAASW,QAC/B9hB,EAAI8f,UAAU4zB,GACdK,EAAYX,EAAaY,EACzBJ,EAAUG,EAAYH,EAAUG,EAAYH,GAEhDC,EAAWzoD,EACX0oD,EAAW3xB,CACf,CAGA,OAFA4I,EAAMI,YAAcwoB,EACpB5oB,EAAMsO,aAAeua,GACd,CACX,CACA,oBAAO5X,EAAc,WAAEiY,GAAe,CAAC,EAAG9xB,EAAM8Z,GAC5CgY,SAAwDA,EAAWnkD,MAAM,KAAKuL,KAAK64C,IAC/E,MAAMpkD,EAAQokD,EAAgBv9C,OAAO7G,MAAM,KACrCkmB,EAAS,CAAEm+B,OAAQrkD,EAAM,IAG/B,OAFIA,EAAM,KACNkmB,EAAO+F,SAAWjsB,EAAM,IACrBmsC,EAAQM,aAAa6X,UAAUp+B,EAAO,IAC9C3a,KAAI,CAACg5C,EAAWj6C,IAAU+nB,EAAKgO,YAAYkkB,EAAWj6C,IAC7D,CACA,WAAAvR,CAAYyrD,GACR3pD,QACAvD,KAAKktD,OAASA,EACdltD,KAAKwK,MAAQ,EACbxK,KAAK20B,SAAWmF,GAASC,SAASS,KAClCx6B,KAAK01B,QAAU,EACf11B,KAAK21B,QAAU,EACf31B,KAAKmtD,SAAW,EAChBntD,KAAKyrC,SAAW,EAChBzrC,KAAKkY,WACT,CACA,iBAAAk1C,CAAkBF,GAEd,OADAltD,KAAKktD,OAASA,EACPltD,IACX,CACA,iBAAAqtD,GACI,OAAOrtD,KAAKktD,MAChB,CACA,UAAAI,CAAW3pD,GAEP,OADA3D,KAAKmtD,SAAWxpD,EACT3D,IACX,CACA,UAAAutD,CAAW1kD,GAEP,OADA7I,KAAKyrC,SAAW5iC,EACT7I,IACX,CACA,IAAAwW,GACI,MAAMugB,EAAM/2B,KAAKuW,eACXwkB,EAAO/6B,KAAKg7B,oBAClBh7B,KAAK+W,cACL,MAAM4yB,EAAQ5O,EAAK6O,mBAAmB5pC,KAAK20B,SAAU30B,KAAKgT,OAC1D,IAAIwuC,EAAQ7X,EAAMhmC,EAAI3D,KAAK01B,QAAU11B,KAAKmtD,SACtCzL,EAAQ/X,EAAM9gC,EAAI7I,KAAK21B,QAAU31B,KAAKyrC,SAAW,EACrD,OAAQzrC,KAAK20B,UACT,KAAKmF,GAASC,SAASK,MACnBonB,GAAS,EACTE,GAAS,GACT,MACJ,KAAK5nB,GAASC,SAASO,MACnBknB,GAAS,EACTE,GAAS,GACT,MACJ,KAAK5nB,GAASC,SAASS,KACnBgnB,GAASxhD,KAAKwK,MACd,MACJ,KAAKsvB,GAASC,SAASW,MACnB8mB,GAAS,EACT,MACJ,QACI,MAAM,IAAIr+C,EAAa,kBAAmB,gBAAgBnD,KAAK20B,2BAEvEoC,EAAIthB,OACJshB,EAAIvf,QAAQxX,KAAKyX,UACjBsf,EAAIwc,SAAS,GAAKvzC,KAAKktD,OAAQ1L,EAAOE,GACtC3qB,EAAI1gB,SACR,EAEJs1C,GAAeh0C,UAAY,CACvBjJ,OAAQjB,EAAKkB,WACbL,KAAM,EACNC,OAAQlC,EAAW0iC,KACnBvgC,MAAOlC,EAAUsC,QCpGrB,MAAM4+C,WAAiB9qD,GACnB,mBAAWhB,GACP,OAAOG,EAAS2rD,QACpB,CACA,WAAA/rD,CAAY25C,GACR73C,MAAM63C,GACNp7C,KAAKytD,cAAe,EACpBztD,KAAK0tD,iBAAmB,EACxB1tD,KAAK2tD,mBAAqB,EAC1B3tD,KAAKgT,MAAQooC,EAAWpoC,MACxBhT,KAAK2D,EAAIy3C,EAAWz3C,GAAK,EACzB3D,KAAK6I,EAAIuyC,EAAWvyC,GAAK,EACrBuyC,EAAWwS,YACX5tD,KAAK47C,SAAWR,EAAWwS,WAC/B5tD,KAAKwvB,UAAY4rB,EAAW5rB,YAAa,EACzCxvB,KAAK6qC,eAAiBuQ,EAAWvQ,gBAAkBd,GAAKC,GACxDhqC,KAAKgE,KAAOo3C,EAAWp3C,MAAQ,EAG/BhE,KAAK87C,WAAaztB,EAAOiD,cAActxB,KAAK+uB,SAAU/uB,KAAK47C,UAC3Dl4C,EAAQ1D,KAAK87C,WAAY,eAAgB,gCAAgC97C,KAAK+uB,uBAAuB/uB,KAAK47C,cAErG57C,KAAKgE,KAAO,GAAKhE,KAAKgE,KAAO,IAAMhE,KAAK87C,WAAWlnB,mBACpD50B,KAAK87C,WAAWrqB,UAAYzxB,KAAK87C,WAAWlnB,kBAEhD50B,KAAK6tD,WAAa7tD,KAAK87C,WAAWrqB,UAClCzxB,KAAK01B,QAAU0lB,EAAW1lB,SAAW,EACjC0lB,EAAW0S,oBACX9tD,KAAKytD,cAAe,EACpBztD,KAAK6tD,WAAazS,EAAW0S,kBAC7B9tD,KAAK0tD,iBAAmBtS,EAAWsS,kBAAoB,EACvD1tD,KAAK2tD,mBAAqBvS,EAAWuS,oBAAsB,GAE/D3tD,KAAKmV,SAASimC,EAAW5sC,OACzBxO,KAAK+tD,QAAU3S,EAAW2S,UAAW,EACrC/tD,KAAKipC,eAAiB5oC,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGhY,KAAKipC,gBAAiB,CAExEiT,iBAAkBd,EAAWc,kBAAoB7tB,EAAOsD,sBAC5D3xB,KAAK66B,UAAS76B,KAAKytD,cACdztD,KAAK6tD,WAAWngB,WAAW,oBAC3B1tC,KAAK6tD,WAAWngB,WAAW,mBAE1B1tC,KAAK87C,WAAWzrB,SAASrwB,KAAKipC,eAAeiT,kBAD7ChsB,EAAMG,SAASrwB,KAAK6tD,WAAY7tD,KAAKipC,eAAeiT,kBAE9D,CAEA,QAAA7rB,GACI,OAAOrwB,KAAKwK,KAChB,CAEA,WAAAwjD,GACI,OAA0B,IAAnBhuD,KAAKwvB,SAChB,CAEA,IAAApmB,CAAKzF,GAED,OADA3D,KAAK2D,EAAIA,EACF3D,IACX,CAEA,IAAAiJ,GACI,OAAOjJ,KAAK6I,CAChB,CAEA,IAAAQ,CAAKR,GAED,OADA7I,KAAK6I,EAAIA,EACF7I,IACX,CAEA,OAAAiuD,GACI,OAAOjuD,KAAKgE,IAChB,CAEA,OAAAkqD,CAAQlqD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEA,YAAAi6C,GAII,MAAMt2C,EAAK3D,KAAK05C,aAAwBn2C,MAAM02C,eAAfj6C,KAAK2D,EAG9BwqD,EAA6BpkB,GAAKG,MAAQ,EAC1CtG,EAAYvV,EAAOC,mBACnB8/B,EAAYxqB,EAAUjyB,aAAa,kBAAmB,GAAK3R,KAAK6qC,eAChEwjB,EAAqBzqB,EAAUjyB,aAAa,2BAA4B,GAAK3R,KAAK6qC,eACxF,OAAQlnC,EACJyqD,GACCpuD,KAAKwvB,WAAaxvB,KAAKwK,MAAQ2jD,GAA8BnuD,KAAK6qC,eAAiBwjB,EAAqB,EACjH,CAEA,cAAAh3C,GACI,MAAMw7B,EAAU7yC,KAAKu5B,aAAakL,yBAC5B6pB,EAAezb,EAAU,EACzB0b,EAAQvuD,KAAK6I,EAAIylD,EACvB,OAAO,IAAI3lD,EAAY3I,KAAKi6C,eAAgBsU,EAAOvuD,KAAKwK,MAAOqoC,EACnE,CAEA,QAAAta,CAASC,GACL,MAAMx0B,EAAOhE,KAAKiuD,UAMlB,OALAjuD,KAAKw4B,MAAQA,EACTx4B,KAAKw4B,QACLx4B,KAAKqJ,KAAKrJ,KAAKw4B,MAAMg2B,YAAYxqD,IACjChE,KAAKuX,WAAWvX,KAAKw4B,MAAMlhB,eAExBtX,IACX,CAEA,SAAAy5C,GACI,GAAIz5C,KAAK05C,aACL,OAAO15C,KACX,MAAMwK,EAAQxK,KAAKqwB,WAAarwB,KAAKo6C,oBAAsBp6C,KAAK06C,qBAGhE,OAFA16C,KAAK66B,SAASrwB,GACdxK,KAAK05C,cAAe,EACb15C,IACX,CAEA,IAAAwW,GACI,MAAMugB,EAAM/2B,KAAKuW,eACjBvW,KAAK+W,cACL,IAAI03C,EAASzuD,KAAKi6C,eACdj6C,KAAKytD,eAELgB,GACIzuD,KAAK6qC,iBAAmBd,GAAKC,GACvBhqC,KAAK0tD,kBACF1tD,KAAK87C,WAAW5nB,KAAOl0B,KAAK87C,WAAWzrB,SAASrwB,KAAKipC,eAAeiT,kBAAoBl8C,KAAKwK,MAAQ,GACxGxK,KAAK2tD,oBAEnB,MAAM9kD,EAAI7I,KAAK6I,GAtLvB,YAAc9E,GACNypD,GAAS/pB,OACT5/B,EAAI,oBAAqBE,EACjC,CAoLQ,CAAE,sBAAuB/D,KAAK47C,SAAU57C,KAAK+uB,SAAU,OAAQ0/B,EAAQ5lD,GAEvE,MAAMgiC,EAAiB7qC,KAAK6qC,eACtBqR,EAAmBl8C,KAAKipC,eAAeiT,iBACvCwS,EAAiB,GAAG1uD,KAAK6tD,iBAAiBhjB,IAAmBd,GAAKC,GAAK,KAAO,SACpF,GAAsB,MAAlBhqC,KAAK47C,SAAkB,CACvB,MAAM+S,EAAa3uD,KAAKu5B,aAAakL,0BAjLjD,SAA2B1N,EAAKhI,EAAUprB,EAAGkF,EAAGgiC,EAAgB8jB,GAC5D,MAAMnkD,EAAQ6jB,EAAO6D,qBACrB6E,EAAIthB,OACJshB,EAAI5gB,aAAakY,EAAOyD,YACxB,IAAI8F,GAAO,EAmBX,GAlBIvJ,EAAO8C,iBAAiBpC,GAAY,IACpC6I,GAAO,GAENA,IACDj0B,GAAM0qB,EAAOyD,WAAa,EAAK+Y,GACnC9T,EAAIQ,YACJR,EAAIS,OAAO7zB,EAAGkF,EAAI8lD,GAClB53B,EAAIU,OAAO9zB,EAAGkF,EAAI,GAClBkuB,EAAIU,OAAO9zB,EAAI6G,EAAO3B,EAAI8lD,GAC1B53B,EAAIU,OAAO9zB,EAAI6G,EAAO3B,GACtBkuB,EAAIU,OAAO9zB,EAAGkF,EAAI8lD,GAClB53B,EAAI8f,YACAjf,EACAb,EAAIa,OAGJb,EAAI5H,SAEJd,EAAO6C,mBAAmBnC,GAAU/nB,OAAO,IAAM,CACjD,MAAM4nD,EAAc,EAAE,GAAI,EAAGpkD,EAAQ,EAAGA,EAAQ,GAChD,IAAK,IAAI/B,EAAI,EAAGA,EAAImmD,EAAY/oD,OAAQ4C,IACpCsuB,EAAIQ,YACJR,EAAIS,OAAO7zB,EAAIirD,EAAYnmD,GAAII,EAAI,IACnCkuB,EAAIU,OAAO9zB,EAAIirD,EAAYnmD,GAAII,EAAI,IACnCkuB,EAAI5H,QAEZ,CACA4H,EAAI1gB,SACR,CAiJYw4C,CAAkB93B,EAAK/2B,KAAK+uB,SAAU0/B,EAAQ5lD,EAAGgiC,EAAgB8jB,EACrE,MAEIz+B,EAAM4G,YAAYC,EAAK03B,EAAQ5lD,EAAGqzC,EAAkBl8C,KAAK6tD,WAAY,CACjEvsD,SAAU,YAAYotD,KAGlC,EAGJlB,GAAS/pB,OAAQ,ECvMV,MAAMzgC,WAAsBN,GAC/B,mBAAWhB,GACP,OAAOG,EAASmB,aACpB,CACA,WAAAvB,CAAY25C,GACR73C,MAAM63C,EACV,CAEA,OAAAjK,GACI,OAAOnxC,KAAKk0B,IAChB,CACA,SAAA6e,GACI,IAAK/yC,KAAKk0B,KACN,MAAM,IAAI/wB,EAAa,SAAU,gCAErC,OAAOnD,KAAKk0B,IAChB,CACA,OAAA46B,CAAQ56B,GAGJ,OAFAl0B,KAAKk0B,KAAOA,EACZl0B,KAAKgV,gBAAgBkf,GACdl0B,IACX,CAEA,SAAA+uD,GACI,MAAM76B,EAAO,IAAI6V,GAEjB,OADA/pC,KAAK8uD,QAAQ56B,GACNl0B,IACX,CACA,SAAAgvD,CAAU1tD,EAAW,QACjB,MAAM,WAAEw6C,GAAe97C,KACvB,GAAIA,KAAKivD,UAAW,CAChB,MAAMC,EAAWlvD,KAAKgxC,qBAAuBjH,GAAKE,KAAO6R,EAAW9mB,mBAAqB8mB,EAAW/mB,iBAChGm6B,IACAlvD,KAAKm0B,KAAO,IAAIjE,EAAMg/B,EAAUlvD,KAAKipC,eAAeiT,iBAAkB,CAAE56C,aAChF,CACJ,CAEA,+BAAA6tD,GACI,OAAInvD,KAAKgxC,qBAAuBjH,GAAKE,KAC1BjqC,KAAK+7C,aAAa/7C,KAAK+7C,aAAal2C,OAAS,GAG7C7F,KAAK+7C,aAAa,EAEjC,CAEA,aAAAqT,GACI,OAAOrlB,GAAKI,OAASnqC,KAAKqvD,kBAC9B,CAEA,YAAAC,GACI,MAAMxT,EAAa97C,KAAKsxB,gBACxB,OAAIwqB,EACOA,EAAWjnB,WAGX,CAEf,CAEA,oBAAA06B,GAEI,IAAI1pD,EADSwoB,EAAO6C,mBAAmBlxB,KAAK+uB,UAC1B3tB,SAAW,EAAI,EAAI,GAErC,OAAQpB,KAAK+uB,UACT,IAAK,IACgBnrB,MAAb5D,KAAKm9C,OACLt3C,EAAS,IACb,MACJ,IAAK,KACDA,EAAsBjC,MAAb5D,KAAKm9C,KAAoB,GAAK,GACvC,MACJ,IAAK,KACDt3C,EAAsBjC,MAAb5D,KAAKm9C,KAAoB,GAAK,GACvC,MACJ,IAAK,KACDt3C,EAAsBjC,MAAb5D,KAAKm9C,KAAoB,GAAK,GACvC,MACJ,IAAK,MACDt3C,EAAsBjC,MAAb5D,KAAKm9C,KAAoB,GAAK,GAK/C,OAAOt3C,CACX,CAEA,gBAAAmrC,GACI,IAAKhxC,KAAK6qC,eACN,MAAM,IAAI1nC,EAAa,SAAU,kCACrC,OAAOnD,KAAK6qC,cAChB,CACA,gBAAA2kB,CAAiBttB,GAGb,GAFKA,IACDA,EAAY6H,GAAKC,IACjB9H,IAAc6H,GAAKC,IAAM9H,IAAc6H,GAAKE,KAC5C,MAAM,IAAI9mC,EAAa,cAAe,2BAA2B++B,KASrE,GAPAliC,KAAK6qC,eAAiB3I,EAEtBliC,KAAKo4B,QACDp4B,KAAKivD,WACLjvD,KAAKgvD,YAEThvD,KAAKm9C,UAAOv5C,EACR5D,KAAKk0B,KAAM,CACXl0B,KAAKk0B,KAAKiX,aAAajJ,GACvBliC,KAAKk0B,KAAKkX,aAAaprC,KAAKqvD,oBAG5B,MAAMvT,EAAa97C,KAAKmvD,mCAAqCnvD,KAAKsxB,gBAE5Dm+B,EAAUphC,EAAOC,mBAAmB3c,aAAa,iBAAiBmqC,EAAWrqB,YAAa,CAC5Fi+B,kBAAmB,EACnBC,iBAAkB,EAClBC,oBAAqB,EACrBC,mBAAoB,IAGxB7vD,KAAKk0B,KAAKiE,WAAW,CACjBiS,iBAAkBqlB,EAAQE,iBAC1BtlB,mBAAoBolB,EAAQI,mBAC5BvlB,sBAAuBmlB,EAAQC,kBAC/BnlB,wBAAyBklB,EAAQG,qBAEzC,CAIA,OAHI5vD,KAAK05C,cACL15C,KAAKy5C,YAEFz5C,IACX,CAEA,QAAA2yC,GACI,MAAMnI,EAAUxqC,KAAKi6C,eAAiBj6C,KAAK01B,QACrC+U,EAAQzqC,KAAKi6C,eAAiBj6C,KAAK01B,QAAU11B,KAAK88C,gBAExD,OADe98C,KAAK6qC,iBAAmBd,GAAKE,KAAOO,EAAUC,CAEjE,CAGA,eAAAqlB,GACI,OAAO9vD,KAAKi6C,eAAiBj6C,KAAK01B,QAAU11B,KAAK88C,gBAAkB,CACvE,CAEA,gBAAAuS,GACI,MAAMvT,EAAa97C,KAAKsxB,gBACxB,OAAoC1tB,MAAhC5D,KAAK+vD,wBACE/vD,KAAK+vD,wBAGZ/vD,KAAKm9C,KACErB,EAAWhnB,oBAElBgnB,EACO97C,KAAKgxC,qBAAuBjH,GAAKC,GAAK8R,EAAW1nB,kBAAoB0nB,EAAWznB,oBAEpF,CACX,CAEA,aAAA27B,CAAcvlD,GAEV,OADAzK,KAAK+vD,wBAA0BtlD,EAASs/B,GAAKI,OACtCnqC,IACX,CAEA,cAAAszC,GACI,IAAKtzC,KAAKk0B,KACN,MAAM,IAAI/wB,EAAa,SAAU,kCACrC,OAAOnD,KAAKk0B,KAAKwX,YACrB,CAEA,cAAAwH,CAAeqC,GACX,MAAM/c,EAAQx4B,KAAKu5B,aACnB,GAAIv5B,KAAK+wC,UAAW,CAChB,MAAMsC,EAAUrzC,KAAKszC,iBACrB,IAAKD,EACD,MAAM,IAAIlwC,EAAa,eAAgB,+BAC3C,OAAO8B,KAAK8mC,IAAIvT,EAAM0a,eAAeqC,GAAWlC,EAAQpH,KAAOjsC,KAAKipC,eAAegT,oBAAsB1G,EAAW,GACxH,CAEI,OAAO/c,EAAM0a,eAAeqC,EAEpC,CAEA,iBAAApC,CAAkBoC,GACd,MAAM/c,EAAQx4B,KAAKu5B,aACnB,GAAIv5B,KAAK+wC,UAAW,CAChB,MAAMsC,EAAUrzC,KAAKszC,iBACrB,IAAKD,EACD,MAAM,IAAIlwC,EAAa,eAAgB,+BAC3C,OAAO8B,KAAK6E,IAAI0uB,EAAM0a,eAAeqC,GAAWlC,EAAQnH,MAAQlsC,KAAKipC,eAAegT,mBAAqB1G,EAC7G,CAEI,OAAO/c,EAAM2a,kBAAkBoC,EAEvC,CACA,OAAA0Z,GACI,OAAmD,GAA5C5gC,EAAOiD,cAActxB,KAAK+uB,UAAUoF,OAAiBn0B,KAAKm9C,IACrE,CAEA,UAAAxD,GACI,IAAI9rC,EAGJ,OAFqB,QAApBA,EAAK7N,KAAKm9C,YAAyB,IAAPtvC,GAAyBA,EAAG8rC,aACzD35C,KAAK45C,eAAgB,EACd55C,IACX,CAEA,QAAAiwD,CAASC,GACL,IAAIriD,EACJ7N,KAAKuW,eACLvW,KAAK+W,cACL/W,KAAK8uD,QAAQ,IAAI/kB,GAAKmmB,IACD,QAApBriD,EAAK7N,KAAKk0B,YAAyB,IAAPrmB,GAAyBA,EAAG0J,WAAWvX,KAAKsX,cAAcd,MAC3F,EClMJ,SAAS25C,GAAkB5zC,EAAMwe,EAAMq1B,GACnC,MAAMC,EAAQD,EACd7zC,EAAKvY,MAAQqsD,EACb9zC,EAAK+zC,SAAWD,EAChB9zC,EAAKg0C,SAAWF,EAChB9zC,EAAKwe,KAAKy1B,WAAW,EAAGj0C,EAAKwe,KAAK01B,WAAW,GAAKJ,EACtD,CASA,MAAMvtD,WAAkBE,GACpB,mBAAWtB,GACP,OAAOG,EAASiB,SACpB,CAIA,kBAAW4tD,GACP,OAAO3mB,GAAKC,EAChB,CAIA,oBAAW2mB,GACP,OAAO5mB,GAAKE,IAChB,CACA,6BAAW2mB,GACP,OAAO,CACX,CACA,6BAAWC,GAEP,OADkBxiC,EAAOC,mBACR3c,aAAa,sBAClC,CAEA,aAAO+xB,CAAO7S,EAAO8S,GACjB,IAAI91B,EAAI8F,EACR,IAAKkd,GAASA,EAAMhrB,OAAS,EACzB,OAAO,EACX,MAAMirD,EAAY,GAClB,IAAK,IAAIroD,EAAI,EAAGA,EAAIooB,EAAMhrB,OAAQ4C,IAAK,CAEnC,MAAM47B,EAAQxT,EAAMpoB,GAAGsoD,eACjB/sD,EAAOqgC,EAAM,GAAGsX,SAAS33C,KAC/B,IAAIgtD,EAAO3sB,EAAMA,EAAMx+B,OAAS,GAAG81C,SAAS33C,KAC5C,MAAM8sC,EAAgBjgB,EAAMpoB,GAAGuoC,mBACzBigB,EAAUpgC,EAAMpoB,GAAG2mD,gBAAkB,GACrC8B,EAAUrgC,EAAMpoB,GAAG8mD,uBAAyB,GAClD,IAAI4B,EACAtgC,EAAMpoB,GAAG6/B,UACT6oB,EAAOntD,EAAO6sB,EAAMpoB,GAAGqzC,WAAWrnB,WAClCu8B,EAAOhtD,EAAO6sB,EAAMpoB,GAAGqzC,WAAWpnB,aAGlCy8B,EACsB,IAAlBrgB,EAAsBzM,EAAMA,EAAMx+B,OAAS,GAAG81C,SAAS33C,KAAOitD,EAAU5sB,EAAMA,EAAMx+B,OAAS,GAAG81C,SAAS33C,KAC7GgtD,EAAyB,IAAlBlgB,EAAsBzM,EAAM,GAAGsX,SAAS33C,KAAOqgC,EAAM,GAAGsX,SAAS33C,KAAOitD,GAEnFH,EAAU57C,KAAK,CACXlR,KAAMqgC,EAAM,GAAGsX,SAAS33C,KACxBssD,QAASa,EACTZ,QAASS,EACTI,OAAQvgC,EAAMpoB,GAAG6/B,SACjBwI,cAAeA,EACfmgB,UACAC,UACAG,YAAaxgC,EAAMpoB,GAAG6oD,qBACtBC,aAAc1gC,EAAMpoB,GAAGulD,cACvBjzB,KAAMlK,EAAMpoB,IAEpB,CACA,IACI+oD,EACAC,EACAC,EAHAnqB,EAAS,EAIb,MAAM/wB,EAAO,EAAC,GAAO,GAAO,GAC5B,IAAK,IAAI/N,EAAI,EAAGA,EAAIqoD,EAAUjrD,OAAQ4C,IAClC+N,EAAK/N,GAA8C,GAAzCqoD,EAAUroD,GAAGsyB,KAAKkO,eAAezyB,KAE/C,GAAIA,EAAK,IAAMA,EAAK,IAAMA,EAAK,GAE3B+wB,EAAS,EACTiqB,EAAQV,EAAU,GAClBW,EAAQX,EAAU,GAClBY,EAAQZ,EAAU,QAEjB,GAAIt6C,EAAK,IAAMA,EAAK,GAErB+wB,EAAS,EACTiqB,EAAQV,EAAU,GAClBY,EAAQZ,EAAU,QAEjB,GAAIt6C,EAAK,IAAMA,EAAK,GAErB+wB,EAAS,EACTiqB,EAAQV,EAAU,GAClBY,EAAQZ,EAAU,OAEjB,KAAIt6C,EAAK,KAAMA,EAAK,GAQrB,OAAO,EANP+wB,EAAS,EACTiqB,EAAQV,EAAU,GAClBY,EAAQZ,EAAU,EAKtB,CAGe,IAAXvpB,IAAyC,IAAzBiqB,EAAM1gB,eAAgD,IAAxB4gB,EAAM5gB,gBACpD0gB,EAAQV,EAAU,GAClBY,EAAQZ,EAAU,IAEtB,MAAMa,EAAc1sD,KAAK6E,IAAI0nD,EAAMH,YAAaK,EAAML,aACtD,IAAIr4B,EAAS,EAEb,GAAe,IAAXuO,EAAc,CACd,MAAMqqB,EAAcJ,EAAMz2B,KAAKgW,WAAa2gB,EAAM32B,KAAKgW,WAAaygB,EAAM1gB,gBAAkB4gB,EAAM5gB,cAAgB,EAAM,GACxH,GAAI4gB,EAAMN,QAAUI,EAAMJ,QAAUI,EAAMz2B,KAAKhM,WAAa2iC,EAAM32B,KAAKhM,SACnE2iC,EAAM32B,KAAKkO,eAAezyB,MAAO,OAEhC,GAAIg7C,EAAMjB,SAAWmB,EAAMpB,QAAUsB,EACtC,GAAIJ,EAAMJ,OAENjB,GAAkBqB,EAAOE,EAAO,QAE/B,GAAIA,EAAMN,OAEXjB,GAAkBuB,EAAOF,GAAQ,OAEhC,CAID,MAAMK,EAAW5sD,KAAK8C,IAAIypD,EAAMxtD,KAAO0tD,EAAM1tD,MAC7C,GAAIwtD,EAAMz2B,KAAKgW,WAAa2gB,EAAM32B,KAAKgW,UAAW,CAC9C,MAAM+gB,EAAYzjC,EAAOkB,aAAmE,QAArD1hB,EAAK2jD,EAAMz2B,KAAKg2B,eAAe,GAAGpV,SAASt4C,YAAyB,IAAPwK,EAAgBA,EAAK,IAAK2jD,EAAMz2B,KAAKhM,UACnIgjC,EAAY1jC,EAAOkB,aAAsG,QAAxF5b,EAAK+9C,EAAM32B,KAAKg2B,eAAeW,EAAM32B,KAAKg2B,eAAelrD,OAAS,GAAG81C,SAASt4C,YAAyB,IAAPsQ,EAAgBA,EAAK,IAAK+9C,EAAM32B,KAAKhM,WAG3KV,EAAOuD,QAEJkgC,IAAcC,GAEdP,EAAMz2B,KAAK8N,eAAe2U,QAAQrX,GAASA,EAAKrxB,gBAAkBjT,EAASO,KAA2B,IAApB+jC,EAAKjL,aAClFr1B,SACD6rD,EAAM32B,KAAK8N,eAAe2U,QAAQrX,GAASA,EAAKrxB,gBAAkBjT,EAASO,KAA2B,IAApB+jC,EAAKjL,aAClFr1B,QAERgsD,EAAW,GAAKA,EAAW,GAE5BpW,KAAKC,UAAU8V,EAAMz2B,KAAKzlB,cAAgBmmC,KAAKC,UAAUgW,EAAM32B,KAAKzlB,aACpE0jB,EAAS24B,EAAc,EACnBH,EAAM1gB,gBAAkB4gB,EAAM5gB,cAE9B0gB,EAAMz2B,KAAKrC,UAAUM,GAIrB04B,EAAM32B,KAAKrC,UAAUM,IAGpBw4B,EAAMz2B,KAAK2M,QAAUgqB,EAAM32B,KAAK2M,OAEjC8pB,EAAM1gB,gBAAkB4gB,EAAM5gB,gBAC1B0gB,EAAMxtD,MAAQ0tD,EAAM1tD,MACpBg1B,EAAS24B,EAAc,EACvBH,EAAMz2B,KAAKrC,UAAUM,IAIO,IAAxB04B,EAAM5gB,gBACN4gB,EAAM5gB,eAAiB,EACvB4gB,EAAM32B,KAAKy0B,kBAAkB,IAKjD,MACSqC,EAAW,GAChB74B,EAAS24B,EAAc,EACnBH,EAAMz2B,KAAKhM,SAAW2iC,EAAM32B,KAAKhM,SAEjCyiC,EAAMz2B,KAAKrC,UAAUM,GAIrB04B,EAAM32B,KAAKrC,UAAUM,IAGpBw4B,EAAMz2B,KAAKgW,WAChBygB,EAAM1gB,eAAiB0gB,EAAMz2B,KAAKiW,mBAClCwgB,EAAMz2B,KAAKy0B,iBAAiBgC,EAAM1gB,gBAE7B4gB,EAAM32B,KAAKgW,YAChB2gB,EAAM5gB,eAAiB4gB,EAAM32B,KAAKiW,mBAClC0gB,EAAM32B,KAAKy0B,iBAAiBkC,EAAM5gB,eAE1C,CAIJ,OADAnN,EAAMsO,aAAejZ,GACd,CACX,CACA,IAAKy4B,EACD,MAAM,IAAItuD,EAAa,eAAgB,sBAK3C,GAAIsuD,EAAML,SAAWI,EAAMJ,SAAWM,EAAMN,SACpCI,EAAMjB,SAAWkB,EAAMnB,SAAWmB,EAAMlB,SAAWmB,EAAMpB,SAAS,CAqBlE,OApBmBmB,EAAMnB,QAAUmB,EAAMlB,QAC3BiB,EAAMjB,QAAUmB,EAAMpB,QAlNpD,SAAoB/zC,EAAMi1C,EAAOE,GAC7B,MAAMrB,EAAQ9zC,EAAKvY,KAAOQ,EAAQgtD,EAAMjB,QAASmB,EAAMpB,SACvD/zC,EAAKwe,KAAKy1B,WAAW,EAAGj0C,EAAKwe,KAAK01B,WAAW,GAAKJ,GAClD9zC,EAAKvY,MAAQqsD,EACb9zC,EAAK+zC,SAAWD,EAChB9zC,EAAKg0C,SAAWF,CACpB,CA+MoB2B,CAAWP,EAAOD,EAAOE,IAGzB14B,EAAS24B,EAAc,EACvBF,EAAM12B,KAAKrC,UAAUM,IACQ,IAAzB04B,EAAM32B,KAAKsiB,YACXqU,EAAM5gB,eAAiB,EACvB4gB,EAAM32B,KAAKy0B,kBAAkB,IAE7BgC,EAAMjB,SAAWmB,EAAMpB,UAAoC,IAAzBkB,EAAMz2B,KAAKsiB,YAC7CmU,EAAM1gB,cAAgB,EACtB0gB,EAAMz2B,KAAKy0B,iBAAiB,KAIpC7rB,EAAMsO,aAAejZ,GACd,CACX,CAGJ,OAAIw4B,EAAMJ,QAAUK,EAAML,QAAUM,EAAMN,QAEtCI,EAAMz2B,KAAKkO,eAAezyB,MAAO,EAEjCk7C,EAAM32B,KAAKkO,eAAezyB,MAAO,EAEjCmtB,EAAMsO,aAAejZ,GACd,IAGPy4B,EAAML,QAAUI,EAAMJ,QAAUK,EAAMlB,SAAWmB,EAAMpB,UAEvDmB,EAAM12B,KAAKkO,eAAezyB,MAAO,GAEjCi7C,EAAML,QAAUM,EAAMN,QAAUI,EAAMjB,SAAWkB,EAAMnB,UAEvDmB,EAAM12B,KAAKkO,eAAezyB,MAAO,GAEjCg7C,EAAMJ,QAAUI,EAAMjB,SAAWkB,EAAMnB,SAEvCH,GAAkBqB,EAAOC,EAAO,GAEhCC,EAAMN,QAAUK,EAAMlB,SAAWmB,EAAMpB,SAEvCH,GAAkBuB,EAAOD,GAAQ,IAGjCD,EAAMjB,SAAWkB,EAAMnB,QAAU,IAAOmB,EAAMlB,SAAWmB,EAAMpB,WAE/Dt3B,EAAS24B,EAAc,EACvBF,EAAM12B,KAAKrC,UAAUM,IACQ,IAAzB04B,EAAM32B,KAAKsiB,YACXqU,EAAM5gB,eAAiB,EACvB4gB,EAAM32B,KAAKy0B,kBAAkB,IAE7BgC,EAAMjB,SAAWmB,EAAMpB,UAAoC,IAAzBkB,EAAMz2B,KAAKsiB,YAC7CmU,EAAM1gB,cAAgB,EACtB0gB,EAAMz2B,KAAKy0B,iBAAiB,KAGpC7rB,EAAMsO,aAAejZ,GACd,EACX,CACA,iBAAO2gB,CAAW9oB,GACd,QAAKA,IAELA,EAAMxb,SAAS0lB,GAASA,EAAK4e,gBACtB,EACX,CACA,WAAAl4C,CAAY25C,GACR,IAAIvtC,EAAI8F,EAAI60C,EACZjlD,MAAM63C,GAGNp7C,KAAKuwD,QAAU,EACfvwD,KAAKswD,QAAU,EAEftwD,KAAK+wD,eAAiB,GACtB/wD,KAAKiyD,gBAAkB,CAAC,EACxBjyD,KAAKyuB,KAAkC,QAA1B5gB,EAAKutC,EAAW3sB,YAAyB,IAAP5gB,EAAgBA,EAAK,SACpE7N,KAAK8uB,aAAkD,QAAlCnb,EAAKynC,EAAWtsB,oBAAiC,IAAPnb,EAAgBA,EAAK,EAEpF3T,KAAK87C,WAAaztB,EAAOiD,cAActxB,KAAK+uB,SAAU/uB,KAAK47C,UAC3Dl4C,EAAQ1D,KAAK87C,WAAY,eAAgB,gCAAgC97C,KAAK+uB,uBAAuB/uB,KAAK47C,aAE1G57C,KAAKwvB,WAAY,EACjBxvB,KAAKw0B,WAAa,EAElBx0B,KAAKkyD,oBAAqB,EAE1BlyD,KAAKmyD,WAAa,GAClBnyD,KAAKm3C,UAAY,GACjBn3C,KAAKipC,eAAiB5oC,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGhY,KAAKipC,gBAAiB,CAExEiT,iBAAkBd,EAAWc,kBAAoB7tB,EAAOsD,oBAExDwqB,UAAWf,EAAWe,WAAar5C,GAAU8tD,qBACjD5wD,KAAKoyD,oBACLpyD,KAAK+uD,YAED3T,EAAWiX,UACXryD,KAAKsyD,WAGLtyD,KAAKwvD,iBAAsD,QAApChH,EAAKpN,EAAWvQ,sBAAmC,IAAP2d,EAAgBA,EAAKze,GAAKC,IAEjGhqC,KAAKo4B,QACLp4B,KAAKgvD,WACT,CACA,KAAA52B,GACI70B,MAAM60B,QAEN,MAAMm6B,EAAiBvyD,KAAKmyD,WAAWl+C,KAAKu+C,GAAaA,EAASl9C,aAClEtV,KAAKyyD,iBACLzyD,KAAKmyD,WAAW98C,SAAQ,CAACm9C,EAAUx/C,KAC/B,MAAM0/C,EAAgBH,EAAev/C,GACjC0/C,GACAF,EAASr9C,SAASu9C,EAAc,IAExC,MAAMl6B,EAAQx4B,KAAKw4B,MAKnB,OAJIA,GACAx4B,KAAKu4B,SAASC,GAElBx4B,KAAK2yD,wBACE3yD,IACX,CACA,OAAAs9C,CAAQH,GAOJ,OANAn9C,KAAKm9C,KAAOA,EACZn9C,KAAK2yD,wBAED3yD,KAAKk0B,MACLl0B,KAAKk0B,KAAKkX,aAAaprC,KAAKqvD,oBAEzBrvD,IACX,CAEA,SAAA+uD,GAEI,OADA/uD,KAAK8uD,QAAQ,IAAI/kB,GAAK,CAAEe,OAAQ9qC,KAAKsoC,YAC9BtoC,IACX,CAEA,cAAAyyD,GACIzyD,KAAKmyD,WAAa,GAClB,MAAMrhB,EAAgB9wC,KAAKgxC,mBACrBh9B,EAAOhU,KAAKq+C,UAClB,IAAIoO,EACAoF,EAIAloB,EACA8V,EACAzyC,EALAwiB,GAAY,EAMZshB,IAAkB/G,GAAKC,IACvBL,EAAQ,EACR8V,EAAMzrC,EAAKnO,OACXmH,EAAO,IAGP28B,EAAQ31B,EAAKnO,OAAS,EACtB45C,GAAO,EACPzyC,GAAQ,GAEZ,IAAK,IAAIvE,EAAIkhC,EAAOlhC,IAAMg3C,EAAKh3C,GAAKuE,EAAM,CAEtC,MAAM4lD,EAAY5yD,KAAK+wD,eAAetoD,GAAGkzC,SACnC33C,EAAO4uD,EAAU5uD,UAGNJ,IAAb6oD,EACAA,EAAWzoD,GAGX6tD,EAAW5sD,KAAK8C,IAAI0kD,EAAWzoD,GACd,IAAb6tD,GAA+B,KAAbA,EAClBriC,GAAaA,GAGbA,GAAY,EACZxvB,KAAKkyD,oBAAqB,IAGlCzF,EAAWzoD,EACX,MAAM6uD,EAAW,IAAIrF,GAAS,CAC1Bz+B,SAAU/uB,KAAK+uB,SACf6+B,UAAW5tD,KAAK47C,SAChBpsB,YACAqb,eAAgBiG,EAChBgd,kBAAmB8E,EAAUvvD,KAC7B64C,iBAAkBl8C,KAAKipC,eAAeiT,iBACtCxmB,QAASk9B,EAAUl2C,YACnBgxC,iBAAkBkF,EAAUlF,iBAC5BC,mBAAoBiF,EAAUjF,mBAC9B3pD,KAAM4uD,EAAU5uD,OAEpBhE,KAAKgV,gBAAgB69C,GACrB7yD,KAAKmyD,WAAWnyD,KAAK+wD,eAAetoD,GAAGuK,OAAS6/C,CACpD,CACA,OAAO7yD,KAAKmyD,UAChB,CAEA,QAAAG,GACItyD,KAAKwvD,iBAAiBxvD,KAAK8yD,gCAC/B,CACA,6BAAAA,GAGI9yD,KAAKuwD,QAAUvwD,KAAK+wD,eAAe,GAAGpV,SAAS33C,KAC/ChE,KAAKswD,QAAUtwD,KAAK+wD,eAAe/wD,KAAK27C,SAAS91C,OAAS,GAAG81C,SAAS33C,KAItE,OAFiBhE,KAAKuwD,QAAUvwD,KAAKswD,SAAW,EAD5B,EAE0BvmB,GAAKC,GAAKD,GAAKE,IAEjE,CAEA,iBAAAmoB,GACI,IAAI3F,EACJ,IAAK,IAAIhkD,EAAI,EAAGA,EAAIzI,KAAKgU,KAAKnO,SAAU4C,EAAG,CACvC,MAAMtI,EAAMH,KAAKgU,KAAKvL,GAGlBzI,KAAK87C,WAAWv/B,OAChBvc,KAAK87C,WAAWnnB,SAAWx0B,GAC/B,MAAM0uB,EAAU,CAAEC,aAAc9uB,KAAK8uB,cAAgB,EAAGC,SAAU/uB,KAAK+uB,UACjEsV,EAAQhW,EAAOK,cAAcvuB,EAAKH,KAAKyuB,KAAMI,GACnD,IAAKwV,EACD,MAAM,IAAIlhC,EAAa,eAAgB,oCAAoChD,KAG7D,MAAdkkC,EAAMlkC,MACgB,MAAlBH,KAAK+uB,UAAsC,MAAlB/uB,KAAK+uB,SAC9BsV,EAAMrgC,KAAO,EAGbqgC,EAAMrgC,KAAO,GAIrB,MAAMA,EAAOqgC,EAAMrgC,KACHJ,MAAZ6oD,EACAA,EAAWzoD,EAGuB,KAA9BiB,KAAK8C,IAAI0kD,EAAWzoD,KACpBhE,KAAKwvB,WAAY,EACjB6U,EAAM7U,WAAY,EAGdxvB,KAAK27C,SAAS91C,OAAS,IACvB7F,KAAK27C,SAASlzC,EAAI,GAAG+mB,WAAY,IAI7Ci9B,EAAWzoD,EACXhE,KAAK27C,SAASzmC,KAAKmvB,EACvB,CAGArkC,KAAK27C,SAAStmC,SAAQ,CAACsmC,EAAU3oC,KAC7BhT,KAAK+wD,eAAe77C,KAAK,CAAEymC,WAAU3oC,SAAQ,IAEjDhT,KAAK+wD,eAAejsB,MAAK,CAACrgC,EAAGC,IAAMD,EAAEk3C,SAAS33C,KAAOU,EAAEi3C,SAAS33C,MACpE,CAEA,cAAAqT,GACI,IAAIxJ,EAAI8F,EACR,IAAK3T,KAAK05C,aACN,MAAM,IAAIv2C,EAAa,kBAAmB,qDAE9C,MAAQqH,MAAO1B,EAAC,UAAEszB,EAAS,oBAAEge,GAAwBp6C,KAAKqR,aACpD1N,EAAI3D,KAAKi6C,eAAiB7d,EAAYge,EAC5C,IAAI2Y,EAAO,EACPC,EAAO,EACX,MAAMC,GAAsH,QAAlGt/C,EAAgC,QAA1B9F,EAAK7N,KAAKk8B,kBAA+B,IAAPruB,OAAgB,EAASA,EAAG42B,gCAA6C,IAAP9wB,EAAgBA,EAAK,GAAK,EACxJi+C,EAAgC,EAAlBqB,EACpB,GAAIjzD,KAAKsoC,SAAU,CACf,MAAMz/B,EAAI7I,KAAK4rC,GAAG,GACZsnB,EAAO7kC,EAAO6C,mBAAmBlxB,KAAK+uB,UACxCmkC,EAAKlsD,OAAO,IAAMksD,EAAKlsD,OAAO,IAC9B+rD,EAAOlqD,EAAIoqD,EACXD,EAAOnqD,EAAIoqD,IAGXF,EAAOlqD,EAAI7I,KAAK87C,WAAWrnB,WAAam9B,EACxCoB,EAAOnqD,EAAI7I,KAAK87C,WAAWpnB,WAAak9B,EAEhD,MACK,GAAI5xD,KAAK87C,WAAW5nB,KAAM,CAC3B,MAAM0X,EAAK5rC,KAAKszC,iBAChB1H,EAAGM,OAAS+mB,EAAkBjzD,KAAKgxC,mBACnC+hB,EAAO9tD,KAAK8mC,IAAIH,EAAGK,KAAML,EAAGM,OAC5B8mB,EAAO/tD,KAAK6E,IAAI8hC,EAAGK,KAAML,EAAGM,MAChC,KACK,CACD6mB,EAAO,EACPC,EAAO,EACP,IAAK,IAAIvqD,EAAI,EAAGA,EAAIzI,KAAK4rC,GAAG/lC,SAAU4C,EAAG,CACrC,MAAMqyC,EAAK96C,KAAK4rC,GAAGnjC,GACT,IAANA,GACAsqD,EAAOjY,EACPkY,EAAOlY,IAGPiY,EAAO9tD,KAAK8mC,IAAI+O,EAAIiY,GACpBC,EAAO/tD,KAAK6E,IAAIgxC,EAAIkY,GAE5B,CACAD,GAAQE,EACRD,GAAQC,CACZ,CACA,OAAO,IAAItqD,EAAYhF,EAAGovD,EAAMjqD,EAAGkqD,EAAOD,EAC9C,CAGA,aAAArhB,CAAciL,GACV,IAAK38C,KAAK27C,SAAS91C,OACf,MAAM,IAAI1C,EAAa,aAAc,yEAEzC,IAAIgwD,EAAanzD,KAAK27C,SAAS,GAAG33C,KAElC,IAAK,IAAIyE,EAAI,EAAGA,EAAIzI,KAAK27C,SAAS91C,OAAQ4C,IAAK,CAC3C,MAAM2qD,EAAWpzD,KAAK27C,SAASlzC,GAAGzE,KAC9B24C,EACIyW,EAAWD,IACXA,EAAaC,GAGbA,EAAWD,IACXA,EAAaC,EAEzB,CACA,OAAOD,CACX,CAIA,MAAA7qB,GACI,OAAOtoC,KAAK87C,WAAWv/B,IAC3B,CAEA,OAAA82C,GACI,OAAQrzD,KAAKsoC,UAAYtoC,KAAKgU,KAAKnO,OAAS,CAChD,CAEA,OAAAkrC,GACI,OAAO/wC,KAAK87C,WAAW5nB,IAC3B,CACA,OAAA+6B,GACI,OAAO1rD,MAAM0rD,YAAcjvD,KAAKsoC,QACpC,CACA,QAAAqK,GACI,MAAsB,MAAlB3yC,KAAK47C,SACE57C,KAAK8vD,kBAKLvsD,MAAMovC,YAAc3yC,KAAK6qC,eAAiBd,GAAKG,OAAS,GAAKlqC,KAAK6qC,gBAAkB,EAEnG,CAGA,cAAAqI,CAAeqC,GACX,MAAMlC,EAAUrzC,KAAKszC,iBACrB,OAAOruC,KAAK8mC,IAAI/rC,KAAKu5B,aAAa2Z,eAAeqC,GAAWlC,EAAQpH,KAAOjsC,KAAKipC,eAAegT,oBAAsB1G,EAAW,GACpI,CACA,iBAAApC,CAAkBoC,GACd,MAAMlC,EAAUrzC,KAAKszC,iBACrB,OAAOruC,KAAK6E,IAAI9J,KAAKu5B,aAAa2Z,eAAeqC,GAAWlC,EAAQnH,MAAQlsC,KAAKipC,eAAegT,mBAAqB1G,EACzH,CAGA,QAAAhd,CAASC,GACLj1B,MAAMg1B,SAASC,GACf,MAAMoT,EAAK5rC,KAAKmyD,WAAWl+C,KAAK4+C,IAC5BA,EAASt6B,SAASC,GACXq6B,EAAS5pD,UAGpB,GADAjJ,KAAKu8C,MAAM3Q,GACP5rC,KAAKk0B,KAAM,CACX,MAAM,MAAEwW,EAAK,SAAEC,GAAa3qC,KAAKszD,oBACjCtzD,KAAKk0B,KAAKqX,WAAWb,EAAOC,EAChC,CACA,OAAO3qC,IACX,CAEA,WAAAguD,GACI,OAAOhuD,KAAKwvB,SAChB,CAEA,gBAAA+jC,CAAiB/jC,GAEb,OADAxvB,KAAKwvB,UAAYA,EACVxvB,IACX,CAEA,YAAAi+C,GACI,IAAIC,EAAYl+C,KAAKi6C,eAIrB,OAHAiE,GAAal+C,KAAK88C,gBAAkB98C,KAAK01B,QAAU11B,KAAK06C,qBACpD16C,KAAKs7B,kBACL4iB,GAAal+C,KAAKs7B,gBAAgBk4B,iBAC/BtV,CACX,CAEA,WAAAC,GACI,IAAIC,EAAUp+C,KAAKi6C,eAEnB,OADAmE,GAAWp+C,KAAK01B,QAAU11B,KAAKo6C,oBACxBgE,CACX,CAEA,cAAAxB,GACI,IAAI6W,EAAWzzD,KAAK27C,SAAS,GAAG33C,KAChC,GAAIhE,KAAK27C,SAAS91C,OAAS,EAAG,CAC1B,MAAM4mD,EAAWzsD,KAAK27C,SAAS37C,KAAK27C,SAAS91C,OAAS,GAAG7B,KAGzDyvD,EAAWjvD,EAFCS,KAAK6E,IAAI2pD,EAAUhH,GACnBxnD,KAAK8mC,IAAI0nB,EAAUhH,GAEnC,CACA,OAAOgH,CACX,CAGA,kBAAA7pB,CAAmBjV,EAAU3hB,EAAO6b,EAAU,CAAC,GAC3C,IAAIhhB,EAAI8F,EACR,IAAK3T,KAAK05C,aACN,MAAM,IAAIv2C,EAAa,kBAAmB,wDAE9C,GAAuB,IAAnBnD,KAAK4rC,GAAG/lC,OACR,MAAM,IAAI1C,EAAa,YAAa,yCAExC,MAAM,MAAEi3B,EAAK,MAAEE,EAAK,KAAEE,EAAI,MAAEE,GAAUZ,GAASC,SAC/C,IAAIp2B,EAAI,EAiBR,OAhBIgxB,IAAa6F,EAEb72B,GAAI,EAECgxB,IAAa+F,GAElB/2B,EAAI3D,KAAK88C,gBAAkB98C,KAAK01B,QAAU,EACtC11B,KAAK6qC,iBAAmBd,GAAKC,IAC7BhqC,KAAKivD,YACJpgC,EAAQ68B,gBAvpBA,EAAC3wB,EAAM/nB,IAAUA,KAAW+nB,EAAKiW,qBAAuBjH,GAAKC,GAAKjP,EAAK4gB,SAAS91C,OAAS,EAAI,GAupB3E6tD,CAAiB1zD,KAAMgT,MAClDrP,GAAwI,QAAlIgQ,EAAsE,QAAhE9F,EAAK7N,gBAAmC,EAASA,KAAKm0B,YAAyB,IAAPtmB,OAAgB,EAASA,EAAGwD,aAAa7G,aAA0B,IAAPmJ,EAAgBA,EAAK,IAGpKghB,IAAa2F,GAAS3F,IAAayF,IACxCz2B,EAAI3D,KAAK88C,gBAAkB,GAExB,CACHn5C,EAAG3D,KAAKi6C,eAAiBt2C,EACzBkF,EAAG7I,KAAK4rC,GAAG54B,GAEnB,CAGA,QAAAmC,CAAS3G,GACL,OAAOjL,MAAM6R,cAAc5G,EAC/B,CACA,YAAAmlD,CAAanlD,GACT,MAAM0lB,EAAOl0B,KAAKmxC,UAGlB,OAFIjd,GACAA,EAAK/e,SAAS3G,GACXxO,IACX,CACA,YAAA4zD,GACI,IAAI/lD,EACJ,OAA4B,QAApBA,EAAK7N,KAAKk0B,YAAyB,IAAPrmB,OAAgB,EAASA,EAAGyH,UACpE,CACA,kBAAAu+C,CAAmBrlD,GACfxO,KAAKiyD,gBAAkBzjD,CAC3B,CACA,kBAAAslD,GACI,OAAO9zD,KAAKiyD,eAChB,CACA,YAAA8B,CAAavlD,GACT,IAAIX,EACiB,QAApBA,EAAK7N,KAAKm0B,YAAyB,IAAPtmB,GAAyBA,EAAGsH,SAAS3G,EACtE,CACA,YAAAwlD,GACI,IAAInmD,EACJ,OAA4B,QAApBA,EAAK7N,KAAKm0B,YAAyB,IAAPtmB,OAAgB,EAASA,EAAGyH,UACpE,CAKA,WAAA2+C,CAAYjhD,EAAOxE,GAEf,OADAxO,KAAKmyD,WAAWn/C,GAAOmC,SAAS3G,GACzBxO,IACX,CACA,UAAAwwD,CAAWx9C,EAAOhP,GAGd,OAFAhE,KAAK27C,SAAS3oC,GAAOhP,KAAOA,EAC5BhE,KAAKo4B,QACEp4B,IACX,CACA,UAAAywD,CAAWz9C,GACP,OAAOhT,KAAK27C,SAAS3oC,GAAOhP,IAChC,CAGA,kBAAAstD,GAEI,OAAOtxD,KAAK88C,iBAAmB98C,KAAKwvB,UAAY,EAAI,EACxD,CAGA,qBAAAmjC,GACI3yD,KAAKy8C,uBAAuBz8C,KAAKwvB,WAAaxvB,KAAK6qC,iBAAmBd,GAAKE,KAAOjqC,KAAK88C,gBAAkB,GAGzG98C,KAAK08C,yBAAyB18C,KAAKivD,WAAajvD,KAAKwvB,WAAaxvB,KAAK6qC,iBAAmBd,GAAKC,GAAKhqC,KAAK88C,gBAAkB,EAC/H,CAEA,SAAArD,GACI,GAAIz5C,KAAK05C,aACL,OACJ,IAAIwa,EAAkB,EAClBl0D,KAAKs7B,kBACLt7B,KAAKs7B,gBAAgBme,YAGmB,IAApCz5C,KAAKs7B,gBAAgBjL,aACrB6jC,EAAkBpxD,GAAU+tD,qBAGpC,IAAIrmD,EAAQxK,KAAK88C,gBAAkB98C,KAAKo6C,oBAAsBp6C,KAAK06C,qBAAuBwZ,EAEtFl0D,KAAKm0D,kBAAoBn0D,KAAK6qC,iBAAmBd,GAAKC,KACtDx/B,GAASxK,KAAK88C,iBAGlB98C,KAAK66B,SAASrwB,GACdxK,KAAK05C,cAAe,CACxB,CAoBA,iBAAA4Z,GAEI,IAEIc,EACAC,EAGAC,EACAC,EAPAC,EAAQC,IACRC,GAAWD,IAGXE,EAAc30D,KAAKu5B,aAAa8X,cAChCujB,EAAa,EAGbC,EAA0BF,EAC1BG,EAAyBF,EAuB7B,OAtBA50D,KAAKmyD,WAAW98C,SAASw9C,IACrB,MAAM7uD,EAAO6uD,EAAS5E,UAChBplD,EAAIgqD,EAAS5pD,OACnBurD,EAAOvvD,KAAK8mC,IAAIljC,EAAG2rD,GACnBE,EAAUzvD,KAAK6E,IAAIjB,EAAG6rD,QACH9wD,IAAfywD,GAA4BxB,EAAS7E,gBACrCqG,EAAaxB,EAAS5Y,qBAEJr2C,IAAlBwwD,GAAgCvB,EAAS7E,gBACzCoG,EAAgBvB,EAAS5Y,gBAE7B0a,EAAc1vD,KAAK6E,IAAI9F,EAAM2wD,GAC7BC,EAAa3vD,KAAK8mC,IAAI/nC,EAAM4wD,GACxB/B,EAAS7E,eACTsG,OAAgD1wD,IAAzB0wD,EAAqCtwD,EAAOiB,KAAK6E,IAAI9F,EAAMswD,GAClFC,OAA8C3wD,IAAxB2wD,EAAoCvwD,EAAOiB,KAAK8mC,IAAI/nC,EAAMuwD,KAGhFM,EAA0B5vD,KAAK6E,IAAI9F,EAAM6wD,GACzCC,EAAyB7vD,KAAK8mC,IAAI/nC,EAAM8wD,GAC5C,GACD90D,MACI,CACH0qC,MAAO8pB,EACP7pB,SAAU+pB,EACVK,YAAaV,EACbW,gBAAiBZ,EACjBa,aAAcN,EACdO,YAAaN,EACbO,uBAAwBb,EACxBc,sBAAuBb,EACvBc,2BAA4BR,EAC5BS,0BAA2BR,EAEnC,CAEA,iBAAAS,GACI,OAAOv1D,KAAKi6C,eAAiBj6C,KAAK01B,OACtC,CAEA,eAAA8/B,GAEI,OADex1D,KAAKu1D,oBACJv1D,KAAK88C,eACzB,CACA,aAAI2Y,GACA,OAAOz1D,KAAKmyD,WAAWjuD,OAC3B,CAEA,cAAIwxD,GAEA,OA70BJtxD,QAAQC,KAAK,uEAAwE,iDA60B1ErE,KAAKy1D,SAChB,CAEA,eAAAE,GACI,MAAMn9B,EAAQx4B,KAAKu5B,cACb,WAAEuiB,EAAY7S,gBAAgB,UAAEkT,IAAiBn8C,KACjD+2B,EAAM/2B,KAAKuW,eACX/L,EAAQsxC,EAAWzrB,WAAyB,EAAZ8rB,EAChCyZ,EAAc,GAAK9Z,EAAWzrB,WAAa8rB,GAAapS,GAAKG,MAAQ,EAC3E,GAAIlqC,KAAKsoC,SACL,OACJ,IAAKvR,EACD,MAAM,IAAI5zB,EAAa,kBAAmB,wCAE9C,MAAM,aAAE8xD,EAAY,YAAEC,EAAW,uBAAEC,EAAsB,2BAAEE,EAA0B,sBAAED,EAAqB,0BAAEE,EAAyB,YAAEP,EAAW,gBAAEC,GAAqBh1D,KAAKszD,oBAEhL,GAAI2B,EAAe,GAAKC,EAAc,EAClC,OACJ,MAAMW,EAAQ5wD,KAAK8mC,IAAIgpB,QAAiDA,EAAc,EAAGC,QAAyDA,EAAkB,GAC9Jc,EAAiB,CAACjtD,EAAGktD,EAAQvmC,KAC/B,IAAI7rB,EAEAA,EADA6rB,GAAaumC,EACTF,EAAQ1Z,EACP4Z,GACAf,QAAyDA,EAAkB,GAAK7Y,GAEhF4Y,QAAiDA,EAAc,GAAK5Y,EAC7E,MAAM6Z,EAAcD,GAAUvmC,EAAYomC,EAAcprD,EACxDusB,EAAIQ,YACJR,EAAIS,OAAO7zB,EAAGkF,GACdkuB,EAAIU,OAAO9zB,EAAIqyD,EAAantD,GAC5BkuB,EAAI5H,QAAQ,EAEV3gB,EAAQnO,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGwgB,EAAMy9B,6BAA8Bj2D,KAAK8zD,sBACvF9zD,KAAKuV,WAAWwhB,EAAKvoB,GAErB,IAAK,IAAIxK,EAAO,EAAGA,GAAQixD,IAAgBjxD,EAAM,CAC7C,MAAM+xD,OAA6BnyD,IAApBoxD,GAAiChxD,GAAQqxD,EAClD7lC,OAAuC5rB,IAA3BuxD,GAAwCnxD,GAAQmxD,EAClEW,EAAet9B,EAAMg2B,YAAYxqD,GAAO+xD,EAAQvmC,EACpD,CAEA,IAAK,IAAIxrB,EAAO,EAAGA,GAAQkxD,IAAelxD,EAAM,CAC5C,MAAM+xD,OAA6BnyD,IAApBoxD,GAAiChxD,GAAQsxD,EAClD9lC,OAAsC5rB,IAA1BwxD,GAAuCpxD,GAAQoxD,EACjEU,EAAet9B,EAAMg2B,YAAYxqD,GAAO+xD,EAAQvmC,EACpD,CACAxvB,KAAKoW,aAAa2gB,EAAKvoB,EAC3B,CAEA,aAAA0nD,CAAcC,GACV,MAAMp/B,EAAM/2B,KAAKuW,eACjB,IAAK,IAAI9N,EAAI,EAAGA,EAAIzI,KAAKm3C,UAAUtxC,OAAQ4C,IAAK,CAC5C,MAAMqgC,EAAW9oC,KAAKm3C,UAAU1uC,GAC1BuK,EAAQ81B,EAAS3N,aACjB03B,EAAW7yD,KAAKmyD,WAAWn/C,GACjC,GAAI6/C,GAAYsD,EAAe,CAC3B,MAAMC,EAAgBvD,EAASv9C,WAC/Bu9C,EAASt9C,WAAWwhB,EAAKq/B,GACzBttB,EAASvxB,WAAWwf,GACpB+R,EAASxyB,gBACTu8C,EAASz8C,aAAa2gB,EAAKq/B,EAC/B,CACJ,CACJ,CACA,cAAAjC,GACI,MAAMpjB,OAAwBntC,IAAd5D,KAAKk0B,KACf+6B,EAAkC,GAAxBjvD,KAAK87C,WAAW3nB,KAC1BkiC,OAA0BzyD,IAAd5D,KAAKm9C,KACvB,OAAOpM,GAAWke,GAAWoH,CACjC,CAEA,QAAAC,GACI,IAAIzoD,EAAI8F,EAAI60C,EAAI+N,EAAIC,EACpB,MAAMz/B,EAAM/2B,KAAKuW,eACjB,IAAKwgB,EACD,MAAM,IAAI5zB,EAAa,kBAAmB,wCAE9C,GAAInD,KAAKm0D,iBAAkB,CACvB,MAAM,MAAEzpB,EAAK,SAAEC,GAAa3qC,KAAKszD,oBAE3BmD,EAAiBz2D,KAAKk0B,KAAKsX,YAC3BkrB,EAAQ12D,KAAK2yC,WAKbgkB,EAAQ32D,KAAKgxC,qBAAuBjH,GAAKE,KAEvCS,EACI+rB,EACA,GACCz2D,KAAK87C,WAAa97C,KAAK87C,WAAWznB,oBAAsB,GAAKr0B,KAAK42D,qBACuB,QAAxFjjD,EAA0B,QAApB9F,EAAK7N,KAAKm0B,YAAyB,IAAPtmB,OAAgB,EAASA,EAAGwD,aAAaskB,eAA4B,IAAPhiB,EAAgBA,EAAK,IAAM,EAAI3T,KAAK42D,qBAE1IjsB,EACI8rB,EACA,GACCz2D,KAAK87C,WAAa97C,KAAK87C,WAAW1nB,kBAAoB,GAAKp0B,KAAK42D,qBACyB,QAAxFL,EAA0B,QAApB/N,EAAKxoD,KAAKm0B,YAAyB,IAAPq0B,OAAgB,EAASA,EAAGn3C,aAAaskB,eAA4B,IAAP4gC,EAAgBA,EAAK,IAAM,EAAIv2D,KAAK42D,qBAE7H,QAApBJ,EAAKx2D,KAAKm0B,YAAyB,IAAPqiC,GAAyBA,EAAGp9B,OAAOrC,EAAK2/B,EAAOC,EAChF,CACJ,CAEA,aAAAE,GACI,MAAM9/B,EAAM/2B,KAAKuW,eACjBvW,KAAKmyD,WAAW98C,SAASw9C,IACrBA,EAASt9C,WAAWwhB,GACpBA,EAAI6V,UAAU,WAAYimB,EAASt/C,aAAa,MAAO,CAAEs5B,aAAa,IACtEgmB,EAASt7C,WAAWwf,GAAKvgB,OACzBxW,KAAKk2D,cAAcrD,GACnB97B,EAAI+V,aACJ+lB,EAASz8C,aAAa2gB,EAAI,GAElC,CACA,QAAAk5B,CAASC,GAIL,MAAMn5B,EAAM/2B,KAAKuW,eACb25C,GACAlwD,KAAK8uD,QAAQ,IAAI/kB,GAAKmmB,IAItBlwD,KAAKm0D,kBAAoBn0D,KAAKk0B,MAC9Bl0B,KAAKk0B,KAAKoY,sBAEVtsC,KAAKk0B,MACLl0B,KAAKk0B,KAAK3c,WAAWwf,GAAKvgB,MAElC,CAEA,iBAAAogD,GACI,OAAO,CACX,CAIA,gBAAAvH,GACI,MAAMyH,EAAuBvzD,MAAM8rD,mBACnC,IAAKrvD,KAAK87C,WAAW5nB,KACjB,OAAO4iC,EAEX,MAAMjsB,EAAiB7qC,KAAKgxC,mBAC5B,GAAInG,IAAmB7qC,KAAK8yD,gCACxB,OAAOgE,EAEX,IAAIC,EAUAA,EARAlsB,IAAmBd,GAAKC,GADR,EASkBhqC,KAAKswD,QAGnBtwD,KAAKuwD,QAZT,EAepB,MAAMyG,EAAkCD,EAAoB,IAC5D,GAAIC,GAAmC,EACnC,OAAOF,EAEX,MAAMt+B,EAAQx4B,KAAKk8B,WACnB,IAAI+6B,EAAwB,GAI5B,OAHarzD,MAAT40B,IACAy+B,EAAwBz+B,EAAMiM,0BAE3BqyB,EAAuBE,EAAkCC,CACpE,CAEA,IAAAzgD,GACI,IAAiC,IAA7BxW,KAAKipC,eAAezyB,KACpB,OACJ,GAAuB,IAAnBxW,KAAK4rC,GAAG/lC,OACR,MAAM,IAAI1C,EAAa,YAAa,qCAExC,MAAM4zB,EAAM/2B,KAAKuW,eACX2gD,EAASl3D,KAAKu1D,oBACd4B,EAAmBn3D,KAAK+wC,YAAc/wC,KAAKm9C,KAGjD,GADAn9C,KAAKmyD,WAAW98C,SAASw9C,GAAaA,EAASzpD,KAAK8tD,KAChDl3D,KAAKk0B,KAAM,CAEX,MAAMkjC,EAAQp3D,KAAK2yC,WACnB3yC,KAAKk0B,KAAKgX,mBAAmBksB,EAAOA,EACxC,EAzgCR,YAAcrzD,GACNjB,GAAU2gC,OACV5/B,EAAI,qBAAsBE,EAClC,CAugCQ,CAAE,aAAc/D,KAAKqzD,UAAY,UAAY,SAAUrzD,KAAKgU,MAE5DhU,KAAKuV,aACLwhB,EAAI6V,UAAU,YAAa5sC,KAAKuT,aAAa,OAC7CvT,KAAK21D,kBACDwB,GACAn3D,KAAKiwD,WACTjwD,KAAK62D,gBACL72D,KAAKs2D,WACLv/B,EAAI+V,aACJ9sC,KAAKoW,eACLpW,KAAK+W,aACT,EAEJjU,GAAU2gC,OAAQ,ECxiClB,MAAM4zB,WAAiB5iD,EACnB,mBAAW/S,GACP,OAAOG,EAASw1D,QACpB,CAaA,WAAA51D,CAAYovB,EAAO9rB,GACfxB,QACAvD,KAAKs3D,SAASzmC,GACd7wB,KAAK+E,KAAOA,EACZ/E,KAAKipC,eAAiB,CAClBsuB,IAAK,EACLC,IAAK,GACLC,aAAc,EACdC,cAAe,EACfC,aAAc,EACdhiC,QAAS,EACTiiC,YAAa,GAEjB53D,KAAKkY,WACT,CACA,YAAAizB,CAAajJ,GAET,OADAliC,KAAKkiC,UAAYA,EACVliC,IACX,CAMA,QAAAs3D,CAASzmC,GACL,IAAKA,EAAMgnC,aAAehnC,EAAMy6B,UAC5B,MAAM,IAAInoD,EAAa,eAAgB,yDAQ3C,GANK0tB,EAAMinC,gBACPjnC,EAAMinC,cAAgB,CAAC,IAEtBjnC,EAAMknC,eACPlnC,EAAMknC,aAAe,CAAC,IAEtBlnC,EAAMinC,cAAcjyD,SAAWgrB,EAAMknC,aAAalyD,OAClD,MAAM,IAAI1C,EAAa,eAAgB,gDAG3C,OADAnD,KAAK6wB,MAAQA,EACN7wB,IACX,CAIA,SAAAg4D,GACI,OAAQh4D,KAAK6wB,MAAMgnC,aAAe73D,KAAK6wB,MAAMy6B,SACjD,CACA,SAAA2M,CAAUrpC,GACN,GAA+B,IAA3BA,EAAOspC,SAASryD,QAA0C,IAA1B+oB,EAAOupC,QAAQtyD,OAC/C,MAAM,IAAI1C,EAAa,eAAgB,yBAE3C,MAAM4zB,EAAM/2B,KAAKuW,eACjB,IAAIghD,EAAMv3D,KAAKipC,eAAesuB,IAC1BC,EAAMx3D,KAAKipC,eAAeuuB,IAC1BvyD,KAAK8C,IAAI6mB,EAAOwpC,UAAYxpC,EAAOypC,YAAc,KACjDd,EAAM,EACNC,EAAM,GAEV,MAAME,EAAgB13D,KAAKipC,eAAeyuB,cACpCC,EAAe33D,KAAKipC,eAAe0uB,aACnChiC,EAAU31B,KAAKipC,eAAetT,QAAU/G,EAAOsT,UAI/C41B,EAAgB93D,KAAK6wB,MAAMinC,cAE3BC,EAAe/3D,KAAK6wB,MAAMknC,aAChC/3D,KAAKuV,aACLwhB,EAAI6V,UAAU,WAAY5sC,KAAKuT,aAAa,OAC5C,IAAK,IAAI9K,EAAI,EAAGA,EAAIqvD,EAAcjyD,SAAU4C,EAAG,CAC3C,MAAM06C,GAAQv0B,EAAOwpC,UAAYT,GAAgB/oC,EAAOypC,WAAaX,IAAkB,EACjFY,EAAa1pC,EAAOspC,SAASJ,EAAcrvD,IAAMktB,EACjD4iC,EAAY3pC,EAAOupC,QAAQJ,EAAatvD,IAAMktB,EACpD,GAAIlwB,MAAM6yD,IAAe7yD,MAAM8yD,GAC3B,MAAM,IAAIp1D,EAAa,eAAgB,kCAE3C,MAAMq1D,GAAYF,EAAaC,GAAa,EAAIhB,EAAM3oC,EAAOsT,UACvDu2B,GAAeH,EAAaC,GAAa,EAAIf,EAAM5oC,EAAOsT,UAChEnL,EAAIQ,YACJR,EAAIS,OAAO5I,EAAOypC,WAAaX,EAAeY,GAC9CvhC,EAAIW,iBAAiByrB,EAAMqV,EAAU5pC,EAAOwpC,UAAYT,EAAcY,GACtExhC,EAAIW,iBAAiByrB,EAAMsV,EAAa7pC,EAAOypC,WAAaX,EAAeY,GAC3EvhC,EAAI8f,YACJ9f,EAAIa,MACR,CACAb,EAAI+V,aACJ9sC,KAAKoW,cACT,CACA,UAAAotC,CAAW6U,EAAYD,GACnB,IAAIvqD,EAAI8F,EAAI60C,EACZ,IAAKxoD,KAAK+E,KACN,OACJ,MAAMgyB,EAAM/2B,KAAKuW,eACjB,IAAImiD,GAAYL,EAAaD,GAAa,EAC1CM,GAAY3hC,EAAI2sB,YAAY1jD,KAAK+E,MAAMyF,MAAQ,EAC/C,MAAMguB,EAAqG,QAA5F7kB,EAAsC,QAAhC9F,EAAK7N,KAAK6wB,MAAMgnC,kBAA+B,IAAPhqD,OAAgB,EAASA,EAAG0rB,oBAAiC,IAAP5lB,EAAgBA,EAAqC,QAA/B60C,EAAKxoD,KAAK6wB,MAAMy6B,iBAA8B,IAAP9C,OAAgB,EAASA,EAAGjvB,aACxMf,IACAzB,EAAIthB,OACJshB,EAAIvf,QAAQxX,KAAKyX,UACjBsf,EAAIwc,SAASvzC,KAAK+E,KAAM2zD,EAAW14D,KAAKipC,eAAewuB,aAAcj/B,EAAM0a,iBAAmB,GAC9Fnc,EAAI1gB,UAEZ,CAIA,QAAAsiD,GACI,OAAO34D,KAAK6wB,KAChB,CACA,IAAAra,GACIxW,KAAKuW,eACLvW,KAAK+W,cACL,MAAM8gD,EAAa73D,KAAK6wB,MAAMgnC,WACxBvM,EAAYtrD,KAAK6wB,MAAMy6B,UAE7B,IAAI+M,EAAa,EACbD,EAAY,EACZF,EAAW,CAAC,GACZC,EAAU,CAAC,GACXttB,EAAiB,EACrB,GAAIgtB,EACAQ,EAAaR,EAAW5Z,eAAiBj+C,KAAKipC,eAAe2uB,YAC7D/sB,EAAiBgtB,EAAW7mB,mBAC5BknB,EAAWL,EAAW7kB,aAErB,GAAIsY,EAAW,CAEhB+M,EADc/M,EAAU/xB,aACLq/B,eACnBV,EAAW5M,EAAUtY,QACrBhzC,KAAK6wB,MAAMinC,cAAgB93D,KAAK6wB,MAAMknC,YAC1C,CACA,GAAIzM,EACA8M,EAAY9M,EAAUnN,cAAgBn+C,KAAKipC,eAAe2uB,YAC1D/sB,EAAiBygB,EAAUta,mBAC3BmnB,EAAU7M,EAAUtY,aAEnB,GAAI6kB,EAAY,CAEjBO,EADcP,EAAWt+B,aACPs/B,aAClBV,EAAUN,EAAW7kB,QACrBhzC,KAAK6wB,MAAMknC,aAAe/3D,KAAK6wB,MAAMinC,aACzC,CAYA,OAXI93D,KAAKkiC,YACL2I,EAAiB7qC,KAAKkiC,WAE1BliC,KAAKi4D,UAAU,CACXI,aACAD,YACAF,WACAC,UACAj2B,UAAW2I,IAEf7qC,KAAKwjD,WAAW6U,EAAYD,IACrB,CACX,EAGJf,GAAS1/C,UAAYtX,OAAO2X,OAAO,CAAC,EAAGvD,EAAQkD,WC5KxC,MAAMmhD,WAAezB,GACxB,mBAAW31D,GACP,OAAOG,EAASi3D,MACpB,CACA,qBAAOC,CAAeloC,GAClB,OAAO,IAAIioC,GAAOjoC,EAAO,IAC7B,CACA,oBAAOmoC,CAAcnoC,GACjB,OAAO,IAAIioC,GAAOjoC,EAAO,IAC7B,CAYA,WAAApvB,CAAYovB,EAAO9rB,GACfxB,MAAMstB,EAAO9rB,GACb/E,KAAKipC,eAAesuB,IAAM,EAC1Bv3D,KAAKipC,eAAeuuB,IAAM,GAC1Bx3D,KAAKipC,eAAetT,QAAU,EAC9B31B,KAAKkiC,WAAa,CACtB,EC3BG,IAAI+2B,IACX,SAAWA,GACPA,EAAUA,EAAkB,OAAI,GAAK,SACrCA,EAAUA,EAAgB,KAAI,GAAK,OACnCA,EAAUA,EAAgB,KAAI,GAAK,MACtC,CAJD,CAIGA,KAAcA,GAAY,CAAC,IAIvB,MAAMC,WAAczkD,EACvB,mBAAW/S,GACP,OAAOG,EAASq3D,KACpB,CAOA,eAAWC,GACP,OAAOF,EACX,CACA,WAAAx3D,CAAY23D,GAYR,IAAIC,EACJ,GAZA91D,QACAvD,KAAKs5D,qBAAuB,EAC5Bt5D,KAAKu5D,KAAON,GAAUO,OACtBx5D,KAAK05C,cAAe,EACpB15C,KAAKy5D,UAAY,IAAIn0D,EAAS,EAAG,GACjCtF,KAAK05D,iBAAmB,EACxB15D,KAAKmoC,UAAY,GACjBnoC,KAAK6uB,QAAU,CACX8qC,cAAetrC,EAAOwD,gBAIN,iBAATunC,EAAmB,CAE1B,MAAM73B,EAAQ63B,EAAK73B,MAAM,gBACrBA,IACA83B,EAAY,CACRrlC,UAAWnvB,SAAS08B,EAAM,IAC1BtN,WAAYpvB,SAAS08B,EAAM,KAGvC,MAEI83B,EAAYD,EAGhBp5D,KAAKo5D,KAAO/4D,OAAO2X,OAAO,CAAEgc,UAAW,EAAGC,WAAY,EAAGziB,WAAY6c,EAAO9V,YAAc8gD,GAE1Fr5D,KAAK45D,WAAa,IAAIt0D,EAAStF,KAAKo5D,KAAKplC,WAAah0B,KAAKo5D,KAAK5nD,WAAaxR,KAAKo5D,KAAKnlC,YAAa,GAEpGj0B,KAAK65D,kBAAoB75D,KAAK45D,WAAWnyD,OAC7C,CAEA,aAAAqyD,GACI,OAAO95D,KAAK45D,UAChB,CAEA,YAAAG,GACI,OAAO/5D,KAAKy5D,SAChB,CAEA,mBAAAO,GACI,OAAOh6D,KAAK05D,gBAChB,CAEA,oBAAAO,GACI,OAAOj6D,KAAK65D,iBAChB,CAEA,YAAAjyB,GACI,OAAO5nC,KAAKmoC,SAChB,CAEA,OAAA+xB,GACI,OAAOl6D,KAAKu5D,IAChB,CAKA,OAAAY,CAAQZ,GAEJ,OADAv5D,KAAKu5D,KAAOA,EACLv5D,IACX,CAEA,uBAAAo6D,GACI,OAAOp6D,KAAKs5D,oBAChB,CAEA,mBAAAe,GACI,OAAOr6D,KAAKs5D,qBAAuBt5D,KAAKo5D,KAAK5nD,UACjD,CAEA,QAAA+mB,CAASC,GAIL,OAHAx4B,KAAKw4B,MAAQA,EAEbx4B,KAAK0J,iBAAc9F,EACZ5D,IACX,CACA,QAAAk8B,GACI,OAAOl8B,KAAKw4B,KAChB,CAEA,cAAAnhB,GACI,IAAKrX,KAAK0J,YAAa,CACnB,MAAM8uB,EAAQx4B,KAAKu5B,aACnB,IAAI7vB,EACJ,IAAK,IAAIjB,EAAI,EAAGA,EAAIzI,KAAKmoC,UAAUtiC,SAAU4C,EAAG,CAC5C,MAAM6xD,EAAWt6D,KAAKmoC,UAAU1/B,GAC3B6xD,EAASp+B,YACVo+B,EAAS/hC,SAASC,GACtB,MAAM3b,EAAKy9C,EAASjjD,iBAChBwF,IACAnT,EAAcA,EAAcA,EAAYD,UAAUoT,GAAMA,EAEhE,CACA7c,KAAK0J,YAAcA,CACvB,CACA,OAAO1J,KAAK0J,WAChB,CAEA,SAAA6wD,CAAUC,GAEN,OADAx6D,KAAKu5D,KAAOiB,EAASvB,GAAUO,OAASP,GAAUwB,KAC3Cz6D,IACX,CAEA,UAAA06D,GACI,OAAI16D,KAAKu5D,OAASN,GAAUO,QAAUx5D,KAAKu5D,OAASN,GAAU0B,MACnD36D,KAAKy5D,UAAUzyD,OAAOhH,KAAK45D,WAK1C,CAQA,gBAAAgB,CAAiBC,GAGb,OAFA76D,KAAK6uB,QAAQ8qC,cAAgBkB,EAC7B76D,KAAK86D,aAAe,EACb96D,IACX,CAQA,uBAAA+6D,GACI,MAAMnB,EAAa55D,KAAKy5D,UAAUr4D,QAGlC,OADApB,KAAK86D,aAAe31D,EAASnF,KAAKmoC,UAAUl0B,KAD/BqmD,GAAar1D,KAAK8G,IAAI/L,KAAK6uB,QAAQ8qC,cAAeW,EAASvyB,WAAW3mC,QAAUw4D,MAEtF55D,KAAK86D,YAChB,CAEA,OAAAE,CAAQC,GACCj7D,KAAK86D,eACN96D,KAAK86D,aAAe96D,KAAK+6D,2BAE7B,MAAMnB,EAAa55D,KAAKy5D,UAAUr4D,QAGlC,MAFY,CAAC85D,GAAMj2D,KAAK8G,IAAI/L,KAAK6uB,QAAQ8qC,cAAeuB,EAAItB,GACjDuB,CAAIF,GAAaj7D,KAAK86D,YAErC,CAEA,WAAAM,CAAYd,GACR,IAAKA,EAASzyB,oBAAqB,CAC/B,MAAMxW,EAAQipC,EAASvyB,WAIvB,GAFA/nC,KAAKy5D,UAAUnzD,IAAI+qB,GACnBrxB,KAAK86D,aAAe,GACf96D,KAAKu5D,OAASN,GAAUO,QAAUx5D,KAAKu5D,OAASN,GAAU0B,OAC3D36D,KAAKy5D,UAAUpyD,YAAYrH,KAAK45D,YAEhC,MADA55D,KAAKy5D,UAAU5yD,SAASwqB,GAClB,IAAIluB,EAAa,cAAe,mBAGtCkuB,EAAM9pB,SAASvH,KAAK65D,qBACpB75D,KAAK65D,kBAAoBxoC,EAAM5pB,SAEnCzH,KAAKs5D,qBAAuBt5D,KAAKy5D,UAAUzzD,YAE3ChG,KAAK45D,WAAWtzD,IAAI,EAAGtG,KAAKy5D,UAAUzzD,YAC1C,CAIA,OAFAhG,KAAKmoC,UAAUjzB,KAAKolD,GACpBA,EAAS9hB,SAASx4C,MACXA,IACX,CAEA,YAAAq7D,CAAalzB,GACT,IAAK,IAAI1/B,EAAI,EAAGA,EAAI0/B,EAAUtiC,SAAU4C,EACpCzI,KAAKo7D,YAAYjzB,EAAU1/B,IAE/B,OAAOzI,IACX,CAEA,SAAAy5C,GACI,GAAIz5C,KAAK05C,aACL,OAAO15C,KACX,MAAMw4B,EAAQx4B,KAAKu5B,aAOnB,OANAv5B,KAAKmoC,UAAU9yB,SAASilD,IACfA,EAASp+B,YACVo+B,EAAS/hC,SAASC,EACtB,IAEJx4B,KAAK05C,cAAe,EACb15C,IACX,CACA,UAAAu5B,GACI,OAAO71B,EAAQ1D,KAAKw4B,MAAO,UAAW,iCAC1C,CASA,IAAAhiB,CAAKhB,EAAUxV,KAAKuW,eAAgBiiB,GAGhC,IAAI9uB,EAFJ8uB,EAAQA,QAAqCA,EAAQx4B,KAAKw4B,MAC1Dx4B,KAAK+W,cAEL,IAAK,IAAItO,EAAI,EAAGA,EAAIzI,KAAKmoC,UAAUtiC,SAAU4C,EAAG,CAC5C,MAAM6xD,EAAWt6D,KAAKmoC,UAAU1/B,GAE5B+vB,GACA8hC,EAAS/hC,SAASC,GAEtB90B,EAAQ42D,EAASp+B,WAAY,eAAgB,mDAC7C,MAAMrf,EAAKy9C,EAASjjD,iBAChBwF,IACAnT,EAAcA,EAAcA,EAAYD,UAAUoT,GAAMA,GAE5Dy9C,EAAS/iD,WAAW/B,GACpB8kD,EAAShkD,eACb,CACAtW,KAAK0J,YAAcA,CACvB,ECvOJ,MAAMlH,WAAuBs3B,GACzB,mBAAWp4B,GACP,OAAOG,EAASW,cACpB,CAEA,aAAOkhC,CAAO43B,EAAkB33B,GAG5B,IAAK23B,GAAgD,IAA5BA,EAAiBz1D,OACtC,OAAO,EACX,MAAM01D,EAAa,GACnB,IAAIzP,EAAY,KACZK,EAAS,EACb,IAAK,IAAI1jD,EAAI,EAAGA,EAAI6yD,EAAiBz1D,SAAU4C,EAAG,CAC9C,MAAM+yD,EAAkBF,EAAiB7yD,GACnCsyB,EAAOygC,EAAgB1gC,UACvB2gC,EAAe54D,EAAYk4B,GAC3B8X,EAAU4oB,EAXQ,EACF,EAWtB,GAAIA,GAAgB1gC,IAAS+wB,EAAW,CAEpC,IAAK,IAAIlnD,EAAI,EAAGA,EAAIm2B,EAAK/mB,KAAKnO,SAAUjB,EACpCunD,EAASlnD,KAAK6E,IAAIixB,EAAKwJ,yBAA0B4nB,GAErDL,EAAY/wB,CAChB,CACAwgC,EAAWrmD,KAAK,CAAEpP,MAAOqmD,EAAQqP,kBAAiB3oB,WACtD,CAEA,IACI6oB,EADAC,EAAcJ,EAAW,GAAGz1D,MAEhC,IAAK,IAAI2C,EAAI,EAAGA,EAAI8yD,EAAW11D,SAAU4C,EAAG,CACxC,MAAM+yD,EAAkBD,EAAW9yD,GAAG+yD,gBACtCA,EAAgB/hB,YAChBiiB,EAAcF,EAAgBnrC,WAAakrC,EAAW9yD,GAAGoqC,QACzD8oB,EAAc12D,KAAK6E,IAAI4xD,EAAaC,EACxC,CACA,IAAK,IAAIlzD,EAAI,EAAGA,EAAI8yD,EAAW11D,SAAU4C,EAAG,CACxC,MAAM+yD,EAAkBD,EAAW9yD,GAAG+yD,gBACtCE,EAAcF,EAAgBnrC,WAAakrC,EAAW9yD,GAAGoqC,QACzD2oB,EAAgB5/B,2BAA2B+/B,EAAc12D,KAAK8mC,IAAI2vB,EAAaC,GAAe74D,GAAU+tD,mBAC5G,CAEA,OADAltB,EAAMI,YAAc43B,GACb,CACX,CAEA,WAAAl6D,CAAYm6D,EAAaC,GAkBrB,OAjBAt4D,QACAvD,KAAK05C,cAAe,EACpB15C,KAAK20B,SAAWmF,GAASC,SAASS,KAClCx6B,KAAK47D,YAAcA,EACnB57D,KAAKwK,MAAQ,EACbxK,KAAK67D,UAAYA,EACjB77D,KAAK87D,UAAOl4D,EACZ5D,KAAK0nC,MAAQ,IAAIwxB,GAAM,CACnBllC,UAAW,EACXC,WAAY,EACZziB,WAAY6c,EAAO9V,aACpBgiD,WAAU,GACbv6D,KAAKipC,eAAiB,CAClB8yB,aAAc,GAElB/7D,KAAKg8D,MAAQ,GACbh8D,KAAK0nC,MAAM2zB,aAAar7D,KAAK47D,aACtB57D,IACX,CACA,SAAAy5C,GACQz5C,KAAK05C,eAEJ15C,KAAK2tC,YACN3tC,KAAK2tC,UAAY,IAAIsuB,IAEzBj8D,KAAK2tC,UAAUuuB,WAAW,CAACl8D,KAAK0nC,QAAQhE,OAAO,CAAC1jC,KAAK0nC,OAAQ,EAAG,CAAC,GACjE1nC,KAAK66B,SAAS76B,KAAK2tC,UAAUwuB,oBAC7Bn8D,KAAK05C,cAAe,EACxB,CACA,SAAA0iB,CAAUR,GAEN,IADAA,EAAcA,GAAe57D,KAAK47D,aAClB/1D,OAAS,EAAG,CACxB,MAAMs3C,EAAO,IAAIkf,GAAKT,GACtBze,EAAKlU,eAAeqzB,WAAa,EACjCnf,EAAKlU,eAAeszB,oBAAsB,EAC1Cv8D,KAAKg8D,MAAM9mD,KAAKioC,EACpB,CACA,OAAOn9C,IACX,CACA,QAAA66B,CAASrwB,GAEL,OADAxK,KAAKwK,MAAQA,EACNxK,IACX,CACA,QAAAqwB,GACI,OAAOrwB,KAAKwK,MAAQ1H,GAAU+tD,kBAClC,CACA,aAAA7nB,GACI,OAAOhpC,KAAK47D,WAChB,CACA,IAAAplD,GACI,MAAMugB,EAAM/2B,KAAKuW,eACXwkB,EAAO/6B,KAAKg7B,oBAQlB,GAPAh7B,KAAK+W,cAvGb,YAAchT,GACNvB,GAAeihC,OACf5/B,EAAI,0BAA2BE,EACvC,CAqGQ,CAAE,gCAAiCg3B,GACnC/6B,KAAK87B,sBAAsB97B,KAAKgpC,gBAAiBjO,GAEjD/6B,KAAK47D,YAAYvmD,SAASmnD,GAAcA,EAAUjlD,WAAWwf,GAAKvgB,SAElExW,KAAKg8D,MAAM3mD,SAAS8nC,GAASA,EAAK5lC,WAAWwf,GAAKvgB,SAC9CxW,KAAK67D,UAAW,CAEhB,MAAMJ,EAAe54D,EAAYk4B,GAC3B0hC,EAAWhB,EAAepE,GAAWyB,GAC3C94D,KAAK87D,KAAO,IAAIW,EAAS,CACrBnR,UAAWtrD,KAAK47D,YAAY,GAC5B/D,WAAY98B,EACZ+8B,cAAe,CAAC,GAChBC,aAAc,CAAC,KAEnB/3D,KAAK87D,KAAK7yB,eAAeuuB,IAAM,GAC/Bx3D,KAAK87D,KAAK7yB,eAAetT,SAAW8lC,EAAe,EAAI,GAAKz7D,KAAKipC,eAAe8yB,aAChF/7D,KAAK87D,KAAKvkD,WAAWwf,GAAKvgB,MAC9B,CACJ,EAEJhU,GAAeihC,OAAQ,ECnIhB,MAAMi5B,WAAqB5iC,GAC9B,mBAAWp4B,GACP,OAAOG,EAAS66D,YACpB,CAEA,aAAOh5B,CAAOi5B,EAAQh5B,GAClB,IAAKg5B,GAA4B,IAAlBA,EAAO92D,OAClB,OAAO,EACX,IAAI2E,EAAQ,EACZ,IAAK,IAAI/B,EAAI,EAAGA,EAAIk0D,EAAO92D,SAAU4C,EAAG,CACpC,MAAMm0D,EAAQD,EAAOl0D,GACrBm0D,EAAMnjB,YACNjvC,GAASoyD,EAAMvsC,UACnB,CAEA,OADAsT,EAAMI,YAAcv5B,GACb,CACX,CACA,WAAA/I,CAAYs6B,GACRx4B,QACAvD,KAAK05C,cAAe,EACpB15C,KAAK20B,SAAWmF,GAASC,SAASS,KAClCx6B,KAAK+7B,SAAWA,EAChB/7B,KAAK+7B,SAAS1mB,SAASinB,IACnBA,EAAQyb,gBAAe,EAAM,IAEjC/3C,KAAKwK,MAAQ,EACbxK,KAAK2tC,UAAY,IAAIsuB,GACrBj8D,KAAK0nC,MAAQ,IAAIwxB,GAAM,CACnBllC,UAAW,EACXC,WAAY,EACZziB,WAAY6c,EAAO9V,aACpBgiD,WAAU,GACbv6D,KAAK0nC,MAAM2zB,aAAar7D,KAAK+7B,SACjC,CACA,SAAA0d,GACQz5C,KAAK05C,eAET15C,KAAK2tC,UAAUuuB,WAAW,CAACl8D,KAAK0nC,QAAQhE,OAAO,CAAC1jC,KAAK0nC,OAAQ,GAC7D1nC,KAAK66B,SAAS76B,KAAK2tC,UAAUwuB,oBAC7Bn8D,KAAK05C,cAAe,EACxB,CACA,QAAA7e,CAASrwB,GAEL,OADAxK,KAAKwK,MAAQA,EACNxK,IACX,CACA,QAAAqwB,GACI,OAAOrwB,KAAKwK,KAChB,CACA,IAAAgM,GACI,MAAMugB,EAAM/2B,KAAKuW,eACXwkB,EAAO/6B,KAAKg7B,oBAClBh7B,KAAK+W,cACL/W,KAAK87B,sBAAsB97B,KAAK+7B,SAAUhB,GAC1C/6B,KAAK+7B,SAAS1mB,SAASinB,GAAYA,EAAQ/kB,WAAWwf,GAAKzgB,iBAC/D,EC9CJ,MAAMumD,WAAiB/iC,GAEnB,mBAAWp4B,GACP,OAAOG,EAASg7D,QACpB,CACA,qBAAWtX,GAEP,OADkBl3B,EAAOC,mBACR3c,aAAa,sBAClC,CAEA,aAAO+xB,CAAO9W,EAAW+W,GACrB,IAAK/W,GAAkC,IAArBA,EAAU/mB,OACxB,OAAO,EACX,IAAI2E,EAAQ,EACRynC,EAActO,EAAMsO,YACpBlO,EAAaJ,EAAMI,WACnB4gB,EAAU,EACd,IAAK,IAAIl8C,EAAI,EAAGA,EAAImkB,EAAU/mB,SAAU4C,EAAG,CACvC,MAAMq0D,EAAWlwC,EAAUnkB,GACrB8rC,EAAY,EAiBlB,GAhBIsoB,GAASE,gBAAgBrmD,QAAQomD,EAAStqD,OAAS,IACnDsqD,EAASpnC,SAAWuc,EAAc,GAElC4qB,GAASG,eAAetmD,QAAQomD,EAAStqD,OAAS,IAClDsqD,EAASpnC,SAAWqO,EAAa,GAEjC+4B,EAASG,eAAiBH,EAASpnC,QAAU,EAC7CqO,GAAc+4B,EAASG,cAElBH,EAASG,eAAiBH,EAASpnC,SAAW,EACnDuc,GAAe6qB,EAASG,cAAgBJ,GAAStX,WAGjD/6C,EAAQvF,KAAK6E,IAAIgzD,EAASzsC,WAAY7lB,GAGtCqyD,GAASK,qBAAqBxmD,QAAQomD,EAAStqD,OAAS,EAAG,CAGtC9O,EAAQo5D,EAAS/hC,KAAM,kBAC3B2W,iBAAmB,GAAKorB,EAASrhC,gBAAkB3B,GAASC,SAASK,OAClFuJ,EAAMiO,eAAiB2C,EACvBuoB,EAASnnC,SAAWgvB,EACpBA,GAAWmY,EAAS/sC,MAAMwF,KAAKpsB,SAG/Bw6B,EAAMhJ,WAAa4Z,EACnBuoB,EAASnnC,SAAWgvB,EACpBA,GAAWmY,EAAS/sC,MAAMwF,KAAKpsB,OAEvC,MAEQ2zD,EAASrhC,gBAAkB3B,GAASC,SAASK,OAC7C0iC,EAASnhC,YAAYgI,EAAMiO,eAC3BjO,EAAMiO,eAAiB2C,IAGvBuoB,EAASnhC,YAAYgI,EAAMhJ,WAC3BgJ,EAAMhJ,WAAa4Z,EAG/B,CAKA,OAFA5Q,EAAMI,WAAaA,EAAav5B,EAAQ,EACxCm5B,EAAMsO,YAAcA,EAAcznC,EAAQ,GACnC,CACX,CAKA,iCAAW2yD,GACP,MAAO,CAAC,OAAQ,WAAY,QAChC,CAKA,yBAAWH,GACP,MAAO,CAAC,QACZ,CAKA,oCAAWI,GACP,MAAO,CAAC,OAAQ,OAAQ,WAAY,WAAY,OAAQ,gBAAiB,cAAe,QAC5F,CAKA,0BAAWL,GACP,MAAO,CAAC,OAAQ,OAAQ,WAAY,WAAY,WAAY,QAAS,OACzE,CAEA,+BAAWG,GACP,MAAO,CAAC,OAAQ,gBAAiB,cACrC,CAKA,UAAA7rD,GACI,MAAMgsD,EAAkBhvC,EAAOC,mBAAmBjd,aAAayrD,SAC/D,IAAKO,EACD,MAAM,IAAIl6D,EAAa,aAAc,oBACzC,OAAOk6D,EAAgBr9D,KAAK88D,SAASz5D,KACzC,CAKA,WAAA5B,CAAY+Q,GACRjP,QACAvD,KAAKwS,KAAOA,EACZxS,KAAKs9D,SAAU,EACft9D,KAAKipC,eAAiB,CAClBC,WAAY7a,EAAOsD,oBACnB4rC,uBAAwB,EACxBC,uBAAwB,GAE5Bx9D,KAAK88D,SAAWzuC,EAAOoC,cAAczwB,KAAKwS,MAI1C,MAAMzB,EAAU/Q,KAAKqR,aAQrB,GANArR,KAAKy9D,wBAAyB,EAG9Bz9D,KAAKi9D,cAAgBlsD,GAAWA,EAAQksD,cAAgBlsD,EAAQksD,cAAgB,EAChFj9D,KAAK09D,cAAgB3sD,GAAWA,EAAQ2sD,cAAgB3sD,EAAQ2sD,cAAgB,EAChF19D,KAAKo9D,0BAA4BP,GAASO,0BAA0B1mD,QAAQ1W,KAAKwS,OAAS,GACrFxS,KAAK88D,SACN,MAAM,IAAI35D,EAAa,gBAAiB,wBAAwBnD,KAAKwS,SAEzExS,KAAK01B,QAAU3kB,EAAUA,EAAQ4sD,QAAU,EAC3C39D,KAAK21B,QAAU5kB,EAAUA,EAAQ4zC,QAAU,EAC3C3kD,KAAK+vB,MAAQ,IAAIG,EAAMlwB,KAAK88D,SAASz5D,KAAMrD,KAAKipC,eAAeC,WAAY,CACvE5nC,SAAU,YAAYtB,KAAK88D,SAASz5D,SAGpCw5D,GAASM,uBAAuBzmD,QAAQ1W,KAAKwS,OAAS,IACtDxS,KAAKs9D,SAAU,GAIdvsD,GACD/Q,KAAK+vB,MAAMoJ,UAAU,GAAK,EAElC,CAEA,UAAAykC,CAAWN,GAEP,OADAt9D,KAAKs9D,QAAUA,EACRt9D,IACX,CAEA,kBAAA69D,CAAmBC,GACf,MAAMhuC,EAAQ9vB,KAAKipC,eAAeC,WAAa,IAG/C,OAFAlpC,KAAK+9D,gBAAkB,IAAI7tC,EAAM7B,EAAOmC,gBAAgBstC,GAAOz6D,KAAMysB,GACrE9vB,KAAK+9D,gBAAgB5kC,UAAU,GAAK,GAC7Bn5B,IACX,CAEA,kBAAAg+D,CAAmBF,GACf,MAAMhuC,EAAQ9vB,KAAKipC,eAAeC,WAAa,IAG/C,OAFAlpC,KAAKi+D,gBAAkB,IAAI/tC,EAAM7B,EAAOmC,gBAAgBstC,GAAOz6D,KAAMysB,GACrE9vB,KAAKi+D,gBAAgB9kC,UAAU,GAAK,GAC7Bn5B,IACX,CAEA,IAAAwW,GACI,MAAMugB,EAAM/2B,KAAKuW,eACXwkB,EAAO/6B,KAAKg7B,oBAClBh7B,KAAK+W,cACL,MAAMmnD,EAAUnjC,EAAKiW,mBACfxY,EAAQuC,EAAKxB,aACnBv5B,KAAKuV,aACLwhB,EAAI6V,UAAU,WAAY5sC,KAAKuT,aAAa,OAE5C,MAAM4qD,EAAcpjC,EAAKgY,YAAYrH,aACrC,IAAI7iC,EAAIq1D,IAAYn0B,GAAKE,KAAOk0B,EAAYjyB,MAAQiyB,EAAYlyB,KAE5DhpC,EAAU83B,KACNA,EAAKgW,UACDmtB,IAAYn0B,GAAKE,OACjBphC,EAAI2vB,EAAM0a,eAAelzC,KAAK26B,YAKlC9xB,EAAI2vB,EAAM0a,eAAelzC,KAAK26B,YAGtC,MAAMyjC,EAAyBF,IAAYn0B,GAAKE,KAC1C4I,EAAUra,EAAMiM,yBACtB,IAAImtB,EAAc,GAEbwM,GAA0BrjC,EAAKsiB,YAChCuU,GAAe,IAEnB,MACMyM,EAAqBx1D,EADNgqC,GAAW7yC,KAAK26B,UAAYi3B,GAG3CjoB,EAAQ5O,EAAK6O,mBAAmB5pC,KAAK20B,SAAU30B,KAAKgT,OAC1D,IAAIsrD,EAAS30B,EAAMhmC,EAGf46D,EAASv+D,KAAKo9D,0BACZzzB,EAAM9gC,EACN5D,KAAK8mC,IAAIvT,EAAM0a,eAAelzC,KAAK26B,WAAY0jC,GAGrD,GAFAE,GAAUv+D,KAAK21B,QAEX31B,KAAKs9D,QAAS,CACd,IAAIkB,EAAc,EAClB,MAAMC,EAASH,EAAS9lC,EAAMulB,gBAC9B,QAAyBn6C,IAArB5D,KAAKw+D,YACLA,EAAcx+D,KAAKw+D,gBAElB,CACDA,GAAex+D,KAAK+vB,MAAM1e,aAAa7G,MAAQ,EAC/C,MAAM29B,EAAYpN,EAAKwd,WAAW3Q,eAC5B50B,EAAQm1B,EAAUzxB,QAAQqkB,GAC1B2jC,EAAc1rD,EAAQ,EAAIm1B,EAAUtiC,OAASsiC,EAAUn1B,EAAQ,GAAGglC,wBAAqBp0C,EAEzF46D,GADAE,EAC+C,IAA/BA,EAAY11D,OAASy1D,GAGuB,IAA5CjmC,EAAMxvB,OAASwvB,EAAMnI,WAAaiuC,GAEtDt+D,KAAKw+D,YAAcA,CACvB,CACAF,GAAUE,CACd,EAtPR,YAAcz6D,GACN84D,GAASp5B,OACT5/B,EAAI,oBAAqBE,EACjC,CAoPQ,CAAE,uBAAwB/D,KAAK88D,SAAUwB,EAAQC,GAC7Cv+D,KAAKi+D,kBACLj+D,KAAKi+D,gBAAgB7kC,OAAOrC,EAAKunC,EAAQC,GACzCA,GAAUv+D,KAAKi+D,gBAAgB5sD,aAAa5G,OAC5C8zD,GAAUv+D,KAAKipC,eAAes0B,wBAE9Bv9D,KAAK09D,eAAiB3iC,EAAKgW,WAAyC,IAA5BhW,EAAKiW,qBAC7CutB,GAAUv+D,KAAK09D,eAEf3iC,EAAK2W,gBAAkB,GAAKmrB,GAASM,uBAAuBzmD,QAAQ1W,KAAKwS,OAAS,IAClF+rD,EAASxjC,EAAKxB,aAAaliB,iBAAiBpO,OAAS,IAEzDjJ,KAAK+vB,MAAMqJ,OAAOrC,EAAKunC,EAASt+D,KAAK01B,QAAS6oC,GAC1Cv+D,KAAK+9D,kBACLQ,GAAUv+D,KAAK+vB,MAAM1e,aAAa5G,OAASzK,KAAKipC,eAAeu0B,uBAC/Dx9D,KAAK+9D,gBAAgB3kC,OAAOrC,EAAKunC,EAAQC,IAE7CxnC,EAAI+V,aACJ9sC,KAAKoW,cACT,EAGJymD,GAASp5B,OAAQ,EC9QV,MAAMk7B,WAAoB7kC,GAC7B,mBAAWp4B,GACP,OAAOG,EAAS88D,WACpB,CAEA,qBAAO/T,CAAe/5B,GAClB,IAAK,MAAMkK,KAAQlK,EACf,IAAK,IAAIpoB,EAAI,EAAGA,EAAIsyB,EAAK/mB,KAAKnO,OAAQ4C,IAClCsyB,EAAKgO,YAAY,IAAI41B,GAAYzpC,EAAiBsF,MAAO/xB,GACzDsyB,EAAKgO,YAAY,IAAI41B,GAAYzpC,EAAiBwF,OAAQjyB,EAGtE,CAEA,aAAOi7B,CAAOk7B,EAAaj7B,GACvB,IAAKi7B,GAAsC,IAAvBA,EAAY/4D,OAC5B,OAAO,EACX,IAAIg5D,EAAW,EACXC,EAAW,EACf,IAAK,IAAIr2D,EAAI,EAAGA,EAAIm2D,EAAY/4D,SAAU4C,EAAG,CACzC,MAAMs2D,EAAcH,EAAYn2D,GAC1BsyB,EAAOgkC,EAAYjkC,UACnBmxB,EAAM8S,EAAYtjC,cAClBzoB,EAAQ+rD,EAAY5jC,aAC1B,IAAIr1B,EAAQ,EACRmmD,IAAQ/2B,EAAiBwF,QACzB50B,EAAQi1B,EAAK0iB,sBAAsBzqC,GACnC8rD,EAAWA,EAAWh5D,EAAQi5D,EAAYv0D,MAAQs0D,EAAWh5D,EAAQi5D,EAAYv0D,OAEjFyhD,IAAQ/2B,EAAiBsF,OACzB10B,EAAQi1B,EAAK2iB,qBAAqB1qC,GAClC6rD,EAAWA,EAAW/4D,EAAQi5D,EAAYv0D,MAAQq0D,EAAW/4D,EAAQi5D,EAAYv0D,OAErFu0D,EAAYrmC,UAAU5yB,EAC1B,CAGA,OAFA69B,EAAMI,YAAc86B,EACpBl7B,EAAMsO,aAAe6sB,GACd,CACX,CAMA,WAAAr9D,CAAYkzB,GACR,IAAI9mB,EACJtK,QACAvD,KAAK20B,SAAWA,QAA2CA,EAAWmF,GAASC,SAASS,KACxFx6B,KAAKq1B,MAAuF,QAA9ExnB,EAAKwgB,EAAOC,mBAAmB3c,aAAa,oCAAiD,IAAP9D,EAAgBA,EAAKnL,GAAKs7C,SAAS,WACvIh+C,KAAK66B,SAASxM,EAAOC,mBAAmB3c,aAAa,6BACzD,CAEA,OAAAspB,CAAQF,GACJ,IAAIltB,EAAI8F,EAQR,OAPA3T,KAAK+6B,KAAOA,EACZ/6B,KAAKq1B,MAAuF,QAA9ExnB,EAAKwgB,EAAOC,mBAAmB3c,aAAa,oCAAiD,IAAP9D,EAAgBA,EAAKnL,GAAKs7C,SAAS,WACvIh+C,KAAK66B,SAASxM,EAAOC,mBAAmB3c,aAAa,8BACjDtP,EAAY04B,KACZ/6B,KAAKq1B,MAAyF,QAAhF1hB,EAAK0a,EAAOC,mBAAmB3c,aAAa,sCAAmD,IAAPgC,EAAgBA,EAAKjR,GAAKs7C,SAAS,aACzIh+C,KAAK66B,SAASxM,EAAOC,mBAAmB3c,aAAa,iCAElD3R,IACX,CAEA,IAAAwW,GACI,MAAMugB,EAAM/2B,KAAKuW,eACXwkB,EAAO/6B,KAAKg7B,oBAClBh7B,KAAK+W,cACL,MAAM4yB,EAAQ5O,EAAK6O,mBAAmB5pC,KAAK20B,SAAU30B,KAAKgT,MAAO,CAAE04C,gBAAgB,IAC7E/nD,EAAIgmC,EAAMhmC,EAAI3D,KAAK01B,QACnB7sB,EAAI8gC,EAAM9gC,EAAI7I,KAAK21B,QACrB31B,KAAK20B,UAAYmF,GAASC,SAASW,MACnCxK,EAAM4G,YAAYC,EAAKpzB,EAAI,EAAGkF,EAAG7I,KAAKq1B,MAAO,2BAA4B,CACrE/zB,SAAU,+CAGTtB,KAAK20B,UAAYmF,GAASC,SAASS,MACxCtK,EAAM4G,YAAYC,EAAKpzB,EAAI,EAAGkF,EAAG7I,KAAKq1B,MAAO,0BAA2B,CACpE/zB,SAAU,6CAGtB,EClFG,SAAS09D,GAAa7nD,GACzB,IAAKA,EACD,OAAO,EACX,MAAM6sC,EAASxgD,IACf,MAEqC,mBAA7BwgD,EAAOib,mBAAoC9nD,aAAmB6sC,EAAOib,mBAG1C,mBAAvB9nD,EAAQG,YAA0D,mBAAtBH,EAAQ+nD,SACpE,CAEO,SAASC,GAAUhoD,GACtB,IAAKA,EACD,OAAO,EACX,MAAM6sC,EAASxgD,IACf,MAEkC,mBAA1BwgD,EAAOob,gBAAiCjoD,aAAmB6sC,EAAOob,gBAEtC,mBAAxBjoD,EAAQkoD,aAAuD,iBAAlBloD,EAAQ3I,KACrE,CCnBO,MAAM8wD,WAAsB18D,GAC/B,gBAAWsnC,GACP,OAAO,GACX,CACA,iBAAWC,GACP,OAAO,GACX,CACA,oCAAWo1B,GACP,OAAO,KACX,CAKA,yBAAOC,CAAmBh1D,EAAOC,GAC7B,MAAMg1D,EAAQz/D,KAAKu/D,0BAUnB,OATIt6D,KAAK6E,IAAIU,EAAOC,GAAUg1D,IAC1Bp7D,EAAK,uDAAyDo7D,GAC1Dj1D,EAAQi1D,IACRj1D,EAAQi1D,GAERh1D,EAASg1D,IACTh1D,EAASg1D,IAGV,CAACj1D,EAAOC,EACnB,CACA,WAAAhJ,CAAY+T,GACRjS,QAEAvD,KAAKksD,WAAa,EAClBlsD,KAAK0/D,UAAYlqD,EACZA,EAAQmqD,OAOT3/D,KAAK2/D,OAASnqD,EAAQmqD,OANtB3/D,KAAK2/D,OAAS,CACVn1D,MAAO80D,GAAcp1B,MACrBz/B,OAAQ60D,GAAcn1B,OAMlC,CAIA,KAAAl3B,GACIjT,KAAK0/D,UAAUE,UAAU,EAAG,EAAG5/D,KAAK2/D,OAAOn1D,MAAOxK,KAAK2/D,OAAOl1D,OAClE,CAEA,SAAAmiC,CAAUizB,EAAKttD,EAAIsC,GAEnB,CACA,UAAAi4B,GAEA,CAEA,GAAAxmC,CAAI2O,GAEJ,CACA,YAAAc,CAAavH,GAET,OADAxO,KAAK0/D,UAAU5pD,UAAYtH,EACpBxO,IACX,CAGA,sBAAA8/D,CAAuBtxD,GAEnB,OAAOxO,IACX,CACA,cAAAiW,CAAezH,GAEX,OADAxO,KAAK0/D,UAAU1pD,YAAcxH,EACtBxO,IACX,CACA,cAAA2V,CAAeghC,GAEX,OADA32C,KAAK0/D,UAAUhqD,YAAcihC,EACtB32C,IACX,CACA,aAAA6V,CAAckqD,GAKV,MAAMr6D,EAAI1F,KAAK0/D,UAAUM,eACnBlwC,EAAQ7qB,KAAKkH,KAAKzG,EAAEjB,EAAIiB,EAAEjB,EAAIiB,EAAEhB,EAAIgB,EAAEhB,EAAIgB,EAAEsG,EAAItG,EAAEsG,EAAItG,EAAEU,EAAIV,EAAEU,GAEpE,OADApG,KAAK0/D,UAAU9pD,WAAaka,EAAQiwC,EAC7B//D,IACX,CACA,YAAAmW,CAAa3L,GAET,OADAxK,KAAK0/D,UAAUxpD,UAAY1L,EACpBxK,IACX,CACA,UAAAigE,CAAWC,GAEP,OADAlgE,KAAK0/D,UAAUS,QAAUD,EAClBlgE,IACX,CACA,WAAAogE,CAAYC,GAER,OADArgE,KAAK0/D,UAAUU,YAAYC,GACpBrgE,IACX,CACA,KAAA8vB,CAAMnsB,EAAGkF,GAEL,OADA7I,KAAK0/D,UAAU5vC,MAAMnsB,EAAGkF,GACjB7I,IACX,CACA,MAAAsgE,CAAO91D,EAAOC,EAAQ81D,GAClB,IAAI1yD,EACJ,MAAM8xD,EAAS3/D,KAAK0/D,UAAUC,OACxBa,EAA+H,QAAxH3yD,EAAK0yD,QAA2DA,EAAmB/8D,IAAe+8D,wBAAqC,IAAP1yD,EAAgBA,EAAK,EAclK,OAZCrD,EAAOC,GAAU60D,GAAcE,mBAAmBh1D,EAAQg2D,EAAK/1D,EAAS+1D,GAEzEh2D,EAASA,EAAQg2D,EAAO,EACxB/1D,EAAUA,EAAS+1D,EAAO,EAC1Bb,EAAOn1D,MAAQA,EAAQg2D,EACvBb,EAAOl1D,OAASA,EAAS+1D,EAGrBxB,GAAaW,KACbA,EAAOnxD,MAAMhE,MAAQA,EAAQ,KAC7Bm1D,EAAOnxD,MAAM/D,OAASA,EAAS,MAE5BzK,KAAK8vB,MAAM0wC,EAAKA,EAC3B,CACA,IAAAC,CAAK98D,EAAGkF,EAAG2B,EAAOC,GAEd,OADAzK,KAAK0/D,UAAUe,KAAK98D,EAAGkF,EAAG2B,EAAOC,GAC1BzK,IACX,CACA,QAAAshD,CAAS39C,EAAGkF,EAAG2B,EAAOC,GAElB,OADAzK,KAAK0/D,UAAUpe,SAAS39C,EAAGkF,EAAG2B,EAAOC,GAC9BzK,IACX,CAIA,SAAA4/D,CAAUj8D,EAAGkF,EAAG2B,EAAOC,GAEnB,OADAzK,KAAK0/D,UAAUE,UAAUj8D,EAAGkF,EAAG2B,EAAOC,GAC/BzK,IACX,CACA,SAAAu3B,GAEI,OADAv3B,KAAK0/D,UAAUnoC,YACRv3B,IACX,CACA,MAAAw3B,CAAO7zB,EAAGkF,GAEN,OADA7I,KAAK0/D,UAAUloC,OAAO7zB,EAAGkF,GAClB7I,IACX,CACA,MAAAy3B,CAAO9zB,EAAGkF,GAEN,OADA7I,KAAK0/D,UAAUjoC,OAAO9zB,EAAGkF,GAClB7I,IACX,CACA,aAAA23B,CAAc+oC,EAAMC,EAAMC,EAAMC,EAAMl9D,EAAGkF,GAErC,OADA7I,KAAK0/D,UAAU/nC,cAAc+oC,EAAMC,EAAMC,EAAMC,EAAMl9D,EAAGkF,GACjD7I,IACX,CACA,gBAAA03B,CAAiBopC,EAAKC,EAAKp9D,EAAGkF,GAE1B,OADA7I,KAAK0/D,UAAUhoC,iBAAiBopC,EAAKC,EAAKp9D,EAAGkF,GACtC7I,IACX,CACA,GAAA42C,CAAIjzC,EAAGkF,EAAG4iD,EAAQuV,EAAYC,EAAUC,GAEpC,OADAlhE,KAAK0/D,UAAU9oB,IAAIjzC,EAAGkF,EAAG4iD,EAAQuV,EAAYC,EAAUC,GAChDlhE,IACX,CACA,IAAA43B,GAEI,OADA53B,KAAK0/D,UAAU9nC,OACR53B,IACX,CACA,MAAAmvB,GAEI,OADAnvB,KAAK0/D,UAAUvwC,SACRnvB,IACX,CACA,SAAA62C,GAEI,OADA72C,KAAK0/D,UAAU7oB,YACR72C,IACX,CACA,WAAA0jD,CAAY3+C,GACR,MAAMgM,EAAU/Q,KAAK0/D,UAAUhc,YAAY3+C,GAC3C,IAAI8D,EAAI,EACJ4B,EAAS,EAUb,OATIsG,EAAQowD,uBACRt4D,GAAKkI,EAAQowD,sBACb12D,EAASsG,EAAQqwD,uBAAyBrwD,EAAQowD,wBAGlDt4D,GAAKkI,EAAQswD,wBACb52D,EAASsG,EAAQuwD,yBAA2BvwD,EAAQswD,yBAGjD,CACH19D,EAAG,EACHkF,EAAGA,EACH2B,MAAOuG,EAAQvG,MACfC,OAAQA,EAEhB,CACA,QAAA8oC,CAASxuC,EAAMpB,EAAGkF,GAEd,OADA7I,KAAK0/D,UAAUnsB,SAASxuC,EAAMpB,EAAGkF,GAC1B7I,IACX,CACA,IAAAyV,GAEI,OADAzV,KAAK0/D,UAAUjqD,OACRzV,IACX,CACA,OAAAqW,GAEI,OADArW,KAAK0/D,UAAUrpD,UACRrW,IACX,CACA,aAAI8V,CAAUtH,GACVxO,KAAK0/D,UAAU5pD,UAAYtH,CAC/B,CACA,aAAIsH,GACA,OAAO9V,KAAK0/D,UAAU5pD,SAC1B,CACA,eAAIE,CAAYxH,GACZxO,KAAK0/D,UAAU1pD,YAAcxH,CACjC,CACA,eAAIwH,GACA,OAAOhW,KAAK0/D,UAAU1pD,WAC1B,CASA,OAAAwB,CAAQlP,EAAGgG,EAAMC,EAAQC,GACrB,MAAMa,EAAW5B,EAAKY,SAAS/F,EAAGgG,EAAMC,EAAQC,GAGhD,OAFAxO,KAAK0/D,UAAU1wD,KAAOvB,EAAK2B,YAAYC,GACvCrP,KAAKksD,WAAaz+C,EAAKC,wBAAwB2B,EAASf,MACjDtO,IACX,CAEA,OAAAiY,GACI,OAAOjY,KAAK0/D,UAAU1wD,IAC1B,EC5OJ,MAAMuyD,GAAuB,CACzBC,KAAM,CACF79D,GAAG,EACHkF,GAAG,EACH2B,OAAO,EACPC,QAAQ,EACR,eAAe,EACf,eAAe,EACf,cAAc,EACd,aAAa,GAEjBg2D,KAAM,CACF,eAAe,EACf,eAAe,EACf,cAAc,EACd,aAAa,GAEjB17D,KAAM,CACFyF,OAAO,EACPC,QAAQ,IAIVg3D,GAAS,6BACTC,GAAS,EAAIz8D,KAAKC,GAmDxB,MAAMy8D,WAAmB/+D,GACrB,WAAAnB,CAAY0V,GACR5T,QACAvD,KAAKwK,MAAQ,EACbxK,KAAKyK,OAAS,EACdzK,KAAKg2B,UAAY,EACjBh2B,KAAK4hE,oBAAsB,QAE3B5hE,KAAK6hE,cAAgB,GACrB7hE,KAAKmX,QAAUA,EACfnX,KAAKg2B,UAAY/wB,KAAK8G,IAAI,GAAIsiB,EAAO4D,yBAErC,MAAM6vC,EAAM9hE,KAAKqtC,OAAO,OACxBrtC,KAAKmX,QAAQkoD,YAAYyC,GACzB9hE,KAAK8hE,IAAMA,EACX9hE,KAAK+hE,OAAS/hE,KAAK8hE,IACnB9hE,KAAK28D,OAAS,CAAC38D,KAAK8hE,KACpB9hE,KAAKwhE,KAAO,GACZxhE,KAAKgiE,IAAM,CAAEr+D,EAAGuG,IAAKrB,EAAGqB,KACxBlK,KAAKkW,UAAY,EACjB,MAAM+rD,EAAwB,CAC1B,cAAex0D,EAAKkB,WACpB,YAAalB,EAAKG,KAAO,KACzB,cAAevB,EAAWuC,OAC1B,aAActC,EAAUsC,QAE5B5O,KAAK2jC,MAAQtjC,OAAO2X,OAAO,CAAEkqD,OAAQ,EAAGC,OAAQ,GAAKF,GACrDjiE,KAAKoiE,WAAa/hE,OAAO2X,OAAO,CAAE,eAAgB,GAAK,mBAAoB,OAAQ4f,KAAM,QAASzI,OAAQ,SAAW8yC,GACrHjiE,KAAKqiE,gBAAkB,GACvBriE,KAAKsiE,gBAAgBR,EAAK9hE,KAAKoiE,YAC/BpiE,KAAKqiE,gBAAgBntD,KAAK7U,OAAO2X,OAAO,CAAC,EAAGhY,KAAKoiE,aACjDpiE,KAAKuiE,kBAAoB,CACrB/3D,MAAO,EACPmsC,MAAO,SAEX32C,KAAKwiE,YAAc,EACvB,CACA,KAAAvsC,CAAMrxB,GACF,OAAOK,KAAKgxB,MAAMrxB,EAAI5E,KAAKg2B,WAAah2B,KAAKg2B,SACjD,CACA,MAAAqX,CAAOo1B,GACH,OAAO3zD,SAAS4zD,gBAAgBjB,GAAQgB,EAC5C,CAEA,SAAA71B,CAAUizB,EAAKttD,EAAIsC,GACf,MAAM+nD,EAAQ58D,KAAKqtC,OAAO,KAa1B,OAZArtC,KAAK28D,OAAOznD,KAAK0nD,GACjB58D,KAAK+hE,OAAO1C,YAAYzC,GACxB58D,KAAK+hE,OAASnF,EACViD,GACAjD,EAAMnpD,aAAa,QAAS3O,EAAO+6D,IACnCttD,GACAqqD,EAAMnpD,aAAa,KAAM3O,EAAOyN,IAChCsC,GAASA,EAAMg4B,aACf+vB,EAAMnpD,aAAa,iBAAkB,gBAEzCzT,KAAKsiE,gBAAgB1F,EAAO58D,KAAKoiE,YACjCpiE,KAAKqiE,gBAAgBntD,KAAK7U,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGhY,KAAKqiE,gBAAgBriE,KAAKqiE,gBAAgBx8D,OAAS,IAAK7F,KAAKoiE,aAChHxF,CACX,CACA,UAAA9vB,GACI9sC,KAAK28D,OAAOzjB,MACZl5C,KAAKqiE,gBAAgBnpB,MACrBl5C,KAAK+hE,OAAS/hE,KAAK28D,OAAO38D,KAAK28D,OAAO92D,OAAS,EACnD,CACA,GAAAS,CAAI6M,GACAnT,KAAK+hE,OAAO1C,YAAYlsD,EAC5B,CACA,YAAA4C,CAAavH,GAET,OADAxO,KAAKoiE,WAAWxqC,KAAOppB,EAChBxO,IACX,CAKA,sBAAA8/D,CAAuBtxD,GAEnB,OADAxO,KAAK4hE,oBAAsBpzD,EACpBxO,IACX,CACA,cAAAiW,CAAezH,GAEX,OADAxO,KAAKoiE,WAAWjzC,OAAS3gB,EAClBxO,IACX,CACA,cAAA2V,CAAeghC,GAEX,OADA32C,KAAKuiE,kBAAkB5rB,MAAQA,EACxB32C,IACX,CAMA,aAAA6V,CAAckqD,GAEV,OADA//D,KAAKuiE,kBAAkB/3D,MAAQu1D,EACxB//D,IACX,CAKA,YAAAmW,CAAa3L,GAGT,OAFAxK,KAAKoiE,WAAW,gBAAkB53D,EAClCxK,KAAKkW,UAAY1L,EACVxK,IACX,CAOA,WAAAogE,CAAYuC,GACR,GAAiD,mBAA7CtiE,OAAOS,UAAUkH,SAAShH,KAAK2hE,GAE/B,OADA3iE,KAAKoiE,WAAW,oBAAsBO,EAASx+D,KAAK,KAC7CnE,KAGP,MAAM,IAAImD,EAAa,gBAAiB,yCAEhD,CAKA,UAAA88D,CAAWC,GAEP,OADAlgE,KAAKoiE,WAAW,kBAAoBlC,EAC7BlgE,IACX,CAMA,MAAAsgE,CAAO91D,EAAOC,GACVzK,KAAKwK,MAAQA,EACbxK,KAAKyK,OAASA,EACdzK,KAAKmX,QAAQ3I,MAAMhE,MAAQA,EAAMxC,WACjChI,KAAK8hE,IAAItzD,MAAMhE,MAAQA,EAAMxC,WAC7BhI,KAAK8hE,IAAItzD,MAAM/D,OAASA,EAAOzC,WAC/B,MAAMo6D,EAAa,CACf53D,QACAC,UAIJ,OAFAzK,KAAKsiE,gBAAgBtiE,KAAK8hE,IAAKM,GAC/BpiE,KAAK8vB,MAAM9vB,KAAK2jC,MAAMu+B,OAAQliE,KAAK2jC,MAAMw+B,QAClCniE,IACX,CACA,KAAA8vB,CAAMnsB,EAAGkF,GAYL7I,KAAK2jC,MAAMu+B,OAASliE,KAAK2jC,MAAMu+B,OAASliE,KAAK2jC,MAAMu+B,OAASv+D,EAAIA,EAChE3D,KAAK2jC,MAAMw+B,OAASniE,KAAK2jC,MAAMw+B,OAASniE,KAAK2jC,MAAMw+B,OAASt5D,EAAIA,EAChE,MAAM+5D,EAAe5iE,KAAKwK,MAAQxK,KAAK2jC,MAAMu+B,OACvCW,EAAgB7iE,KAAKyK,OAASzK,KAAK2jC,MAAMw+B,OAE/C,OADAniE,KAAK8iE,WAAW,EAAG,EAAGF,EAAcC,GAC7B7iE,IACX,CAKA,UAAA8iE,CAAWC,EAAiBhQ,EAAMvoD,EAAOC,GACrC,GAA+B,iBAApBs4D,EACP/iE,KAAK8hE,IAAIruD,aAAa,UAAWsvD,OAEhC,CACD,MAAMC,EAAgBD,EAAkB,IAAMhQ,EAAO,IAAMvoD,EAAQ,IAAMC,EACzEzK,KAAK8hE,IAAIruD,aAAa,UAAWuvD,EACrC,CACJ,CAEA,eAAAV,CAAgBnrD,EAASirD,GACrB,MAAMa,EAAoB1B,GAAqBpqD,EAAQ+rD,UACvD,IAAK,MAAMC,KAAYf,EACfa,GAAqBA,EAAkBE,KAGvCf,EAAWe,IACqB,GAA/BnjE,KAAKqiE,gBAAgBx8D,QAClBu8D,EAAWe,IAAanjE,KAAKqiE,gBAAgBriE,KAAKqiE,gBAAgBx8D,OAAS,GAAGs9D,IAClFhsD,EAAQisD,eAAe,KAAMD,EAAUf,EAAWe,IAE1D,OAAOhsD,CACX,CAEA,KAAAlE,GASI,KAAOjT,KAAK8hE,IAAIuB,WACZrjE,KAAK8hE,IAAIwB,YAAYtjE,KAAK8hE,IAAIuB,WAGlCrjE,KAAK8vB,MAAM9vB,KAAK2jC,MAAMu+B,OAAQliE,KAAK2jC,MAAMw+B,OAC7C,CAEA,IAAA1B,CAAK98D,EAAGkF,EAAG2B,EAAOC,EAAQ23D,GAElB33D,EAAS,IACT5B,GAAK4B,EACLA,IAAW,GAEf,MAAM84D,EAAYvjE,KAAKqtC,OAAO,QAQ9B,OAPA+0B,EAAaA,QAA+CA,EAAa,CAAExqC,KAAM,OAAQ,eAAgB53B,KAAKkW,UAAWiZ,OAAQ,SACjIxrB,EAAI3D,KAAKi2B,MAAMtyB,GACfkF,EAAI7I,KAAKi2B,MAAMptB,GACf2B,EAAQxK,KAAKi2B,MAAMzrB,GACnBC,EAASzK,KAAKi2B,MAAMxrB,GACpBzK,KAAKsiE,gBAAgBiB,EAAWljE,OAAO2X,OAAO,CAAErU,IAAGkF,IAAG2B,QAAOC,UAAU23D,IACvEpiE,KAAKsG,IAAIi9D,GACFvjE,IACX,CACA,QAAAshD,CAAS39C,EAAGkF,EAAG2B,EAAOC,GAClB,MAAM23D,EAAa,CAAExqC,KAAM53B,KAAKoiE,WAAWxqC,KAAMzI,OAAQ,QAEzD,OADAnvB,KAAKygE,KAAK98D,EAAGkF,EAAG2B,EAAOC,EAAQ23D,GACxBpiE,IACX,CACA,SAAA4/D,CAAUj8D,EAAGkF,EAAG2B,EAAOC,GAQnB,OADAzK,KAAKygE,KAAK98D,EAAGkF,EAAG2B,EAAOC,EAAQ,CAAEmtB,KAAM53B,KAAK4hE,oBAAqBzyC,OAAQ,SAClEnvB,IACX,CAEA,SAAAu3B,GAII,OAHAv3B,KAAKwhE,KAAO,GACZxhE,KAAKgiE,IAAIr+D,EAAIuG,IACblK,KAAKgiE,IAAIn5D,EAAIqB,IACNlK,IACX,CACA,MAAAw3B,CAAO7zB,EAAGkF,GAMN,OALAlF,EAAI3D,KAAKi2B,MAAMtyB,GACfkF,EAAI7I,KAAKi2B,MAAMptB,GACf7I,KAAKwhE,MAAQ,IAAM79D,EAAI,IAAMkF,EAC7B7I,KAAKgiE,IAAIr+D,EAAIA,EACb3D,KAAKgiE,IAAIn5D,EAAIA,EACN7I,IACX,CACA,MAAAy3B,CAAO9zB,EAAGkF,GAMN,OALAlF,EAAI3D,KAAKi2B,MAAMtyB,GACfkF,EAAI7I,KAAKi2B,MAAMptB,GACf7I,KAAKwhE,MAAQ,IAAM79D,EAAI,IAAMkF,EAC7B7I,KAAKgiE,IAAIr+D,EAAIA,EACb3D,KAAKgiE,IAAIn5D,EAAIA,EACN7I,IACX,CACA,aAAA23B,CAAc1tB,EAAIE,EAAIC,EAAIC,EAAI1G,EAAGkF,GAU7B,OATAlF,EAAI3D,KAAKi2B,MAAMtyB,GACfkF,EAAI7I,KAAKi2B,MAAMptB,GACfoB,EAAKjK,KAAKi2B,MAAMhsB,GAChBE,EAAKnK,KAAKi2B,MAAM9rB,GAChBC,EAAKpK,KAAKi2B,MAAM7rB,GAChBC,EAAKrK,KAAKi2B,MAAM5rB,GAChBrK,KAAKwhE,MAAQ,IAAMv3D,EAAK,IAAME,EAAK,IAAMC,EAAK,IAAMC,EAAK,IAAM1G,EAAI,IAAMkF,EACzE7I,KAAKgiE,IAAIr+D,EAAIA,EACb3D,KAAKgiE,IAAIn5D,EAAIA,EACN7I,IACX,CACA,gBAAA03B,CAAiBztB,EAAIE,EAAIxG,EAAGkF,GAQxB,OAPAlF,EAAI3D,KAAKi2B,MAAMtyB,GACfkF,EAAI7I,KAAKi2B,MAAMptB,GACfoB,EAAKjK,KAAKi2B,MAAMhsB,GAChBE,EAAKnK,KAAKi2B,MAAM9rB,GAChBnK,KAAKwhE,MAAQ,IAAMv3D,EAAK,IAAME,EAAK,IAAMxG,EAAI,IAAMkF,EACnD7I,KAAKgiE,IAAIr+D,EAAIA,EACb3D,KAAKgiE,IAAIn5D,EAAIA,EACN7I,IACX,CACA,GAAA42C,CAAIjzC,EAAGkF,EAAG4iD,EAAQuV,EAAYC,EAAUC,GACpC,IAAIsC,EAAK7/D,EAAI8nD,EAASxmD,KAAKw+D,IAAIzC,GAC3B0C,EAAK76D,EAAI4iD,EAASxmD,KAAK0+D,IAAI3C,GAC/BwC,EAAKxjE,KAAKi2B,MAAMutC,GAChBE,EAAK1jE,KAAKi2B,MAAMytC,GAGhB,MAAME,EAAe5+D,EAAeg8D,GAC9B6C,EAAa7+D,EAAei8D,GAClC,IAAMC,GAAoBD,EAAWD,GAAcU,IAC9CR,GAAoBF,EAAaC,GAAYS,IAC9CkC,IAAiBC,EAAY,CAC7B,IAAI55D,EAAKtG,EAAI8nD,EAASxmD,KAAKw+D,IAAIzC,EAAa/7D,KAAKC,IAC7CiF,EAAKtB,EAAI4iD,EAASxmD,KAAK0+D,IAAI3C,EAAa/7D,KAAKC,IAGjD+E,EAAKjK,KAAKi2B,MAAMhsB,GAChBE,EAAKnK,KAAKi2B,MAAM9rB,GAChBshD,EAASzrD,KAAKi2B,MAAMw1B,GACpBzrD,KAAKwhE,MAAQ,IAAIgC,KAAME,MAAOjY,KAAUA,WAAgBxhD,KAAME,KAC9DnK,KAAKwhE,MAAQ,IAAI/V,KAAUA,WAAgB+X,KAAME,IACjD1jE,KAAKgiE,IAAIr+D,EAAI6/D,EACbxjE,KAAKgiE,IAAIn5D,EAAI66D,CACjB,KACK,CACD,IAIII,EAJA75D,EAAKtG,EAAI8nD,EAASxmD,KAAKw+D,IAAIxC,GAC3B92D,EAAKtB,EAAI4iD,EAASxmD,KAAK0+D,IAAI1C,GAC/BD,EAAa4C,EACb3C,EAAW4C,EAGPC,EADA7+D,KAAK8C,IAAIk5D,EAAWD,GAAc/7D,KAAKC,GAC/Bg8D,GAGCA,EAETF,EAAaC,IACb6C,GAASA,GAEb,MAAMC,GAAS7C,EACfj3D,EAAKjK,KAAKi2B,MAAMhsB,GAChBE,EAAKnK,KAAKi2B,MAAM9rB,GAChBshD,EAASzrD,KAAKi2B,MAAMw1B,GACpBzrD,KAAKwhE,MAAQ,IAAIgC,KAAME,MAAOjY,KAAUA,QAAaqY,MAAUC,KAAS95D,KAAME,IAC9EnK,KAAKgiE,IAAIr+D,EAAIsG,EACbjK,KAAKgiE,IAAIn5D,EAAIsB,CACjB,CACA,OAAOnK,IACX,CACA,SAAA62C,GAEI,OADA72C,KAAKwhE,MAAQ,IACNxhE,IACX,CACA,cAAAgkE,GACI,MAAMC,EAAKjkE,KAAKuiE,kBAIhB,MAAO,2BAA2B0B,EAAGz5D,MAAQ,SAASy5D,EAAGttB,QAC7D,CACA,IAAA/e,CAAKwqC,GACD,MAAMZ,EAAOxhE,KAAKqtC,OAAO,QAUzB,YAT0B,IAAf+0B,IACPA,EAAa/hE,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGhY,KAAKoiE,YAAa,CAAEjzC,OAAQ,UAE7EizC,EAAWh8D,EAAIpG,KAAKwhE,KAChBxhE,KAAKuiE,kBAAkB/3D,MAAQ,IAC/B43D,EAAW5zD,MAAQxO,KAAKgkE,kBAE5BhkE,KAAKsiE,gBAAgBd,EAAMY,GAC3BpiE,KAAKsG,IAAIk7D,GACFxhE,IACX,CACA,MAAAmvB,GACI,MAAMqyC,EAAOxhE,KAAKqtC,OAAO,QACnB+0B,EAAa/hE,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGhY,KAAKoiE,YAAa,CAAExqC,KAAM,OAAQ,eAAgB53B,KAAKkW,UAAW9P,EAAGpG,KAAKwhE,OAM7H,OALIxhE,KAAKuiE,kBAAkB/3D,MAAQ,IAC/B43D,EAAW5zD,MAAQxO,KAAKgkE,kBAE5BhkE,KAAKsiE,gBAAgBd,EAAMY,GAC3BpiE,KAAKsG,IAAIk7D,GACFxhE,IACX,CAEA,WAAA0jD,CAAY3+C,GACR,OAAO48D,GAAWuC,iBAAiB/sC,OAAOpyB,EAAM/E,KAAK8hE,IAAK9hE,KAAKoiE,WACnE,CACA,QAAA7uB,CAASxuC,EAAMpB,EAAGkF,GACd,IAAK9D,GAAQA,EAAKc,QAAU,EACxB,OAAO7F,KAEX2D,EAAI3D,KAAKi2B,MAAMtyB,GACfkF,EAAI7I,KAAKi2B,MAAMptB,GACf,MAAMu5D,EAAa/hE,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGhY,KAAKoiE,YAAa,CAAEjzC,OAAQ,OAAQxrB,IACnFkF,MACEs7D,EAAMnkE,KAAKqtC,OAAO,QAIxB,OAHA82B,EAAIC,YAAcr/D,EAClB/E,KAAKsiE,gBAAgB6B,EAAK/B,GAC1BpiE,KAAKsG,IAAI69D,GACFnkE,IACX,CAEA,IAAAyV,GAyBI,OAxBAzV,KAAKwiE,YAAYttD,KAAK,CAClByuB,MAAO,CACH,cAAe3jC,KAAK2jC,MAAM,eAC1B,cAAe3jC,KAAK2jC,MAAM,eAC1B,aAAc3jC,KAAK2jC,MAAM,cACzB,YAAa3jC,KAAK2jC,MAAM,aACxB7T,MAAO9vB,KAAK2jC,MAAM7T,OAEtBsyC,WAAY,CACR,cAAepiE,KAAKoiE,WAAW,eAC/B,cAAepiE,KAAKoiE,WAAW,eAC/B,aAAcpiE,KAAKoiE,WAAW,cAC9B,YAAapiE,KAAKoiE,WAAW,aAC7BxqC,KAAM53B,KAAKoiE,WAAWxqC,KACtBzI,OAAQnvB,KAAKoiE,WAAWjzC,OACxB,eAAgBnvB,KAAKoiE,WAAW,gBAChC,mBAAoBpiE,KAAKoiE,WAAW,qBAExCG,kBAAmB,CACf/3D,MAAOxK,KAAKuiE,kBAAkB/3D,MAC9BmsC,MAAO32C,KAAKuiE,kBAAkB5rB,OAElCzgC,UAAWlW,KAAKkW,YAEblW,IACX,CAEA,OAAAqW,GACI,MAAMguD,EAAarkE,KAAKwiE,YAAYtpB,MACpC,GAAImrB,EAAY,CACZ,MAAM1gC,EAAQ0gC,EACdrkE,KAAK2jC,MAAM,eAAiBA,EAAMA,MAAM,eACxC3jC,KAAK2jC,MAAM,eAAiBA,EAAMA,MAAM,eACxC3jC,KAAK2jC,MAAM,cAAgBA,EAAMA,MAAM,cACvC3jC,KAAK2jC,MAAM,aAAeA,EAAMA,MAAM,aACtC3jC,KAAK2jC,MAAM7T,MAAQ6T,EAAMA,MAAM7T,MAC/B9vB,KAAKoiE,WAAW,eAAiBz+B,EAAMy+B,WAAW,eAClDpiE,KAAKoiE,WAAW,eAAiBz+B,EAAMy+B,WAAW,eAClDpiE,KAAKoiE,WAAW,cAAgBz+B,EAAMy+B,WAAW,cACjDpiE,KAAKoiE,WAAW,aAAez+B,EAAMy+B,WAAW,aAChDpiE,KAAKoiE,WAAWxqC,KAAO+L,EAAMy+B,WAAWxqC,KACxC53B,KAAKoiE,WAAWjzC,OAASwU,EAAMy+B,WAAWjzC,OAC1CnvB,KAAKoiE,WAAW,gBAAkBz+B,EAAMy+B,WAAW,gBACnDpiE,KAAKoiE,WAAW,oBAAsBz+B,EAAMy+B,WAAW,oBACvDpiE,KAAKuiE,kBAAkB/3D,MAAQm5B,EAAM4+B,kBAAkB/3D,MACvDxK,KAAKuiE,kBAAkB5rB,MAAQhT,EAAM4+B,kBAAkB5rB,MACvD32C,KAAKkW,UAAYytB,EAAMztB,SAC3B,CACA,OAAOlW,IACX,CACA,aAAI8V,CAAUtH,GACVxO,KAAK+V,aAAavH,EACtB,CACA,aAAIsH,GACA,OAAO9V,KAAKoiE,WAAWxqC,IAC3B,CACA,eAAI5hB,CAAYxH,GACZxO,KAAKiW,eAAezH,EACxB,CACA,eAAIwH,GACA,OAAOhW,KAAKoiE,WAAWjzC,MAC3B,CAWA,OAAA3X,CAAQlP,EAAGgG,EAAMC,EAAQC,GACrB,MAAMa,EAAW5B,EAAKY,SAAS/F,EAAGgG,EAAMC,EAAQC,GAChDxO,KAAK6hE,cAAgBp0D,EAAK2B,YAAYC,GACtC,MAAMi1D,EAAiB,CACnB,cAAej1D,EAASX,OACxB,YAAaW,EAASf,KACtB,cAAee,EAASd,OACxB,aAAcc,EAASb,OAI3B,OAFAxO,KAAKoiE,WAAa/hE,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGhY,KAAKoiE,YAAakC,GACpEtkE,KAAK2jC,MAAQtjC,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGhY,KAAK2jC,OAAQ2gC,GACnDtkE,IACX,CAEA,OAAAiY,GACI,OAAOjY,KAAK6hE,aAChB,EC1iBG,IAAI0C,GAMAC,GCLAC,GCHAC,GH8iBX/C,GAAWuC,iBAAmB,IAlhB9B,MACI,WAAAziE,GAGIzB,KAAKk3B,MAAQ,CAAC,CAClB,CACA,MAAAC,CAAOpyB,EAAM+8D,EAAKM,GACd,IAAIzoC,EAAU35B,KAAKk3B,MAAMnyB,QACTnB,IAAZ+1B,IACAA,EAAU,CAAC,EACX35B,KAAKk3B,MAAMnyB,GAAQ40B,GAEvB,MAIMx5B,EAAM,GAJGiiE,EAAW,kBACbA,EAAW,gBACTA,EAAW,kBACZA,EAAW,gBAEzB,IAAIvoC,EAAQF,EAAQx5B,GAKpB,YAJcyD,IAAVi2B,IACAA,EAAQ75B,KAAK2kE,YAAY5/D,EAAM+8D,EAAKM,GACpCzoC,EAAQx5B,GAAO05B,GAEZA,CACX,CACA,WAAA8qC,CAAY5/D,EAAM+8D,EAAKM,GACnB,IAAI+B,EAAMnkE,KAAKmkE,IACVA,IAGDA,EAAMr1D,SAAS4zD,gBAAgBjB,GAAQ,QACvCzhE,KAAKmkE,IAAMA,GAEfA,EAAIC,YAAcr/D,EACdq9D,EAAW,gBACX+B,EAAIf,eAAe,KAAM,cAAehB,EAAW,gBACnDA,EAAW,cACX+B,EAAIf,eAAe,KAAM,YAAa,GAAGhB,EAAW,gBACpDA,EAAW,eACX+B,EAAIf,eAAe,KAAM,aAAchB,EAAW,eAClDA,EAAW,gBACX+B,EAAIf,eAAe,KAAM,cAAe,GAAGhB,EAAW,kBAC1DN,EAAIzC,YAAY8E,GAChB,MAAM5uC,EAAO4uC,EAAIS,UAEjB,OADA9C,EAAIwB,YAAYa,GACT,CAAExgE,EAAG4xB,EAAK5xB,EAAGkF,EAAG0sB,EAAK1sB,EAAG2B,MAAO+qB,EAAK/qB,MAAOC,OAAQ8qB,EAAK9qB,OACnE,GCtEJ,SAAW85D,GACPA,EAAiBA,EAAyB,OAAI,GAAK,SACnDA,EAAiBA,EAAsB,IAAI,GAAK,KACnD,CAHD,CAGGA,KAAqBA,GAAmB,CAAC,IAG5C,SAAWC,GACPA,EAAoBA,EAA0B,KAAI,GAAK,OACvDA,EAAoBA,EAAwB,GAAI,GAAK,KACrDA,EAAoBA,EAA0B,KAAI,GAAK,MAC1D,CAJD,CAIGA,KAAwBA,GAAsB,CAAC,IAIlD,MAAMK,GACF,mBAAOC,CAAaC,EAAWC,EAASx6D,EAAOC,EAAQw6D,EAAa,QAChE,MAAMC,EAAW,IAAIL,GAASE,EAAWC,GACrCx6D,GAASC,GACTy6D,EAAS5E,OAAO91D,EAAOC,GAE3B,MAAMssB,EAAMmuC,EAAS5tD,aAGrB,OAFAyf,EAAI+oC,uBAAuBmF,GAC3BJ,GAASM,YAAcpuC,EAChBA,CACX,CACA,uBAAOquC,CAAiBL,EAAWv6D,EAAOC,EAAQw6D,GAC9C,OAAOJ,GAASC,aAAaC,EAAWF,GAASQ,SAASC,OAAQ96D,EAAOC,EAAQw6D,EACrF,CACA,oBAAOM,CAAcR,EAAWv6D,EAAOC,EAAQw6D,GAC3C,OAAOJ,GAASC,aAAaC,EAAWF,GAASQ,SAASG,IAAKh7D,EAAOC,EAAQw6D,EAClF,CAIA,qBAAOQ,CAAejwD,EAASkwD,EAAOC,EAAOC,EAAKC,EAAKC,GACnDtwD,EAAQ+hB,YACR,MAAMwuC,EAAKH,EAAMF,EACXM,EAAKH,EAAMF,EACXM,EAAQhhE,KAAKihE,MAAMF,EAAID,GAC7B,IAAIpiE,EAAI+hE,EACJ78D,EAAI88D,EACRnwD,EAAQgiB,OAAOkuC,EAAOC,GACtB,IAAIQ,EAAM,EACN3vD,GAAO,EACX,OAAUuvD,EAAK,EAAIpiE,GAAKiiE,EAAMjiE,GAAKiiE,MAASI,EAAK,EAAIn9D,GAAKg9D,EAAMh9D,GAAKg9D,IAAO,CACxE,MAAMO,EAAaN,EAAYK,IAAQL,EAAYjgE,QAC7CwgE,EAAK1iE,EAAIsB,KAAKw+D,IAAIwC,GAASG,EACjCziE,EAAIoiE,EAAK,EAAI9gE,KAAK6E,IAAI87D,EAAKS,GAAMphE,KAAK8mC,IAAI65B,EAAKS,GAC/C,MAAMC,EAAKz9D,EAAI5D,KAAK0+D,IAAIsC,GAASG,EACjCv9D,EAAIm9D,EAAK,EAAI/gE,KAAK6E,IAAI+7D,EAAKS,GAAMrhE,KAAK8mC,IAAI85B,EAAKS,GAC3C9vD,EACAhB,EAAQiiB,OAAO9zB,EAAGkF,GAGlB2M,EAAQgiB,OAAO7zB,EAAGkF,GAEtB2N,GAAQA,CACZ,CACAhB,EAAQqhC,YACRrhC,EAAQ2Z,QACZ,CACA,WAAA1tB,CAAY8kE,EAAMC,GACd,GAAI7jE,EAAgB4jE,GAEhBvmE,KAAK+2B,IAAMwvC,MAEV,CACD,QAAa3iE,IAAT4iE,EAEA,MAAM,IAAIrjE,EAAa,kBAAmB,4BAE9C,MAAM6hE,EAAUwB,EAChB,IAAIrvD,EACJ,GAAmB,iBAARovD,EAAkB,CACzB,MAAME,EAAe33D,SAASwE,eAAeizD,GAC7C,IAAKE,EACD,MAAM,IAAItjE,EAAa,eAAgB,+BAA+BsjE,MAE1EtvD,EAAUsvD,CACd,MAEItvD,EAAUovD,EAGd,GAAIvB,IAAYH,GAASQ,SAASC,OAAQ,CACtC,IAAKtG,GAAa7nD,GACd,MAAM,IAAIhU,EAAa,aAAc,iDAEzC,MAAMqS,EAAU2B,EAAQG,WAAW,KAAM,CAAEovD,oBAAoB,IAC/D,IAAKlxD,EACD,MAAM,IAAIrS,EAAa,aAAc,4BAEzCnD,KAAK+2B,IAAM,IAAIuoC,GAAc9pD,EACjC,KACK,IAAIwvD,IAAYH,GAASQ,SAASG,IAOnC,MAAM,IAAIriE,EAAa,iBAAkB,2BAA2B6hE,KANpE,IAAK7F,GAAUhoD,GACX,MAAM,IAAIhU,EAAa,aAAc,2CAEzCnD,KAAK+2B,IAAM,IAAI4qC,GAAWxqD,EAI9B,CACJ,CACJ,CACA,MAAAmpD,CAAO91D,EAAOC,GAEV,OADAzK,KAAK+2B,IAAIupC,OAAO91D,EAAOC,GAChBzK,IACX,CACA,UAAAsX,GACI,OAAOtX,KAAK+2B,GAChB,EAEJ8tC,GAASQ,SAAWd,GACpBM,GAAS8B,YAAcnC,GAIvBK,GAASM,iBAAcvhE,EGlHvB,MAAMgjE,WAAqB9sC,GACvB,mBAAWp4B,GACP,OAAOG,EAAS+kE,YACpB,CACA,kBAAW71D,GACP,IAAIlD,EACJ,OAAuE,QAA9DA,EAAKwgB,EAAOC,mBAAmBjd,aAAaw1D,oBAAiC,IAAPh5D,EAAgBA,EAAK,CAChGi5D,gBAAiB,EACjBC,YAAa,EACbC,YAAa,EACbC,aAAc,EAEtB,CAGA,aAAOvjC,CAAOkoB,EAAMjoB,GAIhB,MAAMI,EAAaJ,EAAMI,WAInBkO,EAActO,EAAMsO,YAE1B,IAAK2Z,GAAwB,IAAhBA,EAAK/lD,OACd,OAAO,EACX,MAAMgmD,EAAY,GAClB,IAAIC,EAAY,KACZob,EAAkC,EAClCxqD,EAAc,EAElB,IAAK,IAAIjU,EAAI,EAAGA,EAAImjD,EAAK/lD,SAAU4C,EAAG,CAClC,MAAMmQ,EAAMgzC,EAAKnjD,GACXsyB,EAAOniB,EAAIkiB,UACXmxB,EAAMrzC,EAAI6iB,cAChB,IAAK54B,EAAYk4B,GACb,MAAM,IAAI53B,EAAa,eAE3B,MAAM6P,EAAQ4F,EAAIuiB,aACZkJ,EAAQtJ,EAAKuJ,cAActxB,GAC3BqmC,EAAKte,EAAKM,qBACVsV,EAAoC,EAAb/3B,EAAI6yC,OAAcp9B,EAAO8D,oBAAsB,GAW5E,GAVIknB,IACI4S,IAAQ/2B,EAAiBkF,OACzBxhB,EAAI+hB,UAAY0e,EAAGwE,WAAWjM,cAC9BjO,EAAMiO,eAAiBjB,GAElBsb,IAAQ/2B,EAAiBoF,QAC9B1hB,EAAI+hB,UAAY0e,EAAGwE,WAAWljB,UAC9BgJ,EAAMhJ,WAAagW,IAGvB5V,IAAS+wB,EAAW,CACpB,IAAK,IAAIlnD,EAAI,EAAGA,EAAIm2B,EAAK/mB,KAAKnO,SAAUjB,EAChCqnD,IAAQnyB,GAASC,SAASS,OAC1B0sC,EAAkCjiE,KAAK6E,IAAIixB,EAAKwJ,yBAA0B2iC,IAE1D,IAAhBj1B,IACAv1B,EAAczX,KAAK6E,IAAIixB,EAAKyhB,0BAA2B9/B,IAG/DovC,EAAY/wB,CAChB,CACA,MAAMosC,EAA6B9iC,EAAMrgC,KACzC6nD,EAAU32C,KAAK,CACX+2C,MACAlxB,OACAniB,MACA5U,KAAMmjE,EACNhb,OAAQ+a,EACR9a,OAAQ1vC,GAEhB,CAEAmvC,EAAU/mB,MAAK,CAACrgC,EAAGC,IAAMA,EAAEV,KAAOS,EAAET,OACpC,IAAIojE,EAAa,EACbvI,EAAW,EACXC,EAAW,EACXzT,EAAY,KACZC,EAAY,KAChB,IAAK,IAAI7iD,EAAI,EAAGA,EAAIojD,EAAUhmD,SAAU4C,EAAG,CACvC,MAAMsyB,EAAO8wB,EAAUpjD,GAAGsyB,KACpBkxB,EAAMJ,EAAUpjD,GAAGwjD,IACnBrzC,EAAMizC,EAAUpjD,GAAGmQ,IACnB5U,EAAO6nD,EAAUpjD,GAAGzE,KACpBooD,EAASP,EAAUpjD,GAAG2jD,OAExBpoD,IAASqnD,GAAatwB,IAASuwB,IAC/B8b,EAAan1B,EAAcma,GAE/B,MAAMib,EAAYzuD,EAAIyX,WAnEN,EAoEhB,IAAIi3C,EAAc,EACdrb,IAAQnyB,GAASC,SAASS,MAC1B5hB,EAAI8f,UAAUqL,EAAamjC,GAC3BI,EAAcD,EACdxI,EAAW55D,KAAK6E,IAAIw9D,EAAazI,IAE5B5S,IAAQnyB,GAASC,SAASW,QAC/B9hB,EAAI8f,UAAU0uC,GACdE,GAAeD,EACfvI,EAAWwI,EAAcxI,EAAWwI,EAAcxI,GAEtDzT,EAAYrnD,EACZsnD,EAAYvwB,CAChB,CAGA,OAFA4I,EAAMI,YAAc86B,EACpBl7B,EAAMsO,aAAe6sB,GACd,CACX,CACA,WAAAr9D,CAAYsrD,GACRxpD,QACAvD,KAAKunE,cAAgBxa,EACrB/sD,KAAK20B,SAAWmF,GAASC,SAASK,MAClCp6B,KAAK01B,QAAU,EACf11B,KAAK21B,QAAU,EACf31B,KAAK26B,UAAY,EACjB36B,KAAKwnE,YAAc,EACnBxnE,KAAKmtD,SAAW,EAChBntD,KAAKyrC,SAAW,EAChBzrC,KAAKynE,QAAS,EACdznE,KAAK0nE,IAAM7C,GAAS8B,YAAYzmB,KAChClgD,KAAKyrD,OAAS,EACdzrD,KAAK2nE,YAAa,EAClB3nE,KAAK66B,SAAuB,EAAd76B,KAAKyrD,OAAa,GAChCzrD,KAAKkY,WACT,CACA,cAAA0vD,CAAeF,GAIX,OAHIA,GAAO7C,GAAS8B,YAAYzmB,MAAQwnB,GAAO7C,GAAS8B,YAAY18B,OAChEjqC,KAAK0nE,IAAMA,GAER1nE,IACX,CACA,eAAA6nE,CAAgB9a,GAEZ,OADA/sD,KAAKunE,cAAgBxa,EACd/sD,IACX,CACA,UAAAstD,CAAW3pD,GAEP,OADA3D,KAAKmtD,SAAWxpD,EACT3D,IACX,CACA,UAAAutD,CAAW1kD,GAEP,OADA7I,KAAKyrC,SAAW5iC,EACT7I,IACX,CACA,WAAA8nE,CAAY/sC,GAER,OADA/6B,KAAKsrD,UAAYvwB,EACV/6B,IACX,CACA,SAAA+nE,CAAUN,GAEN,OADAznE,KAAKynE,OAASA,EACPznE,IACX,CACA,aAAAgoE,CAAcL,GAEV,OADA3nE,KAAK2nE,WAAaA,EACX3nE,IACX,CACA,IAAAwW,GACI,MAAMugB,EAAM/2B,KAAKuW,eACXwkB,EAAO/6B,KAAKg7B,oBAClBh7B,KAAK+W,cACL,MAAM4yB,EAAQ5O,EAAK6O,mBAAmB5pC,KAAK20B,SAAU30B,KAAKgT,OACpD89B,EAAgB/V,EAAKgW,UAAYhW,EAAKiW,mBAAqBjH,GAAKC,GACtE,IAAIwX,EAAQ7X,EAAMhmC,EAAI3D,KAAK01B,QAAU11B,KAAKmtD,SACtCva,EAAW,CAAC,EACZ7X,EAAKgW,YACL6B,EAAW7X,EAAKgY,YAAYrH,cAEhC,IAAIgW,EAAQ/X,EAAM9gC,EAAI7I,KAAK21B,QAAU31B,KAAKyrC,SAC1C,OAAQzrC,KAAK20B,UACT,KAAKmF,GAASC,SAASK,MAGfsnB,EADW3mB,EAAKiY,QACL3tC,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IACrCq2B,EAAKgW,WAAaD,GAAiB/G,GAAKC,KACxC0X,EAAQ9O,EAAS3G,KAAO26B,GAAa71D,QAAQg2D,aAEjDrlB,GAAS1hD,KAAKyrD,OAASmb,GAAa71D,QAAQ+1D,gBAAkB9mE,KAAK26B,UAAYtM,EAAO8D,oBAE1F,MACJ,KAAK2H,GAASC,SAASO,MAGfonB,EADW3mB,EAAKiY,QACL3tC,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IACrCq2B,EAAKgW,WAAaD,GAAiB/G,GAAKE,OACxCyX,EAAQ9O,EAAS3G,KAAO26B,GAAa71D,QAAQg2D,aAEjDrlB,GAAS1hD,KAAKyrD,OAASmb,GAAa71D,QAAQ+1D,gBAAkB9mE,KAAK26B,UAAYtM,EAAO8D,oBAE1F,MACJ,KAAK2H,GAASC,SAASS,KACnBgnB,GAASxhD,KAAKyrD,OAAS,EAAImb,GAAa71D,QAAQi2D,YAChD,MACJ,KAAKltC,GAASC,SAASW,MACnB8mB,GAASxhD,KAAKyrD,OAAS,EAAImb,GAAa71D,QAAQk2D,aAChD,MACJ,QACI,MAAM,IAAI9jE,EAAa,kBAAmB,gBAAgBnD,KAAK20B,uBAEvEoC,EAAIthB,OACAzV,KAAK2nE,aACL5wC,EAAIQ,YACJR,EAAI6f,IAAI4K,EAAOE,EAAO1hD,KAAKyrD,OAAQ,EAAa,EAAVxmD,KAAKC,IAAQ,GACnD6xB,EAAI5gB,aAAa,KACjB4gB,EAAI5H,UAER4H,EAAIvf,QAAQxX,KAAKyX,UACjB,MAAM9T,EAAI69C,EAAQzqB,EAAI2sB,YAAY1jD,KAAKunE,eAAe/8D,MAAQ,EAC9DusB,EAAIwc,SAAS,GAAKvzC,KAAKunE,cAAe5jE,EAAG+9C,EAAQ,KACjD,MAAMgL,EAAW1sD,KAAKsrD,UACtB,GAAIvoD,EAAgB2pD,GAAW,CAE3B,MAAMjN,EAAMiN,EAAS/Z,WAAa5X,EAAK/xB,OAAS,EAUhD,IAAIi/D,EACAC,EACJ,OAXAnxC,EAAI9gB,eAAe,WACnB8gB,EAAIkpC,WAAW,SACflpC,EAAI5gB,aAAa,IACbnW,KAAKynE,OACL5C,GAASY,eAAe1uC,EAAKyqB,EAAQ,GAAIE,EAAOF,EAAQ/B,EAAKiC,EAAO,CAAC,EAAG,IAGxEmjB,GAASY,eAAe1uC,EAAKyqB,EAAQ,GAAIE,EAAOF,EAAQ/B,EAAKiC,EAAO,CAAC,EAAG,IAIpE1hD,KAAK0nE,KACT,KAAK7C,GAAS8B,YAAY38B,GACtBi+B,GAAO,GACPC,EAAUloE,KAAKynE,OAAS,CAAC,EAAG,GAAK,CAAC,EAAG,GACrC5C,GAASY,eAAe1uC,EAAKyqB,EAAQ/B,EAAKiC,EAAOF,EAAQ/B,EAAKiC,EAAQumB,EAAKC,GAC3E,MACJ,KAAKrD,GAAS8B,YAAY18B,KACtBg+B,EAAM,GACNC,EAAUloE,KAAKynE,OAAS,CAAC,EAAG,GAAK,CAAC,EAAG,GACrC5C,GAASY,eAAe1uC,EAAKyqB,EAAQ/B,EAAKiC,EAAOF,EAAQ/B,EAAKiC,EAAQumB,EAAKC,GAKvF,CACAnxC,EAAI1gB,SACR,EAEJuwD,GAAajvD,UAAY,CACrBjJ,OAAQjB,EAAKkB,WACbL,KAAMb,EAAKG,KACXW,OAAQlC,EAAW0iC,KACnBvgC,MAAOlC,EAAUsC,QCvPrB,MAAMu5D,WAAeruC,GACjB,mBAAWp4B,GACP,OAAOG,EAASsmE,MACpB,CAEA,aAAOzkC,CAAO0kC,EAASzkC,GACnB,MAAMI,EAAaJ,EAAMI,WAEzB,IAAKqkC,GAA8B,IAAnBA,EAAQviE,OACpB,OAAO,EACX,MAAMwiE,EAAaD,EAAQn0D,KAAKkb,IAC5B,MAAM4L,EAAO5L,EAAO2L,UACd9nB,EAAQmc,EAAOgM,aACrB,GAAIt4B,EAAYk4B,GAAO,CAEnB,MAAM,KAAE/2B,GAAS+2B,EAAKuJ,cAActxB,GAEpC,MAAO,CAAEhP,OAAM8B,MADDi1B,EAAKwJ,yBACGpV,SAC1B,CACK,GAAIlsB,EAAU83B,GAAO,CAEtB,MAAQvyB,IAAK8/D,GAAWvtC,EAAKwtC,eAAev1D,GAC5C,MAAO,CAAEhP,KAAMskE,EAAQxiE,MAAO,EAAGqpB,SACrC,CAEI,MAAM,IAAIhsB,EAAa,WAAY,uBACvC,IAEEqlE,EAAczkC,EAEd/K,EAASqvC,EAAWhjE,QAAO,CAAC2zB,GAAU7J,SAAQrpB,YAChDqpB,EAAOuJ,UAAU8vC,EAAc1iE,GACxBb,KAAK6E,IAAIqlB,EAAOkB,WAzBJ,EAyBiC2I,KACrD,GAEH,OADA2K,EAAMI,YAAc/K,GACb,CACX,CACA,WAAAv3B,CAAY+Q,EAAMqc,GACdtrB,QACAvD,KAAK6uB,QAAUxuB,OAAO2X,OAAO,CAAEywD,YAAY,GAAQ55C,GAEnD7uB,KAAKyoE,WAAazoE,KAAK6uB,QAAQ45C,WAE/BzoE,KAAKwS,KAAOA,EACZxS,KAAK20B,SAAWmF,GAASC,SAASS,KAClCx6B,KAAKipC,eAAiB,CAClBC,WAAY7a,EAAOsD,qBAEvB3xB,KAAKkY,YACLlY,KAAK04B,UAAU,GACf14B,KAAK66B,SAAS,GAClB,CACA,WAAAY,GACI,OAAOz7B,KAAK20B,QAChB,CACA,UAAA+zC,CAAW3tC,GAEP,OADA/6B,KAAK2oE,SAAW5tC,EACT/6B,IACX,CACA,IAAAwW,GACI,MAAMugB,EAAM/2B,KAAKuW,eACXwkB,EAAO/6B,KAAKg7B,oBAClBh7B,KAAK+W,cACL,MAAM4yB,EAAQ5O,EAAK6O,mBAAmB5pC,KAAK20B,SAAU30B,KAAKgT,OAC1D,IAAI44B,EAAK7Q,EAAKiY,QACV/G,EAAOtC,EAAM9gC,EACbu4C,EAAOzX,EAAM9gC,EACjB,MAAMlF,EAAIgmC,EAAMhmC,EAAI,EACdilE,EAAa7tC,EAAKxB,aAAakL,yBAC/B5T,EAAQ7wB,KAAKu7B,uBAAuBqiB,WAAW7iB,EAAKjmB,eAC1D,IAAK,IAAIrM,EAAI,EAAGA,EAAIooB,EAAMhrB,OAAQ4C,IAAK,CACnC,MAAMsyB,EAAOlK,EAAMpoB,GACnB,GAAIhG,EAAOs4B,GAAO,CAGd6Q,EAAK7Q,EAAKiY,QACV,IAAK,IAAIpuC,EAAI,EAAGA,EAAIgnC,EAAG/lC,OAAQjB,KACvB5E,KAAK+6B,OAASlK,EAAMpoB,IAAMzI,KAAKyoE,cAC/Bx8B,EAAOhnC,KAAK8mC,IAAIE,EAAML,EAAGhnC,IACzBw8C,EAAOn8C,KAAK6E,IAAIs3C,EAAMxV,EAAGhnC,IAGrC,CACJ,CACA,IAAIikE,EAAQ,GACRC,EAAgB,EAChBC,EAAU,EACVtR,EAAe,EACfuR,EAAS,EACb,OAAQhpE,KAAKwS,MACT,KAAK21D,GAAOc,KAAKC,WACbL,EAAQ,mBACRC,GAAiB,EACjBC,EAAU98B,EAAO28B,EAAa,EAAI,GAClCxnB,GAAQwnB,EAAa,EACrB,MACJ,KAAKT,GAAOc,KAAKE,SACbN,EAAQ,qBACRC,EAAgB,GAChBC,EAAU3nB,EAAOwnB,EAAa,EAC9B38B,GAAQ28B,EAAa,EACrB,MACJ,KAAKT,GAAOc,KAAKG,UACjB,KAAKjB,GAAOc,KAAKI,cACbR,EAAQ,mBACRC,GAAiB,EACjBrR,EAAez3D,KAAK01B,QAAUozC,EAAgB,EAC1CjmE,EAAYk4B,IACZkR,GAAQ,IAAM28B,EAEVxnB,IADCA,EAAOnV,GAAQ,GAAM,EACd,GAAM28B,EAGNA,EAEZG,EAAU98B,EAAO28B,EACjBI,EAAS5nB,EAAOwnB,EAAa,IAG7B38B,GAAQ,IAAM28B,EACdxnB,GAAQwnB,EACRG,EAAU98B,EAAO,IAAO28B,EACxBI,EAAS5nB,EAAO,IAAOwnB,GAE3B,MACJ,KAAKT,GAAOc,KAAKK,QACjB,KAAKnB,GAAOc,KAAKM,YACbV,EAAQ,qBACRC,GAAiB,EACjBrR,EAAez3D,KAAK01B,QAAUozC,EAAgB,EAC1CjmE,EAAYk4B,IACZguC,EAAUH,EAAa,EACvB38B,GAAQ,GAAM28B,GACTxnB,EAAOnV,GAAQ,GAAM,IACtBmV,GAAQwnB,EAAa,GAEzBG,EAAU3nB,EAAO,GAAMwnB,EACvBI,EAAS/8B,EAAO,KAAO28B,IAGvB38B,GAAQ,IAAO28B,EACfxnB,GAAQ,GAAMwnB,EACdG,EAAU3nB,EAAO,IAAOwnB,EACxBI,EAAS/8B,EAAO28B,GAEpB,MACJ,KAAKT,GAAOc,KAAKO,uBACbv9B,GAAQ,GAAM28B,EACdxnB,GAAQwnB,EACR,MACJ,QACI,MAAM,IAAIzlE,EAAa,cAAe,mBAAmBnD,KAAKwS,uBAEtE,IAAIi3D,EAAa,WAEjB,GAAIzpE,KAAKwS,OAAS21D,GAAOc,KAAKC,YAAclpE,KAAKwS,OAAS21D,GAAOc,KAAKE,SAClEpyC,EAAIuqB,SAAS39C,EAAI3D,KAAK01B,QAASuW,EAAM,EAAGmV,EAAOnV,QAI/C,GADAw9B,EAAa,SACT5mE,EAAYk4B,GACZ,IAAK,IAAItyB,EAAIwjC,EAAMxjC,GAAK24C,EAAM34C,GAAKmgE,EAC/B14C,EAAM4G,YAAYC,EAAKpzB,EAAI3D,KAAK01B,QAAU,EAAGjtB,EAAGzI,KAAKipC,eAAeC,WAAY,2BAGnF,CACD,IAAIzgC,EACJ,IAAKA,EAAIwjC,EAAMxjC,GAAK24C,EAAM34C,GAAK,GAC3BynB,EAAM4G,YAAYC,EAAKpzB,EAAI3D,KAAK01B,QAAU,EAAGjtB,EAAGzI,KAAKipC,eAAeC,WAAY,uBAEhFlpC,KAAKwS,OAAS21D,GAAOc,KAAKI,gBAC1BL,EAASvgE,EAAI,IAAOmgE,EAE5B,CAEA5oE,KAAKwS,OAAS21D,GAAOc,KAAKO,yBAI9Bt5C,EAAM4G,YAAYC,EAAKpzB,EAAI3D,KAAK01B,QAAUozC,EAAeC,EAAS/oE,KAAKipC,eAAeC,WAAY2/B,EAAO,CACrGvnE,SAAU,UAAUmoE,KAAcZ,MAGlC7oE,KAAKwS,OAAS21D,GAAOc,KAAKI,eAAiBrpE,KAAKwS,OAAS21D,GAAOc,KAAKM,cACrExyC,EAAIthB,OACJshB,EAAIvf,QAAQxX,KAAKyX,UACjBsf,EAAIwc,SAAS,IAAK5vC,EAAI8zD,EAAcuR,GACpCjyC,EAAI1gB,WAEZ,EAEJ8xD,GAAOc,KAAO,CACVC,WAAY,EACZC,SAAU,EACVC,UAAW,EACXE,QAAS,EACTD,cAAe,EACfE,YAAa,EACbC,uBAAwB,GAE5BrB,GAAOxwD,UAAY,CACfjJ,OAAQjB,EAAKsE,MACbzD,KAAMb,EAAKG,KACXW,OAAQlC,EAAW0iC,KACnBvgC,MAAOlC,EAAUyD,QChNd,MAAM25D,WAAgB5vC,GACzB,mBAAWp4B,GACP,OAAOG,EAAS6nE,OACpB,CAEA,aAAOhmC,CAAOimC,EAAUhmC,EAAOnuB,GAC3B,IAAKm0D,GAAgC,IAApBA,EAAS9jE,OACtB,OAAO,EAEX,IAAI80B,EAAYgJ,EAAMiO,cAClBpnC,EAAQ,EACR1E,EAAQ69B,EAAMsO,YAAc,EAEhC,MAAM6P,EAAQtsC,EAAQooC,WAAWiE,GAAKngD,UACtC,GAAIogD,GAASA,EAAMj8C,OAAS,EAAG,CAE3B80B,GADmBmnB,EAAM7tC,KAAK4I,GAAOA,EAAG8lC,kBAAiBt9C,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IAAM2pB,EAAO8D,oBAC9D,CAC1C,MAEIwR,EAAMiO,eAAiB,EAG3B,IAAK,IAAInpC,EAAI,EAAGA,EAAIkhE,EAAS9jE,SAAU4C,EAAG,CACtC,MAAMmhE,EAAUD,EAASlhE,GACzBmhE,EAAQlxC,UAAU5yB,GAClB8jE,EAAQjuC,YAAYhB,GACpBnwB,GAASo/D,EAAQv5C,WACjBvqB,GAAS0E,CACb,CAEA,OADAm5B,EAAMsO,aAAeznC,GACd,CACX,CACA,WAAA/I,GACI8B,QACAvD,KAAK20B,SAAWmF,GAASC,SAASW,MAClC16B,KAAKipC,eAAiB,CAClB4gC,OAAO,EACPC,cAAe,GACfC,YAAa,EACbC,WAAY,EACZC,WAAY,GAEhBjqE,KAAKkqE,gBAAgBlqE,KAAKipC,eAAe6gC,cAC7C,CAEA,QAAAK,CAASN,GAEL,OADA7pE,KAAKipC,eAAe4gC,MAAQA,EACrB7pE,IACX,CAEA,eAAAkqE,CAAgB1/D,GAGZ,OAFAxK,KAAKipC,eAAe6gC,cAAgBt/D,EACpCxK,KAAK66B,SAASrwB,GACPxK,IACX,CAEA,IAAAwW,GACI,MAAMugB,EAAM/2B,KAAKuW,eACXwkB,EAAO/6B,KAAKg7B,oBAClBh7B,KAAK+W,cACL,MACMqzD,EADQrvC,EAAK6O,mBAAmB9P,GAASC,SAASW,MAAO16B,KAAKgT,OACnDrP,EAAI3D,KAAK01B,QACpB20C,EAAKtvC,EAAKmY,eAAelzC,KAAK26B,WAAa,EACjD+uC,GAAQY,cAAcvzC,EAAKqzC,EAAIC,EAAIrqE,KAAKipC,eAC5C,CAKA,oBAAOqhC,CAAcvzC,EAAKpzB,EAAGkF,EAAG0hE,GAC5B,MAAM,MAAEV,EAAK,cAAEC,EAAa,WAAEE,EAAU,WAAEC,EAAU,YAAEF,GAAgBQ,EAChEC,EAAYV,EAAgBE,EAElC,IAAIvhE,EACJ,GAFAsuB,EAAIQ,YAEAsyC,EAAO,CAEP,IADA9yC,EAAIS,OAAO7zB,EAAGkF,EAAIohE,EAAa,GAC1BxhE,EAAI,EAAGA,EAAI+hE,EAAY,IAAK/hE,EAC7BsuB,EAAIU,OAAO9zB,EAAIqmE,EAAYnhE,EAAIkhE,EAAc,GAC7CpmE,GAAKqmE,EACLjzC,EAAIU,OAAO9zB,EAAIqmE,EAAYnhE,EAAIkhE,EAAc,GAC7CpmE,GAAKqmE,EAET,IAAKvhE,EAAI,EAAGA,EAAI+hE,EAAY,IAAK/hE,EAC7BsuB,EAAIU,OAAO9zB,EAAIqmE,EAAYnhE,EAAIkhE,EAAc,EAAIE,EAAa,GAC9DtmE,GAAKqmE,EACLjzC,EAAIU,OAAO9zB,EAAIqmE,EAAYnhE,EAAIkhE,EAAc,EAAIE,EAAa,GAC9DtmE,GAAKqmE,EAETjzC,EAAIa,MACR,KACK,CAED,IADAb,EAAIS,OAAO7zB,EAAGkF,EAAIohE,GACbxhE,EAAI,EAAGA,EAAI+hE,EAAY,IAAK/hE,EAC7BsuB,EAAIW,iBAAiB/zB,EAAIqmE,EAAa,EAAGnhE,EAAIkhE,EAAc,EAAGpmE,EAAIqmE,EAAYnhE,GAC9ElF,GAAKqmE,EACLjzC,EAAIW,iBAAiB/zB,EAAIqmE,EAAa,EAAGnhE,EAAIkhE,EAAc,EAAGpmE,EAAIqmE,EAAYnhE,GAC9ElF,GAAKqmE,EAET,IAAKvhE,EAAI,EAAGA,EAAI+hE,EAAY,IAAK/hE,EAC7BsuB,EAAIW,iBAAiB/zB,EAAIqmE,EAAa,EAAGnhE,EAAIkhE,EAAc,EAAIE,EAAYtmE,EAAIqmE,EAAYnhE,EAAIohE,GAC/FtmE,GAAKqmE,EACLjzC,EAAIW,iBAAiB/zB,EAAIqmE,EAAa,EAAGnhE,EAAIkhE,EAAc,EAAIE,EAAYtmE,EAAIqmE,EAAYnhE,EAAIohE,GAC/FtmE,GAAKqmE,EAETjzC,EAAIa,MACR,CACJ,ECnFJ,SAAS,MAAK7zB,GACN0mE,GAAgBhnC,OAChB5/B,EAAI,2BAA4BE,EACxC,CACA,MAAM0mE,GACF,WAAAhpE,GAEIzB,KAAK2jC,MAAQ,CACTI,WAAY,EACZkO,YAAa,EACbtX,UAAW,EACXiX,cAAe,GAInB5xC,KAAK0qE,QAAU,CAAC,EAChB1qE,KAAK05C,cAAe,EACpB15C,KAAK45C,eAAgB,EACrB55C,KAAK2qE,WAAY,EACjB3qE,KAAKwK,MAAQ,EACbxK,KAAK6yC,QAAU,CACnB,CACA,WAAA9J,CAAY6hC,GAER,OADA,GAAE,qDACK5qE,KAAKs5C,UAAUsxB,EAC1B,CAOA,SAAAtxB,CAAUsxB,GACN,MAAMtpE,EAAWspE,EAAO91D,cAOxB,OANK9U,KAAK0qE,QAAQppE,KACdtB,KAAK0qE,QAAQppE,GAAY,IAE7BtB,KAAK0qE,QAAQppE,GAAU4T,KAAK01D,GAC5BA,EAAOpvC,mBAAmBx7B,MAC1BA,KAAK05C,cAAe,EACb15C,IACX,CAIA,YAAA6oC,CAAavnC,GAET,OADA,GAAE,uDACKtB,KAAK49C,WAAWt8C,EAC3B,CACA,UAAAs8C,CAAWt8C,GACP,IAAIuM,EACJ,OAAyC,QAAjCA,EAAK7N,KAAK0qE,QAAQppE,UAA8B,IAAPuM,EAAgBA,EAAK,EAC1E,CAIA,QAAAwiB,GACI,OAAOrwB,KAAKwK,KAChB,CACA,YAAAqgE,GACI,OAAO7qE,KAAK2jC,MAAMI,UACtB,CACA,aAAAyvB,GACI,OAAOxzD,KAAK2jC,MAAMsO,WACtB,CACA,QAAA4L,GACI,OAAO79C,KAAK2jC,KAChB,CACA,UAAAtyB,GACI,IAAKrR,KAAK2qE,UACN,MAAM,IAAIxnE,EAAa,oBAAqB,sCAEhD,MAAO,CACHqH,MAAOxK,KAAK2jC,MAAMI,WAAa/jC,KAAK2jC,MAAMsO,YAAcjyC,KAAK6yC,QAC7DA,QAAS7yC,KAAK6yC,QAEtB,CACA,SAAA4G,GACI,GAAIz5C,KAAK05C,aACL,OACJ,GAAE,iCACF,MAAM/V,EAAQ3jC,KAAK2jC,MACb+mC,EAAU1qE,KAAK0qE,QAErB5nE,GAAU4gC,OAAOgnC,EAAQ7oE,EAASiB,WAAY6gC,GAC9Cg7B,GAAYj7B,OAAOgnC,EAAQ7oE,EAAS88D,aAAch7B,GAClDvhC,GAAIshC,OAAOgnC,EAAQ7oE,EAASO,KAAMuhC,GAClCgoB,GAAejoB,OAAOgnC,EAAQ7oE,EAAS8pD,gBAAiBhoB,GACxD7hC,GAAW4hC,OAAOgnC,EAAQ7oE,EAASC,YAAa6hC,GAChDwkC,GAAOzkC,OAAOgnC,EAAQ7oE,EAASsmE,QAASxkC,GACxCnhC,GAAekhC,OAAOgnC,EAAQ7oE,EAASW,gBAAiBmhC,GACxD+4B,GAAah5B,OAAOgnC,EAAQ7oE,EAAS66D,cAAe/4B,GACpDijC,GAAaljC,OAAOgnC,EAAQ7oE,EAAS+kE,cAAejjC,GACpDwQ,GAAazQ,OAAOgnC,EAAQ7oE,EAASsyC,cAAexQ,GACpDk5B,GAASn5B,OAAOgnC,EAAQ7oE,EAASg7D,UAAWl5B,GAC5C3hC,GAAW0hC,OAAOgnC,EAAQ7oE,EAASG,YAAa2hC,GAChDmgB,GAAYpgB,OAAOgnC,EAAQ7oE,EAASiiD,aAAcngB,GAClDke,GAAKne,OAAOgnC,EAAQ7oE,EAASggD,MAAOle,GACpC+lC,GAAQhmC,OAAOgnC,EAAQ7oE,EAAS6nE,SAAU/lC,EAAO3jC,MAEjDA,KAAKwK,MAAQm5B,EAAMI,WAAaJ,EAAMsO,YACtCjyC,KAAK05C,cAAe,CACxB,CACA,UAAAC,GACQ35C,KAAK45C,gBAET,GAAE,kCAEF92C,GAAU62C,WAAW35C,KAAK49C,WAAW/7C,EAASiB,YAClD,EAEJ2nE,GAAgBhnC,OAAQ,EC3HxB,MAAMqnC,WAAalsB,GACf,mBAAWl9C,GACP,OAAOG,EAASipE,IACpB,CAKA,gBAAWC,GACP,MAAO,CACH1wD,OAAQ,CACJhX,KAAM,QACNW,KAAM,GAEVuW,KAAM,CACFlX,KAAM,QACNW,KAAM,GAEVyW,KAAM,CACFpX,KAAM,QACNW,KAAM,GAEVwW,MAAO,CACHnX,KAAM,QACNW,KAAM,GAEV2W,WAAY,CACRtX,KAAM,2BACNW,KAAM,GAEV0W,QAAS,CACLrX,KAAM,QACNW,KAAM,GAEV,gBAAiB,CACbX,KAAM,QACNW,KAAM,GAEV,aAAc,CACVX,KAAM,QACNW,KAAM,GAEV,aAAc,CACVX,KAAM,QACNW,KAAM,GAEV4W,QAAS,CACLvX,KAAM,QACNW,KAAM,GAEV6W,OAAQ,CACJxX,KAAM,QACNW,KAAM,GAEVgnE,IAAK,CACD3nE,KAAM,iBACNW,KAAM,KAGlB,CACA,0BAAWinE,GACP,MAAO,CACH,MAAO,WACP,MAAO,WAEf,CAEA,WAAAxpE,CAAY+Q,EAAMlE,EAAMmiC,GACpBltC,QAKAvD,KAAKyuB,KAAOq8C,GAAKC,MAAc,OAC/B/qE,KAAK07B,YAAY4iB,GAAsBsC,OACvC5gD,KAAK6gD,QAAQruC,EAAMlE,EAAMmiC,GACzBzwC,KAAK66B,SAAS3K,EAAMG,SAASrwB,KAAKyuB,KAAKprB,KAAMynE,GAAK9sB,SAASh+C,KAAKsO,MAAO,QAAQtO,KAAKsO,SArF5F,YAAcvK,GACN+mE,GAAKrnC,OACL5/B,EAAI,gBAAiBE,EAC7B,CAmFQ,CAAE,iBAAkByO,EACxB,CAEA,OAAAquC,CAAQruC,EAAMlE,EAAMmiC,GAChBzwC,KAAKwS,KAAOA,EACZxS,KAAKyuB,KAAOq8C,GAAKC,MAAMv4D,GAEnBxS,KAAKsO,UADI1K,IAAT0K,EACY,UAGAA,EAEhB,MAAMs1B,EAAYvV,EAAOC,mBAEzB,QAAmB1qB,IAAf6sC,EAA0B,CAC1B,MAAMptC,EAAOynE,GAAKG,gBAAgBx6B,GAC5Bpb,EAASy1C,GAAK9sB,SAASh+C,KAAKsO,MAAQ,EAAK,EACzCtK,EAAO4/B,EAAUjyB,aAAa,QAAQ3R,KAAKsO,oBAAoBmiC,KAAczwC,KAAKwS,aAClFkjB,EAAUkO,EAAUjyB,aAAa,QAAQ3R,KAAKsO,oBAAoBmiC,KAAczwC,KAAKwS,eAC3FxS,KAAKywC,WAAa,CAAEptC,OAAMgyB,QAAOrxB,OAAM0xB,WACvC11B,KAAKkrE,WAAa,IAAIh7C,EAAMlwB,KAAKywC,WAAWptC,KAAMrD,KAAKywC,WAAWpb,OAClEr1B,KAAKkrE,WAAWn6D,QAAQ4lB,MAAQ,EAChC32B,KAAKkrE,WAAWxyC,UAAU14B,KAAKywC,WAAW/a,QAC9C,MAEI11B,KAAKywC,gBAAa7sC,EAEtB,OAAO5D,IACX,CAEA,QAAAqwB,GAII,MAHkB,QAAdrwB,KAAKwS,MACL9O,EAAQ1D,KAAKw4B,MAAO,YAAa,kCAE9Bx4B,KAAKwK,KAChB,CAEA,eAAOwzC,CAAS1vC,GAEZ,MAAe,WAARA,EAAoB+f,EAAOsD,oBAAuBtD,EAAOsD,oBAAsB,EAAK,CAC/F,CAEA,QAAA4G,CAASC,GAEL,OADAx4B,KAAKw4B,MAAQA,EACNx4B,IACX,CAEA,IAAAwW,GACI,MAAMgiB,EAAQx4B,KAAKu5B,aACbxC,EAAMyB,EAAMjiB,eAClBvW,KAAK+W,cACL/W,KAAKuV,WAAWwhB,GAChBA,EAAI6V,UAAU,OAAQ5sC,KAAKuT,aAAa,OACxC2c,EAAM4G,YAAYC,EAAK/2B,KAAK2D,EAAG60B,EAAMkM,YAAY1kC,KAAKyuB,KAAKzqB,MAAO8mE,GAAK9sB,SAASh+C,KAAKsO,MAAOtO,KAAKyuB,KAAKprB,KAAM,CACxG/B,SAAU,QAAQtB,KAAKsO,cAEH1K,IAApB5D,KAAKywC,iBAAgD7sC,IAApB5D,KAAKkrE,aACtClrE,KAAK6+C,iBAAiB7+C,KAAKkrE,WAAY1yC,EAAOx4B,KAAKywC,WAAWzsC,MAC9DhE,KAAKkrE,WAAW3yC,SAASC,GACzBx4B,KAAKkrE,WAAW3zD,WAAWwf,GAC3B/2B,KAAKkrE,WAAW1xC,cAAcx5B,KAAK2D,IAEvCozB,EAAI+V,aACJ9sC,KAAKoW,aAAa2gB,EACtB,EAGJ+zC,GAAKrnC,OAAQ,ECtJb,MAAM0nC,WAAqBvsB,GACvB,mBAAWl9C,GACP,OAAOG,EAASspE,YACpB,CAEA,WAAA1pE,CAAYmvB,EAASw6C,EAAeC,GAChC9nE,QACAvD,KAAKsrE,QAAU,GACftrE,KAAKurE,UAAU36C,EAASw6C,EAAeC,GACvCrrE,KAAK07B,YAAY4iB,GAAsBsC,OACvC5gD,KAAKwrE,eAAiBn9C,EAAOsD,oBAC7B3xB,KAAK0R,OAAS,GACd1R,KAAKyrE,WAAa,GAClBzrE,KAAK0rE,eAAgB,CACzB,CAIA,cAAAC,CAAe5yD,EAAK6yD,GAChB,MAAMC,EAAex9C,EAAOmC,gBAAgBzX,EAAIvG,MAC1Cud,EAAQ,IAAIG,EAAM27C,EAAaxoE,KAAMrD,KAAKwrE,gBAEhD,IAAIM,EAAa,EACjB,GAAiB,MAAb/yD,EAAIvG,MAAgBo5D,EAAS,CAC7B,MAAM/4B,EAAUs4B,GAAannC,kBAAkB4nC,EAAQp5D,MACvD,GAAIqgC,EAAS,CAETi5B,EADgBF,EAAQ5nE,MAAQ+U,EAAI/U,KACb6uC,EAAQ1Y,MAAQ0Y,EAAQxY,KACnD,CACJ,CAEAr6B,KAAK6+C,iBAAiB9uB,EAAO/vB,KAAKu5B,aAAcxgB,EAAI/U,MACpDhE,KAAK0R,OAAOwD,KAAK6a,GACjB,MAAMg8C,EAAY/rE,KAAKyrE,WAAWzrE,KAAKyrE,WAAW5lE,OAAS,GACrD+qC,EAAa7gB,EAAM1e,aAAa7G,MAAQshE,EAE9C9rE,KAAKyrE,WAAWv2D,KAAK62D,EAAYn7B,GAEjC5wC,KAAKwK,OAASomC,CAClB,CAGA,SAAAo7B,CAAUr7C,GAGN,OAFA3wB,KAAK2qE,WAAY,EACjB3qE,KAAKorE,cAAgBz6C,EACd3wB,IACX,CACA,sBAAAisE,CAAuBt7C,GAEnB,MAAMu7C,EAAiB79C,EAAOqC,aAAaC,GAErCw7C,EAAkBnsE,KAAKsrE,QAAQzlE,OAAS,GAAKqmE,EAAermE,OAAS,GAAKqmE,EAAe,GAAG15D,OAASxS,KAAKsrE,QAAQ,GAAG94D,KAErH45D,EAAWD,EAAkBD,EAAermE,OAASqmE,EAAermE,OAAS7F,KAAKsrE,QAAQzlE,OAEhG,GAAIumE,EAAW,EACX,OAEJ,MAAMC,EAAY,GAClB,IAAK,IAAI5jE,EAAI,EAAGA,EAAI2jE,EAAU3jE,IAAK,CAC/B,IAAIuK,EAAQvK,EACP0jE,IACDn5D,EAAQk5D,EAAermE,OAASumE,EAAW3jE,GAE/C,MAAMsQ,EAAMmzD,EAAel5D,GAC3Bq5D,EAAUn3D,KAAK,CAAE1C,KAAM,IAAKxO,KAAM+U,EAAI/U,MAC1C,CAGA,OADAhE,KAAKsrE,QAAUe,EAAUC,OAAOtsE,KAAKsrE,SAC9B,CACHA,QAASe,EACT75D,KAAM05D,EAAe,GAAG15D,KAEhC,CAEA,UAAA+5D,CAAW/zC,GAGP,OAFAx4B,KAAK0rE,eAAgB,EACrBlzC,EAAMuQ,YAAY/oC,MACXA,IACX,CAGA,eAAAwsE,CAAgB/9C,EAAMjc,EAAM84D,EAAUtrE,KAAKsrE,SACvC,IACImB,EAuCAhkE,EAxCAikE,EAAS,EAEb,OAAQj+C,GAEJ,IAAK,UACY,MAATjc,EACAi6D,EAAc,CAAC,IAAK,GAAK,EAAG,EAAG,KAAM,GAAK,GAE1CC,GAAU,EACd,MACJ,IAAK,gBACY,MAATl6D,EACAi6D,EAAc,CAAC,EAAG,EAAG,GAAK,IAAK,EAAG,EAAG,KAErCC,EAAS,IACb,MACJ,IAAK,OACDA,EAAS,GACT,MACJ,IAAK,QACY,MAATl6D,EACAi6D,EAAc,CAAC,EAAG,EAAG,IAAK,GAAK,EAAG,EAAG,KAErCC,GAAU,GACd,MACJ,IAAK,aACL,IAAK,aACY,MAATl6D,EACAi6D,EAAc,CAAC,GAAK,IAAK,EAAG,EAAG,IAAK,IAAK,GAEzCC,EAAS,EACb,MACJ,IAAK,OACL,IAAK,SACDA,EAAS,EAOjB,QAA2B,IAAhBD,EACP,IAAKhkE,EAAI,EAAGA,EAAI6iE,EAAQzlE,SAAU4C,EAC9B6iE,EAAQ7iE,GAAGzE,KAAOyoE,EAAYhkE,QAGjC,GAAe,IAAXikE,EACL,IAAKjkE,EAAI,EAAGA,EAAI6iE,EAAQzlE,SAAU4C,EAC9B6iE,EAAQ7iE,GAAGzE,MAAQ0oE,CAG/B,CACA,UAAA3tB,CAAW/rC,GAGP,OAFKhT,KAAK2qE,WACN3qE,KAAK0jC,SACqB,IAAvB1jC,KAAK0R,OAAO7L,SAAkB7F,KAAK0rE,eAAiB14D,EAAQ,EAAK,EAAIhT,KAAK+1C,OACrF,CACA,QAAA1lB,GAGI,OAFKrwB,KAAK2qE,WACN3qE,KAAK0jC,SACF1jC,KAAKwK,KAChB,CACA,SAAA+gE,CAAU36C,EAASw6C,EAAeC,GAK9B,OAJArrE,KAAK2qE,WAAY,EACjB3qE,KAAK4wB,QAAUA,EACf5wB,KAAKorE,cAAgBA,EACrBprE,KAAKqrE,aAAeA,EACbrrE,IACX,CAIA,QAAA2sE,CAAStB,GAGL,OAFArrE,KAAK2qE,WAAY,EACjB3qE,KAAKqrE,aAAeA,EACbrrE,IACX,CACA,qBAAA4sE,CAAsBvB,GAClB,MAAMvhE,EAAM7E,KAAK8mC,IAAIs/B,EAAaxlE,OAAQ7F,KAAKsrE,QAAQzlE,QACvD,IAAK,IAAI4C,EAAI,EAAGA,EAAIqB,IAAOrB,EACnB4iE,EAAa5iE,KACbzI,KAAKsrE,QAAQ7iE,GAAG+J,KAAO64D,EAAa5iE,GAGhD,CACA,MAAAi7B,GACI,MAAMlL,EAAQx4B,KAAKu5B,aACnBv5B,KAAKwK,MAAQ,EACbxK,KAAK0R,OAAS,GACd1R,KAAKyrE,WAAa,CAAC,GACnBzrE,KAAKsrE,QAAUj9C,EAAOqC,aAAahtB,EAAQ1D,KAAK4wB,UAChD,MAAM06C,EAAUtrE,KAAKsrE,QACfuB,EAAsBvB,EAAQzlE,OAAS,EAAIylE,EAAQ,GAAG94D,UAAO5O,EACnE,IAAIkpE,EAOJ,GANI9sE,KAAKorE,gBACL0B,EAAgB9sE,KAAKisE,uBAAuBjsE,KAAKorE,gBAEjDprE,KAAKqrE,cACLrrE,KAAK4sE,sBAAsB5sE,KAAKqrE,cAEhCrrE,KAAKsrE,QAAQzlE,OAAS,EAAG,CACzB,MAAM4oB,GAAQzuB,KAAK20B,WAAa2pB,GAAsBoB,IAAMlnB,EAAMu0C,aAAev0C,EAAMw0C,YAAcx0C,EAAMw0C,UACvGF,GACA9sE,KAAKwsE,gBAAgB/9C,EAAMq+C,EAAct6D,KAAMs6D,EAAcxB,SAEjEtrE,KAAKwsE,gBAAgB/9C,EAAMo+C,EAAqBvB,GAChD,IAAK,IAAI7iE,EAAI,EAAGA,EAAIzI,KAAKsrE,QAAQzlE,SAAU4C,EACvCzI,KAAK2rE,eAAe3rE,KAAKsrE,QAAQ7iE,GAAIzI,KAAKsrE,QAAQ7iE,EAAI,GAE9D,CACAzI,KAAK2qE,WAAY,CACrB,CAIA,SAAAl5D,GAGI,OAFKzR,KAAK2qE,WACN3qE,KAAK0jC,SACF1jC,KAAK0R,MAChB,CACA,IAAA8E,GACI,MAAMgiB,EAAQx4B,KAAKu5B,aACbxC,EAAMyB,EAAMjiB,eACbvW,KAAK2qE,WACN3qE,KAAK0jC,SACT1jC,KAAK+W,cACL/W,KAAKuV,WAAWwhB,GAChBA,EAAI6V,UAAU,eAAgB5sC,KAAKuT,aAAa,OAChD,IAAK,IAAI9K,EAAI,EAAGA,EAAIzI,KAAK0R,OAAO7L,OAAQ4C,IAAK,CACzC,MAAMsnB,EAAQ/vB,KAAK0R,OAAOjJ,GACpB9E,EAAI3D,KAAK2D,EAAI3D,KAAKyrE,WAAWhjE,GACnCsnB,EAAMwI,SAASC,GACfzI,EAAMxY,WAAWwf,GACjBhH,EAAMyJ,cAAc71B,EACxB,CACAozB,EAAI+V,aACJ9sC,KAAKoW,aAAa2gB,EACtB,EAIJo0C,GAAannC,kBAAoB,CAC7B,IAAK,CACD7J,MAAO,EACPE,MAAO,GAEX31B,EAAG,CACCy1B,MAAO,EACPE,MAAO,GAEXz1B,EAAG,CACCu1B,MAAO,EACPE,MAAO,GAEX,KAAM,CACFF,MAAO,EACPE,MAAO,GAEXxd,GAAI,CACAsd,MAAO,EACPE,MAAO,GAEXvd,GAAI,CACAqd,MAAO,EACPE,MAAO,GAEXj0B,EAAG,CACC+zB,MAAO,EACPE,MAAO,GAEXpd,IAAK,CACDkd,MAAO,EACPE,MAAO,GAEX,KAAM,CACFF,MAAO,EACPE,MAAO,GAEX,IAAK,CACDF,MAAO,EACPE,MAAO,GAEX,KAAM,CACFF,MAAO,EACPE,MAAO,GAEX,MAAO,CACHF,MAAO,EACPE,MAAO,GAEXtd,GAAI,CACAod,MAAO,EACPE,MAAO,IAEXrd,IAAK,CACDmd,MAAO,EACPE,MAAO,KC5Rf,MAAM4yC,WAAmBruB,GACrB,mBAAWl9C,GACP,OAAOG,EAASorE,UACpB,CACA,WAAAxrE,CAAY+Q,EAAM7O,EAAGgyB,GACjBpyB,QACAvD,KAAKktE,YAAc16D,EACnBxS,KAAK2D,EAAIA,EACT3D,KAAK01B,QAAU,EACf11B,KAAK21B,QAAUA,EACf31B,KAAKkY,WACT,CACA,SAAAi1D,CAAUxpE,GAEN,OADA3D,KAAK01B,QAAU/xB,EACR3D,IACX,CACA,SAAAotE,CAAUvkE,GAEN,OADA7I,KAAK21B,QAAU9sB,EACR7I,IACX,CACA,IAAAwW,CAAKgiB,EAAO70B,GAER,OADA3D,KAAK+W,cACG/W,KAAKktE,aACT,KAAKD,GAAWz6D,KAAK66D,WACjBrtE,KAAKstE,cAAc90C,EAAO70B,EAAI60B,EAAMnI,YACpC,MACJ,KAAK48C,GAAWz6D,KAAK+6D,UACjBvtE,KAAKwtE,eAAeh1C,EAAO70B,EAAG,QAAQ,GACtC,MACJ,KAAKspE,GAAWz6D,KAAKi7D,WACjBztE,KAAK0tE,eAAel1C,EAAO70B,GAC3B,MACJ,KAAKspE,GAAWz6D,KAAKm7D,YACjB3tE,KAAK0tE,eAAel1C,EAAO70B,EAAI60B,EAAMnI,YACrC,MACJ,KAAK48C,GAAWz6D,KAAKo7D,GACjB5tE,KAAKwtE,eAAeh1C,EAAO70B,EAAG,QAAQ,GACtC,MACJ,KAAKspE,GAAWz6D,KAAKq7D,WACjB7tE,KAAKwtE,eAAeh1C,EAAO70B,EAAG,WAAW,GACzC,MACJ,KAAKspE,GAAWz6D,KAAKs7D,WACjB9tE,KAAKwtE,eAAeh1C,EAAO70B,EAAG,gBAAgB,GAC9C,MACJ,KAAKspE,GAAWz6D,KAAKu7D,GACjB/tE,KAAKwtE,eAAeh1C,EAAO70B,EAAG,QAAQ,GACtC,MACJ,KAAKspE,GAAWz6D,KAAKw7D,WACjBhuE,KAAKwtE,eAAeh1C,EAAO70B,EAAG,WAAW,GACzC,MACJ,KAAKspE,GAAWz6D,KAAKy7D,WACjBjuE,KAAKwtE,eAAeh1C,EAAO70B,EAAG,gBAAgB,GAC9C,MACJ,KAAKspE,GAAWz6D,KAAK07D,KACjBluE,KAAKwtE,eAAeh1C,EAAO70B,EAAG,QAAQ,GACtC,MACJ,KAAKspE,GAAWz6D,KAAK27D,QACjBnuE,KAAKwtE,eAAeh1C,EAAO70B,EAAG,MAAM,GAK5C,OAAO3D,IACX,CACA,aAAAstE,CAAc90C,EAAO70B,GACjB,MAAMkF,EAAI2vB,EAAM0a,eAAe1a,EAAM6Y,eAAiBrxC,KAAK21B,QAE3D,OADAzF,EAAM4G,YAAY0B,EAAMjiB,eAAgBvW,KAAK2D,EAAIA,EAAI3D,KAAK01B,QAAS7sB,EAAIwlB,EAAOC,mBAAmB3c,aAAa,gCAAiC,GAAI,OAAQ,CAAErQ,SAAU,SAChKtB,IACX,CACA,cAAA0tE,CAAel1C,EAAO70B,GAClB,MAAMkF,EAAI2vB,EAAM0a,eAAe1a,EAAM6Y,eAAiBrxC,KAAK21B,QAE3D,OADAzF,EAAM4G,YAAY0B,EAAMjiB,eAAgBvW,KAAK2D,EAAIA,EAAI3D,KAAK01B,QAAS7sB,EAAIwlB,EAAOC,mBAAmB3c,aAAa,iCAAkC,GAAI,QAAS,CAAErQ,SAAU,UAClKtB,IACX,CACA,cAAAwtE,CAAeh1C,EAAO70B,EAAGoB,EAAMqpE,GAC3B,IAAIvgE,EACJ,MAAMkpB,EAAMyB,EAAMjiB,eAClBwgB,EAAIthB,OACJshB,EAAIvf,QAAQxX,KAAKyX,UACjB,IAAI42D,EAAS,EACTC,EAAW,EACf,MAAMC,EAAgB/1C,EAAMulB,gBAAkB/9C,KAAK2D,EACnD,OAAQ3D,KAAKktE,aAET,KAAKD,GAAWz6D,KAAK+6D,UAEjBc,EAASruE,KAAK2D,EAAI60B,EAAMg2C,sBACxBF,EACID,EACIt3C,EAAI2sB,YAAY3+C,GAAMyF,MACtB6jB,EAAOC,mBAAmB3c,aAAa,sCAC/C,MAEJ,KAAKs7D,GAAWz6D,KAAKo7D,GACrB,KAAKX,GAAWz6D,KAAKs7D,WACrB,KAAKb,GAAWz6D,KAAKu7D,GACrB,KAAKd,GAAWz6D,KAAKy7D,WACrB,KAAKhB,GAAWz6D,KAAK07D,KACjBG,EACIruE,KAAK2D,EACDA,EACA3D,KAAK01B,QACL8C,EAAMnI,WACNhC,EAAOC,mBAAmB3c,aAAa,sCACvC48D,EACAx3C,EAAI2sB,YAAY3+C,GAAMyF,MAC9B,MAEJ,QACI6jE,EACIruE,KAAK2D,EACDA,EACA3D,KAAK01B,QACL8C,EAAMnI,WACNhC,EAAOC,mBAAmB3c,aAAa,sCACvC48D,EACAx3C,EAAI2sB,YAAY3+C,GAAMyF,MACtB6jB,EAAOC,mBAAmB3c,aAAa,sCAC/C28D,EACID,EACIt3C,EAAI2sB,YAAY3+C,GAAMyF,MACtB6jB,EAAOC,mBAAmB3c,aAAa,sCAGvD,MAAM9I,EAAI2vB,EAAM0a,eAAe1a,EAAM6Y,eACjCrxC,KAAK21B,QACLtH,EAAOC,mBAAmB3c,aAAa,sCAQ3C,OAPIy8D,GACAl+C,EAAM4G,YAAYC,EAAKu3C,EAAUzlE,EAAqG,EAAlG4E,EAAKW,wBAAiD,QAAxBP,EAAK7N,KAAKyX,gBAA6B,IAAP5J,OAAgB,EAASA,EAAGS,MAAW,OAAQ,CAC7IhN,SAAU,SAGlBy1B,EAAIwc,SAASxuC,EAAMspE,EAAQxlE,EAAI,GAC/BkuB,EAAI1gB,UACGrW,IACX,EAEJitE,GAAWt1D,UAAY,CACnBjJ,OAAQjB,EAAKsE,MACbzD,KAAM+f,EAAOsD,oBAAsB,EACnCpjB,OAAQlC,EAAW0iC,KACnBvgC,MAAOlC,EAAUsC,QAErBq+D,GAAWz6D,KAAO,CACd0tC,KAAM,EACNqtB,UAAW,EACXF,WAAY,EACZI,WAAY,EACZE,YAAa,EACbC,GAAI,EACJC,WAAY,EACZC,WAAY,EACZC,GAAI,EACJC,WAAY,GACZC,WAAY,GACZC,KAAM,GACNC,QAAS,IC7Jb,MAAMM,WAAqB7vB,GACvB,mBAAWl9C,GACP,OAAOG,EAAS4sE,YACpB,CACA,WAAAhtE,CAAYitE,EAAS/qE,EAAGqsB,EAAS2+C,GAAW,GACxCprE,QACAvD,KAAK66B,SAAS,IACd76B,KAAK0uE,QAAUA,EACf1uE,KAAK2D,EAAIA,EACT3D,KAAK4uE,QAAU,EACf5uE,KAAKgwB,QAAUA,EACfhwB,KAAK2uE,SAAWA,EAChB3uE,KAAKkY,WACT,CACA,eAAA22D,CAAgBH,GAEZ,OADA1uE,KAAK0uE,QAAUA,EACR1uE,IACX,CACA,SAAAmtE,CAAUxpE,GAEN,OADA3D,KAAK4uE,QAAUjrE,EACR3D,IACX,CACA,SAAAotE,CAAUvkE,GAEN,OADA7I,KAAKgwB,QAAUnnB,EACR7I,IACX,CACA,IAAAwW,CAAKgiB,EAAOo2C,GACR,MAEM73C,EAAMyB,EAAMjiB,eAClBvW,KAAK+W,cACLggB,EAAIthB,OACJshB,EAAI5gB,aALgB,GAMpB4gB,EAAIvf,QAAQxX,KAAKyX,UACjB,MAAMi5B,EAAgB3D,GAAcM,OAAOrtC,KAAKyX,UAC1C2Y,EAAYsgB,EAAcV,oBAAoBhwC,KAAK0uE,SACnDI,EAAQp+B,EAAcf,kBAAkB3vC,KAAK0uE,SAC7CxiB,EAAa4iB,EAAMrkE,OACnBskE,GAAY,EAAID,EAAMv/B,KACtB/kC,EAAQ4lB,EAAY,EACpB3lB,EAASyhD,EAAa,EAEtBrjD,EAAI2vB,EAAM0a,eAAe,KAAOlzC,KAAKgwB,QACrCrsB,EAAI3D,KAAK2D,EAAIirE,EAQnB,OAPI5uE,KAAK2uE,WACL53C,EAAIQ,YACJR,EAAI0pC,KAAK98D,EAAGkF,EAAI4B,EAASskE,EAAUvkE,EAAOC,GAC1CssB,EAAI5H,UAER4H,EAAIwc,SAASvzC,KAAK0uE,QAAS/qE,EArBX,EAqBwBkF,EArBxB,GAsBhBkuB,EAAI1gB,UACGrW,IACX,EAEJyuE,GAAa92D,UAAY,CACrBjJ,OAAQjB,EAAKkB,WACbL,KAAM,GACNC,OAAQlC,EAAW0iC,KACnBvgC,MAAOlC,EAAUsC,QCxDrB,MAAMogE,WAAmBpwB,GACrB,mBAAWl9C,GACP,OAAOG,EAASmtE,UACpB,CACA,WAAAvtE,CAAYwtE,EAAOtrE,EAAGqsB,GAClBzsB,QAEAvD,KAAKipC,eAAiB,CAAEiT,iBAAkB,IAC1Cl8C,KAAKivE,MAAQA,EACbjvE,KAAK20B,SAAW2pB,GAAsBlkB,MACtCp6B,KAAK2D,EAAIA,EACT3D,KAAK4uE,QAAU,GACf5uE,KAAKgwB,QAAUA,EACfhwB,KAAKkY,WACT,CACA,QAAAg3D,CAASD,GAEL,OADAjvE,KAAKivE,MAAQA,EACNjvE,IACX,CACA,SAAAmtE,CAAUxpE,GAEN,OADA3D,KAAK4uE,QAAUjrE,EACR3D,IACX,CACA,SAAAotE,CAAUvkE,GAEN,OADA7I,KAAKgwB,QAAUnnB,EACR7I,IACX,CACA,IAAAwW,CAAKgiB,EAAOo2C,GACR,MAAM73C,EAAMyB,EAAMjiB,eAClBvW,KAAK+W,cACL,MAAM8X,EAAU7uB,KAAKipC,eACfnZ,EAAQjB,EAAQqtB,iBAAmB7tB,EAAOsD,oBAC1CzgB,EAAOlR,KAAKivE,MAAM/9D,KAClB6d,EAAW/uB,KAAKivE,MAAMlgD,SACtBmsB,EAAOl7C,KAAKivE,MAAM/zB,MAAQ,EAC1Bi0B,EAAMnvE,KAAKivE,MAAME,IACvB,IAAIxrE,EAAI3D,KAAK2D,EAAI3D,KAAK4uE,QAAUA,EAChC,MAAM/lE,EAAI2vB,EAAM0a,eAAe,GAAKlzC,KAAKgwB,QACzC+G,EAAIthB,OACJ,MAAMi7B,EAAgB3D,GAAcM,OAAOrtC,KAAKyX,UAMhD,GALIvG,IACA6lB,EAAIvf,QAAQxX,KAAKyX,UACjBsf,EAAIwc,SAASriC,EAAMvN,EAAGkF,GACtBlF,GAAK+sC,EAAcV,oBAAoB9+B,IAEvC6d,GAAYogD,EAAK,CAEjB,MAAMC,EAAe/uE,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGhY,KAAKyX,UAAW,CAAElJ,OAAQ,SAAUC,MAAO,WAChGuoB,EAAIvf,QAAQ43D,GACZ,MAAMC,EAAoBtiC,GAAcM,OAAO+hC,GAC3Cl+D,IACAvN,GAAK0rE,EAAkBr/B,oBAAoB,KAC3CjZ,EAAIwc,SAAS,IAAK5vC,EAAGkF,GACrBlF,GAAK0rE,EAAkBr/B,oBAAoB,MAE/C,MAAM8L,EAAaztB,EAAOiD,cAAcvC,GAKxC,GAJAprB,GAAK,EAAImsB,EACTI,EAAM4G,YAAYC,EAAKpzB,EAAGkF,EAAGgmB,EAAQqtB,iBAAkBJ,EAAWrqB,WAClE9tB,GAAKusB,EAAMG,SAASyrB,EAAWrqB,UAAW5C,EAAQqtB,kBAE9CJ,EAAW5nB,KAAM,CACjB,IAAIo7C,EAAc,GACdxzB,EAAWjnB,aACXy6C,GAAe,GAAKxzB,EAAWjnB,WAAa,IAChDy6C,GAAex/C,EACf,MAAM4a,EAAQ7hC,EAAIymE,EAElB,GADAv4C,EAAIuqB,SAAS39C,EAAImsB,EAAO4a,EAAO5a,EAAOw/C,GAClCxzB,EAAWz4C,MAAQy4C,EAAW/mB,iBAAkB,CAChD,MAAMw6C,EAAcr/C,EAAM4G,YAAYC,EAAKpzB,EAAG+mC,EAAO7b,EAAQqtB,iBAAkBJ,EAAW/mB,iBAAkB,CACxGzzB,SAAU,oBAEdqC,GAAM4rE,EAAY/kE,MAAQ6jB,EAAOsD,oBAAuB49C,EAAYvgE,KAAKoC,UAAUI,UACvF,CACJ,CAEA,IAAK,IAAI/I,EAAI,EAAGA,EAAIyyC,EAAMzyC,IACtB9E,GAAK,EAAImsB,EACTiH,EAAIQ,YACJR,EAAI6f,IAAIjzC,EAAGkF,EAAI,EAAIinB,EAAO,EAAIA,EAAO,EAAa,EAAV7qB,KAAKC,IAAQ,GACrD6xB,EAAIa,OAERb,EAAIwc,SAAS,MAAQ47B,GAAOj+D,EAAO,IAAM,IAAKvN,EAAI,EAAImsB,EAAOjnB,EACjE,CAEA,OADAkuB,EAAI1gB,UACGrW,IACX,EAEJgvE,GAAWr3D,UAAY,CACnBjJ,OAAQjB,EAAKsE,MACbzD,KAAM,GACNC,OAAQlC,EAAW0iC,KACnBvgC,MAAOlC,EAAUsC,QV1FrB,SAAW61D,GACPA,EAAkBA,EAAwB,KAAI,GAAK,OACnDA,EAAkBA,EAA0B,OAAI,GAAK,SACrDA,EAAkBA,EAAyB,MAAI,GAAK,OACvD,CAJD,CAIGA,KAAsBA,GAAoB,CAAC,IAO9C,MAAM+K,WAAiB9sE,GACnB,mBAAWhB,GACP,OAAOG,EAAS2tE,QACpB,CAEA,iBAAWC,GACP,MAAO,CACHC,MAAO,CACHrsE,KAAM,SAEV4pB,GAAI,CACA5pB,KAAM,iBAEVwpB,QAAS,CACLxpB,KAAM,mBAEVssE,cAAe,CACXtsE,KAAM,sBAEVusE,cAAe,CACXvsE,KAAM,mBAEViF,EAAG,CACCjF,KAAM,gBAEVwsE,EAAG,CACCxsE,KAAM,gBAEVkwB,EAAG,CACClwB,KAAM,gBAEV+E,EAAG,CACC/E,KAAM,oBAEVysE,EAAG,CACCzsE,KAAM,YAEV0sE,KAAM,CACF1sE,KAAM,QAEV2sE,WAAY,CACR3sE,KAAM,oBAEV4sE,YAAa,CACT5sE,KAAM,mBAEV6sE,iBAAkB,CACd7sE,KAAM,WAEV8sE,eAAgB,CACZ9sE,KAAM,iBAEV+sE,OAAQ,CACJ/sE,KAAM,mBAEVgtE,KAAM,CACFhtE,KAAM,kBAEV0pB,KAAM,CACF1pB,KAAM,gBAEV2pB,cAAe,CACX3pB,KAAM,qBAGlB,CACA,WAAA5B,CAAY25C,GAaR,GAZA73C,MAAM63C,GACNp7C,KAAK+E,KAAOq2C,EAAWr2C,MAAQ,GAC/B/E,KAAKswE,YAAcl1B,EAAWk1B,YAC9BtwE,KAAKuwE,UAAYn1B,EAAWm1B,UAC5BvwE,KAAKwX,QAAQ4jC,EAAWpsC,MACxBhP,KAAKgE,KAAOo3C,EAAWp3C,MAAQ,EAC/BhE,KAAKwwE,OAASp1B,EAAWo1B,SAAU,EACnCxwE,KAAKu3C,aAAe6D,EAAW7D,eAAgB,EAC/Cv3C,KAAKywE,cAAgBhM,GAAkBjqC,KAInC4gB,EAAWrrB,MAAO,CAClB,MAAM2gD,EAASlB,GAASC,OAAOr0B,EAAWrrB,OAC1C,IAAK2gD,EACD,MAAM,IAAIvtE,EAAa,uBAAyBi4C,EAAWrrB,OAC/D/vB,KAAK+vB,MAAQ,IAAIG,EAAMwgD,EAAOrtE,KAAMgrB,EAAOsD,oBAAqB,CAAErwB,SAAU,aAC5EtB,KAAK66B,SAAS76B,KAAK+vB,MAAM1e,aAAa7G,MAC1C,MAEIxK,KAAK+vB,WAAQnsB,CAErB,CAEA,gBAAA2uC,CAAiBH,GAEb,OADApyC,KAAKywE,cAAgBr+B,EACdpyC,IACX,CAEA,OAAAkuD,CAAQlqD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEA,OAAAiuD,GACI,OAAOjuD,KAAKgE,IAChB,CAEA,OAAA0+C,GACI,OAAO1iD,KAAK+E,IAChB,CAEA,SAAA00C,GACI,GAAIz5C,KAAK05C,aACL,OACJ,MAAM1d,EAAch8B,KAAKg4C,iBAAiB,0CAC1C,GAAIh4C,KAAKwwE,OACLxwE,KAAK66B,SAAS,QAGd,GAAI76B,KAAK+vB,WAGJ,CACD,MAAMgH,EAAM/2B,KAAKuW,eACjBwgB,EAAIvf,QAAQxX,KAAKyX,UACjBzX,KAAK66B,SAAS9D,EAAI2sB,YAAY1jD,KAAK+E,MAAMyF,MAC7C,CAEAxK,KAAKywE,gBAAkBhM,GAAkBvqC,OACzCl6B,KAAKo6C,oBAAsBp6C,KAAKwK,MAAQ,EAEnCxK,KAAKywE,gBAAkBhM,GAAkB/pC,QAC9C16B,KAAKo6C,oBAAsBp6C,KAAKwK,OAGpCxK,KAAK06C,qBAAuB1e,EAAY3qB,aAAaysC,QAAU,EAC/D99C,KAAK05C,cAAe,CACxB,CAKA,IAAAljC,GACI,MAAMugB,EAAM/2B,KAAKuW,eACXiiB,EAAQx4B,KAAKu5B,aACbyC,EAAch8B,KAAKg4C,iBAAiB,qCAC1Ch4C,KAAK+W,cAEL,IAAIpT,EAAI3D,KAAKi6C,eAAiBje,EAAY3qB,aAAaysC,QAAU,EAEjE,MAAMtzC,EAAQxK,KAAKqwB,WAOnB,IAAIxnB,EACJ,GAPI7I,KAAKywE,gBAAkBhM,GAAkBvqC,OACzCv2B,GAAK6G,EAAQ,EAERxK,KAAKywE,gBAAkBhM,GAAkB/pC,QAC9C/2B,GAAK6G,GAGLxK,KAAK+vB,MACLlnB,EAAI2vB,EAAMkM,YAAY1kC,KAAKgE,MAAQ,GACnChE,KAAK+vB,MAAMqJ,OAAOrC,EAAKpzB,EAAGkF,OAEzB,CACDA,EAAI2vB,EAAMkM,YAAY1kC,KAAKgE,MAAQ,GACnChE,KAAKuV,WAAWwhB,GAChBA,EAAIvf,QAAQxX,KAAKyX,UACjBsf,EAAIwc,SAASvzC,KAAK+E,KAAMpB,EAAGkF,GAC3B,MAAM4B,EAASssB,EAAI2sB,YAAY1jD,KAAK+E,MAAM0F,QAGpC,OAAEiE,EAAM,KAAEJ,EAAI,OAAEC,EAAM,MAAEC,GAAUxO,KAAKyX,SAEvCoyC,EAAkBp8C,EAAKiC,UAAUpB,EAAM,SACzCtO,KAAKswE,cACLv5C,EAAIvf,QAAQ9I,EAAQm7C,EAAiBt7C,EAAQC,GAC7CuoB,EAAIwc,SAASvzC,KAAKswE,YAAa3sE,EAAI3D,KAAKwK,MAAQ,EAAG3B,EAAI4B,EAAS,MAEhEzK,KAAKuwE,YACLx5C,EAAIvf,QAAQ9I,EAAQm7C,EAAiBt7C,EAAQC,GAC7CuoB,EAAIwc,SAASvzC,KAAKuwE,UAAW5sE,EAAI3D,KAAKwK,MAAQ,EAAG3B,EAAI4B,EAAS,IAAM,IAExEzK,KAAKoW,aAAa2gB,EACtB,CACJ,EAEJy4C,GAAS73D,UAAY,CACjBjJ,OAAQjB,EAAKkB,WACbL,KAAM,GACNC,OAAQlC,EAAWuC,OACnBJ,MAAOlC,EAAUsC,QAErB4gE,GAASmB,cAAgBlM,GW1MzB,MAAMmM,WAAkBhyB,GACpB,mBAAWl9C,GACP,OAAOG,EAAS+uE,SACpB,CACA,WAAAnvE,CAAYsD,EAAM4vB,EAAU9F,EAAU,CAAC,GACnCtrB,QACAvD,KAAK66B,SAAS,IACd76B,KAAK+E,KAAOA,EACZ/E,KAAK20B,SAAWA,EAChB30B,KAAK6uB,QAAUxuB,OAAO2X,OAAO,CAAE42D,QAAS,EAAG5+C,QAAS,EAAGygD,cAAejB,GAASmB,cAAcz2C,QAAUrL,GACvG7uB,KAAKkY,WACT,CACA,YAAA24D,CAAa9rE,GAET,OADA/E,KAAK+E,KAAOA,EACL/E,IACX,CACA,SAAAmtE,CAAUxpE,GAEN,OADA3D,KAAK4uE,QAAUjrE,EACR3D,IACX,CACA,SAAAotE,CAAUvkE,GAEN,OADA7I,KAAKgwB,QAAUnnB,EACR7I,IACX,CACA,OAAA8wE,CAAQ/rE,GAEJ,OADA/E,KAAK+E,KAAOA,EACL/E,IACX,CACA,IAAAwW,CAAKgiB,GACD,MAAMzB,EAAMyB,EAAMjiB,eAClBvW,KAAK+W,cACLggB,EAAIthB,OACJshB,EAAI5gB,aAAa,GACjB4gB,EAAIvf,QAAQxX,KAAKyX,UACjB,MAAMg7B,EAAa1b,EAAI2sB,YAAY,GAAK1jD,KAAK+E,MAAMyF,MACnD,IAAI7G,EACAkF,EACJ,OAAQ7I,KAAK20B,UACT,KAAK2pB,GAAsB9jB,KAC3B,KAAK8jB,GAAsB5jB,MACvB7xB,GAAK2vB,EAAMkM,YAAY,GAAKlM,EAAMu4C,kBAAoB,EAAI/wE,KAAK6uB,QAAQmB,QAEnErsB,EADA3D,KAAK20B,WAAa2pB,GAAsB9jB,KACpChC,EAAMxvB,OAASypC,EAAa,GAAKzyC,KAAK6uB,QAAQ+/C,QAG9Cp2C,EAAMxvB,OAASwvB,EAAMnI,WAAa,GAAKrwB,KAAK6uB,QAAQ+/C,QAE5D,MACJ,KAAKtwB,GAAsBlkB,MAC3B,KAAKkkB,GAAsBhkB,MACvB32B,EAAI60B,EAAMxvB,OAAShJ,KAAK6uB,QAAQ+/C,QAC5B5uE,KAAK6uB,QAAQ4hD,gBAAkBhM,GAAkBvqC,OACjDv2B,GAAK60B,EAAMnI,WAAa,EAAIoiB,EAAa,EAEpCzyC,KAAK6uB,QAAQ4hD,gBAAkBhM,GAAkB/pC,QACtD/2B,GAAK60B,EAAMnI,WAAaoiB,GAGxB5pC,EADA7I,KAAK20B,WAAa2pB,GAAsBlkB,MACpC5B,EAAM0a,eAAe,GAAKlzC,KAAK6uB,QAAQmB,QAGvCwI,EAAM2a,kBAAkB,GAAKnzC,KAAK6uB,QAAQmB,QAElD,MACJ,QACI,MAAM,IAAI7sB,EAAa,kBAAmB,uCAIlD,OAFA4zB,EAAIwc,SAAS,GAAKvzC,KAAK+E,KAAMpB,EAAGkF,EAAI,GACpCkuB,EAAI1gB,UACGrW,IACX,EAEJ4wE,GAAUj5D,UAAY,CAClBjJ,OAAQjB,EAAKsE,MACbzD,KAAM,GACNC,OAAQlC,EAAWuC,OACnBJ,MAAOlC,EAAUsC,QV7ErB,SAAW81D,GACPA,EAAUA,EAAgB,KAAI,GAAK,OACnCA,EAAUA,EAAiB,MAAI,GAAK,QACpCA,EAAUA,EAAe,IAAI,GAAK,MAClCA,EAAUA,EAAe,IAAI,GAAK,MAClCA,EAAUA,EAAqB,UAAI,GAAK,WAC3C,CAND,CAMGA,KAAcA,GAAY,CAAC,IAC9B,MAAMsM,WAAcpyB,GAChB,mBAAWl9C,GACP,OAAOG,EAASmvE,KACpB,CACA,eAAWx+D,GACP,OAAOkyD,EACX,CACA,WAAAjjE,CAAY+Q,EAAMu6C,EAAQppD,EAAGgyB,GACzBpyB,QACAvD,KAAKixE,MAAQz+D,EACbxS,KAAK2D,EAAIA,EACT3D,KAAK21B,QAAUA,EACf31B,KAAK+sD,OAASA,EACd/sD,KAAKkY,WACT,CACA,SAAAk1D,CAAUvkE,GAEN,OADA7I,KAAK21B,QAAU9sB,EACR7I,IACX,CACA,IAAAwW,CAAKgiB,EAAO70B,GACR,MAAMozB,EAAMyB,EAAMjiB,eAClBvW,KAAK+W,cACL,IAAIvM,EAAQguB,EAAMnI,WAAa1sB,EAC/B,MAAMutE,EAAQ14C,EAAM0a,eAAe1a,EAAM6Y,eAAiBrxC,KAAK21B,QACzDw7C,EAAc,IAAM34C,EAAMiM,yBAChC,OAAQzkC,KAAKixE,OACT,KAAKvM,GAAU9jB,MACX7pB,EAAIuqB,SAASthD,KAAK2D,EAAIA,EAAGutE,EAAO,EAAGC,GACnC,MACJ,KAAKzM,GAAUhlB,IACXl1C,GAAS,EACTusB,EAAIuqB,SAASthD,KAAK2D,EAAIA,EAAI6G,EAAO0mE,EAAO,EAAGC,GAC3C,MACJ,KAAKzM,GAAU0M,UACX5mE,GAAS,EACTusB,EAAIuqB,SAASthD,KAAK2D,EAAIA,EAAGutE,EAAO,EAAGC,GACnCp6C,EAAIuqB,SAASthD,KAAK2D,EAAIA,EAAI6G,EAAO0mE,EAAO,EAAGC,GAanD,OAPInxE,KAAKixE,QAAUvM,GAAU9jB,OAAS5gD,KAAKixE,QAAUvM,GAAU0M,YAC3Dr6C,EAAIthB,OACJshB,EAAIvf,QAAQxX,KAAKyX,UACjBsf,EAAIwc,SAASvzC,KAAK+sD,OAAQ/sD,KAAK2D,EAAIA,EAAI,EAAGutE,EAAQ,IAClDn6C,EAAI1gB,WAER0gB,EAAIuqB,SAASthD,KAAK2D,EAAIA,EAAGutE,EAAO1mE,EAAO,GAChCxK,IACX,EAEJgxE,GAAMr5D,UAAY,CACdjJ,OAAQjB,EAAKkB,WACbL,KAAM,EACNC,OAAQlC,EAAW0iC,KACnBvgC,MAAOlC,EAAUsC,QW9Dd,MAAMyiE,WAA2BnhD,EACpC,WAAAzuB,CAAY6vE,EAAeC,EAAWC,EAAWnuE,EAAMgyB,EAAOxG,GAC1D,IAAIhhB,EACJtK,MAAMF,EAAMgyB,EAAOxG,GACnB7uB,KAAKsxE,cAAgBA,EACrBtxE,KAAKg4B,UAAY,GACjBh4B,KAAKi4B,UAAY,GACjB,IAAIw5C,EAAW,EACXhnE,EAAS,EACb,IAAK,IAAIhC,EAAI,EAAGA,EAAI8oE,EAAU1rE,SAAU4C,EAAG,CACvC,IAAIipE,EAAcH,EAAU9oE,GAC5B,OAAQ8oE,EAAU9oE,IACd,IAAK,IACDipE,EAAc,QACd,MACJ,IAAK,IACDA,EAAcF,EAAU3rE,OAAS,EAAI,YAAc,OACnD,MACJ,IAAK,IACD6rE,EAAcF,EAAU3rE,OAAS,EAAI,kBAAoB,aACzD,MACJ,IAAK,IACD6rE,EAAcF,EAAU3rE,OAAS,EAAI,mBAAqB,cAGlE,MAAM8rE,EAAW,IAAIzhD,EAAM,UAAYwhD,EAAa1xE,KAAKsxE,cAAcj8C,OACvEr1B,KAAKg4B,UAAU9iB,KAAKy8D,GACpBF,GAAmD,QAAtC5jE,EAAK8jE,EAAStgE,aAAa7G,aAA0B,IAAPqD,EAAgBA,EAAK,EAChFpD,EAASxF,KAAK6E,IAAIW,EAAQknE,EAAStgE,aAAa5G,OACpD,CACA,IAAImnE,EAAW,EACf,IAAK,IAAInpE,EAAI,EAAGA,EAAI+oE,EAAU3rE,SAAU4C,EAAG,CACvC,IAAIipE,EAAcF,EAAU/oE,GAC5B,OAAQ+oE,EAAU/oE,IACd,IAAK,IACDipE,EAAc,YACd,MACJ,IAAK,IACDA,EAAc,kBACd,MACJ,IAAK,IACDA,EAAc,mBAGtB,MAAMG,EAAW,IAAI3hD,EAAM,UAAYwhD,EAAa1xE,KAAKsxE,cAAcj8C,OACvEr1B,KAAKi4B,UAAU/iB,KAAK28D,GACpBD,GAAYluE,EAAQmuE,EAASxgE,aAAa7G,OAC1CC,EAASxF,KAAK6E,IAAIW,EAAQonE,EAASxgE,aAAa5G,OACpD,CAGAzK,KAAK8xE,UAAYrnE,EAAS,GAAK,EAAI,EACnCzK,KAAKwK,MAAQvF,KAAK6E,IAAI2nE,EAAUG,GAChC5xE,KAAKwgD,KAAOxgD,KAAKqR,aAAaqlB,MAC9B12B,KAAK+xE,WAAa/xE,KAAKwK,MAAQinE,GAAY,EAC3CzxE,KAAKgyE,WAAahyE,KAAKwK,MAAQonE,GAAY,EAC3C5xE,KAAKo4B,OACT,CACA,UAAA/mB,GACI,MAAO,CACHqlB,MAAO12B,KAAKwgD,KACZ7pB,MAAO32B,KAAKwgD,KAAOxgD,KAAKwK,MACxBA,MAAOxK,KAAKwK,MAEpB,CACA,aAAAgvB,CAAc71B,GACV,MAAM60B,EAAQx4B,KAAKu5B,aACbxC,EAAM/2B,KAAKuW,eACjB,IAAI07D,EAAUtuE,EAAI3D,KAAK+xE,UACnBlpE,EAAI,EAEJA,EADA7I,KAAKi4B,UAAUpyB,OAAS,EACpB2yB,EAAMkM,YAAY1kC,KAAKsxE,cAAcY,QAAUlyE,KAAK8xE,YAEnDt5C,EAAMkM,YAAY1kC,KAAKsxE,cAAcY,SAAW15C,EAAMkM,YAAY1kC,KAAKsxE,cAAca,aAAe,EAC7G,IAAK,IAAI1pE,EAAI,EAAGA,EAAIzI,KAAKg4B,UAAUnyB,SAAU4C,EAAG,CAC5C,MAAMsnB,EAAQ/vB,KAAKg4B,UAAUvvB,GAC7BynB,EAAMmH,cAAcN,EAAKhH,EAAM1e,aAAaokB,QAASz1B,KAAK8vB,MAAOmiD,EAAUjyE,KAAK01B,QAAS7sB,GACzFopE,GAAWvuE,EAAQqsB,EAAM1e,aAAa7G,MAC1C,CACAynE,EAAUtuE,EAAI3D,KAAKgyE,UACnBnpE,EAAI2vB,EAAMkM,YAAY1kC,KAAKsxE,cAAca,WAAanyE,KAAK8xE,WAC3D,IAAK,IAAIrpE,EAAI,EAAGA,EAAIzI,KAAKi4B,UAAUpyB,SAAU4C,EAAG,CAC5C,MAAMsnB,EAAQ/vB,KAAKi4B,UAAUxvB,GAC7BzI,KAAKsxE,cAAczyB,iBAAiB9uB,EAAOyI,EAAOx4B,KAAKsxE,cAAcrjB,WACrE/9B,EAAMmH,cAAcN,EAAKhH,EAAM1e,aAAaokB,QAASz1B,KAAK8vB,MAAOmiD,EAAUliD,EAAM1e,aAAaqkB,QAAS7sB,GACvGopE,GAAWvuE,EAAQqsB,EAAM1e,aAAa7G,MAC1C,CACJ,ECjEG,MAAM4nE,WAAsBxzB,GAC/B,mBAAWl9C,GACP,OAAOG,EAASuwE,aACpB,CACA,iBAAW1gE,GACP,MAAO,CACHiH,EAAG,CACCtV,KAAM,gBACNW,KAAM,GAEV,KAAM,CACFX,KAAM,mBACNW,KAAM,GAGlB,CACA,WAAAvC,CAAY4wE,EAAW,MAAOC,EAAgB,GAAIC,GAAgB,GAC9DhvE,QACAvD,KAAKqyE,SAAW,MAChBryE,KAAKgE,KAAO,EACZhE,KAAKwyE,YAAa,EAClBxyE,KAAKuyE,cAAgBA,EACrB,MAAMx8B,EAAUu8B,EAEV1uC,EAAYvV,EAAOC,mBACzBtuB,KAAKq1B,MAAQuO,EAAUjyB,aAAa,iBAAmB0c,EAAOsD,oBAC9D,MAAM8gD,EAAgB7uC,EAAUjyB,aAAa,mBAAoB,GACjE3R,KAAKkyE,QAAU,EAAIO,EACnBzyE,KAAKmyE,WAAa,EAAIM,EACtBzyE,KAAK07B,YAAY4iB,GAAsBsC,OACvC5gD,KAAK0yE,WAAWL,GAChBryE,KAAKg/C,WAAWjJ,EACpB,CAMA,aAAA48B,CAAcN,GACV,IAAIxkE,EAAI8F,EACR,GAAiB,MAAb0+D,GAAiC,OAAbA,EAAmB,CACvC,MAAM,KAAEruE,EAAI,KAAEX,GAAS+uE,GAAc1gE,OAAO2gE,GAC5C,MAAO,CACHruE,OACA4U,KAAK,EACLmX,MAAO,IAAIG,EAAM7sB,EAAMgrB,EAAOsD,qBAEtC,CACI3xB,KAAKuyE,eAjEY,CAACF,IAC1B,MAAMO,EAAUP,EAAS3pE,MAAM,KAC/B,GAAuB,IAAnBkqE,EAAQ/sE,QAA+B,MAAf+sE,EAAQ,IAA6B,MAAfA,EAAQ,GACtD,MAAM,IAAIzvE,EAAa,mBAAoB,sBAAsBkvE,sDAErEO,EAAQv9D,SAAS03C,IAEb,GAAoC,GAAhC,gBAAgB8lB,KAAK9lB,GACrB,MAAM,IAAI5pD,EAAa,mBAAoB,sBAAsBkvE,oCACrE,GACF,EAwDMS,CAAqBT,GAEzB,MAAMj8C,EAAQi8C,EAAS3pE,MAAM,KAC7B,MAAO,CACH1E,KAAM,EACN4U,KAAK,EACLmX,MAAO/vB,KAAK+yE,uBAA2C,QAAnBllE,EAAKuoB,EAAM,UAAuB,IAAPvoB,EAAgBA,EAAK,GAAwB,QAAnB8F,EAAKyiB,EAAM,UAAuB,IAAPziB,EAAgBA,EAAK,IAEjJ,CAKA,sBAAAo/D,CAAuBxB,EAAWC,GAE9B,OAAO,IAAIH,GAAmBrxE,KAAMuxE,EAAWC,EAAW,WAAYxxE,KAAKq1B,MAC/E,CAKA,OAAA8Y,GACI,MAAM,KAAEnqC,EAAI,WAAEwuE,EAAU,MAAEziD,GAAU/vB,KACpC,MAAO,CAAEgE,OAAM4U,IAAK45D,EAAYziD,QACpC,CAMA,UAAA2iD,CAAWL,GACPryE,KAAKqyE,SAAWA,EAChB,MAAM99D,EAAOvU,KAAK2yE,cAAcN,GAIhC,OAHAryE,KAAKgzE,SAASz+D,EAAKwb,OACnB/vB,KAAKwyE,WAAaj+D,EAAKqE,IACvB5Y,KAAKgE,KAAOuQ,EAAKvQ,KACVhE,IACX,CAIA,WAAAizE,GACI,OAAOjzE,KAAKqyE,QAChB,CAKA,OAAApkB,GACI,OAAOjuD,KAAKgE,IAChB,CAMA,OAAAkqD,CAAQlqD,GACJhE,KAAKgE,KAAOA,CAChB,CAKA,QAAA64C,GACI,OAAO78C,KAAK+vB,KAChB,CAKA,QAAAijD,CAASjjD,GACL/vB,KAAK+vB,MAAQA,EACb/vB,KAAK66B,SAASn3B,EAAQ1D,KAAK+vB,MAAM1e,aAAa7G,OAClD,CAKA,YAAA0oE,GACI,OAAOlzE,KAAKwyE,UAChB,CAIA,YAAAW,CAAaC,GACTpzE,KAAKwyE,WAAaY,CACtB,CAKA,IAAA58D,GACI,MAAMgiB,EAAQx4B,KAAKu5B,aACbxC,EAAMyB,EAAMjiB,eAClBvW,KAAK+W,cACL/W,KAAKuV,WAAWwhB,GAChBA,EAAI6V,UAAU,gBAAiB5sC,KAAKuT,aAAa,OACjDvT,KAAK+vB,MAAMwI,SAASC,GACpBx4B,KAAK+vB,MAAMxY,WAAWwf,GACtB/2B,KAAK6+C,iBAAiB7+C,KAAK+vB,MAAOyI,EAAOx4B,KAAKgE,MAC9ChE,KAAK+vB,MAAMyJ,cAAcx5B,KAAK2D,GAC9BozB,EAAI+V,aACJ9sC,KAAKoW,aAAa2gB,EACtB,EChKJ,MAAMs8C,GAA2B,CAC7B,CAACnxE,GAAQR,UAAW,EACpB,CAACopE,GAAKppE,UAAW,EACjB,CAACypE,GAAazpE,UAAW,EACzB,CAAC0wE,GAAc1wE,UAAW,GAExB4xE,GAA2B,CAC7B,CAAClB,GAAc1wE,UAAW,EAC1B,CAACypE,GAAazpE,UAAW,EACzB,CAACQ,GAAQR,UAAW,EACpB,CAACopE,GAAKppE,UAAW,GAErB,MAAM6xE,WAAc9+D,EAChB,mBAAW/S,GACP,OAAOG,EAAS0xE,KACpB,CAGA,yBAAWC,GACP,MAAM5vC,EAAYvV,EAAOC,mBACzB,OAAOsV,EAAUjyB,aAAa,iBAAmBiyB,EAAUjyB,aAAa,sBAC5E,CAEA,uBAAWs1D,GAEP,OADkB54C,EAAOC,mBACR3c,aAAa,sBAClC,CACA,WAAAlQ,CAAYkC,EAAGkF,EAAG2B,EAAOqkB,GACrBtrB,QAEAvD,KAAKyK,OAAS,EACdzK,KAAK2D,EAAIA,EACT3D,KAAK6I,EAAIA,EACT7I,KAAKwK,MAAQA,EACbxK,KAAK2qE,WAAY,EACjB3qE,KAAKiyE,QAAUtuE,EAAI,EACnB3D,KAAKyzE,MAAQ9vE,EAAI6G,EACjBxK,KAAKm3C,UAAY,GACjBn3C,KAAK0zE,QAAU,EACf1zE,KAAKyuB,KAAO,SACZzuB,KAAK2zE,aAAU/vE,EACf5D,KAAKkY,YACLlY,KAAK6uB,QAAUxuB,OAAO2X,OAAO,CAAE47D,mBAAoB,GAAIC,UAAW,EAAGC,WAAY,UAAWC,UAAU,EAAMC,WAAW,EAAMC,yBAA0B5lD,EAAO8D,oBAAqB+hD,qBAAsB,EAAGC,qBAAsB,EAAGC,kBAAmB,EAAGC,qBAAsB,EAAGC,YAAa,IAAMzlD,GACvS7uB,KAAKu0E,OAAS,CAAE5wE,EAAG3D,KAAK2D,EAAGkF,EAAG7I,KAAK6I,EAAGC,EAAG9I,KAAKwK,MAAOzB,EAAG,GACxD/I,KAAKw0E,uBAAyB,CAAEx+D,YAAa,OAAQE,UAAW,KAChElW,KAAKy0E,aAELz0E,KAAK+oC,YAAY,IAAI7mC,GAAQlC,KAAK6uB,QAAQklD,SAAWx1B,GAAYe,OAASf,GAAY2B,OAEtFlgD,KAAK00E,eAAe,IAAIxyE,GAAQlC,KAAK6uB,QAAQmlD,UAAYz1B,GAAYe,OAASf,GAAY2B,MAC9F,CAEA,yBAAAy0B,CAA0BnmE,GACtBxO,KAAKw0E,uBAAyBhmE,CAClC,CAEA,yBAAAynD,GACI,OAAO51D,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGhY,KAAKsV,YAAatV,KAAKw0E,uBAClE,CACA,KAAA78B,CAAM9E,GACF,OAAO7yC,KAAK6uB,QAAQolD,yBAA2BphC,CACnD,CACA,UAAA4hC,GACIz0E,KAAK6uB,QAAQylD,YAAc,GAC3B,IAAK,IAAI7rE,EAAI,EAAGA,EAAIzI,KAAK6uB,QAAQglD,UAAWprE,IACxCzI,KAAK6uB,QAAQylD,YAAYp/D,KAAK,CAAE0/D,SAAS,IAE7C50E,KAAKyK,QAAUzK,KAAK6uB,QAAQglD,UAAY7zE,KAAK6uB,QAAQqlD,sBAAwBl0E,KAAK6uB,QAAQolD,yBAC1Fj0E,KAAK6uB,QAAQwlD,qBAAuBr0E,KAAK6uB,QAAQglD,SACrD,CACA,aAAAgB,CAAclxE,GAIV,OAHK3D,KAAK2qE,WACN3qE,KAAK0jC,SACT1jC,KAAKiyE,QAAUtuE,EACR3D,IACX,CACA,aAAA+9C,GAGI,OAFK/9C,KAAK2qE,WACN3qE,KAAK0jC,SACF1jC,KAAKiyE,OAChB,CACA,WAAA6C,GAGI,OAFK90E,KAAK2qE,WACN3qE,KAAK0jC,SACF1jC,KAAKyzE,KAChB,CACA,YAAA7a,GACI,OAAO54D,KAAKiyE,OAChB,CACA,UAAApZ,GACI,OAAO74D,KAAKyzE,KAChB,CACA,IAAAzqE,GACI,OAAOhJ,KAAK2D,CAChB,CACA,WAAA0tC,GACI,OAAOrxC,KAAK6uB,QAAQglD,SACxB,CACA,WAAAkB,CAAYnwE,GAGR,OAFA5E,KAAK6uB,QAAQglD,UAAYjvE,EACzB5E,KAAKy0E,aACEz0E,IACX,CACA,IAAAqJ,CAAKR,GAED,OADA7I,KAAK6I,EAAIA,EACF7I,IACX,CACA,IAAAiJ,GACI,OAAOjJ,KAAK6I,CAChB,CACA,cAAAuqC,GACI,OAAOpzC,KAAK0kC,YAAY,GAAKrW,EAAO2D,qBAAuB,CAC/D,CACA,oBAAAqvB,GACI,OAAOrhD,KAAK0kC,YAAY1kC,KAAKqxC,cAAgB,GAAKhjB,EAAO2D,qBAAuB,CACpF,CACA,IAAA5oB,CAAKzF,GACD,MAAMmC,EAAQnC,EAAI3D,KAAK2D,EACvB3D,KAAK2qE,WAAY,EACjB3qE,KAAK2D,EAAIA,EACT3D,KAAKiyE,SAAWnsE,EAChB9F,KAAKyzE,OAAS3tE,EACd,IAAK,IAAI2C,EAAI,EAAGA,EAAIzI,KAAKm3C,UAAUtxC,OAAQ4C,IAAK,CAC5C,MAAMusE,EAAMh1E,KAAKm3C,UAAU1uC,GAC3BusE,EAAI5rE,KAAK4rE,EAAIhsE,OAASlD,EAC1B,CACA,OAAO9F,IACX,CACA,QAAA66B,CAASrwB,GAML,OALAxK,KAAK2qE,WAAY,EACjB3qE,KAAKwK,MAAQA,EACbxK,KAAKyzE,MAAQzzE,KAAK2D,EAAI6G,EAGfxK,IACX,CACA,QAAAqwB,GACI,OAAOrwB,KAAKwK,KAChB,CACA,QAAA8K,GACI,OAAOjV,OAAO2X,OAAO,CAAElC,UAAW9V,KAAK6uB,QAAQilD,WAAY99D,YAAahW,KAAK6uB,QAAQilD,WAAY59D,UAAWmY,EAAO2D,sBAAwBzuB,MAAM+R,WACrJ,CAIA,UAAA2/D,CAAWvB,GAEP,OADA1zE,KAAK0zE,QAAUA,EACR1zE,IACX,CAIA,UAAAk1E,GACI,OAAOl1E,KAAK0zE,OAChB,CAOA,iBAAAyB,CAAkBniE,EAAQ,GACtB,GAAqB,iBAAVA,EACP,MAAM,IAAI7P,EAAa,eAAgB,0BAI3C,GAFKnD,KAAK2qE,WACN3qE,KAAK0jC,SACqD,IAA1D1jC,KAAK6oC,aAAayV,GAAsBsC,OAAO/6C,OAC/C,OAAO,EAGX,GAAI7F,KAAKm3C,UAAUnkC,GAAOyoB,gBAAkB6iB,GAAsB5jB,MAC9D,OAAO,EAEX,IAAIu3C,EAAUjyE,KAAKiyE,QAAUjyE,KAAK2D,EAClC,MAAMyxE,EAAap1E,KAAKm3C,UAAU,GAIlC,OAHIi+B,EAAWt0B,YAAcvC,GAAYqB,cAAgBqyB,EAAUmD,EAAW/kD,aAC1E4hD,GAAWmD,EAAW/kD,YAEnB4hD,CACX,CAEA,iBAAAoD,CAAkB7iE,EAAM0mB,EAAS,GAE7B,OADAl5B,KAAKm3C,UAAUjiC,KAAK,IAAI+3D,GAAWz6D,EAAMxS,KAAK2D,EAAGu1B,IAC1Cl5B,IACX,CAEA,YAAAs1E,CAAa9iE,EAAM+iE,EAAU1sE,GAEzB,OADA7I,KAAKm3C,UAAUjiC,KAAK,IAAI87D,GAAMx+D,EAAM+iE,EAAUv1E,KAAK2D,EAAGkF,IAC/C7I,IACX,CAEA,UAAAw1E,CAAW9G,EAAS7lE,EAAG80D,EAAU,EAAGhwD,EAAUghE,GAAW,GACrD,MAAM8G,EAAe,IAAIhH,GAAaC,EAAS1uE,KAAK2D,EAAIg6D,EAAS90D,EAAG8lE,GAIpE,OAHIhhE,GACA8nE,EAAat9D,YAAYxK,GAC7B3N,KAAKm3C,UAAUjiC,KAAKugE,GACbz1E,IACX,CAEA,QAAAkvE,CAASD,EAAOpmE,GAEZ,OADA7I,KAAKm3C,UAAUjiC,KAAK,IAAI85D,GAAWC,EAAOjvE,KAAK2D,EAAGkF,IAC3C7I,IACX,CAEA,OAAA8wE,CAAQ/rE,EAAM4vB,EAAU9F,EAAU,CAAC,GAE/B,OADA7uB,KAAKm3C,UAAUjiC,KAAK,IAAI07D,GAAU7rE,EAAM4vB,EAAU9F,IAC3C7uB,IACX,CACA,SAAAwrC,GACI,OAAOxrC,KAAKyK,MAChB,CACA,sBAAAg6B,GACI,OAAOzkC,KAAK6uB,QAAQolD,wBACxB,CACA,cAAA58D,GACI,OAAO,IAAI1O,EAAY3I,KAAK2D,EAAG3D,KAAK6I,EAAG7I,KAAKwK,MAAOxK,KAAKo2C,aAAep2C,KAAK6I,EAChF,CACA,UAAAutC,GACI,MAAMvnB,EAAU7uB,KAAK6uB,QACfgkB,EAAUhkB,EAAQolD,yBAExB,OADqBj0E,KAAK0kC,YAAY7V,EAAQglD,WAAahlD,EAAQslD,qBAAuBthC,CAE9F,CACA,cAAAk+B,GACI,OAAO/wE,KAAK0kC,YAAY1kC,KAAK6uB,QAAQglD,UACzC,CAGA,WAAAnvC,CAAY1gC,GACR,MAAM6qB,EAAU7uB,KAAK6uB,QACfgkB,EAAUhkB,EAAQolD,yBAClBlF,EAAWlgD,EAAQqlD,qBAEzB,OADUl0E,KAAK6I,EAAI7E,EAAO6uC,EAAUk8B,EAAWl8B,CAEnD,CACA,WAAA6iC,CAAY7sE,GAGR,MAAMgmB,EAAU7uB,KAAK6uB,QACfgkB,EAAUhkB,EAAQolD,yBAClBlF,EAAWlgD,EAAQqlD,qBACzB,OAAQrrE,EAAI7I,KAAK6I,GAAKgqC,EAAUk8B,CACpC,CACA,cAAA77B,CAAelvC,EAAO,GAClB,OAAOhE,KAAK0kC,aAAa1gC,EAAOhE,KAAK6uB,QAAQulD,kBACjD,CACA,iBAAAjhC,CAAkBnvC,EAAO,GACrB,OAAOhE,KAAK0kC,YAAY1kC,KAAK6uB,QAAQwlD,qBAAuBrwE,EAChE,CACA,WAAAwqD,CAAYxqD,GACR,MAAM6qB,EAAU7uB,KAAK6uB,QACfgkB,EAAUhkB,EAAQolD,yBAClBlF,EAAWlgD,EAAQqlD,qBACzB,OAAOl0E,KAAK6I,EAAIkmE,EAAWl8B,EAAU,EAAIA,EAAU7uC,EAAO6uC,CAC9D,CACA,aAAApZ,GACI,OAAOz5B,KAAK0kC,YAAY,EAC5B,CAGA,WAAAqE,CAAYD,EAAUnU,GAOlB,YANiB/wB,IAAb+wB,GACAmU,EAASpN,YAAY/G,GAEzBmU,EAASvQ,SAASv4B,MAClBA,KAAK2qE,WAAY,EACjB3qE,KAAKm3C,UAAUjiC,KAAK4zB,GACb9oC,IACX,CACA,cAAA00E,CAAe5rC,GAEX,OADA9oC,KAAK+oC,YAAYD,EAAUwV,GAAsBoB,KAC1C1/C,IACX,CAEA,aAAA21E,CAAcnjE,GAEV,MAAM,OAAE8sC,EAAM,aAAEM,EAAY,KAAEM,GAAS3B,GAKvC,OAJI/rC,IAAS8sC,GAAU9sC,IAASotC,GAAgBptC,IAAS0tC,IACrDlgD,KAAKm3C,UAAU,GAAG0J,QAAQruC,GAC1BxS,KAAK2qE,WAAY,GAEd3qE,IACX,CACA,aAAA41E,CAAcpjE,GAMV,OAJIA,IAAS+rC,GAAYqB,eACrB5/C,KAAKm3C,UAAU,GAAG0J,QAAQruC,GAC1BxS,KAAK2qE,WAAY,GAEd3qE,IACX,CAIA,YAAA61E,CAAaC,GAET,OADA91E,KAAKyuB,KAAOqnD,EACL91E,IACX,CACA,OAAA+1E,CAAQD,EAAUxnE,EAAMmiC,EAAY9b,QACf/wB,IAAb+wB,IACAA,EAAW2pB,GAAsBsC,OAEjCjsB,IAAa2pB,GAAsBoB,IACnC1/C,KAAK2zE,QAAUmC,EAGf91E,KAAKyuB,KAAOqnD,EAEhB,MAAM17D,EAAQpa,KAAK6oC,aAAalU,EAAUm2C,GAAKppE,UAO/C,OANqB,IAAjB0Y,EAAMvU,OACN7F,KAAKg2E,QAAQF,EAAUxnE,EAAMmiC,EAAY9b,GAGzCva,EAAM,GAAGymC,QAAQi1B,EAAUxnE,EAAMmiC,GAE9BzwC,IACX,CACA,OAAAgtE,GACI,OAAOhtE,KAAKyuB,IAChB,CACA,UAAAwnD,CAAWH,EAAUxnE,EAAMmiC,GAEvB,OADAzwC,KAAK+1E,QAAQD,EAAUxnE,EAAMmiC,EAAY6N,GAAsBoB,KACxD1/C,IACX,CACA,UAAA+sE,GACI,OAAO/sE,KAAK2zE,OAChB,CACA,eAAAuC,CAAgBtlD,EAASw6C,EAAez2C,QACnB/wB,IAAb+wB,IACAA,EAAW2pB,GAAsBsC,OAErC,MAAMloC,EAAgB1Y,KAAK6oC,aAAalU,EAAUw2C,GAAazpE,UAO/D,OAN6B,IAAzBgX,EAAc7S,OACd7F,KAAKm2E,gBAAgBvlD,EAASw6C,EAAez2C,GAG7Cjc,EAAc,GAAG6yD,UAAU36C,EAASw6C,GAEjCprE,IACX,CACA,kBAAAo2E,CAAmBxlD,EAASw6C,GAExB,OADAprE,KAAKk2E,gBAAgBtlD,EAASw6C,EAAe9sB,GAAsBoB,KAC5D1/C,IACX,CACA,gBAAAq2E,CAAiBhE,EAAUC,EAAe39C,QACrB/wB,IAAb+wB,IACAA,EAAW2pB,GAAsBsC,OAErC,MAAM01B,EAAiBt2E,KAAK6oC,aAAalU,EAAUy9C,GAAc1wE,UAOjE,OAN8B,IAA1B40E,EAAezwE,OACf7F,KAAKu2E,iBAAiBlE,EAAUC,EAAe39C,GAG/C2hD,EAAe,GAAG5D,WAAWL,GAE1BryE,IACX,CACA,mBAAAw2E,CAAoBnE,EAAUC,GAE1B,OADAtyE,KAAKq2E,iBAAiBhE,EAAUC,EAAeh0B,GAAsBoB,KAC9D1/C,IACX,CAWA,eAAAm2E,CAAgBvlD,EAASw6C,EAAez2C,GAKpC,YAJiB/wB,IAAb+wB,IACAA,EAAW2pB,GAAsBsC,OAErC5gD,KAAK+oC,YAAY,IAAIoiC,GAAav6C,EAASw6C,GAAe1vC,YAAY/G,GAAWA,GAC1E30B,IACX,CAaA,OAAAg2E,CAAQvnD,EAAMngB,EAAMmiC,EAAY9b,GAQ5B,YAPiB/wB,IAAb+wB,GAA0BA,IAAa2pB,GAAsBsC,MAC7D5gD,KAAKyuB,KAAOA,EAEPkG,IAAa2pB,GAAsBoB,MACxC1/C,KAAK2zE,QAAUllD,GAEnBzuB,KAAK+oC,YAAY,IAAI+hC,GAAKr8C,EAAMngB,EAAMmiC,GAAa9b,GAC5C30B,IACX,CACA,UAAAy2E,CAAWhoD,EAAMngB,EAAMmiC,GAEnB,OADAzwC,KAAKg2E,QAAQvnD,EAAMngB,EAAMmiC,EAAY6N,GAAsBoB,KACpD1/C,IACX,CAYA,gBAAAu2E,CAAiBlE,EAAUC,EAAe39C,GAEtC,OADA30B,KAAK+oC,YAAY,IAAIqpC,GAAcC,EAAUC,GAAgB39C,GACtD30B,IACX,CACA,mBAAA02E,CAAoBrE,EAAUC,GAE1B,OADAtyE,KAAKu2E,iBAAiBlE,EAAUC,EAAeh0B,GAAsBoB,KAC9D1/C,IACX,CAEA,cAAA22E,GAEI,OADA32E,KAAKg2E,QAAQ,UACNh2E,IACX,CAMA,YAAA6oC,CAAalU,EAAUrzB,GACnB,MAAMs1E,OAA0BhzE,IAAb+wB,EACbkiD,OAA0BjzE,IAAbtC,EACnB,OAAIs1E,GAAcC,EACP72E,KAAKm3C,UAEPy/B,EAEE52E,KAAKm3C,UAAUqG,QAAQjqB,GAAMjyB,IAAaiyB,EAAEze,gBAE9C+hE,EAEE72E,KAAKm3C,UAAUqG,QAAQjqB,GAAMoB,IAAapB,EAAEkI,gBAI5Cz7B,KAAKm3C,UAAUqG,QAAQjqB,GAAMoB,IAAapB,EAAEkI,eAAiBn6B,IAAaiyB,EAAEze,eAE3F,CAKA,cAAAgiE,CAAeC,EAAOC,GAClB,IAAK,IAAIvuE,EAAIsuE,EAAMlxE,OAAS,EAAG4C,GAAK,EAAGA,IACnC,IAAK,IAAIu9C,EAAI,EAAGA,EAAIv9C,EAAGu9C,IACnB,GAAIgxB,EAAMD,EAAM/wB,GAAGlxC,eAAiBkiE,EAAMD,EAAM/wB,EAAI,GAAGlxC,eAAgB,CACnE,MAAMmiE,EAAOF,EAAM/wB,GACnB+wB,EAAM/wB,GAAK+wB,EAAM/wB,EAAI,GACrB+wB,EAAM/wB,EAAI,GAAKixB,CACnB,CAGZ,CACA,MAAAvzC,GACI,MAAM0xC,EAAap1E,KAAKm3C,UAAU,GAC5B+/B,EAAal3E,KAAKm3C,UAAU,GAC5BggC,EAAen3E,KAAK6oC,aAAayV,GAAsBsC,OACvDw2B,EAAep3E,KAAK6oC,aAAayV,GAAsBoB,KAU7D,IAAIl1C,EACAurC,EACAjN,EAXJ9oC,KAAK82E,eAAeK,EAAc9D,IAClCrzE,KAAK82E,eAAeM,EAAc9D,IAC9B6D,EAAatxE,OAAS,GAAKuvE,EAAWt0B,YAAcvC,GAAYqB,eAChEu3B,EAAajiE,KAAKiiE,EAAatgE,OAAO,EAAG,GAAG,IAC5CsgE,EAAatgE,OAAO,EAAG,EAAG,IAAI3U,GAAQq8C,GAAYe,UAElD83B,EAAa1gE,QAAQwgE,GAAc,GACnCE,EAAavgE,OAAO,EAAG,EAAG,IAAI3U,GAAQq8C,GAAY2B,OAKtD,IAAIwsB,EAAS,EACT/oE,EAAI3D,KAAK2D,EACb,IAAK,IAAI8E,EAAI,EAAGA,EAAI0uE,EAAatxE,OAAQ4C,IACrCqgC,EAAWquC,EAAa1uE,GACxBstC,EAAUjN,EAASiW,WAAWt2C,EAAIikE,GAClCliE,EAAQs+B,EAASzY,WACjB1sB,GAAKoyC,EACLjN,EAAS1/B,KAAKzF,GACdA,GAAK6G,EACDurC,EAAUvrC,IAAU,GACpBkiE,IAER1sE,KAAKiyE,QAAUtuE,EACfA,EAAI3D,KAAK2D,EAAI3D,KAAKwK,MAClB,MAAM61C,EAAS,CACX9lB,KAAM,EACNE,MAAO,EACPkmB,aAAc,EACdD,YAAa,GAEjB,IAAI22B,EAAiB,EACrB,IAAK,IAAI5uE,EAAI,EAAGA,EAAI2uE,EAAavxE,OAAQ4C,IAAK,CAC1CqgC,EAAWsuC,EAAa3uE,GACxB4uE,EAAiBp1E,EAAU6mC,GAAYrgC,EAAI4uE,EAC3Ch3B,EAAO5lB,MAAQ,EACf4lB,EAAO9lB,KAAO,EACd8lB,EAAOM,aAAe,EACtBN,EAAOK,YAAc,EACrB,MAAMxB,EAAgBpW,EAASqW,mBAC3BD,GACU,IAANz2C,IACA43C,EAAO5lB,MAAQykB,EAAcuB,MAAQ,EACrCJ,EAAOM,aAAezB,EAAcyB,cAAgB,GAExDN,EAAO9lB,MAAQ2kB,EAAcsB,MAAQ,EACrCH,EAAOK,YAAcxB,EAAcwB,aAAe,EAC9Cj4C,IAAM2uE,EAAavxE,OAAS,IAC5Bw6C,EAAOK,YAAc,KAIzBL,EAAOM,aAAe7X,EAASiW,WAAWt2C,EAAI4uE,GACpC,IAAN5uE,IACA43C,EAAO5lB,MAAQqO,EAASzY,YAElB,IAAN5nB,IACA43C,EAAO9lB,KAAOuO,EAASzY,aAG/B1sB,GAAK08C,EAAOM,aACZh9C,GAAK08C,EAAO5lB,MACZqO,EAAS1/B,KAAKzF,GACdA,GAAK08C,EAAO9lB,KACZ52B,GAAK08C,EAAOK,WAChB,CACA1gD,KAAKyzE,MAAgC,IAAxB2D,EAAavxE,OAAe7F,KAAK2D,EAAI3D,KAAKwK,MAAQ7G,EAC/D3D,KAAK2qE,WAAY,CACrB,CAIA,IAAAn0D,GACI,MAAMugB,EAAM/2B,KAAKuW,eACjBvW,KAAK+W,cACL/W,KAAKuV,aACLwhB,EAAI6V,UAAU,QAAS5sC,KAAKuT,aAAa,OACpCvT,KAAK2qE,WACN3qE,KAAK0jC,SACT,MAAMmwC,EAAY7zE,KAAK6uB,QAAQglD,UACzBrpE,EAAQxK,KAAKwK,MACb7G,EAAI3D,KAAK2D,EACf,IAAIkF,EAEJ,IAAK,IAAI7E,EAAO,EAAGA,EAAO6vE,EAAW7vE,IACjC6E,EAAI7I,KAAK0kC,YAAY1gC,GACjBhE,KAAK6uB,QAAQylD,YAAYtwE,GAAM4wE,UAC/B79C,EAAIQ,YACJR,EAAIS,OAAO7zB,EAAGkF,GACdkuB,EAAIU,OAAO9zB,EAAI6G,EAAO3B,GACtBkuB,EAAI5H,UAGZ4H,EAAI+V,aACJ9sC,KAAKoW,eAEL,IAAK,IAAI3N,EAAI,EAAGA,EAAIzI,KAAKm3C,UAAUtxC,OAAQ4C,IAAK,CAC5C,MAAMqgC,EAAW9oC,KAAKm3C,UAAU1uC,GAEH,mBAAlBqgC,EAAStyB,OAChBsyB,EAASvzB,WAAWwhB,GACpB+R,EAAStyB,KAAKxW,KAAMA,KAAKm1E,kBAAkB1sE,IAC3CqgC,EAAS1yB,aAAa2gB,GAE9B,CAEA,GAAI/2B,KAAK0zE,QAAU,EAAG,CAClB38C,EAAIthB,OACJshB,EAAIvf,QAAQxX,KAAKyX,UACjB,MAAM2Y,EAAY2G,EAAI2sB,YAAY,GAAK1jD,KAAK0zE,SAASlpE,MACrD3B,EAAI7I,KAAKkzC,eAAe,GAAK,EAC7Bnc,EAAIwc,SAAS,GAAKvzC,KAAK0zE,QAAS1zE,KAAK2D,EAAIysB,EAAY,EAAGvnB,GACxDkuB,EAAI1gB,SACR,CACA,OAAOrW,IACX,CACA,mBAAAwuE,GACI,OAAOxuE,KAAK6uB,QAAQ+kD,kBACxB,CAKA,iBAAA0D,GACI,OAAOt3E,KAAK6uB,QAAQylD,WACxB,CAQA,gBAAAiD,CAAiBC,EAAalD,GAC1B,GAAIkD,GAAex3E,KAAK6uB,QAAQglD,WAAa2D,EAAc,EACvD,MAAM,IAAIr0E,EAAa,mBAAoB,iFAE/C,QAA4BS,IAAxB0wE,EAAYM,QACZ,MAAM,IAAIzxE,EAAa,mBAAoB,oEAE/C,GAAmC,kBAAxBmxE,EAAYM,QACnB,MAAM,IAAIzxE,EAAa,mBAAoB,4EAG/C,OADAnD,KAAK6uB,QAAQylD,YAAYkD,GAAelD,EACjCt0E,IACX,CAUA,iBAAAy3E,CAAkBC,GACd,GAAIA,EAAoB7xE,SAAW7F,KAAK6uB,QAAQglD,UAC5C,MAAM,IAAI1wE,EAAa,mBAAoB,2FAK/C,IAAK,MAAMmxE,KAAeoD,EAE0B9zE,MAA5C8zE,EAAoBpD,GAAaM,UACjC8C,EAAoBpD,GAAet0E,KAAK6uB,QAAQylD,YAAYA,IAEhEt0E,KAAK6uB,QAAQylD,YAAYA,GAAej0E,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGhY,KAAK6uB,QAAQylD,YAAYA,IAAeoD,EAAoBpD,IAGxI,OADAt0E,KAAK6uB,QAAQylD,YAAcoD,EACpB13E,IACX,CACA,yBAAO23E,CAAmBC,GACtB,MAAMC,EAAwBv2E,IAC1B,IAAIw2E,EAAY,EAEhBF,EAAOviE,SAASmjB,IACZ,MAAM2e,EAAY3e,EAAMqQ,aAAayV,GAAsBsC,MAAOt/C,GAE9D61C,EAAUtxC,OAAS,GAAKsxC,EAAU,GAAGnuC,OAAS8uE,IAC9CA,EAAY3gC,EAAU,GAAGnuC,OAAM,IAEvC,IAAI+uE,EAAU,EACdH,EAAOviE,SAASmjB,IACZu/C,EAAU,EACQv/C,EAAMqQ,aAAayV,GAAsBsC,MAAOt/C,GAExD+T,SAASyzB,IACXgvC,EAAYhvC,EAAS9/B,OAAS+uE,IAC9BA,EAAUD,EAAYhvC,EAAS9/B,OAAM,IAE7C,MAAMgvE,EAAex/C,EAAMqQ,aAAayV,GAAsBsC,OAC9D,IAAIq3B,GAAU,EAEdD,EAAa3iE,SAASyzB,IACdA,EAASh0B,gBAAkBxT,IAC3B22E,GAAU,GACVA,GAAWF,EAAU,GACrBjvC,EAAS1/B,KAAK0/B,EAAS9/B,OAAS+uE,EAAQ,IAGhDv/C,EAAMq8C,cAAcr8C,EAAMulB,gBAAkBg6B,EAAQ,GACtD,EAGNH,EAAOviE,SAASmjB,IACPA,EAAMmyC,WACPnyC,EAAMkL,QAAQ,IAGtBm0C,EAAqBh2E,EAASipE,MAE9B+M,EAAqBh2E,EAASspE,cAE9B0M,EAAqBh2E,EAASuwE,eAC9B,IAAI8F,EAAO,EAEXN,EAAOviE,SAASmjB,IACRA,EAAMulB,gBAAkBm6B,IACxBA,EAAO1/C,EAAMulB,gBAAe,IAEpC65B,EAAOviE,SAASmjB,IACZA,EAAMq8C,cAAcqD,EAAK,IAE7BA,EAAO,EAEPN,EAAOviE,SAASmjB,IACMA,EAAMqQ,aAAayV,GAAsBsC,MAAO/+C,EAASK,SACjEmT,SAASyzB,IACXA,EAASgY,WAAavC,GAAYqB,cAC9B9W,EAAS9/B,OAASkvE,IAClBA,EAAOpvC,EAAS9/B,OAAM,GAChC,IAEN4uE,EAAOviE,SAASmjB,IACMA,EAAMqQ,aAAayV,GAAsBsC,MAAO/+C,EAASK,SACjEmT,SAASyzB,IACXA,EAASgY,WAAavC,GAAYqB,cAClC9W,EAAS1/B,KAAK8uE,EAAK,GACzB,GAEV,ECxtBJ,SAASC,GAAmBphD,EAAKvkB,EAAM4lE,EAAMnsC,EAAMmV,GAC/C,GAAI5uC,IAAS6lE,GAAe7lE,KAAK8lE,kBAAoB9lE,IAAS6lE,GAAe7lE,KAAK+lE,kBAC9E,MAAM,IAAIp1E,EAAa,mBAAoB,uDAE/C,IAAIuyB,EAAU,EACV8iD,EAAgB,IAEhBhmE,IAAS6lE,GAAe7lE,KAAK+lE,oBAC7B7iD,GAAW,EACX8iD,EAAgB,GAGpBzhD,EAAIuqB,SAAS82B,EAAO1iD,EAASuW,EAAM,EAAGmV,EAAOnV,GAE7ClV,EAAIuqB,SAAS82B,EARW,EAQansC,EAAMusC,EAAep3B,EAAOnV,EACrE,CD2sBAsnC,GAAM57D,UAAY,CACdjJ,OAAQjB,EAAKkB,WACbL,KAAM,EACNC,OAAQlC,EAAWuC,OACnBJ,MAAOlC,EAAUsC,QC7sBrB,MAAMypE,WAAuB5jE,EACzB,mBAAW/S,GACP,OAAOG,EAASw2E,cACpB,CACA,WAAA52E,CAAYg3E,EAAWC,GACnBn1E,QACAvD,KAAKmgD,UAAY9xB,EAAO2D,qBACxBhyB,KAAKwK,MAAQ,EACbxK,KAAKy4E,UAAYA,EACjBz4E,KAAK04E,aAAeA,EACpB14E,KAAKwS,KAAO6lE,GAAe7lE,KAAKgtC,OAChCx/C,KAAKkY,YAGLlY,KAAK01B,QAAU,EACf11B,KAAK24E,MAAQ,EACjB,CAKA,OAAA93B,CAAQruC,GACJ,MAAMomE,EAA0B,iBAATpmE,EAAoB6lE,GAAej5B,WAAW5sC,GAAQA,EAK7E,OAHInS,OAAOutC,OAAOyqC,GAAe7lE,MAAMgC,SAASokE,KAC5C54E,KAAKwS,KAAOomE,GAET54E,IACX,CAKA,OAAA8gD,GACI,OAAO9gD,KAAKwS,IAChB,CAEA,OAAAs+D,CAAQ/rE,EAAM8pB,EAAU,CAAC,GAKrB,OAJA7uB,KAAK24E,MAAMzjE,KAAK,CACZ2jE,QAAS9zE,EACT8pB,QAASxuB,OAAO2X,OAAO,CAAE42D,QAAS,EAAG5+C,QAAS,GAAKnB,KAEhD7uB,IACX,CACA,SAAA04B,CAAUhD,GACN,GAAuB,iBAAZA,EACP,MAAM,IAAIvyB,EAAa,cAAe,4BAG1C,OADAnD,KAAK01B,QAAUA,EACR11B,IACX,CACA,SAAAy4B,GACI,OAAOz4B,KAAK01B,OAChB,CAEA,IAAAlf,GACI,MAAMugB,EAAM/2B,KAAKuW,eACjBvW,KAAK+W,cACL,IAAIk1B,EAAOjsC,KAAKy4E,UAAU/zC,YAAY,GAClC0c,EAAOphD,KAAK04E,aAAah0C,YAAY1kC,KAAK04E,aAAarnC,cAAgB,GAAKrxC,KAAKmgD,UACjF31C,EAAQxK,KAAKwK,MACb4tE,EAAOp4E,KAAKy4E,UAAUzvE,QACIhJ,KAAKwS,OAAS6lE,GAAe7lE,KAAKsmE,cAC5D94E,KAAKwS,OAAS6lE,GAAe7lE,KAAK+lE,mBAClCv4E,KAAKwS,OAAS6lE,GAAe7lE,KAAKumE,eAElCX,EAAOp4E,KAAKy4E,UAAUzvE,OAAShJ,KAAKy4E,UAAUpoD,YAElD,IAAI2oD,EAAoB53B,EAAOnV,EAC/B,OAAQjsC,KAAKwS,MACT,KAAK6lE,GAAe7lE,KAAK8sC,OAGzB,KAAK+4B,GAAe7lE,KAAKymE,YAGzB,KAAKZ,GAAe7lE,KAAKsmE,aACrBtuE,EAAQ,EACR,MACJ,KAAK6tE,GAAe7lE,KAAKgtC,OACrB44B,GAAQp4E,KAAKwK,MAAQ,EACrByhC,GAAQjsC,KAAKmgD,UACb64B,GAAqB,GACrB,MACJ,KAAKX,GAAe7lE,KAAK0mE,MAAO,CAC5B1uE,EAAQ,GAER,MAAMP,EAAKjK,KAAKy4E,UAAUzvE,OAAS,EAAIhJ,KAAK01B,QACtCvrB,EAAK8hC,EACLktC,EAAKlvE,EACLmvE,EAAKh4B,EACLh3C,EAAKH,EAAKO,EACVH,EAAKF,EAAK6uE,EAAoB,EAC9BK,EAAOjvE,EAAK,GAAMI,EAClB8uE,EAAOnvE,EAAK,GAAM6uE,EAClBO,EAAOtvE,EAAK,IAAMO,EAClBgvE,EAAOnvE,EAAK,KAAQ2uE,EACpBS,EAAOF,EACPG,EAAOrvE,EAAK,KAAQ2uE,EACpBW,EAAON,EACPO,EAAOR,EAAK,GAAMJ,EAClBa,EAAOzvE,EAAKI,EACZsvE,EAAOF,EACPG,EAAO9vE,EAAK,GAAMO,EAClBwvE,EAAO3vE,EAAK,KAAQ2uE,EACpBiB,EAAOF,EACPG,EAAO7vE,EAAK,KAAQ2uE,EACpBmB,EAAON,EACPO,EAAOd,EACbviD,EAAIQ,YACJR,EAAIS,OAAOvtB,EAAIE,GACf4sB,EAAIY,cAAc0hD,EAAMC,EAAMC,EAAMC,EAAMpvE,EAAIC,GAC9C0sB,EAAIY,cAAc8hD,EAAMC,EAAMC,EAAMC,EAAMT,EAAIC,GAC9CriD,EAAIY,cAAckiD,EAAMC,EAAMC,EAAMC,EAAM5vE,EAAIC,GAC9C0sB,EAAIY,cAAcsiD,EAAMC,EAAMC,EAAMC,EAAMnwE,EAAIE,GAC9C4sB,EAAIa,OACJb,EAAI5H,SACJ,KACJ,CACA,KAAKkpD,GAAe7lE,KAAK6nE,QACrBpuC,GAAQ,EACRmV,GAAQ,EACR43B,EAAoB53B,EAAOnV,EAC3B/b,EAAM4G,YAAYC,EAAKqhD,EAAO,EAAGnsC,EAAM,GAAI,cAC3C/b,EAAM4G,YAAYC,EAAKqhD,EAAO,EAAGh3B,EAAM,GAAI,iBAC3Cg3B,GAAQp4E,KAAKwK,MAAQ,EACrB,MACJ,KAAK6tE,GAAe7lE,KAAK8lE,iBACrBH,GAAmBphD,EAAK/2B,KAAKwS,KAAM4lE,EAAOp4E,KAAK01B,QAASuW,EAAMmV,EAAOphD,KAAKmgD,WAC1E,MACJ,KAAKk4B,GAAe7lE,KAAK+lE,kBACrBJ,GAAmBphD,EAAK/2B,KAAKwS,KAAM4lE,EAAMnsC,EAAMmV,EAAOphD,KAAKmgD,WAC3D,MACJ,KAAKk4B,GAAe7lE,KAAKumE,YACrBvuE,EAAQ,EACRwuE,GAAqBh5E,KAAKmgD,UAC1B,MACJ,KAAKk4B,GAAe7lE,KAAK0tC,KACrB,MACJ,QACI,MAAM,IAAI/8C,EAAa,cAAe,qCAAqCnD,KAAKwS,qBAEpFxS,KAAKwS,OAAS6lE,GAAe7lE,KAAK0mE,OAClCl5E,KAAKwS,OAAS6lE,GAAe7lE,KAAK8lE,kBAClCt4E,KAAKwS,OAAS6lE,GAAe7lE,KAAK+lE,mBAClCv4E,KAAKwS,OAAS6lE,GAAe7lE,KAAK0tC,MAClCnpB,EAAIuqB,SAAS82B,EAAMnsC,EAAMzhC,EAAOwuE,GAGhCh5E,KAAKwS,OAAS6lE,GAAe7lE,KAAKumE,aAClChiD,EAAIuqB,SAAS82B,EAAO,EAAGnsC,EAAMzhC,EAAOwuE,GAExCjiD,EAAIthB,OACJshB,EAAI5gB,aAAa,GACjB4gB,EAAIvf,QAAQxX,KAAKyX,UAEjB,IAAK,IAAIhP,EAAI,EAAGA,EAAIzI,KAAK24E,MAAM9yE,OAAQ4C,IAAK,CACxC,MAAM1D,EAAO/E,KAAK24E,MAAMlwE,GAClBgqC,EAAa1b,EAAI2sB,YAAY,GAAK3+C,EAAK8zE,SAASruE,MAChD7G,EAAI3D,KAAKy4E,UAAUzvE,OAASypC,EAAa,GAAK1tC,EAAK8pB,QAAQ+/C,QAC3D/lE,GAAK7I,KAAKy4E,UAAU/zC,YAAY,GAAK1kC,KAAK04E,aAAa3H,kBAAoB,EAAIhsE,EAAK8pB,QAAQmB,QAClG+G,EAAIwc,SAAS,GAAKxuC,EAAK8zE,QAASl1E,EAAGkF,EAAI,EAC3C,CACAkuB,EAAI1gB,SACR,EAEJgiE,GAAe1gE,UAAY,CACvBjJ,OAAQjB,EAAKsE,MACbzD,KAAM,GACNC,OAAQlC,EAAWuC,OACnBJ,MAAOlC,EAAUsC,QAOrBypE,GAAe7lE,KAAO,CAClBsmE,aAAc,EACdG,YAAa,EACb35B,OAAQ,EACRE,OAAQ,EACR05B,MAAO,EACPmB,QAAS,EACT/B,iBAAkB,EAClBC,kBAAmB,EACnBQ,YAAa,EACb74B,KAAM,GAeVm4B,GAAej5B,WAAa,CACxBk7B,YAAajC,GAAe7lE,KAAKsmE,aACjCyB,WAAYlC,GAAe7lE,KAAKymE,YAChC55B,OAAQg5B,GAAe7lE,KAAK8sC,OAC5BC,OAAQ84B,GAAe7lE,KAAKgtC,OAC5Bg7B,MAAOnC,GAAe7lE,KAAK0mE,MAC3BuB,QAASpC,GAAe7lE,KAAK6nE,QAC7BK,eAAgBrC,GAAe7lE,KAAK8lE,iBACpCqC,gBAAiBtC,GAAe7lE,KAAK+lE,kBACrCqC,WAAYvC,GAAe7lE,KAAKumE,YAChC94B,KAAMo4B,GAAe7lE,KAAK0tC,MCnOvB,MAAM26B,GACT,qBAAOC,CAAeC,GAClB,MAAMC,EAAWD,EAASE,UACpBjoE,EAAQgoE,EAAStkE,QAAQqkE,GAC/B,GAAI/nE,EAAQ,EAAIgoE,EAASn1E,OACrB,OAAOm1E,EAAShoE,EAAQ,EAChC,CACA,WAAAvR,CAAYotB,GACR7uB,KAAK05C,cAAe,EACpB15C,KAAK45C,eAAgB,EACrB55C,KAAKk7E,OAASrsD,GAAWA,EAAQqsD,OAASrsD,EAAQqsD,OAAS,EAC3Dl7E,KAAKm7E,YAAc,IAAI71E,EAAS,EAAG,GACnCtF,KAAKo7E,SAAW,IAAI91E,EAAS,EAAG,GAChCtF,KAAKq7E,iBAAcz3E,EACnB5D,KAAKs7E,cAAW13E,EAChB5D,KAAKu7E,iBAAc33E,EACnB5D,KAAK+1C,QAAU,EACf/1C,KAAK2D,EAAI,EACT3D,KAAKw7E,MAAQ,EACbx7E,KAAK29D,QAAU,EACf39D,KAAKmoC,UAAY,GACjBnoC,KAAKy7E,iBAAmB,CAAC,EAEzBz7E,KAAKw6C,OAAS,EACdx6C,KAAK89C,QAAU,EACf99C,KAAKo6C,oBAAsB,EAC3Bp6C,KAAK06C,qBAAuB,EAC5B16C,KAAKo8B,UAAY,EACjBp8B,KAAKq8B,WAAa,EAClBr8B,KAAK07E,YAAc,EACnB17E,KAAK27E,aAAe,EACpB37E,KAAKi7E,UAAY,GACjBj7E,KAAKwK,MAAQ,EACbxK,KAAKw3C,iBAAmB,CAIpBC,QAAS,CAAEld,KAAM,EAAGE,MAAO,GAEnC,CACA,SAAAmhD,GACI,OAAO57E,KAAKk7E,MAChB,CACA,IAAAlyE,GACI,OAAOhJ,KAAK2D,CAChB,CACA,IAAAyF,CAAKzF,GAID,OAHA3D,KAAK2D,EAAIA,EACT3D,KAAKw7E,MAAQ73E,EACb3D,KAAK29D,QAAU,EACR39D,IACX,CACA,QAAA67E,GACI,OAAO77E,KAAKw7E,KAChB,CACA,QAAAM,CAASN,GACLx7E,KAAKw7E,MAAQA,EACbx7E,KAAK2D,EAAI63E,EAAQx7E,KAAK29D,OAC1B,CACA,UAAAoe,GACI,OAAO/7E,KAAK29D,OAChB,CACA,UAAAnhC,CAAWmhC,GACP39D,KAAK29D,QAAUA,EACf39D,KAAK2D,EAAI3D,KAAKw7E,MAAQ7d,CAC1B,CACA,QAAAttC,GACI,OAAOrwB,KAAKwK,MAAuB,EAAfxK,KAAK+1C,OAC7B,CACA,UAAAiJ,CAAWjJ,GAEP,OADA/1C,KAAK+1C,QAAUA,EACR/1C,IACX,CACA,WAAAg8E,GACI,OAAOh8E,KAAKo7E,QAChB,CACA,WAAAa,GACI,OAAOj8E,KAAKs7E,QAChB,CACA,cAAAY,GACI,OAAOl8E,KAAKq7E,WAChB,CACA,cAAAc,GACI,OAAOn8E,KAAKu7E,WAChB,CACA,YAAA3zC,GACI,OAAO5nC,KAAKmoC,SAChB,CAMA,mBAAAi0C,CAAoBC,GAChB,OAAOr8E,KAAKy7E,iBAAiBY,EACjC,CACA,mBAAAC,GACI,OAAOt8E,KAAKy7E,gBAChB,CACA,yBAAAc,GACI,OAAOv8E,KAAKmoC,UAAUqV,QAAQ8c,GAAaA,EAASniB,mBACxD,CAEA,UAAA9mC,GACI,MAAM,MAAE7G,EAAK,QAAEszC,EAAO,OAAEtD,EAAM,oBAAEJ,EAAmB,qBAAEM,EAAoB,UAAEte,EAAS,WAAEC,EAAU,YAAEq/C,EAAW,aAAEC,GAAkB37E,KACjI,MAAO,CACHwK,QACAszC,UACAtD,SACAJ,sBACAM,uBACAte,YACAC,aACAq/C,cACAC,eAER,CACA,cAAAa,GACI,OAAOx8E,KAAKm7E,WAChB,CACA,cAAAsB,CAAepM,GACXrwE,KAAKm7E,YAAc9K,EACnBrwE,KAAK05C,cAAe,CACxB,CACA,WAAA0hB,CAAYd,EAAU+hB,GAClB,IAAK/hB,EACD,MAAM,IAAIn3D,EAAa,cAAe,2BAE1C,IAAKm3D,EAASzyB,oBAAqB,CAC/B,MAAMxW,EAAQipC,EAASvyB,WACnB1W,EAAMhqB,YAAYrH,KAAKo7E,YACvBp7E,KAAKo7E,SAAW/pD,EAAM5pB,QACtBzH,KAAKq7E,YAAc/gB,IAEF,MAAjBt6D,KAAKs7E,UAIAjqD,EAAM9pB,SAASvH,KAAKs7E,aAHzBt7E,KAAKs7E,SAAWjqD,EAAM5pB,QACtBzH,KAAKu7E,YAAcjhB,EAM3B,CAKA,OAJAA,EAAS/gB,eAAev5C,MACxBA,KAAKmoC,UAAUjzB,KAAKolD,GACpBt6D,KAAKy7E,iBAAiBY,GAAc,GAAK/hB,EACzCt6D,KAAK05C,cAAe,EACb15C,IACX,CACA,SAAAy5C,GACI,GAAIz5C,KAAK05C,aACL,OAAO15C,KACX,IAAK,IAAIyI,EAAI,EAAGA,EAAIzI,KAAKmoC,UAAUtiC,SAAU4C,EAAG,CAC5C,MAAM6xD,EAAWt6D,KAAKmoC,UAAU1/B,GAChC6xD,EAAS7gB,YACT,MAAM1oC,EAAUupD,EAASjpD,aAEzBrR,KAAKo6C,oBAAsBn1C,KAAK6E,IAAI9J,KAAKo6C,oBAAqBrpC,EAAQqpC,qBACtEp6C,KAAK06C,qBAAuBz1C,KAAK6E,IAAI9J,KAAK06C,qBAAsB3pC,EAAQ2pC,sBAExE16C,KAAKw6C,OAASv1C,KAAK6E,IAAI9J,KAAKw6C,OAAQzpC,EAAQypC,QAE5Cx6C,KAAK89C,QAAU74C,KAAK6E,IAAI9J,KAAK89C,QAAS/sC,EAAQ6/B,YAAc,GAE5D5wC,KAAKo8B,UAAYn3B,KAAK6E,IAAI9J,KAAKo8B,UAAWrrB,EAAQqrB,WAClDp8B,KAAKq8B,WAAap3B,KAAK6E,IAAI9J,KAAKq8B,WAAYtrB,EAAQsrB,YAEpDr8B,KAAK07E,YAAcz2E,KAAK6E,IAAI9J,KAAK07E,YAAa3qE,EAAQqrB,UAAYrrB,EAAQqpC,qBAC1Ep6C,KAAK27E,aAAe12E,KAAK6E,IAAI9J,KAAK27E,aAAc5qE,EAAQsrB,WAAatrB,EAAQ2pC,sBAE7E16C,KAAKwK,MAAQxK,KAAKw6C,OAASx6C,KAAK07E,YAAc17E,KAAK27E,YACvD,CACA,OAAO37E,IACX,CACA,UAAA25C,GACI,OAAI35C,KAAK45C,gBAET55C,KAAK45C,eAAgB,GADV55C,IAGf,CACA,mBAAAi4C,GACI,OAAOj4C,KAAKw3C,gBAChB,ECzHJ,SAASklC,GAA4B7rD,EAAO8rD,EAAcC,EAAe31E,GAErE,IAAI41E,EAAeF,EAEnB,IAAK,IAAIG,EAAYF,EAAgB,EAAGE,EAAYjsD,EAAMhrB,OAAQi3E,IAAa,CAC3E,MAAM/hD,EAAOlK,EAAMisD,GACnB,GAAIr6E,EAAOs4B,KAAUA,EAAKuN,WAAavN,EAAK8M,oBAAqB,CAC7Dg1C,EAAe9hD,EAAK6hB,iBACpB,KACJ,CACJ,CAEA,GAAI31C,GAAW01E,IAAiBE,EAAc,CAG1CA,EAAer4E,EAFHS,KAAK6E,IAAI6yE,EAAcE,GACvB53E,KAAK8mC,IAAI4wC,EAAcE,GAEvC,CACA,OAAOA,CACX,CAiBA,MAAM5gB,GAKF,mBAAO8gB,CAAalsD,EAAOltB,EAAI,GAAG,eAAEq5E,EAAiB,IAAO,CAAC,GACzDnsD,EAAMxrB,QAAO,CAAC43E,EAAaliD,KACvBA,EAAKqe,qBAAqB,IAAIqxB,IAC9B,MAAM4F,GAAO,IAAIwK,IAAczf,YAAYrgC,GAAM0e,YAC3C1oC,EAAUs/D,EAAKh/D,aAErB,OADAg/D,EAAKjnE,KAAK6zE,EAAclsE,EAAQ2qE,aACzBuB,EAAc5M,EAAKhgD,WAAatf,EAAQ4qE,aAAeqB,CAAc,GAC7Er5E,EACP,CAEA,oBAAOu5E,CAAcnmD,EAAK4W,EAAWtU,EAAMlvB,EAAIE,EAAIwkB,GAE/C,MAAMlrB,EAAI01B,GADVxK,EAAUxuB,OAAO2X,OAAO,CAAEmlE,aAAc9uD,EAAOC,mBAAmB3c,aAAa,kBAAoBkd,IAC1EsuD,aACnBC,EAAczvC,EAAUyvC,YAQ9BrmD,EAAIthB,OACJshB,EAAIvf,QAAQ/J,EAAKkB,WAAY,GAC7ByuE,EAAYC,KAAKhoE,SAASioE,IAT1B,IAAgBrzE,EAAIG,EAAIusC,EAAR1sC,EAULtG,EAAI25E,EAAIrzE,GAVCG,EAUGzG,EAAI25E,EAAIlzE,GAVPusC,EAUW,wBAT/B5f,EAAIQ,YACJR,EAAI9gB,eAAe0gC,GACnB5f,EAAIhhB,aAAa4gC,GACjB5f,EAAI5gB,aAAa,GACjB4gB,EAAIuqB,SAASr3C,EAAIE,EAAIlF,KAAK6E,IAAIM,EAAKH,EAAI,GAAII,EAAKF,GAMhD4sB,EAAIhhB,aAAa,SACjBghB,EAAIwc,SAAStuC,KAAKgxB,MAAMqnD,EAAIlzE,GAAKkzE,EAAIrzE,IAAIjC,WAAYrE,EAAI25E,EAAIrzE,GAAII,EAAK,GAAG,IAE7E0sB,EAAIhhB,aAAa,OACjBghB,EAAIwc,SAAS,UAAU5F,EAAU4vC,WAAa,GAAGC,QAAQ,cAAc7vC,EAAU3G,YAAc,GAAGw2C,QAAQ,WAAWJ,EAAYK,MAAMD,QAAQ,KAAM75E,EAAI,GAAI0G,EAAK,IAClK0sB,EAAI1gB,SACR,CAgBA,oBAAOqnE,CAAc3mD,EAAKyB,EAAO3H,EAAOjC,GACpC,IAAIC,EAAU,CACV8uD,WAAW,EACXC,aAAa,GAEK,iBAAXhvD,EACPC,EAAUxuB,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAG6W,GAAUD,GAE7B,kBAAXA,IACZC,EAAQ8uD,UAAY/uD,GAGxB,MAAM8Y,EAAQ,IAAIwxB,GAAM7qC,EAAO0F,SAASomC,QAAQjB,GAAMC,KAAKsB,MAAMY,aAAaxqC,GAExEmrC,EAAQntC,EAAQ8uD,UAAYthB,GAAKwhB,iBAAiBn2C,GAAS,GASjE,OAPA,IAAIu0B,IACCC,WAAW,CAACx0B,IACZo2C,cAAc,CAACp2C,GAAQlP,EAAO,CAAEolD,YAAa/uD,EAAQ+uD,YAAaplD,UAEvEkP,EAAMnP,SAASC,GAAOhiB,KAAKugB,EAAKyB,GAChCwjC,EAAM3mD,SAAS8nC,GAASA,EAAK5lC,WAAWwf,GAAKvgB,SAEtCkxB,EAAMrwB,gBACjB,CAcA,uBAAO0mE,CAAiBhnD,EAAKinD,EAAUxlD,EAAOylD,EAAUptD,EAAOqtD,EAAUtvD,GACrE,IAAI27C,EAAO,CACPoT,UAAWO,EACXN,aAAa,GAEK,iBAAXhvD,EACP27C,EAAOlqE,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGuyD,GAAO37C,GAEvB,kBAAXA,IACZ27C,EAAKoT,UAAY/uD,GAGrB,MAAMuvD,EAAY,IAAIjlB,GAAM7qC,EAAO0F,SAASomC,QAAQjB,GAAMC,KAAKsB,MAAMY,aAAaxqC,GAE5EutD,EAAW,IAAIllB,GAAM7qC,EAAO0F,SAASomC,QAAQjB,GAAMC,KAAKsB,MAAMY,aAAa4iB,GAE3EjiB,EAAQuO,EAAKoT,UAAYthB,GAAKwhB,iBAAiBM,GAAa,IAElE,IAAIliB,IACCC,WAAW,CAACiiB,IACZjiB,WAAW,CAACkiB,IACZN,cAAc,CAACK,EAAWC,GAAW5lD,EAAO,CAAEolD,YAAarT,EAAKqT,cAErEO,EAAU3nE,KAAKugB,EAAKyB,GACpB4lD,EAAS5nE,KAAKugB,EAAKinD,GACnBhiB,EAAM3mD,SAAS8nC,GAASA,EAAK5lC,WAAWwf,GAAKvgB,SAE7C,IAAI6hE,GAAe7/C,EAAOwlD,GAAUzmE,WAAWwf,GAAKvgB,MACxD,CAOA,wBAAO6nE,CAAkBl2C,EAAWm2C,EAAeC,GAC/Cp2C,EAAU9yB,SAAQ,CAACmpE,EAAcxrE,KAC7B,GAAInQ,EAAY27E,IAAiBA,EAAal2C,SAAU,CACpD,GAAIk2C,EAAa/lC,cAAgB8lC,EAC7B,OAGJ,MAAM5pD,EAAW6pD,EAAaltD,gBAAgBqD,SAASzF,cACvD,GAAiB,QAAbyF,GAAmC,QAAbA,EACtB,OAEJ,GAAI2pD,GAAiBE,EAAathC,UAAW,CAEzC,MAAM7Y,EAAQm6C,EAAal6C,cAAc,GACzC,GAAc,IAAVtxB,EACAqxB,EAAMrgC,KAAO04E,GAA4Bv0C,EAAW9D,EAAMrgC,KAAMgP,GAAO,QAEtE,GAAIA,EAAQ,GAAKA,EAAQm1B,EAAUtiC,OAAQ,CAE5C,MAAM44E,EAAet2C,EAAUn1B,EAAQ,GACvC,GAAInQ,EAAY47E,GACZ,GAAIA,EAAan2C,SACbjE,EAAMrgC,KAAOy6E,EAAan6C,cAAc,GAAGtgC,SAE1C,CACD,MAAMyvD,EAAWgrB,EAAa7hC,iBAE9BvY,EAAMrgC,KAAO04E,GAA4Bv0C,EAAWsrB,EAAUzgD,GAAO,EACzE,CAER,CACAwrE,EAAahuB,WAAW,EAAGnsB,EAAMrgC,KACrC,CACJ,IAER,CACA,WAAAvC,CAAYotB,GACR7uB,KAAK0+E,iBAAmBr+E,OAAO2X,OAAO,CAAE2mE,eAAe,EAAOhlB,cAAetrC,EAAOwD,eAAgB+sD,cAAe,GAAK/vD,GACxH7uB,KAAK6+E,aAAe,EACpB7+E,KAAKu9E,UAAY,EACjBv9E,KAAKgnC,WAAa,EAClBhnC,KAAK8+E,cAAgB,CAAC,EAEtB9+E,KAAK++E,cAAgB,EAErB/+E,KAAKg/E,kBAAmB,EAExBh/E,KAAKi/E,aAAe,CAChBhrE,IAAK,CAAC,EACNirE,MAAO,GACPC,KAAM,GACN7lB,qBAAsB,GAE1Bt5D,KAAKo/E,iBAAmB,GAGxBp/E,KAAKo9E,YAAc,CACfK,MAAO,EACPJ,KAAM,IAEVr9E,KAAKunC,OAAS,GACdvnC,KAAKq/E,YAAc,EACvB,CAOA,UAAAC,CAAW/3C,EAAQ+2C,GACf,IAAK/2C,IAAWA,EAAO1hC,OACnB,MAAM,IAAI1C,EAAa,cAAe,6BAE1CokC,EAAOlyB,SAASqyB,GAAUu0B,GAAUoiB,kBAAkB32C,EAAME,eAAgB02C,IAChF,CAqBA,yBAAAiB,CAA0Bh4C,GACtB,MAAMi4C,EAAmBnxD,EAAOC,mBAAmB3c,aAAa,8BAGhE,IAAI8tE,EAAoB,EACpBC,EAAO,EACPC,EAAO,EACX,MAAMt/B,EAAS,GACT7nC,EAAY,GAElB,GAAIxY,KAAKg/E,iBACL,OAAOh/E,KAAK++E,cAEhB,IAAKx3C,EACD,MAAM,IAAIpkC,EAAa,cAAe,sDAE1CnD,KAAK4/E,mBAAmBr4C,GAExB,MAAQ43C,KAAMU,EAAa5rE,IAAK6rE,GAAe9/E,KAAKi/E,aACpDj/E,KAAK++E,cAAgB,EAGrBc,EAAYxqE,SAASg7D,IACjB,MAAM76D,EAAUsqE,EAAWzP,GAC3B76D,EAAQikC,YAGJjkC,EAAQoyB,eAAe/hC,OAAS0hC,EAAO1hC,SACvC45E,GAAqB,GAGzBjqE,EAAQoyB,eAAevyB,SAAS3P,IAC5Bg6E,GAAQh6E,EAAE2L,aAAa7G,MACvBm1E,GAAQj6E,EAAEqiC,WAAW3mC,QACrBi/C,EAAOnrC,KAAKxP,EAAE2L,aAAa7G,OAC3BgO,EAAUtD,KAAKxP,EAAEqiC,WAAW3mC,QAAQ,IAExC,MAAMoJ,EAAQgL,EAAQ6a,WACtBrwB,KAAK++E,eAAiBv0E,CAAK,IAE/BxK,KAAKg/E,kBAAmB,EAExB,MAAMe,EAAOL,EAAO,EAAIA,EAAOr/B,EAAOx6C,OAAS,EAAIw6C,EAAOx6C,OACpDm6E,EAAO76E,EAASk7C,EAAOpsC,KAAKgsE,GAAOh7E,KAAK8G,IAAIk0E,EAAKF,EAAM,MACvDG,EAAQj7E,KAAK8G,IAAIi0E,EAAO3/B,EAAOx6C,OAAQ,IAAOk6E,EAC9CI,EAAOR,EAAOnnE,EAAU3S,OACxBu6E,EAAOj7E,EAASqT,EAAUvE,KAAKgsE,GAAOh7E,KAAK8G,IAAIk0E,EAAKE,EAAM,MAC1DE,EAAQp7E,KAAK8G,IAAIq0E,EAAO5nE,EAAU3S,OAAQ,IAAOs6E,EAEjDG,EAASr7E,KAAK6E,IAAIu2E,EAAOH,GAASL,EAAYh6E,OAAS25E,EACvDe,EAAef,EAAmBC,EACxC,OAAOz/E,KAAK++E,cAAgB95E,KAAK6E,IAAIy2E,EAAcD,EACvD,CAKA,gBAAAnkB,GACI,IAAKn8D,KAAKg/E,iBACN,MAAM,IAAI77E,EAAa,kBAAmB,qFAE9C,OAAOnD,KAAK++E,aAChB,CAEA,8BAAO3kB,CAAwB7yB,GAC3B,IAAKA,IAAWA,EAAO1hC,OACnB,MAAM,IAAI1C,EAAa,cAAe,uBAE1C,MAAMy2D,EAAaryB,EAAO,GAAGuyB,gBAU7B,OAT6BvyB,EAAOliC,QAAO,CAAC43E,EAAav1C,KACrD,IAAKA,EAAMoyB,gBAAgB9yD,OAAO4yD,GAC9B,MAAM,IAAIz2D,EAAa,eAAgB,yDAE3C,GAAIukC,EAAMwyB,YAAchB,GAAMC,KAAKK,SAAW9xB,EAAMgzB,aAChD,MAAM,IAAIv3D,EAAa,kBAAmB,qCAE9C,OAAO8B,KAAK6E,IAAImzE,EAAa33E,EAASK,IAAIs3E,EAAav1C,EAAM0yB,2BAA2B,GACzF,EAEP,CAEA,sBAAAomB,CAAuBj5C,GACnB,GAAqB,GAAjBA,EAAO1hC,OACP,OACJ,MAAMyzD,EAAuB2C,GAAU7B,wBAAwB7yB,GAEzDk5C,EAAmB,IAAI/mD,IACvBshD,EAAW,GAGjBzzC,EAAOlyB,SAASqyB,IAGZ,MAAM+xB,EAAY,IAAIn0D,EAAS,EAAGg0D,GAClC5xB,EAAME,eAAevyB,SAASilD,IAC1B,MAAMomB,EAAejnB,EAAU1zD,UAC/B,IAAI46E,EAAwBF,EAAiBjgF,IAAI85D,EAASp+B,YAM1D,GAJKykD,IACDF,EAAiBx6E,IAAIq0D,EAASp+B,WAAY,CAAC,GAC3CykD,EAAwBF,EAAiBjgF,IAAI85D,EAASp+B,eAEpDykD,EAAwBA,EAAsBD,QAAgB98E,GAAY,CAC5E,MAAMg9E,EAAa,IAAInW,GACvBuQ,EAAS9lE,KAAK0rE,GAEdD,EAAsBD,GAAgBE,CAC1C,CAGAtmB,EAASlhB,qBAAqBunC,EAAsBD,IACpDjnB,EAAUnzD,IAAIg0D,EAASvyB,WAAW,GACpC,IAEN/nC,KAAKo/E,iBAAiBlqE,KAAK,CACvBjB,IAAKwsE,EACLvB,MAAOlE,EACP1hB,wBAER,CAKA,kBAAAsmB,CAAmBr4C,GACf,MACMyzC,EAnbd,SAAwBzzC,EAAQs5C,EAAaC,GACzC,GAAqB,GAAjBv5C,EAAO1hC,OACP,MAAO,CACHoO,IAAK,CAAC,EACNirE,MAAO,GACPC,KAAM,GACN7lB,qBAAsB,GAG9B,MAAMmnB,EAAmB,CAAC,EACpBM,EAAW,GACX/F,EAAW,GACX1hB,EAAuB2C,GAAU7B,wBAAwB7yB,GAsB/D,OAnBAA,EAAOlyB,SAAQ,CAACqyB,EAAO20C,KAGnB,MAAM5iB,EAAY,IAAIn0D,EAAS,EAAGg0D,GAClC5xB,EAAME,eAAevyB,SAASilD,IAC1B,MAAMomB,EAAejnB,EAAU1zD,UAE/B,IAAK06E,EAAiBC,GAAe,CACjC,MAAME,EAAaC,EAAY,CAAE3F,OAAQwF,IACzC1F,EAAS9lE,KAAK0rE,GACdH,EAAiBC,GAAgBE,EAEjCG,EAAS7rE,KAAKwrE,EAClB,CAEAI,EAAaxmB,EAAUmmB,EAAiBC,GAAerE,GACvD5iB,EAAUnzD,IAAIg0D,EAASvyB,WAAW,GACpC,IAEC,CACH9zB,IAAKwsE,EACLvB,MAAOlE,EACPmE,KAAM4B,EAASj8C,MAAK,CAACrgC,EAAGC,IAAMD,EAAIC,IAClC40D,uBAER,CA2YyB0nB,CAAez5C,GAAS8oC,GAAS,IAAIwK,GAAYxK,KADvD,CAAC/V,EAAU9kD,EAAS6mE,IAAe7mE,EAAQ4lD,YAAYd,EAAU+hB,KAE5Er8E,KAAKi/E,aAAejE,EACpB,MAAMiG,EAAejhF,KAAKi/E,aAAaC,MAIvC,OAHA+B,EAAa5rE,SAASG,IAClBA,EAAQylE,UAAYgG,CAAY,IAE7BjG,CACX,CAKA,eAAAkG,GACI,OAAOlhF,KAAKi/E,YAChB,CAOA,SAAAxlC,CAAUolC,EAAe,EAAGsC,EAAkBC,EAAa5oD,GAEvD,MAAMwiD,EAAWh7E,KAAKi/E,aACtB,IAAKjE,EACD,MAAM,IAAI73E,EAAa,iBAAkB,mCAE7C,MAAQg8E,KAAMU,EAAa5rE,IAAK6rE,GAAe9E,EAE/Ch7E,KAAKq/E,YAAc,GAGf+B,GAAe5oD,GACf4oD,EAAY/rE,SAASqyB,GAAUA,EAAMnP,SAASC,GAAOihB,cAIzD,IAAI91C,EAAI,EACJmC,EAAQ,EACZ9F,KAAK++E,cAAgB,EACrB,IAAInlB,EAAa,EAEjBimB,EAAYxqE,SAASg7D,IACjB,MAAM76D,EAAUsqE,EAAWzP,GAG3B76D,EAAQikC,YACR,MAAMjvC,EAAQgL,EAAQ6a,WACtBrwB,KAAK++E,eAAiBv0E,EACtB,MAAM4wE,EAAW5lE,EAAQwmE,cAAc56E,QACvCw4D,GAAcwhB,EACd,MAAMrqE,EAAUyE,EAAQnE,aACxB1N,EAAIA,EAAImC,EAAQiL,EAAQ2qE,YACxBlmE,EAAQpM,KAAKzF,GAEbmC,EAAQ0E,EAAQuG,EAAQ2qE,WAAW,IAGvC,MAAM,cAAEiD,EAAa,cAAEhlB,EAAa,cAAEilB,GAAkB5+E,KAAK0+E,iBAEvD5jB,EAAe31D,EAAS06E,EAAY5rE,KAD7Bo8D,GAASprE,KAAK8G,IAAI4tD,EAAgBmmB,EAAWzP,GAAM2L,cAAc56E,QAAUw4D,MAKxF,GAHA55D,KAAK++E,cAAgBp7E,EAAImC,EACzB9F,KAAKg/E,kBAAmB,EAEpBH,GAAgB,EAChB,OAAO7+E,KAAKqhF,WAGhB,MAAMC,EAAexB,EAAWD,EAAY,IACtC1a,EAAc2a,EAAWD,EAAYA,EAAYh6E,OAAS,IAGhE,SAAS07E,EAAwBC,GA8D7B,OA7DkB3B,EAAY5rE,KAAI,CAACo8D,EAAM5nE,KACrC,MAAM+M,EAAUsqE,EAAWzP,GACrB9oC,EAAS/xB,EAAQ8mE,sBACvB,IAAImF,EACJ,GAAIh5E,EAAI,EAAG,CACP,MAAMi5E,EAAc5B,EAAWD,EAAYp3E,EAAI,IAI/C,IAAK,IAAIu9C,EAAIv9C,EAAI,EAAGu9C,GAAK,EAAGA,IAAK,CAC7B,MACM27B,EADW7B,EAAWD,EAAY75B,IACZs2B,sBAEtBsF,EAAiB,GAMvB,GALAvhF,OAAO2T,KAAKuzB,GAAQlyB,SAAS6lD,IACrBymB,EAAWzmB,IACX0mB,EAAe1sE,KAAKgmD,EACxB,IAEA0mB,EAAe/7E,OAAS,EAAG,CAE3B,IAAIu1E,EAAW,EACXyG,EAAqBptB,IACrBqtB,EAAmB,EAqBvB,GApBAF,EAAevsE,SAAS6lD,IACpB,MAAM7pC,EAAQswD,EAAWzmB,GAAGnzB,WAAW3mC,QACnCiwB,EAAQ+pD,IACRqG,EAAeE,EAAWzmB,GAC1BkgB,EAAW/pD,GAGf,MAAM0wD,EAAex6C,EAAO2zB,GACtB8mB,EAAiBD,EAAa/4E,QAC/B+4E,EAAa1wE,aAAa+qB,UAAY2lD,EAAa1wE,aAAa+oC,qBAC/D6nC,EAAcN,EAAWzmB,GAAG7pD,aAC5B6wE,EAAkBP,EAAWzmB,GAAGlyD,OAASi5E,EAAYznC,OAASynC,EAAY5lD,WAAa4lD,EAAYvnC,qBAEzGmnC,EAAqB58E,KAAK8mC,IAAI81C,EAAoBG,EAAiBE,EAAgB,IAIvFL,EAAqB58E,KAAK8mC,IAAI81C,EAAoBrsE,EAAQxM,QAAU04E,EAAY14E,OAAgC,IAAvBw4E,IAGrF7C,EAAe,CACf,MAAMj5E,EAAIk0D,EACVkoB,EAAoB78E,KAAK8G,IAAI4tD,EAAgByhB,EAAW11E,GAAMo1D,EAAgB0mB,CAClF,WACiC,IAAjBC,IACZK,EAAmBL,EAAalpC,WAAWyiB,QAAQogB,GAAYoG,GAEnE,MAAO,CACHM,mBACAD,qBACAM,aAAcV,EAEtB,CACJ,CACJ,CACA,MAAO,CAAEK,iBAAkB,EAAGM,eAAgB,EAAGP,mBAAoB,EAAG,GAGhF,CACA,SAASQ,EAAsBC,GAE3B,MAAMC,EAAUf,EAAuB,EACvC,IAAIgB,EAAa,EAsBjB,OArBA3C,EAAYxqE,SAAQ,CAACg7D,EAAMr9D,KACvB,MAAMwC,EAAUsqE,EAAWzP,GAC3B,GAAIr9D,EAAQ,EAAG,CACX,MAAMyvE,EAAWjtE,EAAQxM,OACnB05E,EAAQJ,EAAetvE,GACvB2vE,EAAUj/E,EAAQg/E,EAAMP,cAAcn5E,OAAS05E,EAAMZ,kBAAoBW,EAAWD,GAC1F,IAAII,EAAkB,EAClBD,EAAU,EACVH,GAAcG,EAETA,EAAU,IACfC,EAAkB39E,KAAK8mC,IAAI22C,EAAMb,mBAAoB58E,KAAK8C,IAAI46E,IAC9DH,IAAeI,GAEnBptE,EAAQpM,KAAKq5E,EAAWD,EAC5B,CAEAhtE,EAAQ+mE,4BAA4BlnE,SAASilD,IACzCA,EAASliB,gBAAgBmqC,EAAU/sE,EAAQxM,OAAO,GACpD,IAECm8D,EAAYn8D,OAASs4E,EAAat4E,MAC7C,CACA,MAAMw4E,EAAuB3C,EACzB1Z,EAAY9zD,aAAampC,OACzB2qB,EAAY9zD,aAAasqE,aACzB2F,EAAajwE,aAAaqqE,YACxB93C,EAAYvV,EAAOC,mBACnBu0D,EAAmBj/C,EAAUjyB,aAAa,uBAC1CmxE,EAAmBl/C,EAAUjyB,aAAa,uBAC1Cq1D,EAAcpjC,EAAUjyB,aAAa,iBAC3C,IAAIoxE,EAAcvB,EAClB,MAAMwB,EAAYzB,EAAwBwB,GAC1C,IAAIE,EAAcZ,EAAsBW,GAExC,GAA2B,IAAvBnD,EAAYh6E,OACZ,OAAO,EACX,MASMq9E,EATkB,EAACH,EAAaC,KAClC,IAAIG,EAASJ,EAAc,EAC3B,GAAIC,EAAUn9E,OAAS,EACnB,IAAK,IAAIu9E,EAAK,EAAGA,EAAKJ,EAAUn9E,SAAUu9E,EACtCD,EAASl+E,KAAK8mC,IAAIi3C,EAAUI,GAAItB,iBAAmB,EAAGqB,GAG9D,OAAOA,CAAM,EAEGE,CAAgBN,EAAaC,GAI3CM,EAAkBC,IACpB,IAAIC,EAAsB,EAC1B,MAAMC,EAAete,GAAeA,EAAY+W,iBAChD,GAAIuH,EAAc,CACd,MAAM/7C,EAAQ+7C,EAAalrC,WAG3B,GAAI7Q,EAAMqyB,eAAe34D,QAAUsmC,EAAMoyB,gBAAgB14D,QACrD,OAA0B,EAAnB0hF,EAAuBI,EAAcA,EAAcJ,EAE9D,MAAMY,EAAYD,EAAapzD,WAC/BmzD,EACI97C,EAAMszB,QAAQmK,EAAY6W,cAAc56E,SAAWmiF,GAAkBG,EAAY1c,EACzF,CACA,OAA0B,EAAnB8b,EAAuBU,EAAsBA,EAAsBV,CAAgB,EAE9F,IAAIa,EAAaL,EAAeP,GAC5Ba,EAAaD,GAAcb,EAAmBD,GAClD,MAAM3K,EAAOsJ,EAAuBoC,EACpC,IAAIlsC,EAAaknC,EAGjB,KAAQqE,EAAc/K,GAAQxgC,EAAa,GAAOurC,EAAcU,EAAazL,GAAQxgC,EAAa,GAC9FqrC,GAAeE,EAAc/K,EAC7ByL,EAAaL,EAAeP,GAC5Ba,EAAaD,GAAcb,EAAmBD,GAC9CI,EAAcZ,EAAsBd,EAAwBwB,IAC5DrrC,IAGJ,OADA13C,KAAK6+E,aAAeA,EACb7+E,KAAKqhF,UAChB,CAEA,QAAAA,GACI,MAAMrG,EAAWh7E,KAAKi/E,aAChBJ,EAAe7+E,KAAK6+E,aAG1B7+E,KAAKo9E,YAAc,CAAEK,MAAO,EAAGJ,KAAM,IACrCrC,EAASmE,KAAK9pE,SAAQ,CAACg7D,EAAMr9D,KACzB,GAAc,IAAVA,EACA,OACJ,MAAM6wE,EAAW7I,EAASmE,KAAKnsE,EAAQ,GACjC0uE,EAAc1G,EAAS/mE,IAAI4vE,GAC3BruE,EAAUwlE,EAAS/mE,IAAIo8D,GACvByT,EAAcpC,EAAYrwE,aAC1B0yE,EAAcvuE,EAAQnE,aAEtB6wE,EAAkBR,EAAY14E,OAAS86E,EAAYtpC,OAASspC,EAAYnI,aAExEqG,EAAiBxsE,EAAQxM,OAAS+6E,EAAYrI,YAC9C4B,EAAM0E,EAAiBE,EAC7BliF,KAAKo9E,YAAYK,OAASH,EAC1Bt9E,KAAKo9E,YAAYC,KAAKnoE,KAAK,CAAEjL,GAAIi4E,EAAiB93E,GAAI43E,IAEtDxsE,EAAQyiC,sBAAsBR,QAAQld,KAAO+iD,EAC7CoE,EAAYzpC,sBAAsBR,QAAQhd,MAAQ6iD,CAAG,IAIzDt9E,KAAK8+E,cAAgB,CAAC,EACtB,MAAMA,EAAgB9+E,KAAK8+E,cAW3B9+E,KAAKunC,OAAOlyB,SAASqyB,IACjBA,EAAME,eAAevyB,SAAQ,CAAC0lB,EAAMtyB,EAAGooB,KACnC,MAAM9B,EAAWgM,EAAKgN,WAAWtgC,QAAQvB,WAAW8B,WAC9C+I,EAAUgqB,EAAK1pB,aACfmmC,EAAmBzc,EAAKkd,sBACxB+rC,EAAejpD,EAAK/xB,OAAS+H,EAAQypC,OAASzpC,EAAQsrB,WAAatrB,EAAQ2pC,qBACjF,IAAI/C,EAAQ,EACZ,GAAIlvC,EAAIooB,EAAMhrB,OAAS,EAAG,CACtB,MAAMo+E,EAAYpzD,EAAMpoB,EAAI,GACtBy7E,EAAeD,EAAU5yE,aAE/BsmC,EADsBssC,EAAUj7E,OAASk7E,EAAa9nD,UAAY8nD,EAAa9pC,oBACvD4pC,EACxBxsC,EAAiBG,MAAMC,KAAOqsC,EAAUj7E,OAAS+xB,EAAK/xB,OACtDi7E,EAAUhsC,sBAAsBR,QAAQld,KAAOod,CACnD,MAEIA,EAAQknC,EAAemF,EACvBxsC,EAAiBG,MAAMC,KAAOinC,EAAe9jD,EAAK/xB,OAEtDwuC,EAAiBC,QAAQhd,MAAQkd,EA7BzC,SAAqB5oB,EAAU4oB,GAC3B,MAAMwsC,EAAQrF,EAAc/vD,QACdnrB,IAAVugF,EACArF,EAAc/vD,GAAY,CAAE8oB,KAAMF,EAAOysC,MAAO,IAGhDD,EAAMC,OAAS,EACfD,EAAMtsC,MAAQssC,EAAMtsC,KAAOF,GAAS,EAE5C,CAqBQ0sC,CAAYt1D,EAAUyoB,EAAiBG,MAAMC,KAAK,GACpD,IAIN,IAAI0sC,EAAiB,EAcrB,OAbAtkF,KAAKunC,OAAOlyB,SAASqyB,IACjBA,EAAME,eAAevyB,SAAS0lB,IAC1B,MAAMhM,EAAWgM,EAAKgN,WAAWtgC,QAAQvB,WAAW8B,WAC9C+I,EAAUgqB,EAAKkd,sBACrBlnC,EAAQ4mC,MAAME,KAAOinC,EAAc/vD,GAAU8oB,KAC7C9mC,EAAQge,SAAWA,EACnBhe,EAAQ2mC,YAAc,EACtB3mC,EAAQ4mC,MAAMG,UAAY/mC,EAAQ4mC,MAAMC,KAAO7mC,EAAQ4mC,MAAME,KAC7DysC,GAAkBr/E,KAAK8G,IAAIgF,EAAQ4mC,MAAMG,UAAW,EAAE,GACxD,IAEN93C,KAAKu9E,UAAYt4E,KAAKkH,KAAKm4E,GAC3BtkF,KAAKq/E,YAAYnqE,KAAKlV,KAAKu9E,WACpBv9E,KAAKu9E,SAChB,CASA,IAAAgH,CAAK11D,GACD,IAAIhhB,EACJ,MAAMmtE,EAAWh7E,KAAKi/E,aACtB,IAAKjE,EACD,OAAO,EAEX,MAAMwJ,EAAmF,QAA1E32E,EAAKghB,aAAyC,EAASA,EAAQ21D,aAA0B,IAAP32E,EAAgBA,EAAK,GAYtH,IAAI/H,EAAQ,EAsBZ,OArBA9F,KAAKgnC,WAAa,EAClBg0C,EAASmE,KAAK9pE,SAAQ,CAACg7D,EAAMr9D,EAAOmsE,KAChC,MAAM3pE,EAAUwlE,EAAS/mE,IAAIo8D,GACvBqR,EAAc1uE,EAAQ,EAAIgoE,EAAS/mE,IAAIkrE,EAAKnsE,EAAQ,SAAMpP,EAC1D86D,EAAc1rD,EAAQmsE,EAAKt5E,OAAS,EAAIm1E,EAAS/mE,IAAIkrE,EAAKnsE,EAAQ,SAAMpP,GAdlF,SAAc6gF,EAAS3+E,EAAO8gD,EAAM35C,GAChCw3E,EAAQr7E,KAAKq7E,EAAQz7E,OAASlD,GAC9B2+E,EAAQxsC,sBAAsBR,QAAQld,MAAQz0B,EAC9C2+E,EAAQxsC,sBAAsBR,QAAQhd,OAAS30B,EAC3C8gD,IACAA,EAAK3O,sBAAsBR,QAAQhd,OAAS30B,GAC5CmH,IACAA,EAAKgrC,sBAAsBR,QAAQld,MAAQz0B,EACnD,CAOI0D,CAAKgM,EAAS1P,EAAO47E,EAAahjB,GAClC,MAAMgmB,GAAQv/E,EAASqQ,EAAQoyB,eAAe3zB,KAAKvO,GAAMA,EAAEuyC,sBAAsBN,MAAMG,aACnF4sC,EAAO,EACP5+E,GAASb,KAAK8mC,IAAIv2B,EAAQyiC,sBAAsBR,QAAQhd,MAAOx1B,KAAK8C,IAAI28E,IAEnEA,EAAO,IAER5+E,EADA44D,EACQz5D,KAAK8mC,IAAI2yB,EAAYzmB,sBAAsBR,QAAQhd,MAAOx1B,KAAK8C,IAAI28E,IAGnE,GAGhB5+E,GAAS0+E,EACTxkF,KAAKgnC,YAAclhC,CAAK,IAErB9F,KAAKqhF,UAChB,CAMA,UAAA1nC,GAOI,OANA35C,KAAKo/E,iBAAiB/pE,SAAS+pE,IAC3BA,EAAiBF,MAAM7pE,SAASgkC,GAAOA,EAAGM,cAAa,IAE3D35C,KAAKi/E,aAAaE,KAAK9pE,SAASg7D,IAC5BrwE,KAAKi/E,aAAahrE,IAAIo8D,GAAM12B,YAAY,IAErC35C,IACX,CAKA,UAAAk8D,CAAW30B,GAGP,OAFAvnC,KAAKwgF,uBAAuBj5C,GAC5BvnC,KAAKg/E,kBAAmB,EACjBh/E,IACX,CAWA,MAAA0jC,CAAO6D,EAAQs3C,EAAchwD,GACzB,MAAM07C,EAAOlqE,OAAO2X,OAAO,CAAE4lE,aAAa,GAAS/uD,GACnD7uB,KAAKunC,OAASA,EACd,MAAMoyB,EAAgB35D,KAAK0+E,iBAAiB/kB,cAU5C,OATIA,GACA35D,KAAKunC,OAAOlyB,SAAS6lD,GAAMA,EAAEN,iBAAiBjB,KAElD35D,KAAKs/E,WAAW/3C,EAAQgjC,EAAKqT,aAC7B59E,KAAK4/E,mBAAmBr4C,GACxBvnC,KAAKy5C,UAAUolC,EAActU,EAAK/0D,QAAS+xB,EAAQgjC,EAAK/xC,OAEpD+xC,EAAK/xC,OACLx4B,KAAK25C,aACF35C,IACX,CAEA,aAAA89E,CAAcv2C,EAAQ/O,EAAOmsD,GACzB,MAAM91D,EAAUxuB,OAAO2X,OAAO,CAAExC,QAASgjB,EAAMlhB,cAAgBqtE,GAEzD9F,EAAermD,EAAMs8C,cAAgBt8C,EAAMulB,gBAAkBw1B,GAAMC,eAEzE,OAhyBR,YAAczvE,GACNk4D,GAAUx4B,OACV5/B,EAAI,qBAAsBE,EAClC,CA4xBQ,CAAE,+BAAgC86E,GAC3B7+E,KAAK0jC,OAAO6D,EAAQs3C,EAAchwD,EAC7C,CACA,cAAAoN,CAAeo0C,GACX,IAAIxiE,EACJ,OAAoC,QAA5BA,EAAK7N,KAAKi/E,oBAAiC,IAAPpxE,OAAgB,EAASA,EAAGoG,IAAIo8D,EAChF,EC7yBG,IAAIuU,GDgzBX3oB,GAAUx4B,OAAQ,EC/yBlB,SAAWmhD,GACPA,EAAeA,EAAuB,QAAK,GAAK,SAChDA,EAAeA,EAAoB,IAAI,GAAK,KAC/C,CAHD,CAGGA,KAAmBA,GAAiB,CAAC,IACjC,MAAMC,WAAepwE,EACxB,mBAAW/S,GACP,OAAOG,EAASgjF,MACpB,CACA,uBAAWC,GACP,OAAOF,GAAepzC,GAC1B,CACA,0BAAWuzC,GACP,OAAOH,GAAe/yC,MAC1B,CACA,yBAAWmzC,GACP,OAAO,EACX,CACA,kBAAWj0E,GACP,MAAMk0E,EAAgB52D,EAAOC,mBAAmBjd,aAAaqnC,OAC7D,IAAKusC,EACD,MAAM,IAAI9hF,EAAa,aAAc,kBACzC,OAAO8hF,CACX,CACA,WAAAxjF,CAAYovB,EAAOhC,EAAU,CAAC,GAI1B,GAHAtrB,QACAvD,KAAKklF,iBAAmB,GACxBllF,KAAKmlF,aAAe,IACft0D,IAAUA,EAAMhrB,OACjB,MAAM,IAAI1C,EAAa,eAAgB,iCAE3CnD,KAAK6uB,QAAUA,EACf7uB,KAAK6wB,MAAQA,EACb7wB,KAAKolF,UAAsCxhF,MAA1B5D,KAAK6uB,QAAQu2D,UAAyBplF,KAAK6uB,QAAQu2D,UAAYv0D,EAAMhrB,OAGlF7F,KAAK6uB,QAAQw2D,gBACbrlF,KAAKslF,kCAETtlF,KAAKulF,eAAiBvlF,KAAK6uB,QAAQ02D,gBAAkBvlF,KAAK6uB,QAAQw2D,gBAAkB,EACtDzhF,MAA1B5D,KAAK6uB,QAAQ22D,UACbxlF,KAAKwlF,UAAYxlF,KAAK6uB,QAAQ22D,UAG9BxlF,KAAKwlF,UAAY30D,EAAMu3B,MAAMrtB,IAAUA,EAAKsiB,YAEhDr9C,KAAKylF,QACuB7hF,MAAxB5D,KAAK6uB,QAAQ42D,QAAuBzlF,KAAK6uB,QAAQ42D,QAAUxgF,KAAK8C,IAAI/H,KAAKulF,eAAiBvlF,KAAKolF,WAAa,EAChHplF,KAAKq1B,MAAsC,EAA7BhH,EAAOsD,oBAA2B,EAChD3xB,KAAKi3B,MAAQ,GACbj3B,KAAKg3B,MAAQ,IACbh3B,KAAKwK,MAAQ,IACbxK,KAAK0lF,kBAAkB1lF,KAAK6uB,QAAQ82D,UAAYd,GAAOC,cACvD7oB,GAAUoiB,kBAAkBxtD,GAAO,GAAM,GACzC7wB,KAAK4lF,gBACL5lF,KAAK6lF,QACT,CACA,MAAAA,GACI,IAAK,IAAIp9E,EAAI,EAAGA,EAAIzI,KAAK6wB,MAAMhrB,OAAQ4C,IAAK,CAC3BzI,KAAK6wB,MAAMpoB,GACnB0wC,UAAUn5C,KACnB,CACJ,CACA,MAAA8lF,GACI,IAAK,IAAIr9E,EAAI,EAAGA,EAAIzI,KAAK6wB,MAAMhrB,OAAQ4C,IAAK,CAC3BzI,KAAK6wB,MAAMpoB,GACnBmwC,YAAY54C,KACrB,CACJ,CAIA,YAAA+lF,CAAaP,GAET,OADAxlF,KAAKwlF,YAAcA,EACZxlF,IACX,CAIA,UAAAgmF,CAAWP,GAEP,OADAzlF,KAAKylF,UAAYA,EACVzlF,IACX,CAIA,iBAAA0lF,CAAkBC,GAOd,OANIA,IAAad,GAAOC,cAAgBa,IAAad,GAAOE,kBAExD3gF,QAAQC,KAAK,4BAA4BshF,kCACzCA,EAAWd,GAAOC,cAEtB9kF,KAAK2lF,SAAWA,EACT3lF,IACX,CACA,QAAA24D,GACI,OAAO34D,KAAK6wB,KAChB,CACA,YAAAkoB,GACI,OAAO/4C,KAAKolF,SAChB,CACA,+BAAAE,GAEIlhF,QAAQC,KAAK,kGAAmG,4GAA6G,kDACjO,CACA,gBAAA4hF,GAEI,OADAjmF,KAAKslF,kCACEtlF,KAAKg5C,kBAChB,CACA,gBAAAktC,CAAiBC,GAEb,OADAnmF,KAAKslF,kCACEtlF,KAAKomF,iBAAiBD,EACjC,CACA,gBAAAntC,GACI,OAAOh5C,KAAKulF,cAChB,CACA,gBAAAa,CAAiBv1D,GACb7wB,KAAK8lF,SACL9lF,KAAKulF,eAAiB10D,EACtB7wB,KAAK4lF,gBACL5lF,KAAK6lF,QACT,CACA,aAAAD,GACI5lF,KAAKklF,iBAAmB,GACxB,IAAItgF,EAAI5E,KAAKolF,UACb,KAAOxgF,GAAK,GACR5E,KAAKklF,iBAAiBmB,QAAQ,IAAIn2D,EAAM,UAAatrB,EAAI,GAAK5E,KAAKq1B,QACnEzwB,EAAIC,UAAUD,EAAI,IAAIoD,WAAY,IAItC,IAFAhI,KAAKmlF,aAAe,GACpBvgF,EAAI5E,KAAKulF,eACF3gF,GAAK,GACR5E,KAAKmlF,aAAakB,QAAQ,IAAIn2D,EAAM,UAAatrB,EAAI,GAAK5E,KAAKq1B,QAC/DzwB,EAAIC,UAAUD,EAAI,IAAIoD,WAAY,GAE1C,CAIA,oBAAAs+E,GACI,MAAMX,EAAW3lF,KAAK2lF,SAChB9tB,EAAa73D,KAAK6wB,MAAM,GAC9B,IAAI01D,EAAiBC,EAAa3uB,EAAY8tB,GAC1Cc,EAAiBD,EAAa3uB,EAAY8tB,GAG9C,SAASa,EAAazrD,EAAM4qD,GACxB,OAAO5qD,EAAK4d,iBAAiB6E,QAAQ9E,GAAWA,EAAOitC,WAAaA,IAAU9/E,MAClF,CAMA,OALA7F,KAAK6wB,MAAMxb,SAAS0lB,IAChB,MAAM2rD,EAAcF,EAAazrD,EAAM4qD,GACvCY,EAAiBG,EAAcH,EAAiBG,EAAcH,EAC9DE,EAAiBC,EAAcD,EAAiBC,EAAcD,CAAc,IAEzEF,EAAiBE,CAC5B,CAEA,YAAAE,GAGI,MAAMC,EAAyB5mF,KAAKsmF,uBAAyBzB,GAAOG,gBAAkBhlF,KAAK2lF,SAErFl6C,EAAWzrC,KAAK6uB,QAAQ4c,UAAY,EAGpCosB,EAAa73D,KAAK6wB,MAAM,GAC9B,IAAIoG,EACJ,GAAIj3B,KAAK2lF,WAAad,GAAOC,aAAc,CACvC7tD,EAAQ4gC,EAAWt+B,aAAamL,YAAY,GAAKmgD,GAAO9zE,QAAQ81E,kBAEhE,IAAK,IAAIp+E,EAAI,EAAGA,EAAIzI,KAAK6wB,MAAMhrB,SAAU4C,EAAG,CACxC,MAAMsyB,EAAO/6B,KAAK6wB,MAAMpoB,GACxB,IAAIq+E,EAAW,EACf,MAAMztC,EAAKte,EAAKM,qBACZge,IACAytC,EAAW7hF,KAAK6E,IAAIg9E,EAAUztC,EAAGwE,WAAWjM,gBAEhD,MAAMm1C,EAAOhsD,EAAKmY,eAAe4zC,GAAYjC,GAAO9zE,QAAQi2E,eAC5D,GAAIjsD,EAAKgW,WAAahW,EAAKuN,SAAU,CACjC,MAAM4oC,EAAQn2C,EAAKiW,qBAAuBjH,GAAKC,GACzCjP,EAAKuY,iBAAiBrH,KAAO44C,GAAO9zE,QAAQk2E,WAC5ClsD,EAAKuY,iBAAiBpH,MAAQ24C,GAAO9zE,QAAQi2E,eACnD/vD,EAAQhyB,KAAK8mC,IAAImlC,EAAOj6C,GACpB6vD,EAAW,IACX7vD,EAAQhyB,KAAK8mC,IAAIg7C,EAAM9vD,GAE/B,CACJ,CACJ,KACK,CACD,IAAIiwD,EAAYrC,GAAO9zE,QAAQohE,WAE/BnyE,KAAK6wB,MAAMxb,SAAS8xE,IAChB,MAAM9tC,EAAK8tC,EAAG9rD,qBACVge,IACA6tC,EAAYjiF,KAAK6E,IAAIo9E,EAAW7tC,EAAGwE,WAAWljB,UAAY,GAC9D,IAEJ1D,EAAQ4gC,EAAWt+B,aAAamL,YAAYwiD,GAAarC,GAAO9zE,QAAQi2E,eACxE,IAAK,IAAIv+E,EAAI,EAAGA,EAAIzI,KAAK6wB,MAAMhrB,SAAU4C,EACrC,GAAIzI,KAAK6wB,MAAMpoB,GAAGsoC,WAAa/wC,KAAK6wB,MAAMpoB,GAAG6/B,SAAU,CACnD,MAAM8+C,EAAWpnF,KAAK6wB,MAAMpoB,GAAGuoC,qBAAuBjH,GAAKC,GACrDhqC,KAAK6wB,MAAMpoB,GAAG6qC,iBAAiBpH,MAAQ24C,GAAO9zE,QAAQi2E,eACtDhnF,KAAK6wB,MAAMpoB,GAAG6qC,iBAAiBrH,KAAO44C,GAAO9zE,QAAQk2E,WACvDG,EAAWnwD,IACXA,EAAQmwD,EAEhB,CAER,CACA,OAAOnwD,EAAQ2vD,EAAyBn7C,CAC5C,CACA,IAAAj1B,GACI,MAAMugB,EAAM/2B,KAAKuW,eACjBvW,KAAK+W,cAEL,MAAM8gD,EAAa73D,KAAK6wB,MAAM,GACxBy6B,EAAYtrD,KAAK6wB,MAAM7wB,KAAK6wB,MAAMhrB,OAAS,GAC5C7F,KAAKwlF,WAKNxlF,KAAKg3B,MAAQ6gC,EAAW1Z,cAAgB,EACxCn+C,KAAKwK,MAAQ8gD,EAAUrN,eAAiBj+C,KAAKg3B,MAAQ,IALrDh3B,KAAKg3B,MAAQ6gC,EAAWllB,WACxB3yC,KAAKwK,MAAQ8gD,EAAU3Y,WAAa3yC,KAAKg3B,OAO7Ch3B,KAAKi3B,MAAQj3B,KAAK2mF,eAClB,MAAMU,EAAgB,CAAC78E,EAAOulB,IAAUvlB,EAAQ9G,EAAQqsB,EAAM1e,aAAa7G,OAE3E,IAAIA,EAAQxK,KAAKklF,iBAAiB7/E,OAAOgiF,EAAe,GACpDrnF,KAAKylF,UACLj7E,EAAQxK,KAAKmlF,aAAa9/E,OAAOgiF,EAAe78E,GAChDA,GAAsB,IAAbxK,KAAKq1B,OAElB,MACMiyD,EADoBtnF,KAAKg3B,MAAQh3B,KAAKwK,MAAQ,EACPA,EAAQ,EAErD,GAAIxK,KAAKwlF,UAAW,CAChB,MAAMpjC,EAAapiD,KAAKwK,MAAQ,EAAIA,EAAQ,EAAI,EAE5C43C,EAAa,IACbrrB,EAAIuqB,SAASthD,KAAKg3B,MAAOh3B,KAAKi3B,MAAOmrB,EAAY,GACjDrrB,EAAIuqB,SAASthD,KAAKg3B,MAAQh3B,KAAKwK,MAAQ,EAAIA,EAAQ,EAAI,EAAGxK,KAAKi3B,MAAOmrB,EAAY,GAClFrrB,EAAIuqB,SAASthD,KAAKg3B,MAAOh3B,KAAKi3B,OAASj3B,KAAK2lF,WAAad,GAAOE,gBAAkB,EAAI,GAAI,EAAmB,GAAhB/kF,KAAK2lF,UAClG5uD,EAAIuqB,SAASthD,KAAKg3B,MAAQh3B,KAAKwK,MAAOxK,KAAKi3B,OAASj3B,KAAK2lF,WAAad,GAAOE,gBAAkB,EAAI,GAAI,EAAmB,GAAhB/kF,KAAK2lF,UAEvH,CAEA,MAAM4B,EAASl5D,EAAOC,mBAAmB3c,aAAa,gBAAiB,GACvE,IAAIw7C,EAAW,EAMf,GALAntD,KAAKklF,iBAAiB7vE,SAAS0a,IAC3BA,EAAMqJ,OAAOrC,EAAKuwD,EAAmBn6B,EAAUntD,KAAKi3B,MAAQj3B,KAAKq1B,MAAQ,EAAI,EAAIkyD,GACjFp6B,GAAYzpD,EAAQqsB,EAAM1e,aAAa7G,MAAM,IAG7CxK,KAAKylF,QAAS,CACd,MAAM+B,EAAUF,EAAmBn6B,EAAwB,IAAbntD,KAAKq1B,MAC7CoyD,EAA4B,IAAbznF,KAAKq1B,MAC1B0B,EAAIQ,YACJR,EAAI6f,IAAI4wC,EAASxnF,KAAKi3B,MAAqB,IAAbj3B,KAAKq1B,MAAcoyD,EAAc,EAAa,EAAVxiF,KAAKC,IAAQ,GAC/E6xB,EAAI8f,YACJ9f,EAAIa,OACJb,EAAIQ,YACJR,EAAI6f,IAAI4wC,EAASxnF,KAAKi3B,MAAqB,IAAbj3B,KAAKq1B,MAAcoyD,EAAc,EAAa,EAAVxiF,KAAKC,IAAQ,GAC/E6xB,EAAI8f,YACJ9f,EAAIa,OACJu1B,GAAyB,IAAbntD,KAAKq1B,MACjBr1B,KAAKmlF,aAAa9vE,SAAS0a,IACvBA,EAAMqJ,OAAOrC,EAAKuwD,EAAmBn6B,EAAUntD,KAAKi3B,MAAQj3B,KAAKq1B,MAAQ,EAAI,EAAIkyD,GACjFp6B,GAAYzpD,EAAQqsB,EAAM1e,aAAa7G,MAAM,GAErD,CACJ,EC3TJ,SAASk9E,GAAuB72D,GAC5B,IAAI82D,EAAU,EAQd,OAPA92D,EAAMxb,SAAS0lB,IACPA,EAAK4gB,UACL5gB,EAAK4gB,SAAStmC,SAASuyE,IACnBD,GAAWC,EAAQ5jF,KAAO,CAAC,GAEnC,IAEA2jF,GAAW,EACJ59C,GAAKE,KAETF,GAAKC,EAChB,CAQO,MAAM69C,GAAY,IACZC,GAAa,IACbC,GAAY,IAElB,MAAM1rB,WAAa5nD,EACtB,mBAAW/S,GACP,OAAOG,EAASw6D,IACpB,CAEA,gBAAArrB,GACI,OAAOhxC,KAAK6qC,cAChB,CAMA,2BAAOm9C,CAAqBC,GACnBA,GAAyB,MAAbA,IACbA,EAAW,OAEf,MAkBMtrB,EAlBW,CACb,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,OAAQ,CAAC,QACT,OAAQ,CAAC,QACT,OAAQ,CAAC,QACT,OAAQ,CAAC,SAEWsrB,GACxB,QAAerkF,IAAX+4D,EAiBA,OAAOA,EAAO1oD,KAAK2oD,IAAU,IAAIt3D,GAAWiD,MAAMq0D,KAjB5B,CAGtB,MAAMsrB,EAAYrjF,SAASojF,EAASv/E,MAAM,KAAK,GAAI,IAC7Cy/E,EAAYtjF,SAASojF,EAASv/E,MAAM,KAAK,GAAI,IAEnD,GADoBw/E,EAAY,GAAM,EAElC,MAAO,CAAC,IAAI5iF,EAAS,EAAG6iF,IAEvB,GAAIA,EAAY,EACjB,MAAO,CAAC,IAAI7iF,EAAS,EAAG6iF,IAEvB,GAAIA,GAAa,EAClB,MAAO,CAAC,IAAI7iF,EAAS,EAAG6iF,GAEhC,CAIA,MAAO,CAAC,IAAI7iF,EAAS,EAAG,GAC5B,CAQA,uBAAOu4E,CAAiBn2C,EAAOmD,EAAgB8xB,GAC3C,OAAON,GAAK+rB,cAAc1gD,EAAME,eAAgB,CAAE+0B,SAAQ9xB,kBAC9D,CA0BA,oBAAOu9C,CAAcv3D,EAAOw3D,EAAS,CAAC,GAC7BA,EAAO1rB,QAAW0rB,EAAO1rB,OAAO92D,SACjCwiF,EAAO1rB,OAAS,CAAC,IAAIr3D,EAAS,EAAG,KAGrC,MAAMgjF,EAAaD,EAAO1rB,OAAO1oD,KAAK2oD,IAClC,IAAKA,EAAM91D,SACP,MAAM,IAAI3D,EAAa,oBAAqB,0DAEhD,OAAOy5D,EAAMn1D,QAAQX,SAASunB,EAAO9V,WAAY,EAAE,IAEjDgwE,EAAmB13D,EACzB,IAAI23D,EAAmB,EACnBC,EAAa,GACbC,EAAe,GAInB,SAASC,IACDL,EAAWziF,OAAS,EAAI2iF,EACxBA,GAAoB,EAGpBA,EAAmB,CAE3B,EACA,WACI,IAAII,EAAY,GAEZC,EAAyB,IAAIvjF,EAAS,EAAG,GAC7CijF,EAAiBlzE,SAASyzE,IAEtB,GADAF,EAAY,GACRE,EAAgBjhD,oBAGhB,OAFA4gD,EAAWvzE,KAAKwzE,QAChBA,EAAeE,GAGnBF,EAAaxzE,KAAK4zE,GAClB,MAAMC,EAAgBT,EAAWE,GAAkB/gF,QAC7CmyD,GAxBSovB,EAwBkBN,EAvB9BM,EAAS3jF,QAAO,CAAC4jF,EAAMluD,IAASA,EAAKgN,WAAWtgC,QAAQnB,IAAI2iF,IAAO,IAAI3jF,EAAS,EAAG,KAuBvCgB,IAAIuiF,GAxB3D,IAAuBG,EA0Bf,MAAME,EAAa76D,EAAO8C,iBAAiB23D,EAAgB/rC,eAAiB,EAK5E,GAJImsC,GAAcJ,EAAgBrwC,cAC9BswC,EAAchjF,WAAa,GAG3B6zD,EAAWvyD,YAAY0hF,GAAgB,CAGvC,IAAKG,EAAY,CACb,MAAMnuD,EAAO2tD,EAAaxvC,MACtBne,GACA6tD,EAAU1zE,KAAK6lB,EACvB,CACA0tD,EAAWvzE,KAAKwzE,GAKhB,GACIG,EAAyBjvB,EAAW/yD,SAASyhF,EAAWE,IACxDG,UACKE,EAAuBvhF,kBAAkBghF,EAAWE,KAC7DE,EAAeE,CACnB,MACShvB,EAAW5yD,OAAO+hF,KACvBN,EAAWvzE,KAAKwzE,GAChBG,EAAyB,IAAIvjF,EAAS,EAAG,GACzCojF,EAAeE,EACfD,IACJ,IAGAD,EAAa7iF,OAAS,GACtB4iF,EAAWvzE,KAAKwzE,EAExB,CA2GAS,GA3FA,WACI,MAAMC,EAAkB,GACxBX,EAAWpzE,SAASunD,IAChB,IAAIysB,EAAY,GAChBzsB,EAAMvnD,SAAQ,CAAC0lB,EAAM/nB,EAAO4pD,KACxB,MAAM0sB,EAA0B,IAAVt2E,GAAeA,IAAU4pD,EAAM/2D,OAAS,EACxDs+B,EAAWy4B,EAAM5pD,EAAQ,GACzBu2E,GAAoBlB,EAAOmB,YAAczuD,EAAKuN,SAC9CmhD,EAA0BpB,EAAOmB,YAAcnB,EAAOqB,kBAAoB3uD,EAAKuN,UAAYghD,EACjG,IAAIK,GAAoB,EACxB,GAAItB,EAAOuB,0BAA4BzlD,IAAapJ,EAAKuN,WAAanE,EAASmE,SAAU,CACrF,MAAMuhD,EAAgB1lD,EAAS6M,mBAE/B24C,EADyB5uD,EAAKiW,qBACW64C,CAC7C,CACA,MAAMC,EAAuBjlF,SAASk2B,EAAKgiB,cAAe,IAAM,EAE5CwsC,GAAoBE,GAA2BE,GAAqBG,GAGhFT,EAAUxjF,OAAS,GACnBujF,EAAgBl0E,KAAKm0E,GAKzBA,EAAYM,EAAoB,CAAC5uD,GAAQ,IAIzCsuD,EAAUn0E,KAAK6lB,EACnB,IAGAsuD,EAAUxjF,OAAS,GACnBujF,EAAgBl0E,KAAKm0E,EACzB,IAEJZ,EAAaW,CACjB,CAqDAW,GAnDItB,EAAWpzE,SAASunD,IAChB,IAAI9rB,EACJ,GAAIu3C,EAAOuB,yBAA0B,CACjC,MAAM7uD,EAclB,SAAuB6hC,GACnB,IAAK,IAAIn0D,EAAI,EAAGA,EAAIm0D,EAAM/2D,OAAQ4C,IAAK,CACnC,MAAMsyB,EAAO6hC,EAAMn0D,GACnB,IAAKsyB,EAAKuN,SACN,OAAOvN,CAEf,CACA,OAAO,CACX,CAtByBivD,CAAcptB,GAC3B9rB,EAAgB/V,EAAOA,EAAKiW,mBAAqBjH,GAAKC,EAC1D,MAGQ8G,EADAu3C,EAAOx9C,eACSw9C,EAAOx9C,eAGP68C,GAAuB9qB,IAevD,SAA4BA,EAAO16B,GAC/B06B,EAAMvnD,SAAS0lB,IACXA,EAAKy0B,iBAAiBttB,EAAU,GAExC,CAhBQ+nD,CAAmBrtB,EAAO9rB,EAAc,IAwChD,MAAMo5C,EA7GKzB,EAAWjrC,QAAQof,IACtB,GAAIA,EAAM/2D,OAAS,EAAG,CAClB,IAAIskF,GAAW,EAMf,OALAvtB,EAAMvnD,SAAS0lB,IACPA,EAAK8e,qBAAuBxrB,EAAO+C,gBAAgB,OACnD+4D,GAAW,EACf,IAEGA,CACX,CACA,OAAO,CAAK,IAqGdC,EAxBN,WACI,MAAMC,EAAgB,GAYtB,OAVA5B,EAAWpzE,SAASunD,IAChB,IAAIlkB,EACJkkB,EAAMvnD,SAAS0lB,IACX,MAAMuvD,EAAavvD,EAAK0d,YACpB6xC,GAAc5xC,IAAW4xC,IACzB5xC,EAAS4xC,EACTD,EAAcn1E,KAAKwjC,GACvB,GACF,IAEC2xC,CACX,CAUmBE,GAEbvuB,EAAQ,GA+Bd,OA9BAkuB,EAAiB70E,SAASunD,IACtB,MAAMzf,EAAO,IAAIkf,GAAKO,GAClByrB,EAAOmC,gBACPrtC,EAAKlU,eAAeuhD,eAAgB,GAEpCnC,EAAOoC,mBACPttC,EAAKlU,eAAeyhD,sBAAwBr8D,EAAO+C,gBAAgBi3D,EAAOoC,oBAEpD,IAAtBpC,EAAOsC,aACPxtC,EAAKlU,eAAe0hD,YAAa,EACjCxtC,EAAKlU,eAAe2hD,iBAAmBvC,EAAOuC,kBAElD5uB,EAAM9mD,KAAKioC,EAAK,IAGpBitC,EAAW/0E,SAASqjC,IAEhB,MAAMxW,EAAYwW,EAAO7nB,MAAM,GAAGga,iBAAmBd,GAAKE,KAAO26C,GAAe/yC,OAAS+yC,GAAepzC,IACxGkH,EAAOgtC,kBAAkBxjD,GAEzB,IAAIsjD,GAAY,EAChB,IAAK,IAAI/8E,EAAI,EAAGA,EAAIiwC,EAAO7nB,MAAMhrB,OAAQ4C,IAAK,CAE1C,IADaiwC,EAAO7nB,MAAMpoB,GAChB40C,UAAW,CACjBmoC,GAAY,EACZ,KACJ,CACJ,CACA9sC,EAAOqtC,aAAaP,EAAU,IAE3BxpB,CACX,CACA,WAAAv6D,CAAYovB,EAAOwhC,GAAY,GAU3B,GATA9uD,QACAvD,KAAK6qF,MAAQ,EACb7qF,KAAK21B,QAAU,EAMf31B,KAAK8qF,wBAA0B,CAAC,GAC3Bj6D,GAA0B,IAAjBA,EAAMhrB,OAChB,MAAM,IAAI1C,EAAa,eAAgB,+BAE3C,GAAqB,IAAjB0tB,EAAMhrB,OACN,MAAM,IAAI1C,EAAa,eAAgB,2BAI3C,GADAnD,KAAKqxB,MAAQR,EAAM,GAAGgpB,oBAClB75C,KAAKqxB,OAAShD,EAAO+C,gBAAgB,KACrC,MAAM,IAAIjuB,EAAa,eAAgB,mEAE3C,IAAIsF,EACAsyB,EACJ/6B,KAAK6qC,eAAiBha,EAAM,GAAGmgB,mBAC/B,IAAInG,EAAiB7qC,KAAK6qC,eAE1B,GAAIwnB,GAAaxvD,EAAYguB,EAAM,IAC/Bga,EAAiB68C,GAAuB72D,QAEvC,GAAIwhC,GAAapvD,EAAU4tB,EAAM,IAAK,CAEvC,MAAMk6D,EAAcl6D,EAAMxrB,QAAO,CAAC4jF,EAAMluD,IAASkuD,EAAOluD,EAAKiW,oBAAoB,GACjFnG,EAAiBkgD,GAAe,EAAIhhD,GAAKC,GAAKD,GAAKE,IACvD,CAEA,IAAKxhC,EAAI,EAAGA,EAAIooB,EAAMhrB,SAAU4C,EAC5BsyB,EAAOlK,EAAMpoB,GACT4pD,IACAt3B,EAAKy0B,iBAAiB3kB,GACtB7qC,KAAK6qC,eAAiBA,GAE1B9P,EAAKuiB,QAAQt9C,MAEjBA,KAAK45C,eAAgB,EACrB55C,KAAK6wB,MAAQA,EACb7wB,KAAK60B,WAAa70B,KAAKsvD,eACvBtvD,KAAKgrF,iBAAmB,GACxBhrF,KAAKipC,eAAiB,CAClBqzB,WAAY,EACZ2uB,UAAW,IACXC,WAAY,IACZC,iBAAkB,GAClBC,WAAY,IACZZ,eAAe,EACfa,kBAAmB,EACnB9uB,oBAAqB,GACrBouB,YAAY,EACZW,qBAAsB,GAE9B,CAEA,QAAA3yB,GACI,OAAO34D,KAAK6wB,KAChB,CAEA,YAAAy+B,GAGI,OAFmBtvD,KAAK6wB,MAAM5c,KAAK8mB,GAASA,EAAKzJ,gBAAgBuD,aACjCxvB,QAAO,CAACyE,EAAKyhF,IAAeA,EAAYzhF,EAAMyhF,EAAYzhF,GAE9F,CAEA,gBAAA0hF,CAAiBC,GAEb,OADAzrF,KAAKgrF,iBAAmBS,EACjBzrF,IACX,CAcA,oBAAA0rF,CAAqB5O,EAAW6O,GAE5B,OADA3rF,KAAK8qF,wBAAwBhO,GAAa6O,EACnC3rF,IACX,CAKA,sBAAA4rF,CAAuB9O,GAEnB,cADO98E,KAAK8qF,wBAAwBhO,GAC7B98E,IACX,CAEA,SAAA6rF,CAAUloF,EAAG00D,EAAYC,EAAYuyB,GACjC,OAAOvyB,GAAc30D,EAAI00D,GAAcwyB,CAC3C,CAEA,cAAAiB,GACI,MAAM,MAAEj7D,EAAOga,eAAgBiG,EAAe7H,gBAAgB,UAAEgiD,EAAS,UAAEC,EAAS,iBAAEC,EAAgB,WAAEC,IAAkBprF,KACpH+rF,EAAYl7D,EAAM,GAClBm7D,EAnbd,SAAsBD,EAAWr/B,GAC7B,MAAMu/B,EAAgBF,EAAUz4C,iBAAiBrH,KAC3CigD,EAAaH,EAAUp5C,WAG7B,OAFqB+Z,EAASpZ,iBAAiBrH,KAExBggD,IADLv/B,EAAS/Z,WAC0Bu5C,EACzD,CA6a6BC,CAAaJ,EAAWl7D,EAAMA,EAAMhrB,OAAS,IAC5D0uC,GAAa02C,EAAYC,GAAaC,EAC5C,IAAIiB,EAAU5mF,OAAO6mF,UACjBC,EAAY,EACZpzD,EAAS,EAEb,IAAK,IAAI2xD,EAAQK,EAAWL,GAASI,EAAWJ,GAASt2C,EAAW,CAChE,IAAIg4C,EAAqB,EACrBC,EAAa,EAEjB,IAAK,IAAI/jF,EAAI,EAAGA,EAAIooB,EAAMhrB,SAAU4C,EAAG,CACnC,MAAMsyB,EAAOlK,EAAMpoB,GACnB,GAAIsyB,EAAKgW,WAAahW,EAAKuN,SAAU,CACjC,MAAMmkD,EAAmBzsF,KAAK6rF,UAAU9wD,EAAK4X,WAAYo5C,EAAUp5C,WAAYo5C,EAAUz4C,iBAAiBrH,KAAM4+C,GAAS2B,EACnHx2C,EAAWjb,EAAKuY,iBAAiBrH,KAEvC,GAAI+J,EAAWlF,EAAgB27C,EAAmB37C,EAAe,CAC7D,MAAM47C,EAAOznF,KAAK8C,IAAIiuC,EAAWy2C,GACjCD,GAAcE,GAAQ57C,EACtBy7C,GAAsBG,EAAOjkF,CACjC,MAGI8jF,IAAuBv2C,EAAWy2C,GAAoB37C,CAE9D,CACJ,CAGA,MAAM67C,EAAaX,EAAe,EAI5BtH,EAAO0G,EAHanmF,KAAK8C,IAAI4kF,EAAa9B,GAGF5lF,KAAK8C,IAAIwkF,GAEnD7H,EAAO0H,IACPA,EAAU1H,EACV4H,EAAYzB,EACZ3xD,EAASszD,EAEjB,CACAxsF,KAAK6qF,MAAQyB,EACbtsF,KAAK21B,QAAUuD,CACnB,CAEA,kBAAA0zD,GACI,MAAM,MAAE/7D,EAAK,eAAEga,EAAgB5B,gBAAgB,WAAEqzB,EAAU,qBAAEgvB,EAAoB,iBAAEV,IAAwB5qF,KAG3G,IAAIy9E,EAAQ,EACRoP,EAAW,EACXC,EAAmB,EACnBC,EAAiB,EACrB,IAAK,IAAItkF,EAAI,EAAGA,EAAIooB,EAAMhrB,OAAQ4C,IAAK,CAEnC,MAAMsyB,EAAOlK,EAAMpoB,GACbutC,EAAWjb,EAAKuY,iBAAiBrH,KACvCwxC,GAASznC,EAGLnL,IAAmBd,GAAKE,MAAQ8iD,EAAiB/2C,GACjD+2C,EAAiB/2C,EACjB62C,EAAW5nF,KAAK6E,OAAOixB,EAAKiY,SAC5B85C,EAAmB/xD,EAAKu0B,gBAEnBzkB,IAAmBd,GAAKC,KAA0B,IAAnB+iD,GAAwBA,EAAiB/2C,KAC7E+2C,EAAiB/2C,EACjB62C,EAAW5nF,KAAK8mC,OAAOhR,EAAKiY,SAC5B85C,EAAmB/xD,EAAKu0B,eAEhC,CAGA,IAAIod,EAAS+Q,EAAQ5sD,EAAMhrB,OAK3B,MACMmnF,EAAc1B,EAAuBwB,GADZ,IAAbxwB,GAEZ2wB,EAAYJ,EAAWG,GAAeniD,EACxCA,IAAmBd,GAAKE,MAAQyiC,EAASugB,EACzCvgB,EAASmgB,EAAWG,EAEfniD,IAAmBd,GAAKC,IAAM0iC,EAASugB,IAC5CvgB,EAASmgB,EAAWG,GAEnBpC,GAII//C,IAAmBd,GAAKE,MAAQyiC,EAASke,GAGzC//C,IAAmBd,GAAKC,IAAM0iC,EAASke,KAF5C5qF,KAAKipC,eAAe2hD,iBAAmBle,GAHvC1sE,KAAKipC,eAAe2hD,iBAAmBle,EAS3C1sE,KAAK6qF,MAAQ,EACb7qF,KAAK21B,QAAU,CACnB,CAEA,cAAAu3D,GAGI,IAAIC,EAFcntF,KAAK6wB,MAAM,GACGyiB,iBAAiBrH,KAOjD,OAHIjsC,KAAKipC,eAAe0hD,YAAc3qF,KAAKipC,eAAe2hD,mBACtDuC,EAAQntF,KAAKipC,eAAe2hD,kBAEzBuC,CACX,CAKA,mBAAAC,GACI,MAAM,MAAEv8D,EAAK,MAAEg6D,EAAK,QAAEl1D,EAAO,WAAEd,EAAYoU,gBAAgB,cAAEuhD,EAAa,kBAAEa,EAAiB,WAAE/uB,IAAkBt8D,KAC3G+rF,EAAYl7D,EAAM,GAClBo7D,EAAgBjsF,KAAKktF,iBACrBhB,EAAaH,EAAUp5C,WAC7B,IAAK,IAAIlqC,EAAI,EAAGA,EAAIooB,EAAMhrB,SAAU4C,EAAG,CACnC,MAAMsyB,EAAOlK,EAAMpoB,GACbyrB,EAAO6G,EAAKoW,UAClB,GAAIjd,EAAM,CACN,MAAMkjC,EAAQr8B,EAAK4X,YACX1G,KAAM+J,GAAajb,EAAKuY,iBAC1B+5C,EAAiBrtF,KAAK6rF,UAAUz0B,EAAO80B,EAAYD,EAAepB,GAASl1D,EAC3E23D,EAAmBp5D,EAAKoX,eACxBiiD,EAAgBxyD,EAAKiW,qBAAuBjH,GAAKC,GAAKgM,EAAWq3C,EAAiBA,EAAiBr3C,EAEzG,IAAIw3C,EAAqB,EACzB,GAAIzyD,EAAKiW,qBAAuBhxC,KAAK6qC,eAAgB,CAEjD2iD,GAAsB,EAAsB,KAD1BzyD,EAAKzJ,gBAAgBuD,WACA,IAAY70B,KAAKipC,eAAeqzB,UAQ3E,CAGA,GAFApoC,EAAKkX,aAAakiD,EAAmBC,EAAgBC,GACrDt5D,EAAKqY,sBACDxR,EAAKuN,UAAYkiD,EAAe,CAChC,MACMiD,GAAkB54D,EAAa,GADnBynC,EACoC,IADpCA,EAElBpoC,EAAKiY,eAAc,GAAME,YAAW,EAAMohD,EAAiBpC,EAC/D,CACJ,CACJ,CACJ,CAEA,mBAAAqC,CAAoB3+D,EAAU4+D,EAAWtd,EAAMud,EAAW9Q,GACtD,GAAiB,MAAb/tD,EACA,OAAO84D,GAEX,MAAMgG,EAAsB7tF,KAAK8qF,wBAAwBhO,GACzD,GAAI+Q,EACA,OAAOA,EACX,MAAMC,EAAkB,GAAGz/D,EAAO8C,iBAAiBpC,GAAY,EACzDg/D,EAAsBJ,EAAYt/D,EAAO+C,gBAAgB08D,GACzDE,EAAsBJ,EAAYv/D,EAAO+C,gBAAgB08D,GACzDG,EAAiB5d,EAAOhiD,EAAO+C,gBAAgB08D,GACrD,OAAIC,GAAuBC,GAAuBC,EACvClG,GAEFgG,IAAwBC,GAAuBC,EAC7CpG,IAEDkG,GAAuBC,GAAuBC,EAC7CnG,GAEJ9nF,KAAK0tF,oBAAoBI,EAAiBH,EAAWtd,EAAMud,EAAW9Q,EACjF,CAEA,YAAAoR,CAAan/D,GACT,MAAMo/D,EAAmB9/D,EAAO+C,gBAAgBrC,GAChD,IAAIq/D,GAAe,EACnB,MAAMC,EAAa,GACnB,IAAIC,EACJ,MAAM/xB,EAAsBv8D,KAAKipC,eAAeszB,oBAChD,IAAIgyB,GAAwB,EACxBC,EAAa,EACjB,IAAK,IAAI/lF,EAAI,EAAGA,EAAIzI,KAAK6wB,MAAMhrB,SAAU4C,EAAG,CACxC,MAAMsyB,EAAO/6B,KAAK6wB,MAAMpoB,GAGxB+lF,GADczzD,EAAKgN,WAAW3mC,QAE9B,IAAIqtF,GAAe,EAEf5pF,SAASkqB,EAAU,KAAO,IAE1B0/D,GAAqD,IAAtCzuF,KAAKgrF,iBAAiBt0E,QAAQjO,GAGzCzI,KAAKipC,eAAeyhD,uBAAyB8D,GAAcxuF,KAAKipC,eAAeyhD,wBAC/E8D,EAAa,EACbC,GAAe,IAGvB,MAAMR,EAAiBlzD,EAAK8e,oBAAsBs0C,EAC5C3hD,EAASzR,EAAK4X,WAAa5I,GAAKG,MAAQ,EAGxC4hB,EAAY9rD,KAAK6wB,MAAMpoB,EAAI,GAC3BimF,EAAY1uF,KAAK6wB,MAAMpoB,EAAI,GAC3BulF,EAAsBU,GAAaA,EAAU70C,oBAAsBs0C,EACnEJ,EAAsBjiC,GAAaA,EAAUjS,oBAAsBs0C,EACnEQ,EAAa7iC,GAAa4iC,GAAaT,IAAmBF,IAAwBC,EAExF,GAAIC,EAEA,GAAIG,EAGAE,EAAeD,EAAWA,EAAWxoF,OAAS,GAC9CyoF,EAAa7uC,IAAMjT,EAEfiiD,IACAL,GAAe,EACXM,IAAcV,QAA4CpqF,IAArB0qF,EAAa7uC,MAGlD6uC,EAAa7uC,IAAM6uC,EAAa3kD,MAAQ4yB,QAI/C,CAID,GAFA+xB,EAAe,CAAE3kD,MAAO6C,EAAQiT,SAAK77C,GACrCwqF,GAAe,EACXO,EAAY,CAEZ,MAAMhB,EAAY7hC,EAAUjS,oBACtB+zC,EAAYc,EAAU70C,oBACtBw2B,EAAOt1C,EAAK8e,oBACZ+0C,EAAiB5uF,KAAK0tF,oBAAoB3+D,EAAU4+D,EAAWtd,EAAMud,EAAWnlF,GAClF,CAACo/E,GAAWE,IAAWvzE,SAASo6E,GAChCN,EAAa7uC,IAAM6uC,EAAa3kD,MAAQ4yB,EAGxC+xB,EAAa7uC,IAAM6uC,EAAa3kD,MAAQ4yB,CAEhD,MACUyxB,EAYDS,IAGLH,EAAa7uC,IAAM6uC,EAAa3kD,MAAQ4yB,EACxC6xB,GAAe,GAXXE,EAAa7uC,KAHZ8uC,GAA+B,IAAN9lF,IAAYimF,EAGnBJ,EAAa3kD,MAAQ4yB,EAIrB+xB,EAAa3kD,MAAQ4yB,EAShD8xB,EAAWn5E,KAAKo5E,EACpB,MAIAF,GAAe,EAInBG,EAAwBE,CAC5B,CAEA,MAAMI,EAAYR,EAAWA,EAAWxoF,OAAS,GAIjD,OAHIgpF,QAA+BjrF,IAAlBirF,EAAUpvC,MACvBovC,EAAUpvC,IAAMovC,EAAUllD,MAAQ4yB,GAE/B8xB,CACX,CAEA,SAAAS,CAAU/3D,GACN/2B,KAAK6wB,MAAMxb,SAAS0lB,IAChB,MAAM7G,EAAO6G,EAAKoW,UAClB,GAAIjd,EAAM,CACN,MAAMsY,EAASzR,EAAK4X,WACpBze,EAAKgX,mBAAmBsB,EAAQA,GAChCtY,EAAK3c,WAAWwf,GAAKvgB,MACzB,IACDxW,KACP,CAEA,aAAA+uF,CAAch4D,GACV,MAAMi4D,EAAuB,CAAC,IAAK,IAAK,KAAM,KAAM,MAC9CjD,EAAY/rF,KAAK6wB,MAAM,GAC7B,IAAIs8D,EAAQntF,KAAKktF,iBACjB,MAAMhB,EAAaH,EAAUp5C,WACvBs8C,EAAgBjvF,KAAKipC,eAAeqzB,WAAat8D,KAAK6qC,eAE5D,IAAK,IAAIpiC,EAAI,EAAGA,EAAIumF,EAAqBnpF,SAAU4C,EAAG,CAClD,MAAMsmB,EAAWigE,EAAqBvmF,GAChCymF,EAAYlvF,KAAKkuF,aAAan/D,GACpC,IAAK,IAAIi3B,EAAI,EAAGA,EAAIkpC,EAAUrpF,SAAUmgD,EAAG,CACvC,MAAMmpC,EAAYD,EAAUlpC,GACtBopC,EAAaD,EAAUxlD,MACvB0lD,EAAarvF,KAAK6rF,UAAUuD,EAAYlD,EAAYiB,EAAOntF,KAAK6qF,OAChEyE,EAAYH,EAAU1vC,IAC5B,IAAI6vC,EAWA,MAAM,IAAInsF,EAAa,cAAe,wBAX3B,CACX,MAAMosF,EAAYvvF,KAAK6rF,UAAUyD,EAAWpD,EAAYiB,EAAOntF,KAAK6qF,OACpE9zD,EAAIQ,YACJR,EAAIS,OAAO43D,EAAYC,GACvBt4D,EAAIU,OAAO23D,EAAYC,EAAaJ,GACpCl4D,EAAIU,OAAO63D,EAAY,EAAGC,EAAYN,GACtCl4D,EAAIU,OAAO63D,EAAY,EAAGC,GAC1Bx4D,EAAI8f,YACJ9f,EAAIa,MACR,CAIJ,CACAu1D,GAAyB,IAAhB8B,CACb,CACJ,CAEA,SAAAx1C,GACI,OAAOz5C,IACX,CAMA,UAAA25C,GACQ35C,KAAK45C,gBAGL32C,EAAUjD,KAAK6wB,MAAM,KAAO7wB,KAAKipC,eAAe0hD,WAChD3qF,KAAK4sF,qBAGL5sF,KAAK8rF,iBAET9rF,KAAKotF,sBACLptF,KAAK45C,eAAgB,EACzB,CAEA,IAAApjC,GACI,MAAMugB,EAAM/2B,KAAKuW,eACjBvW,KAAK+W,cACD/W,KAAKkpF,aAEJlpF,KAAK45C,eACN55C,KAAK25C,aAET35C,KAAK8uF,UAAU/3D,GACf/2B,KAAKuV,aACLwhB,EAAI6V,UAAU,OAAQ5sC,KAAKuT,aAAa,OACxCvT,KAAK+uF,cAAch4D,GACnBA,EAAI+V,aACJ9sC,KAAKoW,eACT,EC9yBG,MAAMo5E,WAAiB9sF,GAC1B,mBAAWhB,GACP,OAAOG,EAAS2tF,QACpB,CACA,WAAA/tF,CAAY+Q,EAAMlE,EAAMmiC,GACpBltC,MAAM,CAAEwrB,SAAU,MAClB/uB,KAAKwS,KAAOA,EACZ,MAAMic,EAAO,IAAIq8C,GAAKt4D,EAAMlE,EAAMmiC,GAClCzwC,KAAKyuB,KAAOA,EAAKA,KACjBzuB,KAAKywC,WAAahiB,EAAKgiB,WACvBzwC,KAAKsO,UAAgB1K,IAAT0K,EAAqB,UAAYA,EAC7CtO,KAAK66B,SAAS3K,EAAMG,SAASrwB,KAAKyuB,KAAKprB,KAAMynE,GAAK9sB,SAASh+C,KAAKsO,MAAO,YAAYtO,KAAKsO,SAExFtO,KAAKu3C,cAAe,CACxB,CAEA,OAAAsJ,CAAQruC,EAAMlE,EAAMmiC,GAChBzwC,KAAKwS,KAAOA,EACZxS,KAAKsO,KAAOA,EACZ,MAAMmgB,EAAO,IAAIq8C,GAAKt4D,EAAMlE,EAAMmiC,GAIlC,OAHAzwC,KAAKyuB,KAAOA,EAAKA,KACjBzuB,KAAKywC,WAAahiB,EAAKgiB,WACvBzwC,KAAK66B,SAAS3K,EAAMG,SAASrwB,KAAKyuB,KAAKprB,KAAMynE,GAAK9sB,SAASh+C,KAAKsO,MAAO,YAAYtO,KAAKsO,SACjFtO,IACX,CAEA,OAAAgtE,GACI,OAAOhtE,KAAKyuB,IAChB,CACA,SAAAgrB,GAEI,OADAz5C,KAAK05C,cAAe,EACb15C,IACX,CAEA,IAAAwW,GACI,MAAMgiB,EAAQx4B,KAAKu5B,aACbxC,EAAM/2B,KAAKuW,eACjBvW,KAAK+W,cACL,MAAM04E,EAAQzvF,KAAKi6C,eAKnB,GAJA/pB,EAAM4G,YAAYC,EAAK04D,EAAOj3D,EAAMkM,YAAY1kC,KAAKyuB,KAAKzqB,MAAO8mE,GAAK9sB,SAASh+C,KAAKsO,MAAOtO,KAAKyuB,KAAKprB,KAAM,CACvG/B,SAAU,YAAYtB,KAAKsO,cAGP1K,IAApB5D,KAAKywC,WAA0B,CAC/B,MAAMy6B,EAAa,IAAIh7C,EAAMlwB,KAAKywC,WAAWptC,KAAMrD,KAAKywC,WAAWpb,OACnE61C,EAAW3zD,WAAWwf,GACtBm0C,EAAW3yC,SAASC,GACpB0yC,EAAWtyC,UAAUJ,EAAMkM,YAAY1kC,KAAKywC,WAAWzsC,MAAQw0B,EAAMiB,iBACrEyxC,EAAWxyC,UAAU14B,KAAKywC,WAAW/a,SACrCw1C,EAAW1xC,cAAci2D,EAC7B,CACJ,ECtBJ,MAAMC,WAAkBhtF,GAEpB,mBAAWhB,GACP,OAAOG,EAAS6tF,SACpB,CAEA,WAAAjuF,CAAY25C,GACR73C,MAAM63C,GACNp7C,KAAK6uB,QAAU,CAEX8gE,YAAa,EACbC,aAAc,EAEdj6D,QAAS,GAGb31B,KAAK6vF,aAAc,EAEnB7vF,KAAKgE,KAAOo3C,EAAWp3C,MAAQ,EAE/BhE,KAAKyK,OAAS,EAClB,CAEA,OAAAyjD,CAAQlqD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEA,SAAA8vF,CAAUrlF,GAEN,OADAzK,KAAKyK,OAASA,EACPzK,IACX,CAGA,cAAA+vF,CAAeC,GAEX,OADAhwF,KAAK6vF,YAAcG,EACZhwF,IACX,CAEA,SAAAy5C,GAEI,OADAz5C,KAAK05C,cAAe,EACb15C,IACX,CAEA,IAAAwW,GACI,MAAMugB,EAAM/2B,KAAKuW,eACXiiB,EAAQx4B,KAAKu5B,aACnBv5B,KAAK+W,cACL,MAAMk5E,EAAejwF,KAAKi8B,iBACpBi0D,EAAerV,GAAYC,eAAemV,GAC1CE,EAAUnwF,KAAKi6C,eACfw5B,EAAQyc,EAAeA,EAAalnF,OAASwvB,EAAMxvB,OAASwvB,EAAMnI,WAClExnB,EAAI2vB,EAAMkM,YAAY1kC,KAAKgE,MAAQ,GAAK,GA5EtD,YAAcD,GACN2rF,GAAUjsD,OACV5/B,EAAI,qBAAsBE,EAClC,CA0EQ,CAAE,WAAY/D,KAAK6vF,YAAc,eAAiB,aAAc7vF,KAAKyK,OAAQ,IAAK0lF,EAAU1c,GAxEpG,SAAuB18C,EAAKnI,GACxB,MAAMuhE,EAAUvhE,EAAOuhE,QACjB1c,EAAQ7kD,EAAO6kD,MACf5qE,EAAI+lB,EAAO/lB,EACXunF,EAAcxhE,EAAOnkB,OAAS,EACpCssB,EAAIQ,YACA3I,EAAOyhE,SACPt5D,EAAIS,OAAO24D,EAAStnF,EAAIunF,GACxBr5D,EAAIU,OAAOg8C,EAAO5qE,GAClBkuB,EAAIU,OAAO04D,EAAStnF,EAAIunF,KAGxBr5D,EAAIS,OAAOi8C,EAAO5qE,EAAIunF,GACtBr5D,EAAIU,OAAO04D,EAAStnF,GACpBkuB,EAAIU,OAAOg8C,EAAO5qE,EAAIunF,IAE1Br5D,EAAI5H,SACJ4H,EAAI8f,WACR,CAuDQy5C,CAAcv5D,EAAK,CACfo5D,QAASA,EAAUnwF,KAAK6uB,QAAQ8gE,YAChClc,MAAOA,EAAQzzE,KAAK6uB,QAAQ+gE,aAC5B/mF,EAAGA,EAAI7I,KAAK6uB,QAAQ8G,QACpBlrB,OAAQzK,KAAKyK,OACb4lF,QAASrwF,KAAK6vF,aAEtB,EC3FG,IAAIU,GD6FXb,GAAUjsD,OAAQ,EC5FlB,SAAW8sD,GACPA,EAAcA,EAAyB,UAAI,GAAK,YAChDA,EAAcA,EAAwB,SAAI,GAAK,UAClD,CAHD,CAGGA,KAAkBA,GAAgB,CAAC,IAC/B,MAAMC,WAAc/7E,EACvB,mBAAW/S,GACP,OAAOG,EAAS2uF,KACpB,CACA,mBAAWz2D,GACP,OAAOw2D,EACX,CACA,yBAAWv2D,GACP,MAAO,CACHy2D,SAAUF,GAAcG,UACxBC,QAASJ,GAAcK,SAE/B,CAOA,WAAAnvF,CAAYovF,EAAMC,EAAIjiE,GAClBtrB,QACAvD,KAAKipC,eAAiB5oC,OAAO2X,OAAO,CAAEmoC,UAAW,EAAGzqB,QAAS,EAAGC,QAAS,GAAIhB,SAAU47D,GAAcG,UAAWK,aAAcR,GAAcG,UAAWM,QAAQ,EAAOC,IAAK,CACnK,CAAEttF,EAAG,EAAGkF,EAAG,IACX,CAAElF,EAAG,EAAGkF,EAAG,MACVgmB,GACT7uB,KAAK6wF,KAAOA,EACZ7wF,KAAK8wF,GAAKA,CACd,CACA,QAAAx5B,CAASu5B,EAAMC,GACX,IAAKD,IAASC,EACV,MAAM,IAAI3tF,EAAa,eAAgB,kDAI3C,OAFAnD,KAAK6wF,KAAOA,EACZ7wF,KAAK8wF,GAAKA,EACH9wF,IACX,CAIA,SAAAg4D,GACI,OAAQh4D,KAAK6wF,OAAS7wF,KAAK8wF,EAC/B,CACA,WAAAI,CAAYtiE,GACR,MAAMmI,EAAM/2B,KAAKuW,eACXmf,EAAU11B,KAAKipC,eAAevT,QAC9BC,EAAU31B,KAAKipC,eAAetT,QAAU/G,EAAOsT,UAC/CivD,EAAUviE,EAAOuiE,QAAUz7D,EAC3B07D,EAAUxiE,EAAOwiE,QAAUz7D,EAC3B07D,EAASziE,EAAOyiE,OAAS37D,EACzB47D,EAAS1iE,EAAO0iE,OAAS37D,EACzBwqB,EAAYngD,KAAKipC,eAAekX,UAChC8wC,EAAMjxF,KAAKipC,eAAegoD,KACxBttF,EAAG4tF,EAAM1oF,EAAG2oF,GAASP,EAAI,IACzBttF,EAAG+8D,EAAM73D,EAAG83D,GAASswB,EAAI,GAC3BQ,GAAcJ,EAASF,IAAYF,EAAIprF,OAAS,GACtDkxB,EAAIQ,YACJR,EAAIS,OAAO25D,EAASC,GACpBr6D,EAAIY,cAAcw5D,EAAUM,EAAaF,EAAMH,EAAUI,EAAO5iE,EAAOsT,UAAWmvD,EAASI,EAAa/wB,EAAM4wB,EAAS3wB,EAAO/xC,EAAOsT,UAAWmvD,EAAQC,GACxJv6D,EAAIY,cAAc05D,EAASI,EAAa/wB,EAAM4wB,GAAU3wB,EAAOxgB,GAAavxB,EAAOsT,UAAWivD,EAAUM,EAAaF,EAAMH,GAAWI,EAAOrxC,GAAavxB,EAAOsT,UAAWivD,EAASC,GACrLr6D,EAAI5H,SACJ4H,EAAI8f,YACJ9f,EAAIa,MACR,CACA,IAAAphB,GACIxW,KAAKuW,eACLvW,KAAK+W,cACL,MAAM8gD,EAAa73D,KAAK6wF,KAClBvlC,EAAYtrD,KAAK8wF,GACvB,IAAIK,EACAE,EACAD,EACAE,EACAzmD,EAAiB,EACjB4Z,EAAS,QACTitC,EAAa,QACjB,SAASj2D,EAAY9G,GACjB,MAA2B,iBAAbA,EAAwB67D,GAAMx2D,eAAerF,GAAYA,CAC3E,CACA,MAAMA,EAAW8G,EAAYz7B,KAAKipC,eAAetU,UAC3Co8D,EAAet1D,EAAYz7B,KAAKipC,eAAe8nD,cAWrD,GAVIp8D,IAAa47D,GAAcK,WAC3BnsC,EAAS,OACTitC,EAAa,QAEbX,IAAiBR,GAAcG,UAC/BgB,EAAa,QAERX,IAAiBR,GAAcK,WACpCc,EAAa,QAEb75B,EACAs5B,EAAUt5B,EAAW5Z,eACrBpT,EAAiBgtB,EAAW7mB,mBAC5BogD,EAAUv5B,EAAWvkB,iBAAiBmR,OAErC,CAED0sC,EADc7lC,EAAU/xB,aACRq/B,eAChBw4B,EAAU9lC,EAAUhY,iBAAiBmR,EACzC,CACA,GAAI6G,EACA+lC,EAAS/lC,EAAUnN,cACnBtT,EAAiBygB,EAAUta,mBAC3BsgD,EAAShmC,EAAUhY,iBAAiBo+C,OAEnC,CAEDL,EADcx5B,EAAWt+B,aACVs/B,aACfy4B,EAASz5B,EAAWvkB,iBAAiBo+C,EACzC,CAQA,OAPA1xF,KAAKkxF,YAAY,CACbC,UACAE,SACAD,UACAE,SACApvD,UAAW2I,IAAiD,IAA/B7qC,KAAKipC,eAAe+nD,QAAmB,EAAI,MAErE,CACX,EC5HJ,SAAS,MAAKjtF,GACN4tF,GAAOluD,OACP5/B,EAAI,kBAAmBE,EAC/B,CAOA,SAAS6tF,GAAe3wF,GACpB,GAAI,kBAAmBA,EACnB,OAAOA,EAAE4wF,cACb,GAAI,YAAa5wF,EACb,OAAO2wF,GAAe3wF,EAAE6wF,SAC5B,MAAMA,EAAU7wF,EAChB,OAAuB,IAAnB6wF,EAAQjsF,OACD+rF,GAAeE,EAAQ,IACX,IAAnBA,EAAQjsF,OACD,KACJisF,EAAQ79E,IAAI29E,GACvB,CAIA,MAAMD,GAGF,WAAAlwF,CAAYswF,GACR/xF,KAAK+xF,QAAUA,EACf/xF,KAAKgE,KAAO,GACZhE,KAAKisD,IAAM,EACXjsD,KAAKgyF,UA5BQ,CA6BjB,CAIA,KAAAzpF,CAAMvE,GACFhE,KAAKgE,KAAOA,EACZhE,KAAKisD,IAAM,EACXjsD,KAAKgyF,UApCQ,EAqCb,MAAM7kF,EAASnN,KAAKiyF,OAAOjyF,KAAK+xF,QAAQxwC,SAExC,OADAp0C,EAAO6kF,SAAWhyF,KAAKgyF,SAChB7kF,CACX,CACA,SAAA+kF,CAAUC,IAzCO,IA0CTnyF,KAAKgyF,WACLhyF,KAAKgyF,SAAWhyF,KAAKisD,KACzBjsD,KAAKisD,IAAMkmC,CACf,CACA,YAAAC,GACIpyF,KAAKgyF,UA/CQ,CAgDjB,CAGA,UAAAK,CAAWC,EAAOC,GAAU,GACxB,MAAMC,EAASD,EAAU,IAAIE,OAAO,MAAQH,EAAQ,MAAQ,IAAIG,OAAO,MAAQH,EAAQ,UAEjFnlF,EADcnN,KAAKgE,KAAKE,MAAMlE,KAAKisD,KACd1qB,MAAMixD,GACjC,OAAe,OAAXrlF,EACO,CACHulF,SAAS,EACTb,cAAe1kF,EAAO,GACtBwlF,aAAcxlF,EAAO,GAAGtH,OACxBomD,IAAKjsD,KAAKisD,KAIP,CAAEymC,SAAS,EAAOzmC,IAAKjsD,KAAKisD,IAE3C,CAKA,SAAA2mC,CAAUC,EAAMC,GAAQ,GACpB,MAAMhB,EAAU,GACV7lC,EAAMjsD,KAAKisD,IACjB,IAAI8mC,GAAa,EACbC,GAAW,EAGf,GAFAF,GAAkB,IAAVA,IAAiC,IAAfD,EAAKC,MAE3BD,EAAKZ,OACL,IAAK,MAAMhlF,KAAQ4lF,EAAKZ,OAAQ,CAC5B,MAAMgB,EAAWjzF,KAAKisD,IAChB9+C,EAASnN,KAAKiyF,OAAOhlF,GAG3B,GAAIE,EAAOulF,SAGP,GAFAZ,EAAQ58E,KAAK/H,GACb6lF,GAAW,EACPH,EAAKK,GACL,WAIJ,GADAH,GAAa,GACRF,EAAKK,GAAI,CACVlzF,KAAKisD,IAAMgnC,EACX,KACJ,CAER,CAEJ,MAAME,EAAUN,EAAKK,IAAMF,GAAaD,EAClCL,EAAUS,IAAoB,IAAVL,EACpBM,EAAaD,EAAS,EAAI,EAShC,OARIL,IAAUK,IACVnzF,KAAKisD,IAAMA,GACXymC,EACA1yF,KAAKoyF,eAGLpyF,KAAKkyF,UAAUjmC,GAEZ,CAAEymC,UAASZ,UAASsB,aAC/B,CAGA,eAAAC,CAAgBR,EAAMC,GAAQ,GAC1B,MAAMhB,EAAU,GACV7lC,EAAMjsD,KAAKisD,IACjB,IAAImnC,EAAa,EACbE,GAAO,EACX,EAAG,CACC,MAAMnmF,EAASnN,KAAK4yF,UAAUC,GAC1B1lF,EAAOulF,SAAWvlF,EAAO2kF,SACzBsB,IACAtB,EAAQ58E,KAAK/H,EAAO2kF,UAGpBwB,GAAO,CAEf,OAASA,GACT,MAAMZ,EAAUU,EAAa,IAAe,IAAVN,EASlC,OARIA,GAAWM,EAAa,IACxBpzF,KAAKisD,IAAMA,GACXymC,EACA1yF,KAAKoyF,eAGLpyF,KAAKkyF,UAAUjmC,GAEZ,CAAEymC,UAASZ,UAASsB,aAC/B,CAEA,gBAAAG,CAAiBV,GACb,OAAO7yF,KAAKqzF,gBAAgBR,GAAM,EACtC,CAIA,MAAAZ,CAAOuB,GAEH,GADA,GAAE,4BAA6BA,IAC1BA,EACD,MAAM,IAAIrwF,EAAa,yBAE3B,IAAIgK,EAOJ,MAAM0lF,EAAOW,EAASC,KAAKzzF,KAAK+xF,QAAnByB,GACb,GAAIX,EAAKP,MAILnlF,EAASnN,KAAKqyF,WAAWQ,EAAKP,OAAwB,IAAjBO,EAAKN,SACtCplF,EAAOulF,UAGP1yF,KAAKisD,KAAO9+C,EAAOwlF,kBAGtB,KAAIE,EAAKZ,OAcV,MADA,GAAEY,GACI,IAAI1vF,EAAa,gDAAkD0vF,GAXrE1lF,EADA0lF,EAAKa,UACI1zF,KAAKqzF,gBAAgBR,GAEzBA,EAAKc,WACD3zF,KAAKuzF,iBAAiBV,GAGtB7yF,KAAK4yF,UAAUC,EAMhC,CAIA,MAAMe,EAAU,GAQhB,OAPAzmF,EAAOymF,QAAUA,EACbzmF,EAAO2kF,SACP3kF,EAAO2kF,QAAQz8E,SAASpU,GAAM2yF,EAAQ1+E,KAAK08E,GAAe3wF,MAE1D4xF,EAAKgB,KAAO1mF,EAAOulF,SACnBG,EAAKgB,IAAI,CAAED,YAERzmF,CACX,ECtMJ,SAAS,MAAKpJ,GACN+vF,GAAUrwD,OACV5/B,EAAI,qBAAsBE,EAClC,CDqMA4tF,GAAOluD,OAAQ,ECpMR,MAAMswD,GACT,WAAAtyF,CAAYozC,GACR70C,KAAK60C,QAAUA,CACnB,CACA,KAAA0M,GACI,OAAOvhD,KAAKs2B,IAChB,CACA,IAAAA,GACI,MAAO,CACH27D,OAAQ,CAACjyF,KAAKg0F,MAAOh0F,KAAKi0F,OAAQj0F,KAAKk0F,KAE/C,CACA,KAAAF,GACI,MAAO,CACH/B,OAAQ,CAACjyF,KAAKm0F,YAAan0F,KAAKo0F,QAChCP,IAAK,IAAM7zF,KAAK60C,QAAQw/C,cAEhC,CACA,MAAAJ,GACI,MAAO,CACHhC,OAAQ,CAACjyF,KAAKs0F,MAAOt0F,KAAKg0F,OAC1BL,YAAY,EAEpB,CACA,MAAAS,GACI,MAAO,CACHnC,OAAQ,CAACjyF,KAAKu0F,SAAUv0F,KAAKogD,KAAMpgD,KAAKw0F,KAAMx0F,KAAKy0F,MAE3D,CACA,WAAAN,GACI,MAAO,CACHlC,OAAQ,CAACjyF,KAAK00F,MAAO10F,KAAK20F,YAC1BzB,IAAI,EAEZ,CACA,KAAAwB,GACI,MAAO,CACHzC,OAAQ,CAACjyF,KAAK40F,OAAQ50F,KAAK60F,MAAO70F,KAAK80F,QAEvCjB,IAAMlwD,GAAU3jC,KAAK60C,QAAQkgD,SAASpxD,EAAMiwD,QAAQ,IAE5D,CACA,KAAAiB,GACI,MAAO,CACH5C,OAAQ,CAACjyF,KAAKg1F,MACdtB,WAAW,EAEnB,CACA,IAAAsB,GACI,MAAO,CACH/C,OAAQ,CAACjyF,KAAKi1F,SAAUj1F,KAAKk1F,WAAYl1F,KAAKm1F,QAEtD,CACA,UAAAR,GACI,MAAO,CACH1C,OAAQ,CAACjyF,KAAKi1F,SAAUj1F,KAAKk1F,WAAYl1F,KAAKm1F,QAC9CtB,IAAMlwD,IAEF,MAAMv7B,EAAIu7B,EACV3jC,KAAK60C,QAAQugD,cAAchtF,EAAEwrF,QAAQ,GAAIxrF,EAAEwrF,QAAQ,GAAIxrF,EAAEwrF,QAAQ,GAAG,EAGhF,CACA,UAAAsB,GACI,MAAO,CACHjD,OAAQ,CAACjyF,KAAKq1F,WAAYr1F,KAAKs1F,aAC/BxC,OAAO,EACPI,IAAI,EAEZ,CACA,IAAAsB,GACI,MAAO,CACHvC,OAAQ,CAACjyF,KAAKu1F,KACd5B,YAAY,EAEZE,IAAMlwD,GAAU3jC,KAAK60C,QAAQ2gD,YAAY7xD,EAAMiwD,SAEvD,CACA,IAAAxzC,GACI,MAAO,CACH6xC,OAAQ,CAACjyF,KAAKy1F,MAAOz1F,KAAK01F,WAAY11F,KAAK21F,OAC3C7C,OAAO,EAEPe,IAAMlwD,GAAU3jC,KAAK60C,QAAQ+gD,YAAYjyD,EAAMiwD,QAAQ,IAE/D,CACA,QAAAW,GACI,MAAO,CACHtC,OAAQ,CAACjyF,KAAKy1F,MAAOz1F,KAAK61F,WAC1B/C,OAAO,EAEPe,IAAMlwD,GAAU3jC,KAAK60C,QAAQihD,gBAAgBnyD,EAAMiwD,QAAQ,IAEnE,CACA,IAAAa,GACI,MAAO,CACHxC,OAAQ,CAACjyF,KAAK+1F,SAAU/1F,KAAKg2F,OAAQh2F,KAAKi2F,QAASj2F,KAAKk2F,UACxDpD,OAAO,EAEf,CACA,OAAAmD,GACI,MAAO,CACHhE,OAAQ,CAACjyF,KAAKs0F,MAAOt0F,KAAKg2F,QAC1BrC,YAAY,EAEpB,CACA,MAAAqC,GAEI,MAAO,CACH/D,OAAQ,CAACjyF,KAAKm2F,IAAKn2F,KAAKo2F,OAAQp2F,KAAKq2F,KAErCxC,IAAMlwD,GAAU3jC,KAAK60C,QAAQyhD,cAAc3yD,EAAMiwD,QAAQ,GAAYjwD,EAAMiwD,QAAQ,GAJ1D1vF,MAAM,GAAI,IAM3C,CACA,GAAAmyF,GACI,MAAO,CACHpE,OAAQ,CAACjyF,KAAKu2F,KAAMv2F,KAAKw2F,MACzBtD,IAAI,EAEZ,CACA,GAAAiD,GACI,MAAO,CAAE7D,MAAO,uBACpB,CACA,IAAAkE,GACI,MAAO,CAAElE,MAAO,cACpB,CACA,IAAAiE,GACI,MAAO,CAAEjE,MAAO,cACpB,CACA,QAAA2C,GACI,MAAO,CAAE3C,MAAO,WACpB,CACA,MAAA6C,GACI,MAAO,CAAE7C,MAAO,SACpB,CACA,WAAAgD,GACI,MAAO,CAAEhD,MAAO,cACpB,CACA,UAAA+C,GACI,MAAO,CAAE/C,MAAO,8CACpB,CACA,SAAAuD,GACI,MAAO,CAAEvD,MAAO,YACpB,CACA,KAAAqD,GACI,MAAO,CAAErD,MAAO,eACpB,CACA,MAAAsC,GACI,MAAO,CAAEtC,MAAO,MACpB,CACA,MAAAwC,GACI,MAAO,CAAExC,MAAO,MACpB,CACA,KAAAgC,GACI,MAAO,CAAEhC,MAAO,MACpB,CACA,GAAAiD,GACI,MAAO,CAAEjD,MAAO,MACpB,CACA,KAAAmD,GACI,MAAO,CAAEnD,MAAO,MACpB,CACA,UAAAoD,GACI,MAAO,CAAEpD,MAAO,OACpB,CACA,MAAA8D,GACI,MAAO,CAAE9D,MAAO,MACpB,CACA,QAAAyD,GACI,MAAO,CAAEzD,MAAO,MACpB,CACA,QAAA4D,GACI,MAAO,CAAE5D,MAAO,MACpB,CACA,GAAA4B,GACI,MAAO,CAAE5B,MAAO,IACpB,EAEG,MAAMmE,GACT,WAAAh1F,CAAYstB,GACR/uB,KAAK02F,MAAQ,GACb12F,KAAKk7C,KAAO,EACZl7C,KAAK6uB,QAAU,CAAC,EAChB7uB,KAAK+uB,SAAWA,CACpB,EAEG,MAAM4nE,GACT,WAAAl1F,CAAYhC,GACRO,KAAK42F,YAAc,GACnB52F,KAAKP,QAAUA,EACfO,KAAKo4B,OACT,CACA,KAAAA,CAAMvJ,GACF7uB,KAAK6uB,QAAUxuB,OAAO2X,OAAO,CAAEkc,KAAM,OAAQzF,KAAM,UAAYI,GAC/D7uB,KAAK62F,SAAW,CAAEhmE,MAAO,GAAIlU,YAAa,IAC1C3c,KAAK82F,gBAAkB,IACvB92F,KAAK+2F,YACT,CACA,UAAA5hD,GACI,OAAOn1C,KAAKP,OAChB,CACA,WAAAu3F,GACI,OAAOh3F,KAAK62F,QAChB,CACA,aAAAI,CAAcC,GACVl3F,KAAK42F,YAAY1hF,KAAKgiF,EAC1B,CACA,UAAAH,GACI,GAAE,cACF/2F,KAAKm3F,MAAQ,IAAIV,GAAMz2F,KAAK82F,gBAChC,CACA,WAAAtB,CAAYt6C,GACR,GAAE,eAAgBA,GACdA,IACAl7C,KAAKm3F,MAAMj8C,KAAOA,EAAKr1C,OAC/B,CACA,eAAAiwF,CAAgB/mE,GACZ,GAAE,mBAAoBA,GACtB/uB,KAAK82F,gBAAkB92F,KAAKm3F,MAAMpoE,SAAWA,GAAY/uB,KAAK82F,eAClE,CACA,WAAAlB,CAAYpjF,GACR,GAAE,eAAgBA,GACdA,IACAxS,KAAKm3F,MAAM3kF,KAAOA,EAC1B,CACA,aAAA8jF,CAAcn2F,EAAKiB,GACf,GAAE,sBAAuBjB,EAAK,SAAUiB,GACxCpB,KAAKm3F,MAAMtoE,QAAQ1uB,GAAOiB,CAC9B,CACA,OAAAg2F,CAAQj3F,EAAK29D,EAAOrhD,GAChB,GAAE,WAAYtc,EAAK29D,EAAOrhD,GAC1Bzc,KAAKm3F,MAAMT,MAAMxhF,KAAK,CAClB/U,IAAKA,EACL29D,QACArhD,UAER,CACA,aAAA24E,CAAcj1F,EAAK29D,EAAOrhD,GACtB,GAAE,iBAAkBtc,EAAK29D,EAAOrhD,GAChCzc,KAAKo3F,QAAQj3F,EAAK29D,EAAOrhD,EAC7B,CAEA,QAAAs4E,CAASlkE,GACL,GAAE,cACsB,iBAAbA,EAAM,GACb7wB,KAAKo1F,cAAcvkE,EAAM,IAGzBA,EAAMxb,SAASzQ,IACPA,GACA5E,KAAKo3F,WAAWxyF,EAAE,IAG9B,GAAE,WACN,CACA,WAAAyvF,GACI,GAAE,eACF,MAAM,QAAE50F,GAAYO,KACpB,IAAKP,EACD,OACJ,MAAMovB,EAAUxuB,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGhY,KAAK6uB,SAAU7uB,KAAKm3F,MAAMtoE,SAGpEqF,EAAOxwB,EAAQmrB,EAAQqF,KAAM,eAAgB,+BAA+B/lB,cAE5EsgB,EAAO/qB,EAAQmrB,EAAQJ,KAAM,eAAgB,+BAA+BtgB,eAC5E,MAAEuoF,EAAK,SAAE3nE,EAAQ,KAAEmsB,EAAI,KAAE1oC,GAASxS,KAAKm3F,MAIvCE,EAAsB56D,GAAM9f,YAC5B3I,EAAO0iF,EAAMziF,KAAKqjF,IACpB,IAAIzpF,EACJ,OAAOypF,EAAUn3F,KACZk3F,EAAoB7iF,SAAoC,QAA1B3G,EAAKypF,EAAUx5B,aAA0B,IAAPjwD,EAAgBA,EAAK,IAAMypF,EAAUx5B,MAAQ,IAC9G,IACAw5B,EAAU76E,MAAM,IAElB41C,EAAqB,SAATn+B,EAEZ6G,EAA2E,MAAnEvoB,aAAmC,EAASA,EAAKrE,eACzD1O,EAAQ83F,UAAU,CAAExoE,WAAUmsB,SAC9Bz7C,EAAQqD,UAAU,CAAEkR,OAAM+a,WAAUmsB,OAAM1oC,OAAMic,OAAM4jC,cACvDA,GACDt3B,EAAKy0B,iBAA0B,OAATt7B,EAAgB6V,GAAKC,GAAKD,GAAKE,MAEzD,MAAMttB,EAAc,GACpB+5E,EAAMrhF,SAAQ,CAACiiF,EAAWtkF,KACtB,MAAM8qD,EAAQw5B,EAAUx5B,MACxB,GAAqB,iBAAVA,EAAoB,CAC3B,MAAM7iD,EAAaxb,EAAQqC,WAAW,CAAE0Q,KAAMsrD,IAC9C/iC,EAAKgO,YAAY9tB,EAAYjI,GAC7B2J,EAAYzH,KAAK+F,EACrB,MAEI0B,EAAYzH,UAAKtR,EACrB,IAGJ,IAAK,IAAI6E,EAAI,EAAGA,EAAIyyC,EAAMzyC,IACtBrG,GAAIwoD,eAAe,CAAC7vB,GAAO,CAAE8vB,KAAK,IACtC7qD,KAAK42F,YAAYvhF,SAAS6hF,GAAeA,EAAWroE,EAASkM,EAAM/6B,QACnEA,KAAK62F,SAAShmE,MAAM3b,KAAK6lB,GACzB/6B,KAAK62F,SAASl6E,YAAYzH,KAAKyH,GAC/B3c,KAAK+2F,YACT,EAKJ,SAASS,GAAM3oE,EAASkM,QACDn3B,IAAfirB,EAAQtc,IAEZwoB,EAAKtnB,aAAa,KAAMob,EAAQtc,GACpC,CAEA,MAAMklF,GAAsB,UAI5B,SAASC,GAAS7oE,EAASkM,QACDn3B,IAAlBirB,EAAQpc,OAEZoc,EAAQpc,MAAM/J,MAAM+uF,IAAqBpiF,SAAShB,GAAc0mB,EAAKpkB,SAAStC,IAClF,CAIA,MAAMy/E,GACF,WAAAryF,CAAYotB,EAAU,CAAC,GACnB7uB,KAAK23F,SAAW,CACZlpE,KAAM,SACN2qC,KAAM,MACNllC,KAAM,QAEVl0B,KAAKm4B,WAAWtJ,EACpB,CASA,GAAA5oB,CAAI0xF,GAEA,OADA33F,KAAK23F,SAAWt3F,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGhY,KAAK23F,UAAWA,GACzD33F,IACX,CAKA,UAAAm4B,CAAWtJ,GACP,IAAIhhB,EAAI8F,EAER,MAAMlU,EAAUovB,EAAQpvB,QAClBo1C,EAAqC,QAA1BhnC,EAAKghB,EAAQgmB,eAA4B,IAAPhnC,EAAgBA,EAAK,IAAI8oF,GAAQl3F,GAQpF,OAPAO,KAAK6uB,QAAUxuB,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAE4+E,YAAa,CAACY,GAAOE,GAAUvjD,GAAaS,cAAe+W,GAAe/W,eAAgBgjD,cAAc,GAAS/oE,GAAU,CAAEpvB,UACtKo1C,YACJ70C,KAAKP,QAAUA,EACfO,KAAK60C,QAAUA,EACf70C,KAAK+xF,QAAU,IAAIgC,GAAiB/zF,KAAK60C,SACzC70C,KAAK63F,OAAS,IAAIlG,GAAO3xF,KAAK+xF,SACM,QAAnCp+E,EAAK3T,KAAK6uB,QAAQ+nE,mBAAgC,IAAPjjF,GAAyBA,EAAG0B,SAAS6hF,GAAel3F,KAAKi3F,cAAcC,KAC5Gl3F,IACX,CACA,UAAAuX,CAAW/B,GAEP,OADAxV,KAAKP,QAAQ8X,WAAW/B,GACjBxV,IACX,CACA,KAAAuI,CAAMvE,EAAM6qB,EAAU,CAAC,GACnB7uB,KAAK60C,QAAQzc,MAAMvJ,GACnB,MAAM1hB,EAASnN,KAAK63F,OAAOtvF,MAAMvE,GACjC,IAAKmJ,EAAOulF,SAAW1yF,KAAK6uB,QAAQ+oE,aAEhC,MADA,GAAEzqF,GACI,IAAIhK,EAAa,uBAAyBa,GAEpD,OAAOmJ,CACX,CACA,IAAAgwC,CAAKtsB,EAAOhC,GAER,OADA7uB,KAAKP,QAAQ48D,KAAK,CAAExrC,QAAOhC,YACpBgC,CACX,CACA,MAAA6nB,CAAO7nB,EAAOhC,GAEV,OADA7uB,KAAKP,QAAQolF,OAAO,CAAEh0D,QAAOhC,YACtBgC,CACX,CACA,KAAAA,CAAM7sB,EAAM6qB,EAAU,CAAC,GAGnB,OAFAA,EAAUxuB,OAAO2X,OAAO,CAAEyW,KAAMzuB,KAAK23F,SAASlpE,KAAMyF,KAAMl0B,KAAK23F,SAASzjE,MAAQrF,GAChF7uB,KAAKuI,MAAMvE,EAAM6qB,GACV7uB,KAAK60C,QAAQmiD,cAAcnmE,KACtC,CACA,KAAA6W,CAAM7W,EAAOhC,EAAU,CAAC,GAEpB,OADAA,EAAUxuB,OAAO2X,OAAO,CAAEohD,KAAMp5D,KAAK23F,SAASv+B,MAAQvqC,GAC/C7uB,KAAKP,QAAQy5D,MAAMrqC,GAASwsC,aAAaxqC,EACpD,CACA,aAAAomE,CAAcC,GACVl3F,KAAK60C,QAAQoiD,cAAcC,EAC/B,EAEJpD,GAAUrwD,OAAQ,EC1ZlB,MAAMq0D,GAAY,uEACX,MAAMP,WAAkBv0F,GAC3B,mBAAWtB,GACP,OAAOG,EAAS01F,SACpB,CACA,WAAA91F,CAAYs2F,GACR,IAAKA,EACD,MAAM,IAAI50F,EAAa,eAAgB20F,IAE3C,IAAI18C,EACJ,GAAyB,iBAAd28C,EAEP38C,EAAa,CAAErsB,SAAUgpE,OAExB,IAAyB,iBAAdA,EAIZ,MAAM,IAAI50F,EAAa,eAAgB20F,IAHvC18C,EAAa28C,CAIjB,CACAx0F,MAAM63C,GAENp7C,KAAK66B,SAAS,EAClB,CAIA,MAAAyN,GACI,OAAO,CACX,CACA,QAAA/P,CAASC,GAEL,OADAj1B,MAAMg1B,SAASC,GACRx4B,IACX,CAGA,oBAAAo5C,CAAqBC,GAEjB,OAAOr5C,IACX,CACA,SAAAy5C,GAEI,OADAz5C,KAAK05C,cAAe,EACb15C,IACX,CACA,IAAAwW,GAEIxW,KAAK+W,cACL,IAAK,IAAItO,EAAI,EAAGA,EAAIzI,KAAKm3C,UAAUtxC,SAAU4C,EAAG,CAC5C,MAAMqgC,EAAW9oC,KAAKm3C,UAAU1uC,GAC5B1G,EAAa+mC,KACbA,EAASvxB,WAAWvX,KAAKsX,cACzBwxB,EAASxyB,gBAEjB,CACJ,ECvDG,MAAM0hF,WAAkBt1F,GAC3B,mBAAWhB,GACP,OAAOG,EAASm2F,SACpB,CACA,WAAAv2F,CAAYsuB,EAAOqrB,EAAYvsB,GAC3BtrB,MAAM63C,GACNp7C,KAAK6uB,QAAUxuB,OAAO2X,OAAO,CAAEigF,aAAa,EAAOj0F,KAAM,GAAK6qB,GAE9D7uB,KAAKu3C,aAAev3C,KAAK6uB,QAAQopE,YACjCj4F,KAAKgzE,SAASjjD,EAClB,CACA,QAAAijD,CAASjjD,GAGL,OAFA/vB,KAAK+vB,MAAQA,EACb/vB,KAAK66B,SAAS76B,KAAK+vB,MAAM1e,aAAa7G,OAC/BxK,IACX,CACA,cAAAqX,GACI,OAAOrX,KAAK+vB,MAAM1Y,gBACtB,CACA,SAAAoiC,GAKI,OAJKz5C,KAAK05C,cAAgB15C,KAAKs7B,iBAC3Bt7B,KAAKs7B,gBAAgBme,YAEzBz5C,KAAK05C,cAAe,EACb15C,IACX,CACA,aAAAk2D,GACI,MAAMn/B,EAAM/2B,KAAKuW,eACjB,IAAK,IAAI9N,EAAI,EAAGA,EAAIzI,KAAKm3C,UAAUtxC,OAAQ4C,IAAK,CAC5C,MAAMqgC,EAAW9oC,KAAKm3C,UAAU1uC,GAChCqgC,EAASvxB,WAAWwf,GACpB+R,EAASxyB,eACb,CACJ,CAEA,aAAAwmC,GACI,OAAO98C,KAAK+vB,MAAM1e,aAAa7G,KACnC,CACA,IAAAgM,GACI,MAAMgiB,EAAQx4B,KAAKu5B,aACbxC,EAAMyB,EAAMjiB,eAClBvW,KAAK+W,cACL/W,KAAKuV,WAAWwhB,GAChBA,EAAI6V,UAAU,YAAa5sC,KAAKuT,aAAa,OAE7C,MAAMwc,EAAQ/vB,KAAK+vB,MACdA,EAAMzY,cACPyY,EAAMxY,WAAWwf,GAErBhH,EAAMwI,SAASC,GACfzI,EAAM6I,UAAUJ,EAAMkM,YAAY1kC,KAAK6uB,QAAQ7qB,MAAQw0B,EAAMiB,iBAC7D,MAAM91B,EAAI3D,KAAKm4C,kBAAoBn4C,KAAKi6C,eAAiBj6C,KAAKqwB,WAAa,EAAIrwB,KAAKi6C,eACpFlqB,EAAMyJ,cAAc71B,GACpB3D,KAAKk2D,gBACLn/B,EAAI+V,aACJ9sC,KAAKoW,aAAa2gB,EACtB,ECvDG,MAAMz0B,WAAkBQ,GAC3B,mBAAWpB,GACP,OAAOG,EAASS,SACpB,CACA,6BAAWsuD,GACP,OAAO,CACX,CACA,gBAAWsnC,GACP,MAAO,GACX,CACA,WAAAz2F,CAAY25C,GACR73C,MAAMlD,OAAO2X,OAAO,CAAEkkC,iBAAkB7tB,EAAOsD,oBAAsBrvB,GAAU41F,MAAO/7C,UAAW75C,GAAUsuD,oBAAsBxV,IACjIp7C,KAAKm4F,MAAQ/8C,EAAW+8C,QAAS,EACjCn4F,KAAK87D,MAAO,EACZ97D,KAAKyyD,iBACLzyD,KAAKwK,MAAQ,CACjB,CACA,gBAAA6kD,GACI,GAAIrvD,KAAK+vD,wBACL,OAAO/vD,KAAK+vD,wBAEhB,MAAMjU,EAAa97C,KAAKsxB,gBACxB,GAAIwqB,EAAY,CACZ,IAAIs8C,EAAM70F,MAAM8rD,mBAChB,GAAIvT,EAAW5nB,KAAM,CACjB,MAAMmkE,EAAiBr4F,KAAK42D,oBAC5BwhC,GAAOruD,GAAKI,OAASiuD,GAAOC,EAAiBtuD,GAAKI,MACtD,CACA,OAAOiuD,CACX,CACA,OAAO,CACX,CACA,iBAAAxhC,GACI,OAAO52D,KAAKipC,eAAeiT,iBAAmB7tB,EAAOsD,mBACzD,CACA,IAAAnb,GACIjT,MAAMiT,OACNxW,KAAK+W,cACL,MAAMmd,EAAOl0B,KAAKk0B,KAClB,GAAIl0B,KAAKm4F,OAASjkE,EAAM,CACpB,MAAMmkE,EAAiBr4F,KAAK42D,oBAEtB0hC,EAAcD,EAAiB,IACrC,IAAIE,EACJ,MAAMp7C,EAAOn9C,KAAKm9C,KAClB,GAAIA,EAEKA,EAAKvD,eACNuD,EAAKxD,aAET4+C,EAAYv4F,KAAKw4F,yBAAyB,EAAIF,EAAa,EAAIA,EAAa,CACxEpkE,KAAM,EAAIokE,EACVn7C,KAAM,EAAIm7C,QAGb,CACD,MAAMztD,EAAiB7qC,KAAKgxC,mBACtBynD,EAAiBz4F,KAAKszD,oBACtBmD,EAAiBviC,EAAKsX,YAC5B,IAAI7nC,EAAI3D,KAAKi6C,eACTpxC,EAAIgiC,IAAmBd,GAAKE,KAC1BwuD,EAAe/tD,MAAQ+rB,EACvBgiC,EAAe9tD,SAAW8rB,EAChC,MAAMiiC,EAAuB7tD,IAAmBd,GAAKE,KAAOjqC,KAAK87C,WAAWznB,oBAAsBr0B,KAAK87C,WAAW1nB,kBAClH,IAAIukE,EAAiBtqE,EAAO0D,YAC5B4mE,GAAkBA,EAAiB,IACnCA,GAAkBD,EAClB7vF,GAAK8vF,EAAiBN,EAAiBxtD,EACvC,MAAM4kB,EAAU5kB,IAAmBd,GAAKC,GAClC,CACE//B,GAAI,EACJE,GAAI,EACJC,GAAI,GACJC,IAAK,GAEP,CACEJ,IAAK,EACLE,GAAI,EACJC,GAAI,GACJC,GAAI,GAEZ1G,GAAK8rD,EAAQxlD,GAAKquF,EAClBzvF,GAAK4mD,EAAQtlD,GAAKmuF,EAClBC,EAAY,CACRtuF,GAAItG,EACJwG,GAAItB,EACJuB,GAAIzG,EAAI8rD,EAAQrlD,GAAKkuF,EACrBjuF,GAAIxB,EAAI4mD,EAAQplD,GAAKiuF,EAE7B,CAEA,MAAMvhE,EAAM/2B,KAAKuW,eACjBwgB,EAAIthB,OACJshB,EAAI5gB,aAAa,EAAImiF,GACrBvhE,EAAIQ,YACJR,EAAIS,OAAO+gE,EAAUtuF,GAAIsuF,EAAUpuF,IACnC4sB,EAAIU,OAAO8gE,EAAUnuF,GAAImuF,EAAUluF,IACnC0sB,EAAI8f,YACJ9f,EAAI5H,SACJ4H,EAAI1gB,SACR,CACJ,CACA,wBAAAmiF,CAAyBI,EAAiBC,EAAiBC,GACvD,MAAM37C,EAAOn9C,KAAKm9C,KAClB,IAAKA,EACD,MAAM,IAAIh6C,EAAa,SAAU,mCACrC,MAAM41F,EAAa57C,EAAK0tC,MAElB3oB,EADgB/kB,EAAKtsB,MAAMssB,EAAKtsB,MAAMhrB,OAAS,KAAO7F,MAC5B,EAAI,EAC9Bg5F,EAAa/zF,KAAKg0F,KAAKF,EAAa72B,GAEpCg3B,EACEj0F,KAAKw+D,IAAIu1B,GAAcH,EADzBK,EAEEj0F,KAAK0+D,IAAIq1B,GAAcH,EAE/BD,GAAmB54F,KAAKgxC,mBACxB,MAAMmoD,EAAcl0F,KAAKg0F,MAAMC,EAAkBN,GAAmBM,GAC9DE,EAAqBn0F,KAAKw+D,IAAI01B,GAAeL,EAAY5kE,KAAOguC,EAChEm3B,EAAqBp0F,KAAK0+D,IAAIw1B,GAAeL,EAAY5kE,KACzDolE,EAAqBr0F,KAAKw+D,IAAI01B,GAAeL,EAAY37C,KAAO+kB,EAChEq3B,EAAqBt0F,KAAK0+D,IAAIw1B,GAAeL,EAAY37C,KACzDia,EAAQp3D,KAAK2yC,WACb6mD,EAASr8C,EAAKtsB,MAAM,GAAG8hB,WACvB8mD,EAAQt8C,EAAK+vC,kBAAoB91B,EAAQoiC,GAAUT,EAOzD,MANY,CACR9uF,GAAImtD,EAAQgiC,EACZjvF,GAAIsvF,EAAQb,EAAkBS,EAC9BjvF,GAAIgtD,EAAQ8hC,EAAkBh3B,EAASo3B,EACvCjvF,GAAIovF,EAAQP,EAAkBK,EAGtC,ECpIG,MAAMG,WAAmBh3F,GAC5B,mBAAWhB,GACP,OAAOG,EAAS63F,UACpB,CACA,WAAAj4F,CAAYmvB,EAASw6C,EAAeC,GAChC9nE,MAAM,CAAEwrB,SAAU,MAClB/uB,KAAK0wB,aAAe,IAAIy6C,GAAav6C,EAASw6C,EAAeC,GAE7DrrE,KAAKu3C,cAAe,CACxB,CAGA,oBAAA6B,CAAqBC,GAEjB,OAAOr5C,IACX,CACA,SAAAy5C,GAII,OAHAz5C,KAAK05C,cAAe,EACpB15C,KAAK0wB,aAAa6H,SAASv4B,KAAKu5B,cAChCv5B,KAAK66B,SAAS76B,KAAK0wB,aAAaL,YACzBrwB,IACX,CACA,IAAAwW,GACI,MAAMugB,EAAM/2B,KAAKu5B,aAAahjB,eAC9BvW,KAAK+W,cACL/W,KAAK0wB,aAAatnB,KAAKpJ,KAAKi6C,gBAC5Bj6C,KAAK0wB,aAAanZ,WAAWwf,GAC7B/2B,KAAK0wB,aAAala,MACtB,ECrBJ,IAAImjF,GAYG,MAAMC,WAAyBnlF,EAClC,mBAAW/S,GACP,OAAOG,EAAS+3F,gBACpB,CAMA,WAAAn4F,CAAYo4F,EAAoBhrE,GAC5B,IAAIhhB,EACJtK,QACAvD,KAAK85F,GAAK,CAAEv/D,KAAMrwB,IAAKuwB,MAAOvwB,KAC9BlK,KAAK+5F,gBAAiB,EACtB/5F,KAAKg6F,iBAAkB,EACvBh6F,KAAKi6F,kBAAmB,EACxBj6F,KAAKk6F,kBAAmB,EACxBl6F,KAAK65F,mBAAqBA,EAE1B75F,KAAK+5F,eAAiD,iBAAzBlrE,EAAQsrE,aACrCn6F,KAAKg6F,gBAAmD,iBAA1BnrE,EAAQurE,cACtCp6F,KAAKi6F,iBAAqD,iBAA3BprE,EAAQwrE,eACvCr6F,KAAKk6F,iBAAqD,iBAA3BrrE,EAAQyrE,eACvC,MAAM12D,EAAYvV,EAAOC,mBACzBtuB,KAAKipC,eAAiB5oC,OAAO2X,OAAO,CAAEuiF,aAAa,EAAOC,aAAa,EAAMC,aAAc,GAAKC,mBAAsE,QAAjD7sF,EAAK+1B,EAAUjyB,aAAa,uBAAoC,IAAP9D,EAAgBA,EAAKwgB,EAAOsD,oBAAqB3tB,KAAM,EAAGiwE,yBAA0B5lD,EAAO8D,oBAAqBwoE,gBAAiB,EAAGC,2BAA4BvsE,EAAOsD,oBAAqBwoE,aAAc,EAAGC,cAAe,EAAGC,eAAgB,EAAGC,eAAgB,GAAKzrE,GACrb,MAAM4jD,EAAgB7uC,EAAUjyB,aAAa,mBAAoB,GACjE3R,KAAKipC,eAAewxD,aAAehoB,CACvC,CACA,KAAAooB,GACI,OAAO76F,KAAK85F,EAChB,CACA,QAAAvhE,CAASC,GAEL,OADAx4B,KAAKw4B,MAAQA,EACNx4B,IACX,CACA,QAAAk8B,GACI,OAAOl8B,KAAKw4B,KAChB,CACA,UAAAe,GACI,OAAO71B,EAAQ1D,KAAKw4B,MAAO,UAAW,iCAC1C,CACA,QAAAsiE,CAAStiE,EAAOzB,EAAKwD,EAAME,EAAOsgE,GAC9B,MAAMlsE,EAAU7uB,KAAKipC,eACfpgC,EAAI2vB,EAAMkM,YAAY7V,EAAQ7qB,MAC9B+xC,EAA2B,IAAhBtb,EAAQF,GAGzB,IAAIygE,EAFJzgE,GAAQwb,EACRtb,GAASsb,EAGLilD,EADAh7F,KAAKi6F,iBACwC,GAAzBprE,EAAQwrE,eAGc,IAAtBU,EAExB,MAAME,EAAiBpsE,EAAQ8rE,gBACzBhnD,EAAM9qC,EAAIkyF,EACVG,EAAMryF,EAAIkyF,EACVI,EAAe5gE,EAAO0gE,EACtBG,EAAgB3gE,EAAQwgE,EACxBI,EAAUxyF,EAAImyF,EACdM,EAAazyF,EAAImyF,EACvBjkE,EAAIthB,OACJshB,EAAIQ,YACJR,EAAIS,OAAO+C,EAAMoZ,GACjB5c,EAAIU,OAAO0jE,EAAcxnD,GACzB5c,EAAIU,OAAO0jE,EAAcE,GACzBtkE,EAAIU,OAAO2jE,EAAeC,GAC1BtkE,EAAIU,OAAO2jE,EAAeznD,GAC1B5c,EAAIU,OAAOgD,EAAOkZ,GAClB5c,EAAIU,OAAOgD,EAAOygE,GAClBnkE,EAAIU,OAAO2jE,EAAeF,GAC1BnkE,EAAIU,OAAO2jE,EAAeE,GAC1BvkE,EAAIU,OAAO0jE,EAAcG,GACzBvkE,EAAIU,OAAO0jE,EAAcD,GACzBnkE,EAAIU,OAAO8C,EAAM2gE,GACjBnkE,EAAI8f,YACJ9f,EAAIa,MACR,CACA,WAAA2jE,CAAY/iE,EAAOzB,EAAKwD,EAAME,EAAOsgE,GACjC,MAAMS,EAAKv2F,KAAK2C,MAAM5H,KAAK65F,mBAAqB,GAC1Cj1F,EAAI5E,KAAK65F,mBAAqB,EAC9B4B,EAAKx2F,KAAK2C,MAAMhD,EAAI,GACpB82F,EAAK92F,EAAI,EACTiqB,EAAU7uB,KAAKipC,eAGrB0wD,QAAiB/1F,EACjB,MAAM2Y,EAlGd,WACI,IAAKo9E,GAAgB,CACjB,MAAMnnC,EAAW,IAAIhF,GAAS,CAAEz+B,SAAU,IAAK6+B,UAAW,MAC1D+rC,GAAiB,CACbz9C,iBAAkBsW,EAASvpB,eAAeiT,iBAC1C2R,WAAY2E,EAAS3E,WACrBrjD,MAAOgoD,EAASniC,WAExB,CACA,OAAOspE,EACX,CAwFqBgC,GACPC,EAAa/sE,EAAQ+rE,2BACrBiB,EAAat/E,EAAK/R,OAASoxF,EAAar/E,EAAK2/B,kBAC7CxqC,EAAS,CACX,EAAG,CACClH,MAAoB,GAAbqxF,EACPpxF,OAAQswF,GAEZ,EAAG,CACCvwF,MAAOqxF,IAIThpD,EAAU7yC,KAAKk6F,iBAAmBrrE,EAAQyrE,eAAiB,GAEjE,IAAI32F,EAAI42B,EAAwB,IAAhBE,EAAQF,GAAsB,IADhCihE,EAAK9pF,EAAO,GAAGlH,MAAQixF,EAAK/pF,EAAO,GAAGlH,MAAQkxF,EAAKhqF,EAAO,GAAGlH,OAASgxF,EAAKC,EAAKC,EAAK,GAAK7oD,GAExG,MAAM7uC,EAAO6qB,EAAQ7qB,KACfwwD,EAAOh8B,EAAMkM,YAAY1gC,EAAO,GAChC83F,EAAUtjE,EAAMkM,YAAY1gC,GAC5B0wD,EAAUl8B,EAAMkM,YAAY1gC,EAAO,GACzC+yB,EAAIthB,OACJshB,EAAI9gB,eAAe,QACnB8gB,EAAI5gB,aAAa,GACjB,IAAK,IAAI1N,EAAI,EAAGA,EAAI+yF,IAAM/yF,EACtBsuB,EAAIuqB,SAAS39C,EAAGm4F,EAAUpqF,EAAO,GAAGjH,OAAQiH,EAAO,GAAGlH,MAAOkH,EAAO,GAAGjH,QACvEssB,EAAIuqB,SAAS39C,EAAG+wD,EAAUhjD,EAAO,GAAGjH,OAAQiH,EAAO,GAAGlH,MAAOkH,EAAO,GAAGjH,QACvE9G,GAAK+N,EAAO,GAAGlH,MAAQqoC,EAE3B,IAAK,IAAIpqC,EAAI,EAAGA,EAAIgzF,IAAMhzF,EACtBsuB,EAAIuqB,SAAS39C,EAAGm4F,EAAUpqF,EAAO,GAAGjH,OAAQiH,EAAO,GAAGlH,MAAOkH,EAAO,GAAGjH,QACvE9G,GAAK+N,EAAO,GAAGlH,MAAQqoC,EAE3B,IAAK,IAAIpqC,EAAI,EAAGA,EAAIizF,IAAMjzF,EACtBynB,EAAM4G,YAAYC,EAAKpzB,EAAG6wD,EAAMonC,EAAYr/E,EAAKsxC,YACjDlqD,GAAK+N,EAAO,GAAGlH,MAAQqoC,EAE3B9b,EAAI1gB,SACR,CACA,IAAAG,GACI,MAAMugB,EAAM/2B,KAAKuW,eACjBvW,KAAK+W,cACL,MAAMyhB,EAAQx4B,KAAKu5B,aACnB,IAAIgB,EAAO/B,EAAMulB,gBACbtjB,EAAQjC,EAAMs8C,cAKlB,MAAMqC,EAAe3+C,EAAMqQ,aAAayV,GAAsBsC,OAClC,IAAxBu2B,EAAatxE,QAAgB5D,EAAUk1E,EAAa,MACpD58C,GAAQ48C,EAAa,GAAG9mD,YAE5B,MAAMxB,EAAU7uB,KAAKipC,eACjBjpC,KAAK+5F,iBACLx/D,EAAO/B,EAAMxvB,OAAS6lB,EAAQsrE,cAE9Bn6F,KAAKg6F,kBACLv/D,EAAQjC,EAAMxvB,OAASwvB,EAAMnI,WAAaxB,EAAQurE,eAEtDp6F,KAAK85F,GAAGv/D,KAAOA,EACfv6B,KAAK85F,GAAGr/D,MAAQA,EAChB,MAAMsgE,EAAsBlsE,EAAQolD,yBAOpC,GANIplD,EAAQ0rE,YACRv6F,KAAKu7F,YAAY/iE,EAAOzB,EAAKwD,EAAME,EAAOsgE,GAG1C/6F,KAAK86F,SAAStiE,EAAOzB,EAAKwD,EAAME,EAAOsgE,GAEvClsE,EAAQ2rE,YAAa,CACrB,MAAMnoB,EAAW,IAAMryE,KAAK65F,mBACtBkC,EAAU,IAAI3pB,GAAcC,EAAU,GAAG,GAC/C0pB,EAAQ1mE,MAAQxG,EAAQ6rE,mBACxBqB,EAAQrpB,WAAWL,GACnB0pB,EAAQxjE,SAASC,GACjBujE,EAAQ3yF,KAAKmxB,EAAwB,IAAhBE,EAAQF,GAA2D,GAA7CwhE,EAAQ5tD,UAAUpe,MAAM1e,aAAa7G,OAChFuxF,EAAQ5pB,WAAatjD,EAAQ4rE,YAC7BsB,EAAQxkF,WAAWwf,GAAKvgB,MAC5B,CACJ,EC3KJ,SAASwlF,GAAe9qF,EAAMsE,EAAS7R,EAAGkF,EAAGwsB,GACzC,MAAM4mE,EAAaC,GAAazsB,OAAOv+D,GACjC6e,EAAQ,IAAIG,EAAM+rE,EAAW54F,KAAMgyB,EAAO,CAAE/zB,SAAU,iBAE5DyuB,EAAMqJ,OAAO5jB,EAAS7R,GAAKosB,EAAM1e,aAAa7G,MAAQ6jB,EAAO8D,qBAAuB,EAAGtpB,EAC3F,CAQA,MAAMqzF,WAAqBznF,EACvB,mBAAW/S,GACP,OAAOG,EAASq6F,YACpB,CAKA,oBAAOC,CAActrE,GAEjB,OADc,IAAIqrE,GAAarrE,EAEnC,CAEA,sBAAOurE,CAAgBvrE,GACnB,MAAMwrE,EAAQ,IAAIH,GAAarrE,GAG/B,OAFAwrE,EAAMx7C,QAAQq7C,GAAa1pF,KAAK8pF,OAChCD,EAAME,cAAc,cACbF,CACX,CAEA,qBAAOG,CAAe3rE,GAClB,MAAMwrE,EAAQ,IAAIH,GAAarrE,GAG/B,OAFAwrE,EAAMx7C,QAAQq7C,GAAa1pF,KAAKi0C,MAChC41C,EAAME,cAAc,YAAa,aAC1BF,CACX,CACA,WAAA56F,CAAYovB,GACRttB,QACAvD,KAAK6wB,MAAQA,EACb7wB,KAAKwS,KAAO0pF,GAAa1pF,KAAKi0C,KAC9BzmD,KAAKgE,KAAO,EAEZhE,KAAKy8F,oBAAsB,GAC3Bz8F,KAAK08F,oBAAsB,GAC3B18F,KAAKkY,YACLlY,KAAKipC,eAAiB,CAClB0zD,eAAgB,GAChBC,kBAAmB,EACnBC,mBAAoB,EACpBlmD,MAAO,QAEf,CAEA,OAAAkK,CAAQruC,GAKJ,OAJAA,EAAuB,iBAATA,EAAoB0pF,GAAa98C,WAAW5sC,GAAQA,IACtD0pF,GAAa1pF,KAAKi0C,MAAQj0C,GAAQ0pF,GAAa1pF,KAAK8pF,QAC5Dt8F,KAAKwS,KAAOA,GAETxS,IACX,CAKA,aAAAu8F,CAAcO,EAAS76C,GAGnB,OAFAjiD,KAAKy8F,oBAAsBK,GAAW,GACtC98F,KAAK08F,oBAAsBz6C,GAAW,GAC/BjiD,IACX,CAEA,OAAAkuD,CAAQlqD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEA,aAAA+8F,GACI,MAAMhmE,EAAM/2B,KAAKuW,eACjB,IACIymF,EACAC,EAFAC,GAAqB,EAIzBl9F,KAAK6wB,MAAMxb,SAAQ,CAAC0lB,EAAM/nB,EAAO6d,KAC7B,IAAIhjB,EAEJqvF,GAAsBA,EAEtB,MAAMv5F,EAAIo3B,EAAKkf,eACTpxC,EAAIkyB,EAAKxB,aAAa4Z,kBAAkBnzC,KAAKgE,KAAO,GAE1D,GAAIL,EAAIq5F,EACJ,MAAM,IAAI75F,EAAa,uBAAwB,gEAKnD,MAAMg6F,EAAetsE,EAAM7d,EAAQ,KAAO+nB,EACpCqiE,EAAevsE,EAAM7d,EAAQ,KAAO+nB,EAC1C,IAAIrF,EAAU,EACd,MAAML,EAAsH,QAA7GxnB,EAAKwgB,EAAOC,mBAAmB3c,aAAa,gBAAgBurF,EAAqB,OAAS,qBAAkC,IAAPrvF,EAAgBA,EAAKwgB,EAAOsD,oBAChK,GAAIurE,EAGA,GADAxnE,EAAU0nE,EAAe,EAAI,EACzBp9F,KAAKwS,OAAS0pF,GAAa1pF,KAAK8pF,OAAUc,EAgB1CrmE,EAAIQ,YACJR,EAAIS,OAAO7zB,EAAGkF,EAAI7I,KAAKipC,eAAe0zD,gBACtC5lE,EAAIU,OAAO9zB,EAAI+xB,EAAS7sB,GACxBkuB,EAAI5H,SACJ4H,EAAI8f,iBAlBJ,GAAI72C,KAAKy8F,oBAAqB,CAE1B,MAAMhqD,EAAa1b,EAAI2sB,YAAY1jD,KAAKy8F,qBAAqBjyF,MAC7DusB,EAAIwc,SAASvzC,KAAKy8F,oBAAqB94F,EAAI8uC,EAAa,EAAG5pC,GAC3D6sB,EAAU+c,EAAa,EAAIzyC,KAAKipC,eAAe2zD,iBACnD,MAGIZ,GAAe,gBAAiBjlE,EAAKpzB,EAAGkF,EAAGwsB,GAC3CK,EAAU,GAAK11B,KAAKipC,eAAe2zD,uBAc3ClnE,EAAUynE,GAAgB,EAAI,EAE9BpmE,EAAIQ,YACJR,EAAIS,OAAOwlE,EAAQC,GACnBlmE,EAAIU,OAAO9zB,EAAI+xB,EAAS7sB,GACxBkuB,EAAIU,OAAO9zB,EAAGkF,EAAI7I,KAAKipC,eAAe0zD,gBACtC5lE,EAAI5H,SACJ4H,EAAI8f,YAGRmmD,EAASr5F,EAAI+xB,EACbunE,EAASp0F,CAAC,GAElB,CAKA,QAAAw0F,GACI,MAAMtmE,EAAM/2B,KAAKuW,eACjB,IAAI2mF,GAAqB,EAEzBl9F,KAAK6wB,MAAMxb,SAAS0lB,IAChB,IAAIltB,EACJqvF,GAAsBA,EACtB,MAAM1kE,EAAQuC,EAAKxB,aACb51B,EAAIo3B,EAAKkf,eACTpxC,EAAI2vB,EAAM2a,kBAAkBnzC,KAAKgE,KAAO,GACxCqxB,EAAsH,QAA7GxnB,EAAKwgB,EAAOC,mBAAmB3c,aAAa,gBAAgBurF,EAAqB,OAAS,qBAAkC,IAAPrvF,EAAgBA,EAAKwgB,EAAOsD,oBAChK,IAAI8gB,EAAa,EACbyqD,EACIl9F,KAAKy8F,qBACLhqD,EAAa1b,EAAI2sB,YAAY1jD,KAAKy8F,qBAAqBjyF,MACvDusB,EAAIwc,SAASvzC,KAAKy8F,oBAAqB94F,EAAI8uC,EAAa,EAAG5pC,IAG3DmzF,GAAe,gBAAiBjlE,EAAKpzB,EAAGkF,EAAGwsB,GAI3Cr1B,KAAK08F,qBACLjqD,EAAa1b,EAAI2sB,YAAY1jD,KAAK08F,qBAAqBlyF,MACvDusB,EAAIwc,SAASvzC,KAAK08F,oBAAqB/4F,EAAI8uC,EAAa,EAAG5pC,IAG3DmzF,GAAe,gBAAiBjlE,EAAKpzB,EAAGkF,EAAGwsB,EAEnD,GAER,CAEA,IAAA7e,GACI,MAAMugB,EAAM/2B,KAAKuW,eACjBvW,KAAK+W,cACLggB,EAAIthB,OACJshB,EAAI9gB,eAAejW,KAAKipC,eAAe0N,OACvC5f,EAAIhhB,aAAa/V,KAAKipC,eAAe0N,OACrC5f,EAAIvf,QAAQxX,KAAKyX,UApMzB,YAAc1T,GACNm4F,GAAaz4D,OACb5/B,EAAI,wBAAyBE,EACrC,CAkMQ,CAAE,2BACE/D,KAAKwS,OAAS0pF,GAAa1pF,KAAK6nE,SAAWr6E,KAAKwS,OAAS0pF,GAAa1pF,KAAK8pF,OAC3EvlE,EAAI5gB,aAAanW,KAAKipC,eAAe4zD,oBACrC78F,KAAK+8F,iBAEA/8F,KAAKwS,OAAS0pF,GAAa1pF,KAAKi0C,MACrCzmD,KAAKq9F,WAETtmE,EAAI1gB,SACR,EAGJ6lF,GAAaz4D,OAAQ,EACrBy4D,GAAavkF,UAAY,CACrBjJ,OAAQjB,EAAKsE,MACbzD,KAAM,GACNC,OAAQlC,EAAW0iC,KACnBvgC,MAAOlC,EAAUyD,QAGrBmsF,GAAazsB,OAAS,CAClB6tB,cAAe,CACXj6F,KAAM,oBAEVk6F,cAAe,CACXl6F,KAAM,oBAId64F,GAAa1pF,KAAO,CAChBi0C,KAAM,EACN4zB,QAAS,EACTiiB,MAAO,GAGXJ,GAAa98C,WAAa,CACtBr6C,KAAMm3F,GAAa1pF,KAAKi0C,KACxBg0B,QAASyhB,GAAa1pF,KAAK6nE,QAC3BmjB,MAAOtB,GAAa1pF,KAAK8pF,OC9O7B,MAAMmB,GAAQ,CACV,EAAK,aACL,EAAK,cACL,EAAK,cACLtF,MAAO,kBAEJ,MAAMuF,WAAmB1F,GAC5B,mBAAWt2F,GACP,OAAOG,EAAS67F,UACpB,CACA,WAAAj8F,CAAY+Q,EAAM4oC,EAAYvsB,GAK1BtrB,MAHc,IAAI2sB,EADAutE,GAAMjrF,IAAS,aACE6b,EAAOC,mBAAmB3c,aAAa,mBAAoB,IAAK,CAC/FrQ,SAAU,eAEDjB,OAAO2X,OAAO,CAAE+W,SAAU,IAAKsoB,aAAuB,UAAT7kC,GAAoB4oC,GAAavsB,EAC/F,ECHJ,SAAS8uE,GAAc5mE,EAAKysC,EAAIE,EAAIz5D,EAAIE,EAAIC,EAAIC,GAE5C0sB,EAAIQ,YACJR,EAAIS,OAAOgsC,EAAIE,GACf3sC,EAAIU,OAAOxtB,EAAIE,GACf4sB,EAAIU,OAAOrtB,EAAIC,GACf0sB,EAAIU,OAAO+rC,EAAIE,GACf3sC,EAAI8f,YACJ9f,EAAIa,MACR,CACA,MAAMgmE,WAAkBnpF,EACpB,mBAAW/S,GACP,OAAOG,EAAS+7F,SACpB,CAaA,WAAAn8F,CAAYovB,GACRttB,QACAvD,KAAKs3D,SAASzmC,GACd7wB,KAAK+E,KAAO,GACZ/E,KAAKkY,YACLlY,KAAKipC,eAAiB,CAElBkxD,aAAc,EACdC,cAAe,EAEfh4C,WAAY,EAEZy7C,eAAWj6F,EAEXk6F,aAAa,EAEbnnD,WAAO/yC,EAEPm6F,kBAAkB,EAClBC,gBAAgB,EAEhBC,iBAAkB,GAElBC,gBAAiBj5F,KAAKC,GAAK,EAE3Bi5F,uBAAwBP,GAAUQ,qBAAqB5sD,IACvD6sD,mBAAoBT,GAAUn5B,kBAAkBvqC,OAExD,CAEA,OAAA42C,CAAQ/rE,GAEJ,OADA/E,KAAK+E,KAAOA,EACL/E,IACX,CAEA,QAAAs3D,CAASzmC,GACL,IAAKA,EAAMgnC,aAAehnC,EAAMy6B,UAC5B,MAAM,IAAInoD,EAAa,eAAgB,2DAM3C,GAJK0tB,EAAMinC,gBACPjnC,EAAMinC,cAAgB,CAAC,IACtBjnC,EAAMknC,eACPlnC,EAAMknC,aAAe,CAAC,IACtBlnC,EAAMinC,cAAcjyD,SAAWgrB,EAAMknC,aAAalyD,OAClD,MAAM,IAAI1C,EAAa,eAAgB,qDAO3C,OALAnD,KAAK6wB,MAAQA,EACb7wB,KAAK63D,WAAahnC,EAAMgnC,WACxB73D,KAAK83D,cAAgBjnC,EAAMinC,cAC3B93D,KAAKsrD,UAAYz6B,EAAMy6B,UACvBtrD,KAAK+3D,aAAelnC,EAAMknC,aACnB/3D,IACX,CAEA,cAAAs+F,GACI,MAAMvnE,EAAM/2B,KAAKuW,eACX0yB,EAAiBjpC,KAAKipC,eACxBA,EAAe40D,WACf9mE,EAAIqpC,YAAYn3B,EAAe40D,WAE/B50D,EAAemZ,YACfrrB,EAAI5gB,aAAa8yB,EAAemZ,YAEhCnZ,EAAe60D,YACf/mE,EAAIkpC,WAAW,SAGflpC,EAAIkpC,WAAW,SAEvB,CAEA,cAAAs+B,GACI,MAAMxnE,EAAM/2B,KAAKuW,eACjBwgB,EAAIvf,QAAQxX,KAAKyX,UACjB,MACMk/B,EADiB32C,KAAKipC,eACC0N,MACzBA,IACA5f,EAAI9gB,eAAe0gC,GACnB5f,EAAIhhB,aAAa4gC,GAEzB,CAEA,aAAA6nD,CAAcznE,EAAK0nE,EAAKC,GACpB,MAAMC,EAAc3+F,KAAKipC,eAAe80D,kBAAoB/9F,KAAKipC,eAAe+0D,eAC1E/zF,EAAKw0F,EAAI96F,EACTwG,EAAKs0F,EAAI51F,EACTuB,EAAKs0F,EAAI/6F,EACT0G,EAAKq0F,EAAI71F,EAGT+1F,EAAW35F,KAAKkH,MAAM/B,EAAKH,IAAOG,EAAKH,IAAOI,EAAKF,IAAOE,EAAKF,IAC/D00F,GAASD,EAAW5+F,KAAKipC,eAAeg1D,iBAAmB,GAAKW,EACtE,IAAInrB,EACAqrB,EACA7sB,EACA8sB,EACA/+F,KAAKipC,eAAe+0D,gBAAkBW,GACtClrB,EAAQxuE,KAAKgxB,MAAMhsB,GAAMG,EAAKH,GAAM40F,GACpCC,EAAQ75F,KAAKgxB,MAAM9rB,GAAME,EAAKF,GAAM00F,KAGpCprB,EAAQrpE,EACR00F,EAAQz0F,GAERrK,KAAKipC,eAAe80D,kBAAoBY,GACxC1sB,EAAUhoE,GAAMG,EAAKH,IAAO,EAAI40F,GAChCE,EAAU50F,GAAME,EAAKF,IAAO,EAAI00F,KAGhC5sB,EAAUhoE,EACV80F,EAAU50F,GAEVnK,KAAKipC,eAAe0N,QACpB5f,EAAI9gB,eAAejW,KAAKipC,eAAe0N,OACvC5f,EAAIhhB,aAAa/V,KAAKipC,eAAe0N,QAGzC5f,EAAIQ,YACJR,EAAIS,OAAOy6C,EAAS8sB,GACpBhoE,EAAIU,OAAOg8C,EAAOqrB,GAClB/nE,EAAI5H,SACJ4H,EAAI8f,YAEJ,MAAMmoD,EAAa/5F,KAAKihE,MAAM77D,EAAKF,EAAIC,EAAKH,GAEtClB,EAAI9D,KAAK8C,IAAI/H,KAAKipC,eAAeg1D,iBAAmBh5F,KAAKw+D,IAAIzjE,KAAKipC,eAAei1D,kBACvF,IAAIe,EACAC,EACAC,EACAjuB,EACAkuB,EACAhY,GACApnF,KAAKipC,eAAe+0D,gBAAkBW,KACtCM,EAASD,EAAa/5F,KAAKC,GAAKlF,KAAKipC,eAAei1D,gBACpDiB,EAAQ/0F,EAAKnF,KAAKw+D,IAAIw7B,GAAUl2F,EAChCmoE,EAAQ7mE,EAAKpF,KAAK0+D,IAAIs7B,GAAUl2F,EAChCm2F,EAASF,EAAa/5F,KAAKC,GAAKlF,KAAKipC,eAAei1D,gBACpDkB,EAAWh1F,EAAKnF,KAAKw+D,IAAIy7B,GAAUn2F,EACnCq+E,EAAW/8E,EAAKpF,KAAK0+D,IAAIu7B,GAAUn2F,EACnC40F,GAAc5mE,EAAKooE,EAAOjuB,EAAO9mE,EAAIC,EAAI+0F,EAAUhY,KAEnDpnF,KAAKipC,eAAe80D,kBAAoBY,KACxCM,EAASD,EAAah/F,KAAKipC,eAAei1D,gBAC1CiB,EAAQl1F,EAAKhF,KAAKw+D,IAAIw7B,GAAUl2F,EAChCmoE,EAAQ/mE,EAAKlF,KAAK0+D,IAAIs7B,GAAUl2F,EAChCm2F,EAASF,EAAah/F,KAAKipC,eAAei1D,gBAC1CkB,EAAWn1F,EAAKhF,KAAKw+D,IAAIy7B,GAAUn2F,EACnCq+E,EAAWj9E,EAAKlF,KAAK0+D,IAAIu7B,GAAUn2F,EACnC40F,GAAc5mE,EAAKooE,EAAOjuB,EAAOjnE,EAAIE,EAAIi1F,EAAUhY,GAE3D,CAEA,IAAA5wE,GACI,MAAMugB,EAAM/2B,KAAKuW,eACjBvW,KAAK+W,cACL,MAAM8gD,EAAa73D,KAAK63D,WAClBvM,EAAYtrD,KAAKsrD,UACjBriB,EAAiBjpC,KAAKipC,eAC5BlS,EAAIthB,OACJzV,KAAKs+F,iBAEL,IAAIe,EAAiB,CAAE17F,EAAG,EAAGkF,EAAG,GAC5By2F,EAAe,CAAE37F,EAAG,EAAGkF,EAAG,GAC9B7I,KAAK83D,cAAcziD,SAAQ,CAACkqF,EAAa92F,KACrC,MAAM+2F,EAAax/F,KAAK+3D,aAAatvD,GAErC42F,EAAiBxnC,EAAWjuB,mBAAmB,EAAG21D,GAClDD,EAAeh0C,EAAU1hB,mBAAmB,EAAG41D,GAC/C,MAAMC,EAAgBJ,EAAex2F,EAAIy2F,EAAaz2F,EAEtDw2F,EAAe17F,GAAKk0D,EAAWxmD,aAAagrB,WAAa4M,EAAekxD,aACxEmF,EAAa37F,GAAK2nD,EAAUj6C,aAAa+qB,UAAY6M,EAAemxD,cAEpE,MAAMsF,EAAiB7nC,EAAWvmC,gBAAgBjB,WAC1BwnC,EAAWvzB,cAAci7D,GAAa/vE,WACL,IAAlCqoC,EAAW7mB,qBAC9BquD,EAAe17F,GAAK+7F,EAAiBz2D,EAAekxD,cAGjC7uC,EAAUhnB,cAAck7D,GAAYhwE,YACH,IAAlC87B,EAAUta,qBAC5BsuD,EAAa37F,GAAK+7F,EAAiBz2D,EAAemxD,eAGtDiF,EAAex2F,GAAK42F,GAAiB,EAAI,EACzCH,EAAaz2F,GAAK42F,EAAgB,EAAI,EACtCz/F,KAAKw+F,cAAcznE,EAAKsoE,EAAgBC,EAAa,IAEzDvoE,EAAI1gB,UAEJ,MAAMo8B,EAAa1b,EAAI2sB,YAAY1jD,KAAK+E,MAAMyF,MACxCimE,EAAgBxnC,EAAeo1D,mBACrC,IAAI16F,EAAI,EACR,GAAI8sE,IAAkBmtB,GAAUn5B,kBAAkBjqC,KAC9C72B,EAAI07F,EAAe17F,OAElB,GAAI8sE,IAAkBmtB,GAAUn5B,kBAAkBvqC,OAAQ,CAG3Dv2B,GAFgB27F,EAAa37F,EAAI07F,EAAe17F,GACrB,EAAI07F,EAAe17F,EAC/B8uC,EAAa,CAChC,MACSg+B,IAAkBmtB,GAAUn5B,kBAAkB/pC,QACnD/2B,EAAI27F,EAAa37F,EAAI8uC,GAGzB,IAAI5pC,EAAI,EACR,MAAM82F,EAAoB12D,EAAek1D,uBAYzC,OAXIwB,IAAsB/B,GAAUQ,qBAAqB5sD,IACrD3oC,EAAIgvD,EAAWt+B,aAAa2Z,iBAEvBysD,IAAsB/B,GAAUQ,qBAAqBvsD,SAC1DhpC,EAAIgvD,EAAWt+B,aAAa4Z,kBAAkB9kB,EAAO+D,0BAGzD2E,EAAIthB,OACJzV,KAAKu+F,iBACLxnE,EAAIwc,SAASvzC,KAAK+E,KAAMpB,EAAGkF,GAC3BkuB,EAAI1gB,UACGrW,IACX,EAGJ49F,GAAUjmF,UAAYtX,OAAO2X,OAAO,CAAC,EAAGvD,EAAQkD,WAEhDimF,GAAUQ,qBAAuB,CAC7B5sD,IAAK,EACLK,OAAQ,GAEZ+rD,GAAUn5B,kBAAoBA,GCnQvB,MAAMm7B,WAAenrF,EACxB,mBAAW/S,GACP,OAAOG,EAAS+9F,MACpB,CACA,WAAAn+F,CAAYmtB,EAAS,CAAC,GAClBrrB,QACAvD,KAAKm4B,WAAWvJ,GAChB5uB,KAAK6/F,WAAa,GAClB7/F,KAAK8/F,eAAiB,GACtB9/F,KAAK+/F,WAAa,EACtB,CAEA,UAAA5nE,CAAWtJ,EAAU,CAAC,GAClB,IAAKA,EAAQpvB,QACT,MAAM,IAAI0D,EAAa,YAAa,kDAExCnD,KAAKP,QAAUovB,EAAQpvB,QACvBO,KAAK6uB,QAAUxuB,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAEvY,QAASO,KAAKP,QAASkE,EAAG,GAAIkF,EAAG,GAAI2B,MAAO,IAAKw1F,mBAAoB,GAAIC,WAAW,EAAOC,iBAAiB,EAAOC,gBAAgB,EAAOC,iBAAkB,EAAGC,WAAW,GAASxxE,GAAU,CAAEyxE,QAASjgG,OAAO2X,OAAO,CAAEwsE,MAAO,IAAO31D,EAAQyxE,SAAUC,cAAelgG,OAAO2X,OAAO,CAAC,EAAG6W,EAAQ0xE,kBACzS,IAAjCvgG,KAAK6uB,QAAQqxE,sBAAsD,IAAlBrxE,EAAQrkB,QACzDxK,KAAK6uB,QAAQoxE,WAAY,EAEjC,CAEA,IAAAj3F,GACI,OAAOhJ,KAAK6uB,QAAQlrB,CACxB,CAEA,IAAAyF,CAAKzF,GACD3D,KAAK6uB,QAAQlrB,EAAIA,EACjB3D,KAAK6/F,WAAWxqF,SAASjN,IACrBA,EAAEgB,KAAKzF,EAAE,GAEjB,CAEA,IAAAsF,GACI,OAAOjJ,KAAK6uB,QAAQhmB,CACxB,CAEA,IAAAQ,CAAKR,GACD7I,KAAK6uB,QAAQhmB,EAAIA,EACjB7I,KAAK6/F,WAAWxqF,SAASjN,IACrBA,EAAEiB,KAAKR,EAAE,GAEjB,CAEA,SAAA23F,GACI,OAAOxgG,KAAK6/F,UAChB,CAEA,SAAAY,GACI,OAAOzgG,KAAK+/F,UAChB,CAEA,UAAAxoF,CAAW/B,GAGP,OAFAjS,MAAMgU,WAAW/B,GACjBxV,KAAKP,QAAQ8X,WAAW/B,GACjBxV,IACX,CAKA,YAAA0gG,CAAaluF,EAAO,UAMhB,OALAxS,KAAK2gG,UAAY3gG,KAAKP,QAAQ44E,eAAe,CACzCI,UAAWz4E,KAAK6/F,WAAW,GAC3BnnB,aAAc14E,KAAK6/F,WAAW7/F,KAAK6/F,WAAWh6F,OAAS,GACvD2M,SAEGxS,KAAK2gG,SAChB,CAeA,QAAAC,CAAShyE,GACL,IAAI/gB,EACJ,MAAMgzF,EAAexgG,OAAO2X,OAAO,CAAE+7D,UAAU,GAASnlD,EAAOC,SACzD2J,EAAgC,QAAvB3qB,EAAK+gB,EAAO4J,aAA0B,IAAP3qB,EAAgBA,EAAK7N,KAAKP,QAAQ8zE,MAAM,CAAE5vE,EAAG3D,KAAK6uB,QAAQlrB,EAAGkF,EAAG7I,KAAK6uB,QAAQhmB,EAAG2B,MAAOxK,KAAK6uB,QAAQrkB,MAAOqkB,QAASgyE,IAC5JhxB,EAAIxvE,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAE8oF,WAAY,EAAGC,WAAY,EAAGC,kBAAkB,EAAOd,iBAAiB,GAAStxE,GAAS,CAAEC,QAASgyE,IACvI9pE,EAAM/2B,KAAKsX,aAWjB,OAVAu4D,EAAEtoC,OAAOlyB,SAASqyB,IACdA,EACKnwB,WAAWwf,GACXwB,SAASC,GACToP,eACAvyB,SAASilD,GAAaA,EAAS/hC,SAASC,KAC7Cx4B,KAAK+/F,WAAW7qF,KAAKwyB,EAAM,IAE/B1nC,KAAK6/F,WAAW3qF,KAAKsjB,GACrBx4B,KAAK8/F,eAAe5qF,KAAK26D,GAClBr3C,CACX,CAIA,SAAAyoE,CAAU15D,GACN,MAAMxQ,EAAM/2B,KAAKsX,aACjBiwB,EAAOlyB,SAASqyB,IACZA,EAAMnwB,WAAWwf,GACjB/2B,KAAK+/F,WAAW7qF,KAAKwyB,EAAM,GAEnC,CAEA,MAAAhE,GACI,MAAMw9D,EAAkBlhG,KAAK6uB,QAAQyxE,QACrC,IAAIzhB,EAAe,EACnB,MAAMlxC,EAAY,IAAIsuB,GAAUilC,GAChClhG,KAAK2tC,UAAYA,EACjB,IAAI9kC,EAAI7I,KAAK6uB,QAAQhmB,EACjB41D,EAAS,EACb,MAAM0iC,EAAqB,GAC3BnhG,KAAK6/F,WAAWxqF,SAAQ,CAAC+rF,EAAMpuF,KAC3BnK,GAAQu4F,EAAKzpD,MAAM33C,KAAK8/F,eAAe9sF,GAAO8tF,YAC9CM,EAAK/3F,KAAKR,GACVA,GAAQu4F,EAAKzpD,MAAM33C,KAAK8/F,eAAe9sF,GAAO+tF,YAC9Cl4F,GAAQu4F,EAAKzpD,MAAM33C,KAAK6uB,QAAQmxE,oBAC5BhgG,KAAK8/F,eAAe9sF,GAAOguF,mBAC3BG,EAAmBjsF,KAAK,CAAErM,IAAG2vB,MAAO4oE,IACpCv4F,GAAK,IAET41D,EAASx5D,KAAK6E,IAAI20D,EAAQ2iC,EAAKrjD,gBAAgB,IAGnD/9C,KAAK+/F,WAAW1qF,SAASqyB,IACrBA,EAAME,eAAevyB,SAASilD,IAC1B,MAAM9hC,EAAQ8hC,EAASp+B,WACnB1D,GACA8hC,EAAS/hC,SAASC,EAAM,GAC9B,IAGNmV,EAAUuuB,WAAWl8D,KAAK+/F,YAE1B//F,KAAK6/F,WAAWxqF,SAAS+rF,GAASA,EAAKvsB,cAAcpW,KACjDz+D,KAAK6uB,QAAQoxE,WAAajgG,KAAK+/F,WAAWl6F,OAAS,GACnDg5E,EAAelxC,EAAU4xC,0BAA0Bv/E,KAAK+/F,YACxD//F,KAAK6uB,QAAQrkB,MAAQq0E,EAAetL,GAAMtM,cAAgBxI,EAASz+D,KAAK6uB,QAAQlrB,GAChF3D,KAAK6/F,WAAWxqF,SAAS+rF,IACrBA,EAAKvmE,SAAS76B,KAAK6uB,QAAQrkB,MAAM,KAIrCq0E,EAAe7+E,KAAK6uB,QAAQwxE,UACtBrgG,KAAK6uB,QAAQrkB,OAASi0D,EAASz+D,KAAK6uB,QAAQlrB,GAC5C3D,KAAK6uB,QAAQrkB,OAASi0D,EAASz+D,KAAK6uB,QAAQlrB,GAAK4vE,GAAMC,eAE7DxzE,KAAK+/F,WAAWl6F,OAAS,GACzB8nC,EAAUjK,OAAO1jC,KAAK+/F,WAAY//F,KAAK6uB,QAAQqxE,gBAAkB,EAAIrhB,EAAc7+E,KAAK6uB,QAAQ0xE,eAEpG5yD,EAAUgM,aACV,IAAK,IAAIlxC,EAAI,EAAGA,EAAIzI,KAAK6uB,QAAQuxE,iBAAkB33F,IAC/CklC,EAAU42C,KAAK2c,GAEnBlhG,KAAKy+D,OAASA,EACdz+D,KAAKmhG,mBAAqBA,EAC1BnhG,KAAKqhG,MAAQx4F,EACb7I,KAAK0J,YAAc,IAAIf,EAAY3I,KAAK6uB,QAAQlrB,EAAG3D,KAAK6uB,QAAQhmB,EAAG7I,KAAK6uB,QAAQrkB,MAAOxK,KAAKqhG,MAAQrhG,KAAK6uB,QAAQhmB,GACjH0qE,GAAMoE,mBAAmB33E,KAAK6/F,WAClC,CAEA,IAAArpF,GAEI,MAAMugB,EAAM/2B,KAAKuW,eACjB,KAAKvW,KAAK2tC,WAAc3tC,KAAKy+D,QAAWz+D,KAAKqhG,OAAUrhG,KAAKmhG,oBACxD,MAAM,IAAIh+F,EAAa,cAAe,yCAE1CnD,KAAK+W,cACD/W,KAAK6uB,QAAQsxE,gBACblkC,GAAUihB,cAAcnmD,EAAK/2B,KAAK2tC,UAAW3tC,KAAKy+D,OAAQz+D,KAAK6uB,QAAQhmB,EAAG7I,KAAKqhG,OAEnFrhG,KAAKmhG,mBAAmB9rF,SAASjP,IAC7BpG,KAAK+/F,WAAW1qF,SAASqyB,IACrBA,EAAME,eAAevyB,SAASilD,IACtBA,EAASp+B,aAAe91B,EAAEoyB,OAC1B91B,GAAKw3C,YAAYnjB,EAAKujC,EAAUl0D,EAAEyC,EAAE,GAC1C,GACJ,GAEV,EC1GG,MAAM3F,WAAgBF,GACzB,mBAAWtB,GACP,OAAOG,EAASqB,OACpB,CAGA,WAAAzB,CAAY25C,EAAYlK,GAAY,GAChC3tC,MAAM63C,GACNp7C,KAAKshG,cAAgB,GAErBthG,KAAK8xC,eAAiB,IACX9xC,KAAKuhG,UAAUttF,KAAKtQ,GAAMA,EAAE6E,MAAKnD,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IAG1E1E,KAAK2xC,YAAc,IACR3xC,KAAKuhG,UAAUttF,KAAKtQ,GAAMA,EAAE6E,MAAKnD,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IAE1E1E,KAAKwhG,OAAQ,EAGbxhG,KAAKuhG,UAAYnmD,EAAWmmD,WAAa,GAEzCvhG,KAAKipC,eAAiB5oC,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGhY,KAAKipC,gBAAiB,CAExEiT,iBAAkB7tB,EAAO8B,qBAEzB+gB,YAEAuwD,UAAWvwD,EAEXwwD,yBAAyB,EAEzB/rE,QAAS,EAET7F,MAAO,EAEP9gB,KAAM,GAAGvB,EAAKG,UAAUH,EAAKkB,eACjC3O,KAAK87C,WAAaztB,EAAOiD,cAActxB,KAAK+uB,SAAU/uB,KAAK47C,UAC3Dl4C,EAAQ1D,KAAK87C,WAAY,eAAgB,gCAAgC97C,KAAK+uB,uBAAuB/uB,KAAK47C,aAC1G57C,KAAK+uD,YACD3T,EAAWvQ,eACX7qC,KAAKwvD,iBAAiBpU,EAAWvQ,gBAGjC7qC,KAAKwvD,iBAAiBzlB,GAAKC,IAG/BhqC,KAAKwhG,OAAQ,EACbxhG,KAAKwiD,aACT,CACA,KAAApqB,GAII,OAHA70B,MAAM60B,QACFp4B,KAAKw4B,OACLx4B,KAAKu4B,SAASv4B,KAAKw4B,OAChBx4B,IACX,CAGA,QAAA2hG,CAASH,GAGL,OAFAxhG,KAAKwhG,MAAQA,EACbxhG,KAAKwiD,cACExiD,IACX,CAEA,OAAA+wC,GACI,QAAI/wC,KAAKipC,eAAeiI,SAG5B,CAEA,gBAAAme,GACI,MAAMvT,EAAa97C,KAAKsxB,gBACxB,OAAoC,MAAhCtxB,KAAK+vD,wBACE/vD,KAAK+vD,wBAEZjU,EACO97C,KAAKgxC,qBAAuBjH,GAAKC,GAClC8R,EAAWxnB,0BACXwnB,EAAWvnB,4BAEd,CACX,CAEA,WAAAiuB,GACIxiD,KAAKshG,cAAgB,GACrBthG,KAAKwK,MAAQ,EACb,IAAK,IAAI/B,EAAI,EAAGA,EAAIzI,KAAKuhG,UAAU17F,SAAU4C,EAAG,CAC5C,IAAIonB,EAAO7vB,KAAKuhG,UAAU94F,GAAGonB,KACzB7vB,KAAKwhG,QACL3xE,EAAO,IAAMA,EAAO,KACxB,MAAMisB,EAAaztB,EAAOuB,gBAAgBC,EAAK7nB,WAAYhI,KAAKipC,eAAenZ,OAC/E9vB,KAAKshG,cAAcpsF,KAAK4mC,GACxB97C,KAAKwK,MAAQvF,KAAK6E,IAAIgyC,EAAWzrB,WAAYrwB,KAAKwK,MACtD,CAMAxK,KAAK87C,WAAWzrB,SAAW,IAAMrwB,KAAKwK,KAC1C,CAEA,QAAA+tB,CAASC,GACLj1B,MAAMg1B,SAASC,GACf,MAAMzB,EAAMyB,EAAMlhB,aAGlB,GAFAtX,KAAKuX,WAAWwf,GAEZA,EAAK,CACL/2B,KAAKwK,MAAQ,EACb,IAAK,IAAI/B,EAAI,EAAGA,EAAIzI,KAAKshG,cAAcz7F,SAAU4C,EAAG,CAChD,MAAMqzC,EAAa97C,KAAKshG,cAAc74F,GAChC1D,EAAO,GAAK+2C,EAAW/2C,KACF,MAAvBA,EAAKmqB,gBACL6H,EAAIthB,OACJshB,EAAIvf,QAAQxX,KAAKipC,eAAej6B,MAChC8sC,EAAWtxC,MAAQusB,EAAI2sB,YAAY3+C,GAAMyF,MACzCusB,EAAI1gB,UACJylC,EAAWzrB,SAAW,IAAMyrB,EAAWtxC,OAE3CxK,KAAKwK,MAAQvF,KAAK6E,IAAIgyC,EAAWzrB,WAAYrwB,KAAKwK,MACtD,CACAxK,KAAK87C,WAAWzrB,SAAW,IAAMrwB,KAAKwK,KAC1C,CAGA,MAAMohC,EAAK5rC,KAAKuhG,UAAUttF,KAAI,EAAGzL,IAAKxE,KAAWw0B,EAAMkM,YAAYl/B,OAAOxB,GAAQ,KAKlF,OAJAhE,KAAKu8C,MAAM3Q,GACP5rC,KAAKk0B,MACLl0B,KAAKk0B,KAAKqX,WAAWvrC,KAAK4hG,WAAY5hG,KAAK4hG,YAExC5hG,IACX,CAEA,YAAAuoE,GACI,OAAOvoE,KAAKuhG,SAChB,CAGA,kBAAA33D,CAAmBjV,EAAU3hB,GACzB,IAAKhT,KAAK05C,aACN,MAAM,IAAIv2C,EAAa,kBAAmB,wDAE9C,GAAuB,IAAnBnD,KAAK4rC,GAAG/lC,OACR,MAAM,IAAI1C,EAAa,YAAa,yCAExC,IAAIQ,EAAI,EACR,GAAIgxB,IAAamF,GAASC,SAASS,KAC/B72B,GAAI,OAEH,GAAIgxB,IAAamF,GAASC,SAASW,MACpC/2B,EAAI3D,KAAKwK,MAAQ,OAEhB,GAAImqB,IAAamF,GAASC,SAASO,OAAS3F,IAAamF,GAASC,SAASK,MAAO,CAEnFz2B,EADyB3D,KAAK87C,WAAWzrB,WAClB,CAC3B,CACA,MAAO,CACH1sB,EAAG3D,KAAKi6C,eAAiBt2C,EACzBkF,EAAG7I,KAAK4rC,GAAG54B,GAEnB,CAEA,cAAA4pC,GACI,OAAOp3C,OAAOxF,KAAKuhG,UAAU,GAAG/4F,IACpC,CAEA,SAAAixC,GACQz5C,KAAK05C,eAEL15C,KAAKs7B,iBACLt7B,KAAKs7B,gBAAgBme,YAEzBz5C,KAAK05C,cAAe,EACxB,CAEA,QAAA/G,GACI,OAAO3yC,KAAK8vD,iBAChB,CAEA,QAAA8xC,GACI,MAIMC,EAJY7hG,KAAKu5B,aAAa8X,cAIH,GAC3BywD,EAAgB/3D,GAAKC,KAAOhqC,KAAK6qC,gBAFnB,GAEiDg3D,EACrE,OAAO7hG,KAAKu5B,aAAamL,YAAYo9D,EACzC,CAEA,cAAAxuD,GACI,OAAOtzC,KAAK+yC,YAAYrH,YAC5B,CAEA,QAAA4qB,GACI,IAAIzoD,EACJ,MAAM,KAAEsvC,EAAI,WAAErB,EAAY7S,gBAAgB,UAAEiI,IAAiBlxC,KACvDwV,EAAUxV,KAAKuW,eACf49C,EAAyBvwD,MAARu5C,GAAqBjM,EAE5C,GAAI4K,EAAW3nB,MAAQggC,EAAgB,CACnC,MAAM4tC,EAAS/hG,KAAK2yC,WACdqvD,EAAShiG,KAAKgxC,qBAAuBjH,GAAKE,KAExCjqC,KAAK4hG,WAAa5hG,KAAK+yC,YAAYvH,aAAexrC,KAAK87C,WAAa97C,KAAK87C,WAAWznB,oBAAsB,GAE1Gr0B,KAAK4hG,WAAa5hG,KAAK+yC,YAAYvH,aAAexrC,KAAK87C,WAAa97C,KAAK87C,WAAW1nB,kBAAoB,GAG3F,QAApBvmB,EAAK7N,KAAKm0B,YAAyB,IAAPtmB,GAAyBA,EAAGurB,OAAO5jB,EAASusF,EAAQC,EAErF,CACJ,CAEA,aAAA9rC,GACIl2D,KAAKm3C,UAAU9hC,SAASyzB,IAEhB3mC,EAAM2mC,KAAc9oC,KAAKipC,eAAew4D,YAG5C34D,EAASvxB,WAAWvX,KAAKsX,cACzBwxB,EAASxyB,gBAAe,GAEhC,CAEA,eAAA2rF,GACI,MAAM7qC,EAAQp3D,KAAK2yC,WACb8mD,EAAQz5F,KAAK4hG,WACb7qE,EAAM/2B,KAAKuW,eACX05C,EAAWjwD,KAAKipC,eAAeiI,UAC/BgxD,EAAcliG,KAAKipC,eAAey4D,wBACxC,GAAIzxC,GAAYiyC,EAAa,CACzB,MAGMC,EA5RlB,SAA6B11D,EAAQ21D,EAAgB5pE,EAAOqS,GACxD,MAAMw3D,EAA6B,IAAnBx3D,EACVy3D,GAAgC,IAApBz3D,EACZ03D,EAAe/pE,EAAMiM,yBACrB+9D,EAAchqE,EAAM6Y,cACpBoxD,EAAa,GA2CnB,OA1CAL,EAAe/sF,SAASqtF,IACpB,MAAMC,EAAqBD,EAAQhsF,QAAQ8rF,IAAgB,EACrDI,EAAsBF,EAAQhsF,QAAQ,IAAM,EAClD,GAAK2rF,GAAWO,GAAyBN,GAAaK,EAClD,OAKmB,IAAnBD,EAAQ78F,QACR68F,EAAQxtF,KAAKwtF,EAAQ,IAEzB,MAAMG,EAAU,GAEhBH,EAAQrtF,SAAQ,CAACizD,EAAQt1D,EAAO0vF,KAC5B,MAAMI,EAAwB,IAAXx6B,EACby6B,EAAgBz6B,IAAWk6B,EAGjC,IAAI35F,EAAI2vB,EAAMkM,YAAY4jC,EAAS,GAGrB,IAAVt1D,GAAgB8vF,EAGX9vF,IAAU0vF,EAAQ78F,OAAS,GAAMk9F,IACtCl6F,GAAK05F,EAAe,EAAI,GAHxB15F,GAAK05F,EAAe,EAAI,EAM5BM,EAAQ3tF,KAAKrM,GAGU,IAAnBgiC,GAAwBi4D,EACxBD,EAAQ3tF,KAAKu3B,EAAS,IAEG,IAApB5B,GAAyBk4D,GAC9BF,EAAQ3tF,KAAKu3B,EAAS,EAC1B,IAGJg2D,EAAWvtF,KAAK2tF,EAAQ/9D,MAAK,CAACrgC,EAAGC,IAAMD,EAAIC,IAAG,IAE3C+9F,CACX,CA2O8BO,CAAoBvJ,EArTlD,SAA+B5lB,EAAWovB,GACtC,MAAMC,EAAe,GACrB,IAAItmC,EAAQ,GACZ,IAAK,IAAI0L,EAAS,EAAGA,GAAUuL,EAAWvL,IACtB26B,EAAavsF,QAAQ4xD,IAAW,GAK5C46B,EAAahuF,KAAK0nD,GAClBA,EAAQ,IAJRA,EAAM1nD,KAAKozD,GASnB,OAFI1L,EAAM/2D,OAAS,GACfq9F,EAAahuF,KAAK0nD,GACfsmC,CACX,CAoSkCC,CAFLnjG,KAAKu5B,aAAa8X,cACfrxC,KAAKuhG,UAAUttF,KAAK0gB,GAAanvB,OAAOmvB,EAASnsB,QAETxI,KAAKu5B,aAAcv5B,KAAKgxC,oBACpFja,EAAIthB,OACJshB,EAAI5gB,aAAa4zB,GAAKG,OACtBi4D,EAAU9sF,SAASk/D,IACO,IAAlBA,EAAO1uE,SAEXkxB,EAAIQ,YACJR,EAAIS,OAAO4/B,EAAOmd,EAAO,IACzBx9C,EAAIU,OAAO2/B,EAAOmd,EAAOA,EAAO1uE,OAAS,IACzCkxB,EAAI5H,SACJ4H,EAAI8f,YAAW,IAEnB9f,EAAI1gB,SACR,CACJ,CAEA,aAAA+sF,GACI,IAAIv1F,EACJ,MAAMkpB,EAAM/2B,KAAKuW,eACX5S,EAAI3D,KAAKi6C,eACTrO,EAAK5rC,KAAK4rC,GAChB,IAAK,IAAInjC,EAAI,EAAGA,EAAIzI,KAAKuhG,UAAU17F,SAAU4C,EAAG,CAC5C,MAAMI,EAAI+iC,EAAGnjC,GAAKzI,KAAKipC,eAAetT,QAChCmmB,EAAa97C,KAAKshG,cAAc74F,GAGhC46F,EAAQ1/F,EADW3D,KAAK87C,WAAWzrB,WACJ,EAAIyrB,EAAWzrB,WAAa,EAGjE,GADA0G,EAAI6oC,UAAUyjC,EAAQ,EAAGx6F,EAAI,EAAGizC,EAAWzrB,WAAa,EAAG,GACvDyrB,EAAWz4C,KACX6sB,EAAM4G,YAAYC,EAAKssE,EAAOx6F,EAAG7I,KAAKipC,eAAeiT,iBAAmBl8C,KAAKipC,eAAenZ,MAAOgsB,EAAWz4C,UAE7G,CACD0zB,EAAIthB,OACJshB,EAAIvf,QAAQxX,KAAKipC,eAAej6B,MAChC,MAAMjK,EAAkC,QAA1B8I,EAAKiuC,EAAW/2C,YAAyB,IAAP8I,EAAgBA,EAAK,GACrEkpB,EAAIwc,SAASxuC,EAAMs+F,EAAOx6F,EAAI,EAAI7I,KAAKipC,eAAenZ,OACtDiH,EAAI1gB,SACR,CACJ,CACJ,CAEA,IAAAG,GACI,MAAMugB,EAAM/2B,KAAKuW,eACjB,GAAuB,IAAnBvW,KAAK4rC,GAAG/lC,OACR,MAAM,IAAI1C,EAAa,YAAa,qCAExCnD,KAAK+W,cACL,MAAMusF,EAA2B1/F,MAAb5D,KAAKm9C,MAAqBn9C,KAAKipC,eAAeiI,UAKlE,GAJAlxC,KAAKuV,aACLwhB,EAAI6V,UAAU,UAAW5sC,KAAKuT,aAAa,MAAO,CAAEs5B,aAAa,IACjE7sC,KAAKojG,gBACLpjG,KAAKiiG,kBACDjiG,KAAKk0B,MAAQovE,EAAa,CAC1B,MAAM92D,EAASxsC,KAAK2yC,WACpB3yC,KAAKk0B,KAAKgX,mBAAmBsB,EAAQA,GACrCxsC,KAAKk0B,KAAK3c,WAAWwf,GAAKvgB,MAC9B,CACAxW,KAAKs2D,WACLt2D,KAAKk2D,gBACLn/B,EAAI+V,aACJ9sC,KAAKoW,cACT,ECrYG,MAAMmtF,WAAiBhwB,GAC1B,mBAAW7xE,GACP,OAAOG,EAAS0hG,QACpB,CACA,WAAA9hG,CAAYkC,EAAGkF,EAAG2B,EAAOqkB,GAErBtrB,MAAMI,EAAGkF,EAAG2B,EADQnK,OAAO2X,OAAO,CAAEi8D,yBAA0B,GAAIJ,UAAW,EAAGO,kBAAmB,GAAKvlD,GAE5G,CACA,aAAA4K,GACI,OAAOz5B,KAAK0kC,YAAY,IAC5B,CAEA,WAAA8+D,GAEI,OADAxjG,KAAKg2E,QAAQ,OACNh2E,IACX,ECJJ,SAAS,MAAK+D,GACN0/F,GAAYhgE,OACZ5/B,EAAI,uBAAwBE,EACpC,CACO,IAAI2/F,IACX,SAAWA,GACPA,EAAoBA,EAAyB,IAAI,GAAK,MACtDA,EAAoBA,EAA4B,QAAK,GAAK,QAC7D,CAHD,CAGGA,KAAwBA,GAAsB,CAAC,IAClD,MAAMD,WAAoBhvF,EACtB,mBAAW/S,GACP,OAAOG,EAAS4hG,WACpB,CACA,mBAAW1pE,GACP,OAAO2pE,EACX,CACA,yBAAW1pE,GACP,MAAO,CACH2Z,IAAK+vD,GAAoBlyD,IACzBoC,OAAQ8vD,GAAoB7xD,OAEpC,CAIA,oBAAW8xD,GAEP,OADA,GAAE,6DACKD,EACX,CAIA,0BAAWE,GAEP,OADA,GAAE,8DACKH,GAAYzpE,cACvB,CACA,WAAAv4B,EAAY,MAAEkoC,EAAK,KAAEk6D,EAAI,KAAE9+F,EAAO,GAAE,YAAEurE,EAAc,GAAE,SAAE37C,EAAW+uE,GAAoBlyD,MACnFjuC,QACAvD,KAAK2pC,MAAQA,EACb3pC,KAAK6jG,KAAOA,EACZ7jG,KAAK+E,KAAOA,EACZ/E,KAAKswE,YAAcA,EACnBtwE,KAAK20B,SAA+B,iBAAbA,EAAwB8uE,GAAYzpE,eAAerF,GAAYA,EACtF30B,KAAKgE,KAAO,EACZhE,KAAKkY,YACLlY,KAAKipC,eAAiB,CAClBw+B,QAAQ,EACRpH,KAAM,CAAC,GACP1pB,MAAO,QACPyL,WAAY,EACZ0hD,cAAc,EACdnH,eAAgB,EAGhBoH,uBAAuB,EAE/B,CAMA,UAAAxuF,CAAWwhB,GACPA,EAAIvf,QAAQxX,KAAKgP,MACjB,MAAM6f,EAAU7uB,KAAKipC,eAIrB,OAHAlS,EAAI9gB,eAAe4Y,EAAQ8nB,OAC3B5f,EAAIhhB,aAAa8Y,EAAQ8nB,OACzB5f,EAAI5gB,aAAa0Y,EAAQuzB,YAClBpiD,IACX,CAGA,SAAA+nE,CAAUN,EAAQpH,GAId,OAHArgE,KAAKipC,eAAew+B,OAASA,EACzBpH,IACArgE,KAAKipC,eAAeo3B,KAAOA,GACxBrgE,IACX,CAEA,OAAAkuD,CAAQlqD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEA,IAAAwW,GACI,MAAMugB,EAAM/2B,KAAKuW,eACjBvW,KAAK+W,cACL,IAAIlO,EAAI,EACR,OAAQ7I,KAAK20B,UACT,KAAK+uE,GAAoBlyD,IACrB3oC,EAAI7I,KAAK2pC,MAAMpQ,aAAa2Z,eAAelzC,KAAKgE,MAChD,MACJ,KAAK0/F,GAAoB7xD,OACrBhpC,EAAI7I,KAAK2pC,MAAMpQ,aAAa4Z,kBAAkBnzC,KAAKgE,KAAOqqB,EAAO+D,yBACjE,MACJ,QACI,MAAM,IAAIjvB,EAAa,kBAAmB,gBAAgBnD,KAAK20B,wBAGvE,MAAMgV,EAAQ,CAAEhmC,EAAG3D,KAAK2pC,MAAMsQ,eAAgBpxC,KACxCg7F,EAAO,CAAElgG,EAAG3D,KAAK6jG,KAAK5pD,eAAgBpxC,KAC5C,GAAE,gCAAiC8gC,EAAO,QAASk6D,EAAM,KAAMh7F,GAC/D,MAAM8zF,EAAiB38F,KAAKipC,eAAe0zD,eAAiB38F,KAAK20B,SACjEoC,EAAIthB,OACJzV,KAAKuV,WAAWwhB,GAEhBA,EAAIwc,SAASvzC,KAAK+E,KAAM4kC,EAAMhmC,EAAGgmC,EAAM9gC,GAEvC,MAAMm7F,EAAejtE,EAAI2sB,YAAY1jD,KAAK+E,MACpCk/F,EAAaD,EAAax5F,MAC1B05F,EAAcF,EAAav5F,OAE3B05F,EAAUx6D,EAAM9gC,EAAIq7F,EAAc,KAGlC,OAAEx1F,EAAM,KAAEJ,EAAI,OAAEC,EAAM,MAAEC,GAAUxO,KAAKyX,SAEvCoyC,EAAkBp8C,EAAKiC,UAAUpB,EAAM,SAC7CyoB,EAAIvf,QAAQ9I,EAAQm7C,EAAiBt7C,EAAQC,GAC7CuoB,EAAIwc,SAASvzC,KAAKswE,YAAa3mC,EAAMhmC,EAAIsgG,EAAa,EAAGE,GAEzD,MAAMC,EAAgBrtE,EAAI2sB,YAAY1jD,KAAKswE,aACrC+zB,EAAcD,EAAc55F,MAC5B85F,EAAeF,EAAc35F,OAEnC,IAAIwnE,EAAUtoC,EAAMhmC,EAChB4gG,EAASJ,EACb,MAAM1wB,EAAQowB,EAAKlgG,EAAI3D,KAAK6jG,KAAKvyE,gBAAgBjB,WAE7CrwB,KAAK20B,WAAa+uE,GAAoBlyD,KACtCygC,GAAWgyB,EAAaI,EAAc,EACtCE,GAAUD,EAAe,KAEpBtkG,KAAK20B,WAAa+uE,GAAoB7xD,SAC3C0yD,GAAUD,EAAe,IACzBryB,GAAWgyB,EAAa,EACnBjkG,KAAKipC,eAAe86D,wBACrB9xB,GAAWoyB,IAGfrkG,KAAKipC,eAAew+B,QAEpB5C,GAASY,eAAe1uC,EAAKk7C,EAASsyB,EAAQ9wB,EAAO8wB,EAAQvkG,KAAKipC,eAAeo3B,MAE7ErgE,KAAKipC,eAAe66D,cACpBj/B,GAASY,eAAe1uC,EAAK08C,EAAO8wB,EAAS,EAAIvkG,KAAK20B,SAAU8+C,EAAO8wB,EAAS5H,EAAgB38F,KAAKipC,eAAeo3B,QAIxHtpC,EAAIQ,YACJR,EAAIS,OAAOy6C,EAASsyB,GAEpBxtE,EAAIU,OAAOg8C,EAAO8wB,GACdvkG,KAAKipC,eAAe66D,cAEpB/sE,EAAIU,OAAOg8C,EAAO8wB,EAAS5H,GAE/B5lE,EAAI5H,SACJ4H,EAAI8f,aAER9f,EAAI1gB,SACR,ECvKJ,SAAS,MAAKtS,GACNygG,GAAa/gE,OACb5/B,EAAI,wBAAyBE,EACrC,CDsKA0/F,GAAYhgE,OAAQ,EACpBggE,GAAY9rF,UAAY,CACpBjJ,OAAQjB,EAAKsE,MACbzD,KAAM,GACNC,OAAQlC,EAAWuC,OACnBJ,MAAOlC,EAAUyD,QCnKrB,MAAMy0F,WAAqB9hG,GACvB,mBAAWhB,GACP,OAAOG,EAAS2iG,YACpB,CAEA,iBAAW/0B,GACP,MAAO,CACHnnE,EAAG,CACCjF,KAAM,eACNmH,MAAO,IAEXqlE,EAAG,CACCxsE,KAAM,eACNmH,MAAO,IAEX+oB,EAAG,CACClwB,KAAM,eACNmH,MAAO,IAEXpC,EAAG,CACC/E,KAAM,mBACNmH,MAAO,IAEXslE,EAAG,CACCzsE,KAAM,WACNmH,MAAO,IAEXvJ,EAAG,CACCoC,KAAM,qBACNmH,MAAO,IAGnB,CAUA,WAAA/I,CAAY25C,GACR73C,MAAM63C,GACNp7C,KAAKykG,UAAYrpD,EAAWr2C,MAAQ,IAAIoJ,cACxCnO,KAAKgE,KAAOo3C,EAAWp3C,MAAQ,EAC/BhE,KAAK0R,OAAS,GACd1R,KAAKipC,eAAiB5oC,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGhY,KAAKipC,gBAAiB,CAAEy7D,gBAAiBr2E,EAAOsD,sBACtG,GAAE,sBAAuB3xB,KAAKykG,SAClC,CAEA,OAAAv2C,CAAQlqD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEA,SAAAy5C,GACI,IAAIkrD,EAAc,EAoBlB,OAhBA3kG,KAAK0R,OAAS,GAEd1R,KAAKykG,SAAS/7F,MAAM,IAAI2M,SAASuvF,IAE7B,MAAM3I,EAAauI,GAAa/0B,OAAOm1B,GACvC,IAAK3I,EACD,MAAM,IAAI94F,EAAa,+BAAiCyhG,GAC5D,MAAMt2F,EAAO5K,EAAQ1D,KAAKipC,eAAey7D,iBACnC30E,EAAQ,IAAIG,EAAM+rE,EAAW54F,KAAMiL,EAAM,CAAEhN,SAAU,aAE3DtB,KAAK0R,OAAOwD,KAAK6a,GACjB40E,GAAe1I,EAAWzxF,KAAK,IAGnCxK,KAAK66B,SAAS8pE,GACd3kG,KAAK05C,cAAe,EACb15C,IACX,CAEA,IAAAwW,GACIxW,KAAK+W,cACL,MAAMpT,EAAI3D,KAAKi6C,eACTpxC,EAAI7I,KAAKu5B,aAAamL,YAAY1kC,KAAKgE,MAAQ,GACrD,GAAE,uBAAwBhE,KAAKykG,UAC/B,IAAII,EAAWlhG,EACf3D,KAAK0R,OAAO2D,SAAQ,CAAC0a,EAAO/c,KACxB,MAAM8xF,EAAiB9kG,KAAKykG,SAASzxF,GACrC+c,EAAMqJ,OAAOp5B,KAAKuW,eAAgBsuF,EAAUh8F,GAC5Cg8F,GAAYL,GAAa/0B,OAAOq1B,GAAgBt6F,KAAK,GAE7D,EAGJg6F,GAAa/gE,OAAQ,EC5Gd,MAAMshE,WAAoBriG,GAC7B,mBAAWhB,GACP,OAAOG,EAASkjG,WACpB,CACA,WAAAtjG,CAAY4wE,EAAUC,GAClB/uE,MAAM,CAAEwrB,SAAU,MAClB/uB,KAAK+7F,QAAU,IAAI3pB,GAAcC,EAAUC,GAC3CtyE,KAAK66B,SAAS76B,KAAK+7F,QAAQl/C,WAAWxrC,aAAa7G,OAEnDxK,KAAKu3C,cAAe,CACxB,CAGA,oBAAA6B,CAAqBC,GAEjB,OAAOr5C,IACX,CACA,SAAAy5C,GAEI,OADAz5C,KAAK05C,cAAe,EACb15C,IACX,CACA,IAAAwW,GACI,MAAMgiB,EAAQx4B,KAAKu5B,aACbxC,EAAM/2B,KAAKuW,eACjBvW,KAAK+W,cACL,MAAMiuF,EAAUhlG,KAAK+7F,QAAQl/C,WACxBmoD,EAAQ1tF,cACT0tF,EAAQztF,WAAWwf,GAEvBiuE,EAAQzsE,SAASC,GACjBwsE,EAAQpsE,UAAUJ,EAAMkM,YAAY,GAAKlM,EAAMiB,iBAC/CurE,EAAQxrE,cAAcx5B,KAAKi6C,eAC/B,ECxBJ,MAAMgrD,WAAuBxwF,EACzB,mBAAW/S,GACP,OAAOG,EAASojG,cACpB,CAMA,WAAAxjG,CAAYyjG,GACR3hG,QACI2hG,EAAav7D,QACb3pC,KAAK2pC,MAAQu7D,EAAav7D,OAC1Bu7D,EAAarB,OACb7jG,KAAK6jG,KAAOqB,EAAarB,MAC7B7jG,KAAKgE,KAAO,EACZhE,KAAKipC,eAAiB,CAClB4gC,OAAO,EACPE,YAAa,EACbC,WAAY,EACZC,WAAY,EACZH,cAAe,EAEvB,CAEA,OAAA5b,CAAQlqD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEA,QAAAmqE,CAASN,GAEL,OADA7pE,KAAKipC,eAAe4gC,MAAQA,EACrB7pE,IACX,CAEA,IAAAwW,GACI,MAAMugB,EAAM/2B,KAAKuW,eACjBvW,KAAK+W,cACL,MAAMlO,EAAK7I,KAAK2pC,OAAS3pC,KAAK2pC,MAAMpQ,aAAa2Z,eAAelzC,KAAKgE,OAChEhE,KAAK6jG,MAAQ7jG,KAAK6jG,KAAKtqE,aAAa2Z,eAAelzC,KAAKgE,OACzD,EAGEiuE,EAAWjyE,KAAK2pC,OAAS3pC,KAAK2pC,MAAMsQ,gBAAoBj6C,KAAK6jG,MAAQ7jG,KAAK6jG,KAAKtqE,aAAaq/B,gBAAmB,EAG/GusC,EAAUnlG,KAAK6jG,MAAQ7jG,KAAK6jG,KAAK5pD,eAAiBj6C,KAAK6jG,KAAKxzE,WAAa,GAC1ErwB,KAAK2pC,OAAS3pC,KAAK2pC,MAAMpQ,aAAas/B,aAAe,IACtD,EACJ74D,KAAKipC,eAAe6gC,cAAgBq7B,EAASlzB,EAtDrD,YAAcluE,GACNkhG,GAAexhE,OACf5/B,EAAI,0BAA2BE,EACvC,CAoDQ,CAAE,qCAAsCkuE,EAAS,UAAWkzB,EAAQ,KAAMt8F,GAC1E6gE,GAAQY,cAAcvzC,EAAKk7C,EAASppE,EAAG7I,KAAKipC,eAChD,EClBJ,SAAS,MAAKllC,GACNqhG,GAAQ3hE,OACR5/B,EAAI,mBAAoBE,EAChC,CDkBAkhG,GAAexhE,OAAQ,ECdvB,MAAM2hE,GAUF,uBAAOC,CAAiBtgC,EAAWv6D,EAAQ,IAAKC,EAAS,KACrD,OAAO,IAAI26F,GAAQ,CAAElgC,SAAU,CAAEH,YAAWv6D,QAAOC,WACvD,CAQA,WAAAhJ,CAAYotB,EAAU,CAAC,GACnB,GAAE,gBAAiBA,GACnB7uB,KAAK6uB,QAAU,CACX2J,MAAO,CACHmf,MAAO,IAEXutB,SAAU,CACNH,UAAW,GACXv6D,MAAO,IACPC,OAAQ,IACRw6D,WAAY,QAEhBj2D,KAAMo2F,GAAQztF,WAElB3X,KAAKm4B,WAAWtJ,EACpB,CACA,KAAAuJ,GACIp4B,KAAKslG,QAAU,GACftlG,KAAKulG,QAAU,GACfvlG,KAAK43E,OAAS,GACd53E,KAAKunC,OAAS,GACdvnC,KAAKw4B,WAAQ50B,CACjB,CACA,UAAAu0B,CAAWtJ,GACP7uB,KAAK6uB,QAAUxuB,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGhY,KAAK6uB,SAAUA,GAC9D7uB,KAAKwlG,eACLxlG,KAAKo4B,OACT,CACA,YAAAotE,GACI,MAAM,UAAEzgC,EAAS,MAAEv6D,EAAK,OAAEC,EAAM,WAAEw6D,GAAejlE,KAAK6uB,QAAQq2C,SAC9D,GAAiB,MAAbH,EACA,OAEJ,GAAiB,IAAbA,EAEA,MADA,GAAE/kE,MACI,IAAImD,EAAa,gDAE3B,IAAI6hE,EAAUhlE,KAAK6uB,QAAQq2C,SAASF,QACpC,QAAgBphE,IAAZohE,EAAuB,CAOnBA,EADAhG,GALSlwD,SAASwE,eAAeyxD,IAMvBF,GAASQ,SAASC,OAGlBT,GAASQ,SAASG,GAEpC,CACAxlE,KAAKwV,QAAUqvD,GAASC,aAAaC,EAAWC,EAASx6D,EAAOC,EAAQw6D,EAC5E,CACA,UAAA3tD,GACI,OAAOtX,KAAKwV,OAChB,CACA,UAAA+B,CAAW/B,GAEP,OADAxV,KAAKwV,QAAUA,EACRxV,IACX,CACA,QAAAk8B,GACI,OAAOl8B,KAAKw4B,KAChB,CACA,SAAAioE,GACI,OAAOzgG,KAAKunC,MAChB,CAEA,KAAAgsC,CAAM3kD,GACF,MAAM+/B,EAAa3uD,KAAK6uB,QAAQ2J,MAAMmf,MAChCk4B,EAAIxvE,OAAO2X,OAAO,CAAErU,EAAG,EAAGkF,EAAG,EAAG2B,MAAOxK,KAAK6uB,QAAQq2C,SAAS16D,MAAqB,EAAbmkD,EAAkB9/B,QAAS,CAAEolD,yBAAuC,EAAbtlB,IAAsB//B,GAClJ4J,EAAQ,IAAI+6C,GAAM1D,EAAElsE,EAAGksE,EAAEhnE,EAAGgnE,EAAErlE,MAAOqlE,EAAEhhD,SAI7C,OAHA7uB,KAAK43E,OAAO1iE,KAAKsjB,GACjBA,EAAMjhB,WAAWvX,KAAKwV,SACtBxV,KAAKw4B,MAAQA,EACNA,CACX,CACA,QAAA+qE,CAAS30E,GACL,MAAM+/B,EAAa3uD,KAAK6uB,QAAQ2J,MAAMmf,MAChCk4B,EAAIxvE,OAAO2X,OAAO,CAAErU,EAAG,EAAGkF,EAAG,EAAG2B,MAAOxK,KAAK6uB,QAAQq2C,SAAS16D,MAAqB,EAAbmkD,EAAkB9/B,QAAS,CAAEolD,yBAAuC,IAAbtlB,IAAsB//B,GAClJ4J,EAAQ,IAAI+qE,GAAS1zB,EAAElsE,EAAGksE,EAAEhnE,EAAGgnE,EAAErlE,MAAOqlE,EAAEhhD,SAIhD,OAHA7uB,KAAK43E,OAAO1iE,KAAKsjB,GACjBA,EAAMjhB,WAAWvX,KAAKwV,SACtBxV,KAAKw4B,MAAQA,EACNA,CACX,CACA,SAAA11B,CAAUs4C,GACN,MAAMrgB,EAAO,IAAIj4B,GAAUs4C,GAK3B,OAJIp7C,KAAKw4B,OACLuC,EAAKxC,SAASv4B,KAAKw4B,OACvBuC,EAAKxjB,WAAWvX,KAAKwV,SACrBxV,KAAKslG,QAAQpwF,KAAK6lB,GACXA,CACX,CACA,SAAAi9D,CAAUjoE,EAAOqrB,EAAYvsB,GACzB,MAAMkM,EAAO,IAAIi9D,GAAUjoE,EAAOqrB,EAAYvsB,GAK9C,OAJI7uB,KAAKw4B,OACLuC,EAAKxC,SAASv4B,KAAKw4B,OACvBuC,EAAKxjB,WAAWvX,KAAKwV,SACrBxV,KAAKslG,QAAQpwF,KAAK6lB,GACXA,CACX,CACA,UAAA2iE,CAAWlrF,EAAM4oC,EAAYvsB,GACzB,MAAMkM,EAAO,IAAI2iE,GAAWlrF,EAAM4oC,EAAYvsB,GAK9C,OAJI7uB,KAAKw4B,OACLuC,EAAKxC,SAASv4B,KAAKw4B,OACvBuC,EAAKxjB,WAAWvX,KAAKwV,SACrBxV,KAAKslG,QAAQpwF,KAAK6lB,GACXA,CACX,CACA,SAAAw8D,CAAUn8C,GACN,MAAMqqD,EAAY,IAAIlO,GAAUn8C,GAKhC,OAJIp7C,KAAKw4B,OACLitE,EAAUltE,SAASv4B,KAAKw4B,OAC5BitE,EAAUluF,WAAWvX,KAAKwV,SAC1BxV,KAAKslG,QAAQpwF,KAAKuwF,GACXA,CACX,CACA,QAAAj2B,CAASp0B,GACL,MAAMsqD,EAAW,IAAIl2B,GAASp0B,GAK9B,OAJIp7C,KAAKw4B,OACLktE,EAASntE,SAASv4B,KAAKw4B,OAC3BktE,EAASnuF,WAAWvX,KAAKwV,SACzBxV,KAAKslG,QAAQpwF,KAAKwwF,GACXA,CACX,CACA,OAAA/jD,CAAQ/yB,EAAS,CAAC,GACd,MAAM+2E,EAAU,IAAIhkD,GAAQ/yB,EAAOpc,MAKnC,OAJIxS,KAAKw4B,OACLmtE,EAAQptE,SAASv4B,KAAKw4B,OAC1BmtE,EAAQpuF,WAAWvX,KAAKwV,SACxBxV,KAAKslG,QAAQpwF,KAAKywF,GACXA,CACX,CACA,QAAAnW,CAAS5gE,GACL,MAAMihD,EAAIxvE,OAAO2X,OAAO,CAAExF,KAAM,SAAUqc,QAAS,CAC3CvgB,KAAM,UACNmiC,gBAAY7sC,IACXgrB,GACHg3E,EAAW,IAAIpW,GAAS3f,EAAEr9D,KAAMq9D,EAAEhhD,QAAQvgB,KAAMuhE,EAAEhhD,QAAQ4hB,YAKhE,OAJIzwC,KAAKw4B,OACLotE,EAASrtE,SAASv4B,KAAKw4B,OAC3BotE,EAASruF,WAAWvX,KAAKwV,SACzBxV,KAAKslG,QAAQpwF,KAAK0wF,GACXA,CACX,CACA,WAAAb,CAAYn2E,GACR,MAAMihD,EAAIxvE,OAAO2X,OAAO,CAAEohD,KAAM,OAASxqC,GACnCi3E,EAAc,IAAId,GAAYl1B,EAAEzW,MAKtC,OAJIp5D,KAAKw4B,OACLqtE,EAAYttE,SAASv4B,KAAKw4B,OAC9BqtE,EAAYtuF,WAAWvX,KAAKwV,SAC5BxV,KAAKslG,QAAQpwF,KAAK2wF,GACXA,CACX,CACA,UAAAnM,CAAW9qE,GACP,MAAMk3E,EAAa,IAAIpM,GAAW9qE,EAAOzuB,IAAKyuB,EAAOo9C,UAAWp9C,EAAO+9C,UAKvE,OAJI3sE,KAAKw4B,OACLstE,EAAWvtE,SAASv4B,KAAKw4B,OAC7BstE,EAAWvuF,WAAWvX,KAAKwV,SAC3BxV,KAAKslG,QAAQpwF,KAAK4wF,GACXA,CACX,CACA,OAAA5iG,CAAQk4C,GACJ,MAAMrgB,EAAO,IAAI73B,GAAQk4C,GAKzB,OAJIp7C,KAAKw4B,OACLuC,EAAKxC,SAASv4B,KAAKw4B,OACvBuC,EAAKxjB,WAAWvX,KAAKwV,SACrBxV,KAAKslG,QAAQpwF,KAAK6lB,GACXA,CACX,CACA,SAAAz4B,CAAU84C,GACN,MAAMrgB,EAAO,IAAIz4B,GAAU84C,GAI3B,OAHIp7C,KAAKw4B,OACLuC,EAAKxC,SAASv4B,KAAKw4B,OACvBuC,EAAKxjB,WAAWvX,KAAKwV,SACdulB,CACX,CACA,cAAAv4B,CAAeosB,GACX,MAAMguC,EAAQ,IAAIp6D,GAAeosB,EAAOiC,MAAOjC,EAAOktC,MAEtD,OADAc,EAAMrlD,WAAWvX,KAAKwV,SACfonD,CACX,CACA,UAAA96D,CAAW8sB,GACP,MAAMkvC,EAAQ,IAAIh8D,GAAW8sB,EAAOpc,MAEpC,OADAsrD,EAAMvmD,WAAWvX,KAAKwV,SACfsoD,CACX,CACA,UAAA97D,CAAW4sB,GACP,MAAMihD,EAAIxvE,OAAO2X,OAAO,CAAEjT,KAAM,IAAKghG,SAAU91D,GAA4B/V,OAAQ8rE,SAAU91D,GAA0B2B,QAAUjjB,GAC3H6hB,EAAa,IAAIzuC,GAAW6tE,EAAE9qE,MAKpC,OAJA0rC,EAAW8B,iBAAiBs9B,EAAEk2B,UAC9Bt1D,EAAW0B,yBAAyB09B,EAAEm2B,UACtCv1D,EAAWj5B,QAAQq4D,EAAE7gE,MACrByhC,EAAWl5B,WAAWvX,KAAKwV,SACpBi7B,CACX,CACA,WAAAqT,CAAYl1B,GACR,MAAMihD,EAAIxvE,OAAO2X,OAAO,CAAEguF,SAAU,MAAOD,SAAU,SAAUE,SAAS,EAAM3+C,aAAa,GAAQ14B,GAC7Fm2B,EAAc,IAAIjB,GAiBxB,OAhBAiB,EAAYyE,cAAcqmB,EAAEk2B,UAC5BhhD,EAAYuE,YAAYumB,EAAEm2B,UAC1BjhD,EAAY8B,iBAAiBgpB,EAAEo2B,SAC/BlhD,EAAYwC,eAAesoB,EAAEvoB,aAGD,iBAAjBuoB,EAAE5gE,YAAiD,iBAAf4gE,EAAEliE,SACjB,iBAAjBkiE,EAAE3gE,WACT61C,EAAYvtC,QAAQq4D,EAAE5gE,WAAY4gE,EAAEliE,SAAUkiE,EAAE3gE,YAEhD61C,EAAYvtC,QAAQq4D,EAAE5gE,WAAY4gE,EAAEliE,SAAU,IAEvB,iBAAfkiE,EAAEliE,UACdo3C,EAAY5sC,YAAY03D,EAAEliE,UAE9Bo3C,EAAYxtC,WAAWvX,KAAKwV,SACrBuvC,CACX,CACA,YAAA5Q,CAAavlB,GACT,IAAI/gB,EACJ,MAAMymC,EAAe,IAAIH,GAAoF,QAAtEtmC,EAAK+gB,aAAuC,EAASA,EAAOpc,YAAyB,IAAP3E,EAAgBA,EAAK,MAM1I,OALyEjK,OAApEgrB,aAAuC,EAASA,EAAO+F,WACxD2f,EAAa5Y,YAAY9M,EAAO+F,UACyC/wB,OAAxEgrB,aAAuC,EAASA,EAAO0mB,eACxDhB,EAAae,gBAAgBzmB,EAAO0mB,cACxChB,EAAa/8B,WAAWvX,KAAKwV,SACtB8+B,CACX,CACA,QAAAuoB,CAASrqD,EAAMoc,GACX,MAAMC,EAAUxuB,OAAO2X,OAAO,CAAExF,OAAMmiB,SAAU,EAAG1Z,WAAY,IAAM2T,GAC/DkuC,EAAW,IAAID,GAASrqD,GAY9B,OAXAsqD,EAASphC,YAAY7M,EAAQ8F,UACzB9F,EAAQq3E,iBACRppC,EAASe,mBAAmBhvC,EAAQq3E,iBAEpCr3E,EAAQs3E,iBACRrpC,EAASkB,mBAAmBnvC,EAAQs3E,sBAET,IAApBt3E,EAAQyuC,SACfR,EAASc,WAAW/uC,EAAQyuC,SAEhCR,EAASvlD,WAAWvX,KAAKwV,SAClBsnD,CACX,CACA,YAAA0nC,CAAa51E,GACT,MAAMihD,EAAIxvE,OAAO2X,OAAO,CAAEjT,KAAM,IAAKgqB,SAAU,IAAKmsB,KAAM,EAAGl3C,KAAM,GAAK4qB,GAClE7pB,EAAO,IAAIy/F,GAAa,CAC1Bz/F,KAAM8qE,EAAE9qE,KACRf,KAAM6rE,EAAE7rE,KACR+qB,SAAU8gD,EAAE9gD,SACZmsB,KAAM20B,EAAE30B,OAMZ,OAJIl7C,KAAKw4B,OACLzzB,EAAKwzB,SAASv4B,KAAKw4B,OACvBzzB,EAAKwS,WAAWvX,KAAKwV,SACrBxV,KAAKslG,QAAQpwF,KAAKnQ,GACXA,CACX,CACA,SAAAioD,CAAUp+B,GACN,MAAMihD,EAAIxvE,OAAO2X,OAAO,CAAE+0C,OAAQ,IAAKp4B,SAAU,QAAU/F,GACrDq+B,EAAY,IAAItB,GAAekkB,EAAE9iB,QAGvC,OAFAE,EAAUvxB,YAAYm0C,EAAEl7C,UACxBs4B,EAAU11C,WAAWvX,KAAKwV,SACnBy3C,CACX,CACA,YAAA2Z,CAAah4C,EAAQ+4C,GAAa,GAC9B,MAAMd,EAAe,IAAID,GAAah4C,EAAOm+B,QAI7C,OAHA8Z,EAAanrC,YAAY9M,EAAO+F,UAChCkyC,EAAatvD,WAAWvX,KAAKwV,SAC7BqxD,EAAamB,cAAcL,GACpBd,CACX,CACA,WAAAgU,GACI,OAAO,IAAIA,EACf,CACA,eAAApQ,GACI,OAAO,IAAIA,EACf,CACA,gBAAAmvB,CAAiBhrE,GACb,MAAMw3E,EAAc1iG,EAAQkrB,EAAOirE,mBAAoB,sBACjDwM,EAAmB,IAAIzM,GAAiBwM,EAAax3E,GAG3D,OAFAy3E,EAAiB9uF,WAAWvX,KAAKwV,SACjCxV,KAAKslG,QAAQpwF,KAAKmxF,GACXA,CACX,CACA,KAAAntC,CAAMtqC,GACF,MAAMihD,EAAIxvE,OAAO2X,OAAO,CAAEohD,KAAM,OAASxqC,GACnC8Y,EAAQ,IAAIwxB,GAAM2W,EAAEzW,MAE1B,OADAp5D,KAAKunC,OAAOryB,KAAKwyB,GACVA,CACX,CACA,cAAA2wC,CAAezpD,GACX,MAAM+xE,EAAY,IAAItoB,GAAezpD,EAAO6pD,UAAW7pD,EAAO8pD,cAG9D,OAFAioB,EAAU9/C,QAAQjyB,EAAOpc,MAAM+E,WAAWvX,KAAKwV,SAC/CxV,KAAKslG,QAAQpwF,KAAKyrF,GACXA,CACX,CACA,SAAA1kC,CAAUptC,GACN,OAAO,IAAIotC,GAAUptC,EACzB,CACA,MAAAg2D,CAAOj2D,GACH,MAAMihD,EAAIxvE,OAAO2X,OAAO,CAAE6Y,MAAO,GAAIhC,QAAS,CAAC,GAAKD,GAC9C8pB,EAAS,IAAImsC,GAAOhV,EAAEh/C,MAAOg/C,EAAEhhD,SAAStX,WAAWvX,KAAKwV,SAE9D,OADAxV,KAAKslG,QAAQpwF,KAAKwjC,GACXA,CACX,CACA,IAAA2jB,CAAKztC,GACD,IAAI/gB,EAAI8F,EAAI60C,EAAI+N,EAAIC,EACpB,MAAMrZ,EAAO,IAAIkf,GAAKztC,EAAOiC,MAAiC,QAAzBhjB,EAAK+gB,EAAOC,eAA4B,IAAPhhB,OAAgB,EAASA,EAAGykD,UAAU/6C,WAAWvX,KAAKwV,SAQ5H,OAPA2nC,EAAKquC,iBAA8G,QAA5FhjC,EAA+B,QAAzB70C,EAAKib,EAAOC,eAA4B,IAAPlb,OAAgB,EAASA,EAAG2yF,2BAAwC,IAAP99C,EAAgBA,EAAK,KAClH,QAAzB+N,EAAK3nC,EAAOC,eAA4B,IAAP0nC,OAAgB,EAASA,EAAGgwC,wBAC9DlmG,OAAOs5B,QAAkC,QAAzB68B,EAAK5nC,EAAOC,eAA4B,IAAP2nC,OAAgB,EAASA,EAAG+vC,uBAAuBlxF,SAAQ,EAAEynE,EAAW56C,MACrHib,EAAKuuC,qBAAqBlmF,OAAOs3E,GAAY56C,EAAU,IAG/DliC,KAAKslG,QAAQpwF,KAAKioC,GACXA,CACX,CACA,KAAAqzC,CAAM5hE,GACF,MAAM43E,EAAQ,IAAIhW,GAAM5hE,EAAOiiE,KAAMjiE,EAAOkiE,GAAIliE,EAAOC,SAAStX,WAAWvX,KAAKwV,SAEhF,OADAxV,KAAKslG,QAAQpwF,KAAKsxF,GACXA,CACX,CACA,QAAAnvC,CAASzoC,GACL,IAAI/gB,EACJ,MAAM44F,EAAM,IAAIpvC,GAAS,CACrBQ,WAAYjpC,EAAOiiE,KACnBvlC,UAAW18B,EAAOkiE,GAClBh5B,cAAelpC,EAAOkpC,cACtBC,aAAcnpC,EAAOmpC,cACtBnpC,EAAO7pB,MAKV,OAJ8B,QAAzB8I,EAAK+gB,EAAOC,eAA4B,IAAPhhB,OAAgB,EAASA,EAAGq0B,YAC9DukE,EAAIt7D,aAAavc,EAAOC,QAAQqT,WACpCukE,EAAIlvF,WAAWvX,KAAKwV,SACpBxV,KAAKslG,QAAQpwF,KAAKuxF,GACXA,CACX,CACA,SAAA7I,CAAUhvE,GACN,IAAI/gB,EAAI8F,EACR,MAAM3P,EAAO,IAAI45F,GAAU,CACvB/lC,WAAYjpC,EAAOiiE,KACnBvlC,UAAW18B,EAAOkiE,GAClBh5B,cAAelpC,EAAOkpC,cACtBC,aAAcnpC,EAAOmpC,eAQzB,OAN8B,QAAzBlqD,EAAK+gB,EAAOC,eAA4B,IAAPhhB,OAAgB,EAASA,EAAG9I,OAC9Df,EAAK8sE,QAAQliD,EAAOC,QAAQ9pB,OACF,QAAzB4O,EAAKib,EAAOC,eAA4B,IAAPlb,OAAgB,EAASA,EAAG3E,OAC9DhL,EAAKwT,QAAQoX,EAAOC,QAAQ7f,MAChChL,EAAKuT,WAAWvX,KAAKwV,SACrBxV,KAAKslG,QAAQpwF,KAAKlR,GACXA,CACX,CACA,cAAAihG,CAAer2E,GACX,MAAM83E,EAAiB,IAAIzB,GAAe,CACtCt7D,MAAO/a,EAAOiiE,KACdgT,KAAMj1E,EAAOkiE,KAQjB,OANIliE,EAAOC,QAAQ7qB,MACf0iG,EAAex4C,QAAQt/B,EAAOC,QAAQ7qB,MACtC4qB,EAAOC,QAAQg7C,OACf68B,EAAev8B,SAASv7C,EAAOC,QAAQg7C,OAC3C68B,EAAenvF,WAAWvX,KAAKwV,SAC/BxV,KAAKslG,QAAQpwF,KAAKwxF,GACXA,CACX,CACA,WAAAjD,CAAY70E,GACR,MAAM+3E,EAAc,IAAIlD,GAAY,CAChC95D,MAAO/a,EAAOiiE,KACdgT,KAAMj1E,EAAOkiE,GACb/rF,KAAM6pB,EAAO7pB,KACburE,YAAa1hD,EAAOC,QAAQyhD,YAC5B37C,SAAU/F,EAAOC,QAAQ8F,WAQ7B,OANI/F,EAAOC,QAAQ7qB,MACf2iG,EAAYz4C,QAAQt/B,EAAOC,QAAQ7qB,MACnC4qB,EAAOC,QAAQ7f,MACf23F,EAAYnvF,QAAQoX,EAAOC,QAAQ7f,MACvC23F,EAAYpvF,WAAWvX,KAAKwV,SAC5BxV,KAAKslG,QAAQpwF,KAAKyxF,GACXA,CACX,CACA,MAAA/G,CAAOhxE,EAAS,CAAC,GACbA,EAAOnvB,QAAUO,KACjB,MAAM4mG,EAAS,IAAIhH,GAAOhxE,GAAQrX,WAAWvX,KAAKwV,SAElD,OADAxV,KAAKulG,QAAQrwF,KAAK0xF,GACXA,CACX,CAYA,SAAA9S,CAAUjlE,EAAU,CAAC,GAEjB,OADAA,EAAQpvB,QAAUO,KACX,IAAI8zF,GAAUjlE,EACzB,CACA,YAAAqtE,CAAattE,GACT,MAAMihD,EAAIxvE,OAAO2X,OAAO,CAAE6Y,MAAO,GAAIhC,QAAS,CACtCrgB,MAAO,UACNogB,GACHytE,EAAQ,IAAIH,GAAarsB,EAAEh/C,OAIjC,OAHAwrE,EAAMx7C,QAAQq7C,GAAa98C,WAAWywB,EAAEhhD,QAAQrgB,QAChD6tF,EAAM9kF,WAAWvX,KAAKwV,SACtBxV,KAAKslG,QAAQpwF,KAAKmnF,GACXA,CACX,CACA,YAAA3/B,CAAa9tC,GACT,MAAMihD,EAAIxvE,OAAO2X,OAAO,CAAE6Y,MAAO,IAAMjC,GACjCguC,EAAQ,IAAIF,GAAamT,EAAEh/C,OAEjC,OADA+rC,EAAMrlD,WAAWvX,KAAKwV,SACfonD,CACX,CAEA,IAAApmD,GACI,MAAMugB,EAAM/2B,KAAKwV,QACjBxV,KAAKulG,QAAQlwF,SAASjN,GAAMA,EAAEmP,WAAWwf,GAAK2M,WAC9C1jC,KAAK43E,OAAOviE,SAASjN,GAAMA,EAAEmP,WAAWwf,GAAKvgB,SAC7CxW,KAAKunC,OAAOlyB,SAAS6lD,GAAMA,EAAE3jD,WAAWwf,GAAKvgB,SAC7CxW,KAAKslG,QAAQjwF,SAAS1U,IACbA,EAAEmW,cACHnW,EAAE4W,WAAWwf,GAAKvgB,MAAM,IAEhCxW,KAAKulG,QAAQlwF,SAASjN,GAAMA,EAAEmP,WAAWwf,GAAKvgB,SAC9CxW,KAAKo4B,OACT,EAGJgtE,GAAQ3hE,OAAQ,EAEhB2hE,GAAQztF,UAAYtX,OAAO2X,OAAO,CAAC,EAAGvD,EAAQkD,WCjfvC,MAAMkvF,WAAqB3jG,GAC9B,mBAAWxB,GACP,OAAOG,EAASglG,YACpB,CACA,WAAAplG,CAAY25C,GACR73C,MAAM63C,GAAY,GAClBp7C,KAAKipC,eAAiB5oC,OAAO2X,OAAO3X,OAAO2X,OAAO,CAAC,EAAGhY,KAAKipC,gBAAiB,CAExEtT,QAAS,GAET7F,MAAO,GAEP9gB,KAAM,SAASvB,EAAKkB,eACxB3O,KAAKwiD,aACT,ECnBG,MAAMskD,GACT,WAAArlG,CAAYtB,GACRH,KAAKgoC,MAAQ,IAAIvL,GACjBz8B,KAAK+mG,OAAO5mG,EAChB,CACA,MAAA4mG,CAAO5mG,GAGH,OAFAH,KAAKG,IAAMA,EACXH,KAAKo4B,QACEp4B,IACX,CACA,MAAAgnG,GACI,OAAOhnG,KAAKG,GAChB,CACA,KAAAi4B,GACIp4B,KAAK6R,SAAW7R,KAAKgoC,MAAMvG,YAAYzhC,KAAKG,KAC5CH,KAAK0hC,UAAY1hC,KAAK6R,SAASrS,KAC3BQ,KAAK6R,SAASoJ,aACdjb,KAAK0hC,WAAa1hC,KAAK6R,SAASoJ,YAEpC,IAD0BwhB,GAAMkD,WAAW3/B,KAAK6R,SAASW,MAErD,MAAM,IAAIrP,EAAa,eAAgB,yBAAyBnD,KAAKG,OAEzEH,KAAK8vB,MAAQ9vB,KAAKgoC,MAAMvF,cAAcziC,KAAKgoC,MAAMrG,aAAa3hC,KAAK0hC,WAAYjF,GAAMkD,WAAW3/B,KAAK6R,SAASW,OAC9GxS,KAAKqjC,SAAW,CAAC,EACjBrjC,KAAKinG,gBAAkB,CAAC,EACxBjnG,KAAKknG,wBAA0B,CAAC,EAChC,MAAM9jE,EAAe3G,GAAMK,aAAa98B,KAAK6R,SAASrS,MACtD,IAAK,IAAIiJ,EAAI,EAAGA,EAAIg0B,GAAMG,MAAM/2B,SAAU4C,EAAG,CACzC,MAAMuK,GAASowB,EAAe36B,GAAKg0B,GAAMG,MAAM/2B,OACzCy9B,EAAW7G,GAAMG,MAAM5pB,GACvBuwB,EAAWvjC,KAAKgoC,MAAM5F,oBAAoBkB,EAAUtjC,KAAK8vB,MAAMrnB,IACrEzI,KAAKqjC,SAASC,GAAYC,EAC1BvjC,KAAKinG,gBAAgBjnG,KAAK8vB,MAAMrnB,IAAM86B,EACtCvjC,KAAKknG,wBAAwBlnG,KAAK8vB,MAAMrnB,IAAM86B,CAClD,CACA,OAAOvjC,IACX,CACA,aAAAmnG,CAAchnG,GACV,MAAMX,EAAOQ,KAAKgoC,MAAMvG,YAAYthC,GAAKX,KACnC42B,EAAQp2B,KAAKgoC,MAAM3G,aAAarhC,KAAKqjC,SAAS7jC,IACpD,MAAO,CACHu7B,KAAM/6B,KAAKqjC,SAAS7jC,GACpByb,WAAYmb,EAAMnb,WAE1B,CACA,UAAAmsF,CAAWrsE,GACPA,EAAOA,EAAK5sB,cACZ,MAAMioB,EAAQp2B,KAAKgoC,MAAM3G,aAAatG,GAEhCssE,EAAYrnG,KAAKqjC,SAASjN,EAAM52B,MAChC8nG,EAAWtnG,KAAKgoC,MAAM3G,aAAagmE,GACzC,GAAIA,IAActsE,EACd,MAAO,CACHA,KAAMssE,EACNpsF,WAAYmb,EAAMnb,WAClBssF,QAAQ,GAIhB,MAAMC,EAAYxnG,KAAKinG,gBAAgBjnG,KAAKgoC,MAAMrG,aAAa5G,IAC/D,GAAiB,MAAbysE,EACA,MAAO,CACHzsE,KAAMysE,EACNvsF,WAAYjb,KAAKgoC,MAAM3G,aAAammE,GAAWvsF,WAC/CssF,QAAQ,GAIhB,MAAME,EAAoBznG,KAAKknG,wBAAwBlnG,KAAKgoC,MAAMrG,aAAa5G,IAC/E,OAAyB,MAArB0sE,GACAznG,KAAKqjC,SAASikE,EAAS9nG,MAAQioG,SACxBznG,KAAKinG,gBAAgBjnG,KAAKgoC,MAAMrG,aAAa0lE,IACpDrnG,KAAKinG,gBAAgBjnG,KAAKgoC,MAAMrG,aAAa5G,IAAS0sE,EAC/C,CACH1sE,KAAM0sE,EACNxsF,WAAYjb,KAAKgoC,MAAM3G,aAAaomE,GAAmBxsF,WACvDssF,QAAQ,IAIZD,EAAS9nG,OAASu7B,UACX/6B,KAAKinG,gBAAgBjnG,KAAKgoC,MAAMrG,aAAa3hC,KAAKqjC,SAASjN,EAAM52B,QACxEQ,KAAKinG,gBAAgBjnG,KAAKgoC,MAAMrG,aAAa2lE,EAAS9nG,OAAS8nG,EAAS9nG,KACxEQ,KAAKqjC,SAASikE,EAAS9nG,MAAQ8nG,EAAS9nG,KACjC,CACHu7B,KAAMusE,EAAS9nG,KACfyb,gBAAYrX,EACZ2jG,QAAQ,YAITvnG,KAAKinG,gBAAgBjnG,KAAKgoC,MAAMrG,aAAa3hC,KAAKqjC,SAASjN,EAAM52B,QACxEQ,KAAKinG,gBAAgBjnG,KAAKgoC,MAAMrG,aAAa5G,IAASA,SAC/C/6B,KAAKqjC,SAASikE,EAAS9nG,MAC9BQ,KAAKqjC,SAASikE,EAAS9nG,MAAQu7B,EACxB,CACHA,OACA9f,WAAYmb,EAAMnb,WAClBssF,QAAQ,GAEhB,EChGJ,MAAMG,WAAqBjzF,EACvB,mBAAW/S,GACP,OAAOG,EAAS6lG,YACpB,CAeA,2BAAOC,CAAqB5wE,EAAK4W,EAAW9c,EAAOre,EAAMmiB,EAAU9F,GAC/D,IAAIhhB,EAAI8F,EACR,MAAMi0F,EAAMj6D,EAAUk6D,cACtB,GAAW,MAAPD,EACA,MAAM,IAAIzkG,EAAa,eAAgB,+DAE3C,MAAM2kG,EAAaF,GAA2C,QAAnC/5F,EAAKghB,EAAQk5E,wBAAqC,IAAPl6F,EAAgBA,EAAK,GACrFm6F,EAAaJ,GAA4C,QAApCj0F,EAAKkb,EAAQo5E,yBAAsC,IAAPt0F,EAAgBA,EAAK,GACtFu0F,EAAkB,CACpBz9F,OAAQokB,EAAQpkB,OAChBkrB,QAAS9G,EAAQ8G,QACjBwyE,cAAeL,EACfM,eAAgBJ,EAChBC,kBAAmB,EACnBF,iBAAkB,GAEtB,IAAIL,GAAa,CACb7vC,WAAYhnC,EAAMgnC,WAClBvM,UAAWz6B,EAAMy6B,WAClB94C,GACE+E,WAAWwf,GACXsxE,iBAAiBH,GACjBxsE,YAAY/G,GACZne,MACT,CAaA,WAAA/U,CAAYovB,EAAOre,GACfjP,QACAvD,KAAKs3D,SAASzmC,GACd7wB,KAAKsoG,QAAU91F,EACfxS,KAAK20B,SAAWmF,GAASC,SAASO,MAClCt6B,KAAKipC,eAAiB,CAClBx+B,OAAQ,GACRkrB,QAAS,EACTwyE,cAAe,EACfC,eAAgB,EAChBH,kBAAmB,EACnBF,iBAAkB,EAE1B,CACA,WAAArsE,CAAY/G,GAIR,OAHIA,IAAamF,GAASC,SAASK,OAASzF,IAAamF,GAASC,SAASO,QACvEt6B,KAAK20B,SAAWA,GAEb30B,IACX,CACA,gBAAAqoG,CAAiBx5E,GAOb,OANsB,MAAlBA,EAAQpkB,QACW,MAAnBokB,EAAQ8G,SACiB,MAAzB9G,EAAQs5E,eACkB,MAA1Bt5E,EAAQu5E,iBACRpoG,KAAKipC,eAAiBpa,GAEnB7uB,IACX,CAMA,QAAAs3D,CAASzmC,GACL,IAAKA,EAAMgnC,aAAehnC,EAAMy6B,UAC5B,MAAM,IAAInoD,EAAa,eAAgB,6DAK3C,OAHAnD,KAAK6wB,MAAQA,EACb7wB,KAAK63D,WAAahnC,EAAMgnC,WACxB73D,KAAKsrD,UAAYz6B,EAAMy6B,UAChBtrD,IACX,CACA,aAAAswF,CAAc1hE,GACV,MAAMmI,EAAM/2B,KAAKuW,eACjB,IAAIgyF,EAAMvoG,KAAKipC,eAAetT,QAAU,GACpCA,EAAU/G,EAAOwiE,QACjBpxF,KAAK20B,WAAamF,GAASC,SAASK,QACpCmuE,EAAa,GAANA,EACP5yE,EAAU/G,EAAOwiE,QAAUxiE,EAAO45E,cAEtC,MAAMC,EAAUzoG,KAAKipC,eAAek/D,cAC9BO,EAAU1oG,KAAKipC,eAAem/D,eAEpC,OADArxE,EAAIQ,YACIv3B,KAAKsoG,SACT,KAAKZ,GAAal1F,KAAKm2F,MACnB5xE,EAAIS,OAAO5I,EAAOyiE,OAASqX,EAAS/yE,EAAU4yE,GAC9CxxE,EAAIU,OAAO7I,EAAOuiE,QAAUsX,EAAS9yE,EAAU31B,KAAKipC,eAAex+B,OAAS,EAAI89F,GAChFxxE,EAAIU,OAAO7I,EAAOyiE,OAASqX,EAAS/yE,EAAU31B,KAAKipC,eAAex+B,OAAS89F,GAC3E,MACJ,KAAKb,GAAal1F,KAAKo2F,QACnB7xE,EAAIS,OAAO5I,EAAOuiE,QAAUsX,EAAS9yE,EAAU4yE,GAC/CxxE,EAAIU,OAAO7I,EAAOyiE,OAASqX,EAAS/yE,EAAU31B,KAAKipC,eAAex+B,OAAS,EAAI89F,GAC/ExxE,EAAIU,OAAO7I,EAAOuiE,QAAUsX,EAAS9yE,EAAU31B,KAAKipC,eAAex+B,OAAS89F,GAMpFxxE,EAAI5H,SACJ4H,EAAI8f,WACR,CACA,IAAArgC,GACIxW,KAAKuW,eACLvW,KAAK+W,cACL,MAAMg1E,EAAY/rF,KAAK63D,WACjBnL,EAAW1sD,KAAKsrD,UACtB,IAAKygC,IAAcr/B,EACf,MAAM,IAAIvpD,EAAa,SAAU,0BACrC,MAAMwmC,EAAQoiD,EAAUniD,mBAAmB5pC,KAAK20B,SAAU,GACpD8qB,EAAMiN,EAAS9iB,mBAAmB5pC,KAAK20B,SAAU,GACvD30B,KAAKswF,cAAc,CACfa,QAASxnD,EAAMhmC,EACf0tF,OAAQ5xC,EAAI97C,EACZytF,QAASrF,EAAUxyD,aAAatwB,OAAS8iF,EAAUxyD,aAAaiS,YAChE8lD,OAAQ5kC,EAASnzB,aAAatwB,OAASyjD,EAASnzB,aAAaiS,YAC7Dg9D,aAAczc,EAAUxyD,aAAaiS,aAE7C,EAEJk8D,GAAal1F,KAAO,CAChBm2F,MAAO,EACPC,QAAS,GCrJb,MAAMC,WAAiB/vC,GACnB,mBAAWp3D,GACP,OAAOG,EAASgnG,QACpB,CACA,mBAAWC,GACP,OAAO,CACX,CACA,qBAAWC,GACP,OAAQ,CACZ,CACA,oBAAOC,CAAcn4E,GACjB,OAAO,IAAIg4E,GAASh4E,EAAOg4E,GAASC,SACxC,CACA,sBAAOG,CAAgBp4E,GACnB,OAAO,IAAIg4E,GAASh4E,EAAOg4E,GAASE,WACxC,CAgBA,WAAAtnG,CAAYovB,EAAOqR,GAGf,GAFA3+B,MAAMstB,EAAO,QAERqR,EAAW,CACZ,IAAIgnE,EAAar4E,EAAMgnC,WAAW0Q,eAAe,GAAG14C,KAC1B,iBAAfq5E,IACPA,EAAarkG,SAASqkG,EAAY,KAEtC,IAAIC,EAAYt4E,EAAMy6B,UAAUid,eAAe,GAAG14C,KACzB,iBAAds5E,IACPA,EAAYtkG,SAASskG,EAAW,KAKhCjnE,EADAz8B,MAAMyjG,IAAezjG,MAAM0jG,GACfN,GAASC,SAGTI,EAAaC,EAAYN,GAASE,WAAaF,GAASC,QAE5E,CACA9oG,KAAKkiC,UAAYA,EACjBliC,KAAKipC,eAAesuB,IAAM,GAC1Bv3D,KAAKipC,eAAeuuB,IAAM,GAC1Bx3D,KAAKipC,eAAetT,QAAU,GAC9B31B,KAAKkY,WACT,CACA,SAAA+/C,CAAUrpC,GACN,GAA+B,IAA3BA,EAAOspC,SAASryD,QAA0C,IAA1B+oB,EAAOupC,QAAQtyD,OAC/C,MAAM,IAAI1C,EAAa,eAAgB,yBAE3C,MAAM4zB,EAAM/2B,KAAKuW,eACX8hD,EAAazpC,EAAOypC,WACpBH,EAAWtpC,EAAOspC,SAClBE,EAAYxpC,EAAOwpC,UACnBl2B,EAAYtT,EAAOsT,UACzB,GAAIA,IAAc2mE,GAASC,UAAY5mE,IAAc2mE,GAASE,WAC1D,MAAM,IAAI5lG,EAAa,WAAY,2BAGvC,MAAM20D,EAAgB93D,KAAK6wB,MAAMinC,cACjC,IAAK,IAAIrvD,EAAI,EAAGA,EAAIqvD,EAAcjyD,SAAU4C,EAAG,CAC3C,MAAM2gG,EAAUlxC,EAASJ,EAAcrvD,IAAMzI,KAAKipC,eAAetT,QACjE,GAAIlwB,MAAM2jG,GACN,MAAM,IAAIjmG,EAAa,eAAgB,oCAE3C4zB,EAAIQ,YACJR,EAAIS,OAAO6gC,EAAY+wC,EAAU,EAAIlnE,GACrCnL,EAAIU,OAAO2gC,EAAWgxC,EAAU,EAAIlnE,GACpCnL,EAAI8f,YACJ9f,EAAI5H,QACR,CACAnvB,KAAK+W,aACT,EAEJ8xF,GAASlxF,UAAY,CACjBjJ,OAAQjB,EAAKsE,MACbzD,KAAM,GACNC,OAAQlC,EAAW0iC,KACnBvgC,MAAOlC,EAAUyD,QCxFd,MAAMs5F,WAAgBvvE,GACzB,mBAAWp4B,GACP,OAAOG,EAASwnG,OACpB,CAIA,WAAA5nG,CAAYmX,GACRrV,QACAvD,KAAK4Y,IAAMA,EACX5Y,KAAK20B,SAAWmF,GAASC,SAASG,OAClCl6B,KAAKqD,KAAO,WAEZrD,KAAKspG,gBAAkB,EACvBtpG,KAAKupG,mBAAqB,CAC9B,CAEA,IAAA/yF,GACI,IAAI3I,EACJ,MAAMkpB,EAAM/2B,KAAKuW,eACXwkB,EAAO/6B,KAAKg7B,oBAClBh7B,KAAK+W,cACL,MAAM+5B,EAAgB/V,EAAKiW,mBAE3B,IAAIrtC,EADUo3B,EAAK6O,mBAAmB5pC,KAAK20B,SAAU30B,KAAKgT,OAC5CrP,EACd,MAAM+8B,EAAKr+B,EAAY04B,GACjBjL,EAAQ4Q,EAAKp+B,GAAU41F,MAAQ,EAC/B52F,EAAW,YAAWo/B,EAAK,QAAU,WACrCkD,EAAYvV,EAAOC,mBACzB,IAAIk7E,EAAY5lE,EAAUjyB,aAAa,GAAGrQ,aAAsBwvC,EAEhE04D,GAAaxpG,KAAKspG,gBAClB,MAAM7+F,EAASzK,KAAK4Y,IAAM4wF,EAC1B,IAAI3gG,EAAIkyB,EAAKuY,iBAAiBpH,MAAQzhC,EAElC5B,GADAioC,EAAgB,EACXlN,EAAUjyB,aAAa,GAAGrQ,qBAA8BwuB,EAGxD8T,EAAUjyB,aAAa,GAAGrQ,mBAA4BwuB,EAE/D,MAAMwZ,EAAmE,QAAtDz7B,EAAK+1B,EAAUjyB,aAAa,GAAGrQ,kBAAsC,IAAPuM,EAAgBA,EAAKnL,GAAKs7C,SAAStd,EAAK,QAAU,WACnI/8B,GAAKigC,EAAUjyB,aAAa,GAAGrQ,gBAAuBwvC,IAAkB/G,GAAKC,GAAK,KAAO,UACzF,IAAK,IAAIvhC,EAAI,EAAGA,EAAIzI,KAAK4Y,MAAOnQ,EAC5BynB,EAAM4G,YAAYC,EAAKpzB,EAAGkF,EAAGygC,EAAWtpC,KAAKqD,KAAM,CAAE/B,WAAUwuB,MAAO9vB,KAAKupG,qBAC3E1gG,GAAK2gG,CAEb,ECpDG,MAAMC,GACT,gBAAWC,GACP,MAAO,CACHC,SAAU,0BACVC,OAAQ,0BACRC,MAAO,0BACPxpE,GAAI,gCACJypE,cAAe,sBACfC,aAAc,sBACdC,aAAc,sBACdC,aAAc,sBAEtB,CAKA,WAAAxoG,CAAYyoG,EAAe,mCACvBlqG,KAAKmqG,aAAe,GAEpBnqG,KAAKoqG,UAAUF,EACnB,CAEA,aAAAG,CAAc/oE,GACV,IAAIzzB,EACJ,OAA6D,QAArDA,EAAKwgB,EAAOK,cAAc4S,GAAYlS,iBAA8B,IAAPvhB,EAAgBA,GAAM,CAC/F,CAKA,SAAAu8F,CAAUF,GACFT,GAAOC,MAAMQ,KACbA,EAAeT,GAAOC,MAAMQ,IAEhClqG,KAAKmqG,aAAe,GACpB,MAAMn2F,EAAOk2F,EAAaxhG,MAAM,WAChC,GAAoB,IAAhBsL,EAAKnO,OACL,MAAM,IAAI1C,EAAa,eAAgB,0BAA0B+mG,KAErE,IAAK,IAAIzhG,EAAI,EAAGA,EAAIuL,EAAKnO,SAAU4C,EAC/BzI,KAAKmqG,aAAa1hG,GAAKzI,KAAKqqG,cAAcr2F,EAAKvL,GAEvD,CAEA,iBAAA6hG,CAAkBC,GACd,MAAMniG,EAAI5C,OAAO+kG,GACjB,GAAIniG,EAAI,GAAKA,EAAIpI,KAAKmqG,aAAatkG,OAC/B,MAAM,IAAI1C,EAAa,eAAgB,uCAAuCnD,KAAKmqG,aAAatkG,UAAU0kG,KAE9G,OAAOvqG,KAAKmqG,aAAa/hG,EAAI,EACjC,CAEA,eAAAoiG,CAAgBC,EAASF,GACrB,MAAMG,EAAc1qG,KAAKsqG,kBAAkBC,GACrCjiG,EAAI9C,OAAOilG,GACjB,GAAIniG,EAAI,EACJ,MAAM,IAAInF,EAAa,eAAgB,oCAAoCsnG,KAE/E,OAAOC,EAAcpiG,CACzB,CAEA,cAAAqiG,CAAeF,EAASF,GACpB,MAAM56E,EAAY3vB,KAAKwqG,gBAAgBC,EAASF,GAC1C9tF,EAASxX,KAAK2C,MAAM+nB,EAAY,IAChCvuB,EAAQuuB,EAAY,GAC1B,MAAO,GAAGtB,EAAOoB,cAAcruB,MAAUqb,GAC7C,ECxEJ,IAAI,GAAwC,SAAUjQ,EAASC,EAAYC,EAAGC,GAE1E,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAU3L,GAAS,IAAM4L,EAAKL,EAAUM,KAAK7L,GAAS,CAAE,MAAOT,GAAKmM,EAAOnM,EAAI,CAAE,CAC1F,SAASuM,EAAS9L,GAAS,IAAM4L,EAAKL,EAAiB,MAAEvL,GAAS,CAAE,MAAOT,GAAKmM,EAAOnM,EAAI,CAAE,CAC7F,SAASqM,EAAKG,GAJlB,IAAe/L,EAIa+L,EAAOC,KAAOP,EAAQM,EAAO/L,QAJ1CA,EAIyD+L,EAAO/L,MAJhDA,aAAiBsL,EAAItL,EAAQ,IAAIsL,GAAE,SAAUG,GAAWA,EAAQzL,EAAQ,KAIjBiM,KAAKN,EAAWG,EAAW,CAC7GF,GAAML,EAAYA,EAAUW,MAAMd,EAASC,GAAc,KAAKQ,OAClE,GACJ,EAmFA,MAAM29F,GACF,gBAAWC,GACP,MAAO,CAEHC,QC/FW,QDiGXn2F,GChGM,2CDkGNo2F,KCjGQ,2BDmGhB,CA2BA,mBAAOC,IAAgBC,GAEnB,MAAM16F,EAAQ06F,EAAUh3F,KAAKhE,GAAaxC,EAAK6C,KAAKL,KAIpD,OAHAoe,EAAOE,iBAAmBhe,EAC1B2f,EAAM3B,iBAAmBhe,EAAMrM,QAC/BgsB,EAAM0J,kBAAoBqxE,EAAU9mG,KAAK,KAClCoM,CACX,CAKA,qBAAO26F,CAAej7F,EAAUk7F,GAC5B,OAAO,GAAUnrG,UAAM,OAAQ,GAAQ,YAGvC,GACJ,CACA,mBAAOorG,GAEH,OADc/8E,EAAOE,iBACRta,KAAKjF,GAASA,EAAKmC,WACpC,CACA,wBAAOk6F,GACH,OAAOh9E,EAAOE,gBAClB,CACA,kCAAW0D,GACP,OAAO5D,EAAO4D,uBAClB,CACA,kCAAWA,CAAwB+D,GAC/B3H,EAAO4D,wBAA0B+D,CACrC,CACA,yBAAWnE,GACP,OAAOxD,EAAOwD,cAClB,CACA,yBAAWA,CAAegpC,GACtBxsC,EAAOwD,eAAiBgpC,CAC5B,CACA,8BAAWlpC,GACP,OAAOtD,EAAOsD,mBAClB,CACA,8BAAWA,CAAoBvwB,GAC3BitB,EAAOsD,oBAAsBvwB,CACjC,CACA,+BAAW+uB,GACP,OAAO9B,EAAO8B,oBAClB,CACA,+BAAWA,CAAqB/uB,GAC5BitB,EAAO8B,qBAAuB/uB,CAClC,CACA,qBAAWmX,GACP,OAAO8V,EAAO9V,UAClB,CACA,qBAAWA,CAAWnX,GAClBitB,EAAO9V,WAAanX,CACxB,CACA,+BAAW8wB,GACP,OAAO7D,EAAO6D,oBAClB,CACA,+BAAWA,CAAqB9wB,GAC5BitB,EAAO6D,qBAAuB9wB,CAClC,CACA,8BAAW+wB,GACP,OAAO9D,EAAO8D,mBAClB,CACA,8BAAWA,CAAoB/wB,GAC3BitB,EAAO8D,oBAAsB/wB,CACjC,CACA,+BAAW4wB,GACP,OAAO3D,EAAO2D,oBAClB,CACA,+BAAWA,CAAqB5wB,GAC5BitB,EAAO2D,qBAAuB5wB,CAClC,CACA,sBAAW2wB,GACP,OAAO1D,EAAO0D,WAClB,CACA,sBAAWA,CAAY3wB,GACnBitB,EAAO0D,YAAc3wB,CACzB,CACA,qBAAW0wB,GACP,OAAOzD,EAAOyD,UAClB,CACA,qBAAWA,CAAW1wB,GAClBitB,EAAOyD,WAAa1wB,CACxB,CACA,kBAAW2yB,GACP,OAAO1F,EAAO0F,OAClB,CACA,wBAAW1B,GACP,OAAOhE,EAAOgE,aAClB,CACA,kBAAWQ,GACP,OAAOxE,EAAOwE,OAClB,CACA,mBAAOnC,CAAaC,GAChB,OAAOtC,EAAOqC,aAAaC,EAC/B,CACA,sBAAOK,CAAgBL,GACnB,OAAOtC,EAAO2C,gBAAgBL,EAClC,CACA,uBAAOI,GACH,OAAO1C,EAAO0C,kBAClB,CACA,qBAAOvC,CAAeC,GAClB,OAAOJ,EAAOG,eAAeC,EACjC,CAEA,oBAAOC,CAAcvuB,EAAKsuB,EAAMG,GAC5B,OAAOP,EAAOK,cAAcvuB,EAAKsuB,EAAMG,EAC3C,CACA,sBAAOwC,CAAgBrC,GACnB,OAAOV,EAAO+C,gBAAgBrC,EAClC,EAEJ67E,GAAK9oG,WAAaA,GAClB8oG,GAAK5oG,WAAaA,GAClB4oG,GAAKz2D,aAAeA,GACpBy2D,GAAK1oG,QAAUA,GACf0oG,GAAKjpD,QAAUA,GACfipD,GAAKvuC,KAAOA,GACZuuC,GAAK/oD,KAAOA,GACZ+oD,GAAKjiG,YAAcA,EACnBiiG,GAAK5gG,uBAAyBA,EAC9B4gG,GAAKtrC,cAAgBA,GACrBsrC,GAAK9mD,YAAcA,GACnB8mD,GAAK9/B,KAAOA,GACZ8/B,GAAKpb,SAAWA,GAChBob,GAAKlb,UAAYA,GACjBkb,GAAKpa,MAAQA,GACboa,GAAKxoG,IAAMA,GACXwoG,GAAK9W,UAAYA,GACjB8W,GAAKn2F,QAAUA,EACfm2F,GAAKxF,QAAUA,GACfwF,GAAKn9F,KAAOA,EACZm9F,GAAK3uC,UAAYA,GACjB2uC,GAAKtlG,SAAWA,EAChBslG,GAAKj/C,eAAiBA,GACtBi/C,GAAKrT,UAAYA,GACjBqT,GAAK16E,MAAQA,EACb06E,GAAK5S,UAAYA,GACjB4S,GAAKtoG,UAAYA,GACjBsoG,GAAKpoG,eAAiBA,GACtBooG,GAAK/D,aAAeA,GACpB+D,GAAK9D,WAAaA,GAClB8D,GAAKz/B,aAAeA,GACpBy/B,GAAKlR,WAAaA,GAClBkR,GAAK9wE,SAAWA,GAChB8wE,GAAKngC,gBAAkBA,GACvBmgC,GAAKhR,iBAAmBA,GACxBgR,GAAKnuE,MAAQA,GACbmuE,GAAKloG,KAAOA,GACZkoG,GAAKp9C,SAAWA,GAChBo9C,GAAKluC,aAAeA,GACpBkuC,GAAK/tC,SAAWA,GAChB+tC,GAAKjsC,YAAcA,GACnBisC,GAAKjZ,OAASA,GACdiZ,GAAK1O,aAAeA,GACpB0O,GAAKl4F,SAAWA,EAChBk4F,GAAKhoG,cAAgBA,GACrBgoG,GAAK/lC,SAAWA,GAChB+lC,GAAKlN,WAAaA,GAClBkN,GAAK39B,WAAaA,GAClB29B,GAAKr3B,MAAQA,GACbq3B,GAAKvyB,eAAiBA,GACtBuyB,GAAKlD,aAAeA,GACpBkD,GAAKhN,UAAYA,GACjBgN,GAAKhsD,cAAgBA,GACrBgsD,GAAK9nG,UAAYA,GACjB8nG,GAAK57B,WAAaA,GAClB47B,GAAKh6B,UAAYA,GACjBg6B,GAAKvzC,SAAWA,GAChBuzC,GAAK7gE,KAAOA,GACZ6gE,GAAKhkC,aAAeA,GACpBgkC,GAAKziC,OAASA,GACdyiC,GAAKjpC,WAAaA,GAClBipC,GAAKhL,OAASA,GACdgL,GAAK1nG,QAAUA,GACf0nG,GAAK/B,SAAWA,GAChB+B,GAAKrH,SAAWA,GAChBqH,GAAK9xC,OAASA,GACd8xC,GAAKnH,YAAcA,GACnBmH,GAAKpG,aAAeA,GACpBoG,GAAK79D,cAAgBA,GACrB69D,GAAKp7B,SAAWA,GAChBo7B,GAAK/vB,YAAcA,GACnB+vB,GAAKx4B,cAAgBA,GACrBw4B,GAAK7F,YAAcA,GACnB6F,GAAKvB,QAAUA,GACfuB,GAAKnB,OAASA,GACdmB,GAAK/lB,OAASA,GACd+lB,GAAKlhC,QAAUA,GACfkhC,GAAK3F,eAAiBA,GACtB2F,GAAK1xC,MAAQA,GACb0xC,GAAK55B,MAAQA,GAGb45B,GAAK36D,4BAA8BA,GACnC26D,GAAK16D,0BAA4BA,GACjC06D,GAAKpsD,6BAA+BA,GACpCosD,GAAKnsD,2BAA6BA,GAClCmsD,GAAKlsD,YAAcA,GACnBksD,GAAKjsD,gBAAkBA,GACvBisD,GAAKra,cAAgBA,GACrBqa,GAAKv+F,WAAaA,EAClBu+F,GAAKt+F,UAAYA,EACjBs+F,GAAK11E,iBAAmBA,EACxB01E,GAAKrmC,iBAAmBA,GACxBqmC,GAAKpmC,oBAAsBA,GAC3BomC,GAAKrsD,YAAcA,GACnBqsD,GAAKtsD,sBAAwBA,GAC7BssD,GAAKlmC,UAAYA,GACjBkmC,GAAKlH,oBAAsBA,GAC3BkH,GAAKnmC,kBAAoBA,GACzBmmC,GAAK3xC,UAAYA,GErVV,MAAMqyC,GAAqB,CAC9Bz4D,QAAS,GACTnhC,OAAQ,CACJ,IAAK,CACDglB,MAAO,EACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,EACjBzV,aAAc,KAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,EACjBzV,aAAc,KAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBm8D,EAAG,CACC70E,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,OAAQ,EACRC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,iBAAkB,EAClBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,GACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,GACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,OAAQ,GACRC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,IACJiuB,iBAAkB,GAClBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,GACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,kBACPC,MAAO,IACP9Y,GAAI,kBACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,GACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBn1B,EAAG,CACCyc,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBj1B,EAAG,CACCuc,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBz2B,EAAG,CACC+d,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBr1B,EAAG,CACC2c,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBl1B,EAAG,CACCwc,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBt2B,EAAG,CACC4d,MAAO,GACPC,MAAO,IACP8Y,MAAO,GACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBv1B,EAAG,CACC6c,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBnR,EAAG,CACCvH,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBo8D,EAAG,CACC90E,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBq8D,EAAG,CACC/0E,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBs8D,EAAG,CACCh1E,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB5L,EAAG,CACC9M,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBxP,EAAG,CACClJ,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBu8D,EAAG,CACCj1E,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBw8D,EAAG,CACCl1E,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB1iC,EAAG,CACCgqB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBy8D,EAAG,CACCn1E,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB9yB,EAAG,CACCoa,MAAO,GACPC,MAAO,IACP8Y,MAAO,GACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBpR,EAAG,CACCtH,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBjR,EAAG,CACCzH,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB08D,EAAG,CACCp1E,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB28D,EAAG,CACCr1E,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBhR,EAAG,CACC1H,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB5yB,EAAG,CACCka,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB48D,EAAG,CACCt1E,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB68D,EAAG,CACCv1E,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,KAAM,CACF1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,OAAQ,GACRC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,KACJiuB,iBAAkB,GAClBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB88D,EAAG,CACCx1E,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,OAAQ,EACR9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB3qC,EAAG,CACCiyB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB1qC,EAAG,CACCgyB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBpjC,EAAG,CACC0qB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBhpC,EAAG,CACCswB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBzuC,EAAG,CACC+1B,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB9mC,EAAG,CACCouB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB3uC,EAAG,CACCi2B,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBrmC,EAAG,CACC2tB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB3mC,EAAG,CACCiuB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB4W,EAAG,CACCtvB,OAAQ,IACRC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,IACJiuB,iBAAkB,IAClBzV,aAAc,KAElBl7B,EAAG,CACCwiB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB+8D,EAAG,CACCz1E,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB7b,EAAG,CACCmD,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBxqC,EAAG,CACC8xB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBhvC,EAAG,CACCs2B,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBygC,EAAG,CACCn5C,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB/mC,EAAG,CACCquB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBnuC,EAAG,CACCy1B,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBhnC,EAAG,CACCsuB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB1pC,EAAG,CACCgxB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBjpC,EAAG,CACCuwB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB8rB,EAAG,CACCxkC,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBtmC,EAAG,CACC4tB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBzrC,EAAG,CACC+yB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBvmC,EAAG,CACC6tB,OAAQ,GACRC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,IACJiuB,iBAAkB,GAClBzV,aAAc,KAElB0gC,EAAG,CACCp5C,MAAO,GACPC,MAAO,IACP8Y,OAAQ,EACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,EACPC,MAAO,EACP8Y,MAAO,EACPC,MAAO,EACP9Y,GAAI,EACJiuB,gBAAiB,EACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,EACPC,MAAO,EACP8Y,MAAO,EACPC,MAAO,EACP9Y,GAAI,EACJiuB,gBAAiB,EACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,EACPC,MAAO,EACP8Y,MAAO,EACPC,MAAO,EACP9Y,GAAI,EACJiuB,gBAAiB,EACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,EACPC,MAAO,EACP8Y,MAAO,EACPC,MAAO,EACP9Y,GAAI,EACJiuB,gBAAiB,EACjBzV,aAAc,MAGtBngC,WAAY,iBACZuC,WAAY,IACZ46F,YAAa,4BC71BJC,GAAiB,CAC1Bx5D,QAAS,GACTnhC,OAAQ,CACJ,IAAK,CACDglB,MAAO,EACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,EACjBzV,aAAc,KAElB,EAAK,CACD1Y,MAAO,IACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,EAAK,CACD1Y,MAAO,iBACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,kBACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,iBACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,IACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,iBAAkB,GAClBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,KACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBm8D,EAAG,CACC70E,MAAO,kBACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,KACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,EACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,EACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,GACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,kBACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,iBACPC,MAAO,mBACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBn1B,EAAG,CACCyc,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBj1B,EAAG,CACCuc,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBz2B,EAAG,CACC+d,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBr1B,EAAG,CACC2c,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBl1B,EAAG,CACCwc,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBt2B,EAAG,CACC4d,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBv1B,EAAG,CACC6c,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBnR,EAAG,CACCvH,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBo8D,EAAG,CACC90E,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElBq8D,EAAG,CACC/0E,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBs8D,EAAG,CACCh1E,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB5L,EAAG,CACC9M,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBxP,EAAG,CACClJ,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBu8D,EAAG,CACCj1E,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBw8D,EAAG,CACCl1E,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB1iC,EAAG,CACCgqB,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBy8D,EAAG,CACCn1E,MAAO,GACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB9yB,EAAG,CACCoa,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBpR,EAAG,CACCtH,MAAO,IACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBjR,EAAG,CACCzH,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB08D,EAAG,CACCp1E,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB28D,EAAG,CACCr1E,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBhR,EAAG,CACC1H,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB5yB,EAAG,CACCka,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB48D,EAAG,CACCt1E,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB68D,EAAG,CACCv1E,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,KAAM,CACF1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB88D,EAAG,CACCx1E,MAAO,IACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,EACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,KACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB3qC,EAAG,CACCiyB,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB1qC,EAAG,CACCgyB,OAAQ,GACRC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,iBAAkB,GAClBzV,aAAc,MAElBpjC,EAAG,CACC0qB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBhpC,EAAG,CACCswB,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBzuC,EAAG,CACC+1B,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB9mC,EAAG,CACCouB,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB3uC,EAAG,CACCi2B,MAAO,GACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBrmC,EAAG,CACC2tB,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB3mC,EAAG,CACCiuB,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB4W,EAAG,CACCtvB,OAAQ,GACRC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,iBAAkB,GAClBzV,aAAc,KAElBl7B,EAAG,CACCwiB,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB+8D,EAAG,CACCz1E,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB7b,EAAG,CACCmD,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBxqC,EAAG,CACC8xB,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBhvC,EAAG,CACCs2B,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBygC,EAAG,CACCn5C,MAAO,GACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB/mC,EAAG,CACCquB,MAAO,GACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBnuC,EAAG,CACCy1B,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElBhnC,EAAG,CACCsuB,MAAO,IACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB1pC,EAAG,CACCgxB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElBjpC,EAAG,CACCuwB,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB8rB,EAAG,CACCxkC,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBtmC,EAAG,CACC4tB,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBzrC,EAAG,CACC+yB,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBvmC,EAAG,CACC6tB,MAAO,GACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB0gC,EAAG,CACCp5C,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,KACP8Y,MAAO,IACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,OAGtBngC,WAAY,cACZuC,WAAY,KACZ46F,YAAa,4BC71BJE,GAAe,CACxB56F,OAAQ,CACJ,EAAK,CACDglB,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,EACPC,MAAO,EACP8Y,MAAO,EACPC,MAAO,EACP9Y,GAAI,EACJiuB,gBAAiB,EACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBm8D,EAAG,CACC70E,MAAO,GACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,OAAQ,EACRC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,iBAAkB,EAClBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBn1B,EAAG,CACCyc,MAAO,EACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,EACjBzV,aAAc,MAElBj1B,EAAG,CACCuc,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBz2B,EAAG,CACC+d,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBr1B,EAAG,CACC2c,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBl1B,EAAG,CACCwc,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBt2B,EAAG,CACC4d,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBv1B,EAAG,CACC6c,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBnR,EAAG,CACCvH,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBo8D,EAAG,CACC90E,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElBq8D,EAAG,CACC/0E,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBs8D,EAAG,CACCh1E,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB5L,EAAG,CACC9M,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBxP,EAAG,CACClJ,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBu8D,EAAG,CACCj1E,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBw8D,EAAG,CACCl1E,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB1iC,EAAG,CACCgqB,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBy8D,EAAG,CACCn1E,MAAO,GACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB9yB,EAAG,CACCoa,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBpR,EAAG,CACCtH,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBjR,EAAG,CACCzH,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB08D,EAAG,CACCp1E,MAAO,IACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB28D,EAAG,CACCr1E,OAAQ,EACRC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,iBAAkB,EAClBzV,aAAc,MAElBhR,EAAG,CACC1H,MAAO,EACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,EACjBzV,aAAc,MAElB5yB,EAAG,CACCka,MAAO,EACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,EACjBzV,aAAc,MAElB48D,EAAG,CACCt1E,OAAQ,EACRC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,iBAAkB,EAClBzV,aAAc,MAElB68D,EAAG,CACCv1E,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,KAAM,CACF1Y,OAAQ,EACRC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,iBAAkB,EAClBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,KACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,MAElB88D,EAAG,CACCx1E,OAAQ,GACRC,MAAO,KACP8Y,OAAQ,IACRC,OAAQ,IACR9Y,GAAI,IACJiuB,iBAAkB,GAClBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,KACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB3qC,EAAG,CACCiyB,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB1qC,EAAG,CACCgyB,MAAO,IACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBpjC,EAAG,CACC0qB,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBhpC,EAAG,CACCswB,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBzuC,EAAG,CACC+1B,MAAO,GACPC,MAAO,mBACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB9mC,EAAG,CACCouB,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB3uC,EAAG,CACCi2B,MAAO,GACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBrmC,EAAG,CACC2tB,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB3mC,EAAG,CACCiuB,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB4W,EAAG,CACCtvB,OAAQ,GACRC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,iBAAkB,GAClBzV,aAAc,KAElBl7B,EAAG,CACCwiB,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB+8D,EAAG,CACCz1E,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB7b,EAAG,CACCmD,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBxqC,EAAG,CACC8xB,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBhvC,EAAG,CACCs2B,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBygC,EAAG,CACCn5C,MAAO,IACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB/mC,EAAG,CACCquB,MAAO,GACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBnuC,EAAG,CACCy1B,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElBhnC,EAAG,CACCsuB,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB1pC,EAAG,CACCgxB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElBjpC,EAAG,CACCuwB,MAAO,IACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB8rB,EAAG,CACCxkC,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBtmC,EAAG,CACC4tB,MAAO,EACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,EACjBzV,aAAc,MAElBzrC,EAAG,CACC+yB,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBvmC,EAAG,CACC6tB,MAAO,GACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB0gC,EAAG,CACCp5C,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,MAAO,IACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,OAGtBngC,WAAY,QACZuC,WAAY,KACZ46F,YAAa,4BC51BJG,GAAW,CACpBC,OAAO,EACPt7F,KAAM,OACN2hC,QAAS,GACT45D,YAAa,2BACb5+D,MAAM,EACNC,QAAQ,EACRS,YAAY,EACZD,QAAQ,EACR58B,OAAQ,CACJ,EAAK,CACDglB,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,mBACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,EACPC,MAAO,EACP8Y,MAAO,EACPC,MAAO,EACP9Y,GAAI,EACJiuB,gBAAiB,EACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBm8D,EAAG,CACC70E,MAAO,GACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,KACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,EACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,EACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,KACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,KACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,KACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBn1B,EAAG,CACCyc,OAAQ,EACRC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,iBAAkB,EAClBzV,aAAc,MAElBj1B,EAAG,CACCuc,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBz2B,EAAG,CACC+d,MAAO,IACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBr1B,EAAG,CACC2c,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBl1B,EAAG,CACCwc,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBt2B,EAAG,CACC4d,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBv1B,EAAG,CACC6c,MAAO,IACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBnR,EAAG,CACCvH,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBo8D,EAAG,CACC90E,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElBq8D,EAAG,CACC/0E,MAAO,kBACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBs8D,EAAG,CACCh1E,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB5L,EAAG,CACC9M,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBxP,EAAG,CACClJ,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBu8D,EAAG,CACCj1E,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBw8D,EAAG,CACCl1E,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB1iC,EAAG,CACCgqB,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBy8D,EAAG,CACCn1E,MAAO,GACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB9yB,EAAG,CACCoa,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBpR,EAAG,CACCtH,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBjR,EAAG,CACCzH,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB08D,EAAG,CACCp1E,MAAO,IACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB28D,EAAG,CACCr1E,MAAO,EACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,EACjBzV,aAAc,MAElBhR,EAAG,CACC1H,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB5yB,EAAG,CACCka,MAAO,EACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,EACjBzV,aAAc,MAElB48D,EAAG,CACCt1E,MAAO,EACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,EACjBzV,aAAc,MAElB68D,EAAG,CACCv1E,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,KAAM,CACF1Y,MAAO,EACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,EACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB88D,EAAG,CACCx1E,OAAQ,GACRC,MAAO,KACP8Y,OAAQ,IACRC,OAAQ,IACR9Y,GAAI,IACJiuB,iBAAkB,GAClBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,KACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB3qC,EAAG,CACCiyB,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB1qC,EAAG,CACCgyB,MAAO,IACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBpjC,EAAG,CACC0qB,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBhpC,EAAG,CACCswB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBzuC,EAAG,CACC+1B,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB9mC,EAAG,CACCouB,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB3uC,EAAG,CACCi2B,MAAO,GACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBrmC,EAAG,CACC2tB,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB3mC,EAAG,CACCiuB,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB4W,EAAG,CACCtvB,OAAQ,GACRC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,iBAAkB,GAClBzV,aAAc,KAElBl7B,EAAG,CACCwiB,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB+8D,EAAG,CACCz1E,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB7b,EAAG,CACCmD,MAAO,IACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBxqC,EAAG,CACC8xB,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBhvC,EAAG,CACCs2B,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBygC,EAAG,CACCn5C,MAAO,IACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB/mC,EAAG,CACCquB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBnuC,EAAG,CACCy1B,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElBhnC,EAAG,CACCsuB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB1pC,EAAG,CACCgxB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElBjpC,EAAG,CACCuwB,MAAO,IACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB8rB,EAAG,CACCxkC,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBtmC,EAAG,CACC4tB,MAAO,EACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,EACjBzV,aAAc,MAElBzrC,EAAG,CACC+yB,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBvmC,EAAG,CACC6tB,MAAO,GACPC,MAAO,KACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB0gC,EAAG,CACCp5C,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,MAAO,IACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,OAGtBngC,WAAY,aACZuC,WAAY,KACZ46F,YAAa,4BCp2BJM,GAAY,CACrBF,OAAO,EACPt7F,KAAM,QACN2hC,QAAS,GACT45D,YAAa,sBACb5+D,MAAM,EACNC,QAAQ,EACRS,YAAY,EACZD,QAAQ,EACR58B,OAAQ,CACJ,EAAK,CACDglB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB,EAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,EACPC,MAAO,EACP8Y,MAAO,EACPC,MAAO,EACP9Y,GAAI,EACJiuB,gBAAiB,EACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,kBACPC,MAAO,kBACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,EACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBm8D,EAAG,CACC70E,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,kBACPC,MAAO,kBACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,mBACPC,MAAO,iBACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,OAAQ,GACRC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,iBAAkB,GAClBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,MAAO,IACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,MAElBn1B,EAAG,CACCyc,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBj1B,EAAG,CACCuc,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBz2B,EAAG,CACC+d,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBr1B,EAAG,CACC2c,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBl1B,EAAG,CACCwc,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBt2B,EAAG,CACC4d,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBv1B,EAAG,CACC6c,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBnR,EAAG,CACCvH,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBo8D,EAAG,CACC90E,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElBq8D,EAAG,CACC/0E,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElBs8D,EAAG,CACCh1E,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB5L,EAAG,CACC9M,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBxP,EAAG,CACClJ,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBu8D,EAAG,CACCj1E,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBw8D,EAAG,CACCl1E,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB1iC,EAAG,CACCgqB,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBy8D,EAAG,CACCn1E,MAAO,GACPC,MAAO,KACP8Y,OAAQ,mBACRC,MAAO,KACP9Y,GAAI,iBACJiuB,gBAAiB,GACjBzV,aAAc,MAElB9yB,EAAG,CACCoa,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBpR,EAAG,CACCtH,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBjR,EAAG,CACCzH,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB08D,EAAG,CACCp1E,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB28D,EAAG,CACCr1E,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBhR,EAAG,CACC1H,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB5yB,EAAG,CACCka,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB48D,EAAG,CACCt1E,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB68D,EAAG,CACCv1E,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,KAAM,CACF1Y,OAAQ,GACRC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,iBAAkB,GAClBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,IACPC,MAAO,KACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB88D,EAAG,CACCx1E,MAAO,EACPC,MAAO,KACP8Y,OAAQ,IACRC,OAAQ,IACR9Y,GAAI,IACJiuB,gBAAiB,EACjBzV,aAAc,MAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,IACP8Y,MAAO,KACPC,MAAO,kBACP9Y,GAAI,mBACJiuB,gBAAiB,GACjBzV,aAAc,KAElB3qC,EAAG,CACCiyB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB1qC,EAAG,CACCgyB,MAAO,EACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,EACjBzV,aAAc,MAElBpjC,EAAG,CACC0qB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBhpC,EAAG,CACCswB,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBzuC,EAAG,CACC+1B,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB9mC,EAAG,CACCouB,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB3uC,EAAG,CACCi2B,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElBrmC,EAAG,CACC2tB,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB3mC,EAAG,CACCiuB,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB4W,EAAG,CACCtvB,OAAQ,IACRC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,iBAAkB,IAClBzV,aAAc,KAElBl7B,EAAG,CACCwiB,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB+8D,EAAG,CACCz1E,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElB7b,EAAG,CACCmD,MAAO,GACPC,MAAO,KACP8Y,MAAO,EACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,MAElBxqC,EAAG,CACC8xB,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,MAElBhvC,EAAG,CACCs2B,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,MAElBygC,EAAG,CACCn5C,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB/mC,EAAG,CACCquB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,kBACP9Y,GAAI,mBACJiuB,gBAAiB,GACjBzV,aAAc,MAElBnuC,EAAG,CACCy1B,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElBhnC,EAAG,CACCsuB,MAAO,IACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,kBACP9Y,GAAI,kBACJiuB,gBAAiB,IACjBzV,aAAc,KAElB1pC,EAAG,CACCgxB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,KAElBjpC,EAAG,CACCuwB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,MAElB8rB,EAAG,CACCxkC,MAAO,GACPC,MAAO,IACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,MAElBtmC,EAAG,CACC4tB,MAAO,GACPC,MAAO,KACP8Y,OAAQ,GACRC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,MAElBzrC,EAAG,CACC+yB,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,MAElBvmC,EAAG,CACC6tB,MAAO,GACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,IACP9Y,GAAI,KACJiuB,gBAAiB,GACjBzV,aAAc,MAElB0gC,EAAG,CACCp5C,MAAO,GACPC,MAAO,IACP8Y,MAAO,EACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,IACPC,MAAO,IACP8Y,OAAQ,IACRC,MAAO,KACP9Y,GAAI,KACJiuB,gBAAiB,IACjBzV,aAAc,KAElB,IAAK,CACD1Y,MAAO,GACPC,MAAO,KACP8Y,MAAO,IACPC,MAAO,IACP9Y,GAAI,IACJiuB,gBAAiB,GACjBzV,aAAc,OAGtBngC,WAAY,QACZuC,WAAY,KACZ46F,YAAa,4BC/1BjB,MAAMO,GAUF,oBAAOC,CAAcxnG,EAAKynG,EAAKC,GAC3B,GAAI1nG,EAAIS,OAAS,EAAG,CAChB,MAAMknG,EAAS,GACf,IAAIC,EACJ5nG,EAAI0/B,KAAK+nE,GACT,IAAK,IAAIpkG,EAAI,EAAGA,EAAIrD,EAAIS,SAAU4C,EACpB,IAANA,GAAYqkG,EAAG1nG,EAAIqD,GAAIukG,IACvBD,EAAO73F,KAAK9P,EAAIqD,IAEpBukG,EAAO5nG,EAAIqD,GAEf,OAAOskG,CACX,CAEI,OAAO3nG,CAEf,CAGA,eAAO6nG,CAAS7nG,EAAKxE,GACjB,IAAI6H,EAAIrD,EAAIS,OACZ,KAAO4C,KACH,GAAIrD,EAAIqD,KAAO7H,EACX,OAAO,EAGf,OAAO,CACX,CAEA,uBAAOwkE,CAAiB8nC,GACpB,IAAKA,EACD,MAAM,IAAI/pG,EAAa,cAAe,4BAA8B+pG,GAExE,MAAMvtC,EAAS7wD,SAASwE,eAAe45F,GACvC,IAAMvtC,IAAUA,EAAOroD,WACnB,MAAM,IAAInU,EAAa,0BAA2B,8CAEtD,OAAOw8D,EAAOroD,WAAW,KAC7B,CAGA,gBAAO61F,CAAU/kG,EAAGE,GAChB,MAAM8kG,GAAa,IAAIC,MAAOC,UAC9BhlG,IAEAzE,EAAIuE,GADY,IAAIilG,MAAOC,UAAYF,EACtB,KACrB,CAEA,iBAAOG,GAEH,OADY,IAAInqG,OACLmB,KACf,EAEJooG,GAAI/B,KAAOA,GC1DX,IAAI,GAAwC,SAAUp+F,EAASC,EAAYC,EAAGC,GAE1E,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAU3L,GAAS,IAAM4L,EAAKL,EAAUM,KAAK7L,GAAS,CAAE,MAAOT,GAAKmM,EAAOnM,EAAI,CAAE,CAC1F,SAASuM,EAAS9L,GAAS,IAAM4L,EAAKL,EAAiB,MAAEvL,GAAS,CAAE,MAAOT,GAAKmM,EAAOnM,EAAI,CAAE,CAC7F,SAASqM,EAAKG,GAJlB,IAAe/L,EAIa+L,EAAOC,KAAOP,EAAQM,EAAO/L,QAJ1CA,EAIyD+L,EAAO/L,MAJhDA,aAAiBsL,EAAItL,EAAQ,IAAIsL,GAAE,SAAUG,GAAWA,EAAQzL,EAAQ,KAIjBiM,KAAKN,EAAWG,EAAW,CAC7GF,GAAML,EAAYA,EAAUW,MAAMd,EAASC,GAAc,KAAKQ,OAClE,GACJ,EAOA,MAAMugG,GAAc,CAChBC,QAAS,4BACTC,SAAU,6BACVC,SAAU,6BACVC,OAAQ,2BACRC,OAAQ,4B,OASZjD,GAAKM,eAAiB,CAACj7F,EAAUk7F,IAAqB,QAAU,OAAQ,OAAQ,GAAQ,YACpF,MAAMn8F,EAAOvB,EAAK6C,KAAKL,GAEvB,GAAIjB,EAAKsC,UACL,OAEJ,IAAK65F,EAAkB,CAEnB,KAAIl7F,KAAYu9F,IAIZ,MAAM,IAAIrqG,EAAa,cAAe,cAAc8M,qBAHpDk7F,EAAmBqC,GAAYv9F,EAKvC,CACA,IAAI69F,EACJ,GAAgC,iBAArB3C,EAA+B,CACtC,MAAMxrG,QAAeouG,OAAiC5C,GAEhD6C,EADIxqG,IACyB,YAG/BsqG,OAFuB,IAAhBE,QAAgE,IAA1BA,EAAY/9F,GAE5C+9F,EAAY/9F,GAKZtQ,EAAO8N,IAE5B,MAEIqgG,EAAa3C,EAEjBn8F,EAAKgC,QAAQ88F,EAAWh9F,MACxB9B,EAAKiC,WAAW68F,EAAW/8F,QAC/B,ICjEO,WAEH,CACI,MAAMk9F,EAAW3B,IACX,WAAEr9F,EAAU,WAAEuC,EAAU,OAAEE,GAAWu8F,EAC3CxgG,EAAK6C,KAAKrB,EAAYg/F,GAGtB,MAAMv/D,EAAe,IACrB3B,GAAcqB,aAAa,CACvB1/B,OAAQO,EACRuC,aACAE,SACAg9B,eACAH,YAAY,EACZV,MAAM,EACNC,QAAQ,EACRU,kBAAmB,IACnBC,gBAAiB,IACjBH,QAAQ,EACR4/D,YAAa,qBAErB,CAEA,CACI,MAAMD,EAAW1B,IACX,WAAEt9F,EAAU,WAAEuC,EAAU,OAAEE,GAAWu8F,EAC3CxgG,EAAK6C,KAAKrB,EAAYg/F,GAGtB,MAAMv/D,EAAe,IACrB3B,GAAcqB,aAAa,CACvB1/B,OAAQO,EACRuC,aACAE,SACAg9B,eACAH,YAAY,EACZV,MAAM,EACNC,QAAQ,EACRU,kBAAmB,IACnBC,gBAAiB,IACjBH,QAAQ,EACR4/D,YAAa,qBAErB,CAEA,CACI,MAAMD,EAAWvB,IACX,WAAEz9F,EAAU,WAAEuC,EAAU,OAAEE,GAAWu8F,EAC3CxgG,EAAK6C,KAAKrB,EAAYg/F,GAGtB,MAAMv/D,EAAe,IACrB3B,GAAcqB,aAAa,CACvB1/B,OAAQO,EACRuC,aACAE,SACAg9B,eACAH,YAAY,EACZV,MAAM,EACNC,QAAQ,EACRU,kBAAmB,IACnBC,gBAAiB,IACjBH,QAAQ,EACR4/D,YAAa,sBAErB,CAEA,CACI,MAAMD,EAAW5B,IACX,WAAEp9F,EAAU,WAAEuC,EAAU,OAAEE,GAAWu8F,EAC3CxgG,EAAK6C,KAAKrB,EAAYg/F,GAGtB,MAAMv/D,EAAe,IACrB3B,GAAcqB,aAAa,CACvB1/B,OAAQO,EACRuC,aACAE,SACAg9B,eACAH,YAAY,EACZV,MAAM,EACNC,QAAQ,EACRU,kBAAmB,IACnBC,gBAAiB,IACjBH,QAAQ,EACR4/D,YAAa,8DAErB,CAEA,CACI,MAAMD,EAAW3C,IACX,WAAEr8F,EAAU,WAAEuC,EAAU,OAAEE,GAAWu8F,EAC3CxgG,EAAK6C,KAAKrB,EAAYg/F,GAGtB,MAAMv/D,EAAe,IACrB3B,GAAcqB,aAAa,CACvB1/B,OAAQO,EACRuC,aACAE,SACAg9B,eACAH,YAAY,EACZV,MAAM,EACNC,QAAQ,EACRU,kBAAmB,IACnBC,gBAAiB,IACjBH,QAAQ,EACR4/D,YAAa,mDAErB,CACJ,CD5CAC,G,atGlEA","sources":["webpack://Vex/webpack/universalModuleDefinition","webpack://Vex/webpack/bootstrap","webpack://Vex/webpack/runtime/define property getters","webpack://Vex/webpack/runtime/global","webpack://Vex/webpack/runtime/hasOwnProperty shorthand","webpack://Vex/webpack/runtime/make namespace object","webpack://Vex/./src/typeguard.ts","webpack://Vex/./src/util.ts","webpack://Vex/./src/fraction.ts","webpack://Vex/./src/boundingbox.ts","webpack://Vex/./src/boundingboxcomputation.ts","webpack://Vex/./src/font.ts","webpack://Vex/./src/registry.ts","webpack://Vex/./src/element.ts","webpack://Vex/./src/tables.ts","webpack://Vex/./src/glyph.ts","webpack://Vex/./src/modifier.ts","webpack://Vex/./src/music.ts","webpack://Vex/./src/accidental.ts","webpack://Vex/./src/stem.ts","webpack://Vex/./src/textformatter.ts","webpack://Vex/./src/annotation.ts","webpack://Vex/./src/articulation.ts","webpack://Vex/./src/rendercontext.ts","webpack://Vex/./src/tickable.ts","webpack://Vex/./src/note.ts","webpack://Vex/./src/stavemodifier.ts","webpack://Vex/./src/stavebarline.ts","webpack://Vex/./src/chordsymbol.ts","webpack://Vex/./src/barnote.ts","webpack://Vex/./src/bend.ts","webpack://Vex/./src/dot.ts","webpack://Vex/./src/frethandfinger.ts","webpack://Vex/./src/notehead.ts","webpack://Vex/./src/stemmablenote.ts","webpack://Vex/./src/stavenote.ts","webpack://Vex/./src/stavetie.ts","webpack://Vex/./src/tabtie.ts","webpack://Vex/./src/voice.ts","webpack://Vex/./src/gracenotegroup.ts","webpack://Vex/./src/notesubgroup.ts","webpack://Vex/./src/ornament.ts","webpack://Vex/./src/parenthesis.ts","webpack://Vex/./src/web.ts","webpack://Vex/./src/canvascontext.ts","webpack://Vex/./src/svgcontext.ts","webpack://Vex/./src/renderer.ts","webpack://Vex/./src/textnote.ts","webpack://Vex/./src/stavevolta.ts","webpack://Vex/./src/stringnumber.ts","webpack://Vex/./src/strokes.ts","webpack://Vex/./src/vibrato.ts","webpack://Vex/./src/modifiercontext.ts","webpack://Vex/./src/clef.ts","webpack://Vex/./src/keysignature.ts","webpack://Vex/./src/staverepetition.ts","webpack://Vex/./src/stavesection.ts","webpack://Vex/./src/stavetempo.ts","webpack://Vex/./src/stavetext.ts","webpack://Vex/./src/timesigglyph.ts","webpack://Vex/./src/timesignature.ts","webpack://Vex/./src/stave.ts","webpack://Vex/./src/staveconnector.ts","webpack://Vex/./src/tickcontext.ts","webpack://Vex/./src/formatter.ts","webpack://Vex/./src/tuplet.ts","webpack://Vex/./src/beam.ts","webpack://Vex/./src/clefnote.ts","webpack://Vex/./src/crescendo.ts","webpack://Vex/./src/curve.ts","webpack://Vex/./src/parser.ts","webpack://Vex/./src/easyscore.ts","webpack://Vex/./src/ghostnote.ts","webpack://Vex/./src/glyphnote.ts","webpack://Vex/./src/gracenote.ts","webpack://Vex/./src/keysignote.ts","webpack://Vex/./src/multimeasurerest.ts","webpack://Vex/./src/pedalmarking.ts","webpack://Vex/./src/repeatnote.ts","webpack://Vex/./src/staveline.ts","webpack://Vex/./src/system.ts","webpack://Vex/./src/tabnote.ts","webpack://Vex/./src/tabstave.ts","webpack://Vex/./src/textbracket.ts","webpack://Vex/./src/textdynamics.ts","webpack://Vex/./src/timesignote.ts","webpack://Vex/./src/vibratobracket.ts","webpack://Vex/./src/factory.ts","webpack://Vex/./src/gracetabnote.ts","webpack://Vex/./src/keymanager.ts","webpack://Vex/./src/stavehairpin.ts","webpack://Vex/./src/tabslide.ts","webpack://Vex/./src/tremolo.ts","webpack://Vex/./src/tuning.ts","webpack://Vex/./src/flow.ts","webpack://Vex/./src/version.ts","webpack://Vex/./src/fonts/petalumascript_glyphs.ts","webpack://Vex/./src/fonts/robotoslab_glyphs.ts","webpack://Vex/./src/fonts/sans_bold_text_metrics.ts","webpack://Vex/./src/fonts/sans_text_metrics.ts","webpack://Vex/./src/fonts/serif_text_metrics.ts","webpack://Vex/./src/vex.ts","webpack://Vex/./entry/vexflow-core.ts","webpack://Vex/./src/fonts/textfonts.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Vex\"] = factory();\n\telse\n\t\troot[\"Vex\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\nexport { Fraction };\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\nexport { Font };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Element };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave -= options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\nexport { Tables };\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\nexport { Glyph };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accidentalLinePositionsAndSpaceNeeds = [];\n let prevNote = undefined;\n let extraXSpaceNeededForLeftDisplacedNotehead = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n // If the current extra left-space needed isn't as big as this note's,\n // then we need to use this note's.\n extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accidentalLinePositionsAndSpaceNeeds.push({\n y,\n line: accLine,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n spacingBetweenStaveLines: lineSpace,\n });\n }\n else {\n accidentalLinePositionsAndSpaceNeeds.push({\n line: props.line,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n });\n }\n }\n // Sort accidentals by line number.\n accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line);\n const staveLineAccidentalLayoutMetrics = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let maxExtraXSpaceNeeded = 0;\n // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics)\n // from accidentalLinePositionsAndSpaceNeeds\n for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) {\n const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i];\n const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1];\n let currentLineMetric;\n // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric\n if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) {\n currentLineMetric = {\n line: accidentalLinePositionAndSpaceNeeds.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n };\n staveLineAccidentalLayoutMetrics.push(currentLineMetric);\n }\n else {\n currentLineMetric = priorLineMetric;\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' &&\n accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') {\n currentLineMetric.flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') {\n currentLineMetric.dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n currentLineMetric.numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing;\n // if this extraXSpaceNeeded is the largest so far, use it as the starting point for\n // all accidental columns.\n maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded);\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd])\n ? 'a'\n : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) {\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = leftShift + maxExtraXSpaceNeeded;\n columnXOffsets[0] = leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded;\n accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift = totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\nexport { Accidental };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nclass Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\nexport { Stem };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\nexport { TextFormatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\nexport { Annotation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\nexport { Articulation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\nexport { ChordSymbol };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n this.barline = new Barline(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n ctx.openGroup('barnote', this.getAttribute('id'));\n this.barline.setType(this.type);\n this.barline.setX(this.getAbsoluteX());\n this.barline.draw(this.checkStave());\n ctx.closeGroup();\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\nexport { BarNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nclass Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Bend };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { FretHandFinger };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\nexport { NoteHead };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n return this._noteHeads;\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\nexport { StaveNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { StaveTie };\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\nexport { GraceNoteGroup };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - stave.getNoteStartX();\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const tickables = note.getVoice().getTickables();\n const index = tickables.indexOf(note);\n const nextContext = index + 1 < tickables.length ? tickables[index + 1].checkTickContext() : undefined;\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - glyphX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\nexport { Ornament };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = (_b = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : Note.getPoint('gracenote');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height, devicePixelRatio) {\n var _a;\n const canvas = this.context2D.canvas;\n const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : globalObject().devicePixelRatio) !== null && _a !== void 0 ? _a : 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / dpr) | 0;\n height = (height / dpr) | 0;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(dpr, dpr);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\nexport { SVGContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\nexport { Renderer };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\nexport { TextNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { Volta };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n /**\n * The modifier context's left_shift state.\n */\n const left_shift = state.left_shift;\n /**\n * The modifier context's right_shift state.\n */\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let extraXSpaceForDisplacedNotehead = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (pos === Modifier.Position.LEFT) {\n extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: extraXSpaceForDisplacedNotehead,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n let num_x_shift = 0;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + extraXSpaceForDisplacedNotehead);\n num_x_shift = num_width; // spacing\n x_widthL = Math.max(num_x_shift, x_widthL);\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_x_shift += num_width; // spacing\n x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StringNumber };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { Stroke };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\nexport { ModifierContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\nexport { Clef };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nclass KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\nexport { KeySignature };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nclass Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n var _a;\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', {\n category: 'coda',\n });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: Tables.NOTATION_FONT_SCALE / 3,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\nexport { Repetition };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveSection };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveTempo };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { StaveText };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nclass Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n /**\n * treat the stave as if the clef is clefSpec, but don't display the clef\n */\n setClefLines(clefSpec) {\n this.clef = clefSpec;\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Stave };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\nexport { StaveConnector };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\nexport { Formatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\nexport { Crescendo };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\nexport { Parser };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\nexport { EasyScore };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\nexport { PedalMarking };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\nexport { StaveLine };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\nexport { TextBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\nexport { TextDynamics };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\nexport { VibratoBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Factory };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\nexport { StaveHairpin };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { TabSlide };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n doubleCBanjo: 'D/5,C/5,G/4,C/4,G/5',\n doubleDBanjo: 'E/5,D/5,A/4,D/4,A/5',\n sawmillBanjo: 'D/5,C/5,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static getMusicFontStack() {\n return Tables.MUSIC_FONT_STACK;\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\nexport { Flow };\n","export const VERSION = '4.2.6';\nexport const ID = '103aad2b14837418c5e96c9e078edd036fcddf60';\nexport const DATE = '2024-08-26T20:16:17.134Z';\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\nexport { Vex };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Ron B. Yeh\n//\n// A smaller initial bundle that supports dynamic importing of music engraving fonts.\n//\n// vexflow-core.ts is the entry point for output file vexflow-core.js.\n// It does not preload / bundle any music fonts by default.\n// All music fonts will be loaded dynamically via: `Flow.fetchMusicFont(fontName)`\n// Remember to call `Flow.setMusicFont(fontName)` after fetching the font module.\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Flow } from '../src/flow';\nimport { Font } from '../src/font';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nimport { globalObject, RuntimeError } from '../src/util';\n// fontModules maps font names => font module paths, which can be loaded at runtime by vexflow-core.js.\n// ADD_MUSIC_FONT\nconst fontModules = {\n Bravura: './vexflow-font-bravura.js',\n Gonville: './vexflow-font-gonville.js',\n Petaluma: './vexflow-font-petaluma.js',\n Leland: './vexflow-font-leland.js',\n Custom: './vexflow-font-custom.js',\n};\n/**\n * @param fontName the name of the music font to load.\n * @param fontModuleOrPath Either a font module object (containing a .data and .metrics properties) or a path to a font module.\n * The font module is assumed to be in the same directory as the vexflow-core.js entry point.\n *\n * This replaces the default empty implementation in flow.ts.\n */\nFlow.fetchMusicFont = (fontName, fontModuleOrPath) => __awaiter(void 0, void 0, void 0, function* () {\n const font = Font.load(fontName);\n // If the font has already been loaded before we do nothing.\n if (font.hasData()) {\n return;\n }\n if (!fontModuleOrPath) {\n // Determine the font module path.\n if (fontName in fontModules) {\n fontModuleOrPath = fontModules[fontName];\n }\n else {\n throw new RuntimeError('UnknownFont', `Music font ${fontName} does not exist.`);\n }\n }\n let fontModule;\n if (typeof fontModuleOrPath === 'string') {\n const module = yield import(/* webpackIgnore: true */ fontModuleOrPath);\n const g = globalObject();\n const VexFlowFont = g['VexFlowFont'];\n if (typeof VexFlowFont !== 'undefined' && typeof VexFlowFont[fontName] !== 'undefined') {\n // CJS font modules will set a global variable named: VexFlowFont.Bravura | VexFlowFont.Gonville | VexFlowFont.Petaluma | etc.\n fontModule = VexFlowFont[fontName];\n }\n else {\n // ESM font modules will export an object named \"Font\" with properties named \"data\" and \"metrics\".\n // See vexflow-font-bravura.ts for an example.\n fontModule = module.Font;\n }\n }\n else {\n fontModule = fontModuleOrPath;\n }\n font.setData(fontModule.data);\n font.setMetrics(fontModule.metrics);\n});\n// Load the two text fonts that ChordSymbol & Annotation use.\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","Function","e","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","isCategory","category","checkAncestors","constructorFcn","constructor","CATEGORY","getPrototypeOf","isAccidental","Category","Accidental","isAnnotation","Annotation","isBarline","Barline","isDot","Dot","isGraceNote","GraceNote","isGraceNoteGroup","GraceNoteGroup","isNote","Note","isRenderContext","RenderContext","isStaveNote","StaveNote","isStemmableNote","StemmableNote","isTabNote","TabNote","RuntimeError","Error","code","message","super","globalObject","self","defined","x","undefined","log","block","args","line","Array","slice","join","console","warn","err","stack","midLine","a","b","mid_line","n","parseInt","prefix","text","normalizeAngle","Math","PI","sumArray","arr","reduce","Fraction","GCD","Number","isNaN","t","LCM","LCMM","length","shift","numerator","denominator","set","simplify","u","d","gcd","add","param1","param2","otherNumerator","otherDenominator","getNumeratorAndDenominator","lcm","subtract","multiply","divide","equals","compare","__staticFractionA","copy","__staticFractionB","greaterThan","greaterThanEquals","lessThan","lessThanEquals","clone","other","quotient","floor","remainder","makeAbs","abs","toString","toSimplifiedString","__staticFractionTmp","toMixedString","s","q","f","parse","str","i","split","BoundingBox","that","y","w","h","getX","getY","getW","getH","setX","setY","setW","setH","move","mergeWith","boundingBox","new_x","new_y","new_w","max","new_h","BoundingBoxComputation","x1","NaN","y1","x2","y2","getX1","getY1","width","height","addPoint","addX","addY","addQuadraticCurve","p0x","p0y","p1x","p1y","p2x","p2y","p01x","denom","it","p01y","addBezierCurve","p3x","p3y","p0","p1","p2","p3","pow","c","b2ac","t1","sqrt","t2","FontWeight","FontStyle","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","fontParser","Fonts","Font","convertSizeToPixelValue","fontSize","SIZE","_a","scaleToPxFrom","pt","parseFloat","unit","replace","toLowerCase","convertSizeToPointValue","validate","size","weight","style","fromCSSString","family","SANS_SERIF","NORMAL","cssFontShorthand","document","createElement","font","fontFamily","fontWeight","fontStyle","toCSSString","fontInfo","st","trim","wt","sz","scaleSize","scaleFactor","isBold","parsedWeight","isItalic","ITALIC","loadWebFont","fontName","woffURL","includeWoff2","fontFace","FontFace","load","fonts","loadWebFonts","host","WEB_FONT_HOST","files","WEB_FONT_FILES","fontPath","data","metrics","setData","setMetrics","name","getName","getData","getMetrics","hasData","getResolution","resolution","getGlyphs","glyphs","lookupMetric","defaultValue","keyParts","currObj","SERIF","px","em","in","mm","cm","PetalumaScript","Index","id","type","class","Registry","getDefaultRegistry","defaultRegistry","enableDefaultRegistry","registry","disableDefaultRegistry","index","clear","setIndexValue","elem","updateIndex","oldValue","getElementById","getAttribute","register","setAttribute","onRegister","_b","getElementsByAttribute","attribute","index_attr","index_attr_val","keys","map","k","getElementsByType","getElementsByClass","className","onUpdate","info","includes","Element","newID","ID","children","attrs","getCategory","rendered","addChildElement","child","push","setStyle","setGroupStyle","forEach","getStyle","applyStyle","context","save","shadowColor","setShadowColor","shadowBlur","setShadowBlur","fillStyle","setFillStyle","strokeStyle","setStrokeStyle","lineWidth","setLineWidth","restoreStyle","restore","drawWithStyle","checkContext","draw","hasClass","indexOf","addClass","removeClass","splice","isRendered","setRendered","getAttributes","getSVGElement","suffix","element","oldID","getBoundingBox","getContext","setContext","setFont","textFont","defaultTextFont","TEXT_FONT","fontIsObject","fontIsString","fontIsUndefined","sizeWeightStyleAreUndefined","assign","getFont","resetFont","setFontSize","getFontSize","fontSizeInPoints","fontSizeInPixels","RESOLUTION","durations","durationAliases","keySignatures","C","num","Am","F","acc","Dm","Bb","Gm","Eb","Cm","Ab","Fm","Db","Bbm","Gb","Ebm","Cb","Abm","G","Em","D","Bm","A","E","B","clefs","treble","line_shift","bass","tenor","alto","soprano","percussion","subbass","french","notesInfo","int_val","CN","accidental","CB","CBB","DN","DB","DBB","EN","EB","EBB","FN","FB","FBB","GN","GB","GBB","AN","AB","ABB","BN","BB","BBB","R","rest","X","octave","shift_right","accidentals","parenRightPaddingAdjustment","bb","db","bs","bss","bbs","ashs","afhf","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","articulations","between_lines","av","aboveCode","belowCode","ao","ah","am","ornaments","mordent","mordent_inverted","turn","turn_inverted","tr","upprall","downprall","prallup","pralldown","upmordent","downmordent","lineprall","prallprall","scoop","doit","fall","doitLong","fallLong","bend","plungerClosed","plungerOpen","flip","jazzTurn","smear","Tables","currentMusicFont","MUSIC_FONT_STACK","clefProperties","clef","keyProperties","keyOctaveGlyph","params","options","octave_shift","duration","sanitizeDuration","pieces","toUpperCase","stroke","int_value","customNoteHeadProps","glyphName","codeNoteHead","displaced","integerToNote","integer","noteValue","tabToGlyphProps","fret","scale","glyph","shift_y","glyphMetrics","Glyph","TABLATURE_FONT_SCALE","textWidth","getWidth","articulationCodes","artic","accidentalCodes","ornamentCodes","keySignature","spec","keySpec","notes","acc_list","getKeySignatures","hasKeySignature","durationNumber","durationToFraction","durationToNumber","durationToTicks","ticks","getGlyphProps","durationCodes","glyphTypeProperties","code_head","common","NOTATION_FONT_SCALE","UNISON","SOFTMAX_FACTOR","STEM_WIDTH","STEM_HEIGHT","STAVE_LINE_THICKNESS","RENDER_PRECISION_PLACES","SLASH_NOTEHEAD_WIDTH","STAVE_LINE_DISTANCE","TEXT_HEIGHT_OFFSET_HACK","accidentalMap","accidentalColumnsTable","second_on_bottom","spaced_out_tetrachord","spaced_out_pentachord","very_spaced_out_pentachord","spaced_out_hexachord","very_spaced_out_hexachord","unicode","sharp","String","fromCharCode","flat","natural","triangle","degrees","circle","validTypes","m","ci","cx","sf","sb","sq","tu","td","TIME4_4","num_beats","beat_value","stem","flag","stem_up_extension","stem_down_extension","tabnote_stem_up_extension","tabnote_stem_down_extension","dot_shiftY","line_above","line_below","position","ledger_code_head","beam_count","stem_beam_extension","code_flag_upstem","code_flag_downstem","OutlineCode","ModifierPosition","GlyphCacheEntry","fontStack","point","loadMetrics","bbox","getOutlineBoundingBox","outline","x_shift","y_shift","lookupFontMetric","GlyphOutline","originX","originY","precision","round","nextX","nextY","parts","MOVE","LINE","QUADRATIC","BEZIER","lookupGlyph","x_min","x_max","ha","cached_outline","renderGlyph","ctx","x_pos","y_pos","cache","lookup","customScale","renderOutline","go","beginPath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","fill","bboxComp","penX","penY","topGlyphs","botGlyphs","originShift","setOptions","reset","getCode","setPoint","setStave","stave","getXShift","setXShift","getYshift","setYShift","checkMetrics","metricsScale","setOriginX","xShift","setOriginY","yShift","setOrigin","render","xPos","yPos","checkStave","renderToStave","getYForGlyphs","Map","entries","CURRENT_CACHE_KEY","entry","Modifier","Position","PositionString","center","CENTER","above","ABOVE","below","BELOW","left","LEFT","right","RIGHT","text_line","spacingFromNextModifier","setWidth","getNote","note","checkAttachedNote","setNote","getIndex","checkIndex","setIndex","getModifierContext","modifierContext","checkModifierContext","setModifierContext","getPosition","setPosition","setTextLine","setSpacingFromNextModifier","getSpacingFromNextModifier","alignSubNotesWithNote","subNotes","tickContext","getTickContext","getStave","subNoteXOffset","modLeftPx","modRightPx","subNote","subTickContext","setXOffset","Music","NUM_TONES","canonical_notes","roots","root_values","root_indices","diatonic_intervals","diatonic_accidentals","unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","intervals","b2","min2","S","H","maj2","T","W","b3","min3","maj3","b5","aug4","b6","aug5","maj6","m7","min7","dom7","maj7","scales","major","minor","ionian","dorian","phyrgian","lydian","mixolydian","aeolian","locrian","scaleTypes","M","noteValues","root_index","cn","cb","cbb","dn","dbb","en","eb","ebb","fn","fb","fbb","gn","gb","gbb","an","ab","abb","bn","bbb","isValidNoteValue","isValidIntervalValue","interval","getNoteParts","noteString","match","exec","getKeyParts","keyString","getNoteValue","getIntervalValue","intervalString","getCanonicalNoteName","getCanonicalIntervalName","intervalValue","getRelativeNoteValue","direction","sum","getRelativeNoteName","rootValue","multiplier","reverse_interval","relativeNoteName","getScaleTones","tones","nextNote","getIntervalBetween","note1","note2","difference","createScaleMap","keySigParts","scaleName","keySigString","noteLocation","scaleMap","rootName","noteName","L","DEBUG","format","state","musicFont","noteheadAccidentalPadding","leftShift","left_shift","accidentalSpacing","additionalPadding","accidentalLinePositionsAndSpaceNeeds","prevNote","extraXSpaceNeededForLeftDisplacedNotehead","props","getKeyProps","getLeftDisplacedHeadPx","lineSpace","getSpacingBetweenLines","getYForLine","accLine","extraXSpaceNeeded","spacingBetweenStaveLines","sort","staveLineAccidentalLayoutMetrics","maxExtraXSpaceNeeded","accidentalLinePositionAndSpaceNeeds","priorLineMetric","currentLineMetric","flatLine","dblSharpLine","numAcc","column","totalColumns","noFurtherConflicts","groupStart","groupEnd","checkCollision","getGroupLine","getGroupLines","indexes","lineDifference","indexA","indexB","item","notColliding","indexPairs","every","line1","line2","groupLength","groupMember","endCase","patternLength","collisionDetected","columnWidths","columnXOffsets","totalShift","accCount","lastAccOnLine","clearance","clearanceRequired","collision","applyAccidentals","voices","tickPositions","tickNoteMap","voice","tickPosition","getTickables","shouldIgnoreTicks","notesAtPosition","getTicks","music","scaleMapKey","tickPos","tickables","modifiedPitches","processNote","isRest","staveNote","keyIndex","accidentalString","pitch","sameAccidental","previouslyModified","getModifiers","modifier","addModifier","getGraceNotes","render_options","font_scale","parenLeftPadding","parenRightPadding","cautionary","fontScale","parenLeft","parenRight","parenWidth","setAsCautionary","start","getModifierStartXY","accX","accY","Stem","UP","DOWN","WIDTH","HEIGHT","stem_up_y_offset","stem_down_y_offset","stem_up_y_base_offset","stem_down_y_base_offset","x_begin","x_end","y_top","y_bottom","stem_extension","stem_direction","hide","isStemlet","stemletHeight","renderHeightAdjustment","setNoteHeadXBounds","setDirection","setExtension","ext","getExtension","setYBounds","getHeight","y_offset","getExtents","isStemUp","ys","stemHeight","innerMostNoteheadY","min","outerMostNoteheadY","topY","baseY","setVisibility","isVisible","setStemlet","adjustHeightForFlag","adjustHeightForBeam","stem_x","stem_y","y_base_offset","stemletYOffset","openGroup","pointerBBox","closeGroup","TextFormatter","textWidthCache","textHeightCache","getFontFamilies","registeredFonts","formatterInfo","create","requestedFont","candidates","requestedFamilies","requestedFamily","startsWith","formatter","values","bold","italic","perfectMatch","find","partialMatch","fontSizeInPt","getInfo","registerInfo","overwrite","serifs","monospaced","superscriptOffset","subscriptOffset","maxSizeGlyph","cacheKey","updateParams","localHeightCache","updateCacheKey","BOLD","getGlyphMetrics","character","maxHeight","getWidthForCharacterInEm","advanceWidth","getYForCharacterInPx","rv","yMin","yMax","y_min","y_max","getYForStringInPx","extent","curY","getWidthForTextInEm","cachedWidths","getWidthForTextInPx","AnnotationHorizontalJustify","AnnotationVerticalJustify","minAnnotationPadding","annotations","leftWidth","rightWidth","maxLeftGlyphWidth","maxRightGlyphWidth","annotation","textFormatter","verticalSpaceNeeded","glyphWidth","horizontalJustification","stemDirection","hasStem","getStemDirection","lines","draw_stem","getStem","getNoteType","getNumLines","verticalJustification","VerticalJustify","TOP","noteLine","getLineNumber","leastString","top_text_line","BOTTOM","greatestString","curBottom","rightOverlap","right_shift","leftOverlap","setVerticalJustification","just","VerticalJustifyString","getJustification","setJustification","HorizontalJustifyString","text_width","text_height","getStemX","stem_ext","spacing","has_stem","checkStem","getYs","yt","getYForTopText","getYForBottomText","getTopLineTopY","extents","getStemExtents","fillText","HorizontalJustify","centerStem","CENTER_STEM","top","bottom","roundToNearestHalf","mathFn","isWithinLines","getRoundingFunction","ceil","isStaveOrGraceNote","Articulation","maxGlyphWidth","getIncrement","articulation","increment","curTop","maxWidth","articWidth","overlap","easyScoreHook","builder","articNameToCode","staccato","tenuto","accent","articString","getFactory","endsWith","setBetweenLines","betweenLines","textLine","canSitBetweenLines","staffSpace","isTab","shouldSitOutsideStaff","initialOffset","isOnStemTip","getInitialOffset","padding","stemTipY","stemBaseY","getTopY","INITIAL_OFFSET","getBottomY","offsetDirection","articLine","snappedLine","snapLineToStaff","setRawFont","drawDot","color","arc","closePath","Tickable","_preFormatted","_postFormatted","intrinsicTicks","tickMultiplier","modifiers","tupletStack","align_center","center_x_shift","ignore_ticks","formatterMetrics","freedom","iterations","space","used","mean","deviation","setIgnoreTicks","checkTickContext","getFormatterMetrics","getCenterXShift","isCenterAligned","setCenterXShift","centerXShift","setCenterAlignment","getVoice","setVoice","getTuplet","tuplet","getTupletStack","resetTuplet","noteCount","notesOccupied","getNoteCount","getNotesOccupied","applyTickMultiplier","pop","setTuplet","addToModifierContext","mc","addMember","setTickContext","tc","preFormat","preFormatted","postFormat","postFormatted","getIntrinsicTicks","setIntrinsicTicks","getTickMultiplier","setDuration","getAbsoluteX","plotMetrics","xStart","leftDisplacedHeadPx","xPre1","xAbs","xPost1","notePx","xPost2","rightDisplacedHeadPx","xEnd","xFreedomRight","xWidth","yy","spaceDeviation","parseDuration","durationString","dots","parseNoteStruct","noteStruct","durationProps","customTypes","currentTicks","parsedNoteStruct","JSON","stringify","keyProps","noteType","duration_override","glyphProps","customGlyphs","playNote","annotation_spacing","glyph_font_scale","stroke_px","getPlayNote","setPlayNote","addStroke","setYs","getRightDisplacedHeadPx","setLeftDisplacedHeadPx","setRightDisplacedHeadPx","isTopNote","getLineForRest","getGlyph","getGlyphWidth","getDuration","isDotted","getModifiersByType","getBeam","beam","checkBeam","hasBeam","setBeam","signature","filter","getRightParenthesisPx","getLeftParenthesisPx","getFirstDotPx","getMembers","getState","glyphPx","getNoteStartX","getPoint","getTieRightX","tieStartX","getTieLeftX","tieEndX","getKeys","StaveModifierPosition","BarlineType","ChordSymbolHorizontalJustify","ChordSymbolVerticalJustify","SymbolTypes","SymbolModifiers","StaveModifier","placeGlyphOnLine","customShift","getPadding","setPadding","setLayoutMetrics","layoutMetrics","getLayoutMetrics","typeString","single","SINGLE","double","DOUBLE","end","END","repeatBegin","REPEAT_BEGIN","repeatEnd","REPEAT_END","repeatBoth","REPEAT_BOTH","none","NONE","thickness","TYPE","widths","paddings","layoutMetricsMap","xMin","xMax","paddingLeft","paddingRight","BEGIN","setType","getType","drawVerticalBar","drawVerticalEndBar","drawRepeatBar","double_bar","staveCtx","botY","getBottomLineBottomY","fillRect","begin","dot_x","dot_radius","dot_y","BarNote","barline","Bend","bends","last_width","stringPos","release","phrase","tap","line_width","line_style","bend_width","release_width","updateWidth","setTap","getText","getTextHeight","totalWidth","additional_width","draw_width","lowestY","bend_height","annotation_y","renderBend","cp_x","cp_y","renderRelease","renderArrowHead","yBase","renderText","render_x","measureText","last_bend","last_bend_draw_width","last_drawn_width","ChordSymbol","superSubRatio","global","NO_TEXT_FORMAT","val","noFormat","getMetricForGlyph","glyphCode","engravingFontResolution","spacingBetweenBlocks","getWidthForGlyph","metric","getYShiftForGlyph","yOffset","getXShiftForGlyph","leftSideBearing","kerningOffset","chordSymbol","lowerKerningText","upperKerningText","isSuperscript","symbolModifier","SUPERSCRIPT","isSubscript","SUBSCRIPT","minPadding","symbols","nonSuperWidth","symbol","fontAdj","glyphAdj","symbolWidth","lineSpaces","vAlign","j","symbolBlocks","sup","sub","superSubScale","adj","symbolType","GLYPH","superSubFontSize","TEXT","getYOffsetForText","over","prev","setEnableKerning","updateKerningAdjustments","updateOverBarAdjustments","getVertical","getReportWidth","getHorizontal","horizontal","vertical","useKerning","reportWidth","setReportWidth","barIndex","findIndex","xoff","yoff","symIndex","accum","getKerningAdjustment","currSymbol","prevSymbol","adjustment","preKernUpper","preKernLower","some","xx","kerningOffsetPixels","getSymbolBlock","_c","symbolBlock","glyphArgs","glyphPoints","addSymbolBlock","parameters","addText","addTextSuperscript","addTextSubscript","addGlyphSuperscript","addGlyph","addGlyphOrText","char","addLine","setVertical","vj","setHorizontal","hj","stem_base","isSuper","isSub","smallerFontSize","diminished","dim","halfDiminished","augmented","majorSeventh","leftParen","rightParen","leftBracket","rightBracket","leftParenTall","rightParenTall","symbolTypes","symbolModifiers","getDots","buildAndAttach","all","dot","setDotShiftY","dot_list","max_shift_map","note_id","dot_shift","x_width","last_line","last_note","prev_dotted_space","half_shiftY","radius","forceFlagRight","FretHandFinger","nums","nums_list","prev_note","shiftLeft","shiftRight","pos","textHeight","shiftL","shiftR","numShiftL","numShiftR","xWidthL","xWidthR","lastLine","lastNote","num_shift","numWidth","fingerings","fingeringString","number","Fingering","fingering","finger","x_offset","setFretHandFinger","getFretHandFinger","setOffsetX","setOffsetY","NoteHead","custom_glyph","stem_up_x_offset","stem_down_x_offset","note_type","glyph_code","custom_glyph_code","slashed","isDisplaced","getLine","setLine","displacementStemAdjustment","fontShift","displacedFontShift","half_spacing","min_y","getYForNote","head_x","categorySuffix","staveSpace","breve_lines","drawSlashNoteHead","setStem","buildStem","buildFlag","hasFlag","flagCode","getBaseCustomNoteHeadGlyphProps","getStemLength","getStemExtension","getBeamCount","getStemMinimumLength","setStemDirection","offsets","offsetYBaseStemUp","offsetYTopStemUp","offsetYBaseStemDown","offsetYTopStemDown","getCenterGlyphX","stem_extension_override","setStemLength","drawStem","stemOptions","shiftRestVertical","dir","delta","maxLine","minLine","setKeyLine","getKeyLine","STEM_UP","STEM_DOWN","LEDGER_LINE_OFFSET","minNoteheadPadding","notesList","sortedKeyProps","minL","stemMax","stemMin","maxL","isrest","voice_shift","getVoiceShiftWidth","is_displaced","noteU","noteM","noteL","voiceXShift","lineSpacing","lineDiff","noteUHead","noteLHead","centerRest","ledgerLineStyle","use_default_head_x","_noteHeads","calculateKeyProps","auto_stem","autoStem","noteHeadStyles","noteHead","buildNoteHeads","noteHeadStyle","calcNoteDisplacements","noteProps","notehead","calculateOptimalStemDirection","minY","maxY","halfLineSpacing","frac","resultLine","thisLine","isChord","getNoteHeadBounds","setNoteDisplaced","getRightShift","restLine","isInnerNoteIndex","setStemStyle","getStemStyle","setLedgerLineStyle","getLedgerLineStyle","setFlagStyle","getFlagStyle","setKeyStyle","noteHeadPadding","shouldDrawFlag","nonDisplacedX","displacedX","highestDisplacedLine","lowestDisplacedLine","yTop","Infinity","yBottom","highestLine","lowestLine","highestNonDisplacedLine","lowestNonDisplacedLine","displaced_x","non_displaced_x","highest_line","lowest_line","highest_displaced_line","lowest_displaced_line","highest_non_displaced_line","lowest_non_displaced_line","getNoteHeadBeginX","getNoteHeadEndX","noteHeads","note_heads","drawLedgerLines","doubleWidth","min_x","drawLedgerLine","normal","ledgerWidth","getDefaultLedgerLineStyle","drawModifiers","noteheadParam","noteheadStyle","hasNoBeam","drawFlag","_d","_e","noteStemHeight","flagX","flagY","getStaveNoteScale","drawNoteHeads","super_stem_extension","mid_line_distance","lines_over_octave_from_mid_line","spacing_between_lines","xBegin","shouldRenderStem","stemX","StaveTie","setNotes","cp1","cp2","text_shift_x","first_x_shift","last_x_shift","tie_spacing","first_note","first_indices","last_indices","isPartial","renderTie","first_ys","last_ys","last_x_px","first_x_px","first_y_px","last_y_px","top_cp_y","bottom_cp_y","center_x","getNotes","getTieStartX","getTieEndX","TabTie","createHammeron","createPulloff","VoiceMode","Voice","Mode","time","voiceTime","resolutionMultiplier","mode","STRICT","ticksUsed","largestTickWidth","softmaxFactor","totalTicks","smallestTickCount","getTotalTicks","getTicksUsed","getLargestTickWidth","getSmallestTickCount","getMode","setMode","getResolutionMultiplier","getActualResolution","tickable","setStrict","strict","SOFT","isComplete","FULL","setSoftmaxFactor","factor","expTicksUsed","reCalculateExpTicksUsed","softmax","tickValue","v","exp","addTickable","addTickables","gracenote_groups","group_list","gracenote_group","is_stavenote","formatWidth","group_shift","grace_notes","show_slur","slur","slur_y_shift","beams","Formatter","joinVoices","getMinTotalWidth","beamNotes","Beam","beam_width","partial_beam_length","graceNote","TieClass","NoteSubGroup","groups","group","Ornament","ornament","ornamentRelease","ornamentAttack","reportedWidth","ornamentArticulation","ornamentNoteTransition","ornamentAlignWithNoteHead","ornamentMetrics","delayed","accidentalLowerPadding","accidentalUpperPadding","adjustForStemDirection","stemUpYOffset","xOffset","setDelayed","setUpperAccidental","accid","accidentalUpper","setLowerAccidental","accidentalLower","stemDir","stemExtents","isPlacedOnNoteheadSide","glyphYBetweenLines","glyphX","glyphY","delayXShift","startX","nextContext","Parenthesis","parentheses","x_widthL","x_widthR","parenthesis","isHTMLCanvas","HTMLCanvasElement","toDataURL","isHTMLDiv","HTMLDivElement","appendChild","CanvasContext","CANVAS_BROWSER_SIZE_LIMIT","sanitizeCanvasDims","limit","context2D","canvas","clearRect","cls","setBackgroundFillStyle","blur","getTransform","setLineCap","capType","lineCap","setLineDash","dash","resize","devicePixelRatio","dpr","rect","cp1x","cp1y","cp2x","cp2y","cpx","cpy","startAngle","endAngle","counterclockwise","fontBoundingBoxAscent","fontBoundingBoxDescent","actualBoundingBoxAscent","actualBoundingBoxDescent","ATTRIBUTES_TO_IGNORE","path","SVG_NS","TWO_PI","SVGContext","backgroundFillStyle","fontCSSString","svg","parent","pen","defaultFontAttributes","scaleX","scaleY","attributes","groupAttributes","applyAttributes","shadow_attributes","state_stack","svgElementType","createElementNS","lineDash","visibleWidth","visibleHeight","setViewBox","viewBox_or_minX","viewBoxString","attrNamesToIgnore","nodeName","attrName","setAttributeNS","lastChild","removeChild","rectangle","x0","cos","y0","sin","tmpStartTest","tmpEndTest","large","sweep","getShadowStyle","sa","measureTextCache","txt","textContent","savedState","fontAttributes","RendererBackends","RendererLineEndType","TextJustification","VoltaType","measureImpl","getBBox","Renderer","buildContext","elementId","backend","background","renderer","lastContext","getCanvasContext","Backends","CANVAS","getSVGContext","SVG","drawDashedLine","fromX","fromY","toX","toY","dashPattern","dx","dy","angle","atan2","idx","dashLength","nx","ny","arg0","arg1","maybeElement","willReadFrequently","LineEndType","StringNumber","stringNumber","verticalPadding","stemPadding","leftPadding","rightPadding","extraXSpaceForDisplacedNotehead","glyphLine","num_shiftR","num_width","num_x_shift","string_number","stem_offset","dashed","leg","drawCircle","setLineEndType","setStringNumber","setLastNote","setDashed","setDrawCircle","len","pattern","Stroke","strokes","strokeList","string","getPositions","strokeShift","all_voices","addEndNote","note_end","line_space","arrow","arrow_shift_x","arrow_y","text_y","Type","BRUSH_DOWN","BRUSH_UP","ROLL_DOWN","RASQUEDO_DOWN","ROLL_UP","RASQUEDO_UP","ARPEGGIO_DIRECTIONLESS","strokeLine","Vibrato","vibratos","vibrato","harsh","vibrato_width","wave_height","wave_width","wave_girth","setVibratoWidth","setHarsh","vx","vy","renderVibrato","opts","num_waves","ModifierContext","members","formatted","member","getLeftShift","Clef","types","tab","annotationSmufl","attachment","KeySignature","cancelKeySpec","alterKeySpec","accList","setKeySig","glyphFontScale","xPositions","paddingForced","convertToGlyph","nextAcc","accGlyphData","extraWidth","xPosition","cancelKey","convertToCancelAccList","cancel_accList","different_types","naturals","cancelled","concat","addToStave","convertAccLines","customLines","offset","alterKey","convertToAlterAccList","firstAccidentalType","cancelAccList","getEndClef","getClef","Repetition","symbol_type","setShiftX","setShiftY","CODA_RIGHT","drawCodaFixed","CODA_LEFT","drawSymbolText","SEGNO_LEFT","drawSignoFixed","SEGNO_RIGHT","DC","DC_AL_CODA","DC_AL_FINE","DS","DS_AL_CODA","DS_AL_FINE","FINE","TO_CODA","draw_coda","text_x","symbol_x","modifierWidth","getVerticalBarWidth","StaveSection","section","drawRect","shift_x","setStaveSection","textY","headroom","StaveTempo","tempo","setTempo","bpm","noteTextFont","noteTextFormatter","stem_height","flagMetrics","TextNote","GLYPHS","segno","mordent_upper","mordent_lower","p","z","coda","pedal_open","pedal_close","caesura_straight","caesura_curved","breath","tick","superscript","subscript","smooth","justification","struct","Justification","StaveText","setStaveText","setText","getBottomLineY","Volta","volta","top_y","vert_height","BEGIN_END","TimeSignatureGlyph","timeSignature","topDigits","botDigits","topWidth","timeSigType","topGlyph","botWidth","botGlyph","lineShift","topStartX","botStartX","start_x","topLine","bottomLine","TimeSignature","timeSpec","customPadding","validate_args","is_numeric","fontLineShift","setTimeSig","parseTimeSpec","numbers","test","assertIsValidTimeSig","makeTimeSignatureGlyph","setGlyph","getTimeSpec","getIsNumeric","setIsNumeric","isNumeric","SORT_ORDER_BEG_MODIFIERS","SORT_ORDER_END_MODIFIERS","Stave","defaultPadding","end_x","measure","endClef","vertical_bar_width","num_lines","fill_style","left_bar","right_bar","spacing_between_lines_px","space_above_staff_ln","space_below_staff_ln","top_text_position","bottom_text_position","line_config","bounds","defaultLedgerLineStyle","resetLines","addEndModifier","setDefaultLedgerLineStyle","visible","setNoteStartX","getNoteEndX","setNumLines","mod","setMeasure","getMeasure","getModifierXShift","begBarline","setRepetitionType","setVoltaType","number_t","setSection","staveSection","getLineForY","setBegBarType","setEndBarType","setClefLines","clefSpec","setClef","addClef","setEndClef","setKeySignature","addKeySignature","setEndKeySignature","setTimeSignature","timeSignatures","addTimeSignature","setEndTimeSignature","addEndClef","addEndTimeSignature","addTrebleGlyph","noPosition","noCategory","sortByCategory","items","order","temp","endBarline","begModifiers","endModifiers","lastBarlineIdx","getConfigForLines","setConfigForLine","line_number","setConfigForLines","lines_configuration","formatBegModifiers","staves","adjustCategoryStartX","minStartX","adjustX","allModifiers","bAdjust","maxX","drawBoldDoubleLine","topX","StaveConnector","BOLD_DOUBLE_LEFT","BOLD_DOUBLE_RIGHT","variableWidth","top_stave","bottom_stave","texts","newType","content","SINGLE_RIGHT","THIN_DOUBLE","attachment_height","SINGLE_LEFT","BRACE","x3","y3","cpx1","cpy1","cpx2","cpy2","cpx3","cpy3","cpx4","cpy4","cpx5","cpy5","cpx6","cpy6","cpx7","cpy7","cpx8","cpy8","BRACKET","singleRight","singleLeft","brace","bracket","boldDoubleLeft","boldDoubleRight","thinDouble","TickContext","getNextContext","tContext","contexts","tContexts","tickID","currentTick","maxTicks","maxTickable","minTicks","minTickable","xBase","tickablesByVoice","totalLeftPx","totalRightPx","getTickID","getXBase","setXBase","getXOffset","getMaxTicks","getMinTicks","getMaxTickable","getMinTickable","getTickableForVoice","voiceIndex","getTickablesByVoice","getCenterAlignedTickables","getCurrentTick","setCurrentTick","getRestLineForNextNoteGroup","currRestLine","currNoteIndex","nextRestLine","noteIndex","SimpleFormat","paddingBetween","accumulator","plotDebugging","stavePadding","contextGaps","gaps","gap","totalCost","toFixed","total","FormatAndDraw","auto_beam","align_rests","applyAndGetBeams","formatToStave","FormatAndDrawTab","tabstave","tabnotes","autobeam","notevoice","tabvoice","AlignRestsToNotes","alignAllNotes","alignTuplets","currTickable","prevTickable","formatterOptions","globalSoftmax","maxIterations","justifyWidth","durationStats","minTotalWidth","hasMinTotalWidth","tickContexts","array","list","modifierContexts","lossHistory","alignRests","preCalculateMinTotalWidth","unalignedPadding","unalignedCtxCount","wsum","dsum","createTickContexts","contextList","contextMap","wavg","wvar","ll","wpads","davg","dvar","dpads","padmax","unalignedPad","createModifierContexts","tickToContextMap","integerTicks","staveTickToContextMap","newContext","makeContext","addToContext","tickList","createContexts","contextArray","getTickContexts","renderingContext","voicesParam","evaluate","firstContext","calculateIdealDistances","adjustedJustifyWidth","backTickable","prevContext","backVoices","matchingVoices","maxNegativeShiftPx","expectedDistance","thisTickable","insideLeftEdge","backMetrics","insideRightEdge","fromTickable","fromTickablePx","shiftToIdealDistances","idealDistances","centerX","spaceAccum","contextX","ideal","errorPx","negativeShiftPx","configMinPadding","configMaxPadding","targetWidth","distances","actualWidth","minDistance","mdCalc","di","calcMinDistance","paddingMaxCalc","curTargetWidth","lastTickablePadding","lastTickable","tickWidth","paddingMax","paddingMin","prevTick","prevMetrics","currMetrics","leftNoteEdge","rightNote","rightMetrics","stats","count","updateStats","totalDeviation","tune","alpha","current","cost","optionsParam","TupletLocation","Tuplet","LOCATION_TOP","LOCATION_BOTTOM","NESTING_OFFSET","tupletMetrics","numerator_glyphs","denom_glyphs","num_notes","beats_occupied","beatsOccupiedDeprecationWarning","notes_occupied","bracketed","ratioed","setTupletLocation","location","resolveGlyphs","attach","detach","setBracketed","setRatioed","getBeatsOccupied","setBeatsOccupied","beats","setNotesOccupied","unshift","getNestedTupletCount","maxTupletCount","countTuplets","minTupletCount","tupletCount","getYPosition","nested_tuplet_y_offset","topModifierOffset","modLines","modY","noteHeadOffset","stemOffset","lineCheck","nn","bottom_y","addGlyphWidth","notation_start_x","shiftY","colon_x","colon_radius","calculateStemDirection","lineSum","keyProp","BEAM_LEFT","BEAM_RIGHT","BEAM_BOTH","getDefaultBeamGroups","time_sig","beatTotal","beatValue","generateBeams","config","tickGroups","unprocessedNotes","currentTickGroup","noteGroups","currentGroup","nextTickGroup","nextGroup","currentGroupTotalTicks","unprocessedNote","ticksPerGroup","vf_notes","memo","unbeamable","createGroups","sanitizedGroups","tempGroup","isFirstOrLast","breaksOnEachRest","beam_rests","breaksOnFirstOrLastRest","beam_middle_only","breakOnStemChange","maintain_stem_directions","prevDirection","isUnbeamableDuration","sanitizeGroups","findFirstNote","applyStemDirection","beamedNoteGroups","beamable","allTuplets","uniqueTuplets","noteTuplet","getTuplets","show_stemlets","secondary_breaks","secondary_break_ticks","flat_beams","flat_beam_offset","slope","forcedPartialDirections","stem_weight","break_on_indices","max_slope","min_slope","slope_iterations","slope_cost","stemlet_extension","min_flat_beam_offset","beamCount","breakSecondaryAt","indices","setPartialBeamSideAt","side","unsetPartialBeamSideAt","getSlopeY","calculateSlope","firstNote","initialSlope","firstStemTipY","firstStemX","getStemSlope","minCost","MAX_VALUE","bestSlope","totalStemExtension","yShiftTemp","adjustedStemTipY","diff","idealSlope","calculateFlatSlope","extremeY","extremeBeamCount","currentExtreme","extremeTest","newOffset","getBeamYToDraw","beamY","applyStemExtensions","beamedStemTipY","preBeamExtension","beamExtension","crossStemExtension","totalBeamWidth","lookupBeamDirection","prev_tick","next_tick","forcedBeamDirection","lookup_duration","prev_note_gets_beam","next_note_gets_beam","note_gets_beam","getBeamLines","tick_of_duration","beam_started","beam_lines","current_beam","previous_should_break","tick_tally","should_break","next_note","beam_alone","beam_direction","last_beam","drawStems","drawBeamLines","valid_beam_durations","beamThickness","beamLines","beam_line","startBeamX","startBeamY","lastBeamX","lastBeamY","ClefNote","abs_x","Crescendo","extend_left","extend_right","decrescendo","setHeight","setDecrescendo","decresc","tick_context","next_context","begin_x","half_height","reverse","renderHairpin","CurvePosition","Curve","nearHead","NEAR_HEAD","nearTop","NEAR_TOP","from","to","position_end","invert","cps","renderCurve","first_x","first_y","last_x","last_y","cp0x","cp0y","cp_spacing","end_metric","Parser","flattenMatches","matchedString","results","grammar","errorPos","expect","matchFail","returnPos","matchSuccess","matchToken","token","noSpace","regexp","RegExp","success","incrementPos","expectOne","rule","maybe","allMatches","oneMatch","localPos","or","gotOne","numMatches","expectOneOrMore","more","expectZeroOrMore","ruleFunc","bind","oneOrMore","zeroOrMore","matches","run","EasyScore","EasyScoreGrammar","PIECE","PIECES","EOL","CHORDORNOTE","PARAMS","commitPiece","COMMA","DURATION","DOTS","OPTS","CHORD","SINGLENOTE","LPAREN","NOTES","RPAREN","addChord","NOTE","NOTENAME","ACCIDENTAL","OCTAVE","addSingleNote","MICROTONES","ACCIDENTALS","DOT","setNoteDots","SLASH","MAYBESLASH","TYPES","setNoteType","DURATIONS","setNoteDuration","LBRACKET","KEYVAL","KEYVALS","RBRACKET","KEY","EQUALS","VAL","addNoteOption","SVAL","DVAL","Piece","chord","Builder","commitHooks","elements","rollingDuration","resetPiece","getElements","addCommitHook","commitHook","piece","addNote","standardAccidentals","notePiece","GhostNote","setId","commaSeparatedRegex","setClass","defaults","throwOnError","parser","ERROR_MSG","parameter","GlyphNote","ignoreTicks","SCALE","slash","ret","staveNoteScale","offsetScale","slashBBox","calcBeamedNotesSlashBBox","noteHeadBounds","defaultStemExtention","defaultOffsetY","slashStemOffset","slashBeamOffset","protrusions","beam_slope","beam_angle","atan","iPointOnBeam","slash_angle","protrusion_stem_dx","protrusion_stem_dy","protrusion_beam_dx","protrusion_beam_dy","stem0X","stemY","KeySigNote","semibreve_rest","MultiMeasureRest","number_of_measures","xs","hasPaddingLeft","hasPaddingRight","hasLineThickness","hasSymbolSpacing","padding_left","padding_right","line_thickness","symbol_spacing","use_symbols","show_number","number_line","number_glyph_point","serif_thickness","semibreve_rest_glyph_scale","getXs","drawLine","spacingBetweenLines","lineThicknessHalf","serifThickness","bot","leftIndented","rightIndented","lineTop","lineBottom","drawSymbols","n4","n2","n1","get_semibreve_rest","rest_scale","rest_width","yMiddle","timeSig","drawPedalGlyph","glyph_data","PedalMarking","createSustain","createSostenuto","pedal","MIXED","setCustomText","createUnaCorda","custom_depress_text","custom_release_text","bracket_height","text_margin_right","bracket_line_width","depress","drawBracketed","prev_x","prev_y","is_pedal_depressed","next_is_same","prev_is_same","drawText","pedal_depress","pedal_release","mixed","CODES","RepeatNote","drawArrowHead","StaveLine","line_dash","rounded_end","draw_start_arrow","draw_end_arrow","arrowhead_length","arrowhead_angle","text_position_vertical","TextVerticalPosition","text_justification","applyLineStyle","applyFontStyle","drawArrowLine","pt1","pt2","both_arrows","distance","ratio","end_y","start_y","line_angle","angle1","angle2","top_x","bottom_x","start_position","end_position","first_index","last_index","upwards_slope","notehead_width","vertical_position","System","partStaves","partStaveInfos","partVoices","spaceBetweenStaves","autoWidth","noJustification","debugFormatter","formatIterations","noPadding","details","formatOptions","getStaves","getVoices","addConnector","connector","addStave","staveOptions","spaceAbove","spaceBelow","debugNoteMetrics","addVoices","options_details","debugNoteMetricsYs","part","lastY","glyphPropsArr","positions","ghost","draw_dots","draw_stem_through_stave","setGhost","getStemY","stemDownLine","stemStartLine","flag_x","flag_y","drawStemThrough","stemThrough","stemLines","unused_strings","up_stem","down_stem","line_spacing","total_lines","stem_lines","strings","containsLastString","containsFirstString","line_ys","isTopBound","isBottomBound","getPartialStemLines","strings_used","stem_through","getUnusedStringGroups","drawPositions","tab_x","render_stem","TabStave","addTabGlyph","TextBracket","TextBracketPosition","Positions","PositionsString","stop","show_bracket","underline_superscript","main_measure","main_width","main_height","super_y","super_measure","super_width","super_height","line_y","TextDynamics","sequence","glyph_font_size","total_width","letter","letter_x","current_letter","TimeSigNote","tsGlyph","VibratoBracket","bracket_data","stop_x","Factory","newFromElementId","renderQ","systems","initRenderer","ghostNote","textNote","barNote","clefNote","timeSigNote","keySigNote","hJustify","vJustify","kerning","upperAccidental","lowerAccidental","numMeasures","multiMeasureRest","secondaryBeamBreaks","partialBeamDirections","curve","tie","vibratoBracket","textBracket","system","GraceTabNote","KeyManager","setKey","getKey","scaleMapByValue","originalScaleMapByValue","getAccidental","selectNote","scaleNote","modparts","change","valueNote","originalValueNote","StaveHairpin","FormatByTicksAndDraw","ppt","pixelsPerTick","l_shift_px","left_shift_ticks","r_shift_px","right_shift_ticks","hairpin_options","left_shift_px","right_shift_px","setRenderOptions","hairpin","dis","staff_height","l_shift","r_shift","CRESC","DECRESC","TabSlide","SLIDE_UP","SLIDE_DOWN","createSlideUp","createSlideDown","first_fret","last_fret","slide_y","Tremolo","y_spacing_scale","extra_stroke_scale","y_spacing","Tuning","names","standard","dagdad","dropd","standardBanjo","doubleCBanjo","doubleDBanjo","sawmillBanjo","tuningString","tuningValues","setTuning","noteToInteger","getValueForString","stringNum","getValueForFret","fretNum","stringValue","getNoteForFret","Flow","BUILD","VERSION","DATE","setMusicFont","fontNames","fetchMusicFont","fontModuleOrPath","getMusicFont","getMusicFontStack","PetalumaScriptFont","$","I","J","K","N","O","Q","U","V","Y","Z","_","l","generatedOn","RobotoSlabFont","SansFontBold","SansFont","smufl","Description","SerifFont","Vex","sortAndUnique","cmp","eq","newArr","last","contains","canvasSelector","benchmark","start_time","Date","getTime","stackTrace","fontModules","Bravura","Gonville","Petaluma","Leland","Custom","fontModule","import","VexFlowFont","fontData","description","loadTextFonts"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-debug-with-tests.js b/build/cjs/vexflow-debug-with-tests.js new file mode 100644 index 0000000000..f19bf961ba --- /dev/null +++ b/build/cjs/vexflow-debug-with-tests.js @@ -0,0 +1,54852 @@ +/*! + * VexFlow 4.2.6 2024-08-26T20:16:17.134Z 103aad2b14837418c5e96c9e078edd036fcddf60 + * Copyright (c) 2010 Mohit Muthanna Cheppudira + * https://www.vexflow.com https://github.com/0xfe/vexflow + */ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["Vex"] = factory(); + else + root["Vex"] = factory(); +})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => { +return /******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/version.ts": +/*!************************!*\ + !*** ./src/version.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "DATE": () => (/* binding */ DATE), +/* harmony export */ "ID": () => (/* binding */ ID), +/* harmony export */ "VERSION": () => (/* binding */ VERSION) +/* harmony export */ }); +const VERSION = '4.2.6'; +const ID = '103aad2b14837418c5e96c9e078edd036fcddf60'; +const DATE = '2024-08-26T20:16:17.134Z'; + + +/***/ }), + +/***/ "./src/accidental.ts": +/*!***************************!*\ + !*** ./src/accidental.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Accidental": () => (/* binding */ Accidental) +/* harmony export */ }); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// @author Mohit Cheppudira +// @author Greg Ristow (modifications) + + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Accidental.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Accidental', args); +} +/** + * An `Accidental` inherits from `Modifier`, and is formatted within a + * `ModifierContext`. Accidentals are modifiers that can be attached to + * notes. Support is included for both western and microtonal accidentals. + * + * See `tests/accidental_tests.ts` for usage examples. + */ +class Accidental extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + /** Accidentals category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Accidental; + } + /** Arrange accidentals inside a ModifierContext. */ + static format(accidentals, state) { + // If there are no accidentals, no need to format their positions. + if (!accidentals || accidentals.length === 0) + return; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); + const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding'); + const leftShift = state.left_shift + noteheadAccidentalPadding; + const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing'); + const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals + const accidentalLinePositionsAndSpaceNeeds = []; + let prevNote = undefined; + let extraXSpaceNeededForLeftDisplacedNotehead = 0; + // First determine the accidentals' Y positions from the note.keys + for (let i = 0; i < accidentals.length; ++i) { + const acc = accidentals[i]; + const note = acc.getNote(); + const stave = note.getStave(); + const index = acc.checkIndex(); + const props = note.getKeyProps()[index]; + if (note !== prevNote) { + // Iterate through all notes to get the displaced pixels + for (let n = 0; n < note.keys.length; ++n) { + // If the current extra left-space needed isn't as big as this note's, + // then we need to use this note's. + extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead); + } + prevNote = note; + } + if (stave) { + const lineSpace = stave.getSpacingBetweenLines(); + const y = stave.getYForLine(props.line); + const accLine = Math.round((y / lineSpace) * 2) / 2; + accidentalLinePositionsAndSpaceNeeds.push({ + y, + line: accLine, + extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead, + acc, + spacingBetweenStaveLines: lineSpace, + }); + } + else { + accidentalLinePositionsAndSpaceNeeds.push({ + line: props.line, + extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead, + acc, + }); + } + } + // Sort accidentals by line number. + accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line); + const staveLineAccidentalLayoutMetrics = []; + // amount by which all accidentals must be shifted right or left for + // stem flipping, notehead shifting concerns. + let maxExtraXSpaceNeeded = 0; + // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics) + // from accidentalLinePositionsAndSpaceNeeds + for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) { + const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i]; + const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1]; + let currentLineMetric; + // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric + if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) { + currentLineMetric = { + line: accidentalLinePositionAndSpaceNeeds.line, + flatLine: true, + dblSharpLine: true, + numAcc: 0, + width: 0, + column: 0, + }; + staveLineAccidentalLayoutMetrics.push(currentLineMetric); + } + else { + currentLineMetric = priorLineMetric; + } + // if this accidental is not a flat, the accidental needs 3.0 lines lower + // clearance instead of 2.5 lines for b or bb. + if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' && + accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') { + currentLineMetric.flatLine = false; + } + // if this accidental is not a double sharp, the accidental needs 3.0 lines above + if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') { + currentLineMetric.dblSharpLine = false; + } + // Track how many accidentals are on this line: + currentLineMetric.numAcc++; + // Track the total x_offset needed for this line which will be needed + // for formatting lines w/ multiple accidentals: + // width = accidental width + universal spacing between accidentals + currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing; + // if this extraXSpaceNeeded is the largest so far, use it as the starting point for + // all accidental columns. + maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded); + } + // ### Place Accidentals in Columns + // + // Default to a classic triangular layout (middle accidental farthest left), + // but follow exceptions as outlined in G. Read's _Music Notation_ and + // Elaine Gould's _Behind Bars_. + // + // Additionally, this implements different vertical collision rules for + // flats (only need 2.5 lines clearance below) and double sharps (only + // need 2.5 lines of clearance above or below). + // + // Classic layouts and exception patterns are found in the 'tables.js' + // in 'Tables.accidentalColumnsTable' + // + // Beyond 6 vertical accidentals, default to the parallel ascending lines approach, + // using as few columns as possible for the verticle structure. + // + // TODO (?): Allow column to be specified for an accidental at run-time? + let totalColumns = 0; + // establish the boundaries for a group of notes with clashing accidentals: + for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) { + let noFurtherConflicts = false; + const groupStart = i; + let groupEnd = i; + while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) { + // if this note conflicts with the next: + if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) { + // include the next note in the group: + groupEnd++; + } + else { + noFurtherConflicts = true; + } + } + // Gets an a line from the `lineList`, relative to the current group + const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index]; + const getGroupLines = (indexes) => indexes.map(getGroupLine); + const lineDifference = (indexA, indexB) => { + const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line); + return a - b; + }; + const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2)); + // Set columns for the lines in this group: + const groupLength = groupEnd - groupStart + 1; + // Set the accidental column for each line of the group + let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd]) + ? 'a' + : 'b'; + switch (groupLength) { + case 3: + if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) { + endCase = 'second_on_bottom'; + } + break; + case 4: + if (notColliding([0, 2], [1, 3])) { + endCase = 'spaced_out_tetrachord'; + } + break; + case 5: + if (endCase === 'b' && notColliding([1, 3])) { + endCase = 'spaced_out_pentachord'; + if (notColliding([0, 2], [2, 4])) { + endCase = 'very_spaced_out_pentachord'; + } + } + break; + case 6: + if (notColliding([0, 3], [1, 4], [2, 5])) { + endCase = 'spaced_out_hexachord'; + } + if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) { + endCase = 'very_spaced_out_hexachord'; + } + break; + default: + break; + } + let groupMember; + let column; + // If the group contains seven members or more, use ascending parallel lines + // of accidentals, using as few columns as possible while avoiding collisions. + if (groupLength >= 7) { + // First, determine how many columns to use: + let patternLength = 2; + let collisionDetected = true; + while (collisionDetected === true) { + collisionDetected = false; + for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) { + if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) { + collisionDetected = true; + patternLength++; + break; + } + } + } + // Then, assign a column to each line of accidentals + for (groupMember = i; groupMember <= groupEnd; groupMember++) { + column = ((groupMember - i) % patternLength) + 1; + staveLineAccidentalLayoutMetrics[groupMember].column = column; + totalColumns = totalColumns > column ? totalColumns : column; + } + } + else { + // If the group contains fewer than seven members, use the layouts from + // the Tables.accidentalColumnsTable (See: tables.ts). + for (groupMember = i; groupMember <= groupEnd; groupMember++) { + column = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i]; + staveLineAccidentalLayoutMetrics[groupMember].column = column; + totalColumns = totalColumns > column ? totalColumns : column; + } + } + // Increment i to the last note that was set, so that if a lower set of notes + // does not conflict at all with this group, it can have its own classic shape. + i = groupEnd; + } + // ### Convert Columns to x_offsets + // + // This keeps columns aligned, even if they have different accidentals within them + // which sometimes results in a larger x_offset than is an accidental might need + // to preserve the symmetry of the accidental shape. + // + // Neither A.C. Vinci nor G. Read address this, and it typically only happens in + // music with complex chord clusters. + // + // TODO (?): Optionally allow closer compression of accidentals, instead of forcing + // parallel columns. + // track each column's max width, which will be used as initial shift of later columns: + const columnWidths = []; + const columnXOffsets = []; + for (let i = 0; i <= totalColumns; i++) { + columnWidths[i] = 0; + columnXOffsets[i] = 0; + } + columnWidths[0] = leftShift + maxExtraXSpaceNeeded; + columnXOffsets[0] = leftShift; + // Fill columnWidths with widest needed x-space; + // this is what keeps the columns parallel. + staveLineAccidentalLayoutMetrics.forEach((line) => { + if (line.width > columnWidths[line.column]) + columnWidths[line.column] = line.width; + }); + for (let i = 1; i < columnWidths.length; i++) { + // this column's offset = this column's width + previous column's offset + columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1]; + } + const totalShift = columnXOffsets[columnXOffsets.length - 1]; + // Set the xShift for each accidental according to column offsets: + let accCount = 0; + staveLineAccidentalLayoutMetrics.forEach((line) => { + let lineWidth = 0; + const lastAccOnLine = accCount + line.numAcc; + // handle all of the accidentals on a given line: + for (accCount; accCount < lastAccOnLine; accCount++) { + const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded; + accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift); + // keep track of the width of accidentals we've added so far, so that when + // we loop, we add space for them. + lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing; + L('Line, accCount, shift: ', line.line, accCount, xShift); + } + }); + // update the overall layout with the full width of the accidental shapes: + state.left_shift = totalShift + additionalPadding; + } + /** Helper function to determine whether two lines of accidentals collide vertically */ + static checkCollision(line1, line2) { + let clearance = line2.line - line1.line; + let clearanceRequired = 3; + // But less clearance is required for certain accidentals: b, bb and ##. + if (clearance > 0) { + // then line 2 is on top + clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0; + if (line1.dblSharpLine) + clearance -= 0.5; + } + else { + // line 1 is on top + clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0; + if (line2.dblSharpLine) + clearance -= 0.5; + } + const collision = Math.abs(clearance) < clearanceRequired; + L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision); + return collision; + } + /** + * Use this method to automatically apply accidentals to a set of `voices`. + * The accidentals will be remembered between all the voices provided. + * Optionally, you can also provide an initial `keySignature`. + */ + static applyAccidentals(voices, keySignature) { + const tickPositions = []; + const tickNoteMap = {}; + // Sort the tickables in each voice by their tick position in the voice. + voices.forEach((voice) => { + const tickPosition = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1); + const tickable = voice.getTickables(); + tickable.forEach((t) => { + if (t.shouldIgnoreTicks()) + return; + const notesAtPosition = tickNoteMap[tickPosition.value()]; + if (!notesAtPosition) { + tickPositions.push(tickPosition.value()); + tickNoteMap[tickPosition.value()] = [t]; + } + else { + notesAtPosition.push(t); + } + tickPosition.add(t.getTicks()); + }); + }); + const music = new _music__WEBPACK_IMPORTED_MODULE_3__.Music(); + // Default key signature is C major. + if (!keySignature) + keySignature = 'C'; + // Get the scale map, which represents the current state of each pitch. + const scaleMapKey = music.createScaleMap(keySignature); + const scaleMap = {}; + tickPositions.forEach((tickPos) => { + const tickables = tickNoteMap[tickPos]; + // Array to store all pitches that modified accidental states + // at this tick position + const modifiedPitches = []; + const processNote = (t) => { + // Only StaveNote implements .addModifier(), which is used below. + if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(t) || t.isRest() || t.shouldIgnoreTicks()) { + return; + } + // Go through each key and determine if an accidental should be applied. + const staveNote = t; + staveNote.keys.forEach((keyString, keyIndex) => { + const key = music.getNoteParts(keyString.split('/')[0]); + const octave = keyString.split('/')[1]; + // Force a natural for every key without an accidental + const accidentalString = key.accidental || 'n'; + const pitch = key.root + accidentalString; + // Determine if the current pitch has the same accidental + // as the scale state + if (!scaleMap[key.root + octave]) + scaleMap[key.root + octave] = scaleMapKey[key.root]; + const sameAccidental = scaleMap[key.root + octave] === pitch; + // Determine if an identical pitch in the chord already + // modified the accidental state + const previouslyModified = modifiedPitches.indexOf(keyString) > -1; + // Remove accidentals + staveNote.getModifiers().forEach((modifier, index) => { + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isAccidental)(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) { + staveNote.getModifiers().splice(index, 1); + } + }); + // Add the accidental to the StaveNote + if (!sameAccidental || (sameAccidental && previouslyModified)) { + // Modify the scale map so that the root pitch has an + // updated state + scaleMap[key.root + octave] = pitch; + // Create the accidental + const accidental = new Accidental(accidentalString); + // Attach the accidental to the StaveNote + staveNote.addModifier(accidental, keyIndex); + // Add the pitch to list of pitches that modified accidentals + modifiedPitches.push(keyString); + } + }); + // process grace notes + staveNote.getModifiers().forEach((modifier) => { + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNoteGroup)(modifier)) { + modifier.getGraceNotes().forEach(processNote); + } + }); + }; + tickables.forEach(processNote); + }); + } + /** + * Create accidental. + * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`. + * For example: `#`, `##`, `b`, `n`, etc. + */ + constructor(type) { + super(); + L('New accidental: ', type); + this.type = type; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT; + this.render_options = { + // Font size for glyphs + font_scale: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, + // Padding between accidental and parentheses on each side + parenLeftPadding: 2, + parenRightPadding: 2, + }; + this.accidental = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes(this.type); + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`); + // Cautionary accidentals have parentheses around them + this.cautionary = false; + this.reset(); + } + reset() { + const fontScale = this.render_options.font_scale; + this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.accidental.code, fontScale); + this.glyph.setOriginX(1.0); + if (this.cautionary) { + this.parenLeft = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('{').code, fontScale); + this.parenRight = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('}').code, fontScale); + this.parenLeft.setOriginX(1.0); + this.parenRight.setOriginX(1.0); + } + } + /** Get width in pixels. */ + getWidth() { + if (this.cautionary) { + const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft); + const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight); + const parenWidth = parenLeft.getMetrics().width + + parenRight.getMetrics().width + + this.render_options.parenLeftPadding + + this.render_options.parenRightPadding; + return this.glyph.getMetrics().width + parenWidth; + } + else { + return this.glyph.getMetrics().width; + } + } + /** Attach this accidental to `note`, which must be a `StaveNote`. */ + setNote(note) { + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(note, 'ArgumentError', `Bad note value: ${note}`); + this.note = note; + // Accidentals attached to grace notes are rendered smaller. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNote)(note)) { + this.render_options.font_scale = 25; + this.reset(); + } + return this; + } + /** If called, draws parenthesis around accidental. */ + setAsCautionary() { + this.cautionary = true; + this.render_options.font_scale = 28; + this.reset(); + return this; + } + /** Render accidental onto canvas. */ + draw() { + const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this; + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + // Figure out the start `x` and `y` coordinates for note and index. + const start = note.getModifierStartXY(position, index); + let accX = start.x + x_shift; + const accY = start.y + y_shift; + L('Rendering: ', type, accX, accY); + if (!cautionary) { + glyph.render(ctx, accX, accY); + } + else { + const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft); + const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight); + // Render the accidental in parentheses. + parenRight.render(ctx, accX, accY); + accX -= parenRight.getMetrics().width; + accX -= parenRightPadding; + accX -= this.accidental.parenRightPaddingAdjustment; + glyph.render(ctx, accX, accY); + accX -= glyph.getMetrics().width; + accX -= parenLeftPadding; + parenLeft.render(ctx, accX, accY); + } + } +} +/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */ +Accidental.DEBUG = false; + + + +/***/ }), + +/***/ "./src/annotation.ts": +/*!***************************!*\ + !*** ./src/annotation.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Annotation": () => (/* binding */ Annotation), +/* harmony export */ "AnnotationHorizontalJustify": () => (/* binding */ AnnotationHorizontalJustify), +/* harmony export */ "AnnotationVerticalJustify": () => (/* binding */ AnnotationVerticalJustify) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Annotation.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Annotation', args); +} +var AnnotationHorizontalJustify; +(function (AnnotationHorizontalJustify) { + AnnotationHorizontalJustify[AnnotationHorizontalJustify["LEFT"] = 1] = "LEFT"; + AnnotationHorizontalJustify[AnnotationHorizontalJustify["CENTER"] = 2] = "CENTER"; + AnnotationHorizontalJustify[AnnotationHorizontalJustify["RIGHT"] = 3] = "RIGHT"; + AnnotationHorizontalJustify[AnnotationHorizontalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; +})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {})); +var AnnotationVerticalJustify; +(function (AnnotationVerticalJustify) { + AnnotationVerticalJustify[AnnotationVerticalJustify["TOP"] = 1] = "TOP"; + AnnotationVerticalJustify[AnnotationVerticalJustify["CENTER"] = 2] = "CENTER"; + AnnotationVerticalJustify[AnnotationVerticalJustify["BOTTOM"] = 3] = "BOTTOM"; + AnnotationVerticalJustify[AnnotationVerticalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; +})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {})); +/** + * Annotations are modifiers that can be attached to + * notes. + * + * See `tests/annotation_tests.ts` for usage examples. + */ +class Annotation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + /** Annotations category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Annotation; + } + // Use the same padding for annotations as note head so the + // words don't run into each other. + static get minAnnotationPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + /** Arrange annotations within a `ModifierContext` */ + static format(annotations, state) { + if (!annotations || annotations.length === 0) + return false; + let leftWidth = 0; + let rightWidth = 0; + let maxLeftGlyphWidth = 0; + let maxRightGlyphWidth = 0; + for (let i = 0; i < annotations.length; ++i) { + const annotation = annotations[i]; + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(annotation.textFont); + // Text height is expressed in fractional stave spaces. + const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + let verticalSpaceNeeded = textLines; + const note = annotation.checkAttachedNote(); + const glyphWidth = note.getGlyphProps().getWidth(); + // Get the text width from the font metrics. + const textWidth = textFormatter.getWidthForTextInPx(annotation.text); + if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) { + maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth); + leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding; + } + else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) { + maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth); + rightWidth = Math.max(rightWidth, textWidth); + } + else { + leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding; + rightWidth = Math.max(rightWidth, textWidth / 2); + maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth); + maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth); + } + const stave = note.getStave(); + const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + let stemHeight = 0; + let lines = 5; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { + if (note.render_options.draw_stem) { + const stem = note.getStem(); + if (stem) { + stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + } + } + else { + stemHeight = 0; + } + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) { + const stem = note.getStem(); + if (stem && note.getNoteType() === 'n') { + stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + } + } + if (stave) { + lines = stave.getNumLines(); + } + if (annotation.verticalJustification === this.VerticalJustify.TOP) { + let noteLine = note.getLineNumber(true); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { + noteLine = lines - (note.leastString() - 0.5); + } + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + noteLine += stemHeight; + } + const curTop = noteLine + state.top_text_line + 0.5; + if (curTop < lines) { + annotation.setTextLine(lines - noteLine); + verticalSpaceNeeded += lines - noteLine; + state.top_text_line = verticalSpaceNeeded; + } + else { + annotation.setTextLine(state.top_text_line); + state.top_text_line += verticalSpaceNeeded; + } + } + else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) { + let noteLine = lines - note.getLineNumber(); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { + noteLine = note.greatestString() - 1; + } + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + noteLine += stemHeight; + } + const curBottom = noteLine + state.text_line + 1; + if (curBottom < lines) { + annotation.setTextLine(lines - curBottom); + verticalSpaceNeeded += lines - curBottom; + state.text_line = verticalSpaceNeeded; + } + else { + annotation.setTextLine(state.text_line); + state.text_line += verticalSpaceNeeded; + } + } + else { + annotation.setTextLine(state.text_line); + } + } + const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0)); + const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0)); + state.left_shift += leftOverlap; + state.right_shift += rightOverlap; + return true; + } + /** + * Annotations inherit from `Modifier` and is positioned correctly when + * in a `ModifierContext`. + * Create a new `Annotation` with the string `text`. + */ + constructor(text) { + super(); + this.text = text; + this.horizontalJustification = AnnotationHorizontalJustify.CENTER; + // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM. + // this is to support legacy application that may expect this. + this.verticalJustification = AnnotationVerticalJustify.TOP; + this.resetFont(); + // The default width is calculated from the text. + this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.textWidth(text)); + } + /** + * Set vertical position of text (above or below stave). + * @param just value in `AnnotationVerticalJustify`. + */ + setVerticalJustification(just) { + this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just; + return this; + } + /** + * Get horizontal justification. + */ + getJustification() { + return this.horizontalJustification; + } + /** + * Set horizontal justification. + * @param justification value in `Annotation.Justify`. + */ + setJustification(just) { + this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just; + return this; + } + /** Render text beside the note. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont); + const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE, this.index); + this.setRendered(); + // We're changing context parameters. Save current state. + ctx.save(); + // Apply style might not save context, if this.style is undefined, so we + // still need to save context state just before this, since we will be + // changing ctx parameters below. + this.applyStyle(); + ctx.openGroup('annotation', this.getAttribute('id')); + ctx.setFont(this.textFont); + const text_width = textFormatter.getWidthForTextInPx(this.text); + const text_height = textFormatter.getYForStringInPx(this.text).height; + let x; + let y; + if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) { + x = start.x; + } + else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) { + x = start.x - text_width; + } + else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) { + x = start.x - text_width / 2; + } /* CENTER_STEM */ + else { + x = note.getStemX() - text_width / 2; + } + let stem_ext = {}; + let spacing = 0; + const has_stem = note.hasStem(); + const stave = note.checkStave(); + // The position of the text varies based on whether or not the note + // has a stem. + if (has_stem) { + stem_ext = note.checkStem().getExtents(); + spacing = stave.getSpacingBetweenLines(); + } + if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) { + // Use the largest (lowest) Y value + const ys = note.getYs(); + y = ys.reduce((a, b) => (a > b ? a : b)); + y += (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE + text_height; + if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line); + } + } + else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) { + const yt = note.getYForTopText(this.text_line) - 1; + const yb = stave.getYForBottomText(this.text_line); + y = yt + (yb - yt) / 2 + text_height / 2; + } + else if (this.verticalJustification === AnnotationVerticalJustify.TOP) { + const topY = Math.min(...note.getYs()); + y = topY - (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + // If the stem is above the stave already, go with default line width vs. actual + // since the lines between don't really matter. + spacing = stem_ext.topY < stave.getTopLineTopY() ? _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE : spacing; + y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1)); + } + } /* CENTER_STEM */ + else { + const extents = note.getStemExtents(); + y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2; + } + L('Rendering annotation: ', this.text, x, y); + ctx.fillText(this.text, x, y); + ctx.closeGroup(); + this.restoreStyle(); + ctx.restore(); + } +} +/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */ +Annotation.DEBUG = false; +Annotation.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); +/** Text annotations can be positioned and justified relative to the note. */ +Annotation.HorizontalJustify = AnnotationHorizontalJustify; +Annotation.HorizontalJustifyString = { + left: AnnotationHorizontalJustify.LEFT, + right: AnnotationHorizontalJustify.RIGHT, + center: AnnotationHorizontalJustify.CENTER, + centerStem: AnnotationHorizontalJustify.CENTER_STEM, +}; +Annotation.VerticalJustify = AnnotationVerticalJustify; +Annotation.VerticalJustifyString = { + above: AnnotationVerticalJustify.TOP, + top: AnnotationVerticalJustify.TOP, + below: AnnotationVerticalJustify.BOTTOM, + bottom: AnnotationVerticalJustify.BOTTOM, + center: AnnotationVerticalJustify.CENTER, + centerStem: AnnotationVerticalJustify.CENTER_STEM, +}; + + + +/***/ }), + +/***/ "./src/articulation.ts": +/*!*****************************!*\ + !*** ./src/articulation.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Articulation": () => (/* binding */ Articulation) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Larry Kuhns. +// MIT License + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Articulation.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.Articulation', args); +} +const { ABOVE, BELOW } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position; +function roundToNearestHalf(mathFn, value) { + return mathFn(value / 0.5) * 0.5; +} +// This includes both staff and ledger lines +function isWithinLines(line, position) { + return position === ABOVE ? line <= 5 : line >= 1; +} +function getRoundingFunction(line, position) { + if (isWithinLines(line, position)) { + if (position === ABOVE) { + return Math.ceil; + } + else { + return Math.floor; + } + } + else { + return Math.round; + } +} +function snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) { + // Initially, snap to nearest staff line or space + const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line); + const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position); + const onStaffLine = snappedLine % 1 === 0; + if (canSnapToStaffSpace && onStaffLine) { + const HALF_STAFF_SPACE = 0.5; + return snappedLine + HALF_STAFF_SPACE * -offsetDirection; + } + else { + return snappedLine; + } +} +// Helper function for checking if a Note object is either a StaveNote or a GraceNote. +const isStaveOrGraceNote = (note) => (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note) || (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isGraceNote)(note); +function getTopY(note, textLine) { + const stemDirection = note.getStemDirection(); + const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents(); + if (isStaveOrGraceNote(note)) { + if (note.hasStem()) { + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + return stemTipY; + } + else { + return stemBaseY; + } + } + else { + return Math.min(...note.getYs()); + } + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) { + if (note.hasStem()) { + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + return stemTipY; + } + else { + return note.checkStave().getYForTopText(textLine); + } + } + else { + return note.checkStave().getYForTopText(textLine); + } + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'); + } +} +function getBottomY(note, textLine) { + const stemDirection = note.getStemDirection(); + const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents(); + if (isStaveOrGraceNote(note)) { + if (note.hasStem()) { + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + return stemBaseY; + } + else { + return stemTipY; + } + } + else { + return Math.max(...note.getYs()); + } + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) { + if (note.hasStem()) { + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + return note.checkStave().getYForBottomText(textLine); + } + else { + return stemTipY; + } + } + else { + return note.checkStave().getYForBottomText(textLine); + } + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'); + } +} +/** + * Get the initial offset of the articulation from the y value of the starting position. + * This is required because the top/bottom text positions already have spacing applied to + * provide a "visually pleasant" default position. However the y values provided from + * the stavenote's top/bottom do *not* have any pre-applied spacing. This function + * normalizes this asymmetry. + * @param note + * @param position + * @returns + */ +function getInitialOffset(note, position) { + const isOnStemTip = (position === ABOVE && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) || + (position === BELOW && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN); + if (isStaveOrGraceNote(note)) { + if (note.hasStem() && isOnStemTip) { + return 0.5; + } + else { + // this amount is larger than the stem-tip offset because we start from + // the center of the notehead + return 1; + } + } + else { + if (note.hasStem() && isOnStemTip) { + return 1; + } + else { + return 0; + } + } +} +/** + * Articulations and Accents are modifiers that can be + * attached to notes. The complete list of articulations is available in + * `tables.ts` under `Vex.Flow.articulationCodes`. + * + * See `tests/articulation_tests.ts` for usage examples. + */ +class Articulation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + /** Articulations category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Articulation; + } + /** + * FIXME: + * Most of the complex formatting logic (ie: snapping to space) is + * actually done in .render(). But that logic belongs in this method. + * + * Unfortunately, this isn't possible because, by this point, stem lengths + * have not yet been finalized. Finalized stem lengths are required to determine the + * initial position of any stem-side articulation. + * + * This indicates that all objects should have their stave set before being + * formatted. It can't be an optional if you want accurate vertical positioning. + * Consistently positioned articulations that play nice with other modifiers + * won't be possible until we stop relying on render-time formatting. + * + * Ideally, when this function has completed, the vertical articulation positions + * should be ready to render without further adjustment. But the current state + * is far from this ideal. + */ + static format(articulations, state) { + if (!articulations || articulations.length === 0) + return false; + const margin = 0.5; + let maxGlyphWidth = 0; + const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(articulation.glyph.getMetrics().height) / 10 + margin); + articulations.forEach((articulation) => { + const note = articulation.checkAttachedNote(); + maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth); + let lines = 5; + const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + let stemHeight = 0; + // Decide if we need to consider beam direction in placement. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStemmableNote)(note)) { + const stem = note.getStem(); + if (stem) { + stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + } + } + const stave = note.getStave(); + if (stave) { + lines = stave.getNumLines(); + } + if (articulation.getPosition() === ABOVE) { + let noteLine = note.getLineNumber(true); + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + noteLine += stemHeight; + } + let increment = getIncrement(articulation, state.top_text_line, ABOVE); + const curTop = noteLine + state.top_text_line + 0.5; + // If articulation must be above stave, add lines between note and stave top + if (!articulation.articulation.between_lines && curTop < lines) { + increment += lines - curTop; + } + articulation.setTextLine(state.top_text_line); + state.top_text_line += increment; + } + else if (articulation.getPosition() === BELOW) { + let noteLine = Math.max(lines - note.getLineNumber(), 0); + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + noteLine += stemHeight; + } + let increment = getIncrement(articulation, state.text_line, BELOW); + const curBottom = noteLine + state.text_line + 0.5; + // if articulation must be below stave, add lines from note to stave bottom + if (!articulation.articulation.between_lines && curBottom < lines) { + increment += lines - curBottom; + } + articulation.setTextLine(state.text_line); + state.text_line += increment; + } + }); + const width = articulations + .map((articulation) => articulation.getWidth()) + .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth)); + const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0)); + state.left_shift += overlap / 2; + state.right_shift += overlap / 2; + return true; + } + static easyScoreHook({ articulations }, note, builder) { + if (!articulations) + return; + const articNameToCode = { + staccato: 'a.', + tenuto: 'a-', + accent: 'a>', + }; + articulations + .split(',') + .map((articString) => articString.trim().split('.')) + .map(([name, position]) => { + const artic = { type: articNameToCode[name] }; + if (position) + artic.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.PositionString[position]; + return builder.getFactory().Articulation(artic); + }) + .map((artic) => note.addModifier(artic, 0)); + } + /** + * Create a new articulation. + * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code. + * + * Notes (by default): + * - Glyph codes ending with 'Above' will be positioned ABOVE + * - Glyph codes ending with 'Below' will be positioned BELOW + */ + constructor(type) { + super(); + this.type = type; + this.position = ABOVE; + this.render_options = { + font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, + }; + this.reset(); + } + reset() { + this.articulation = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.articulationCodes(this.type); + // Use type as glyph code, if not defined as articulation code + if (!this.articulation) { + this.articulation = { code: this.type, between_lines: false }; + if (this.type.endsWith('Above')) + this.position = ABOVE; + if (this.type.endsWith('Below')) + this.position = BELOW; + } + const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code; + this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale); + (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`); + this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width)); + } + /** Set if articulation should be rendered between lines. */ + setBetweenLines(betweenLines = true) { + this.articulation.between_lines = betweenLines; + return this; + } + /** Render articulation in position next to note. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const index = this.checkIndex(); + const { position, glyph, text_line: textLine } = this; + const canSitBetweenLines = this.articulation.between_lines; + const stave = note.checkStave(); + const staffSpace = stave.getSpacingBetweenLines(); + const isTab = (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note); + // Articulations are centered over/under the note head. + const { x } = note.getModifierStartXY(position, index); + const shouldSitOutsideStaff = !canSitBetweenLines || isTab; + const initialOffset = getInitialOffset(note, position); + const padding = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0); + let y = { + [ABOVE]: () => { + glyph.setOrigin(0.5, 1); + const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace; + return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y; + }, + [BELOW]: () => { + glyph.setOrigin(0.5, 0); + const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace; + return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y; + }, + }[position](); + if (!isTab) { + const offsetDirection = position === ABOVE ? -1 : +1; + const noteLine = note.getKeyProps()[index].line; + const distanceFromNote = (note.getYs()[index] - y) / staffSpace; + const articLine = distanceFromNote + Number(noteLine); + const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection); + if (isWithinLines(snappedLine, position)) + glyph.setOrigin(0.5, 0.5); + y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection; + } + L(`Rendering articulation at (x: ${x}, y: ${y})`); + glyph.render(ctx, x, y); + } +} +/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */ +Articulation.DEBUG = false; +Articulation.INITIAL_OFFSET = -0.5; + + + +/***/ }), + +/***/ "./src/barnote.ts": +/*!************************!*\ + !*** ./src/barnote.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BarNote": () => (/* binding */ BarNote) +/* harmony export */ }); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + +// eslint-disable-next-line +function L(...args) { + if (BarNote.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.BarNote', args); +} +/** + * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can + * be added to a voice and rendered in the middle of a stave. Since it has no + * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter. + * + * See `tests/barnote_tests.ts` for usage examples. + */ +class BarNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.BarNote; + } + constructor(type = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType.SINGLE) { + super({ duration: 'b' }); + this.metrics = { + widths: {}, + }; + const TYPE = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType; + this.metrics.widths = { + [TYPE.SINGLE]: 8, + [TYPE.DOUBLE]: 12, + [TYPE.END]: 15, + [TYPE.REPEAT_BEGIN]: 14, + [TYPE.REPEAT_END]: 14, + [TYPE.REPEAT_BOTH]: 18, + [TYPE.NONE]: 0, + }; + // Tell the formatter that bar notes have no duration. + this.ignore_ticks = true; + this.setType(type); + this.barline = new _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline(type); + } + /** Get the type of bar note.*/ + getType() { + return this.type; + } + /** Set the type of bar note. */ + setType(type) { + this.type = typeof type === 'string' ? _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.typeString[type] : type; + // Set width to width of relevant `Barline`. + this.setWidth(this.metrics.widths[this.type]); + return this; + } + /* Overridden to ignore */ + // eslint-disable-next-line + addToModifierContext(mc) { + // DO NOTHING. + return this; + } + /** Overridden to ignore. */ + preFormat() { + this.preFormatted = true; + return this; + } + /** Render note to stave. */ + draw() { + const ctx = this.checkContext(); + L('Rendering bar line at: ', this.getAbsoluteX()); + this.applyStyle(ctx); + ctx.openGroup('barnote', this.getAttribute('id')); + this.barline.setType(this.type); + this.barline.setX(this.getAbsoluteX()); + this.barline.draw(this.checkStave()); + ctx.closeGroup(); + this.restoreStyle(ctx); + this.setRendered(); + } +} +/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */ +BarNote.DEBUG = false; + + + +/***/ }), + +/***/ "./src/beam.ts": +/*!*********************!*\ + !*** ./src/beam.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BEAM_BOTH": () => (/* binding */ BEAM_BOTH), +/* harmony export */ "BEAM_LEFT": () => (/* binding */ BEAM_LEFT), +/* harmony export */ "BEAM_RIGHT": () => (/* binding */ BEAM_RIGHT), +/* harmony export */ "Beam": () => (/* binding */ Beam) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +function calculateStemDirection(notes) { + let lineSum = 0; + notes.forEach((note) => { + if (note.keyProps) { + note.keyProps.forEach((keyProp) => { + lineSum += keyProp.line - 3; + }); + } + }); + if (lineSum >= 0) { + return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN; + } + return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; +} +function getStemSlope(firstNote, lastNote) { + const firstStemTipY = firstNote.getStemExtents().topY; + const firstStemX = firstNote.getStemX(); + const lastStemTipY = lastNote.getStemExtents().topY; + const lastStemX = lastNote.getStemX(); + return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX); +} +const BEAM_LEFT = 'L'; +const BEAM_RIGHT = 'R'; +const BEAM_BOTH = 'B'; +/** `Beams` span over a set of `StemmableNotes`. */ +class Beam extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Beam; + } + /** Get the direction of the beam */ + getStemDirection() { + return this.stem_direction; + } + /** + * Get the default beam groups for a provided time signature. + * Attempt to guess if the time signature is not found in table. + * Currently this is fairly naive. + */ + static getDefaultBeamGroups(time_sig) { + if (!time_sig || time_sig === 'c') { + time_sig = '4/4'; + } + const defaults = { + '1/2': ['1/2'], + '2/2': ['1/2'], + '3/2': ['1/2'], + '4/2': ['1/2'], + '1/4': ['1/4'], + '2/4': ['1/4'], + '3/4': ['1/4'], + '4/4': ['1/4'], + '1/8': ['1/8'], + '2/8': ['2/8'], + '3/8': ['3/8'], + '4/8': ['2/8'], + '1/16': ['1/16'], + '2/16': ['2/16'], + '3/16': ['3/16'], + '4/16': ['2/16'], + }; + const groups = defaults[time_sig]; + if (groups === undefined) { + // If no beam groups found, naively determine + // the beam groupings from the time signature + const beatTotal = parseInt(time_sig.split('/')[0], 10); + const beatValue = parseInt(time_sig.split('/')[1], 10); + const tripleMeter = beatTotal % 3 === 0; + if (tripleMeter) { + return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(3, beatValue)]; + } + else if (beatValue > 4) { + return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, beatValue)]; + } + else if (beatValue <= 4) { + return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, beatValue)]; + } + } + else { + return groups.map((group) => new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction().parse(group)); + } + return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 4)]; + } + /** + * A helper function to automatically build basic beams for a voice. For more + * complex auto-beaming use `Beam.generateBeams()`. + * @param voice the voice to generate the beams for + * @param stem_direction a stem direction to apply to the entire voice + * @param groups an array of `Fraction` representing beat groupings for the beam + */ + static applyAndGetBeams(voice, stem_direction, groups) { + return Beam.generateBeams(voice.getTickables(), { groups, stem_direction }); + } + /** + * A helper function to autimatically build beams for a voice with + * configuration options. + * + * Example configuration object: + * + * ``` + * config = { + * groups: [new Vex.Flow.Fraction(2, 8)], + * stem_direction: -1, + * beam_rests: true, + * beam_middle_only: true, + * show_stemlets: false + * }; + * ``` + * @param notes an array of notes to create the beams for + * @param config the configuration object + * @param config.stem_direction set to apply the same direction to all notes + * @param config.beam_rests set to `true` to include rests in the beams + * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat + * @param config.show_stemlets set to `true` to draw stemlets for rests + * @param config.maintain_stem_directions set to `true` to not apply new stem directions + * @param config.groups array of `Fractions` that represent the beat structure to beam the notes + * + */ + static generateBeams(notes, config = {}) { + if (!config.groups || !config.groups.length) { + config.groups = [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, 8)]; + } + // Convert beam groups to tick amounts + const tickGroups = config.groups.map((group) => { + if (!group.multiply) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions'); + } + return group.clone().multiply(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RESOLUTION, 1); + }); + const unprocessedNotes = notes; + let currentTickGroup = 0; + let noteGroups = []; + let currentGroup = []; + function getTotalTicks(vf_notes) { + return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1)); + } + function nextTickGroup() { + if (tickGroups.length - 1 > currentTickGroup) { + currentTickGroup += 1; + } + else { + currentTickGroup = 0; + } + } + function createGroups() { + let nextGroup = []; + // number of ticks in current group + let currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); + unprocessedNotes.forEach((unprocessedNote) => { + nextGroup = []; + if (unprocessedNote.shouldIgnoreTicks()) { + noteGroups.push(currentGroup); + currentGroup = nextGroup; + return; // Ignore untickables (like bar notes) + } + currentGroup.push(unprocessedNote); + const ticksPerGroup = tickGroups[currentTickGroup].clone(); + const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks); + // Double the amount of ticks in a group, if it's an unbeamable tuplet + const unbeamable = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(unprocessedNote.getDuration()) < 8; + if (unbeamable && unprocessedNote.getTuplet()) { + ticksPerGroup.numerator *= 2; + } + // If the note that was just added overflows the group tick total + if (totalTicks.greaterThan(ticksPerGroup)) { + // If the overflow note can be beamed, start the next group + // with it. Unbeamable notes leave the group overflowed. + if (!unbeamable) { + const note = currentGroup.pop(); + if (note) + nextGroup.push(note); + } + noteGroups.push(currentGroup); + // We have overflown, so we're going to next tick group. As we might have + // overflown by more than 1 group, we need to go forward as many times as + // needed, decreasing currentGroupTotalTicks by as many ticks as there are + // in current groups as we go forward. + do { + currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]); + nextTickGroup(); + } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup])); + currentGroup = nextGroup; + } + else if (totalTicks.equals(ticksPerGroup)) { + noteGroups.push(currentGroup); + currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); + currentGroup = nextGroup; + nextTickGroup(); + } + }); + // Adds any remainder notes beam + if (currentGroup.length > 0) { + noteGroups.push(currentGroup); + } + } + function getBeamGroups() { + return noteGroups.filter((group) => { + if (group.length > 1) { + let beamable = true; + group.forEach((note) => { + if (note.getIntrinsicTicks() >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) { + beamable = false; + } + }); + return beamable; + } + return false; + }); + } + // Splits up groups by Rest + function sanitizeGroups() { + const sanitizedGroups = []; + noteGroups.forEach((group) => { + let tempGroup = []; + group.forEach((note, index, group) => { + const isFirstOrLast = index === 0 || index === group.length - 1; + const prevNote = group[index - 1]; + const breaksOnEachRest = !config.beam_rests && note.isRest(); + const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast; + let breakOnStemChange = false; + if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) { + const prevDirection = prevNote.getStemDirection(); + const currentDirection = note.getStemDirection(); + breakOnStemChange = currentDirection !== prevDirection; + } + const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8; + // Determine if the group should be broken at this note + const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration; + if (shouldBreak) { + // Add current group + if (tempGroup.length > 0) { + sanitizedGroups.push(tempGroup); + } + // Start a new group. Include the current note if the group + // was broken up by stem direction, as that note needs to start + // the next group of notes + tempGroup = breakOnStemChange ? [note] : []; + } + else { + // Add note to group + tempGroup.push(note); + } + }); + // If there is a remaining group, add it as well + if (tempGroup.length > 0) { + sanitizedGroups.push(tempGroup); + } + }); + noteGroups = sanitizedGroups; + } + function formatStems() { + noteGroups.forEach((group) => { + let stemDirection; + if (config.maintain_stem_directions) { + const note = findFirstNote(group); + stemDirection = note ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + } + else { + if (config.stem_direction) { + stemDirection = config.stem_direction; + } + else { + stemDirection = calculateStemDirection(group); + } + } + applyStemDirection(group, stemDirection); + }); + } + function findFirstNote(group) { + for (let i = 0; i < group.length; i++) { + const note = group[i]; + if (!note.isRest()) { + return note; + } + } + return false; + } + function applyStemDirection(group, direction) { + group.forEach((note) => { + note.setStemDirection(direction); + }); + } + // Get all of the tuplets in all of the note groups + function getTuplets() { + const uniqueTuplets = []; + // Go through all of the note groups and inspect for tuplets + noteGroups.forEach((group) => { + let tuplet; + group.forEach((note) => { + const noteTuplet = note.getTuplet(); + if (noteTuplet && tuplet !== noteTuplet) { + tuplet = noteTuplet; + uniqueTuplets.push(tuplet); + } + }); + }); + return uniqueTuplets; + } + // Using closures to store the variables throughout the various functions + // IMO Keeps it this process lot cleaner - but not super consistent with + // the rest of the API's style - Silverwolf90 (Cyril) + createGroups(); + sanitizeGroups(); + formatStems(); + // Get the notes to be beamed + const beamedNoteGroups = getBeamGroups(); + // Get the tuplets in order to format them accurately + const allTuplets = getTuplets(); + // Create a Vex.Flow.Beam from each group of notes to be beamed + const beams = []; + beamedNoteGroups.forEach((group) => { + const beam = new Beam(group); + if (config.show_stemlets) { + beam.render_options.show_stemlets = true; + } + if (config.secondary_breaks) { + beam.render_options.secondary_break_ticks = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(config.secondary_breaks); + } + if (config.flat_beams === true) { + beam.render_options.flat_beams = true; + beam.render_options.flat_beam_offset = config.flat_beam_offset; + } + beams.push(beam); + }); + // Reformat tuplets + allTuplets.forEach((tuplet) => { + // Set the tuplet location based on the stem direction + const direction = tuplet.notes[0].stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.BOTTOM : _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.TOP; + tuplet.setTupletLocation(direction); + // If any of the notes in the tuplet are not beamed, draw a bracket. + let bracketed = false; + for (let i = 0; i < tuplet.notes.length; i++) { + const note = tuplet.notes[i]; + if (!note.hasBeam()) { + bracketed = true; + break; + } + } + tuplet.setBracketed(bracketed); + }); + return beams; + } + constructor(notes, auto_stem = false) { + super(); + this.slope = 0; + this.y_shift = 0; + /** + * Overrides to default beam directions for secondary-level beams that do not + * connect to any other note. See further explanation at + * `setPartialBeamSideAt` + */ + this.forcedPartialDirections = {}; + if (!notes || notes.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for beam.'); + } + if (notes.length === 1) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Too few notes for beam.'); + } + // Validate beam line, direction and ticks. + this.ticks = notes[0].getIntrinsicTicks(); + if (this.ticks >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.'); + } + let i; // shared iterator + let note; + this.stem_direction = notes[0].getStemDirection(); + let stem_direction = this.stem_direction; + // Figure out optimal stem direction based on given notes + if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(notes[0])) { + stem_direction = calculateStemDirection(notes); + } + else if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(notes[0])) { + // Auto Stem TabNotes + const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0); + stem_direction = stem_weight > -1 ? _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN; + } + // Apply stem directions and attach beam to notes + for (i = 0; i < notes.length; ++i) { + note = notes[i]; + if (auto_stem) { + note.setStemDirection(stem_direction); + this.stem_direction = stem_direction; + } + note.setBeam(this); + } + this.postFormatted = false; + this.notes = notes; + this.beam_count = this.getBeamCount(); + this.break_on_indices = []; + this.render_options = { + beam_width: 5, + max_slope: 0.25, + min_slope: -0.25, + slope_iterations: 20, + slope_cost: 100, + show_stemlets: false, + stemlet_extension: 7, + partial_beam_length: 10, + flat_beams: false, + min_flat_beam_offset: 15, + }; + } + /** Get the notes in this beam. */ + getNotes() { + return this.notes; + } + /** Get the max number of beams in the set of notes. */ + getBeamCount() { + const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count); + const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max)); + return maxBeamCount; + } + /** Set which note `indices` to break the secondary beam at. */ + breakSecondaryAt(indices) { + this.break_on_indices = indices; + return this; + } + /** + * Forces the direction of a partial beam (a secondary-level beam that exists + * on one note only of the beam group). This is useful in rhythms such as 6/8 + * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the + * first sixteenth note can help imply whether the rhythm is to be felt as + * three groups of eighth notes (typical) or as two groups of three-sixteenths + * (less common): + * ``` + * ┌───┬──┬──┐ ┌──┬──┬──┐ + * │ ├─ │ ─┤ vs │ ─┤ │ ─┤ + * │ │ │ │ │ │ │ │ + * ``` + */ + setPartialBeamSideAt(noteIndex, side) { + this.forcedPartialDirections[noteIndex] = side; + return this; + } + /** + * Restore the default direction of a partial beam (a secondary-level beam + * that does not connect to any other notes). + */ + unsetPartialBeamSideAt(noteIndex) { + delete this.forcedPartialDirections[noteIndex]; + return this; + } + /** Return the y coordinate for linear function. */ + getSlopeY(x, first_x_px, first_y_px, slope) { + return first_y_px + (x - first_x_px) * slope; + } + /** Calculate the best possible slope for the provided notes. */ + calculateSlope() { + const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this; + const firstNote = notes[0]; + const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]); + const increment = (max_slope - min_slope) / slope_iterations; + let minCost = Number.MAX_VALUE; + let bestSlope = 0; + let yShift = 0; + // iterate through slope values to find best weighted fit + for (let slope = min_slope; slope <= max_slope; slope += increment) { + let totalStemExtension = 0; + let yShiftTemp = 0; + // iterate through notes, calculating y shift and stem extension + for (let i = 1; i < notes.length; ++i) { + const note = notes[i]; + if (note.hasStem() || note.isRest()) { + const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp; + const stemTipY = note.getStemExtents().topY; + // beam needs to be shifted up to accommodate note + if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) { + const diff = Math.abs(stemTipY - adjustedStemTipY); + yShiftTemp += diff * -stemDirection; + totalStemExtension += diff * i; + } + else { + // beam overshoots note, account for the difference + totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection; + } + } + } + // most engraving books suggest aiming for a slope about half the angle of the + // difference between the first and last notes' stem length; + const idealSlope = initialSlope / 2; + const distanceFromIdeal = Math.abs(idealSlope - slope); + // This tries to align most beams to something closer to the idealSlope, but + // doesn't go crazy. To disable, set this.render_options.slope_cost = 0 + const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension); + // update state when a more ideal slope is found + if (cost < minCost) { + minCost = cost; + bestSlope = slope; + yShift = yShiftTemp; + } + } + this.slope = bestSlope; + this.y_shift = yShift; + } + /** Calculate a slope and y-shift for flat beams. */ + calculateFlatSlope() { + const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this; + // If a flat beam offset has not yet been supplied or calculated, + // generate one based on the notes in this particular note group + let total = 0; + let extremeY = 0; // Store the highest or lowest note here + let extremeBeamCount = 0; // The beam count of the extreme note + let currentExtreme = 0; + for (let i = 0; i < notes.length; i++) { + // Total up all of the offsets so we can average them out later + const note = notes[i]; + const stemTipY = note.getStemExtents().topY; + total += stemTipY; + // Store the highest (stems-up) or lowest (stems-down) note so the + // offset can be adjusted in case the average isn't enough + if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && currentExtreme < stemTipY) { + currentExtreme = stemTipY; + extremeY = Math.max(...note.getYs()); + extremeBeamCount = note.getBeamCount(); + } + else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) { + currentExtreme = stemTipY; + extremeY = Math.min(...note.getYs()); + extremeBeamCount = note.getBeamCount(); + } + } + // Average the offsets to try and come up with a reasonable one that + // works for all of the notes in the beam group. + let offset = total / notes.length; + // In case the average isn't long enough, add or subtract some more + // based on the highest or lowest note (again, based on the stem + // direction). This also takes into account the added height due to + // the width of the beams. + const beamWidth = beam_width * 1.5; + const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth; + const newOffset = extremeY + extremeTest * -stem_direction; + if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset < newOffset) { + offset = extremeY + extremeTest; + } + else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset > newOffset) { + offset = extremeY - extremeTest; + } + if (!flat_beam_offset) { + // Set the offset for the group based on the calculations above. + this.render_options.flat_beam_offset = offset; + } + else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset > flat_beam_offset) { + this.render_options.flat_beam_offset = offset; + } + else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset < flat_beam_offset) { + this.render_options.flat_beam_offset = offset; + } + // for flat beams, the slope and y_shift are simply 0 + this.slope = 0; + this.y_shift = 0; + } + /** Return the Beam y offset. */ + getBeamYToDraw() { + const firstNote = this.notes[0]; + const firstStemTipY = firstNote.getStemExtents().topY; + let beamY = firstStemTipY; + // For flat beams, set the first and last Y to the offset, rather than + // using the note's stem extents. + if (this.render_options.flat_beams && this.render_options.flat_beam_offset) { + beamY = this.render_options.flat_beam_offset; + } + return beamY; + } + /** + * Create new stems for the notes in the beam, so that each stem + * extends into the beams. + */ + applyStemExtensions() { + const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this; + const firstNote = notes[0]; + const firstStemTipY = this.getBeamYToDraw(); + const firstStemX = firstNote.getStemX(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + const stem = note.getStem(); + if (stem) { + const stemX = note.getStemX(); + const { topY: stemTipY } = note.getStemExtents(); + const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift; + const preBeamExtension = stem.getExtension(); + const beamExtension = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY; + // Determine necessary extension for cross-stave notes in the beam group + let crossStemExtension = 0; + if (note.getStemDirection() !== this.stem_direction) { + const beamCount = note.getGlyphProps().beam_count; + crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width; + /* This will be required if the partial beams are moved to the note side. + if (i > 0 && note.getGlyph().beam_count > 1) { + const prevBeamCount = this.notes[i - 1].getGlyph().beam_count; + const beamDiff = Math.abs(prevBeamCount - beamCount); + if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5); + } + */ + } + stem.setExtension(preBeamExtension + beamExtension + crossStemExtension); + stem.adjustHeightForBeam(); + if (note.isRest() && show_stemlets) { + const beamWidth = beam_width; + const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth; + stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension); + } + } + } + } + /** Return upper level beam direction. */ + lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) { + if (duration === '4') { + return BEAM_LEFT; + } + const forcedBeamDirection = this.forcedPartialDirections[noteIndex]; + if (forcedBeamDirection) + return forcedBeamDirection; + const lookup_duration = `${_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(duration) / 2}`; + const prev_note_gets_beam = prev_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration); + const next_note_gets_beam = next_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration); + const note_gets_beam = tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration); + if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) { + return BEAM_BOTH; + } + else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) { + return BEAM_LEFT; + } + else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) { + return BEAM_RIGHT; + } + return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex); + } + /** Get the x coordinates for the beam lines of specific `duration`. */ + getBeamLines(duration) { + const tick_of_duration = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(duration); + let beam_started = false; + const beam_lines = []; + let current_beam = undefined; + const partial_beam_length = this.render_options.partial_beam_length; + let previous_should_break = false; + let tick_tally = 0; + for (let i = 0; i < this.notes.length; ++i) { + const note = this.notes[i]; + // See if we need to break secondary beams on this note. + const ticks = note.getTicks().value(); + tick_tally += ticks; + let should_break = false; + // 8th note beams are always drawn. + if (parseInt(duration, 10) >= 8) { + // First, check to see if any indices were set up through breakSecondaryAt() + should_break = this.break_on_indices.indexOf(i) !== -1; + // If the secondary breaks were auto-configured in the render options, + // handle that as well. + if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) { + tick_tally = 0; + should_break = true; + } + } + const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration; + const stem_x = note.getStemX() - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.WIDTH / 2; + // Check to see if the next note in the group will get a beam at this + // level. This will help to inform the partial beam logic below. + const prev_note = this.notes[i - 1]; + const next_note = this.notes[i + 1]; + const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration; + const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration; + const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam; + // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam; + if (note_gets_beam) { + // This note gets a beam at the current level + if (beam_started) { + // We're currently in the middle of a beam. Just continue it on to + // the stem X of the current note. + current_beam = beam_lines[beam_lines.length - 1]; + current_beam.end = stem_x; + // If a secondary beam break is set up, end the beam right now. + if (should_break) { + beam_started = false; + if (next_note && !next_note_gets_beam && current_beam.end === undefined) { + // This note gets a beam,.but the next one does not. This means + // we need a partial pointing right. + current_beam.end = current_beam.start - partial_beam_length; + } + } + } + else { + // No beam started yet. Start a new one. + current_beam = { start: stem_x, end: undefined }; + beam_started = true; + if (beam_alone) { + // previous and next beam exists and does not get a beam but current gets it. + const prev_tick = prev_note.getIntrinsicTicks(); + const next_tick = next_note.getIntrinsicTicks(); + const tick = note.getIntrinsicTicks(); + const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i); + if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) { + current_beam.end = current_beam.start - partial_beam_length; + } + else { + current_beam.end = current_beam.start + partial_beam_length; + } + } + else if (!next_note_gets_beam) { + // The next note doesn't get a beam. Draw a partial. + if ((previous_should_break || i === 0) && next_note) { + // This is the first note (but not the last one), or it is + // following a secondary break. Draw a partial to the right. + current_beam.end = current_beam.start + partial_beam_length; + } + else { + // By default, draw a partial to the left. + current_beam.end = current_beam.start - partial_beam_length; + } + } + else if (should_break) { + // This note should have a secondary break after it. Even though + // we just started a beam, it needs to end immediately. + current_beam.end = current_beam.start - partial_beam_length; + beam_started = false; + } + beam_lines.push(current_beam); + } + } + else { + // The current note does not get a beam. + beam_started = false; + } + // Store the secondary break flag to inform the partial beam logic in + // the next iteration of the loop. + previous_should_break = should_break; + } + // Add a partial beam pointing left if this is the last note in the group + const last_beam = beam_lines[beam_lines.length - 1]; + if (last_beam && last_beam.end === undefined) { + last_beam.end = last_beam.start - partial_beam_length; + } + return beam_lines; + } + /** Render the stems for each note. */ + drawStems(ctx) { + this.notes.forEach((note) => { + const stem = note.getStem(); + if (stem) { + const stem_x = note.getStemX(); + stem.setNoteHeadXBounds(stem_x, stem_x); + stem.setContext(ctx).draw(); + } + }, this); + } + // Render the beam lines + drawBeamLines(ctx) { + const valid_beam_durations = ['4', '8', '16', '32', '64']; + const firstNote = this.notes[0]; + let beamY = this.getBeamYToDraw(); + const firstStemX = firstNote.getStemX(); + const beamThickness = this.render_options.beam_width * this.stem_direction; + // Draw the beams. + for (let i = 0; i < valid_beam_durations.length; ++i) { + const duration = valid_beam_durations[i]; + const beamLines = this.getBeamLines(duration); + for (let j = 0; j < beamLines.length; ++j) { + const beam_line = beamLines[j]; + const startBeamX = beam_line.start; + const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope); + const lastBeamX = beam_line.end; + if (lastBeamX) { + const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope); + ctx.beginPath(); + ctx.moveTo(startBeamX, startBeamY); + ctx.lineTo(startBeamX, startBeamY + beamThickness); + ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness); + ctx.lineTo(lastBeamX + 1, lastBeamY); + ctx.closePath(); + ctx.fill(); + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoLastBeamX', 'lastBeamX undefined.'); + } + } + beamY += beamThickness * 1.5; + } + } + /** Pre-format the beam. */ + preFormat() { + return this; + } + /** + * Post-format the beam. This can only be called after + * the notes in the beam have both `x` and `y` values. ie: they've + * been formatted and have staves. + */ + postFormat() { + if (this.postFormatted) + return; + // Calculate a smart slope if we're not forcing the beams to be flat. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(this.notes[0]) || this.render_options.flat_beams) { + this.calculateFlatSlope(); + } + else { + this.calculateSlope(); + } + this.applyStemExtensions(); + this.postFormatted = true; + } + /** Render the beam to the canvas context */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + if (this.unbeamable) + return; + if (!this.postFormatted) { + this.postFormat(); + } + this.drawStems(ctx); + this.applyStyle(); + ctx.openGroup('beam', this.getAttribute('id')); + this.drawBeamLines(ctx); + ctx.closeGroup(); + this.restoreStyle(); + } +} + + +/***/ }), + +/***/ "./src/bend.ts": +/*!*********************!*\ + !*** ./src/bend.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Bend": () => (/* binding */ Bend) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +/** Bend implements tablature bends. */ +class Bend extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Bend; + } + static get UP() { + return 0; + } + static get DOWN() { + return 1; + } + // Arrange bends in `ModifierContext` + static format(bends, state) { + if (!bends || bends.length === 0) + return false; + let last_width = 0; + // Format Bends + for (let i = 0; i < bends.length; ++i) { + const bend = bends[i]; + const note = bend.checkAttachedNote(); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isTabNote)(note)) { + const stringPos = note.leastString() - 1; + if (state.top_text_line < stringPos) { + state.top_text_line = stringPos; + } + } + bend.setXShift(last_width); + last_width = bend.getWidth(); + bend.setTextLine(state.top_text_line); + } + state.right_shift += last_width; + state.top_text_line += 1; + return true; + } + /** + * Example of a phrase: + * ``` + * [{ + * type: UP, + * text: "whole" + * width: 8; + * }, + * { + * type: DOWN, + * text: "whole" + * width: 8; + * }, + * { + * type: UP, + * text: "half" + * width: 8; + * }, + * { + * type: UP, + * text: "whole" + * width: 8; + * }, + * { + * type: DOWN, + * text: "1 1/2" + * width: 8; + * }] + * ``` + * @param text text for bend ("Full", "Half", etc.) (DEPRECATED) + * @param release if true, render a release. (DEPRECATED) + * @param phrase if set, ignore "text" and "release", and use the more sophisticated phrase specified + */ + constructor(text, release = false, phrase) { + super(); + this.text = text; + this.x_shift = 0; + this.release = release; + this.tap = ''; + this.resetFont(); + this.render_options = { + line_width: 1.5, + line_style: '#777777', + bend_width: 8, + release_width: 8, + }; + if (phrase) { + this.phrase = phrase; + } + else { + // Backward compatibility + this.phrase = [{ type: Bend.UP, text: this.text }]; + if (this.release) + this.phrase.push({ type: Bend.DOWN, text: '' }); + } + this.updateWidth(); + } + /** Set horizontal shift in pixels. */ + setXShift(value) { + this.x_shift = value; + this.updateWidth(); + return this; + } + setTap(value) { + this.tap = value; + return this; + } + /** Get text provided in the constructor. */ + getText() { + return this.text; + } + getTextHeight() { + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont); + return textFormatter.maxHeight; + } + /** Recalculate width. */ + updateWidth() { + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont); + const measureText = (text) => { + return textFormatter.getWidthForTextInPx(text); + }; + let totalWidth = 0; + for (let i = 0; i < this.phrase.length; ++i) { + const bend = this.phrase[i]; + if (bend.width !== undefined) { + totalWidth += bend.width; + } + else { + const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width; + bend.width = Math.max(additional_width, measureText(bend.text)) + 3; + bend.draw_width = bend.width / 2; + totalWidth += bend.width; + } + } + this.setWidth(totalWidth + this.x_shift); + return this; + } + /** Draw the bend on the rendering context. */ + draw() { + var _a; + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index); + start.x += 3; + start.y += 0.5; + const x_shift = this.x_shift; + const stave = note.checkStave(); + const spacing = stave.getSpacingBetweenLines(); + const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b)); + // this.text_line is relative to top string in the group. + const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3; + const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1; + const renderBend = (x, y, width, height) => { + const cp_x = x + width; + const cp_y = y; + ctx.save(); + ctx.beginPath(); + ctx.setLineWidth(this.render_options.line_width); + ctx.setStrokeStyle(this.render_options.line_style); + ctx.setFillStyle(this.render_options.line_style); + ctx.moveTo(x, y); + ctx.quadraticCurveTo(cp_x, cp_y, x + width, height); + ctx.stroke(); + ctx.restore(); + }; + const renderRelease = (x, y, width, height) => { + ctx.save(); + ctx.beginPath(); + ctx.setLineWidth(this.render_options.line_width); + ctx.setStrokeStyle(this.render_options.line_style); + ctx.setFillStyle(this.render_options.line_style); + ctx.moveTo(x, height); + ctx.quadraticCurveTo(x + width, height, x + width, y); + ctx.stroke(); + ctx.restore(); + }; + const renderArrowHead = (x, y, direction) => { + const width = 4; + const yBase = y + width * direction; + ctx.beginPath(); + ctx.moveTo(x, y); // tip of the arrow + ctx.lineTo(x - width, yBase); + ctx.lineTo(x + width, yBase); + ctx.closePath(); + ctx.fill(); + }; + const renderText = (x, text) => { + ctx.save(); + ctx.setFont(this.textFont); + const render_x = x - ctx.measureText(text).width / 2; + ctx.fillText(text, render_x, annotation_y); + ctx.restore(); + }; + let last_bend = undefined; + let last_bend_draw_width = 0; + let last_drawn_width = 0; + if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) { + const tapStart = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.CENTER, this.index); + renderText(tapStart.x, this.tap); + } + for (let i = 0; i < this.phrase.length; ++i) { + const bend = this.phrase[i]; + if (!bend.draw_width) + bend.draw_width = 0; + if (i === 0) + bend.draw_width += x_shift; + last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0); + if (bend.type === Bend.UP) { + if (last_bend && last_bend.type === Bend.UP) { + renderArrowHead(start.x, bend_height, +1); + } + renderBend(start.x, start.y, last_drawn_width, bend_height); + } + if (bend.type === Bend.DOWN) { + if (last_bend && last_bend.type === Bend.UP) { + renderRelease(start.x, start.y, last_drawn_width, bend_height); + } + if (last_bend && last_bend.type === Bend.DOWN) { + renderArrowHead(start.x, start.y, -1); + renderRelease(start.x, start.y, last_drawn_width, bend_height); + } + if (!last_bend) { + last_drawn_width = bend.draw_width; + renderRelease(start.x, start.y, last_drawn_width, bend_height); + } + } + renderText(start.x + last_drawn_width, bend.text); + last_bend = bend; + last_bend_draw_width = bend.draw_width; + last_bend.x = start.x; + start.x += last_drawn_width; + } + if (!last_bend || last_bend.x == undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoLastBendForBend', 'Internal error.'); + } + // Final arrowhead and text + if (last_bend.type === Bend.UP) { + renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1); + } + else if (last_bend.type === Bend.DOWN) { + renderArrowHead(last_bend.x + last_drawn_width, start.y, -1); + } + } +} +/** Default text font. */ +Bend.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); + + + +/***/ }), + +/***/ "./src/boundingbox.ts": +/*!****************************!*\ + !*** ./src/boundingbox.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BoundingBox": () => (/* binding */ BoundingBox) +/* harmony export */ }); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +class BoundingBox { + /** + * Create a new copy. + */ + static copy(that) { + return new BoundingBox(that.x, that.y, that.w, that.h); + } + constructor(x, y, w, h) { + this.x = x; + this.y = y; + this.w = w; + this.h = h; + } + /** Get x position. */ + getX() { + return this.x; + } + /** Get y position. */ + getY() { + return this.y; + } + /** Get width. */ + getW() { + return this.w; + } + /** Get height. */ + getH() { + return this.h; + } + /** Set x position. */ + setX(x) { + this.x = x; + return this; + } + /** Set y position. */ + setY(y) { + this.y = y; + return this; + } + /** Set width. */ + setW(w) { + this.w = w; + return this; + } + /** Set height. */ + setH(h) { + this.h = h; + return this; + } + /** Move to position. */ + move(x, y) { + this.x += x; + this.y += y; + return this; + } + /** Clone. */ + clone() { + return BoundingBox.copy(this); + } + /** + * Merge my box with given box. Creates a bigger bounding box unless + * the given box is contained in this one. + */ + mergeWith(boundingBox) { + const that = boundingBox; + const new_x = this.x < that.x ? this.x : that.x; + const new_y = this.y < that.y ? this.y : that.y; + const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x; + const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y; + this.x = new_x; + this.y = new_y; + this.w = new_w; + this.h = new_h; + return this; + } +} + + +/***/ }), + +/***/ "./src/boundingboxcomputation.ts": +/*!***************************************!*\ + !*** ./src/boundingboxcomputation.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BoundingBoxComputation": () => (/* binding */ BoundingBoxComputation) +/* harmony export */ }); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +/** + * BoundingBoxComputation computes metrics for a bounding box by continuously + * taking canvas path commands. + * + * Warning: This class is merely a crutch to get bounding box information without + * explicit metadata. This is likely to get deprecated following SMuFL support. + * + * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License) + */ +class BoundingBoxComputation { + constructor() { + this.x1 = Number.NaN; + this.y1 = Number.NaN; + this.x2 = Number.NaN; + this.y2 = Number.NaN; + } + /** Get calculated X1. */ + getX1() { + return this.x1; + } + /** Get calculated Y1. */ + getY1() { + return this.y1; + } + /** Get calculated width. */ + width() { + return this.x2 - this.x1; + } + /** Get calculated height. */ + height() { + return this.y2 - this.y1; + } + /** Add point to BoundingBox. */ + addPoint(x, y) { + if (isNaN(this.x1) || x < this.x1) + this.x1 = x; + if (isNaN(this.x2) || x > this.x2) + this.x2 = x; + if (isNaN(this.y1) || y < this.y1) + this.y1 = y; + if (isNaN(this.y2) || y > this.y2) + this.y2 = y; + } + /** Add X to BoundingBox. */ + addX(x) { + this.addPoint(x, this.y1); + } + /** Add Y to BoundingBox. */ + addY(y) { + this.addPoint(this.x1, y); + } + /** Add quadratic curve to BoundingBox. */ + addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) { + this.addPoint(p0x, p0y); + this.addPoint(p2x, p2y); + const p01x = p1x - p0x; + const p12x = p2x - p1x; + let denom = p01x - p12x; + if (denom != 0) { + const t = p01x / denom; + if (t > 0 && t < 1) { + const it = 1 - t; + this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x); + } + } + const p01y = p1y - p0y; + const p12y = p2y - p1y; + denom = p01y - p12y; + if (denom != 0) { + const t = p01y / denom; + if (t > 0 && t < 1) { + const it = 1 - t; + this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y); + } + } + } + /** Add bezier curve to BoundingBox. */ + addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) { + // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html + const p0 = [p0x, p0y]; + const p1 = [p1x, p1y]; + const p2 = [p2x, p2y]; + const p3 = [p3x, p3y]; + let i; + this.addPoint(p0[0], p0[1]); + this.addPoint(p3[0], p3[1]); + const f = (t, i) => Math.pow(1 - t, 3) * p0[i] + + 3 * Math.pow(1 - t, 2) * t * p1[i] + + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + + Math.pow(t, 3) * p3[i]; + for (i = 0; i <= 1; i++) { + const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; + const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; + const c = 3 * p1[i] - 3 * p0[i]; + if (a === 0) { + if (b === 0) + continue; + const t = -c / b; + if (0 < t && t < 1) { + if (i === 0) + this.addX(f(t, i)); + if (i === 1) + this.addY(f(t, i)); + } + continue; + } + const b2ac = Math.pow(b, 2) - 4 * c * a; + if (b2ac < 0) + continue; + const t1 = (-b + Math.sqrt(b2ac)) / (2 * a); + if (0 < t1 && t1 < 1) { + if (i === 0) + this.addX(f(t1, i)); + if (i === 1) + this.addY(f(t1, i)); + } + const t2 = (-b - Math.sqrt(b2ac)) / (2 * a); + if (0 < t2 && t2 < 1) { + if (i === 0) + this.addX(f(t2, i)); + if (i === 1) + this.addY(f(t2, i)); + } + } + } +} + + +/***/ }), + +/***/ "./src/canvascontext.ts": +/*!******************************!*\ + !*** ./src/canvascontext.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CanvasContext": () => (/* binding */ CanvasContext) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./web */ "./src/web.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + +/** + * A rendering context for the Canvas backend. This class serves as a proxy for the + * underlying CanvasRenderingContext2D object, part of the browser's API. + */ +class CanvasContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext { + static get WIDTH() { + return 600; + } + static get HEIGHT() { + return 400; + } + static get CANVAS_BROWSER_SIZE_LIMIT() { + return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size. + } + /** + * Ensure that width and height do not exceed the browser limit. + * @returns array of [width, height] clamped to the browser limit. + */ + static sanitizeCanvasDims(width, height) { + const limit = this.CANVAS_BROWSER_SIZE_LIMIT; + if (Math.max(width, height) > limit) { + (0,_util__WEBPACK_IMPORTED_MODULE_2__.warn)('Canvas dimensions exceed browser limit. Cropping to ' + limit); + if (width > limit) { + width = limit; + } + if (height > limit) { + height = limit; + } + } + return [width, height]; + } + constructor(context) { + super(); + /** Height of one line of text (in pixels). */ + this.textHeight = 0; + this.context2D = context; + if (!context.canvas) { + this.canvas = { + width: CanvasContext.WIDTH, + height: CanvasContext.HEIGHT, + }; + } + else { + this.canvas = context.canvas; + } + } + /** + * Set all pixels to transparent black rgba(0,0,0,0). + */ + clear() { + this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height); + } + // eslint-disable-next-line + openGroup(cls, id, attrs) { + // Containers not implemented. + } + closeGroup() { + // Containers not implemented. + } + // eslint-disable-next-line + add(child) { + // Containers not implemented. + } + setFillStyle(style) { + this.context2D.fillStyle = style; + return this; + } + /** CanvasContext ignores `setBackgroundFillStyle()`. */ + // eslint-disable-next-line + setBackgroundFillStyle(style) { + // DO NOTHING + return this; + } + setStrokeStyle(style) { + this.context2D.strokeStyle = style; + return this; + } + setShadowColor(color) { + this.context2D.shadowColor = color; + return this; + } + setShadowBlur(blur) { + // CanvasRenderingContext2D does not scale the shadow blur by the current + // transform, so we have to do it manually. We assume uniform scaling + // (though allow for rotation) because the blur can only be scaled + // uniformly anyway. + const t = this.context2D.getTransform(); + const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d); + this.context2D.shadowBlur = scale * blur; + return this; + } + setLineWidth(width) { + this.context2D.lineWidth = width; + return this; + } + setLineCap(capType) { + this.context2D.lineCap = capType; + return this; + } + setLineDash(dash) { + this.context2D.setLineDash(dash); + return this; + } + scale(x, y) { + this.context2D.scale(x, y); + return this; + } + resize(width, height, devicePixelRatio) { + var _a; + const canvas = this.context2D.canvas; + const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : (0,_util__WEBPACK_IMPORTED_MODULE_2__.globalObject)().devicePixelRatio) !== null && _a !== void 0 ? _a : 1; + // Scale the canvas size by the device pixel ratio clamping to the maximum supported size. + [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr); + // Divide back down by the pixel ratio and convert to integers. + width = (width / dpr) | 0; + height = (height / dpr) | 0; + canvas.width = width * dpr; + canvas.height = height * dpr; + // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas. + // Only HTMLCanvasElement has a style attribute. + if ((0,_web__WEBPACK_IMPORTED_MODULE_3__.isHTMLCanvas)(canvas)) { + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } + return this.scale(dpr, dpr); + } + rect(x, y, width, height) { + this.context2D.rect(x, y, width, height); + return this; + } + fillRect(x, y, width, height) { + this.context2D.fillRect(x, y, width, height); + return this; + } + /** + * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0). + */ + clearRect(x, y, width, height) { + this.context2D.clearRect(x, y, width, height); + return this; + } + beginPath() { + this.context2D.beginPath(); + return this; + } + moveTo(x, y) { + this.context2D.moveTo(x, y); + return this; + } + lineTo(x, y) { + this.context2D.lineTo(x, y); + return this; + } + bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) { + this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); + return this; + } + quadraticCurveTo(cpx, cpy, x, y) { + this.context2D.quadraticCurveTo(cpx, cpy, x, y); + return this; + } + arc(x, y, radius, startAngle, endAngle, counterclockwise) { + this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise); + return this; + } + fill() { + this.context2D.fill(); + return this; + } + stroke() { + this.context2D.stroke(); + return this; + } + closePath() { + this.context2D.closePath(); + return this; + } + measureText(text) { + const metrics = this.context2D.measureText(text); + let y = 0; + let height = 0; + if (metrics.fontBoundingBoxAscent) { + y = -metrics.fontBoundingBoxAscent; + height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent; + } + else { + y = -metrics.actualBoundingBoxAscent; + height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent; + } + // Return x, y, width & height in the same manner as svg getBBox + return { + x: 0, + y: y, + width: metrics.width, + height: height, + }; + } + fillText(text, x, y) { + this.context2D.fillText(text, x, y); + return this; + } + save() { + this.context2D.save(); + return this; + } + restore() { + this.context2D.restore(); + return this; + } + set fillStyle(style) { + this.context2D.fillStyle = style; + } + get fillStyle() { + return this.context2D.fillStyle; + } + set strokeStyle(style) { + this.context2D.strokeStyle = style; + } + get strokeStyle() { + return this.context2D.strokeStyle; + } + /** + * @param f is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). + * @param style is a string (e.g., 'italic', 'normal'). + */ + setFont(f, size, weight, style) { + const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style); + this.context2D.font = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo); + this.textHeight = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(fontInfo.size); + return this; + } + /** Return a string of the form `'italic bold 15pt Arial'` */ + getFont() { + return this.context2D.font; + } +} + + +/***/ }), + +/***/ "./src/chordsymbol.ts": +/*!****************************!*\ + !*** ./src/chordsymbol.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ChordSymbol": () => (/* binding */ ChordSymbol), +/* harmony export */ "ChordSymbolHorizontalJustify": () => (/* binding */ ChordSymbolHorizontalJustify), +/* harmony export */ "ChordSymbolVerticalJustify": () => (/* binding */ ChordSymbolVerticalJustify), +/* harmony export */ "SymbolModifiers": () => (/* binding */ SymbolModifiers), +/* harmony export */ "SymbolTypes": () => (/* binding */ SymbolTypes) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// Author: Aaron (@AaronDavidNewman) +// +// This implements chord symbols above/below a chord. +// Chord symbols are modifiers that can be attached to notes. +// They can contain multiple 'blocks' which represent text or +// glyphs with various positioning options. +// +// See `tests/chordsymbol_tests.ts` for usage examples. + + + + + + + +// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (ChordSymbol.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.ChordSymbol', args); +} +var ChordSymbolHorizontalJustify; +(function (ChordSymbolHorizontalJustify) { + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["LEFT"] = 1] = "LEFT"; + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["CENTER"] = 2] = "CENTER"; + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["RIGHT"] = 3] = "RIGHT"; + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; +})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {})); +var ChordSymbolVerticalJustify; +(function (ChordSymbolVerticalJustify) { + ChordSymbolVerticalJustify[ChordSymbolVerticalJustify["TOP"] = 1] = "TOP"; + ChordSymbolVerticalJustify[ChordSymbolVerticalJustify["BOTTOM"] = 2] = "BOTTOM"; +})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {})); +var SymbolTypes; +(function (SymbolTypes) { + SymbolTypes[SymbolTypes["GLYPH"] = 1] = "GLYPH"; + SymbolTypes[SymbolTypes["TEXT"] = 2] = "TEXT"; + SymbolTypes[SymbolTypes["LINE"] = 3] = "LINE"; +})(SymbolTypes || (SymbolTypes = {})); +var SymbolModifiers; +(function (SymbolModifiers) { + SymbolModifiers[SymbolModifiers["NONE"] = 1] = "NONE"; + SymbolModifiers[SymbolModifiers["SUBSCRIPT"] = 2] = "SUBSCRIPT"; + SymbolModifiers[SymbolModifiers["SUPERSCRIPT"] = 3] = "SUPERSCRIPT"; +})(SymbolModifiers || (SymbolModifiers = {})); +/** + * ChordSymbol is a modifier that creates a chord symbol above/below a chord. + * As a modifier, it is attached to an existing note. + */ +class ChordSymbol extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.ChordSymbol; + } + static get superSubRatio() { + return ChordSymbol.metrics.global.superSubRatio; + } + /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */ + static set NO_TEXT_FORMAT(val) { + ChordSymbol.noFormat = val; + } + static get NO_TEXT_FORMAT() { + return ChordSymbol.noFormat; + } + static getMetricForGlyph(glyphCode) { + if (ChordSymbol.metrics.glyphs[glyphCode]) { + return ChordSymbol.metrics.glyphs[glyphCode]; + } + return undefined; + } + static get engravingFontResolution() { + return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getResolution(); + } + static get spacingBetweenBlocks() { + return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution; + } + static getWidthForGlyph(glyph) { + const metric = ChordSymbol.getMetricForGlyph(glyph.code); + if (!metric) { + return 0.65; // probably should do something here. + } + return metric.advanceWidth / ChordSymbol.engravingFontResolution; + } + static getYShiftForGlyph(glyph) { + const metric = ChordSymbol.getMetricForGlyph(glyph.code); + if (!metric) { + return 0; + } + return metric.yOffset / ChordSymbol.engravingFontResolution; + } + static getXShiftForGlyph(glyph) { + const metric = ChordSymbol.getMetricForGlyph(glyph.code); + if (!metric) { + return 0; + } + return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution; + } + static get superscriptOffset() { + return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution; + } + static get subscriptOffset() { + return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution; + } + static get kerningOffset() { + return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution; + } + static get metrics() { + const chordSymbol = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().chordSymbol; + if (!chordSymbol) + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `chordSymbol missing`); + return chordSymbol; + } + static get lowerKerningText() { + // For example, see: `bravura_metrics.ts` + // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters. + // ['D', 'F', 'P', 'T', 'V', 'Y'] + return ChordSymbol.metrics.global.lowerKerningText; + } + static get upperKerningText() { + return ChordSymbol.metrics.global.upperKerningText; + } + static isSuperscript(block) { + return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT; + } + static isSubscript(block) { + return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT; + } + static get minPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + /** + * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks. + * Estimate how many lines above/below the staff we need. + */ + static format(symbols, state) { + var _a; + if (!symbols || symbols.length === 0) + return false; + let width = 0; + let nonSuperWidth = 0; + let leftWidth = 0; + let rightWidth = 0; + let maxLeftGlyphWidth = 0; + let maxRightGlyphWidth = 0; + for (const symbol of symbols) { + const fontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size); + const fontAdj = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(fontSize, 0.05); + const glyphAdj = fontAdj * 2; + const note = symbol.checkAttachedNote(); + let symbolWidth = 0; + let lineSpaces = 1; + let vAlign = false; + for (let j = 0; j < symbol.symbolBlocks.length; ++j) { + const block = symbol.symbolBlocks[j]; + const sup = ChordSymbol.isSuperscript(block); + const sub = ChordSymbol.isSubscript(block); + const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1; + const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale; + // If there are super/subscripts, they extend beyond the line so + // assume they take up 2 lines + if (sup || sub) { + lineSpaces = 2; + } + // If there is a symbol-specific offset, add it but consider font + // size since font and glyphs will be interspersed. + const fontSize = symbol.textFormatter.fontSizeInPixels; + const superSubFontSize = fontSize * superSubScale; + if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) { + block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize; + block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize; + block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize; + block.glyph.scale = block.glyph.scale * adj; + } + else if (block.symbolType === SymbolTypes.TEXT) { + block.width = block.width * superSubFontSize; + block.yShift += symbol.getYOffsetForText(block.text) * adj; + } + if (block.symbolType === SymbolTypes.GLYPH && + block.glyph !== undefined && + block.glyph.code === ChordSymbol.glyphs.over.code) { + lineSpaces = 2; + } + block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale; + // If a subscript immediately follows a superscript block, try to + // overlay them. + if (sup && j > 0) { + const prev = symbol.symbolBlocks[j - 1]; + if (!ChordSymbol.isSuperscript(prev)) { + nonSuperWidth = width; + } + } + if (sub && nonSuperWidth > 0) { + vAlign = true; + // slide the symbol over so it lines up with superscript + block.xShift = block.xShift + (nonSuperWidth - width); + width = nonSuperWidth; + nonSuperWidth = 0; + // If we have vertically lined up, turn kerning off. + symbol.setEnableKerning(false); + } + if (!sup && !sub) { + nonSuperWidth = 0; + } + block.vAlign = vAlign; + width += block.width; + symbolWidth = width; + } + // make kerning adjustments after computing super/subscripts + symbol.updateKerningAdjustments(); + symbol.updateOverBarAdjustments(); + if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) { + symbol.setTextLine(state.top_text_line); + state.top_text_line += lineSpaces; + } + else { + symbol.setTextLine(state.text_line + 1); + state.text_line += lineSpaces + 1; + } + if (symbol.getReportWidth() && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) { + const glyphWidth = note.getGlyphProps().getWidth(); + if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) { + maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth); + leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding; + } + else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) { + maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth); + rightWidth = Math.max(rightWidth, symbolWidth); + } + else { + leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding; + rightWidth = Math.max(rightWidth, symbolWidth / 2); + maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth); + maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth); + } + } + width = 0; // reset symbol width + } + const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0)); + const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0)); + state.left_shift += leftOverlap; + state.right_shift += rightOverlap; + return true; + } + constructor() { + super(); + this.symbolBlocks = []; + this.horizontal = ChordSymbolHorizontalJustify.LEFT; + this.vertical = ChordSymbolVerticalJustify.TOP; + this.useKerning = true; + this.reportWidth = true; + this.resetFont(); + } + /** + * Default text font. + * Choose a font family that works well with the current music engraving font. + * @override `Element.TEXT_FONT`. + */ + static get TEXT_FONT() { + let family = 'Roboto Slab, Times, serif'; + if (_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getName() === 'Petaluma') { + // Fixes Issue #1180 + family = 'PetalumaScript, Arial, sans-serif'; + } + return { + family, + size: 12, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, + }; + } + /** + * The offset is specified in `em`. Scale this value by the font size in pixels. + */ + get superscriptOffset() { + return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels; + } + get subscriptOffset() { + return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels; + } + setReportWidth(value) { + this.reportWidth = value; + return this; + } + getReportWidth() { + return this.reportWidth; + } + updateOverBarAdjustments() { + const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash'); + if (barIndex < 0) { + return; + } + const bar = this.symbolBlocks[barIndex]; + const xoff = bar.width / 4; + const yoff = 0.25 * this.textFormatter.fontSizeInPixels; + let symIndex = 0; + for (symIndex === 0; symIndex < barIndex; ++symIndex) { + const symbol = this.symbolBlocks[symIndex]; + symbol.xShift = symbol.xShift + xoff; + symbol.yShift = symbol.yShift - yoff; + } + for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) { + const symbol = this.symbolBlocks[symIndex]; + symbol.xShift = symbol.xShift - xoff; + symbol.yShift = symbol.yShift + yoff; + } + } + updateKerningAdjustments() { + let accum = 0; + for (let j = 0; j < this.symbolBlocks.length; ++j) { + const symbol = this.symbolBlocks[j]; + accum += this.getKerningAdjustment(j); + symbol.xShift += accum; + } + } + /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */ + getKerningAdjustment(j) { + if (!this.useKerning) { + return 0; + } + const currSymbol = this.symbolBlocks[j]; + const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined; + let adjustment = 0; + // Move things into the '/' over bar + if (currSymbol.symbolType === SymbolTypes.GLYPH && + currSymbol.glyph !== undefined && + currSymbol.glyph.code === ChordSymbol.glyphs.over.code) { + adjustment += currSymbol.glyph.metrics.x_shift; + } + if (prevSymbol !== undefined && + prevSymbol.symbolType === SymbolTypes.GLYPH && + prevSymbol.glyph !== undefined && + prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) { + adjustment += prevSymbol.glyph.metrics.x_shift; + } + // For superscripts that follow a letter without much top part, move it to the left slightly + let preKernUpper = false; + let preKernLower = false; + if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) { + preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]); + preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]); + } + const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels; + // TODO: adjust kern for font size. + // Where should this constant live? + if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) { + adjustment += kerningOffsetPixels; + } + if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) { + if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') { + adjustment += kerningOffsetPixels / 2; + } + if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) { + adjustment += kerningOffsetPixels / 2; + } + } + return adjustment; + } + /** + * ChordSymbol allows multiple blocks so we can mix glyphs and font text. + * Each block can have its own vertical orientation. + */ + // eslint-disable-next-line + getSymbolBlock(params = {}) { + var _a, _b, _c; + const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT; + const symbolBlock = { + text: (_b = params.text) !== null && _b !== void 0 ? _b : '', + symbolType, + symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE, + xShift: 0, + yShift: 0, + vAlign: false, + width: 0, + }; + // Note: symbol widths are resolution and font-independent. + // We convert to pixel values when we know what the font is. + if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') { + const glyphArgs = ChordSymbol.glyphs[params.glyph]; + const glyphPoints = 20; + symbolBlock.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' }); + } + else if (symbolType === SymbolTypes.TEXT) { + symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text); + } + else if (symbolType === SymbolTypes.LINE) { + symbolBlock.width = params.width; + } + return symbolBlock; + } + /** Add a symbol to this chord, could be text, glyph or line. */ + // eslint-disable-next-line + addSymbolBlock(parameters) { + this.symbolBlocks.push(this.getSymbolBlock(parameters)); + return this; + } + // ### Convenience functions for creating different types of chord symbol parts. + /** Add a text block. */ + // eslint-disable-next-line + addText(text, parameters = {}) { + const symbolType = SymbolTypes.TEXT; + return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType })); + } + /** Add a text block with superscript modifier. */ + addTextSuperscript(text) { + const symbolType = SymbolTypes.TEXT; + const symbolModifier = SymbolModifiers.SUPERSCRIPT; + return this.addSymbolBlock({ text, symbolType, symbolModifier }); + } + /** Add a text block with subscript modifier. */ + addTextSubscript(text) { + const symbolType = SymbolTypes.TEXT; + const symbolModifier = SymbolModifiers.SUBSCRIPT; + return this.addSymbolBlock({ text, symbolType, symbolModifier }); + } + /** Add a glyph block with superscript modifier. */ + addGlyphSuperscript(glyph) { + const symbolType = SymbolTypes.GLYPH; + const symbolModifier = SymbolModifiers.SUPERSCRIPT; + return this.addSymbolBlock({ glyph, symbolType, symbolModifier }); + } + /** Add a glyph block. */ + // eslint-disable-next-line + addGlyph(glyph, params = {}) { + const symbolType = SymbolTypes.GLYPH; + return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType })); + } + /** + * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font. + * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else. + */ + // eslint-disable-next-line + addGlyphOrText(text, params = {}) { + let str = ''; + for (let i = 0; i < text.length; ++i) { + const char = text[i]; + if (ChordSymbol.glyphs[char]) { + if (str.length > 0) { + this.addText(str, params); + str = ''; + } + this.addGlyph(char, params); + } + else { + // Collect consecutive characters with no glyphs. + str += char; + } + } + if (str.length > 0) { + this.addText(str, params); + } + return this; + } + /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */ + // eslint-disable-next-line + addLine(width, params = {}) { + const symbolType = SymbolTypes.LINE; + return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width })); + } + /** + * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`). + * + * @param f is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). + * @param style is a string (e.g., 'italic', 'normal'). + * + * @override See: Element. + */ + setFont(f, size, weight, style) { + super.setFont(f, size, weight, style); + this.textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont); + return this; + } + setEnableKerning(val) { + this.useKerning = val; + return this; + } + /** Set vertical position of text (above or below stave). */ + setVertical(vj) { + this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj; + return this; + } + getVertical() { + return this.vertical; + } + /** Set horizontal justification. */ + setHorizontal(hj) { + this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj; + return this; + } + getHorizontal() { + return this.horizontal; + } + getWidth() { + let width = 0; + this.symbolBlocks.forEach((symbol) => { + width += symbol.vAlign ? 0 : symbol.width; + }); + return width; + } + getYOffsetForText(text) { + var _a; + let acc = 0; + let i = 0; + for (i = 0; i < text.length; ++i) { + const metrics = this.textFormatter.getGlyphMetrics(text[i]); + if (metrics) { + const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0; + acc = yMax < acc ? yMax : acc; + } + } + const resolution = this.textFormatter.getResolution(); + return i > 0 ? -1 * (acc / resolution) : 0; + } + /** Render text and glyphs above/below the note. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + // We're changing context parameters. Save current state. + ctx.save(); + this.applyStyle(); + ctx.openGroup('chordsymbol', this.getAttribute('id')); + const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE, this.index); + ctx.setFont(this.textFont); + let y; + // The position of the text varies based on whether or not the note + // has a stem. + const hasStem = note.hasStem(); + const stave = note.checkStave(); + if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) { + // HACK: We need to compensate for the text's height since its origin is bottom-right. + y = stave.getYForBottomText(this.text_line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK); + if (hasStem) { + const stem_ext = note.checkStem().getExtents(); + const spacing = stave.getSpacingBetweenLines(); + const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY; + y = Math.max(y, stem_base + spacing * (this.text_line + 2)); + } + } + else { + // (this.vertical === VerticalJustify.TOP) + const topY = Math.min(...note.getYs()); + y = Math.min(stave.getYForTopText(this.text_line), topY - 10); + if (hasStem) { + const stem_ext = note.checkStem().getExtents(); + const spacing = stave.getSpacingBetweenLines(); + y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line); + } + } + let x = start.x; + if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) { + x = start.x; + } + else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) { + x = start.x + this.getWidth(); + } + else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) { + x = start.x - this.getWidth() / 2; + } + else { + // HorizontalJustify.CENTER_STEM + x = note.getStemX() - this.getWidth() / 2; + } + L('Rendering ChordSymbol: ', this.textFormatter, x, y); + this.symbolBlocks.forEach((symbol) => { + const isSuper = ChordSymbol.isSuperscript(symbol); + const isSub = ChordSymbol.isSubscript(symbol); + let curY = y; + L('shift was ', symbol.xShift, symbol.yShift); + L('curY pre sub ', curY); + if (isSuper) { + curY += this.superscriptOffset; + } + if (isSub) { + curY += this.subscriptOffset; + } + L('curY sup/sub ', curY); + if (symbol.symbolType === SymbolTypes.TEXT) { + if (isSuper || isSub) { + ctx.save(); + if (this.textFont) { + const { family, size, weight, style } = this.textFont; + const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, ChordSymbol.superSubRatio); + ctx.setFont(family, smallerFontSize, weight, style); + } + } + // TODO??? + // We estimate the text width, fill it in with the empirical value so the formatting is even. + // const textDim = ctx.measureText(symbol.text); + // symbol.width = textDim.width; + L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift); + ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift); + if (isSuper || isSub) { + ctx.restore(); + } + } + else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) { + curY += symbol.yShift; + L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY); + symbol.glyph.render(ctx, x + symbol.xShift, curY); + } + else if (symbol.symbolType === SymbolTypes.LINE) { + L('Rendering Line : ', symbol.width, x, curY); + ctx.beginPath(); + ctx.setLineWidth(1); // ? + ctx.moveTo(x, y); + ctx.lineTo(x + symbol.width, curY); + ctx.stroke(); + } + x += symbol.width; + if (symbol.vAlign) { + x += symbol.xShift; + } + }); + ctx.closeGroup(); + this.restoreStyle(); + ctx.restore(); + } +} +ChordSymbol.DEBUG = false; +// Chord symbols can be positioned and justified relative to the note. +ChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify; +ChordSymbol.HorizontalJustifyString = { + left: ChordSymbolHorizontalJustify.LEFT, + right: ChordSymbolHorizontalJustify.RIGHT, + center: ChordSymbolHorizontalJustify.CENTER, + centerStem: ChordSymbolHorizontalJustify.CENTER_STEM, +}; +ChordSymbol.VerticalJustify = ChordSymbolVerticalJustify; +ChordSymbol.VerticalJustifyString = { + top: ChordSymbolVerticalJustify.TOP, + above: ChordSymbolVerticalJustify.TOP, + below: ChordSymbolVerticalJustify.BOTTOM, + bottom: ChordSymbolVerticalJustify.BOTTOM, +}; +// Glyph data +ChordSymbol.glyphs = { + diminished: { + code: 'csymDiminished', + }, + dim: { + code: 'csymDiminished', + }, + halfDiminished: { + code: 'csymHalfDiminished', + }, + '+': { + code: 'csymAugmented', + }, + augmented: { + code: 'csymAugmented', + }, + majorSeventh: { + code: 'csymMajorSeventh', + }, + minor: { + code: 'csymMinor', + }, + '-': { + code: 'csymMinor', + }, + '(': { + code: 'csymParensLeftTall', + }, + leftParen: { + code: 'csymParensLeftTall', + }, + ')': { + code: 'csymParensRightTall', + }, + rightParen: { + code: 'csymParensRightTall', + }, + leftBracket: { + code: 'csymBracketLeftTall', + }, + rightBracket: { + code: 'csymBracketRightTall', + }, + leftParenTall: { + code: 'csymParensLeftVeryTall', + }, + rightParenTall: { + code: 'csymParensRightVeryTall', + }, + '/': { + code: 'csymDiagonalArrangementSlash', + }, + over: { + code: 'csymDiagonalArrangementSlash', + }, + '#': { + code: 'accidentalSharp', + }, + b: { + code: 'accidentalFlat', + }, +}; +ChordSymbol.symbolTypes = SymbolTypes; +ChordSymbol.symbolModifiers = SymbolModifiers; +/** Currently unused. */ +ChordSymbol.noFormat = false; + + + +/***/ }), + +/***/ "./src/clef.ts": +/*!*********************!*\ + !*** ./src/clef.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Clef": () => (/* binding */ Clef) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013. +// Co-author: Benjamin W. Bohl +// MIT License + + + + + +// eslint-disable-next-line +function L(...args) { + if (Clef.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_4__.log)('Vex.Flow.Clef', args); +} +/** + * Clef implements various types of clefs that can be rendered on a stave. + * + * See `tests/clef_tests.ts` for usage examples. + */ +class Clef extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Clef; + } + /** + * Every clef name is associated with a glyph code from the font file + * and a default stave line number. + */ + static get types() { + return { + treble: { + code: 'gClef', + line: 3, + }, + bass: { + code: 'fClef', + line: 1, + }, + alto: { + code: 'cClef', + line: 2, + }, + tenor: { + code: 'cClef', + line: 1, + }, + percussion: { + code: 'unpitchedPercussionClef1', + line: 2, + }, + soprano: { + code: 'cClef', + line: 4, + }, + 'mezzo-soprano': { + code: 'cClef', + line: 3, + }, + 'baritone-c': { + code: 'cClef', + line: 0, + }, + 'baritone-f': { + code: 'fClef', + line: 2, + }, + subbass: { + code: 'fClef', + line: 0, + }, + french: { + code: 'gClef', + line: 4, + }, + tab: { + code: '6stringTabClef', + line: 2.5, + }, + }; + } + static get annotationSmufl() { + return { + '8va': 'timeSig8', + '8vb': 'timeSig8', + }; + } + /** Create a new clef. */ + constructor(type, size, annotation) { + super(); + /** + * The attribute `clef` must be a key from + * `Clef.types` + */ + this.clef = Clef.types['treble']; + this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN); + this.setType(type, size, annotation); + this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`)); + L('Creating clef:', type); + } + /** Set clef type, size and annotation. */ + setType(type, size, annotation) { + this.type = type; + this.clef = Clef.types[type]; + if (size === undefined) { + this.size = 'default'; + } + else { + this.size = size; + } + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont(); + // If an annotation, such as 8va, is specified, add it to the Clef object. + if (annotation !== undefined) { + const code = Clef.annotationSmufl[annotation]; + const point = (Clef.getPoint(this.size) / 5) * 3; + const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`); + const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`); + this.annotation = { code, point, line, x_shift }; + this.attachment = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.annotation.code, this.annotation.point); + this.attachment.metrics.x_max = 0; + this.attachment.setXShift(this.annotation.x_shift); + } + else { + this.annotation = undefined; + } + return this; + } + /** Get clef width. */ + getWidth() { + if (this.type === 'tab') { + (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'ClefError', "Can't get width without stave."); + } + return this.width; + } + /** Get point for clefs. */ + static getPoint(size) { + // for sizes other than 'default', clef is 2/3 of the default value + return size == 'default' ? _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE : (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE / 3) * 2; + } + /** Set associated stave. */ + setStave(stave) { + this.stave = stave; + return this; + } + /** Render clef. */ + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('clef', this.getAttribute('id')); + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, { + category: `clef_${this.size}`, + }); + if (this.annotation !== undefined && this.attachment !== undefined) { + this.placeGlyphOnLine(this.attachment, stave, this.annotation.line); + this.attachment.setStave(stave); + this.attachment.setContext(ctx); + this.attachment.renderToStave(this.x); + } + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} +/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */ +Clef.DEBUG = false; + + + +/***/ }), + +/***/ "./src/clefnote.ts": +/*!*************************!*\ + !*** ./src/clefnote.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ClefNote": () => (/* binding */ ClefNote) +/* harmony export */ }); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Taehoon Moon 2014 +// MIT License + + + + +/** ClefNote implements clef annotations in measures. */ +class ClefNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.ClefNote; + } + constructor(type, size, annotation) { + super({ duration: 'b' }); + this.type = type; + const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation); + this.clef = clef.clef; + this.annotation = clef.annotation; + this.size = size === undefined ? 'default' : size; + this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), `clefNote_${this.size}`)); + // Note properties + this.ignore_ticks = true; + } + /** Set clef type, size and annotation. */ + setType(type, size, annotation) { + this.type = type; + this.size = size; + const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation); + this.clef = clef.clef; + this.annotation = clef.annotation; + this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), `clefNote_${this.size}`)); + return this; + } + /** Get associated clef. */ + getClef() { + return this.clef; + } + preFormat() { + this.preFormatted = true; + return this; + } + /** Render clef note. */ + draw() { + const stave = this.checkStave(); + const ctx = this.checkContext(); + this.setRendered(); + const abs_x = this.getAbsoluteX(); + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), this.clef.code, { + category: `clefNote_${this.size}`, + }); + // If the Vex.Flow.Clef has an annotation, such as 8va, draw it. + if (this.annotation !== undefined) { + const attachment = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.annotation.code, this.annotation.point); + attachment.setContext(ctx); + attachment.setStave(stave); + attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs()); + attachment.setXShift(this.annotation.x_shift); + attachment.renderToStave(abs_x); + } + } +} + + +/***/ }), + +/***/ "./src/crescendo.ts": +/*!**************************!*\ + !*** ./src/crescendo.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Crescendo": () => (/* binding */ Crescendo) +/* harmony export */ }); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// This file implements the `Crescendo` object which draws crescendos and +// decrescendo dynamics markings. A `Crescendo` is initialized with a +// duration and formatted as part of a `Voice` like any other `Note` +// type in VexFlow. This object would most likely be formatted in a Voice +// with `TextNotes` - which are used to represent other dynamics markings. + + + + +// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (Crescendo.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Crescendo', args); +} +// Private helper to draw the hairpin +function renderHairpin(ctx, params) { + const begin_x = params.begin_x; + const end_x = params.end_x; + const y = params.y; + const half_height = params.height / 2; + ctx.beginPath(); + if (params.reverse) { + ctx.moveTo(begin_x, y - half_height); + ctx.lineTo(end_x, y); + ctx.lineTo(begin_x, y + half_height); + } + else { + ctx.moveTo(end_x, y - half_height); + ctx.lineTo(begin_x, y); + ctx.lineTo(end_x, y + half_height); + } + ctx.stroke(); + ctx.closePath(); +} +class Crescendo extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { + /** Crescendo category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Crescendo; + } + // Initialize the crescendo's properties + constructor(noteStruct) { + super(noteStruct); + this.options = { + // Extensions to the length of the crescendo on either side + extend_left: 0, + extend_right: 0, + // Vertical shift + y_shift: 0, + }; + // Whether the object is a decrescendo + this.decrescendo = false; + // The staff line to be placed on + this.line = noteStruct.line || 0; + // The height at the open end of the cresc/decresc + this.height = 15; + } + // Set the line to center the element on + setLine(line) { + this.line = line; + return this; + } + // Set the full height at the open end + setHeight(height) { + this.height = height; + return this; + } + // Set whether the sign should be a descresendo by passing a bool + // to `decresc` + setDecrescendo(decresc) { + this.decrescendo = decresc; + return this; + } + // Preformat the note + preFormat() { + this.preFormatted = true; + return this; + } + // Render the Crescendo object onto the canvas + draw() { + const ctx = this.checkContext(); + const stave = this.checkStave(); + this.setRendered(); + const tick_context = this.getTickContext(); + const next_context = _tickcontext__WEBPACK_IMPORTED_MODULE_1__.TickContext.getNextContext(tick_context); + const begin_x = this.getAbsoluteX(); + const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth(); + const y = stave.getYForLine(this.line + -3) + 1; + L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x); + renderHairpin(ctx, { + begin_x: begin_x - this.options.extend_left, + end_x: end_x + this.options.extend_right, + y: y + this.options.y_shift, + height: this.height, + reverse: this.decrescendo, + }); + } +} +Crescendo.DEBUG = false; + + + +/***/ }), + +/***/ "./src/curve.ts": +/*!**********************!*\ + !*** ./src/curve.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Curve": () => (/* binding */ Curve), +/* harmony export */ "CurvePosition": () => (/* binding */ CurvePosition) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// VexFlow - Music Engraving for HTML5 +// Copyright Mohit Muthanna 2010 +// +// This class implements curves (for slurs) + + + +var CurvePosition; +(function (CurvePosition) { + CurvePosition[CurvePosition["NEAR_HEAD"] = 1] = "NEAR_HEAD"; + CurvePosition[CurvePosition["NEAR_TOP"] = 2] = "NEAR_TOP"; +})(CurvePosition || (CurvePosition = {})); +class Curve extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Curve; + } + static get Position() { + return CurvePosition; + } + static get PositionString() { + return { + nearHead: CurvePosition.NEAR_HEAD, + nearTop: CurvePosition.NEAR_TOP, + }; + } + // from: Start note + // to: End note + // options: + // cps: List of control points + // x_shift: pixels to shift + // y_shift: pixels to shift + constructor(from, to, options) { + super(); + this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [ + { x: 0, y: 10 }, + { x: 0, y: 10 }, + ] }, options); + this.from = from; + this.to = to; + } + setNotes(from, to) { + if (!from && !to) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.'); + } + this.from = from; + this.to = to; + return this; + } + /** + * @return {boolean} Returns true if this is a partial bar. + */ + isPartial() { + return !this.from || !this.to; + } + renderCurve(params) { + const ctx = this.checkContext(); + const x_shift = this.render_options.x_shift; + const y_shift = this.render_options.y_shift * params.direction; + const first_x = params.first_x + x_shift; + const first_y = params.first_y + y_shift; + const last_x = params.last_x - x_shift; + const last_y = params.last_y + y_shift; + const thickness = this.render_options.thickness; + const cps = this.render_options.cps; + const { x: cp0x, y: cp0y } = cps[0]; + const { x: cp1x, y: cp1y } = cps[1]; + const cp_spacing = (last_x - first_x) / (cps.length + 2); + ctx.beginPath(); + ctx.moveTo(first_x, first_y); + ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y); + ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y); + ctx.stroke(); + ctx.closePath(); + ctx.fill(); + } + draw() { + this.checkContext(); + this.setRendered(); + const first_note = this.from; + const last_note = this.to; + let first_x; + let last_x; + let first_y; + let last_y; + let stem_direction = 0; + let metric = 'baseY'; + let end_metric = 'baseY'; + function getPosition(position) { + return typeof position === 'string' ? Curve.PositionString[position] : position; + } + const position = getPosition(this.render_options.position); + const position_end = getPosition(this.render_options.position_end); + if (position === CurvePosition.NEAR_TOP) { + metric = 'topY'; + end_metric = 'topY'; + } + if (position_end === CurvePosition.NEAR_HEAD) { + end_metric = 'baseY'; + } + else if (position_end === CurvePosition.NEAR_TOP) { + end_metric = 'topY'; + } + if (first_note) { + first_x = first_note.getTieRightX(); + stem_direction = first_note.getStemDirection(); + first_y = first_note.getStemExtents()[metric]; + } + else { + const stave = last_note.checkStave(); + first_x = stave.getTieStartX(); + first_y = last_note.getStemExtents()[metric]; + } + if (last_note) { + last_x = last_note.getTieLeftX(); + stem_direction = last_note.getStemDirection(); + last_y = last_note.getStemExtents()[end_metric]; + } + else { + const stave = first_note.checkStave(); + last_x = stave.getTieEndX(); + last_y = first_note.getStemExtents()[end_metric]; + } + this.renderCurve({ + first_x, + last_x, + first_y, + last_y, + direction: stem_direction * (this.render_options.invert === true ? -1 : 1), + }); + return true; + } +} + + +/***/ }), + +/***/ "./src/dot.ts": +/*!********************!*\ + !*** ./src/dot.ts ***! + \********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Dot": () => (/* binding */ Dot) +/* harmony export */ }); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// VexFlow - Music Engraving for HTML5 +// Copyright Mohit Muthanna 2010 +// +// This class implements dot modifiers for notes. + + + +class Dot extends _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Dot; + } + /** Returns the dots associated to a Note. */ + static getDots(note) { + return note.getModifiersByType(Dot.CATEGORY); + } + /** Add a dot on the specified keys to the notes. */ + static buildAndAttach(notes, options) { + for (const note of notes) { + if (options === null || options === void 0 ? void 0 : options.all) { + for (let i = 0; i < note.keys.length; i++) { + const dot = new Dot(); + dot.setDotShiftY(note.glyphProps.dot_shiftY); + note.addModifier(dot, i); + } + } + else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) { + const dot = new Dot(); + dot.setDotShiftY(note.glyphProps.dot_shiftY); + note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index); + } + else { + const dot = new Dot(); + dot.setDotShiftY(note.glyphProps.dot_shiftY); + note.addModifier(dot, 0); + } + } + } + // Arrange dots inside a ModifierContext. + static format(dots, state) { + const right_shift = state.right_shift; + const dot_spacing = 1; + if (!dots || dots.length === 0) + return false; + const dot_list = []; + const max_shift_map = {}; + for (let i = 0; i < dots.length; ++i) { + const dot = dots[i]; + const note = dot.getNote(); + let props; + let shift; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isStaveNote)(note)) { + const index = dot.checkIndex(); + props = note.getKeyProps()[index]; + // consider right displaced head with no previous modifier + shift = note.getFirstDotPx(); + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) { + props = { line: 0.5 }; // Shim key props for dot placement + shift = right_shift; + } + else { + // note object is not StaveNote or TabNote. + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('Internal', 'Unexpected instance.'); + } + const note_id = note.getAttribute('id'); + dot_list.push({ line: props.line, note, note_id, dot }); + max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift); + } + // Sort dots by line number. + dot_list.sort((a, b) => b.line - a.line); + let dot_shift = right_shift; + let x_width = 0; + let last_line = null; + let last_note = null; + let prev_dotted_space = null; + let half_shiftY = 0; + for (let i = 0; i < dot_list.length; ++i) { + const { dot, note, note_id, line } = dot_list[i]; + // Reset the position of the dot every line. + if (line !== last_line || note !== last_note) { + dot_shift = max_shift_map[note_id]; + } + if (!note.isRest() && line !== last_line) { + if (Math.abs(line % 1) === 0.5) { + // note is on a space, so no dot shift + half_shiftY = 0; + } + else { + // note is on a line, so shift dot to space above the line + half_shiftY = 0.5; + if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) { + // previous note on a space, so shift dot to space below the line + half_shiftY = -0.5; + } + else if (line + half_shiftY === prev_dotted_space) { + // previous space is dotted, so shift dot to space below the line + half_shiftY = -0.5; + } + } + } + // convert half_shiftY to a multiplier for dots.draw() + if (note.isRest()) { + dot.dot_shiftY += -half_shiftY; + } + else { + dot.dot_shiftY = -half_shiftY; + } + prev_dotted_space = line + half_shiftY; + dot.setXShift(dot_shift); + dot_shift += dot.getWidth() + dot_spacing; // spacing + x_width = dot_shift > x_width ? dot_shift : x_width; + last_line = line; + last_note = note; + } + // Update state. + state.right_shift += x_width; + return true; + } + constructor() { + super(); + this.position = _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier.Position.RIGHT; + this.radius = 2; + this.setWidth(5); + this.dot_shiftY = 0; + } + setNote(note) { + this.note = note; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isGraceNote)(note)) { + this.radius *= 0.5; + this.setWidth(3); + } + return this; + } + setDotShiftY(y) { + this.dot_shiftY = y; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const stave = note.checkStave(); + const lineSpace = stave.getSpacingBetweenLines(); + const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true }); + // Set the starting y coordinate to the base of the stem for TabNotes. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) { + start.y = note.getStemExtents().baseY; + } + const x = start.x + this.x_shift + this.width - this.radius; + const y = start.y + this.y_shift + this.dot_shiftY * lineSpace; + ctx.beginPath(); + ctx.arc(x, y, this.radius, 0, Math.PI * 2, false); + ctx.fill(); + } +} + + +/***/ }), + +/***/ "./src/easyscore.ts": +/*!**************************!*\ + !*** ./src/easyscore.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Builder": () => (/* binding */ Builder), +/* harmony export */ "EasyScore": () => (/* binding */ EasyScore), +/* harmony export */ "EasyScoreGrammar": () => (/* binding */ EasyScoreGrammar), +/* harmony export */ "Piece": () => (/* binding */ Piece) +/* harmony export */ }); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./parser */ "./src/parser.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (EasyScore.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.EasyScore', args); +} +class EasyScoreGrammar { + constructor(builder) { + this.builder = builder; + } + begin() { + return this.LINE; + } + LINE() { + return { + expect: [this.PIECE, this.PIECES, this.EOL], + }; + } + PIECE() { + return { + expect: [this.CHORDORNOTE, this.PARAMS], + run: () => this.builder.commitPiece(), + }; + } + PIECES() { + return { + expect: [this.COMMA, this.PIECE], + zeroOrMore: true, + }; + } + PARAMS() { + return { + expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS], + }; + } + CHORDORNOTE() { + return { + expect: [this.CHORD, this.SINGLENOTE], + or: true, + }; + } + CHORD() { + return { + expect: [this.LPAREN, this.NOTES, this.RPAREN], + // eslint-disable-next-line + run: (state) => this.builder.addChord(state.matches[1]), + }; + } + NOTES() { + return { + expect: [this.NOTE], + oneOrMore: true, + }; + } + NOTE() { + return { + expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE], + }; + } + SINGLENOTE() { + return { + expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE], + run: (state) => { + // eslint-disable-next-line + const s = state; + this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]); + }, + }; + } + ACCIDENTAL() { + return { + expect: [this.MICROTONES, this.ACCIDENTALS], + maybe: true, + or: true, + }; + } + DOTS() { + return { + expect: [this.DOT], + zeroOrMore: true, + // eslint-disable-next-line + run: (state) => this.builder.setNoteDots(state.matches), + }; + } + TYPE() { + return { + expect: [this.SLASH, this.MAYBESLASH, this.TYPES], + maybe: true, + // eslint-disable-next-line + run: (state) => this.builder.setNoteType(state.matches[2]), + }; + } + DURATION() { + return { + expect: [this.SLASH, this.DURATIONS], + maybe: true, + // eslint-disable-next-line + run: (state) => this.builder.setNoteDuration(state.matches[1]), + }; + } + OPTS() { + return { + expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET], + maybe: true, + }; + } + KEYVALS() { + return { + expect: [this.COMMA, this.KEYVAL], + zeroOrMore: true, + }; + } + KEYVAL() { + const unquote = (str) => str.slice(1, -1); + return { + expect: [this.KEY, this.EQUALS, this.VAL], + // eslint-disable-next-line + run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])), + }; + } + VAL() { + return { + expect: [this.SVAL, this.DVAL], + or: true, + }; + } + KEY() { + return { token: '[a-zA-Z][a-zA-Z0-9]*' }; + } + DVAL() { + return { token: '["][^"]*["]' }; + } + SVAL() { + return { token: "['][^']*[']" }; + } + NOTENAME() { + return { token: '[a-gA-G]' }; + } + OCTAVE() { + return { token: '[0-9]+' }; + } + ACCIDENTALS() { + return { token: 'bb|b|##|#|n' }; + } + MICROTONES() { + return { token: 'bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o' }; + } + DURATIONS() { + return { token: '[0-9whq]+' }; + } + TYPES() { + return { token: '[rRsSmMhHgG]' }; + } + LPAREN() { + return { token: '[(]' }; + } + RPAREN() { + return { token: '[)]' }; + } + COMMA() { + return { token: '[,]' }; + } + DOT() { + return { token: '[.]' }; + } + SLASH() { + return { token: '[/]' }; + } + MAYBESLASH() { + return { token: '[/]?' }; + } + EQUALS() { + return { token: '[=]' }; + } + LBRACKET() { + return { token: '\\[' }; + } + RBRACKET() { + return { token: '\\]' }; + } + EOL() { + return { token: '$' }; + } +} +class Piece { + constructor(duration) { + this.chord = []; + this.dots = 0; + this.options = {}; + this.duration = duration; + } +} +class Builder { + constructor(factory) { + this.commitHooks = []; + this.factory = factory; + this.reset(); + } + reset(options) { + this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options); + this.elements = { notes: [], accidentals: [] }; + this.rollingDuration = '8'; + this.resetPiece(); + } + getFactory() { + return this.factory; + } + getElements() { + return this.elements; + } + addCommitHook(commitHook) { + this.commitHooks.push(commitHook); + } + resetPiece() { + L('resetPiece'); + this.piece = new Piece(this.rollingDuration); + } + setNoteDots(dots) { + L('setNoteDots:', dots); + if (dots) + this.piece.dots = dots.length; + } + setNoteDuration(duration) { + L('setNoteDuration:', duration); + this.rollingDuration = this.piece.duration = duration || this.rollingDuration; + } + setNoteType(type) { + L('setNoteType:', type); + if (type) + this.piece.type = type; + } + addNoteOption(key, value) { + L('addNoteOption: key:', key, 'value:', value); + this.piece.options[key] = value; + } + addNote(key, accid, octave) { + L('addNote:', key, accid, octave); + this.piece.chord.push({ + key: key, + accid, + octave, + }); + } + addSingleNote(key, accid, octave) { + L('addSingleNote:', key, accid, octave); + this.addNote(key, accid, octave); + } + // notes is an array with 3 entries + addChord(notes) { + L('startChord'); + if (typeof notes[0] !== 'object') { + this.addSingleNote(notes[0]); + } + else { + notes.forEach((n) => { + if (n) + this.addNote(...n); // n => [string, string | null, string] + }); + } + L('endChord'); + } + commitPiece() { + L('commitPiece'); + const { factory } = this; + if (!factory) + return; + const options = Object.assign(Object.assign({}, this.options), this.piece.options); + // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed. + // e.g., auto | up | down + const stem = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase(); + // e.g., treble | bass + const clef = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase(); + const { chord, duration, dots, type } = this.piece; + // Create a string[] that will be assigned to the .keys property of the StaveNote. + // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave} + // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included. + const standardAccidentals = _music__WEBPACK_IMPORTED_MODULE_3__.Music.accidentals; + const keys = chord.map((notePiece) => { + var _a; + return notePiece.key + + (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') + + '/' + + notePiece.octave; + }); + const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase. + // Build a GhostNote or StaveNote using the information we gathered. + const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g' + ? factory.GhostNote({ duration, dots }) + : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem }); + if (!auto_stem) + note.setStemDirection(stem === 'up' ? _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.DOWN); + // Attach accidentals. + const accidentals = []; + chord.forEach((notePiece, index) => { + const accid = notePiece.accid; + if (typeof accid === 'string') { + const accidental = factory.Accidental({ type: accid }); + note.addModifier(accidental, index); + accidentals.push(accidental); + } + else { + accidentals.push(undefined); + } + }); + // Attach dots. + for (let i = 0; i < dots; i++) + _dot__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([note], { all: true }); + this.commitHooks.forEach((commitHook) => commitHook(options, note, this)); + this.elements.notes.push(note); + this.elements.accidentals.push(accidentals); + this.resetPiece(); + } +} +/** + * Commit hook used by EasyScore.setOptions(). + */ +function setId(options, note) { + if (options.id === undefined) + return; + note.setAttribute('id', options.id); +} +// Used by setClass() below. +const commaSeparatedRegex = /\s*,\s*/; +/** + * Commit hook used by EasyScore.setOptions(). + */ +function setClass(options, note) { + if (options.class === undefined) + return; + options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className)); +} +/** + * EasyScore implements a parser for a simple language to generate VexFlow objects. + */ +class EasyScore { + constructor(options = {}) { + this.defaults = { + clef: 'treble', + time: '4/4', + stem: 'auto', + }; + this.setOptions(options); + } + /** + * Set the score defaults. + * clef must be set appropriately to avoid errors when adding Staves. + * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types} + * @param defaults.time default time signature ( 4/4 | 9/8 ...) + * @param defaults.stem default stem arrangement (auto | up | down) + * @returns this + */ + set(defaults) { + this.defaults = Object.assign(Object.assign({}, this.defaults), defaults); + return this; + } + /** + * @param options.factory is required. + * @returns this + */ + setOptions(options) { + var _a, _b; + // eslint-disable-next-line + const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore(). + const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory); + this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, _articulation__WEBPACK_IMPORTED_MODULE_0__.Articulation.easyScoreHook, _frethandfinger__WEBPACK_IMPORTED_MODULE_2__.FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory, + builder }); + this.factory = factory; + this.builder = builder; + this.grammar = new EasyScoreGrammar(this.builder); + this.parser = new _parser__WEBPACK_IMPORTED_MODULE_4__.Parser(this.grammar); + (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook)); + return this; + } + setContext(context) { + this.factory.setContext(context); + return this; + } + parse(line, options = {}) { + this.builder.reset(options); + const result = this.parser.parse(line); + if (!result.success && this.options.throwOnError) { + L(result); + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('Error parsing line: ' + line); + } + return result; + } + beam(notes, options) { + this.factory.Beam({ notes, options }); + return notes; + } + tuplet(notes, options) { + this.factory.Tuplet({ notes, options }); + return notes; + } + notes(line, options = {}) { + options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options); + this.parse(line, options); + return this.builder.getElements().notes; + } + voice(notes, options = {}) { + options = Object.assign({ time: this.defaults.time }, options); + return this.factory.Voice(options).addTickables(notes); + } + addCommitHook(commitHook) { + this.builder.addCommitHook(commitHook); + } +} +EasyScore.DEBUG = false; + + + +/***/ }), + +/***/ "./src/element.ts": +/*!************************!*\ + !*** ./src/element.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Element": () => (/* binding */ Element) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./registry */ "./src/registry.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// @author Mohit Cheppudira +// MIT License + + + + +/** + * Element implements a generic base class for VexFlow, with implementations + * of general functions and properties that can be inherited by all VexFlow elements. + * + * The Element is an abstract class that needs to be subclassed to work. It handles + * style and text-font properties for the Element and any child elements, along with + * working with the Registry to create unique ids, but does not have any tools for + * formatting x or y positions or connections to a Stave. + */ +class Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Element; + } + static newID() { + return `auto${Element.ID++}`; + } + constructor() { + var _a; + // all Element objects keep a list of children that they are responsible and which + // inherit the style of their parents. + this.children = []; + this.attrs = { + id: Element.newID(), + type: this.getCategory(), + class: '', + }; + this.rendered = false; + // If a default registry exist, then register with it right away. + (_a = _registry__WEBPACK_IMPORTED_MODULE_1__.Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this); + } + /** + * Adds a child Element to the Element, which lets it inherit the + * same style as the parent when setGroupStyle() is called. + * + * Examples of children are noteheads and stems. Modifiers such + * as Accidentals are generally not set as children. + * + * Note that StaveNote calls setGroupStyle() when setStyle() is called. + */ + addChildElement(child) { + this.children.push(child); + return this; + } + getCategory() { + return this.constructor.CATEGORY; + } + /** + * Set the element style used to render. + * + * Example: + * ```typescript + * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); + * element.draw(); + * ``` + * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave), + * the style can be applied to all of them by means of the context: + * ```typescript + * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); + * element.getContext().setFillStyle('red'); + * element.getContext().setStrokeStyle('red'); + * element.draw(); + * ``` + * or using drawWithStyle: + * ```typescript + * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); + * element.drawWithStyle(); + * ``` + */ + setStyle(style) { + this.style = style; + return this; + } + /** Set the element & associated children style used for rendering. */ + setGroupStyle(style) { + this.style = style; + this.children.forEach((child) => child.setGroupStyle(style)); + return this; + } + /** Get the element style used for rendering. */ + getStyle() { + return this.style; + } + /** Apply the element style to `context`. */ + applyStyle(context = this.context, style = this.getStyle()) { + if (!style) + return this; + if (!context) + return this; + context.save(); + if (style.shadowColor) + context.setShadowColor(style.shadowColor); + if (style.shadowBlur) + context.setShadowBlur(style.shadowBlur); + if (style.fillStyle) + context.setFillStyle(style.fillStyle); + if (style.strokeStyle) + context.setStrokeStyle(style.strokeStyle); + if (style.lineWidth) + context.setLineWidth(style.lineWidth); + return this; + } + /** Restore the style of `context`. */ + restoreStyle(context = this.context, style = this.getStyle()) { + if (!style) + return this; + if (!context) + return this; + context.restore(); + return this; + } + /** + * Draw the element and all its sub-elements (ie.: Modifiers in a Stave) + * with the element's style (see `getStyle()` and `setStyle()`) + */ + drawWithStyle() { + this.checkContext(); + this.applyStyle(); + this.draw(); + this.restoreStyle(); + } + /** Check if it has a class label (An element can have multiple class labels). */ + hasClass(className) { + var _a; + if (!this.attrs.class) + return false; + return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1; + } + /** Add a class label (An element can have multiple class labels). */ + addClass(className) { + var _a; + if (this.hasClass(className)) + return this; + if (!this.attrs.class) + this.attrs.class = `${className}`; + else + this.attrs.class = `${this.attrs.class} ${className}`; + (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ + id: this.attrs.id, + name: 'class', + value: className, + oldValue: undefined, + }); + return this; + } + /** Remove a class label (An element can have multiple class labels). */ + removeClass(className) { + var _a, _b; + if (!this.hasClass(className)) + return this; + const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' '); + if (arr) { + arr.splice(arr.indexOf(className)); + this.attrs.class = arr.join(' '); + } + (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({ + id: this.attrs.id, + name: 'class', + value: undefined, + oldValue: className, + }); + return this; + } + /** Call back from registry after the element is registered. */ + onRegister(registry) { + this.registry = registry; + return this; + } + /** Return the rendered status. */ + isRendered() { + return this.rendered; + } + /** Set the rendered status. */ + setRendered(rendered = true) { + this.rendered = rendered; + return this; + } + /** Return the element attributes. */ + getAttributes() { + return this.attrs; + } + /** Return an attribute, such as 'id', 'type' or 'class'. */ + // eslint-disable-next-line + getAttribute(name) { + return this.attrs[name]; + } + /** Return associated SVGElement. */ + getSVGElement(suffix = '') { + const id = (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(this.attrs.id + suffix); + const element = document.getElementById(id); + if (element) + return element; + } + /** Set an attribute such as 'id', 'class', or 'type'. */ + setAttribute(name, value) { + var _a; + const oldID = this.attrs.id; + const oldValue = this.attrs[name]; + this.attrs[name] = value; + // Register with old id to support id changes. + (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue }); + return this; + } + /** Get the boundingBox. */ + getBoundingBox() { + return this.boundingBox; + } + /** Return the context, such as an SVGContext or CanvasContext object. */ + getContext() { + return this.context; + } + /** Set the context to an SVGContext or CanvasContext object */ + setContext(context) { + this.context = context; + return this; + } + /** Validate and return the rendering context. */ + checkContext() { + return (0,_util__WEBPACK_IMPORTED_MODULE_3__.defined)(this.context, 'NoContext', 'No rendering context attached to instance.'); + } + ////////////////////////////////////////////////////////////////////////////////////////////////// + // Font Handling + /** + * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied + * to text (not glyphs). + */ + set font(f) { + this.setFont(f); + } + /** Returns the CSS compatible font string for the text font. */ + get font() { + return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont); + } + /** + * Set the element's text font family, size, weight, style + * (e.g., `Arial`, `10pt`, `bold`, `italic`). + * + * This attribute does not determine the font used for musical Glyphs like treble clefs. + * + * @param font is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). + * @param style is a string (e.g., 'italic', 'normal'). + * If no arguments are provided, then the font is set to the default font. + * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property. + */ + setFont(font, size, weight, style) { + // Allow subclasses to override `TEXT_FONT`. + const defaultTextFont = this.constructor.TEXT_FONT; + const fontIsObject = typeof font === 'object'; + const fontIsString = typeof font === 'string'; + const fontIsUndefined = font === undefined; + const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined; + if (fontIsObject) { + // `font` is case 1) a FontInfo object + this.textFont = Object.assign(Object.assign({}, defaultTextFont), font); + } + else if (fontIsString && sizeWeightStyleAreUndefined) { + // `font` is case 2) CSS font shorthand. + this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.fromCSSString(font); + } + else if (fontIsUndefined && sizeWeightStyleAreUndefined) { + // All arguments are undefined. Do not check for `arguments.length === 0`, + // which fails on the edge case: `setFont(undefined)`. + // TODO: See if we can remove this case entirely without introducing a visual diff. + // The else case below seems like it should be equivalent to this case. + this.textFont = Object.assign({}, defaultTextFont); + } + else { + // `font` is case 3) a font family string (e.g., 'Times New Roman'). + // The other parameters represent the size, weight, and style. + // It is okay for `font` to be undefined while one or more of the other arguments is provided. + // Following CSS conventions, unspecified params are reset to the default. + this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style); + } + return this; + } + /** + * Get the css string describing this Element's text font. e.g., + * 'bold 10pt Arial'. + */ + getFont() { + if (!this.textFont) { + this.resetFont(); + } + return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont); + } + /** + * Reset the text font to the style indicated by the static `TEXT_FONT` property. + * Subclasses can call this to initialize `textFont` for the first time. + */ + resetFont() { + this.setFont(); + } + /** Return a copy of the current FontInfo object. */ + get fontInfo() { + if (!this.textFont) { + this.resetFont(); + } + // We can cast to Required here, because + // we just called resetFont() above to ensure this.textFont is set. + return Object.assign({}, this.textFont); + } + set fontInfo(fontInfo) { + this.setFont(fontInfo); + } + /** Change the font size, while keeping everything else the same. */ + setFontSize(size) { + const fontInfo = this.fontInfo; + this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style); + return this; + } + /** + * @returns a CSS font-size string (e.g., '18pt', '12px', '1em'). + * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes. + */ + getFontSize() { + return this.fontSize; + } + /** + * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property. + * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt'). + */ + set fontSize(size) { + this.setFontSize(size); + } + /** + * @returns a CSS font-size string (e.g., '18pt', '12px', '1em'). + */ + get fontSize() { + let size = this.fontInfo.size; + if (typeof size === 'number') { + size = `${size}pt`; + } + return size; + } + /** + * @returns the font size in `pt`. + */ + get fontSizeInPoints() { + return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(this.fontSize); + } + /** + * @returns the font size in `px`. + */ + get fontSizeInPixels() { + return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(this.fontSize); + } + /** + * @returns a CSS font-style string (e.g., 'italic'). + */ + get fontStyle() { + return this.fontInfo.style; + } + set fontStyle(style) { + const fontInfo = this.fontInfo; + this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style); + } + /** + * @returns a CSS font-weight string (e.g., 'bold'). + * As in CSS, font-weight is always returned as a string, even if it was set as a number. + */ + get fontWeight() { + return this.fontInfo.weight + ''; + } + set fontWeight(weight) { + const fontInfo = this.fontInfo; + this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style); + } +} +Element.ID = 1000; +/** + * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)` + * to customize the font for musical symbols placed on the score. + */ +Element.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/factory.ts": +/*!************************!*\ + !*** ./src/factory.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Factory": () => (/* binding */ Factory) +/* harmony export */ }); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ "./src/barnote.ts"); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.ts"); +/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./curve */ "./src/curve.ts"); +/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./staveline */ "./src/staveline.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./system */ "./src/system.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.ts"); +/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./web */ "./src/web.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// @author Mohit Cheppudira +// MIT License + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Factory.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_39__.log)('Vex.Flow.Factory', args); +} +/** + * Factory implements a high level API around VexFlow. + */ +class Factory { + /** + * Static simplified function to access constructor without providing FactoryOptions + * + * Example: + * + * Create an SVG renderer and attach it to the DIV element named "boo" to render using 1200 and 600 + * + * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );` + */ + static newFromElementId(elementId, width = 500, height = 200) { + return new Factory({ renderer: { elementId, width, height } }); + } + /** + * Example: + * + * Create an SVG renderer and attach it to the DIV element named "boo" to render using 1200 and 600 + * + * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});` + */ + constructor(options = {}) { + L('New factory: ', options); + this.options = { + stave: { + space: 10, + }, + renderer: { + elementId: '', + width: 500, + height: 200, + background: '#FFF', + }, + font: Factory.TEXT_FONT, + }; + this.setOptions(options); + } + reset() { + this.renderQ = []; + this.systems = []; + this.staves = []; + this.voices = []; + this.stave = undefined; // current stave + } + setOptions(options) { + this.options = Object.assign(Object.assign({}, this.options), options); + this.initRenderer(); + this.reset(); + } + initRenderer() { + const { elementId, width, height, background } = this.options.renderer; + if (elementId == null) { + return; + } + if (elementId == '') { + L(this); + throw new _util__WEBPACK_IMPORTED_MODULE_39__.RuntimeError('renderer.elementId not set in FactoryOptions'); + } + let backend = this.options.renderer.backend; + if (backend === undefined) { + const elem = document.getElementById(elementId); + // We use a custom type check here, because node-canvas mimics canvas, + // but is not an instance of window.HTMLCanvasElement. + // In fact, `window` might be undefined here. + // See: https://www.npmjs.com/package/canvas + if ((0,_web__WEBPACK_IMPORTED_MODULE_42__.isHTMLCanvas)(elem)) { + backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.CANVAS; + } + else { + backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.SVG; + } + } + this.context = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.buildContext(elementId, backend, width, height, background); + } + getContext() { + return this.context; + } + setContext(context) { + this.context = context; + return this; + } + getStave() { + return this.stave; + } + getVoices() { + return this.voices; + } + /** Return pixels from current stave spacing. */ + Stave(params) { + const staveSpace = this.options.stave.space; + const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params); + const stave = new _stave__WEBPACK_IMPORTED_MODULE_24__.Stave(p.x, p.y, p.width, p.options); + this.staves.push(stave); + stave.setContext(this.context); + this.stave = stave; + return stave; + } + TabStave(params) { + const staveSpace = this.options.stave.space; + const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params); + const stave = new _tabstave__WEBPACK_IMPORTED_MODULE_32__.TabStave(p.x, p.y, p.width, p.options); + this.staves.push(stave); + stave.setContext(this.context); + this.stave = stave; + return stave; + } + StaveNote(noteStruct) { + const note = new _stavenote__WEBPACK_IMPORTED_MODULE_27__.StaveNote(noteStruct); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + GlyphNote(glyph, noteStruct, options) { + const note = new _glyphnote__WEBPACK_IMPORTED_MODULE_13__.GlyphNote(glyph, noteStruct, options); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + RepeatNote(type, noteStruct, options) { + const note = new _repeatnote__WEBPACK_IMPORTED_MODULE_23__.RepeatNote(type, noteStruct, options); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + GhostNote(noteStruct) { + const ghostNote = new _ghostnote__WEBPACK_IMPORTED_MODULE_12__.GhostNote(noteStruct); + if (this.stave) + ghostNote.setStave(this.stave); + ghostNote.setContext(this.context); + this.renderQ.push(ghostNote); + return ghostNote; + } + TextNote(noteStruct) { + const textNote = new _textnote__WEBPACK_IMPORTED_MODULE_35__.TextNote(noteStruct); + if (this.stave) + textNote.setStave(this.stave); + textNote.setContext(this.context); + this.renderQ.push(textNote); + return textNote; + } + BarNote(params = {}) { + const barNote = new _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote(params.type); + if (this.stave) + barNote.setStave(this.stave); + barNote.setContext(this.context); + this.renderQ.push(barNote); + return barNote; + } + ClefNote(params) { + const p = Object.assign({ type: 'treble', options: { + size: 'default', + annotation: undefined, + } }, params); + const clefNote = new _clefnote__WEBPACK_IMPORTED_MODULE_6__.ClefNote(p.type, p.options.size, p.options.annotation); + if (this.stave) + clefNote.setStave(this.stave); + clefNote.setContext(this.context); + this.renderQ.push(clefNote); + return clefNote; + } + TimeSigNote(params) { + const p = Object.assign({ time: '4/4' }, params); + const timeSigNote = new _timesignote__WEBPACK_IMPORTED_MODULE_37__.TimeSigNote(p.time); + if (this.stave) + timeSigNote.setStave(this.stave); + timeSigNote.setContext(this.context); + this.renderQ.push(timeSigNote); + return timeSigNote; + } + KeySigNote(params) { + const keySigNote = new _keysignote__WEBPACK_IMPORTED_MODULE_16__.KeySigNote(params.key, params.cancelKey, params.alterKey); + if (this.stave) + keySigNote.setStave(this.stave); + keySigNote.setContext(this.context); + this.renderQ.push(keySigNote); + return keySigNote; + } + TabNote(noteStruct) { + const note = new _tabnote__WEBPACK_IMPORTED_MODULE_31__.TabNote(noteStruct); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + GraceNote(noteStruct) { + const note = new _gracenote__WEBPACK_IMPORTED_MODULE_14__.GraceNote(noteStruct); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + return note; + } + GraceNoteGroup(params) { + const group = new _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__.GraceNoteGroup(params.notes, params.slur); + group.setContext(this.context); + return group; + } + Accidental(params) { + const accid = new _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental(params.type); + accid.setContext(this.context); + return accid; + } + Annotation(params) { + const p = Object.assign({ text: 'p', hJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify.CENTER, vJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM }, params); + const annotation = new _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(p.text); + annotation.setJustification(p.hJustify); + annotation.setVerticalJustification(p.vJustify); + annotation.setFont(p.font); + annotation.setContext(this.context); + return annotation; + } + ChordSymbol(params) { + const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params); + const chordSymbol = new _chordsymbol__WEBPACK_IMPORTED_MODULE_5__.ChordSymbol(); + chordSymbol.setHorizontal(p.hJustify); + chordSymbol.setVertical(p.vJustify); + chordSymbol.setEnableKerning(p.kerning); + chordSymbol.setReportWidth(p.reportWidth); + // There is a default font based on the engraving font. Only set then + // font if it is specific, else use the default + if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') { + if (typeof p.fontWeight === 'string') + chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight); + else + chordSymbol.setFont(p.fontFamily, p.fontSize, ''); + } + else if (typeof p.fontSize === 'number') { + chordSymbol.setFontSize(p.fontSize); + } + chordSymbol.setContext(this.context); + return chordSymbol; + } + Articulation(params) { + var _a; + const articulation = new _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.'); + if ((params === null || params === void 0 ? void 0 : params.position) != undefined) + articulation.setPosition(params.position); + if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined) + articulation.setBetweenLines(params.betweenLines); + articulation.setContext(this.context); + return articulation; + } + Ornament(type, params) { + const options = Object.assign({ type, position: 0, accidental: '' }, params); + const ornament = new _ornament__WEBPACK_IMPORTED_MODULE_20__.Ornament(type); + ornament.setPosition(options.position); + if (options.upperAccidental) { + ornament.setUpperAccidental(options.upperAccidental); + } + if (options.lowerAccidental) { + ornament.setLowerAccidental(options.lowerAccidental); + } + if (typeof options.delayed !== 'undefined') { + ornament.setDelayed(options.delayed); + } + ornament.setContext(this.context); + return ornament; + } + TextDynamics(params) { + const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params); + const text = new _textdynamics__WEBPACK_IMPORTED_MODULE_34__.TextDynamics({ + text: p.text, + line: p.line, + duration: p.duration, + dots: p.dots, + }); + if (this.stave) + text.setStave(this.stave); + text.setContext(this.context); + this.renderQ.push(text); + return text; + } + Fingering(params) { + const p = Object.assign({ number: '0', position: 'left' }, params); + const fingering = new _frethandfinger__WEBPACK_IMPORTED_MODULE_11__.FretHandFinger(p.number); + fingering.setPosition(p.position); + fingering.setContext(this.context); + return fingering; + } + StringNumber(params, drawCircle = true) { + const stringNumber = new _stringnumber__WEBPACK_IMPORTED_MODULE_29__.StringNumber(params.number); + stringNumber.setPosition(params.position); + stringNumber.setContext(this.context); + stringNumber.setDrawCircle(drawCircle); + return stringNumber; + } + TickContext() { + return new _tickcontext__WEBPACK_IMPORTED_MODULE_36__.TickContext(); + } + ModifierContext() { + return new _modifiercontext__WEBPACK_IMPORTED_MODULE_17__.ModifierContext(); + } + MultiMeasureRest(params) { + const numMeasures = (0,_util__WEBPACK_IMPORTED_MODULE_39__.defined)(params.number_of_measures, 'NoNumberOfMeasures'); + const multiMeasureRest = new _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__.MultiMeasureRest(numMeasures, params); + multiMeasureRest.setContext(this.context); + this.renderQ.push(multiMeasureRest); + return multiMeasureRest; + } + Voice(params) { + const p = Object.assign({ time: '4/4' }, params); + const voice = new _voice__WEBPACK_IMPORTED_MODULE_41__.Voice(p.time); + this.voices.push(voice); + return voice; + } + StaveConnector(params) { + const connector = new _staveconnector__WEBPACK_IMPORTED_MODULE_25__.StaveConnector(params.top_stave, params.bottom_stave); + connector.setType(params.type).setContext(this.context); + this.renderQ.push(connector); + return connector; + } + Formatter(options) { + return new _formatter__WEBPACK_IMPORTED_MODULE_10__.Formatter(options); + } + Tuplet(params) { + const p = Object.assign({ notes: [], options: {} }, params); + const tuplet = new _tuplet__WEBPACK_IMPORTED_MODULE_38__.Tuplet(p.notes, p.options).setContext(this.context); + this.renderQ.push(tuplet); + return tuplet; + } + Beam(params) { + var _a, _b, _c, _d, _e; + const beam = new _beam__WEBPACK_IMPORTED_MODULE_4__.Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context); + beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []); + if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) { + Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => { + beam.setPartialBeamSideAt(Number(noteIndex), direction); + }); + } + this.renderQ.push(beam); + return beam; + } + Curve(params) { + const curve = new _curve__WEBPACK_IMPORTED_MODULE_7__.Curve(params.from, params.to, params.options).setContext(this.context); + this.renderQ.push(curve); + return curve; + } + StaveTie(params) { + var _a; + const tie = new _stavetie__WEBPACK_IMPORTED_MODULE_28__.StaveTie({ + first_note: params.from, + last_note: params.to, + first_indices: params.first_indices, + last_indices: params.last_indices, + }, params.text); + if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction) + tie.setDirection(params.options.direction); + tie.setContext(this.context); + this.renderQ.push(tie); + return tie; + } + StaveLine(params) { + var _a, _b; + const line = new _staveline__WEBPACK_IMPORTED_MODULE_26__.StaveLine({ + first_note: params.from, + last_note: params.to, + first_indices: params.first_indices, + last_indices: params.last_indices, + }); + if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text) + line.setText(params.options.text); + if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font) + line.setFont(params.options.font); + line.setContext(this.context); + this.renderQ.push(line); + return line; + } + VibratoBracket(params) { + const vibratoBracket = new _vibratobracket__WEBPACK_IMPORTED_MODULE_40__.VibratoBracket({ + start: params.from, + stop: params.to, + }); + if (params.options.line) + vibratoBracket.setLine(params.options.line); + if (params.options.harsh) + vibratoBracket.setHarsh(params.options.harsh); + vibratoBracket.setContext(this.context); + this.renderQ.push(vibratoBracket); + return vibratoBracket; + } + TextBracket(params) { + const textBracket = new _textbracket__WEBPACK_IMPORTED_MODULE_33__.TextBracket({ + start: params.from, + stop: params.to, + text: params.text, + superscript: params.options.superscript, + position: params.options.position, + }); + if (params.options.line) + textBracket.setLine(params.options.line); + if (params.options.font) + textBracket.setFont(params.options.font); + textBracket.setContext(this.context); + this.renderQ.push(textBracket); + return textBracket; + } + System(params = {}) { + params.factory = this; + const system = new _system__WEBPACK_IMPORTED_MODULE_30__.System(params).setContext(this.context); + this.systems.push(system); + return system; + } + /** + * Creates EasyScore. Normally the first step after constructing a Factory. For example: + * ``` + * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }}); + * const score: EasyScore = vf.EasyScore(); + * ``` + * @param options.factory optional instance of Factory + * @param options.builder instance of Builder + * @param options.commitHooks function to call after a note element is created + * @param options.throwOnError throw error in case of parsing error + */ + EasyScore(options = {}) { + options.factory = this; + return new _easyscore__WEBPACK_IMPORTED_MODULE_8__.EasyScore(options); + } + PedalMarking(params) { + const p = Object.assign({ notes: [], options: { + style: 'mixed', + } }, params); + const pedal = new _pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking(p.notes); + pedal.setType(_pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking.typeString[p.options.style]); + pedal.setContext(this.context); + this.renderQ.push(pedal); + return pedal; + } + NoteSubGroup(params) { + const p = Object.assign({ notes: [] }, params); + const group = new _notesubgroup__WEBPACK_IMPORTED_MODULE_19__.NoteSubGroup(p.notes); + group.setContext(this.context); + return group; + } + /** Render the score. */ + draw() { + const ctx = this.context; + this.systems.forEach((s) => s.setContext(ctx).format()); + this.staves.forEach((s) => s.setContext(ctx).draw()); + this.voices.forEach((v) => v.setContext(ctx).draw()); + this.renderQ.forEach((e) => { + if (!e.isRendered()) + e.setContext(ctx).draw(); + }); + this.systems.forEach((s) => s.setContext(ctx).draw()); + this.reset(); + } +} +/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */ +Factory.DEBUG = false; +/** Default text font. */ +Factory.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_9__.Element.TEXT_FONT); + + + +/***/ }), + +/***/ "./src/flow.ts": +/*!*********************!*\ + !*** ./src/flow.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Flow": () => (/* binding */ Flow) +/* harmony export */ }); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ "./src/barnote.ts"); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); +/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.ts"); +/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ "./src/crescendo.ts"); +/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ "./src/curve.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ "./src/factory.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracetabnote */ "./src/gracetabnote.ts"); +/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./keymanager */ "./src/keymanager.ts"); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./parenthesis */ "./src/parenthesis.ts"); +/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parser */ "./src/parser.ts"); +/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); +/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./registry */ "./src/registry.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./stavehairpin */ "./src/stavehairpin.ts"); +/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./staveline */ "./src/staveline.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.ts"); +/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.ts"); +/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./strokes */ "./src/strokes.ts"); +/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./svgcontext */ "./src/svgcontext.ts"); +/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./system */ "./src/system.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./tabslide */ "./src/tabslide.ts"); +/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.ts"); +/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.ts"); +/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tremolo */ "./src/tremolo.ts"); +/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./tuning */ "./src/tuning.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./version */ "./src/version.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); +/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +class Flow { + static get BUILD() { + return { + /** version number. */ + VERSION: _version__WEBPACK_IMPORTED_MODULE_78__.VERSION, + /** git commit ID that this library was built from. */ + ID: _version__WEBPACK_IMPORTED_MODULE_78__.ID, + /** The date when this library was compiled. */ + DATE: _version__WEBPACK_IMPORTED_MODULE_78__.DATE, + }; + } + /** + * Examples: + * ``` + * Vex.Flow.setMusicFont('Petaluma'); + * Vex.Flow.setMusicFont('Bravura', 'Gonville'); + * ``` + * + * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom). + * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of: + * 'Bravura', 'Gonville', 'Custom'. + * + * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`, + * which includes a single music font. Calling this method is unnecessary. + * + * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts. + * In this case, the default music font stack is empty. + * Example: + * ``` + * await Vex.Flow.fetchMusicFont('Petaluma'); + * Vex.Flow.setMusicFont('Petaluma'); + * ... (do VexFlow stuff) ... + * ``` + * See `demos/fonts/` for more examples. + * + * @returns an array of Font objects corresponding to the provided `fontNames`. + */ + static setMusicFont(...fontNames) { + // Convert the array of font names into an array of Font objects. + const fonts = fontNames.map((fontName) => _font__WEBPACK_IMPORTED_MODULE_18__.Font.load(fontName)); + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK = fonts; + _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.MUSIC_FONT_STACK = fonts.slice(); + _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.CURRENT_CACHE_KEY = fontNames.join(','); + return fonts; + } + /** + * Used with vexflow-core which supports dynamic font loading. + */ + // eslint-disable-next-line + static fetchMusicFont(fontName, fontModuleOrPath) { + return __awaiter(this, void 0, void 0, function* () { + // The default implementation does nothing. + // See vexflow-core.ts for the implementation that vexflow-core.js uses. + }); + } + static getMusicFont() { + const fonts = _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK; + return fonts.map((font) => font.getName()); + } + static getMusicFontStack() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK; + } + static get RENDER_PRECISION_PLACES() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES; + } + static set RENDER_PRECISION_PLACES(precision) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES = precision; + } + static get SOFTMAX_FACTOR() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR; + } + static set SOFTMAX_FACTOR(factor) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR = factor; + } + static get NOTATION_FONT_SCALE() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE; + } + static set NOTATION_FONT_SCALE(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE = value; + } + static get TABLATURE_FONT_SCALE() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE; + } + static set TABLATURE_FONT_SCALE(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE = value; + } + static get RESOLUTION() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION; + } + static set RESOLUTION(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION = value; + } + static get SLASH_NOTEHEAD_WIDTH() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH; + } + static set SLASH_NOTEHEAD_WIDTH(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH = value; + } + static get STAVE_LINE_DISTANCE() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE; + } + static set STAVE_LINE_DISTANCE(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE = value; + } + static get STAVE_LINE_THICKNESS() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS; + } + static set STAVE_LINE_THICKNESS(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS = value; + } + static get STEM_HEIGHT() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT; + } + static set STEM_HEIGHT(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT = value; + } + static get STEM_WIDTH() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH; + } + static set STEM_WIDTH(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH = value; + } + static get TIME4_4() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TIME4_4; + } + static get accidentalMap() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.accidentalMap; + } + static get unicode() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.unicode; + } + static keySignature(spec) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keySignature(spec); + } + static hasKeySignature(spec) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.hasKeySignature(spec); + } + static getKeySignatures() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.getKeySignatures(); + } + static clefProperties(clef) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.clefProperties(clef); + } + // eslint-disable-next-line + static keyProperties(key, clef, params) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keyProperties(key, clef, params); + } + static durationToTicks(duration) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.durationToTicks(duration); + } +} +Flow.Accidental = _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental; +Flow.Annotation = _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation; +Flow.Articulation = _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation; +Flow.Barline = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.Barline; +Flow.BarNote = _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote; +Flow.Beam = _beam__WEBPACK_IMPORTED_MODULE_4__.Beam; +Flow.Bend = _bend__WEBPACK_IMPORTED_MODULE_5__.Bend; +Flow.BoundingBox = _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox; +Flow.BoundingBoxComputation = _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation; +Flow.CanvasContext = _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext; +Flow.ChordSymbol = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol; +Flow.Clef = _clef__WEBPACK_IMPORTED_MODULE_10__.Clef; +Flow.ClefNote = _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote; +Flow.Crescendo = _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo; +Flow.Curve = _curve__WEBPACK_IMPORTED_MODULE_13__.Curve; +Flow.Dot = _dot__WEBPACK_IMPORTED_MODULE_14__.Dot; +Flow.EasyScore = _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore; +Flow.Element = _element__WEBPACK_IMPORTED_MODULE_16__.Element; +Flow.Factory = _factory__WEBPACK_IMPORTED_MODULE_17__.Factory; +Flow.Font = _font__WEBPACK_IMPORTED_MODULE_18__.Font; +Flow.Formatter = _formatter__WEBPACK_IMPORTED_MODULE_19__.Formatter; +Flow.Fraction = _fraction__WEBPACK_IMPORTED_MODULE_20__.Fraction; +Flow.FretHandFinger = _frethandfinger__WEBPACK_IMPORTED_MODULE_21__.FretHandFinger; +Flow.GhostNote = _ghostnote__WEBPACK_IMPORTED_MODULE_22__.GhostNote; +Flow.Glyph = _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph; +Flow.GlyphNote = _glyphnote__WEBPACK_IMPORTED_MODULE_24__.GlyphNote; +Flow.GraceNote = _gracenote__WEBPACK_IMPORTED_MODULE_25__.GraceNote; +Flow.GraceNoteGroup = _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__.GraceNoteGroup; +Flow.GraceTabNote = _gracetabnote__WEBPACK_IMPORTED_MODULE_27__.GraceTabNote; +Flow.KeyManager = _keymanager__WEBPACK_IMPORTED_MODULE_28__.KeyManager; +Flow.KeySignature = _keysignature__WEBPACK_IMPORTED_MODULE_29__.KeySignature; +Flow.KeySigNote = _keysignote__WEBPACK_IMPORTED_MODULE_30__.KeySigNote; +Flow.Modifier = _modifier__WEBPACK_IMPORTED_MODULE_31__.Modifier; +Flow.ModifierContext = _modifiercontext__WEBPACK_IMPORTED_MODULE_32__.ModifierContext; +Flow.MultiMeasureRest = _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__.MultiMeasureRest; +Flow.Music = _music__WEBPACK_IMPORTED_MODULE_34__.Music; +Flow.Note = _note__WEBPACK_IMPORTED_MODULE_35__.Note; +Flow.NoteHead = _notehead__WEBPACK_IMPORTED_MODULE_36__.NoteHead; +Flow.NoteSubGroup = _notesubgroup__WEBPACK_IMPORTED_MODULE_37__.NoteSubGroup; +Flow.Ornament = _ornament__WEBPACK_IMPORTED_MODULE_38__.Ornament; +Flow.Parenthesis = _parenthesis__WEBPACK_IMPORTED_MODULE_39__.Parenthesis; +Flow.Parser = _parser__WEBPACK_IMPORTED_MODULE_40__.Parser; +Flow.PedalMarking = _pedalmarking__WEBPACK_IMPORTED_MODULE_41__.PedalMarking; +Flow.Registry = _registry__WEBPACK_IMPORTED_MODULE_42__.Registry; +Flow.RenderContext = _rendercontext__WEBPACK_IMPORTED_MODULE_43__.RenderContext; +Flow.Renderer = _renderer__WEBPACK_IMPORTED_MODULE_44__.Renderer; +Flow.RepeatNote = _repeatnote__WEBPACK_IMPORTED_MODULE_45__.RepeatNote; +Flow.Repetition = _staverepetition__WEBPACK_IMPORTED_MODULE_53__.Repetition; +Flow.Stave = _stave__WEBPACK_IMPORTED_MODULE_46__.Stave; +Flow.StaveConnector = _staveconnector__WEBPACK_IMPORTED_MODULE_48__.StaveConnector; +Flow.StaveHairpin = _stavehairpin__WEBPACK_IMPORTED_MODULE_49__.StaveHairpin; +Flow.StaveLine = _staveline__WEBPACK_IMPORTED_MODULE_50__.StaveLine; +Flow.StaveModifier = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifier; +Flow.StaveNote = _stavenote__WEBPACK_IMPORTED_MODULE_52__.StaveNote; +Flow.StaveTempo = _stavetempo__WEBPACK_IMPORTED_MODULE_54__.StaveTempo; +Flow.StaveText = _stavetext__WEBPACK_IMPORTED_MODULE_55__.StaveText; +Flow.StaveTie = _stavetie__WEBPACK_IMPORTED_MODULE_56__.StaveTie; +Flow.Stem = _stem__WEBPACK_IMPORTED_MODULE_58__.Stem; +Flow.StringNumber = _stringnumber__WEBPACK_IMPORTED_MODULE_59__.StringNumber; +Flow.Stroke = _strokes__WEBPACK_IMPORTED_MODULE_60__.Stroke; +Flow.SVGContext = _svgcontext__WEBPACK_IMPORTED_MODULE_61__.SVGContext; +Flow.System = _system__WEBPACK_IMPORTED_MODULE_62__.System; +Flow.TabNote = _tabnote__WEBPACK_IMPORTED_MODULE_64__.TabNote; +Flow.TabSlide = _tabslide__WEBPACK_IMPORTED_MODULE_65__.TabSlide; +Flow.TabStave = _tabstave__WEBPACK_IMPORTED_MODULE_66__.TabStave; +Flow.TabTie = _tabtie__WEBPACK_IMPORTED_MODULE_67__.TabTie; +Flow.TextBracket = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracket; +Flow.TextDynamics = _textdynamics__WEBPACK_IMPORTED_MODULE_69__.TextDynamics; +Flow.TextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_70__.TextFormatter; +Flow.TextNote = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextNote; +Flow.TickContext = _tickcontext__WEBPACK_IMPORTED_MODULE_72__.TickContext; +Flow.TimeSignature = _timesignature__WEBPACK_IMPORTED_MODULE_73__.TimeSignature; +Flow.TimeSigNote = _timesignote__WEBPACK_IMPORTED_MODULE_74__.TimeSigNote; +Flow.Tremolo = _tremolo__WEBPACK_IMPORTED_MODULE_75__.Tremolo; +Flow.Tuning = _tuning__WEBPACK_IMPORTED_MODULE_76__.Tuning; +Flow.Tuplet = _tuplet__WEBPACK_IMPORTED_MODULE_77__.Tuplet; +Flow.Vibrato = _vibrato__WEBPACK_IMPORTED_MODULE_79__.Vibrato; +Flow.VibratoBracket = _vibratobracket__WEBPACK_IMPORTED_MODULE_80__.VibratoBracket; +Flow.Voice = _voice__WEBPACK_IMPORTED_MODULE_81__.Voice; +Flow.Volta = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.Volta; +// Exported Enums. +// Sorted by the module / file they are exported from. +Flow.AnnotationHorizontalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify; +Flow.AnnotationVerticalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify; +Flow.ChordSymbolHorizontalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify; +Flow.ChordSymbolVerticalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify; +Flow.SymbolTypes = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes; +Flow.SymbolModifiers = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers; +Flow.CurvePosition = _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition; +Flow.FontWeight = _font__WEBPACK_IMPORTED_MODULE_18__.FontWeight; +Flow.FontStyle = _font__WEBPACK_IMPORTED_MODULE_18__.FontStyle; +Flow.ModifierPosition = _modifier__WEBPACK_IMPORTED_MODULE_31__.ModifierPosition; +Flow.RendererBackends = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererBackends; +Flow.RendererLineEndType = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererLineEndType; +Flow.BarlineType = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.BarlineType; +Flow.StaveModifierPosition = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifierPosition; +Flow.VoltaType = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.VoltaType; +Flow.TextBracketPosition = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracketPosition; +Flow.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextJustification; +Flow.VoiceMode = _voice__WEBPACK_IMPORTED_MODULE_81__.VoiceMode; + + + +/***/ }), + +/***/ "./src/font.ts": +/*!*********************!*\ + !*** ./src/font.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Font": () => (/* binding */ Font), +/* harmony export */ "FontStyle": () => (/* binding */ FontStyle), +/* harmony export */ "FontWeight": () => (/* binding */ FontWeight) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + +var FontWeight; +(function (FontWeight) { + FontWeight["NORMAL"] = "normal"; + FontWeight["BOLD"] = "bold"; +})(FontWeight || (FontWeight = {})); +var FontStyle; +(function (FontStyle) { + FontStyle["NORMAL"] = "normal"; + FontStyle["ITALIC"] = "italic"; +})(FontStyle || (FontStyle = {})); +// Internal element for parsing CSS font shorthand strings. +let fontParser; +const Fonts = {}; +class Font { + /** + * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em') + * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported + * units (e.g., pt, em, %). + * @returns the number of pixels that is equivalent to `fontSize` + */ + static convertSizeToPixelValue(fontSize = Font.SIZE) { + var _a; + if (typeof fontSize === 'number') { + // Assume the numeric fontSize is specified in pt. + return fontSize * Font.scaleToPxFrom.pt; + } + else { + const value = parseFloat(fontSize); + if (isNaN(value)) { + return 0; + } + const unit = fontSize.replace(/[\d.\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces. + const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1; + return value * conversionFactor; + } + } + /** + * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em') + * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported + * units (e.g., pt, em, %). + * @returns the number of points that is equivalent to `fontSize` + */ + static convertSizeToPointValue(fontSize = Font.SIZE) { + var _a; + if (typeof fontSize === 'number') { + // Assume the numeric fontSize is specified in pt. + return fontSize; + } + else { + const value = parseFloat(fontSize); + if (isNaN(value)) { + return 0; + } + const unit = fontSize.replace(/[\d.\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces. + const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt; + return value * conversionFactor; + } + } + /** + * @param f + * @param size + * @param weight + * @param style + * @returns the `size` field will include the units (e.g., '12pt', '16px'). + */ + static validate(f, size, weight, style) { + // If f is a string but all other arguments are undefined, we assume that + // f is CSS font shorthand (e.g., 'italic bold 10pt Arial'). + if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) { + return Font.fromCSSString(f); + } + let family; + if (typeof f === 'object') { + // f is a FontInfo object, so we extract its fields. + family = f.family; + size = f.size; + weight = f.weight; + style = f.style; + } + else { + // f is a string representing the font family name or undefined. + family = f; + } + family = family !== null && family !== void 0 ? family : Font.SANS_SERIF; + size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt'; + weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL; + style = style !== null && style !== void 0 ? style : FontStyle.NORMAL; + if (weight === '') { + weight = FontWeight.NORMAL; + } + if (style === '') { + style = FontStyle.NORMAL; + } + // If size is a number, we assume the unit is `pt`. + if (typeof size === 'number') { + size = `${size}pt`; + } + // If weight is a number (e.g., 900), turn it into a string representation of that number. + if (typeof weight === 'number') { + weight = weight.toString(); + } + // At this point, `family`, `size`, `weight`, and `style` are all strings. + return { family, size, weight, style }; + } + /** + * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial'). + */ + static fromCSSString(cssFontShorthand) { + // Let the browser parse this string for us. + // First, create a span element. + // Then, set its style.font and extract it back out. + if (!fontParser) { + fontParser = document.createElement('span'); + } + fontParser.style.font = cssFontShorthand; + const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style; + return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle }; + } + /** + * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`. + */ + static toCSSString(fontInfo) { + var _a; + if (!fontInfo) { + return ''; + } + let style; + const st = fontInfo.style; + if (st === FontStyle.NORMAL || st === '' || st === undefined) { + style = ''; // no space! Omit the style section. + } + else { + style = st.trim() + ' '; + } + let weight; + const wt = fontInfo.weight; + if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) { + weight = ''; // no space! Omit the weight section. + } + else if (typeof wt === 'number') { + weight = wt + ' '; + } + else { + weight = wt.trim() + ' '; + } + let size; + const sz = fontInfo.size; + if (sz === undefined) { + size = Font.SIZE + 'pt '; + } + else if (typeof sz === 'number') { + size = sz + 'pt '; + } + else { + // size is already a string. + size = sz.trim() + ' '; + } + const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF; + return `${style}${weight}${size}${family}`; + } + /** + * @param fontSize a number representing a font size, or a string font size with units. + * @param scaleFactor multiply the size by this factor. + * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48). + * If the fontSize argument was a number, the return value will be a number. + * If the fontSize argument was a string, the return value will be a string. + */ + static scaleSize(fontSize, scaleFactor) { + if (typeof fontSize === 'number') { + return (fontSize * scaleFactor); + } + else { + const value = parseFloat(fontSize); + const unit = fontSize.replace(/[\d.\s]/g, ''); // Remove all numbers, dots, spaces. + return `${value * scaleFactor}${unit}`; + } + } + /** + * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec). + * @returns true if the font weight indicates bold. + */ + static isBold(weight) { + if (!weight) { + return false; + } + else if (typeof weight === 'number') { + return weight >= 600; + } + else { + // a string can be 'bold' or '700' + const parsedWeight = parseInt(weight, 10); + if (isNaN(parsedWeight)) { + return weight.toLowerCase() === 'bold'; + } + else { + return parsedWeight >= 600; + } + } + } + /** + * @param style + * @returns true if the font style indicates 'italic'. + */ + static isItalic(style) { + if (!style) { + return false; + } + else { + return style.toLowerCase() === FontStyle.ITALIC; + } + } + /** + * @param fontName + * @param woffURL The absolute or relative URL to the woff file. + * @param includeWoff2 If true, we assume that a woff2 file is in + * the same folder as the woff file, and will append a `2` to the url. + */ + // Support distributions of the typescript compiler that do not yet include the FontFace API declarations. + // eslint-disable-next-line + // @ts-ignore + static loadWebFont(fontName, woffURL, includeWoff2 = true) { + return __awaiter(this, void 0, void 0, function* () { + const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : ''; + const woff1URL = `url(${woffURL}) format('woff')`; + const woffURLs = woff2URL + woff1URL; + // eslint-disable-next-line + // @ts-ignore + const fontFace = new FontFace(fontName, woffURLs); + yield fontFace.load(); + // eslint-disable-next-line + // @ts-ignore + document.fonts.add(fontFace); + return fontFace; + }); + } + /** + * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls: + * `await Vex.Flow.Font.loadWebFonts();` + * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts), + * and a @font-face { font-family: ... } rule in your CSS. + * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial, + * depending on the current music engraving font. + * + * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts + * for your app. + */ + static loadWebFonts() { + return __awaiter(this, void 0, void 0, function* () { + const host = Font.WEB_FONT_HOST; + const files = Font.WEB_FONT_FILES; + for (const fontName in files) { + const fontPath = files[fontName]; + Font.loadWebFont(fontName, host + fontPath); + } + }); + } + /** + * @param fontName + * @param data optionally set the Font object's `.data` property. + * This is usually done when setting up a font for the first time. + * @param metrics optionally set the Font object's `.metrics` property. + * This is usually done when setting up a font for the first time. + * @returns a Font object with the given `fontName`. + * Reuse an existing Font object if a matching one is found. + */ + static load(fontName, data, metrics) { + let font = Fonts[fontName]; + if (!font) { + font = new Font(fontName); + Fonts[fontName] = font; + } + if (data) { + font.setData(data); + } + if (metrics) { + font.setMetrics(metrics); + } + return font; + } + /** + * Use `Font.load(fontName)` to get a Font object. + * Do not call this constructor directly. + */ + constructor(fontName) { + this.name = fontName; + } + getName() { + return this.name; + } + getData() { + return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.data, 'FontError', 'Missing font data'); + } + getMetrics() { + return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.metrics, 'FontError', 'Missing metrics'); + } + setData(data) { + this.data = data; + } + setMetrics(metrics) { + this.metrics = metrics; + } + hasData() { + return this.data !== undefined; + } + getResolution() { + return this.getData().resolution; + } + getGlyphs() { + return this.getData().glyphs; + } + /** + * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts). + * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY). + * @param defaultValue is returned if the lookup fails. + * @returns the retrieved value (or `defaultValue` if the lookup fails). + */ + // eslint-disable-next-line + lookupMetric(key, defaultValue) { + const keyParts = key.split('.'); + // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key). + let currObj = this.getMetrics(); + for (let i = 0; i < keyParts.length; i++) { + const keyPart = keyParts[i]; + const value = currObj[keyPart]; + if (value === undefined) { + // If the key lookup fails, we fall back to the defaultValue. + return defaultValue; + } + // The most recent lookup succeeded, so we drill deeper into the object. + currObj = value; + } + // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value. + return currObj; + } + /** For debugging. */ + toString() { + return '[' + this.name + ' Font]'; + } +} +////////////////////////////////////////////////////////////////////////////////////////////////// +// STATIC MEMBERS +/** Default sans-serif font family. */ +Font.SANS_SERIF = 'Arial, sans-serif'; +/** Default serif font family. */ +Font.SERIF = 'Times New Roman, serif'; +/** Default font size in `pt`. */ +Font.SIZE = 10; +// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in +/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */ +Font.scaleToPxFrom = { + pt: 4 / 3, + px: 1, + em: 16, + '%': 4 / 25, + in: 96, + mm: 96 / 25.4, + cm: 96 / 2.54, +}; +/** + * Customize this field to specify a different CDN for delivering web fonts. + * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/ + * Or you can use your own host. + */ +Font.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/'; +/** + * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when + * `await Font.loadWebFonts()` is called. Customize this field to specify a different + * set of fonts to load. See: `Font.loadWebFonts()`. + */ +Font.WEB_FONT_FILES = { + 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff', + PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff', +}; + + + +/***/ }), + +/***/ "./src/fonts/bravura_glyphs.ts": +/*!*************************************!*\ + !*** ./src/fonts/bravura_glyphs.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BravuraFont": () => (/* binding */ BravuraFont) +/* harmony export */ }); +const BravuraFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 469, + y_min: 0, + y_max: 295, + ha: 295, + o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z', + }, + bracketBottom: { + x_min: 0, + x_max: 469, + y_min: -295, + y_max: 0, + ha: 295, + o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z', + }, + barlineTick: { + x_min: 0, + x_max: 36, + y_min: 868, + y_max: 1120, + ha: 252, + o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z', + }, + breathMarkTick: { + x_min: 0, + x_max: 500, + y_min: 0, + y_max: 502, + ha: 502, + o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z', + }, + segno: { + x_min: 4, + x_max: 550, + y_min: -27, + y_max: 759, + ha: 786, + o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z', + }, + coda: { + x_min: -4, + x_max: 955, + y_min: -158, + y_max: 898, + ha: 1056, + o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z', + }, + gClef: { + x_min: 0, + x_max: 671, + y_min: -658, + y_max: 1098, + ha: 1756, + o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z', + }, + cClef: { + x_min: 0, + x_max: 699, + y_min: -506, + y_max: 506, + ha: 1012, + o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z', + }, + fClef: { + x_min: -5, + x_max: 684, + y_min: -635, + y_max: 262, + ha: 897, + o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z', + }, + unpitchedPercussionClef1: { + x_min: 0, + x_max: 382, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z', + }, + '6stringTabClef': { + x_min: -3, + x_max: 408, + y_min: -748, + y_max: 764, + ha: 1512, + o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z', + }, + timeSig0: { + x_min: 20, + x_max: 450, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z', + }, + timeSig1: { + x_min: 20, + x_max: 314, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z', + }, + timeSig2: { + x_min: 20, + x_max: 426, + y_min: -257, + y_max: 254, + ha: 511, + o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z', + }, + timeSig3: { + x_min: 20, + x_max: 401, + y_min: -251, + y_max: 249, + ha: 500, + o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z', + }, + timeSig4: { + x_min: 20, + x_max: 450, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z', + }, + timeSig5: { + x_min: 20, + x_max: 383, + y_min: -251, + y_max: 246, + ha: 497, + o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z', + }, + timeSig6: { + x_min: 20, + x_max: 414, + y_min: -249, + y_max: 251, + ha: 500, + o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z', + }, + timeSig7: { + x_min: 20, + x_max: 421, + y_min: -250, + y_max: 249, + ha: 499, + o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z', + }, + timeSig8: { + x_min: 20, + x_max: 416, + y_min: -259, + y_max: 259, + ha: 518, + o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z', + }, + timeSig9: { + x_min: 20, + x_max: 414, + y_min: -249, + y_max: 251, + ha: 500, + o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z', + }, + timeSigCommon: { + x_min: 5, + x_max: 424, + y_min: -249, + y_max: 251, + ha: 500, + o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z', + }, + timeSigCutCommon: { + x_min: 0, + x_max: 418, + y_min: -359, + y_max: 361, + ha: 720, + o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z', + }, + timeSigPlus: { + x_min: -1, + x_max: 499, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z', + }, + timeSigPlusSmall: { + x_min: -1, + x_max: 255, + y_min: -133, + y_max: 123, + ha: 256, + o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z', + }, + timeSigMinus: { + x_min: 0, + x_max: 448, + y_min: -35, + y_max: 40, + ha: 75, + o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z', + }, + timeSigParensRight: { + x_min: 0, + x_max: 184, + y_min: -489, + y_max: 491, + ha: 980, + o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z', + }, + timeSigParensRightSmall: { + x_min: 0, + x_max: 110, + y_min: -251, + y_max: 249, + ha: 500, + o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z', + }, + timeSigParensLeft: { + x_min: 0, + x_max: 184, + y_min: -489, + y_max: 491, + ha: 980, + o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z', + }, + timeSigParensLeftSmall: { + x_min: 0, + x_max: 110, + y_min: -251, + y_max: 249, + ha: 500, + o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 599, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 422, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 295, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 295, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z', + }, + noteheadXDoubleWhole: { + x_min: 0, + x_max: 546, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z', + }, + noteheadXWhole: { + x_min: 0, + x_max: 377, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z', + }, + noteheadXHalf: { + x_min: 0, + x_max: 334, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 290, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z', + }, + noteheadCircleXDoubleWhole: { + x_min: 0, + x_max: 422, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z', + }, + noteheadCircleXWhole: { + x_min: 0, + x_max: 249, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z', + }, + noteheadCircleXHalf: { + x_min: 0, + x_max: 250, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 249, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z', + }, + noteheadCircledDoubleWhole: { + x_min: 0, + x_max: 603, + y_min: -218, + y_max: 213, + ha: 431, + o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z', + }, + noteheadCircledWhole: { + x_min: 0, + x_max: 437, + y_min: -225, + y_max: 211, + ha: 436, + o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z', + }, + noteheadCircledHalf: { + x_min: -18, + x_max: 311, + y_min: -162, + y_max: 167, + ha: 329, + o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z', + }, + noteheadCircledBlack: { + x_min: -21, + x_max: 321, + y_min: -171, + y_max: 167, + ha: 338, + o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z', + }, + noteheadDoubleWholeSquare: { + x_min: 0, + x_max: 416, + y_min: -190, + y_max: 198, + ha: 388, + o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z', + }, + noteheadSquareWhite: { + x_min: 0, + x_max: 313, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z', + }, + noteheadSquareBlack: { + x_min: 0, + x_max: 313, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z', + }, + noteheadTriangleDownDoubleWhole: { + x_min: 0, + x_max: 483, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z', + }, + noteheadTriangleDownWhole: { + x_min: 0, + x_max: 319, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z', + }, + noteheadTriangleDownHalf: { + x_min: 0, + x_max: 285, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z', + }, + noteheadTriangleDownBlack: { + x_min: 0, + x_max: 292, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 207 -180 l 420 180 l 0 180 z', + }, + noteheadTriangleUpDoubleWhole: { + x_min: 0, + x_max: 483, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z', + }, + noteheadTriangleUpWhole: { + x_min: 0, + x_max: 319, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z', + }, + noteheadTriangleUpHalf: { + x_min: 0, + x_max: 285, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 293, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 422 -180 l 207 180 l 0 -180 z', + }, + noteheadSlashedDoubleWhole1: { + x_min: 0, + x_max: 596, + y_min: -179, + y_max: 168, + ha: 347, + o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z', + }, + noteheadSlashedWhole1: { + x_min: -22, + x_max: 433, + y_min: -157, + y_max: 148, + ha: 305, + o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z', + }, + noteheadSlashedHalf1: { + x_min: -67, + x_max: 386, + y_min: -142, + y_max: 160, + ha: 302, + o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z', + }, + noteheadSlashedBlack1: { + x_min: -80, + x_max: 375, + y_min: -165, + y_max: 167, + ha: 332, + o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z', + }, + noteheadSlashedDoubleWhole2: { + x_min: 0, + x_max: 596, + y_min: -178, + y_max: 169, + ha: 347, + o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z', + }, + noteheadSlashedWhole2: { + x_min: -18, + x_max: 436, + y_min: -154, + y_max: 151, + ha: 305, + o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z', + }, + noteheadSlashedHalf2: { + x_min: -73, + x_max: 380, + y_min: -134, + y_max: 168, + ha: 302, + o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z', + }, + noteheadSlashedBlack2: { + x_min: -79, + x_max: 376, + y_min: -164, + y_max: 168, + ha: 332, + o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z', + }, + noteheadDiamondDoubleWhole: { + x_min: 0, + x_max: 432, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 270, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 251, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 250, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z', + }, + noteheadParenthesis: { + x_min: -73, + x_max: 368, + y_min: -180, + y_max: 182, + ha: 362, + o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z', + }, + noteheadParenthesisRight: { + x_min: -36, + x_max: 73, + y_min: -181, + y_max: 181, + ha: 362, + o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z', + }, + noteheadParenthesisLeft: { + x_min: 0, + x_max: 109, + y_min: -181, + y_max: 181, + ha: 362, + o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z', + }, + noteheadMoonBlack: { + x_min: 0, + x_max: 315, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z', + }, + noteheadTriangleLeftBlack: { + x_min: 0, + x_max: 339, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 488 -180 l 0 180 l 0 -180 z', + }, + noteheadTriangleRightBlack: { + x_min: 0, + x_max: 339, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 488 180 l 0 -180 l 488 -180 z', + }, + noteheadTriangleRoundDownBlack: { + x_min: 0, + x_max: 278, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z', + }, + augmentationDot: { + x_min: 0, + x_max: 100, + y_min: -50, + y_max: 50, + ha: 100, + o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z', + }, + tremolo1: { + x_min: -150, + x_max: 150, + y_min: -93, + y_max: 94, + ha: 187, + o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z', + }, + flag8thUp: { + x_min: 0, + x_max: 264, + y_min: -810, + y_max: 9, + ha: 819, + o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z', + }, + flag8thDown: { + x_min: 0, + x_max: 306, + y_min: -14, + y_max: 808, + ha: 822, + o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z', + }, + flag16thUp: { + x_min: 0, + x_max: 279, + y_min: -813, + y_max: 2, + ha: 815, + o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z', + }, + flag16thDown: { + x_min: 0, + x_max: 291, + y_min: -9, + y_max: 812, + ha: 821, + o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z', + }, + flag32ndUp: { + x_min: 0, + x_max: 261, + y_min: -812, + y_max: 149, + ha: 961, + o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', + }, + flag32ndDown: { + x_min: 0, + x_max: 273, + y_min: -172, + y_max: 812, + ha: 984, + o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z', + }, + flag64thUp: { + x_min: 0, + x_max: 261, + y_min: -812, + y_max: 347, + ha: 1159, + o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', + }, + flag64thDown: { + x_min: 0, + x_max: 273, + y_min: -376, + y_max: 812, + ha: 1188, + o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z', + }, + flag128thUp: { + x_min: 0, + x_max: 261, + y_min: -812, + y_max: 533, + ha: 1345, + o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', + }, + flag128thDown: { + x_min: 0, + x_max: 273, + y_min: -580, + y_max: 812, + ha: 1392, + o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z', + }, + accidentalFlat: { + x_min: 0, + x_max: 226, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 168, + y_min: -335, + y_max: 341, + ha: 676, + o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z', + }, + accidentalSharp: { + x_min: 0, + x_max: 249, + y_min: -348, + y_max: 350, + ha: 698, + o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 247, + y_min: -125, + y_max: 127, + ha: 252, + o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z', + }, + accidentalDoubleFlat: { + x_min: 0, + x_max: 411, + y_min: -175, + y_max: 437, + ha: 612, + o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z', + }, + accidentalParensLeft: { + x_min: 0, + x_max: 141, + y_min: -248, + y_max: 247, + ha: 495, + o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z', + }, + accidentalParensRight: { + x_min: 0, + x_max: 141, + y_min: -248, + y_max: 247, + ha: 495, + o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 1, + x_max: 227, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 1, + x_max: 466, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 179, + y_min: -353, + y_max: 307, + ha: 660, + o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: 3, + x_max: 317, + y_min: -347, + y_max: 369, + ha: 716, + o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z', + }, + accidentalBuyukMucennebFlat: { + x_min: 1, + x_max: 287, + y_min: -174, + y_max: 438, + ha: 612, + o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z', + }, + accidentalBuyukMucennebSharp: { + x_min: 0, + x_max: 341, + y_min: -350, + y_max: 348, + ha: 698, + o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z', + }, + accidentalBakiyeFlat: { + x_min: -1, + x_max: 286, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z', + }, + accidentalKomaSharp: { + x_min: 0, + x_max: 229, + y_min: -337, + y_max: 322, + ha: 659, + o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z', + }, + accidentalKucukMucennebSharp: { + x_min: -1, + x_max: 339, + y_min: -338, + y_max: 321, + ha: 659, + o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z', + }, + accidentalKoron: { + x_min: 0, + x_max: 300, + y_min: -472, + y_max: 157, + ha: 629, + o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z', + }, + accidentalSori: { + x_min: 0, + x_max: 421, + y_min: -318, + y_max: 328, + ha: 646, + o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z', + }, + articAccentAbove: { + x_min: 0, + x_max: 339, + y_min: 1, + y_max: 245, + ha: 244, + o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z', + }, + articAccentBelow: { + x_min: 0, + x_max: 339, + y_min: -244, + y_max: 0, + ha: 244, + o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z', + }, + articTenutoAbove: { + x_min: -1, + x_max: 338, + y_min: 0, + y_max: 48, + ha: 48, + o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z', + }, + articTenutoBelow: { + x_min: -1, + x_max: 338, + y_min: -48, + y_max: 0, + ha: 48, + o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z', + }, + articStaccatoAbove: { + x_min: 0, + x_max: 84, + y_min: 0, + y_max: 84, + ha: 84, + o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z', + }, + articStaccatoBelow: { + x_min: 0, + x_max: 84, + y_min: -84, + y_max: 0, + ha: 84, + o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z', + }, + articStaccatissimoAbove: { + x_min: 1, + x_max: 100, + y_min: -2, + y_max: 293, + ha: 295, + o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z', + }, + articStaccatissimoBelow: { + x_min: 1, + x_max: 100, + y_min: -295, + y_max: 0, + ha: 295, + o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z', + }, + articMarcatoAbove: { + x_min: -1, + x_max: 235, + y_min: -1, + y_max: 253, + ha: 254, + o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z', + }, + articMarcatoBelow: { + x_min: -1, + x_max: 235, + y_min: -254, + y_max: 0, + ha: 254, + o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z', + }, + fermataAbove: { + x_min: 3, + x_max: 605, + y_min: -3, + y_max: 329, + ha: 332, + o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z', + }, + fermataBelow: { + x_min: 3, + x_max: 605, + y_min: -332, + y_max: 0, + ha: 332, + o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z', + }, + fermataLongAbove: { + x_min: 0, + x_max: 603, + y_min: -1, + y_max: 333, + ha: 334, + o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z', + }, + fermataLongBelow: { + x_min: 0, + x_max: 603, + y_min: -333, + y_max: 1, + ha: 334, + o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z', + }, + fermataVeryLongAbove: { + x_min: 0, + x_max: 715, + y_min: 0, + y_max: 408, + ha: 408, + o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z', + }, + fermataVeryLongBelow: { + x_min: 0, + x_max: 715, + y_min: -408, + y_max: 0, + ha: 408, + o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z', + }, + fermataVeryShortAbove: { + x_min: 0, + x_max: 726, + y_min: 0, + y_max: 449, + ha: 449, + o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z', + }, + fermataVeryShortBelow: { + x_min: 0, + x_max: 726, + y_min: -449, + y_max: 0, + ha: 449, + o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z', + }, + fermataShortAbove: { + x_min: 0, + x_max: 604, + y_min: 0, + y_max: 341, + ha: 341, + o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z', + }, + fermataShortBelow: { + x_min: 0, + x_max: 604, + y_min: -341, + y_max: 0, + ha: 341, + o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z', + }, + breathMarkComma: { + x_min: 1, + x_max: 152, + y_min: 2, + y_max: 251, + ha: 249, + o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z', + }, + breathMarkUpbow: { + x_min: 1, + x_max: 249, + y_min: 1, + y_max: 495, + ha: 494, + o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z', + }, + caesura: { + x_min: 0, + x_max: 384, + y_min: -1, + y_max: 532, + ha: 533, + o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 373, + y_min: 0, + y_max: 530, + ha: 530, + o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z', + }, + restMaxima: { + x_min: 0, + x_max: 381, + y_min: -249, + y_max: 250, + ha: 499, + o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 125, + y_min: 0, + y_max: 250, + ha: 250, + o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z', + }, + restWhole: { + x_min: 0, + x_max: 282, + y_min: -135, + y_max: 9, + ha: 144, + o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z', + }, + restWholeLegerLine: { + x_min: -117, + x_max: 399, + y_min: -135, + y_max: 20, + ha: 155, + o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z', + }, + restHalf: { + x_min: 0, + x_max: 282, + y_min: -2, + y_max: 142, + ha: 144, + o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z', + }, + restHalfLegerLine: { + x_min: -117, + x_max: 399, + y_min: -13, + y_max: 142, + ha: 155, + o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z', + }, + restQuarter: { + x_min: 1, + x_max: 270, + y_min: -375, + y_max: 373, + ha: 748, + o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z', + }, + rest8th: { + x_min: 0, + x_max: 247, + y_min: -251, + y_max: 174, + ha: 425, + o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z', + }, + rest16th: { + x_min: 0, + x_max: 320, + y_min: -500, + y_max: 179, + ha: 679, + o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z', + }, + rest32nd: { + x_min: 0, + x_max: 363, + y_min: -500, + y_max: 426, + ha: 926, + o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z', + }, + rest64th: { + x_min: 0, + x_max: 423, + y_min: -753, + y_max: 430, + ha: 1183, + o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z', + }, + rest128th: { + x_min: 0, + x_max: 485, + y_min: -750, + y_max: 689, + ha: 1439, + o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z', + }, + dynamicPiano: { + x_min: -89, + x_max: 366, + y_min: -142, + y_max: 274, + ha: 416, + o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z', + }, + dynamicMezzo: { + x_min: -20, + x_max: 446, + y_min: -10, + y_max: 274, + ha: 284, + o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z', + }, + dynamicForte: { + x_min: -141, + x_max: 364, + y_min: -152, + y_max: 444, + ha: 596, + o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z', + }, + dynamicRinforzando: { + x_min: -20, + x_max: 277, + y_min: 0, + y_max: 274, + ha: 274, + o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z', + }, + dynamicSforzando: { + x_min: 0, + x_max: 229, + y_min: -10, + y_max: 273, + ha: 283, + o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z', + }, + dynamicZ: { + x_min: -30, + x_max: 244, + y_min: -10, + y_max: 268, + ha: 278, + o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z', + }, + ornamentTrill: { + x_min: 0, + x_max: 521, + y_min: -10, + y_max: 390, + ha: 400, + o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z', + }, + ornamentTurn: { + x_min: 0, + x_max: 460, + y_min: 0, + y_max: 218, + ha: 218, + o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z', + }, + ornamentTurnSlash: { + x_min: 0, + x_max: 460, + y_min: -90, + y_max: 306, + ha: 396, + o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z', + }, + ornamentMordent: { + x_min: 1, + x_max: 729, + y_min: -73, + y_max: 319, + ha: 392, + o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z', + }, + ornamentShortTrill: { + x_min: 0, + x_max: 725, + y_min: 0, + y_max: 245, + ha: 245, + o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z', + }, + ornamentTremblement: { + x_min: 1, + x_max: 985, + y_min: 0, + y_max: 244, + ha: 244, + o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z', + }, + ornamentPrecompAppoggTrill: { + x_min: 0, + x_max: 1119, + y_min: 0, + y_max: 481, + ha: 481, + o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: 2, + x_max: 1150, + y_min: -367, + y_max: 245, + ha: 612, + o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: 0, + x_max: 1048, + y_min: -367, + y_max: 331, + ha: 698, + o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: 0, + x_max: 949, + y_min: 0, + y_max: 381, + ha: 381, + o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: 0, + x_max: 1278, + y_min: 0, + y_max: 247, + ha: 247, + o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z', + }, + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: 0, + x_max: 1277, + y_min: -62, + y_max: 333, + ha: 395, + o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: 0, + x_max: 859, + y_min: -222, + y_max: 246, + ha: 468, + o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z', + }, + brassScoop: { + x_min: 1, + x_max: 320, + y_min: -373, + y_max: 13, + ha: 386, + o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z', + }, + brassDoitMedium: { + x_min: 0, + x_max: 489, + y_min: -40, + y_max: 346, + ha: 386, + o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z', + }, + brassFallLipShort: { + x_min: 1, + x_max: 293, + y_min: -345, + y_max: 42, + ha: 387, + o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z', + }, + brassLiftMedium: { + x_min: 0, + x_max: 811, + y_min: 0, + y_max: 852, + ha: 852, + o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z', + }, + brassFallRoughMedium: { + x_min: 0, + x_max: 811, + y_min: 0, + y_max: 852, + ha: 852, + o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z', + }, + brassBend: { + x_min: 0, + x_max: 392, + y_min: 0, + y_max: 282, + ha: 282, + o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z', + }, + brassMuteClosed: { + x_min: 0, + x_max: 272, + y_min: 0, + y_max: 272, + ha: 272, + o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z', + }, + brassMuteOpen: { + x_min: 0, + x_max: 304, + y_min: 0, + y_max: 304, + ha: 304, + o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z', + }, + brassFlip: { + x_min: 0, + x_max: 379, + y_min: 0, + y_max: 282, + ha: 282, + o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z', + }, + brassJazzTurn: { + x_min: 0, + x_max: 620, + y_min: 0, + y_max: 245, + ha: 245, + o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z', + }, + brassSmear: { + x_min: 1, + x_max: 306, + y_min: 0, + y_max: 170, + ha: 170, + o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z', + }, + stringsDownBow: { + x_min: 0, + x_max: 312, + y_min: 0, + y_max: 318, + ha: 318, + o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z', + }, + stringsUpBow: { + x_min: 1, + x_max: 249, + y_min: 1, + y_max: 495, + ha: 494, + o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z', + }, + stringsHarmonic: { + x_min: 0, + x_max: 200, + y_min: 0, + y_max: 200, + ha: 200, + o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: 0, + x_max: 200, + y_min: 0, + y_max: 300, + ha: 300, + o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: 0, + x_max: 200, + y_min: 0, + y_max: 300, + ha: 300, + o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z', + }, + pluckedLeftHandPizzicato: { + x_min: 0, + x_max: 272, + y_min: 0, + y_max: 272, + ha: 272, + o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 1019, + y_min: -8, + y_max: 555, + ha: 563, + o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 450, + y_min: 0, + y_max: 450, + ha: 450, + o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z', + }, + pictChokeCymbal: { + x_min: 1, + x_max: 152, + y_min: 2, + y_max: 251, + ha: 249, + o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z', + }, + wiggleArpeggiatoUp: { + x_min: -33, + x_max: 292, + y_min: 0, + y_max: 119, + ha: 119, + o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z', + }, + arrowheadBlackUp: { + x_min: 0, + x_max: 228, + y_min: 0, + y_max: 299, + ha: 299, + o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z', + }, + arrowheadBlackDown: { + x_min: 0, + x_max: 228, + y_min: 0, + y_max: 299, + ha: 299, + o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z', + }, + arpeggiatoUp: { + x_min: 1, + x_max: 229, + y_min: 7, + y_max: 1511, + ha: 1504, + o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z', + }, + arpeggiatoDown: { + x_min: 1, + x_max: 229, + y_min: -4, + y_max: 1500, + ha: 1504, + o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z', + }, + repeat1Bar: { + x_min: 0, + x_max: 532, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z', + }, + repeat2Bars: { + x_min: 0, + x_max: 762, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z', + }, + repeat4Bars: { + x_min: 0, + x_max: 1232, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z', + }, + repeatBarSlash: { + x_min: 0, + x_max: 532, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z', + }, + csymDiminished: { + x_min: 0, + x_max: 473, + y_min: 0, + y_max: 473, + ha: 473, + o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z', + }, + csymHalfDiminished: { + x_min: -16, + x_max: 488, + y_min: -15, + y_max: 489, + ha: 504, + o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z', + }, + csymAugmented: { + x_min: 0, + x_max: 395, + y_min: 1, + y_max: 396, + ha: 395, + o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z', + }, + csymMajorSeventh: { + x_min: 0, + x_max: 558, + y_min: 1, + y_max: 477, + ha: 476, + o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z', + }, + csymMinor: { + x_min: 0, + x_max: 325, + y_min: 216, + y_max: 260, + ha: 44, + o: 'm 468 374 l 0 374 l 0 311 l 468 311 z', + }, + csymParensLeftTall: { + x_min: 1, + x_max: 185, + y_min: 0, + y_max: 997, + ha: 997, + o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z', + }, + csymParensRightTall: { + x_min: -20, + x_max: 164, + y_min: 0, + y_max: 997, + ha: 997, + o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z', + }, + csymBracketLeftTall: { + x_min: 0, + x_max: 155, + y_min: 0, + y_max: 1000, + ha: 1000, + o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z', + }, + csymBracketRightTall: { + x_min: 1, + x_max: 156, + y_min: 0, + y_max: 1000, + ha: 1000, + o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z', + }, + csymParensLeftVeryTall: { + x_min: 0, + x_max: 122, + y_min: 0, + y_max: 993, + ha: 993, + o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z', + }, + csymParensRightVeryTall: { + x_min: -15, + x_max: 107, + y_min: 0, + y_max: 993, + ha: 993, + o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z', + }, + csymDiagonalArrangementSlash: { + x_min: 0, + x_max: 999, + y_min: 0, + y_max: 1000, + ha: 1000, + o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z', + }, + accSagittal5v7KleismaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z', + }, + accSagittal5v7KleismaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z', + }, + accSagittal5CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z', + }, + accSagittal5CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z', + }, + accSagittal7CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z', + }, + accSagittal7CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z', + }, + accSagittal25SmallDiesisUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z', + }, + accSagittal25SmallDiesisDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z', + }, + accSagittal35MediumDiesisUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z', + }, + accSagittal35MediumDiesisDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z', + }, + accSagittal11MediumDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z', + }, + accSagittal11MediumDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z', + }, + accSagittal11LargeDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z', + }, + accSagittal11LargeDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittal35LargeDiesisUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittal35LargeDiesisDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittalSharp25SDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z', + }, + accSagittalFlat25SUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z', + }, + accSagittalSharp7CDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z', + }, + accSagittalFlat7CUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z', + }, + accSagittalSharp5CDown: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z', + }, + accSagittalFlat5CUp: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z', + }, + accSagittalSharp5v7kDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z', + }, + accSagittalFlat5v7kUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z', + }, + accSagittalSharp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z', + }, + accSagittalFlat: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z', + }, + accSagittalSharp5v7kUp: { + x_min: 0, + x_max: 312, + y_min: -361, + y_max: 172, + ha: 533, + o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z', + }, + accSagittalFlat5v7kDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 361, + ha: 533, + o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z', + }, + accSagittalSharp5CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z', + }, + accSagittalFlat5CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z', + }, + accSagittalSharp7CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z', + }, + accSagittalFlat7CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z', + }, + accSagittalSharp25SUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z', + }, + accSagittalFlat25SDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z', + }, + accSagittalSharp35MUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z', + }, + accSagittalFlat35MDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z', + }, + accSagittalSharp11MUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z', + }, + accSagittalFlat11MDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z', + }, + accSagittalSharp11LUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalFlat11LDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalSharp35LUp: { + x_min: 0, + x_max: 500, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalFlat35LDown: { + x_min: 0, + x_max: 500, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalDoubleSharp25SDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z', + }, + accSagittalDoubleFlat25SUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z', + }, + accSagittalDoubleSharp7CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z', + }, + accSagittalDoubleFlat7CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z', + }, + accSagittalDoubleSharp5CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z', + }, + accSagittalDoubleFlat5CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z', + }, + accSagittalDoubleSharp5v7kDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z', + }, + accSagittalDoubleFlat5v7kUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z', + }, + accSagittalDoubleSharp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z', + }, + accSagittalDoubleFlat: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z', + }, + accSagittal7v11KleismaUp: { + x_min: 0, + x_max: 219, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z', + }, + accSagittal7v11KleismaDown: { + x_min: 0, + x_max: 219, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z', + }, + accSagittal17CommaUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal17CommaDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal55CommaUp: { + x_min: 0, + x_max: 219, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z', + }, + accSagittal55CommaDown: { + x_min: 0, + x_max: 219, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z', + }, + accSagittal7v11CommaUp: { + x_min: 0, + x_max: 188, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z', + }, + accSagittal7v11CommaDown: { + x_min: 0, + x_max: 188, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittal5v11SmallDiesisUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z', + }, + accSagittal5v11SmallDiesisDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittalSharp5v11SDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z', + }, + accSagittalFlat5v11SUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', + }, + accSagittalSharp7v11CDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z', + }, + accSagittalFlat7v11CUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z', + }, + accSagittalSharp55CDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z', + }, + accSagittalFlat55CUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z', + }, + accSagittalSharp17CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z', + }, + accSagittalFlat17CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z', + }, + accSagittalSharp7v11kDown: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z', + }, + accSagittalFlat7v11kUp: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z', + }, + accSagittalSharp7v11kUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z', + }, + accSagittalFlat7v11kDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z', + }, + accSagittalSharp17CUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat17CDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp55CUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z', + }, + accSagittalFlat55CDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z', + }, + accSagittalSharp7v11CUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z', + }, + accSagittalFlat7v11CDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z', + }, + accSagittalSharp5v11SUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z', + }, + accSagittalFlat5v11SDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalDoubleSharp5v11SDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalDoubleFlat5v11SUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalDoubleSharp7v11CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z', + }, + accSagittalDoubleFlat7v11CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z', + }, + accSagittalDoubleSharp55CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z', + }, + accSagittalDoubleFlat55CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z', + }, + accSagittalDoubleSharp17CDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z', + }, + accSagittalDoubleFlat17CUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z', + }, + accSagittalDoubleSharp7v11kDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z', + }, + accSagittalDoubleFlat7v11kUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z', + }, + accSagittal23CommaUp: { + x_min: 0, + x_max: 188, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z', + }, + accSagittal23CommaDown: { + x_min: 0, + x_max: 188, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z', + }, + accSagittal5v19CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z', + }, + accSagittal5v19CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z', + }, + accSagittal5v23SmallDiesisUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z', + }, + accSagittal5v23SmallDiesisDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z', + }, + accSagittalSharp5v23SDown: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z', + }, + accSagittalFlat5v23SUp: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z', + }, + accSagittalSharp5v19CDown: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z', + }, + accSagittalFlat5v19CUp: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z', + }, + accSagittalSharp23CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z', + }, + accSagittalFlat23CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z', + }, + accSagittalSharp23CUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z', + }, + accSagittalFlat23CDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z', + }, + accSagittalSharp5v19CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z', + }, + accSagittalFlat5v19CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z', + }, + accSagittalSharp5v23SUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z', + }, + accSagittalFlat5v23SDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z', + }, + accSagittalDoubleSharp5v23SDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z', + }, + accSagittalDoubleFlat5v23SUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z', + }, + accSagittalDoubleSharp5v19CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z', + }, + accSagittalDoubleFlat5v19CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z', + }, + accSagittalDoubleSharp23CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z', + }, + accSagittalDoubleFlat23CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z', + }, + accSagittal19SchismaUp: { + x_min: 0, + x_max: 125, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z', + }, + accSagittal19SchismaDown: { + x_min: 0, + x_max: 125, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z', + }, + accSagittal17KleismaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal17KleismaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal143CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z', + }, + accSagittal143CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal11v49CommaUp: { + x_min: 0, + x_max: 188, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z', + }, + accSagittal11v49CommaDown: { + x_min: 0, + x_max: 188, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z', + }, + accSagittal19CommaUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z', + }, + accSagittal19CommaDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z', + }, + accSagittal7v19CommaUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z', + }, + accSagittal7v19CommaDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z', + }, + accSagittal49SmallDiesisUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal49SmallDiesisDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal23SmallDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal23SmallDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal5v13MediumDiesisUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z', + }, + accSagittal5v13MediumDiesisDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z', + }, + accSagittal11v19MediumDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z', + }, + accSagittal11v19MediumDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z', + }, + accSagittal49MediumDiesisUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z', + }, + accSagittal49MediumDiesisDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z', + }, + accSagittal5v49MediumDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z', + }, + accSagittal5v49MediumDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z', + }, + accSagittal49LargeDiesisUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z', + }, + accSagittal49LargeDiesisDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z', + }, + accSagittal11v19LargeDiesisUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z', + }, + accSagittal11v19LargeDiesisDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z', + }, + accSagittal5v13LargeDiesisUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z', + }, + accSagittal5v13LargeDiesisDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z', + }, + accSagittalSharp23SDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z', + }, + accSagittalFlat23SUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', + }, + accSagittalSharp49SDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z', + }, + accSagittalFlat49SUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z', + }, + accSagittalSharp7v19CDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z', + }, + accSagittalFlat7v19CUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z', + }, + accSagittalSharp19CDown: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z', + }, + accSagittalFlat19CUp: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z', + }, + accSagittalSharp11v49CDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z', + }, + accSagittalFlat11v49CUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z', + }, + accSagittalSharp143CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z', + }, + accSagittalFlat143CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', + }, + accSagittalSharp17kDown: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z', + }, + accSagittalFlat17kUp: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z', + }, + accSagittalSharp19sDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z', + }, + accSagittalFlat19sUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z', + }, + accSagittalSharp19sUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z', + }, + accSagittalFlat19sDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z', + }, + accSagittalSharp17kUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat17kDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp143CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z', + }, + accSagittalFlat143CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp11v49CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z', + }, + accSagittalFlat11v49CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z', + }, + accSagittalSharp19CUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', + }, + accSagittalFlat19CDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', + }, + accSagittalSharp7v19CUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', + }, + accSagittalFlat7v19CDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', + }, + accSagittalSharp49SUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat49SDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp23SUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat23SDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp5v13MUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z', + }, + accSagittalFlat5v13MDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z', + }, + accSagittalSharp11v19MUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalFlat11v19MDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalSharp49MUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z', + }, + accSagittalFlat49MDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z', + }, + accSagittalSharp5v49MUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z', + }, + accSagittalFlat5v49MDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z', + }, + accSagittalSharp49LUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z', + }, + accSagittalFlat49LDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z', + }, + accSagittalSharp11v19LUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z', + }, + accSagittalFlat11v19LDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z', + }, + accSagittalSharp5v13LUp: { + x_min: 0, + x_max: 500, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', + }, + accSagittalFlat5v13LDown: { + x_min: 0, + x_max: 500, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', + }, + accSagittalDoubleSharp23SDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z', + }, + accSagittalDoubleFlat23SUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z', + }, + accSagittalDoubleSharp49SDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z', + }, + accSagittalDoubleFlat49SUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z', + }, + accSagittalDoubleSharp7v19CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z', + }, + accSagittalDoubleFlat7v19CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z', + }, + accSagittalDoubleSharp19CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z', + }, + accSagittalDoubleFlat19CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z', + }, + accSagittalDoubleSharp11v49CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalDoubleFlat11v49CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalDoubleSharp143CDown: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalDoubleFlat143CUp: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalDoubleSharp17kDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z', + }, + accSagittalDoubleFlat17kUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z', + }, + accSagittalDoubleSharp19sDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalDoubleFlat19sUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittalShaftUp: { + x_min: 0, + x_max: 31, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z', + }, + accSagittalShaftDown: { + x_min: 0, + x_max: 31, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z', + }, + accSagittalAcute: { + x_min: 0, + x_max: 125, + y_min: -62, + y_max: 125, + ha: 187, + o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z', + }, + accSagittalGrave: { + x_min: 0, + x_max: 125, + y_min: -125, + y_max: 62, + ha: 187, + o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z', + }, + accSagittal1MinaUp: { + x_min: -7, + x_max: 124, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal1MinaDown: { + x_min: -7, + x_max: 124, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal2MinasUp: { + x_min: -7, + x_max: 218, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal2MinasDown: { + x_min: -7, + x_max: 218, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal1TinaUp: { + x_min: 0, + x_max: 93, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z', + }, + accSagittal1TinaDown: { + x_min: 0, + x_max: 93, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z', + }, + accSagittal2TinasUp: { + x_min: 0, + x_max: 94, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', + }, + accSagittal2TinasDown: { + x_min: 0, + x_max: 94, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z', + }, + accSagittal3TinasUp: { + x_min: -7, + x_max: 124, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal3TinasDown: { + x_min: -7, + x_max: 124, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal4TinasUp: { + x_min: 0, + x_max: 187, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z', + }, + accSagittal4TinasDown: { + x_min: 0, + x_max: 187, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z', + }, + accSagittal5TinasUp: { + x_min: 0, + x_max: 218, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', + }, + accSagittal5TinasDown: { + x_min: 0, + x_max: 218, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z', + }, + accSagittal6TinasUp: { + x_min: -7, + x_max: 218, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal6TinasDown: { + x_min: -7, + x_max: 218, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal7TinasUp: { + x_min: 0, + x_max: 281, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z', + }, + accSagittal7TinasDown: { + x_min: 0, + x_max: 281, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z', + }, + accSagittal8TinasUp: { + x_min: 0, + x_max: 312, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', + }, + accSagittal8TinasDown: { + x_min: 0, + x_max: 312, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z', + }, + accSagittal9TinasUp: { + x_min: -7, + x_max: 312, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal9TinasDown: { + x_min: -7, + x_max: 312, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittalFractionalTinaUp: { + x_min: -3, + x_max: 35, + y_min: 73, + y_max: 111, + ha: 38, + o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z', + }, + accSagittalFractionalTinaDown: { + x_min: -3, + x_max: 35, + y_min: -111, + y_max: -73, + ha: 38, + o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z', + }, + accidentalNarrowReversedFlat: { + x_min: 0, + x_max: 164, + y_min: -194, + y_max: 421, + ha: 615, + o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z', + }, + accidentalNarrowReversedFlatAndFlat: { + x_min: 0, + x_max: 414, + y_min: -194, + y_max: 421, + ha: 615, + o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z', + }, + accidentalWilsonPlus: { + x_min: 0, + x_max: 281, + y_min: -203, + y_max: 203, + ha: 406, + o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z', + }, + accidentalWilsonMinus: { + x_min: 0, + x_max: 281, + y_min: -186, + y_max: 186, + ha: 372, + o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z', + }, + }, + fontFamily: 'Bravura', + resolution: 1000, + generatedOn: '2022-12-18T09:06:51.407Z', +}; + + +/***/ }), + +/***/ "./src/fonts/common_metrics.ts": +/*!*************************************!*\ + !*** ./src/fonts/common_metrics.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CommonMetrics": () => (/* binding */ CommonMetrics) +/* harmony export */ }); +const CommonMetrics = { + smufl: true, + stave: { + padding: 12, + endPaddingMax: 10, + endPaddingMin: 5, + unalignedNotePadding: 10, + }, + accidental: { + noteheadAccidentalPadding: 1, + leftPadding: 2, + accidentalSpacing: 3, + }, + chordSymbol: { + global: { + superscriptOffset: -400, + subscriptOffset: 300, + kerningOffset: -250, + lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'], + upperKerningText: ['A', 'L'], + spacing: 100, + superSubRatio: 0.66, + }, + glyphs: { + csymDiminished: { + leftSideBearing: -32, + advanceWidth: 506, + yOffset: 0, + }, + csymHalfDiminished: { + leftSideBearing: -32, + advanceWidth: 506, + yOffset: 0, + }, + csymAugmented: { + leftSideBearing: 0, + advanceWidth: 530, + yOffset: 0, + }, + csymParensLeftTall: { + leftSideBearing: -20, + advanceWidth: 184, + yOffset: 250, + }, + csymParensRightTall: { + leftSideBearing: 0, + advanceWidth: 189, + yOffset: 250, + }, + csymBracketLeftTall: { + leftSideBearing: 0, + advanceWidth: 328, + yOffset: 0, + }, + csymBracketRightTall: { + leftSideBearing: 1, + advanceWidth: 600, + yOffset: 0, + }, + csymParensLeftVeryTall: { + leftSideBearing: 50, + advanceWidth: 121, + yOffset: 350, + }, + csymParensRightVeryTall: { + leftSideBearing: 0, + advanceWidth: 111, + yOffset: 350, + }, + csymDiagonalArrangementSlash: { + leftSideBearing: 250, + advanceWidth: 990, + yOffset: 300, + }, + csymMinor: { + leftSideBearing: 0, + advanceWidth: 482, + yOffset: 0, + }, + csymMajorSeventh: { + leftSideBearing: 200, + yOffset: 0, + advanceWidth: 600, + }, + accidentalSharp: { + leftSideBearing: 20, + advanceWidth: 250, + yOffset: -302, + }, + accidentalFlat: { + leftSideBearing: -20, + advanceWidth: 226, + yOffset: -184, + }, + }, + }, + clef_default: { + width: 26, + annotations: { + '8va': { + treble: { + line: -2, + shiftX: 12, + }, + }, + '8vb': { + treble: { + line: 6.5, + shiftX: 10, + }, + bass: { + line: 4, + shiftX: 1, + }, + }, + }, + }, + clef_small: { + width: 20, + annotations: { + '8va': { + treble: { + line: -0.2, + shiftX: 8, + }, + }, + '8vb': { + treble: { + line: 5.3, + shiftX: 6, + }, + bass: { + line: 3.1, + shiftX: 0.5, + }, + }, + }, + }, + ornament: { + brassScoop: { + xOffset: -12, + yOffset: 0, + stemUpYOffset: 0, + reportedWidth: 20, + }, + brassDoitMedium: { + xOffset: 16, + yOffset: 0, + stemUpYOffset: 0, + reportedWidth: 22, + }, + brassFallLipShort: { + xOffset: 16, + yOffset: 0, + stemUpYOffset: 0, + reportedWidth: 15, + }, + brassLiftMedium: { + xOffset: 16, + yOffset: 5, + stemUpYOffset: 0, + reportedWidth: 5, + }, + brassFallRoughMedium: { + xOffset: 16, + yOffset: 28, + stemUpYOffset: 0, + reportedWidth: 5, + }, + brassBend: { + xOffset: 2, + yOffset: -8, + stemUpYOffset: 25, + reportedWidth: 5, + }, + brassMuteClosed: { + xOffset: 3, + yOffset: -8, + stemUpYOffset: 25, + reportedWidth: 5, + }, + brassMuteOpen: { + xOffset: 3, + yOffset: -7, + stemUpYOffset: 25, + reportedWidth: 5, + }, + brassFlip: { + xOffset: 10, + yOffset: 0, + stemUpYOffset: 7, + reportedWidth: 10, + }, + brassJazzTurn: { + xOffset: 0, + yOffset: 0, + stemUpYOffset: 8, + reportedWidth: 31, + }, + brassSmear: { + xOffset: 10, + yOffset: 0, + stemUpYOffset: 8, + reportedWidth: 5, + }, + }, + parenthesis: { + default: { + width: 7, + }, + gracenote: { + width: 3, + }, + }, + pedalMarking: {}, + // These are for numeric digits, such as in time signatures + digits: { + // used by TimeSignature objects + shiftLine: -1, + // used by tuplets + shiftY: -6, + }, + articulation: { + articStaccatissimoAbove: { + padding: 2, + }, + articStaccatissimoBelow: { + padding: 2, + }, + }, + tremolo: { + default: { + spacing: 7, + offsetYStemUp: -8, + offsetYStemDown: 8, + offsetXStemUp: 11, + offsetXStemDown: 1, + }, + grace: { + spacing: (7 * 3) / 5, + offsetYStemUp: -(8 * 3) / 5, + offsetYStemDown: (8 * 3) / 5, + offsetXStemUp: 7, + offsetXStemDown: 1, + }, + }, + staveRepetition: { + symbolText: { + offsetX: 12, + offsetY: 25, + spacing: 5, + }, + coda: { + offsetY: 25, + }, + segno: { + offsetY: 10, + }, + }, + noteHead: { + minPadding: 2, + }, + stem: { + heightAdjustmentForFlag: -3, + // These are stem (Y) offsets to the note heads. To shift the + // noteheads (x-position) themselves, see glyphs.notehead.custom. + noteHead: { + noteheadTriangleUpHalf: { + offsetYBaseStemUp: 5, + offsetYBaseStemDown: 4, + }, + noteheadTriangleUpBlack: { + offsetYBaseStemUp: 5, + offsetYBaseStemDown: 4, + }, + noteheadTriangleUpWhole: { + offsetYBaseStemUp: 5, + offsetYBaseStemDown: 4, + }, + noteheadXHalf: { + offsetYBaseStemUp: -4, + offsetYBaseStemDown: 4, + }, + noteheadXBlack: { + offsetYBaseStemUp: -4, + offsetYBaseStemDown: 4, + }, + noteheadXWhole: { + offsetYBaseStemUp: -4, + offsetYBaseStemDown: 4, + }, + noteheadHalf: { + offsetYBaseStemUp: -2.55, + offsetYBaseStemDown: 2.65, + }, + noteheadBlack: { + offsetYBaseStemUp: -2, + offsetYBaseStemDown: 2, + }, + noteheadSquareWhite: { + offsetYBaseStemDown: -5, + offsetYBaseStemUp: 5, + }, + }, + }, + stringNumber: { + verticalPadding: 8, + stemPadding: 2, + leftPadding: 5, + rightPadding: 6, + }, + tuplet: { + noteHeadOffset: 20, + stemOffset: 10, + bottomLine: 4, + topModifierOffset: 15, + }, + // Values under here are used by the Glyph class to reposition and rescale + // glyphs based on their category. This should be the first stop for + // custom font glyph repositioning. + // + // The glyph loader first looks up a specific set of settings based on the + // glyph code, and if not found, uses the defaults from the category. See + // glyphs.textNote for an example of this. + // + // Details in Glyph.lookupFontMetrics. + glyphs: { + coda: { + shiftX: -7, + shiftY: 8, + }, + segno: { + shiftX: -7, + }, + flag: { + shiftX: -0.75, + staveTempo: { + shiftX: -1, + }, + }, + clef_default: {}, + clef_small: { + gClef: { + shiftY: 1.5, + }, + }, + clefNote_default: {}, + clefNote_small: {}, + stroke_straight: { + arrowheadBlackDown: { + shiftX: -4.5, + }, + arrowheadBlackUp: { + shiftX: -0.85, + }, + }, + stroke_wiggly: { + arrowheadBlackDown: { + shiftX: -1, + shiftY: 1, + }, + arrowheadBlackUp: { + shiftX: -1, + shiftY: 1, + }, + }, + textNote: { + breathMarkTick: { + shiftY: 9, + }, + breathMarkComma: {}, + segno: { + shiftX: -7, + shiftY: 8, + }, + coda: { + shiftX: -7, + shiftY: 8, + }, + ornamentTrill: { + shiftX: -8, + shiftY: 8, + }, + ornamentTurn: {}, + ornamentTurnSlash: {}, + ornamentMordent: { + shiftX: -8, + }, + ornamentShortTrill: { + shiftX: -8, + }, + }, + noteHead: {}, + chordSymbol: { + scale: 0.8, + }, + }, +}; + + +/***/ }), + +/***/ "./src/fonts/custom_glyphs.ts": +/*!************************************!*\ + !*** ./src/fonts/custom_glyphs.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CustomFont": () => (/* binding */ CustomFont) +/* harmony export */ }); +const CustomFont = { + resolution: 1000, + fontFamily: 'VexFlowCustom', + glyphs: { + vexAccidentalMicrotonal1: { + x_min: -171.5, + x_max: 483.1875, + ha: 493, + o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ', + }, + vexAccidentalMicrotonal3: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ', + }, + vexAccidentalMicrotonal4: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ', + }, + vexNoteHeadRectBlack: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ', + }, + vexNoteHeadRectWhite: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100', + }, + vexWiggleArpeggioUp: { + x_min: 58.53125, + x_max: 228.671875, + ha: 294, + o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ', + }, + }, +}; + + +/***/ }), + +/***/ "./src/fonts/gonville_glyphs.ts": +/*!**************************************!*\ + !*** ./src/fonts/gonville_glyphs.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GonvilleSmuflFont": () => (/* binding */ GonvilleSmuflFont) +/* harmony export */ }); +const GonvilleSmuflFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 412, + y_min: -18, + y_max: 223, + ha: 241, + o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z', + }, + bracketBottom: { + x_min: 0, + x_max: 412, + y_min: -223, + y_max: 18, + ha: 241, + o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z', + }, + barlineTick: { + x_min: -59, + x_max: 59, + y_min: -139, + y_max: 139, + ha: 279, + o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z', + }, + breathMarkTick: { + x_min: -151, + x_max: 272, + y_min: 0, + y_max: 429, + ha: 429, + o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z', + }, + segno: { + x_min: 7, + x_max: 493, + y_min: -50, + y_max: 650, + ha: 699, + o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z', + }, + coda: { + x_min: 22, + x_max: 478, + y_min: -31, + y_max: 531, + ha: 563, + o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z', + }, + gClef: { + x_min: 0, + x_max: 623, + y_min: -632, + y_max: 1082, + ha: 1713, + o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z', + }, + cClef: { + x_min: 0, + x_max: 643, + y_min: -508, + y_max: 508, + ha: 1016, + o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z', + }, + fClef: { + x_min: 0, + x_max: 661, + y_min: -545, + y_max: 254, + ha: 798, + o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z', + }, + unpitchedPercussionClef1: { + x_min: -4, + x_max: 337, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z', + }, + '6stringTabClef': { + x_min: 0, + x_max: 501, + y_min: -735, + y_max: 753, + ha: 1487, + o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z', + }, + timeSig0: { + x_min: 0, + x_max: 380, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z', + }, + timeSig1: { + x_min: 0, + x_max: 254, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z', + }, + timeSig2: { + x_min: 0, + x_max: 337, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z', + }, + timeSig3: { + x_min: 0, + x_max: 302, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z', + }, + timeSig4: { + x_min: 0, + x_max: 345, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z', + }, + timeSig5: { + x_min: 0, + x_max: 302, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z', + }, + timeSig6: { + x_min: 0, + x_max: 349, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z', + }, + timeSig7: { + x_min: 0, + x_max: 326, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z', + }, + timeSig8: { + x_min: 0, + x_max: 360, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z', + }, + timeSig9: { + x_min: 0, + x_max: 349, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z', + }, + timeSigCommon: { + x_min: 0, + x_max: 409, + y_min: -233, + y_max: 233, + ha: 466, + o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z', + }, + timeSigCutCommon: { + x_min: 0, + x_max: 409, + y_min: -394, + y_max: 394, + ha: 788, + o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z', + }, + timeSigPlus: { + x_min: 0, + x_max: 235, + y_min: -118, + y_max: 118, + ha: 235, + o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z', + }, + timeSigPlusSmall: { + x_min: 0, + x_max: 235, + y_min: -118, + y_max: 118, + ha: 235, + o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z', + }, + timeSigMinus: { + x_min: 0, + x_max: 235, + y_min: -23, + y_max: 23, + ha: 46, + o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z', + }, + timeSigParensRight: { + x_min: 19, + x_max: 122, + y_min: -267, + y_max: 267, + ha: 535, + o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z', + }, + timeSigParensRightSmall: { + x_min: 19, + x_max: 122, + y_min: -267, + y_max: 267, + ha: 535, + o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z', + }, + timeSigParensLeft: { + x_min: -122, + x_max: -19, + y_min: -267, + y_max: 267, + ha: 534, + o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z', + }, + timeSigParensLeftSmall: { + x_min: -122, + x_max: -19, + y_min: -267, + y_max: 267, + ha: 534, + o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 663, + y_min: -174, + y_max: 174, + ha: 349, + o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 455, + y_min: -135, + y_max: 135, + ha: 269, + o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 316, + y_min: -135, + y_max: 135, + ha: 269, + o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 316, + y_min: -135, + y_max: 135, + ha: 269, + o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z', + }, + noteheadXWhole: { + x_min: 0, + x_max: 440, + y_min: -133, + y_max: 133, + ha: 265, + o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z', + }, + noteheadXHalf: { + x_min: 0, + x_max: 300, + y_min: -133, + y_max: 133, + ha: 265, + o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 300, + y_min: -133, + y_max: 133, + ha: 265, + o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 357, + y_min: -178, + y_max: 178, + ha: 357, + o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z', + }, + noteheadTriangleUpWhole: { + x_min: 0, + x_max: 462, + y_min: -149, + y_max: 149, + ha: 297, + o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z', + }, + noteheadTriangleUpHalf: { + x_min: 0, + x_max: 323, + y_min: -149, + y_max: 149, + ha: 298, + o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 322, + y_min: -149, + y_max: 149, + ha: 297, + o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 462, + y_min: -138, + y_max: 138, + ha: 277, + o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 322, + y_min: -138, + y_max: 138, + ha: 277, + o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 322, + y_min: -138, + y_max: 138, + ha: 277, + o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z', + }, + augmentationDot: { + x_min: -63, + x_max: 63, + y_min: -63, + y_max: 63, + ha: 126, + o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z', + }, + tremolo1: { + x_min: -252, + x_max: 216, + y_min: -185, + y_max: 148, + ha: 333, + o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z', + }, + flag8thUp: { + x_min: -17, + x_max: 234, + y_min: -745, + y_max: -4, + ha: 741, + o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z', + }, + flag8thDown: { + x_min: -15, + x_max: 271, + y_min: 4, + y_max: 745, + ha: 741, + o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z', + }, + flag16thUp: { + x_min: -17, + x_max: 234, + y_min: -847, + y_max: -4, + ha: 843, + o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z', + }, + flag16thDown: { + x_min: -15, + x_max: 267, + y_min: 4, + y_max: 745, + ha: 741, + o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z', + }, + flag32ndUp: { + x_min: -17, + x_max: 233, + y_min: -1005, + y_max: 96, + ha: 1101, + o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z', + }, + flag32ndDown: { + x_min: -15, + x_max: 270, + y_min: -96, + y_max: 895, + ha: 991, + o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z', + }, + flag64thUp: { + x_min: -17, + x_max: 233, + y_min: -933, + y_max: 296, + ha: 1230, + o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z', + }, + flag64thDown: { + x_min: -15, + x_max: 271, + y_min: -296, + y_max: 820, + ha: 1116, + o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z', + }, + flag128thUp: { + x_min: -17, + x_max: 231, + y_min: -987, + y_max: 496, + ha: 1484, + o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z', + }, + flag128thDown: { + x_min: -15, + x_max: 270, + y_min: -496, + y_max: 870, + ha: 1366, + o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z', + }, + accidentalFlat: { + x_min: -15, + x_max: 185, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 176, + y_min: -334, + y_max: 334, + ha: 667, + o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z', + }, + accidentalSharp: { + x_min: 0, + x_max: 239, + y_min: -388, + y_max: 388, + ha: 775, + o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 271, + y_min: -135, + y_max: 135, + ha: 271, + o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z', + }, + accidentalDoubleFlat: { + x_min: -15, + x_max: 356, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z', + }, + accidentalParensLeft: { + x_min: -122, + x_max: -19, + y_min: -267, + y_max: 267, + ha: 534, + o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z', + }, + accidentalParensRight: { + x_min: 19, + x_max: 122, + y_min: -267, + y_max: 267, + ha: 535, + o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 0, + x_max: 200, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 0, + x_max: 446, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 142, + y_min: -373, + y_max: 373, + ha: 747, + o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: 0, + x_max: 335, + y_min: -391, + y_max: 391, + ha: 782, + o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z', + }, + accidentalBuyukMucennebFlat: { + x_min: -125, + x_max: 185, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z', + }, + accidentalBuyukMucennebSharp: { + x_min: 0, + x_max: 284, + y_min: -388, + y_max: 388, + ha: 775, + o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z', + }, + accidentalBakiyeFlat: { + x_min: -129, + x_max: 185, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z', + }, + accidentalKomaSharp: { + x_min: 0, + x_max: 142, + y_min: -373, + y_max: 373, + ha: 747, + o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z', + }, + accidentalKucukMucennebSharp: { + x_min: 0, + x_max: 188, + y_min: -373, + y_max: 373, + ha: 747, + o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z', + }, + articAccentAbove: { + x_min: -256, + x_max: 19, + y_min: -114, + y_max: 114, + ha: 227, + o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z', + }, + articAccentBelow: { + x_min: -256, + x_max: 19, + y_min: -114, + y_max: 114, + ha: 227, + o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z', + }, + articTenutoAbove: { + x_min: -154, + x_max: 154, + y_min: -15, + y_max: 15, + ha: 30, + o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z', + }, + articTenutoBelow: { + x_min: -154, + x_max: 154, + y_min: -15, + y_max: 15, + ha: 30, + o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z', + }, + articStaccatoAbove: { + x_min: -49, + x_max: 49, + y_min: -49, + y_max: 49, + ha: 99, + o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z', + }, + articStaccatoBelow: { + x_min: -49, + x_max: 49, + y_min: -49, + y_max: 49, + ha: 99, + o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z', + }, + articStaccatissimoAbove: { + x_min: -53, + x_max: 53, + y_min: 0, + y_max: 184, + ha: 184, + o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z', + }, + articStaccatissimoBelow: { + x_min: -53, + x_max: 53, + y_min: -184, + y_max: 0, + ha: 184, + o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z', + }, + articMarcatoAbove: { + x_min: -114, + x_max: 114, + y_min: -256, + y_max: 19, + ha: 275, + o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z', + }, + articMarcatoBelow: { + x_min: -114, + x_max: 114, + y_min: -19, + y_max: 256, + ha: 275, + o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z', + }, + fermataAbove: { + x_min: -324, + x_max: 324, + y_min: 0, + y_max: 353, + ha: 353, + o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z', + }, + fermataBelow: { + x_min: -324, + x_max: 324, + y_min: -353, + y_max: 0, + ha: 353, + o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + fermataLongAbove: { + x_min: -286, + x_max: 286, + y_min: 0, + y_max: 364, + ha: 364, + o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z', + }, + fermataLongBelow: { + x_min: -286, + x_max: 286, + y_min: -364, + y_max: 0, + ha: 364, + o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + fermataVeryLongAbove: { + x_min: -286, + x_max: 286, + y_min: 0, + y_max: 438, + ha: 438, + o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z', + }, + fermataVeryLongBelow: { + x_min: -286, + x_max: 286, + y_min: -438, + y_max: 0, + ha: 438, + o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + fermataVeryShortAbove: { + x_min: -351, + x_max: 351, + y_min: 0, + y_max: 571, + ha: 571, + o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z', + }, + fermataVeryShortBelow: { + x_min: -351, + x_max: 351, + y_min: -571, + y_max: 0, + ha: 571, + o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z', + }, + fermataShortAbove: { + x_min: -286, + x_max: 286, + y_min: 0, + y_max: 469, + ha: 469, + o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z', + }, + fermataShortBelow: { + x_min: -286, + x_max: 286, + y_min: -469, + y_max: 0, + ha: 469, + o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + breathMarkComma: { + x_min: 0, + x_max: 168, + y_min: -155, + y_max: 155, + ha: 311, + o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z', + }, + breathMarkUpbow: { + x_min: -125, + x_max: 125, + y_min: 0, + y_max: 409, + ha: 409, + o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z', + }, + caesura: { + x_min: 0, + x_max: 457, + y_min: -202, + y_max: 303, + ha: 504, + o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 370, + y_min: -207, + y_max: 310, + ha: 517, + o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z', + }, + restMaxima: { + x_min: 0, + x_max: 853, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 284, + y_min: 0, + y_max: 250, + ha: 250, + o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z', + }, + restWhole: { + x_min: 0, + x_max: 330, + y_min: -125, + y_max: 0, + ha: 125, + o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z', + }, + restWholeLegerLine: { + x_min: 0, + x_max: 542, + y_min: -125, + y_max: 11, + ha: 137, + o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z', + }, + restHalf: { + x_min: 0, + x_max: 330, + y_min: 0, + y_max: 125, + ha: 125, + o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z', + }, + restHalfLegerLine: { + x_min: 0, + x_max: 542, + y_min: -11, + y_max: 125, + ha: 137, + o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z', + }, + restQuarter: { + x_min: 0, + x_max: 221, + y_min: -365, + y_max: 365, + ha: 730, + o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z', + }, + rest8th: { + x_min: 0, + x_max: 258, + y_min: -197, + y_max: 219, + ha: 416, + o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z', + }, + rest16th: { + x_min: 0, + x_max: 331, + y_min: -443, + y_max: 219, + ha: 662, + o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z', + }, + rest32nd: { + x_min: 0, + x_max: 405, + y_min: -443, + y_max: 466, + ha: 909, + o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z', + }, + rest64th: { + x_min: 0, + x_max: 479, + y_min: -689, + y_max: 466, + ha: 1155, + o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z', + }, + rest128th: { + x_min: 0, + x_max: 553, + y_min: -689, + y_max: 712, + ha: 1401, + o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z', + }, + dynamicPiano: { + x_min: -39, + x_max: 378, + y_min: -178, + y_max: 277, + ha: 455, + o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z', + }, + dynamicMezzo: { + x_min: 35, + x_max: 493, + y_min: -19, + y_max: 272, + ha: 291, + o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z', + }, + dynamicForte: { + x_min: -87, + x_max: 440, + y_min: -182, + y_max: 415, + ha: 597, + o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z', + }, + dynamicRinforzando: { + x_min: 58, + x_max: 357, + y_min: 0, + y_max: 275, + ha: 275, + o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z', + }, + dynamicSforzando: { + x_min: 52, + x_max: 278, + y_min: -22, + y_max: 270, + ha: 292, + o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z', + }, + dynamicZ: { + x_min: 23, + x_max: 309, + y_min: 2, + y_max: 250, + ha: 248, + o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z', + }, + ornamentTrill: { + x_min: -249, + x_max: 249, + y_min: 0, + y_max: 376, + ha: 376, + o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z', + }, + ornamentTurn: { + x_min: -310, + x_max: 310, + y_min: -143, + y_max: 143, + ha: 286, + o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z', + }, + ornamentTurnSlash: { + x_min: -310, + x_max: 310, + y_min: -201, + y_max: 201, + ha: 402, + o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z', + }, + ornamentMordent: { + x_min: -296, + x_max: 296, + y_min: -215, + y_max: 198, + ha: 413, + o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z', + }, + ornamentShortTrill: { + x_min: -296, + x_max: 296, + y_min: -127, + y_max: 127, + ha: 253, + o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z', + }, + ornamentTremblement: { + x_min: -419, + x_max: 419, + y_min: -127, + y_max: 127, + ha: 253, + o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z', + }, + ornamentPrecompAppoggTrill: { + x_min: -419, + x_max: 419, + y_min: -127, + y_max: 255, + ha: 381, + o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: -433, + x_max: 433, + y_min: -243, + y_max: 127, + ha: 370, + o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: -433, + x_max: 433, + y_min: -243, + y_max: 198, + ha: 442, + o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: -433, + x_max: 433, + y_min: -127, + y_max: 244, + ha: 370, + o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: -439, + x_max: 439, + y_min: -127, + y_max: 236, + ha: 363, + o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z', + }, + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: -439, + x_max: 439, + y_min: -215, + y_max: 236, + ha: 451, + o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: -439, + x_max: 439, + y_min: -236, + y_max: 127, + ha: 362, + o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z', + }, + stringsDownBow: { + x_min: -168, + x_max: 168, + y_min: 0, + y_max: 353, + ha: 353, + o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z', + }, + stringsUpBow: { + x_min: -110, + x_max: 110, + y_min: 0, + y_max: 277, + ha: 277, + o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z', + }, + stringsHarmonic: { + x_min: -82, + x_max: 82, + y_min: -82, + y_max: 82, + ha: 163, + o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: -110, + x_max: 110, + y_min: -110, + y_max: 205, + ha: 315, + o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: -110, + x_max: 110, + y_min: -205, + y_max: 110, + ha: 315, + o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z', + }, + pluckedLeftHandPizzicato: { + x_min: -155, + x_max: 155, + y_min: -157, + y_max: 157, + ha: 315, + o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 782, + y_min: -1, + y_max: 500, + ha: 501, + o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 435, + y_min: 65, + y_max: 500, + ha: 435, + o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z', + }, + pictChokeCymbal: { + x_min: 0, + x_max: 168, + y_min: -155, + y_max: 155, + ha: 311, + o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z', + }, + wiggleArpeggiatoUp: { + x_min: -8, + x_max: 269, + y_min: 0, + y_max: 126, + ha: 126, + o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z', + }, + arrowheadBlackUp: { + x_min: 11, + x_max: 239, + y_min: -6, + y_max: 269, + ha: 275, + o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z', + }, + arrowheadBlackDown: { + x_min: 11, + x_max: 239, + y_min: 6, + y_max: 281, + ha: 275, + o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z', + }, + }, + fontFamily: 'GonvilleSmufl', + resolution: 1000, + generatedOn: '2023-04-20T22:11:26.009Z', +}; + + +/***/ }), + +/***/ "./src/fonts/leland_glyphs.ts": +/*!************************************!*\ + !*** ./src/fonts/leland_glyphs.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "LelandFont": () => (/* binding */ LelandFont) +/* harmony export */ }); +const LelandFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 491, + y_min: 0, + y_max: 279, + ha: 279, + o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z', + }, + bracketBottom: { + x_min: 0, + x_max: 491, + y_min: -279, + y_max: 0, + ha: 279, + o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z', + }, + segno: { + x_min: 0, + x_max: 654, + y_min: 0, + y_max: 869, + ha: 869, + o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z', + }, + coda: { + x_min: 0, + x_max: 745, + y_min: -113, + y_max: 735, + ha: 848, + o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z', + }, + gClef: { + x_min: 0, + x_max: 640, + y_min: -666, + y_max: 1112, + ha: 1778, + o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z', + }, + cClef: { + x_min: 0, + x_max: 627, + y_min: -480, + y_max: 482, + ha: 962, + o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z', + }, + fClef: { + x_min: 0, + x_max: 664, + y_min: -617, + y_max: 251, + ha: 868, + o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z', + }, + unpitchedPercussionClef1: { + x_min: 0, + x_max: 352, + y_min: -252, + y_max: 252, + ha: 504, + o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z', + }, + '6stringTabClef': { + x_min: 0, + x_max: 439, + y_min: -743, + y_max: 746, + ha: 1489, + o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z', + }, + timeSig0: { + x_min: 15, + x_max: 389, + y_min: -254, + y_max: 255, + ha: 509, + o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z', + }, + timeSig1: { + x_min: 15, + x_max: 336, + y_min: -243, + y_max: 245, + ha: 488, + o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z', + }, + timeSig2: { + x_min: 15, + x_max: 377, + y_min: -243, + y_max: 245, + ha: 488, + o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z', + }, + timeSig3: { + x_min: 15, + x_max: 364, + y_min: -244, + y_max: 244, + ha: 488, + o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z', + }, + timeSig4: { + x_min: 14, + x_max: 442, + y_min: -248, + y_max: 249, + ha: 497, + o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z', + }, + timeSig5: { + x_min: 15, + x_max: 362, + y_min: -244, + y_max: 246, + ha: 490, + o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z', + }, + timeSig6: { + x_min: 15, + x_max: 387, + y_min: -244, + y_max: 245, + ha: 489, + o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z', + }, + timeSig7: { + x_min: 15, + x_max: 366, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z', + }, + timeSig8: { + x_min: 15, + x_max: 393, + y_min: -248, + y_max: 246, + ha: 494, + o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z', + }, + timeSig9: { + x_min: 15, + x_max: 387, + y_min: -244, + y_max: 245, + ha: 489, + o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z', + }, + timeSigCommon: { + x_min: 0, + x_max: 463, + y_min: -256, + y_max: 258, + ha: 514, + o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z', + }, + timeSigCutCommon: { + x_min: 0, + x_max: 463, + y_min: -376, + y_max: 388, + ha: 764, + o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z', + }, + timeSigPlus: { + x_min: 0, + x_max: 408, + y_min: -204, + y_max: 204, + ha: 408, + o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 538, + y_min: -178, + y_max: 179, + ha: 357, + o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 373, + y_min: -134, + y_max: 136, + ha: 270, + o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 325, + y_min: -133, + y_max: 132, + ha: 265, + o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 325, + y_min: -133, + y_max: 132, + ha: 265, + o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 325, + y_min: -132, + y_max: 132, + ha: 264, + o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 325, + y_min: -162, + y_max: 163, + ha: 325, + o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z', + }, + noteheadDoubleWholeSquare: { + x_min: 0, + x_max: 432, + y_min: -179, + y_max: 177, + ha: 356, + o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z', + }, + noteheadSquareWhite: { + x_min: 0, + x_max: 310, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z', + }, + noteheadSquareBlack: { + x_min: 0, + x_max: 310, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 310, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 223 176 l 0 -196 l 446 -196 z', + }, + noteheadSlashedDoubleWhole1: { + x_min: -66, + x_max: 456, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z', + }, + noteheadSlashedWhole1: { + x_min: -75, + x_max: 448, + y_min: -211, + y_max: 214, + ha: 425, + o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z', + }, + noteheadSlashedHalf1: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z', + }, + noteheadSlashedBlack1: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z', + }, + noteheadSlashedDoubleWhole2: { + x_min: -66, + x_max: 456, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z', + }, + noteheadSlashedWhole2: { + x_min: -75, + x_max: 448, + y_min: -212, + y_max: 214, + ha: 426, + o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z', + }, + noteheadSlashedHalf2: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z', + }, + noteheadSlashedBlack2: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z', + }, + noteheadDiamondDoubleWhole: { + x_min: 0, + x_max: 373, + y_min: -178, + y_max: 179, + ha: 357, + o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 373, + y_min: -133, + y_max: 132, + ha: 265, + o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 335, + y_min: -132, + y_max: 133, + ha: 265, + o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 335, + y_min: -132, + y_max: 133, + ha: 265, + o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z', + }, + noteheadParenthesisRight: { + x_min: 0, + x_max: 75, + y_min: -209, + y_max: 212, + ha: 421, + o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z', + }, + noteheadParenthesisLeft: { + x_min: 0, + x_max: 75, + y_min: -212, + y_max: 209, + ha: 421, + o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z', + }, + noteheadMoonBlack: { + x_min: 0, + x_max: 310, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z', + }, + noteheadTriangleLeftBlack: { + x_min: 0, + x_max: 339, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 0 176 l 0 -196 l 488 -196 z', + }, + noteheadTriangleRightBlack: { + x_min: 0, + x_max: 339, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 488 176 l 0 -196 l 488 -196 z', + }, + noteheadTriangleRoundDownBlack: { + x_min: 0, + x_max: 310, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z', + }, + augmentationDot: { + x_min: 0, + x_max: 100, + y_min: -50, + y_max: 50, + ha: 100, + o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z', + }, + tremolo1: { + x_min: 0, + x_max: 290, + y_min: -93, + y_max: 96, + ha: 189, + o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z', + }, + flag8thUp: { + x_min: 0, + x_max: 289, + y_min: -817, + y_max: 12, + ha: 829, + o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z', + }, + flag8thDown: { + x_min: 0, + x_max: 309, + y_min: -12, + y_max: 817, + ha: 829, + o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z', + }, + flag16thUp: { + x_min: 0, + x_max: 279, + y_min: -820, + y_max: 12, + ha: 832, + o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z', + }, + flag16thDown: { + x_min: 0, + x_max: 309, + y_min: -26, + y_max: 803, + ha: 829, + o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z', + }, + flag32ndUp: { + x_min: 0, + x_max: 279, + y_min: -821, + y_max: 186, + ha: 1007, + o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z', + }, + flag32ndDown: { + x_min: 0, + x_max: 309, + y_min: -216, + y_max: 803, + ha: 1019, + o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z', + }, + flag64thUp: { + x_min: 0, + x_max: 279, + y_min: -822, + y_max: 373, + ha: 1195, + o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z', + }, + flag64thDown: { + x_min: 0, + x_max: 309, + y_min: -403, + y_max: 804, + ha: 1207, + o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z', + }, + flag128thUp: { + x_min: 0, + x_max: 279, + y_min: -821, + y_max: 573, + ha: 1394, + o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z', + }, + flag128thDown: { + x_min: 0, + x_max: 309, + y_min: -591, + y_max: 803, + ha: 1394, + o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z', + }, + accidentalFlat: { + x_min: 0, + x_max: 203, + y_min: -176, + y_max: 453, + ha: 629, + o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 171, + y_min: -323, + y_max: 325, + ha: 648, + o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z', + }, + accidentalSharp: { + x_min: 0, + x_max: 244, + y_min: -333, + y_max: 334, + ha: 667, + o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 275, + y_min: -137, + y_max: 138, + ha: 275, + o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z', + }, + accidentalDoubleFlat: { + x_min: 0, + x_max: 371, + y_min: -176, + y_max: 453, + ha: 629, + o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z', + }, + accidentalParensLeft: { + x_min: 0, + x_max: 75, + y_min: -212, + y_max: 209, + ha: 421, + o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z', + }, + accidentalParensRight: { + x_min: 0, + x_max: 75, + y_min: -209, + y_max: 212, + ha: 421, + o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 0, + x_max: 193, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 0, + x_max: 422, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 180, + y_min: -316, + y_max: 320, + ha: 636, + o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: 0, + x_max: 290, + y_min: -328, + y_max: 339, + ha: 667, + o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z', + }, + accidentalBuyukMucennebFlat: { + x_min: 0, + x_max: 277, + y_min: -176, + y_max: 454, + ha: 630, + o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z', + }, + accidentalBuyukMucennebSharp: { + x_min: 0, + x_max: 348, + y_min: -332, + y_max: 334, + ha: 666, + o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z', + }, + accidentalBakiyeFlat: { + x_min: 0, + x_max: 277, + y_min: -176, + y_max: 454, + ha: 630, + o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z', + }, + accidentalKucukMucennebSharp: { + x_min: 0, + x_max: 348, + y_min: -316, + y_max: 318, + ha: 634, + o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z', + }, + articAccentAbove: { + x_min: 0, + x_max: 361, + y_min: 0, + y_max: 235, + ha: 235, + o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z', + }, + articAccentBelow: { + x_min: 0, + x_max: 361, + y_min: -235, + y_max: 0, + ha: 235, + o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z', + }, + articTenutoAbove: { + x_min: 0, + x_max: 316, + y_min: 0, + y_max: 46, + ha: 46, + o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z', + }, + articTenutoBelow: { + x_min: 0, + x_max: 316, + y_min: -46, + y_max: 0, + ha: 46, + o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z', + }, + articStaccatoAbove: { + x_min: 0, + x_max: 78, + y_min: 0, + y_max: 78, + ha: 78, + o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z', + }, + articStaccatoBelow: { + x_min: 0, + x_max: 78, + y_min: -78, + y_max: 0, + ha: 78, + o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z', + }, + articStaccatissimoAbove: { + x_min: 0, + x_max: 127, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z', + }, + articStaccatissimoBelow: { + x_min: 0, + x_max: 127, + y_min: -248, + y_max: 0, + ha: 248, + o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z', + }, + articMarcatoAbove: { + x_min: 1, + x_max: 296, + y_min: 0, + y_max: 253, + ha: 253, + o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z', + }, + articMarcatoBelow: { + x_min: 0, + x_max: 295, + y_min: -253, + y_max: 0, + ha: 253, + o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z', + }, + fermataAbove: { + x_min: 0, + x_max: 622, + y_min: 0, + y_max: 368, + ha: 368, + o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z', + }, + fermataBelow: { + x_min: 0, + x_max: 622, + y_min: -368, + y_max: 0, + ha: 368, + o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z', + }, + fermataLongAbove: { + x_min: 0, + x_max: 623, + y_min: 0, + y_max: 368, + ha: 368, + o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z', + }, + fermataLongBelow: { + x_min: 0, + x_max: 623, + y_min: -368, + y_max: 0, + ha: 368, + o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z', + }, + fermataVeryLongAbove: { + x_min: 0, + x_max: 842, + y_min: 0, + y_max: 549, + ha: 549, + o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z', + }, + fermataVeryLongBelow: { + x_min: 0, + x_max: 842, + y_min: -549, + y_max: 0, + ha: 549, + o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z', + }, + fermataShortAbove: { + x_min: 0, + x_max: 642, + y_min: 0, + y_max: 454, + ha: 454, + o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z', + }, + fermataShortBelow: { + x_min: 0, + x_max: 642, + y_min: -454, + y_max: 0, + ha: 454, + o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z', + }, + breathMarkComma: { + x_min: 0, + x_max: 191, + y_min: 0, + y_max: 321, + ha: 321, + o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z', + }, + caesura: { + x_min: 0, + x_max: 380, + y_min: 0, + y_max: 490, + ha: 490, + o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 368, + y_min: 0, + y_max: 491, + ha: 491, + o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z', + }, + restMaxima: { + x_min: 0, + x_max: 450, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 125, + y_min: -11, + y_max: 262, + ha: 273, + o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z', + }, + restWhole: { + x_min: 0, + x_max: 325, + y_min: -131, + y_max: 5, + ha: 136, + o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z', + }, + restWholeLegerLine: { + x_min: -139, + x_max: 464, + y_min: -122, + y_max: 14, + ha: 136, + o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z', + }, + restHalf: { + x_min: 0, + x_max: 325, + y_min: -4, + y_max: 132, + ha: 136, + o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z', + }, + restHalfLegerLine: { + x_min: -139, + x_max: 464, + y_min: -14, + y_max: 122, + ha: 136, + o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z', + }, + restQuarter: { + x_min: 0, + x_max: 235, + y_min: -331, + y_max: 401, + ha: 732, + o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z', + }, + rest8th: { + x_min: 0, + x_max: 276, + y_min: -255, + y_max: 204, + ha: 459, + o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z', + }, + rest16th: { + x_min: 1, + x_max: 344, + y_min: -507, + y_max: 204, + ha: 711, + o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z', + }, + rest32nd: { + x_min: 0, + x_max: 391, + y_min: -507, + y_max: 460, + ha: 967, + o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z', + }, + rest64th: { + x_min: 0, + x_max: 423, + y_min: -758, + y_max: 464, + ha: 1222, + o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z', + }, + rest128th: { + x_min: -1, + x_max: 475, + y_min: -759, + y_max: 717, + ha: 1476, + o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z', + }, + dynamicPiano: { + x_min: -95, + x_max: 317, + y_min: -163, + y_max: 263, + ha: 426, + o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z', + }, + dynamicMezzo: { + x_min: -7, + x_max: 374, + y_min: -2, + y_max: 251, + ha: 253, + o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z', + }, + dynamicForte: { + x_min: -137, + x_max: 334, + y_min: -193, + y_max: 421, + ha: 614, + o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z', + }, + dynamicRinforzando: { + x_min: -12, + x_max: 230, + y_min: 0, + y_max: 254, + ha: 254, + o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z', + }, + dynamicSforzando: { + x_min: 0, + x_max: 208, + y_min: -5, + y_max: 263, + ha: 268, + o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z', + }, + dynamicZ: { + x_min: -42, + x_max: 239, + y_min: -1, + y_max: 258, + ha: 259, + o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z', + }, + ornamentTrill: { + x_min: -12, + x_max: 383, + y_min: 0, + y_max: 383, + ha: 383, + o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z', + }, + ornamentTurn: { + x_min: 0, + x_max: 456, + y_min: 0, + y_max: 232, + ha: 232, + o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z', + }, + ornamentTurnSlash: { + x_min: 0, + x_max: 456, + y_min: -80, + y_max: 313, + ha: 393, + o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z', + }, + ornamentMordent: { + x_min: 0, + x_max: 473, + y_min: -77, + y_max: 316, + ha: 393, + o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z', + }, + ornamentShortTrill: { + x_min: 0, + x_max: 473, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z', + }, + ornamentTremblement: { + x_min: 0, + x_max: 654, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z', + }, + ornamentPrecompAppoggTrill: { + x_min: 0, + x_max: 680, + y_min: 0, + y_max: 388, + ha: 388, + o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: 0, + x_max: 662, + y_min: -158, + y_max: 248, + ha: 406, + o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: 0, + x_max: 662, + y_min: -158, + y_max: 321, + ha: 479, + o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: 0, + x_max: 662, + y_min: 0, + y_max: 406, + ha: 406, + o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: 0, + x_max: 857, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: 0, + x_max: 565, + y_min: -171, + y_max: 249, + ha: 420, + o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z', + }, + brassMuteClosed: { + x_min: 0, + x_max: 312, + y_min: 0, + y_max: 312, + ha: 312, + o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z', + }, + brassMuteOpen: { + x_min: 0, + x_max: 280, + y_min: 0, + y_max: 280, + ha: 280, + o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z', + }, + stringsDownBow: { + x_min: 0, + x_max: 315, + y_min: 0, + y_max: 293, + ha: 293, + o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z', + }, + stringsUpBow: { + x_min: 0, + x_max: 262, + y_min: 0, + y_max: 343, + ha: 343, + o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z', + }, + stringsHarmonic: { + x_min: 0, + x_max: 181, + y_min: 0, + y_max: 181, + ha: 181, + o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: 0, + x_max: 269, + y_min: 0, + y_max: 389, + ha: 389, + o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: 0, + x_max: 269, + y_min: 0, + y_max: 389, + ha: 389, + o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 981, + y_min: -10, + y_max: 545, + ha: 555, + o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 473, + y_min: 0, + y_max: 473, + ha: 473, + o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z', + }, + wiggleArpeggiatoUp: { + x_min: -22, + x_max: 242, + y_min: 0, + y_max: 164, + ha: 164, + o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z', + }, + repeat1Bar: { + x_min: 0, + x_max: 481, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z', + }, + repeat2Bars: { + x_min: 0, + x_max: 735, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z', + }, + repeat4Bars: { + x_min: 0, + x_max: 1243, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z', + }, + repeatBarSlash: { + x_min: 0, + x_max: 481, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z', + }, + csymDiminished: { + x_min: 0, + x_max: 501, + y_min: 0, + y_max: 501, + ha: 501, + o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z', + }, + csymHalfDiminished: { + x_min: -1, + x_max: 502, + y_min: -1, + y_max: 502, + ha: 503, + o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z', + }, + csymAugmented: { + x_min: 1, + x_max: 321, + y_min: 90, + y_max: 410, + ha: 320, + o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z', + }, + csymMajorSeventh: { + x_min: 0, + x_max: 500, + y_min: 10, + y_max: 490, + ha: 480, + o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z', + }, + accidentalNarrowReversedFlat: { + x_min: 0, + x_max: 160, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z', + }, + accidentalNarrowReversedFlatAndFlat: { + x_min: 0, + x_max: 416, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z', + }, + }, + fontFamily: 'Leland', + resolution: 1000, + generatedOn: '2022-12-19T23:52:37.756Z', +}; + + +/***/ }), + +/***/ "./src/fonts/load_all.ts": +/*!*******************************!*\ + !*** ./src/fonts/load_all.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadAllMusicFonts": () => (/* binding */ loadAllMusicFonts) +/* harmony export */ }); +/* harmony import */ var _load_bravura__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./load_bravura */ "./src/fonts/load_bravura.ts"); +/* harmony import */ var _load_custom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./load_custom */ "./src/fonts/load_custom.ts"); +/* harmony import */ var _load_gonville__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./load_gonville */ "./src/fonts/load_gonville.ts"); +/* harmony import */ var _load_leland__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./load_leland */ "./src/fonts/load_leland.ts"); +/* harmony import */ var _load_petaluma__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./load_petaluma */ "./src/fonts/load_petaluma.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// vexflow.js statically bundles & preloads all of our music engraving fonts. + + + + + +// ADD_MUSIC_FONT +// import { loadXXX } from './load_xxx'; +// Populate our font "database" with all our music fonts. +function loadAllMusicFonts() { + (0,_load_bravura__WEBPACK_IMPORTED_MODULE_0__.loadBravura)(); + (0,_load_gonville__WEBPACK_IMPORTED_MODULE_2__.loadGonville)(); + (0,_load_petaluma__WEBPACK_IMPORTED_MODULE_4__.loadPetaluma)(); + (0,_load_custom__WEBPACK_IMPORTED_MODULE_1__.loadCustom)(); + (0,_load_leland__WEBPACK_IMPORTED_MODULE_3__.loadLeland)(); + // ADD_MUSIC_FONT + // loadXXX(); +} + + +/***/ }), + +/***/ "./src/fonts/load_bravura.ts": +/*!***********************************!*\ + !*** ./src/fonts/load_bravura.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadBravura": () => (/* binding */ loadBravura) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bravura_glyphs */ "./src/fonts/bravura_glyphs.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base. +// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts +// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js). +// ADD_MUSIC_FONT +// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts. +// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts. +// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js +// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary. + + + +function loadBravura() { + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Bravura', _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__.BravuraFont, _common_metrics__WEBPACK_IMPORTED_MODULE_2__.CommonMetrics); +} + + +/***/ }), + +/***/ "./src/fonts/load_custom.ts": +/*!**********************************!*\ + !*** ./src/fonts/load_custom.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadCustom": () => (/* binding */ loadCustom) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _custom_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./custom_glyphs */ "./src/fonts/custom_glyphs.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +function loadCustom() { + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Custom', _custom_glyphs__WEBPACK_IMPORTED_MODULE_2__.CustomFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics); +} + + +/***/ }), + +/***/ "./src/fonts/load_gonville.ts": +/*!************************************!*\ + !*** ./src/fonts/load_gonville.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadGonville": () => (/* binding */ loadGonville) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _gonville_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./gonville_glyphs */ "./src/fonts/gonville_glyphs.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +function loadGonville() { + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Gonville', _gonville_glyphs__WEBPACK_IMPORTED_MODULE_2__.GonvilleSmuflFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics); +} + + +/***/ }), + +/***/ "./src/fonts/load_leland.ts": +/*!**********************************!*\ + !*** ./src/fonts/load_leland.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadLeland": () => (/* binding */ loadLeland) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _leland_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./leland_glyphs */ "./src/fonts/leland_glyphs.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +function loadLeland() { + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Leland', _leland_glyphs__WEBPACK_IMPORTED_MODULE_2__.LelandFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics); +} + + +/***/ }), + +/***/ "./src/fonts/load_petaluma.ts": +/*!************************************!*\ + !*** ./src/fonts/load_petaluma.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadPetaluma": () => (/* binding */ loadPetaluma) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petaluma_glyphs */ "./src/fonts/petaluma_glyphs.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +const petalumaChordMetrics = { + csymDiminished: { + leftSideBearing: -95, + advanceWidth: 506, + yOffset: 0, + }, + csymHalfDiminished: { + leftSideBearing: -32, + advanceWidth: 506, + yOffset: 0, + }, + csymAugmented: { + leftSideBearing: -25, + advanceWidth: 530, + yOffset: 0, + }, + csymParensLeftTall: { + leftSideBearing: 0, + advanceWidth: 155, + yOffset: 150, + }, + csymParensRightTall: { + leftSideBearing: 40, + advanceWidth: 189, + yOffset: 150, + }, + csymBracketLeftTall: { + leftSideBearing: 0, + advanceWidth: 328, + yOffset: 0, + }, + csymBracketRightTall: { + leftSideBearing: 1, + advanceWidth: 600, + yOffset: 0, + }, + csymParensLeftVeryTall: { + leftSideBearing: 0, + advanceWidth: 210, + yOffset: 250, + }, + csymParensRightVeryTall: { + leftSideBearing: -100, + advanceWidth: 111, + yOffset: 250, + }, + csymDiagonalArrangementSlash: { + leftSideBearing: -1, + advanceWidth: 990, + yOffset: 0, + }, + csymMinor: { + leftSideBearing: 0, + advanceWidth: 482, + yOffset: 0, + }, + csymMajorSeventh: { + leftSideBearing: 100, + yOffset: 0, + advanceWidth: 600, + }, + accidentalSharp: { + leftSideBearing: 0, + advanceWidth: 425, + yOffset: -422, + }, + accidentalFlat: { + leftSideBearing: -10, + advanceWidth: 228, + yOffset: -284, + }, +}; +function loadPetaluma() { + const metrics = JSON.parse(JSON.stringify(_common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics)); + const chordMetrics = metrics.chordSymbol; + if (chordMetrics) { + chordMetrics.glyphs = petalumaChordMetrics; + } + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Petaluma', _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_2__.PetalumaFont, metrics); +} + + +/***/ }), + +/***/ "./src/fonts/petaluma_glyphs.ts": +/*!**************************************!*\ + !*** ./src/fonts/petaluma_glyphs.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PetalumaFont": () => (/* binding */ PetalumaFont) +/* harmony export */ }); +const PetalumaFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 508, + y_min: 0, + y_max: 370, + ha: 370, + o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z', + }, + bracketBottom: { + x_min: 0, + x_max: 496, + y_min: -393, + y_max: 0, + ha: 393, + o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z', + }, + barlineTick: { + x_min: 0, + x_max: 56, + y_min: 877, + y_max: 1122, + ha: 245, + o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z', + }, + breathMarkTick: { + x_min: 0, + x_max: 568, + y_min: 0, + y_max: 621, + ha: 621, + o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z', + }, + segno: { + x_min: 0, + x_max: 798, + y_min: -65, + y_max: 806, + ha: 871, + o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z', + }, + coda: { + x_min: 0, + x_max: 1380, + y_min: -196, + y_max: 1037, + ha: 1233, + o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z', + }, + gClef: { + x_min: 0, + x_max: 664, + y_min: -559, + y_max: 1009, + ha: 1568, + o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z', + }, + cClef: { + x_min: 0, + x_max: 731, + y_min: -543, + y_max: 543, + ha: 1086, + o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z', + }, + fClef: { + x_min: 0, + x_max: 776, + y_min: -496, + y_max: 216, + ha: 712, + o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z', + }, + unpitchedPercussionClef1: { + x_min: 0, + x_max: 379, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z', + }, + '6stringTabClef': { + x_min: 0, + x_max: 438, + y_min: -768, + y_max: 767, + ha: 1535, + o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z', + }, + timeSig0: { + x_min: 20, + x_max: 513, + y_min: -358, + y_max: 359, + ha: 717, + o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z', + }, + timeSig1: { + x_min: 20, + x_max: 283, + y_min: -364, + y_max: 366, + ha: 730, + o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z', + }, + timeSig2: { + x_min: 20, + x_max: 660, + y_min: -379, + y_max: 382, + ha: 761, + o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z', + }, + timeSig3: { + x_min: 20, + x_max: 540, + y_min: -392, + y_max: 392, + ha: 784, + o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z', + }, + timeSig4: { + x_min: 20, + x_max: 633, + y_min: -490, + y_max: 491, + ha: 981, + o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z', + }, + timeSig5: { + x_min: 20, + x_max: 583, + y_min: -389, + y_max: 389, + ha: 778, + o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z', + }, + timeSig6: { + x_min: 20, + x_max: 565, + y_min: -363, + y_max: 363, + ha: 726, + o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z', + }, + timeSig7: { + x_min: 20, + x_max: 592, + y_min: -345, + y_max: 345, + ha: 690, + o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z', + }, + timeSig8: { + x_min: 20, + x_max: 504, + y_min: -428, + y_max: 428, + ha: 856, + o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z', + }, + timeSig9: { + x_min: 20, + x_max: 494, + y_min: -421, + y_max: 421, + ha: 842, + o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z', + }, + timeSigCommon: { + x_min: 20, + x_max: 585, + y_min: -298, + y_max: 294, + ha: 592, + o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z', + }, + timeSigCutCommon: { + x_min: 20, + x_max: 695, + y_min: -687, + y_max: 687, + ha: 1374, + o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z', + }, + timeSigPlus: { + x_min: 0, + x_max: 661, + y_min: -358, + y_max: 358, + ha: 716, + o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z', + }, + timeSigPlusSmall: { + x_min: 0, + x_max: 418, + y_min: -197, + y_max: 199, + ha: 396, + o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z', + }, + timeSigMinus: { + x_min: 0, + x_max: 662, + y_min: -54, + y_max: 55, + ha: 109, + o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z', + }, + timeSigParensRight: { + x_min: 0, + x_max: 274, + y_min: -723, + y_max: 725, + ha: 1448, + o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z', + }, + timeSigParensRightSmall: { + x_min: 0, + x_max: 154, + y_min: -422, + y_max: 422, + ha: 844, + o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z', + }, + timeSigParensLeft: { + x_min: 1, + x_max: 400, + y_min: -728, + y_max: 728, + ha: 1456, + o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z', + }, + timeSigParensLeftSmall: { + x_min: 0, + x_max: 173, + y_min: -405, + y_max: 404, + ha: 809, + o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 614, + y_min: -223, + y_max: 223, + ha: 446, + o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 380, + y_min: -186, + y_max: 165, + ha: 351, + o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 334, + y_min: -174, + y_max: 175, + ha: 349, + o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 334, + y_min: -164, + y_max: 164, + ha: 328, + o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z', + }, + noteheadXDoubleWhole: { + x_min: 0, + x_max: 730, + y_min: -266, + y_max: 267, + ha: 533, + o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z', + }, + noteheadXWhole: { + x_min: 0, + x_max: 506, + y_min: -143, + y_max: 144, + ha: 287, + o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z', + }, + noteheadXHalf: { + x_min: 0, + x_max: 421, + y_min: -146, + y_max: 151, + ha: 297, + o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 289, + y_min: -156, + y_max: 157, + ha: 313, + o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z', + }, + noteheadCircleXDoubleWhole: { + x_min: 0, + x_max: 437, + y_min: -220, + y_max: 219, + ha: 439, + o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z', + }, + noteheadCircleXWhole: { + x_min: 0, + x_max: 323, + y_min: -190, + y_max: 184, + ha: 374, + o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z', + }, + noteheadCircleXHalf: { + x_min: 0, + x_max: 309, + y_min: -179, + y_max: 179, + ha: 358, + o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 344, + y_min: -179, + y_max: 175, + ha: 354, + o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z', + }, + noteheadCircledDoubleWhole: { + x_min: 0, + x_max: 672, + y_min: -291, + y_max: 291, + ha: 582, + o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z', + }, + noteheadCircledWhole: { + x_min: -50, + x_max: 472, + y_min: -231, + y_max: 232, + ha: 463, + o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z', + }, + noteheadCircledHalf: { + x_min: -50, + x_max: 393, + y_min: -175, + y_max: 175, + ha: 350, + o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z', + }, + noteheadCircledBlack: { + x_min: -70, + x_max: 326, + y_min: -168, + y_max: 192, + ha: 360, + o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z', + }, + noteheadDoubleWholeSquare: { + x_min: 0, + x_max: 474, + y_min: -209, + y_max: 211, + ha: 420, + o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z', + }, + noteheadSquareWhite: { + x_min: 0, + x_max: 350, + y_min: -131, + y_max: 131, + ha: 262, + o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z', + }, + noteheadSquareBlack: { + x_min: 0, + x_max: 342, + y_min: -130, + y_max: 132, + ha: 262, + o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z', + }, + noteheadTriangleDownDoubleWhole: { + x_min: 0, + x_max: 510, + y_min: -213, + y_max: 213, + ha: 426, + o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z', + }, + noteheadTriangleDownWhole: { + x_min: 0, + x_max: 366, + y_min: -145, + y_max: 138, + ha: 283, + o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z', + }, + noteheadTriangleDownHalf: { + x_min: 0, + x_max: 341, + y_min: -159, + y_max: 159, + ha: 318, + o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z', + }, + noteheadTriangleDownBlack: { + x_min: 0, + x_max: 346, + y_min: -149, + y_max: 149, + ha: 298, + o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z', + }, + noteheadTriangleUpDoubleWhole: { + x_min: 0, + x_max: 510, + y_min: -213, + y_max: 213, + ha: 426, + o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z', + }, + noteheadTriangleUpWhole: { + x_min: 0, + x_max: 366, + y_min: -145, + y_max: 138, + ha: 283, + o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z', + }, + noteheadTriangleUpHalf: { + x_min: 0, + x_max: 341, + y_min: -159, + y_max: 159, + ha: 318, + o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 346, + y_min: -149, + y_max: 149, + ha: 298, + o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z', + }, + noteheadSlashedDoubleWhole1: { + x_min: 0, + x_max: 697, + y_min: -290, + y_max: 290, + ha: 580, + o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z', + }, + noteheadSlashedWhole1: { + x_min: -76, + x_max: 498, + y_min: -168, + y_max: 168, + ha: 336, + o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z', + }, + noteheadSlashedHalf1: { + x_min: -79, + x_max: 471, + y_min: -184, + y_max: 184, + ha: 368, + o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z', + }, + noteheadSlashedBlack1: { + x_min: -110, + x_max: 452, + y_min: -190, + y_max: 190, + ha: 380, + o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z', + }, + noteheadSlashedDoubleWhole2: { + x_min: 0, + x_max: 697, + y_min: -295, + y_max: 295, + ha: 590, + o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z', + }, + noteheadSlashedWhole2: { + x_min: -83, + x_max: 510, + y_min: -201, + y_max: 198, + ha: 399, + o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z', + }, + noteheadSlashedHalf2: { + x_min: -73, + x_max: 454, + y_min: -188, + y_max: 188, + ha: 376, + o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z', + }, + noteheadSlashedBlack2: { + x_min: -84, + x_max: 405, + y_min: -189, + y_max: 189, + ha: 378, + o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z', + }, + noteheadDiamondDoubleWhole: { + x_min: 0, + x_max: 429, + y_min: -221, + y_max: 221, + ha: 442, + o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 271, + y_min: -132, + y_max: 132, + ha: 264, + o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 295, + y_min: -148, + y_max: 148, + ha: 296, + o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 310, + y_min: -146, + y_max: 146, + ha: 292, + o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z', + }, + noteheadParenthesis: { + x_min: -70, + x_max: 329, + y_min: -196, + y_max: 201, + ha: 397, + o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z', + }, + noteheadParenthesisRight: { + x_min: -30, + x_max: 82, + y_min: -199, + y_max: 206, + ha: 405, + o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z', + }, + noteheadParenthesisLeft: { + x_min: 0, + x_max: 106, + y_min: -197, + y_max: 197, + ha: 394, + o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z', + }, + noteheadMoonBlack: { + x_min: 0, + x_max: 328, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z', + }, + noteheadTriangleLeftBlack: { + x_min: 0, + x_max: 391, + y_min: -142, + y_max: 142, + ha: 284, + o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z', + }, + noteheadTriangleRightBlack: { + x_min: 0, + x_max: 398, + y_min: -139, + y_max: 140, + ha: 279, + o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z', + }, + noteheadTriangleRoundDownBlack: { + x_min: 0, + x_max: 334, + y_min: -134, + y_max: 136, + ha: 270, + o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z', + }, + augmentationDot: { + x_min: 0, + x_max: 96, + y_min: -57, + y_max: 57, + ha: 114, + o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z', + }, + tremolo1: { + x_min: -158, + x_max: 156, + y_min: -88, + y_max: 88, + ha: 176, + o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z', + }, + flag8thUp: { + x_min: 0, + x_max: 261, + y_min: -819, + y_max: 0, + ha: 819, + o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z', + }, + flag8thDown: { + x_min: 0, + x_max: 261, + y_min: 0, + y_max: 819, + ha: 819, + o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z', + }, + flag16thUp: { + x_min: 0, + x_max: 327, + y_min: -819, + y_max: 0, + ha: 819, + o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z', + }, + flag16thDown: { + x_min: 0, + x_max: 327, + y_min: 0, + y_max: 819, + ha: 819, + o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z', + }, + flag32ndUp: { + x_min: 0, + x_max: 268, + y_min: -849, + y_max: 149, + ha: 999, + o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z', + }, + flag32ndDown: { + x_min: -3, + x_max: 268, + y_min: -169, + y_max: 829, + ha: 999, + o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z', + }, + flag64thUp: { + x_min: -4, + x_max: 282, + y_min: -824, + y_max: 347, + ha: 1171, + o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z', + }, + flag64thDown: { + x_min: -5, + x_max: 281, + y_min: -375, + y_max: 796, + ha: 1171, + o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z', + }, + flag128thUp: { + x_min: 0, + x_max: 252, + y_min: -804, + y_max: 530, + ha: 1334, + o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z', + }, + flag128thDown: { + x_min: -1, + x_max: 252, + y_min: -580, + y_max: 754, + ha: 1334, + o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z', + }, + accidentalFlat: { + x_min: 1, + x_max: 209, + y_min: -208, + y_max: 472, + ha: 680, + o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 214, + y_min: -456, + y_max: 462, + ha: 918, + o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z', + }, + accidentalSharp: { + x_min: -22, + x_max: 390, + y_min: -384, + y_max: 383, + ha: 767, + o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 287, + y_min: -159, + y_max: 159, + ha: 318, + o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z', + }, + accidentalDoubleFlat: { + x_min: 0, + x_max: 359, + y_min: -220, + y_max: 446, + ha: 666, + o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z', + }, + accidentalParensLeft: { + x_min: 0, + x_max: 130, + y_min: -270, + y_max: 268, + ha: 538, + o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z', + }, + accidentalParensRight: { + x_min: 0, + x_max: 139, + y_min: -275, + y_max: 277, + ha: 552, + o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 0, + x_max: 208, + y_min: -240, + y_max: 440, + ha: 680, + o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 0, + x_max: 422, + y_min: -240, + y_max: 440, + ha: 680, + o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 300, + y_min: -338, + y_max: 351, + ha: 689, + o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: -23, + x_max: 388, + y_min: -373, + y_max: 445, + ha: 818, + o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z', + }, + accidentalBuyukMucennebFlat: { + x_min: 2, + x_max: 287, + y_min: -248, + y_max: 432, + ha: 680, + o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z', + }, + accidentalBuyukMucennebSharp: { + x_min: -1, + x_max: 467, + y_min: -460, + y_max: 350, + ha: 810, + o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z', + }, + accidentalBakiyeFlat: { + x_min: 2, + x_max: 287, + y_min: -236, + y_max: 444, + ha: 680, + o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z', + }, + accidentalKomaSharp: { + x_min: 0, + x_max: 300, + y_min: -338, + y_max: 351, + ha: 689, + o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z', + }, + accidentalKucukMucennebSharp: { + x_min: 0, + x_max: 359, + y_min: -420, + y_max: 343, + ha: 763, + o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z', + }, + accidentalKoron: { + x_min: 0, + x_max: 303, + y_min: -462, + y_max: 180, + ha: 642, + o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z', + }, + accidentalSori: { + x_min: 0, + x_max: 434, + y_min: -295, + y_max: 325, + ha: 620, + o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z', + }, + articAccentAbove: { + x_min: 0, + x_max: 425, + y_min: 0, + y_max: 326, + ha: 326, + o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z', + }, + articAccentBelow: { + x_min: 0, + x_max: 425, + y_min: -326, + y_max: 0, + ha: 326, + o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z', + }, + articTenutoAbove: { + x_min: 0, + x_max: 471, + y_min: 0, + y_max: 56, + ha: 56, + o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z', + }, + articTenutoBelow: { + x_min: 0, + x_max: 471, + y_min: -59, + y_max: -3, + ha: 56, + o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z', + }, + articStaccatoAbove: { + x_min: 1, + x_max: 112, + y_min: 0, + y_max: 156, + ha: 156, + o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z', + }, + articStaccatoBelow: { + x_min: 1, + x_max: 112, + y_min: -156, + y_max: 0, + ha: 156, + o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z', + }, + articStaccatissimoAbove: { + x_min: 0, + x_max: 139, + y_min: 0, + y_max: 411, + ha: 411, + o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z', + }, + articStaccatissimoBelow: { + x_min: 0, + x_max: 139, + y_min: -411, + y_max: 0, + ha: 411, + o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z', + }, + articMarcatoAbove: { + x_min: 0, + x_max: 396, + y_min: 0, + y_max: 328, + ha: 328, + o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z', + }, + articMarcatoBelow: { + x_min: 0, + x_max: 396, + y_min: -328, + y_max: 0, + ha: 328, + o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z', + }, + fermataAbove: { + x_min: 0, + x_max: 472, + y_min: 2, + y_max: 454, + ha: 452, + o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z', + }, + fermataBelow: { + x_min: 0, + x_max: 519, + y_min: -430, + y_max: -1, + ha: 429, + o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z', + }, + fermataLongAbove: { + x_min: 0, + x_max: 591, + y_min: -6, + y_max: 337, + ha: 343, + o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z', + }, + fermataLongBelow: { + x_min: 0, + x_max: 602, + y_min: -335, + y_max: 7, + ha: 342, + o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z', + }, + fermataVeryLongAbove: { + x_min: 0, + x_max: 715, + y_min: -14, + y_max: 437, + ha: 451, + o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z', + }, + fermataVeryLongBelow: { + x_min: 0, + x_max: 686, + y_min: -427, + y_max: 30, + ha: 457, + o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z', + }, + fermataVeryShortAbove: { + x_min: 0, + x_max: 711, + y_min: -31, + y_max: 496, + ha: 527, + o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z', + }, + fermataVeryShortBelow: { + x_min: 0, + x_max: 697, + y_min: -475, + y_max: 13, + ha: 488, + o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z', + }, + fermataShortAbove: { + x_min: 0, + x_max: 545, + y_min: -18, + y_max: 348, + ha: 366, + o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z', + }, + fermataShortBelow: { + x_min: 0, + x_max: 565, + y_min: -335, + y_max: 10, + ha: 345, + o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z', + }, + breathMarkComma: { + x_min: 0, + x_max: 148, + y_min: 0, + y_max: 275, + ha: 275, + o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z', + }, + breathMarkUpbow: { + x_min: 0, + x_max: 254, + y_min: 0, + y_max: 595, + ha: 595, + o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z', + }, + caesura: { + x_min: 0, + x_max: 566, + y_min: 0, + y_max: 562, + ha: 563, + o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 386, + y_min: -10, + y_max: 584, + ha: 594, + o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z', + }, + restMaxima: { + x_min: 0, + x_max: 366, + y_min: -255, + y_max: 255, + ha: 510, + o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 122, + y_min: 0, + y_max: 249, + ha: 249, + o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z', + }, + restWhole: { + x_min: 1, + x_max: 500, + y_min: -120, + y_max: 14, + ha: 134, + o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z', + }, + restWholeLegerLine: { + x_min: -197, + x_max: 685, + y_min: -157, + y_max: 29, + ha: 186, + o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z', + }, + restHalf: { + x_min: 0, + x_max: 518, + y_min: 0, + y_max: 162, + ha: 162, + o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z', + }, + restHalfLegerLine: { + x_min: -120, + x_max: 448, + y_min: -20, + y_max: 143, + ha: 163, + o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z', + }, + restQuarter: { + x_min: 0, + x_max: 263, + y_min: -415, + y_max: 415, + ha: 830, + o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z', + }, + rest8th: { + x_min: 0, + x_max: 289, + y_min: -260, + y_max: 261, + ha: 521, + o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z', + }, + rest16th: { + x_min: 0, + x_max: 333, + y_min: -328, + y_max: 244, + ha: 572, + o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z', + }, + rest32nd: { + x_min: 0, + x_max: 347, + y_min: -498, + y_max: 483, + ha: 981, + o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z', + }, + rest64th: { + x_min: 0, + x_max: 428, + y_min: -720, + y_max: 474, + ha: 1194, + o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z', + }, + rest128th: { + x_min: 1, + x_max: 491, + y_min: -711, + y_max: 719, + ha: 1430, + o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z', + }, + dynamicPiano: { + x_min: -49, + x_max: 327, + y_min: -142, + y_max: 515, + ha: 657, + o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z', + }, + dynamicMezzo: { + x_min: -18, + x_max: 559, + y_min: -50, + y_max: 365, + ha: 415, + o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z', + }, + dynamicForte: { + x_min: -144, + x_max: 311, + y_min: -115, + y_max: 504, + ha: 619, + o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z', + }, + dynamicRinforzando: { + x_min: -75, + x_max: 322, + y_min: -90, + y_max: 325, + ha: 415, + o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z', + }, + dynamicSforzando: { + x_min: 0, + x_max: 296, + y_min: 0, + y_max: 379, + ha: 379, + o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z', + }, + dynamicZ: { + x_min: -43, + x_max: 331, + y_min: 0, + y_max: 328, + ha: 328, + o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z', + }, + ornamentTrill: { + x_min: 1, + x_max: 551, + y_min: -18, + y_max: 539, + ha: 557, + o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z', + }, + ornamentTurn: { + x_min: 0, + x_max: 574, + y_min: 0, + y_max: 312, + ha: 312, + o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z', + }, + ornamentTurnSlash: { + x_min: 0, + x_max: 574, + y_min: -106, + y_max: 405, + ha: 511, + o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z', + }, + ornamentMordent: { + x_min: 0, + x_max: 700, + y_min: 0, + y_max: 497, + ha: 497, + o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z', + }, + ornamentShortTrill: { + x_min: 0, + x_max: 747, + y_min: 0, + y_max: 243, + ha: 243, + o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z', + }, + ornamentTremblement: { + x_min: 0, + x_max: 982, + y_min: 0, + y_max: 224, + ha: 224, + o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z', + }, + ornamentPrecompAppoggTrill: { + x_min: 0, + x_max: 1066, + y_min: -50, + y_max: 533, + ha: 583, + o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: 0, + x_max: 1088, + y_min: -380, + y_max: 252, + ha: 632, + o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: 0, + x_max: 1185, + y_min: -380, + y_max: 465, + ha: 845, + o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: 0, + x_max: 1003, + y_min: -20, + y_max: 521, + ha: 541, + o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: 0, + x_max: 1246, + y_min: -30, + y_max: 296, + ha: 326, + o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z', + }, + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: 0, + x_max: 1226, + y_min: -237, + y_max: 436, + ha: 673, + o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: 0, + x_max: 833, + y_min: -309, + y_max: 319, + ha: 628, + o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z', + }, + brassScoop: { + x_min: 0, + x_max: 312, + y_min: -390, + y_max: 28, + ha: 418, + o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z', + }, + brassDoitMedium: { + x_min: 0, + x_max: 476, + y_min: -50, + y_max: 333, + ha: 383, + o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z', + }, + brassFallLipShort: { + x_min: 0, + x_max: 298, + y_min: -344, + y_max: 65, + ha: 409, + o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z', + }, + brassLiftMedium: { + x_min: 0, + x_max: 807, + y_min: 0, + y_max: 838, + ha: 838, + o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z', + }, + brassFallRoughMedium: { + x_min: 0, + x_max: 791, + y_min: 0, + y_max: 819, + ha: 819, + o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z', + }, + brassBend: { + x_min: 0, + x_max: 381, + y_min: 0, + y_max: 367, + ha: 367, + o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z', + }, + brassMuteClosed: { + x_min: 0, + x_max: 274, + y_min: 0, + y_max: 260, + ha: 260, + o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z', + }, + brassMuteOpen: { + x_min: 1, + x_max: 313, + y_min: 0, + y_max: 309, + ha: 309, + o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z', + }, + brassFlip: { + x_min: 0, + x_max: 402, + y_min: 0, + y_max: 361, + ha: 361, + o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z', + }, + brassJazzTurn: { + x_min: 0, + x_max: 646, + y_min: 0, + y_max: 212, + ha: 212, + o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z', + }, + brassSmear: { + x_min: 0, + x_max: 334, + y_min: 0, + y_max: 151, + ha: 151, + o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z', + }, + stringsDownBow: { + x_min: 0, + x_max: 306, + y_min: 0, + y_max: 366, + ha: 366, + o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z', + }, + stringsUpBow: { + x_min: 0, + x_max: 219, + y_min: 0, + y_max: 489, + ha: 489, + o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z', + }, + stringsHarmonic: { + x_min: 0, + x_max: 191, + y_min: 0, + y_max: 202, + ha: 202, + o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: 0, + x_max: 201, + y_min: 0, + y_max: 325, + ha: 325, + o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: 0, + x_max: 211, + y_min: 0, + y_max: 307, + ha: 307, + o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z', + }, + pluckedLeftHandPizzicato: { + x_min: 0, + x_max: 271, + y_min: 0, + y_max: 284, + ha: 284, + o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 944, + y_min: -13, + y_max: 550, + ha: 563, + o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 437, + y_min: 0, + y_max: 461, + ha: 461, + o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z', + }, + pictChokeCymbal: { + x_min: 1, + x_max: 147, + y_min: 0, + y_max: 242, + ha: 242, + o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z', + }, + wiggleArpeggiatoUp: { + x_min: -22, + x_max: 300, + y_min: 0, + y_max: 176, + ha: 176, + o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z', + }, + arpeggiatoUp: { + x_min: 0, + x_max: 262, + y_min: 0, + y_max: 1459, + ha: 1459, + o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z', + }, + arpeggiatoDown: { + x_min: 0, + x_max: 218, + y_min: 0, + y_max: 1440, + ha: 1440, + o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z', + }, + repeat1Bar: { + x_min: 0, + x_max: 599, + y_min: -250, + y_max: 175, + ha: 425, + o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z', + }, + repeat2Bars: { + x_min: 0, + x_max: 775, + y_min: -247, + y_max: 363, + ha: 610, + o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z', + }, + repeat4Bars: { + x_min: 0, + x_max: 1374, + y_min: -304, + y_max: 304, + ha: 608, + o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z', + }, + repeatBarSlash: { + x_min: 0, + x_max: 630, + y_min: -225, + y_max: 265, + ha: 490, + o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z', + }, + csymDiminished: { + x_min: 0, + x_max: 506, + y_min: 0, + y_max: 500, + ha: 500, + o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z', + }, + csymHalfDiminished: { + x_min: -32, + x_max: 496, + y_min: -33, + y_max: 492, + ha: 525, + o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z', + }, + csymAugmented: { + x_min: 0, + x_max: 530, + y_min: 0, + y_max: 539, + ha: 539, + o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z', + }, + csymMajorSeventh: { + x_min: 0, + x_max: 593, + y_min: 0, + y_max: 569, + ha: 569, + o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z', + }, + csymMinor: { + x_min: 0, + x_max: 482, + y_min: 193, + y_max: 265, + ha: 72, + o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z', + }, + csymParensLeftTall: { + x_min: 0, + x_max: 185, + y_min: 0, + y_max: 1034, + ha: 1034, + o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z', + }, + csymParensRightTall: { + x_min: -40, + x_max: 189, + y_min: 0, + y_max: 1058, + ha: 1058, + o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z', + }, + csymBracketLeftTall: { + x_min: 0, + x_max: 328, + y_min: 2, + y_max: 807, + ha: 805, + o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z', + }, + csymBracketRightTall: { + x_min: 1, + x_max: 306, + y_min: 0, + y_max: 829, + ha: 829, + o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z', + }, + csymParensLeftVeryTall: { + x_min: 0, + x_max: 116, + y_min: 0, + y_max: 934, + ha: 934, + o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z', + }, + csymParensRightVeryTall: { + x_min: -20, + x_max: 111, + y_min: 0, + y_max: 1009, + ha: 1009, + o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z', + }, + csymDiagonalArrangementSlash: { + x_min: 0, + x_max: 990, + y_min: -27, + y_max: 1028, + ha: 1054, + o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z', + }, + accidentalNarrowReversedFlat: { + x_min: 0, + x_max: 208, + y_min: -231, + y_max: 449, + ha: 680, + o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z', + }, + accidentalNarrowReversedFlatAndFlat: { + x_min: 0, + x_max: 335, + y_min: -231, + y_max: 449, + ha: 680, + o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z', + }, + accidentalWilsonPlus: { + x_min: 0, + x_max: 298, + y_min: -218, + y_max: 218, + ha: 436, + o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z', + }, + accidentalWilsonMinus: { + x_min: 0, + x_max: 284, + y_min: -163, + y_max: 163, + ha: 326, + o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z', + }, + }, + fontFamily: 'Petaluma', + resolution: 1000, + generatedOn: '2022-12-18T09:07:50.817Z', +}; + + +/***/ }), + +/***/ "./src/fonts/petalumascript_glyphs.ts": +/*!********************************************!*\ + !*** ./src/fonts/petalumascript_glyphs.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PetalumaScriptFont": () => (/* binding */ PetalumaScriptFont) +/* harmony export */ }); +const PetalumaScriptFont = { + spacing: 50, + glyphs: { + ' ': { + x_min: 0, + x_max: 250, + y_min: 0, + y_max: 500, + ha: 500, + leftSideBearing: 0, + advanceWidth: 250, + }, + '0': { + x_min: 33, + x_max: 534, + y_min: -13, + y_max: 751, + ha: 764, + leftSideBearing: 33, + advanceWidth: 570, + }, + '1': { + x_min: 48, + x_max: 235, + y_min: -17, + y_max: 734, + ha: 751, + leftSideBearing: 48, + advanceWidth: 286, + }, + '2': { + x_min: 56, + x_max: 571, + y_min: -19, + y_max: 741, + ha: 760, + leftSideBearing: 56, + advanceWidth: 626, + }, + '3': { + x_min: 50, + x_max: 528, + y_min: -7, + y_max: 731, + ha: 738, + leftSideBearing: 50, + advanceWidth: 589, + }, + '4': { + x_min: 38, + x_max: 564, + y_min: -13, + y_max: 743, + ha: 756, + leftSideBearing: 38, + advanceWidth: 614, + }, + '5': { + x_min: 42, + x_max: 601, + y_min: -34, + y_max: 743, + ha: 777, + leftSideBearing: 42, + advanceWidth: 648, + }, + '6': { + x_min: 47, + x_max: 606, + y_min: -16, + y_max: 743, + ha: 759, + leftSideBearing: 47, + advanceWidth: 667, + }, + '7': { + x_min: 47, + x_max: 567, + y_min: 5, + y_max: 739, + ha: 734, + leftSideBearing: 0, + advanceWidth: 615, + }, + '8': { + x_min: 40, + x_max: 541, + y_min: -15, + y_max: 752, + ha: 767, + leftSideBearing: 40, + advanceWidth: 585, + }, + '9': { + x_min: 40, + x_max: 537, + y_min: -52, + y_max: 736, + ha: 788, + leftSideBearing: 40, + advanceWidth: 592, + }, + '!': { + x_min: 49, + x_max: 180, + y_min: -7, + y_max: 761, + ha: 768, + leftSideBearing: 49, + advanceWidth: 230, + }, + '"': { + x_min: 39, + x_max: 304, + y_min: 596, + y_max: 804, + ha: 208, + leftSideBearing: 39, + advanceWidth: 353, + }, + '#': { + x_min: 33, + x_max: 599, + y_min: -8, + y_max: 765, + ha: 773, + leftSideBearing: 33, + advanceWidth: 648, + }, + $: { + x_min: 53, + x_max: 495, + y_min: -111, + y_max: 823, + ha: 934, + leftSideBearing: 53, + advanceWidth: 560, + }, + '%': { + x_min: 35, + x_max: 656, + y_min: -128, + y_max: 808, + ha: 936, + leftSideBearing: 35, + advanceWidth: 711, + }, + '&': { + x_min: 53, + x_max: 441, + y_min: -3, + y_max: 753, + ha: 756, + leftSideBearing: 53, + advanceWidth: 500, + }, + "'": { + x_min: 43, + x_max: 161, + y_min: 590, + y_max: 811, + ha: 221, + leftSideBearing: 43, + advanceWidth: 217, + }, + '(': { + x_min: 41, + x_max: 311, + y_min: -36, + y_max: 845, + ha: 881, + leftSideBearing: 41, + advanceWidth: 308, + }, + ')': { + x_min: -8, + x_max: 257, + y_min: -21, + y_max: 852, + ha: 873, + leftSideBearing: -8, + advanceWidth: 280, + }, + '*': { + x_min: 59, + x_max: 539, + y_min: 175, + y_max: 589, + ha: 414, + leftSideBearing: 59, + advanceWidth: 601, + }, + '+': { + x_min: 33, + x_max: 361, + y_min: 180, + y_max: 587, + ha: 407, + leftSideBearing: 33, + advanceWidth: 400, + }, + ',': { + x_min: 15, + x_max: 176, + y_min: -129, + y_max: 92, + ha: 221, + leftSideBearing: 15, + advanceWidth: 205, + }, + '-': { + x_min: 40, + x_max: 380, + y_min: 317, + y_max: 452, + ha: 135, + leftSideBearing: 40, + advanceWidth: 422, + }, + '.': { + x_min: 48, + x_max: 185, + y_min: -56, + y_max: 84, + ha: 140, + leftSideBearing: 48, + advanceWidth: 227, + }, + '/': { + x_min: -58, + x_max: 654, + y_min: -122, + y_max: 844, + ha: 966, + leftSideBearing: -58, + advanceWidth: 626, + }, + ':': { + x_min: 65, + x_max: 225, + y_min: 97, + y_max: 536, + ha: 439, + leftSideBearing: 65, + advanceWidth: 302, + }, + ';': { + x_min: 13, + x_max: 295, + y_min: -139, + y_max: 536, + ha: 675, + leftSideBearing: 13, + advanceWidth: 334, + }, + '<': { + x_min: 28, + x_max: 438, + y_min: -1, + y_max: 607, + ha: 608, + leftSideBearing: 28, + advanceWidth: 475, + }, + '=': { + x_min: 40, + x_max: 383, + y_min: 199.9598640852289, + y_max: 541, + ha: 341.0401359147711, + leftSideBearing: 40, + advanceWidth: 422, + }, + '>': { + x_min: 35, + x_max: 421, + y_min: 28, + y_max: 632, + ha: 604, + leftSideBearing: 35, + advanceWidth: 466, + }, + '?': { + x_min: 45, + x_max: 548, + y_min: -17, + y_max: 767, + ha: 784, + leftSideBearing: 45, + advanceWidth: 592, + }, + '@': { + x_min: 51, + x_max: 730, + y_min: -78, + y_max: 753, + ha: 831, + leftSideBearing: 51, + advanceWidth: 781, + }, + A: { + x_min: 37, + x_max: 554, + y_min: -4, + y_max: 746, + ha: 750, + leftSideBearing: 37, + advanceWidth: 617, + }, + B: { + x_min: 37, + x_max: 532, + y_min: 3, + y_max: 783, + ha: 780, + leftSideBearing: 37, + advanceWidth: 579, + }, + C: { + x_min: 37, + x_max: 583, + y_min: -3, + y_max: 775, + ha: 778, + leftSideBearing: 37, + advanceWidth: 623, + }, + D: { + x_min: 50, + x_max: 530, + y_min: -15, + y_max: 749, + ha: 764, + leftSideBearing: 50, + advanceWidth: 579, + }, + E: { + x_min: 45, + x_max: 531, + y_min: -1, + y_max: 743, + ha: 744, + leftSideBearing: 45, + advanceWidth: 585, + }, + F: { + x_min: 45, + x_max: 459, + y_min: 23, + y_max: 727, + ha: 704, + leftSideBearing: 45, + advanceWidth: 510, + }, + G: { + x_min: 31, + x_max: 577, + y_min: -8, + y_max: 733, + ha: 741, + leftSideBearing: 31, + advanceWidth: 611, + }, + H: { + x_min: 37, + x_max: 493, + y_min: -22, + y_max: 758, + ha: 780, + leftSideBearing: 37, + advanceWidth: 535, + }, + I: { + x_min: 47, + x_max: 501, + y_min: -3, + y_max: 731, + ha: 734, + leftSideBearing: 47, + advanceWidth: 541, + }, + J: { + x_min: 33, + x_max: 531, + y_min: -23, + y_max: 725, + ha: 748, + leftSideBearing: 33, + advanceWidth: 573, + }, + K: { + x_min: 43, + x_max: 505, + y_min: -10, + y_max: 740, + ha: 750, + leftSideBearing: 43, + advanceWidth: 560, + }, + L: { + x_min: 49, + x_max: 457, + y_min: -2, + y_max: 746, + ha: 748, + leftSideBearing: 49, + advanceWidth: 510, + }, + M: { + x_min: 35, + x_max: 699, + y_min: 1, + y_max: 744, + ha: 743, + leftSideBearing: 35, + advanceWidth: 743, + }, + N: { + x_min: 34, + x_max: 533, + y_min: -17, + y_max: 761, + ha: 778, + leftSideBearing: 34, + advanceWidth: 579, + }, + O: { + x_min: 41, + x_max: 608, + y_min: -5, + y_max: 735, + ha: 740, + leftSideBearing: 41, + advanceWidth: 667, + }, + P: { + x_min: 53, + x_max: 451, + y_min: -18, + y_max: 735, + ha: 753, + leftSideBearing: 53, + advanceWidth: 497, + }, + Q: { + x_min: 40, + x_max: 599, + y_min: -67, + y_max: 744, + ha: 811, + leftSideBearing: 40, + advanceWidth: 648, + }, + R: { + x_min: 39, + x_max: 487, + y_min: 16, + y_max: 735, + ha: 719, + leftSideBearing: 39, + advanceWidth: 535, + }, + S: { + x_min: 35, + x_max: 552, + y_min: -47, + y_max: 708, + ha: 755, + leftSideBearing: 35, + advanceWidth: 604, + }, + T: { + x_min: 26, + x_max: 656, + y_min: -13, + y_max: 718, + ha: 731, + leftSideBearing: 26, + advanceWidth: 705, + }, + U: { + x_min: 41, + x_max: 518, + y_min: -20, + y_max: 748, + ha: 768, + leftSideBearing: 41, + advanceWidth: 567, + }, + V: { + x_min: 47, + x_max: 509, + y_min: -26, + y_max: 744, + ha: 770, + leftSideBearing: 47, + advanceWidth: 567, + }, + W: { + x_min: 44, + x_max: 789, + y_min: -35, + y_max: 720, + ha: 755, + leftSideBearing: 44, + advanceWidth: 833, + }, + X: { + x_min: 63, + x_max: 635, + y_min: -10, + y_max: 745, + ha: 755, + leftSideBearing: 63, + advanceWidth: 680, + }, + Y: { + x_min: 43, + x_max: 503, + y_min: -21, + y_max: 734, + ha: 755, + leftSideBearing: 43, + advanceWidth: 541, + }, + Z: { + x_min: 42, + x_max: 584, + y_min: -10, + y_max: 739, + ha: 749, + leftSideBearing: 42, + advanceWidth: 629, + }, + '[': { + x_min: 46, + x_max: 346, + y_min: -150, + y_max: 884, + ha: 1034, + leftSideBearing: 46, + advanceWidth: 291, + }, + '\\': { + x_min: 20, + x_max: 616, + y_min: -100, + y_max: 797, + ha: 897, + leftSideBearing: 20, + advanceWidth: 645, + }, + ']': { + x_min: -76, + x_max: 226, + y_min: -150, + y_max: 881, + ha: 1031, + leftSideBearing: -76, + advanceWidth: 297, + }, + '^': { + x_min: 43, + x_max: 437, + y_min: 517, + y_max: 812, + ha: 295, + leftSideBearing: 43, + advanceWidth: 478, + }, + _: { + x_min: 29, + x_max: 563, + y_min: -110, + y_max: -1, + ha: 109, + leftSideBearing: 29, + advanceWidth: 598, + }, + '`': { + x_min: 54, + x_max: 321, + y_min: 540, + y_max: 747, + ha: 207, + leftSideBearing: 54, + advanceWidth: 368, + }, + a: { + x_min: 20, + x_max: 447, + y_min: -17, + y_max: 495, + ha: 512, + leftSideBearing: 20, + advanceWidth: 494, + }, + b: { + x_min: 37, + x_max: 466, + y_min: -27, + y_max: 770, + ha: 797, + leftSideBearing: 37, + advanceWidth: 510, + }, + c: { + x_min: 35, + x_max: 456, + y_min: -9, + y_max: 507, + ha: 516, + leftSideBearing: 35, + advanceWidth: 460, + }, + d: { + x_min: 45, + x_max: 520, + y_min: -15, + y_max: 764, + ha: 779, + leftSideBearing: 45, + advanceWidth: 560, + }, + e: { + x_min: 33, + x_max: 370, + y_min: -5, + y_max: 501, + ha: 506, + leftSideBearing: 33, + advanceWidth: 397, + }, + f: { + x_min: 35, + x_max: 411, + y_min: -13, + y_max: 695, + ha: 708, + leftSideBearing: 35, + advanceWidth: 453, + }, + g: { + x_min: 33, + x_max: 551, + y_min: -257, + y_max: 505, + ha: 762, + leftSideBearing: 33, + advanceWidth: 611, + }, + h: { + x_min: 32, + x_max: 458, + y_min: -29, + y_max: 743, + ha: 772, + leftSideBearing: 32, + advanceWidth: 491, + }, + i: { + x_min: 45, + x_max: 167, + y_min: -13, + y_max: 631, + ha: 644, + leftSideBearing: 45, + advanceWidth: 220, + }, + j: { + x_min: -127, + x_max: 261, + y_min: -231, + y_max: 601, + ha: 832, + leftSideBearing: -127, + advanceWidth: 308, + }, + k: { + x_min: 39, + x_max: 443, + y_min: -3, + y_max: 700, + ha: 703, + leftSideBearing: 39, + advanceWidth: 497, + }, + l: { + x_min: 58, + x_max: 168, + y_min: -8, + y_max: 686, + ha: 694, + leftSideBearing: 58, + advanceWidth: 227, + }, + m: { + x_min: 39, + x_max: 688, + y_min: -14, + y_max: 501, + ha: 515, + leftSideBearing: 39, + advanceWidth: 718, + }, + n: { + x_min: 45, + x_max: 491, + y_min: -32, + y_max: 512, + ha: 544, + leftSideBearing: 45, + advanceWidth: 541, + }, + o: { + x_min: 41, + x_max: 424, + y_min: -12, + y_max: 493, + ha: 505, + leftSideBearing: 41, + advanceWidth: 447, + }, + p: { + x_min: 25, + x_max: 529, + y_min: -260, + y_max: 500, + ha: 760, + leftSideBearing: 25, + advanceWidth: 573, + }, + q: { + x_min: 53, + x_max: 603, + y_min: -235, + y_max: 514, + ha: 749, + leftSideBearing: 53, + advanceWidth: 623, + }, + r: { + x_min: 32, + x_max: 407, + y_min: -7, + y_max: 492, + ha: 499, + leftSideBearing: 32, + advanceWidth: 460, + }, + s: { + x_min: 49, + x_max: 416, + y_min: -12, + y_max: 519, + ha: 531, + leftSideBearing: 49, + advanceWidth: 460, + }, + t: { + x_min: 32, + x_max: 442, + y_min: -5, + y_max: 684, + ha: 689, + leftSideBearing: 32, + advanceWidth: 469, + }, + u: { + x_min: 41, + x_max: 487, + y_min: -5, + y_max: 507, + ha: 512, + leftSideBearing: 41, + advanceWidth: 510, + }, + v: { + x_min: 16, + x_max: 441, + y_min: -20, + y_max: 542, + ha: 562, + leftSideBearing: 16, + advanceWidth: 456, + }, + w: { + x_min: 39, + x_max: 639, + y_min: -22, + y_max: 505, + ha: 527, + leftSideBearing: 39, + advanceWidth: 661, + }, + x: { + x_min: 15, + x_max: 505, + y_min: -39, + y_max: 539, + ha: 578, + leftSideBearing: 15, + advanceWidth: 541, + }, + y: { + x_min: -98, + x_max: 501, + y_min: -242, + y_max: 511, + ha: 753, + leftSideBearing: -98, + advanceWidth: 548, + }, + z: { + x_min: 27, + x_max: 479, + y_min: -3, + y_max: 494, + ha: 497, + leftSideBearing: 27, + advanceWidth: 494, + }, + '{': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + '|': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + '}': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + '~': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + }, + fontFamily: 'PetalumaScript', + resolution: 1000, + generatedOn: '2020-06-14T18:33:25.407Z', +}; + + +/***/ }), + +/***/ "./src/fonts/robotoslab_glyphs.ts": +/*!****************************************!*\ + !*** ./src/fonts/robotoslab_glyphs.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RobotoSlabFont": () => (/* binding */ RobotoSlabFont) +/* harmony export */ }); +const RobotoSlabFont = { + spacing: 50, + glyphs: { + ' ': { + x_min: 0, + x_max: 509, + y_min: 0, + y_max: 2000, + ha: 2000, + leftSideBearing: 0, + advanceWidth: 509, + }, + '0': { + x_min: 121, + x_max: 1048, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 121, + advanceWidth: 1168, + }, + '1': { + x_min: 117, + x_max: 767, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 117, + advanceWidth: 844, + }, + '2': { + x_min: 75.8474576645637, + x_max: 1040, + y_min: 0, + y_max: 1477, + ha: 1477, + leftSideBearing: 75, + advanceWidth: 1131, + }, + '3': { + x_min: 74.85365853658536, + x_max: 994, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 74, + advanceWidth: 1106, + }, + '4': { + x_min: 63, + x_max: 1114, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 63, + advanceWidth: 1187, + }, + '5': { + x_min: 96.8448275474953, + x_max: 982, + y_min: -21, + y_max: 1456, + ha: 1477, + leftSideBearing: 96, + advanceWidth: 1081, + }, + '6': { + x_min: 121, + x_max: 1067, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 121, + advanceWidth: 1144, + }, + '7': { + x_min: 76, + x_max: 1060, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: -30, + advanceWidth: 1128, + }, + '8': { + x_min: 92, + x_max: 1039, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 92, + advanceWidth: 1131, + }, + '9': { + x_min: 84, + x_max: 1026, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 84, + advanceWidth: 1154, + }, + '!': { + x_min: 143, + x_max: 340, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 143, + advanceWidth: 483, + }, + '"': { + x_min: 166, + x_max: 634, + y_min: 1055, + y_max: 1560, + ha: 505, + leftSideBearing: 166, + advanceWidth: 770, + }, + '#': { + x_min: 63, + x_max: 1179, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 63, + advanceWidth: 1246, + }, + $: { + x_min: 81.92156915727656, + x_max: 1012, + y_min: -208, + y_max: 1693, + ha: 1901, + leftSideBearing: 81, + advanceWidth: 1110, + }, + '%': { + x_min: 77, + x_max: 1384, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 77, + advanceWidth: 1460, + }, + '&': { + x_min: 74, + x_max: 1242, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 74, + advanceWidth: 1289, + }, + "'": { + x_min: 166, + x_max: 324, + y_min: 1055, + y_max: 1560, + ha: 505, + leftSideBearing: 166, + advanceWidth: 460, + }, + '(': { + x_min: 114, + x_max: 650, + y_min: -463, + y_max: 1636, + ha: 2099, + leftSideBearing: 114, + advanceWidth: 662, + }, + ')': { + x_min: 11, + x_max: 547, + y_min: -463, + y_max: 1636, + ha: 2099, + leftSideBearing: 11, + advanceWidth: 654, + }, + '*': { + x_min: 66, + x_max: 893, + y_min: 607, + y_max: 1456, + ha: 849, + leftSideBearing: 66, + advanceWidth: 958, + }, + '+': { + x_min: 73, + x_max: 1071, + y_min: 146, + y_max: 1206, + ha: 1060, + leftSideBearing: 73, + advanceWidth: 1145, + }, + ',': { + x_min: 23, + x_max: 315, + y_min: -311, + y_max: 221, + ha: 532, + leftSideBearing: 23, + advanceWidth: 404, + }, + '-': { + x_min: 154, + x_max: 643, + y_min: 538, + y_max: 692, + ha: 154, + leftSideBearing: 154, + advanceWidth: 797, + }, + '.': { + x_min: 145, + x_max: 342, + y_min: 0, + y_max: 202, + ha: 202, + leftSideBearing: 145, + advanceWidth: 493, + }, + '/': { + x_min: 0, + x_max: 774, + y_min: -125, + y_max: 1456, + ha: 1581, + leftSideBearing: 0, + advanceWidth: 824, + }, + ':': { + x_min: 145, + x_max: 342, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 145, + advanceWidth: 419, + }, + ';': { + x_min: 53, + x_max: 345, + y_min: -311, + y_max: 1082, + ha: 1393, + leftSideBearing: 53, + advanceWidth: 424, + }, + '<': { + x_min: 76, + x_max: 892, + y_min: 107, + y_max: 1013, + ha: 906, + leftSideBearing: 76, + advanceWidth: 1017, + }, + '=': { + x_min: 147, + x_max: 981, + y_min: 407, + y_max: 987, + ha: 580, + leftSideBearing: 147, + advanceWidth: 1127, + }, + '>': { + x_min: 125, + x_max: 980, + y_min: 87, + y_max: 993, + ha: 906, + leftSideBearing: 125, + advanceWidth: 1060, + }, + '?': { + x_min: 65.92660602419838, + x_max: 890, + y_min: 0, + y_max: 1477, + ha: 1477, + leftSideBearing: 65, + advanceWidth: 953, + }, + '@': { + x_min: 84.3592218305664, + x_max: 1705.2346925277395, + y_min: -453, + y_max: 1431, + ha: 1884, + leftSideBearing: 84, + advanceWidth: 1821, + }, + A: { + x_min: 70, + x_max: 1463, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 70, + advanceWidth: 1533, + }, + B: { + x_min: 81, + x_max: 1253, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1322, + }, + C: { + x_min: 80, + x_max: 1174, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 80, + advanceWidth: 1290, + }, + D: { + x_min: 81, + x_max: 1291, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1356, + }, + E: { + x_min: 81, + x_max: 1190, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1306, + }, + F: { + x_min: 81, + x_max: 1176, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1256, + }, + G: { + x_min: 80, + x_max: 1226, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 80, + advanceWidth: 1346, + }, + H: { + x_min: 81, + x_max: 1497, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1578, + }, + I: { + x_min: 81, + x_max: 604, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 685, + }, + J: { + x_min: 60, + x_max: 1100, + y_min: -21, + y_max: 1456, + ha: 1477, + leftSideBearing: 60, + advanceWidth: 1169, + }, + K: { + x_min: 81, + x_max: 1427, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1501, + }, + L: { + x_min: 81, + x_max: 1130, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1210, + }, + M: { + x_min: 94, + x_max: 1888, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 94, + advanceWidth: 1982, + }, + N: { + x_min: 83, + x_max: 1509, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 83, + advanceWidth: 1592, + }, + O: { + x_min: 70, + x_max: 1281, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 70, + advanceWidth: 1351, + }, + P: { + x_min: 81, + x_max: 1242, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1297, + }, + Q: { + x_min: 70, + x_max: 1348, + y_min: -245, + y_max: 1477, + ha: 1722, + leftSideBearing: 70, + advanceWidth: 1376, + }, + R: { + x_min: 81, + x_max: 1285, + y_min: 0, + y_max: 1455, + ha: 1455, + leftSideBearing: 81, + advanceWidth: 1385, + }, + S: { + x_min: 115, + x_max: 1116, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 115, + advanceWidth: 1206, + }, + T: { + x_min: 96, + x_max: 1306, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 96, + advanceWidth: 1406, + }, + U: { + x_min: 70, + x_max: 1452, + y_min: -21, + y_max: 1456, + ha: 1477, + leftSideBearing: 70, + advanceWidth: 1522, + }, + V: { + x_min: 65, + x_max: 1443, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 65, + advanceWidth: 1508, + }, + W: { + x_min: 72, + x_max: 2057, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 72, + advanceWidth: 2129, + }, + X: { + x_min: 80, + x_max: 1449, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 80, + advanceWidth: 1529, + }, + Y: { + x_min: 65, + x_max: 1396, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 65, + advanceWidth: 1461, + }, + Z: { + x_min: 90, + x_max: 1107, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 90, + advanceWidth: 1197, + }, + '[': { + x_min: 157, + x_max: 541, + y_min: -312, + y_max: 1664, + ha: 1976, + leftSideBearing: 157, + advanceWidth: 573, + }, + '\\': { + x_min: 36, + x_max: 830, + y_min: -125, + y_max: 1456, + ha: 1581, + leftSideBearing: 36, + advanceWidth: 841, + }, + ']': { + x_min: 23, + x_max: 408, + y_min: -312, + y_max: 1664, + ha: 1976, + leftSideBearing: 23, + advanceWidth: 552, + }, + '^': { + x_min: 71, + x_max: 802, + y_min: 729, + y_max: 1456, + ha: 727, + leftSideBearing: 71, + advanceWidth: 864, + }, + _: { + x_min: 119, + x_max: 1041, + y_min: -154, + y_max: 0, + ha: 154, + leftSideBearing: 119, + advanceWidth: 1168, + }, + '`': { + x_min: 40, + x_max: 456, + y_min: 1288, + y_max: 1560, + ha: 272, + leftSideBearing: 40, + advanceWidth: 496, + }, + a: { + x_min: 79, + x_max: 1053, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 79, + advanceWidth: 1132, + }, + b: { + x_min: -16, + x_max: 1071, + y_min: -21, + y_max: 1560, + ha: 1581, + leftSideBearing: -16, + advanceWidth: 1145, + }, + c: { + x_min: 78, + x_max: 988, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 78, + advanceWidth: 1067, + }, + d: { + x_min: 78, + x_max: 1156, + y_min: -21, + y_max: 1560, + ha: 1581, + leftSideBearing: 78, + advanceWidth: 1218, + }, + e: { + x_min: 74, + x_max: 980, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 74, + advanceWidth: 1059, + }, + f: { + x_min: 64, + x_max: 731, + y_min: 0, + y_max: 1581, + ha: 1581, + leftSideBearing: 64, + advanceWidth: 725, + }, + g: { + x_min: 78, + x_max: 1133, + y_min: -437, + y_max: 1102, + ha: 1539, + leftSideBearing: 78, + advanceWidth: 1157, + }, + h: { + x_min: 49, + x_max: 1255, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 49, + advanceWidth: 1315, + }, + i: { + x_min: 67, + x_max: 590, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 67, + advanceWidth: 652, + }, + j: { + x_min: -56, + x_max: 381, + y_min: -437, + y_max: 1560, + ha: 1997, + leftSideBearing: -56, + advanceWidth: 525, + }, + k: { + x_min: 64, + x_max: 1248, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 64, + advanceWidth: 1287, + }, + l: { + x_min: 64, + x_max: 587, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 64, + advanceWidth: 653, + }, + m: { + x_min: 74, + x_max: 1905, + y_min: 0, + y_max: 1102, + ha: 1102, + leftSideBearing: 74, + advanceWidth: 1977, + }, + n: { + x_min: 74, + x_max: 1278, + y_min: 0, + y_max: 1102, + ha: 1102, + leftSideBearing: 74, + advanceWidth: 1343, + }, + o: { + x_min: 78, + x_max: 1046, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 78, + advanceWidth: 1124, + }, + p: { + x_min: 34, + x_max: 1119, + y_min: -416, + y_max: 1102, + ha: 1518, + leftSideBearing: 34, + advanceWidth: 1197, + }, + q: { + x_min: 78, + x_max: 1135, + y_min: -416, + y_max: 1102, + ha: 1518, + leftSideBearing: 78, + advanceWidth: 1139, + }, + r: { + x_min: 72, + x_max: 808, + y_min: 0, + y_max: 1102, + ha: 1102, + leftSideBearing: 72, + advanceWidth: 854, + }, + s: { + x_min: 104, + x_max: 933, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 104, + advanceWidth: 1022, + }, + t: { + x_min: 24, + x_max: 678, + y_min: -17, + y_max: 1343, + ha: 1360, + leftSideBearing: 24, + advanceWidth: 730, + }, + u: { + x_min: 52, + x_max: 1181, + y_min: -21, + y_max: 1082, + ha: 1103, + leftSideBearing: 52, + advanceWidth: 1245, + }, + v: { + x_min: 26, + x_max: 1176, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 26, + advanceWidth: 1206, + }, + w: { + x_min: 52, + x_max: 1777, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 52, + advanceWidth: 1823, + }, + x: { + x_min: 42, + x_max: 1163, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 42, + advanceWidth: 1203, + }, + y: { + x_min: 24, + x_max: 1172, + y_min: -437, + y_max: 1082, + ha: 1519, + leftSideBearing: 24, + advanceWidth: 1192, + }, + z: { + x_min: 88, + x_max: 960, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 88, + advanceWidth: 1032, + }, + '{': { + x_min: 63, + x_max: 671, + y_min: -364, + y_max: 1597, + ha: 1961, + leftSideBearing: 63, + advanceWidth: 701, + }, + '|': { + x_min: 150, + x_max: 307, + y_min: -270, + y_max: 1456, + ha: 1726, + leftSideBearing: 150, + advanceWidth: 451, + }, + '}': { + x_min: 27, + x_max: 635, + y_min: -364, + y_max: 1597, + ha: 1961, + leftSideBearing: 27, + advanceWidth: 701, + }, + '~': { + x_min: 121, + x_max: 1257, + y_min: 401, + y_max: 803, + ha: 402, + leftSideBearing: 121, + advanceWidth: 1386, + }, + }, + fontFamily: 'Roboto Slab', + resolution: 2048, + generatedOn: '2020-06-15T19:12:58.120Z', +}; + + +/***/ }), + +/***/ "./src/fonts/sans_bold_text_metrics.ts": +/*!*********************************************!*\ + !*** ./src/fonts/sans_bold_text_metrics.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SansFontBold": () => (/* binding */ SansFontBold) +/* harmony export */ }); +const SansFontBold = { + glyphs: { + '0': { + x_min: 86, + x_max: 1038, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 86, + advanceWidth: 1139, + }, + '1': { + x_min: 162, + x_max: 806, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 162, + advanceWidth: 1139, + }, + '2': { + x_min: 51, + x_max: 1036, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 51, + advanceWidth: 1139, + }, + '3': { + x_min: 77, + x_max: 1051, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 77, + advanceWidth: 1139, + }, + '4': { + x_min: 38, + x_max: 1092, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 38, + advanceWidth: 1139, + }, + '5': { + x_min: 91, + x_max: 1077, + y_min: -25, + y_max: 1446, + ha: 1471, + leftSideBearing: 91, + advanceWidth: 1139, + }, + '6': { + x_min: 87, + x_max: 1066, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 87, + advanceWidth: 1139, + }, + '7': { + x_min: 87, + x_max: 1048, + y_min: 0, + y_max: 1446, + ha: 1446, + leftSideBearing: 87, + advanceWidth: 1139, + }, + '8': { + x_min: 83, + x_max: 1047, + y_min: -26, + y_max: 1472, + ha: 1498, + leftSideBearing: 83, + advanceWidth: 1139, + }, + '9': { + x_min: 65, + x_max: 1044, + y_min: -26, + y_max: 1472, + ha: 1498, + leftSideBearing: 65, + advanceWidth: 1139, + }, + ' ': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 569, + }, + '!': { + x_min: 184, + x_max: 488, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 184, + advanceWidth: 682, + }, + '"': { + x_min: 112, + x_max: 869, + y_min: 945, + y_max: 1466, + ha: 521, + leftSideBearing: 112, + advanceWidth: 971, + }, + '#': { + x_min: 18, + x_max: 1115, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 18, + advanceWidth: 1139, + }, + $: { + x_min: 70, + x_max: 1048, + y_min: -205, + y_max: 1584, + ha: 1789, + leftSideBearing: 70, + advanceWidth: 1139, + }, + '%': { + x_min: 89, + x_max: 1725, + y_min: -59, + y_max: 1491, + ha: 1550, + leftSideBearing: 89, + advanceWidth: 1821, + }, + '&': { + x_min: 90, + x_max: 1446, + y_min: -38, + y_max: 1491, + ha: 1529, + leftSideBearing: 90, + advanceWidth: 1479, + }, + "'": { + x_min: 92, + x_max: 398, + y_min: 945, + y_max: 1466, + ha: 521, + leftSideBearing: 92, + advanceWidth: 487, + }, + '(': { + x_min: 107, + x_max: 616, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 107, + advanceWidth: 682, + }, + ')': { + x_min: 67, + x_max: 576, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 67, + advanceWidth: 682, + }, + '*': { + x_min: 28, + x_max: 753, + y_min: 792, + y_max: 1491, + ha: 699, + leftSideBearing: 28, + advanceWidth: 797, + }, + '+': { + x_min: 85, + x_max: 1110, + y_min: 211, + y_max: 1236, + ha: 1025, + leftSideBearing: 85, + advanceWidth: 1196, + }, + ',': { + x_min: 117, + x_max: 421, + y_min: -327, + y_max: 281, + ha: 608, + leftSideBearing: 117, + advanceWidth: 569, + }, + '-': { + x_min: 115, + x_max: 667, + y_min: 391, + y_max: 672, + ha: 281, + leftSideBearing: 115, + advanceWidth: 682, + }, + '.': { + x_min: 147, + x_max: 428, + y_min: 0, + y_max: 281, + ha: 281, + leftSideBearing: 147, + advanceWidth: 569, + }, + '/': { + x_min: -3, + x_max: 571, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: -3, + advanceWidth: 569, + }, + ':': { + x_min: 201, + x_max: 482, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 201, + advanceWidth: 682, + }, + ';': { + x_min: 170, + x_max: 474, + y_min: -327, + y_max: 1062, + ha: 1389, + leftSideBearing: 170, + advanceWidth: 682, + }, + '<': { + x_min: 95, + x_max: 1100, + y_min: 167, + y_max: 1281, + ha: 1114, + leftSideBearing: 95, + advanceWidth: 1196, + }, + '=': { + x_min: 85, + x_max: 1110, + y_min: 372, + y_max: 1074, + ha: 702, + leftSideBearing: 85, + advanceWidth: 1196, + }, + '>': { + x_min: 95, + x_max: 1101, + y_min: 166, + y_max: 1279, + ha: 1113, + leftSideBearing: 95, + advanceWidth: 1196, + }, + '?': { + x_min: 106, + x_max: 1158, + y_min: 0, + y_max: 1481, + ha: 1481, + leftSideBearing: 106, + advanceWidth: 1251, + }, + '@': { + x_min: 61, + x_max: 1990, + y_min: -431, + y_max: 1492, + ha: 1923, + leftSideBearing: 61, + advanceWidth: 1997, + }, + A: { + x_min: 0, + x_max: 1471, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 0, + advanceWidth: 1479, + }, + B: { + x_min: 150, + x_max: 1378, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1479, + }, + C: { + x_min: 97, + x_max: 1374, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 97, + advanceWidth: 1479, + }, + D: { + x_min: 148, + x_max: 1377, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 148, + advanceWidth: 1479, + }, + E: { + x_min: 149, + x_max: 1264, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 149, + advanceWidth: 1366, + }, + F: { + x_min: 151, + x_max: 1156, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 151, + advanceWidth: 1251, + }, + G: { + x_min: 98, + x_max: 1469, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 98, + advanceWidth: 1593, + }, + H: { + x_min: 150, + x_max: 1322, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1479, + }, + I: { + x_min: 140, + x_max: 436, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 140, + advanceWidth: 569, + }, + J: { + x_min: 35, + x_max: 973, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 35, + advanceWidth: 1139, + }, + K: { + x_min: 153, + x_max: 1475, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 153, + advanceWidth: 1479, + }, + L: { + x_min: 157, + x_max: 1189, + y_min: 0, + y_max: 1454, + ha: 1454, + leftSideBearing: 157, + advanceWidth: 1251, + }, + M: { + x_min: 145, + x_max: 1561, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 145, + advanceWidth: 1706, + }, + N: { + x_min: 152, + x_max: 1315, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 152, + advanceWidth: 1479, + }, + O: { + x_min: 89, + x_max: 1511, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 89, + advanceWidth: 1593, + }, + P: { + x_min: 149, + x_max: 1272, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 149, + advanceWidth: 1366, + }, + Q: { + x_min: 89, + x_max: 1566, + y_min: -147, + y_max: 1491, + ha: 1638, + leftSideBearing: 89, + advanceWidth: 1593, + }, + R: { + x_min: 150, + x_max: 1468, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1479, + }, + S: { + x_min: 74, + x_max: 1266, + y_min: -26, + y_max: 1491, + ha: 1517, + leftSideBearing: 74, + advanceWidth: 1366, + }, + T: { + x_min: 44, + x_max: 1209, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 44, + advanceWidth: 1251, + }, + U: { + x_min: 147, + x_max: 1316, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 147, + advanceWidth: 1479, + }, + V: { + x_min: -1, + x_max: 1364, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: -1, + advanceWidth: 1366, + }, + W: { + x_min: 7, + x_max: 1931, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 7, + advanceWidth: 1933, + }, + X: { + x_min: 0, + x_max: 1363, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 0, + advanceWidth: 1366, + }, + Y: { + x_min: -3, + x_max: 1368, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: -3, + advanceWidth: 1366, + }, + Z: { + x_min: 22, + x_max: 1213, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 22, + advanceWidth: 1251, + }, + '[': { + x_min: 146, + x_max: 644, + y_min: -413, + y_max: 1466, + ha: 1879, + leftSideBearing: 146, + advanceWidth: 682, + }, + '\\': { + x_min: -3, + x_max: 571, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: -3, + advanceWidth: 569, + }, + ']': { + x_min: 38, + x_max: 536, + y_min: -413, + y_max: 1466, + ha: 1879, + leftSideBearing: 38, + advanceWidth: 682, + }, + '^': { + x_min: 115, + x_max: 1080, + y_min: 692, + y_max: 1491, + ha: 799, + leftSideBearing: 115, + advanceWidth: 1196, + }, + _: { + x_min: -19, + x_max: 1149, + y_min: -405, + y_max: -223, + ha: 182, + leftSideBearing: -19, + advanceWidth: 1139, + }, + '`': { + x_min: 42, + x_max: 495, + y_min: 1192, + y_max: 1491, + ha: 299, + leftSideBearing: 42, + advanceWidth: 682, + }, + a: { + x_min: 73, + x_max: 1070, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 73, + advanceWidth: 1139, + }, + b: { + x_min: 135, + x_max: 1172, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 135, + advanceWidth: 1251, + }, + c: { + x_min: 85, + x_max: 1087, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 85, + advanceWidth: 1139, + }, + d: { + x_min: 84, + x_max: 1121, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 84, + advanceWidth: 1251, + }, + e: { + x_min: 65, + x_max: 1057.2517482517483, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 65, + advanceWidth: 1139, + }, + f: { + x_min: 24, + x_max: 742, + y_min: 0, + y_max: 1491, + ha: 1491, + leftSideBearing: 24, + advanceWidth: 682, + }, + g: { + x_min: 84, + x_max: 1120, + y_min: -431, + y_max: 1086, + ha: 1517, + leftSideBearing: 84, + advanceWidth: 1251, + }, + h: { + x_min: 146, + x_max: 1113, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 146, + advanceWidth: 1251, + }, + i: { + x_min: 147, + x_max: 428, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 147, + advanceWidth: 569, + }, + j: { + x_min: -94, + x_max: 422, + y_min: -431, + y_max: 1466, + ha: 1897, + leftSideBearing: -94, + advanceWidth: 569, + }, + k: { + x_min: 137, + x_max: 1119, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 137, + advanceWidth: 1139, + }, + l: { + x_min: 147, + x_max: 428, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 147, + advanceWidth: 569, + }, + m: { + x_min: 126, + x_max: 1688, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 126, + advanceWidth: 1821, + }, + n: { + x_min: 145, + x_max: 1113, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 145, + advanceWidth: 1251, + }, + o: { + x_min: 82, + x_max: 1178, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 82, + advanceWidth: 1251, + }, + p: { + x_min: 139, + x_max: 1175, + y_min: -404, + y_max: 1086, + ha: 1490, + leftSideBearing: 139, + advanceWidth: 1251, + }, + q: { + x_min: 91, + x_max: 1122, + y_min: -404, + y_max: 1086, + ha: 1490, + leftSideBearing: 91, + advanceWidth: 1251, + }, + r: { + x_min: 135, + x_max: 823, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 135, + advanceWidth: 797, + }, + s: { + x_min: 48, + x_max: 1040, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 48, + advanceWidth: 1139, + }, + t: { + x_min: 31, + x_max: 657, + y_min: -24, + y_max: 1437, + ha: 1461, + leftSideBearing: 31, + advanceWidth: 682, + }, + u: { + x_min: 141, + x_max: 1107, + y_min: -24, + y_max: 1062, + ha: 1086, + leftSideBearing: 141, + advanceWidth: 1251, + }, + v: { + x_min: 11, + x_max: 1114, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 11, + advanceWidth: 1139, + }, + w: { + x_min: 9, + x_max: 1592, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 9, + advanceWidth: 1593, + }, + x: { + x_min: 12, + x_max: 1120, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 12, + advanceWidth: 1139, + }, + y: { + x_min: 14, + x_max: 1106, + y_min: -431, + y_max: 1062, + ha: 1493, + leftSideBearing: 14, + advanceWidth: 1139, + }, + z: { + x_min: 34, + x_max: 982, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 34, + advanceWidth: 1024, + }, + '{': { + x_min: 60, + x_max: 744, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 60, + advanceWidth: 797, + }, + '|': { + x_min: 176, + x_max: 399, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 176, + advanceWidth: 573, + }, + '}': { + x_min: 45, + x_max: 729, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 45, + advanceWidth: 797, + }, + '~': { + x_min: 67, + x_max: 1129, + y_min: 519, + y_max: 924, + ha: 405, + leftSideBearing: 67, + advanceWidth: 1196, + }, + }, + fontFamily: 'Arial', + resolution: 2048, + generatedOn: '2022-11-04T20:05:21.000Z', +}; + + +/***/ }), + +/***/ "./src/fonts/sans_text_metrics.ts": +/*!****************************************!*\ + !*** ./src/fonts/sans_text_metrics.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SansFont": () => (/* binding */ SansFont) +/* harmony export */ }); +const SansFont = { + smufl: false, + name: 'SANS', + spacing: 50, + Description: 'Built-in sans-serif font', + bold: true, + italic: true, + monospaced: false, + serifs: false, + glyphs: { + '0': { + x_min: 85, + x_max: 1041, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 85, + advanceWidth: 1139, + }, + '1': { + x_min: 223, + x_max: 763, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 223, + advanceWidth: 1139, + }, + '2': { + x_min: 61.840001123045234, + x_max: 1031, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 61, + advanceWidth: 1139, + }, + '3': { + x_min: 86, + x_max: 1046, + y_min: -26, + y_max: 1472, + ha: 1498, + leftSideBearing: 86, + advanceWidth: 1139, + }, + '4': { + x_min: 26, + x_max: 1040, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 26, + advanceWidth: 1139, + }, + '5': { + x_min: 85, + x_max: 1057, + y_min: -25, + y_max: 1446, + ha: 1471, + leftSideBearing: 85, + advanceWidth: 1139, + }, + '6': { + x_min: 77, + x_max: 1045, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 77, + advanceWidth: 1139, + }, + '7': { + x_min: 97, + x_max: 1046, + y_min: 0, + y_max: 1447, + ha: 1447, + leftSideBearing: 97, + advanceWidth: 1139, + }, + '8': { + x_min: 83, + x_max: 1049, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 83, + advanceWidth: 1139, + }, + '9': { + x_min: 85, + x_max: 1049, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 85, + advanceWidth: 1139, + }, + ' ': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 569, + }, + '!': { + x_min: 176, + x_max: 399, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 176, + advanceWidth: 569, + }, + '"': { + x_min: 94, + x_max: 631, + y_min: 947, + y_max: 1466, + ha: 519, + leftSideBearing: 94, + advanceWidth: 727, + }, + '#': { + x_min: 21, + x_max: 1113, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 21, + advanceWidth: 1139, + }, + $: { + x_min: 73, + x_max: 1043, + y_min: -211, + y_max: 1601, + ha: 1812, + leftSideBearing: 73, + advanceWidth: 1139, + }, + '%': { + x_min: 119, + x_max: 1695, + y_min: -54, + y_max: 1491, + ha: 1545, + leftSideBearing: 119, + advanceWidth: 1821, + }, + '&': { + x_min: 88, + x_max: 1319, + y_min: -34, + y_max: 1491, + ha: 1525, + leftSideBearing: 88, + advanceWidth: 1366, + }, + "'": { + x_min: 90, + x_max: 295, + y_min: 947, + y_max: 1466, + ha: 519, + leftSideBearing: 90, + advanceWidth: 391, + }, + '(': { + x_min: 124, + x_max: 608, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 124, + advanceWidth: 682, + }, + ')': { + x_min: 124, + x_max: 608, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 124, + advanceWidth: 682, + }, + '*': { + x_min: 64, + x_max: 725, + y_min: 867, + y_max: 1491, + ha: 624, + leftSideBearing: 64, + advanceWidth: 797, + }, + '+': { + x_min: 114, + x_max: 1082, + y_min: 237, + y_max: 1206, + ha: 969, + leftSideBearing: 114, + advanceWidth: 1196, + }, + ',': { + x_min: 170, + x_max: 387, + y_min: -290, + y_max: 205, + ha: 495, + leftSideBearing: 170, + advanceWidth: 569, + }, + '-': { + x_min: 65, + x_max: 618, + y_min: 440, + y_max: 621, + ha: 181, + leftSideBearing: 65, + advanceWidth: 682, + }, + '.': { + x_min: 186, + x_max: 391, + y_min: 0, + y_max: 205, + ha: 205, + leftSideBearing: 186, + advanceWidth: 569, + }, + '/': { + x_min: 0, + x_max: 569, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 0, + advanceWidth: 569, + }, + ':': { + x_min: 185, + x_max: 390, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 185, + advanceWidth: 569, + }, + ';': { + x_min: 170, + x_max: 387, + y_min: -290, + y_max: 1062, + ha: 1352, + leftSideBearing: 170, + advanceWidth: 569, + }, + '<': { + x_min: 112, + x_max: 1083, + y_min: 226, + y_max: 1219, + ha: 993, + leftSideBearing: 112, + advanceWidth: 1196, + }, + '=': { + x_min: 114, + x_max: 1082, + y_min: 417, + y_max: 1030, + ha: 613, + leftSideBearing: 114, + advanceWidth: 1196, + }, + '>': { + x_min: 112, + x_max: 1083, + y_min: 226, + y_max: 1219, + ha: 993, + leftSideBearing: 112, + advanceWidth: 1196, + }, + '?': { + x_min: 90, + x_max: 1036, + y_min: 0, + y_max: 1491, + ha: 1491, + leftSideBearing: 90, + advanceWidth: 1139, + }, + '@': { + x_min: 111, + x_max: 2005, + y_min: -431, + y_max: 1493, + ha: 1924, + leftSideBearing: 111, + advanceWidth: 2079, + }, + A: { + x_min: -3, + x_max: 1369, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: -3, + advanceWidth: 1366, + }, + B: { + x_min: 150, + x_max: 1257, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1366, + }, + C: { + x_min: 102, + x_max: 1398, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 102, + advanceWidth: 1479, + }, + D: { + x_min: 158, + x_max: 1370, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 158, + advanceWidth: 1479, + }, + E: { + x_min: 162, + x_max: 1256, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 162, + advanceWidth: 1366, + }, + F: { + x_min: 168, + x_max: 1157, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 168, + advanceWidth: 1251, + }, + G: { + x_min: 109, + x_max: 1465, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 109, + advanceWidth: 1593, + }, + H: { + x_min: 164, + x_max: 1314, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 164, + advanceWidth: 1479, + }, + I: { + x_min: 191, + x_max: 385, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 191, + advanceWidth: 569, + }, + J: { + x_min: 58.84976474807333, + x_max: 865, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 58, + advanceWidth: 1024, + }, + K: { + x_min: 150, + x_max: 1362, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1366, + }, + L: { + x_min: 150, + x_max: 1066, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1139, + }, + M: { + x_min: 152, + x_max: 1551, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 152, + advanceWidth: 1706, + }, + N: { + x_min: 156, + x_max: 1311, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 156, + advanceWidth: 1479, + }, + O: { + x_min: 99, + x_max: 1501, + y_min: -25, + y_max: 1492, + ha: 1517, + leftSideBearing: 99, + advanceWidth: 1593, + }, + P: { + x_min: 158, + x_max: 1277, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 158, + advanceWidth: 1366, + }, + Q: { + x_min: 88, + x_max: 1518, + y_min: -114, + y_max: 1492, + ha: 1606, + leftSideBearing: 88, + advanceWidth: 1593, + }, + R: { + x_min: 161, + x_max: 1453, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 161, + advanceWidth: 1479, + }, + S: { + x_min: 92, + x_max: 1259, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 92, + advanceWidth: 1366, + }, + T: { + x_min: 48, + x_max: 1210, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 48, + advanceWidth: 1251, + }, + U: { + x_min: 161, + x_max: 1314, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 161, + advanceWidth: 1479, + }, + V: { + x_min: 9, + x_max: 1350, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 9, + advanceWidth: 1366, + }, + W: { + x_min: 25, + x_max: 1910, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 25, + advanceWidth: 1933, + }, + X: { + x_min: 9, + x_max: 1353, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 9, + advanceWidth: 1366, + }, + Y: { + x_min: 6, + x_max: 1350, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 6, + advanceWidth: 1366, + }, + Z: { + x_min: 41, + x_max: 1200, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 41, + advanceWidth: 1251, + }, + '[': { + x_min: 139, + x_max: 536, + y_min: -407, + y_max: 1466, + ha: 1873, + leftSideBearing: 139, + advanceWidth: 569, + }, + '\\': { + x_min: 0, + x_max: 569, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 0, + advanceWidth: 569, + }, + ']': { + x_min: 39, + x_max: 436, + y_min: -407, + y_max: 1466, + ha: 1873, + leftSideBearing: 39, + advanceWidth: 569, + }, + '^': { + x_min: 54, + x_max: 907, + y_min: 690, + y_max: 1491, + ha: 801, + leftSideBearing: 54, + advanceWidth: 961, + }, + _: { + x_min: -31, + x_max: 1162, + y_min: -407, + y_max: -277, + ha: 130, + leftSideBearing: -31, + advanceWidth: 1139, + }, + '`': { + x_min: 89, + x_max: 465, + y_min: 1194, + y_max: 1474, + ha: 280, + leftSideBearing: 89, + advanceWidth: 682, + }, + a: { + x_min: 74, + x_max: 1052, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 74, + advanceWidth: 1139, + }, + b: { + x_min: 134, + x_max: 1055, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 134, + advanceWidth: 1139, + }, + c: { + x_min: 80, + x_max: 1005, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 80, + advanceWidth: 1024, + }, + d: { + x_min: 70, + x_max: 991, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 70, + advanceWidth: 1139, + }, + e: { + x_min: 75, + x_max: 1054, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 75, + advanceWidth: 1139, + }, + f: { + x_min: 19, + x_max: 640, + y_min: 0, + y_max: 1491, + ha: 1491, + leftSideBearing: 19, + advanceWidth: 569, + }, + g: { + x_min: 66, + x_max: 1002, + y_min: -431, + y_max: 1086, + ha: 1517, + leftSideBearing: 66, + advanceWidth: 1139, + }, + h: { + x_min: 135, + x_max: 1000, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 135, + advanceWidth: 1139, + }, + i: { + x_min: 136, + x_max: 316, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 136, + advanceWidth: 455, + }, + j: { + x_min: -94, + x_max: 314, + y_min: -431, + y_max: 1466, + ha: 1897, + leftSideBearing: -94, + advanceWidth: 455, + }, + k: { + x_min: 136, + x_max: 1016, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 136, + advanceWidth: 1024, + }, + l: { + x_min: 131, + x_max: 311, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 131, + advanceWidth: 455, + }, + m: { + x_min: 135, + x_max: 1574, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 135, + advanceWidth: 1706, + }, + n: { + x_min: 135, + x_max: 998, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 135, + advanceWidth: 1139, + }, + o: { + x_min: 68, + x_max: 1063, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 68, + advanceWidth: 1139, + }, + p: { + x_min: 135, + x_max: 1057, + y_min: -407, + y_max: 1086, + ha: 1493, + leftSideBearing: 135, + advanceWidth: 1139, + }, + q: { + x_min: 72, + x_max: 992, + y_min: -407, + y_max: 1086, + ha: 1493, + leftSideBearing: 72, + advanceWidth: 1139, + }, + r: { + x_min: 133, + x_max: 710, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 133, + advanceWidth: 682, + }, + s: { + x_min: 63, + x_max: 945, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 63, + advanceWidth: 1024, + }, + t: { + x_min: 36, + x_max: 554, + y_min: -14, + y_max: 1433, + ha: 1447, + leftSideBearing: 36, + advanceWidth: 569, + }, + u: { + x_min: 131, + x_max: 992, + y_min: -24, + y_max: 1062, + ha: 1086, + leftSideBearing: 131, + advanceWidth: 1139, + }, + v: { + x_min: 26, + x_max: 1000, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 26, + advanceWidth: 1024, + }, + w: { + x_min: 6, + x_max: 1463, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 6, + advanceWidth: 1479, + }, + x: { + x_min: 15, + x_max: 1009, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 15, + advanceWidth: 1024, + }, + y: { + x_min: 33, + x_max: 1006, + y_min: -431, + y_max: 1062, + ha: 1493, + leftSideBearing: 33, + advanceWidth: 1024, + }, + z: { + x_min: 40, + x_max: 980, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 40, + advanceWidth: 1024, + }, + '{': { + x_min: 57, + x_max: 636, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 57, + advanceWidth: 684, + }, + '|': { + x_min: 188, + x_max: 345, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 188, + advanceWidth: 532, + }, + '}': { + x_min: 47, + x_max: 626, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 47, + advanceWidth: 684, + }, + '~': { + x_min: 87, + x_max: 1110, + y_min: 557, + y_max: 885, + ha: 328, + leftSideBearing: 87, + advanceWidth: 1196, + }, + }, + fontFamily: 'sans-serif', + resolution: 2048, + generatedOn: '2020-10-18T18:48:11.823Z', +}; + + +/***/ }), + +/***/ "./src/fonts/serif_text_metrics.ts": +/*!*****************************************!*\ + !*** ./src/fonts/serif_text_metrics.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SerifFont": () => (/* binding */ SerifFont) +/* harmony export */ }); +const SerifFont = { + smufl: false, + name: 'SERIF', + spacing: 50, + Description: 'Built-in serif font', + bold: true, + italic: true, + monospaced: false, + serifs: true, + glyphs: { + '0': { + x_min: 49, + x_max: 975, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: 49, + advanceWidth: 1024, + }, + '1': { + x_min: 227, + x_max: 811, + y_min: 0, + y_max: 1383, + ha: 1383, + leftSideBearing: 227, + advanceWidth: 1024, + }, + '2': { + x_min: 61, + x_max: 965, + y_min: 0, + y_max: 1383, + ha: 1383, + leftSideBearing: 61, + advanceWidth: 1024, + }, + '3': { + x_min: 88, + x_max: 883, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: 88, + advanceWidth: 1024, + }, + '4': { + x_min: 25, + x_max: 967, + y_min: 0, + y_max: 1384, + ha: 1384, + leftSideBearing: 25, + advanceWidth: 1024, + }, + '5': { + x_min: 66, + x_max: 898, + y_min: -27, + y_max: 1409, + ha: 1436, + leftSideBearing: 66, + advanceWidth: 1024, + }, + '6': { + x_min: 70, + x_max: 958, + y_min: -27, + y_max: 1401, + ha: 1428, + leftSideBearing: 70, + advanceWidth: 1024, + }, + '7': { + x_min: 41, + x_max: 920, + y_min: -16, + y_max: 1356, + ha: 1372, + leftSideBearing: 41, + advanceWidth: 1024, + }, + '8': { + x_min: 115, + x_max: 911, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: 115, + advanceWidth: 1024, + }, + '9': { + x_min: 61, + x_max: 940, + y_min: -41, + y_max: 1383, + ha: 1424, + leftSideBearing: 61, + advanceWidth: 1024, + }, + ' ': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 512, + }, + '!': { + x_min: 266, + x_max: 488, + y_min: -22, + y_max: 1383, + ha: 1405, + leftSideBearing: 266, + advanceWidth: 682, + }, + '"': { + x_min: 157.2000021972655, + x_max: 678.2500021457677, + y_min: 881, + y_max: 1385, + ha: 504, + leftSideBearing: 157, + advanceWidth: 836, + }, + '#': { + x_min: 10, + x_max: 1016, + y_min: -1, + y_max: 1356, + ha: 1357, + leftSideBearing: 10, + advanceWidth: 1024, + }, + $: { + x_min: 90, + x_max: 936, + y_min: -180, + y_max: 1492, + ha: 1672, + leftSideBearing: 90, + advanceWidth: 1024, + }, + '%': { + x_min: 125, + x_max: 1581, + y_min: -30, + y_max: 1388, + ha: 1418, + leftSideBearing: 125, + advanceWidth: 1706, + }, + '&': { + x_min: 86, + x_max: 1536, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 86, + advanceWidth: 1593, + }, + "'": { + x_min: 97.20000219726548, + x_max: 273.2500021457677, + y_min: 881, + y_max: 1385, + ha: 504, + leftSideBearing: 97, + advanceWidth: 369, + }, + '(': { + x_min: 98, + x_max: 623, + y_min: -363, + y_max: 1383, + ha: 1746, + leftSideBearing: 98, + advanceWidth: 682, + }, + ')': { + x_min: 59, + x_max: 584, + y_min: -363, + y_max: 1383, + ha: 1746, + leftSideBearing: 59, + advanceWidth: 682, + }, + '*': { + x_min: 137.96078522291893, + x_max: 886.039214777081, + y_min: 543, + y_max: 1383, + ha: 840, + leftSideBearing: 137, + advanceWidth: 1024, + }, + '+': { + x_min: 61, + x_max: 1093, + y_min: 2, + y_max: 1034, + ha: 1032, + leftSideBearing: 61, + advanceWidth: 1155, + }, + ',': { + x_min: 115, + x_max: 399, + y_min: -291, + y_max: 208, + ha: 499, + leftSideBearing: 115, + advanceWidth: 512, + }, + '-': { + x_min: 80, + x_max: 584, + y_min: 396, + y_max: 525, + ha: 129, + leftSideBearing: 80, + advanceWidth: 682, + }, + '.': { + x_min: 143, + x_max: 371, + y_min: -22, + y_max: 205, + ha: 227, + leftSideBearing: 143, + advanceWidth: 512, + }, + '/': { + x_min: -17, + x_max: 586, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: -17, + advanceWidth: 569, + }, + ':': { + x_min: 166, + x_max: 394, + y_min: -22, + y_max: 943, + ha: 965, + leftSideBearing: 166, + advanceWidth: 569, + }, + ';': { + x_min: 164, + x_max: 448, + y_min: -290, + y_max: 943, + ha: 1233, + leftSideBearing: 164, + advanceWidth: 569, + }, + '<': { + x_min: 57, + x_max: 1098, + y_min: -15, + y_max: 1051, + ha: 1066, + leftSideBearing: 57, + advanceWidth: 1155, + }, + '=': { + x_min: 61, + x_max: 1093, + y_min: 246, + y_max: 791, + ha: 545, + leftSideBearing: 61, + advanceWidth: 1155, + }, + '>': { + x_min: 57, + x_max: 1098, + y_min: -15, + y_max: 1051, + ha: 1066, + leftSideBearing: 57, + advanceWidth: 1155, + }, + '?': { + x_min: 139, + x_max: 848, + y_min: -15, + y_max: 1383, + ha: 1398, + leftSideBearing: 139, + advanceWidth: 909, + }, + '@': { + x_min: 238, + x_max: 1657, + y_min: -29, + y_max: 1386, + ha: 1415, + leftSideBearing: 238, + advanceWidth: 1886, + }, + A: { + x_min: 31, + x_max: 1445, + y_min: 0, + y_max: 1380, + ha: 1380, + leftSideBearing: 31, + advanceWidth: 1479, + }, + B: { + x_min: 35, + x_max: 1214, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 35, + advanceWidth: 1366, + }, + C: { + x_min: 57, + x_max: 1296, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 57, + advanceWidth: 1366, + }, + D: { + x_min: 33, + x_max: 1403, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 33, + advanceWidth: 1479, + }, + E: { + x_min: 25, + x_max: 1222, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1251, + }, + F: { + x_min: 25, + x_max: 1119, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1139, + }, + G: { + x_min: 66, + x_max: 1452, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 66, + advanceWidth: 1479, + }, + H: { + x_min: 39, + x_max: 1438, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 39, + advanceWidth: 1479, + }, + I: { + x_min: 37, + x_max: 642, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 37, + advanceWidth: 682, + }, + J: { + x_min: 20, + x_max: 758, + y_min: -28, + y_max: 1356, + ha: 1384, + leftSideBearing: 20, + advanceWidth: 797, + }, + K: { + x_min: 70, + x_max: 1479, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 70, + advanceWidth: 1479, + }, + L: { + x_min: 25, + x_max: 1224, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1251, + }, + M: { + x_min: 25, + x_max: 1768, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1821, + }, + N: { + x_min: 25, + x_max: 1450, + y_min: -22, + y_max: 1356, + ha: 1378, + leftSideBearing: 25, + advanceWidth: 1479, + }, + O: { + x_min: 70, + x_max: 1409, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 70, + advanceWidth: 1479, + }, + P: { + x_min: 33, + x_max: 1110, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 33, + advanceWidth: 1139, + }, + Q: { + x_min: 70, + x_max: 1435, + y_min: -364.28571588721996, + y_max: 1383, + ha: 1747.28571588722, + leftSideBearing: 70, + advanceWidth: 1479, + }, + R: { + x_min: 35, + x_max: 1347, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 35, + advanceWidth: 1366, + }, + S: { + x_min: 86, + x_max: 1006, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 86, + advanceWidth: 1139, + }, + T: { + x_min: 35, + x_max: 1214, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 35, + advanceWidth: 1251, + }, + U: { + x_min: 29, + x_max: 1444, + y_min: -28, + y_max: 1356, + ha: 1384, + leftSideBearing: 29, + advanceWidth: 1479, + }, + V: { + x_min: 33, + x_max: 1428, + y_min: -22, + y_max: 1356, + ha: 1378, + leftSideBearing: 33, + advanceWidth: 1479, + }, + W: { + x_min: 10, + x_max: 1906, + y_min: -22, + y_max: 1356, + ha: 1378, + leftSideBearing: 10, + advanceWidth: 1933, + }, + X: { + x_min: 20, + x_max: 1449, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 20, + advanceWidth: 1479, + }, + Y: { + x_min: 45, + x_max: 1441, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 45, + advanceWidth: 1479, + }, + Z: { + x_min: 18, + x_max: 1222, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 18, + advanceWidth: 1251, + }, + '[': { + x_min: 180, + x_max: 612, + y_min: -319, + y_max: 1355, + ha: 1674, + leftSideBearing: 180, + advanceWidth: 682, + }, + '\\': { + x_min: -17, + x_max: 586, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: -17, + advanceWidth: 569, + }, + ']': { + x_min: 70, + x_max: 502, + y_min: -319, + y_max: 1355, + ha: 1674, + leftSideBearing: 70, + advanceWidth: 682, + }, + '^': { + x_min: 49, + x_max: 914, + y_min: 608, + y_max: 1355, + ha: 747, + leftSideBearing: 49, + advanceWidth: 961, + }, + _: { + x_min: 0, + x_max: 1024, + y_min: -255, + y_max: -153, + ha: 102, + leftSideBearing: 0, + advanceWidth: 1024, + }, + '`': { + x_min: 39, + x_max: 499, + y_min: 1037, + y_max: 1392.509803639748, + ha: 355.50980363974804, + leftSideBearing: 39, + advanceWidth: 682, + }, + a: { + x_min: 76, + x_max: 905, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 76, + advanceWidth: 909, + }, + b: { + x_min: 6, + x_max: 958, + y_min: -20, + y_max: 1399, + ha: 1419, + leftSideBearing: 6, + advanceWidth: 1024, + }, + c: { + x_min: 51, + x_max: 843, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 51, + advanceWidth: 909, + }, + d: { + x_min: 55, + x_max: 1006, + y_min: -20, + y_max: 1399, + ha: 1419, + leftSideBearing: 55, + advanceWidth: 1024, + }, + e: { + x_min: 51, + x_max: 868, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 51, + advanceWidth: 909, + }, + f: { + x_min: 41, + x_max: 783, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 41, + advanceWidth: 682, + }, + g: { + x_min: 57, + x_max: 963, + y_min: -446, + y_max: 942, + ha: 1388, + leftSideBearing: 57, + advanceWidth: 1024, + }, + h: { + x_min: 18, + x_max: 997, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 18, + advanceWidth: 1024, + }, + i: { + x_min: 33, + x_max: 516, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 33, + advanceWidth: 569, + }, + j: { + x_min: -142, + x_max: 397, + y_min: -446, + y_max: 1399, + ha: 1845, + leftSideBearing: -142, + advanceWidth: 569, + }, + k: { + x_min: 14, + x_max: 1029, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 14, + advanceWidth: 1024, + }, + l: { + x_min: 39, + x_max: 523, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 39, + advanceWidth: 569, + }, + m: { + x_min: 33, + x_max: 1587, + y_min: 0, + y_max: 944, + ha: 944, + leftSideBearing: 33, + advanceWidth: 1593, + }, + n: { + x_min: 33, + x_max: 993, + y_min: 0, + y_max: 944, + ha: 944, + leftSideBearing: 33, + advanceWidth: 1024, + }, + o: { + x_min: 59, + x_max: 963, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 59, + advanceWidth: 1024, + }, + p: { + x_min: 10, + x_max: 964, + y_min: -443, + y_max: 944, + ha: 1387, + leftSideBearing: 10, + advanceWidth: 1024, + }, + q: { + x_min: 49, + x_max: 999, + y_min: -443, + y_max: 942.0135137169275, + ha: 1385.0135137169275, + leftSideBearing: 49, + advanceWidth: 1024, + }, + r: { + x_min: 10, + x_max: 685, + y_min: 0, + y_max: 944, + ha: 944, + leftSideBearing: 10, + advanceWidth: 682, + }, + s: { + x_min: 104, + x_max: 713, + y_min: -20, + y_max: 942.0263161804552, + ha: 962.0263161804552, + leftSideBearing: 104, + advanceWidth: 797, + }, + t: { + x_min: 27, + x_max: 572, + y_min: -18, + y_max: 1186, + ha: 1204, + leftSideBearing: 27, + advanceWidth: 569, + }, + u: { + x_min: 18, + x_max: 981, + y_min: -21, + y_max: 921, + ha: 942, + leftSideBearing: 18, + advanceWidth: 1024, + }, + v: { + x_min: 39, + x_max: 976, + y_min: -28, + y_max: 921, + ha: 949, + leftSideBearing: 39, + advanceWidth: 1024, + }, + w: { + x_min: 43, + x_max: 1423, + y_min: -28, + y_max: 921, + ha: 949, + leftSideBearing: 43, + advanceWidth: 1479, + }, + x: { + x_min: 35, + x_max: 989, + y_min: 0, + y_max: 921, + ha: 921, + leftSideBearing: 35, + advanceWidth: 1024, + }, + y: { + x_min: 29, + x_max: 976, + y_min: -445, + y_max: 921, + ha: 1366, + leftSideBearing: 29, + advanceWidth: 1024, + }, + z: { + x_min: 55, + x_max: 855, + y_min: 0, + y_max: 921, + ha: 921, + leftSideBearing: 55, + advanceWidth: 909, + }, + '{': { + x_min: 205, + x_max: 717, + y_min: -377, + y_max: 1397, + ha: 1774, + leftSideBearing: 205, + advanceWidth: 983, + }, + '|': { + x_min: 137, + x_max: 273, + y_min: -512, + y_max: 1535, + ha: 2047, + leftSideBearing: 137, + advanceWidth: 410, + }, + '}': { + x_min: 266, + x_max: 778, + y_min: -377, + y_max: 1397, + ha: 1774, + leftSideBearing: 266, + advanceWidth: 983, + }, + '~': { + x_min: 82, + x_max: 1028, + y_min: 380, + y_max: 666, + ha: 286, + leftSideBearing: 82, + advanceWidth: 1108, + }, + }, + fontFamily: 'serif', + resolution: 2048, + generatedOn: '2020-10-18T19:03:12.514Z', +}; + + +/***/ }), + +/***/ "./src/fonts/textfonts.ts": +/*!********************************!*\ + !*** ./src/fonts/textfonts.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadTextFonts": () => (/* binding */ loadTextFonts) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petalumascript_glyphs */ "./src/fonts/petalumascript_glyphs.ts"); +/* harmony import */ var _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./robotoslab_glyphs */ "./src/fonts/robotoslab_glyphs.ts"); +/* harmony import */ var _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sans_bold_text_metrics */ "./src/fonts/sans_bold_text_metrics.ts"); +/* harmony import */ var _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sans_text_metrics */ "./src/fonts/sans_text_metrics.ts"); +/* harmony import */ var _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./serif_text_metrics */ "./src/fonts/serif_text_metrics.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +function loadTextFonts() { + // Sans-serif fallback font, very close to Arial + { + const fontData = _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__.SansFontBold; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // Usually @ is the tallest and widest character, although not the + // highest since it starts below the baseline. + const maxSizeGlyph = '@'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: true, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: false, + description: 'Generic SANS font', + }); + } + // Sans-serif fallback font, very close to Arial + { + const fontData = _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__.SansFont; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // Usually @ is the tallest and widest character, although not the + // highest since it starts below the baseline. + const maxSizeGlyph = '@'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: false, + description: 'Generic SANS font', + }); + } + // Serif fallback font, very close to Times + { + const fontData = _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__.SerifFont; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // M is wider, but H is taller. :-) + // Lowercase b is also taller in this font. + const maxSizeGlyph = '@'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: true, + description: 'Generic SERIF font', + }); + } + // Roboto Slab + { + const fontData = _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__.RobotoSlabFont; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // Previously we used 'H', but it isn't actually the tallest or the widest. + // Interestingly, the lowercase 'b' is the tallest glyph. + const maxSizeGlyph = 'b'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: true, + description: 'Text font to pair with the Bravura / Gonville music fonts.', + }); + } + // PetalumaScript + { + const fontData = _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__.PetalumaScriptFont; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // M is wider, but H is taller. :-) + // Lowercase b is also taller in this font. + const maxSizeGlyph = 'b'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: false, + description: 'Text font to pair with the Petaluma music font.', + }); + } +} + + +/***/ }), + +/***/ "./src/formatter.ts": +/*!**************************!*\ + !*** ./src/formatter.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Formatter": () => (/* binding */ Formatter) +/* harmony export */ }); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + + + + + +/** + * Create `Alignment`s for each tick in `voices`. Also calculate the + * total number of ticks in voices. + */ +function createContexts(voices, makeContext, addToContext) { + if (voices.length == 0) + return { + map: {}, + array: [], + list: [], + resolutionMultiplier: 0, + }; + // Initialize tick maps. + const tickToContextMap = {}; + const tickList = []; + const contexts = []; + const resolutionMultiplier = Formatter.getResolutionMultiplier(voices); + // For each voice, extract notes and create a context for every + // new tick that hasn't been seen before. + voices.forEach((voice, voiceIndex) => { + // Use resolution multiplier as denominator so that no additional expansion + // of fractional tick values is needed. + const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier); + voice.getTickables().forEach((tickable) => { + const integerTicks = ticksUsed.numerator; + // If we have no tick context for this tick, create one. + if (!tickToContextMap[integerTicks]) { + const newContext = makeContext({ tickID: integerTicks }); + contexts.push(newContext); + tickToContextMap[integerTicks] = newContext; + // Maintain a list of unique integerTicks. + tickList.push(integerTicks); + } + // Add this tickable to the TickContext. + addToContext(tickable, tickToContextMap[integerTicks], voiceIndex); + ticksUsed.add(tickable.getTicks()); + }); + }); + return { + map: tickToContextMap, + array: contexts, + list: tickList.sort((a, b) => a - b), + resolutionMultiplier, + }; +} +// eslint-disable-next-line +function L(...args) { + if (Formatter.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_9__.log)('Vex.Flow.Formatter', args); +} +/** + * Get the rest line number of the next non-rest note(s). + * @param notes array of Notes + * @param currRestLine + * @param currNoteIndex current note index + * @param compare if true, return the midpoint between the current rest line and the next rest line + * @returns a line number, which determines the vertical position of a rest. + */ +function getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) { + // If no valid next note group, nextRestLine is same as current. + let nextRestLine = currRestLine; + // Start with the next note and keep going until we find a valid non-rest note group. + for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) { + const note = notes[noteIndex]; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isNote)(note) && !note.isRest() && !note.shouldIgnoreTicks()) { + nextRestLine = note.getLineForRest(); + break; + } + } + // Locate the mid point between two lines. + if (compare && currRestLine !== nextRestLine) { + const top = Math.max(currRestLine, nextRestLine); + const bot = Math.min(currRestLine, nextRestLine); + nextRestLine = (0,_util__WEBPACK_IMPORTED_MODULE_9__.midLine)(top, bot); + } + return nextRestLine; +} +/** + * Format implements the formatting and layout algorithms that are used + * to position notes in a voice. The algorithm can align multiple voices both + * within a stave, and across multiple staves. + * + * To do this, the formatter breaks up voices into a grid of rational-valued + * `ticks`, to which each note is assigned. Then, minimum widths are assigned + * to each tick based on the widths of the notes and modifiers in that tick. This + * establishes the smallest amount of space required for each tick. + * + * Finally, the formatter distributes the left over space proportionally to + * all the ticks, setting the `x` values of the notes in each tick. + * + * See `tests/formatter_tests.ts` for usage examples. The helper functions included + * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples. + */ +class Formatter { + /** + * Helper function to layout "notes" one after the other without + * regard for proportions. Useful for tests and debugging. + */ + static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) { + notes.reduce((accumulator, note) => { + note.addToModifierContext(new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext()); + const tick = new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext().addTickable(note).preFormat(); + const metrics = tick.getMetrics(); + tick.setX(accumulator + metrics.totalLeftPx); + return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween; + }, x); + } + /** Helper function to plot formatter debug info. */ + static plotDebugging(ctx, formatter, xPos, y1, y2, options) { + options = Object.assign({ stavePadding: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.padding') }, options); + const x = xPos + options.stavePadding; + const contextGaps = formatter.contextGaps; + function stroke(x1, x2, color) { + ctx.beginPath(); + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + ctx.setLineWidth(1); + ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1); + } + ctx.save(); + ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_1__.Font.SANS_SERIF, 8); + contextGaps.gaps.forEach((gap) => { + stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)'); + ctx.setFillStyle('green'); + ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12); + }); + ctx.setFillStyle('red'); + ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27); + ctx.restore(); + } + /** + * Helper function to format and draw a single voice. Returns a bounding + * box for the notation. + * @param ctx the rendering context + * @param stave the stave to which to draw (`Stave` or `TabStave`) + * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.) + * @param params one of below: + * * Setting `autobeam` only `(context, stave, notes, true)` or + * `(ctx, stave, notes, {autobeam: true})` + * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})` + * * Setting both a struct is needed `(context, stave, notes, { + * autobeam: true, align_rests: true})` + * * `autobeam` automatically generates beams for the notes. + * * `align_rests` aligns rests with nearby notes. + */ + static FormatAndDraw(ctx, stave, notes, params) { + let options = { + auto_beam: false, + align_rests: false, + }; + if (typeof params === 'object') { + options = Object.assign(Object.assign({}, options), params); + } + else if (typeof params === 'boolean') { + options.auto_beam = params; + } + // Start by creating a voice and adding all the notes to it. + const voice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes); + // Then create beams, if requested. + const beams = options.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(voice) : []; + // Instantiate a `Formatter` and format the notes. + new Formatter() + .joinVoices([voice]) // , { align_rests: options.align_rests }) + .formatToStave([voice], stave, { align_rests: options.align_rests, stave }); + // Render the voice and beams to the stave. + voice.setStave(stave).draw(ctx, stave); + beams.forEach((beam) => beam.setContext(ctx).draw()); + // Return the bounding box of the voice. + return voice.getBoundingBox(); + } + /** + * Helper function to format and draw aligned tab and stave notes in two + * separate staves. + * @param ctx the rendering context + * @param tabstave a `TabStave` instance on which to render `TabNote`s. + * @param stave a `Stave` instance on which to render `Note`s. + * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.) + * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.) + * @param autobeam automatically generate beams. + * @param params a configuration object: + * * `autobeam` automatically generates beams for the notes. + * * `align_rests` aligns rests with nearby notes. + */ + static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) { + let opts = { + auto_beam: autobeam, + align_rests: false, + }; + if (typeof params === 'object') { + opts = Object.assign(Object.assign({}, opts), params); + } + else if (typeof params === 'boolean') { + opts.auto_beam = params; + } + // Create a `4/4` voice for `notes`. + const notevoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes); + // Create a `4/4` voice for `tabnotes`. + const tabvoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(tabnotes); + // Then create beams, if requested. + const beams = opts.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(notevoice) : []; + // Instantiate a `Formatter` and align tab and stave notes. + new Formatter() + .joinVoices([notevoice]) // , { align_rests: opts.align_rests }) + .joinVoices([tabvoice]) + .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests }); + // Render voices and beams to staves. + notevoice.draw(ctx, stave); + tabvoice.draw(ctx, tabstave); + beams.forEach((beam) => beam.setContext(ctx).draw()); + // Draw a connector between tab and note staves. + new _staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave, tabstave).setContext(ctx).draw(); + } + /** + * Automatically set the vertical position of rests based on previous/next note positions. + * @param tickables an array of Tickables. + * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes. + * @param alignTuplets If `false`, ignores tuplets. + */ + static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) { + tickables.forEach((currTickable, index) => { + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(currTickable) && currTickable.isRest()) { + if (currTickable.getTuplet() && !alignTuplets) { + return; + } + // If activated rests not on default can be rendered as specified. + const position = currTickable.getGlyphProps().position.toUpperCase(); + if (position !== 'R/4' && position !== 'B/4') { + return; + } + if (alignAllNotes || currTickable.getBeam()) { + // Align rests with previous/next notes. + const props = currTickable.getKeyProps()[0]; + if (index === 0) { + props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false); + } + else if (index > 0 && index < tickables.length) { + // If previous tickable is a rest, use its line number. + const prevTickable = tickables[index - 1]; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(prevTickable)) { + if (prevTickable.isRest()) { + props.line = prevTickable.getKeyProps()[0].line; + } + else { + const restLine = prevTickable.getLineForRest(); + // Get the rest line for next valid non-rest note group. + props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true); + } + } + } + currTickable.setKeyLine(0, props.line); + } + } + }); + } + constructor(options) { + this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options); + this.justifyWidth = 0; + this.totalCost = 0; + this.totalShift = 0; + this.durationStats = {}; + // Minimum width required to render all the notes in the voices. + this.minTotalWidth = 0; + // This is set to `true` after `minTotalWidth` is calculated. + this.hasMinTotalWidth = false; + // Arrays of tick and modifier contexts. + this.tickContexts = { + map: {}, + array: [], + list: [], + resolutionMultiplier: 0, + }; + this.modifierContexts = []; + // Gaps between contexts, for free movement of notes post + // formatting. + this.contextGaps = { + total: 0, + gaps: [], + }; + this.voices = []; + this.lossHistory = []; + } + /** + * Find all the rests in each of the `voices` and align them to neighboring notes. + * + * @param voices + * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests. + */ + alignRests(voices, alignAllNotes) { + if (!voices || !voices.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format rests'); + } + voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes)); + } + /** + * Estimate the width required to render 'voices'. This is done by: + * 1. Sum the widths of all the tick contexts + * 2. Estimate the padding. + * The latter is done by calculating the padding 3 different ways, and taking the + * greatest value: + * 1. the padding required for unaligned notes in different voices + * 2. the padding based on the stddev of the tickable widths + * 3. the padding based on the stddev of the tickable durations. + * + * The last 2 quantities estimate a 'width entropy', where notes might need more + * room than the proportional formatting gives them. A measure of all same duration + * and width will need no extra padding, and all these quantities will be + * zero in that case. + * + * Note: joinVoices has to be called before calling preCalculateMinTotalWidth. + * + * @param voices the voices that contain the notes + * @returns the estimated width in pixels + */ + preCalculateMinTotalWidth(voices) { + const unalignedPadding = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding'); + // Calculate additional padding based on 3 methods: + // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations + let unalignedCtxCount = 0; + let wsum = 0; + let dsum = 0; + const widths = []; + const durations = []; + // Cache results. + if (this.hasMinTotalWidth) + return this.minTotalWidth; + // Create tick contexts. + if (!voices) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', "'voices' required to run preCalculateMinTotalWidth"); + } + this.createTickContexts(voices); + // eslint-disable-next-line + const { list: contextList, map: contextMap } = this.tickContexts; + this.minTotalWidth = 0; + // Go through each tick context and calculate total width, + // and also accumulate values used in padding hints + contextList.forEach((tick) => { + const context = contextMap[tick]; + context.preFormat(); + // If this TC doesn't have all the voices on it, it's unaligned. + // so increment the unaligned padding accumulator + if (context.getTickables().length < voices.length) { + unalignedCtxCount += 1; + } + // Calculate the 'width entropy' over all the Tickables. + context.getTickables().forEach((t) => { + wsum += t.getMetrics().width; + dsum += t.getTicks().value(); + widths.push(t.getMetrics().width); + durations.push(t.getTicks().value()); + }); + const width = context.getWidth(); + this.minTotalWidth += width; + }); + this.hasMinTotalWidth = true; + // normalized (0-1) STDDEV of widths/durations gives us padding hints. + const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length; + const wvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(widths.map((ll) => Math.pow(ll - wavg, 2))); + const wpads = Math.pow(wvar / widths.length, 0.5) / wavg; + const davg = dsum / durations.length; + const dvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(durations.map((ll) => Math.pow(ll - davg, 2))); + const dpads = Math.pow(dvar / durations.length, 0.5) / davg; + // Find max of 3 methods pad the width with that + const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding; + const unalignedPad = unalignedPadding * unalignedCtxCount; + return this.minTotalWidth + Math.max(unalignedPad, padmax); + } + /** + * Get minimum width required to render all voices. Either `format` or + * `preCalculateMinTotalWidth` must be called before this method. + */ + getMinTotalWidth() { + if (!this.hasMinTotalWidth) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoMinTotalWidth', "Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'"); + } + return this.minTotalWidth; + } + /** Calculate the resolution multiplier for `voices`. */ + static getResolutionMultiplier(voices) { + if (!voices || !voices.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format'); + } + const totalTicks = voices[0].getTotalTicks(); + const resolutionMultiplier = voices.reduce((accumulator, voice) => { + if (!voice.getTotalTicks().equals(totalTicks)) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.'); + } + if (voice.getMode() === _voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.STRICT && !voice.isComplete()) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('IncompleteVoice', 'Voice does not have enough notes.'); + } + return Math.max(accumulator, _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction.LCM(accumulator, voice.getResolutionMultiplier())); + }, 1); + return resolutionMultiplier; + } + /** Create a `ModifierContext` for each tick in `voices`. */ + createModifierContexts(voices) { + if (voices.length == 0) + return; + const resolutionMultiplier = Formatter.getResolutionMultiplier(voices); + // Initialize tick maps. + const tickToContextMap = new Map(); + const contexts = []; + // For each voice, extract notes and create a context for every + // new tick that hasn't been seen before. + voices.forEach((voice) => { + // Use resolution multiplier as denominator so that no additional expansion + // of fractional tick values is needed. + const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier); + voice.getTickables().forEach((tickable) => { + const integerTicks = ticksUsed.numerator; + let staveTickToContextMap = tickToContextMap.get(tickable.getStave()); + // If we have no tick context for this tick, create one. + if (!staveTickToContextMap) { + tickToContextMap.set(tickable.getStave(), {}); + staveTickToContextMap = tickToContextMap.get(tickable.getStave()); + } + if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) { + const newContext = new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext(); + contexts.push(newContext); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + staveTickToContextMap[integerTicks] = newContext; + } + // Add this tickable to the TickContext. + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + tickable.addToModifierContext(staveTickToContextMap[integerTicks]); + ticksUsed.add(tickable.getTicks()); + }); + }); + this.modifierContexts.push({ + map: tickToContextMap, + array: contexts, + resolutionMultiplier, + }); + } + /** + * Create a `TickContext` for each tick in `voices`. Also calculate the + * total number of ticks in voices. + */ + createTickContexts(voices) { + const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex); + const contexts = createContexts(voices, (tick) => new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext(tick), fn); + this.tickContexts = contexts; + const contextArray = this.tickContexts.array; + contextArray.forEach((context) => { + context.tContexts = contextArray; + }); + return contexts; + } + /** + * Get the AlignmentContexts of TickContexts that were created by createTickContexts. + * Returns undefined if createTickContexts has not yet been run. + */ + getTickContexts() { + return this.tickContexts; + } + /** + * This is the core formatter logic. Format voices and justify them + * to `justifyWidth` pixels. `renderingContext` is required to justify elements + * that can't retrieve widths without a canvas. This method sets the `x` positions + * of all the tickables/notes in the formatter. + */ + preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) { + // Initialize context maps. + const contexts = this.tickContexts; + if (!contexts) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoTickContexts', 'preFormat requires TickContexts'); + } + const { list: contextList, map: contextMap } = contexts; + // Reset loss history for evaluator. + this.lossHistory = []; + // If voices and a stave were provided, set the Stave for each voice + // and preFormat to apply Y values to the notes; + if (voicesParam && stave) { + voicesParam.forEach((voice) => voice.setStave(stave).preFormat()); + } + // Now distribute the ticks to each tick context, and assign them their + // own X positions. + let x = 0; + let shift = 0; + this.minTotalWidth = 0; + let totalTicks = 0; + // Pass 1: Give each note maximum width requested by context. + contextList.forEach((tick) => { + const context = contextMap[tick]; + // Make sure that all tickables in this context have calculated their + // space requirements. + context.preFormat(); + const width = context.getWidth(); + this.minTotalWidth += width; + const maxTicks = context.getMaxTicks().value(); + totalTicks += maxTicks; + const metrics = context.getMetrics(); + x = x + shift + metrics.totalLeftPx; + context.setX(x); + // Calculate shift for the next tick. + shift = width - metrics.totalLeftPx; + }); + // Use softmax based on all notes across all staves. (options.globalSoftmax) + const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions; + const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks)); + const expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(contextList.map(exp)); + this.minTotalWidth = x + shift; + this.hasMinTotalWidth = true; + // No justification needed. End formatting. + if (justifyWidth <= 0) + return this.evaluate(); + // Start justification. Subtract the right extra pixels of the final context because the formatter + // justifies based on the context's X position, which is the left-most part of the note head. + const firstContext = contextMap[contextList[0]]; + const lastContext = contextMap[contextList[contextList.length - 1]]; + // Calculate the "distance error" between the tick contexts. The expected distance is the spacing proportional to + // the softmax of the ticks. + function calculateIdealDistances(adjustedJustifyWidth) { + const distances = contextList.map((tick, i) => { + const context = contextMap[tick]; + const voices = context.getTickablesByVoice(); + let backTickable; + if (i > 0) { + const prevContext = contextMap[contextList[i - 1]]; + // Go through each tickable and search backwards for another tickable + // in the same voice. If found, use that duration (ticks) to calculate + // the expected distance. + for (let j = i - 1; j >= 0; j--) { + const backTick = contextMap[contextList[j]]; + const backVoices = backTick.getTickablesByVoice(); + // Look for matching voices between tick contexts. + const matchingVoices = []; + Object.keys(voices).forEach((v) => { + if (backVoices[v]) { + matchingVoices.push(v); + } + }); + if (matchingVoices.length > 0) { + // Found matching voices, get largest duration + let maxTicks = 0; + let maxNegativeShiftPx = Infinity; + let expectedDistance = 0; + matchingVoices.forEach((v) => { + const ticks = backVoices[v].getTicks().value(); + if (ticks > maxTicks) { + backTickable = backVoices[v]; + maxTicks = ticks; + } + // Calculate the limits of the shift based on modifiers, etc. + const thisTickable = voices[v]; + const insideLeftEdge = thisTickable.getX() - + (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx); + const backMetrics = backVoices[v].getMetrics(); + const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx; + // Don't allow shifting if notes in the same voice can collide + maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge); + }); + // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right + // so that two different tick contexts don't align across staves. + maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05)); + // Calculate the expected distance of the current context from the last matching tickable. The + // distance is scaled down by the softmax for the voice. + if (globalSoftmax) { + const t = totalTicks; + expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth; + } + else if (typeof backTickable !== 'undefined') { + expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth; + } + return { + expectedDistance, + maxNegativeShiftPx, + fromTickable: backTickable, + }; + } + } + } + return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 }; + }); + return distances; + } + function shiftToIdealDistances(idealDistances) { + // Distribute ticks to the contexts based on the calculated distance error. + const centerX = adjustedJustifyWidth / 2; + let spaceAccum = 0; + contextList.forEach((tick, index) => { + const context = contextMap[tick]; + if (index > 0) { + const contextX = context.getX(); + const ideal = idealDistances[index]; + const errorPx = (0,_util__WEBPACK_IMPORTED_MODULE_9__.defined)(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum); + let negativeShiftPx = 0; + if (errorPx > 0) { + spaceAccum += errorPx; + } + else if (errorPx < 0) { + negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx)); + spaceAccum += -negativeShiftPx; + } + context.setX(contextX + spaceAccum); + } + // Move center aligned tickables to middle + context.getCenterAlignedTickables().forEach((tickable) => { + tickable.setCenterXShift(centerX - context.getX()); + }); + }); + return lastContext.getX() - firstContext.getX(); + } + const adjustedJustifyWidth = justifyWidth - + lastContext.getMetrics().notePx - + lastContext.getMetrics().totalRightPx - + firstContext.getMetrics().totalLeftPx; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont(); + const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin'); + const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax'); + const leftPadding = musicFont.lookupMetric('stave.padding'); + let targetWidth = adjustedJustifyWidth; + const distances = calculateIdealDistances(targetWidth); + let actualWidth = shiftToIdealDistances(distances); + // Just one context. Done formatting. + if (contextList.length === 1) + return 0; + const calcMinDistance = (targetWidth, distances) => { + let mdCalc = targetWidth / 2; + if (distances.length > 1) { + for (let di = 1; di < distances.length; ++di) { + mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc); + } + } + return mdCalc; + }; + const minDistance = calcMinDistance(targetWidth, distances); + // right justify to either the configured padding, or the min distance between notes, whichever is greatest. + // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break + // existing visual regression tests. + const paddingMaxCalc = (curTargetWidth) => { + let lastTickablePadding = 0; + const lastTickable = lastContext && lastContext.getMaxTickable(); + if (lastTickable) { + const voice = lastTickable.getVoice(); + // If the number of actual ticks in the measure <> configured ticks, right-justify + // because the softmax won't yield the correct value + if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) { + return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding; + } + const tickWidth = lastTickable.getWidth(); + lastTickablePadding = + voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding); + } + return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding; + }; + let paddingMax = paddingMaxCalc(targetWidth); + let paddingMin = paddingMax - (configMaxPadding - configMinPadding); + const maxX = adjustedJustifyWidth - paddingMin; + let iterations = maxIterations; + // Adjust justification width until the right margin is as close as possible to the calculated padding, + // without going over + while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) { + targetWidth -= actualWidth - maxX; + paddingMax = paddingMaxCalc(targetWidth); + paddingMin = paddingMax - (configMaxPadding - configMinPadding); + actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth)); + iterations--; + } + this.justifyWidth = justifyWidth; + return this.evaluate(); + } + /** Calculate the total cost of this formatting decision. */ + evaluate() { + const contexts = this.tickContexts; + const justifyWidth = this.justifyWidth; + // Calculate available slack per tick context. This works out how much freedom + // to move a context has in either direction, without affecting other notes. + this.contextGaps = { total: 0, gaps: [] }; + contexts.list.forEach((tick, index) => { + if (index === 0) + return; + const prevTick = contexts.list[index - 1]; + const prevContext = contexts.map[prevTick]; + const context = contexts.map[tick]; + const prevMetrics = prevContext.getMetrics(); + const currMetrics = context.getMetrics(); + // Calculate X position of right edge of previous note + const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx; + // Calculate X position of left edge of current note + const insideLeftEdge = context.getX() - currMetrics.totalLeftPx; + const gap = insideLeftEdge - insideRightEdge; + this.contextGaps.total += gap; + this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge }); + // Tell the tick contexts how much they can reposition themselves. + context.getFormatterMetrics().freedom.left = gap; + prevContext.getFormatterMetrics().freedom.right = gap; + }); + // Calculate mean distance in each voice for each duration type, then calculate + // how far each note is from the mean. + this.durationStats = {}; + const durationStats = this.durationStats; + function updateStats(duration, space) { + const stats = durationStats[duration]; + if (stats === undefined) { + durationStats[duration] = { mean: space, count: 1 }; + } + else { + stats.count += 1; + stats.mean = (stats.mean + space) / 2; + } + } + this.voices.forEach((voice) => { + voice.getTickables().forEach((note, i, notes) => { + const duration = note.getTicks().clone().simplify().toString(); + const metrics = note.getMetrics(); + const formatterMetrics = note.getFormatterMetrics(); + const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx; + let space = 0; + if (i < notes.length - 1) { + const rightNote = notes[i + 1]; + const rightMetrics = rightNote.getMetrics(); + const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx; + space = rightNoteEdge - leftNoteEdge; + formatterMetrics.space.used = rightNote.getX() - note.getX(); + rightNote.getFormatterMetrics().freedom.left = space; + } + else { + space = justifyWidth - leftNoteEdge; + formatterMetrics.space.used = justifyWidth - note.getX(); + } + formatterMetrics.freedom.right = space; + updateStats(duration, formatterMetrics.space.used); + }); + }); + // Calculate how much each note deviates from the mean. Loss function is square + // root of the sum of squared deviations. + let totalDeviation = 0; + this.voices.forEach((voice) => { + voice.getTickables().forEach((note) => { + const duration = note.getTicks().clone().simplify().toString(); + const metrics = note.getFormatterMetrics(); + metrics.space.mean = durationStats[duration].mean; + metrics.duration = duration; + metrics.iterations += 1; + metrics.space.deviation = metrics.space.used - metrics.space.mean; + totalDeviation += Math.pow(metrics.space.deviation, 2); + }); + }); + this.totalCost = Math.sqrt(totalDeviation); + this.lossHistory.push(this.totalCost); + return this.totalCost; + } + /** + * Run a single iteration of rejustification. At a high level, this method calculates + * the overall "loss" (or cost) of this layout, and repositions tickcontexts in an + * attempt to reduce the cost. You can call this method multiple times until it finds + * and oscillates around a global minimum. + * @param options[alpha] the "learning rate" for the formatter. It determines how much of a shift + * the formatter should make based on its cost function. + */ + tune(options) { + var _a; + const contexts = this.tickContexts; + if (!contexts) { + return 0; + } + const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5; + // Move `current` tickcontext by `shift` pixels, and adjust the freedom + // on adjacent tickcontexts. + function move(current, shift, prev, next) { + current.setX(current.getX() + shift); + current.getFormatterMetrics().freedom.left += shift; + current.getFormatterMetrics().freedom.right -= shift; + if (prev) + prev.getFormatterMetrics().freedom.right += shift; + if (next) + next.getFormatterMetrics().freedom.left -= shift; + } + let shift = 0; + this.totalShift = 0; + contexts.list.forEach((tick, index, list) => { + const context = contexts.map[tick]; + const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined; + const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined; + move(context, shift, prevContext, nextContext); + const cost = -(0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation)); + if (cost > 0) { + shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost)); + } + else if (cost < 0) { + if (nextContext) { + shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost)); + } + else { + shift = 0; + } + } + shift *= alpha; + this.totalShift += shift; + }); + return this.evaluate(); + } + /** + * This is the top-level call for all formatting logic completed + * after `x` *and* `y` values have been computed for the notes + * in the voices. + */ + postFormat() { + this.modifierContexts.forEach((modifierContexts) => { + modifierContexts.array.forEach((mc) => mc.postFormat()); + }); + this.tickContexts.list.forEach((tick) => { + this.tickContexts.map[tick].postFormat(); + }); + return this; + } + /** + * Take all `voices` and create `ModifierContext`s out of them. This tells + * the formatters that the voices belong on a single stave. + */ + joinVoices(voices) { + this.createModifierContexts(voices); + this.hasMinTotalWidth = false; + return this; + } + /** + * Align rests in voices, justify the contexts, and position the notes + * so voices are aligned and ready to render onto the stave. This method + * mutates the `x` positions of all tickables in `voices`. + * + * Voices are full justified to fit in `justifyWidth` pixels. + * + * Set `options.context` to the rendering context. Set `options.align_rests` + * to true to enable rest alignment. + */ + format(voices, justifyWidth, options) { + const opts = Object.assign({ align_rests: false }, options); + this.voices = voices; + const softmaxFactor = this.formatterOptions.softmaxFactor; + if (softmaxFactor) { + this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor)); + } + this.alignRests(voices, opts.align_rests); + this.createTickContexts(voices); + this.preFormat(justifyWidth, opts.context, voices, opts.stave); + // Only postFormat if a stave was supplied for y value formatting + if (opts.stave) + this.postFormat(); + return this; + } + // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`. + formatToStave(voices, stave, optionsParam) { + const options = Object.assign({ context: stave.getContext() }, optionsParam); + // eslint-disable-next-line + const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + L('Formatting voices to width: ', justifyWidth); + return this.format(voices, justifyWidth, options); + } + getTickContext(tick) { + var _a; + return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick]; + } +} +// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`. +Formatter.DEBUG = false; + + + +/***/ }), + +/***/ "./src/fraction.ts": +/*!*************************!*\ + !*** ./src/fraction.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Fraction": () => (/* binding */ Fraction) +/* harmony export */ }); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Author: Joshua Koo / @zz85 +// Author: @incompleteopus + + +/** Fraction represents a rational number. */ +class Fraction { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.Fraction; + } + /** + * GCD: Greatest common divisor using the Euclidean algorithm. + * Note: GCD(0, 0) => 0 and GCD(0, n) => n. + */ + static GCD(a, b) { + if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`); + } + let t; + while (b !== 0) { + t = b; + b = a % b; + a = t; + } + return a; + } + /** LCM: Lowest common multiple. */ + static LCM(a, b) { + return (a * b) / Fraction.GCD(a, b); + } + /** Lowest common multiple for more than two numbers. */ + static LCMM(args) { + if (args.length === 0) { + return 0; + } + else if (args.length === 1) { + return args[0]; + } + else if (args.length === 2) { + return Fraction.LCM(args[0], args[1]); + } + else { + // args.shift() removes the first number. + // LCM the first number with the rest of the numbers. + return Fraction.LCM(args.shift(), Fraction.LCMM(args)); + } + } + /** Set the numerator and denominator. */ + constructor(numerator, denominator) { + this.numerator = 1; + this.denominator = 1; + this.set(numerator, denominator); + } + /** Set the numerator and denominator. */ + set(numerator = 1, denominator = 1) { + this.numerator = numerator; + this.denominator = denominator; + return this; + } + /** Return the value of the fraction. */ + value() { + return this.numerator / this.denominator; + } + /** Simplify numerator and denominator using GCD. */ + simplify() { + let u = this.numerator; + let d = this.denominator; + const gcd = Fraction.GCD(u, d); + u /= gcd; + d /= gcd; + if (d < 0) { + d = -d; + u = -u; + } + return this.set(u, d); + } + /** Add value of another fraction. */ + add(param1 = 0, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + const lcm = Fraction.LCM(this.denominator, otherDenominator); + const a = lcm / this.denominator; + const b = lcm / otherDenominator; + const u = this.numerator * a + otherNumerator * b; + return this.set(u, lcm); + } + /** Substract value of another fraction. */ + subtract(param1 = 0, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + const lcm = Fraction.LCM(this.denominator, otherDenominator); + const a = lcm / this.denominator; + const b = lcm / otherDenominator; + const u = this.numerator * a - otherNumerator * b; + return this.set(u, lcm); + } + /** Multiply by value of another fraction. */ + multiply(param1 = 1, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator); + } + /** Divide by value of another Fraction. */ + divide(param1 = 1, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator); + } + /** Simplify both sides and check if they are equal. */ + equals(compare) { + const a = Fraction.__staticFractionA.copy(compare).simplify(); + const b = Fraction.__staticFractionB.copy(this).simplify(); + return a.numerator === b.numerator && a.denominator === b.denominator; + } + /** Greater than operator. */ + greaterThan(compare) { + const a = Fraction.__staticFractionB.copy(this); + a.subtract(compare); + return a.numerator > 0; + } + /** Greater than or equals operator. */ + greaterThanEquals(compare) { + const a = Fraction.__staticFractionB.copy(this); + a.subtract(compare); + return a.numerator >= 0; + } + /** Less than operator. */ + lessThan(compare) { + return !this.greaterThanEquals(compare); + } + /** Less than or equals operator. */ + lessThanEquals(compare) { + return !this.greaterThan(compare); + } + /** Return a new copy with current values. */ + clone() { + return new Fraction(this.numerator, this.denominator); + } + /** Copy value of another fraction. */ + copy(other) { + if (typeof other === 'number') { + return this.set(other, 1); + } + else { + return this.set(other.numerator, other.denominator); + } + } + /** Return the integer component (eg. 5/2 => 2). */ + quotient() { + return Math.floor(this.numerator / this.denominator); + } + /** Return the remainder component (eg. 5/2 => 1). */ + remainder() { + return this.numerator % this.denominator; + } + /** Calculate absolute value. */ + makeAbs() { + this.denominator = Math.abs(this.denominator); + this.numerator = Math.abs(this.numerator); + return this; + } + /** Return a raw string representation (eg. "5/2"). */ + toString() { + return `${this.numerator}/${this.denominator}`; + } + /** Return a simplified string respresentation. */ + toSimplifiedString() { + return Fraction.__staticFractionTmp.copy(this).simplify().toString(); + } + /** Return string representation in mixed form. */ + toMixedString() { + let s = ''; + const q = this.quotient(); + const f = Fraction.__staticFractionTmp.copy(this); + if (q < 0) { + f.makeAbs(); + } + if (q !== 0) { + s += q; + if (f.numerator !== 0) { + s += ` ${f.toSimplifiedString()}`; + } + } + else if (f.numerator === 0) { + s = '0'; + } + else { + s = f.toSimplifiedString(); + } + return s; + } + /** Parse a fraction string. */ + parse(str) { + const i = str.split('/'); + const n = parseInt(i[0], 10); + const d = i[1] ? parseInt(i[1], 10) : 1; + return this.set(n, d); + } +} +// Cached objects for comparisons. +Fraction.__staticFractionA = new Fraction(); +Fraction.__staticFractionB = new Fraction(); +Fraction.__staticFractionTmp = new Fraction(); + +/** Helper function to extract the numerator and denominator from another fraction. */ +function getNumeratorAndDenominator(n, d = 1) { + if (typeof n === 'number') { + // Both params are numbers, so we return them as [numerator, denominator]. + return [n, d]; + } + else { + // First param is a Fraction object. We ignore the second param. + return [n.numerator, n.denominator]; + } +} + + +/***/ }), + +/***/ "./src/frethandfinger.ts": +/*!*******************************!*\ + !*** ./src/frethandfinger.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "FretHandFinger": () => (/* binding */ FretHandFinger) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// VexFlow - Music Engraving for HTML5 +// Copyright Mohit Muthanna 2010 +// Author Larry Kuhns 2013 +// Class to draws string numbers into the notation. + + + + + + +class FretHandFinger extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.FretHandFinger; + } + // Arrange fingerings inside a ModifierContext. + static format(nums, state) { + const { left_shift, right_shift } = state; + const num_spacing = 1; + if (!nums || nums.length === 0) + return false; + const nums_list = []; + let prev_note = null; + let shiftLeft = 0; + let shiftRight = 0; + for (let i = 0; i < nums.length; ++i) { + const num = nums[i]; + const note = num.getNote(); + const pos = num.getPosition(); + const index = num.checkIndex(); + const props = note.getKeyProps()[index]; + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_3__.TextFormatter.create(num.textFont); + const textHeight = textFormatter.maxHeight; + if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) { + state.top_text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5; + } + if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) { + state.text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5; + } + if (note !== prev_note) { + for (let n = 0; n < note.keys.length; ++n) { + if (left_shift === 0) { + shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft); + } + if (right_shift === 0) { + shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight); + } + } + prev_note = note; + } + nums_list.push({ + note, + num, + pos, + line: props.line, + shiftL: shiftLeft, + shiftR: shiftRight, + }); + } + // Sort fingernumbers by line number. + nums_list.sort((a, b) => b.line - a.line); + let numShiftL = 0; + let numShiftR = 0; + let xWidthL = 0; + let xWidthR = 0; + let lastLine = null; + let lastNote = null; + for (let i = 0; i < nums_list.length; ++i) { + let num_shift = 0; + const { note, pos, num, line, shiftL, shiftR } = nums_list[i]; + // Reset the position of the string number every line. + if (line !== lastLine || note !== lastNote) { + numShiftL = left_shift + shiftL; + numShiftR = right_shift + shiftR; + } + const numWidth = num.getWidth() + num_spacing; + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { + num.setXShift(left_shift + numShiftL); + num_shift = left_shift + numWidth; // spacing + xWidthL = num_shift > xWidthL ? num_shift : xWidthL; + } + else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) { + num.setXShift(numShiftR); + num_shift = shiftRight + numWidth; // spacing + xWidthR = num_shift > xWidthR ? num_shift : xWidthR; + } + lastLine = line; + lastNote = note; + } + state.left_shift += xWidthL; + state.right_shift += xWidthR; + return true; + } + static easyScoreHook({ fingerings } = {}, note, builder) { + fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => { + const split = fingeringString.trim().split('.'); + const params = { number: split[0] }; + if (split[1]) + params.position = split[1]; + return builder.getFactory().Fingering(params); + }).map((fingering, index) => note.addModifier(fingering, index)); + } + constructor(finger) { + super(); + this.finger = finger; + this.width = 7; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; // Default position above stem or note head + this.x_shift = 0; + this.y_shift = 0; + this.x_offset = 0; // Horizontal offset from default + this.y_offset = 0; // Vertical offset from default + this.resetFont(); + } + setFretHandFinger(finger) { + this.finger = finger; + return this; + } + getFretHandFinger() { + return this.finger; + } + setOffsetX(x) { + this.x_offset = x; + return this; + } + setOffsetY(y) { + this.y_offset = y; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index); + let dot_x = start.x + this.x_shift + this.x_offset; + let dot_y = start.y + this.y_shift + this.y_offset + 5; + switch (this.position) { + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE: + dot_x -= 4; + dot_y -= 12; + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW: + dot_x -= 2; + dot_y += 10; + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT: + dot_x -= this.width; + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT: + dot_x += 1; + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} does not exist`); + } + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText('' + this.finger, dot_x, dot_y); + ctx.restore(); + } +} +FretHandFinger.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: 9, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/ghostnote.ts": +/*!**************************!*\ + !*** ./src/ghostnote.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GhostNote": () => (/* binding */ GhostNote) +/* harmony export */ }); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description + + + +const ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.'; +class GhostNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_0__.StemmableNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GhostNote; + } + constructor(parameter) { + if (!parameter) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG); + } + let noteStruct; + if (typeof parameter === 'string') { + // Preserve backwards-compatibility + noteStruct = { duration: parameter }; + } + else if (typeof parameter === 'object') { + noteStruct = parameter; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG); + } + super(noteStruct); + // Note properties + this.setWidth(0); + } + /** + * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score. + */ + isRest() { + return true; + } + setStave(stave) { + super.setStave(stave); + return this; + } + /* Overridden to ignore */ + // eslint-disable-next-line + addToModifierContext(mc) { + // DO NOTHING. + return this; + } + preFormat() { + this.preFormatted = true; + return this; + } + draw() { + // Draw Annotations + this.setRendered(); + for (let i = 0; i < this.modifiers.length; ++i) { + const modifier = this.modifiers[i]; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isAnnotation)(modifier)) { + modifier.setContext(this.getContext()); + modifier.drawWithStyle(); + } + } + } +} + + +/***/ }), + +/***/ "./src/glyph.ts": +/*!**********************!*\ + !*** ./src/glyph.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Glyph": () => (/* binding */ Glyph), +/* harmony export */ "OutlineCode": () => (/* binding */ OutlineCode) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +var OutlineCode; +(function (OutlineCode) { + OutlineCode[OutlineCode["MOVE"] = 0] = "MOVE"; + OutlineCode[OutlineCode["LINE"] = 1] = "LINE"; + OutlineCode[OutlineCode["QUADRATIC"] = 2] = "QUADRATIC"; + OutlineCode[OutlineCode["BEZIER"] = 3] = "BEZIER"; +})(OutlineCode || (OutlineCode = {})); +class GlyphCacheEntry { + constructor(fontStack, code, category) { + this.point = -1; + this.metrics = Glyph.loadMetrics(fontStack, code, category); + this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift); + if (category) { + this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1); + } + } +} +class GlyphCache { + constructor() { + this.cache = new Map(); + } + lookup(code, category) { + let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY); + if (entries === undefined) { + entries = {}; + this.cache.set(Glyph.CURRENT_CACHE_KEY, entries); + } + const key = category ? `${code}%${category}` : code; + let entry = entries[key]; + if (entry === undefined) { + entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category); + entries[key] = entry; + } + return entry; + } +} +class GlyphOutline { + constructor(outline, originX, originY, scale) { + this.outline = outline; + this.originX = originX; + this.originY = originY; + this.scale = scale; + this.i = 0; + this.precision = 1; + // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale. + this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RENDER_PRECISION_PLACES); + } + done() { + return this.i >= this.outline.length; + } + next() { + return Math.round((this.outline[this.i++] * this.precision) / this.precision); + } + nextX() { + return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision; + } + nextY() { + return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision; + } + static parse(str) { + const result = []; + const parts = str.split(' '); + let i = 0; + while (i < parts.length) { + switch (parts[i++]) { + case 'm': + result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++])); + break; + case 'l': + result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++])); + break; + case 'q': + result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++])); + break; + case 'b': + result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++])); + break; + } + } + return result; + } +} +class Glyph extends _element__WEBPACK_IMPORTED_MODULE_2__.Element { + ////////////////////////////////////////////////////////////////////////////////////////////////// + // STATIC MEMBERS + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Glyph; + } + /** + * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails, + * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue. + * + * @param font + * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc. + * @param code + * @param key + * @param defaultValue + */ + static lookupFontMetric(font, category, code, key, defaultValue) { + let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined); + if (value === undefined) { + // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time). + value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue); + } + return value; + } + static lookupGlyph(fontStack, code) { + (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(fontStack, 'BadFontStack', 'Font stack is misconfigured'); + let glyph; + let font; + for (let i = 0; i < fontStack.length; i++) { + font = fontStack[i]; + glyph = font.getGlyphs()[code]; + if (glyph) + return { glyph, font }; + } + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`); + } + static loadMetrics(fontStack, code, category) { + const { glyph, font } = Glyph.lookupGlyph(fontStack, code); + if (!glyph.o) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`); + let x_shift = 0; + let y_shift = 0; + let scale = 1; + if (category && font) { + x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0); + y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0); + scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1); + } + const x_min = glyph.x_min; + const x_max = glyph.x_max; + const ha = glyph.ha; + if (!glyph.cached_outline) { + glyph.cached_outline = GlyphOutline.parse(glyph.o); + } + return { + x_min, + x_max, + x_shift, + y_shift, + scale, + ha, + outline: glyph.cached_outline, + font, + width: x_max - x_min, + height: ha, + }; + } + /** + * Renders glyphs from the default font stack. + * + * @param ctx Canvas or SVG context + * @param x_pos x coordinate + * @param y_pos y coordinate + * @param point the point size of the font + * @param code the glyph code in font.getGlyphs() + * @param options + * @returns + */ + static renderGlyph(ctx, x_pos, y_pos, point, code, options) { + var _a; + const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category); + const metrics = data.metrics; + if (data.point != -1) { + point = data.point; + } + const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1; + const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale; + Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale); + return metrics; + } + static renderOutline(ctx, outline, scale, x_pos, y_pos) { + const go = new GlyphOutline(outline, x_pos, y_pos, scale); + ctx.beginPath(); + let x, y; + while (!go.done()) { + switch (go.next()) { + case OutlineCode.MOVE: + ctx.moveTo(go.nextX(), go.nextY()); + break; + case OutlineCode.LINE: + ctx.lineTo(go.nextX(), go.nextY()); + break; + case OutlineCode.QUADRATIC: + x = go.nextX(); + y = go.nextY(); + ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y); + break; + case OutlineCode.BEZIER: + x = go.nextX(); + y = go.nextY(); + ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y); + break; + } + } + ctx.fill(); + } + static getOutlineBoundingBox(outline, scale, x_pos, y_pos) { + const go = new GlyphOutline(outline, x_pos, y_pos, scale); + const bboxComp = new _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxComputation(); + // (penX, penY) hold the pen position: the start of each stroke. + let penX = x_pos; + let penY = y_pos; + let x, y; + while (!go.done()) { + switch (go.next()) { + case OutlineCode.MOVE: + // Note that we don't add any points to the bounding box until a srroke is actually drawn. + penX = go.nextX(); + penY = go.nextY(); + break; + case OutlineCode.LINE: + bboxComp.addPoint(penX, penY); + penX = go.nextX(); + penY = go.nextY(); + bboxComp.addPoint(penX, penY); + break; + case OutlineCode.QUADRATIC: + x = go.nextX(); + y = go.nextY(); + bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y); + penX = x; + penY = y; + break; + case OutlineCode.BEZIER: + x = go.nextX(); + y = go.nextY(); + bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y); + penX = x; + penY = y; + break; + } + } + return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height()); + } + static getWidth(code, point, category) { + const data = Glyph.cache.lookup(code, category); + if (data.point != -1) { + point = data.point; + } + const scale = (point * 72) / (data.metrics.font.getResolution() * 100); + return data.bbox.getW() * scale; + } + /** + * @param code + * @param point + * @param options + */ + constructor(code, point, options) { + super(); + ////////////////////////////////////////////////////////////////////////////////////////////////// + // INSTANCE MEMBERS + this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(0, 0, 0, 0); + this.topGlyphs = []; + this.botGlyphs = []; + this.options = {}; + this.scale = 1; + this.code = code; + this.point = point; + this.originShift = { x: 0, y: 0 }; + this.x_shift = 0; + this.y_shift = 0; + if (options) { + this.setOptions(options); + } + else { + this.reset(); + } + } + // eslint-disable-next-line + draw(...args) { + // DO NOTHING. + } + getCode() { + return this.code; + } + // eslint-disable-next-line + setOptions(options) { + this.options = Object.assign(Object.assign({}, this.options), options); + this.reset(); + } + setPoint(point) { + this.point = point; + return this; + } + setStave(stave) { + this.stave = stave; + return this; + } + getXShift() { + return this.x_shift; + } + setXShift(x_shift) { + this.x_shift = x_shift; + return this; + } + getYshift() { + return this.y_shift; + } + setYShift(y_shift) { + this.y_shift = y_shift; + return this; + } + reset() { + const data = Glyph.cache.lookup(this.code, this.options.category); + this.metrics = data.metrics; + // Override point from metrics file + if (data.point != -1) { + this.point = data.point; + } + this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100); + this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale); + } + checkMetrics() { + return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`); + } + getMetrics() { + const metrics = this.checkMetrics(); + const metricsScale = metrics.scale; + return { + x_min: metrics.x_min * this.scale * metricsScale, + x_max: metrics.x_max * this.scale * metricsScale, + width: this.bbox.getW(), + height: this.bbox.getH(), + scale: this.scale * metricsScale, + x_shift: metrics.x_shift, + y_shift: metrics.y_shift, + outline: metrics.outline, + font: metrics.font, + ha: metrics.ha, + }; + } + setOriginX(x) { + const { bbox } = this; + const originX = Math.abs(bbox.getX() / bbox.getW()); + const xShift = (x - originX) * bbox.getW(); + this.originShift.x = -xShift; + } + setOriginY(y) { + const { bbox } = this; + const originY = Math.abs(bbox.getY() / bbox.getH()); + const yShift = (y - originY) * bbox.getH(); + this.originShift.y = -yShift; + } + setOrigin(x, y) { + this.setOriginX(x); + this.setOriginY(y); + } + render(ctx, x, y) { + const metrics = this.checkMetrics(); + const outline = metrics.outline; + const scale = this.scale * metrics.scale; + this.setRendered(); + this.applyStyle(ctx); + const xPos = x + this.originShift.x + metrics.x_shift; + const yPos = y + this.originShift.y + metrics.y_shift; + Glyph.renderOutline(ctx, outline, scale, xPos, yPos); + this.restoreStyle(ctx); + } + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + renderToStave(x) { + const context = this.checkContext(); + const metrics = this.checkMetrics(); + const stave = this.checkStave(); + const outline = metrics.outline; + const scale = this.scale * metrics.scale; + this.setRendered(); + this.applyStyle(); + const xPos = x + this.x_shift + metrics.x_shift; + const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift; + Glyph.renderOutline(context, outline, scale, xPos, yPos); + this.restoreStyle(); + } +} +Glyph.cache = new GlyphCache(); +// The current cache key for GlyphCache above. +// Computed when Flow.setMusicFont(...) is called. +// It is set to a comma separated list of font names. +Glyph.CURRENT_CACHE_KEY = ''; +// Used by the GlyphCache above. +// Set when Flow.setMusicFont(...) is called. +Glyph.MUSIC_FONT_STACK = []; + + + +/***/ }), + +/***/ "./src/glyphnote.ts": +/*!**************************!*\ + !*** ./src/glyphnote.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GlyphNote": () => (/* binding */ GlyphNote) +/* harmony export */ }); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// Any glyph that is set to appear on a Stave and take up musical time and graphical space. + + +class GlyphNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GlyphNote; + } + constructor(glyph, noteStruct, options) { + super(noteStruct); + this.options = Object.assign({ ignoreTicks: false, line: 2 }, options); + // Note properties + this.ignore_ticks = this.options.ignoreTicks; + this.setGlyph(glyph); + } + setGlyph(glyph) { + this.glyph = glyph; + this.setWidth(this.glyph.getMetrics().width); + return this; + } + getBoundingBox() { + return this.glyph.getBoundingBox(); + } + preFormat() { + if (!this.preFormatted && this.modifierContext) { + this.modifierContext.preFormat(); + } + this.preFormatted = true; + return this; + } + drawModifiers() { + const ctx = this.checkContext(); + for (let i = 0; i < this.modifiers.length; i++) { + const modifier = this.modifiers[i]; + modifier.setContext(ctx); + modifier.drawWithStyle(); + } + } + /** Get the glyph width. */ + getGlyphWidth() { + return this.glyph.getMetrics().width; + } + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('glyphNote', this.getAttribute('id')); + // Context is set when setStave is called on Note + const glyph = this.glyph; + if (!glyph.getContext()) { + glyph.setContext(ctx); + } + glyph.setStave(stave); + glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs()); + const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX(); + glyph.renderToStave(x); + this.drawModifiers(); + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} + + +/***/ }), + +/***/ "./src/gracenote.ts": +/*!**************************!*\ + !*** ./src/gracenote.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GraceNote": () => (/* binding */ GraceNote) +/* harmony export */ }); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. + + + + + +class GraceNote extends _stavenote__WEBPACK_IMPORTED_MODULE_0__.StaveNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.GraceNote; + } + static get LEDGER_LINE_OFFSET() { + return 2; + } + static get SCALE() { + return 0.66; + } + constructor(noteStruct) { + super(Object.assign({ glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct)); + this.slash = noteStruct.slash || false; + this.slur = true; + this.buildNoteHeads(); + this.width = 3; + } + getStemExtension() { + if (this.stem_extension_override) { + return this.stem_extension_override; + } + const glyphProps = this.getGlyphProps(); + if (glyphProps) { + let ret = super.getStemExtension(); + if (glyphProps.stem) { + const staveNoteScale = this.getStaveNoteScale(); + ret = (_stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT + ret) * staveNoteScale - _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT; + } + return ret; + } + return 0; + } + getStaveNoteScale() { + return this.render_options.glyph_font_scale / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE; + } + draw() { + super.draw(); + this.setRendered(); + const stem = this.stem; + if (this.slash && stem) { + const staveNoteScale = this.getStaveNoteScale(); + // some magic numbers are based on the staveNoteScale 0.66. + const offsetScale = staveNoteScale / 0.66; + let slashBBox = undefined; + const beam = this.beam; + if (beam) { + // FIXME: should render slash after beam? + if (!beam.postFormatted) { + beam.postFormat(); + } + slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, { + stem: 6 * offsetScale, + beam: 5 * offsetScale, + }); + } + else { + const stem_direction = this.getStemDirection(); + const noteHeadBounds = this.getNoteHeadBounds(); + const noteStemHeight = stem.getHeight(); + let x = this.getAbsoluteX(); + let y = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN + ? noteHeadBounds.y_top - noteStemHeight + : noteHeadBounds.y_bottom - noteStemHeight; + const defaultStemExtention = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension; + let defaultOffsetY = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STEM_HEIGHT; + defaultOffsetY -= defaultOffsetY / 2.8; + defaultOffsetY += defaultStemExtention; + y += defaultOffsetY * staveNoteScale * stem_direction; + const offsets = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.UP + ? { + x1: 1, + y1: 0, + x2: 13, + y2: -9, + } + : { + x1: -4, + y1: 1, + x2: 13, + y2: 9, + }; + x += offsets.x1 * offsetScale; + y += offsets.y1 * offsetScale; + slashBBox = { + x1: x, + y1: y, + x2: x + offsets.x2 * offsetScale, + y2: y + offsets.y2 * offsetScale, + }; + } + // FIXME: avoid staff lines, ledger lines or others. + const ctx = this.checkContext(); + ctx.save(); + ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value. + ctx.beginPath(); + ctx.moveTo(slashBBox.x1, slashBBox.y1); + ctx.lineTo(slashBBox.x2, slashBBox.y2); + ctx.closePath(); + ctx.stroke(); + ctx.restore(); + } + } + calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) { + const beam = this.beam; + if (!beam) + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoBeam', "Can't calculate without a beam."); + const beam_slope = beam.slope; + const isBeamEndNote = beam.notes[beam.notes.length - 1] === this; + const scaleX = isBeamEndNote ? -1 : 1; + const beam_angle = Math.atan(beam_slope * scaleX); + // slash line intersecting point on beam. + const iPointOnBeam = { + dx: Math.cos(beam_angle) * slashBeamOffset, + dy: Math.sin(beam_angle) * slashBeamOffset, + }; + slashStemOffset *= this.getStemDirection(); + const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx); + const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX; + const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem; + const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX; + const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam; + const stemX = this.getStemX(); + const stem0X = beam.notes[0].getStemX(); + const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope; + const ret = { + x1: stemX - protrusion_stem_dx, + y1: stemY + slashStemOffset - protrusion_stem_dy, + x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx, + y2: stemY + iPointOnBeam.dy + protrusion_beam_dy, + }; + return ret; + } +} + + +/***/ }), + +/***/ "./src/gracenotegroup.ts": +/*!*******************************!*\ + !*** ./src/gracenotegroup.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GraceNoteGroup": () => (/* binding */ GraceNoteGroup) +/* harmony export */ }); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// This file implements `GraceNoteGroup` which is used to format and +// render grace notes. + + + + + + + + + + +// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (GraceNoteGroup.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_8__.log)('Vex.Flow.GraceNoteGroup', args); +} +/** GraceNoteGroup is used to format and render grace notes. */ +class GraceNoteGroup extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_7__.Category.GraceNoteGroup; + } + /** Arranges groups inside a `ModifierContext`. */ + static format(gracenote_groups, state) { + const group_spacing_stave = 4; + const group_spacing_tab = 0; + if (!gracenote_groups || gracenote_groups.length === 0) + return false; + const group_list = []; + let prev_note = null; + let shiftL = 0; + for (let i = 0; i < gracenote_groups.length; ++i) { + const gracenote_group = gracenote_groups[i]; + const note = gracenote_group.getNote(); + const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note); + const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab; + if (is_stavenote && note !== prev_note) { + // Iterate through all notes to get the displaced pixels + for (let n = 0; n < note.keys.length; ++n) { + shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL); + } + prev_note = note; + } + group_list.push({ shift: shiftL, gracenote_group, spacing }); + } + // If first note left shift in case it is displaced + let group_shift = group_list[0].shift; + let formatWidth; + for (let i = 0; i < group_list.length; ++i) { + const gracenote_group = group_list[i].gracenote_group; + gracenote_group.preFormat(); + formatWidth = gracenote_group.getWidth() + group_list[i].spacing; + group_shift = Math.max(formatWidth, group_shift); + } + for (let i = 0; i < group_list.length; ++i) { + const gracenote_group = group_list[i].gracenote_group; + formatWidth = gracenote_group.getWidth() + group_list[i].spacing; + gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding); + } + state.left_shift += group_shift; + return true; + } + //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */ + constructor(grace_notes, show_slur) { + super(); + this.preFormatted = false; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT; + this.grace_notes = grace_notes; + this.width = 0; + this.show_slur = show_slur; + this.slur = undefined; + this.voice = new _voice__WEBPACK_IMPORTED_MODULE_9__.Voice({ + num_beats: 4, + beat_value: 4, + resolution: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.RESOLUTION, + }).setStrict(false); + this.render_options = { + slur_y_shift: 0, + }; + this.beams = []; + this.voice.addTickables(this.grace_notes); + return this; + } + preFormat() { + if (this.preFormatted) + return; + if (!this.formatter) { + this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter(); + } + this.formatter.joinVoices([this.voice]).format([this.voice], 0, {}); + this.setWidth(this.formatter.getMinTotalWidth()); + this.preFormatted = true; + } + beamNotes(grace_notes) { + grace_notes = grace_notes || this.grace_notes; + if (grace_notes.length > 1) { + const beam = new _beam__WEBPACK_IMPORTED_MODULE_0__.Beam(grace_notes); + beam.render_options.beam_width = 3; + beam.render_options.partial_beam_length = 4; + this.beams.push(beam); + } + return this; + } + setWidth(width) { + this.width = width; + return this; + } + getWidth() { + return this.width + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding; + } + getGraceNotes() { + return this.grace_notes; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + L('Drawing grace note group for:', note); + this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function + // Draw grace notes. + this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw()); + // Draw beams. + this.beams.forEach((beam) => beam.setContext(ctx).draw()); + if (this.show_slur) { + // Create and draw slur. + const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note); + const TieClass = is_stavenote ? _stavetie__WEBPACK_IMPORTED_MODULE_4__.StaveTie : _tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie; + this.slur = new TieClass({ + last_note: this.grace_notes[0], + first_note: note, + first_indices: [0], + last_indices: [0], + }); + this.slur.render_options.cp2 = 12; + this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift; + this.slur.setContext(ctx).draw(); + } + } +} +GraceNoteGroup.DEBUG = false; + + + +/***/ }), + +/***/ "./src/gracetabnote.ts": +/*!*****************************!*\ + !*** ./src/gracetabnote.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GraceTabNote": () => (/* binding */ GraceTabNote) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// @author Balazs Forian-Szabo +// +// ## Description +// +// A basic implementation of grace notes +// to be rendered on a tab stave. +// +// See `tests/gracetabnote_tests.ts` for usage examples. + + + +class GraceTabNote extends _tabnote__WEBPACK_IMPORTED_MODULE_1__.TabNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.GraceTabNote; + } + constructor(noteStruct) { + super(noteStruct, false); + this.render_options = Object.assign(Object.assign({}, this.render_options), { + // vertical shift from stave line + y_shift: 0.3, + // grace glyph scale + scale: 0.6, + // grace tablature font + font: `7.5pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` }); + this.updateWidth(); + } +} + + +/***/ }), + +/***/ "./src/index.ts": +/*!**********************!*\ + !*** ./src/index.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Accidental": () => (/* reexport safe */ _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental), +/* harmony export */ "Annotation": () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation), +/* harmony export */ "AnnotationHorizontalJustify": () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify), +/* harmony export */ "AnnotationVerticalJustify": () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify), +/* harmony export */ "Articulation": () => (/* reexport safe */ _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation), +/* harmony export */ "BEAM_BOTH": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_BOTH), +/* harmony export */ "BEAM_LEFT": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_LEFT), +/* harmony export */ "BEAM_RIGHT": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_RIGHT), +/* harmony export */ "BarNote": () => (/* reexport safe */ _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote), +/* harmony export */ "Barline": () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.Barline), +/* harmony export */ "BarlineType": () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.BarlineType), +/* harmony export */ "Beam": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.Beam), +/* harmony export */ "Bend": () => (/* reexport safe */ _bend__WEBPACK_IMPORTED_MODULE_5__.Bend), +/* harmony export */ "BoundingBox": () => (/* reexport safe */ _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox), +/* harmony export */ "BoundingBoxComputation": () => (/* reexport safe */ _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation), +/* harmony export */ "Builder": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Builder), +/* harmony export */ "CanvasContext": () => (/* reexport safe */ _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext), +/* harmony export */ "Category": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.Category), +/* harmony export */ "ChordSymbol": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol), +/* harmony export */ "ChordSymbolHorizontalJustify": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify), +/* harmony export */ "ChordSymbolVerticalJustify": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify), +/* harmony export */ "Clef": () => (/* reexport safe */ _clef__WEBPACK_IMPORTED_MODULE_10__.Clef), +/* harmony export */ "ClefNote": () => (/* reexport safe */ _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote), +/* harmony export */ "Crescendo": () => (/* reexport safe */ _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo), +/* harmony export */ "Curve": () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.Curve), +/* harmony export */ "CurvePosition": () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition), +/* harmony export */ "Dot": () => (/* reexport safe */ _dot__WEBPACK_IMPORTED_MODULE_14__.Dot), +/* harmony export */ "EasyScore": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore), +/* harmony export */ "EasyScoreGrammar": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScoreGrammar), +/* harmony export */ "Element": () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_16__.Element), +/* harmony export */ "Factory": () => (/* reexport safe */ _factory__WEBPACK_IMPORTED_MODULE_17__.Factory), +/* harmony export */ "Flow": () => (/* reexport safe */ _flow__WEBPACK_IMPORTED_MODULE_18__.Flow), +/* harmony export */ "Font": () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.Font), +/* harmony export */ "FontStyle": () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontStyle), +/* harmony export */ "FontWeight": () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontWeight), +/* harmony export */ "Formatter": () => (/* reexport safe */ _formatter__WEBPACK_IMPORTED_MODULE_20__.Formatter), +/* harmony export */ "Fraction": () => (/* reexport safe */ _fraction__WEBPACK_IMPORTED_MODULE_21__.Fraction), +/* harmony export */ "FretHandFinger": () => (/* reexport safe */ _frethandfinger__WEBPACK_IMPORTED_MODULE_22__.FretHandFinger), +/* harmony export */ "GhostNote": () => (/* reexport safe */ _ghostnote__WEBPACK_IMPORTED_MODULE_23__.GhostNote), +/* harmony export */ "Glyph": () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.Glyph), +/* harmony export */ "GlyphNote": () => (/* reexport safe */ _glyphnote__WEBPACK_IMPORTED_MODULE_25__.GlyphNote), +/* harmony export */ "GraceNote": () => (/* reexport safe */ _gracenote__WEBPACK_IMPORTED_MODULE_26__.GraceNote), +/* harmony export */ "GraceNoteGroup": () => (/* reexport safe */ _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__.GraceNoteGroup), +/* harmony export */ "GraceTabNote": () => (/* reexport safe */ _gracetabnote__WEBPACK_IMPORTED_MODULE_28__.GraceTabNote), +/* harmony export */ "KeyManager": () => (/* reexport safe */ _keymanager__WEBPACK_IMPORTED_MODULE_29__.KeyManager), +/* harmony export */ "KeySigNote": () => (/* reexport safe */ _keysignote__WEBPACK_IMPORTED_MODULE_31__.KeySigNote), +/* harmony export */ "KeySignature": () => (/* reexport safe */ _keysignature__WEBPACK_IMPORTED_MODULE_30__.KeySignature), +/* harmony export */ "Modifier": () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.Modifier), +/* harmony export */ "ModifierContext": () => (/* reexport safe */ _modifiercontext__WEBPACK_IMPORTED_MODULE_33__.ModifierContext), +/* harmony export */ "ModifierPosition": () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.ModifierPosition), +/* harmony export */ "MultiMeasureRest": () => (/* reexport safe */ _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__.MultiMeasureRest), +/* harmony export */ "Music": () => (/* reexport safe */ _music__WEBPACK_IMPORTED_MODULE_35__.Music), +/* harmony export */ "Note": () => (/* reexport safe */ _note__WEBPACK_IMPORTED_MODULE_36__.Note), +/* harmony export */ "NoteHead": () => (/* reexport safe */ _notehead__WEBPACK_IMPORTED_MODULE_37__.NoteHead), +/* harmony export */ "NoteSubGroup": () => (/* reexport safe */ _notesubgroup__WEBPACK_IMPORTED_MODULE_38__.NoteSubGroup), +/* harmony export */ "Ornament": () => (/* reexport safe */ _ornament__WEBPACK_IMPORTED_MODULE_39__.Ornament), +/* harmony export */ "OutlineCode": () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.OutlineCode), +/* harmony export */ "Parenthesis": () => (/* reexport safe */ _parenthesis__WEBPACK_IMPORTED_MODULE_40__.Parenthesis), +/* harmony export */ "Parser": () => (/* reexport safe */ _parser__WEBPACK_IMPORTED_MODULE_41__.Parser), +/* harmony export */ "PedalMarking": () => (/* reexport safe */ _pedalmarking__WEBPACK_IMPORTED_MODULE_42__.PedalMarking), +/* harmony export */ "Piece": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Piece), +/* harmony export */ "Registry": () => (/* reexport safe */ _registry__WEBPACK_IMPORTED_MODULE_43__.Registry), +/* harmony export */ "RenderContext": () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.RenderContext), +/* harmony export */ "Renderer": () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.Renderer), +/* harmony export */ "RendererBackends": () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererBackends), +/* harmony export */ "RendererLineEndType": () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererLineEndType), +/* harmony export */ "RepeatNote": () => (/* reexport safe */ _repeatnote__WEBPACK_IMPORTED_MODULE_46__.RepeatNote), +/* harmony export */ "Repetition": () => (/* reexport safe */ _staverepetition__WEBPACK_IMPORTED_MODULE_54__.Repetition), +/* harmony export */ "RuntimeError": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.RuntimeError), +/* harmony export */ "SVGContext": () => (/* reexport safe */ _svgcontext__WEBPACK_IMPORTED_MODULE_64__.SVGContext), +/* harmony export */ "Stave": () => (/* reexport safe */ _stave__WEBPACK_IMPORTED_MODULE_47__.Stave), +/* harmony export */ "StaveConnector": () => (/* reexport safe */ _staveconnector__WEBPACK_IMPORTED_MODULE_49__.StaveConnector), +/* harmony export */ "StaveHairpin": () => (/* reexport safe */ _stavehairpin__WEBPACK_IMPORTED_MODULE_50__.StaveHairpin), +/* harmony export */ "StaveLine": () => (/* reexport safe */ _staveline__WEBPACK_IMPORTED_MODULE_51__.StaveLine), +/* harmony export */ "StaveModifier": () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifier), +/* harmony export */ "StaveModifierPosition": () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifierPosition), +/* harmony export */ "StaveNote": () => (/* reexport safe */ _stavenote__WEBPACK_IMPORTED_MODULE_53__.StaveNote), +/* harmony export */ "StaveSection": () => (/* reexport safe */ _stavesection__WEBPACK_IMPORTED_MODULE_55__.StaveSection), +/* harmony export */ "StaveTempo": () => (/* reexport safe */ _stavetempo__WEBPACK_IMPORTED_MODULE_56__.StaveTempo), +/* harmony export */ "StaveText": () => (/* reexport safe */ _stavetext__WEBPACK_IMPORTED_MODULE_57__.StaveText), +/* harmony export */ "StaveTie": () => (/* reexport safe */ _stavetie__WEBPACK_IMPORTED_MODULE_58__.StaveTie), +/* harmony export */ "Stem": () => (/* reexport safe */ _stem__WEBPACK_IMPORTED_MODULE_60__.Stem), +/* harmony export */ "StemmableNote": () => (/* reexport safe */ _stemmablenote__WEBPACK_IMPORTED_MODULE_61__.StemmableNote), +/* harmony export */ "StringNumber": () => (/* reexport safe */ _stringnumber__WEBPACK_IMPORTED_MODULE_62__.StringNumber), +/* harmony export */ "Stroke": () => (/* reexport safe */ _strokes__WEBPACK_IMPORTED_MODULE_63__.Stroke), +/* harmony export */ "SymbolModifiers": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers), +/* harmony export */ "SymbolTypes": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes), +/* harmony export */ "System": () => (/* reexport safe */ _system__WEBPACK_IMPORTED_MODULE_65__.System), +/* harmony export */ "TabNote": () => (/* reexport safe */ _tabnote__WEBPACK_IMPORTED_MODULE_66__.TabNote), +/* harmony export */ "TabSlide": () => (/* reexport safe */ _tabslide__WEBPACK_IMPORTED_MODULE_67__.TabSlide), +/* harmony export */ "TabStave": () => (/* reexport safe */ _tabstave__WEBPACK_IMPORTED_MODULE_68__.TabStave), +/* harmony export */ "TabTie": () => (/* reexport safe */ _tabtie__WEBPACK_IMPORTED_MODULE_69__.TabTie), +/* harmony export */ "TextBracket": () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracket), +/* harmony export */ "TextBracketPosition": () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracketPosition), +/* harmony export */ "TextDynamics": () => (/* reexport safe */ _textdynamics__WEBPACK_IMPORTED_MODULE_71__.TextDynamics), +/* harmony export */ "TextFormatter": () => (/* reexport safe */ _textformatter__WEBPACK_IMPORTED_MODULE_72__.TextFormatter), +/* harmony export */ "TextJustification": () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextJustification), +/* harmony export */ "TextNote": () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextNote), +/* harmony export */ "TickContext": () => (/* reexport safe */ _tickcontext__WEBPACK_IMPORTED_MODULE_75__.TickContext), +/* harmony export */ "Tickable": () => (/* reexport safe */ _tickable__WEBPACK_IMPORTED_MODULE_74__.Tickable), +/* harmony export */ "TimeSigNote": () => (/* reexport safe */ _timesignote__WEBPACK_IMPORTED_MODULE_78__.TimeSigNote), +/* harmony export */ "TimeSignature": () => (/* reexport safe */ _timesignature__WEBPACK_IMPORTED_MODULE_77__.TimeSignature), +/* harmony export */ "TimeSignatureGlyph": () => (/* reexport safe */ _timesigglyph__WEBPACK_IMPORTED_MODULE_76__.TimeSignatureGlyph), +/* harmony export */ "Tremolo": () => (/* reexport safe */ _tremolo__WEBPACK_IMPORTED_MODULE_79__.Tremolo), +/* harmony export */ "Tuning": () => (/* reexport safe */ _tuning__WEBPACK_IMPORTED_MODULE_80__.Tuning), +/* harmony export */ "Tuplet": () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.Tuplet), +/* harmony export */ "TupletLocation": () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.TupletLocation), +/* harmony export */ "Vex": () => (/* reexport safe */ _vex__WEBPACK_IMPORTED_MODULE_84__.Vex), +/* harmony export */ "Vibrato": () => (/* reexport safe */ _vibrato__WEBPACK_IMPORTED_MODULE_85__.Vibrato), +/* harmony export */ "VibratoBracket": () => (/* reexport safe */ _vibratobracket__WEBPACK_IMPORTED_MODULE_86__.VibratoBracket), +/* harmony export */ "Voice": () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.Voice), +/* harmony export */ "VoiceMode": () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.VoiceMode), +/* harmony export */ "Volta": () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.Volta), +/* harmony export */ "VoltaType": () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.VoltaType), +/* harmony export */ "defined": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.defined), +/* harmony export */ "drawDot": () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.drawDot), +/* harmony export */ "globalObject": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.globalObject), +/* harmony export */ "isAccidental": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAccidental), +/* harmony export */ "isAnnotation": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAnnotation), +/* harmony export */ "isBarline": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isBarline), +/* harmony export */ "isCategory": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isCategory), +/* harmony export */ "isDot": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isDot), +/* harmony export */ "isGraceNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNote), +/* harmony export */ "isGraceNoteGroup": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNoteGroup), +/* harmony export */ "isHTMLCanvas": () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLCanvas), +/* harmony export */ "isHTMLDiv": () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLDiv), +/* harmony export */ "isNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isNote), +/* harmony export */ "isRenderContext": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isRenderContext), +/* harmony export */ "isStaveNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStaveNote), +/* harmony export */ "isStemmableNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStemmableNote), +/* harmony export */ "isTabNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isTabNote), +/* harmony export */ "log": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.log), +/* harmony export */ "midLine": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.midLine), +/* harmony export */ "normalizeAngle": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.normalizeAngle), +/* harmony export */ "prefix": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.prefix), +/* harmony export */ "sumArray": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.sumArray), +/* harmony export */ "warn": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.warn) +/* harmony export */ }); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ "./src/barnote.ts"); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); +/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.ts"); +/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ "./src/crescendo.ts"); +/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ "./src/curve.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ "./src/factory.ts"); +/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./flow */ "./src/flow.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./gracetabnote */ "./src/gracetabnote.ts"); +/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keymanager */ "./src/keymanager.ts"); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parenthesis */ "./src/parenthesis.ts"); +/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./parser */ "./src/parser.ts"); +/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); +/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./registry */ "./src/registry.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./stavehairpin */ "./src/stavehairpin.ts"); +/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./staveline */ "./src/staveline.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.ts"); +/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavesection */ "./src/stavesection.ts"); +/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.ts"); +/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./strokes */ "./src/strokes.ts"); +/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./svgcontext */ "./src/svgcontext.ts"); +/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./system */ "./src/system.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabslide */ "./src/tabslide.ts"); +/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.ts"); +/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./tickable */ "./src/tickable.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./timesigglyph */ "./src/timesigglyph.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.ts"); +/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./tremolo */ "./src/tremolo.ts"); +/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./tuning */ "./src/tuning.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(/*! ./vex */ "./src/vex.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); +/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(/*! ./web */ "./src/web.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + + + + + + + + + + + + + + +// Do not export './fonts/*' because they are used by the entry/* files. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Do not export './tables' because it is internal. Its public API is accessible via Vex.Flow.*. + + + + + + + + + + + + + + + + + + +// Do not export './version'. It is accessible via Vex.Flow.BUILD. + + + + + + + +/***/ }), + +/***/ "./src/keymanager.ts": +/*!***************************!*\ + !*** ./src/keymanager.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "KeyManager": () => (/* binding */ KeyManager) +/* harmony export */ }); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// This class implements diatonic key management. + + +class KeyManager { + constructor(key) { + this.music = new _music__WEBPACK_IMPORTED_MODULE_0__.Music(); + this.setKey(key); + } + setKey(key) { + this.key = key; + this.reset(); + return this; + } + getKey() { + return this.key; + } + reset() { + this.keyParts = this.music.getKeyParts(this.key); + this.keyString = this.keyParts.root; + if (this.keyParts.accidental) + this.keyString += this.keyParts.accidental; + const is_supported_type = _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type]; + if (!is_supported_type) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Unsupported key type: ${this.key}`); + } + this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type]); + this.scaleMap = {}; + this.scaleMapByValue = {}; + this.originalScaleMapByValue = {}; + const noteLocation = _music__WEBPACK_IMPORTED_MODULE_0__.Music.root_indices[this.keyParts.root]; + for (let i = 0; i < _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length; ++i) { + const index = (noteLocation + i) % _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length; + const rootName = _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots[index]; + const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]); + this.scaleMap[rootName] = noteName; + this.scaleMapByValue[this.scale[i]] = noteName; + this.originalScaleMapByValue[this.scale[i]] = noteName; + } + return this; + } + getAccidental(key) { + const root = this.music.getKeyParts(key).root; + const parts = this.music.getNoteParts(this.scaleMap[root]); + return { + note: this.scaleMap[root], + accidental: parts.accidental, + }; + } + selectNote(note) { + note = note.toLowerCase(); + const parts = this.music.getNoteParts(note); + // First look for matching note in our altered scale + const scaleNote = this.scaleMap[parts.root]; + const modparts = this.music.getNoteParts(scaleNote); + if (scaleNote === note) { + return { + note: scaleNote, + accidental: parts.accidental, + change: false, + }; + } + // Then search for a note of equivalent value in our altered scale + const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)]; + if (valueNote != null) { + return { + note: valueNote, + accidental: this.music.getNoteParts(valueNote).accidental, + change: false, + }; + } + // Then search for a note of equivalent value in the original scale + const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)]; + if (originalValueNote != null) { + this.scaleMap[modparts.root] = originalValueNote; + delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)]; + this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote; + return { + note: originalValueNote, + accidental: this.music.getNoteParts(originalValueNote).accidental, + change: true, + }; + } + // Then try to unmodify a currently modified note. + if (modparts.root === note) { + delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])]; + this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root; + this.scaleMap[modparts.root] = modparts.root; + return { + note: modparts.root, + accidental: undefined, + change: true, + }; + } + // Last resort -- shitshoot + delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])]; + this.scaleMapByValue[this.music.getNoteValue(note)] = note; + delete this.scaleMap[modparts.root]; + this.scaleMap[modparts.root] = note; + return { + note, + accidental: parts.accidental, + change: true, + }; + } +} + + +/***/ }), + +/***/ "./src/keysignature.ts": +/*!*****************************!*\ + !*** ./src/keysignature.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "KeySignature": () => (/* binding */ KeySignature) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Cyril Silverman +// +// ## Description +// +// This file implements key signatures. A key signature sits on a stave +// and indicates the notes with implicit accidentals. + + + + + +class KeySignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.KeySignature; + } + // Create a new Key Signature based on a `key_spec` + constructor(keySpec, cancelKeySpec, alterKeySpec) { + super(); + this.accList = []; + this.setKeySig(keySpec, cancelKeySpec, alterKeySpec); + this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN); + this.glyphFontScale = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE; + this.glyphs = []; + this.xPositions = []; // relative to this.x + this.paddingForced = false; + } + // Add an accidental glyph to the `KeySignature` instance which represents + // the provided `acc`. If `nextAcc` is also provided, the appropriate + // spacing will be included in the glyph's position + convertToGlyph(acc, nextAcc) { + const accGlyphData = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.accidentalCodes(acc.type); + const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(accGlyphData.code, this.glyphFontScale); + // Determine spacing between current accidental and the next accidental + let extraWidth = 1; + if (acc.type === 'n' && nextAcc) { + const spacing = KeySignature.accidentalSpacing[nextAcc.type]; + if (spacing) { + const isAbove = nextAcc.line >= acc.line; + extraWidth = isAbove ? spacing.above : spacing.below; + } + } + // Place the glyph on the stave + this.placeGlyphOnLine(glyph, this.checkStave(), acc.line); + this.glyphs.push(glyph); + const xPosition = this.xPositions[this.xPositions.length - 1]; + const glyphWidth = glyph.getMetrics().width + extraWidth; + // Store the next accidental's x position + this.xPositions.push(xPosition + glyphWidth); + // Expand size of key signature + this.width += glyphWidth; + } + // Cancel out a key signature provided in the `spec` parameter. This will + // place appropriate natural accidentals before the key signature. + cancelKey(spec) { + this.formatted = false; + this.cancelKeySpec = spec; + return this; + } + convertToCancelAccList(spec) { + // Get the accidental list for the cancelled key signature + const cancel_accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature(spec); + // If the cancelled key has a different accidental type, ie: # vs b + const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type; + // Determine how many naturals needed to add + const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length; + // Return if no naturals needed + if (naturals < 1) + return undefined; + // Get the line position for each natural + const cancelled = []; + for (let i = 0; i < naturals; i++) { + let index = i; + if (!different_types) { + index = cancel_accList.length - naturals + i; + } + const acc = cancel_accList[index]; + cancelled.push({ type: 'n', line: acc.line }); + } + // Combine naturals with main accidental list for the key signature + this.accList = cancelled.concat(this.accList); + return { + accList: cancelled, + type: cancel_accList[0].type, + }; + } + // Deprecated + addToStave(stave) { + this.paddingForced = true; + stave.addModifier(this); + return this; + } + // Apply the accidental staff line placement based on the `clef` and + // the accidental `type` for the key signature ('# or 'b'). + convertAccLines(clef, type, accList = this.accList) { + let offset = 0.0; // if clef === "treble" + let customLines; // when clef doesn't follow treble key sig shape + switch (clef) { + // Treble & Subbass both have offsets of 0, so are not included. + case 'soprano': + if (type === '#') + customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1]; + else + offset = -1; + break; + case 'mezzo-soprano': + if (type === 'b') + customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5]; + else + offset = 1.5; + break; + case 'alto': + offset = 0.5; + break; + case 'tenor': + if (type === '#') + customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5]; + else + offset = -0.5; + break; + case 'baritone-f': + case 'baritone-c': + if (type === 'b') + customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2]; + else + offset = 2; + break; + case 'bass': + case 'french': + offset = 1; + break; + default: + break; + } + // If there's a special case, assign those lines/spaces: + let i; + if (typeof customLines !== 'undefined') { + for (i = 0; i < accList.length; ++i) { + accList[i].line = customLines[i]; + } + } + else if (offset !== 0) { + for (i = 0; i < accList.length; ++i) { + accList[i].line += offset; + } + } + } + getPadding(index) { + if (!this.formatted) + this.format(); + return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding; + } + getWidth() { + if (!this.formatted) + this.format(); + return this.width; + } + setKeySig(keySpec, cancelKeySpec, alterKeySpec) { + this.formatted = false; + this.keySpec = keySpec; + this.cancelKeySpec = cancelKeySpec; + this.alterKeySpec = alterKeySpec; + return this; + } + // Alter the accidentals of a key spec one by one. + // Each alteration is a new accidental that replaces the + // original accidental (or the canceled one). + alterKey(alterKeySpec) { + this.formatted = false; + this.alterKeySpec = alterKeySpec; + return this; + } + convertToAlterAccList(alterKeySpec) { + const max = Math.min(alterKeySpec.length, this.accList.length); + for (let i = 0; i < max; ++i) { + if (alterKeySpec[i]) { + this.accList[i].type = alterKeySpec[i]; + } + } + } + format() { + const stave = this.checkStave(); + this.width = 0; + this.glyphs = []; + this.xPositions = [0]; // initialize with initial x position + this.accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature((0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.keySpec)); + const accList = this.accList; + const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined; + let cancelAccList; + if (this.cancelKeySpec) { + cancelAccList = this.convertToCancelAccList(this.cancelKeySpec); + } + if (this.alterKeySpec) { + this.convertToAlterAccList(this.alterKeySpec); + } + if (this.accList.length > 0) { + const clef = (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef(); + if (cancelAccList) { + this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList); + } + this.convertAccLines(clef, firstAccidentalType, accList); + for (let i = 0; i < this.accList.length; ++i) { + this.convertToGlyph(this.accList[i], this.accList[i + 1]); + } + } + this.formatted = true; + } + /** + * Return the Glyph objects making up this KeySignature. + */ + getGlyphs() { + if (!this.formatted) + this.format(); + return this.glyphs; + } + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + if (!this.formatted) + this.format(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('keysignature', this.getAttribute('id')); + for (let i = 0; i < this.glyphs.length; i++) { + const glyph = this.glyphs[i]; + const x = this.x + this.xPositions[i]; + glyph.setStave(stave); + glyph.setContext(ctx); + glyph.renderToStave(x); + } + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} +// Space between natural and following accidental depending +// on vertical position +KeySignature.accidentalSpacing = { + '#': { + above: 6, + below: 4, + }, + b: { + above: 4, + below: 7, + }, + n: { + above: 4, + below: 1, + }, + '##': { + above: 6, + below: 4, + }, + bb: { + above: 4, + below: 7, + }, + db: { + above: 4, + below: 7, + }, + d: { + above: 4, + below: 7, + }, + bbs: { + above: 4, + below: 7, + }, + '++': { + above: 6, + below: 4, + }, + '+': { + above: 6, + below: 4, + }, + '+-': { + above: 6, + below: 4, + }, + '++-': { + above: 6, + below: 4, + }, + bs: { + above: 4, + below: 10, + }, + bss: { + above: 4, + below: 10, + }, +}; + + + +/***/ }), + +/***/ "./src/keysignote.ts": +/*!***************************!*\ + !*** ./src/keysignote.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "KeySigNote": () => (/* binding */ KeySigNote) +/* harmony export */ }); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Mark Meeus 2019 + + + +class KeySigNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.KeySigNote; + } + constructor(keySpec, cancelKeySpec, alterKeySpec) { + super({ duration: 'b' }); + this.keySignature = new _keysignature__WEBPACK_IMPORTED_MODULE_0__.KeySignature(keySpec, cancelKeySpec, alterKeySpec); + // Note properties + this.ignore_ticks = true; + } + /* Overridden to ignore */ + // eslint-disable-next-line + addToModifierContext(mc) { + // DO NOTHING. + return this; + } + preFormat() { + this.preFormatted = true; + this.keySignature.setStave(this.checkStave()); + this.setWidth(this.keySignature.getWidth()); + return this; + } + draw() { + const ctx = this.checkStave().checkContext(); + this.setRendered(); + this.keySignature.setX(this.getAbsoluteX()); + this.keySignature.setContext(ctx); + this.keySignature.draw(); + } +} + + +/***/ }), + +/***/ "./src/modifier.ts": +/*!*************************!*\ + !*** ./src/modifier.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Modifier": () => (/* binding */ Modifier), +/* harmony export */ "ModifierPosition": () => (/* binding */ ModifierPosition) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +var ModifierPosition; +(function (ModifierPosition) { + ModifierPosition[ModifierPosition["CENTER"] = 0] = "CENTER"; + ModifierPosition[ModifierPosition["LEFT"] = 1] = "LEFT"; + ModifierPosition[ModifierPosition["RIGHT"] = 2] = "RIGHT"; + ModifierPosition[ModifierPosition["ABOVE"] = 3] = "ABOVE"; + ModifierPosition[ModifierPosition["BELOW"] = 4] = "BELOW"; +})(ModifierPosition || (ModifierPosition = {})); +// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`. +// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); } +/** + * `Modifier` is an abstract interface for notational elements that modify + * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc. + * + * For a `Modifier` instance to be positioned correctly, it must be part of + * a `ModifierContext`. All modifiers in the same context are rendered relative to + * one another. + * + * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also, + * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same + * `ModifierContext`. This ensures that multiple voices don't trample all over each other. + */ +class Modifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + /** + * Modifiers category string. Every modifier has a different category. + * The `ModifierContext` uses this to determine the type and order of the modifiers. + */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Modifier; + } + /** Modifiers can be positioned almost anywhere, relative to a note. */ + static get Position() { + return ModifierPosition; + } + static get PositionString() { + return { + center: ModifierPosition.CENTER, + above: ModifierPosition.ABOVE, + below: ModifierPosition.BELOW, + left: ModifierPosition.LEFT, + right: ModifierPosition.RIGHT, + }; + } + constructor() { + super(); + this.width = 0; + // The `text_line` is reserved space above or below a stave. + this.text_line = 0; + this.position = Modifier.Position.LEFT; + this.x_shift = 0; + this.y_shift = 0; + this.spacingFromNextModifier = 0; + } + /** Called when position changes. */ + reset() { + // DO NOTHING. + } + /** Get modifier widths. */ + getWidth() { + return this.width; + } + /** Set modifier widths. */ + setWidth(width) { + this.width = width; + return this; + } + /** Get attached note (`StaveNote`, `TabNote`, etc.) */ + getNote() { + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', 'Modifier has no note.'); + } + /** + * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.). + * Also verifies that the index is valid. + */ + checkAttachedNote() { + const category = this.getCategory(); + (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', `Can't draw ${category} without an index.`); + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', `Can't draw ${category} without a note.`); + } + /** + * Set attached note. + * @param note (`StaveNote`, `TabNote`, etc.) + */ + setNote(note) { + this.note = note; + return this; + } + /** Get note index, which is a specific note in a chord. */ + getIndex() { + return this.index; + } + /** Check and get note index, which is a specific note in a chord. */ + checkIndex() { + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', 'Modifier has an invalid index.'); + } + /** Set note index, which is a specific note in a chord. */ + setIndex(index) { + this.index = index; + return this; + } + /** Get `ModifierContext`. */ + getModifierContext() { + return this.modifierContext; + } + /** Check and get `ModifierContext`. */ + checkModifierContext() { + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.modifierContext, 'NoModifierContext', 'Modifier Context Required'); + } + /** Every modifier must be part of a `ModifierContext`. */ + setModifierContext(c) { + this.modifierContext = c; + return this; + } + /** Get position. */ + getPosition() { + return this.position; + } + /** + * Set position. + * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW + */ + setPosition(position) { + this.position = typeof position === 'string' ? Modifier.PositionString[position] : position; + this.reset(); + return this; + } + /** Set the `text_line` for the modifier. */ + setTextLine(line) { + this.text_line = line; + return this; + } + /** Shift modifier down `y` pixels. Negative values shift up. */ + setYShift(y) { + this.y_shift = y; + return this; + } + /** Set spacing from next modifier. */ + setSpacingFromNextModifier(x) { + this.spacingFromNextModifier = x; + } + /** Get spacing from next modifier. */ + getSpacingFromNextModifier() { + return this.spacingFromNextModifier; + } + /** + * Shift modifier `x` pixels in the direction of the modifier. Negative values + * shift reverse. + */ + setXShift(x) { + this.x_shift = 0; + if (this.position === Modifier.Position.LEFT) { + this.x_shift -= x; + } + else { + this.x_shift += x; + } + return this; + } + /** Get shift modifier `x` */ + getXShift() { + return this.x_shift; + } + /** Render the modifier onto the canvas. */ + draw() { + this.checkContext(); + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NotImplemented', 'draw() not implemented for this modifier.'); + } + // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset + alignSubNotesWithNote(subNotes, note) { + // Shift over the tick contexts of each note + const tickContext = note.getTickContext(); + const metrics = tickContext.getMetrics(); + const stave = note.getStave(); + const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier(); + subNotes.forEach((subNote) => { + const subTickContext = subNote.getTickContext(); + if (stave) + subNote.setStave(stave); + subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render + }); + } +} + + +/***/ }), + +/***/ "./src/modifiercontext.ts": +/*!********************************!*\ + !*** ./src/modifiercontext.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ModifierContext": () => (/* binding */ ModifierContext) +/* harmony export */ }); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./parenthesis */ "./src/parenthesis.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./strokes */ "./src/strokes.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// This class implements various types of members to notes (e.g. bends, +// fingering positions etc.). The ModifierContext works with tickables +// that are at the same tick to ensure that they and their modifiers +// all have proper alignment. (Note that the ModifierContext also +// runs the spacing of the tickable). +// +// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works + + + + + + + + + + + + + + + + + +// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (ModifierContext.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_15__.log)('Vex.Flow.ModifierContext', args); +} +class ModifierContext { + constructor() { + // Formatting data. + this.state = { + left_shift: 0, + right_shift: 0, + text_line: 0, + top_text_line: 0, + }; + // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers, + // StaveNotes, TabNotes, etc. + this.members = {}; + this.preFormatted = false; + this.postFormatted = false; + this.formatted = false; + this.width = 0; + this.spacing = 0; + } + addModifier(member) { + L('addModifier is deprecated, use addMember instead.'); + return this.addMember(member); + } + /** + * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote. + * Here we add a new member to this.members, and create a new array if needed. + * @param member + * @returns this + */ + addMember(member) { + const category = member.getCategory(); + if (!this.members[category]) { + this.members[category] = []; + } + this.members[category].push(member); + member.setModifierContext(this); + this.preFormatted = false; + return this; + } + /** + * @deprecated + */ + getModifiers(category) { + L('getModifiers is deprecated, use getMembers instead.'); + return this.getMembers(category); + } + getMembers(category) { + var _a; + return (_a = this.members[category]) !== null && _a !== void 0 ? _a : []; + } + /** + * Get the width of the entire + */ + getWidth() { + return this.width; + } + getLeftShift() { + return this.state.left_shift; + } + getRightShift() { + return this.state.right_shift; + } + getState() { + return this.state; + } + getMetrics() { + if (!this.formatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('UnformattedMember', 'Unformatted member has no metrics.'); + } + return { + width: this.state.left_shift + this.state.right_shift + this.spacing, + spacing: this.spacing, + }; + } + preFormat() { + if (this.preFormatted) + return; + L('Preformatting ModifierContext'); + const state = this.state; + const members = this.members; + // The ordering below determines when different members are formatted and rendered. + _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote], state); + _parenthesis__WEBPACK_IMPORTED_MODULE_10__.Parenthesis.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Parenthesis], state); + _dot__WEBPACK_IMPORTED_MODULE_5__.Dot.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Dot], state); + _frethandfinger__WEBPACK_IMPORTED_MODULE_6__.FretHandFinger.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.FretHandFinger], state); + _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Accidental], state); + _strokes__WEBPACK_IMPORTED_MODULE_13__.Stroke.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stroke], state); + _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__.GraceNoteGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.GraceNoteGroup], state); + _notesubgroup__WEBPACK_IMPORTED_MODULE_8__.NoteSubGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.NoteSubGroup], state); + _stringnumber__WEBPACK_IMPORTED_MODULE_12__.StringNumber.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StringNumber], state); + _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Articulation], state); + _ornament__WEBPACK_IMPORTED_MODULE_9__.Ornament.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Ornament], state); + _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Annotation], state); + _chordsymbol__WEBPACK_IMPORTED_MODULE_4__.ChordSymbol.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.ChordSymbol], state); + _bend__WEBPACK_IMPORTED_MODULE_3__.Bend.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Bend], state); + _vibrato__WEBPACK_IMPORTED_MODULE_16__.Vibrato.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Vibrato], state, this); + // Update width of this member context + this.width = state.left_shift + state.right_shift; + this.preFormatted = true; + } + postFormat() { + if (this.postFormatted) + return; + L('Postformatting ModifierContext'); + // If post-formatting is required for an element, add more lines below. + _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.postFormat(this.getMembers(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote)); + } +} +ModifierContext.DEBUG = false; + + + +/***/ }), + +/***/ "./src/multimeasurerest.ts": +/*!*********************************!*\ + !*** ./src/multimeasurerest.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "MultiMeasureRest": () => (/* binding */ MultiMeasureRest) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// VexFlow - Music Engraving for HTML5 +// Copyright Mohit Muthanna 2010 +// +// This class implements multiple measure rests. + + + + + + + + +let semibreve_rest; +function get_semibreve_rest() { + if (!semibreve_rest) { + const noteHead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({ duration: 'w', note_type: 'r' }); + semibreve_rest = { + glyph_font_scale: noteHead.render_options.glyph_font_scale, + glyph_code: noteHead.glyph_code, + width: noteHead.getWidth(), + }; + } + return semibreve_rest; +} +class MultiMeasureRest extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.MultiMeasureRest; + } + /** + * + * @param number_of_measures Number of measures. + * @param options The options object. + */ + constructor(number_of_measures, options) { + var _a; + super(); + this.xs = { left: NaN, right: NaN }; + this.hasPaddingLeft = false; + this.hasPaddingRight = false; + this.hasLineThickness = false; + this.hasSymbolSpacing = false; + this.number_of_measures = number_of_measures; + // Keep track of whether these four options were provided. + this.hasPaddingLeft = typeof options.padding_left === 'number'; + this.hasPaddingRight = typeof options.padding_right === 'number'; + this.hasLineThickness = typeof options.line_thickness === 'number'; + this.hasSymbolSpacing = typeof options.symbol_spacing === 'number'; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); + this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options); + const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0); + this.render_options.number_line += fontLineShift; + } + getXs() { + return this.xs; + } + setStave(stave) { + this.stave = stave; + return this; + } + getStave() { + return this.stave; + } + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + drawLine(stave, ctx, left, right, spacingBetweenLines) { + const options = this.render_options; + const y = stave.getYForLine(options.line); + const padding = (right - left) * 0.1; + left += padding; + right -= padding; + let lineThicknessHalf; + if (this.hasLineThickness) { + lineThicknessHalf = options.line_thickness * 0.5; + } + else { + lineThicknessHalf = spacingBetweenLines * 0.25; + } + const serifThickness = options.serif_thickness; + const top = y - spacingBetweenLines; + const bot = y + spacingBetweenLines; + const leftIndented = left + serifThickness; + const rightIndented = right - serifThickness; + const lineTop = y - lineThicknessHalf; + const lineBottom = y + lineThicknessHalf; + ctx.save(); + ctx.beginPath(); + ctx.moveTo(left, top); + ctx.lineTo(leftIndented, top); + ctx.lineTo(leftIndented, lineTop); + ctx.lineTo(rightIndented, lineTop); + ctx.lineTo(rightIndented, top); + ctx.lineTo(right, top); + ctx.lineTo(right, bot); + ctx.lineTo(rightIndented, bot); + ctx.lineTo(rightIndented, lineBottom); + ctx.lineTo(leftIndented, lineBottom); + ctx.lineTo(leftIndented, bot); + ctx.lineTo(left, bot); + ctx.closePath(); + ctx.fill(); + } + drawSymbols(stave, ctx, left, right, spacingBetweenLines) { + const n4 = Math.floor(this.number_of_measures / 4); + const n = this.number_of_measures % 4; + const n2 = Math.floor(n / 2); + const n1 = n % 2; + const options = this.render_options; + // FIXME: TODO: invalidate semibreve_rest at the appropriate time + // (e.g., if the system font settings are changed). + semibreve_rest = undefined; + const rest = get_semibreve_rest(); + const rest_scale = options.semibreve_rest_glyph_scale; + const rest_width = rest.width * (rest_scale / rest.glyph_font_scale); + const glyphs = { + 2: { + width: rest_width * 0.5, + height: spacingBetweenLines, + }, + 1: { + width: rest_width, + }, + }; + /* 10: normal spacingBetweenLines */ + const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10; + const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing; + let x = left + (right - left) * 0.5 - width * 0.5; + const line = options.line; + const yTop = stave.getYForLine(line - 1); + const yMiddle = stave.getYForLine(line); + const yBottom = stave.getYForLine(line + 1); + ctx.save(); + ctx.setStrokeStyle('none'); + ctx.setLineWidth(0); + for (let i = 0; i < n4; ++i) { + ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height); + ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height); + x += glyphs[2].width + spacing; + } + for (let i = 0; i < n2; ++i) { + ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height); + x += glyphs[2].width + spacing; + } + for (let i = 0; i < n1; ++i) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code); + x += glyphs[1].width + spacing; + } + ctx.restore(); + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const stave = this.checkStave(); + let left = stave.getNoteStartX(); + let right = stave.getNoteEndX(); + // FIXME: getNoteStartX() returns x + 5(barline width) + // getNoteEndX() returns x + width(no barline width) + // See Stave constructor. How do we fix this? + // Here, we subtract the barline width. + const begModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition.BEGIN); + if (begModifiers.length === 1 && (0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isBarline)(begModifiers[0])) { + left -= begModifiers[0].getWidth(); + } + const options = this.render_options; + if (this.hasPaddingLeft) { + left = stave.getX() + options.padding_left; + } + if (this.hasPaddingRight) { + right = stave.getX() + stave.getWidth() - options.padding_right; + } + this.xs.left = left; + this.xs.right = right; + const spacingBetweenLines = options.spacing_between_lines_px; + if (options.use_symbols) { + this.drawSymbols(stave, ctx, left, right, spacingBetweenLines); + } + else { + this.drawLine(stave, ctx, left, right, spacingBetweenLines); + } + if (options.show_number) { + const timeSpec = '/' + this.number_of_measures; + const timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_5__.TimeSignature(timeSpec, 0, false); + timeSig.point = options.number_glyph_point; + timeSig.setTimeSig(timeSpec); + timeSig.setStave(stave); + timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5); + timeSig.bottomLine = options.number_line; + timeSig.setContext(ctx).draw(); + } + } +} + + +/***/ }), + +/***/ "./src/music.ts": +/*!**********************!*\ + !*** ./src/music.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Music": () => (/* binding */ Music) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + +/** Music implements some standard music theory routines. */ +class Music { + /** Number of an canonical notes (12). */ + static get NUM_TONES() { + return this.canonical_notes.length; + } + /** Names of root notes ('c', 'd',...) */ + static get roots() { + return ['c', 'd', 'e', 'f', 'g', 'a', 'b']; + } + /** Values of the root notes.*/ + static get root_values() { + return [0, 2, 4, 5, 7, 9, 11]; + } + /** Indices of the root notes.*/ + static get root_indices() { + return { + c: 0, + d: 1, + e: 2, + f: 3, + g: 4, + a: 5, + b: 6, + }; + } + /** Names of canonical notes ('c', 'c#', 'd',...). */ + static get canonical_notes() { + return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b']; + } + /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */ + static get diatonic_intervals() { + return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave']; + } + /** NoteAccidental associated to diatonic intervals. */ + static get diatonic_accidentals() { + return { + unison: { note: 0, accidental: 0 }, + m2: { note: 1, accidental: -1 }, + M2: { note: 1, accidental: 0 }, + m3: { note: 2, accidental: -1 }, + M3: { note: 2, accidental: 0 }, + p4: { note: 3, accidental: 0 }, + dim5: { note: 4, accidental: -1 }, + p5: { note: 4, accidental: 0 }, + m6: { note: 5, accidental: -1 }, + M6: { note: 5, accidental: 0 }, + b7: { note: 6, accidental: -1 }, + M7: { note: 6, accidental: 0 }, + octave: { note: 7, accidental: 0 }, + }; + } + /** Semitones shift associated to intervals .*/ + static get intervals() { + return { + u: 0, + unison: 0, + m2: 1, + b2: 1, + min2: 1, + S: 1, + H: 1, + 2: 2, + M2: 2, + maj2: 2, + T: 2, + W: 2, + m3: 3, + b3: 3, + min3: 3, + M3: 4, + 3: 4, + maj3: 4, + 4: 5, + p4: 5, + '#4': 6, + b5: 6, + aug4: 6, + dim5: 6, + 5: 7, + p5: 7, + '#5': 8, + b6: 8, + aug5: 8, + 6: 9, + M6: 9, + maj6: 9, + b7: 10, + m7: 10, + min7: 10, + dom7: 10, + M7: 11, + maj7: 11, + 8: 12, + octave: 12, + }; + } + /** Semitones shifts associated with scales. */ + static get scales() { + return { + major: [2, 2, 1, 2, 2, 2, 1], + minor: [2, 1, 2, 2, 1, 2, 2], + ionian: [2, 2, 1, 2, 2, 2, 1], + dorian: [2, 1, 2, 2, 2, 1, 2], + phyrgian: [1, 2, 2, 2, 1, 2, 2], + lydian: [2, 2, 2, 1, 2, 2, 1], + mixolydian: [2, 2, 1, 2, 2, 1, 2], + aeolian: [2, 1, 2, 2, 1, 2, 2], + locrian: [1, 2, 2, 1, 2, 2, 2], + }; + } + /** Scales associated with m (minor) and M (major). */ + static get scaleTypes() { + return { + M: Music.scales.major, + m: Music.scales.minor, + }; + } + /** Accidentals abbreviations. */ + static get accidentals() { + return ['bb', 'b', 'n', '#', '##']; + } + /** Note values. */ + static get noteValues() { + return { + c: { root_index: 0, int_val: 0 }, + cn: { root_index: 0, int_val: 0 }, + 'c#': { root_index: 0, int_val: 1 }, + 'c##': { root_index: 0, int_val: 2 }, + cb: { root_index: 0, int_val: 11 }, + cbb: { root_index: 0, int_val: 10 }, + d: { root_index: 1, int_val: 2 }, + dn: { root_index: 1, int_val: 2 }, + 'd#': { root_index: 1, int_val: 3 }, + 'd##': { root_index: 1, int_val: 4 }, + db: { root_index: 1, int_val: 1 }, + dbb: { root_index: 1, int_val: 0 }, + e: { root_index: 2, int_val: 4 }, + en: { root_index: 2, int_val: 4 }, + 'e#': { root_index: 2, int_val: 5 }, + 'e##': { root_index: 2, int_val: 6 }, + eb: { root_index: 2, int_val: 3 }, + ebb: { root_index: 2, int_val: 2 }, + f: { root_index: 3, int_val: 5 }, + fn: { root_index: 3, int_val: 5 }, + 'f#': { root_index: 3, int_val: 6 }, + 'f##': { root_index: 3, int_val: 7 }, + fb: { root_index: 3, int_val: 4 }, + fbb: { root_index: 3, int_val: 3 }, + g: { root_index: 4, int_val: 7 }, + gn: { root_index: 4, int_val: 7 }, + 'g#': { root_index: 4, int_val: 8 }, + 'g##': { root_index: 4, int_val: 9 }, + gb: { root_index: 4, int_val: 6 }, + gbb: { root_index: 4, int_val: 5 }, + a: { root_index: 5, int_val: 9 }, + an: { root_index: 5, int_val: 9 }, + 'a#': { root_index: 5, int_val: 10 }, + 'a##': { root_index: 5, int_val: 11 }, + ab: { root_index: 5, int_val: 8 }, + abb: { root_index: 5, int_val: 7 }, + b: { root_index: 6, int_val: 11 }, + bn: { root_index: 6, int_val: 11 }, + 'b#': { root_index: 6, int_val: 0 }, + 'b##': { root_index: 6, int_val: 1 }, + bb: { root_index: 6, int_val: 10 }, + bbb: { root_index: 6, int_val: 9 }, + }; + } + isValidNoteValue(note) { + return note >= 0 && note < Music.canonical_notes.length; + } + isValidIntervalValue(interval) { + return interval >= 0 && interval < Music.diatonic_intervals.length; + } + /** Return root and accidental associated to a note. */ + getNoteParts(noteString) { + if (!noteString || noteString.length < 1) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString); + } + if (noteString.length > 3) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString); + } + const note = noteString.toLowerCase(); + const regex = /^([cdefgab])(b|bb|n|#|##)?$/; + const match = regex.exec(note); + if (match !== null) { + const root = match[1]; + const accidental = match[2]; + return { + root, + accidental, + }; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString); + } + } + /** Return root, accidental and type associated to a key. */ + getKeyParts(keyString) { + if (!keyString || keyString.length < 1) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid key: ' + keyString); + } + const key = keyString.toLowerCase(); + // Support Major, Minor, Melodic Minor, and Harmonic Minor key types. + const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/; + const match = regex.exec(key); + if (match !== null) { + const root = match[1]; + const accidental = match[2]; + let type = match[3]; + // Unspecified type implies major + if (!type) + type = 'M'; + return { + root, + accidental, + type, + }; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid key: ${keyString}`); + } + } + /** Note value associated to a note name. */ + getNoteValue(noteString) { + const value = Music.noteValues[noteString]; + if (value === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note name: ${noteString}`); + } + return value.int_val; + } + /** Interval value associated to an interval name. */ + getIntervalValue(intervalString) { + const value = Music.intervals[intervalString]; + if (value === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`); + } + return value; + } + /** Canonical note name associated to a value. */ + getCanonicalNoteName(noteValue) { + if (!this.isValidNoteValue(noteValue)) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note value: ${noteValue}`); + } + return Music.canonical_notes[noteValue]; + } + /** Interval name associated to a value. */ + getCanonicalIntervalName(intervalValue) { + if (!this.isValidIntervalValue(intervalValue)) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`); + } + return Music.diatonic_intervals[intervalValue]; + } + /** + * Given a note, interval, and interval direction, produce the relative note. + */ + getRelativeNoteValue(noteValue, intervalValue, direction = 1) { + if (direction !== 1 && direction !== -1) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`); + } + let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES; + if (sum < 0) + sum += Music.NUM_TONES; + return sum; + } + /** + * Given a root and note value, produce the relative note name. + */ + getRelativeNoteName(root, noteValue) { + const parts = this.getNoteParts(root); + const rootValue = this.getNoteValue(parts.root); + let interval = noteValue - rootValue; + if (Math.abs(interval) > Music.NUM_TONES - 3) { + let multiplier = 1; + if (interval > 0) + multiplier = -1; + // Possibly wrap around. (Add +1 for modulo operator) + const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier; + if (Math.abs(reverse_interval) > 2) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`); + } + else { + interval = reverse_interval; + } + } + if (Math.abs(interval) > 2) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`); + } + let relativeNoteName = parts.root; + if (interval > 0) { + for (let i = 1; i <= interval; ++i) { + relativeNoteName += '#'; + } + } + else if (interval < 0) { + for (let i = -1; i >= interval; --i) { + relativeNoteName += 'b'; + } + } + return relativeNoteName; + } + /** + * Return scale tones, given intervals. Each successive interval is + * relative to the previous one, e.g., Major Scale: + * + * TTSTTTS = [2,2,1,2,2,2,1] + * + * When used with key = 0, returns C scale (which is isomorphic to + * interval list). + */ + getScaleTones(key, intervals) { + const tones = [key]; + let nextNote = key; + for (let i = 0; i < intervals.length; i++) { + nextNote = this.getRelativeNoteValue(nextNote, intervals[i]); + if (nextNote !== key) + tones.push(nextNote); + } + return tones; + } + /** + * Return the interval of a note, given a diatonic scale. + * e.g., given the scale C, and the note E, returns M3. + */ + getIntervalBetween(note1, note2, direction = 1) { + if (direction !== 1 && direction !== -1) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`); + } + if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`); + } + let difference = direction === 1 ? note2 - note1 : note1 - note2; + if (difference < 0) + difference += Music.NUM_TONES; + return difference; + } + /** + * Create a scale map that represents the pitch state for a + * `keySignature`. For example, passing a `G` to `keySignature` would + * return a scale map with every note naturalized except for `F` which + * has an `F#` state. + */ + createScaleMap(keySignature) { + const keySigParts = this.getKeyParts(keySignature); + if (!keySigParts.type) + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: undefined'); + const scaleName = Music.scaleTypes[keySigParts.type]; + let keySigString = keySigParts.root; + if (keySigParts.accidental) + keySigString += keySigParts.accidental; + if (!scaleName) + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature); + const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName); + const noteLocation = Music.root_indices[keySigParts.root]; + const scaleMap = {}; + for (let i = 0; i < Music.roots.length; ++i) { + const index = (noteLocation + i) % Music.roots.length; + const rootName = Music.roots[index]; + let noteName = this.getRelativeNoteName(rootName, scale[i]); + if (noteName.length === 1) { + noteName += 'n'; + } + scaleMap[rootName] = noteName; + } + return scaleMap; + } +} + + +/***/ }), + +/***/ "./src/note.ts": +/*!*********************!*\ + !*** ./src/note.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Note": () => (/* binding */ Note) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tickable */ "./src/tickable.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +/** + * Note implements an abstract interface for notes and chords that + * are rendered on a stave. Notes have some common properties: All of them + * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.) + * + * Some notes have stems, heads, dots, etc. Most notational elements that + * surround a note are called *modifiers*, and every note has an associated + * array of them. All notes also have a rendering context and belong to a stave. + */ +class Note extends _tickable__WEBPACK_IMPORTED_MODULE_3__.Tickable { + ////////////////////////////////////////////////////////////////////////////////////////////////// + // STATIC MEMBERS + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Note; + } + /** Debug helper. Displays various note metrics for the given note. */ + static plotMetrics(ctx, note, yPos) { + const metrics = note.getMetrics(); + const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx; + const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx; + const xAbs = note.getAbsoluteX(); + const xPost1 = note.getAbsoluteX() + metrics.notePx; + const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx; + const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx; + const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0); + const xWidth = xEnd - xStart; + ctx.save(); + ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, 8); + ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos); + const y = yPos + 7; + function stroke(x1, x2, color, yy = y) { + ctx.beginPath(); + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + ctx.setLineWidth(3); + ctx.moveTo(x1 + note.getXShift(), yy); + ctx.lineTo(x2 + note.getXShift(), yy); + ctx.stroke(); + } + stroke(xStart, xPre1, 'red'); + stroke(xPre1, xAbs, '#999'); + stroke(xAbs, xPost1, 'green'); + stroke(xPost1, xPost2, '#999'); + stroke(xPost2, xEnd, 'red'); + stroke(xEnd, xFreedomRight, '#DD0'); + stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift + (0,_rendercontext__WEBPACK_IMPORTED_MODULE_1__.drawDot)(ctx, xAbs + note.getXShift(), y, 'blue'); + const formatterMetrics = note.getFormatterMetrics(); + if (formatterMetrics.iterations > 0) { + const spaceDeviation = formatterMetrics.space.deviation; + const prefix = spaceDeviation >= 0 ? '+' : ''; + ctx.setFillStyle('red'); + ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10); + } + ctx.restore(); + } + static parseDuration(durationString) { + if (!durationString) { + return undefined; + } + const regexp = /(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/; + const result = regexp.exec(durationString); + if (!result) { + return undefined; + } + const duration = result[1]; + const dots = result[2].length; + const type = result[3] || 'n'; + return { duration, dots, type }; + } + static parseNoteStruct(noteStruct) { + // Preserve backwards-compatibility + const durationProps = Note.parseDuration(noteStruct.duration); + if (!durationProps) { + return undefined; + } + // If specified type is invalid, return undefined. + let type = noteStruct.type; + if (type && !_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.validTypes[type]) { + return undefined; + } + // If no type specified, check duration or custom types + const customTypes = []; + if (!type) { + type = durationProps.type || 'n'; + // If we have keys, try and check if we've got a custom glyph + if (noteStruct.keys !== undefined) { + noteStruct.keys.forEach((k, i) => { + const result = k.split('/'); + // We have a custom glyph specified after the note eg. /X2 + customTypes[i] = (result && result.length === 3 ? result[2] : type); + }); + } + } + // Calculate the tick duration of the note + let ticks = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.durationToTicks(durationProps.duration); + if (!ticks) { + return undefined; + } + // Are there any dots? + const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots; + if (typeof dots !== 'number') { + return undefined; + } + // Add ticks as necessary depending on the numbr of dots + let currentTicks = ticks; + for (let i = 0; i < dots; i++) { + if (currentTicks <= 1) + return undefined; + currentTicks = currentTicks / 2; + ticks += currentTicks; + } + return { + duration: durationProps.duration, + type, + customTypes, + dots, + ticks, + }; + } + /** + * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for + * positioning and layout. + * + * @param noteStruct To create a new note you need to provide a `noteStruct`. + */ + constructor(noteStruct) { + super(); + if (!noteStruct) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.'); + } + /** Parses `noteStruct` and get note properties. */ + const parsedNoteStruct = Note.parseNoteStruct(noteStruct); + if (!parsedNoteStruct) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`); + } + // Set note properties from parameters. + this.keys = noteStruct.keys || []; + // per-pitch properties + this.keyProps = []; + this.duration = parsedNoteStruct.duration; + this.noteType = parsedNoteStruct.type; + this.customTypes = parsedNoteStruct.customTypes; + if (noteStruct.duration_override) { + // Custom duration + this.setDuration(noteStruct.duration_override); + } + else { + // Default duration + this.setIntrinsicTicks(parsedNoteStruct.ticks); + } + this.modifiers = []; + // Get the glyph code for this note from the font. + this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, this.noteType); + this.customGlyphs = this.customTypes.map((t) => _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, t)); + // Note to play for audio players. + this.playNote = undefined; + // Positioning contexts used by the Formatter. + this.ignore_ticks = false; + // Positioning variables + this.width = 0; // Width in pixels calculated after preFormat + this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head + this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head + this.x_shift = 0; // X shift from tick context X + this.ys = []; // list of y coordinates for each note + // we need to hold on to these for ties and beams. + if (noteStruct.align_center) { + this.setCenterAlignment(noteStruct.align_center); + } + // The render surface. + this.render_options = { + annotation_spacing: 5, + glyph_font_scale: 1, + stroke_px: 1, + scale: 1, + font: '', + y_shift: 0, + }; + } + /** + * Get the play note, which is arbitrary data that can be used by an + * audio player. + */ + getPlayNote() { + return this.playNote; + } + /** + * Set the play note, which is arbitrary data that can be used by an + * audio player. + */ + setPlayNote(note) { + this.playNote = note; + return this; + } + /** + * @returns true if this note is a type of rest. + * + * Rests don't have pitches, but take up space in the score. + * Subclasses should override this default implementation. + */ + isRest() { + return false; + } + /** Add stroke. */ + addStroke(index, stroke) { + stroke.setNote(this); + stroke.setIndex(index); + this.modifiers.push(stroke); + this.preFormatted = false; + return this; + } + /** Get the target stave. */ + getStave() { + return this.stave; + } + /** Check and get the target stave. */ + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + /** Set the target stave. */ + setStave(stave) { + this.stave = stave; + this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed. + this.setContext(this.stave.getContext()); + return this; + } + /** Get spacing to the left of the notes. */ + getLeftDisplacedHeadPx() { + return this.leftDisplacedHeadPx; + } + /** Get spacing to the right of the notes. */ + getRightDisplacedHeadPx() { + return this.rightDisplacedHeadPx; + } + /** Set spacing to the left of the notes. */ + setLeftDisplacedHeadPx(x) { + this.leftDisplacedHeadPx = x; + return this; + } + /** Set spacing to the right of the notes. */ + setRightDisplacedHeadPx(x) { + this.rightDisplacedHeadPx = x; + return this; + } + /** True if this note has no duration (e.g., bar notes, spacers, etc.). */ + shouldIgnoreTicks() { + return this.ignore_ticks; + } + /** Get the stave line number for the note. */ + // eslint-disable-next-line + getLineNumber(isTopNote) { + return 0; + } + /** Get the stave line number for rest. */ + getLineForRest() { + return 0; + } + /** + * @deprecated Use `getGlyphProps()` instead. + */ + // eslint-disable-next-line + getGlyph() { + return this.glyphProps; + } + /** Get the glyph associated with this note. */ + getGlyphProps() { + return this.glyphProps; + } + /** Get the glyph width. */ + getGlyphWidth() { + return this.glyphProps.getWidth(this.render_options.glyph_font_scale); + } + /** + * Set Y positions for this note. Each Y value is associated with + * an individual pitch/key within the note/chord. + */ + setYs(ys) { + this.ys = ys; + return this; + } + /** + * Get Y positions for this note. Each Y value is associated with + * an individual pitch/key within the note/chord. + */ + getYs() { + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoYValues', 'No Y-values calculated for this note.'); + } + return this.ys; + } + /** + * Get the Y position of the space above the stave onto which text can + * be rendered. + */ + getYForTopText(text_line) { + return this.checkStave().getYForTopText(text_line); + } + /** Return the voice that this note belongs in. */ + getVoice() { + if (!this.voice) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoVoice', 'Note has no voice.'); + return this.voice; + } + /** Attach this note to `voice`. */ + setVoice(voice) { + this.voice = voice; + this.preFormatted = false; + return this; + } + /** Get the `TickContext` for this note. */ + getTickContext() { + return this.checkTickContext(); + } + /** Set the `TickContext` for this note. */ + setTickContext(tc) { + this.tickContext = tc; + this.preFormatted = false; + return this; + } + /** Accessor to duration. */ + getDuration() { + return this.duration; + } + /** Accessor to isDotted. */ + isDotted() { + return this.getModifiersByType(_typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Dot).length > 0; + } + /** Accessor to hasStem. */ + hasStem() { + return false; + } + /** Accessor to note type. */ + getNoteType() { + return this.noteType; + } + /** Get the beam. */ + getBeam() { + return this.beam; + } + /** Check and get the beam. */ + checkBeam() { + return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.beam, 'NoBeam', 'No beam attached to instance'); + } + /** Check it has a beam. */ + hasBeam() { + return this.beam != undefined; + } + /** Set the beam. */ + setBeam(beam) { + this.beam = beam; + return this; + } + /** + * Attach a modifier to this note. + * @param modifier the Modifier to add. + * @param index of the key to modify. + * @returns this + */ + addModifier(modifier, index = 0) { + const signature = 'Note.addModifier(modifier: Modifier, index: number=0)'; + // Backwards compatibility with 3.0.9. + if (typeof index === 'string') { + index = parseInt(index); + // eslint-disable-next-line + console.warn(signature + ' expected a number for `index`, but received a string.'); + } + // Some versions of VexFlow had the two parameters reversed. + // Check here and throw an error if the argument types are not correct. + if (typeof modifier !== 'object' || typeof index !== 'number') { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.'); + } + modifier.setNote(this); + modifier.setIndex(index); + super.addModifier(modifier); + return this; + } + /** Get all modifiers of a specific type in `this.modifiers`. */ + getModifiersByType(type) { + return this.modifiers.filter((modifier) => modifier.getCategory() === type); + } + /** Get the coordinates for where modifiers begin. */ + // eslint-disable-next-line + getModifierStartXY(position, index, options) { + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); + } + return { + x: this.getAbsoluteX(), + y: this.ys[0], + }; + } + getRightParenthesisPx(index) { + const props = this.getKeyProps()[index]; + return props.displaced ? this.getRightDisplacedHeadPx() : 0; + } + getLeftParenthesisPx(index) { + const props = this.getKeyProps()[index]; + return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift; + } + getFirstDotPx() { + let px = this.getRightDisplacedHeadPx(); + if (this.checkModifierContext().getMembers('Parenthesis').length !== 0) + px += _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width'); + return px; + } + /** Get the metrics for this note. */ + getMetrics() { + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', "Can't call getMetrics on an unformatted note."); + } + const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0; + const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0; + const width = this.getWidth(); + const glyphWidth = this.getGlyphWidth(); + const notePx = width - + modLeftPx - // subtract left modifiers + modRightPx - // subtract right modifiers + this.leftDisplacedHeadPx - // subtract left displaced head + this.rightDisplacedHeadPx; // subtract right displaced head + // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory. + return { + width, + glyphWidth, + notePx, + // Modifier spacing. + modLeftPx, + modRightPx, + // Displaced note head on left or right. + leftDisplacedHeadPx: this.leftDisplacedHeadPx, + rightDisplacedHeadPx: this.rightDisplacedHeadPx, + glyphPx: 0, + }; + } + /** + * Get the absolute `X` position of this note's tick context. This + * excludes x_shift, so you'll need to factor it in if you're + * looking for the post-formatted x-position. + */ + getAbsoluteX() { + const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`); + // Position note to left edge of tick context. + let x = tickContext.getX(); + if (this.stave) { + x += this.stave.getNoteStartX() + _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('stave.padding'); + } + if (this.isCenterAligned()) { + x += this.getCenterXShift(); + } + return x; + } + /** Get point for notes. */ + static getPoint(size) { + // for sizes other than 'default', note is 2/3 of the default value + return size == 'default' ? _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE : (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE / 5) * 3; + } + /** Get the direction of the stem. */ + getStemDirection() { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); + } + /** Get the top and bottom `y` values of the stem. */ + getStemExtents() { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); + } + /** Get the `x` coordinate to the right of the note. */ + getTieRightX() { + let tieStartX = this.getAbsoluteX(); + const note_glyph_width = this.glyphProps.getWidth(); + tieStartX += note_glyph_width / 2; + tieStartX += -this.width / 2 + this.width + 2; + return tieStartX; + } + /** Get the `x` coordinate to the left of the note. */ + getTieLeftX() { + let tieEndX = this.getAbsoluteX(); + const note_glyph_width = this.glyphProps.getWidth(); + tieEndX += note_glyph_width / 2; + tieEndX -= this.width / 2 + 2; + return tieEndX; + } + // Get the pitches in the note + getKeys() { + return this.keys; + } + // Get the properties for all the keys in the note + getKeyProps() { + return this.keyProps; + } +} + + +/***/ }), + +/***/ "./src/notehead.ts": +/*!*************************!*\ + !*** ./src/notehead.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "NoteHead": () => (/* binding */ NoteHead) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +// eslint-disable-next-line +function L(...args) { + if (NoteHead.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.NoteHead', args); +} +/** + * Draw slashnote head manually. No glyph exists for this. + * @param ctx the Canvas context + * @param duration the duration of the note. ex: "4" + * @param x the x coordinate to draw at + * @param y the y coordinate to draw at + * @param stem_direction the direction of the stem + */ +function drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) { + const width = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.SLASH_NOTEHEAD_WIDTH; + ctx.save(); + ctx.setLineWidth(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH); + let fill = false; + if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToNumber(duration) > 2) { + fill = true; + } + if (!fill) + x -= (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH / 2) * stem_direction; + ctx.beginPath(); + ctx.moveTo(x, y + staveSpace); + ctx.lineTo(x, y + 1); + ctx.lineTo(x + width, y - staveSpace); + ctx.lineTo(x + width, y); + ctx.lineTo(x, y + staveSpace); + ctx.closePath(); + if (fill) { + ctx.fill(); + } + else { + ctx.stroke(); + } + if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToFraction(duration).equals(0.5)) { + const breve_lines = [-3, -1, width + 1, width + 3]; + for (let i = 0; i < breve_lines.length; i++) { + ctx.beginPath(); + ctx.moveTo(x + breve_lines[i], y - 10); + ctx.lineTo(x + breve_lines[i], y + 11); + ctx.stroke(); + } + } + ctx.restore(); +} +/** + * `NoteHeads` are typically not manipulated + * directly, but used internally in `StaveNote`. + * + * See `tests/notehead_tests.ts` for usage examples. + */ +class NoteHead extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.NoteHead; + } + constructor(noteStruct) { + super(noteStruct); + this.custom_glyph = false; + this.stem_up_x_offset = 0; + this.stem_down_x_offset = 0; + this.index = noteStruct.index; + this.x = noteStruct.x || 0; + this.y = noteStruct.y || 0; + if (noteStruct.note_type) + this.noteType = noteStruct.note_type; + this.displaced = noteStruct.displaced || false; + this.stem_direction = noteStruct.stem_direction || _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP; + this.line = noteStruct.line || 0; + // Get glyph code based on duration and note type. This could be + // regular notes, rests, or other custom codes. + this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.getGlyphProps(this.duration, this.noteType); + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); + // Swap out the glyph with ledger lines + if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) { + this.glyphProps.code_head = this.glyphProps.ledger_code_head; + } + this.glyph_code = this.glyphProps.code_head; + this.x_shift = noteStruct.x_shift || 0; + if (noteStruct.custom_glyph_code) { + this.custom_glyph = true; + this.glyph_code = noteStruct.custom_glyph_code; + this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0; + this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0; + } + this.setStyle(noteStruct.style); + this.slashed = noteStruct.slashed || false; + this.render_options = Object.assign(Object.assign({}, this.render_options), { + // font size for note heads + glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE }); + this.setWidth(this.custom_glyph && + !this.glyph_code.startsWith('noteheadSlashed') && + !this.glyph_code.startsWith('noteheadCircled') + ? _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale) + : this.glyphProps.getWidth(this.render_options.glyph_font_scale)); + } + /** Get the width of the notehead. */ + getWidth() { + return this.width; + } + /** Determine if the notehead is displaced. */ + isDisplaced() { + return this.displaced === true; + } + /** Set the X coordinate. */ + setX(x) { + this.x = x; + return this; + } + /** Get the Y coordinate. */ + getY() { + return this.y; + } + /** Set the Y coordinate. */ + setY(y) { + this.y = y; + return this; + } + /** Get the stave line the notehead is placed on. */ + getLine() { + return this.line; + } + /** Set the stave line the notehead is placed on. */ + setLine(line) { + this.line = line; + return this; + } + /** Get the canvas `x` coordinate position of the notehead. */ + getAbsoluteX() { + // If the note has not been preformatted, then get the static x value + // Otherwise, it's been formatted and we should use it's x value relative + // to its tick context + const x = !this.preFormatted ? this.x : super.getAbsoluteX(); + // For a more natural displaced notehead, we adjust the displacement amount + // by half the stem width in order to maintain a slight overlap with the stem + const displacementStemAdjustment = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); + const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction; + const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction; + return (x + + fontShift + + (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0)); + } + /** Get the `BoundingBox` for the `NoteHead`. */ + getBoundingBox() { + const spacing = this.checkStave().getSpacingBetweenLines(); + const half_spacing = spacing / 2; + const min_y = this.y - half_spacing; + return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing); + } + /** Set notehead to a provided `stave`. */ + setStave(stave) { + const line = this.getLine(); + this.stave = stave; + if (this.stave) { + this.setY(this.stave.getYForNote(line)); + this.setContext(this.stave.getContext()); + } + return this; + } + /** Pre-render formatting. */ + preFormat() { + if (this.preFormatted) + return this; + const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx; + this.setWidth(width); + this.preFormatted = true; + return this; + } + /** Draw the notehead. */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + let head_x = this.getAbsoluteX(); + if (this.custom_glyph) { + // head_x += this.x_shift; + head_x += + this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP + ? this.stem_up_x_offset + + (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0) + : this.stem_down_x_offset; + } + const y = this.y; + L("Drawing note head '", this.noteType, this.duration, "' at", head_x, y); + // Begin and end positions for head. + const stem_direction = this.stem_direction; + const glyph_font_scale = this.render_options.glyph_font_scale; + const categorySuffix = `${this.glyph_code}Stem${stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? 'Up' : 'Down'}`; + if (this.noteType === 's') { + const staveSpace = this.checkStave().getSpacingBetweenLines(); + drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace); + } + else { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, { + category: `noteHead.${categorySuffix}`, + }); + } + } +} +/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */ +NoteHead.DEBUG = false; + + + +/***/ }), + +/***/ "./src/notesubgroup.ts": +/*!*****************************!*\ + !*** ./src/notesubgroup.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "NoteSubGroup": () => (/* binding */ NoteSubGroup) +/* harmony export */ }); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Taehoon Moon 2016 +// +// ## Description +// +// This file implements `NoteSubGroup` which is used to format and +// render notes as a `Modifier` +// ex) ClefNote, TimeSigNote and BarNote. + + + + + +class NoteSubGroup extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.NoteSubGroup; + } + // Arrange groups inside a `ModifierContext` + static format(groups, state) { + if (!groups || groups.length === 0) + return false; + let width = 0; + for (let i = 0; i < groups.length; ++i) { + const group = groups[i]; + group.preFormat(); + width += group.getWidth(); + } + state.left_shift += width; + return true; + } + constructor(subNotes) { + super(); + this.preFormatted = false; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; + this.subNotes = subNotes; + this.subNotes.forEach((subNote) => { + subNote.setIgnoreTicks(false); + }); + this.width = 0; + this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_0__.Formatter(); + this.voice = new _voice__WEBPACK_IMPORTED_MODULE_4__.Voice({ + num_beats: 4, + beat_value: 4, + resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION, + }).setStrict(false); + this.voice.addTickables(this.subNotes); + } + preFormat() { + if (this.preFormatted) + return; + this.formatter.joinVoices([this.voice]).format([this.voice], 0); + this.setWidth(this.formatter.getMinTotalWidth()); + this.preFormatted = true; + } + setWidth(width) { + this.width = width; + return this; + } + getWidth() { + return this.width; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + this.alignSubNotesWithNote(this.subNotes, note); // Modifier function + this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle()); + } +} + + +/***/ }), + +/***/ "./src/ornament.ts": +/*!*************************!*\ + !*** ./src/ornament.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Ornament": () => (/* binding */ Ornament) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Cyril Silverman +// MIT License + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Ornament.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.Ornament', args); +} +/** + * Ornament implements ornaments as modifiers that can be + * attached to notes. The complete list of ornaments is available in + * `tables.ts` under `Vex.Flow.ornamentCodes`. + * + * See `tests/ornament_tests.ts` for usage examples. + */ +class Ornament extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + /** Ornaments category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Ornament; + } + static get minPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + /** Arrange ornaments inside `ModifierContext` */ + static format(ornaments, state) { + if (!ornaments || ornaments.length === 0) + return false; + let width = 0; // width is used by ornaments, which are always centered on the note head + let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately + let left_shift = state.left_shift; + let yOffset = 0; + for (let i = 0; i < ornaments.length; ++i) { + const ornament = ornaments[i]; + const increment = 2; + if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) { + ornament.x_shift += right_shift + 2; + } + if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) { + ornament.x_shift -= left_shift + 2; + } + if (ornament.reportedWidth && ornament.x_shift < 0) { + left_shift += ornament.reportedWidth; + } + else if (ornament.reportedWidth && ornament.x_shift >= 0) { + right_shift += ornament.reportedWidth + Ornament.minPadding; + } + else { + width = Math.max(ornament.getWidth(), width); + } + // articulations above/below the line can be stacked. + if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) { + // Unfortunately we don't know the stem direction. So we base it + // on the line number, but also allow it to be overridden. + const ornamentNote = (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(ornament.note, 'NoAttachedNote'); + if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) { + state.top_text_line += increment; + ornament.y_shift += yOffset; + yOffset -= ornament.glyph.bbox.getH(); + } + else { + state.text_line += increment; + ornament.y_shift += yOffset; + yOffset += ornament.glyph.bbox.getH(); + } + } + else { + if (ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) { + ornament.setTextLine(state.top_text_line); + state.top_text_line += increment; + } + else { + ornament.setTextLine(state.text_line); + state.text_line += increment; + } + } + } + // Note: 'legit' ornaments don't consider other modifiers when calculating their + // X position, but jazz ornaments sometimes need to. + state.left_shift = left_shift + width / 2; + state.right_shift = right_shift + width / 2; + return true; + } + /** + * ornamentNoteTransition means the jazz ornament represents an effect from one note to another, + * these are generally on the top of the staff. + */ + static get ornamentNoteTransition() { + return ['flip', 'jazzTurn', 'smear']; + } + /** + * ornamentAttack indicates something that happens in the attach, placed before the note and + * any accidentals + */ + static get ornamentAttack() { + return ['scoop']; + } + /** + * The ornament is aligned based on the note head, but without regard to whether the + * stem goes up or down. + */ + static get ornamentAlignWithNoteHead() { + return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop']; + } + /** + * An ornament that happens on the release of the note, generally placed after the + * note and overlapping the next beat/measure.. + */ + static get ornamentRelease() { + return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip']; + } + /** ornamentArticulation goes above/below the note based on space availablity */ + static get ornamentArticulation() { + return ['bend', 'plungerClosed', 'plungerOpen']; + } + /** + * Legacy ornaments have hard-coded metrics. If additional ornament types are + * added, get their metrics here. + */ + getMetrics() { + const ornamentMetrics = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().ornament; + if (!ornamentMetrics) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadMetrics', `ornament missing`); + return ornamentMetrics[this.ornament.code]; + } + /** + * Create a new ornament of type `type`, which is an entry in + * `Vex.Flow.ornamentCodes` in `tables.ts`. + */ + constructor(type) { + super(); + this.type = type; + this.delayed = false; + this.render_options = { + font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, + accidentalLowerPadding: 3, + accidentalUpperPadding: 3, + }; + this.ornament = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.ornamentCodes(this.type); + // new ornaments have their origin at the origin, and have more specific + // metrics. Legacy ornaments do some + // x scaling, and have hard-coded metrics + const metrics = this.getMetrics(); + // some jazz ornaments are above or below depending on stem direction. + this.adjustForStemDirection = false; + // some jazz ornaments like falls are supposed to overlap with future bars + // and so we report a different width than they actually take up. + this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0; + this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0; + this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0; + if (!this.ornament) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`); + } + this.x_shift = metrics ? metrics.xOffset : 0; + this.y_shift = metrics ? metrics.yOffset : 0; + this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.ornament.code, this.render_options.font_scale, { + category: `ornament.${this.ornament.code}`, + }); + // Is this a jazz ornament that goes between this note and the next note. + if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) { + this.delayed = true; + } + // Legacy ornaments need this. I don't know why, but horizontal spacing issues + // happen if I don't set it. + if (!metrics) { + this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift + } + } + /** Set whether the ornament is to be delayed. */ + setDelayed(delayed) { + this.delayed = delayed; + return this; + } + /** Set the upper accidental for the ornament. */ + setUpperAccidental(accid) { + const scale = this.render_options.font_scale / 1.3; + this.accidentalUpper = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale); + this.accidentalUpper.setOrigin(0.5, 1.0); + return this; + } + /** Set the lower accidental for the ornament. */ + setLowerAccidental(accid) { + const scale = this.render_options.font_scale / 1.3; + this.accidentalLower = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale); + this.accidentalLower.setOrigin(0.5, 1.0); + return this; + } + /** Render ornament in position next to note. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const stemDir = note.getStemDirection(); + const stave = note.checkStave(); + this.applyStyle(); + ctx.openGroup('ornament', this.getAttribute('id')); + // Get stem extents + const stemExtents = note.checkStem().getExtents(); + let y = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? stemExtents.baseY : stemExtents.topY; + // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) { + if (note.hasStem()) { + if (stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + y = stave.getYForTopText(this.text_line); + } + } + else { + // Without a stem + y = stave.getYForTopText(this.text_line); + } + } + const isPlacedOnNoteheadSide = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN; + const spacing = stave.getSpacingBetweenLines(); + let lineSpacing = 1; + // Beamed stems are longer than quarter note stems, adjust accordingly + if (!isPlacedOnNoteheadSide && note.hasBeam()) { + lineSpacing += 0.5; + } + const totalSpacing = spacing * (this.text_line + lineSpacing); + const glyphYBetweenLines = y - totalSpacing; + // Get initial coordinates for the modifier position + const start = note.getModifierStartXY(this.position, this.index); + let glyphX = start.x; + // If the ornament is aligned with the note head, don't consider the stave y + // but use the 'natural' modifier y + let glyphY = this.ornamentAlignWithNoteHead + ? start.y + : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines); + glyphY += this.y_shift; + // Ajdust x position if ornament is delayed + if (this.delayed) { + let delayXShift = 0; + const startX = glyphX - stave.getNoteStartX(); + if (this.delayXShift !== undefined) { + delayXShift = this.delayXShift; + } + else { + delayXShift += this.glyph.getMetrics().width / 2; + const tickables = note.getVoice().getTickables(); + const index = tickables.indexOf(note); + const nextContext = index + 1 < tickables.length ? tickables[index + 1].checkTickContext() : undefined; + if (nextContext) { + delayXShift += (nextContext.getX() - startX) * 0.5; + } + else { + delayXShift += (stave.getX() + stave.getWidth() - glyphX) * 0.5; + } + this.delayXShift = delayXShift; + } + glyphX += delayXShift; + } + L('Rendering ornament: ', this.ornament, glyphX, glyphY); + if (this.accidentalLower) { + this.accidentalLower.render(ctx, glyphX, glyphY); + glyphY -= this.accidentalLower.getMetrics().height; + glyphY -= this.render_options.accidentalLowerPadding; + } + if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) { + glyphY += this.stemUpYOffset; + } + if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) { + glyphY = note.checkStave().getBoundingBox().getY() + 40; + } + this.glyph.render(ctx, glyphX + this.x_shift, glyphY); + if (this.accidentalUpper) { + glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding; + this.accidentalUpper.render(ctx, glyphX, glyphY); + } + ctx.closeGroup(); + this.restoreStyle(); + } +} +/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */ +Ornament.DEBUG = false; + + + +/***/ }), + +/***/ "./src/parenthesis.ts": +/*!****************************!*\ + !*** ./src/parenthesis.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Parenthesis": () => (/* binding */ Parenthesis) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Rodrigo Vilar +// MIT License + + + + + +/** Parenthesis implements parenthesis modifiers for notes. */ +class Parenthesis extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Parenthesis; + } + /** Add parentheses to the notes. */ + static buildAndAttach(notes) { + for (const note of notes) { + for (let i = 0; i < note.keys.length; i++) { + note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT), i); + note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT), i); + } + } + } + /** Arrange parentheses inside a ModifierContext. */ + static format(parentheses, state) { + if (!parentheses || parentheses.length === 0) + return false; + let x_widthL = 0; + let x_widthR = 0; + for (let i = 0; i < parentheses.length; ++i) { + const parenthesis = parentheses[i]; + const note = parenthesis.getNote(); + const pos = parenthesis.getPosition(); + const index = parenthesis.checkIndex(); + let shift = 0; + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT) { + shift = note.getRightParenthesisPx(index); + x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width; + } + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT) { + shift = note.getLeftParenthesisPx(index); + x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width; + } + parenthesis.setXShift(shift); + } + state.left_shift += x_widthL; + state.right_shift += x_widthR; + return true; + } + /** + * Constructor + * + * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT + */ + constructor(position) { + var _a; + super(); + this.position = position !== null && position !== void 0 ? position : _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; + this.point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('default'); + this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width')); + } + /** Set the associated note. */ + setNote(note) { + var _a, _b; + this.note = note; + this.point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('default'); + this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width')); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isGraceNote)(note)) { + this.point = (_b = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('gracenote'); + this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width')); + } + return this; + } + /** Render the parenthesis. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true }); + const x = start.x + this.x_shift; + const y = start.y + this.y_shift; + if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) { + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', { + category: `noteHead.standard.noteheadParenthesisRight`, + }); + } + else if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', { + category: `noteHead.standard.noteheadParenthesisLeft`, + }); + } + } +} + + +/***/ }), + +/***/ "./src/parser.ts": +/*!***********************!*\ + !*** ./src/parser.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Parser": () => (/* binding */ Parser) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// A generic text parsing class for VexFlow. + +// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (Parser.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_0__.log)('Vex.Flow.Parser', args); +} +const NO_ERROR_POS = -1; +// Converts parser results into an easy to reference list that can be +// used in triggers. This function returns: +// - nested array in which the leaf elements are string or null +// - string (including empty strings) +// - null +function flattenMatches(r) { + if ('matchedString' in r) + return r.matchedString; // string + if ('results' in r) + return flattenMatches(r.results); + const results = r; + if (results.length === 1) + return flattenMatches(results[0]); + if (results.length === 0) + return null; + return results.map(flattenMatches); // nested array +} +// This is the base parser class. Given an arbitrary context-free grammar, it +// can parse any line and execute code when specific rules are met (e.g., +// when a string is terminated.) +class Parser { + // For an example of a simple grammar, take a look at tests/parser_tests.ts or + // the EasyScore grammar in easyscore.ts. + constructor(grammar) { + this.grammar = grammar; + this.line = ''; + this.pos = 0; + this.errorPos = NO_ERROR_POS; + } + // Parse `line` using current grammar. Returns `{success: true}` if the + // line parsed correctly, otherwise returns `{success: false, errorPos: N}` + // where `errorPos` is the location of the error in the string. + parse(line) { + this.line = line; + this.pos = 0; + this.errorPos = NO_ERROR_POS; + const result = this.expect(this.grammar.begin()); + result.errorPos = this.errorPos; + return result; + } + matchFail(returnPos) { + if (this.errorPos === NO_ERROR_POS) + this.errorPos = this.pos; + this.pos = returnPos; + } + matchSuccess() { + this.errorPos = NO_ERROR_POS; + } + // Look for `token` in this.line[this.pos], and return success + // if one is found. `token` is specified as a regular expression. + matchToken(token, noSpace = false) { + const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\s*)'); + const workingLine = this.line.slice(this.pos); + const result = workingLine.match(regexp); + if (result !== null) { + return { + success: true, + matchedString: result[2], + incrementPos: result[1].length, + pos: this.pos, + }; + } + else { + return { success: false, pos: this.pos }; + } + } + // Execute rule to match a sequence of tokens (or rules). If `maybe` is + // set, then return success even if the token is not found, but reset + // the position before exiting. + // TODO: expectOne(...) is never called with the `maybe` parameter. + expectOne(rule, maybe = false) { + const results = []; + const pos = this.pos; + let allMatches = true; + let oneMatch = false; + maybe = maybe === true || rule.maybe === true; + // Execute all sub rules in sequence. + if (rule.expect) { + for (const next of rule.expect) { + const localPos = this.pos; + const result = this.expect(next); + // If `rule.or` is set, then return success if any one + // of the subrules match, else all subrules must match. + if (result.success) { + results.push(result); + oneMatch = true; + if (rule.or) + break; + } + else { + allMatches = false; + if (!rule.or) { + this.pos = localPos; + break; + } + } + } + } + const gotOne = (rule.or && oneMatch) || allMatches; + const success = gotOne || maybe === true; + const numMatches = gotOne ? 1 : 0; + if (maybe && !gotOne) + this.pos = pos; + if (success) { + this.matchSuccess(); + } + else { + this.matchFail(pos); + } + return { success, results, numMatches }; + } + // Try to match multiple (one or more) instances of the rule. If `maybe` is set, + // then a failed match is also a success (but the position is reset). + expectOneOrMore(rule, maybe = false) { + const results = []; + const pos = this.pos; + let numMatches = 0; + let more = true; + do { + const result = this.expectOne(rule); + if (result.success && result.results) { + numMatches++; + results.push(result.results); + } + else { + more = false; + } + } while (more); + const success = numMatches > 0 || maybe === true; + if (maybe && !(numMatches > 0)) + this.pos = pos; + if (success) { + this.matchSuccess(); + } + else { + this.matchFail(pos); + } + return { success, results, numMatches }; + } + // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`. + expectZeroOrMore(rule) { + return this.expectOneOrMore(rule, true); + } + // Execute the rule produced by the provided `rules` function. This + // offloads to one of the above matchers and consolidates the results. It is also + // responsible for executing any code triggered by the rule (in `rule.run`.) + expect(ruleFunc) { + L('Evaluating rule function:', ruleFunc); + if (!ruleFunc) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Invalid rule function'); + } + let result; + // Get rule from Grammar class. + // expect(...) handles both lexing & parsing: + // - lexer rules produce tokens. + // - parser rules produce expressions which may trigger code via the + // { run: () => ... } trigger functions in easyscore.ts. + // These functions build the VexFlow objects that are displayed on screen. + const rule = ruleFunc.bind(this.grammar)(); + if (rule.token) { + // A lexer rule has a `token` property. + // Base case: parse the regex and throw an error if the + // line doesn't match. + result = this.matchToken(rule.token, rule.noSpace === true); + if (result.success) { + // Token match! Update position and throw away parsed portion + // of string. + this.pos += result.incrementPos; + } + } + else if (rule.expect) { + // A parser rule has an `expect` property. + if (rule.oneOrMore) { + result = this.expectOneOrMore(rule); + } + else if (rule.zeroOrMore) { + result = this.expectZeroOrMore(rule); + } + else { + result = this.expectOne(rule); + } + } + else { + L(rule); + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Bad grammar! No `token` or `expect` property ' + rule); + } + // If there's a trigger attached to this rule, then run it. + // Make the matches accessible through `state.matches` in the + // `run: (state) => ...` trigger. + const matches = []; + result.matches = matches; + if (result.results) { + result.results.forEach((r) => matches.push(flattenMatches(r))); + } + if (rule.run && result.success) { + rule.run({ matches }); + } + return result; + } +} +Parser.DEBUG = false; + + + +/***/ }), + +/***/ "./src/pedalmarking.ts": +/*!*****************************!*\ + !*** ./src/pedalmarking.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PedalMarking": () => (/* binding */ PedalMarking) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +// eslint-disable-next-line +function L(...args) { + if (PedalMarking.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.PedalMarking', args); +} +/** + * Draws a pedal glyph with the provided `name` on a rendering `context` + * at the coordinates `x` and `y. Takes into account the glyph data + * coordinate shifts. + */ +function drawPedalGlyph(name, context, x, y, point) { + const glyph_data = PedalMarking.GLYPHS[name]; + const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph(glyph_data.code, point, { category: 'pedalMarking' }); + // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2) + glyph.render(context, x - (glyph.getMetrics().width - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE) / 2, y); +} +/** + * PedalMarking implements different types of pedal markings. These notation + * elements indicate to the performer when to depress and release the a pedal. + * + * In order to create "Sostenuto", and "una corda" markings, you must set + * custom text for the release/depress pedal markings. + */ +class PedalMarking extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.PedalMarking; + } + /** + * Create a sustain pedal marking. Returns the defaults PedalMarking. + * Which uses the traditional "Ped" and "*"" markings. + */ + static createSustain(notes) { + const pedal = new PedalMarking(notes); + return pedal; + } + /** Create a sostenuto pedal marking */ + static createSostenuto(notes) { + const pedal = new PedalMarking(notes); + pedal.setType(PedalMarking.type.MIXED); + pedal.setCustomText('Sost. Ped.'); + return pedal; + } + /** Create an una corda pedal marking */ + static createUnaCorda(notes) { + const pedal = new PedalMarking(notes); + pedal.setType(PedalMarking.type.TEXT); + pedal.setCustomText('una corda', 'tre corda'); + return pedal; + } + constructor(notes) { + super(); + this.notes = notes; + this.type = PedalMarking.type.TEXT; + this.line = 0; + // Custom text for the release/depress markings + this.custom_depress_text = ''; + this.custom_release_text = ''; + this.resetFont(); + this.render_options = { + bracket_height: 10, + text_margin_right: 6, + bracket_line_width: 1, + color: 'black', + }; + } + /** Set pedal type. */ + setType(type) { + type = typeof type === 'string' ? PedalMarking.typeString[type] : type; + if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) { + this.type = type; + } + return this; + } + /** + * Set custom text for the `depress`/`release` pedal markings. No text is + * set if the parameter is falsy. + */ + setCustomText(depress, release) { + this.custom_depress_text = depress || ''; + this.custom_release_text = release || ''; + return this; + } + /** Set the staff line to render the markings on. */ + setLine(line) { + this.line = line; + return this; + } + /** Draw the bracket based pedal markings. */ + drawBracketed() { + const ctx = this.checkContext(); + let is_pedal_depressed = false; + let prev_x; + let prev_y; + // Iterate through each note + this.notes.forEach((note, index, notes) => { + var _a; + // Each note triggers the opposite pedal action + is_pedal_depressed = !is_pedal_depressed; + // Get the initial coordinates for the note + const x = note.getAbsoluteX(); + const y = note.checkStave().getYForBottomText(this.line + 3); + // Throw if current note is positioned before the previous note + if (x < prev_x) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions'); + } + // Determine if the previous or next note are the same + // as the current note. We need to keep track of this for + // when adjustments are made for the release+depress action + const next_is_same = notes[index + 1] === note; + const prev_is_same = notes[index - 1] === note; + let x_shift = 0; + const point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE; + if (is_pedal_depressed) { + // Adjustment for release+depress + x_shift = prev_is_same ? 5 : 0; + if (this.type === PedalMarking.type.MIXED && !prev_is_same) { + // For MIXED style, start with text instead of bracket + if (this.custom_depress_text) { + // If we have custom text, use instead of the default "Ped" glyph + const text_width = ctx.measureText(this.custom_depress_text).width; + ctx.fillText(this.custom_depress_text, x - text_width / 2, y); + x_shift = text_width / 2 + this.render_options.text_margin_right; + } + else { + // Render the Ped glyph in position + drawPedalGlyph('pedal_depress', ctx, x, y, point); + x_shift = 20 + this.render_options.text_margin_right; + } + } + else { + // Draw start bracket + ctx.beginPath(); + ctx.moveTo(x, y - this.render_options.bracket_height); + ctx.lineTo(x + x_shift, y); + ctx.stroke(); + ctx.closePath(); + } + } + else { + // Adjustment for release+depress + x_shift = next_is_same ? -5 : 0; + // Draw end bracket + ctx.beginPath(); + ctx.moveTo(prev_x, prev_y); + ctx.lineTo(x + x_shift, y); + ctx.lineTo(x, y - this.render_options.bracket_height); + ctx.stroke(); + ctx.closePath(); + } + // Store previous coordinates + prev_x = x + x_shift; + prev_y = y; + }); + } + /** + * Draw the text based pedal markings. This defaults to the traditional + * "Ped" and "*"" symbols if no custom text has been provided. + */ + drawText() { + const ctx = this.checkContext(); + let is_pedal_depressed = false; + // Iterate through each note, placing glyphs or custom text accordingly + this.notes.forEach((note) => { + var _a; + is_pedal_depressed = !is_pedal_depressed; + const stave = note.checkStave(); + const x = note.getAbsoluteX(); + const y = stave.getYForBottomText(this.line + 3); + const point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE; + let text_width = 0; + if (is_pedal_depressed) { + if (this.custom_depress_text) { + text_width = ctx.measureText(this.custom_depress_text).width; + ctx.fillText(this.custom_depress_text, x - text_width / 2, y); + } + else { + drawPedalGlyph('pedal_depress', ctx, x, y, point); + } + } + else { + if (this.custom_release_text) { + text_width = ctx.measureText(this.custom_release_text).width; + ctx.fillText(this.custom_release_text, x - text_width / 2, y); + } + else { + drawPedalGlyph('pedal_release', ctx, x, y, point); + } + } + }); + } + /** Render the pedal marking in position on the rendering context. */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + ctx.save(); + ctx.setStrokeStyle(this.render_options.color); + ctx.setFillStyle(this.render_options.color); + ctx.setFont(this.textFont); + L('Rendering Pedal Marking'); + if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) { + ctx.setLineWidth(this.render_options.bracket_line_width); + this.drawBracketed(); + } + else if (this.type === PedalMarking.type.TEXT) { + this.drawText(); + } + ctx.restore(); + } +} +/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */ +PedalMarking.DEBUG = false; +PedalMarking.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 12, + weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC, +}; +/** Glyph data */ +PedalMarking.GLYPHS = { + pedal_depress: { + code: 'keyboardPedalPed', + }, + pedal_release: { + code: 'keyboardPedalUp', + }, +}; +/** Pedal type as number. */ +PedalMarking.type = { + TEXT: 1, + BRACKET: 2, + MIXED: 3, +}; +/** Pedal type as string. */ +PedalMarking.typeString = { + text: PedalMarking.type.TEXT, + bracket: PedalMarking.type.BRACKET, + mixed: PedalMarking.type.MIXED, +}; + + + +/***/ }), + +/***/ "./src/registry.ts": +/*!*************************!*\ + !*** ./src/registry.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Registry": () => (/* binding */ Registry) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// @author Mohit Cheppudira +// +// ## Description +// +// This file implements a registry for VexFlow elements. It allows users +// to track, query, and manage some subset of generated elements, and +// dynamically get and set attributes. +// +// There are two ways to register with a registry: +// +// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or, +// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future +// elements will automatically register with it. +// +// Once an element is registered, selected attributes are tracked and indexed by +// the registry. This allows fast look up of elements by attributes like id, type, +// and class. + +// Indexes are represented as maps of maps of maps. This allows +// for both multi-labeling (e.g., an element can have multiple classes) +// and efficient lookup. +class Index { + constructor() { + this.id = {}; + this.type = {}; + this.class = {}; + } +} +class Registry { + static getDefaultRegistry() { + return Registry.defaultRegistry; + } + // If you call `enableDefaultRegistry`, any new elements will auto-register with + // the provided registry as soon as they're constructed. + static enableDefaultRegistry(registry) { + Registry.defaultRegistry = registry; + } + static disableDefaultRegistry() { + Registry.defaultRegistry = undefined; + } + constructor() { + this.index = new Index(); + } + clear() { + this.index = new Index(); + return this; + } + setIndexValue(name, value, id, elem) { + const index = this.index; + if (!index[name][value]) { + index[name][value] = {}; + } + index[name][value][id] = elem; + } + // Updates the indexes for element 'id'. If an element's attribute changes + // from A -> B, make sure to remove the element from A. + updateIndex({ id, name, value, oldValue }) { + const elem = this.getElementById(id); + if (oldValue !== undefined && this.index[name][oldValue]) { + delete this.index[name][oldValue][id]; + } + if (value && elem) { + this.setIndexValue(name, value, elem.getAttribute('id'), elem); + } + } + /** + * Register element `elem` with this registry. + * This adds the element to its index and watches it for attribute changes. + * @param elem + * @param id + * @returns this + */ + register(elem, id) { + id = id || elem.getAttribute('id'); + if (!id) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError("Can't add element without `id` attribute to registry"); + } + // Manually add id to index, then update other indexes. + elem.setAttribute('id', id); + this.setIndexValue('id', id, id, elem); + this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined }); + elem.onRegister(this); + return this; + } + getElementById(id) { + var _a, _b; + return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found. + } + getElementsByAttribute(attribute, value) { + const index_attr = this.index[attribute]; + if (index_attr) { + const index_attr_val = index_attr[value]; + if (index_attr_val) { + const keys = Object.keys(index_attr_val); + return keys.map((k) => index_attr_val[k]); + } + } + return []; + } + getElementsByType(type) { + return this.getElementsByAttribute('type', type); + } + getElementsByClass(className) { + return this.getElementsByAttribute('class', className); + } + // This is called by the element when an attribute value changes. If an indexed + // attribute changes, then update the local index. + onUpdate(info) { + const allowedNames = ['id', 'type', 'class']; + if (allowedNames.includes(info.name)) { + this.updateIndex(info); + } + return this; + } +} + + +/***/ }), + +/***/ "./src/rendercontext.ts": +/*!******************************!*\ + !*** ./src/rendercontext.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RenderContext": () => (/* binding */ RenderContext), +/* harmony export */ "drawDot": () => (/* binding */ drawDot) +/* harmony export */ }); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021. +// MIT License + +class RenderContext { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.RenderContext; + } + set font(f) { + this.setFont(f); + } + get font() { + return this.getFont(); + } + /** + * This is kept for backwards compatibility with 3.0.9. + * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand. + */ + setRawFont(f) { + this.setFont(f); + return this; + } +} +/** + * Draw a tiny dot marker on the specified context. A great debugging aid. + * @param ctx context + * @param x dot x coordinate + * @param y dot y coordinate + * @param color + */ +function drawDot(ctx, x, y, color = '#F55') { + ctx.save(); + ctx.setFillStyle(color); + // draw a circle + ctx.beginPath(); + ctx.arc(x, y, 3, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + ctx.restore(); +} + + +/***/ }), + +/***/ "./src/renderer.ts": +/*!*************************!*\ + !*** ./src/renderer.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Renderer": () => (/* binding */ Renderer), +/* harmony export */ "RendererBackends": () => (/* binding */ RendererBackends), +/* harmony export */ "RendererLineEndType": () => (/* binding */ RendererLineEndType) +/* harmony export */ }); +/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./svgcontext */ "./src/svgcontext.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./web */ "./src/web.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +var RendererBackends; +(function (RendererBackends) { + RendererBackends[RendererBackends["CANVAS"] = 1] = "CANVAS"; + RendererBackends[RendererBackends["SVG"] = 2] = "SVG"; +})(RendererBackends || (RendererBackends = {})); +// End of line types +var RendererLineEndType; +(function (RendererLineEndType) { + RendererLineEndType[RendererLineEndType["NONE"] = 1] = "NONE"; + RendererLineEndType[RendererLineEndType["UP"] = 2] = "UP"; + RendererLineEndType[RendererLineEndType["DOWN"] = 3] = "DOWN"; +})(RendererLineEndType || (RendererLineEndType = {})); +/** + * Support Canvas & SVG rendering contexts. + */ +class Renderer { + static buildContext(elementId, backend, width, height, background = '#FFF') { + const renderer = new Renderer(elementId, backend); + if (width && height) { + renderer.resize(width, height); + } + const ctx = renderer.getContext(); + ctx.setBackgroundFillStyle(background); + Renderer.lastContext = ctx; + return ctx; + } + static getCanvasContext(elementId, width, height, background) { + return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background); + } + static getSVGContext(elementId, width, height, background) { + return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background); + } + // Draw a dashed line (horizontal, vertical or diagonal + // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space. + // setting the second number to 0 draws a solid line. + static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) { + context.beginPath(); + const dx = toX - fromX; + const dy = toY - fromY; + const angle = Math.atan2(dy, dx); + let x = fromX; + let y = fromY; + context.moveTo(fromX, fromY); + let idx = 0; + let draw = true; + while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) { + const dashLength = dashPattern[idx++ % dashPattern.length]; + const nx = x + Math.cos(angle) * dashLength; + x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx); + const ny = y + Math.sin(angle) * dashLength; + y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny); + if (draw) { + context.lineTo(x, y); + } + else { + context.moveTo(x, y); + } + draw = !draw; + } + context.closePath(); + context.stroke(); + } + constructor(arg0, arg1) { + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_2__.isRenderContext)(arg0)) { + // The user has provided what looks like a RenderContext, let's just use it. + this.ctx = arg0; + } + else { + if (arg1 === undefined) { + // The backend must be specified if the render context isn't directly provided. + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidArgument', 'Missing backend argument'); + } + const backend = arg1; + let element; + if (typeof arg0 == 'string') { + const maybeElement = document.getElementById(arg0); + if (!maybeElement) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElementId', `Can't find element with ID "${maybeElement}"`); + } + element = maybeElement; + } + else { + element = arg0; + } + // Verify backend and create context + if (backend === Renderer.Backends.CANVAS) { + if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLCanvas)(element)) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.'); + } + const context = element.getContext('2d', { willReadFrequently: true }); + if (!context) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', "Can't get canvas context"); + } + this.ctx = new _canvascontext__WEBPACK_IMPORTED_MODULE_0__.CanvasContext(context); + } + else if (backend === Renderer.Backends.SVG) { + if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLDiv)(element)) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.'); + } + this.ctx = new _svgcontext__WEBPACK_IMPORTED_MODULE_1__.SVGContext(element); + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidBackend', `No support for backend: ${backend}`); + } + } + } + resize(width, height) { + this.ctx.resize(width, height); + return this; + } + getContext() { + return this.ctx; + } +} +Renderer.Backends = RendererBackends; +Renderer.LineEndType = RendererLineEndType; +// Used by vexflow_test_helpers.ts +// Should this be private? +// Can we do this in a cleaner way? +Renderer.lastContext = undefined; + + + +/***/ }), + +/***/ "./src/repeatnote.ts": +/*!***************************!*\ + !*** ./src/repeatnote.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RepeatNote": () => (/* binding */ RepeatNote) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. + + + + +// Map `type` to SMuFL glyph code. +const CODES = { + '1': 'repeat1Bar', + '2': 'repeat2Bars', + '4': 'repeat4Bars', + slash: 'repeatBarSlash', +}; +class RepeatNote extends _glyphnote__WEBPACK_IMPORTED_MODULE_1__.GlyphNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.RepeatNote; + } + constructor(type, noteStruct, options) { + const glyphCode = CODES[type] || 'repeat1Bar'; + const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyphCode, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), { + category: 'repeatNote', + }); + super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options); + } +} + + +/***/ }), + +/***/ "./src/stave.ts": +/*!**********************!*\ + !*** ./src/stave.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Stave": () => (/* binding */ Stave) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.ts"); +/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./stavesection */ "./src/stavesection.ts"); +/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.ts"); +/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.ts"); +/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + + + + + + + + + + +// Used by Stave.format() to sort the modifiers at the beginning and end of a stave. +// The keys (computed property names) match the CATEGORY property in the +// Barline, Clef, KeySignature, TimeSignature classes. +const SORT_ORDER_BEG_MODIFIERS = { + [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 0, + [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 1, + [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 2, + [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 3, +}; +const SORT_ORDER_END_MODIFIERS = { + [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 0, + [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 1, + [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 2, + [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 3, +}; +class Stave extends _element__WEBPACK_IMPORTED_MODULE_2__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stave; + } + // This is the sum of the padding that normally goes on left + right of a stave during + // drawing. Used to size staves correctly with content width. + static get defaultPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont(); + return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax'); + } + // Right padding, used by system if startX is already determined. + static get rightPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont(); + return musicFont.lookupMetric('stave.endPaddingMax'); + } + constructor(x, y, width, options) { + super(); + // Initialized by the constructor via this.resetLines(). + this.height = 0; + this.x = x; + this.y = y; + this.width = width; + this.formatted = false; + this.start_x = x + 5; + this.end_x = x + width; + this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.) + this.measure = 0; + this.clef = 'treble'; + this.endClef = undefined; + this.resetFont(); + this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options); + this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 }; + this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 }; + this.resetLines(); + // beg bar + this.addModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.left_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE)); + // end bar + this.addEndModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.right_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE)); + } + /** Set default style for ledger lines. */ + setDefaultLedgerLineStyle(style) { + this.defaultLedgerLineStyle = style; + } + /** Get default style for ledger lines. */ + getDefaultLedgerLineStyle() { + return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle); + } + space(spacing) { + return this.options.spacing_between_lines_px * spacing; + } + resetLines() { + this.options.line_config = []; + for (let i = 0; i < this.options.num_lines; i++) { + this.options.line_config.push({ visible: true }); + } + this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px; + this.options.bottom_text_position = this.options.num_lines; + } + setNoteStartX(x) { + if (!this.formatted) + this.format(); + this.start_x = x; + return this; + } + getNoteStartX() { + if (!this.formatted) + this.format(); + return this.start_x; + } + getNoteEndX() { + if (!this.formatted) + this.format(); + return this.end_x; + } + getTieStartX() { + return this.start_x; + } + getTieEndX() { + return this.end_x; + } + getX() { + return this.x; + } + getNumLines() { + return this.options.num_lines; + } + setNumLines(n) { + this.options.num_lines = n; + this.resetLines(); + return this; + } + setY(y) { + this.y = y; + return this; + } + getY() { + return this.y; + } + getTopLineTopY() { + return this.getYForLine(0) - _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2; + } + getBottomLineBottomY() { + return this.getYForLine(this.getNumLines() - 1) + _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2; + } + setX(x) { + const shift = x - this.x; + this.formatted = false; + this.x = x; + this.start_x += shift; + this.end_x += shift; + for (let i = 0; i < this.modifiers.length; i++) { + const mod = this.modifiers[i]; + mod.setX(mod.getX() + shift); + } + return this; + } + setWidth(width) { + this.formatted = false; + this.width = width; + this.end_x = this.x + width; + // reset the x position of the end barline (TODO(0xfe): This makes no sense) + // this.modifiers[1].setX(this.end_x); + return this; + } + getWidth() { + return this.width; + } + getStyle() { + return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS }, super.getStyle()); + } + /** + * Set the measure number of this Stave. + */ + setMeasure(measure) { + this.measure = measure; + return this; + } + /** + * Return the measure number of this Stave. + */ + getMeasure() { + return this.measure; + } + /** + * Gets the pixels to shift from the beginning of the stave + * following the modifier at the provided index + * @param {Number} index The index from which to determine the shift + * @return {Number} The amount of pixels shifted + */ + getModifierXShift(index = 0) { + if (typeof index !== 'number') { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('InvalidIndex', 'Must be of number type'); + } + if (!this.formatted) + this.format(); + if (this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN).length === 1) { + return 0; + } + // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test' + if (this.modifiers[index].getPosition() === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.RIGHT) { + return 0; + } + let start_x = this.start_x - this.x; + const begBarline = this.modifiers[0]; + if (begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) { + start_x -= begBarline.getWidth(); + } + return start_x; + } + /** Coda & Segno Symbol functions */ + setRepetitionType(type, yShift = 0) { + this.modifiers.push(new _staverepetition__WEBPACK_IMPORTED_MODULE_7__.Repetition(type, this.x, yShift)); + return this; + } + // Volta functions + setVoltaType(type, number_t, y) { + this.modifiers.push(new _stavevolta__WEBPACK_IMPORTED_MODULE_11__.Volta(type, number_t, this.x, y)); + return this; + } + // Section functions + setSection(section, y, xOffset = 0, fontSize, drawRect = true) { + const staveSection = new _stavesection__WEBPACK_IMPORTED_MODULE_8__.StaveSection(section, this.x + xOffset, y, drawRect); + if (fontSize) + staveSection.setFontSize(fontSize); + this.modifiers.push(staveSection); + return this; + } + // Tempo functions + setTempo(tempo, y) { + this.modifiers.push(new _stavetempo__WEBPACK_IMPORTED_MODULE_9__.StaveTempo(tempo, this.x, y)); + return this; + } + // Text functions + setText(text, position, options = {}) { + this.modifiers.push(new _stavetext__WEBPACK_IMPORTED_MODULE_10__.StaveText(text, position, options)); + return this; + } + getHeight() { + return this.height; + } + getSpacingBetweenLines() { + return this.options.spacing_between_lines_px; + } + getBoundingBox() { + return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y); + } + getBottomY() { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing; + return score_bottom; + } + getBottomLineY() { + return this.getYForLine(this.options.num_lines); + } + // This returns + /** @returns the y for the *center* of a staff line */ + getYForLine(line) { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const headroom = options.space_above_staff_ln; + const y = this.y + line * spacing + headroom * spacing; + return y; + } + getLineForY(y) { + // Does the reverse of getYForLine - somewhat dumb and just calls + // getYForLine until the right value is reaches + const options = this.options; + const spacing = options.spacing_between_lines_px; + const headroom = options.space_above_staff_ln; + return (y - this.y) / spacing - headroom; + } + getYForTopText(line = 0) { + return this.getYForLine(-line - this.options.top_text_position); + } + getYForBottomText(line = 0) { + return this.getYForLine(this.options.bottom_text_position + line); + } + getYForNote(line) { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const headroom = options.space_above_staff_ln; + return this.y + headroom * spacing + 5 * spacing - line * spacing; + } + getYForGlyphs() { + return this.getYForLine(3); + } + // This method adds a stave modifier to the stave. Note that the first two + // modifiers (BarLines) are automatically added upon construction. + addModifier(modifier, position) { + if (position !== undefined) { + modifier.setPosition(position); + } + modifier.setStave(this); + this.formatted = false; + this.modifiers.push(modifier); + return this; + } + addEndModifier(modifier) { + this.addModifier(modifier, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + // Bar Line functions + setBegBarType(type) { + // Only valid bar types at beginning of stave is none, single or begin repeat + const { SINGLE, REPEAT_BEGIN, NONE } = _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType; + if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) { + this.modifiers[0].setType(type); + this.formatted = false; + } + return this; + } + setEndBarType(type) { + // Repeat end not valid at end of stave + if (type !== _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) { + this.modifiers[1].setType(type); + this.formatted = false; + } + return this; + } + /** + * treat the stave as if the clef is clefSpec, but don't display the clef + */ + setClefLines(clefSpec) { + this.clef = clefSpec; + return this; + } + setClef(clefSpec, size, annotation, position) { + if (position === undefined) { + position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; + } + if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) { + this.endClef = clefSpec; + } + else { + this.clef = clefSpec; + } + const clefs = this.getModifiers(position, _clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY); + if (clefs.length === 0) { + this.addClef(clefSpec, size, annotation, position); + } + else { + clefs[0].setType(clefSpec, size, annotation); + } + return this; + } + getClef() { + return this.clef; + } + setEndClef(clefSpec, size, annotation) { + this.setClef(clefSpec, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + getEndClef() { + return this.endClef; + } + setKeySignature(keySpec, cancelKeySpec, position) { + if (position === undefined) { + position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; + } + const keySignatures = this.getModifiers(position, _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY); + if (keySignatures.length === 0) { + this.addKeySignature(keySpec, cancelKeySpec, position); + } + else { + keySignatures[0].setKeySig(keySpec, cancelKeySpec); + } + return this; + } + setEndKeySignature(keySpec, cancelKeySpec) { + this.setKeySignature(keySpec, cancelKeySpec, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + setTimeSignature(timeSpec, customPadding, position) { + if (position === undefined) { + position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; + } + const timeSignatures = this.getModifiers(position, _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY); + if (timeSignatures.length === 0) { + this.addTimeSignature(timeSpec, customPadding, position); + } + else { + timeSignatures[0].setTimeSig(timeSpec); + } + return this; + } + setEndTimeSignature(timeSpec, customPadding) { + this.setTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + /** + * Add a key signature to the stave. + * + * Example: + * `stave.addKeySignature('Db');` + * @param keySpec new key specification `[A-G][b|#]?` + * @param cancelKeySpec + * @param position + * @returns + */ + addKeySignature(keySpec, cancelKeySpec, position) { + if (position === undefined) { + position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; + } + this.addModifier(new _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature(keySpec, cancelKeySpec).setPosition(position), position); + return this; + } + /** + * Add a clef to the stave. + * + * Example: + * + * stave.addClef('treble') + * @param clef clef (treble|bass|...) see {@link Clef.types} + * @param size + * @param annotation + * @param position + * @returns + */ + addClef(clef, size, annotation, position) { + if (position === undefined || position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN) { + this.clef = clef; + } + else if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) { + this.endClef = clef; + } + this.addModifier(new _clef__WEBPACK_IMPORTED_MODULE_1__.Clef(clef, size, annotation), position); + return this; + } + addEndClef(clef, size, annotation) { + this.addClef(clef, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + /** + * Add a time signature to the stave + * + * Example: + * + * `stave.addTimeSignature('4/4');` + * @param timeSpec time signature specification `(C\||C|\d\/\d)` + * @param customPadding + * @param position + * @returns + */ + addTimeSignature(timeSpec, customPadding, position) { + this.addModifier(new _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature(timeSpec, customPadding), position); + return this; + } + addEndTimeSignature(timeSpec, customPadding) { + this.addTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + // Deprecated + addTrebleGlyph() { + this.addClef('treble'); + return this; + } + /** + * @param position + * @param category + * @returns array of StaveModifiers that match the provided position and category. + */ + getModifiers(position, category) { + const noPosition = position === undefined; + const noCategory = category === undefined; + if (noPosition && noCategory) { + return this.modifiers; + } + else if (noPosition) { + // A category was provided. + return this.modifiers.filter((m) => category === m.getCategory()); + } + else if (noCategory) { + // A position was provided. + return this.modifiers.filter((m) => position === m.getPosition()); + } + else { + // Both position and category were provided! + return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory()); + } + } + /** + * Use the modifier's `getCategory()` as a key for the `order` array. + * The retrieved value is used to sort modifiers from left to right (0 to to 3). + */ + sortByCategory(items, order) { + for (let i = items.length - 1; i >= 0; i--) { + for (let j = 0; j < i; j++) { + if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) { + const temp = items[j]; + items[j] = items[j + 1]; + items[j + 1] = temp; + } + } + } + } + format() { + const begBarline = this.modifiers[0]; + const endBarline = this.modifiers[1]; + const begModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN); + const endModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS); + this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS); + if (begModifiers.length > 1 && begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) { + begModifiers.push(begModifiers.splice(0, 1)[0]); + begModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE)); + } + if (endModifiers.indexOf(endBarline) > 0) { + endModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE)); + } + let width; + let padding; + let modifier; + let offset = 0; + let x = this.x; + for (let i = 0; i < begModifiers.length; i++) { + modifier = begModifiers[i]; + padding = modifier.getPadding(i + offset); + width = modifier.getWidth(); + x += padding; + modifier.setX(x); + x += width; + if (padding + width === 0) + offset--; + } + this.start_x = x; + x = this.x + this.width; + const widths = { + left: 0, + right: 0, + paddingRight: 0, + paddingLeft: 0, + }; + let lastBarlineIdx = 0; + for (let i = 0; i < endModifiers.length; i++) { + modifier = endModifiers[i]; + lastBarlineIdx = (0,_typeguard__WEBPACK_IMPORTED_MODULE_14__.isBarline)(modifier) ? i : lastBarlineIdx; + widths.right = 0; + widths.left = 0; + widths.paddingRight = 0; + widths.paddingLeft = 0; + const layoutMetrics = modifier.getLayoutMetrics(); + if (layoutMetrics) { + if (i !== 0) { + widths.right = layoutMetrics.xMax || 0; + widths.paddingRight = layoutMetrics.paddingRight || 0; + } + widths.left = -layoutMetrics.xMin || 0; + widths.paddingLeft = layoutMetrics.paddingLeft || 0; + if (i === endModifiers.length - 1) { + widths.paddingLeft = 0; + } + } + else { + widths.paddingRight = modifier.getPadding(i - lastBarlineIdx); + if (i !== 0) { + widths.right = modifier.getWidth(); + } + if (i === 0) { + widths.left = modifier.getWidth(); + } + } + x -= widths.paddingRight; + x -= widths.right; + modifier.setX(x); + x -= widths.left; + x -= widths.paddingLeft; + } + this.end_x = endModifiers.length === 1 ? this.x + this.width : x; + this.formatted = true; + } + /** + * All drawing functions below need the context to be set. + */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + this.applyStyle(); + ctx.openGroup('stave', this.getAttribute('id')); + if (!this.formatted) + this.format(); + const num_lines = this.options.num_lines; + const width = this.width; + const x = this.x; + let y; + // Render lines + for (let line = 0; line < num_lines; line++) { + y = this.getYForLine(line); + if (this.options.line_config[line].visible) { + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x + width, y); + ctx.stroke(); + } + } + ctx.closeGroup(); + this.restoreStyle(); + // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.) + for (let i = 0; i < this.modifiers.length; i++) { + const modifier = this.modifiers[i]; + // Only draw modifier if it has a draw function + if (typeof modifier.draw === 'function') { + modifier.applyStyle(ctx); + modifier.draw(this, this.getModifierXShift(i)); + modifier.restoreStyle(ctx); + } + } + // Render measure numbers + if (this.measure > 0) { + ctx.save(); + ctx.setFont(this.textFont); + const textWidth = ctx.measureText('' + this.measure).width; + y = this.getYForTopText(0) + 3; + ctx.fillText('' + this.measure, this.x - textWidth / 2, y); + ctx.restore(); + } + return this; + } + getVerticalBarWidth() { + return this.options.vertical_bar_width; + } + /** + * Get the current configuration for the Stave. + * @return {Array} An array of configuration objects. + */ + getConfigForLines() { + return this.options.line_config; + } + /** + * Configure properties of the lines in the Stave + * @param line_number The index of the line to configure. + * @param line_config An configuration object for the specified line. + * @throws RuntimeError "StaveConfigError" When the specified line number is out of + * range of the number of lines specified in the constructor. + */ + setConfigForLine(line_number, line_config) { + if (line_number >= this.options.num_lines || line_number < 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.'); + } + if (line_config.visible === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', "The line configuration object is missing the 'visible' property."); + } + if (typeof line_config.visible !== 'boolean') { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', "The line configuration objects 'visible' property must be true or false."); + } + this.options.line_config[line_number] = line_config; + return this; + } + /** + * Set the staff line configuration array for all of the lines at once. + * @param lines_configuration An array of line configuration objects. These objects + * are of the same format as the single one passed in to setLineConfiguration(). + * The caller can set null for any line config entry if it is desired that the default be used + * @throws RuntimeError "StaveConfigError" When the lines_configuration array does not have + * exactly the same number of elements as the num_lines configuration object set in + * the constructor. + */ + setConfigForLines(lines_configuration) { + if (lines_configuration.length !== this.options.num_lines) { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave'); + } + // Make sure the defaults are present in case an incomplete set of + // configuration options were supplied. + // eslint-disable-next-line + for (const line_config in lines_configuration) { + // Allow '{}' to be used if the caller just wants the default for a particular node. + if (lines_configuration[line_config].visible == undefined) { + lines_configuration[line_config] = this.options.line_config[line_config]; + } + this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]); + } + this.options.line_config = lines_configuration; + return this; + } + static formatBegModifiers(staves) { + const adjustCategoryStartX = (category) => { + let minStartX = 0; + // Calculate min start X for the category + staves.forEach((stave) => { + const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category); + // Consider only the first instance + if (modifiers.length > 0 && modifiers[0].getX() > minStartX) + minStartX = modifiers[0].getX(); + }); + let adjustX = 0; + staves.forEach((stave) => { + adjustX = 0; + const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category); + // Calculate adjustement required for the stave + modifiers.forEach((modifier) => { + if (minStartX - modifier.getX() > adjustX) + adjustX = minStartX - modifier.getX(); + }); + const allModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN); + let bAdjust = false; + // Apply adjustment to all the modifiers in and beyond the category + allModifiers.forEach((modifier) => { + if (modifier.getCategory() === category) + bAdjust = true; + if (bAdjust && adjustX > 0) + modifier.setX(modifier.getX() + adjustX); + }); + // Apply adjustment also to note start. + stave.setNoteStartX(stave.getNoteStartX() + adjustX); + }); + }; + // Make sure that staves are formatted + staves.forEach((stave) => { + if (!stave.formatted) + stave.format(); + }); + // Align Clefs + adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Clef); + // Align key signatures + adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.KeySignature); + // Align time signatures + adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.TimeSignature); + let maxX = 0; + // align note start + staves.forEach((stave) => { + if (stave.getNoteStartX() > maxX) + maxX = stave.getNoteStartX(); + }); + staves.forEach((stave) => { + stave.setNoteStartX(maxX); + }); + maxX = 0; + // align REPEAT_BEGIN + staves.forEach((stave) => { + const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline); + modifiers.forEach((modifier) => { + if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) + if (modifier.getX() > maxX) + maxX = modifier.getX(); + }); + }); + staves.forEach((stave) => { + const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline); + modifiers.forEach((modifier) => { + if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) + modifier.setX(maxX); + }); + }); + } +} +Stave.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_3__.Font.SANS_SERIF, + size: 8, + weight: _font__WEBPACK_IMPORTED_MODULE_3__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_3__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stavebarline.ts": +/*!*****************************!*\ + !*** ./src/stavebarline.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Barline": () => (/* binding */ Barline), +/* harmony export */ "BarlineType": () => (/* binding */ BarlineType) +/* harmony export */ }); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// Author Larry Kuhns 2011 + + + +var BarlineType; +(function (BarlineType) { + BarlineType[BarlineType["SINGLE"] = 1] = "SINGLE"; + BarlineType[BarlineType["DOUBLE"] = 2] = "DOUBLE"; + BarlineType[BarlineType["END"] = 3] = "END"; + BarlineType[BarlineType["REPEAT_BEGIN"] = 4] = "REPEAT_BEGIN"; + BarlineType[BarlineType["REPEAT_END"] = 5] = "REPEAT_END"; + BarlineType[BarlineType["REPEAT_BOTH"] = 6] = "REPEAT_BOTH"; + BarlineType[BarlineType["NONE"] = 7] = "NONE"; +})(BarlineType || (BarlineType = {})); +class Barline extends _stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Barline; + } + static get type() { + return BarlineType; + } + static get typeString() { + return { + single: BarlineType.SINGLE, + double: BarlineType.DOUBLE, + end: BarlineType.END, + repeatBegin: BarlineType.REPEAT_BEGIN, + repeatEnd: BarlineType.REPEAT_END, + repeatBoth: BarlineType.REPEAT_BOTH, + none: BarlineType.NONE, + }; + } + constructor(type) { + super(); + this.thickness = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STAVE_LINE_THICKNESS; + const TYPE = BarlineType; + this.widths = {}; + this.widths[TYPE.SINGLE] = 5; + this.widths[TYPE.DOUBLE] = 5; + this.widths[TYPE.END] = 5; + this.widths[TYPE.REPEAT_BEGIN] = 5; + this.widths[TYPE.REPEAT_END] = 5; + this.widths[TYPE.REPEAT_BOTH] = 5; + this.widths[TYPE.NONE] = 5; + this.paddings = {}; + this.paddings[TYPE.SINGLE] = 0; + this.paddings[TYPE.DOUBLE] = 0; + this.paddings[TYPE.END] = 0; + this.paddings[TYPE.REPEAT_BEGIN] = 15; + this.paddings[TYPE.REPEAT_END] = 15; + this.paddings[TYPE.REPEAT_BOTH] = 15; + this.paddings[TYPE.NONE] = 0; + this.layoutMetricsMap = {}; + this.layoutMetricsMap[TYPE.SINGLE] = { + xMin: 0, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.DOUBLE] = { + xMin: -3, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.END] = { + xMin: -5, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.REPEAT_END] = { + xMin: -10, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = { + xMin: -2, + xMax: 10, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.REPEAT_BOTH] = { + xMin: -10, + xMax: 10, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.NONE] = { + xMin: 0, + xMax: 0, + paddingLeft: 5, + paddingRight: 5, + }; + this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifierPosition.BEGIN); + this.setType(type); + } + getType() { + return this.type; + } + setType(type) { + this.type = typeof type === 'string' ? Barline.typeString[type] : type; + this.setWidth(this.widths[this.type]); + this.setPadding(this.paddings[this.type]); + this.setLayoutMetrics(this.layoutMetricsMap[this.type]); + return this; + } + // Draw barlines + draw(stave) { + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('stavebarline', this.getAttribute('id')); + switch (this.type) { + case BarlineType.SINGLE: + this.drawVerticalBar(stave, this.x, false); + break; + case BarlineType.DOUBLE: + this.drawVerticalBar(stave, this.x, true); + break; + case BarlineType.END: + this.drawVerticalEndBar(stave, this.x); + break; + case BarlineType.REPEAT_BEGIN: + // If the barline is shifted over (in front of clef/time/key) + // Draw vertical bar at the beginning. + this.drawRepeatBar(stave, this.x, true); + if (stave.getX() !== this.x) { + this.drawVerticalBar(stave, stave.getX()); + } + break; + case BarlineType.REPEAT_END: + this.drawRepeatBar(stave, this.x, false); + break; + case BarlineType.REPEAT_BOTH: + this.drawRepeatBar(stave, this.x, false); + this.drawRepeatBar(stave, this.x, true); + break; + default: + // Default is NONE, so nothing to draw + break; + } + ctx.closeGroup(); + this.restoreStyle(ctx); + } + drawVerticalBar(stave, x, double_bar) { + const staveCtx = stave.checkContext(); + const topY = stave.getTopLineTopY(); + const botY = stave.getBottomLineBottomY(); + if (double_bar) { + staveCtx.fillRect(x - 3, topY, 1, botY - topY); + } + staveCtx.fillRect(x, topY, 1, botY - topY); + } + drawVerticalEndBar(stave, x) { + const staveCtx = stave.checkContext(); + const topY = stave.getTopLineTopY(); + const botY = stave.getBottomLineBottomY(); + staveCtx.fillRect(x - 5, topY, 1, botY - topY); + staveCtx.fillRect(x - 2, topY, 3, botY - topY); + } + drawRepeatBar(stave, x, begin) { + const staveCtx = stave.checkContext(); + const topY = stave.getTopLineTopY(); + const botY = stave.getBottomLineBottomY(); + let x_shift = 3; + if (!begin) { + x_shift = -5; + } + staveCtx.fillRect(x + x_shift, topY, 1, botY - topY); + staveCtx.fillRect(x - 2, topY, 3, botY - topY); + const dot_radius = 2; + // Shift dots left or right + if (begin) { + x_shift += 4; + } + else { + x_shift -= 4; + } + const dot_x = x + x_shift + dot_radius / 2; + // calculate the y offset based on number of stave lines + let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines(); + y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2; + let dot_y = topY + y_offset + dot_radius / 2; + // draw the top repeat dot + staveCtx.beginPath(); + staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false); + staveCtx.fill(); + // draw the bottom repeat dot + dot_y += stave.getSpacingBetweenLines(); + staveCtx.beginPath(); + staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false); + staveCtx.fill(); + } +} + + +/***/ }), + +/***/ "./src/staveconnector.ts": +/*!*******************************!*\ + !*** ./src/staveconnector.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveConnector": () => (/* binding */ StaveConnector) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +function drawBoldDoubleLine(ctx, type, topX, topY, botY) { + if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.'); + } + let x_shift = 3; + let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues + const thickLineOffset = 2; // For aesthetics + if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) { + x_shift = -5; // Flips the side of the thin line + variableWidth = 3; + } + // Thin line + ctx.fillRect(topX + x_shift, topY, 1, botY - topY); + // Thick line + ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY); +} +/** StaveConnector implements the connector lines between staves of a system. */ +class StaveConnector extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StaveConnector; + } + constructor(top_stave, bottom_stave) { + super(); + this.thickness = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_THICKNESS; + this.width = 3; + this.top_stave = top_stave; + this.bottom_stave = bottom_stave; + this.type = StaveConnector.type.DOUBLE; + this.resetFont(); + // 1. Offset Bold Double Left to align with offset Repeat Begin bars + // 2. Offset BRACE type not to overlap with another StaveConnector + this.x_shift = 0; + this.texts = []; + } + /** + * Set type. + * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString} + */ + setType(type) { + const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type; + // Be certain that the type is a valid type: + if (Object.values(StaveConnector.type).includes(newType)) { + this.type = newType; + } + return this; + } + /** + * Get type. + * @returns number {@link StaveConnector.type} + */ + getType() { + return this.type; + } + /** Set optional associated Text. */ + setText(text, options = {}) { + this.texts.push({ + content: text, + options: Object.assign({ shift_x: 0, shift_y: 0 }, options), + }); + return this; + } + setXShift(x_shift) { + if (typeof x_shift !== 'number') { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', 'x_shift must be a Number'); + } + this.x_shift = x_shift; + return this; + } + getXShift() { + return this.x_shift; + } + /** Render connector and associated text. */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + let topY = this.top_stave.getYForLine(0); + let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness; + let width = this.width; + let topX = this.top_stave.getX(); + const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT || + this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT || + this.type === StaveConnector.type.THIN_DOUBLE; + if (isRightSidedConnector) { + topX = this.top_stave.getX() + this.top_stave.getWidth(); + } + let attachment_height = botY - topY; + switch (this.type) { + case StaveConnector.type.SINGLE: + width = 1; + break; + case StaveConnector.type.SINGLE_LEFT: + width = 1; + break; + case StaveConnector.type.SINGLE_RIGHT: + width = 1; + break; + case StaveConnector.type.DOUBLE: + topX -= this.width + 2; + topY -= this.thickness; + attachment_height += 0.5; + break; + case StaveConnector.type.BRACE: { + width = 12; + // May need additional code to draw brace + const x1 = this.top_stave.getX() - 2 + this.x_shift; + const y1 = topY; + const x3 = x1; + const y3 = botY; + const x2 = x1 - width; + const y2 = y1 + attachment_height / 2.0; + const cpx1 = x2 - 0.9 * width; + const cpy1 = y1 + 0.2 * attachment_height; + const cpx2 = x1 + 1.1 * width; + const cpy2 = y2 - 0.135 * attachment_height; + const cpx3 = cpx2; + const cpy3 = y2 + 0.135 * attachment_height; + const cpx4 = cpx1; + const cpy4 = y3 - 0.2 * attachment_height; + const cpx5 = x2 - width; + const cpy5 = cpy4; + const cpx6 = x1 + 0.4 * width; + const cpy6 = y2 + 0.135 * attachment_height; + const cpx7 = cpx6; + const cpy7 = y2 - 0.135 * attachment_height; + const cpx8 = cpx5; + const cpy8 = cpy1; + ctx.beginPath(); + ctx.moveTo(x1, y1); + ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2); + ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3); + ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2); + ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1); + ctx.fill(); + ctx.stroke(); + break; + } + case StaveConnector.type.BRACKET: + topY -= 6; + botY += 6; + attachment_height = botY - topY; + _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop'); + _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom'); + topX -= this.width + 2; + break; + case StaveConnector.type.BOLD_DOUBLE_LEFT: + drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness); + break; + case StaveConnector.type.BOLD_DOUBLE_RIGHT: + drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness); + break; + case StaveConnector.type.THIN_DOUBLE: + width = 1; + attachment_height -= this.thickness; + break; + case StaveConnector.type.NONE: + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`); + } + if (this.type !== StaveConnector.type.BRACE && + this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT && + this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT && + this.type !== StaveConnector.type.NONE) { + ctx.fillRect(topX, topY, width, attachment_height); + } + // If the connector is a thin double barline, draw the paralell line + if (this.type === StaveConnector.type.THIN_DOUBLE) { + ctx.fillRect(topX - 3, topY, width, attachment_height); + } + ctx.save(); + ctx.setLineWidth(2); + ctx.setFont(this.textFont); + // Add stave connector text + for (let i = 0; i < this.texts.length; i++) { + const text = this.texts[i]; + const text_width = ctx.measureText('' + text.content).width; + const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x; + const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y; + ctx.fillText('' + text.content, x, y + 4); + } + ctx.restore(); + } +} +StaveConnector.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 16, + weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, +}; +/** + * SINGLE_LEFT and SINGLE are the same value for compatibility + * with older versions of vexflow which didn't have right sided + * stave connectors. + */ +StaveConnector.type = { + SINGLE_RIGHT: 0, + SINGLE_LEFT: 1, + SINGLE: 1, + DOUBLE: 2, + BRACE: 3, + BRACKET: 4, + BOLD_DOUBLE_LEFT: 5, + BOLD_DOUBLE_RIGHT: 6, + THIN_DOUBLE: 7, + NONE: 8, +}; +/** + * Connector type: + * * "singleRight" + * * "singleLeft" + * * "single" + * * "double" + * * "brace" + * * "bracket" + * * "boldDoubleLeft" + * * "boldDoubleRight" + * * "thinDouble" + * * "none" + */ +StaveConnector.typeString = { + singleRight: StaveConnector.type.SINGLE_RIGHT, + singleLeft: StaveConnector.type.SINGLE_LEFT, + single: StaveConnector.type.SINGLE, + double: StaveConnector.type.DOUBLE, + brace: StaveConnector.type.BRACE, + bracket: StaveConnector.type.BRACKET, + boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT, + boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT, + thinDouble: StaveConnector.type.THIN_DOUBLE, + none: StaveConnector.type.NONE, +}; + + + +/***/ }), + +/***/ "./src/stavehairpin.ts": +/*!*****************************!*\ + !*** ./src/stavehairpin.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveHairpin": () => (/* binding */ StaveHairpin) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/ +// +// This class implements hairpins between notes. +// Hairpins can be either crescendo or decrescendo. + + + + +class StaveHairpin extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.StaveHairpin; + } + /* Helper function to convert ticks into pixels. + * Requires a Formatter with voices joined and formatted (to + * get pixels per tick) + * + * options is struct that has: + * + * { + * height: px, + * y_shift: px, // vertical offset + * left_shift_ticks: 0, // left horizontal offset expressed in ticks + * right_shift_ticks: 0 // right horizontal offset expressed in ticks + * } + * + **/ + static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) { + var _a, _b; + const ppt = formatter.pixelsPerTick; + if (ppt == null) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.'); + } + const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0); + const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0); + const hairpin_options = { + height: options.height, + y_shift: options.y_shift, + left_shift_px: l_shift_px, + right_shift_px: r_shift_px, + right_shift_ticks: 0, + left_shift_ticks: 0, + }; + new StaveHairpin({ + first_note: notes.first_note, + last_note: notes.last_note, + }, type) + .setContext(ctx) + .setRenderOptions(hairpin_options) + .setPosition(position) + .draw(); + } + /** + * Create a new hairpin from the specified notes. + * + * @param {!Object} notes The notes to tie up. + * Notes is a struct that has: + * + * { + * first_note: Note, + * last_note: Note, + * } + * @param {!Object} type The type of hairpin + */ + constructor(notes, type) { + super(); + this.setNotes(notes); + this.hairpin = type; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW; + this.render_options = { + height: 10, + y_shift: 0, + left_shift_px: 0, + right_shift_px: 0, + right_shift_ticks: 0, + left_shift_ticks: 0, + }; + } + setPosition(position) { + if (position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE || position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW) { + this.position = position; + } + return this; + } + setRenderOptions(options) { + if (options.height != null && + options.y_shift != null && + options.left_shift_px != null && + options.right_shift_px != null) { + this.render_options = options; + } + return this; + } + /** + * Set the notes to attach this hairpin to. + * + * @param {!Object} notes The start and end notes. + */ + setNotes(notes) { + if (!notes.first_note && !notes.last_note) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.'); + } + this.notes = notes; + this.first_note = notes.first_note; + this.last_note = notes.last_note; + return this; + } + renderHairpin(params) { + const ctx = this.checkContext(); + let dis = this.render_options.y_shift + 20; + let y_shift = params.first_y; + if (this.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) { + dis = -dis + 30; + y_shift = params.first_y - params.staff_height; + } + const l_shift = this.render_options.left_shift_px; + const r_shift = this.render_options.right_shift_px; + ctx.beginPath(); + switch (this.hairpin) { + case StaveHairpin.type.CRESC: + ctx.moveTo(params.last_x + r_shift, y_shift + dis); + ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis); + ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis); + break; + case StaveHairpin.type.DECRESC: + ctx.moveTo(params.first_x + l_shift, y_shift + dis); + ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis); + ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis); + break; + default: + // Default is NONE, so nothing to draw + break; + } + ctx.stroke(); + ctx.closePath(); + } + draw() { + this.checkContext(); + this.setRendered(); + const firstNote = this.first_note; + const lastNote = this.last_note; + if (!firstNote || !lastNote) + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NoNote', 'Notes required to draw'); + const start = firstNote.getModifierStartXY(this.position, 0); + const end = lastNote.getModifierStartXY(this.position, 0); + this.renderHairpin({ + first_x: start.x, + last_x: end.x, + first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(), + last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(), + staff_height: firstNote.checkStave().getHeight(), + }); + } +} +StaveHairpin.type = { + CRESC: 1, + DECRESC: 2, +}; + + + +/***/ }), + +/***/ "./src/staveline.ts": +/*!**************************!*\ + !*** ./src/staveline.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveLine": () => (/* binding */ StaveLine) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// This file implements `StaveLine` which are simply lines that connect +// two notes. This object is highly configurable, see the `render_options`. +// A simple line is often used for notating glissando articulations, but you +// can format a `StaveLine` with arrows or colors for more pedagogical +// purposes, such as diagrams. + + + + + +// Attribution: Arrow rendering implementations based off of +// Patrick Horgan's article, "Drawing lines and arcs with +// arrow heads on HTML5 Canvas" +// +// Draw an arrow head that connects between 3 coordinates. +function drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) { + // all cases do this. + ctx.beginPath(); + ctx.moveTo(x0, y0); + ctx.lineTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.lineTo(x0, y0); + ctx.closePath(); + ctx.fill(); +} +class StaveLine extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveLine; + } + // Initialize the StaveLine with the given `notes`. + // + // `notes` is a struct that has: + // + // ``` + // { + // first_note: Note, + // last_note: Note, + // first_indices: [n1, n2, n3], + // last_indices: [n1, n2, n3] + // } + // ``` + constructor(notes) { + super(); + this.setNotes(notes); + this.text = ''; + this.resetFont(); + this.render_options = { + // Space to add to the left or the right + padding_left: 4, + padding_right: 3, + // The width of the line in pixels + line_width: 1, + // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?). + line_dash: undefined, + // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?). + rounded_end: true, + // The color of the line and arrowheads + color: undefined, + // Flags to draw arrows on each end of the line + draw_start_arrow: false, + draw_end_arrow: false, + // The length of the arrowhead sides + arrowhead_length: 10, + // The angle of the arrowhead + arrowhead_angle: Math.PI / 8, + // The position of the text + text_position_vertical: StaveLine.TextVerticalPosition.TOP, + text_justification: StaveLine.TextJustification.CENTER, + }; + } + // The the annotation for the `StaveLine` + setText(text) { + this.text = text; + return this; + } + // Set the notes for the `StaveLine` + setNotes(notes) { + if (!notes.first_note && !notes.last_note) { + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.'); + } + if (!notes.first_indices) + notes.first_indices = [0]; + if (!notes.last_indices) + notes.last_indices = [0]; + if (notes.first_indices.length !== notes.last_indices.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Connected notes must have same number of indices.'); + } + this.notes = notes; + this.first_note = notes.first_note; + this.first_indices = notes.first_indices; + this.last_note = notes.last_note; + this.last_indices = notes.last_indices; + return this; + } + // Apply the style of the `StaveLine` to the context + applyLineStyle() { + const ctx = this.checkContext(); + const render_options = this.render_options; + if (render_options.line_dash) { + ctx.setLineDash(render_options.line_dash); + } + if (render_options.line_width) { + ctx.setLineWidth(render_options.line_width); + } + if (render_options.rounded_end) { + ctx.setLineCap('round'); + } + else { + ctx.setLineCap('square'); + } + } + // Apply the text styling to the context + applyFontStyle() { + const ctx = this.checkContext(); + ctx.setFont(this.textFont); + const render_options = this.render_options; + const color = render_options.color; + if (color) { + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + } + } + // Helper function to draw a line with arrow heads + drawArrowLine(ctx, pt1, pt2) { + const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow; + const x1 = pt1.x; + const y1 = pt1.y; + const x2 = pt2.x; + const y2 = pt2.y; + // For ends with arrow we actually want to stop before we get to the arrow + // so that wide lines won't put a flat end on the arrow. + const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + const ratio = (distance - this.render_options.arrowhead_length / 3) / distance; + let end_x; + let end_y; + let start_x; + let start_y; + if (this.render_options.draw_end_arrow || both_arrows) { + end_x = Math.round(x1 + (x2 - x1) * ratio); + end_y = Math.round(y1 + (y2 - y1) * ratio); + } + else { + end_x = x2; + end_y = y2; + } + if (this.render_options.draw_start_arrow || both_arrows) { + start_x = x1 + (x2 - x1) * (1 - ratio); + start_y = y1 + (y2 - y1) * (1 - ratio); + } + else { + start_x = x1; + start_y = y1; + } + if (this.render_options.color) { + ctx.setStrokeStyle(this.render_options.color); + ctx.setFillStyle(this.render_options.color); + } + // Draw the shaft of the arrow + ctx.beginPath(); + ctx.moveTo(start_x, start_y); + ctx.lineTo(end_x, end_y); + ctx.stroke(); + ctx.closePath(); + // calculate the angle of the line + const line_angle = Math.atan2(y2 - y1, x2 - x1); + // h is the line length of a side of the arrow head + const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle)); + let angle1; + let angle2; + let top_x; + let top_y; + let bottom_x; + let bottom_y; + if (this.render_options.draw_end_arrow || both_arrows) { + angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle; + top_x = x2 + Math.cos(angle1) * h; + top_y = y2 + Math.sin(angle1) * h; + angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle; + bottom_x = x2 + Math.cos(angle2) * h; + bottom_y = y2 + Math.sin(angle2) * h; + drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y); + } + if (this.render_options.draw_start_arrow || both_arrows) { + angle1 = line_angle + this.render_options.arrowhead_angle; + top_x = x1 + Math.cos(angle1) * h; + top_y = y1 + Math.sin(angle1) * h; + angle2 = line_angle - this.render_options.arrowhead_angle; + bottom_x = x1 + Math.cos(angle2) * h; + bottom_y = y1 + Math.sin(angle2) * h; + drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y); + } + } + // Renders the `StaveLine` on the context + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const first_note = this.first_note; + const last_note = this.last_note; + const render_options = this.render_options; + ctx.save(); + this.applyLineStyle(); + // Cycle through each set of indices and draw lines + let start_position = { x: 0, y: 0 }; + let end_position = { x: 0, y: 0 }; + this.first_indices.forEach((first_index, i) => { + const last_index = this.last_indices[i]; + // Get initial coordinates for the start/end of the line + start_position = first_note.getModifierStartXY(2, first_index); + end_position = last_note.getModifierStartXY(1, last_index); + const upwards_slope = start_position.y > end_position.y; + // Adjust `x` coordinates for modifiers + start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left; + end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right; + // Adjust first `x` coordinates for displacements + const notehead_width = first_note.getGlyphProps().getWidth(); + const first_displaced = first_note.getKeyProps()[first_index].displaced; + if (first_displaced && first_note.getStemDirection() === 1) { + start_position.x += notehead_width + render_options.padding_left; + } + // Adjust last `x` coordinates for displacements + const last_displaced = last_note.getKeyProps()[last_index].displaced; + if (last_displaced && last_note.getStemDirection() === -1) { + end_position.x -= notehead_width + render_options.padding_right; + } + // Adjust y position better if it's not coming from the center of the note + start_position.y += upwards_slope ? -3 : 1; + end_position.y += upwards_slope ? 2 : 0; + this.drawArrowLine(ctx, start_position, end_position); + }); + ctx.restore(); + // Determine the x coordinate where to start the text + const text_width = ctx.measureText(this.text).width; + const justification = render_options.text_justification; + let x = 0; + if (justification === StaveLine.TextJustification.LEFT) { + x = start_position.x; + } + else if (justification === StaveLine.TextJustification.CENTER) { + const delta_x = end_position.x - start_position.x; + const center_x = delta_x / 2 + start_position.x; + x = center_x - text_width / 2; + } + else if (justification === StaveLine.TextJustification.RIGHT) { + x = end_position.x - text_width; + } + // Determine the y value to start the text + let y = 0; + const vertical_position = render_options.text_position_vertical; + if (vertical_position === StaveLine.TextVerticalPosition.TOP) { + y = first_note.checkStave().getYForTopText(); + } + else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) { + y = first_note.checkStave().getYForBottomText(_tables__WEBPACK_IMPORTED_MODULE_1__.Tables.TEXT_HEIGHT_OFFSET_HACK); + } + // Draw the text + ctx.save(); + this.applyFontStyle(); + ctx.fillText(this.text, x, y); + ctx.restore(); + return this; + } +} +/** Default text font. */ +StaveLine.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); +// Text Positioning +StaveLine.TextVerticalPosition = { + TOP: 1, + BOTTOM: 2, +}; +StaveLine.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification; + + + +/***/ }), + +/***/ "./src/stavemodifier.ts": +/*!******************************!*\ + !*** ./src/stavemodifier.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveModifier": () => (/* binding */ StaveModifier), +/* harmony export */ "StaveModifierPosition": () => (/* binding */ StaveModifierPosition) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// A base class for stave modifiers (e.g. clefs, key signatures) + + + +var StaveModifierPosition; +(function (StaveModifierPosition) { + StaveModifierPosition[StaveModifierPosition["CENTER"] = 0] = "CENTER"; + StaveModifierPosition[StaveModifierPosition["LEFT"] = 1] = "LEFT"; + StaveModifierPosition[StaveModifierPosition["RIGHT"] = 2] = "RIGHT"; + StaveModifierPosition[StaveModifierPosition["ABOVE"] = 3] = "ABOVE"; + StaveModifierPosition[StaveModifierPosition["BELOW"] = 4] = "BELOW"; + StaveModifierPosition[StaveModifierPosition["BEGIN"] = 5] = "BEGIN"; + StaveModifierPosition[StaveModifierPosition["END"] = 6] = "END"; +})(StaveModifierPosition || (StaveModifierPosition = {})); +class StaveModifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveModifier; + } + static get Position() { + return StaveModifierPosition; + } + constructor() { + super(); + this.width = 0; + this.x = 0; + this.padding = 10; + this.position = StaveModifierPosition.ABOVE; + } + getPosition() { + return this.position; + } + setPosition(position) { + this.position = position; + return this; + } + getStave() { + return this.stave; + } + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + setStave(stave) { + this.stave = stave; + return this; + } + getWidth() { + return this.width; + } + setWidth(width) { + this.width = width; + return this; + } + getX() { + return this.x; + } + setX(x) { + this.x = x; + return this; + } + /** + * Runs setYShift() for the Glyph object so that it matches the position of line for + * the Stave provided. A `customShift` can also be given (measured in the same units + * as `setYShift` not in lines) and this will be added after all other positions are + * calculated from the Stave. + * + * Note that this routine only sets the yShift; it does not actually "place" (meaning + * draw) the Glyph on the Stave. Call .draw() afterwards to do that. + */ + placeGlyphOnLine(glyph, stave, line, customShift = 0) { + glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift); + } + getPadding(index) { + return index !== undefined && index < 2 ? 0 : this.padding; + } + setPadding(padding) { + this.padding = padding; + return this; + } + setLayoutMetrics(layoutMetrics) { + this.layoutMetrics = layoutMetrics; + return this; + } + getLayoutMetrics() { + return this.layoutMetrics; + } + // eslint-disable-next-line + draw(...args) { + // DO NOTHING. + } +} + + +/***/ }), + +/***/ "./src/stavenote.ts": +/*!**************************!*\ + !*** ./src/stavenote.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveNote": () => (/* binding */ StaveNote) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// This file implements notes for standard notation. This consists of one or +// more `NoteHeads`, an optional stem, and an optional flag. +// +// Throughout these comments, a "note" refers to the entire `StaveNote`, +// and a "key" refers to a specific pitch/notehead within a note. +// +// See `tests/stavenote_tests.ts` for usage examples. + + + + + + + + +function showDeprecationWarningForNoteHeads() { + // eslint-disable-next-line + console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.'); +} +// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (StaveNote.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_7__.log)('Vex.Flow.StaveNote', args); +} +const isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? note.keyProps.length - 1 : 0); +// Helper methods for rest positioning in ModifierContext. +function shiftRestVertical(rest, note, dir) { + const delta = dir; + rest.line += delta; + rest.maxLine += delta; + rest.minLine += delta; + rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta); +} +// Called from formatNotes :: center a rest between two notes +function centerRest(rest, noteU, noteL) { + const delta = rest.line - (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(noteU.minLine, noteL.maxLine); + rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta); + rest.line -= delta; + rest.maxLine -= delta; + rest.minLine -= delta; +} +class StaveNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.StaveNote; + } + /** + * @deprecated Use Stem.UP. + */ + static get STEM_UP() { + return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP; + } + /** + * @deprecated Use Stem.DOWN. + */ + static get STEM_DOWN() { + return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN; + } + static get LEDGER_LINE_OFFSET() { + return 3; + } + static get minNoteheadPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + /** Format notes inside a ModifierContext. */ + static format(notes, state) { + var _a, _b; + if (!notes || notes.length < 2) + return false; + const notesList = []; + for (let i = 0; i < notes.length; i++) { + // Formatting uses sortedKeyProps to calculate line and minL. + const props = notes[i].sortedKeyProps; + const line = props[0].keyProps.line; + let minL = props[props.length - 1].keyProps.line; + const stemDirection = notes[i].getStemDirection(); + const stemMax = notes[i].getStemLength() / 10; + const stemMin = notes[i].getStemMinimumLength() / 10; + let maxL; + if (notes[i].isRest()) { + maxL = line + notes[i].glyphProps.line_above; + minL = line - notes[i].glyphProps.line_below; + } + else { + maxL = + stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line; + minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax; + } + notesList.push({ + line: props[0].keyProps.line, + maxLine: maxL, + minLine: minL, + isrest: notes[i].isRest(), + stemDirection: stemDirection, + stemMax, + stemMin, + voice_shift: notes[i].getVoiceShiftWidth(), + is_displaced: notes[i].isDisplaced(), + note: notes[i], + }); + } + let voices = 0; + let noteU = undefined; + let noteM = undefined; + let noteL = undefined; + const draw = [false, false, false]; + for (let i = 0; i < notesList.length; i++) { + draw[i] = notesList[i].note.render_options.draw == false ? false : true; + } + if (draw[0] && draw[1] && draw[2]) { + // Three visible notes + voices = 3; + noteU = notesList[0]; + noteM = notesList[1]; + noteL = notesList[2]; + } + else if (draw[0] && draw[1]) { + // Two visible notes, 0 & 1 + voices = 2; + noteU = notesList[0]; + noteL = notesList[1]; + } + else if (draw[0] && draw[2]) { + // Two visible notes, 0 & 2 + voices = 2; + noteU = notesList[0]; + noteL = notesList[2]; + } + else if (draw[1] && draw[2]) { + // Two visible notes, 1 & 2 + voices = 2; + noteU = notesList[1]; + noteL = notesList[2]; + } + else { + // No shift required for less than 2 visible notes + return true; + } + // for two voice backward compatibility, ensure upper voice is stems up + // for three voices, the voices must be in order (upper, middle, lower) + if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) { + noteU = notesList[1]; + noteL = notesList[0]; + } + const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift); + let xShift = 0; + // Test for two voice note intersection + if (voices === 2) { + const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5; + if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) { + noteL.note.render_options.draw = false; + } + else if (noteU.minLine <= noteL.maxLine + lineSpacing) { + if (noteU.isrest) { + // shift rest up + shiftRestVertical(noteU, noteL, 1); + } + else if (noteL.isrest) { + // shift rest down + shiftRestVertical(noteL, noteU, -1); + } + else { + //Instead of shifting notes, remove the appropriate flag + //If we are sharing a line, switch one notes stem direction. + //If we are sharing a line and in the same voice, only then offset one note + const lineDiff = Math.abs(noteU.line - noteL.line); + if (noteU.note.hasStem() && noteL.note.hasStem()) { + const noteUHead = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration); + const noteLHead = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration); + if ( + // If unison is not configured, shift + !_tables__WEBPACK_IMPORTED_MODULE_5__.Tables.UNISON || + // If we have different noteheads, shift + noteUHead !== noteLHead || + // If we have different dot values, shift + noteU.note.getModifiers().filter((item) => item.getCategory() === _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot && item.getIndex() === 0) + .length !== + noteL.note.getModifiers().filter((item) => item.getCategory() === _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot && item.getIndex() === 0) + .length || + // If the notes are quite close but not on the same line, shift + (lineDiff < 1 && lineDiff > 0) || + // If styles are different, shift + JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) { + xShift = voiceXShift + 2; + if (noteU.stemDirection === noteL.stemDirection) { + // upper voice is middle voice, so shift it right + noteU.note.setXShift(xShift); + } + else { + // shift lower voice right + noteL.note.setXShift(xShift); + } + } + else if (noteU.note.voice !== noteL.note.voice) { + //If we are not in the same voice + if (noteU.stemDirection === noteL.stemDirection) { + if (noteU.line != noteL.line) { + xShift = voiceXShift + 2; + noteU.note.setXShift(xShift); + } + else { + //same line, swap stem direction for one note + if (noteL.stemDirection === 1) { + noteL.stemDirection = -1; + noteL.note.setStemDirection(-1); + } + } + } + } //Very close whole notes + } + else if (lineDiff < 1) { + xShift = voiceXShift + 2; + if (noteU.note.duration < noteL.note.duration) { + // upper voice is shorter, so shift it right + noteU.note.setXShift(xShift); + } + else { + // shift lower voice right + noteL.note.setXShift(xShift); + } + } + else if (noteU.note.hasStem()) { + noteU.stemDirection = -noteU.note.getStemDirection(); + noteU.note.setStemDirection(noteU.stemDirection); + } + else if (noteL.note.hasStem()) { + noteL.stemDirection = -noteL.note.getStemDirection(); + noteL.note.setStemDirection(noteL.stemDirection); + } + } + } + // format complete + state.right_shift += xShift; + return true; + } + if (!noteM) + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('InvalidState', 'noteM not defined.'); + // For three voices, test if rests can be repositioned + // + // Special case 1 :: middle voice rest between two notes + // + if (noteM.isrest && !noteU.isrest && !noteL.isrest) { + if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) { + const restHeight = noteM.maxLine - noteM.minLine; + const space = noteU.minLine - noteL.maxLine; + if (restHeight < space) { + // center middle voice rest between the upper and lower voices + centerRest(noteM, noteU, noteL); + } + else { + xShift = voiceXShift + 2; // shift middle rest right + noteM.note.setXShift(xShift); + if (noteL.note.hasBeam() === false) { + noteL.stemDirection = -1; + noteL.note.setStemDirection(-1); + } + if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) { + noteU.stemDirection = 1; + noteU.note.setStemDirection(1); + } + } + // format complete + state.right_shift += xShift; + return true; + } + } + // Special case 2 :: all voices are rests + if (noteU.isrest && noteM.isrest && noteL.isrest) { + // Hide upper voice rest + noteU.note.render_options.draw = false; + // Hide lower voice rest + noteL.note.render_options.draw = false; + // format complete + state.right_shift += xShift; + return true; + } + // Test if any other rests can be repositioned + if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) { + // Hide middle voice rest + noteM.note.render_options.draw = false; + } + if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) { + // Hide middle voice rest + noteM.note.render_options.draw = false; + } + if (noteU.isrest && noteU.minLine <= noteM.maxLine) { + // shift upper voice rest up; + shiftRestVertical(noteU, noteM, 1); + } + if (noteL.isrest && noteM.minLine <= noteL.maxLine) { + // shift lower voice rest down + shiftRestVertical(noteL, noteM, -1); + } + // If middle voice intersects upper or lower voice + if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) { + // shift middle note right + xShift = voiceXShift + 2; + noteM.note.setXShift(xShift); + if (noteL.note.hasBeam() === false) { + noteL.stemDirection = -1; + noteL.note.setStemDirection(-1); + } + if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) { + noteU.stemDirection = 1; + noteU.note.setStemDirection(1); + } + } + state.right_shift += xShift; + return true; + } + static postFormat(notes) { + if (!notes) + return false; + notes.forEach((note) => note.postFormat()); + return true; + } + constructor(noteStruct) { + var _a, _b, _c; + super(noteStruct); + ////////////////////////////////////////////////////////////////////////////////////////////////// + // INSTANCE MEMBERS + this.minLine = 0; + this.maxLine = 0; + // Sorted variant of keyProps used internally + this.sortedKeyProps = []; + this.ledgerLineStyle = {}; + this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble'; + this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0; + // Pull note rendering properties. + this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType); + (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); + // if true, displace note to right + this.displaced = false; + this.dot_shiftY = 0; + // for displaced ledger lines + this.use_default_head_x = false; + // Drawing + this._noteHeads = []; + this.modifiers = []; + this.render_options = Object.assign(Object.assign({}, this.render_options), { + // font size for note heads and rests + glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.NOTATION_FONT_SCALE, + // number of stroke px to the left and right of head + stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET }); + this.calculateKeyProps(); + this.buildStem(); + // Set the stem direction + if (noteStruct.auto_stem) { + this.autoStem(); + } + else { + this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP); + } + this.reset(); + this.buildFlag(); + } + reset() { + super.reset(); + // Save prior noteHead styles & reapply them after making new noteheads. + const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle()); + this.buildNoteHeads(); + this._noteHeads.forEach((noteHead, index) => { + const noteHeadStyle = noteHeadStyles[index]; + if (noteHeadStyle) + noteHead.setStyle(noteHeadStyle); + }); + const stave = this.stave; + if (stave) { + this.setStave(stave); + } + this.calcNoteDisplacements(); + return this; + } + setBeam(beam) { + this.beam = beam; + this.calcNoteDisplacements(); + // Update stem extension if a beam is assigned. + if (this.stem) { + this.stem.setExtension(this.getStemExtension()); + } + return this; + } + // Builds a `Stem` for the note + buildStem() { + this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem({ hide: !!this.isRest() })); + return this; + } + // Builds a `NoteHead` for each key in the note + buildNoteHeads() { + this._noteHeads = []; + const stemDirection = this.getStemDirection(); + const keys = this.getKeys(); + let lastLine = undefined; + let lineDiff = undefined; + let displaced = false; + // Draw notes from bottom to top. + // For down-stem notes, we draw from top to bottom. + let start; + let end; + let step; + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { + start = 0; + end = keys.length; + step = 1; + } + else { + start = keys.length - 1; + end = -1; + step = -1; + } + for (let i = start; i !== end; i += step) { + // Building noteheads rely on sortedKeNotes in order to calculate the displacements + const noteProps = this.sortedKeyProps[i].keyProps; + const line = noteProps.line; + // Keep track of last line with a note head, so that consecutive heads + // are correctly displaced. + if (lastLine === undefined) { + lastLine = line; + } + else { + lineDiff = Math.abs(lastLine - line); + if (lineDiff === 0 || lineDiff === 0.5) { + displaced = !displaced; + } + else { + displaced = false; + this.use_default_head_x = true; + } + } + lastLine = line; + const notehead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({ + duration: this.duration, + note_type: this.noteType, + displaced, + stem_direction: stemDirection, + custom_glyph_code: noteProps.code, + glyph_font_scale: this.render_options.glyph_font_scale, + x_shift: noteProps.shift_right, + stem_up_x_offset: noteProps.stem_up_x_offset, + stem_down_x_offset: noteProps.stem_down_x_offset, + line: noteProps.line, + }); + this.addChildElement(notehead); + this._noteHeads[this.sortedKeyProps[i].index] = notehead; + } + return this._noteHeads; + } + // Automatically sets the stem direction based on the keys in the note + autoStem() { + this.setStemDirection(this.calculateOptimalStemDirection()); + } + calculateOptimalStemDirection() { + // Figure out optimal stem direction based on given notes + // minLine & maxLine rely on sortedKeyProps + this.minLine = this.sortedKeyProps[0].keyProps.line; + this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line; + const MIDDLE_LINE = 3; + const decider = (this.minLine + this.maxLine) / 2; + const stemDirection = decider < MIDDLE_LINE ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN; + return stemDirection; + } + // Calculates and stores the properties for each key in the note + calculateKeyProps() { + let lastLine; + for (let i = 0; i < this.keys.length; ++i) { + const key = this.keys[i]; + // All rests use the same position on the line. + // if (this.glyph.rest) key = this.glyph.position; + if (this.glyphProps.rest) + this.glyphProps.position = key; + const options = { octave_shift: this.octave_shift || 0, duration: this.duration }; + const props = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.keyProperties(key, this.clef, options); + if (!props) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('BadArguments', `Invalid key for note properties: ${key}`); + } + // Override line placement for default rests + if (props.key === 'R') { + if (this.duration === '1' || this.duration === 'w') { + props.line = 4; + } + else { + props.line = 3; + } + } + // Calculate displacement of this note + const line = props.line; + if (lastLine == undefined) { + lastLine = line; + } + else { + if (Math.abs(lastLine - line) === 0.5) { + this.displaced = true; + props.displaced = true; + // Have to mark the previous note as + // displaced as well, for modifier placement + if (this.keyProps.length > 0) { + this.keyProps[i - 1].displaced = true; + } + } + } + lastLine = line; + this.keyProps.push(props); + } + // Sort the notes from lowest line to highest line in sortedKeyProps + // Warn no longer required as keyProps remains unsorted + this.keyProps.forEach((keyProps, index) => { + this.sortedKeyProps.push({ keyProps, index }); + }); + this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line); + } + // Get the `BoundingBox` for the entire note + getBoundingBox() { + var _a, _b; + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', "Can't call getBoundingBox on an unformatted note."); + } + const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics(); + const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx; + let minY = 0; + let maxY = 0; + const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2; + const lineSpacing = halfLineSpacing * 2; + if (this.isRest()) { + const y = this.ys[0]; + const frac = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.durationToFraction(this.duration); + if (frac.equals(1) || frac.equals(2)) { + minY = y - halfLineSpacing; + maxY = y + halfLineSpacing; + } + else { + minY = y - this.glyphProps.line_above * lineSpacing; + maxY = y + this.glyphProps.line_below * lineSpacing; + } + } + else if (this.glyphProps.stem) { + const ys = this.getStemExtents(); + ys.baseY += halfLineSpacing * this.getStemDirection(); + minY = Math.min(ys.topY, ys.baseY); + maxY = Math.max(ys.topY, ys.baseY); + } + else { + minY = 0; + maxY = 0; + for (let i = 0; i < this.ys.length; ++i) { + const yy = this.ys[i]; + if (i === 0) { + minY = yy; + maxY = yy; + } + else { + minY = Math.min(yy, minY); + maxY = Math.max(yy, maxY); + } + } + minY -= halfLineSpacing; + maxY += halfLineSpacing; + } + return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(x, minY, w, maxY - minY); + } + // Gets the line number of the bottom note in the chord. + // If `isTopNote` is `true` then get the top note's line number instead + getLineNumber(isTopNote) { + if (!this.keyProps.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoKeyProps', "Can't get bottom note line, because note is not initialized properly."); + } + let resultLine = this.keyProps[0].line; + // No precondition assumed for sortedness of keyProps array + for (let i = 0; i < this.keyProps.length; i++) { + const thisLine = this.keyProps[i].line; + if (isTopNote) { + if (thisLine > resultLine) + resultLine = thisLine; + } + else { + if (thisLine < resultLine) + resultLine = thisLine; + } + } + return resultLine; + } + /** + * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score. + */ + isRest() { + return this.glyphProps.rest; + } + // Determine if the current note is a chord + isChord() { + return !this.isRest() && this.keys.length > 1; + } + // Determine if the `StaveNote` has a stem + hasStem() { + return this.glyphProps.stem; + } + hasFlag() { + return super.hasFlag() && !this.isRest(); + } + getStemX() { + if (this.noteType === 'r') { + return this.getCenterGlyphX(); + } + else { + // We adjust the origin of the stem because we want the stem left-aligned + // with the notehead if stemmed-down, and right-aligned if stemmed-up + return super.getStemX() + (this.stem_direction ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / (2 * -this.stem_direction) : 0); + } + } + // Get the `y` coordinate for text placed on the top/bottom of a + // note at a desired `text_line` + getYForTopText(textLine) { + const extents = this.getStemExtents(); + return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1)); + } + getYForBottomText(textLine) { + const extents = this.getStemExtents(); + return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine); + } + // Sets the current note to the provided `stave`. This applies + // `y` values to the `NoteHeads`. + setStave(stave) { + super.setStave(stave); + const ys = this._noteHeads.map((notehead) => { + notehead.setStave(stave); + return notehead.getY(); + }); + this.setYs(ys); + if (this.stem) { + const { y_top, y_bottom } = this.getNoteHeadBounds(); + this.stem.setYBounds(y_top, y_bottom); + } + return this; + } + // Check if note is shifted to the right + isDisplaced() { + return this.displaced; + } + // Sets whether shift note to the right. `displaced` is a `boolean` + setNoteDisplaced(displaced) { + this.displaced = displaced; + return this; + } + // Get the starting `x` coordinate for a `StaveTie` + getTieRightX() { + let tieStartX = this.getAbsoluteX(); + tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx; + if (this.modifierContext) + tieStartX += this.modifierContext.getRightShift(); + return tieStartX; + } + // Get the ending `x` coordinate for a `StaveTie` + getTieLeftX() { + let tieEndX = this.getAbsoluteX(); + tieEndX += this.x_shift - this.leftDisplacedHeadPx; + return tieEndX; + } + // Get the stave line on which to place a rest + getLineForRest() { + let restLine = this.keyProps[0].line; + if (this.keyProps.length > 1) { + const lastLine = this.keyProps[this.keyProps.length - 1].line; + const top = Math.max(restLine, lastLine); + const bot = Math.min(restLine, lastLine); + restLine = (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(top, bot); + } + return restLine; + } + // Get the default `x` and `y` coordinates for the provided `position` + // and key `index` + getModifierStartXY(position, index, options = {}) { + var _a, _b; + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); + } + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.'); + } + const { ABOVE, BELOW, LEFT, RIGHT } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position; + let x = 0; + if (position === LEFT) { + // FIXME: Left modifier padding, move to font file + x = -1 * 2; + } + else if (position === RIGHT) { + // FIXME: Right modifier padding, move to font file + x = this.getGlyphWidth() + this.x_shift + 2; + if (this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP && + this.hasFlag() && + (options.forceFlagRight || isInnerNoteIndex(this, index))) { + x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0; + } + } + else if (position === BELOW || position === ABOVE) { + x = this.getGlyphWidth() / 2; + } + return { + x: this.getAbsoluteX() + x, + y: this.ys[index], + }; + } + // Sets the style of the complete StaveNote, including all keys + // and the stem. + setStyle(style) { + return super.setGroupStyle(style); + } + setStemStyle(style) { + const stem = this.getStem(); + if (stem) + stem.setStyle(style); + return this; + } + getStemStyle() { + var _a; + return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle(); + } + setLedgerLineStyle(style) { + this.ledgerLineStyle = style; + } + getLedgerLineStyle() { + return this.ledgerLineStyle; + } + setFlagStyle(style) { + var _a; + (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style); + } + getFlagStyle() { + var _a; + return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle(); + } + // Sets the notehead at `index` to the provided coloring `style`. + // + // `style` is an `object` with the following properties: `shadowColor`, + // `shadowBlur`, `fillStyle`, `strokeStyle` + setKeyStyle(index, style) { + this._noteHeads[index].setStyle(style); + return this; + } + setKeyLine(index, line) { + this.keyProps[index].line = line; + this.reset(); + return this; + } + getKeyLine(index) { + return this.keyProps[index].line; + } + // Get the width of the note if it is displaced. Used for `Voice` + // formatting + getVoiceShiftWidth() { + // TODO: may need to accommodate for dot here. + return this.getGlyphWidth() * (this.displaced ? 2 : 1); + } + // Calculates and sets the extra pixels to the left or right + // if the note is displaced. + calcNoteDisplacements() { + this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN ? this.getGlyphWidth() : 0); + // For upstems with flags, the extra space is unnecessary, since it's taken + // up by the flag. + this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? this.getGlyphWidth() : 0); + } + // Pre-render formatting + preFormat() { + if (this.preFormatted) + return; + let noteHeadPadding = 0; + if (this.modifierContext) { + this.modifierContext.preFormat(); + // If there are no modifiers on this note, make sure there is adequate padding + // between the notes. + if (this.modifierContext.getWidth() === 0) { + noteHeadPadding = StaveNote.minNoteheadPadding; + } + } + let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding; + // For upward flagged notes, the width of the flag needs to be added + if (this.shouldDrawFlag() && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { + width += this.getGlyphWidth(); + // TODO: Add flag width as a separate metric + } + this.setWidth(width); + this.preFormatted = true; + } + /** + * @typedef {Object} noteHeadBounds + * @property {number} y_top the highest notehead bound + * @property {number} y_bottom the lowest notehead bound + * @property {number|Null} displaced_x the starting x for displaced noteheads + * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads + * @property {number} highest_line the highest notehead line in traditional music line + * numbering (bottom line = 1, top line = 5) + * @property {number} lowest_line the lowest notehead line + * @property {number|false} highest_displaced_line the highest staff line number + * for a displaced notehead + * @property {number|false} lowest_displaced_line + * @property {number} highest_non_displaced_line + * @property {number} lowest_non_displaced_line + */ + /** + * Get the staff line and y value for the highest & lowest noteheads + * @returns {noteHeadBounds} + */ + getNoteHeadBounds() { + // Top and bottom Y values for stem. + let yTop = +Infinity; + let yBottom = -Infinity; + let nonDisplacedX; + let displacedX; + let highestLine = this.checkStave().getNumLines(); + let lowestLine = 1; + let highestDisplacedLine; + let lowestDisplacedLine; + let highestNonDisplacedLine = highestLine; + let lowestNonDisplacedLine = lowestLine; + this._noteHeads.forEach((notehead) => { + const line = notehead.getLine(); + const y = notehead.getY(); + yTop = Math.min(y, yTop); + yBottom = Math.max(y, yBottom); + if (displacedX === undefined && notehead.isDisplaced()) { + displacedX = notehead.getAbsoluteX(); + } + if (nonDisplacedX === undefined && !notehead.isDisplaced()) { + nonDisplacedX = notehead.getAbsoluteX(); + } + highestLine = Math.max(line, highestLine); + lowestLine = Math.min(line, lowestLine); + if (notehead.isDisplaced()) { + highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine); + lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine); + } + else { + highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine); + lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine); + } + }, this); + return { + y_top: yTop, + y_bottom: yBottom, + displaced_x: displacedX, + non_displaced_x: nonDisplacedX, + highest_line: highestLine, + lowest_line: lowestLine, + highest_displaced_line: highestDisplacedLine, + lowest_displaced_line: lowestDisplacedLine, + highest_non_displaced_line: highestNonDisplacedLine, + lowest_non_displaced_line: lowestNonDisplacedLine, + }; + } + // Get the starting `x` coordinate for the noteheads + getNoteHeadBeginX() { + return this.getAbsoluteX() + this.x_shift; + } + // Get the ending `x` coordinate for the noteheads + getNoteHeadEndX() { + const xBegin = this.getNoteHeadBeginX(); + return xBegin + this.getGlyphWidth(); + } + get noteHeads() { + return this._noteHeads.slice(); + } + /** @deprecated use StaveNote.noteHeads instead. */ + get note_heads() { + showDeprecationWarningForNoteHeads(); + return this.noteHeads; + } + // Draw the ledger lines between the stave and the highest/lowest keys + drawLedgerLines() { + const stave = this.checkStave(); + const { glyphProps, render_options: { stroke_px }, } = this; + const ctx = this.checkContext(); + const width = glyphProps.getWidth() + stroke_px * 2; + const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2; + if (this.isRest()) + return; + if (!ctx) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', "Can't draw without a canvas context."); + } + const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds(); + // Early out if there are no ledger lines to draw. + if (highest_line < 6 && lowest_line > 0) + return; + const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0); + const drawLedgerLine = (y, normal, displaced) => { + let x; + if (displaced && normal) + x = min_x - stroke_px; + else if (normal) + x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px; + else + x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px; + const ledgerWidth = normal && displaced ? doubleWidth : width; + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x + ledgerWidth, y); + ctx.stroke(); + }; + const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle()); + this.applyStyle(ctx, style); + // Draw ledger lines below the staff: + for (let line = 6; line <= highest_line; ++line) { + const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line; + const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line; + drawLedgerLine(stave.getYForNote(line), normal, displaced); + } + // Draw ledger lines above the staff: + for (let line = 0; line >= lowest_line; --line) { + const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line; + const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line; + drawLedgerLine(stave.getYForNote(line), normal, displaced); + } + this.restoreStyle(ctx, style); + } + // Draw all key modifiers + drawModifiers(noteheadParam) { + const ctx = this.checkContext(); + for (let i = 0; i < this.modifiers.length; i++) { + const modifier = this.modifiers[i]; + const index = modifier.checkIndex(); + const notehead = this._noteHeads[index]; + if (notehead == noteheadParam) { + const noteheadStyle = notehead.getStyle(); + notehead.applyStyle(ctx, noteheadStyle); + modifier.setContext(ctx); + modifier.drawWithStyle(); + notehead.restoreStyle(ctx, noteheadStyle); + } + } + } + shouldDrawFlag() { + const hasStem = this.stem !== undefined; + const hasFlag = this.glyphProps.flag == true; + const hasNoBeam = this.beam === undefined; + return hasStem && hasFlag && hasNoBeam; + } + // Draw the flag for the note + drawFlag() { + var _a, _b, _c, _d, _e; + const ctx = this.checkContext(); + if (!ctx) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', "Can't draw without a canvas context."); + } + if (this.shouldDrawFlag()) { + const { y_top, y_bottom } = this.getNoteHeadBounds(); + // eslint-disable-next-line + const noteStemHeight = this.stem.getHeight(); + const flagX = this.getStemX(); + // What's with the magic +/- 2 + // ANSWER: a corner of the note stem pokes out beyond the tip of the flag. + // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely. + // Alternatively, we could shorten the stem. + const flagY = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN + ? // Down stems are below the note head and have flags on the right. + y_top - + noteStemHeight + + 2 - + (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() - + ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale()) + : // Up stems are above the note head and have flags on the right. + y_bottom - + noteStemHeight - + 2 + + (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() - + ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale()); + // Draw the Flag + (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY); + } + } + // Draw the NoteHeads + drawNoteHeads() { + const ctx = this.checkContext(); + this._noteHeads.forEach((notehead) => { + notehead.applyStyle(ctx); + ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true }); + notehead.setContext(ctx).draw(); + this.drawModifiers(notehead); + ctx.closeGroup(); + notehead.restoreStyle(ctx); + }); + } + drawStem(stemOptions) { + // GCR TODO: I can't find any context in which this is called with the stemStruct + // argument in the codebase or tests. Nor can I find a case where super.drawStem + // is called at all. Perhaps these should be removed? + const ctx = this.checkContext(); + if (stemOptions) { + this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem(stemOptions)); + } + // If we will render a flag, we shorten the stem so that the tip + // does not poke through the flag. + if (this.shouldDrawFlag() && this.stem) { + this.stem.adjustHeightForFlag(); + } + if (this.stem) { + this.stem.setContext(ctx).draw(); + } + } + /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */ + getStaveNoteScale() { + return 1.0; + } + /** + * Override stemmablenote stem extension to adjust for distance from middle line. + */ + getStemExtension() { + const super_stem_extension = super.getStemExtension(); + if (!this.glyphProps.stem) { + return super_stem_extension; + } + const stem_direction = this.getStemDirection(); + if (stem_direction !== this.calculateOptimalStemDirection()) { + return super_stem_extension; // no adjustment for manually set stem direction. + } + let mid_line_distance; + const MIDDLE_LINE = 3; + if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { + // Note that the use of maxLine here instead of minLine might + // seem counterintuitive, but in the case of (say) treble clef + // chord(F2, E4) stem up, we do not want to extend the stem because + // of F2, when a normal octave-length stem above E4 is fine. + // + // maxLine and minLine are set in calculateOptimalStemDirection() so + // will be known. + mid_line_distance = MIDDLE_LINE - this.maxLine; + } + else { + mid_line_distance = this.minLine - MIDDLE_LINE; + } + // how many lines more than an octave is the relevant notehead? + const lines_over_octave_from_mid_line = mid_line_distance - 3.5; + if (lines_over_octave_from_mid_line <= 0) { + return super_stem_extension; + } + const stave = this.getStave(); + let spacing_between_lines = 10; + if (stave != undefined) { + spacing_between_lines = stave.getSpacingBetweenLines(); + } + return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines; + } + // Draws all the `StaveNote` parts. This is the main drawing method. + draw() { + if (this.render_options.draw === false) + return; + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', "Can't draw note without Y values."); + } + const ctx = this.checkContext(); + const xBegin = this.getNoteHeadBeginX(); + const shouldRenderStem = this.hasStem() && !this.beam; + // Format note head x positions + this._noteHeads.forEach((notehead) => notehead.setX(xBegin)); + if (this.stem) { + // Format stem x positions + const stemX = this.getStemX(); + this.stem.setNoteHeadXBounds(stemX, stemX); + } + L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys); + // Apply the overall style -- may be contradicted by local settings: + this.applyStyle(); + ctx.openGroup('stavenote', this.getAttribute('id')); + this.drawLedgerLines(); + if (shouldRenderStem) + this.drawStem(); + this.drawNoteHeads(); + this.drawFlag(); + ctx.closeGroup(); + this.restoreStyle(); + this.setRendered(); + } +} +StaveNote.DEBUG = false; + + + +/***/ }), + +/***/ "./src/staverepetition.ts": +/*!********************************!*\ + !*** ./src/staverepetition.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Repetition": () => (/* binding */ Repetition) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Larry Kuhns 2011 + + + + + +class Repetition extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Repetition; + } + constructor(type, x, y_shift) { + super(); + this.symbol_type = type; + this.x = x; + this.x_shift = 0; + this.y_shift = y_shift; + this.resetFont(); + } + setShiftX(x) { + this.x_shift = x; + return this; + } + setShiftY(y) { + this.y_shift = y; + return this; + } + draw(stave, x) { + this.setRendered(); + switch (this.symbol_type) { + case Repetition.type.CODA_RIGHT: + this.drawCodaFixed(stave, x + stave.getWidth()); + break; + case Repetition.type.CODA_LEFT: + this.drawSymbolText(stave, x, 'Coda', true); + break; + case Repetition.type.SEGNO_LEFT: + this.drawSignoFixed(stave, x); + break; + case Repetition.type.SEGNO_RIGHT: + this.drawSignoFixed(stave, x + stave.getWidth()); + break; + case Repetition.type.DC: + this.drawSymbolText(stave, x, 'D.C.', false); + break; + case Repetition.type.DC_AL_CODA: + this.drawSymbolText(stave, x, 'D.C. al', true); + break; + case Repetition.type.DC_AL_FINE: + this.drawSymbolText(stave, x, 'D.C. al Fine', false); + break; + case Repetition.type.DS: + this.drawSymbolText(stave, x, 'D.S.', false); + break; + case Repetition.type.DS_AL_CODA: + this.drawSymbolText(stave, x, 'D.S. al', true); + break; + case Repetition.type.DS_AL_FINE: + this.drawSymbolText(stave, x, 'D.S. al Fine', false); + break; + case Repetition.type.FINE: + this.drawSymbolText(stave, x, 'Fine', false); + break; + case Repetition.type.TO_CODA: + this.drawSymbolText(stave, x, 'To', true); + break; + default: + break; + } + return this; + } + drawCodaFixed(stave, x) { + const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' }); + return this; + } + drawSignoFixed(stave, x) { + const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' }); + return this; + } + drawSymbolText(stave, x, text, draw_coda) { + var _a; + const ctx = stave.checkContext(); + ctx.save(); + ctx.setFont(this.textFont); + let text_x = 0; + let symbol_x = 0; + const modifierWidth = stave.getNoteStartX() - this.x; + switch (this.symbol_type) { + // To the left with symbol + case Repetition.type.CODA_LEFT: + // Offset Coda text to right of stave beginning + text_x = this.x + stave.getVerticalBarWidth(); + symbol_x = + text_x + + ctx.measureText(text).width + + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); + break; + // To the right without symbol + case Repetition.type.DC: + case Repetition.type.DC_AL_FINE: + case Repetition.type.DS: + case Repetition.type.DS_AL_FINE: + case Repetition.type.FINE: + text_x = + this.x + + x + + this.x_shift + + stave.getWidth() - + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') - + modifierWidth - + ctx.measureText(text).width; + break; + // To the right with symbol + default: + text_x = + this.x + + x + + this.x_shift + + stave.getWidth() - + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') - + modifierWidth - + ctx.measureText(text).width - + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); + symbol_x = + text_x + + ctx.measureText(text).width + + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); + break; + } + const y = stave.getYForTopText(stave.getNumLines()) + + this.y_shift + + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY'); + if (draw_coda) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, symbol_x, y, _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', { + category: 'coda', + }); + } + ctx.fillText(text, text_x, y + 5); + ctx.restore(); + return this; + } +} +Repetition.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE / 3, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; +Repetition.type = { + NONE: 1, + CODA_LEFT: 2, + CODA_RIGHT: 3, + SEGNO_LEFT: 4, + SEGNO_RIGHT: 5, + DC: 6, + DC_AL_CODA: 7, + DC_AL_FINE: 8, + DS: 9, + DS_AL_CODA: 10, + DS_AL_FINE: 11, + FINE: 12, + TO_CODA: 13, // To Coda at end of stave +}; + + + +/***/ }), + +/***/ "./src/stavesection.ts": +/*!*****************************!*\ + !*** ./src/stavesection.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveSection": () => (/* binding */ StaveSection) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Larry Kuhns 2011 + + + + +class StaveSection extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveSection; + } + constructor(section, x, shift_y, drawRect = true) { + super(); + this.setWidth(16); + this.section = section; + this.x = x; + this.shift_x = 0; + this.shift_y = shift_y; + this.drawRect = drawRect; + this.resetFont(); + } + setStaveSection(section) { + this.section = section; + return this; + } + setShiftX(x) { + this.shift_x = x; + return this; + } + setShiftY(y) { + this.shift_y = y; + return this; + } + draw(stave, shift_x) { + const borderWidth = 2; + const padding = 2; + const ctx = stave.checkContext(); + this.setRendered(); + ctx.save(); + ctx.setLineWidth(borderWidth); + ctx.setFont(this.textFont); + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont); + const textWidth = textFormatter.getWidthForTextInPx(this.section); + const textY = textFormatter.getYForStringInPx(this.section); + const textHeight = textY.height; + const headroom = -1 * textY.yMin; + const width = textWidth + 2 * padding; // add left & right padding + const height = textHeight + 2 * padding; // add top & bottom padding + // Seems to be a good default y + const y = stave.getYForTopText(1.5) + this.shift_y; + const x = this.x + shift_x; + if (this.drawRect) { + ctx.beginPath(); + ctx.rect(x, y - height + headroom, width, height); + ctx.stroke(); + } + ctx.fillText(this.section, x + padding, y - padding); + ctx.restore(); + return this; + } +} +StaveSection.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: 10, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stavetempo.ts": +/*!***************************!*\ + !*** ./src/stavetempo.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveTempo": () => (/* binding */ StaveTempo) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Radosaw Eichler 2012 + + + + + + +class StaveTempo extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StaveTempo; + } + constructor(tempo, x, shift_y) { + super(); + /** Font size for note. */ + this.render_options = { glyph_font_scale: 30 }; + this.tempo = tempo; + this.position = _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifierPosition.ABOVE; + this.x = x; + this.shift_x = 10; + this.shift_y = shift_y; + this.resetFont(); + } + setTempo(tempo) { + this.tempo = tempo; + return this; + } + setShiftX(x) { + this.shift_x = x; + return this; + } + setShiftY(y) { + this.shift_y = y; + return this; + } + draw(stave, shift_x) { + const ctx = stave.checkContext(); + this.setRendered(); + const options = this.render_options; + const scale = options.glyph_font_scale / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE; + const name = this.tempo.name; + const duration = this.tempo.duration; + const dots = this.tempo.dots || 0; + const bpm = this.tempo.bpm; + let x = this.x + this.shift_x + shift_x; + const y = stave.getYForTopText(1) + this.shift_y; + ctx.save(); + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont); + if (name) { + ctx.setFont(this.textFont); + ctx.fillText(name, x, y); + x += textFormatter.getWidthForTextInPx(name); + } + if (duration && bpm) { + // Override the weight and style. + const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' }); + ctx.setFont(noteTextFont); + const noteTextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(noteTextFont); + if (name) { + x += noteTextFormatter.getWidthForTextInPx('|'); + ctx.fillText('(', x, y); + x += noteTextFormatter.getWidthForTextInPx('('); + } + const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(duration); + x += 3 * scale; + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head); + x += _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale); + // Draw stem and flags + if (glyphProps.stem) { + let stem_height = 30; + if (glyphProps.beam_count) + stem_height += 3 * (glyphProps.beam_count - 1); + stem_height *= scale; + const y_top = y - stem_height; + ctx.fillRect(x - scale, y_top, scale, stem_height); + if (glyphProps.code && glyphProps.code_flag_upstem) { + const flagMetrics = _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, { + category: 'flag.staveTempo', + }); + x += (flagMetrics.width * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution; + } + } + // Draw dot + for (let i = 0; i < dots; i++) { + x += 6 * scale; + ctx.beginPath(); + ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false); + ctx.fill(); + } + ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y); + } + ctx.restore(); + return this; + } +} +StaveTempo.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: 14, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stavetext.ts": +/*!**************************!*\ + !*** ./src/stavetext.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveText": () => (/* binding */ StaveText) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Taehoon Moon 2014 + + + + + +class StaveText extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveText; + } + constructor(text, position, options = {}) { + super(); + this.setWidth(16); + this.text = text; + this.position = position; + this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: _textnote__WEBPACK_IMPORTED_MODULE_2__.TextNote.Justification.CENTER }, options); + this.resetFont(); + } + setStaveText(text) { + this.text = text; + return this; + } + setShiftX(x) { + this.shift_x = x; + return this; + } + setShiftY(y) { + this.shift_y = y; + return this; + } + setText(text) { + this.text = text; + return this; + } + draw(stave) { + const ctx = stave.checkContext(); + this.setRendered(); + ctx.save(); + ctx.setLineWidth(2); + ctx.setFont(this.textFont); + const text_width = ctx.measureText('' + this.text).width; + let x; + let y; + switch (this.position) { + case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT: + case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.RIGHT: + y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y; + if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT) { + x = stave.getX() - text_width - 24 + this.options.shift_x; + } + else { + x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x; + } + break; + case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE: + case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BELOW: + x = stave.getX() + this.options.shift_x; + if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.CENTER) { + x += stave.getWidth() / 2 - text_width / 2; + } + else if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.RIGHT) { + x += stave.getWidth() - text_width; + } + if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE) { + y = stave.getYForTopText(2) + this.options.shift_y; + } + else { + y = stave.getYForBottomText(2) + this.options.shift_y; + } + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.'); + } + ctx.fillText('' + this.text, x, y + 4); + ctx.restore(); + return this; + } +} +StaveText.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: 16, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stavetie.ts": +/*!*************************!*\ + !*** ./src/stavetie.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveTie": () => (/* binding */ StaveTie) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// This class implements varies types of ties between contiguous notes. The +// ties include: regular ties, hammer ons, pull offs, and slides. + + + +class StaveTie extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveTie; + } + /** + * @param notes is a struct that has: + * + * { + * first_note: Note, + * last_note: Note, + * first_indices: [n1, n2, n3], + * last_indices: [n1, n2, n3] + * } + * + * @param text + */ + constructor(notes, text) { + super(); + this.setNotes(notes); + this.text = text; + this.render_options = { + cp1: 8, + cp2: 12, + text_shift_x: 0, + first_x_shift: 0, + last_x_shift: 0, + y_shift: 7, + tie_spacing: 0, + }; + this.resetFont(); + } + setDirection(direction) { + this.direction = direction; + return this; + } + /** + * Set the notes to attach this tie to. + * + * @param {!Object} notes The notes to tie up. + */ + setNotes(notes) { + if (!notes.first_note && !notes.last_note) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.'); + } + if (!notes.first_indices) { + notes.first_indices = [0]; + } + if (!notes.last_indices) { + notes.last_indices = [0]; + } + if (notes.first_indices.length !== notes.last_indices.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tied notes must have same number of indices.'); + } + this.notes = notes; + return this; + } + /** + * @return {boolean} Returns true if this is a partial bar. + */ + isPartial() { + return !this.notes.first_note || !this.notes.last_note; + } + renderTie(params) { + if (params.first_ys.length === 0 || params.last_ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'No Y-values to render'); + } + const ctx = this.checkContext(); + let cp1 = this.render_options.cp1; + let cp2 = this.render_options.cp2; + if (Math.abs(params.last_x_px - params.first_x_px) < 10) { + cp1 = 2; + cp2 = 8; + } + const first_x_shift = this.render_options.first_x_shift; + const last_x_shift = this.render_options.last_x_shift; + const y_shift = this.render_options.y_shift * params.direction; + // setNotes(...) verified that first_indices and last_indices are not undefined. + // As a result, we use the ! non-null assertion operator here. + // eslint-disable-next-line + const first_indices = this.notes.first_indices; + // eslint-disable-next-line + const last_indices = this.notes.last_indices; + this.applyStyle(); + ctx.openGroup('stavetie', this.getAttribute('id')); + for (let i = 0; i < first_indices.length; ++i) { + const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2; + const first_y_px = params.first_ys[first_indices[i]] + y_shift; + const last_y_px = params.last_ys[last_indices[i]] + y_shift; + if (isNaN(first_y_px) || isNaN(last_y_px)) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Bad indices for tie rendering.'); + } + const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction; + const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction; + ctx.beginPath(); + ctx.moveTo(params.first_x_px + first_x_shift, first_y_px); + ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px); + ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px); + ctx.closePath(); + ctx.fill(); + } + ctx.closeGroup(); + this.restoreStyle(); + } + renderText(first_x_px, last_x_px) { + var _a, _b, _c; + if (!this.text) + return; + const ctx = this.checkContext(); + let center_x = (first_x_px + last_x_px) / 2; + center_x -= ctx.measureText(this.text).width / 2; + const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave(); + if (stave) { + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1); + ctx.restore(); + } + } + /** + * Returns the TieNotes structure of the first and last note this tie connects. + */ + getNotes() { + return this.notes; + } + draw() { + this.checkContext(); + this.setRendered(); + const first_note = this.notes.first_note; + const last_note = this.notes.last_note; + // Provide some default values so the compiler doesn't complain. + let first_x_px = 0; + let last_x_px = 0; + let first_ys = [0]; + let last_ys = [0]; + let stem_direction = 0; + if (first_note) { + first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing; + stem_direction = first_note.getStemDirection(); + first_ys = first_note.getYs(); + } + else if (last_note) { + const stave = last_note.checkStave(); + first_x_px = stave.getTieStartX(); + first_ys = last_note.getYs(); + this.notes.first_indices = this.notes.last_indices; + } + if (last_note) { + last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing; + stem_direction = last_note.getStemDirection(); + last_ys = last_note.getYs(); + } + else if (first_note) { + const stave = first_note.checkStave(); + last_x_px = stave.getTieEndX(); + last_ys = first_note.getYs(); + this.notes.last_indices = this.notes.first_indices; + } + if (this.direction) { + stem_direction = this.direction; + } + this.renderTie({ + first_x_px, + last_x_px, + first_ys, + last_ys, + direction: stem_direction, + }); + this.renderText(first_x_px, last_x_px); + return true; + } +} +/** Default text font. */ +StaveTie.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); + + + +/***/ }), + +/***/ "./src/stavevolta.ts": +/*!***************************!*\ + !*** ./src/stavevolta.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Volta": () => (/* binding */ Volta), +/* harmony export */ "VoltaType": () => (/* binding */ VoltaType) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Larry Kuhns 2011 + + + +var VoltaType; +(function (VoltaType) { + VoltaType[VoltaType["NONE"] = 1] = "NONE"; + VoltaType[VoltaType["BEGIN"] = 2] = "BEGIN"; + VoltaType[VoltaType["MID"] = 3] = "MID"; + VoltaType[VoltaType["END"] = 4] = "END"; + VoltaType[VoltaType["BEGIN_END"] = 5] = "BEGIN_END"; +})(VoltaType || (VoltaType = {})); +class Volta extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Volta; + } + static get type() { + return VoltaType; + } + constructor(type, number, x, y_shift) { + super(); + this.volta = type; + this.x = x; + this.y_shift = y_shift; + this.number = number; + this.resetFont(); + } + setShiftY(y) { + this.y_shift = y; + return this; + } + draw(stave, x) { + const ctx = stave.checkContext(); + this.setRendered(); + let width = stave.getWidth() - x; // don't include x (offset) for width + const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; + const vert_height = 1.5 * stave.getSpacingBetweenLines(); + switch (this.volta) { + case VoltaType.BEGIN: + ctx.fillRect(this.x + x, top_y, 1, vert_height); + break; + case VoltaType.END: + width -= 5; + ctx.fillRect(this.x + x + width, top_y, 1, vert_height); + break; + case VoltaType.BEGIN_END: + width -= 3; + ctx.fillRect(this.x + x, top_y, 1, vert_height); + ctx.fillRect(this.x + x + width, top_y, 1, vert_height); + break; + default: + break; + } + // If the beginning of a volta, draw measure number + if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) { + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText(this.number, this.x + x + 5, top_y + 15); + ctx.restore(); + } + ctx.fillRect(this.x + x, top_y, width, 1); + return this; + } +} +Volta.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: 9, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stem.ts": +/*!*********************!*\ + !*** ./src/stem.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Stem": () => (/* binding */ Stem) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// This file implements the `Stem` object. Generally this object is handled +// by its parent `StemmableNote`. + + + + +// eslint-disable-next-line +function L(...args) { + if (Stem.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Stem', args); +} +class Stem extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Stem; + } + // Stem directions + static get UP() { + return 1; + } + static get DOWN() { + return -1; + } + // Theme + static get WIDTH() { + return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_WIDTH; + } + static get HEIGHT() { + return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_HEIGHT; + } + constructor(options) { + super(); + this.stem_up_y_offset = 0; + this.stem_down_y_offset = 0; + this.stem_up_y_base_offset = 0; + this.stem_down_y_base_offset = 0; + // Default notehead x bounds + this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0; + this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0; + // Y bounds for top/bottom most notehead + this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0; + this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0; + // Stem top extension + this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0; + // Direction of the stem + this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0; + // Flag to override all draw calls + this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false; + this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false; + this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0; + // Use to adjust the rendered height without affecting + // the results of `.getExtents()` + this.renderHeightAdjustment = 0; + this.setOptions(options); + } + setOptions(options) { + // Changing where the stem meets the head + this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0; + this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0; + this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0; + this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0; + } + // Set the x bounds for the default notehead + setNoteHeadXBounds(x_begin, x_end) { + this.x_begin = x_begin; + this.x_end = x_end; + return this; + } + // Set the direction of the stem in relation to the noteheads + setDirection(direction) { + this.stem_direction = direction; + } + // Set the extension for the stem, generally for flags or beams + setExtension(ext) { + this.stem_extension = ext; + } + getExtension() { + return this.stem_extension; + } + // The the y bounds for the top and bottom noteheads + setYBounds(y_top, y_bottom) { + this.y_top = y_top; + this.y_bottom = y_bottom; + } + // Gets the entire height for the stem + getHeight() { + const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset; + const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping. + return unsigned_height * this.stem_direction; + } + getBoundingBox() { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NotImplemented', 'getBoundingBox() not implemented.'); + } + // Get the y coordinates for the very base of the stem to the top of + // the extension + getExtents() { + const isStemUp = this.stem_direction === Stem.UP; + const ys = [this.y_top, this.y_bottom]; + const stemHeight = Stem.HEIGHT + this.stem_extension; + const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys); + const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys); + const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction; + return { topY: stemTipY, baseY: outerMostNoteheadY }; + } + setVisibility(isVisible) { + this.hide = !isVisible; + return this; + } + setStemlet(isStemlet, stemletHeight) { + this.isStemlet = isStemlet; + this.stemletHeight = stemletHeight; + return this; + } + adjustHeightForFlag() { + this.renderHeightAdjustment = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3); + } + adjustHeightForBeam() { + this.renderHeightAdjustment = -Stem.WIDTH / 2; + } + // Render the stem onto the canvas + draw() { + this.setRendered(); + if (this.hide) + return; + const ctx = this.checkContext(); + let stem_x; + let stem_y; + const stem_direction = this.stem_direction; + let y_base_offset = 0; + if (stem_direction === Stem.DOWN) { + // Down stems are rendered to the left of the head. + stem_x = this.x_begin; + stem_y = this.y_top + this.stem_down_y_offset; + y_base_offset = this.stem_down_y_base_offset; + } + else { + // Up stems are rendered to the right of the head. + stem_x = this.x_end; + stem_y = this.y_bottom - this.stem_up_y_offset; + y_base_offset = this.stem_up_y_base_offset; + } + const stemHeight = this.getHeight(); + L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom); + // The offset from the stem's base which is required fo satisfy the stemlet height + const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0; + // Draw the stem + ctx.save(); + this.applyStyle(); + ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true }); + ctx.beginPath(); + ctx.setLineWidth(Stem.WIDTH); + ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset); + ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction); + ctx.stroke(); + ctx.closeGroup(); + this.restoreStyle(); + ctx.restore(); + } +} +/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */ +Stem.DEBUG = false; + + + +/***/ }), + +/***/ "./src/stemmablenote.ts": +/*!******************************!*\ + !*** ./src/stemmablenote.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StemmableNote": () => (/* binding */ StemmableNote) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// `StemmableNote` is an abstract interface for notes with optional stems. +// Examples of stemmable notes are `StaveNote` and `TabNote` + + + + + + +class StemmableNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StemmableNote; + } + constructor(noteStruct) { + super(noteStruct); + } + // Get and set the note's `Stem` + getStem() { + return this.stem; + } + checkStem() { + if (!this.stem) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to instance'); + } + return this.stem; + } + setStem(stem) { + this.stem = stem; + this.addChildElement(stem); + return this; + } + // Builds and sets a new stem + buildStem() { + const stem = new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem(); + this.setStem(stem); + return this; + } + buildFlag(category = 'flag') { + const { glyphProps } = this; + if (this.hasFlag()) { + const flagCode = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem; + if (flagCode) + this.flag = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(flagCode, this.render_options.glyph_font_scale, { category }); + } + } + // Get the custom glyph associated with the outer note head on the base of the stem. + getBaseCustomNoteHeadGlyphProps() { + if (this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + return this.customGlyphs[this.customGlyphs.length - 1]; + } + else { + return this.customGlyphs[0]; + } + } + // Get the full length of stem + getStemLength() { + return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT + this.getStemExtension(); + } + // Get the number of beams for this duration + getBeamCount() { + const glyphProps = this.getGlyphProps(); + if (glyphProps) { + return glyphProps.beam_count; + } + else { + return 0; + } + } + // Get the minimum length of stem + getStemMinimumLength() { + const frac = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToFraction(this.duration); + let length = frac.value() <= 1 ? 0 : 20; + // if note is flagged, cannot shorten beam + switch (this.duration) { + case '8': + if (this.beam == undefined) + length = 35; + break; + case '16': + length = this.beam == undefined ? 35 : 25; + break; + case '32': + length = this.beam == undefined ? 45 : 35; + break; + case '64': + length = this.beam == undefined ? 50 : 40; + break; + case '128': + length = this.beam == undefined ? 55 : 45; + break; + default: + break; + } + return length; + } + // Get/set the direction of the stem + getStemDirection() { + if (!this.stem_direction) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); + return this.stem_direction; + } + setStemDirection(direction) { + if (!direction) + direction = _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + if (direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArgument', `Invalid stem direction: ${direction}`); + } + this.stem_direction = direction; + // Reset and reformat everything. Flag has to be built before calling getStemExtension. + this.reset(); + if (this.hasFlag()) { + this.buildFlag(); + } + this.beam = undefined; + if (this.stem) { + this.stem.setDirection(direction); + this.stem.setExtension(this.getStemExtension()); + // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten + // the stem appropriately. If there's no custom note head, lookup the standard notehead. + const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps(); + // Get the font-specific customizations for the note heads. + const offsets = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, { + offsetYBaseStemUp: 0, + offsetYTopStemUp: 0, + offsetYBaseStemDown: 0, + offsetYTopStemDown: 0, + }); + // Configure the stem to use these offsets. + this.stem.setOptions({ + stem_up_y_offset: offsets.offsetYTopStemUp, + stem_down_y_offset: offsets.offsetYTopStemDown, + stem_up_y_base_offset: offsets.offsetYBaseStemUp, + stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset, + }); + } + if (this.preFormatted) { + this.preFormat(); + } + return this; + } + // Get the `x` coordinate of the stem + getStemX() { + const x_begin = this.getAbsoluteX() + this.x_shift; + const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth(); + const stem_x = this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? x_begin : x_end; + return stem_x; + } + // Get the `x` coordinate for the center of the glyph. + // Used for `TabNote` stems and stemlets over rests + getCenterGlyphX() { + return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2; + } + // Get the stem extension for the current duration + getStemExtension() { + const glyphProps = this.getGlyphProps(); + if (this.stem_extension_override != undefined) { + return this.stem_extension_override; + } + // Use stem_beam_extension with beams + if (this.beam) { + return glyphProps.stem_beam_extension; + } + if (glyphProps) { + return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension; + } + return 0; + } + // Set the stem length to a specific. Will override the default length. + setStemLength(height) { + this.stem_extension_override = height - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT; + return this; + } + // Get the top and bottom `y` values of the stem. + getStemExtents() { + if (!this.stem) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); + return this.stem.getExtents(); + } + /** Gets the `y` value for the top modifiers at a specific `textLine`. */ + getYForTopText(textLine) { + const stave = this.checkStave(); + if (this.hasStem()) { + const extents = this.getStemExtents(); + if (!extents) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.'); + return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1)); + } + else { + return stave.getYForTopText(textLine); + } + } + /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */ + getYForBottomText(textLine) { + const stave = this.checkStave(); + if (this.hasStem()) { + const extents = this.getStemExtents(); + if (!extents) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.'); + return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine); + } + else { + return stave.getYForBottomText(textLine); + } + } + hasFlag() { + return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(this.duration).flag == true && !this.beam; + } + /** Post formats the note. */ + postFormat() { + var _a; + (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat(); + this.postFormatted = true; + return this; + } + /** Renders the stem onto the canvas. */ + drawStem(stemOptions) { + var _a; + this.checkContext(); + this.setRendered(); + this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem(stemOptions)); + (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw(); + } +} + + +/***/ }), + +/***/ "./src/stringnumber.ts": +/*!*****************************!*\ + !*** ./src/stringnumber.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StringNumber": () => (/* binding */ StringNumber) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Larry Kuhns +// +// This file implements the `StringNumber` class which renders string +// number annotations beside notes. + + + + + + + +class StringNumber extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StringNumber; + } + static get metrics() { + var _a; + return ((_a = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : { + verticalPadding: 0, + stemPadding: 0, + leftPadding: 0, + rightPadding: 0, + }); + } + // ## Static Methods + // Arrange string numbers inside a `ModifierContext` + static format(nums, state) { + /** + * The modifier context's left_shift state. + */ + const left_shift = state.left_shift; + /** + * The modifier context's right_shift state. + */ + const right_shift = state.right_shift; + const num_spacing = 1; + if (!nums || nums.length === 0) + return false; + const nums_list = []; + let prev_note = null; + let extraXSpaceForDisplacedNotehead = 0; + let shift_right = 0; + const modLines = 0; + for (let i = 0; i < nums.length; ++i) { + const num = nums[i]; + const note = num.getNote(); + const pos = num.getPosition(); + if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(note)) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoStaveNote'); + } + const index = num.checkIndex(); + const props = note.getKeyProps()[index]; + const mc = note.getModifierContext(); + const verticalSpaceNeeded = (num.radius * 2) / _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE + 0.5; + if (mc) { + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) { + num.text_line = mc.getState().top_text_line; + state.top_text_line += verticalSpaceNeeded; + } + else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) { + num.text_line = mc.getState().text_line; + state.text_line += verticalSpaceNeeded; + } + } + if (note !== prev_note) { + for (let n = 0; n < note.keys.length; ++n) { + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { + extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead); + } + if (right_shift === 0) { + shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right); + } + } + prev_note = note; + } + const glyphLine = modLines === 0 ? props.line : modLines; + nums_list.push({ + pos, + note, + num, + line: glyphLine, + shiftL: extraXSpaceForDisplacedNotehead, + shiftR: shift_right, + }); + } + // Sort string numbers by line number. + nums_list.sort((a, b) => b.line - a.line); + let num_shiftR = 0; + let x_widthL = 0; + let x_widthR = 0; + let last_line = null; + let last_note = null; + for (let i = 0; i < nums_list.length; ++i) { + const note = nums_list[i].note; + const pos = nums_list[i].pos; + const num = nums_list[i].num; + const line = nums_list[i].line; + const shiftR = nums_list[i].shiftR; + // Reset the position of the string number every line. + if (line !== last_line || note !== last_note) { + num_shiftR = right_shift + shiftR; + } + const num_width = num.getWidth() + num_spacing; + let num_x_shift = 0; + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { + num.setXShift(left_shift + extraXSpaceForDisplacedNotehead); + num_x_shift = num_width; // spacing + x_widthL = Math.max(num_x_shift, x_widthL); + } + else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) { + num.setXShift(num_shiftR); + num_x_shift += num_width; // spacing + x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR; + } + last_line = line; + last_note = note; + } + state.left_shift += x_widthL; + state.right_shift += x_widthR; + return true; + } + constructor(number) { + super(); + this.string_number = number; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE; // Default position above stem or note head + this.x_shift = 0; + this.y_shift = 0; + this.text_line = 0; + this.stem_offset = 0; + this.x_offset = 0; // Horizontal offset from default + this.y_offset = 0; // Vertical offset from default + this.dashed = true; // true - draw dashed extension false - no extension + this.leg = _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line + this.radius = 8; + this.drawCircle = true; + this.setWidth(this.radius * 2 + 4); + this.resetFont(); + } + setLineEndType(leg) { + if (leg >= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE && leg <= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN) { + this.leg = leg; + } + return this; + } + setStringNumber(number) { + this.string_number = number; + return this; + } + setOffsetX(x) { + this.x_offset = x; + return this; + } + setOffsetY(y) { + this.y_offset = y; + return this; + } + setLastNote(note) { + this.last_note = note; + return this; + } + setDashed(dashed) { + this.dashed = dashed; + return this; + } + setDrawCircle(drawCircle) { + this.drawCircle = drawCircle; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index); + const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP; + let dot_x = start.x + this.x_shift + this.x_offset; + let stem_ext = {}; + if (note.hasStem()) { + stem_ext = note.checkStem().getExtents(); + } + let dot_y = start.y + this.y_shift + this.y_offset; + switch (this.position) { + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE: + { + const ys = note.getYs(); + dot_y = ys.reduce((a, b) => (a < b ? a : b)); + if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { + dot_y = stem_ext.topY + StringNumber.metrics.stemPadding; + } + dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE; + } + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW: + { + const ys = note.getYs(); + dot_y = ys.reduce((a, b) => (a > b ? a : b)); + if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN) { + dot_y = stem_ext.topY - StringNumber.metrics.stemPadding; + } + dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE; + } + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT: + dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding; + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT: + dot_x += this.radius / 2 + StringNumber.metrics.rightPadding; + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid`); + } + ctx.save(); + if (this.drawCircle) { + ctx.beginPath(); + ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false); + ctx.setLineWidth(1.5); + ctx.stroke(); + } + ctx.setFont(this.textFont); + const x = dot_x - ctx.measureText(this.string_number).width / 2; + ctx.fillText('' + this.string_number, x, dot_y + 4.5); + const lastNote = this.last_note; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(lastNote)) { + // Only StemmableNote objects have getStemX(). + const end = lastNote.getStemX() - note.getX() + 5; + ctx.setStrokeStyle('#000000'); + ctx.setLineCap('round'); + ctx.setLineWidth(0.6); + if (this.dashed) { + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]); + } + else { + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]); + } + let len; + let pattern; + switch (this.leg) { + case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.UP: + len = -10; + pattern = this.dashed ? [3, 3] : [3, 0]; + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern); + break; + case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN: + len = 10; + pattern = this.dashed ? [3, 3] : [3, 0]; + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern); + break; + default: + break; + } + } + ctx.restore(); + } +} +StringNumber.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/strokes.ts": +/*!************************!*\ + !*** ./src/strokes.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Stroke": () => (/* binding */ Stroke) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Larry Kuhns +// +// This file implements the `Stroke` class which renders chord strokes +// that can be arpeggiated, brushed, rasquedo, etc. + + + + + + +class Stroke extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Stroke; + } + // Arrange strokes inside `ModifierContext` + static format(strokes, state) { + const left_shift = state.left_shift; + const stroke_spacing = 0; + if (!strokes || strokes.length === 0) + return false; + const strokeList = strokes.map((stroke) => { + const note = stroke.getNote(); + const index = stroke.checkIndex(); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) { + // Only StaveNote objects have getKeyProps(). + const { line } = note.getKeyProps()[index]; + const shift = note.getLeftDisplacedHeadPx(); + return { line, shift, stroke }; + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) { + // Only TabNote objects have getPositions(). + const { str: string } = note.getPositions()[index]; + return { line: string, shift: 0, stroke }; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('Internal', 'Unexpected instance.'); + } + }); + const strokeShift = left_shift; + // There can only be one stroke .. if more than one, they overlay each other + const xShift = strokeList.reduce((xShift, { stroke, shift }) => { + stroke.setXShift(strokeShift + shift); + return Math.max(stroke.getWidth() + stroke_spacing, xShift); + }, 0); + state.left_shift += xShift; + return true; + } + constructor(type, options) { + super(); + this.options = Object.assign({ all_voices: true }, options); + // multi voice - span stroke across all voices if true + this.all_voices = this.options.all_voices; + // multi voice - end note of stroke, set in draw() + this.type = type; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT; + this.render_options = { + font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, + }; + this.resetFont(); + this.setXShift(0); + this.setWidth(10); + } + getPosition() { + return this.position; + } + addEndNote(note) { + this.note_end = note; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index); + let ys = note.getYs(); + let topY = start.y; + let botY = start.y; + const x = start.x - 5; + const line_space = note.checkStave().getSpacingBetweenLines(); + const notes = this.checkModifierContext().getMembers(note.getCategory()); + for (let i = 0; i < notes.length; i++) { + const note = notes[i]; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isNote)(note)) { + // Only Note objects have getYs(). + // note is an instance of either StaveNote or TabNote. + ys = note.getYs(); + for (let n = 0; n < ys.length; n++) { + if (this.note === notes[i] || this.all_voices) { + topY = Math.min(topY, ys[n]); + botY = Math.max(botY, ys[n]); + } + } + } + } + let arrow = ''; + let arrow_shift_x = 0; + let arrow_y = 0; + let text_shift_x = 0; + let text_y = 0; + switch (this.type) { + case Stroke.Type.BRUSH_DOWN: + arrow = 'arrowheadBlackUp'; + arrow_shift_x = -3; + arrow_y = topY - line_space / 2 + 10; + botY += line_space / 2; + break; + case Stroke.Type.BRUSH_UP: + arrow = 'arrowheadBlackDown'; + arrow_shift_x = 0.5; + arrow_y = botY + line_space / 2; + topY -= line_space / 2; + break; + case Stroke.Type.ROLL_DOWN: + case Stroke.Type.RASQUEDO_DOWN: + arrow = 'arrowheadBlackUp'; + arrow_shift_x = -3; + text_shift_x = this.x_shift + arrow_shift_x - 2; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) { + topY += 1.5 * line_space; + if ((botY - topY) % 2 !== 0) { + botY += 0.5 * line_space; + } + else { + botY += line_space; + } + arrow_y = topY - line_space; + text_y = botY + line_space + 2; + } + else { + topY += 1.5 * line_space; + botY += line_space; + arrow_y = topY - 0.75 * line_space; + text_y = botY + 0.25 * line_space; + } + break; + case Stroke.Type.ROLL_UP: + case Stroke.Type.RASQUEDO_UP: + arrow = 'arrowheadBlackDown'; + arrow_shift_x = -4; + text_shift_x = this.x_shift + arrow_shift_x - 1; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) { + arrow_y = line_space / 2; + topY += 0.5 * line_space; + if ((botY - topY) % 2 === 0) { + botY += line_space / 2; + } + arrow_y = botY + 0.5 * line_space; + text_y = topY - 1.25 * line_space; + } + else { + topY += 0.25 * line_space; + botY += 0.5 * line_space; + arrow_y = botY + 0.25 * line_space; + text_y = topY - line_space; + } + break; + case Stroke.Type.ARPEGGIO_DIRECTIONLESS: + topY += 0.5 * line_space; + botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`); + } + let strokeLine = 'straight'; + // Draw the stroke + if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) { + ctx.fillRect(x + this.x_shift, topY, 1, botY - topY); + } + else { + strokeLine = 'wiggly'; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) { + for (let i = topY; i <= botY; i += line_space) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp'); + } + } + else { + let i; + for (i = topY; i <= botY; i += 10) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp'); + } + if (this.type === Stroke.Type.RASQUEDO_DOWN) { + text_y = i + 0.25 * line_space; + } + } + } + if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) { + return; // skip drawing arrow heads or text + } + // Draw the arrow head + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, { + category: `stroke_${strokeLine}.${arrow}`, + }); + // Draw the rasquedo "R" + if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) { + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText('R', x + text_shift_x, text_y); + ctx.restore(); + } + } +} +Stroke.Type = { + BRUSH_DOWN: 1, + BRUSH_UP: 2, + ROLL_DOWN: 3, + ROLL_UP: 4, + RASQUEDO_DOWN: 5, + RASQUEDO_UP: 6, + ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow +}; +Stroke.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC, +}; + + + +/***/ }), + +/***/ "./src/svgcontext.ts": +/*!***************************!*\ + !*** ./src/svgcontext.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SVGContext": () => (/* binding */ SVGContext) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// @author Gregory Ristow (2015) + + + + +/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */ +const ATTRIBUTES_TO_IGNORE = { + path: { + x: true, + y: true, + width: true, + height: true, + 'font-family': true, + 'font-weight': true, + 'font-style': true, + 'font-size': true, + }, + rect: { + 'font-family': true, + 'font-weight': true, + 'font-style': true, + 'font-size': true, + }, + text: { + width: true, + height: true, + }, +}; +/** Create the SVG in the SVG namespace. */ +const SVG_NS = 'http://www.w3.org/2000/svg'; +const TWO_PI = 2 * Math.PI; +class MeasureTextCache { + constructor() { + // The cache is keyed first by the text string, then by the font attributes + // joined together. + this.cache = {}; + } + lookup(text, svg, attributes) { + let entries = this.cache[text]; + if (entries === undefined) { + entries = {}; + this.cache[text] = entries; + } + const family = attributes['font-family']; + const size = attributes['font-size']; + const weight = attributes['font-weight']; + const style = attributes['font-style']; + const key = `${family}%${size}%${weight}%${style}`; + let entry = entries[key]; + if (entry === undefined) { + entry = this.measureImpl(text, svg, attributes); + entries[key] = entry; + } + return entry; + } + measureImpl(text, svg, attributes) { + let txt = this.txt; + if (!txt) { + // Create the SVG text element that will be used to measure text in the event + // of a cache miss. + txt = document.createElementNS(SVG_NS, 'text'); + this.txt = txt; + } + txt.textContent = text; + if (attributes['font-family']) + txt.setAttributeNS(null, 'font-family', attributes['font-family']); + if (attributes['font-size']) + txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`); + if (attributes['font-style']) + txt.setAttributeNS(null, 'font-style', attributes['font-style']); + if (attributes['font-weight']) + txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`); + svg.appendChild(txt); + const bbox = txt.getBBox(); + svg.removeChild(txt); + return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height }; + } +} +/** + * SVG rendering context with an API similar to CanvasRenderingContext2D. + */ +class SVGContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext { + constructor(element) { + super(); + this.width = 0; + this.height = 0; + this.precision = 1; + this.backgroundFillStyle = 'white'; + /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */ + this.fontCSSString = ''; + this.element = element; + this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RENDER_PRECISION_PLACES); + // Create a SVG element and add it to the container element. + const svg = this.create('svg'); + this.element.appendChild(svg); + this.svg = svg; + this.parent = this.svg; + this.groups = [this.svg]; + this.path = ''; + this.pen = { x: NaN, y: NaN }; + this.lineWidth = 1.0; + const defaultFontAttributes = { + 'font-family': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + 'font-size': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE + 'pt', + 'font-weight': _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + 'font-style': _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, + }; + this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes); + this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes); + this.groupAttributes = []; + this.applyAttributes(svg, this.attributes); + this.groupAttributes.push(Object.assign({}, this.attributes)); + this.shadow_attributes = { + width: 0, + color: 'black', + }; + this.state_stack = []; + } + round(n) { + return Math.round(n * this.precision) / this.precision; + } + create(svgElementType) { + return document.createElementNS(SVG_NS, svgElementType); + } + // Allow grouping elements in containers for interactivity. + openGroup(cls, id, attrs) { + const group = this.create('g'); + this.groups.push(group); + this.parent.appendChild(group); + this.parent = group; + if (cls) + group.setAttribute('class', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(cls)); + if (id) + group.setAttribute('id', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(id)); + if (attrs && attrs.pointerBBox) { + group.setAttribute('pointer-events', 'bounding-box'); + } + this.applyAttributes(group, this.attributes); + this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes)); + return group; + } + closeGroup() { + this.groups.pop(); + this.groupAttributes.pop(); + this.parent = this.groups[this.groups.length - 1]; + } + add(elem) { + this.parent.appendChild(elem); + } + setFillStyle(style) { + this.attributes.fill = style; + return this; + } + /** + * Used to set the fill color for `clearRect()`. This allows us to simulate + * cutting a "hole" into the SVG drawing. + */ + setBackgroundFillStyle(style) { + this.backgroundFillStyle = style; + return this; + } + setStrokeStyle(style) { + this.attributes.stroke = style; + return this; + } + setShadowColor(color) { + this.shadow_attributes.color = color; + return this; + } + /** + * @param blur A non-negative float specifying the level of shadow blur, where 0 + * represents no blur and larger numbers represent increasingly more blur. + * @returns this + */ + setShadowBlur(blur) { + this.shadow_attributes.width = blur; + return this; + } + /** + * @param width + * @returns this + */ + setLineWidth(width) { + this.attributes['stroke-width'] = width; + this.lineWidth = width; + return this; + } + /** + * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...] + * @returns this + * + * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray) + */ + setLineDash(lineDash) { + if (Object.prototype.toString.call(lineDash) === '[object Array]') { + this.attributes['stroke-dasharray'] = lineDash.join(','); + return this; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('ArgumentError', 'lineDash must be an array of integers.'); + } + } + /** + * @param capType + * @returns this + */ + setLineCap(capType) { + this.attributes['stroke-linecap'] = capType; + return this; + } + // ### Sizing & Scaling Methods: + // TODO (GCR): See note at scale() -- separate our internal + // conception of pixel-based width/height from the style.width + // and style.height properties eventually to allow users to + // apply responsive sizing attributes to the SVG. + resize(width, height) { + this.width = width; + this.height = height; + this.element.style.width = width.toString(); + this.svg.style.width = width.toString(); + this.svg.style.height = height.toString(); + const attributes = { + width, + height, + }; + this.applyAttributes(this.svg, attributes); + this.scale(this.state.scaleX, this.state.scaleY); + return this; + } + scale(x, y) { + // uses viewBox to scale + // TODO (GCR): we may at some point want to distinguish the + // style.width / style.height properties that are applied to + // the SVG object from our internal conception of the SVG + // width/height. This would allow us to create automatically + // scaling SVG's that filled their containers, for instance. + // + // As this isn't implemented in Canvas contexts, + // I've left as is for now, but in using the viewBox to + // handle internal scaling, am trying to make it possible + // for us to eventually move in that direction. + this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x; + this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y; + const visibleWidth = this.width / this.state.scaleX; + const visibleHeight = this.height / this.state.scaleY; + this.setViewBox(0, 0, visibleWidth, visibleHeight); + return this; + } + /** + * 1 arg: string in the "x y w h" format + * 4 args: x:number, y:number, w:number, h:number + */ + setViewBox(viewBox_or_minX, minY, width, height) { + if (typeof viewBox_or_minX === 'string') { + this.svg.setAttribute('viewBox', viewBox_or_minX); + } + else { + const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height; + this.svg.setAttribute('viewBox', viewBoxString); + } + } + // ### Drawing helper methods: + applyAttributes(element, attributes) { + const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName]; + for (const attrName in attributes) { + if (attrNamesToIgnore && attrNamesToIgnore[attrName]) { + continue; + } + if (attributes[attrName] && + (this.groupAttributes.length == 0 || + attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName])) + element.setAttributeNS(null, attrName, attributes[attrName]); + } + return element; + } + // ### Shape & Path Methods: + clear() { + // Clear the SVG by removing all inner children. + // (This approach is usually slightly more efficient + // than removing the old SVG & adding a new one to + // the container element, since it does not cause the + // container to resize twice. Also, the resize + // triggered by removing the entire SVG can trigger + // a touchcancel event when the element resizes away + // from a touch point.) + while (this.svg.lastChild) { + this.svg.removeChild(this.svg.lastChild); + } + // Replace the viewbox attribute we just removed. + this.scale(this.state.scaleX, this.state.scaleY); + } + // ## Rectangles: + rect(x, y, width, height, attributes) { + // Avoid invalid negative height attributes by flipping the rectangle on its head: + if (height < 0) { + y += height; + height *= -1; + } + const rectangle = this.create('rect'); + attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' }; + x = this.round(x); + y = this.round(y); + width = this.round(width); + height = this.round(height); + this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes)); + this.add(rectangle); + return this; + } + fillRect(x, y, width, height) { + const attributes = { fill: this.attributes.fill, stroke: 'none' }; + this.rect(x, y, width, height, attributes); + return this; + } + clearRect(x, y, width, height) { + // Currently this fills a rect with the backgroundFillStyle, rather + // than "cut a hole" into the existing shapes. + // + // Since tabNote seems to be the only module that makes use of this + // it may be worth creating a separate tabStave that would + // draw lines around locations of tablature fingering. + this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' }); + return this; + } + // ## Paths: + beginPath() { + this.path = ''; + this.pen.x = NaN; + this.pen.y = NaN; + return this; + } + moveTo(x, y) { + x = this.round(x); + y = this.round(y); + this.path += 'M' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + lineTo(x, y) { + x = this.round(x); + y = this.round(y); + this.path += 'L' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + bezierCurveTo(x1, y1, x2, y2, x, y) { + x = this.round(x); + y = this.round(y); + x1 = this.round(x1); + y1 = this.round(y1); + x2 = this.round(x2); + y2 = this.round(y2); + this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + quadraticCurveTo(x1, y1, x, y) { + x = this.round(x); + y = this.round(y); + x1 = this.round(x1); + y1 = this.round(y1); + this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + arc(x, y, radius, startAngle, endAngle, counterclockwise) { + let x0 = x + radius * Math.cos(startAngle); + let y0 = y + radius * Math.sin(startAngle); + x0 = this.round(x0); + y0 = this.round(y0); + // svg behavior different from canvas. Don't normalize angles if + // we are drawing a circle because they both normalize to 0 + const tmpStartTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(startAngle); + const tmpEndTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(endAngle); + if ((!counterclockwise && endAngle - startAngle >= TWO_PI) || + (counterclockwise && startAngle - endAngle >= TWO_PI) || + tmpStartTest === tmpEndTest) { + let x1 = x + radius * Math.cos(startAngle + Math.PI); + let y1 = y + radius * Math.sin(startAngle + Math.PI); + // There's no way to specify a completely circular arc in SVG so we have to + // use two semi-circular arcs. + x1 = this.round(x1); + y1 = this.round(y1); + radius = this.round(radius); + this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `; + this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`; + this.pen.x = x0; + this.pen.y = y0; + } + else { + let x1 = x + radius * Math.cos(endAngle); + let y1 = y + radius * Math.sin(endAngle); + startAngle = tmpStartTest; + endAngle = tmpEndTest; + let large; + if (Math.abs(endAngle - startAngle) < Math.PI) { + large = counterclockwise; + } + else { + large = !counterclockwise; + } + if (startAngle > endAngle) { + large = !large; + } + const sweep = !counterclockwise; + x1 = this.round(x1); + y1 = this.round(y1); + radius = this.round(radius); + this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`; + this.pen.x = x1; + this.pen.y = y1; + } + return this; + } + closePath() { + this.path += 'Z'; + return this; + } + getShadowStyle() { + const sa = this.shadow_attributes; + // A CSS drop-shadow filter blur looks different than a canvas shadowBlur + // of the same radius, so we scale the drop-shadow radius here to make it + // look close to the canvas shadow. + return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`; + } + fill(attributes) { + const path = this.create('path'); + if (typeof attributes === 'undefined') { + attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' }); + } + attributes.d = this.path; + if (this.shadow_attributes.width > 0) { + attributes.style = this.getShadowStyle(); + } + this.applyAttributes(path, attributes); + this.add(path); + return this; + } + stroke() { + const path = this.create('path'); + const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path }); + if (this.shadow_attributes.width > 0) { + attributes.style = this.getShadowStyle(); + } + this.applyAttributes(path, attributes); + this.add(path); + return this; + } + // ## Text Methods: + measureText(text) { + return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes); + } + fillText(text, x, y) { + if (!text || text.length <= 0) { + return this; + } + x = this.round(x); + y = this.round(y); + const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x, + y }); + const txt = this.create('text'); + txt.textContent = text; + this.applyAttributes(txt, attributes); + this.add(txt); + return this; + } + // TODO: State should be deep-copied. + save() { + this.state_stack.push({ + state: { + 'font-family': this.state['font-family'], + 'font-weight': this.state['font-weight'], + 'font-style': this.state['font-style'], + 'font-size': this.state['font-size'], + scale: this.state.scale, + }, + attributes: { + 'font-family': this.attributes['font-family'], + 'font-weight': this.attributes['font-weight'], + 'font-style': this.attributes['font-style'], + 'font-size': this.attributes['font-size'], + fill: this.attributes.fill, + stroke: this.attributes.stroke, + 'stroke-width': this.attributes['stroke-width'], + 'stroke-dasharray': this.attributes['stroke-dasharray'], + }, + shadow_attributes: { + width: this.shadow_attributes.width, + color: this.shadow_attributes.color, + }, + lineWidth: this.lineWidth, + }); + return this; + } + // TODO: State should be deep-restored. + restore() { + const savedState = this.state_stack.pop(); + if (savedState) { + const state = savedState; + this.state['font-family'] = state.state['font-family']; + this.state['font-weight'] = state.state['font-weight']; + this.state['font-style'] = state.state['font-style']; + this.state['font-size'] = state.state['font-size']; + this.state.scale = state.state.scale; + this.attributes['font-family'] = state.attributes['font-family']; + this.attributes['font-weight'] = state.attributes['font-weight']; + this.attributes['font-style'] = state.attributes['font-style']; + this.attributes['font-size'] = state.attributes['font-size']; + this.attributes.fill = state.attributes.fill; + this.attributes.stroke = state.attributes.stroke; + this.attributes['stroke-width'] = state.attributes['stroke-width']; + this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray']; + this.shadow_attributes.width = state.shadow_attributes.width; + this.shadow_attributes.color = state.shadow_attributes.color; + this.lineWidth = state.lineWidth; + } + return this; + } + set fillStyle(style) { + this.setFillStyle(style); + } + get fillStyle() { + return this.attributes.fill; + } + set strokeStyle(style) { + this.setStrokeStyle(style); + } + get strokeStyle() { + return this.attributes.stroke; + } + /** + * @param f is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted + * into the font-weight attribute (e.g., font-weight="bold") + * @param style is a string (e.g., 'italic', 'normal') that is inserted into the + * font-style attribute (e.g., font-style="italic") + */ + setFont(f, size, weight, style) { + const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style); + this.fontCSSString = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo); + const fontAttributes = { + 'font-family': fontInfo.family, + 'font-size': fontInfo.size, + 'font-weight': fontInfo.weight, + 'font-style': fontInfo.style, + }; + this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes); + this.state = Object.assign(Object.assign({}, this.state), fontAttributes); + return this; + } + /** Return a string of the form `'italic bold 15pt Arial'` */ + getFont() { + return this.fontCSSString; + } +} +SVGContext.measureTextCache = new MeasureTextCache(); + + + +/***/ }), + +/***/ "./src/system.ts": +/*!***********************!*\ + !*** ./src/system.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "System": () => (/* binding */ System) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +/** + * System implements a musical system, which is a collection of staves, + * each which can have one or more voices. All voices across all staves in + * the system are formatted together. + */ +class System extends _element__WEBPACK_IMPORTED_MODULE_1__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.System; + } + constructor(params = {}) { + super(); + this.setOptions(params); + this.partStaves = []; + this.partStaveInfos = []; + this.partVoices = []; + } + /** Set formatting options. */ + setOptions(options = {}) { + if (!options.factory) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.'); + } + this.factory = options.factory; + this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) }); + if (this.options.noJustification === false && typeof options.width === 'undefined') { + this.options.autoWidth = true; + } + } + /** Get origin X. */ + getX() { + return this.options.x; + } + /** Set origin X. */ + setX(x) { + this.options.x = x; + this.partStaves.forEach((s) => { + s.setX(x); + }); + } + /** Get origin y. */ + getY() { + return this.options.y; + } + /** Set origin y. */ + setY(y) { + this.options.y = y; + this.partStaves.forEach((s) => { + s.setY(y); + }); + } + /** Get associated staves. */ + getStaves() { + return this.partStaves; + } + /** Get associated voices. */ + getVoices() { + return this.partVoices; + } + /** Set associated context. */ + setContext(context) { + super.setContext(context); + this.factory.setContext(context); + return this; + } + /** + * Add connector between staves. + * @param type see {@link StaveConnector.typeString} + */ + addConnector(type = 'double') { + this.connector = this.factory.StaveConnector({ + top_stave: this.partStaves[0], + bottom_stave: this.partStaves[this.partStaves.length - 1], + type, + }); + return this.connector; + } + /** + * Add a stave to the system. + * + * Example (one voice): + * + * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});` + * + * Example (two voices): + * + * `system.addStave({voices: [` + * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),` + * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))` + * `]});` + */ + addStave(params) { + var _a; + const staveOptions = Object.assign({ left_bar: false }, params.options); + const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions }); + const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions }); + const ctx = this.getContext(); + p.voices.forEach((voice) => { + voice + .setContext(ctx) + .setStave(stave) + .getTickables() + .forEach((tickable) => tickable.setStave(stave)); + this.partVoices.push(voice); + }); + this.partStaves.push(stave); + this.partStaveInfos.push(p); + return stave; + } + /** + * Add voices to the system with stave already assigned. + */ + addVoices(voices) { + const ctx = this.getContext(); + voices.forEach((voice) => { + voice.setContext(ctx); + this.partVoices.push(voice); + }); + } + /** Format the system. */ + format() { + const options_details = this.options.details; + let justifyWidth = 0; + const formatter = new _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter(options_details); + this.formatter = formatter; + let y = this.options.y; + let startX = 0; + const debugNoteMetricsYs = []; + this.partStaves.forEach((part, index) => { + y = y + part.space(this.partStaveInfos[index].spaceAbove); + part.setY(y); + y = y + part.space(this.partStaveInfos[index].spaceBelow); + y = y + part.space(this.options.spaceBetweenStaves); + if (this.partStaveInfos[index].debugNoteMetrics) { + debugNoteMetricsYs.push({ y, stave: part }); + y += 15; + } + startX = Math.max(startX, part.getNoteStartX()); + }); + // Re-assign Stave to update y position + this.partVoices.forEach((voice) => { + voice.getTickables().forEach((tickable) => { + const stave = tickable.getStave(); + if (stave) + tickable.setStave(stave); + }); + }); + // Join the voices + formatter.joinVoices(this.partVoices); + // Update the start position of all staves. + this.partStaves.forEach((part) => part.setNoteStartX(startX)); + if (this.options.autoWidth && this.partVoices.length > 0) { + justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices); + this.options.width = justifyWidth + _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.rightPadding + (startX - this.options.x); + this.partStaves.forEach((part) => { + part.setWidth(this.options.width); + }); + } + else { + justifyWidth = this.options.noPadding + ? this.options.width - (startX - this.options.x) + : this.options.width - (startX - this.options.x) - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + } + if (this.partVoices.length > 0) { + formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions); + } + formatter.postFormat(); + for (let i = 0; i < this.options.formatIterations; i++) { + formatter.tune(options_details); + } + this.startX = startX; + this.debugNoteMetricsYs = debugNoteMetricsYs; + this.lastY = y; + this.boundingBox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y); + _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.formatBegModifiers(this.partStaves); + } + /** Render the system. */ + draw() { + // Render debugging information, if requested. + const ctx = this.checkContext(); + if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFormatter', 'format() must be called before draw()'); + } + this.setRendered(); + if (this.options.debugFormatter) { + _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY); + } + this.debugNoteMetricsYs.forEach((d) => { + this.partVoices.forEach((voice) => { + voice.getTickables().forEach((tickable) => { + if (tickable.getStave() === d.stave) + _note__WEBPACK_IMPORTED_MODULE_3__.Note.plotMetrics(ctx, tickable, d.y); + }); + }); + }); + } +} + + +/***/ }), + +/***/ "./src/tables.ts": +/*!***********************!*\ + !*** ./src/tables.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tables": () => (/* binding */ Tables) +/* harmony export */ }); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. + + + +const RESOLUTION = 16384; +/** + * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow. + * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks. + */ +const durations = { + '1/2': RESOLUTION * 2, + 1: RESOLUTION / 1, + 2: RESOLUTION / 2, + 4: RESOLUTION / 4, + 8: RESOLUTION / 8, + 16: RESOLUTION / 16, + 32: RESOLUTION / 32, + 64: RESOLUTION / 64, + 128: RESOLUTION / 128, + 256: RESOLUTION / 256, +}; +const durationAliases = { + w: '1', + h: '2', + q: '4', + // This is the default duration used to render bars (BarNote). Bars no longer + // consume ticks, so this should be a no-op. + // TODO(0xfe): This needs to be cleaned up. + b: '256', +}; +const keySignatures = { + C: { num: 0 }, + Am: { num: 0 }, + F: { acc: 'b', num: 1 }, + Dm: { acc: 'b', num: 1 }, + Bb: { acc: 'b', num: 2 }, + Gm: { acc: 'b', num: 2 }, + Eb: { acc: 'b', num: 3 }, + Cm: { acc: 'b', num: 3 }, + Ab: { acc: 'b', num: 4 }, + Fm: { acc: 'b', num: 4 }, + Db: { acc: 'b', num: 5 }, + Bbm: { acc: 'b', num: 5 }, + Gb: { acc: 'b', num: 6 }, + Ebm: { acc: 'b', num: 6 }, + Cb: { acc: 'b', num: 7 }, + Abm: { acc: 'b', num: 7 }, + G: { acc: '#', num: 1 }, + Em: { acc: '#', num: 1 }, + D: { acc: '#', num: 2 }, + Bm: { acc: '#', num: 2 }, + A: { acc: '#', num: 3 }, + 'F#m': { acc: '#', num: 3 }, + E: { acc: '#', num: 4 }, + 'C#m': { acc: '#', num: 4 }, + B: { acc: '#', num: 5 }, + 'G#m': { acc: '#', num: 5 }, + 'F#': { acc: '#', num: 6 }, + 'D#m': { acc: '#', num: 6 }, + 'C#': { acc: '#', num: 7 }, + 'A#m': { acc: '#', num: 7 }, +}; +const clefs = { + treble: { line_shift: 0 }, + bass: { line_shift: 6 }, + tenor: { line_shift: 4 }, + alto: { line_shift: 3 }, + soprano: { line_shift: 1 }, + percussion: { line_shift: 0 }, + 'mezzo-soprano': { line_shift: 2 }, + 'baritone-c': { line_shift: 5 }, + 'baritone-f': { line_shift: 5 }, + subbass: { line_shift: 7 }, + french: { line_shift: -1 }, +}; +const notesInfo = { + C: { index: 0, int_val: 0 }, + CN: { index: 0, int_val: 0, accidental: 'n' }, + 'C#': { index: 0, int_val: 1, accidental: '#' }, + 'C##': { index: 0, int_val: 2, accidental: '##' }, + CB: { index: 0, int_val: 11, accidental: 'b' }, + CBB: { index: 0, int_val: 10, accidental: 'bb' }, + D: { index: 1, int_val: 2 }, + DN: { index: 1, int_val: 2, accidental: 'n' }, + 'D#': { index: 1, int_val: 3, accidental: '#' }, + 'D##': { index: 1, int_val: 4, accidental: '##' }, + DB: { index: 1, int_val: 1, accidental: 'b' }, + DBB: { index: 1, int_val: 0, accidental: 'bb' }, + E: { index: 2, int_val: 4 }, + EN: { index: 2, int_val: 4, accidental: 'n' }, + 'E#': { index: 2, int_val: 5, accidental: '#' }, + 'E##': { index: 2, int_val: 6, accidental: '##' }, + EB: { index: 2, int_val: 3, accidental: 'b' }, + EBB: { index: 2, int_val: 2, accidental: 'bb' }, + F: { index: 3, int_val: 5 }, + FN: { index: 3, int_val: 5, accidental: 'n' }, + 'F#': { index: 3, int_val: 6, accidental: '#' }, + 'F##': { index: 3, int_val: 7, accidental: '##' }, + FB: { index: 3, int_val: 4, accidental: 'b' }, + FBB: { index: 3, int_val: 3, accidental: 'bb' }, + G: { index: 4, int_val: 7 }, + GN: { index: 4, int_val: 7, accidental: 'n' }, + 'G#': { index: 4, int_val: 8, accidental: '#' }, + 'G##': { index: 4, int_val: 9, accidental: '##' }, + GB: { index: 4, int_val: 6, accidental: 'b' }, + GBB: { index: 4, int_val: 5, accidental: 'bb' }, + A: { index: 5, int_val: 9 }, + AN: { index: 5, int_val: 9, accidental: 'n' }, + 'A#': { index: 5, int_val: 10, accidental: '#' }, + 'A##': { index: 5, int_val: 11, accidental: '##' }, + AB: { index: 5, int_val: 8, accidental: 'b' }, + ABB: { index: 5, int_val: 7, accidental: 'bb' }, + B: { index: 6, int_val: 11 }, + BN: { index: 6, int_val: 11, accidental: 'n' }, + 'B#': { index: 6, int_val: 12, accidental: '#' }, + 'B##': { index: 6, int_val: 13, accidental: '##' }, + BB: { index: 6, int_val: 10, accidental: 'b' }, + BBB: { index: 6, int_val: 9, accidental: 'bb' }, + R: { index: 6, rest: true }, + X: { + index: 6, + accidental: '', + octave: 4, + code: 'noteheadXBlack', + shift_right: 5.5, + }, +}; +const validNoteTypes = { + n: { name: 'note' }, + r: { name: 'rest' }, + h: { name: 'harmonic' }, + m: { name: 'muted' }, + s: { name: 'slash' }, + g: { name: 'ghost' }, + d: { name: 'diamond' }, + x: { name: 'x' }, + ci: { name: 'circled' }, + cx: { name: 'circle x' }, + sf: { name: 'slashed' }, + sb: { name: 'slashed backward' }, + sq: { name: 'square' }, + tu: { name: 'triangle up' }, + td: { name: 'triangle down' }, +}; +const accidentals = { + '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 }, + '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 }, + b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 }, + bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 }, + n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 }, + '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 }, + '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 }, + db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 }, + d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 }, + '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 }, + '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 }, + '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 }, + bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 }, + bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 }, + o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 }, + k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 }, + bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 }, + '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 }, + ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 }, + afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 }, + accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 }, + accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 }, + accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 }, + accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 }, + accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 }, + accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 }, + accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 }, + accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 }, + accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 }, + accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 }, + accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 }, + accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 }, + accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 }, + accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 }, + accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 }, + accidentalNarrowReversedFlatAndFlat: { + code: 'accidentalNarrowReversedFlatAndFlat', + parenRightPaddingAdjustment: -1, + }, + accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 }, + accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 }, +}; +// Helps determine the layout of accidentals. +const accidentalColumns = { + 1: { + a: [1], + b: [1], + }, + 2: { + a: [1, 2], + }, + 3: { + a: [1, 3, 2], + b: [1, 2, 1], + second_on_bottom: [1, 2, 3], + }, + 4: { + a: [1, 3, 4, 2], + b: [1, 2, 3, 1], + spaced_out_tetrachord: [1, 2, 1, 2], + }, + 5: { + a: [1, 3, 5, 4, 2], + b: [1, 2, 4, 3, 1], + spaced_out_pentachord: [1, 2, 3, 2, 1], + very_spaced_out_pentachord: [1, 2, 1, 2, 1], + }, + 6: { + a: [1, 3, 5, 6, 4, 2], + b: [1, 2, 4, 5, 3, 1], + spaced_out_hexachord: [1, 3, 2, 1, 3, 2], + very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2], + }, +}; +const articulations = { + 'a.': { code: 'augmentationDot', between_lines: true }, + av: { + aboveCode: 'articStaccatissimoAbove', + belowCode: 'articStaccatissimoBelow', + between_lines: true, + }, + 'a>': { + aboveCode: 'articAccentAbove', + belowCode: 'articAccentBelow', + between_lines: true, + }, + 'a-': { + aboveCode: 'articTenutoAbove', + belowCode: 'articTenutoBelow', + between_lines: true, + }, + 'a^': { + aboveCode: 'articMarcatoAbove', + belowCode: 'articMarcatoBelow', + between_lines: false, + }, + 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false }, + ao: { + aboveCode: 'pluckedSnapPizzicatoAbove', + belowCode: 'pluckedSnapPizzicatoBelow', + between_lines: false, + }, + ah: { code: 'stringsHarmonic', between_lines: false }, + 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false }, + 'a@a': { code: 'fermataAbove', between_lines: false }, + 'a@u': { code: 'fermataBelow', between_lines: false }, + 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false }, + 'a@as': { code: 'fermataShortAbove', between_lines: false }, + 'a@us': { code: 'fermataShortBelow', between_lines: false }, + 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false }, + 'a@al': { code: 'fermataLongAbove', between_lines: false }, + 'a@ul': { code: 'fermataLongBelow', between_lines: false }, + 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false }, + 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false }, + 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false }, + 'a|': { code: 'stringsUpBow', between_lines: false }, + am: { code: 'stringsDownBow', between_lines: false }, + 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked +}; +const ornaments = { + mordent: { code: 'ornamentShortTrill' }, + mordent_inverted: { code: 'ornamentMordent' }, + turn: { code: 'ornamentTurn' }, + turn_inverted: { code: 'ornamentTurnSlash' }, + tr: { code: 'ornamentTrill' }, + upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' }, + downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' }, + prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' }, + pralldown: { code: 'ornamentPrecompTrillLowerSuffix' }, + upmordent: { code: 'ornamentPrecompSlideTrillBach' }, + downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' }, + lineprall: { code: 'ornamentPrecompAppoggTrill' }, + prallprall: { code: 'ornamentTremblement' }, + scoop: { code: 'brassScoop' }, + doit: { code: 'brassDoitMedium' }, + fall: { code: 'brassFallLipShort' }, + doitLong: { code: 'brassLiftMedium' }, + fallLong: { code: 'brassFallRoughMedium' }, + bend: { code: 'brassBend' }, + plungerClosed: { code: 'brassMuteClosed' }, + plungerOpen: { code: 'brassMuteOpen' }, + flip: { code: 'brassFlip' }, + jazzTurn: { code: 'brassJazzTurn' }, + smear: { code: 'brassSmear' }, +}; +class Tables { + /** + * @returns the `Font` object at the head of the music font stack. + */ + static currentMusicFont() { + if (Tables.MUSIC_FONT_STACK.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).'); + } + else { + return Tables.MUSIC_FONT_STACK[0]; + } + } + static clefProperties(clef) { + if (!clef || !(clef in clefs)) + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArgument', 'Invalid clef: ' + clef); + return clefs[clef]; + } + /** + * @param keyOctaveGlyph a string in the format "key/octave" (e.g., "c/5") or "key/octave/custom-note-head-code" (e.g., "g/5/t3"). + * @param clef + * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.). + * @returns properties for the specified note. + */ + static keyProperties(keyOctaveGlyph, clef = 'treble', params) { + let options = { octave_shift: 0, duration: '4' }; + if (typeof params === 'object') { + options = Object.assign(Object.assign({}, options), params); + } + const duration = Tables.sanitizeDuration(options.duration); + const pieces = keyOctaveGlyph.split('/'); + if (pieces.length < 2) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`); + } + const key = pieces[0].toUpperCase(); + const value = notesInfo[key]; + if (!value) + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Invalid key name: ' + key); + if (value.octave) + pieces[1] = value.octave.toString(); + let octave = parseInt(pieces[1], 10); + // Octave_shift is the shift to compensate for clef 8va/8vb. + octave -= options.octave_shift; + const baseIndex = octave * 7 - 4 * 7; + let line = (baseIndex + value.index) / 2; + line += Tables.clefProperties(clef).line_shift; + let stroke = 0; + if (line <= 0 && (line * 2) % 2 === 0) + stroke = 1; // stroke up + if (line >= 6 && (line * 2) % 2 === 0) + stroke = -1; // stroke down + // Integer value for note arithmetic. + const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined; + // If the user specified a glyph, overwrite the glyph code. + const code = value.code; + const shift_right = value.shift_right; + let customNoteHeadProps = {}; + if (pieces.length > 2 && pieces[2]) { + const glyphName = pieces[2].toUpperCase(); + customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {}; + } + return Object.assign({ key, + octave, + line, + int_value, accidental: value.accidental, code, + stroke, + shift_right, displaced: false }, customNoteHeadProps); + } + static integerToNote(integer) { + if (typeof integer === 'undefined' || integer < 0 || integer > 11) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`); + } + const table = { + 0: 'C', + 1: 'C#', + 2: 'D', + 3: 'D#', + 4: 'E', + 5: 'F', + 6: 'F#', + 7: 'G', + 8: 'G#', + 9: 'A', + 10: 'A#', + 11: 'B', + }; + const noteValue = table[integer]; + if (!noteValue) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`); + } + return noteValue; + } + static tabToGlyphProps(fret, scale = 1.0) { + let glyph = undefined; + let width = 0; + let shift_y = 0; + if (fret.toUpperCase() === 'X') { + const glyphMetrics = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics(); + glyph = 'accidentalDoubleSharp'; + if (glyphMetrics.width == undefined || glyphMetrics.height == undefined) + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidMetrics', 'Width and height required'); + width = glyphMetrics.width; + shift_y = -glyphMetrics.height / 2; + } + else { + width = Tables.textWidth(fret); + } + return { + text: fret, + code: glyph, + getWidth: () => width * scale, + shift_y, + }; + } + // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size. + // TODO: The actual width depends on the font family, size, weight, style. + static textWidth(text) { + return 7 * text.toString().length; + } + static articulationCodes(artic) { + return articulations[artic]; + } + static accidentalCodes(acc) { + return accidentals[acc]; + } + static ornamentCodes(acc) { + return ornaments[acc]; + } + static keySignature(spec) { + const keySpec = keySignatures[spec]; + if (!keySpec) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`); + } + if (!keySpec.acc) { + return []; + } + const accidentalList = { + b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5], + '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2], + }; + const notes = accidentalList[keySpec.acc]; + const acc_list = []; + for (let i = 0; i < keySpec.num; ++i) { + const line = notes[i]; + acc_list.push({ type: keySpec.acc, line }); + } + return acc_list; + } + static getKeySignatures() { + return keySignatures; + } + static hasKeySignature(spec) { + return spec in keySignatures; + } + /** + * Convert duration aliases to the number based duration. + * If the input isn't an alias, simply return the input. + * @param duration + * @returns Example: 'q' -> '4', '8' -> '8' + */ + static sanitizeDuration(duration) { + const durationNumber = durationAliases[duration]; + if (durationNumber !== undefined) { + duration = durationNumber; + } + if (durations[duration] === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`); + } + return duration; + } + /** Convert the `duration` to a fraction. */ + static durationToFraction(duration) { + return new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction().parse(Tables.sanitizeDuration(duration)); + } + /** Convert the `duration` to a number. */ + static durationToNumber(duration) { + return Tables.durationToFraction(duration).value(); + } + /* Convert the `duration` to total ticks. */ + static durationToTicks(duration) { + duration = Tables.sanitizeDuration(duration); + const ticks = durations[duration]; + if (ticks === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidDuration'); + } + return ticks; + } + static codeNoteHead(type, duration) { + let code = ''; + switch (type) { + /* Diamond */ + case 'D0': + code = 'noteheadDiamondWhole'; + break; + case 'D1': + code = 'noteheadDiamondHalf'; + break; + case 'D2': + code = 'noteheadDiamondBlack'; + break; + case 'D3': + code = 'noteheadDiamondBlack'; + break; + /* Triangle */ + case 'T0': + code = 'noteheadTriangleUpWhole'; + break; + case 'T1': + code = 'noteheadTriangleUpHalf'; + break; + case 'T2': + code = 'noteheadTriangleUpBlack'; + break; + case 'T3': + code = 'noteheadTriangleUpBlack'; + break; + /* Cross */ + case 'X0': + code = 'noteheadXWhole'; + break; + case 'X1': + code = 'noteheadXHalf'; + break; + case 'X2': + code = 'noteheadXBlack'; + break; + case 'X3': + code = 'noteheadCircleX'; + break; + /* Square */ + case 'S1': + code = 'noteheadSquareWhite'; + break; + case 'S2': + code = 'noteheadSquareBlack'; + break; + /* Rectangle */ + case 'R1': + code = 'vexNoteHeadRectWhite'; // no smufl code + break; + case 'R2': + code = 'vexNoteHeadRectBlack'; // no smufl code + break; + case 'DO': + code = 'noteheadTriangleUpBlack'; + break; + case 'RE': + code = 'noteheadMoonBlack'; + break; + case 'MI': + code = 'noteheadDiamondBlack'; + break; + case 'FA': + code = 'noteheadTriangleLeftBlack'; + break; + case 'FAUP': + code = 'noteheadTriangleRightBlack'; + break; + case 'SO': + code = 'noteheadBlack'; + break; + case 'LA': + code = 'noteheadSquareBlack'; + break; + case 'TI': + code = 'noteheadTriangleRoundDownBlack'; + break; + case 'D': + case 'H': // left for backwards compatibility + switch (duration) { + case '1/2': + code = 'noteheadDiamondDoubleWhole'; + break; + case '1': + code = 'noteheadDiamondWhole'; + break; + case '2': + code = 'noteheadDiamondHalf'; + break; + default: + code = 'noteheadDiamondBlack'; + break; + } + break; + case 'N': + case 'G': + switch (duration) { + case '1/2': + code = 'noteheadDoubleWhole'; + break; + case '1': + code = 'noteheadWhole'; + break; + case '2': + code = 'noteheadHalf'; + break; + default: + code = 'noteheadBlack'; + break; + } + break; + case 'M': // left for backwards compatibility + case 'X': + switch (duration) { + case '1/2': + code = 'noteheadXDoubleWhole'; + break; + case '1': + code = 'noteheadXWhole'; + break; + case '2': + code = 'noteheadXHalf'; + break; + default: + code = 'noteheadXBlack'; + break; + } + break; + case 'CX': + switch (duration) { + case '1/2': + code = 'noteheadCircleXDoubleWhole'; + break; + case '1': + code = 'noteheadCircleXWhole'; + break; + case '2': + code = 'noteheadCircleXHalf'; + break; + default: + code = 'noteheadCircleX'; + break; + } + break; + case 'CI': + switch (duration) { + case '1/2': + code = 'noteheadCircledDoubleWhole'; + break; + case '1': + code = 'noteheadCircledWhole'; + break; + case '2': + code = 'noteheadCircledHalf'; + break; + default: + code = 'noteheadCircledBlack'; + break; + } + break; + case 'SQ': + switch (duration) { + case '1/2': + code = 'noteheadDoubleWholeSquare'; + break; + case '1': + code = 'noteheadSquareWhite'; + break; + case '2': + code = 'noteheadSquareWhite'; + break; + default: + code = 'noteheadSquareBlack'; + break; + } + break; + case 'TU': + switch (duration) { + case '1/2': + code = 'noteheadTriangleUpDoubleWhole'; + break; + case '1': + code = 'noteheadTriangleUpWhole'; + break; + case '2': + code = 'noteheadTriangleUpHalf'; + break; + default: + code = 'noteheadTriangleUpBlack'; + break; + } + break; + case 'TD': + switch (duration) { + case '1/2': + code = 'noteheadTriangleDownDoubleWhole'; + break; + case '1': + code = 'noteheadTriangleDownWhole'; + break; + case '2': + code = 'noteheadTriangleDownHalf'; + break; + default: + code = 'noteheadTriangleDownBlack'; + break; + } + break; + case 'SF': + switch (duration) { + case '1/2': + code = 'noteheadSlashedDoubleWhole1'; + break; + case '1': + code = 'noteheadSlashedWhole1'; + break; + case '2': + code = 'noteheadSlashedHalf1'; + break; + default: + code = 'noteheadSlashedBlack1'; + } + break; + case 'SB': + switch (duration) { + case '1/2': + code = 'noteheadSlashedDoubleWhole2'; + break; + case '1': + code = 'noteheadSlashedWhole2'; + break; + case '2': + code = 'noteheadSlashedHalf2'; + break; + default: + code = 'noteheadSlashedBlack2'; + } + break; + } + return code; + } + // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads. + // The default type is a regular note ('n'). + static getGlyphProps(duration, type = 'n') { + duration = Tables.sanitizeDuration(duration); + // Lookup duration for default glyph head code + let code = durationCodes[duration]; + if (code === undefined) { + code = durationCodes['4']; + } + // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash) + let glyphTypeProperties = code[type]; + // Try and get it from the custom list of note heads + const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration); + if (codeNoteHead != '') + glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead }); + const code_head = glyphTypeProperties.code_head; + // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale). + // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH). + const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(code_head, scale); + // Merge duration props for 'duration' with the note head properties. + return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties); + } +} +Tables.UNISON = true; +Tables.SOFTMAX_FACTOR = 10; +Tables.STEM_WIDTH = 1.5; +Tables.STEM_HEIGHT = 35; +Tables.STAVE_LINE_THICKNESS = 1; +Tables.RENDER_PRECISION_PLACES = 3; +Tables.RESOLUTION = RESOLUTION; +/** + * Customize this by calling Flow.setMusicFont(...fontNames); + */ +Tables.MUSIC_FONT_STACK = []; +Tables.NOTATION_FONT_SCALE = 39; +Tables.TABLATURE_FONT_SCALE = 39; +Tables.SLASH_NOTEHEAD_WIDTH = 15; +Tables.STAVE_LINE_DISTANCE = 10; +// HACK: +// Since text origins are positioned at the baseline, we must +// compensate for the ascender of the text. Of course, 1 staff space is +// a very poor approximation. +// +// This will be deprecated in the future. This is a temporary solution until +// we have more robust text metrics. +Tables.TEXT_HEIGHT_OFFSET_HACK = 1; +Tables.accidentalMap = accidentals; +Tables.accidentalColumnsTable = accidentalColumns; +Tables.unicode = { + // ♯ accidental sharp + sharp: String.fromCharCode(0x266f), + // ♭ accidental flat + flat: String.fromCharCode(0x266d), + // ♮ accidental natural + natural: String.fromCharCode(0x266e), + // △ major seventh + triangle: String.fromCharCode(0x25b3), + // ø half-diminished + 'o-with-slash': String.fromCharCode(0x00f8), + // ° diminished + degrees: String.fromCharCode(0x00b0), + // ○ diminished + circle: String.fromCharCode(0x25cb), +}; +/* The list of valid note types. Used by note.ts during parseNoteStruct(). */ +Tables.validTypes = validNoteTypes; +// Default time signature. +Tables.TIME4_4 = { + num_beats: 4, + beat_value: 4, + resolution: RESOLUTION, +}; + +// 1/2, 1, 2, 4, 8, 16, 32, 64, 128 +// NOTE: There is no 256 here! However, there are other mentions of 256 in this file. +// For example, in durations has a 256 key, and sanitizeDuration() can return 256. +// The sanitizeDuration() bit may need to be removed by 0xfe. +const durationCodes = { + '1/2': { + common: { + code_head: '', + stem: false, + flag: false, + stem_up_extension: -Tables.STEM_HEIGHT, + stem_down_extension: -Tables.STEM_HEIGHT, + tabnote_stem_up_extension: -Tables.STEM_HEIGHT, + tabnote_stem_down_extension: -Tables.STEM_HEIGHT, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Breve rest + code_head: 'restDoubleWhole', + rest: true, + position: 'B/5', + dot_shiftY: 0.5, + }, + s: { + // Breve note slash - + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 1: { + common: { + code_head: '', + stem: false, + flag: false, + stem_up_extension: -Tables.STEM_HEIGHT, + stem_down_extension: -Tables.STEM_HEIGHT, + tabnote_stem_up_extension: -Tables.STEM_HEIGHT, + tabnote_stem_down_extension: -Tables.STEM_HEIGHT, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Whole rest + code_head: 'restWhole', + ledger_code_head: 'restWholeLegerLine', + rest: true, + position: 'D/5', + dot_shiftY: 0.5, + }, + s: { + // Whole note slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 2: { + common: { + code_head: '', + stem: true, + flag: false, + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Half rest + code_head: 'restHalf', + ledger_code_head: 'restHalfLegerLine', + stem: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + }, + s: { + // Half note slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 4: { + common: { + code_head: '', + stem: true, + flag: false, + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Quarter rest + code_head: 'restQuarter', + stem: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + line_above: 1.5, + line_below: 1.5, + }, + s: { + // Quarter slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 8: { + common: { + code_head: '', + stem: true, + flag: true, + beam_count: 1, + stem_beam_extension: 0, + code_flag_upstem: 'flag8thUp', + code_flag_downstem: 'flag8thDown', + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Eighth rest + code_head: 'rest8th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + line_above: 1.0, + line_below: 1.0, + }, + s: { + // Eighth slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 16: { + common: { + code_head: '', + beam_count: 2, + stem_beam_extension: 0, + stem: true, + flag: true, + code_flag_upstem: 'flag16thUp', + code_flag_downstem: 'flag16thDown', + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Sixteenth rest + code_head: 'rest16th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + line_above: 1.0, + line_below: 2.0, + }, + s: { + // Sixteenth slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 32: { + common: { + code_head: '', + beam_count: 3, + stem_beam_extension: 7.5, + stem: true, + flag: true, + code_flag_upstem: 'flag32ndUp', + code_flag_downstem: 'flag32ndDown', + stem_up_extension: 9, + stem_down_extension: 9, + tabnote_stem_up_extension: 9, + tabnote_stem_down_extension: 9, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Thirty-second rest + code_head: 'rest32nd', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -1.5, + line_above: 2.0, + line_below: 2.0, + }, + s: { + // Thirty-second slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 64: { + common: { + code_head: '', + beam_count: 4, + stem_beam_extension: 15, + stem: true, + flag: true, + code_flag_upstem: 'flag64thUp', + code_flag_downstem: 'flag64thDown', + stem_up_extension: 13, + stem_down_extension: 13, + tabnote_stem_up_extension: 13, + tabnote_stem_down_extension: 13, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Sixty-fourth rest + code_head: 'rest64th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -1.5, + line_above: 2.0, + line_below: 3.0, + }, + s: { + // Sixty-fourth slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 128: { + common: { + code_head: '', + beam_count: 5, + stem_beam_extension: 22.5, + stem: true, + flag: true, + code_flag_upstem: 'flag128thUp', + code_flag_downstem: 'flag128thDown', + stem_up_extension: 22, + stem_down_extension: 22, + tabnote_stem_up_extension: 22, + tabnote_stem_down_extension: 22, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Hundred-twenty-eight rest + code_head: 'rest128th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -2.5, + line_above: 3.0, + line_below: 3.0, + }, + s: { + // Hundred-twenty-eight slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, +}; + + +/***/ }), + +/***/ "./src/tabnote.ts": +/*!************************!*\ + !*** ./src/tabnote.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabNote": () => (/* binding */ TabNote) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// The file implements notes for Tablature notation. This consists of one or +// more fret positions, and can either be drawn with or without stems. +// +// See `tests/tabnote_tests.ts` for usage examples. + + + + + + + + +// Gets the unused strings grouped together if consecutive. +// +// Parameters: +// * num_lines - The number of lines +// * strings_used - An array of numbers representing which strings have fret positions +function getUnusedStringGroups(num_lines, strings_used) { + const stem_through = []; + let group = []; + for (let string = 1; string <= num_lines; string++) { + const is_used = strings_used.indexOf(string) > -1; + if (!is_used) { + group.push(string); + } + else { + stem_through.push(group); + group = []; + } + } + if (group.length > 0) + stem_through.push(group); + return stem_through; +} +// Gets groups of points that outline the partial stem lines +// between fret positions +// +// Parameters: +// * stem_Y - The `y` coordinate the stem is located on +// * unused_strings - An array of groups of unused strings +// * stave - The stave to use for reference +// * stem_direction - The direction of the stem +function getPartialStemLines(stem_y, unused_strings, stave, stem_direction) { + const up_stem = stem_direction !== 1; + const down_stem = stem_direction !== -1; + const line_spacing = stave.getSpacingBetweenLines(); + const total_lines = stave.getNumLines(); + const stem_lines = []; + unused_strings.forEach((strings) => { + const containsLastString = strings.indexOf(total_lines) > -1; + const containsFirstString = strings.indexOf(1) > -1; + if ((up_stem && containsFirstString) || (down_stem && containsLastString)) { + return; + } + // If there's only one string in the group, push a duplicate value. + // We do this because we need 2 strings to convert into upper/lower y + // values. + if (strings.length === 1) { + strings.push(strings[0]); + } + const line_ys = []; + // Iterate through each group string and store it's y position + strings.forEach((string, index, strings) => { + const isTopBound = string === 1; + const isBottomBound = string === total_lines; + // Get the y value for the appropriate staff line, + // we adjust for a 0 index array, since string numbers are index 1 + let y = stave.getYForLine(string - 1); + // Unless the string is the first or last, add padding to each side + // of the line + if (index === 0 && !isTopBound) { + y -= line_spacing / 2 - 1; + } + else if (index === strings.length - 1 && !isBottomBound) { + y += line_spacing / 2 - 1; + } + // Store the y value + line_ys.push(y); + // Store a subsequent y value connecting this group to the main + // stem above/below the stave if it's the top/bottom string + if (stem_direction === 1 && isTopBound) { + line_ys.push(stem_y - 2); + } + else if (stem_direction === -1 && isBottomBound) { + line_ys.push(stem_y + 2); + } + }); + // Add the sorted y values to the + stem_lines.push(line_ys.sort((a, b) => a - b)); + }); + return stem_lines; +} +class TabNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.TabNote; + } + // Initialize the TabNote with a `noteStruct` full of properties + // and whether to `draw_stem` when rendering the note + constructor(noteStruct, draw_stem = false) { + super(noteStruct); + this.glyphPropsArr = []; + // Return the number of the greatest string, which is the string lowest on the display + this.greatestString = () => { + return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b)); + }; + // Return the number of the least string, which is the string highest on the display + this.leastString = () => { + return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b)); + }; + this.ghost = false; // Renders parenthesis around notes + // Note properties + // The fret positions in the note. An array of `{ str: X, fret: X }` + this.positions = noteStruct.positions || []; + // Render Options + this.render_options = Object.assign(Object.assign({}, this.render_options), { + // font size for note heads and rests + glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.TABLATURE_FONT_SCALE, + // Flag to draw a stem + draw_stem, + // Flag to draw dot modifiers + draw_dots: draw_stem, + // Flag to extend the main stem through the stave and fret positions + draw_stem_through_stave: false, + // vertical shift from stave line + y_shift: 0, + // normal glyph scale + scale: 1.0, + // default tablature font + font: `${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE}pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` }); + this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType); + (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); + this.buildStem(); + if (noteStruct.stem_direction) { + this.setStemDirection(noteStruct.stem_direction); + } + else { + this.setStemDirection(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP); + } + // Renders parenthesis around notes + this.ghost = false; + this.updateWidth(); + } + reset() { + super.reset(); + if (this.stave) + this.setStave(this.stave); + return this; + } + // Set as ghost `TabNote`, surrounds the fret positions with parenthesis. + // Often used for indicating frets that are being bent to + setGhost(ghost) { + this.ghost = ghost; + this.updateWidth(); + return this; + } + // Determine if the note has a stem + hasStem() { + if (this.render_options.draw_stem) + return true; + return false; + } + // Get the default stem extension for the note + getStemExtension() { + const glyphProps = this.getGlyphProps(); + if (this.stem_extension_override != null) { + return this.stem_extension_override; + } + if (glyphProps) { + return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP + ? glyphProps.tabnote_stem_up_extension + : glyphProps.tabnote_stem_down_extension; + } + return 0; + } + // Calculate and store the width of the note + updateWidth() { + this.glyphPropsArr = []; + this.width = 0; + for (let i = 0; i < this.positions.length; ++i) { + let fret = this.positions[i].fret; + if (this.ghost) + fret = '(' + fret + ')'; + const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.tabToGlyphProps(fret.toString(), this.render_options.scale); + this.glyphPropsArr.push(glyphProps); + this.width = Math.max(glyphProps.getWidth(), this.width); + } + // For some reason we associate a notehead glyph with a TabNote, and this + // glyph is used for certain width calculations. Of course, this is totally + // incorrect since a notehead is a poor approximation for the dimensions of + // a fret number which can have multiple digits. As a result, we must + // overwrite getWidth() to return the correct width + this.glyphProps.getWidth = () => this.width; + } + // Set the `stave` to the note + setStave(stave) { + super.setStave(stave); + const ctx = stave.getContext(); + this.setContext(ctx); + // Calculate the fret number width based on font used + if (ctx) { + this.width = 0; + for (let i = 0; i < this.glyphPropsArr.length; ++i) { + const glyphProps = this.glyphPropsArr[i]; + const text = '' + glyphProps.text; + if (text.toUpperCase() !== 'X') { + ctx.save(); + ctx.setFont(this.render_options.font); + glyphProps.width = ctx.measureText(text).width; + ctx.restore(); + glyphProps.getWidth = () => glyphProps.width; + } + this.width = Math.max(glyphProps.getWidth(), this.width); + } + this.glyphProps.getWidth = () => this.width; + } + // we subtract 1 from `line` because getYForLine expects a 0-based index, + // while the position.str is a 1-based index + const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1)); + this.setYs(ys); + if (this.stem) { + this.stem.setYBounds(this.getStemY(), this.getStemY()); + } + return this; + } + // Get the fret positions for the note + getPositions() { + return this.positions; + } + // Get the default `x` and `y` coordinates for a modifier at a specific + // `position` at a fret position `index` + getModifierStartXY(position, index) { + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); + } + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.'); + } + let x = 0; + if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT) { + x = -1 * 2; // FIXME: modifier padding, move to font file + } + else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.RIGHT) { + x = this.width + 2; // FIXME: modifier padding, move to font file + } + else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.BELOW || position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE) { + const note_glyph_width = this.glyphProps.getWidth(); + x = note_glyph_width / 2; + } + return { + x: this.getAbsoluteX() + x, + y: this.ys[index], + }; + } + // Get the default line for rest + getLineForRest() { + return Number(this.positions[0].str); + } + // Pre-render formatting + preFormat() { + if (this.preFormatted) + return; + if (this.modifierContext) + this.modifierContext.preFormat(); + // width is already set during init() + this.preFormatted = true; + } + // Get the x position for the stem + getStemX() { + return this.getCenterGlyphX(); + } + // Get the y position for the stem + getStemY() { + const num_lines = this.checkStave().getNumLines(); + // The decimal staff line amounts provide optimal spacing between the + // fret number and the stem + const stemUpLine = -0.5; + const stemDownLine = num_lines - 0.5; + const stemStartLine = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP === this.stem_direction ? stemUpLine : stemDownLine; + return this.checkStave().getYForLine(stemStartLine); + } + // Get the stem extents for the tabnote + getStemExtents() { + return this.checkStem().getExtents(); + } + // Draw the fal onto the context + drawFlag() { + var _a; + const { beam, glyphProps, render_options: { draw_stem }, } = this; + const context = this.checkContext(); + const shouldDrawFlag = beam == undefined && draw_stem; + // Now it's the flag's turn. + if (glyphProps.flag && shouldDrawFlag) { + const flag_x = this.getStemX(); + const flag_y = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN + ? // Down stems are below the note head and have flags on the right. + this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0) + : // Up stems are above the note head and have flags on the right. + this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0); + // Draw the Flag + //this.flag?.setOptions({ category: 'flag.tabStem' }); + (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y); + //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' }); + } + } + // Render the modifiers onto the context. + drawModifiers() { + this.modifiers.forEach((modifier) => { + // Only draw the dots if enabled. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isDot)(modifier) && !this.render_options.draw_dots) { + return; + } + modifier.setContext(this.getContext()); + modifier.drawWithStyle(); + }); + } + // Render the stem extension through the fret positions + drawStemThrough() { + const stemX = this.getStemX(); + const stemY = this.getStemY(); + const ctx = this.checkContext(); + const drawStem = this.render_options.draw_stem; + const stemThrough = this.render_options.draw_stem_through_stave; + if (drawStem && stemThrough) { + const numLines = this.checkStave().getNumLines(); + const stringsUsed = this.positions.map((position) => Number(position.str)); + const unusedStrings = getUnusedStringGroups(numLines, stringsUsed); + const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection()); + ctx.save(); + ctx.setLineWidth(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH); + stemLines.forEach((bounds) => { + if (bounds.length === 0) + return; + ctx.beginPath(); + ctx.moveTo(stemX, bounds[0]); + ctx.lineTo(stemX, bounds[bounds.length - 1]); + ctx.stroke(); + ctx.closePath(); + }); + ctx.restore(); + } + } + // Render the fret positions onto the context + drawPositions() { + var _a; + const ctx = this.checkContext(); + const x = this.getAbsoluteX(); + const ys = this.ys; + for (let i = 0; i < this.positions.length; ++i) { + const y = ys[i] + this.render_options.y_shift; + const glyphProps = this.glyphPropsArr[i]; + // Center the fret text beneath the notation note head + const note_glyph_width = this.glyphProps.getWidth(); + const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2; + // FIXME: Magic numbers. + ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6); + if (glyphProps.code) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code); + } + else { + ctx.save(); + ctx.setFont(this.render_options.font); + const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : ''; + ctx.fillText(text, tab_x, y + 5 * this.render_options.scale); + ctx.restore(); + } + } + } + // The main rendering function for the entire note. + draw() { + const ctx = this.checkContext(); + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', "Can't draw note without Y values."); + } + this.setRendered(); + const render_stem = this.beam == undefined && this.render_options.draw_stem; + this.applyStyle(); + ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true }); + this.drawPositions(); + this.drawStemThrough(); + if (this.stem && render_stem) { + const stem_x = this.getStemX(); + this.stem.setNoteHeadXBounds(stem_x, stem_x); + this.stem.setContext(ctx).draw(); + } + this.drawFlag(); + this.drawModifiers(); + ctx.closeGroup(); + this.restoreStyle(); + } +} + + +/***/ }), + +/***/ "./src/tabslide.ts": +/*!*************************!*\ + !*** ./src/tabslide.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabSlide": () => (/* binding */ TabSlide) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// This class implements varies types of ties between contiguous notes. The +// ties include: regular ties, hammer ons, pull offs, and slides. + + + + +class TabSlide extends _tabtie__WEBPACK_IMPORTED_MODULE_1__.TabTie { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TabSlide; + } + static get SLIDE_UP() { + return 1; + } + static get SLIDE_DOWN() { + return -1; + } + static createSlideUp(notes) { + return new TabSlide(notes, TabSlide.SLIDE_UP); + } + static createSlideDown(notes) { + return new TabSlide(notes, TabSlide.SLIDE_DOWN); + } + /** + * @param notes is a struct of the form: + * { + * first_note: Note, + * last_note: Note, + * first_indices: [n1, n2, n3], + * last_indices: [n1, n2, n3] + * } + * @param notes.first_note the starting note of the slide + * @param notes.last_note the ending note of the slide + * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed. + * @param notes.last_indices currently unused. we assume it's the same as first_indices. + * + * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN + */ + constructor(notes, direction) { + super(notes, 'sl.'); + // Determine the direction automatically if it is not provided. + if (!direction) { + let first_fret = notes.first_note.getPositions()[0].fret; + if (typeof first_fret === 'string') { + first_fret = parseInt(first_fret, 10); + } + let last_fret = notes.last_note.getPositions()[0].fret; + if (typeof last_fret === 'string') { + last_fret = parseInt(last_fret, 10); + } + // If either of the frets are 'X', parseInt() above will return NaN. + // Choose TabSlide.SLIDE_UP by default. + if (isNaN(first_fret) || isNaN(last_fret)) { + direction = TabSlide.SLIDE_UP; + } + else { + direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP; + } + } + this.direction = direction; + this.render_options.cp1 = 11; + this.render_options.cp2 = 14; + this.render_options.y_shift = 0.5; + this.resetFont(); + } + renderTie(params) { + if (params.first_ys.length === 0 || params.last_ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'No Y-values to render'); + } + const ctx = this.checkContext(); + const first_x_px = params.first_x_px; + const first_ys = params.first_ys; + const last_x_px = params.last_x_px; + const direction = params.direction; + if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadSlide', 'Invalid slide direction'); + } + // eslint-disable-next-line + const first_indices = this.notes.first_indices; + for (let i = 0; i < first_indices.length; ++i) { + const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift; + if (isNaN(slide_y)) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Bad indices for slide rendering.'); + } + ctx.beginPath(); + ctx.moveTo(first_x_px, slide_y + 3 * direction); + ctx.lineTo(last_x_px, slide_y - 3 * direction); + ctx.closePath(); + ctx.stroke(); + } + this.setRendered(); + } +} +TabSlide.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: 10, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC, +}; + + + +/***/ }), + +/***/ "./src/tabstave.ts": +/*!*************************!*\ + !*** ./src/tabstave.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabStave": () => (/* binding */ TabStave) +/* harmony export */ }); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. + + +class TabStave extends _stave__WEBPACK_IMPORTED_MODULE_0__.Stave { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabStave; + } + constructor(x, y, width, options) { + const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options); + super(x, y, width, tab_options); + } + getYForGlyphs() { + return this.getYForLine(2.5); + } + // Deprecated + addTabGlyph() { + this.addClef('tab'); + return this; + } +} + + +/***/ }), + +/***/ "./src/tabtie.ts": +/*!***********************!*\ + !*** ./src/tabtie.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabTie": () => (/* binding */ TabTie) +/* harmony export */ }); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// This class implements varies types of ties between contiguous notes. The +// ties include: regular ties, hammer ons, pull offs, and slides. + + +class TabTie extends _stavetie__WEBPACK_IMPORTED_MODULE_0__.StaveTie { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabTie; + } + static createHammeron(notes) { + return new TabTie(notes, 'H'); + } + static createPulloff(notes) { + return new TabTie(notes, 'P'); + } + /** + * @param notes is a struct that has: + * { + * first_note: Note, + * last_note: Note, + * first_indices: [n1, n2, n3], + * last_indices: [n1, n2, n3] + * } + * + * @param text + */ + constructor(notes, text) { + super(notes, text); + this.render_options.cp1 = 9; + this.render_options.cp2 = 11; + this.render_options.y_shift = 3; + this.direction = -1; // Tab tie's are always face up. + } +} + + +/***/ }), + +/***/ "./src/textbracket.ts": +/*!****************************!*\ + !*** ./src/textbracket.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextBracket": () => (/* binding */ TextBracket), +/* harmony export */ "TextBracketPosition": () => (/* binding */ TextBracketPosition) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Cyril Silverman +// +// This file implements `TextBrackets` which extend between two notes. +// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created +// using this class. + + + + + + +// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (TextBracket.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.TextBracket', args); +} +var TextBracketPosition; +(function (TextBracketPosition) { + TextBracketPosition[TextBracketPosition["TOP"] = 1] = "TOP"; + TextBracketPosition[TextBracketPosition["BOTTOM"] = -1] = "BOTTOM"; +})(TextBracketPosition || (TextBracketPosition = {})); +class TextBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TextBracket; + } + static get Position() { + return TextBracketPosition; + } + static get PositionString() { + return { + top: TextBracketPosition.TOP, + bottom: TextBracketPosition.BOTTOM, + }; + } + /** + * @deprecated Use `TextBracket.Position` instead. + */ + static get Positions() { + L('Positions is deprecated, use TextBracketPosition instead.'); + return TextBracketPosition; + } + /** + * @deprecated Use `TextBracket.PositionString` instead. + */ + static get PositionsString() { + L('PositionsString is deprecated, use PositionString instead.'); + return TextBracket.PositionString; + } + constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) { + super(); + this.start = start; + this.stop = stop; + this.text = text; + this.superscript = superscript; + this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position; + this.line = 1; + this.resetFont(); + this.render_options = { + dashed: true, + dash: [5], + color: 'black', + line_width: 1, + show_bracket: true, + bracket_height: 8, + // In the BOTTOM position, the bracket line can extend + // under the superscript. + underline_superscript: true, + }; + } + /** + * Apply the text backet styling to the provided context. + * @param ctx + * @returns this + */ + applyStyle(ctx) { + ctx.setFont(this.font); + const options = this.render_options; + ctx.setStrokeStyle(options.color); + ctx.setFillStyle(options.color); + ctx.setLineWidth(options.line_width); + return this; + } + // Set whether the bracket line should be `dashed`. You can also + // optionally set the `dash` pattern by passing in an array of numbers + setDashed(dashed, dash) { + this.render_options.dashed = dashed; + if (dash) + this.render_options.dash = dash; + return this; + } + // Set the rendering `context` for the octave bracket + setLine(line) { + this.line = line; + return this; + } + // Draw the octave bracket on the rendering context + draw() { + const ctx = this.checkContext(); + this.setRendered(); + let y = 0; + switch (this.position) { + case TextBracketPosition.TOP: + y = this.start.checkStave().getYForTopText(this.line); + break; + case TextBracketPosition.BOTTOM: + y = this.start.checkStave().getYForBottomText(this.line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK); + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`); + } + // Get the preliminary start and stop coordintates for the bracket + const start = { x: this.start.getAbsoluteX(), y }; + const stop = { x: this.stop.getAbsoluteX(), y }; + L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y); + const bracket_height = this.render_options.bracket_height * this.position; + ctx.save(); + this.applyStyle(ctx); + // Draw text + ctx.fillText(this.text, start.x, start.y); + // Get the width and height for the octave number + const main_measure = ctx.measureText(this.text); + const main_width = main_measure.width; + const main_height = main_measure.height; + // Calculate the y position for the super script + const super_y = start.y - main_height / 2.5; + // We called this.resetFont() in the constructor, so we know this.textFont is available. + // eslint-disable-next-line + const { family, size, weight, style } = this.textFont; + // To draw the superscript, we scale the font size by 1/1.4. + const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_1__.Font.scaleSize(size, 0.714286); + ctx.setFont(family, smallerFontSize, weight, style); + ctx.fillText(this.superscript, start.x + main_width + 1, super_y); + // Determine width and height of the superscript + const super_measure = ctx.measureText(this.superscript); + const super_width = super_measure.width; + const super_height = super_measure.height; + // Setup initial coordinates for the bracket line + let start_x = start.x; + let line_y = super_y; + const end_x = stop.x + this.stop.getGlyphProps().getWidth(); + // Adjust x and y coordinates based on position + if (this.position === TextBracketPosition.TOP) { + start_x += main_width + super_width + 5; + line_y -= super_height / 2.7; + } + else if (this.position === TextBracketPosition.BOTTOM) { + line_y += super_height / 2.7; + start_x += main_width + 2; + if (!this.render_options.underline_superscript) { + start_x += super_width; + } + } + if (this.render_options.dashed) { + // Main line + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash); + // Ending Bracket + if (this.render_options.show_bracket) { + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash); + } + } + else { + ctx.beginPath(); + ctx.moveTo(start_x, line_y); + // Main line + ctx.lineTo(end_x, line_y); + if (this.render_options.show_bracket) { + // Ending bracket + ctx.lineTo(end_x, line_y + bracket_height); + } + ctx.stroke(); + ctx.closePath(); + } + ctx.restore(); + } +} +TextBracket.DEBUG = false; +TextBracket.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 15, + weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC, +}; + + + +/***/ }), + +/***/ "./src/textdynamics.ts": +/*!*****************************!*\ + !*** ./src/textdynamics.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextDynamics": () => (/* binding */ TextDynamics) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +// eslint-disable-next-line +function L(...args) { + if (TextDynamics.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_4__.log)('Vex.Flow.TextDynamics', args); +} +/** + * `TextDynamics` renders traditional + * text dynamics markings, **ie: p, f, sfz, rfz, ppp** + * + * You can render any dynamics string that contains a combination of + * the following letters: P, M, F, Z, R, S + */ +class TextDynamics extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.TextDynamics; + } + /** The glyph data for each dynamics letter. */ + static get GLYPHS() { + return { + f: { + code: 'dynamicForte', + width: 12, + }, + p: { + code: 'dynamicPiano', + width: 14, + }, + m: { + code: 'dynamicMezzo', + width: 17, + }, + s: { + code: 'dynamicSforzando', + width: 10, + }, + z: { + code: 'dynamicZ', + width: 12, + }, + r: { + code: 'dynamicRinforzando', + width: 12, + }, + }; + } + /** + * Create the dynamics marking. + * + * A `TextDynamics` object inherits from `Note` so that it can be formatted + * within a `Voice`. + * + * @param noteStruct an object that contains a `duration` property and a + * `sequence` of letters that represents the letters to render. + */ + constructor(noteStruct) { + super(noteStruct); + this.sequence = (noteStruct.text || '').toLowerCase(); + this.line = noteStruct.line || 0; + this.glyphs = []; + this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE }); + L('New Dynamics Text: ', this.sequence); + } + /** Set the Stave line on which the note should be placed. */ + setLine(line) { + this.line = line; + return this; + } + /** Preformat the dynamics text. */ + preFormat() { + let total_width = 0; + // length of this.glyphs must be <= + // length of this.sequence, so if we're formatted before + // create new glyphs. + this.glyphs = []; + // Iterate through each letter + this.sequence.split('').forEach((letter) => { + // Get the glyph data for the letter + const glyph_data = TextDynamics.GLYPHS[letter]; + if (!glyph_data) + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('Invalid dynamics character: ' + letter); + const size = (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.render_options.glyph_font_size); + const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyph_data.code, size, { category: 'textNote' }); + // Add the glyph + this.glyphs.push(glyph); + total_width += glyph_data.width; + }); + // Store the width of the text + this.setWidth(total_width); + this.preFormatted = true; + return this; + } + /** Draw the dynamics text on the rendering context. */ + draw() { + this.setRendered(); + const x = this.getAbsoluteX(); + const y = this.checkStave().getYForLine(this.line + -3); + L('Rendering Dynamics: ', this.sequence); + let letter_x = x; + this.glyphs.forEach((glyph, index) => { + const current_letter = this.sequence[index]; + glyph.render(this.checkContext(), letter_x, y); + letter_x += TextDynamics.GLYPHS[current_letter].width; + }); + } +} +/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */ +TextDynamics.DEBUG = false; + + + +/***/ }), + +/***/ "./src/textformatter.ts": +/*!******************************!*\ + !*** ./src/textformatter.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextFormatter": () => (/* binding */ TextFormatter) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + +// eslint-disable-next-line +function L(...args) { + if (TextFormatter.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)('Vex.Flow.TextFormatter', args); +} +/** + * Text widths are stored in a cache, so we don't have to recompute widths + * for the same font + string combination. + * + * The cache is first keyed by the font information. The key is of the form: + * `${family}-${size}-${weight}-${style}` + * The second level key is the specific text to be measured. + * + * The stored value is the measured width in `em` units. + * textWidth == textWidthCache[cacheKey][textToMeasure] + */ +const textWidthCache = {}; +const textHeightCache = {}; +/** + * Applications may register additional fonts via `TextFormatter.registerInfo(info)`. + * The metrics for those fonts will be made available to the application. + */ +const registry = {}; +class TextFormatter { + /** + * Return all registered font families. + */ + static getFontFamilies() { + const registeredFonts = []; + for (const fontFamily in registry) { + const formatterInfo = registry[fontFamily]; + registeredFonts.push(Object.assign({}, formatterInfo)); + } + return registeredFonts; + } + /** + * Call `TextFormatter.registerInfo(info)` to register font information before using this method. + * + * This method creates a formatter for the font that most closely matches the requested font. + * We compare font family, bold, and italic attributes. + * This method will return a fallback formatter if there are no matches. + */ + static create(requestedFont = {}) { + L('create: ', requestedFont); + if (!requestedFont.family) { + requestedFont.family = _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF; + } + // TODO: One potential (small) optimization is to cache the TextFormatter object + // returned for each font info. We would probably want to clear the cache if + // the registry is ever updated. + const candidates = []; + // The incoming font family is a string of comma-separated font family names. + // (e.g., `PetalumaScript, Arial, sans-serif`). + const requestedFamilies = requestedFont.family.split(/\s*,\s*/); + for (const requestedFamily of requestedFamilies) { + for (const fontFamily in registry) { + // Support cases where the registry contains 'Roboto Slab Medium', + // but the requestedFont.family is 'Roboto Slab'. + if (fontFamily.startsWith(requestedFamily)) { + candidates.push(registry[fontFamily]); + } + } + if (candidates.length > 0) { + break; + } + } + let formatter; + if (candidates.length === 0) { + // No match, so return a fallback text formatter. + formatter = new TextFormatter(Object.values(registry)[0]); + } + else if (candidates.length === 1) { + formatter = new TextFormatter(candidates[0]); + } + else { + const bold = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isBold(requestedFont.weight); + const italic = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isItalic(requestedFont.style); + const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic); + if (perfectMatch) { + formatter = new TextFormatter(perfectMatch); + } + else { + const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold); + if (partialMatch) { + formatter = new TextFormatter(partialMatch); + } + else { + formatter = new TextFormatter(candidates[0]); + } + } + } + const fontSize = requestedFont.size; + if (typeof fontSize !== 'undefined') { + const fontSizeInPt = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(fontSize); + formatter.setFontSize(fontSizeInPt); + } + return formatter; + } + /** + * @param fontFamily used as a key to the font registry. + * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)` + */ + static getInfo(fontFamily) { + return registry[fontFamily]; + } + /** + * Apps may register their own fonts and metrics, and those metrics + * will be available to the app for formatting. + * + * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory. + * @param info + * @param overwrite + */ + static registerInfo(info, overwrite = false) { + L('registerInfo: ', info, overwrite); + const fontFamily = info.family; + const currFontInfo = registry[fontFamily]; + if (currFontInfo === undefined || overwrite) { + registry[fontFamily] = info; + } + } + /** + * Use `TextFormatter.create(...)` to build an instance from information previously + * registered via `TextFormatter.registerInfo(info)`. + */ + constructor(formatterInfo) { + /** Font family. */ + this.family = ''; + /** Specified in `pt` units. */ + this.size = 14; + /** Font metrics are extracted at 1000 upem (units per em). */ + this.resolution = 1000; + /** + * For text formatting, we do not require glyph outlines, but instead rely on glyph + * bounding box metrics such as: + * ``` + * { + * x_min: 48, + * x_max: 235, + * y_min: -17, + * y_max: 734, + * ha: 751, + * leftSideBearing: 48, + * advanceWidth: 286, + * } + * ``` + */ + this.glyphs = {}; + this.serifs = false; + this.monospaced = false; + this.italic = false; + this.bold = false; + this.superscriptOffset = 0; + this.subscriptOffset = 0; + this.maxSizeGlyph = '@'; + // This is an internal key used to index the `textWidthCache`. + this.cacheKey = ''; + this.updateParams(formatterInfo); + } + get localHeightCache() { + var _a; + if (textHeightCache[this.cacheKey] === undefined) { + textHeightCache[this.cacheKey] = {}; + } + return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {}; + } + updateParams(params) { + if (params.family) + this.family = params.family; + if (params.resolution) + this.resolution = params.resolution; + if (params.glyphs) + this.glyphs = params.glyphs; + if (params.serifs) + this.serifs = params.serifs; + if (params.monospaced) + this.monospaced = params.monospaced; + if (params.italic) + this.italic = params.italic; + if (params.bold) + this.bold = params.bold; + if (params.maxSizeGlyph) + this.maxSizeGlyph = params.maxSizeGlyph; + if (params.superscriptOffset) + this.superscriptOffset = params.superscriptOffset; + if (params.subscriptOffset) + this.subscriptOffset = params.subscriptOffset; + this.updateCacheKey(); + } + /** Create a hash with the current font data, so we can cache computed widths. */ + updateCacheKey() { + const family = this.family.replace(/\s+/g, '_'); + const size = this.size; + const weight = this.bold ? _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD : _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL; + const style = this.italic ? _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC : _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL; + // Use the same key format as SVGContext. + this.cacheKey = `${family}%${size}%${weight}%${style}`; + } + /** + * The glyphs table is indexed by the character (e.g., 'C', '@'). + * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts. + */ + getGlyphMetrics(character) { + if (this.glyphs[character]) { + return this.glyphs[character]; + } + else { + return this.glyphs[this.maxSizeGlyph]; + } + } + get maxHeight() { + const metrics = this.getGlyphMetrics(this.maxSizeGlyph); + return (metrics.ha / this.resolution) * this.fontSizeInPixels; + } + /** + * Retrieve the character's advanceWidth as a fraction of an `em` unit. + * For the space character ' ' as defined in the: + * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25. + * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485. + */ + getWidthForCharacterInEm(c) { + var _a; + const metrics = this.getGlyphMetrics(c); + if (!metrics) { + // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript. + return 0.65; + } + else { + const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0; + return advanceWidth / this.resolution; + } + } + /** + * Retrieve the character's y bounds (ymin, ymax) and height. + */ + getYForCharacterInPx(c) { + const metrics = this.getGlyphMetrics(c); + const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight }; + if (!metrics) { + return rv; + } + else { + if (typeof metrics.y_min === 'number') { + rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels; + } + if (typeof metrics.y_max === 'number') { + rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels; + } + rv.height = rv.yMax - rv.yMin; + return rv; + } + } + getYForStringInPx(str) { + const entry = this.localHeightCache; + const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight }; + const cache = entry[str]; + if (cache !== undefined) { + return cache; + } + for (let i = 0; i < str.length; ++i) { + const curY = this.getYForCharacterInPx(str[i]); + extent.yMin = Math.min(extent.yMin, curY.yMin); + extent.yMax = Math.max(extent.yMax, curY.yMax); + extent.height = extent.yMax - extent.yMin; + } + entry[str] = extent; + return extent; + } + /** + * Retrieve the total width of `text` in `em` units. + */ + getWidthForTextInEm(text) { + const key = this.cacheKey; + // Get the cache for this specific font family, size, weight, style combination. + // The cache contains previously computed widths for different `text` strings. + let cachedWidths = textWidthCache[key]; + if (cachedWidths === undefined) { + cachedWidths = {}; + textWidthCache[key] = cachedWidths; + } + let width = cachedWidths[text]; + if (width === undefined) { + width = 0; + for (let i = 0; i < text.length; ++i) { + width += this.getWidthForCharacterInEm(text[i]); + } + cachedWidths[text] = width; + } + return width; + } + /** The width of the text (in `em`) is scaled by the font size (in `px`). */ + getWidthForTextInPx(text) { + return this.getWidthForTextInEm(text) * this.fontSizeInPixels; + } + /** + * @param size in pt. + */ + setFontSize(size) { + this.size = size; + // The width cache key depends on the current font size. + this.updateCacheKey(); + return this; + } + /** `this.size` is specified in points. Convert to pixels. */ + get fontSizeInPixels() { + return this.size * _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleToPxFrom.pt; + } + getResolution() { + return this.resolution; + } +} +/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */ +TextFormatter.DEBUG = false; + + + +/***/ }), + +/***/ "./src/textnote.ts": +/*!*************************!*\ + !*** ./src/textnote.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextJustification": () => (/* binding */ TextJustification), +/* harmony export */ "TextNote": () => (/* binding */ TextNote) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +var TextJustification; +(function (TextJustification) { + TextJustification[TextJustification["LEFT"] = 1] = "LEFT"; + TextJustification[TextJustification["CENTER"] = 2] = "CENTER"; + TextJustification[TextJustification["RIGHT"] = 3] = "RIGHT"; +})(TextJustification || (TextJustification = {})); +/** + * `TextNote` is a notation element that is positioned in time. Generally + * meant for objects that sit above/below the staff and inline with each other. + * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`. + * Examples of this would be such as dynamics, lyrics, chord changes, etc. + */ +class TextNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TextNote; + } + /** Glyph data. */ + static get GLYPHS() { + return { + segno: { + code: 'segno', + }, + tr: { + code: 'ornamentTrill', + }, + mordent: { + code: 'ornamentMordent', + }, + mordent_upper: { + code: 'ornamentShortTrill', + }, + mordent_lower: { + code: 'ornamentMordent', + }, + f: { + code: 'dynamicForte', + }, + p: { + code: 'dynamicPiano', + }, + m: { + code: 'dynamicMezzo', + }, + s: { + code: 'dynamicSforzando', + }, + z: { + code: 'dynamicZ', + }, + coda: { + code: 'coda', + }, + pedal_open: { + code: 'keyboardPedalPed', + }, + pedal_close: { + code: 'keyboardPedalUp', + }, + caesura_straight: { + code: 'caesura', + }, + caesura_curved: { + code: 'caesuraCurved', + }, + breath: { + code: 'breathMarkComma', + }, + tick: { + code: 'breathMarkTick', + }, + turn: { + code: 'ornamentTurn', + }, + turn_inverted: { + code: 'ornamentTurnSlash', + }, + }; + } + constructor(noteStruct) { + super(noteStruct); + this.text = noteStruct.text || ''; + this.superscript = noteStruct.superscript; + this.subscript = noteStruct.subscript; + this.setFont(noteStruct.font); + this.line = noteStruct.line || 0; + this.smooth = noteStruct.smooth || false; + this.ignore_ticks = noteStruct.ignore_ticks || false; + this.justification = TextJustification.LEFT; + // Determine and set initial note width. Note that the text width is + // an approximation and isn't very accurate. The only way to accurately + // measure the length of text is with `CanvasRenderingContext2D.measureText()`. + if (noteStruct.glyph) { + const struct = TextNote.GLYPHS[noteStruct.glyph]; + if (!struct) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('Invalid glyph type: ' + noteStruct.glyph); + this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(struct.code, _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, { category: 'textNote' }); + this.setWidth(this.glyph.getMetrics().width); + } + else { + this.glyph = undefined; + } + } + /** Set the horizontal justification of the TextNote. */ + setJustification(just) { + this.justification = just; + return this; + } + /** Set the Stave line on which the note should be placed. */ + setLine(line) { + this.line = line; + return this; + } + /** Return the Stave line on which the TextNote is placed. */ + getLine() { + return this.line; + } + /** Return the unformatted text of this TextNote. */ + getText() { + return this.text; + } + /** Pre-render formatting. */ + preFormat() { + if (this.preFormatted) + return; + const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`); + if (this.smooth) { + this.setWidth(0); + } + else { + if (this.glyph) { + // Width already set. + } + else { + const ctx = this.checkContext(); + ctx.setFont(this.textFont); + this.setWidth(ctx.measureText(this.text).width); + } + } + if (this.justification === TextJustification.CENTER) { + this.leftDisplacedHeadPx = this.width / 2; + } + else if (this.justification === TextJustification.RIGHT) { + this.leftDisplacedHeadPx = this.width; + } + // We reposition to the center of the note head + this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2; + this.preFormatted = true; + } + /** + * Renders the TextNote. + * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`. + */ + draw() { + const ctx = this.checkContext(); + const stave = this.checkStave(); + const tickContext = this.checkTickContext(`Can't draw without a TickContext.`); + this.setRendered(); + // Reposition to center of note head + let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2; + // Align based on tick-context width. + const width = this.getWidth(); + if (this.justification === TextJustification.CENTER) { + x -= width / 2; + } + else if (this.justification === TextJustification.RIGHT) { + x -= width; + } + let y; + if (this.glyph) { + y = stave.getYForLine(this.line + -3); + this.glyph.render(ctx, x, y); + } + else { + y = stave.getYForLine(this.line + -3); + this.applyStyle(ctx); + ctx.setFont(this.textFont); + ctx.fillText(this.text, x, y); + const height = ctx.measureText(this.text).height; + // We called this.setFont(...) in the constructor, so we know this.textFont is available. + // eslint-disable-next-line + const { family, size, weight, style } = this.textFont; + // Scale the font size by 1/1.3. + const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, 0.769231); + if (this.superscript) { + ctx.setFont(family, smallerFontSize, weight, style); + ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2); + } + if (this.subscript) { + ctx.setFont(family, smallerFontSize, weight, style); + ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1); + } + this.restoreStyle(ctx); + } + } +} +TextNote.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: 12, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; +TextNote.Justification = TextJustification; + + + +/***/ }), + +/***/ "./src/tickable.ts": +/*!*************************!*\ + !*** ./src/tickable.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tickable": () => (/* binding */ Tickable) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +/** + * Tickable represents a element that sit on a score and + * has a duration, i.e., Tickables occupy space in the musical rendering dimension. + */ +class Tickable extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Tickable; + } + constructor() { + super(); + this._preFormatted = false; + this._postFormatted = false; + // These properties represent the duration of + // this tickable element. + this.ticks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); // Fractional value of ticks + this.intrinsicTicks = 0; // Floating point value of ticks + this.tickMultiplier = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 1); + // Formatter metrics + this.width = 0; + this.x_shift = 0; // Shift from tick context + this.modifiers = []; + this.tupletStack = []; + this.align_center = false; + this.center_x_shift = 0; // Shift from tick context if center aligned + // This flag tells the formatter to ignore this tickable during + // formatting and justification. It is set by tickables such as BarNote. + this.ignore_ticks = false; + // This is a space for an external formatting class or function to maintain + // metrics. + this.formatterMetrics = { + // The freedom of a tickable is the distance it can move without colliding + // with neighboring elements. A formatter can set these values during its + // formatting pass, which a different formatter can then use to fine tune. + freedom: { left: 0, right: 0 }, + // The simplified rational duration of this tick as a string. It can be + // used as an index to a map or hashtable. + duration: '', + // The number of formatting iterations undergone. + iterations: 0, + // The space in pixels allocated by this formatter, along with the mean space + // for tickables of this duration, and the deviation from the mean. + space: { + used: 0, + mean: 0, + deviation: 0, + }, + }; + } + /** Reset the Tickable, this function will be overloaded. */ + reset() { + return this; + } + /** Return the ticks. */ + getTicks() { + return this.ticks; + } + /** Check if it ignores the ticks. */ + shouldIgnoreTicks() { + return this.ignore_ticks; + } + /** Ignore the ticks. */ + setIgnoreTicks(flag) { + this.ignore_ticks = flag; + return this; + } + /** Set width of note. Used by the formatter for positioning. */ + setWidth(width) { + this.width = width; + } + /** Get width of note. Used by the formatter for positioning. */ + getWidth() { + if (!this._preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('UnformattedNote', "Can't call GetWidth on an unformatted note."); + } + return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0); + } + /** Displace note by `x` pixels. Used by the formatter. */ + setXShift(x) { + this.x_shift = x; + return this; + } + /** Get the `x` displaced pixels of the note. */ + getXShift() { + return this.x_shift; + } + /** Get `x` position of this tick context. */ + getX() { + const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`); + return tickContext.getX() + this.x_shift; + } + /** Return the formatterMetrics. */ + getFormatterMetrics() { + return this.formatterMetrics; + } + /** Return the center `x` shift. */ + getCenterXShift() { + if (this.isCenterAligned()) { + return this.center_x_shift; + } + return 0; + } + /** Set the center `x` shift. */ + setCenterXShift(centerXShift) { + this.center_x_shift = centerXShift; + return this; + } + // Check if tickable is center aligned. */ + isCenterAligned() { + return this.align_center; + } + // Set/unset center alignment. */ + setCenterAlignment(align_center) { + this.align_center = align_center; + return this; + } + /** + * Return the associated voice. Every tickable must be associated with a voice. + * This allows formatters and preFormatter to associate them with the right modifierContexts. + */ + getVoice() { + return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.voice, 'NoVoice', 'Tickable has no voice.'); + } + /** Set the associated voice. */ + setVoice(voice) { + this.voice = voice; + } + /** Get the tuplet. */ + getTuplet() { + return this.tuplet; + } + /** Return a list of Tuplets. */ + getTupletStack() { + return this.tupletStack; + } + /** + * Reset the specific Tuplet (if this is not provided, all tuplets are reset). + * Remove any prior tuplets from the tick calculation and + * reset the intrinsic tick value. + */ + resetTuplet(tuplet) { + let noteCount; + let notesOccupied; + if (tuplet) { + const i = this.tupletStack.indexOf(tuplet); + if (i !== -1) { + this.tupletStack.splice(i, 1); + noteCount = tuplet.getNoteCount(); + notesOccupied = tuplet.getNotesOccupied(); + // Revert old multiplier by inverting numerator & denom.: + this.applyTickMultiplier(noteCount, notesOccupied); + } + return this; + } + while (this.tupletStack.length) { + tuplet = this.tupletStack.pop(); + noteCount = tuplet.getNoteCount(); + notesOccupied = tuplet.getNotesOccupied(); + // Revert old multiplier by inverting numerator & denom.: + this.applyTickMultiplier(noteCount, notesOccupied); + } + return this; + } + /** Attach to new tuplet. */ + setTuplet(tuplet) { + if (tuplet) { + this.tupletStack.push(tuplet); + const noteCount = tuplet.getNoteCount(); + const notesOccupied = tuplet.getNotesOccupied(); + this.applyTickMultiplier(notesOccupied, noteCount); + } + this.tuplet = tuplet; + return this; + } + /** + * Add self to the provided ModifierContext `mc`. + * If this tickable has modifiers, set modifierContext. + * @returns this + */ + addToModifierContext(mc) { + this.modifierContext = mc; + for (let i = 0; i < this.modifiers.length; ++i) { + this.modifierContext.addMember(this.modifiers[i]); + } + this.modifierContext.addMember(this); + this._preFormatted = false; + return this; + } + /** + * Optional, if tickable has modifiers, associate a Modifier. + * @param mod the modifier + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + addModifier(modifier, index = 0) { + this.modifiers.push(modifier); + this._preFormatted = false; + return this; + } + /** Get the list of associated modifiers. */ + getModifiers() { + return this.modifiers; + } + /** Set the Tick Context. */ + setTickContext(tc) { + this.tickContext = tc; + this._preFormatted = false; + } + checkTickContext(message = 'Tickable has no tick context.') { + return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.tickContext, 'NoTickContext', message); + } + /** Preformat the Tickable. */ + preFormat() { + if (this._preFormatted) + return; + this.width = 0; + if (this.modifierContext) { + this.modifierContext.preFormat(); + this.width += this.modifierContext.getWidth(); + } + } + /** Set preformatted status. */ + set preFormatted(value) { + this._preFormatted = value; + } + get preFormatted() { + return this._preFormatted; + } + /** Postformat the Tickable. */ + postFormat() { + if (this._postFormatted) + return this; + this._postFormatted = true; + return this; + } + /** Set postformatted status. */ + set postFormatted(value) { + this._postFormatted = value; + } + get postFormatted() { + return this._postFormatted; + } + /** Return the intrinsic ticks. */ + getIntrinsicTicks() { + return this.intrinsicTicks; + } + /** Set the intrinsic ticks. */ + setIntrinsicTicks(intrinsicTicks) { + this.intrinsicTicks = intrinsicTicks; + this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks); + } + /** Get the tick multiplier. */ + getTickMultiplier() { + return this.tickMultiplier; + } + /** Apply a tick multiplier. */ + applyTickMultiplier(numerator, denominator) { + this.tickMultiplier.multiply(numerator, denominator); + this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks); + } + /** Set the duration. */ + setDuration(duration) { + const ticks = duration.numerator * (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION / duration.denominator); + this.ticks = this.tickMultiplier.clone().multiply(ticks); + this.intrinsicTicks = this.ticks.value(); + } + getAbsoluteX() { + const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`); + return tickContext.getX(); + } + /** Attach this note to a modifier context. */ + setModifierContext(mc) { + this.modifierContext = mc; + return this; + } + /** Get `ModifierContext`. */ + getModifierContext() { + return this.modifierContext; + } + /** Check and get `ModifierContext`. */ + checkModifierContext() { + return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.'); + } +} + + +/***/ }), + +/***/ "./src/tickcontext.ts": +/*!****************************!*\ + !*** ./src/tickcontext.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TickContext": () => (/* binding */ TickContext) +/* harmony export */ }); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// A formatter for abstract tickable objects, such as notes, chords, +// tabs, etc. + + +/** + * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc. + */ +class TickContext { + static getNextContext(tContext) { + const contexts = tContext.tContexts; + const index = contexts.indexOf(tContext); + if (index + 1 < contexts.length) + return contexts[index + 1]; + } + constructor(options) { + this.preFormatted = false; + this.postFormatted = false; + this.tickID = options && options.tickID ? options.tickID : 0; + this.currentTick = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1); + this.maxTicks = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1); + this.maxTickable = undefined; // Biggest tickable + this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks + this.minTickable = undefined; + this.padding = 1; // padding on each side (width += padding * 2) + this.x = 0; + this.xBase = 0; // base x position without xOffset + this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO) + this.tickables = []; // Notes, tabs, chords, lyrics. + this.tickablesByVoice = {}; // Tickables indexed by voice number + // Formatting metrics + this.notePx = 0; // width of widest note in this context + this.glyphPx = 0; // width of glyph (note head) + this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes + this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes + this.modLeftPx = 0; // Left modifier pixels + this.modRightPx = 0; // Right modifier pixels + this.totalLeftPx = 0; // Total left pixels + this.totalRightPx = 0; // Total right pixels + this.tContexts = []; // Parent array of tick contexts + this.width = 0; + this.formatterMetrics = { + // The freedom of a tickcontext is the distance it can move without colliding + // with neighboring elements. A formatter can set these values during its + // formatting pass, which a different formatter can then use to fine tune. + freedom: { left: 0, right: 0 }, + }; + } + getTickID() { + return this.tickID; + } + getX() { + return this.x; + } + setX(x) { + this.x = x; + this.xBase = x; + this.xOffset = 0; + return this; + } + getXBase() { + return this.xBase; + } // use of xBase and xOffset is optional, avoids offset creep + setXBase(xBase) { + this.xBase = xBase; + this.x = xBase + this.xOffset; + } + getXOffset() { + return this.xOffset; + } + setXOffset(xOffset) { + this.xOffset = xOffset; + this.x = this.xBase + xOffset; + } + getWidth() { + return this.width + this.padding * 2; + } + setPadding(padding) { + this.padding = padding; + return this; + } + getMaxTicks() { + return this.maxTicks; + } + getMinTicks() { + return this.minTicks; + } + getMaxTickable() { + return this.maxTickable; + } + getMinTickable() { + return this.minTickable; + } + getTickables() { + return this.tickables; + } + /** + * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex). + * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63 + * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable. + */ + getTickableForVoice(voiceIndex) { + return this.tickablesByVoice[voiceIndex]; + } + getTickablesByVoice() { + return this.tickablesByVoice; + } + getCenterAlignedTickables() { + return this.tickables.filter((tickable) => tickable.isCenterAligned()); + } + /** Gets widths context, note and left/right modifiers for formatting. */ + getMetrics() { + const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this; + return { + width, + glyphPx, + notePx, + leftDisplacedHeadPx, + rightDisplacedHeadPx, + modLeftPx, + modRightPx, + totalLeftPx, + totalRightPx, + }; + } + getCurrentTick() { + return this.currentTick; + } + setCurrentTick(tick) { + this.currentTick = tick; + this.preFormatted = false; + } + addTickable(tickable, voiceIndex) { + if (!tickable) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid tickable added.'); + } + if (!tickable.shouldIgnoreTicks()) { + const ticks = tickable.getTicks(); + if (ticks.greaterThan(this.maxTicks)) { + this.maxTicks = ticks.clone(); + this.maxTickable = tickable; + } + if (this.minTicks == null) { + this.minTicks = ticks.clone(); + this.minTickable = tickable; + } + else if (ticks.lessThan(this.minTicks)) { + this.minTicks = ticks.clone(); + this.minTickable = tickable; + } + } + tickable.setTickContext(this); + this.tickables.push(tickable); + this.tickablesByVoice[voiceIndex || 0] = tickable; + this.preFormatted = false; + return this; + } + preFormat() { + if (this.preFormatted) + return this; + for (let i = 0; i < this.tickables.length; ++i) { + const tickable = this.tickables[i]; + tickable.preFormat(); + const metrics = tickable.getMetrics(); + // Maintain max displaced head pixels from all tickables in the context + this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx); + this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx); + // Maintain the widest note for all tickables in the context + this.notePx = Math.max(this.notePx, metrics.notePx); + // Maintain the widest note head + this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0); + // Total modifier shift + this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx); + this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx); + // Total shift + this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx); + this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx); + // Recalculate the tick context total width + this.width = this.notePx + this.totalLeftPx + this.totalRightPx; + } + return this; + } + postFormat() { + if (this.postFormatted) + return this; + this.postFormatted = true; + return this; + } + getFormatterMetrics() { + return this.formatterMetrics; + } +} + + +/***/ }), + +/***/ "./src/timesigglyph.ts": +/*!*****************************!*\ + !*** ./src/timesigglyph.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TimeSignatureGlyph": () => (/* binding */ TimeSignatureGlyph) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// Renders time signatures glyphs for staffs +// This class is used by TimeSignature to render the associated glyphs + + +class TimeSignatureGlyph extends _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph { + constructor(timeSignature, topDigits, botDigits, code, point, options) { + var _a; + super(code, point, options); + this.timeSignature = timeSignature; + this.topGlyphs = []; + this.botGlyphs = []; + let topWidth = 0; + let height = 0; + for (let i = 0; i < topDigits.length; ++i) { + let timeSigType = topDigits[i]; + switch (topDigits[i]) { + case '-': + timeSigType = 'Minus'; + break; + case '+': + timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus'; + break; + case '(': + timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft'; + break; + case ')': + timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight'; + break; + } + const topGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point); + this.topGlyphs.push(topGlyph); + topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0; + height = Math.max(height, topGlyph.getMetrics().height); + } + let botWidth = 0; + for (let i = 0; i < botDigits.length; ++i) { + let timeSigType = botDigits[i]; + switch (botDigits[i]) { + case '+': + timeSigType = 'PlusSmall'; + break; + case '(': + timeSigType = 'ParensLeftSmall'; + break; + case ')': + timeSigType = 'ParensRightSmall'; + break; + } + const botGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point); + this.botGlyphs.push(botGlyph); + botWidth += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(botGlyph.getMetrics().width); + height = Math.max(height, botGlyph.getMetrics().height); + } + // If the height of the digits is more than two staff spaces (20), shift to the next line + // in order to center the digits on lines 1 and 5 rather than 2 and 4. + this.lineShift = height > 22 ? 1 : 0; + this.width = Math.max(topWidth, botWidth); + this.xMin = this.getMetrics().x_min; + this.topStartX = (this.width - topWidth) / 2.0; + this.botStartX = (this.width - botWidth) / 2.0; + this.reset(); + } + getMetrics() { + return { + x_min: this.xMin, + x_max: this.xMin + this.width, + width: this.width, + }; + } + renderToStave(x) { + const stave = this.checkStave(); + const ctx = this.checkContext(); + let start_x = x + this.topStartX; + let y = 0; + if (this.botGlyphs.length > 0) + y = stave.getYForLine(this.timeSignature.topLine - this.lineShift); + else + y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2; + for (let i = 0; i < this.topGlyphs.length; ++i) { + const glyph = this.topGlyphs[i]; + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y); + start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width); + } + start_x = x + this.botStartX; + y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift); + for (let i = 0; i < this.botGlyphs.length; ++i) { + const glyph = this.botGlyphs[i]; + this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine()); + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y); + start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width); + } + } +} + + +/***/ }), + +/***/ "./src/timesignature.ts": +/*!******************************!*\ + !*** ./src/timesignature.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TimeSignature": () => (/* binding */ TimeSignature) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./timesigglyph */ "./src/timesigglyph.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// Implements time signatures glyphs for staffs +// See tables.js for the internal time signatures +// representation + + + + + + +const assertIsValidTimeSig = (timeSpec) => { + const numbers = timeSpec.split('/'); + if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form "/"`); + } + numbers.forEach((number) => { + // Characters consisting in number 0..9, '+', '-', '(' or ')' + if (/^[0-9+\-()]+$/.test(number) == false) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`); + } + }); +}; +/** + * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from + * a provided "timeSpec" such as "4/4", "C|" (cut time), or even something more advanced + * such as "3/4(6/8)" or "2/4+5/8". + */ +class TimeSignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TimeSignature; + } + static get glyphs() { + return { + C: { + code: 'timeSigCommon', + line: 2, + }, + 'C|': { + code: 'timeSigCutCommon', + line: 2, + }, + }; + } + constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) { + super(); + this.timeSpec = '4/4'; + this.line = 0; + this.is_numeric = true; + this.validate_args = validate_args; + const padding = customPadding; + // point must be defined before parsing spec. + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont(); + this.point = musicFont.lookupMetric('digits.point') || _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE; + const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0); + this.topLine = 2 + fontLineShift; + this.bottomLine = 4 + fontLineShift; + this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN); + this.setTimeSig(timeSpec); + this.setPadding(padding); + } + /** + * Return TimeSignatureInfo given a string, consisting of line (number), + * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or + * TimeSignatureGlyph object). + */ + parseTimeSpec(timeSpec) { + var _a, _b; + if (timeSpec === 'C' || timeSpec === 'C|') { + const { line, code } = TimeSignature.glyphs[timeSpec]; + return { + line, + num: false, + glyph: new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE), + }; + } + if (this.validate_args) { + assertIsValidTimeSig(timeSpec); + } + const parts = timeSpec.split('/'); + return { + line: 0, + num: true, + glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''), + }; + } + /** + * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both + * top and bottom digits along with plus signs etc.) + */ + makeTimeSignatureGlyph(topDigits, botDigits) { + // note that 'code' is ignored by TimeSignatureGlyph when rendering. + return new _timesigglyph__WEBPACK_IMPORTED_MODULE_3__.TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point); + } + /** + * Returns {line, num (=getIsNumeric), glyph} -- + * but these can also be accessed directly w/ getters and setters. + */ + getInfo() { + const { line, is_numeric, glyph } = this; + return { line, num: is_numeric, glyph }; + } + /** + * Set a new time signature specification without changing customPadding, etc. + * + * The getter for this is `getTimeSpec` not `getTimeSig`. + */ + setTimeSig(timeSpec) { + this.timeSpec = timeSpec; + const info = this.parseTimeSpec(timeSpec); + this.setGlyph(info.glyph); + this.is_numeric = info.num; + this.line = info.line; + return this; + } + /** + * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature + */ + getTimeSpec() { + return this.timeSpec; + } + /** + * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/ + * denominator time signatures such as 3/4 and 2 for cut/common. + */ + getLine() { + return this.line; + } + /** + * Set the line number that the TimeSignature sits on. Half-values are acceptable + * for spaces, etc. Can be altered, for instance, for signatures that sit above the + * staff in large orchestral scores. + */ + setLine(line) { + this.line = line; + } + /** + * Get the Glyph object used to create the time signature. Numeric time signatures + * such as 3/8 have a composite Glyph stored as a single Glyph object. + */ + getGlyph() { + return this.glyph; + } + /** + * Set the Glyph object used to draw the time signature, and update the width of the + * TimeSignature to match. The Glyph must define width in its metrics. + */ + setGlyph(glyph) { + this.glyph = glyph; + this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width)); + } + /** + * Return a boolean on whether this TimeSignature is drawn with one or more numbers + * (such as 4/4) or not (as in cut time). + */ + getIsNumeric() { + return this.is_numeric; + } + /** + * Set whether this TimeSignature is drawn with one or more numbers. + */ + setIsNumeric(isNumeric) { + this.is_numeric = isNumeric; + } + /** + * Draw the time signature on a Stave using its RenderContext. Both setStave + * and setContext must already be run. + */ + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('timesignature', this.getAttribute('id')); + this.glyph.setStave(stave); + this.glyph.setContext(ctx); + this.placeGlyphOnLine(this.glyph, stave, this.line); + this.glyph.renderToStave(this.x); + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} + + +/***/ }), + +/***/ "./src/timesignote.ts": +/*!****************************!*\ + !*** ./src/timesignote.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TimeSigNote": () => (/* binding */ TimeSigNote) +/* harmony export */ }); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Taehoon Moon 2014 + + + +class TimeSigNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TimeSigNote; + } + constructor(timeSpec, customPadding) { + super({ duration: 'b' }); + this.timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_1__.TimeSignature(timeSpec, customPadding); + this.setWidth(this.timeSig.getGlyph().getMetrics().width); + // Note properties + this.ignore_ticks = true; + } + /* Overridden to ignore */ + // eslint-disable-next-line + addToModifierContext(mc) { + // DO NOTHING. + return this; + } + preFormat() { + this.preFormatted = true; + return this; + } + draw() { + const stave = this.checkStave(); + const ctx = this.checkContext(); + this.setRendered(); + const tsGlyph = this.timeSig.getGlyph(); + if (!tsGlyph.getContext()) { + tsGlyph.setContext(ctx); + } + tsGlyph.setStave(stave); + tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs()); + tsGlyph.renderToStave(this.getAbsoluteX()); + } +} + + +/***/ }), + +/***/ "./src/tremolo.ts": +/*!************************!*\ + !*** ./src/tremolo.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tremolo": () => (/* binding */ Tremolo) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Mike Corrigan +// MIT License + + + + + + + +/** Tremolo implements tremolo notation. */ +class Tremolo extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Tremolo; + } + /** + * @param num number of bars + */ + constructor(num) { + super(); + this.num = num; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.CENTER; + this.code = 'tremolo1'; + // big strokes scales initialised to 1 (no scale) + this.y_spacing_scale = 1; + this.extra_stroke_scale = 1; + } + /** Draw the tremolo on the rendering context. */ + draw() { + var _a; + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const stemDirection = note.getStemDirection(); + const start = note.getModifierStartXY(this.position, this.index); + let x = start.x; + const gn = (0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isGraceNote)(note); + const scale = gn ? _gracenote__WEBPACK_IMPORTED_MODULE_1__.GraceNote.SCALE : 1; + const category = `tremolo.${gn ? 'grace' : 'default'}`; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.currentMusicFont(); + let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection; + // add y_spacing_scale for big strokes (#1258) + y_spacing *= this.y_spacing_scale; + const height = this.num * y_spacing; + let y = note.getStemExtents().baseY - height; + if (stemDirection < 0) { + y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale; + } + else { + y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale; + } + const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_3__.Note.getPoint(gn ? 'grace' : 'default'); + x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === _stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP ? 'Up' : 'Down'}`); + for (let i = 0; i < this.num; ++i) { + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale }); + y += y_spacing; + } + } +} + + +/***/ }), + +/***/ "./src/tuning.ts": +/*!***********************!*\ + !*** ./src/tuning.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tuning": () => (/* binding */ Tuning) +/* harmony export */ }); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + +/** `Tuning` implements varies types of tunings for tablature. */ +class Tuning { + static get names() { + return { + standard: 'E/5,B/4,G/4,D/4,A/3,E/3', + dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3', + dropd: 'E/5,B/4,G/4,D/4,A/3,D/3', + eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3', + standardBanjo: 'D/5,B/4,G/4,D/4,G/5', + doubleCBanjo: 'D/5,C/5,G/4,C/4,G/5', + doubleDBanjo: 'E/5,D/5,A/4,D/4,A/5', + sawmillBanjo: 'D/5,C/5,G/4,D/4,G/5', + }; + } + /** + * Constructor. + * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings + */ + constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') { + this.tuningValues = []; + // Default to standard tuning. + this.setTuning(tuningString); + } + /** Return the note number associated to the note string. */ + noteToInteger(noteString) { + var _a; + return (_a = _tables__WEBPACK_IMPORTED_MODULE_0__.Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1; + } + /** + * Set tuning identified by tuning name (eg. 'dagdad') + * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings + */ + setTuning(tuningString) { + if (Tuning.names[tuningString]) { + tuningString = Tuning.names[tuningString]; + } + this.tuningValues = []; + const keys = tuningString.split(/\s*,\s*/); + if (keys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`); + } + for (let i = 0; i < keys.length; ++i) { + this.tuningValues[i] = this.noteToInteger(keys[i]); + } + } + /** Return the note number associated with a tablature string. */ + getValueForString(stringNum) { + const s = Number(stringNum); + if (s < 1 || s > this.tuningValues.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`); + } + return this.tuningValues[s - 1]; + } + /** Return the note number associated with a tablature string and fret. */ + getValueForFret(fretNum, stringNum) { + const stringValue = this.getValueForString(stringNum); + const f = Number(fretNum); + if (f < 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`); + } + return stringValue + f; + } + /** Return the note string associated with tablature string and fret. */ + getNoteForFret(fretNum, stringNum) { + const noteValue = this.getValueForFret(fretNum, stringNum); + const octave = Math.floor(noteValue / 12); + const value = noteValue % 12; + return `${_tables__WEBPACK_IMPORTED_MODULE_0__.Tables.integerToNote(value)}/${octave}`; + } +} + + +/***/ }), + +/***/ "./src/tuplet.ts": +/*!***********************!*\ + !*** ./src/tuplet.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tuplet": () => (/* binding */ Tuplet), +/* harmony export */ "TupletLocation": () => (/* binding */ TupletLocation) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +/** + * ## Description + * + * Create a new tuplet from the specified notes. The notes must + * be part of the same voice. If they are of different rhythmic + * values, then options.num_notes must be set. + * + * @constructor + * @param {Array.} A set of notes: staveNotes, + * notes, etc... any class that inherits stemmableNote at some + * point in its prototype chain. + * @param options: object { + * + * num_notes: fit this many notes into... + * notes_occupied: ...the space of this many notes + * + * Together, these two properties make up the tuplet ratio + * in the form of num_notes : notes_occupied. + * num_notes defaults to the number of notes passed in, so + * it is important that if you omit this property, all of + * the notes passed should be of the same note value. + * notes_occupied defaults to 2 -- so you should almost + * certainly pass this parameter for anything other than + * a basic triplet. + * + * location: + * default 1, which is above the notes: ┌─── 3 ───┐ + * -1 is below the notes └─── 3 ───┘ + * + * bracketed: boolean, draw a bracket around the tuplet number + * when true: ┌─── 3 ───┐ when false: 3 + * defaults to true if notes are not beamed, false otherwise + * + * ratioed: boolean + * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐ + * defaults to true if the difference between num_notes and + * notes_occupied is greater than 1. + * + * y_offset: int, default 0 + * manually offset a tuplet, for instance to avoid collisions + * with articulations, etc... + * } + */ + + + + + + + +var TupletLocation; +(function (TupletLocation) { + TupletLocation[TupletLocation["BOTTOM"] = -1] = "BOTTOM"; + TupletLocation[TupletLocation["TOP"] = 1] = "TOP"; +})(TupletLocation || (TupletLocation = {})); +class Tuplet extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Tuplet; + } + static get LOCATION_TOP() { + return TupletLocation.TOP; + } + static get LOCATION_BOTTOM() { + return TupletLocation.BOTTOM; + } + static get NESTING_OFFSET() { + return 15; + } + static get metrics() { + const tupletMetrics = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().tuplet; + if (!tupletMetrics) + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `tuplet missing`); + return tupletMetrics; + } + constructor(notes, options = {}) { + super(); + this.numerator_glyphs = []; + this.denom_glyphs = []; + if (!notes || !notes.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for tuplet.'); + } + this.options = options; + this.notes = notes; + this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length; + // We accept beats_occupied, but warn that it's deprecated: + // the preferred property name is now notes_occupied. + if (this.options.beats_occupied) { + this.beatsOccupiedDeprecationWarning(); + } + this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2; + if (this.options.bracketed != undefined) { + this.bracketed = this.options.bracketed; + } + else { + this.bracketed = notes.some((note) => !note.hasBeam()); + } + this.ratioed = + this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1; + this.point = (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE * 3) / 5; + this.y_pos = 16; + this.x_pos = 100; + this.width = 200; + this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP); + _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter.AlignRestsToNotes(notes, true, true); + this.resolveGlyphs(); + this.attach(); + } + attach() { + for (let i = 0; i < this.notes.length; i++) { + const note = this.notes[i]; + note.setTuplet(this); + } + } + detach() { + for (let i = 0; i < this.notes.length; i++) { + const note = this.notes[i]; + note.resetTuplet(this); + } + } + /** + * Set whether or not the bracket is drawn. + */ + setBracketed(bracketed) { + this.bracketed = !!bracketed; + return this; + } + /** + * Set whether or not the ratio is shown. + */ + setRatioed(ratioed) { + this.ratioed = !!ratioed; + return this; + } + /** + * Set the tuplet indicator to be displayed either on the top or bottom of the stave. + */ + setTupletLocation(location) { + if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) { + // eslint-disable-next-line + console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`); + location = Tuplet.LOCATION_TOP; + } + this.location = location; + return this; + } + getNotes() { + return this.notes; + } + getNoteCount() { + return this.num_notes; + } + beatsOccupiedDeprecationWarning() { + // eslint-disable-next-line + console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.'); + } + getBeatsOccupied() { + this.beatsOccupiedDeprecationWarning(); + return this.getNotesOccupied(); + } + setBeatsOccupied(beats) { + this.beatsOccupiedDeprecationWarning(); + return this.setNotesOccupied(beats); + } + getNotesOccupied() { + return this.notes_occupied; + } + setNotesOccupied(notes) { + this.detach(); + this.notes_occupied = notes; + this.resolveGlyphs(); + this.attach(); + } + resolveGlyphs() { + this.numerator_glyphs = []; + let n = this.num_notes; + while (n >= 1) { + this.numerator_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point)); + n = parseInt((n / 10).toString(), 10); + } + this.denom_glyphs = []; + n = this.notes_occupied; + while (n >= 1) { + this.denom_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point)); + n = parseInt((n / 10).toString(), 10); + } + } + // determine how many tuplets are nested within this tuplet + // on the same side (above/below), to calculate a y + // offset for this tuplet: + getNestedTupletCount() { + const location = this.location; + const first_note = this.notes[0]; + let maxTupletCount = countTuplets(first_note, location); + let minTupletCount = countTuplets(first_note, location); + // Count the tuplets that are on the same side (above/below) + // as this tuplet: + function countTuplets(note, location) { + return note.getTupletStack().filter((tuplet) => tuplet.location === location).length; + } + this.notes.forEach((note) => { + const tupletCount = countTuplets(note, location); + maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount; + minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount; + }); + return maxTupletCount - minTupletCount; + } + // determine the y position of the tuplet: + getYPosition() { + // offset the tuplet for any nested tuplets between + // it and the notes: + const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location; + // offset the tuplet for any manual y_offset: + const y_offset = this.options.y_offset || 0; + // now iterate through the notes and find our highest + // or lowest locations, to form a base y_pos + const first_note = this.notes[0]; + let y_pos; + if (this.location === Tuplet.LOCATION_TOP) { + y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset; + // check modifiers above note to see if they will collide with tuplet beam + for (let i = 0; i < this.notes.length; ++i) { + const note = this.notes[i]; + let modLines = 0; + const mc = note.getModifierContext(); + if (mc) { + modLines = Math.max(modLines, mc.getState().top_text_line); + } + const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset; + if (note.hasStem() || note.isRest()) { + const top_y = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP + ? note.getStemExtents().topY - Tuplet.metrics.stemOffset + : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset; + y_pos = Math.min(top_y, y_pos); + if (modLines > 0) { + y_pos = Math.min(modY, y_pos); + } + } + } + } + else { + let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4 + // check modifiers below note to see if they will collide with tuplet beam + this.notes.forEach((nn) => { + const mc = nn.getModifierContext(); + if (mc) { + lineCheck = Math.max(lineCheck, mc.getState().text_line + 1); + } + }); + y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset; + for (let i = 0; i < this.notes.length; ++i) { + if (this.notes[i].hasStem() || this.notes[i].isRest()) { + const bottom_y = this.notes[i].getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP + ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset + : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset; + if (bottom_y > y_pos) { + y_pos = bottom_y; + } + } + } + } + return y_pos + nested_tuplet_y_offset + y_offset; + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + // determine x value of left bound of tuplet + const first_note = this.notes[0]; + const last_note = this.notes[this.notes.length - 1]; + if (!this.bracketed) { + this.x_pos = first_note.getStemX(); + this.width = last_note.getStemX() - this.x_pos; + } + else { + this.x_pos = first_note.getTieLeftX() - 5; + this.width = last_note.getTieRightX() - this.x_pos + 5; + } + // determine y value for tuplet + this.y_pos = this.getYPosition(); + const addGlyphWidth = (width, glyph) => width + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width); + // calculate total width of tuplet notation + let width = this.numerator_glyphs.reduce(addGlyphWidth, 0); + if (this.ratioed) { + width = this.denom_glyphs.reduce(addGlyphWidth, width); + width += this.point * 0.32; + } + const notation_center_x = this.x_pos + this.width / 2; + const notation_start_x = notation_center_x - width / 2; + // draw bracket if the tuplet is not beamed + if (this.bracketed) { + const line_width = this.width / 2 - width / 2 - 5; + // only draw the bracket if it has positive length + if (line_width > 0) { + ctx.fillRect(this.x_pos, this.y_pos, line_width, 1); + ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1); + ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10); + ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10); + } + } + // draw numerator glyphs + const shiftY = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().lookupMetric('digits.shiftY', 0); + let x_offset = 0; + this.numerator_glyphs.forEach((glyph) => { + glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY); + x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width); + }); + // display colon and denominator if the ratio is to be shown + if (this.ratioed) { + const colon_x = notation_start_x + x_offset + this.point * 0.16; + const colon_radius = this.point * 0.06; + ctx.beginPath(); + ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + ctx.beginPath(); + ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + x_offset += this.point * 0.32; + this.denom_glyphs.forEach((glyph) => { + glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY); + x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width); + }); + } + } +} + + +/***/ }), + +/***/ "./src/typeguard.ts": +/*!**************************!*\ + !*** ./src/typeguard.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Category": () => (/* binding */ Category), +/* harmony export */ "isAccidental": () => (/* binding */ isAccidental), +/* harmony export */ "isAnnotation": () => (/* binding */ isAnnotation), +/* harmony export */ "isBarline": () => (/* binding */ isBarline), +/* harmony export */ "isCategory": () => (/* binding */ isCategory), +/* harmony export */ "isDot": () => (/* binding */ isDot), +/* harmony export */ "isGraceNote": () => (/* binding */ isGraceNote), +/* harmony export */ "isGraceNoteGroup": () => (/* binding */ isGraceNoteGroup), +/* harmony export */ "isNote": () => (/* binding */ isNote), +/* harmony export */ "isRenderContext": () => (/* binding */ isRenderContext), +/* harmony export */ "isStaveNote": () => (/* binding */ isStaveNote), +/* harmony export */ "isStemmableNote": () => (/* binding */ isStemmableNote), +/* harmony export */ "isTabNote": () => (/* binding */ isTabNote) +/* harmony export */ }); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Ron B. Yeh +// MIT License +/* eslint-disable @typescript-eslint/no-explicit-any */ +/** + * Use instead of `instanceof` as a more flexible type guard. + * @param obj check if this object's CATEGORY matches the provided category. + * @param category a string representing a category of VexFlow objects. + * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`. + * If `false`, we do not check the superclass or other ancestors. + * @returns true if `obj` has a static `CATEGORY` property that matches `category`. + */ +function isCategory(obj, category, checkAncestors = true) { + // obj is undefined, a number, a primitive string, or null. + if (typeof obj !== 'object' || obj === null) { + return false; + } + // `obj.constructor` is a reference to the constructor function that created the `obj` instance. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor + let constructorFcn = obj.constructor; + // Check if the object's static .CATEGORY matches the provided category. + if (checkAncestors) { + // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY. + while (obj !== null) { + constructorFcn = obj.constructor; + if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) { + return true; + } + obj = Object.getPrototypeOf(obj); + } + return false; + } + else { + // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string. + return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category; + } +} +const isAccidental = (obj) => isCategory(obj, Category.Accidental); +const isAnnotation = (obj) => isCategory(obj, Category.Annotation); +const isBarline = (obj) => isCategory(obj, Category.Barline); +const isDot = (obj) => isCategory(obj, Category.Dot); +const isGraceNote = (obj) => isCategory(obj, Category.GraceNote); +const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup); +const isNote = (obj) => isCategory(obj, Category.Note); +const isRenderContext = (obj) => isCategory(obj, Category.RenderContext); +const isStaveNote = (obj) => isCategory(obj, Category.StaveNote); +const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote); +const isTabNote = (obj) => isCategory(obj, Category.TabNote); +// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites. +// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums +var Category; +(function (Category) { + Category["Accidental"] = "Accidental"; + Category["Annotation"] = "Annotation"; + Category["Articulation"] = "Articulation"; + Category["Barline"] = "Barline"; + Category["BarNote"] = "BarNote"; + Category["Beam"] = "Beam"; + Category["Bend"] = "Bend"; + Category["ChordSymbol"] = "ChordSymbol"; + Category["Clef"] = "Clef"; + Category["ClefNote"] = "ClefNote"; + Category["Crescendo"] = "Crescendo"; + Category["Curve"] = "Curve"; + Category["Dot"] = "Dot"; + Category["Element"] = "Element"; + Category["Fraction"] = "Fraction"; + Category["FretHandFinger"] = "FretHandFinger"; + Category["GhostNote"] = "GhostNote"; + Category["Glyph"] = "Glyph"; + Category["GlyphNote"] = "GlyphNote"; + Category["GraceNote"] = "GraceNote"; + Category["GraceNoteGroup"] = "GraceNoteGroup"; + Category["GraceTabNote"] = "GraceTabNote"; + Category["KeySignature"] = "KeySignature"; + Category["KeySigNote"] = "KeySigNote"; + Category["Modifier"] = "Modifier"; + Category["MultiMeasureRest"] = "MultiMeasureRest"; + Category["Note"] = "Note"; + Category["NoteHead"] = "NoteHead"; + Category["NoteSubGroup"] = "NoteSubGroup"; + Category["Ornament"] = "Ornament"; + Category["Parenthesis"] = "Parenthesis"; + Category["PedalMarking"] = "PedalMarking"; + Category["RenderContext"] = "RenderContext"; + Category["RepeatNote"] = "RepeatNote"; + Category["Repetition"] = "Repetition"; + Category["Stave"] = "Stave"; + Category["StaveConnector"] = "StaveConnector"; + Category["StaveHairpin"] = "StaveHairpin"; + Category["StaveLine"] = "StaveLine"; + Category["StaveModifier"] = "StaveModifier"; + Category["StaveNote"] = "StaveNote"; + Category["StaveSection"] = "StaveSection"; + Category["StaveTempo"] = "StaveTempo"; + Category["StaveText"] = "StaveText"; + Category["StaveTie"] = "StaveTie"; + Category["Stem"] = "Stem"; + Category["StemmableNote"] = "StemmableNote"; + Category["StringNumber"] = "StringNumber"; + Category["Stroke"] = "Stroke"; + Category["System"] = "System"; + Category["TabNote"] = "TabNote"; + Category["TabSlide"] = "TabSlide"; + Category["TabStave"] = "TabStave"; + Category["TabTie"] = "TabTie"; + Category["TextBracket"] = "TextBracket"; + Category["TextDynamics"] = "TextDynamics"; + Category["TextNote"] = "TextNote"; + Category["Tickable"] = "Tickable"; + Category["TimeSignature"] = "TimeSignature"; + Category["TimeSigNote"] = "TimeSigNote"; + Category["Tremolo"] = "Tremolo"; + Category["Tuplet"] = "Tuplet"; + Category["Vibrato"] = "Vibrato"; + Category["VibratoBracket"] = "VibratoBracket"; + Category["Voice"] = "Voice"; + Category["Volta"] = "Volta"; +})(Category || (Category = {})); + + +/***/ }), + +/***/ "./src/util.ts": +/*!*********************!*\ + !*** ./src/util.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RuntimeError": () => (/* binding */ RuntimeError), +/* harmony export */ "defined": () => (/* binding */ defined), +/* harmony export */ "globalObject": () => (/* binding */ globalObject), +/* harmony export */ "log": () => (/* binding */ log), +/* harmony export */ "midLine": () => (/* binding */ midLine), +/* harmony export */ "normalizeAngle": () => (/* binding */ normalizeAngle), +/* harmony export */ "prefix": () => (/* binding */ prefix), +/* harmony export */ "sumArray": () => (/* binding */ sumArray), +/* harmony export */ "warn": () => (/* binding */ warn) +/* harmony export */ }); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// Note: Keep this module free of imports to reduce the chance of circular dependencies. +/** `RuntimeError` will be thrown by VexFlow classes in case of error. */ +class RuntimeError extends Error { + constructor(code, message = '') { + super('[RuntimeError] ' + code + ': ' + message); + this.code = code; + } +} +/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */ +// eslint-disable-next-line +function globalObject() { + if (typeof globalThis !== 'undefined') { + return globalThis; + } + if (typeof self !== 'undefined') { + return self; + } + if (typeof window !== 'undefined') { + return window; + } + if (typeof __webpack_require__.g !== 'undefined') { + return __webpack_require__.g; + } + return Function('return this')(); +} +/** + * Check that `x` is of type `T` and not `undefined`. + * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message. + */ +function defined(x, code = 'undefined', message = '') { + if (x === undefined) { + throw new RuntimeError(code, message); + } + return x; +} +/** Default log function sends all arguments to console. */ +// eslint-disable-next-line +function log(block, ...args) { + if (!args) + return; + const line = Array.prototype.slice.call(args).join(' '); + globalObject().console.log(block + ': ' + line); +} +/** Dump warning to console. */ +// eslint-disable-next-line +function warn(...args) { + const line = args.join(' '); + const err = new Error(); + globalObject().console.log('Warning: ', line, err.stack); +} +/** Round number to nearest fractional value (`.5`, `.25`, etc.) */ +function roundN(x, n) { + return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n; +} +/** Locate the mid point between stave lines. Returns a fractional line if a space. */ +function midLine(a, b) { + let mid_line = b + (a - b) / 2; + if (mid_line % 2 > 0) { + mid_line = roundN(mid_line * 10, 5) / 10; + } + return mid_line; +} +/** + * Used by various classes (e.g., SVGContext) to provide a + * unique prefix to element names (or other keys in shared namespaces). + */ +function prefix(text) { + return `vf-${text}`; +} +/** + * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi). + */ +function normalizeAngle(a) { + a = a % (2 * Math.PI); + if (a < 0) { + a += 2 * Math.PI; + } + return a; +} +/** + * Return the sum of an array of numbers. + */ +function sumArray(arr) { + return arr.reduce((a, b) => a + b, 0); +} + + +/***/ }), + +/***/ "./src/vex.ts": +/*!********************!*\ + !*** ./src/vex.ts ***! + \********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Vex": () => (/* binding */ Vex) +/* harmony export */ }); +/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./flow */ "./src/flow.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// Utility methods used by the rest of the VexFlow codebase. + + +class Vex { + // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead. + // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) { + // arr.forEach(callbackFn); + // } + /** + * Take `arr` and return a new list consisting of the sorted, unique, + * contents of arr. Does not modify `arr`. + */ + // eslint-disable-next-line + static sortAndUnique(arr, cmp, eq) { + if (arr.length > 1) { + const newArr = []; + let last; + arr.sort(cmp); + for (let i = 0; i < arr.length; ++i) { + if (i === 0 || !eq(arr[i], last)) { + newArr.push(arr[i]); + } + last = arr[i]; + } + return newArr; + } + else { + return arr; + } + } + /** Check if array `arr` contains `obj`. */ + // eslint-disable-next-line + static contains(arr, obj) { + let i = arr.length; + while (i--) { + if (arr[i] === obj) { + return true; + } + } + return false; + } + // Get the 2D Canvas context from DOM element `canvas_sel`. + static getCanvasContext(canvasSelector) { + if (!canvasSelector) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector); + } + const canvas = document.getElementById(canvasSelector); + if (!(canvas && canvas.getContext)) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas'); + } + return canvas.getContext('2d'); + } + /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */ + // eslint-disable-next-line + static benchmark(s, f) { + const start_time = new Date().getTime(); + f(); + const elapsed = new Date().getTime() - start_time; + (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)(s, elapsed + 'ms'); + } + // Get stack trace. + static stackTrace() { + const err = new Error(); + return err.stack; + } +} +Vex.Flow = _flow__WEBPACK_IMPORTED_MODULE_0__.Flow; + + + +/***/ }), + +/***/ "./src/vibrato.ts": +/*!************************!*\ + !*** ./src/vibrato.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Vibrato": () => (/* binding */ Vibrato) +/* harmony export */ }); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + +/** `Vibrato` implements diverse vibratos. */ +class Vibrato extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Vibrato; + } + /** Arrange vibratos inside a `ModifierContext`. */ + static format(vibratos, state, context) { + if (!vibratos || vibratos.length === 0) + return false; + // Vibratos are always on top. + let text_line = state.top_text_line; + let width = 0; + let shift = state.right_shift - 7; + // If there's a bend, drop the text line + const bends = context.getMembers(_bend__WEBPACK_IMPORTED_MODULE_0__.Bend.CATEGORY); + if (bends && bends.length > 0) { + const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE; + text_line = text_line - (bendHeight + 1); + } + else { + state.top_text_line += 1; + } + // Format Vibratos + for (let i = 0; i < vibratos.length; ++i) { + const vibrato = vibratos[i]; + vibrato.setXShift(shift); + vibrato.setTextLine(text_line); + width += vibrato.getWidth(); + shift += width; + } + state.right_shift += width; + return true; + } + constructor() { + super(); + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT; + this.render_options = { + harsh: false, + vibrato_width: 20, + wave_height: 6, + wave_width: 4, + wave_girth: 2, + }; + this.setVibratoWidth(this.render_options.vibrato_width); + } + /** Set harsh vibrato. */ + setHarsh(harsh) { + this.render_options.harsh = harsh; + return this; + } + /** Set vibrato width in pixels. */ + setVibratoWidth(width) { + this.render_options.vibrato_width = width; + this.setWidth(width); + return this; + } + /** Draw the vibrato on the rendering context. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index); + const vx = start.x + this.x_shift; + const vy = note.getYForTopText(this.text_line) + 2; + Vibrato.renderVibrato(ctx, vx, vy, this.render_options); + } + /** + * Static rendering method that can be called from + * other classes (e.g. VibratoBracket). + */ + static renderVibrato(ctx, x, y, opts) { + const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts; + const num_waves = vibrato_width / wave_width; + ctx.beginPath(); + let i; + if (harsh) { + ctx.moveTo(x, y + wave_girth + 1); + for (i = 0; i < num_waves / 2; ++i) { + ctx.lineTo(x + wave_width, y - wave_height / 2); + x += wave_width; + ctx.lineTo(x + wave_width, y + wave_height / 2); + x += wave_width; + } + for (i = 0; i < num_waves / 2; ++i) { + ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1); + x -= wave_width; + ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1); + x -= wave_width; + } + ctx.fill(); + } + else { + ctx.moveTo(x, y + wave_girth); + for (i = 0; i < num_waves / 2; ++i) { + ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y); + x += wave_width; + ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y); + x += wave_width; + } + for (i = 0; i < num_waves / 2; ++i) { + ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth); + x -= wave_width; + ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth); + x -= wave_width; + } + ctx.fill(); + } + } +} + + +/***/ }), + +/***/ "./src/vibratobracket.ts": +/*!*******************************!*\ + !*** ./src/vibratobracket.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "VibratoBracket": () => (/* binding */ VibratoBracket) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Balazs Forian-Szabo +// MIT License + + + + +// eslint-disable-next-line +function L(...args) { + if (VibratoBracket.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_2__.log)('Vex.Flow.VibratoBracket', args); +} +/** `VibratoBracket` renders vibrato effect between two notes. */ +class VibratoBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.VibratoBracket; + } + /** + * Either the stop or start note must be set, or both of them. + * An undefined value for the start or stop note indicates that the vibrato + * is drawn from the beginning or until the end of the stave accordingly. + */ + constructor(bracket_data) { + super(); + if (bracket_data.start) + this.start = bracket_data.start; + if (bracket_data.stop) + this.stop = bracket_data.stop; + this.line = 1; + this.render_options = { + harsh: false, + wave_height: 6, + wave_width: 4, + wave_girth: 2, + vibrato_width: 0, + }; + } + /** Set line position of the vibrato bracket. */ + setLine(line) { + this.line = line; + return this; + } + /** Set harsh vibrato bracket. */ + setHarsh(harsh) { + this.render_options.harsh = harsh; + return this; + } + /** Draw the vibrato bracket on the rendering context. */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const y = (this.start && this.start.checkStave().getYForTopText(this.line)) || + (this.stop && this.stop.checkStave().getYForTopText(this.line)) || + 0; + // If start note is not set then vibrato will be drawn + // from the beginning of the stave + const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0; + // If stop note is not set then vibrato will be drawn + // until the end of the stave + const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) || + (this.start && this.start.checkStave().getTieEndX() - 10) || + 0; + this.render_options.vibrato_width = stop_x - start_x; + L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y); + _vibrato__WEBPACK_IMPORTED_MODULE_3__.Vibrato.renderVibrato(ctx, start_x, y, this.render_options); + } +} +/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */ +VibratoBracket.DEBUG = false; + + + +/***/ }), + +/***/ "./src/voice.ts": +/*!**********************!*\ + !*** ./src/voice.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Voice": () => (/* binding */ Voice), +/* harmony export */ "VoiceMode": () => (/* binding */ VoiceMode) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +var VoiceMode; +(function (VoiceMode) { + VoiceMode[VoiceMode["STRICT"] = 1] = "STRICT"; + VoiceMode[VoiceMode["SOFT"] = 2] = "SOFT"; + VoiceMode[VoiceMode["FULL"] = 3] = "FULL"; +})(VoiceMode || (VoiceMode = {})); +/** + * `Voice` is mainly a container object to group `Tickables` for formatting. + */ +class Voice extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Voice; + } + /** + * Modes allow the addition of ticks in three different ways: + * - STRICT: This is the default. Ticks must fill the voice. + * - SOFT: Ticks can be added without restrictions. + * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length. + */ + static get Mode() { + return VoiceMode; + } + constructor(time) { + super(); + this.resolutionMultiplier = 1; + this.mode = VoiceMode.STRICT; + this.preFormatted = false; + this.ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); + this.largestTickWidth = 0; + this.tickables = []; + this.options = { + softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.SOFTMAX_FACTOR, + }; + // Convert the `time` string into a VoiceTime object if necessary. + let voiceTime; + if (typeof time === 'string') { + // Time signature shortcut: "4/4", "3/8", etc. + const match = time.match(/(\d+)\/(\d+)/); + if (match) { + voiceTime = { + num_beats: parseInt(match[1]), + beat_value: parseInt(match[2]), + }; + } + } + else { + voiceTime = time; + } + // Default time signature is 4/4. + this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION }, voiceTime); + // Recalculate total ticks. + this.totalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1); + // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration. + this.smallestTickCount = this.totalTicks.clone(); + } + /** Get the total ticks in the voice. */ + getTotalTicks() { + return this.totalTicks; + } + /** Get the total ticks used in the voice by all the tickables. */ + getTicksUsed() { + return this.ticksUsed; + } + /** Get the largest width of all the tickables. */ + getLargestTickWidth() { + return this.largestTickWidth; + } + /** Get the tick count for the shortest tickable */ + getSmallestTickCount() { + return this.smallestTickCount; + } + /** Get the tickables in the voice. */ + getTickables() { + return this.tickables; + } + /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */ + getMode() { + return this.mode; + } + /** + * Set the voice mode. + * @param mode value from `VoiceMode` or Voice.Mode + */ + setMode(mode) { + this.mode = mode; + return this; + } + /** Get the resolution multiplier for the voice. */ + getResolutionMultiplier() { + return this.resolutionMultiplier; + } + /** Get the actual tick resolution for the voice. */ + getActualResolution() { + return this.resolutionMultiplier * this.time.resolution; + } + /** Set the voice's stave. */ + setStave(stave) { + this.stave = stave; + // Reset the bounding box so we can reformat. + this.boundingBox = undefined; + return this; + } + getStave() { + return this.stave; + } + /** Get the bounding box for the voice. */ + getBoundingBox() { + if (!this.boundingBox) { + const stave = this.checkStave(); + let boundingBox = undefined; + for (let i = 0; i < this.tickables.length; ++i) { + const tickable = this.tickables[i]; + if (!tickable.getStave()) + tickable.setStave(stave); + const bb = tickable.getBoundingBox(); + if (bb) { + boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb; + } + } + this.boundingBox = boundingBox; + } + return this.boundingBox; + } + /** Set the voice mode to strict or soft. */ + setStrict(strict) { + this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT; + return this; + } + /** Determine if the voice is complete according to the voice mode. */ + isComplete() { + if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) { + return this.ticksUsed.equals(this.totalTicks); + } + else { + return true; + } + } + /** + * We use softmax to layout the tickables proportional to the exponent of + * their duration. The softmax factor is used to determine the 'linearness' of + * the layout. + * + * The softmax of all the tickables in this voice should sum to 1. + */ + setSoftmaxFactor(factor) { + this.options.softmaxFactor = factor; + this.expTicksUsed = 0; // reset + return this; + } + /** + * Calculate the sum of the exponents of all the ticks in this voice to use + * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables) + * + * Note that the "exp" of "expTicksUsed" stands for "expontential" ticks used, + * not "expected" ticks used. + */ + reCalculateExpTicksUsed() { + const totalTicks = this.ticksUsed.value(); + const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks); + this.expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_4__.sumArray)(this.tickables.map(exp)); + return this.expTicksUsed; + } + /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */ + softmax(tickValue) { + if (!this.expTicksUsed) { + this.expTicksUsed = this.reCalculateExpTicksUsed(); + } + const totalTicks = this.ticksUsed.value(); + const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks); + const sm = exp(tickValue) / this.expTicksUsed; + return sm; + } + /** Add a tickable to the voice. */ + addTickable(tickable) { + if (!tickable.shouldIgnoreTicks()) { + const ticks = tickable.getTicks(); + // Update the total ticks for this line. + this.ticksUsed.add(ticks); + this.expTicksUsed = 0; // reset + if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) && + this.ticksUsed.greaterThan(this.totalTicks)) { + this.ticksUsed.subtract(ticks); + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArgument', 'Too many ticks.'); + } + // Track the smallest tickable for formatting. + if (ticks.lessThan(this.smallestTickCount)) { + this.smallestTickCount = ticks.clone(); + } + this.resolutionMultiplier = this.ticksUsed.denominator; + // Expand total ticks using denominator from ticks used. + this.totalTicks.add(0, this.ticksUsed.denominator); + } + // Add the tickable to the line. + this.tickables.push(tickable); + tickable.setVoice(this); + return this; + } + /** Add an array of tickables to the voice. */ + addTickables(tickables) { + for (let i = 0; i < tickables.length; ++i) { + this.addTickable(tickables[i]); + } + return this; + } + /** Preformat the voice by applying the voice's stave to each note. */ + preFormat() { + if (this.preFormatted) + return this; + const stave = this.checkStave(); + this.tickables.forEach((tickable) => { + if (!tickable.getStave()) { + tickable.setStave(stave); + } + }); + this.preFormatted = true; + return this; + } + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + /** + * Render the voice onto the canvas `context` and an optional `stave`. + * If `stave` is omitted, it is expected that the notes have staves + * already set. + * + * This method also calculates the voice's boundingBox while drawing + * the notes. Note the similarities with this.getBoundingBox(). + */ + draw(context = this.checkContext(), stave) { + stave = stave !== null && stave !== void 0 ? stave : this.stave; + this.setRendered(); + let boundingBox = undefined; + for (let i = 0; i < this.tickables.length; ++i) { + const tickable = this.tickables[i]; + // Set the stave if provided. + if (stave) { + tickable.setStave(stave); + } + (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.'); + const bb = tickable.getBoundingBox(); + if (bb) { + boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb; + } + tickable.setContext(context); + tickable.drawWithStyle(); + } + this.boundingBox = boundingBox; + } +} + + +/***/ }), + +/***/ "./src/web.ts": +/*!********************!*\ + !*** ./src/web.ts ***! + \********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "isHTMLCanvas": () => (/* binding */ isHTMLCanvas), +/* harmony export */ "isHTMLDiv": () => (/* binding */ isHTMLDiv) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Ron B. Yeh +// MIT License +// +// Utilities for working with Web APIs. +// See: https://developer.mozilla.org/en-US/docs/Web/API + +// eslint-disable-next-line +function isHTMLCanvas(element) { + if (!element) + return false; + const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)(); + return ( + // It's either an instance of the HTMLCanvasElement class, + (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) || + // OR it's pretending to be a element. Good enough! + // Do not rely on .tagName, because node-canvas doesn't provide a tagName. + (typeof element.getContext === 'function' && typeof element.toDataURL === 'function')); +} +// eslint-disable-next-line +function isHTMLDiv(element) { + if (!element) + return false; + const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)(); + return ( + // It's either an instance of the HTMLDivElement class. + (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) || + // OR it's pretending to be a
. See: svgcontext.ts. + (typeof element.appendChild === 'function' && typeof element.style === 'object')); +} + + +/***/ }), + +/***/ "./tests/accidental_tests.ts": +/*!***********************************!*\ + !*** ./tests/accidental_tests.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AccidentalTests": () => (/* binding */ AccidentalTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_modifiercontext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _src_note__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/note */ "./src/note.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); +/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _src_timesignote__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/timesignote */ "./src/timesignote.ts"); +/* harmony import */ var _src_typeguard__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../src/typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Accidental Tests + + + + + + + + + + + + + + + +const AccidentalTests = { + Start() { + QUnit.module('Accidental'); + QUnit.test('Automatic Accidentals - Simple Tests', autoAccidentalWorking); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Accidental Padding', formatAccidentalSpaces); + run('Basic', basic); + run('Stem Down', basicStemDown); + run('Cautionary Accidental', cautionary); + run('Accidental Arrangement Special Cases', specialCases); + run('Multi Voice', multiVoice); + run('Microtonal', microtonal); + run('Microtonal (Iranian)', microtonal_iranian); + run('Sagittal', sagittal); + run('Automatic Accidentals', automaticAccidentals0); + run('Automatic Accidentals - C major scale in Ab', automaticAccidentals1); + run('Automatic Accidentals - No Accidentals Necessary', automaticAccidentals2); + run('Automatic Accidentals - No Accidentals Necessary (EasyScore)', automaticAccidentals3); + run('Automatic Accidentals - Multi Voice Inline', automaticAccidentalsMultiVoiceInline); + run('Automatic Accidentals - Multi Voice Offset', automaticAccidentalsMultiVoiceOffset); + run('Automatic Accidentals - Key C, Single Octave', automaticAccidentalsCornerCases1); + run('Automatic Accidentals - Key C, Two Octaves', automaticAccidentalsCornerCases2); + run('Automatic Accidentals - Key C#, Single Octave', automaticAccidentalsCornerCases3); + run('Automatic Accidentals - Key C#, Two Octaves', automaticAccidentalsCornerCases4); + run('Factory API', factoryAPI); + }, +}; +// Check that at least one of the note's modifiers is an Accidental. +function hasAccidental(note) { + return note.getModifiers().some((modifier) => (0,_src_typeguard__WEBPACK_IMPORTED_MODULE_13__.isAccidental)(modifier)); +} +// Return a convenience function for building accidentals from a string. +function makeNewAccid(factory) { + return (type) => factory.Accidental({ type }); +} +/** + * + */ +function autoAccidentalWorking(assert) { + const createStaveNote = (noteStruct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote(noteStruct); + let notes = [ + { keys: ['bb/4'], duration: '4' }, + { keys: ['bb/4'], duration: '4' }, + { keys: ['g#/4'], duration: '4' }, + { keys: ['g/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['a#/4'], duration: '4' }, + { keys: ['g#/4'], duration: '4' }, + ].map(createStaveNote); + let voice = new _src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes); + // F Major (Bb) + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'F'); + assert.equal(hasAccidental(notes[0]), false, 'No flat because of key signature'); + assert.equal(hasAccidental(notes[1]), false, 'No flat because of key signature'); + assert.equal(hasAccidental(notes[2]), true, 'Added a sharp'); + assert.equal(hasAccidental(notes[3]), true, 'Back to natural'); + assert.equal(hasAccidental(notes[4]), true, 'Back to natural'); + assert.equal(hasAccidental(notes[5]), false, 'Natural remembered'); + assert.equal(hasAccidental(notes[6]), true, 'Added sharp'); + assert.equal(hasAccidental(notes[7]), true, 'Added sharp'); + notes = [ + { keys: ['e#/4'], duration: '4' }, + { keys: ['cb/4'], duration: '4' }, + { keys: ['fb/4'], duration: '4' }, + { keys: ['b#/4'], duration: '4' }, + { keys: ['b#/4'], duration: '4' }, + { keys: ['cb/5'], duration: '4' }, + { keys: ['fb/5'], duration: '4' }, + { keys: ['e#/4'], duration: '4' }, + ].map(createStaveNote); + voice = new _src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes); + // A Major (F#,G#,C#) + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'A'); + assert.equal(hasAccidental(notes[0]), true, 'Added sharp'); + assert.equal(hasAccidental(notes[1]), true, 'Added flat'); + assert.equal(hasAccidental(notes[2]), true, 'Added flat'); + assert.equal(hasAccidental(notes[3]), true, 'Added sharp'); + assert.equal(hasAccidental(notes[4]), false, 'Sharp remembered'); + assert.equal(hasAccidental(notes[5]), true, 'Added flat(different octave)'); + assert.equal(hasAccidental(notes[6]), true, 'Added flat(different octave)'); + assert.equal(hasAccidental(notes[7]), false, 'sharp remembered'); + notes = [ + { keys: ['c/4'], duration: '4' }, + { keys: ['cb/4'], duration: '4' }, + { keys: ['cb/4'], duration: '4' }, + { keys: ['c#/4'], duration: '4' }, + { keys: ['c#/4'], duration: '4' }, + { keys: ['cbb/4'], duration: '4' }, + { keys: ['cbb/4'], duration: '4' }, + { keys: ['c##/4'], duration: '4' }, + { keys: ['c##/4'], duration: '4' }, + { keys: ['c/4'], duration: '4' }, + { keys: ['c/4'], duration: '4' }, + ].map(createStaveNote); + voice = new _src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes); + // C Major (no sharps/flats) + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'C'); + assert.equal(hasAccidental(notes[0]), false, 'No accidental'); + assert.equal(hasAccidental(notes[1]), true, 'Added flat'); + assert.equal(hasAccidental(notes[2]), false, 'Flat remembered'); + assert.equal(hasAccidental(notes[3]), true, 'Sharp added'); + assert.equal(hasAccidental(notes[4]), false, 'Sharp remembered'); + assert.equal(hasAccidental(notes[5]), true, 'Added doubled flat'); + assert.equal(hasAccidental(notes[6]), false, 'Double flat remembered'); + assert.equal(hasAccidental(notes[7]), true, 'Added double sharp'); + assert.equal(hasAccidental(notes[8]), false, 'Double sharp rememberd'); + assert.equal(hasAccidental(notes[9]), true, 'Added natural'); + assert.equal(hasAccidental(notes[10]), false, 'Natural remembered'); +} +/** + * + */ +function formatAccidentalSpaces(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750, 280); + const context = f.getContext(); + const softmaxFactor = 100; + // Create the notes + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['e##/5'], + duration: '8d', + }).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('##'), 0), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['b/4'], + duration: '16', + }).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 0), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['f/3'], + duration: '8', + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['a/3'], + duration: '16', + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['e/4', 'g/4'], + duration: '16', + }) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('bb'), 0) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('bb'), 1), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['d/4'], + duration: '16', + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['e/4', 'g/4'], + duration: '16', + }) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 0) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 1), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['g/4'], + duration: '32', + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['a/4'], + duration: '32', + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['g/4'], + duration: '16', + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['d/4'], + duration: 'q', + }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_3__.Dot.buildAndAttach([notes[0]], { all: true }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam.generateBeams(notes); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice({ + num_beats: 4, + beat_value: 4, + }); + voice.addTickables(notes); + const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter({ softmaxFactor }).joinVoices([voice]); + const width = formatter.preCalculateMinTotalWidth([voice]); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_8__.Stave(10, 40, width + 20); + stave.setContext(context).draw(); + formatter.format([voice], width); + voice.draw(context, stave); + beams.forEach((b) => b.setContext(context).draw()); + notes.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(context, note, 30)); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(context, 300, 150); + options.assert.ok(true); +} +function basic(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + f.Stave({ x: 10, y: 10, width: 550 }); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' }) + .addModifier(accid('b'), 0) + .addModifier(accid('#'), 1), + // Notes keys out of alphabetic order + f + .StaveNote({ keys: ['e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5', 'd/4'], duration: '2' }) + .addModifier(accid('##'), 6) + .addModifier(accid('n'), 0) + .addModifier(accid('bb'), 1) + .addModifier(accid('b'), 2) + .addModifier(accid('#'), 3) + .addModifier(accid('n'), 4) + .addModifier(accid('bb'), 5), + // Notes keys out of alphabetic order + f + .StaveNote({ keys: ['g/5', 'f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5'], duration: '16' }) + .addModifier(accid('n'), 1) + .addModifier(accid('#'), 2) + .addModifier(accid('#'), 3) + .addModifier(accid('b'), 4) + .addModifier(accid('bb'), 5) + .addModifier(accid('##'), 6) + .addModifier(accid('#'), 0), + f + .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' }) + .addModifier(accid('#'), 0) + .addModifier(accid('##').setAsCautionary(), 1) + .addModifier(accid('#').setAsCautionary(), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb').setAsCautionary(), 4) + .addModifier(accid('b').setAsCautionary(), 5), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes, 10, { paddingBetween: 45 }); + notes.forEach((note, index) => { + _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140); + options.assert.ok(true, 'Full Accidental'); +} +function cautionary(options) { + const staveCount = 12; + const scale = 0.85; + const staveWidth = 840; + let i = 0; + let j = 0; + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, staveWidth + 10, 175 * staveCount + 10); + f.getContext().scale(scale, scale); + const accids = Object.keys(_src_flow__WEBPACK_IMPORTED_MODULE_4__.Flow.accidentalMap).filter((accid) => accid !== '{' && accid !== '}'); + const mod = Math.round(accids.length / staveCount); + for (i = 0; i < staveCount; ++i) { + const stave = f.Stave({ x: 0, y: 10 + 200 * i, width: staveWidth / scale }); + const score = f.EasyScore(); + const rowMap = []; + for (j = 0; j < mod && j + i * staveCount < accids.length; ++j) { + rowMap.push(accids[j + i * staveCount]); + } + const notes = rowMap.map((accidType) => f + .StaveNote({ keys: ['a/4'], duration: '4', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.UP }) + .addModifier(f.Accidental({ type: accidType }), 0)); + const voice = score.voice(notes, { time: rowMap.length + '/4' }); + voice.getTickables().forEach((tickable) => { + tickable + .getModifiers() + .filter((modifier) => modifier.getAttribute('type') === _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.CATEGORY) + .forEach((accid) => accid.setAsCautionary()); + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + } + options.assert.ok(true, 'Must successfully render cautionary accidentals'); +} +function specialCases(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + f.Stave({ x: 10, y: 10, width: 550 }); + const notes = [ + f + .StaveNote({ keys: ['f/4', 'd/5'], duration: '1' }) + .addModifier(accid('#'), 0) + .addModifier(accid('b'), 1), + f + .StaveNote({ keys: ['c/4', 'g/4'], duration: '2' }) + .addModifier(accid('##'), 0) + .addModifier(accid('##'), 1), + f + .StaveNote({ keys: ['b/3', 'd/4', 'f/4'], duration: '16' }) + .addModifier(accid('#'), 0) + .addModifier(accid('#'), 1) + .addModifier(accid('##'), 2), + f + .StaveNote({ keys: ['g/4', 'a/4', 'c/5', 'e/5'], duration: '16' }) + .addModifier(accid('b'), 0) + .addModifier(accid('b'), 1) + .addModifier(accid('n'), 3), + f + .StaveNote({ keys: ['e/4', 'g/4', 'b/4', 'c/5'], duration: '4' }) + .addModifier(accid('b').setAsCautionary(), 0) + .addModifier(accid('b').setAsCautionary(), 1) + .addModifier(accid('bb'), 2) + .addModifier(accid('b'), 3), + f + .StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5', 'g/5'], duration: '8' }) + .addModifier(accid('bb'), 0) + .addModifier(accid('b').setAsCautionary(), 1) + .addModifier(accid('n').setAsCautionary(), 2) + .addModifier(accid('#'), 3) + .addModifier(accid('n').setAsCautionary(), 4), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes, 0, { paddingBetween: 20 }); + notes.forEach((note, index) => { + _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140); + options.assert.ok(true, 'Full Accidental'); +} +function basicStemDown(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + f.Stave({ x: 10, y: 10, width: 550 }); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w', stem_direction: -1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('#'), 1), + f + .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2', stem_direction: -1 }) + .addModifier(accid('##'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('bb'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('#'), 4) + .addModifier(accid('n'), 5) + .addModifier(accid('bb'), 6), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16', stem_direction: -1 }) + .addModifier(accid('n'), 0) + .addModifier(accid('#'), 1) + .addModifier(accid('#'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb'), 4) + .addModifier(accid('##'), 5) + .addModifier(accid('#'), 6), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes, 0, { paddingBetween: 30 }); + notes.forEach((note, noteIndex) => { + _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + noteIndex + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, accidIndex) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + accidIndex + ' has set width'); + }); + }); + f.draw(); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140); + options.assert.ok(true, 'Full Accidental'); +} +function multiVoice(options) { + // Helper function for visualizing + function showNotes(note1, note2, stave, ctx, x) { + const modifierContext = new _src_modifiercontext__WEBPACK_IMPORTED_MODULE_6__.ModifierContext(); + note1.addToModifierContext(modifierContext); + note2.addToModifierContext(modifierContext); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_11__.TickContext().addTickable(note1).addTickable(note2).preFormat().setX(x); + note1.setContext(ctx).draw(); + note2.setContext(ctx).draw(); + _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(ctx, note1, 180); + _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(ctx, note2, 15); + } + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 460, 250); + const accid = makeNewAccid(f); + const stave = f.Stave({ x: 10, y: 45, width: 420 }); + const ctx = f.getContext(); + stave.draw(); + let note1 = f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '2', stem_direction: -1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('#'), 2) + .setStave(stave); + let note2 = f + .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '2', stem_direction: 1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('bb'), 1) + .addModifier(accid('##'), 2) + .setStave(stave); + showNotes(note1, note2, stave, ctx, 60); + note1 = f + .StaveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: '2', stem_direction: -1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('#'), 2) + .setStave(stave); + note2 = f + .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }) + .addModifier(accid('b'), 0) + .setStave(stave); + showNotes(note1, note2, stave, ctx, 150); + note1 = f + .StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '2', stem_direction: -1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('#'), 2) + .setStave(stave); + note2 = f + .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }) + .addModifier(accid('b'), 0) + .setStave(stave); + showNotes(note1, note2, stave, ctx, 250); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 350, 150); + options.assert.ok(true, 'Full Accidental'); +} +function microtonal(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + const ctx = f.getContext(); + f.Stave({ x: 10, y: 10, width: 650 }); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' }) + .addModifier(accid('db'), 0) + .addModifier(accid('d'), 1), + f + .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }) + .addModifier(accid('bbs'), 0) + .addModifier(accid('++'), 1) + .addModifier(accid('+'), 2) + .addModifier(accid('d'), 3) + .addModifier(accid('db'), 4) + .addModifier(accid('+'), 5) + .addModifier(accid('##'), 6), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' }) + .addModifier(accid('++'), 0) + .addModifier(accid('bbs'), 1) + .addModifier(accid('+'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('db'), 4) + .addModifier(accid('##'), 5) + .addModifier(accid('#'), 6), + f + .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' }) + .addModifier(accid('#'), 0) + .addModifier(accid('db').setAsCautionary(), 1) + .addModifier(accid('bbs').setAsCautionary(), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('++').setAsCautionary(), 4) + .addModifier(accid('d').setAsCautionary(), 5), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'd/5', 'g/5'], duration: '16' }) + .addModifier(accid('++-'), 0) + .addModifier(accid('+-'), 1) + .addModifier(accid('bs'), 2) + .addModifier(accid('bss'), 3) + .addModifier(accid('afhf'), 4) + .addModifier(accid('ashs'), 5), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes, 0, { paddingBetween: 35 }); + notes.forEach((note, index) => { + _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140); + options.assert.ok(true, 'Microtonal Accidental'); +} +function microtonal_iranian(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + const ctx = f.getContext(); + f.Stave({ x: 10, y: 10, width: 650 }); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' }) + .addModifier(accid('k'), 0) + .addModifier(accid('o'), 1), + f + .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }) + .addModifier(accid('b'), 0) + .addModifier(accid('k'), 1) + .addModifier(accid('n'), 2) + .addModifier(accid('o'), 3) + .addModifier(accid('#'), 4) + .addModifier(accid('bb'), 5) + .addModifier(accid('##'), 6), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' }) + .addModifier(accid('o'), 0) + .addModifier(accid('k'), 1) + .addModifier(accid('n'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb'), 4) + .addModifier(accid('##'), 5) + .addModifier(accid('#'), 6), + f + .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' }) + .addModifier(accid('#'), 0) + .addModifier(accid('o').setAsCautionary(), 1) + .addModifier(accid('n').setAsCautionary(), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('k').setAsCautionary(), 4), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: '16' }) + .addModifier(accid('k'), 0) + .addModifier(accid('k'), 1) + .addModifier(accid('k'), 2) + .addModifier(accid('k'), 3), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes, 0, { paddingBetween: 35 }); + notes.forEach((note, index) => { + _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140); + options.assert.ok(true, 'Microtonal Accidental (Iranian)'); +} +function sagittal(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + const ctx = f.getContext(); + f.Stave({ x: 10, y: 10, width: 650 }); + const notes = [ + f + .StaveNote({ keys: ['d/4', 'f/4', 'b/4', 'b/4'], duration: '4' }) + .addModifier(accid('accSagittal11MediumDiesisUp'), 1) + .addModifier(accid('accSagittal5CommaDown'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('accSagittal7CommaDown'), 3), + f + .StaveNote({ keys: ['d/4', 'f/4', 'a/4', 'b/4'], duration: '4' }) + .addModifier(accid('accSagittal35LargeDiesisDown'), 2), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5'], duration: '8' }).addModifier(accid('accSagittal5CommaDown'), 1), + f + .StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'b/4'], duration: '8' }) + .addModifier(accid('b'), 1) + .addModifier(accid('accSagittal7CommaDown'), 1) + .addModifier(accid('accSagittal11LargeDiesisDown'), 3), + f + .StaveNote({ keys: ['d/4', 'f/4', 'b/4', 'b/4'], duration: '4' }) + .addModifier(accid('accSagittal11MediumDiesisUp'), 1) + .addModifier(accid('accSagittal5CommaDown'), 2) + .addModifier(accid('accSagittalFlat7CDown'), 3), + f + .StaveNote({ keys: ['d/4', 'f/4', 'a/4', 'b/4'], duration: '4' }) + .addModifier(accid('accSagittal35LargeDiesisDown'), 2), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5'], duration: '8' }).addModifier(accid('accSagittal5CommaDown'), 1), + f + .StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'b/4'], duration: '8' }) + .addModifier(accid('accSagittalFlat7CDown'), 1) + .addModifier(accid('accSagittal11LargeDiesisDown'), 3), + ]; + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1], + last_indices: [0, 1], + }); + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [3], + last_indices: [3], + options: { + direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN, + }, + }); + f.StaveTie({ + from: notes[4], + to: notes[5], + first_indices: [0, 1], + last_indices: [0, 1], + }); + f.StaveTie({ + from: notes[4], + to: notes[5], + first_indices: [3], + last_indices: [3], + options: { + direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN, + }, + }); + f.Beam({ notes: notes.slice(2, 4) }); + f.Beam({ notes: notes.slice(6, 8) }); + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes); + notes.forEach((note, index) => { + _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140); + options.assert.ok(true, 'Sagittal'); +} +function automaticAccidentals0(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 200); + const stave = f.Stave(); + const notes = [ + { keys: ['c/4', 'c/5'], duration: '4' }, + { keys: ['c#/4', 'c#/5'], duration: '4' }, + { keys: ['c#/4', 'c#/5'], duration: '4' }, + { keys: ['c##/4', 'c##/5'], duration: '4' }, + { keys: ['c##/4', 'c##/5'], duration: '4' }, + { keys: ['c/4', 'c/5'], duration: '4' }, + { keys: ['cn/4', 'cn/5'], duration: '4' }, + { keys: ['cbb/4', 'cbb/5'], duration: '4' }, + { keys: ['cbb/4', 'cbb/5'], duration: '4' }, + { keys: ['cb/4', 'cb/5'], duration: '4' }, + { keys: ['cb/4', 'cb/5'], duration: '4' }, + { keys: ['c/4', 'c/5'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const gracenotes = [{ keys: ['d#/4'], duration: '16', slash: true }].map(f.GraceNote.bind(f)); + notes[0].addModifier(f.GraceNoteGroup({ notes: gracenotes }).beamNotes(), 0); + const voice = f + .Voice() + .setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT) + .addTickable(new _src_timesignote__WEBPACK_IMPORTED_MODULE_12__.TimeSigNote('12/4').setStave(stave)) + .addTickables(notes); + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'C'); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentals1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('Ab'); + const notes = [ + { keys: ['c/4'], duration: '4' }, + { keys: ['d/4'], duration: '4' }, + { keys: ['e/4'], duration: '4' }, + { keys: ['f/4'], duration: '4' }, + { keys: ['g/4'], duration: '4' }, + { keys: ['a/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['c/5'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const voice = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes); + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'Ab'); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentals2(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('A'); + const notes = [ + { keys: ['a/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['c#/5'], duration: '4' }, + { keys: ['d/5'], duration: '4' }, + { keys: ['e/5'], duration: '4' }, + { keys: ['f#/5'], duration: '4' }, + { keys: ['g#/5'], duration: '4' }, + { keys: ['a/5'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const voice = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes); + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'A'); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentals3(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('A'); + const score = f.EasyScore(); + score.set({ time: '8/4' }); + const notes = score.notes('A4/q, B4/q, C#5/q, D5/q, E5/q,F#5/q, G#5/q, A5/q', { stem: 'UP' }); + const voice = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes); + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'A'); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsMultiVoiceInline(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('Ab'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['d/4'], duration: '4', stem_direction: -1 }, + { keys: ['e/4'], duration: '4', stem_direction: -1 }, + { keys: ['f/4'], duration: '4', stem_direction: -1 }, + { keys: ['g/4'], duration: '4', stem_direction: -1 }, + { keys: ['a/4'], duration: '4', stem_direction: -1 }, + { keys: ['b/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const notes1 = [ + { keys: ['c/5'], duration: '4' }, + { keys: ['d/5'], duration: '4' }, + { keys: ['e/5'], duration: '4' }, + { keys: ['f/5'], duration: '4' }, + { keys: ['g/5'], duration: '4' }, + { keys: ['a/5'], duration: '4' }, + { keys: ['b/5'], duration: '4' }, + { keys: ['c/6'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes0); + const voice1 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes1); + // Ab Major + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice0, voice1], 'Ab'); + options.assert.equal(hasAccidental(notes0[0]), false); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[2]), true); + options.assert.equal(hasAccidental(notes0[3]), false); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[5]), true); + options.assert.equal(hasAccidental(notes0[6]), true); + options.assert.equal(hasAccidental(notes0[7]), false); + options.assert.equal(hasAccidental(notes1[0]), false); + options.assert.equal(hasAccidental(notes1[1]), true); + options.assert.equal(hasAccidental(notes1[2]), true); + options.assert.equal(hasAccidental(notes1[3]), false); + options.assert.equal(hasAccidental(notes1[4]), false); + options.assert.equal(hasAccidental(notes1[5]), true); + options.assert.equal(hasAccidental(notes1[6]), true); + options.assert.equal(hasAccidental(notes1[7]), false); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsMultiVoiceOffset(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('Cb'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['d/4'], duration: '4', stem_direction: -1 }, + { keys: ['e/4'], duration: '4', stem_direction: -1 }, + { keys: ['f/4'], duration: '4', stem_direction: -1 }, + { keys: ['g/4'], duration: '4', stem_direction: -1 }, + { keys: ['a/4'], duration: '4', stem_direction: -1 }, + { keys: ['b/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const notes1 = [ + { keys: ['c/5'], duration: '8' }, + { keys: ['c/5'], duration: '4' }, + { keys: ['d/5'], duration: '4' }, + { keys: ['e/5'], duration: '4' }, + { keys: ['f/5'], duration: '4' }, + { keys: ['g/5'], duration: '4' }, + { keys: ['a/5'], duration: '4' }, + { keys: ['b/5'], duration: '4' }, + { keys: ['c/6'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes0); + const voice1 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes1); + // Cb Major (All flats) + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice0, voice1], 'Cb'); + options.assert.equal(hasAccidental(notes0[0]), true); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[2]), true); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[4]), true); + options.assert.equal(hasAccidental(notes0[5]), true); + options.assert.equal(hasAccidental(notes0[6]), true); + options.assert.equal(hasAccidental(notes0[7]), false, 'Natural Remembered'); + options.assert.equal(hasAccidental(notes1[0]), true); + options.assert.equal(hasAccidental(notes1[1]), false); + options.assert.equal(hasAccidental(notes1[2]), true); + options.assert.equal(hasAccidental(notes1[3]), true); + options.assert.equal(hasAccidental(notes1[4]), true); + options.assert.equal(hasAccidental(notes1[5]), true); + options.assert.equal(hasAccidental(notes1[6]), true); + options.assert.equal(hasAccidental(notes1[7]), true); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsCornerCases1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('C'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes0); + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice0], 'C'); + options.assert.equal(hasAccidental(notes0[0]), false); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[2]), false); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[5]), true); + options.assert.equal(hasAccidental(notes0[6]), false); + options.assert.equal(hasAccidental(notes0[7]), true); + options.assert.equal(hasAccidental(notes0[8]), false); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice0]).formatToStave([voice0], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsCornerCases2(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('C'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/5'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/5'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes0); + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice0], 'C'); + options.assert.equal(hasAccidental(notes0[0]), false); + options.assert.equal(hasAccidental(notes0[2]), true); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[6]), true); + options.assert.equal(hasAccidental(notes0[8]), false); + options.assert.equal(hasAccidental(notes0[10]), true); + options.assert.equal(hasAccidental(notes0[12]), false); + options.assert.equal(hasAccidental(notes0[14]), true); + options.assert.equal(hasAccidental(notes0[16]), false); + options.assert.equal(hasAccidental(notes0[1]), false); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[5]), false); + options.assert.equal(hasAccidental(notes0[7]), true); + options.assert.equal(hasAccidental(notes0[9]), false); + options.assert.equal(hasAccidental(notes0[11]), true); + options.assert.equal(hasAccidental(notes0[13]), false); + options.assert.equal(hasAccidental(notes0[15]), true); + options.assert.equal(hasAccidental(notes0[17]), false); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice0]).formatToStave([voice0], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsCornerCases3(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('C#'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes0); + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice0], 'C#'); + options.assert.equal(hasAccidental(notes0[0]), true); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[2]), false); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[5]), true); + options.assert.equal(hasAccidental(notes0[6]), false); + options.assert.equal(hasAccidental(notes0[7]), true); + options.assert.equal(hasAccidental(notes0[8]), false); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice0]).formatToStave([voice0], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsCornerCases4(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('C#'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/5'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/5'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes0); + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice0], 'C#'); + options.assert.equal(hasAccidental(notes0[0]), true); + options.assert.equal(hasAccidental(notes0[2]), true); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[6]), true); + options.assert.equal(hasAccidental(notes0[8]), false); + options.assert.equal(hasAccidental(notes0[10]), true); + options.assert.equal(hasAccidental(notes0[12]), false); + options.assert.equal(hasAccidental(notes0[14]), true); + options.assert.equal(hasAccidental(notes0[16]), false); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[5]), false); + options.assert.equal(hasAccidental(notes0[7]), true); + options.assert.equal(hasAccidental(notes0[9]), false); + options.assert.equal(hasAccidental(notes0[11]), true); + options.assert.equal(hasAccidental(notes0[13]), false); + options.assert.equal(hasAccidental(notes0[15]), true); + options.assert.equal(hasAccidental(notes0[17]), false); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice0]).formatToStave([voice0], stave); + f.draw(); + options.assert.ok(true); +} +function factoryAPI(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); + f.Stave({ x: 10, y: 10, width: 550 }); + const accid = makeNewAccid(f); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }) + .addModifier(accid('b'), 0) + .addModifier(accid('#'), 1), + f + .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: 'h' }) + .addModifier(accid('##'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('bb'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('#'), 4) + .addModifier(accid('n'), 5) + .addModifier(accid('bb'), 6), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' }) + .addModifier(accid('n'), 0) + .addModifier(accid('#'), 1) + .addModifier(accid('#'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb'), 4) + .addModifier(accid('##'), 5) + .addModifier(accid('#'), 6), + f + .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: 'w' }) + .addModifier(accid('#'), 0) + .addModifier(accid('##').setAsCautionary(), 1) + .addModifier(accid('#').setAsCautionary(), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb').setAsCautionary(), 4) + .addModifier(accid('b').setAsCautionary(), 5), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes); + notes.forEach((n, i) => { + options.assert.ok(n.getModifiersByType('Accidental').length > 0, 'Note ' + i + ' has accidentals'); + n.getModifiersByType('Accidental').forEach((accid, i) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + i + ' has set width'); + }); + }); + f.draw(); + options.assert.ok(true, 'Factory API'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(AccidentalTests); + + + +/***/ }), + +/***/ "./tests/annotation_tests.ts": +/*!***********************************!*\ + !*** ./tests/annotation_tests.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AnnotationTests": () => (/* binding */ AnnotationTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); +/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_bend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/bend */ "./src/bend.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); +/* harmony import */ var _src_registry__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/registry */ "./src/registry.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); +/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _src_vibrato__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../src/vibrato */ "./src/vibrato.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Annotation Tests +// TODO: Formatter.FormatAndDraw(ctx, stave, notes, ???number???); +// Did a previous version of the API accept a number as the fourth argument? +// We removed the fourth argument from all of our test cases. + + + + + + + + + + + + + + + + + +const AnnotationTests = { + Start() { + QUnit.module('Annotation'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Placement', placement); + run('Lyrics', lyrics); + run('Simple Annotation', simple); + run('Styled Annotation', styling); + run('Standard Notation Annotation', standard); + run('Harmonics', harmonic); + run('Fingerpicking', picking); + run('Bottom Annotation', bottom); + run('Bottom Annotations with Beams', bottomWithBeam); + run('Test Justification Annotation Stem Up', justificationStemUp); + run('Test Justification Annotation Stem Down', justificationStemDown); + run('TabNote Annotations', tabNotes); + }, +}; +const FONT_SIZE = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size; +// Helper functions to create TabNote and StaveNote objects. +const tabNote = (noteStruct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_13__.TabNote(noteStruct); +const staveNote = (noteStruct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote(noteStruct); +/** + * Show lyrics using Annotation objects. + */ +function lyrics(options) { + let fontSize = FONT_SIZE; + let x = 10; + let width = 170; + let ratio = 1; + const registry = new _src_registry__WEBPACK_IMPORTED_MODULE_9__.Registry(); + _src_registry__WEBPACK_IMPORTED_MODULE_9__.Registry.enableDefaultRegistry(registry); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750, 260); + // Add three groups of staves. Each time we increase the fontSize by 2. + for (let i = 0; i < 3; ++i) { + const score = f.EasyScore(); + score.set({ time: '3/4' }); + const system = f.System({ width, x }); + system.addStave({ + voices: [ + score.voice(score.notes('(C4 F4)/2[id="n0"]').concat(score.beam(score.notes('(C4 A4)/8[id="n1"], (C4 A4)/8[id="n2"]')))), + ], + }); + // Add lyrics under the first row. + ['hand,', 'and', 'me', 'pears', 'lead', 'the'].forEach((text, ix) => { + const verse = Math.floor(ix / 3); + const noteGroupID = 'n' + (ix % 3); + const noteGroup = registry.getElementById(noteGroupID); + const lyricsAnnotation = f.Annotation({ text }).setFont('Roboto Slab', fontSize); + lyricsAnnotation.setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.BELOW); + noteGroup.addModifier(lyricsAnnotation, verse); + }); + // Second row doesn't have any lyrics. + system.addStave({ + voices: [score.voice(score.notes('(F4 D5)/2').concat(score.beam(score.notes('(F4 F5)/8, (F4 F5)/8'))))], + }); + f.draw(); + ratio = (fontSize + 2) / fontSize; + width = width * ratio; + x = x + width; + fontSize = fontSize + 2; + } + options.assert.ok(true); +} +function simple(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial, sans-serif'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_14__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('T'), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'h', + }).addModifier(new _src_bend__WEBPACK_IMPORTED_MODULE_4__.Bend('Full').setTap('T'), 0), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Simple Annotation'); +} +function standard(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, 10, 450).addClef('treble').setContext(ctx).draw(); + const annotation = (text) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text).setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SERIF, FONT_SIZE, 'normal', 'italic'); + const notes = [ + staveNote({ keys: ['c/4', 'e/4'], duration: 'h' }).addModifier(annotation('quiet'), 0), + staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'h' }).addModifier(annotation('Allegro'), 2), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Standard Notation Annotation'); +} +function styling(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, 10, 450).addClef('treble').setContext(ctx).draw(); + const annotation = (text, style) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text).setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SERIF, FONT_SIZE, 'normal', 'italic').setStyle(style); + const notes = [ + staveNote({ keys: ['c/4', 'e/4'], duration: 'h' }).addModifier(annotation('quiet', { fillStyle: '#0F0' }), 0), + staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'h' }).addModifier(annotation('Allegro', { fillStyle: '#00F' }), 2), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Standard Notation Annotation'); +} +function harmonic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_14__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 12 }, + { str: 3, fret: 12 }, + ], + duration: 'h', + }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Harm.'), 0), + tabNote({ + positions: [{ str: 2, fret: 9 }], + duration: 'h', + }) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('(8va)').setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SERIF, FONT_SIZE, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontWeight.NORMAL, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontStyle.ITALIC), 0) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('A.H.'), 0), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Simple Annotation'); +} +function picking(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SANS_SERIF, FONT_SIZE); + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_14__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const annotation = (text) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text).setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SERIF, FONT_SIZE, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontWeight.NORMAL, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontStyle.ITALIC); + const notes = [ + tabNote({ + positions: [ + { str: 1, fret: 0 }, + { str: 2, fret: 1 }, + { str: 3, fret: 2 }, + { str: 4, fret: 2 }, + { str: 5, fret: 0 }, + ], + duration: 'h', + }).addModifier(new _src_vibrato__WEBPACK_IMPORTED_MODULE_15__.Vibrato().setVibratoWidth(40), 0), + tabNote({ + positions: [{ str: 6, fret: 9 }], + duration: '8', + }).addModifier(annotation('p').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + tabNote({ + positions: [{ str: 3, fret: 9 }], + duration: '8', + }).addModifier(annotation('i').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + tabNote({ + positions: [{ str: 2, fret: 9 }], + duration: '8', + }).addModifier(annotation('m').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + tabNote({ + positions: [{ str: 1, fret: 9 }], + duration: '8', + }).addModifier(annotation('a').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Fingerpicking'); +} +function placement(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 750, 300); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, 50, 750).addClef('treble').setContext(ctx).draw(); + const annotation = (text, fontSize, vj) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text).setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SERIF, fontSize).setVerticalJustification(vj); + const notes = [ + staveNote({ keys: ['e/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_12__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) + .addModifier(annotation('v1', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_12__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) + .addModifier(annotation('v1', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['c/5'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_12__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) + .addModifier(annotation('v1', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(annotation('v1', 14, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 14, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_12__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('am').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) + .addModifier(annotation('v1', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 20, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(annotation('v1', 11, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 11, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(annotation('v1', 11, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 20, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(annotation('v1', 12, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 12, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.BELOW), 0) + .addModifier(annotation('v1', 11, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 20, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0), + staveNote({ keys: ['f/5'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_12__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('am').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.BELOW), 0) + .addModifier(annotation('v1', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 20, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0), + staveNote({ keys: ['f/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_12__.Stem.DOWN }) + .addModifier(annotation('v1', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 20, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0), + staveNote({ keys: ['f/5'], duration: 'w' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.BELOW), 0) + .addModifier(annotation('v1', 11, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 16, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, ' Annotation Placement'); +} +function bottom(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, 10, 300).addClef('treble').setContext(ctx).draw(); + const annotation = (text) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text).setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SERIF, FONT_SIZE).setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.VerticalJustify.BOTTOM); + const notes = [ + staveNote({ keys: ['f/4'], duration: 'w' }).addModifier(annotation('F'), 0), + staveNote({ keys: ['a/4'], duration: 'w' }).addModifier(annotation('A'), 0), + staveNote({ keys: ['c/5'], duration: 'w' }).addModifier(annotation('C'), 0), + staveNote({ keys: ['e/5'], duration: 'w' }).addModifier(annotation('E'), 0), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Bottom Annotation'); +} +function bottomWithBeam(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, 10, 300).addClef('treble').setContext(ctx).draw(); + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote({ keys: ['a/3'], duration: '8' }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('good').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.VerticalJustify.BOTTOM)), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote({ keys: ['g/3'], duration: '8' }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('even').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.VerticalJustify.BOTTOM)), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote({ keys: ['c/4'], duration: '8' }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('under').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.VerticalJustify.BOTTOM)), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote({ keys: ['d/4'], duration: '8' }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('beam').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.VerticalJustify.BOTTOM)), + ]; + const beam = new _src_beam__WEBPACK_IMPORTED_MODULE_3__.Beam(notes.slice(1)); + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + beam.setContext(ctx).draw(); + options.assert.ok(true, 'Bottom Annotation with Beams'); +} +function justificationStemUp(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 650, 950); + ctx.scale(1.5, 1.5); + const annotation = (text, hJustification, vJustification) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text) + .setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SANS_SERIF, FONT_SIZE) + .setJustification(hJustification) + .setVerticalJustification(vJustification); + for (let v = 1; v <= 4; ++v) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, (v - 1) * 150 + 40, 400).addClef('treble').setContext(ctx).draw(); + const notes = [ + staveNote({ keys: ['c/3'], duration: 'q' }).addModifier(annotation('Text', 1, v), 0), + staveNote({ keys: ['c/4'], duration: 'q' }).addModifier(annotation('Text', 2, v), 0), + staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'q' }).addModifier(annotation('Text', 3, v), 0), + staveNote({ keys: ['c/6'], duration: 'q' }).addModifier(annotation('Text', 4, v), 0), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + } + options.assert.ok(true, 'Test Justification Annotation'); +} +function justificationStemDown(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 650, 1000); + ctx.scale(1.5, 1.5); + const annotation = (text, hJustification, vJustification) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text) + .setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SANS_SERIF, FONT_SIZE) + .setJustification(hJustification) + .setVerticalJustification(vJustification); + for (let v = 1; v <= 4; ++v) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, (v - 1) * 150 + 40, 400).addClef('treble').setContext(ctx).draw(); + const notes = [ + staveNote({ keys: ['c/3'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 1, v), 0), + staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 2, v), 0), + staveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 3, v), 0), + staveNote({ keys: ['c/6'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 4, v), 0), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + } + options.assert.ok(true, 'Test Justification Annotation'); +} +function tabNotes(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial, sans-serif'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_14__.TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '8', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }, + ]; + const notes1 = specs.map((noteSpec) => { + const note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_13__.TabNote(noteSpec); + note.render_options.draw_stem = true; + return note; + }); + const notes2 = specs.map((noteSpec) => { + const note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_13__.TabNote(noteSpec); + note.render_options.draw_stem = true; + note.setStemDirection(-1); + return note; + }); + const notes3 = specs.map((noteSpec) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_13__.TabNote(noteSpec)); + notes1[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(1).setVerticalJustification(1)); // U + notes1[1].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(2).setVerticalJustification(2)); // D + notes1[2].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(3).setVerticalJustification(3)); // U + notes1[3].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(4).setVerticalJustification(4)); // D + notes2[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(3).setVerticalJustification(1)); // U + notes2[1].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(3).setVerticalJustification(2)); // D + notes2[2].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(3).setVerticalJustification(3)); // U + notes2[3].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(3).setVerticalJustification(4)); // D + notes3[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setVerticalJustification(1)); // U + notes3[1].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setVerticalJustification(2)); // D + notes3[2].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setVerticalJustification(3)); // U + notes3[3].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setVerticalJustification(4)); // D + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_16__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_5__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_16__.Voice.Mode.SOFT); + voice.addTickables(notes1); + voice.addTickables(notes2); + voice.addTickables(notes3); + // Alternatively, you could add all the notes in one big array with spread syntax. + // voice.addTickables([...notes1, ...notes2, ...notes3]); + new _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave }); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(AnnotationTests); + + + +/***/ }), + +/***/ "./tests/articulation_tests.ts": +/*!*************************************!*\ + !*** ./tests/articulation_tests.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ArticulationTests": () => (/* binding */ ArticulationTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); +/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Articulation Tests + + + + + + + + + + + + + + +const ArticulationTests = { + Start() { + QUnit.module('Articulation'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Articulation - Vertical Placement', verticalPlacement); + run('Articulation - Vertical Placement (Glyph codes)', verticalPlacement2); + run('Articulation - Staccato/Staccatissimo', drawArticulations, { sym1: 'a.', sym2: 'av' }); + run('Articulation - Accent/Tenuto', drawArticulations, { sym1: 'a>', sym2: 'a-' }); + run('Articulation - Marcato/L.H. Pizzicato', drawArticulations, { sym1: 'a^', sym2: 'a+' }); + run('Articulation - Snap Pizzicato/Fermata', drawArticulations, { sym1: 'ao', sym2: 'ao' }); + run('Articulation - Up-stroke/Down-Stroke', drawArticulations, { sym1: 'a|', sym2: 'am' }); + run('Articulation - Fermata Above/Below', drawFermata, { sym1: 'a@a', sym2: 'a@u' }); + run('Articulation - Fermata Short Above/Below', drawFermata, { sym1: 'a@as', sym2: 'a@us' }); + run('Articulation - Fermata Long Above/Below', drawFermata, { sym1: 'a@al', sym2: 'a@ul' }); + run('Articulation - Fermata Very Long Above/Below', drawFermata, { sym1: 'a@avl', sym2: 'a@uvl' }); + run('Articulation - Inline/Multiple', drawArticulations2, { sym1: 'a.', sym2: 'a.' }); + run('TabNote Articulation', tabNotes, { sym1: 'a.', sym2: 'a.' }); + }, +}; +// Helper function for creating StaveNotes. +function drawArticulations(options) { + const sym1 = options.params.sym1; + const sym2 = options.params.sym2; + const width = 125 - _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave.defaultPadding; + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 675, 195); + const ctx = f.getContext(); + options.assert.expect(0); + let x = 10; + const y = 30; + const score = f.EasyScore(); + const formatAndDrawToWidth = (x, y, width, notes, barline) => { + const voices = [score.voice(notes, { time: '4/4' })]; + const formatter = f.Formatter(); + voices.forEach((v) => formatter.joinVoices([v])); + const nwidth = Math.max(formatter.preCalculateMinTotalWidth(voices), width); + formatter.format(voices, nwidth); + const stave = f + .Stave({ x, y, width: nwidth + _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave.defaultPadding }) + .setEndBarType(barline) + .setContext(ctx) + .draw(); + voices.forEach((voice) => voice.draw(ctx, stave)); + return stave.getWidth(); + }; + // bar 1 + const notesBar1 = [ + f.StaveNote({ keys: ['a/3'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), + ]; + notesBar1[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(4), 0); + notesBar1[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(4), 0); + notesBar1[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); + notesBar1[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); + // Helper function to justify and draw a 4/4 voice + x += formatAndDrawToWidth(x, y, width, notesBar1, _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline.type.NONE); + // bar 2 - juxtaposing second bar next to first bar + const notesBar2 = [ + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + ]; + notesBar2[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); + notesBar2[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); + notesBar2[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(4), 0); + notesBar2[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(4), 0); + // Helper function to justify and draw a 4/4 voice + x += formatAndDrawToWidth(x, y, width, notesBar2, _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline.type.DOUBLE); + // bar 3 - juxtaposing second bar next to first bar + const notesBar3 = [ + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), + ]; + notesBar3[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); + notesBar3[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); + notesBar3[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(3), 0); + notesBar3[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(3), 0); + // Helper function to justify and draw a 4/4 voice + x += formatAndDrawToWidth(x, y, width, notesBar3, _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline.type.NONE); + // bar 4 - juxtaposing second bar next to first bar + const notesBar4 = [ + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + ]; + notesBar4[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(3), 0); + notesBar4[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(3), 0); + notesBar4[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); + notesBar4[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); + // Helper function to justify and draw a 4/4 voice + formatAndDrawToWidth(x, y, width, notesBar4, _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline.type.END); +} +function drawFermata(options) { + const sym1 = options.params.sym1; + const sym2 = options.params.sym2; + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 195); + const ctx = f.getContext(); + const score = f.EasyScore(); + const width = 150 - _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave.defaultPadding; + let x = 50; + const y = 30; + const formatAndDrawToWidth = (x, y, width, notes, barline) => { + const voices = [score.voice(notes, { time: '4/4' })]; + const formatter = f.Formatter(); + voices.forEach((v) => formatter.joinVoices([v])); + const nwidth = Math.max(formatter.preCalculateMinTotalWidth(voices), width); + formatter.format(voices, nwidth); + const stave = f + .Stave({ x, y, width: nwidth + _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave.defaultPadding }) + .setEndBarType(barline) + .setContext(ctx) + .draw(); + voices.forEach((voice) => voice.draw(ctx, stave)); + return stave.getWidth(); + }; + options.assert.expect(0); + const notesBar1 = [ + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: -1 }), + ]; + notesBar1[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); + notesBar1[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); + notesBar1[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); + notesBar1[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); + x += formatAndDrawToWidth(x, y, width, notesBar1, _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline.type.NONE); + // bar 2 - juxtaposing second bar next to first bar + const notesBar2 = [ + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + ]; + notesBar2[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); + notesBar2[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); + notesBar2[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); + notesBar2[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); + // Helper function to justify and draw a 4/4 voice + formatAndDrawToWidth(x, y, width, notesBar2, _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline.type.DOUBLE); +} +function verticalPlacement(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 750, 300); + const staveNote = (noteStruct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote(noteStruct); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 750).addClef('treble').setContext(ctx).draw(); + const notes = [ + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0), + staveNote({ keys: ['g/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0), + staveNote({ keys: ['c/5'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0), + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0), + staveNote({ keys: ['g/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0), + staveNote({ keys: ['c/5'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0), + staveNote({ keys: ['a/5'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0), + staveNote({ keys: ['a/5'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, ' Annotation Placement'); +} +function verticalPlacement2(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 750, 300); + const staveNote = (noteStruct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote(noteStruct); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 750).addClef('treble').setContext(ctx).draw(); + const notes = [ + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataBelow'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoBelow'), 0), + staveNote({ keys: ['g/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataShortBelow'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoBelow'), 0), + staveNote({ keys: ['c/5'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataLongBelow'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoBelow'), 0), + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoBelow'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataVeryShortBelow'), 0), + staveNote({ keys: ['g/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoBelow'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataVeryLongBelow'), 0), + staveNote({ keys: ['c/5'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW).setBetweenLines(), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoBelow').setBetweenLines(), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataBelow'), 0), + staveNote({ keys: ['a/5'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataAbove'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoAbove'), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataShortAbove'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoAbove'), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataLongAbove'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoAbove'), 0), + staveNote({ keys: ['a/5'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoAbove'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataVeryShortAbove'), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoAbove'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataVeryLongAbove'), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE).setBetweenLines(), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoAbove').setBetweenLines(), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataAbove'), 0), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, ' Annotation Placement (Glyph codes)'); +} +function drawArticulations2(options) { + options.assert.expect(0); + const scale = 0.8; + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 1500, 195); + // Get the rendering context + const ctx = f.getContext(); + ctx.scale(scale, scale); + // bar 1 + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 500).setContext(ctx).draw(); + const notesBar1 = [ + f.StaveNote({ keys: ['c/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['d/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['e/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['g/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['b/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['d/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['e/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['f/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['g/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['b/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['c/6'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['d/6'], duration: '16', stem_direction: -1 }), + ]; + let i; + for (i = 0; i < 16; i++) { + notesBar1[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(4), 0); + notesBar1[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(4), 0); + if (i === 15) { + notesBar1[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(4), 0); + } + } + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1.slice(0, 8)); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1.slice(8, 16)); + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.FormatAndDraw(ctx, stave1, notesBar1); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + // bar 2 - juxtaposing second bar next to first bar + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(510, 50, 500).setContext(ctx).draw(); + const notesBar2 = [ + f.StaveNote({ keys: ['f/3'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['g/3'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['a/3'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['b/3'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['c/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['d/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['e/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['g/4'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['a/4'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['b/4'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['d/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['e/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['f/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['g/5'], duration: '16', stem_direction: -1 }), + ]; + for (i = 0; i < 16; i++) { + notesBar2[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(3), 0); + notesBar2[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a^').setPosition(3), 0); + if (i === 15) { + notesBar2[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(4), 0); + } + } + const beam3 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar2.slice(0, 8)); + const beam4 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar2.slice(8, 16)); + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.FormatAndDraw(ctx, stave2, notesBar2); + beam3.setContext(ctx).draw(); + beam4.setContext(ctx).draw(); + // bar 3 - juxtaposing second bar next to first bar + const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(1010, 50, 100).setContext(ctx).draw(); + const notesBar3 = [f.StaveNote({ keys: ['c/4'], duration: 'w', stem_direction: 1 })]; + notesBar3[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(3), 0); + notesBar3[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(3), 0); + notesBar3[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(3), 0); + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.FormatAndDraw(ctx, stave3, notesBar3); + // bar 4 - juxtaposing second bar next to first bar + const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(1110, 50, 250).setContext(ctx).draw(); + const notesBar4 = [ + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + ]; + for (i = 0; i < 4; i++) { + let position1 = 3; + if (i > 1) { + position1 = 4; + } + notesBar4[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(position1), 0); + } + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.FormatAndDraw(ctx, stave4, notesBar4); +} +function tabNotes(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt ' + _src_font__WEBPACK_IMPORTED_MODULE_4__.Font.SANS_SERIF; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_12__.TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '8', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }, + ]; + const notes1 = specs.map((noteSpec) => { + const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_11__.TabNote(noteSpec); + tabNote.render_options.draw_stem = true; + return tabNote; + }); + const notes2 = specs.map((noteSpec) => { + const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_11__.TabNote(noteSpec); + tabNote.render_options.draw_stem = true; + tabNote.setStemDirection(-1); + return tabNote; + }); + const notes3 = specs.map((noteSpec) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_11__.TabNote(noteSpec)); + notes1[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(3), 0); // U + notes1[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(4), 0); // D + notes1[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(3), 0); // U + notes1[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(4), 0); // D + notes2[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(3), 0); + notes2[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(4), 0); + notes2[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(3), 0); + notes2[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(4), 0); + notes3[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(3), 0); + notes3[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(4), 0); + notes3[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(3), 0); + notes3[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(4), 0); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_13__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_3__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_13__.Voice.Mode.SOFT); + voice.addTickables(notes1); + voice.addTickables(notes2); + voice.addTickables(notes3); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ArticulationTests); + + + +/***/ }), + +/***/ "./tests/auto_beam_formatting_tests.ts": +/*!*********************************************!*\ + !*** ./tests/auto_beam_formatting_tests.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AutoBeamFormattingTests": () => (/* binding */ AutoBeamFormattingTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_fraction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/fraction */ "./src/fraction.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Auto Beaming Tests +// TODO: Beam.generateBeams(voice.getTickables() as StemmableNote[], ...) requires a cast to StemmableNote[]. +// Is there a cleaner way to handle this? + + + + + +const AutoBeamFormattingTests = { + Start() { + QUnit.module('Auto-Beaming'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple Auto Beaming', simpleAuto); + run('Auto Beaming With Overflow Group', simpleAutoWithOverflowGroup); + run('Even Group Stem Directions', evenGroupStemDirections); + run('Odd Group Stem Directions', oddGroupStemDirections); + run('Odd Beam Groups Auto Beaming', oddBeamGroups); + run('More Simple Auto Beaming 0', moreSimple0); + run('More Simple Auto Beaming 1', moreSimple1); + run('Beam Across All Rests', beamAcrossAllRests); + run('Beam Across All Rests with Stemlets', beamAcrossAllRestsWithStemlets); + run('Break Beams on Middle Rests Only', beamAcrossMiddleRests); + run('Break Beams on Rest', breakBeamsOnRests); + run('Maintain Stem Directions', maintainStemDirections); + run('Maintain Stem Directions - Beam Over Rests', maintainStemDirectionsBeamAcrossRests); + run('Beat group with unbeamable note - 2/2', groupWithUnbeamableNote); + run('Offset beat grouping - 6/8 ', groupWithUnbeamableNote1); + run('Odd Time - Guessing Default Beam Groups', autoOddBeamGroups); + run('Custom Beam Groups', customBeamGroups); + run('Simple Tuplet Auto Beaming', simpleTuplets); + run('More Simple Tuplet Auto Beaming', moreSimpleTuplets); + run('More Automatic Beaming', moreBeaming); + run('Automatic Beaming 4/4 with 3, 3, 2 Pattern', beamingWithSeveralGroups1); + run('Automatic Beaming 4/4 with 3, 3, 2 Pattern and Overflow', beamingWithSeveralGroupsOverflow); + run('Automatic Beaming 8/4 with 3, 2, 3 Pattern and 2 Overflows', beamingWithSeveralGroupsOverflow2); + run('Automatic Beaming 8/4 with 3, 2, 3 Pattern and 3 Overflows', beamingWithSeveralGroupsOverflow3); + run('Duration-Based Secondary Beam Breaks', secondaryBreaks1); + run('Duration-Based Secondary Beam Breaks 2', secondaryBreaks2); + run('Flat Beams Up', flatBeamsUp); + run('Flat Beams Down', flatBeamsDown); + run('Flat Beams Mixed Direction', flatBeamsMixed); + run('Flat Beams Up (uniform)', flatBeamsUpUniform); + run('Flat Beams Down (uniform)', flatBeamsDownUniform); + run('Flat Beams Up Bounds', flatBeamsUpBounds); + run('Flat Beams Down Bounds', flatBeamsDownBounds); + }, +}; +function simpleAuto(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('f5/8, e5, d5, c5/16, c5, d5/8, e5, f5, f5/32, f5, f5, f5'), { time: '4/4' }); + // Takes a voice and returns its auto beams. + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beaming Applicator Test'); +} +function simpleAutoWithOverflowGroup(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + // Add a . after a note (e.g., f5/4.) to make it a dotted note. + const voice = score.voice(score.notes('f5/4., e5/8, d5/8, d5/16, c5/16, c5/16, c5/16, f5/16, f5/32, f5/32'), { + time: '4/4', + }); + // Takes a voice and returns its auto beams. + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beaming Applicator Test'); +} +function evenGroupStemDirections(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('a4/8, b4, g4, c5, f4, d5, e4, e5, b4, b4, g4, d5'), { time: '6/4' }); + // Takes a voice and returns its auto beams. + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.equal(beams[0].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP); + options.assert.equal(beams[1].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP); + options.assert.equal(beams[2].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP); + options.assert.equal(beams[3].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP); + options.assert.equal(beams[4].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.DOWN); + options.assert.equal(beams[5].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.DOWN); + options.assert.ok(true, 'Auto Beaming Applicator Test'); +} +function oddGroupStemDirections(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('g4/8, b4, d5, c5, f4, d5, e4, g5, g4, b4, g4, d5, a4, c5, a4'), { + time: '15/8', + }); + const groups = [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8)]; + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, groups); + options.assert.equal(beams[0].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.DOWN, 'Notes are equidistant from middle line'); + options.assert.equal(beams[1].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.DOWN); + options.assert.equal(beams[2].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP); + options.assert.equal(beams[3].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.DOWN, 'Notes are equidistant from middle line'); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beaming Applicator Test'); +} +function oddBeamGroups(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('f5, e5, d5, c5, c5, d5, e5, f5, f5, f4, f3, f5/16, f5'), { time: '6/4' }); + const groups = [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(1, 8)]; + // Takes a voice and returns its auto beams. + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, groups); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function moreSimple0(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/8, g4, c5, g5, a5, c4, d4, a5'), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function moreSimple1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function breakBeamsOnRests(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + beam_rests: false, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamAcrossAllRestsWithStemlets(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + beam_rests: true, + show_stemlets: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamAcrossAllRests(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + beam_rests: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamAcrossMiddleRests(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + beam_rests: true, + beam_middle_only: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function maintainStemDirections(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave(); + const score = f.EasyScore(); + // EasyScore.notes(line, ...) ignores whitespace in the line string. + const voice = score.voice(score.notes([ + 'b4/16, b4, b4[stem="down"], b4/r', + 'b4/r, b4[stem="down"], b4, b4', + 'b4[stem="down"], b4[stem="down"], b4, b4/r', + 'b4/32, b4[stem="down"], b4[stem="down"], b4, b4/16/r, b4', + ].join(', '), { stem: 'up' }), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + beam_rests: false, + maintain_stem_directions: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function maintainStemDirectionsBeamAcrossRests(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes([ + 'b4/16, b4, b4[stem="down"], b4/r', + 'b4/r, b4[stem="down"], b4, b4', + 'b4[stem="down"], b4[stem="down"], b4, b4/r', + 'b4/32, b4[stem="down"], b4[stem="down"], b4, b4/16/r, b4', + ].join(', '), { stem: 'up' }), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + beam_rests: true, + maintain_stem_directions: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function groupWithUnbeamableNote(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave().addTimeSignature('2/4'); + const score = f.EasyScore(); + const voice = score.voice(score.notes('b4/16, b4, b4/4, b4/16, b4'), { time: '2/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + groups: [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 2)], + beam_rests: false, + maintain_stem_directions: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function groupWithUnbeamableNote1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave().addTimeSignature('6/8'); + const score = f.EasyScore(); + const voice = score.voice(score.notes('b4/4, b4/4, b4/8, b4/8'), { time: '6/8' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + groups: [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8)], + beam_rests: false, + maintain_stem_directions: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function autoOddBeamGroups(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 400); + const score = f.EasyScore(); + const stave1 = f.Stave({ y: 10 }).addTimeSignature('5/4'); + const voice1 = score.voice(score.notes('c5/8, g5, c5, b4, b4, c4, d4, a5, c4, g4'), { time: '5/4' }); + const stave2 = f.Stave({ y: 150 }).addTimeSignature('5/8'); + const voice2 = score.voice(score.notes('c5/8, g5, c5, b4, b4'), { time: '5/8' }); + const stave3 = f.Stave({ y: 290 }).addTimeSignature('13/16'); + const voice3 = score.voice(score.notes('c5/16, g5, c5, b4, b4, c5, g5, c5, b4, b4, c5, b4, b4'), { + time: '13/16', + }); + // Flatten the arrays into a single Beam[]. + const beams = [ + ..._src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice1, undefined, _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.getDefaultBeamGroups('5/4')), + ..._src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice2, undefined, _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.getDefaultBeamGroups('5/8')), + ..._src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice3, undefined, _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.getDefaultBeamGroups('13/16')), + ]; + f.Formatter().formatToStave([voice1], stave1).formatToStave([voice2], stave2).formatToStave([voice3], stave3); + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.formatBegModifiers([stave1, stave2, stave3]); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function customBeamGroups(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 400); + const score = f.EasyScore(); + const stave1 = f.Stave({ y: 10 }).addTimeSignature('5/4'); + const voice1 = score.voice(score.notes('c5/8, g5, c5, b4, b4, c4, d4, a5, c4, g4'), { time: '5/4' }); + const stave2 = f.Stave({ y: 150 }).addTimeSignature('5/8'); + const voice2 = score.voice(score.notes('c5/8, g5, c5, b4, b4'), { time: '5/8' }); + const stave3 = f.Stave({ y: 290 }).addTimeSignature('13/16'); + const voice3 = score.voice(score.notes('c5/16, g5, c5, b4, b4, c5, g5, c5, b4, b4, c5, b4, b4'), { time: '13/16' }); + const group1 = [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(5, 8)]; + const group2 = [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 8)]; + const group3 = [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(7, 16), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 16), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(4, 16)]; + // Flatten the three Beam[] into a single Beam[]. + // Alternatively, you can use .reduce(concat) flatten arrays, where concat is defined as (a, b) => a.concat(b). + const beams = [ + ..._src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice1, undefined, group1), + ..._src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice2, undefined, group2), + ..._src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice3, undefined, group3), + ]; + f.Formatter().formatToStave([voice1], stave1).formatToStave([voice2], stave2).formatToStave([voice3], stave3); + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.formatBegModifiers([stave1, stave2, stave3]); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +/** + * Helper function which uses Function.prototype.bind() to create shortcut methods. + * This can improve the readability of large blocks of EasyScore code. + */ +function createShortcuts(score) { + return { + notes: score.notes.bind(score), + tuplet: score.tuplet.bind(score), + }; +} +function simpleTuplets(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + ...tuplet(notes('c4/8, g4, c5')), + ...notes('g5/8, a5'), + ...tuplet(notes('a5/16, (c5 e5), a5, d5, a5'), { ratioed: false, notes_occupied: 4 }), + ], { time: '3/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function moreSimpleTuplets(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([...tuplet(notes('d4/4, g4, c5')), ...notes('g5/16, a5, a5, (c5 e5)')], { time: '3/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function moreBeaming(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/8, g4/4, c5/8., g5/16, a5/4, a5/16, (c5 e5)/16, a5/8'), { time: '9/8' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.getDefaultBeamGroups('9/8')); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamingWithSeveralGroups1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/8, g4/4, c5/8, g5, a5, a5, f5'), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 8)]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamingWithSeveralGroupsOverflow(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/8, g4/4., c5/8, g5, a5, a5'), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 8)]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamingWithSeveralGroupsOverflow2(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/16, g4/2, f4/16, c5/8, a4/16, c4/16, g4/8, b4, c5, g5, f5, e5, c5, a4/4'), { + time: '8/4', + }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8)]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamingWithSeveralGroupsOverflow3(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/16, g4/1, f4/16, c5/8, g5, f5, e5, c5, a4/4'), { time: '8/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8)]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function secondaryBreaks1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes([ + 'f5/32, f5, f5, f5, f5/16., f5/32', + 'f5/16, f5/8, f5/16', + 'f5/32, f5/16., f5., f5/32', + 'f5/16., f5/32, f5, f5/16.', + ].join(','))); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { secondary_breaks: '8' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Duration-Based Secondary Breaks Test'); +} +function secondaryBreaks2(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + tuplet(notes('e5/16, f5, f5')), + tuplet(notes('f5/16, f5, c5')), + notes('a4/16., f4/32'), + tuplet(notes('d4/16, d4, d4')), + tuplet(notes('a5/8, (e5 g5), a5')), + tuplet(notes('f5/16, f5, f5')), + tuplet(notes('f5/16, f5, a4')), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { secondary_breaks: '8' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Duration-Based Secondary Breaks Test'); +} +function flatBeamsUp(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + tuplet(notes('c4/8, g4, f5')), + notes('d5/8'), + tuplet(notes('c5/16, (c4 e4 g4), f4')), + notes('d5/8, e5, c4, f5/32, f5, f5, f5'), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + stem_direction: 1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Up Test'); +} +function flatBeamsDown(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/64, c5, c5, c5, c5, c5, c5, c5, a5/8, g5, (d4 f4 a4)/16, d4, d5/8, e5, g5, a6/32, a6, a6, g4/64, g4')); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + stem_direction: -1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Down Test'); +} +function flatBeamsMixed(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/64, d5, e5, c5, f5, c5, a5, c5, a5/8, g5, (d4 f4 a4)/16, d4, d5/8, e5, c4, a4/32, a4, a4, g4/64, g4')); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { flat_beams: true }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Mixed Direction Test'); +} +function flatBeamsUpUniform(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + ...tuplet(notes('c4/8, g4, g5')), + ...notes('d5/8, c5/16, (c4 e4 g4), d5/8, e5, c4, f5/32, f5, f5, f5'), + ]); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + flat_beam_offset: 50, + stem_direction: 1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Up (uniform) Test'); +} +function flatBeamsDownUniform(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/64, c5, c5, c5, c5, c5, c5, c5, a5/8, g5, (e4 g4 b4)/16, e5, d5/8, e5/8, g5/8, a6/32, a6, a6, g4/64, g4')); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + flat_beam_offset: 155, + stem_direction: -1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Down (uniform) Test'); +} +function flatBeamsUpBounds(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + ...tuplet(notes('c4/8, g4/8, g5/8')), + ...notes('d5/8, c5/16, (c4 e4 g4)/16, d5/8, e5/8, c4/8, f5/32, f5/32, f5/32, f5/32'), + ]); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + flat_beam_offset: 60, + stem_direction: 1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Up (uniform) Test'); +} +function flatBeamsDownBounds(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes([ + 'g5/8, a6/32, a6/32, a6/32, g4/64, g4/64', + 'c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, a5/8', + 'g5/8, (e4 g4 b4)/16, e5/16', + 'd5/8, e5/8', + ].join(','), { stem: 'down' })); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + flat_beam_offset: 145, + stem_direction: -1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Down (uniform) Test'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(AutoBeamFormattingTests); + + + +/***/ }), + +/***/ "./tests/bach_tests.ts": +/*!*****************************!*\ + !*** ./tests/bach_tests.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BachDemoTests": () => (/* binding */ BachDemoTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Bach Demo + + +const BachDemoTests = { + Start() { + QUnit.module('Bach Demo'); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests('Minuet 1', minuet1); + }, +}; +function minuet1(options) { + const registry = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry(); + _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry.enableDefaultRegistry(registry); + // Retrieve the element from the registry and cast to StaveNote, so we can call .addModifier( ) later. + const id = (id) => registry.getElementById(id); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 1100, 900); + const score = f.EasyScore({ throwOnError: true }); + // Bind these three functions so the code looks cleaner. + // Instead of score.voice(...), just call voice(...). + const voice = score.voice.bind(score); + const notes = score.notes.bind(score); + const beam = score.beam.bind(score); + let x = 120; + let y = 80; + function appendSystem(width) { + const system = f.System({ x, y, width, spaceBetweenStaves: 10 }); + x += width; + return system; + } + score.set({ time: '3/4' }); + /* Measure 1 */ + let system = appendSystem(220); + system + .addStave({ + voices: [ + voice([notes('D5/q[id="m1a"]'), beam(notes('G4/8, A4, B4, C5', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + voice([f.TextDynamics({ text: 'p', duration: 'h', dots: 1, line: 9 })]), + ], + }) + .addClef('treble') + .addKeySignature('G') + .addTimeSignature('3/4') + .setTempo({ name: 'Allegretto', duration: 'h', dots: 1, bpm: 66 }, -30); + system + .addStave({ voices: [voice(notes('(G3 B3 D4)/h, A3/q', { clef: 'bass' }))] }) + .addClef('bass') + .addKeySignature('G') + .addTimeSignature('3/4'); + system.addConnector('brace'); + system.addConnector('singleRight'); + system.addConnector('singleLeft'); + id('m1a').addModifier(f.Fingering({ number: '5' }), 0); + /* Measure 2 */ + system = appendSystem(150); + system.addStave({ voices: [voice(notes('D5/q[id="m2a"], G4[id="m2b"], G4[id="m2c"]'))] }); + system.addStave({ voices: [voice(notes('B3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m2a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); + id('m2b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m2c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + f.Curve({ + from: id('m1a'), + to: id('m2a'), + options: { + cps: [ + { x: 0, y: 40 }, + { x: 0, y: 40 }, + ], + }, + }); + /* Measure 3 */ + system = appendSystem(150); + system.addStave({ + voices: [voice([notes('E5/q[id="m3a"]'), beam(notes('C5/8, D5, E5, F5', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat))], + }); + id('m3a').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); + system.addStave({ voices: [voice(notes('C4/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + /* Measure 4 */ + system = appendSystem(150); + system.addStave({ voices: [voice(notes('G5/q[id="m4a"], G4[id="m4b"], G4[id="m4c"]'))] }); + system.addStave({ voices: [voice(notes('B3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m4a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); + id('m4b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m4c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + f.Curve({ + from: id('m3a'), + to: id('m4a'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 20 }, + ], + }, + }); + /* Measure 5 */ + system = appendSystem(150); + system.addStave({ + voices: [voice([notes('C5/q[id="m5a"]'), beam(notes('D5/8, C5, B4, A4', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat))], + }); + id('m5a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); + system.addStave({ voices: [voice(notes('A3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + /* Measure 6 */ + system = appendSystem(150); + system.addStave({ + voices: [voice([notes('B4/q'), beam(notes('C5/8, B4, A4, G4[id="m6a"]', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat))], + }); + system.addStave({ voices: [voice(notes('G3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + f.Curve({ + from: id('m5a'), + to: id('m6a'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 20 }, + ], + invert: true, + position_end: 'nearTop', + y_shift: 20, + }, + }); + /* Measure 7 (New system) */ + x = 20; + y += 230; + system = appendSystem(220); + system + .addStave({ + voices: [ + voice([notes('F4/q[id="m7a"]'), beam(notes('G4/8[id="m7b"], A4, B4, G4', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ], + }) + .addClef('treble') + .addKeySignature('G'); + system + .addStave({ voices: [voice(notes('D4/q, B3[id="m7c"], G3', { clef: 'bass' }))] }) + .addClef('bass') + .addKeySignature('G'); + system.addConnector('brace'); + system.addConnector('singleRight'); + system.addConnector('singleLeft'); + id('m7a').addModifier(f.Fingering({ number: '2', position: 'below' }), 0); + id('m7b').addModifier(f.Fingering({ number: '1' }), 0); + id('m7c').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); + /* Measure 8 */ + system = appendSystem(180); + const grace = f.GraceNote({ keys: ['d/3'], clef: 'bass', duration: '4', slash: false }); + system.addStave({ voices: [voice(notes('A4/h.[id="m8c"]'))] }); + system.addStave({ + voices: [ + score + .set({ clef: 'bass' }) + .voice([notes('D4/q[id="m8a"]'), beam(notes('D3/8, C4, B3[id="m8b"], A3', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ], + }); + system.addConnector('singleRight'); + id('m8b').addModifier(f.Fingering({ number: '1', position: 'above' }), 0); + id('m8c').addModifier(f.GraceNoteGroup({ notes: [grace] }), 0); + f.Curve({ + from: id('m7a'), + to: id('m8c'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 20 }, + ], + invert: true, + position: 'nearTop', + position_end: 'nearTop', + }, + }); + f.StaveTie({ from: grace, to: id('m8c') }); + /* Measure 9 */ + system = appendSystem(180); + system.addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('D5/q[id="m9a"]'), beam(notes('G4/8, A4, B4, C5', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ], + }); + system.addStave({ voices: [voice(notes('B3/h, A3/q', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m9a').addModifier(f.Fingering({ number: '5' }), 0); + /* Measure 10 */ + system = appendSystem(170); + system.addStave({ voices: [voice(notes('D5/q[id="m10a"], G4[id="m10b"], G4[id="m10c"]'))] }); + system.addStave({ voices: [voice(notes('G3/q[id="m10d"], B3, G3', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m10a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); + id('m10b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m10c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m10d').addModifier(f.Fingering({ number: '4' }), 0); + f.Curve({ + from: id('m9a'), + to: id('m10a'), + options: { + cps: [ + { x: 0, y: 40 }, + { x: 0, y: 40 }, + ], + }, + }); + /* Measure 11 */ + system = appendSystem(150); + system.addStave({ + voices: [voice([notes('E5/q[id="m11a"]'), beam(notes('C5/8, D5, E5, F5', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat))], + }); + id('m11a').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); + system.addStave({ voices: [voice(notes('C4/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + /* Measure 12 */ + system = appendSystem(170); + system.addStave({ voices: [voice(notes('G5/q[id="m12a"], G4[id="m12b"], G4[id="m12c"]'))] }); + system.addStave({ + voices: [ + score + .set({ clef: 'bass' }) + .voice([notes('B3/q[id="m12d"]'), beam(notes('C4/8, B3, A3, G3[id="m12e"]', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ], + }); + system.addConnector('singleRight'); + id('m12a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); + id('m12b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m12c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m12d').addModifier(f.Fingering({ number: '2', position: 'above' }), 0); + id('m12e').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); + f.Curve({ + from: id('m11a'), + to: id('m12a'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 20 }, + ], + }, + }); + /* Measure 13 (New system) */ + x = 20; + y += 230; + system = appendSystem(220); + system + .addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('c5/q[id="m13a"]'), beam(notes('d5/8, c5, b4, a4', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ], + }) + .addClef('treble') + .addKeySignature('G'); + system + .addStave({ voices: [voice(notes('a3/h[id="m13b"], f3/q[id="m13c"]', { clef: 'bass' }))] }) + .addClef('bass') + .addKeySignature('G'); + system.addConnector('brace'); + system.addConnector('singleRight'); + system.addConnector('singleLeft'); + id('m13a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); + id('m13b').addModifier(f.Fingering({ number: '1' }), 0); + id('m13c').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); + /* Measure 14 */ + system = appendSystem(180); + system.addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('B4/q'), beam(notes('C5/8, b4, a4, g4', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ], + }); + system.addStave({ voices: [voice(notes('g3/h[id="m14a"], b3/q[id="m14b"]', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m14a').addModifier(f.Fingering({ number: '2' }), 0); + id('m14b').addModifier(f.Fingering({ number: '1' }), 0); + /* Measure 15 */ + system = appendSystem(180); + system.addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('a4/q'), beam(notes('b4/8, a4, g4, f4[id="m15a"]', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ], + }); + system.addStave({ voices: [voice(notes('c4/q[id="m15b"], d4, d3', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m15a').addModifier(f.Fingering({ number: '2' }), 0); + id('m15b').addModifier(f.Fingering({ number: '2' }), 0); + /* Measure 16 */ + system = appendSystem(130); + system + .addStave({ + voices: [score.set({ clef: 'treble' }).voice([notes('g4/h.[id="m16a"]')].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat))], + }) + .setEndBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.BarlineType.REPEAT_END); + system + .addStave({ voices: [voice(notes('g3/h[id="m16b"], g2/q', { clef: 'bass' }))] }) + .setEndBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.BarlineType.REPEAT_END); + system.addConnector('boldDoubleRight'); + id('m16a').addModifier(f.Fingering({ number: '1' }), 0); + id('m16b').addModifier(f.Fingering({ number: '1' }), 0); + f.Curve({ + from: id('m13a'), + to: id('m16a'), + options: { + cps: [ + { x: 0, y: 50 }, + { x: 0, y: 20 }, + ], + invert: true, + position_end: 'nearTop', + }, + }); + /* Measure 17 */ + system = appendSystem(180); + system + .addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('b5/q[id="m17a"]'), beam(notes('g5/8, a5, b5, g5', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + voice([f.TextDynamics({ text: 'mf', duration: 'h', dots: 1, line: 10 })]), + ], + }) + .setBegBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.BarlineType.REPEAT_BEGIN); + system.addStave({ voices: [voice(notes('g3/h.', { clef: 'bass' }))] }).setBegBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.BarlineType.REPEAT_BEGIN); + system.addConnector('boldDoubleLeft'); + system.addConnector('singleRight'); + id('m17a').addModifier(f.Fingering({ number: '5', position: 'above' }), 0); + /* Measure 18 */ + system = appendSystem(180); + system.addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('a5/q[id="m18a"]'), beam(notes('d5/8, e5, f5, d5[id="m18b"]', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ], + }); + system.addStave({ voices: [voice(notes('f3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m18a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); + f.Curve({ + from: id('m17a'), + to: id('m18b'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 30 }, + ], + }, + }); + /* Done */ + f.draw(); + _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry.disableDefaultRegistry(); + options.assert.ok(true, 'Bach Minuet 1'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(BachDemoTests); + + + +/***/ }), + +/***/ "./tests/barline_tests.ts": +/*!********************************!*\ + !*** ./tests/barline_tests.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BarlineTests": () => (/* binding */ BarlineTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src */ "./src/index.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Barline Tests + + + +const BarlineTests = { + Start() { + QUnit.module('Barline'); + QUnit.test('Enums', enums); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple BarNotes', simple); + run('Style BarNotes', style); + }, +}; +function enums(assert) { + // VexFlow 4.0 renamed Barline.type => BarlineType. + // The old way still works, for backwards compatibility. + assert.equal(_src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.Barline.type, _src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.BarlineType); + const a = _src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.BarlineType.DOUBLE; + const b = _src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.BarlineType.DOUBLE; + assert.equal(a, b); +} +function simple(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 380, 160); + const stave = f.Stave(); + const notes = [ + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '2' }), + f.BarNote({ type: 'single' }), + f + .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '2' }) + .addModifier(f.Accidental({ type: 'n' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + ]; + const voice = f.Voice().addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + if (options.backend === _src__WEBPACK_IMPORTED_MODULE_1__.Renderer.Backends.SVG) { + notes.forEach((note) => { + options.assert.notEqual(note.getSVGElement(), undefined); + }); + } + options.assert.ok(true, 'Simple Test'); +} +function style(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 380, 160); + const stave = f.Stave(); + const notes = [ + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '2' }), + f.BarNote({ type: 'single' }), + f + .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '2' }) + .addModifier(f.Accidental({ type: 'n' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + ]; + notes[1].setStyle({ shadowBlur: 15, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); + const voice = f.Voice().addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Style'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(BarlineTests); + + + +/***/ }), + +/***/ "./tests/beam_tests.ts": +/*!*****************************!*\ + !*** ./tests/beam_tests.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BeamTests": () => (/* binding */ BeamTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Beam Tests +// TODO: Factory.Beam()'s 'notes' argument is a StemmableNote[], but we only have access to Tickable[]. + + +const BeamTests = { + Start() { + QUnit.module('Beam'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple Beam', simple); + run('Multi Beam', multi); + run('Sixteenth Beam', sixteenth); + run('Slopey Beam', slopey); + run('Auto-stemmed Beam', autoStem); + run('Mixed Beam 1', mixed); + run('Mixed Beam 2', mixed2); + run('Dotted Beam', dotted); + run('Partial Beam', partial); + run('Close Trade-offs Beam', tradeoffs); + run('Insane Beam', insane); + run('Lengthy Beam', lenghty); + run('Outlier Beam', outlier); + run('Break Secondary Beams', breakSecondaryBeams); + run('Partial Beam Direction', partialBeamDirection); + run('TabNote Beams Up', tabBeamsUp); + run('TabNote Beams Down', tabBeamsDown); + run('TabNote Auto Create Beams', autoTabBeams); + run('TabNote Beams Auto Stem', tabBeamsAutoStem); + run('Complex Beams with Annotations', complexWithAnnotation); + run('Complex Beams with Articulations', complexWithArticulation); + run('Complex Beams with Articulations two Staves', complexWithArticulation2); + }, +}; +function simple(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voice = score.voice([ + notes('(cb4 e#4 a4)/2'), + beam(notes('(cb4 e#4 a4)/8, (d4 f4 a4), (ebb4 g##4 b4), (f4 a4 c5)', { stem: 'up' })), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat), { time: '2/2' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Simple Test'); +} +function multi(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice.bind(score); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voices = [ + voice([beam(notes('f5/8, e5, d5, c5', { stem: 'up' })), beam(notes('c5, d5, e5, f5', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + voice([beam(notes('f4/8, e4, d4, c4', { stem: 'down' })), beam(notes('c4/8, d4, e4, f4', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Multi Test'); +} +function sixteenth(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice.bind(score); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voices = [ + voice([ + beam(notes('f5/16, f5, d5, c5', { stem: 'up' })), + beam(notes('c5/16, d5, f5, e5', { stem: 'up' })), + notes('f5/2', { stem: 'up' }), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + voice([ + beam(notes('f4/16, e4/16, d4/16, c4/16', { stem: 'down' })), + beam(notes('c4/16, d4/16, f4/16, e4/16', { stem: 'down' })), + notes('f4/2', { stem: 'down' }), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Sixteenth Test'); +} +function breakSecondaryBeams(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice.bind(score); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voices = [ + voice([ + beam(notes('f5/16., f5/32, c5/16., d5/32, c5/16., d5/32', { stem: 'up' }), { secondaryBeamBreaks: [1, 3] }), + beam(notes('f5/16, e5, e5, e5, e5, e5', { stem: 'up' }), { secondaryBeamBreaks: [2] }), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat), { time: '3/4' }), + voice([ + beam(notes('f4/32, d4, e4, c4, d4, c4, f4, d4, e4, c4, c4, d4', { stem: 'down' }), { + secondaryBeamBreaks: [3, 7], + }), + beam(notes('d4/16, f4, d4, e4, e4, e4', { stem: 'down' }), { secondaryBeamBreaks: [3] }), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat), { time: '3/4' }), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Breaking Secondary Beams Test'); +} +function partialBeamDirection(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice.bind(score); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voices = [ + voice([ + // Default beaming: + beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' })), + // Force first 16th beam right + beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' }), { partialBeamDirections: { '1': 'R' } }), + // Force first 16th beam left + beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' }), { partialBeamDirections: { '1': 'L' } }), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat), { time: '9/8' }), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Partial beam direction test'); +} +function slopey(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 350, 140); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voice = score.voice([ + beam(notes('c4/8, f4/8, d5/8, g5/8', { stem: 'up' })), + beam(notes('d6/8, f5/8, d4/8, g3/8', { stem: 'up' })), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Slopey Test'); +} +function autoStem(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 350, 140); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('a4/8, b4/8, g4/8, c5/8, f4/8, d5/8, e4/8, e5/8, b4/8, b4/8, g4/8, d5/8'), { + time: '6/4', + }); + const notes = voice.getTickables(); + const beams = [ + f.Beam({ notes: notes.slice(0, 2), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(2, 4), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(4, 6), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(6, 8), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(8, 10), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(10, 12), options: { autoStem: true } }), + ]; + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + const UP = _src_index__WEBPACK_IMPORTED_MODULE_1__.Stem.UP; + const DOWN = _src_index__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN; + options.assert.equal(beams[0].getStemDirection(), UP); + options.assert.equal(beams[1].getStemDirection(), UP); + options.assert.equal(beams[2].getStemDirection(), UP); + options.assert.equal(beams[3].getStemDirection(), UP); + options.assert.equal(beams[4].getStemDirection(), DOWN); + options.assert.equal(beams[5].getStemDirection(), DOWN); + f.draw(); + options.assert.ok(true, 'AutoStem Beam Test'); +} +function mixed(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 350, 140); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice1 = score.voice(score.notes('f5/8, d5/16, c5/16, c5/16, d5/16, e5/8, f5/8, d5/16, c5/16, c5/16, d5/16, e5/8', { stem: 'up' })); + const voice2 = score.voice(score.notes('f4/16, e4/8, d4/16, c4/16, d4/8, f4/16, f4/16, e4/8, d4/16, c4/16, d4/8, f4/16', { stem: 'down' })); + [ + [0, 4], + [4, 8], + [8, 12], + ].forEach((range) => f.Beam({ notes: voice1.getTickables().slice(range[0], range[1]) })); + [ + [0, 4], + [4, 8], + [8, 12], + ].forEach((range) => f.Beam({ notes: voice2.getTickables().slice(range[0], range[1]) })); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true, 'Multi Test'); +} +function mixed2(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 180); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('f5/32, d5/16, c5/32, c5/64, d5/128, e5/8, f5/16, d5/32, c5/64, c5/32, d5/16, e5/128', { + stem: 'up', + }), { time: '31/64' }); + const voice2 = score.voice(score.notes('f4/32, d4/16, c4/32, c4/64, d4/128, e4/8, f4/16, d4/32, c4/64, c4/32, d4/16, e4/128', { + stem: 'down', + }), { time: '31/64' }); + f.Beam({ notes: voice.getTickables().slice(0, 12) }); + f.Beam({ notes: voice2.getTickables().slice(0, 12) }); + f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave); + f.draw(); + options.assert.ok(true, 'Multi Test'); +} +function dotted(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('d4/8, b3/8., a3/16, a3/8, b3/8., c4/16, d4/8, b3/8, a3/8., a3/16, b3/8., c4/16', { stem: 'up' }), { time: '6/4' }); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Beam({ notes: notes.slice(8, 12) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Dotted Test'); +} +function partial(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('d4/8, b3/32, c4/16., d4/16., e4/8, c4/64, c4/32, a3/8., b3/32., c4/8, e4/64, b3/16., b3/64, f4/8, e4/8, g4/64, e4/8'), { time: '89/64' }); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 3) }); + f.Beam({ notes: notes.slice(3, 9) }); + f.Beam({ notes: notes.slice(9, 13) }); + f.Beam({ notes: notes.slice(13, 17) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Partial Test'); +} +function tradeoffs(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('a4/8, b4/8, c4/8, d4/8, g4/8, a4/8, b4/8, c4/8', { stem: 'up' })); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Close Trade-offs Test'); +} +function insane(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 180); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('g4/8, g5/8, c4/8, b5/8, g4/8[stem="down"], a5[stem="down"], b4[stem="down"], c4/8', { stem: 'up' })); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 7) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Insane Test'); +} +function lenghty(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 180); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.beam(score.notes('g4/8, g4, g4, a4', { stem: 'up' })), { time: '2/4' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Lengthy Test'); +} +function outlier(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 180); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes([ + 'g4/8[stem="up"], f4[stem="up"], d5[stem="up"], e4[stem="up"]', + 'd5/8[stem="down"], d5[stem="down"], c5[stem="down"], d5[stem="down"]', + ].join())); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave }); + f.draw(); + options.assert.ok(true, 'Outlier Test'); +} +function tabBeamsUp(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); + const stave = f.TabStave({ y: 20 }); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + { positions: [{ str: 3, fret: 6 }], duration: '8' }, + { positions: [{ str: 3, fret: 6 }], duration: '8' }, + { positions: [{ str: 3, fret: 6 }], duration: '8' }, + { positions: [{ str: 3, fret: 6 }], duration: '8' }, + ]; + const notes = specs.map((struct) => { + const tabNote = f.TabNote(struct); + tabNote.render_options.draw_stem = true; + return tabNote; + }); + f.Beam({ notes: notes.slice(1, 7) }); + f.Beam({ notes: notes.slice(8, 11) }); + f.Tuplet({ notes: notes.slice(8, 11), options: { ratioed: true } }); + const voice = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'All objects have been drawn'); +} +function tabBeamsDown(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 250); + const stave = f.TabStave({ options: { num_lines: 10 } }); + const specs = [ + { + stem_direction: -1, + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + stem_direction: -1, + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8dd', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 7, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 7, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 10, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 10, fret: 6 }], duration: '8' }, + ]; + const notes = specs.map((struct) => { + const tabNote = f.TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_dots = true; + return tabNote; + }); + _src_index__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([notes[1], notes[1]]); + f.Beam({ notes: notes.slice(1, 7) }); + f.Beam({ notes: notes.slice(8, 11) }); + f.Tuplet({ notes: notes.slice(8, 11), options: { location: -1 } }); + f.Tuplet({ notes: notes.slice(11, 14), options: { location: -1 } }); + const voice = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'All objects have been drawn'); +} +function autoTabBeams(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); + const stave = f.TabStave(); + const specs = [ + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { positions: [{ str: 1, fret: 6 }], duration: '32' }, + { positions: [{ str: 1, fret: 6 }], duration: '32' }, + { positions: [{ str: 1, fret: 6 }], duration: '32' }, + { positions: [{ str: 6, fret: 6 }], duration: '32' }, + { positions: [{ str: 6, fret: 6 }], duration: '16' }, + { positions: [{ str: 6, fret: 6 }], duration: '16' }, + { positions: [{ str: 6, fret: 6 }], duration: '16' }, + { positions: [{ str: 6, fret: 6 }], duration: '16' }, + ]; + const notes = specs.map((struct) => { + const tabNote = f.TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_dots = true; + return tabNote; + }); + const voice = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes); + const beams = _src_index__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, -1); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'All objects have been drawn'); +} +// This tests makes sure the auto_stem functionality is works. +// TabNote stems within a beam group should end up normalized +function tabBeamsAutoStem(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 300); + const stave = f.TabStave(); + const specs = [ + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + stem_direction: -1, + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + stem_direction: 1, + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + stem_direction: -1, + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + stem_direction: 1, + }, + { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: 1 }, + { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: -1 }, + { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: -1 }, + { positions: [{ str: 6, fret: 6 }], duration: '32', stem_direction: -1 }, + { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 }, + { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 }, + { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 }, + { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: -1 }, + ]; + const notes = specs.map((struct) => { + const tabNote = f.TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_dots = true; + return tabNote; + }); + // Stems should format down + f.Beam({ notes: notes.slice(0, 8), options: { autoStem: true } }); + // Stems should format up + f.Beam({ notes: notes.slice(8, 12), options: { autoStem: true } }); + const voice = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'All objects have been drawn'); +} +function complexWithAnnotation(options) { + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); + const stave = factory.Stave({ y: 40 }); + const s1 = [ + { keys: ['e/4'], duration: '128', stem_direction: 1 }, + { keys: ['d/4'], duration: '16', stem_direction: 1 }, + { keys: ['e/4'], duration: '8', stem_direction: 1 }, + { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + ]; + const s2 = [ + { keys: ['e/5'], duration: '128', stem_direction: -1 }, + { keys: ['d/5'], duration: '16', stem_direction: -1 }, + { keys: ['e/5'], duration: '8', stem_direction: -1 }, + { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + ]; + const font = { + family: _src_index__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 14, + weight: _src_index__WEBPACK_IMPORTED_MODULE_1__.FontWeight.BOLD, + style: _src_index__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC, + }; + const notes1 = s1.map((struct) => factory + .StaveNote(struct) // + .addModifier(factory.Annotation({ text: '1', vJustify: _src_index__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP, font }), 0)); + const notes2 = s2.map((struct) => factory + .StaveNote(struct) // + .addModifier(factory.Annotation({ text: '3', vJustify: _src_index__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM, font }), 0)); + factory.Beam({ notes: notes1 }); + factory.Beam({ notes: notes2 }); + const voice = factory.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2); + factory.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave }); + factory.draw(); + options.assert.ok(true, 'Complex beam annotations'); +} +function complexWithArticulation(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); + const stave = f.Stave({ y: 40 }); + const s1 = [ + { keys: ['e/4'], duration: '128', stem_direction: 1 }, + { keys: ['d/4'], duration: '16', stem_direction: 1 }, + { keys: ['e/4'], duration: '8', stem_direction: 1 }, + { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + ]; + const s2 = [ + { keys: ['e/5'], duration: '128', stem_direction: -1 }, + { keys: ['d/5'], duration: '16', stem_direction: -1 }, + { keys: ['e/5'], duration: '8', stem_direction: -1 }, + { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + ]; + const notes1 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0)); + const notes2 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0)); + f.Beam({ notes: notes1 }); + f.Beam({ notes: notes2 }); + const voice = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave }); + f.draw(); + options.assert.ok(true, 'Complex beam articulations'); +} +function complexWithArticulation2(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 300); + const system = f.System(); + const s1 = [ + { keys: ['e/4'], duration: '128', stem_direction: 1 }, + { keys: ['d/4'], duration: '16', stem_direction: 1 }, + { keys: ['e/4'], duration: '8', stem_direction: 1 }, + { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + ]; + const s2 = [ + { keys: ['e/5'], duration: '128', stem_direction: -1 }, + { keys: ['d/5'], duration: '16', stem_direction: -1 }, + { keys: ['e/5'], duration: '8', stem_direction: -1 }, + { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + ]; + const notes1 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0)); + const notes2 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0)); + const notes3 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0)); + const notes4 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0)); + f.Beam({ notes: notes1 }); + f.Beam({ notes: notes2 }); + f.Beam({ notes: notes3 }); + f.Beam({ notes: notes4 }); + const voice1 = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2); + const voice2 = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes3).addTickables(notes4); + system.addStave({ voices: [voice1] }); + system.addStave({ voices: [voice2] }); + f.draw(); + options.assert.ok(true, 'Complex beam articulations two staves'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(BeamTests); + + + +/***/ }), + +/***/ "./tests/bend_tests.ts": +/*!*****************************!*\ + !*** ./tests/bend_tests.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BendTests": () => (/* binding */ BendTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_bend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/bend */ "./src/bend.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_modifiercontext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _src_note__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/note */ "./src/note.ts"); +/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Bend Tests + + + + + + + + + +const BendTests = { + Start() { + QUnit.module('Bend'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Double Bends', doubleBends); + run('Reverse Bends', reverseBends); + run('Bend Phrase', bendPhrase); + run('Double Bends With Release', doubleBendsWithRelease); + run('Whako Bend', whackoBends); + // TODO: Rename 'Whako Bend' => 'Whacko' + }, +}; +// Helper functions for creating TabNote and Bend objects. +const note = (noteStruct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(noteStruct); +const bendWithText = (text, release = false) => new _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend(text, release); +const bendWithPhrase = (phrase) => new _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend('', false, phrase); +/** + * Bend two strings at a time. + */ +function doubleBends(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + note({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'q', + }) + .addModifier(bendWithText('Full'), 0) + .addModifier(bendWithText('1/2'), 1), + note({ + positions: [ + { str: 2, fret: 5 }, + { str: 3, fret: 5 }, + ], + duration: 'q', + }) + .addModifier(bendWithText('1/4'), 0) + .addModifier(bendWithText('1/4'), 1), + // This note is not visible because it is pushed off to the right by the ctx.scale(1.5, 1.5) at the top. + note({ + positions: [{ str: 4, fret: 7 }], + duration: 'h', + }), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, stave, notes); + notes.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note, 140)); + options.assert.ok(true, 'Double Bends'); +} +function doubleBendsWithRelease(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 550, 240); + ctx.scale(1.0, 1.0); + ctx.setBackgroundFillStyle('#FFF'); + ctx.setFont('Arial', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size); + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 550).addTabGlyph().setContext(ctx).draw(); + const notes = [ + note({ + positions: [ + { str: 1, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'q', + }) + .addModifier(bendWithText('1/2', true), 0) + .addModifier(bendWithText('Full', true), 1), + note({ + positions: [ + { str: 2, fret: 5 }, + { str: 3, fret: 5 }, + { str: 4, fret: 5 }, + ], + duration: 'q', + }) + .addModifier(bendWithText('1/4', true), 0) + .addModifier(bendWithText('Monstrous', true), 1) + .addModifier(bendWithText('1/4', true), 2), + note({ + positions: [{ str: 4, fret: 7 }], + duration: 'q', + }), + note({ + positions: [{ str: 4, fret: 7 }], + duration: 'q', + }), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, stave, notes); + notes.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note, 140)); + options.assert.ok(true, 'Bend Release'); +} +/** + * Add the bend for note 1 before adding the bend for note 0, + * by swapping the two indexes in .addModifier(modifier, index). + * As a result, the bend curves intersect. + */ +function reverseBends(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.setFont('10pt Arial'); + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + note({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'w', + }) + .addModifier(bendWithText('Full'), 1) + .addModifier(bendWithText('1/2'), 0), + note({ + positions: [ + { str: 2, fret: 5 }, + { str: 3, fret: 5 }, + ], + duration: 'w', + }) + .addModifier(bendWithText('1/4'), 1) + .addModifier(bendWithText('1/4'), 0), + note({ + positions: [{ str: 4, fret: 7 }], + duration: 'w', + }), + ]; + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + const mc = new _src_modifiercontext__WEBPACK_IMPORTED_MODULE_4__.ModifierContext(); + note.addToModifierContext(mc); + const tickContext = new _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__.TickContext(); + tickContext + .addTickable(note) + .preFormat() + .setX(75 * i); + note.setStave(stave).setContext(ctx).draw(); + _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note, 140); + options.assert.ok(true, 'Bend ' + i); + } +} +function bendPhrase(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = _src_font__WEBPACK_IMPORTED_MODULE_2__.Font.SIZE + 'pt ' + _src_font__WEBPACK_IMPORTED_MODULE_2__.Font.SANS_SERIF; // Optionally use constants defined in Font. + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const phrase1 = [ + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: 'Full' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: 'Monstrous' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: '1/2' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: '' }, + ]; + const bend1 = bendWithPhrase(phrase1).setContext(ctx); + const notes = [ + note({ + positions: [{ str: 2, fret: 10 }], + duration: 'w', + }).addModifier(bend1, 0), + ]; + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.addToModifierContext(new _src_modifiercontext__WEBPACK_IMPORTED_MODULE_4__.ModifierContext()); + const tickContext = new _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__.TickContext(); + tickContext + .addTickable(note) + .preFormat() + .setX(75 * i); + note.setStave(stave).setContext(ctx).draw(); + _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note, 140); + options.assert.ok(true, 'Bend ' + i); + } +} +function whackoBends(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 240); + ctx.scale(1.0, 1.0); + ctx.setBackgroundFillStyle('#FFF'); + ctx.setFont('Arial', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size); + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 350).addTabGlyph().setContext(ctx).draw(); + const phrase1 = [ + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: 'Full' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: '' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: '1/2' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: '' }, + ]; + const phrase2 = [ + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: 'Full' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: 'Full' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: '1/2' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: '' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: 'Full' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: 'Full' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: '1/2' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: '' }, + ]; + const notes = [ + note({ + positions: [ + { str: 2, fret: 10 }, + { str: 3, fret: 9 }, + ], + duration: 'q', + }) + .addModifier(bendWithPhrase(phrase1), 0) + .addModifier(bendWithPhrase(phrase2), 1), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, stave, notes); + _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, notes[0], 140); + options.assert.ok(true, 'Whacko Bend & Release'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(BendTests); + + + +/***/ }), + +/***/ "./tests/boundingbox_tests.ts": +/*!************************************!*\ + !*** ./tests/boundingbox_tests.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BoundingBoxTests": () => (/* binding */ BoundingBoxTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Bounding Box Tests + + +const BoundingBoxTests = { + Start() { + QUnit.module('BoundingBox'); + QUnit.test('Initialization Test', initialization); + QUnit.test('Merging Text', merging); + }, +}; +function initialization(assert) { + const bb = new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(4, 5, 6, 7); + assert.equal(bb.getX(), 4, 'Bad X'); + assert.equal(bb.getY(), 5, 'Bad Y'); + assert.equal(bb.getW(), 6, 'Bad W'); + assert.equal(bb.getH(), 7, 'Bad H'); + bb.setX(5); + assert.equal(bb.getX(), 5, 'Bad X'); +} +function merging(assert) { + const tests = [ + { + type: 'Intersection', + bb1: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(10, 10, 10, 10), + bb2: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(15, 20, 10, 10), + merged: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(10, 10, 15, 20), + }, + { + type: '1 contains 2', + bb1: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(10, 10, 30, 30), + bb2: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(15, 15, 10, 10), + merged: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(10, 10, 30, 30), + }, + { + type: '2 contains 1', + bb1: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(15, 15, 10, 10), + bb2: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(10, 10, 30, 30), + merged: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(10, 10, 30, 30), + }, + ]; + tests.forEach((test) => { + const type = test.type; + const bb1 = test.bb1; + const bb2 = test.bb2; + const merged = test.merged; + bb1.mergeWith(bb2); + assert.equal(bb1.getX(), merged.getX(), type + ' - Bad X'); + assert.equal(bb1.getY(), merged.getY(), type + ' - Bad Y'); + assert.equal(bb1.getW(), merged.getW(), type + ' - Bad W'); + assert.equal(bb1.getH(), merged.getH(), type + ' - Bad H'); + }); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(BoundingBoxTests); + + + +/***/ }), + +/***/ "./tests/chordsymbol_tests.ts": +/*!************************************!*\ + !*** ./tests/chordsymbol_tests.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ChordSymbolTests": () => (/* binding */ ChordSymbolTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); +/* harmony import */ var _src_chordsymbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_ornament__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/ornament */ "./src/ornament.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_tables__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/tables */ "./src/tables.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// ChordSymbol Tests + + + + + + + + + +const ChordSymbolTests = { + Start() { + QUnit.module('ChordSymbol'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Chord Symbol With Modifiers', withModifiers); + run('Chord Symbol Font Size Tests', fontSize); + run('Chord Symbol Kerning Tests', kern); + run('Top Chord Symbols', top); + run('Top Chord Symbols Justified', topJustify); + run('Bottom Chord Symbols', bottom); + run('Bottom Stem Down Chord Symbols', bottomStemDown); + run('Double Bottom Chord Symbols', doubleBottom); + }, +}; +// Options for customizing addGlyphOrText() or addGlyph(). +const superscript = { symbolModifier: _src_chordsymbol__WEBPACK_IMPORTED_MODULE_2__.ChordSymbol.symbolModifiers.SUPERSCRIPT }; +const subscript = { symbolModifier: _src_chordsymbol__WEBPACK_IMPORTED_MODULE_2__.ChordSymbol.symbolModifiers.SUBSCRIPT }; +// Helper function for creating StaveNotes. +const note = (factory, keys, duration, chordSymbol) => factory.StaveNote({ keys, duration }).addModifier(chordSymbol, 0); +/** Calculate the glyph's width in the current music font. */ +// How is this different from Glyph.getWidth()? The numbers don't match up. +function getGlyphWidth(glyphName) { + // `38` seems to be the `font_scale` specified in many classes, such as + // Accidental, Articulation, Ornament, Strokes. Does this mean `38pt`??? + // + // However, tables.ts specifies: + // NOTATION_FONT_SCALE: 39, + // TABLATURE_FONT_SCALE: 39, + const musicFont = _src_tables__WEBPACK_IMPORTED_MODULE_8__.Tables.currentMusicFont(); + const glyph = musicFont.getGlyphs()[glyphName]; + const widthInEm = (glyph.x_max - glyph.x_min) / musicFont.getResolution(); + return widthInEm * 38 * _src_font__WEBPACK_IMPORTED_MODULE_3__.Font.scaleToPxFrom.pt; +} +function withModifiers(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750, 580); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + const notes = [ + note(f, ['c/4'], 'q', chords[0]).addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_5__.Ornament('doit')), + note(f, ['c/4'], 'q', chords[1]), + note(f, ['c/4'], 'q', chords[2]).addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_5__.Ornament('fall')), + note(f, ['c/4'], 'q', chords[3]), + ]; + const score = f.EasyScore(); + const voice = score.voice(notes, { time: '4/4' }); + const formatter = f.Formatter(); + formatter.joinVoices([voice]); + const voiceW = formatter.preCalculateMinTotalWidth([voice]); + const staffW = voiceW + _src_stave__WEBPACK_IMPORTED_MODULE_6__.Stave.defaultPadding + getGlyphWidth('gClef'); + formatter.format([voice], voiceW); + const staff = f.Stave({ x: 10, y, width: staffW }).addClef('treble').draw(); + voice.draw(ctx, staff); + } + let chords = []; + chords.push(f + .ChordSymbol({ fontSize: 10 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .addGlyph('rightParenTall')); + chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('b9', superscript).addGlyphOrText('#11', subscript)); + chords.push(f + .ChordSymbol({ fontSize: 14 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('add 3', superscript) + .addGlyphOrText('omit 9', subscript) + .addGlyph('rightParenTall')); + chords.push(f + .ChordSymbol({ fontSize: 16 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .addGlyph('rightParenTall')); + draw(chords, 40); + chords = []; + chords.push(f + .ChordSymbol({ fontSize: 10 }) + .setFontSize(10) + .addText('F7') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript)); + chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); + chords.push(f.ChordSymbol({ fontSize: 14 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); + chords.push(f + .ChordSymbol({ fontSize: 16 }) + .setFontSize(16) + .addText('F7') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript)); + draw(chords, 140); + chords = [ + f.ChordSymbol({ fontSize: 10 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 14 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 16 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 18 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), + ]; + draw(chords, 240); + options.assert.ok(true, 'Font Size Chord Symbol'); +} +function fontSize(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750, 580); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble'); + const notes = [ + note(f, ['c/4'], 'q', chords[0]), + note(f, ['c/4'], 'q', chords[1]), + note(f, ['c/4'], 'q', chords[2]), + note(f, ['c/4'], 'q', chords[3]), + ]; + const score = f.EasyScore(); + const voice = score.voice(notes, { time: '4/4' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + } + let chords = []; + chords.push(f + .ChordSymbol({ fontSize: 10 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .addGlyph('rightParenTall') + .setReportWidth(false)); + chords.push(f + .ChordSymbol({ fontSize: 12 }) + .addText('F7') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .setReportWidth(false)); + chords.push(f + .ChordSymbol({ fontSize: 14 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('add 3', superscript) + .addGlyphOrText('omit 9', subscript) + .addGlyph('rightParenTall') + .setReportWidth(false)); + chords.push(f + .ChordSymbol({ fontSize: 16 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .addGlyph('rightParenTall') + .setReportWidth(false)); + draw(chords, 40); + chords = []; + chords.push(f + .ChordSymbol({ fontSize: 10 }) + .setFontSize(10) + .addText('F7') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript)); + chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); + chords.push(f.ChordSymbol({ fontSize: 14 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); + chords.push(f + .ChordSymbol({ fontSize: 16 }) + .setFontSize(16) + .addText('F7') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript)); + draw(chords, 140); + chords = [ + f.ChordSymbol({ fontSize: 10 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 14 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 16 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 18 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), + ]; + draw(chords, 240); + options.assert.ok(true, 'Font Size Chord Symbol'); +} +function kern(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 650 * 1.5, 650); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(f, ['C/4'], 'q', chords[0]), + note(f, ['C/4'], 'q', chords[1]), + note(f, ['C/4'], 'q', chords[2]), + note(f, ['C/4'], 'q', chords[3]), + ]; + const score = f.EasyScore(); + const voice = score.voice(notes, { time: '4/4' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + } + let chords = [ + f.ChordSymbol().addText('A').addGlyphSuperscript('dim').setReportWidth(false), + f.ChordSymbol({ kerning: false, reportWidth: false }).addText('A').addGlyphSuperscript('dim'), + f.ChordSymbol({ hJustify: 'left', reportWidth: false }).addText('C').addGlyph('halfDiminished', superscript), + f.ChordSymbol({ reportWidth: false }).addText('D').addGlyph('halfDiminished', superscript), + ]; + draw(chords, 10); + chords = [ + f.ChordSymbol().addText('A').addGlyphSuperscript('dim'), + f.ChordSymbol({ kerning: false }).addText('A').addGlyphSuperscript('dim'), + f.ChordSymbol().addText('A').addGlyphSuperscript('+').addTextSuperscript('5'), + f.ChordSymbol().addText('G').addGlyphSuperscript('+').addTextSuperscript('5'), + ]; + draw(chords, 110); + chords = [ + f.ChordSymbol().addText('A').addGlyph('-'), + f.ChordSymbol().addText('E').addGlyph('-'), + f.ChordSymbol().addText('A').addGlyphOrText('(#11)', superscript), + f.ChordSymbol().addText('E').addGlyphOrText('(#9)', superscript), + ]; + draw(chords, 210); + chords = [ + f.ChordSymbol().addGlyphOrText('F/B').addGlyphOrText('b', superscript), + f.ChordSymbol().addText('E').addGlyphOrText('V/V'), + f.ChordSymbol().addText('A').addGlyphOrText('(#11)', superscript), + f.ChordSymbol().addText('E').addGlyphOrText('(#9)', superscript), + ]; + draw(chords, 310); + options.assert.ok(true, 'Chord Symbol Kerning Tests'); +} +function top(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 650 * 1.5, 650); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + // Helper function for creating StaveNotes. + const note = (factory, keys, duration, chordSymbol, direction) => factory.StaveNote({ keys, duration, stem_direction: direction }).addModifier(chordSymbol, 0); + function draw(c1, c2, y) { + const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(f, ['e/4', 'a/4', 'd/5'], 'h', c1, 1).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 0), + note(f, ['c/5', 'e/5', 'c/6'], 'h', c2, -1), + ]; + const score = f.EasyScore(); + const voice = score.voice(notes, { time: '4/4' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + } + let chord1 = f + .ChordSymbol({ reportWidth: false }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('(#11b9)', superscript); + let chord2 = f + .ChordSymbol({ reportWidth: false }) + .addText('C') + .setHorizontal('left') + .addGlyphSuperscript('majorSeventh'); + draw(chord1, chord2, 40); + chord1 = f + .ChordSymbol() + .addText('F7') + .addTextSuperscript('(') + .addGlyphOrText('#11b9', superscript) + .addTextSuperscript(')'); + chord2 = f.ChordSymbol().addText('C').setHorizontal('left').addTextSuperscript('Maj.'); + draw(chord1, chord2, 140); + chord1 = f + .ChordSymbol() + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript); + chord2 = f.ChordSymbol().addText('C').addTextSuperscript('sus4'); + draw(chord1, chord2, 240); + options.assert.ok(true, 'Top Chord Symbol'); +} +function topJustify(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500 * 1.5, 680); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chord1, chord2, y) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_6__.Stave(10, y, 450).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(f, ['e/4', 'a/4', 'd/5'], 'h', chord1).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 0), + note(f, ['c/4', 'e/4', 'B/4'], 'h', chord2), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); + } + let chord1 = f.ChordSymbol().addText('F7').setHorizontal('left').addGlyphOrText('(#11b9)', superscript); + let chord2 = f.ChordSymbol({ hJustify: 'left' }).addText('C').addGlyphSuperscript('majorSeventh'); + draw(chord1, chord2, 40); + chord1 = f + .ChordSymbol({ hJustify: 'center' }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('(#11b9)', superscript); + chord2 = f.ChordSymbol({ hJustify: 'center' }).addText('C').addTextSuperscript('Maj.'); + draw(chord1, chord2, 140); + chord1 = f + .ChordSymbol({ hJustify: 'right' }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript); + chord2 = f.ChordSymbol({ hJustify: 'right' }).addText('C').addTextSuperscript('Maj.'); + draw(chord1, chord2, 240); + chord1 = f + .ChordSymbol({ hJustify: 'left' }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript); + chord2 = f.ChordSymbol({ hJustify: 'centerStem' }).addText('C').addTextSuperscript('Maj.'); + draw(chord1, chord2, 340); + options.assert.ok(true, 'Top Chord Justified'); +} +function bottom(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600 * 1.5, 230); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_6__.Stave(10, y, 400).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(f, ['c/4', 'f/4', 'a/4'], 'q', chords[0]), + note(f, ['c/4', 'e/4', 'b/4'], 'q', chords[1]).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 2), + note(f, ['c/4', 'e/4', 'g/4'], 'q', chords[2]), + note(f, ['c/4', 'f/4', 'a/4'], 'q', chords[3]).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 1), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); + } + const chords = [ + f.ChordSymbol({ vJustify: 'bottom' }).addText('I').addTextSuperscript('6').addTextSubscript('4'), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V'), + f.ChordSymbol({ vJustify: 'bottom' }).addLine(12), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V/V'), + ]; + draw(chords, 10); + options.assert.ok(true, 'Bottom Chord Symbol'); +} +function bottomStemDown(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600 * 1.5, 330); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + // Helper function to create a StaveNote with a ChordSymbol and the stem pointing down. + const note = (keys, duration, chordSymbol) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys, duration, stem_direction: -1 }).addModifier(chordSymbol, 0); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_6__.Stave(10, y, 400).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(['c/4', 'f/4', 'a/4'], 'q', chords[0]), + note(['c/4', 'e/4', 'b/4'], 'q', chords[1]).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 2), + note(['c/4', 'e/4', 'g/4'], 'q', chords[2]), + note(['c/4', 'f/4', 'a/4'], 'q', chords[3]).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 1), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); + } + const chords = [ + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('F'), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('C7'), + f.ChordSymbol({ vJustify: 'bottom' }).addLine(12), + f.ChordSymbol({ vJustify: 'bottom' }).addText('A').addGlyphSuperscript('dim'), + ]; + draw(chords, 10); + options.assert.ok(true, 'Bottom Stem Down Chord Symbol'); +} +function doubleBottom(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600 * 1.5, 260); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, chords2, y) { + // Helper function to create a StaveNote with two ChordSymbols attached. + const note = (keys, duration, chordSymbol1, chordSymbol2) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys, duration }).addModifier(chordSymbol1, 0).addModifier(chordSymbol2, 0); + const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(['c/4', 'f/4', 'a/4'], 'q', chords[0], chords2[0]), + note(['c/4', 'e/4', 'b/4'], 'q', chords[1], chords2[1]).addModifier(f.Accidental({ type: 'b' }), 2), + note(['c/4', 'e/4', 'g/4'], 'q', chords[2], chords2[2]), + note(['c/4', 'f/4', 'a/4'], 'q', chords[3], chords2[3]).addModifier(f.Accidental({ type: '#' }), 1), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); + } + const chords1 = [ + f.ChordSymbol({ vJustify: 'bottom' }).addText('I').addTextSuperscript('6').addTextSubscript('4'), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V'), + f.ChordSymbol({ vJustify: 'bottom' }).addLine(12), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V/V'), + ]; + const chords2 = [ + f.ChordSymbol({ vJustify: 'bottom' }).addText('T'), + f.ChordSymbol({ vJustify: 'bottom' }).addText('D'), + f.ChordSymbol({ vJustify: 'bottom' }).addText('D'), + f.ChordSymbol({ vJustify: 'bottom' }).addText('SD'), + ]; + draw(chords1, chords2, 10); + options.assert.ok(true, '2 Bottom Chord Symbol'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ChordSymbolTests); + + + +/***/ }), + +/***/ "./tests/clef_tests.ts": +/*!*****************************!*\ + !*** ./tests/clef_tests.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ClefTests": () => (/* binding */ ClefTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Clef Tests + +const ClefTests = { + Start() { + QUnit.module('Clef'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Clef Test', draw); + run('Clef End Test', drawEnd); + run('Small Clef Test', drawSmall); + run('Small Clef End Test', drawSmallEnd); + run('Clef Change Test', drawClefChange); + }, +}; +function draw(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 120); + f.Stave() + .addClef('treble') + .addClef('treble', 'default', '8va') + .addClef('treble', 'default', '8vb') + .addClef('alto') + .addClef('tenor') + .addClef('soprano') + .addClef('bass') + .addClef('bass', 'default', '8vb') + .addClef('mezzo-soprano') + .addClef('baritone-c') + .addClef('baritone-f') + .addClef('subbass') + .addClef('percussion') + .addClef('french') + .addEndClef('treble'); + f.draw(); + options.assert.ok(true, 'all pass'); +} +function drawEnd(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 120); + f.Stave() + .addClef('bass') + .addEndClef('treble') + .addEndClef('treble', 'default', '8va') + .addEndClef('treble', 'default', '8vb') + .addEndClef('alto') + .addEndClef('tenor') + .addEndClef('soprano') + .addEndClef('bass') + .addEndClef('bass', 'default', '8vb') + .addEndClef('mezzo-soprano') + .addEndClef('baritone-c') + .addEndClef('baritone-f') + .addEndClef('subbass') + .addEndClef('percussion') + .addEndClef('french'); + f.draw(); + options.assert.ok(true, 'all pass'); +} +function drawSmall(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 120); + f.Stave() + .addClef('treble', 'small') + .addClef('treble', 'small', '8va') + .addClef('treble', 'small', '8vb') + .addClef('alto', 'small') + .addClef('tenor', 'small') + .addClef('soprano', 'small') + .addClef('bass', 'small') + .addClef('bass', 'small', '8vb') + .addClef('mezzo-soprano', 'small') + .addClef('baritone-c', 'small') + .addClef('baritone-f', 'small') + .addClef('subbass', 'small') + .addClef('percussion', 'small') + .addClef('french', 'small') + .addEndClef('treble', 'small'); + f.draw(); + options.assert.ok(true, 'all pass'); +} +function drawSmallEnd(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 120); + f.Stave() + .addClef('bass', 'small') + .addEndClef('treble', 'small') + .addEndClef('treble', 'small', '8va') + .addEndClef('treble', 'small', '8vb') + .addEndClef('alto', 'small') + .addEndClef('tenor', 'small') + .addEndClef('soprano', 'small') + .addEndClef('bass', 'small') + .addEndClef('bass', 'small', '8vb') + .addEndClef('mezzo-soprano', 'small') + .addEndClef('baritone-c', 'small') + .addEndClef('baritone-f', 'small') + .addEndClef('subbass', 'small') + .addEndClef('percussion', 'small') + .addEndClef('french', 'small'); + f.draw(); + options.assert.ok(true, 'all pass'); +} +function drawClefChange(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 180); + const stave = f.Stave().addClef('treble'); + const notes = [ + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), + f.ClefNote({ type: 'alto', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'alto' }), + f.ClefNote({ type: 'tenor', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'tenor' }), + f.ClefNote({ type: 'soprano', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'soprano' }), + f.ClefNote({ type: 'bass', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'bass' }), + f.ClefNote({ type: 'mezzo-soprano', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'mezzo-soprano' }), + f.ClefNote({ type: 'baritone-c', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'baritone-c' }), + f.ClefNote({ type: 'baritone-f', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'baritone-f' }), + f.ClefNote({ type: 'subbass', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'subbass' }), + f.ClefNote({ type: 'french', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'french' }), + f.ClefNote({ type: 'treble', options: { size: 'small', annotation: '8vb' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble', octave_shift: -1 }), + f.ClefNote({ type: 'treble', options: { size: 'small', annotation: '8va' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble', octave_shift: 1 }), + ]; + const voice = f.Voice({ time: '12/4' }).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ClefTests); + + + +/***/ }), + +/***/ "./tests/crossbeam_tests.ts": +/*!**********************************!*\ + !*** ./tests/crossbeam_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CrossBeamTests": () => (/* binding */ CrossBeamTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Formatter Tests + + +const CrossBeamTests = { + Start() { + QUnit.module('CrossBeam'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + const crossStaveTests = []; + crossStaveTests.push({ + title: 'Single clef mixed 1', + time: '3/4', + voices: [ + { + notes: [{ notestring: 'g4/16, f4/16, a6/16, g6/16, b4/4/r, g6/8, g4/8 ', clef: 'treble' }], + stavemask: [0, 0, 0, 0, 0, 0, 0], + beammask: [1, 1, -1, -1, 0, -1, 1], + clef: 'treble', + }, + ], + }); + crossStaveTests.push({ + title: 'Single clef mixed 2', + time: '3/4', + voices: [ + { + notes: [{ notestring: 'g4/16, f6/16, a4/16, g6/16, b4/4/r, g6/8, g4/8 ', clef: 'treble' }], + stavemask: [0, 0, 0, 0, 0, 0, 0], + beammask: [1, -1, 1, -1, 0, -1, 1], + clef: 'treble', + }, + ], + }); + crossStaveTests.push({ + title: 'Mixed clef voice middle', + time: '2/4', + voices: [ + { + notes: [{ notestring: 'e#5/4, b4/16/r, b4/16, d5/16., c5/32 ', clef: 'treble' }], + stavemask: [0, 0, 0, 0, 0], + beammask: [0, 0, 1, 1, 1], + clef: 'treble', + }, + { + notes: [ + { notestring: 'C3/16, B3/16, C4/16', clef: 'bass' }, + { notestring: 'E#4/16', clef: 'treble' }, + { notestring: 'C4/4', clef: 'bass' }, + ], + stavemask: [1, 1, 1, 0, 1], + beammask: [1, 1, 1, -1, 0], + clef: 'bass', + }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam up1)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 1, 1, 1, 1], + stavemask: [0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam up2)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, 1, 1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam up3)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, 1, 1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam up4)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, 1, 1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam down1)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, -1, -1, -1, -1], + stavemask: [0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam down2)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, -1, -1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam down3)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, -1, -1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam down4)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, -1, -1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam middle1)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, -1, -1, 1, 1], + stavemask: [0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam middle2)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam middle3)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam middle4)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.forEach((cst) => { + run(cst.title, crossClef, cst); + }); + }, +}; +function crossClef(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400 + _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave.defaultPadding, 250); + f.getContext().scale(0.8, 0.8); + const score = f.EasyScore(); + const system = f.System({ + details: { softmaxFactor: 100 }, + autoWidth: true, + debugFormatter: false, + }); + const testdata = options.params; + const voicedata = testdata.voices; + const stavemap = []; + for (let i = 0; i < voicedata.length; ++i) { + const clef = voicedata[i].clef; + stavemap.push(system.addStave({ voices: [] }).addClef(clef).addTimeSignature(testdata.time)); + } + for (let i = 0; i < voicedata.length; ++i) { + const stavemask = voicedata[i].stavemask; + let scoreNotes = []; + const voicenotes = voicedata[i].notes; + for (let k = 0; k < voicenotes.length; ++k) { + scoreNotes = scoreNotes.concat(score.notes(voicenotes[k].notestring, { clef: voicenotes[k].clef })); + } + const beammask = voicedata[i].beammask; + let curGroup = []; + const beamGroups = []; + for (let j = 0; j < scoreNotes.length; ++j) { + const note = scoreNotes[j]; + note.setStave(stavemap[stavemask[j]]); + if (beammask[j] !== 0) { + note.setStemDirection(beammask[j]); + curGroup.push(note); + } + else { + if (curGroup.length) { + beamGroups.push(curGroup); + curGroup = []; + } + } + } + if (curGroup.length) { + beamGroups.push(curGroup); + } + beamGroups.forEach((bg) => { + score.beam(bg); + }); + if (scoreNotes.length > 0) { + const voice = score.voice(scoreNotes, { time: testdata.time }); + system.addVoices([voice]); + } + } + f.draw(); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(CrossBeamTests); + + + +/***/ }), + +/***/ "./tests/curve_tests.ts": +/*!******************************!*\ + !*** ./tests/curve_tests.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CurveTests": () => (/* binding */ CurveTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_curve__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/curve */ "./src/curve.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Curve Tests + + +const CurveTests = { + Start() { + QUnit.module('Curve'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple Curve', simple); + run('Rounded Curve', rounded); + run('Thick Thin Curves', thickThin); + run('Top Curve', top); + }, +}; +/** + * Helper function. Each test case passes in a set of notes and + * a setupCurves() callback which uses Factory.Curve(...) to build the curves. + * Curves can be used to indicate slurs (legato articulation). + */ +function createTest(noteGroup1, noteGroup2, setupCurves) { + return (options) => { + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 350, 200); + const stave = factory.Stave({ y: 50 }); + const score = factory.EasyScore(); + // Use .reduce(concat) to flatten the two StaveNote[] into a single StaveNote[]. + const staveNotes = [ + score.beam(score.notes(...noteGroup1)), + score.beam(score.notes(...noteGroup2)), // group 2 + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat); + setupCurves(factory, staveNotes); + const voices = [score.voice(staveNotes, { time: '4/4' })]; + factory.Formatter().joinVoices(voices).formatToStave(voices, stave); + factory.draw(); + options.assert.ok('Simple Curve'); + }; +} +const simple = createTest(['c4/8, f5, d5, g5', { stem: 'up' }], // beamGroup1 +['d6/8, f5, d5, g5', { stem: 'down' }], // beamGroup2 +(f, notes) => { + f.Curve({ + from: notes[0], + to: notes[3], + options: { + cps: [ + { x: 0, y: 10 }, + { x: 0, y: 50 }, + ], + }, + }); + f.Curve({ + from: notes[4], + to: notes[7], + options: { + cps: [ + { x: 0, y: 10 }, + { x: 0, y: 20 }, + ], + }, + }); +}); +const rounded = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], // beamGroup1 +['d5/8, d6, d6, g5', { stem: 'down' }], // beamGroup2 +(f, notes) => { + f.Curve({ + from: notes[0], + to: notes[3], + options: { + x_shift: -10, + y_shift: 30, + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 50 }, + ], + }, + }); + f.Curve({ + from: notes[4], + to: notes[7], + options: { + cps: [ + { x: 0, y: 50 }, + { x: 0, y: 50 }, + ], + }, + }); +}); +const thickThin = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], // beamGroup1 +['d5/8, d6, d6, g5', { stem: 'down' }], // beamGroup2 +(f, notes) => { + f.Curve({ + from: notes[0], + to: notes[3], + options: { + thickness: 10, + x_shift: -10, + y_shift: 30, + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 50 }, + ], + }, + }); + f.Curve({ + from: notes[4], + to: notes[7], + options: { + thickness: 0, + cps: [ + { x: 0, y: 50 }, + { x: 0, y: 50 }, + ], + }, + }); +}); +const top = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], // beamGroup1 +['d5/8, d6, d6, g5', { stem: 'down' }], // beamGroup2 +(f, notes) => { + f.Curve({ + from: notes[0], + to: notes[7], + options: { + x_shift: -3, + y_shift: 10, + position: _src_curve__WEBPACK_IMPORTED_MODULE_1__.CurvePosition.NEAR_TOP, + position_end: _src_curve__WEBPACK_IMPORTED_MODULE_1__.CurvePosition.NEAR_HEAD, + cps: [ + { x: 0, y: 20 }, + { x: 40, y: 80 }, + ], + }, + }); +}); +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(CurveTests); + + + +/***/ }), + +/***/ "./tests/dot_tests.ts": +/*!****************************!*\ + !*** ./tests/dot_tests.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "DotTests": () => (/* binding */ DotTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_modifiercontext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _src_note__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/note */ "./src/note.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Dot Tests + + + + + + + + + + +const DotTests = { + Start() { + QUnit.module('Dot'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Basic', basic); + run('Multi Voice', multiVoice); + }, +}; +/** + * Helper function for the basic test case below. + */ +function showOneNote(note1, stave, ctx, x) { + const modifierContext = new _src_modifiercontext__WEBPACK_IMPORTED_MODULE_4__.ModifierContext(); + note1.setStave(stave).addToModifierContext(modifierContext); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__.TickContext().addTickable(note1).preFormat().setX(x); + note1.setContext(ctx).draw(); + _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note1, 140); +} +function basic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 1000, 240); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_6__.Stave(10, 10, 975); + stave.setContext(ctx); + stave.draw(); + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['c/4', 'e/4', 'a/4', 'b/4'], duration: 'w' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['a/4', 'b/4', 'c/5'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['g/4', 'a/4', 'b/4'], duration: '4', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['e/4', 'f/4', 'b/4', 'c/5'], duration: '4' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ + keys: ['g/4', 'a/4', 'd/5', 'e/5', 'g/5'], + duration: '4', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['g/4', 'b/4', 'd/5', 'e/5'], duration: '4', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['e/4', 'g/4', 'b/4', 'c/5'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ + keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], + duration: '16', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ + keys: ['e/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'f/5'], + duration: '16', + stem_direction: 1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ + keys: ['e/4', 'g/4', 'a/4', 'b/4', 'c/5'], + duration: '16', + stem_direction: 1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['e/4', 'a/4', 'b/4', 'c/5'], duration: '16', stem_direction: 1 }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach(notes, { all: true }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes[7], notes[8], notes[9]], { all: true }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes[8], notes[9]], { all: true }); + const beam = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(notes.length - 2)); + for (let i = 0; i < notes.length; i++) { + showOneNote(notes[i], stave, ctx, 30 + i * 65); + const dots = notes[i].getModifiersByType('Dot'); + options.assert.ok(dots.length > 0, 'Note ' + i + ' has dots'); + for (let j = 0; j < dots.length; ++j) { + options.assert.ok(dots[j].getWidth() > 0, 'Dot ' + j + ' has width set'); + } + } + beam.setContext(ctx).draw(); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 890, 140); + options.assert.ok(true, 'Full Dot'); +} +function multiVoice(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 750, 300); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_6__.Stave(30, 45, 700).setContext(ctx).draw(); + const notes1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '2', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: '2', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '2', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '8', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '8', stem_direction: -1 }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[0], notes1[2], notes1[3], notes1[4]], { all: true }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[0], notes1[2], notes1[3], notes1[4]], { all: true }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 0 }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 0 }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 1 }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 1 }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 2 }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 2 }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 2 }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[2], notes1[3], notes1[4]]); + const notes2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '2', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/5', 'g/5', 'a/5', 'b/5'], duration: '8', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '8', stem_direction: 1 }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach(notes2, { all: true }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes2[1]], { all: true }); + const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice.Mode.SOFT).addTickables(notes1); + const voice2 = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice.Mode.SOFT).addTickables(notes2); + const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter().joinVoices([voice1, voice2]); + formatter.format([voice1, voice2], 700); + voice1.draw(ctx, stave); + voice2.draw(ctx, stave); + notes1.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note, 190)); + notes2.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note, 20)); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 620, 220); + options.assert.ok(true, 'Full Dot'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(DotTests); + + + +/***/ }), + +/***/ "./tests/easyscore_tests.ts": +/*!**********************************!*\ + !*** ./tests/easyscore_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "EasyScoreTests": () => (/* binding */ EasyScoreTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); +/* harmony import */ var _src_easyscore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/easyscore */ "./src/easyscore.ts"); +/* harmony import */ var _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); +/* harmony import */ var _src_parenthesis__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/parenthesis */ "./src/parenthesis.ts"); +/* harmony import */ var _src_staveconnector__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); +/* harmony import */ var _src_tuplet__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/tuplet */ "./src/tuplet.ts"); +// [VexFlow](https://vexflow.com/) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// EasyScore Tests + + + + + + + + + +const EasyScoreTests = { + Start() { + QUnit.module('EasyScore'); + QUnit.test('Basic', basic); + QUnit.test('Accidentals', accidentals); + QUnit.test('Durations', durations); + QUnit.test('Chords', chords); + QUnit.test('Dots', dots); + QUnit.test('Types', types); + QUnit.test('Options', options); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Draw Basic', drawBasicTest); + run('Draw Different KeySignature', drawDiffKeysig); + run('Draw Basic Muted', drawBasicMutedTest); + run('Draw Basic Harmonic', drawBasicHarmonicTest); + run('Draw Basic Slash', drawBasicSlashTest); + run('Draw Ghostnote Basic', drawGhostBasicTest); + run('Draw Ghostnote Dotted', drawGhostDottedTest); + run('Draw Parenthesised', drawParenthesisedTest); + run('Draw Accidentals', drawAccidentalsTest); + run('Draw Beams', drawBeamsTest); + run('Draw Tuplets', drawTupletsTest); + run('Draw Dots', drawDotsTest); + run('Draw Options', drawOptionsTest); + run('Draw Fingerings', drawFingeringsTest); + run('Keys', keys); + }, +}; +/** + * Use Function.prototype.bind() to create shortcut methods. + * This can improve the readability of your EasyScore code. + */ +function createShortcuts(score) { + return { + voice: score.voice.bind(score), + notes: score.notes.bind(score), + beam: score.beam.bind(score), + tuplet: score.tuplet.bind(score), + }; +} +/** + * Test case verifies: + * - all strings in `mustPass` parse correctly + * - all strings in `mustFail` fail to parse (i.e., Result.success is `false`). + */ +function basic(assert) { + const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); + const mustPass = ['c4', 'c#4', 'c4/r', 'c#5', 'c3/m', 'c3//m', 'c3//h', 'c3/s', 'c3//s', 'c3/g', 'c3//g']; + const mustFail = ['', '()', '7', '(c#4 e5 g6']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function accidentals(assert) { + const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); + const mustPass = [ + 'c3', + 'c##3, cb3', + 'Cn3', + 'f3//m', + '(c##3 cbb3 cn3), cb3', + 'cbbs7', + 'cbb7', + 'cbss7', + 'cbs7', + 'cb7', + 'cdb7', + 'cd7', + 'c##7', + 'c#7', + 'cn7', + 'c++-7', + 'c++7', + 'c+-7', + 'c+7', + '(cbs3 bbs3 dbs3), ebs3', + '(cd7 cbb3 cn3), cb3', + 'co7', + 'ck7', + ]; + const mustFail = [ + 'ct3', + 'cdbb7', + '(cq cbb3 cn3), cb3', + '(cdd7 cbb3 cn3), cb3', + 'cbbbs7', + 'cbbss7', + 'cbsss7', + 'csbs7', + 'cddb7', + 'cddbb7', + 'cdd7', + 'c##b7', + 'c#bs7', + 'cnb#7', + 'c+#+b-d7', + 'c+--7', + 'c++--7', + 'c+++7', + 'cbk7', + 'cok7', + 'cko7', + 'c#s7', + ]; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function durations(assert) { + const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); + const mustPass = ['c3/4', 'c##3/w, cb3', 'c##3/w, cb3/q', 'c##3/q, cb3/32', '(c##3 cbb3 cn3), cb3']; + const mustFail = ['Cn3/]', '/', '(cq cbb3 cn3), cb3', '(cdd7 cbb3 cn3), cb3']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function chords(assert) { + const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); + const mustPass = [ + '(c5)', + '(c3 e0 g9)', + '(c##4 cbb4 cn4)/w, (c#5 cb2 a3)/32', + '(d##4 cbb4 cn4)/w/r, (c#5 cb2 a3)', + '(c##4 cbb4 cn4)/4, (c#5 cb2 a3)', + '(c##4 cbb4 cn4)/m, (c#5 cb2 a3)', + ]; + const mustFail = ['(c)']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function dots(assert) { + const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); + const mustPass = [ + 'c3/4.', + 'c##3/w.., cb3', + 'f##3/s, cb3/q...', + 'c##3/q, cb3/32', + '(c##3 cbb3 cn3)., cb3', + '(c5).', + '(c##4 cbb4 cn4)/w.., (c#5 cb2 a3)/32', + ]; + const mustFail = ['.', 'c.#', 'c#4./4']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function types(assert) { + const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); + const mustPass = ['c3/4/m.', 'c##3//r.., cb3', 'c##3/m.., cb3', 'c##3/r.., cb3', 'd##3/w/s, cb3/q...', 'Fb4']; + const mustFail = ['c4/q/U', '(c##4, cbb4 cn4)/w.., (c#5 cb2 a3)/32', 'z#3']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function options(assert) { + const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); + const mustPass = [ + 'c3/4.[foo="bar"]', + 'c##3/w.., cb3[id="blah"]', + 'c##3/q, cb3/32', + '(c##3 cbb3 cn3).[blah="bod4o"], cb3', + '(c5)[fooooo="booo"]', + 'c#5[id="foobar"]', + ]; + const mustFail = ['.[', 'f##3/w[], cb3/q...']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function drawBasicTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })), + voice(notes('c#5/h., c5/q', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c#3/q, cn3/q, bb3/q, d##3/q', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawDiffKeysig(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })), + voice(notes('c5/h., c5/q', { stem: 'up' })), + ], + }) + .addClef('treble') + .addTimeSignature('4/4') + .addKeySignature('D'); + system + .addStave({ + voices: [voice(notes('c#3/q, cn3/q, bb3/q, d##3/q', { clef: 'bass' }))], + }) + .addClef('bass') + .addTimeSignature('4/4'); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawBasicMutedTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q/m, c4/q/m, c4/q/r, c4/q/m', { stem: 'down' })), + voice(notes('c#5/h/m., c5/q/m', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c#3/q/m, cn3/q/m, bb3/q/m, d##3/q/m', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawBasicHarmonicTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q/h, c4/q/h, c4/q/r, c4/q/h', { stem: 'down' })), + voice(notes('c#5/h/h., c5/q/h', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c#3/q/h, cn3/q/h, bb3/q/h, d##3/q/h', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawBasicSlashTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q/s, c4/q/s, c4/q/r, c4/q/s', { stem: 'down' })), + voice(notes('c#5/h/s., c5/q/s', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c#3/q/s, cn3/q/s, bb3/q/s, d##3/q/s', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawGhostBasicTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550); + const score = f.EasyScore(); + const system = f.System(); + system.addStave({ + voices: [ + score.voice([ + ...score.notes('f#5/4, f5, db5, c5', { stem: 'up' }), + ...score.beam(score.notes('c5/8, d5, fn5, e5', { stem: 'up' })), + ...score.beam(score.notes('d5, c5', { stem: 'up' })), + ], { time: '7/4' }), + score.voice(score.notes('c4/h/g, f4/4, c4/4/g, e4/4, c4/8/g, d##4/8, c4/8, c4/8', { stem: 'down' }), { + time: '7/4', + }), + ], + }); + f.draw(); + options.assert.expect(0); +} +function drawGhostDottedTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550); + const score = f.EasyScore(); + const system = f.System(); + system.addStave({ + voices: [ + score.voice([ + ...score.notes('c4/4/g., fbb5/8, d5/4', { stem: 'up' }), + ...score.beam(score.notes('c5/8, c#5/16, d5/16', { stem: 'up' })), + ...score.notes('c4/2/g.., fn5/8', { stem: 'up' }), + ], { time: '8/4' }), + score.voice([ + ...score.notes('f#4/4', { stem: 'down' }), + ...score.beam(score.notes('e4/8, d4/8', { stem: 'down' })), + ...score.notes('c4/4/g.., cb4/16, c#4/h, d4/4', { stem: 'down' }), + ...score.beam(score.notes('fn4/8, e4/8', { stem: 'down' })), + ], { time: '8/4' }), + ], + }); + f.draw(); + options.assert.expect(0); +} +function drawParenthesisedTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + const notes1 = notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' }); + _src_parenthesis__WEBPACK_IMPORTED_MODULE_5__.Parenthesis.buildAndAttach([notes1[0], notes1[3]]); + const notes2 = notes('c#5/h., c5/q', { stem: 'down' }); + _src_parenthesis__WEBPACK_IMPORTED_MODULE_5__.Parenthesis.buildAndAttach([notes2[0], notes2[1]]); + system + .addStave({ + voices: [voice(notes1), voice(notes2)], + }) + .addClef('treble'); + const notes3 = notes('c#3/q, cn3/q, bb3/q, d##3/q', { stem: 'down' }); + _src_parenthesis__WEBPACK_IMPORTED_MODULE_5__.Parenthesis.buildAndAttach(notes3); + system + .addStave({ + voices: [voice(notes3)], + }) + .addClef('bass'); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawAccidentalsTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(cbbs4 ebb4 gbss4)/q, cbs4/q, cdb4/q/r, cd4/q', { stem: 'down' })), + voice(notes('c++-5/h., c++5/q', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c+-3/q, c+3/q, bb3/q, d##3/q', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawBeamsTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 250); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes, beam } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(c4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })), + voice([...notes('c#5/h.', { stem: 'up' }), ...beam(notes('c5/8, c5/8', { stem: 'up' }))]), + ], + }) + .addClef('treble'); + f.draw(); + options.assert.expect(0); +} +function drawTupletsTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 250); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes, tuplet, beam } = createShortcuts(score); + // Voice 1, with stems pointed down. + const v1_tuplet = tuplet(notes('(c4 e4 g4)/q, cbb4/q, c4/q', { stem: 'down' }), { + location: _src_tuplet__WEBPACK_IMPORTED_MODULE_8__.Tuplet.LOCATION_BOTTOM, + }); + const v1_halfNote = notes('c4/h', { stem: 'down' }); + const v1 = voice([...v1_tuplet, ...v1_halfNote]); + // Voice 2, with stems pointed up. + const v2_halfNote = notes('c#5/h.', { stem: 'up' }); + const v2_tuplet = tuplet(beam(notes('cb5/8, cn5/8, c5/8', { stem: 'up' }))); + const v2 = voice([...v2_halfNote, ...v2_tuplet]); + system.addStave({ voices: [v1, v2] }).addClef('treble'); + f.draw(); + options.assert.expect(0); +} +function drawDotsTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 250); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [voice(notes('(c4 e4 g4)/8., (c4 e4 g4)/8.., (c4 e4 g4)/8..., (c4 e4 g4)/8...., (c4 e4 g4)/16...'))], + }) + .addClef('treble'); + f.draw(); + options.assert.expect(0); +} +function drawOptionsTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); + const score = f.EasyScore(); + const system = f.System(); + const notes = score.notes('B4/h[id="foobar", class="red,bold", stem="up", articulations="staccato.below,tenuto"], B4/q[articulations="accent.above"], B4/q[stem="down"]'); + system.addStave({ voices: [score.voice(notes)] }); + f.draw(); + const note0 = notes[0]; + const note1 = notes[1]; + const note0_modifier0 = note0.getModifiers()[0]; + const note0_modifier1 = note0.getModifiers()[1]; + const note1_modifier0 = note1.getModifiers()[0]; + options.assert.equal(note0.getAttribute('id'), 'foobar'); + options.assert.ok(note0.hasClass('red')); + options.assert.ok(note0.hasClass('bold')); + options.assert.equal(note0_modifier0.getCategory(), _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation.CATEGORY); + options.assert.equal(note0_modifier0.type, 'a.'); + options.assert.equal(note0_modifier0.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.BELOW); + options.assert.equal(note0_modifier1.getCategory(), _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation.CATEGORY); + options.assert.equal(note0_modifier1.type, 'a-'); + options.assert.equal(note0_modifier1.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.ABOVE); + options.assert.equal(note0.getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_7__.Stem.UP); + options.assert.equal(note1_modifier0.getCategory(), _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation.CATEGORY); + options.assert.equal(note1_modifier0.type, 'a>'); + options.assert.equal(note1_modifier0.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.ABOVE); + options.assert.equal(notes[2].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_7__.Stem.DOWN); +} +function drawFingeringsTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); + const score = f.EasyScore(); + const system = f.System(); + const notes = score.notes('C4/q[fingerings="1"], E4[fingerings="3.above"], G4[fingerings="5.below"], (C4 E4 G4)[fingerings="1,3,5"]'); + system.addStave({ voices: [score.voice(notes)] }); + f.draw(); + const note0_modifier0 = notes[0].getModifiers()[0]; + options.assert.equal(note0_modifier0.getCategory(), _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger.CATEGORY); + options.assert.equal(note0_modifier0.getFretHandFinger(), '1'); + options.assert.equal(note0_modifier0.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.LEFT); + const note1_modifier0 = notes[1].getModifiers()[0]; + options.assert.equal(note1_modifier0.getCategory(), _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger.CATEGORY); + options.assert.equal(note1_modifier0.getFretHandFinger(), '3'); + options.assert.equal(note1_modifier0.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.ABOVE); + const note2_modifier0 = notes[2].getModifiers()[0]; + options.assert.equal(note2_modifier0.getCategory(), _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger.CATEGORY); + options.assert.equal(note2_modifier0.getFretHandFinger(), '5'); + options.assert.equal(note2_modifier0.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.BELOW); + const note3_modifiers = notes[3].getModifiers(); + const note3_modifier0 = note3_modifiers[0]; + const note3_modifier1 = note3_modifiers[1]; + const note3_modifier2 = note3_modifiers[2]; + options.assert.equal(note3_modifier0.getCategory(), _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger.CATEGORY); + options.assert.equal(note3_modifier0.getFretHandFinger(), '1'); + options.assert.equal(note3_modifier0.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.LEFT); + options.assert.equal(note3_modifier1.getCategory(), _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger.CATEGORY); + options.assert.equal(note3_modifier1.getFretHandFinger(), '3'); + options.assert.equal(note3_modifier1.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.LEFT); + options.assert.equal(note3_modifier2.getCategory(), _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger.CATEGORY); + options.assert.equal(note3_modifier2.getFretHandFinger(), '5'); + options.assert.equal(note3_modifier2.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.LEFT); +} +function keys(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 200); + const score = f.EasyScore(); + const system = f.System(); + const notes = score.notes('c#3/q, c##3, cb3, cbb3, cn3, c3, cbbs3, cbss3, cbs3, cdb3, cd3, c++-3, c++3, c+-3, c+3, co3, ck3', { clef: 'bass' }); + system.addStave({ voices: [f.Voice().setStrict(false).addTickables(notes)] }).addClef('bass'); + f.draw(); + options.assert.equal(notes[0].keys, 'c#/3'); + options.assert.equal(notes[1].keys, 'c##/3'); + options.assert.equal(notes[2].keys, 'cb/3'); + options.assert.equal(notes[3].keys, 'cbb/3'); + options.assert.equal(notes[4].keys, 'cn/3'); + for (let i = 5; i < notes.length; i++) { + options.assert.equal(notes[i].keys, 'c/3'); + } +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(EasyScoreTests); + + + +/***/ }), + +/***/ "./tests/factory_tests.ts": +/*!********************************!*\ + !*** ./tests/factory_tests.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "FactoryTests": () => (/* binding */ FactoryTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_factory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/factory */ "./src/factory.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Factory Tests + + + +const FactoryTests = { + Start() { + QUnit.module('Factory'); + QUnit.test('Defaults', defaults); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Draw', draw); + run('Draw Tab (repeat barlines must be aligned)', drawTab); + }, +}; +function defaults(assert) { + // Throws RuntimeError: 'HTML DOM element not set in Factory' + assert.throws(() => new _src_factory__WEBPACK_IMPORTED_MODULE_1__.Factory({ renderer: { elementId: '', width: 700, height: 500 } }), 'Empty string for elementId throws an exception.'); + const factory = new _src_factory__WEBPACK_IMPORTED_MODULE_1__.Factory({ + renderer: { elementId: null, width: 700, height: 500 }, + }); + // eslint-disable-next-line + // @ts-ignore access a protected member for testing purposes. + const options = factory.options; + assert.equal(options.renderer.width, 700); + assert.equal(options.renderer.height, 500); + assert.equal(options.renderer.elementId, null); + assert.equal(options.stave.space, 10); +} +function draw(options) { + const f = _src_factory__WEBPACK_IMPORTED_MODULE_1__.Factory.newFromElementId(options.elementId); + f.Stave().setClef('treble'); + f.draw(); + options.assert.expect(0); +} +function drawTab(options) { + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 400); + const system = factory.System({ width: 500 }); + const stave = factory.Stave().setClef('treble').setKeySignature('C#').setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.Barline.type.REPEAT_BEGIN); + const voices = [factory.Voice().addTickables([factory.GhostNote({ duration: 'w' })])]; + system.addStave({ stave, voices }); + const tabStave = factory.TabStave().setClef('tab').setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.Barline.type.REPEAT_BEGIN); + const tabVoices = [factory.Voice().addTickables([factory.GhostNote({ duration: 'w' })])]; + system.addStave({ stave: tabStave, voices: tabVoices }); + factory.draw(); + options.assert.equal(stave.getModifiers()[0].getX(), tabStave.getModifiers()[0].getX()); + options.assert.expect(1); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(FactoryTests); + + + +/***/ }), + +/***/ "./tests/font_tests.ts": +/*!*****************************!*\ + !*** ./tests/font_tests.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "FontTests": () => (/* binding */ FontTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); +/* harmony import */ var _src_bend__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/bend */ "./src/bend.ts"); +/* harmony import */ var _src_canvascontext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _src_element__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/element */ "./src/element.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +/* harmony import */ var _src_pedalmarking__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/pedalmarking */ "./src/pedalmarking.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_textbracket__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/textbracket */ "./src/textbracket.ts"); +/* harmony import */ var _src_textnote__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/textnote */ "./src/textnote.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Font Tests + + + + + + + + + + + + +const FontTests = { + Start() { + QUnit.module('Font'); + QUnit.test('setFont', setFont); + QUnit.test('Parsing', fontParsing); + QUnit.test('Sizes', fontSizes); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Set Text Font to Georgia', setTextFontToGeorgia); + run('Set Music Font to Petaluma', setMusicFontToPetaluma); + }, +}; +/** + * Test out the setFont method in various classes. + */ +function setFont(assert) { + // Create a CanvasCntext and call setFont on it. + const canvas = document.createElement('canvas'); + canvas.width = 800; + canvas.height = 400; + // Set the font and get the font to verify that it matches. + // NOTE: Safari has a bug where it does not return the font-weight! + // https://github.com/0xfe/vexflow/issues/1240#issuecomment-986504088 + const ctx = new _src_canvascontext__WEBPACK_IMPORTED_MODULE_3__.CanvasContext(canvas.getContext('2d')); + ctx.setFont('PetalumaScript', '100px', 'normal', 'italic'); + assert.equal(ctx.font, 'italic 100px PetalumaScript'); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_11__.Voice(); + // Many elements do not override the default Element.TEXT_FONT. + assert.propEqual(voice.fontInfo, _src_element__WEBPACK_IMPORTED_MODULE_4__.Element.TEXT_FONT); + voice.setFont('bold 32pt Arial'); + const fontInfo = voice.fontInfo; + assert.equal(fontInfo === null || fontInfo === void 0 ? void 0 : fontInfo.size, '32pt'); + const flat = new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'); + // eslint-disable-next-line + // @ts-ignore access a protected member for testing purposes. + assert.equal(flat.textFont, undefined); // The internal instance variable .textFont is undefined by default. + // Add italic to the default font as defined in Element.TEXT_FONT (since Accidental does not override TEXT_FONT). + flat.setFont(undefined, undefined, undefined, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontStyle.ITALIC); + assert.equal(flat.getFont(), 'italic 10pt Arial, sans-serif'); + // Anything that is not set will be reset to the defaults. + flat.setFont(undefined, undefined, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontWeight.BOLD, undefined); + assert.equal(flat.getFont(), 'bold 10pt Arial, sans-serif'); + flat.setFont(undefined, undefined, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontWeight.BOLD, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontStyle.ITALIC); + assert.equal(flat.getFont(), 'italic bold 10pt Arial, sans-serif'); + flat.setFont(undefined, undefined, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontWeight.BOLD, 'oblique'); + assert.equal(flat.getFont(), 'oblique bold 10pt Arial, sans-serif'); + // '' is equivalent to 'normal'. Neither will be included in the CSS font string. + flat.setFont(undefined, undefined, 'normal', ''); + assert.equal(flat.getFont(), '10pt Arial, sans-serif'); +} +function fontParsing(assert) { + const b = new _src_bend__WEBPACK_IMPORTED_MODULE_2__.Bend('1/2', true); + const bFont = b.fontInfo; + // Check the default font. + assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.family, _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SANS_SERIF); + assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.size, _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SIZE); + assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.weight, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontWeight.NORMAL); + assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.style, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontStyle.NORMAL); + const f1 = 'Roboto Slab, serif'; + const t = new _src_textnote__WEBPACK_IMPORTED_MODULE_10__.TextNote({ duration: '4', font: { family: f1 } }); + assert.equal(f1, t.fontInfo.family); + const n1 = new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['e/5'], duration: '4' }); + const n2 = new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['c/5'], duration: '4' }); + const tb = new _src_textbracket__WEBPACK_IMPORTED_MODULE_9__.TextBracket({ start: n1, stop: n2 }); + const f2 = tb.fontInfo; + assert.equal(f2 === null || f2 === void 0 ? void 0 : f2.size, 15); + assert.equal(f2 === null || f2 === void 0 ? void 0 : f2.style, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontStyle.ITALIC); + // The line-height /3 is currently ignored. + const f3 = _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.fromCSSString(`bold 1.5em/3 "Lucida Sans Typewriter", "Lucida Console", Consolas, monospace`); + const f3SizeInPx = _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.convertSizeToPixelValue(f3.size); + assert.equal(f3SizeInPx, 24); +} +function fontSizes(assert) { + { + const size = '17px'; + const sizeInEm = _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.convertSizeToPixelValue(size) / _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.scaleToPxFrom.em; + assert.equal(sizeInEm, 1.0625); + } + { + const size = '2em'; + const sizeInPx = _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.convertSizeToPixelValue(size); + assert.equal(sizeInPx, 32); + } + { + const pedal = new _src_pedalmarking__WEBPACK_IMPORTED_MODULE_7__.PedalMarking([]); + assert.equal(pedal.getFont(), 'italic bold 12pt Times New Roman, serif'); + assert.equal(pedal.fontSizeInPoints, 12); + assert.equal(pedal.fontSizeInPixels, 16); + const doubledSizePx = pedal.fontSizeInPixels * 2; // Double the font size. + assert.equal(doubledSizePx, 32); + const doubledSizePt = _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.scaleSize(pedal.fontSizeInPoints, 2); // Double the font size. + assert.equal(doubledSizePt, 24); + assert.equal(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.scaleSize('1.5em', 3), '4.5em'); + } +} +function setTextFontToGeorgia(options) { + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 200); + const stave = factory.Stave({ y: 40 }); + const score = factory.EasyScore(); + const voice1 = score.voice([ + factory.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }), + factory.StaveNote({ keys: ['d/4', 'f/4'], stem_direction: -1, duration: 'q' }), + factory.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }), + ]); + const defaultFont = _src_textnote__WEBPACK_IMPORTED_MODULE_10__.TextNote.TEXT_FONT; + // Set the default before we instantiate TextNote objects with the factory. + _src_textnote__WEBPACK_IMPORTED_MODULE_10__.TextNote.TEXT_FONT = { + family: 'Georgia, Courier New, serif', + size: 14, + weight: 'bold', + style: 'italic', + }; + const voice2 = score.voice([ + factory + .TextNote({ text: 'Here are some fun lyrics...', duration: 'w' }) + .setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_10__.TextNote.Justification.LEFT), + ]); + const formatter = factory.Formatter(); + formatter.joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + factory.draw(); + // Restore the previous default, or else it will affect the rest of the tests. + _src_textnote__WEBPACK_IMPORTED_MODULE_10__.TextNote.TEXT_FONT = defaultFont; + options.assert.ok(true); +} +function setMusicFontToPetaluma(options) { + _src_flow__WEBPACK_IMPORTED_MODULE_5__.Flow.setMusicFont('Petaluma'); + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 200); + const stave = factory.Stave({ y: 40 }); + const score = factory.EasyScore(); + const voice = score.voice([ + factory.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }), + factory.StaveNote({ keys: ['d/4', 'f/4'], stem_direction: -1, duration: 'q' }), + factory.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }), + ]); + const formatter = factory.Formatter(); + formatter.joinVoices([voice]).formatToStave([voice], stave); + factory.draw(); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(FontTests); + + + +/***/ }), + +/***/ "./tests/formatter_tests.ts": +/*!**********************************!*\ + !*** ./tests/formatter_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "FormatterTests": () => (/* binding */ FormatterTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); +/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); +/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/bend */ "./src/bend.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_frethandfinger__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); +/* harmony import */ var _src_note__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/note */ "./src/note.ts"); +/* harmony import */ var _src_registry__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../src/registry */ "./src/registry.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_staveconnector__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../src/staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); +/* harmony import */ var _src_stringnumber__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../src/stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _src_tables__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../src/tables */ "./src/tables.ts"); +/* harmony import */ var _src_tuplet__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../src/tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +/* harmony import */ var _mocks__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./mocks */ "./tests/mocks.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Formatter Tests + + + + + + + + + + + + + + + + + + + + + + + +const FormatterTests = { + Start() { + QUnit.module('Formatter'); + QUnit.test('TickContext Building', buildTickContexts); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Penultimate Note Padding', penultimateNote); + run('Whitespace and justify', rightJustify); + run('Notehead padding', noteHeadPadding); + run('Justification and alignment with accidentals', accidentalJustification); + run('Long measure taking full space', longMeasureProblems); + run('Vertical alignment - few unaligned beats', unalignedNoteDurations1); + run('Vertical alignment - many unaligned beats', unalignedNoteDurations2, { globalSoftmax: false }); + run('Vertical alignment - many unaligned beats (global softmax)', unalignedNoteDurations2, { globalSoftmax: true }); + run('Vertical alignment - many mixed elements', alignedMixedElements, { globalSoftmax: true }); + run('StaveNote - Justification', justifyStaveNotes); + run('Notes with Tab', notesWithTab); + run('Multiple Staves - Justified', multiStaves, { debug: true }); + run('Softmax', softMax); + run('Mixtime', mixTime); + run('Tight', tightNotes1); + run('Tight 2', tightNotes2); + run('Annotations', annotations); + run('Proportional Formatting - No Tuning', proportional, { debug: true, iterations: 0 }); + run('Proportional Formatting - No Justification', proportional, { justify: false, debug: true, iterations: 0 }); + run('Proportional Formatting (20 iterations)', proportional, { debug: true, iterations: 20, alpha: 0.5 }); + }, +}; +/** Calculate the glyph's width in the current music font. */ +// How is this different from Glyph.getWidth()? The numbers don't match up. +function getGlyphWidth(glyphName) { + // `38` seems to be the `font_scale` specified in many classes, such as + // Accidental, Articulation, Ornament, Strokes. Does this mean `38pt`??? + // + // However, tables.ts specifies: + // NOTATION_FONT_SCALE: 39, + // TABLATURE_FONT_SCALE: 39, + const musicFont = _src_tables__WEBPACK_IMPORTED_MODULE_19__.Tables.currentMusicFont(); + const glyph = musicFont.getGlyphs()[glyphName]; + const widthInEm = (glyph.x_max - glyph.x_min) / musicFont.getResolution(); + return widthInEm * 38 * _src_font__WEBPACK_IMPORTED_MODULE_8__.Font.scaleToPxFrom.pt; +} +function buildTickContexts(assert) { + function createTickable(beat) { + return new _mocks__WEBPACK_IMPORTED_MODULE_22__.MockTickable().setTicks(beat); + } + const BEAT = (1 * _src_flow__WEBPACK_IMPORTED_MODULE_7__.Flow.RESOLUTION) / 4; + const tickables1 = [ + createTickable(BEAT).setWidth(10), + createTickable(BEAT * 2).setWidth(20), + createTickable(BEAT).setWidth(30), + ]; + const tickables2 = [ + createTickable(BEAT * 2).setWidth(10), + createTickable(BEAT).setWidth(20), + createTickable(BEAT).setWidth(30), + ]; + const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_7__.Flow.TIME4_4); + const voice2 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_7__.Flow.TIME4_4); + voice1.addTickables(tickables1); + voice2.addTickables(tickables2); + const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_9__.Formatter(); + const tContexts = formatter.createTickContexts([voice1, voice2]); + assert.equal(tContexts.list.length, 4, 'Voices should have four tick contexts'); + assert.throws(() => formatter.getMinTotalWidth(), /NoMinTotalWidth/, 'Expected to throw exception'); + assert.ok(formatter.preCalculateMinTotalWidth([voice1, voice2]), 'Successfully runs preCalculateMinTotalWidth'); + assert.equal(formatter.getMinTotalWidth(), 88, 'Get minimum total width without passing voices'); + formatter.preFormat(); + assert.equal(formatter.getMinTotalWidth(), 88, 'Minimum total width'); + assert.equal(tickables1[0].getX(), tickables2[0].getX(), 'First notes of both voices have the same X'); + assert.equal(tickables1[2].getX(), tickables2[2].getX(), 'Last notes of both voices have the same X'); + assert.ok(tickables1[1].getX() < tickables2[1].getX(), 'Second note of voice 2 is to the right of the second note of voice 1'); +} +function rightJustify(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 1200, 150); + const getTickables = (time, n, duration, duration2) => { + const tickar = []; + let i = 0; + for (i = 0; i < n; ++i) { + const dd = i === n - 1 ? duration2 : duration; + tickar.push(new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['f/4'], duration: dd })); + } + return new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice(time).addTickables(tickar); + }; + const renderTest = (time, n, duration, duration2, x, width) => { + const formatter = f.Formatter(); + const stave = f.Stave({ x, y: 20, width }); + // stave.addClef('treble').addTimeSignature('4/4'); + const voice = getTickables(time, n, duration, duration2); + formatter.joinVoices([voice]).formatToStave([voice], stave); + stave.draw(); + voice.draw(f.getContext(), stave); + }; + renderTest({ num_beats: 4, beat_value: 4, resolution: 4 * 4096 }, 3, '4', '2', 10, 300); + renderTest({ num_beats: 4, beat_value: 4, resolution: 4 * 4096 }, 1, 'w', 'w', 310, 300); + renderTest({ num_beats: 3, beat_value: 4, resolution: 4 * 4096 }, 3, '4', '4', 610, 300); + renderTest({ num_beats: 3, beat_value: 4, resolution: 4 * 4096 }, 6, '8', '8', 910, 300); + options.assert.ok(true); +} +function penultimateNote(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 550); + const score = f.EasyScore(); + const staffWidth = 310; + let system = undefined; + let voices = []; + let notes = []; + let note = undefined; + let stave = undefined; + let y = 10; + const draw = (softmax) => { + system = f.System({ + width: staffWidth, + y, + formatOptions: { align_rests: true }, + details: { softmaxFactor: softmax }, + }); + notes = []; + voices = []; + note = score.notes('C4/8/r', { clef: 'bass' })[0]; + notes.push(note); + note = score.notes('A3/8', { stem: 'up', clef: 'bass' })[0]; + notes.push(note); + note = score.notes('C4/4', { stem: 'up', clef: 'bass' })[0]; + notes.push(note); + voices.push(score.voice(notes).setMode(2)); + notes = []; + note = score.notes('( F3 A3 )/4', { stem: 'down', clef: 'bass' })[0]; + notes.push(note); + note = score.notes('B4/4/r', {})[0]; + notes.push(note); + voices.push(score.voice(notes).setMode(2)); + notes = []; + stave = system.addStave({ voices: voices }); + stave.addClef('bass'); + stave.addTimeSignature('2/4'); + voices = []; + f.draw(); + f.getContext().fillText(`softmax: ${softmax.toString()}`, staffWidth + 20, y + 50); + y += 100; + }; + draw(15); + draw(10); + draw(5); + draw(2); + draw(1); + options.assert.ok(true); +} +function noteHeadPadding(options) { + const registry = new _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry(); + _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry.enableDefaultRegistry(registry); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 300); + const score = f.EasyScore(); + score.set({ time: '9/8' }); + const notes1 = score.notes('(d5 f5)/8,(c5 e5)/8,(d5 f5)/8,(c5 e5)/2.'); + const beams = [new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes1.slice(0, 3), true)]; + const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT); + const notes2 = score.notes('(g4 an4)/2.,(g4 a4)/4.', { clef: 'treble' }); + const voice2 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT); + voice2.addTickables(notes2); + voice1.addTickables(notes1); + const formatter = f.Formatter().joinVoices([voice1]).joinVoices([voice2]); + const width = formatter.preCalculateMinTotalWidth([voice1, voice2]); + formatter.format([voice1, voice2], width); + const staveWidth = width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding; + const stave1 = f.Stave({ y: 50, width: staveWidth }); + const stave2 = f.Stave({ y: 150, width: staveWidth }); + stave1.draw(); + stave2.draw(); + voice1.draw(f.getContext(), stave1); + voice2.draw(f.getContext(), stave2); + beams.forEach((b) => b.setContext(f.getContext()).draw()); + options.assert.ok(true); +} +function longMeasureProblems(options) { + const registry = new _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry(); + _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry.enableDefaultRegistry(registry); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 1500, 300); + const score = f.EasyScore(); + score.set({ time: '4/4' }); + const notes1 = score.notes('b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/2,b4/8,b4/8'); + const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT); + const notes2 = score.notes('d3/4,(ab3 f4)/2,d3/4,ab3/4,d3/2,ab3/4,d3/4,ab3/2,d3/4,ab3/4,d3/2,ab3/4,d3/4,ab3/2,d3/4,ab3/4,d3/2,ab3/4,d4/4,d4/2,d4/4', { clef: 'bass' }); + const voice2 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT); + voice2.addTickables(notes2); + voice1.addTickables(notes1); + const formatter = f.Formatter().joinVoices([voice1]).joinVoices([voice2]); + const width = formatter.preCalculateMinTotalWidth([voice1, voice2]); + formatter.format([voice1, voice2], width); + const stave1 = f.Stave({ y: 50, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding }); + const stave2 = f.Stave({ y: 200, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding }); + stave1.draw(); + stave2.draw(); + voice1.draw(f.getContext(), stave1); + voice2.draw(f.getContext(), stave2); + options.assert.ok(true); +} +function accidentalJustification(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 300); + const score = f.EasyScore(); + const notes11 = score.notes('a4/2, a4/4, a4/8, ab4/16, an4/16'); + const voice11 = score.voice(notes11, { time: '4/4' }); + const notes21 = score.notes('c4/2, d4/8, d4/8, e4/8, e4/8'); + const voice21 = score.voice(notes21, { time: '4/4' }); + let beams = _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam.generateBeams(notes11.slice(2)); + beams = beams.concat(beams, _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam.generateBeams(notes21.slice(1, 3))); + beams = beams.concat(_src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam.generateBeams(notes21.slice(3))); + const formatter = f.Formatter({}).joinVoices([voice11]).joinVoices([voice21]); + const width = formatter.preCalculateMinTotalWidth([voice11, voice21]); + const stave11 = f.Stave({ y: 20, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding }); + const stave21 = f.Stave({ y: 130, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding }); + formatter.format([voice11, voice21], width); + const ctx = f.getContext(); + stave11.setContext(ctx).draw(); + stave21.setContext(ctx).draw(); + voice11.draw(ctx, stave11); + voice21.draw(ctx, stave21); + beams.forEach((b) => b.setContext(ctx).draw()); + options.assert.ok(true); +} +function unalignedNoteDurations1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 250); + const score = f.EasyScore(); + const notes11 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['a/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['b/4'], duration: '4' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['b/4'], duration: '8' }), + ]; + const notes21 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['a/4'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['b/4.'], duration: '4' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['a/4'], duration: '8d' }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_6__.Dot.buildAndAttach([notes21[2]], { all: true }); + const ctx = f.getContext(); + const voice11 = score.voice(notes11, { time: '2/4' }).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT); + const voice21 = score.voice(notes21, { time: '2/4' }).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT); + const beams21 = _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam.generateBeams(notes21); + const beams11 = _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam.generateBeams(notes11); + const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_9__.Formatter(); + formatter.joinVoices([voice11]); + formatter.joinVoices([voice21]); + const width = formatter.preCalculateMinTotalWidth([voice11, voice21]); + const stave11 = f.Stave({ y: 20, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding }); + const stave21 = f.Stave({ y: 130, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding }); + formatter.format([voice11, voice21], width); + stave11.setContext(ctx).draw(); + stave21.setContext(ctx).draw(); + voice11.draw(ctx, stave11); + voice21.draw(ctx, stave21); + beams21.forEach((b) => b.setContext(ctx).draw()); + beams11.forEach((b) => b.setContext(ctx).draw()); + options.assert.ok(voice11.getTickables()[1].getX() > voice21.getTickables()[1].getX()); +} +function unalignedNoteDurations2(options) { + const notes1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['b/4'], duration: '8r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['g/4'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/5'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['g/4'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/5'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['b/4'], duration: '8r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['g/4'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/5'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['g/4'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/5'], duration: '16' }), + ]; + const notes2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['a/4'], duration: '16r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/4.'], duration: '8d' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/4'], duration: '4' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['a/4'], duration: '16r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/4.'], duration: '8d' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/4'], duration: '4' }), + ]; + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750, 280); + const context = f.getContext(); + const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice({ num_beats: 4, beat_value: 4 }); + voice1.addTickables(notes1); + const voice2 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice({ num_beats: 4, beat_value: 4 }); + voice2.addTickables(notes2); + const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_9__.Formatter({ globalSoftmax: options.params.globalSoftmax }); + formatter.joinVoices([voice1]); + formatter.joinVoices([voice2]); + const width = formatter.preCalculateMinTotalWidth([voice1, voice2]); + formatter.format([voice1, voice2], width); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave(10, 40, width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave(10, 100, width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding); + stave1.setContext(context).draw(); + stave2.setContext(context).draw(); + voice1.draw(context, stave1); + voice2.draw(context, stave2); + options.assert.ok(voice1.getTickables()[1].getX() > voice2.getTickables()[1].getX()); +} +function alignedMixedElements(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 500); + const context = f.getContext(); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave(10, 200, 400); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave(410, 200, 400); + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '8' }) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('##'), 0) + .addModifier(new _src_frethandfinger__WEBPACK_IMPORTED_MODULE_10__.FretHandFinger('4').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) + .addModifier(new _src_stringnumber__WEBPACK_IMPORTED_MODULE_18__.StringNumber('3').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a>').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a^').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('am').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('yyyy').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('xxxx').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.BOTTOM).setFont('sans-serif', 20), 0) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('ttt').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.BOTTOM).setFont('sans-serif', 20), 0), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_17__.Stem.DOWN }) + .addModifier(new _src_stringnumber__WEBPACK_IMPORTED_MODULE_18__.StringNumber('3').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a>').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '8' }), + ]; + const notes2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '8' }) + .addModifier(new _src_stringnumber__WEBPACK_IMPORTED_MODULE_18__.StringNumber('3').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('yyyy').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.TOP), 0), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_17__.Stem.DOWN }) + .addModifier(new _src_frethandfinger__WEBPACK_IMPORTED_MODULE_10__.FretHandFinger('4').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_stringnumber__WEBPACK_IMPORTED_MODULE_18__.StringNumber('3').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a>').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a^').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('am').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('yyyy').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.TOP), 0) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('xxxx').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.TOP).setFont('sans-serif', 20), 0) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('ttt').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.TOP).setFont('sans-serif', 20), 0), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '8' }), + ]; + const tuplet = new _src_tuplet__WEBPACK_IMPORTED_MODULE_20__.Tuplet(notes).setTupletLocation(-1); + const tuplet2 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_20__.Tuplet(notes2).setTupletLocation(1); + _src_formatter__WEBPACK_IMPORTED_MODULE_9__.Formatter.FormatAndDraw(context, stave, notes); + _src_formatter__WEBPACK_IMPORTED_MODULE_9__.Formatter.FormatAndDraw(context, stave2, notes2); + stave.setContext(context).draw(); + stave2.setContext(context).draw(); + tuplet.setContext(context).draw(); + tuplet2.setContext(context).draw(); + options.assert.ok(true); +} +function justifyStaveNotes(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 520, 280); + const ctx = f.getContext(); + const score = f.EasyScore(); + let y = 30; + function justifyToWidth(width) { + f.Stave({ y: y }).addClef('treble'); + const voices = [ + score.voice(score.notes('(cbb4 en4 a4)/2, (d4 e4 f4)/8, (d4 f4 a4)/8, (cn4 f#4 a4)/4', { stem: 'down' })), + score.voice(score.notes('(bb4 e#5 a5)/4, (d5 e5 f5)/2, (c##5 fb5 a5)/4', { stem: 'up' })), + ]; + f.Formatter() + .joinVoices(voices) + .format(voices, width - (_src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding + getGlyphWidth('gClef'))); + // Show the the width of notes via a horizontal line with red, green, yellow, blue, gray indicators. + voices[0].getTickables().forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_12__.Note.plotMetrics(ctx, note, y + 140)); // Bottom line. + voices[1].getTickables().forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_12__.Note.plotMetrics(ctx, note, y - 20)); // Top Line + y += 210; + } + justifyToWidth(520); + f.draw(); + options.assert.ok(true); +} +function notesWithTab(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 420, 580); + const score = f.EasyScore(); + let y = 10; + function justifyToWidth(width) { + const stave = f.Stave({ y: y }).addClef('treble'); + const voice = score.voice(score.notes('d#4/2, (c4 d4)/8, d4/8, (c#4 e4 a4)/4', { stem: 'up' })); + y += 100; + f.TabStave({ y: y }).addTabGlyph().setNoteStartX(stave.getNoteStartX()); + const tabVoice = score.voice([ + f.TabNote({ positions: [{ str: 3, fret: 6 }], duration: '2' }).addModifier(new _src_bend__WEBPACK_IMPORTED_MODULE_5__.Bend('Full'), 0), + f + .TabNote({ + positions: [ + { str: 2, fret: 3 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }) + .addModifier(new _src_bend__WEBPACK_IMPORTED_MODULE_5__.Bend('Unison'), 1), + f.TabNote({ positions: [{ str: 3, fret: 7 }], duration: '8' }), + f.TabNote({ + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 7 }, + { str: 2, fret: 5 }, + ], + duration: '4', + }), + ]); + f.Formatter().joinVoices([voice]).joinVoices([tabVoice]).format([voice, tabVoice], width); + y += 150; + } + justifyToWidth(0); + justifyToWidth(300); + f.draw(); + options.assert.ok(true); +} +function multiStaves(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 400); + const ctx = f.getContext(); + const score = f.EasyScore(); + ////////////////////////////////////////////////////////////////////////////////////////////////// + // Draw 3 Staves (one measure each). + const notes11 = score.notes('f4/4, d4/8, g4/4, eb4/8'); + const notes21 = score.notes('d4/8, d4, d4, d4, e4, eb4'); + const notes31 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' }); + let voices = [ + score.voice(notes11, { time: '6/8' }), + score.voice(notes21, { time: '6/8' }), + score.voice(notes31, { time: '6/8' }), + ]; + let formatter = f.Formatter(); + voices.forEach((v) => formatter.joinVoices([v])); + let width = formatter.preCalculateMinTotalWidth(voices); + formatter.format(voices, width); + let beams = [ + new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes21.slice(0, 3), true), + new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes21.slice(3, 6), true), + new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes31.slice(0, 3), true), + new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes31.slice(3, 6), true), + ]; + const staveYs = [20, 130, 250]; + let staveWidth = width + getGlyphWidth('gClef') + getGlyphWidth('timeSig8') + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding; + let staves = [ + f.Stave({ y: staveYs[0], width: staveWidth }).addClef('treble').addTimeSignature('6/8'), + f.Stave({ y: staveYs[1], width: staveWidth }).addClef('treble').addTimeSignature('6/8'), + f.Stave({ y: staveYs[2], width: staveWidth }).addClef('bass').addTimeSignature('6/8'), + ]; + f.StaveConnector({ + top_stave: staves[1], + bottom_stave: staves[2], + type: 'brace', + }); + for (let i = 0; i < staves.length; ++i) { + staves[i].setContext(ctx).draw(); + voices[i].draw(ctx, staves[i]); + } + beams.forEach((beam) => beam.setContext(ctx).draw()); + ////////////////////////////////////////////////////////////////////////////////////////////////// + // Draw 3 more staves (one measure each). + // These are adjacent to the first set of staves, representing the second measure of each stave. + const notes12 = score.notes('ab4/4, bb4/8, (cb5 eb5)/4[stem="down"], d5/8[stem="down"]'); + const notes22 = score.notes('(eb4 ab4)/4., (c4 eb4 ab4)/4, db5/8', { stem: 'up' }); + const notes32 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' }); + voices = [ + score.voice(notes12, { time: '6/8' }), + score.voice(notes22, { time: '6/8' }), + score.voice(notes32, { time: '6/8' }), + ]; + formatter = f.Formatter(); + voices.forEach((v) => formatter.joinVoices([v])); + width = formatter.preCalculateMinTotalWidth(voices); + const staveX = staves[0].getX() + staves[0].getWidth(); + staveWidth = width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding; + staves = [ + f.Stave({ x: staveX, y: staveYs[0], width: staveWidth }), + f.Stave({ x: staveX, y: staveYs[1], width: staveWidth }), + f.Stave({ x: staveX, y: staveYs[2], width: staveWidth }), + ]; + formatter.format(voices, width); + beams = [ + // Add beams to each group of 3 notes. + new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes32.slice(0, 3), true), + new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes32.slice(3, 6), true), + ]; + for (let i = 0; i < staves.length; ++i) { + staves[i].setContext(ctx).draw(); + voices[i].draw(ctx, staves[i]); + voices[i].getTickables().forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_12__.Note.plotMetrics(ctx, note, staveYs[i] - 20)); + } + beams.forEach((beam) => beam.setContext(ctx).draw()); + options.assert.ok(true); +} +function proportional(options) { + const debug = options.params.debug; + _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry.enableDefaultRegistry(new _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry()); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 775, 750); + const system = f.System({ + x: 50, + autoWidth: true, + debugFormatter: debug, + noJustification: !(options.params.justify === undefined && true), + formatIterations: options.params.iterations, + details: { alpha: options.params.alpha }, + }); + const score = f.EasyScore(); + const voices = [ + score.notes('c5/8, c5'), + score.tuplet(score.notes('a4/8, a4, a4'), { notes_occupied: 2 }), + score.notes('c5/16, c5, c5, c5'), + score.tuplet(score.notes('a4/16, a4, a4, a4, a4'), { notes_occupied: 4 }), + score.tuplet(score.notes('a4/32, a4, a4, a4, a4, a4, a4'), { notes_occupied: 8 }), + ]; + const createVoice = (notes) => score.voice(notes, { time: '1/4' }); + const createStave = (voice) => system + .addStave({ voices: [voice], debugNoteMetrics: debug }) + .addClef('treble') + .addTimeSignature('1/4'); + voices.map(createVoice).forEach(createStave); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_15__.StaveConnector.type.BRACKET); + f.draw(); + // Debugging: Show how many elements of each type we have added. + // const typeMap = Registry.getDefaultRegistry().index.type; + // const table = Object.keys(typeMap).map((typeName) => typeName + ': ' + Object.keys(typeMap[typeName]).length); + // console.log(table); + _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry.disableDefaultRegistry(); + options.assert.ok(true); +} +function softMax(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 500); + const textX = 450 / 0.8; + f.getContext().scale(0.8, 0.8); + function draw(y, factor) { + const score = f.EasyScore(); + const system = f.System({ + x: 100, + y, + details: { softmaxFactor: factor }, + autoWidth: true, + }); + system + .addStave({ + voices: [ + score.voice(score + .notes('C#5/h, a4/q') + .concat(score.beam(score.notes('Abb4/8, A4/8'))) + .concat(score.beam(score.notes('A4/16, A#4, A4, Ab4/32, A4'))), { time: '5/4' }), + ], + }) + .addClef('treble') + .addTimeSignature('5/4'); + f.draw(); + f.getContext().fillText(`softmax: ${factor.toString()}`, textX, y + 50); + options.assert.ok(true); + } + draw(50, 1); + draw(150, 2); + draw(250, 5); + draw(350, 10); + draw(450, 15); +} +function mixTime(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400 + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding, 250); + f.getContext().scale(0.8, 0.8); + const score = f.EasyScore(); + const system = f.System({ + details: {}, + autoWidth: true, + debugFormatter: true, + }); + system + .addStave({ + voices: [score.voice(score.notes('C#5/q, B4').concat(score.beam(score.notes('A4/8, E4, C4, D4'))))], + }) + .addClef('treble') + .addTimeSignature('4/4'); + system + .addStave({ + voices: [score.voice(score.notes('C#5/q, B4, B4').concat(score.tuplet(score.beam(score.notes('A4/8, E4, C4')))))], + }) + .addClef('treble') + .addTimeSignature('4/4'); + f.draw(); + options.assert.ok(true); +} +function tightNotes1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 440, 250); + f.getContext().scale(0.8, 0.8); + const score = f.EasyScore(); + const system = f.System({ + autoWidth: true, + debugFormatter: true, + details: { maxIterations: 10 }, + }); + system + .addStave({ + voices: [ + score.voice(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')).concat(score.notes('B4/q, B4'))), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + system + .addStave({ + voices: [ + score.voice(score.notes('B4/q, B4').concat(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')))), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + f.draw(); + options.assert.ok(true); +} +function tightNotes2(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 440, 250); + f.getContext().scale(0.8, 0.8); + const score = f.EasyScore(); + const system = f.System({ + autoWidth: true, + debugFormatter: true, + }); + system + .addStave({ + voices: [ + score.voice(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')).concat(score.notes('B4/q, B4'))), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + system + .addStave({ + voices: [score.voice(score.notes('B4/w'))], + }) + .addClef('treble') + .addTimeSignature('4/4'); + f.draw(); + options.assert.ok(true); +} +function annotations(options) { + const pageWidth = 916; + const pageHeight = 600; + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, pageWidth, pageHeight); + const context = f.getContext(); + const lyrics1 = ['ipso', 'ipso-', 'ipso', 'ipso', 'ipsoz', 'ipso-', 'ipso', 'ipso', 'ipso', 'ip', 'ipso']; + const lyrics2 = ['ipso', 'ipso-', 'ipsoz', 'ipso', 'ipso', 'ipso-', 'ipso', 'ipso', 'ipso', 'ip', 'ipso']; + const smar = [ + { + sm: 5, + width: 550, + lyrics: lyrics1, + title: '550px,softMax:5', + }, + { + sm: 5, + width: 550, + lyrics: lyrics2, + title: '550px,softmax:5,different word order', + }, + { + sm: 10, + width: 550, + lyrics: lyrics2, + title: '550px,softmax:10', + }, + { + sm: 15, + width: 550, + lyrics: lyrics2, + title: '550px,softmax:15', + }, + ]; + const rowSize = 140; + const beats = 12; + const beatsPer = 8; + const beamGroup = 3; + const durations = ['8d', '16', '8', '8d', '16', '8', '8d', '16', '8', '4', '8']; + const beams = []; + let y = 40; + smar.forEach((sm) => { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave(10, y, sm.width); + const notes = []; + let iii = 0; + context.fillText(sm.title, 100, y); + y += rowSize; + durations.forEach((dd) => { + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['b/4'], duration: dd }); + if (dd.indexOf('d') >= 0) { + _src_dot__WEBPACK_IMPORTED_MODULE_6__.Dot.buildAndAttach([note], { all: true }); + } + if (sm.lyrics.length > iii) { + note.addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation(sm.lyrics[iii]) + .setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation.VerticalJustify.BOTTOM) + .setFont(_src_font__WEBPACK_IMPORTED_MODULE_8__.Font.SERIF, 12, _src_font__WEBPACK_IMPORTED_MODULE_8__.FontWeight.NORMAL)); + } + notes.push(note); + iii += 1; + }); + notes.forEach((note) => { + if (note.getDuration().indexOf('d') >= 0) { + _src_dot__WEBPACK_IMPORTED_MODULE_6__.Dot.buildAndAttach([note], { all: true }); + } + }); + // Don't beam the last group + let notesToBeam = []; + notes.forEach((note) => { + if (note.getIntrinsicTicks() < 4096) { + notesToBeam.push(note); + if (notesToBeam.length >= beamGroup) { + beams.push(new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notesToBeam)); + notesToBeam = []; + } + } + else { + notesToBeam = []; + } + }); + const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice({ num_beats: beats, beat_value: beatsPer }).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT).addTickables(notes); + const fmt = new _src_formatter__WEBPACK_IMPORTED_MODULE_9__.Formatter({ softmaxFactor: sm.sm, maxIterations: 2 }).joinVoices([voice1]); + fmt.format([voice1], sm.width - 11); + stave.setContext(context).draw(); + voice1.draw(context, stave); + beams.forEach((b) => b.setContext(context).draw()); + }); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(FormatterTests); + + + +/***/ }), + +/***/ "./tests/fraction_tests.ts": +/*!*********************************!*\ + !*** ./tests/fraction_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "FractionTests": () => (/* binding */ FractionTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/fraction */ "./src/fraction.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Fraction Tests + + +const FractionTests = { + Start() { + QUnit.module('Fraction'); + QUnit.test('Basic', basic); + QUnit.test('With Other Fractions', withOtherFractions); + }, +}; +function basic(assert) { + const f_1_2 = new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 2); + assert.ok(f_1_2.equals(0.5), 'Fraction: 1/2 equals 0.5'); + assert.ok(f_1_2.equals(new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 2)), 'Fraction: 1/2 equals 1/2'); + assert.ok(f_1_2.equals(new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, 4)), 'Fraction: 1/2 equals 2/4'); + assert.notOk(f_1_2.greaterThan(1), 'Fraction: ! 1/2 > 1'); + assert.ok(f_1_2.greaterThan(0.2), 'Fraction: 1/2 > 0.2'); + assert.ok(f_1_2.greaterThanEquals(0.2), 'Fraction: 1/2 >= 0.2'); + assert.ok(f_1_2.greaterThanEquals(0.5), 'Fraction: 1/2 >= 0.5'); + assert.notOk(f_1_2.greaterThanEquals(1), 'Fraction: ! 1/2 >= 1'); + assert.notOk(f_1_2.lessThan(0.5), 'Fraction: ! 1/2 < 0.5'); + assert.ok(f_1_2.lessThan(1), 'Fraction: 1/2 < 1'); + assert.ok(f_1_2.lessThanEquals(0.6), 'Fraction: 1/2 <= 0.6'); + assert.ok(f_1_2.lessThanEquals(0.5), 'Fraction: 1/2 <= 0.5'); + assert.notOk(f_1_2.lessThanEquals(0.4), 'Fraction: ! 1/2 <= 0.4'); + const f_05 = f_1_2.copy(0.5); + assert.strictEqual(f_05, f_1_2, 'Fraction: f_05 === f_1_2'); + assert.strictEqual(f_05.toString(), '0.5/1', 'Fraction: f_05.toString() === "0.5/1"'); + assert.strictEqual(f_05.toSimplifiedString(), '1/2', 'Fraction: f_05.toSimplifiedString() === "1/2"'); + const tF_n = f_05.clone(); + assert.notStrictEqual(tF_n, f_05, 'Fraction: tF_n !== f_05'); + assert.notEqual(tF_n, f_05, 'Fraction: tF_n != f_05'); + assert.deepEqual(tF_n, f_05, 'tF_n deepEqual f_05'); + assert.notDeepEqual(tF_n, {}, 'tF_n notDeepEqual {}'); + tF_n.subtract(-0.5); + assert.ok(tF_n.equals(1), 'Fraction: 0.5 -(-0.5) equals 1'); + tF_n.add(1); + assert.ok(tF_n.equals(2), 'Fraction: 1 + 1 equals 2'); + tF_n.multiply(2); + assert.ok(tF_n.equals(4), 'Fraction: 2 * 2 equals 4'); + tF_n.divide(2); + assert.ok(tF_n.equals(2), 'Fraction: 4 / 2 equals 2'); + // Lowest common multiple. + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([]), 0); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([17]), 17); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([2, 5]), 10); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([15, 3, 5]), 15); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([2, 4, 6]), 12); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([2, 3, 4, 5]), 60); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([12, 15, 10, 75]), 300); + // Greatest common divisor. + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.GCD(0, 0), 0); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.GCD(0, 99), 99); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.GCD(77, 0), 77); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.GCD(42, 14), 14); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.GCD(15, 10), 5); +} +function withOtherFractions(assert) { + const f_1_2 = new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 2); + const f_1_4 = new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 4); + const f_1_8 = new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 8); + const f_2 = new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, 1); + // IMPORTANT NOTE: Fraction methods modify the existing Fraction object. + // They do not return new objects. + // Use clone() if you don't want to modify the original object. + const a = f_1_2.clone().multiply(f_1_2); + assert.ok(a.equals(f_1_4), '1/2 x 1/2 == 1/4'); + const b = f_1_2.clone().divide(f_1_4); + assert.ok(b.equals(f_2), '1/2 / 1/4 == 2'); + const c = f_2.clone().subtract(f_1_2).subtract(f_1_2).subtract(f_1_4); // 3/4 + const d = f_1_8.clone().add(f_1_8).add(f_1_8).multiply(f_2); + assert.ok(c.equals(d), '2-1/2-1/2-1/4 == (1/8+1/8+1/8)*(2/1)'); + assert.equal(c.value(), 0.75, '3/4 == 0.75'); + const e = f_1_8.clone().add(f_1_4).add(f_1_8); + assert.ok(e.equals(f_1_2), '1/8 + 1/4 + 1/8 == 1/2'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(FractionTests); + + + +/***/ }), + +/***/ "./tests/ghostnote_tests.ts": +/*!**********************************!*\ + !*** ./tests/ghostnote_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GhostNoteTests": () => (/* binding */ GhostNoteTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// GhostNote Tests + +const GhostNoteTests = { + Start() { + QUnit.module('GhostNote'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('GhostNote Basic', basic); + run('GhostNote Dotted', dotted); + }, +}; +/** + * Helper function to set up the stave, easyscore, voice, and to format & draw. + */ +function createTest(addItems) { + return (options) => { + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550); + const stave = factory.Stave(); + const score = factory.EasyScore(); + addItems(factory, score); + const voices = factory.getVoices(); + factory.Formatter().joinVoices(voices).formatToStave(voices, stave); + factory.draw(); + options.assert.ok(true, 'all pass'); + }; +} +const basic = createTest((f, score) => { + // Top Voice + const voiceTop = score.voice(score.notes('f#5/4, f5, db5, c5, c5/8, d5, fn5, e5, d5, c5', { stem: 'up' }), { + time: '7/4', + }); + const notesTop = voiceTop.getTickables(); + f.Beam({ notes: notesTop.slice(4, 8) }); + f.Beam({ notes: notesTop.slice(8, 10) }); + // Bottom Voice + score.voice([ + f.GhostNote({ duration: '2' }), + f.StaveNote({ keys: ['f/4'], stem_direction: -1, duration: '4' }), + f.GhostNote({ duration: '4' }), + f.StaveNote({ keys: ['e/4'], stem_direction: -1, duration: '4' }), + f.GhostNote({ duration: '8' }), + f.StaveNote({ keys: ['d/4'], stem_direction: -1, duration: '8' }).addModifier(f.Accidental({ type: '##' }), 0), + f.StaveNote({ keys: ['c/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4'], stem_direction: -1, duration: '8' }), + ], { time: '7/4' }); +}); +/** + * A ghost note is invisible, but takes up space on the stave corresponding to its duration. + * '4d' is a dotted quarter note, equivalent to a quarter + eighth note. + */ +const dotted = createTest((f, score) => { + const voice1 = score.voice([ + f.GhostNote({ duration: '4d' }), + f.StaveNote({ duration: '8', keys: ['f/5'], stem_direction: 1 }), + f.StaveNote({ duration: '4', keys: ['d/5'], stem_direction: 1 }), + f.StaveNote({ duration: '8', keys: ['c/5'], stem_direction: 1 }), + f.StaveNote({ duration: '16', keys: ['c/5'], stem_direction: 1 }), + f.StaveNote({ duration: '16', keys: ['d/5'], stem_direction: 1 }), + f.GhostNote({ duration: '2dd' }), + f.StaveNote({ duration: '8', keys: ['f/5'], stem_direction: 1 }), + ], { time: '8/4' }); + const voice2 = score.voice([ + f.StaveNote({ duration: '4', keys: ['f/4'], stem_direction: -1 }), + f.StaveNote({ duration: '8', keys: ['e/4'], stem_direction: -1 }), + f.StaveNote({ duration: '8', keys: ['d/4'], stem_direction: -1 }), + f.GhostNote({ duration: '4dd' }), + f.StaveNote({ duration: '16', keys: ['c/4'], stem_direction: -1 }), + f.StaveNote({ duration: '2', keys: ['c/4'], stem_direction: -1 }), + f.StaveNote({ duration: '4', keys: ['d/4'], stem_direction: -1 }), + f.StaveNote({ duration: '8', keys: ['f/4'], stem_direction: -1 }), + f.StaveNote({ duration: '8', keys: ['e/4'], stem_direction: -1 }), + ], { time: '8/4' }); + const notes1 = voice1.getTickables(); + const notes2 = voice2.getTickables(); + const addAccidental = (note, type) => note.addModifier(f.Accidental({ type }), 0); + addAccidental(notes1[1], 'bb'); + addAccidental(notes1[4], '#'); + addAccidental(notes1[7], 'n'); + addAccidental(notes2[0], '#'); + addAccidental(notes2[4], 'b'); + addAccidental(notes2[5], '#'); + addAccidental(notes2[7], 'n'); + f.Beam({ notes: notes1.slice(3, 6) }); + f.Beam({ notes: notes2.slice(1, 3) }); + f.Beam({ notes: notes2.slice(7, 9) }); +}); +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(GhostNoteTests); + + + +/***/ }), + +/***/ "./tests/glyphnote_tests.ts": +/*!**********************************!*\ + !*** ./tests/glyphnote_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GlyphNoteTests": () => (/* binding */ GlyphNoteTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_chordsymbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _src_glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/glyph */ "./src/glyph.ts"); +/* harmony import */ var _src_registry__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/registry */ "./src/registry.ts"); +/* harmony import */ var _src_staveconnector__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/staveconnector */ "./src/staveconnector.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// GlyphNote Tests + + + + + +const GlyphNoteTests = { + Start() { + QUnit.module('GlyphNote'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('GlyphNote with ChordSymbols', chordChanges, { debug: false, noPadding: false }); + run('GlyphNote Positioning', basic, { debug: false, noPadding: false }); + run('GlyphNote No Stave Padding', basic, { debug: true, noPadding: true }); + run('GlyphNote RepeatNote', repeatNote, { debug: false, noPadding: true }); + }, +}; +function chordChanges(options) { + _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry.enableDefaultRegistry(new _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry()); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 300, 200); + const system = f.System({ + x: 50, + width: 250, + debugFormatter: options.params.debug, + noPadding: options.params.noPadding, + details: { alpha: options.params.alpha }, + }); + const score = f.EasyScore(); + const notes = [ + f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: 'q' }), + f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: 'q' }), + f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: 'q' }), + f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: 'q' }), + ]; + const chord1 = f + .ChordSymbol({ reportWidth: false }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('(#11b9)', { symbolModifier: _src_chordsymbol__WEBPACK_IMPORTED_MODULE_1__.ChordSymbol.symbolModifiers.SUPERSCRIPT }); + const chord2 = f + .ChordSymbol() + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('#11', { symbolModifier: _src_chordsymbol__WEBPACK_IMPORTED_MODULE_1__.ChordSymbol.symbolModifiers.SUPERSCRIPT }) + .addGlyphOrText('b9', { symbolModifier: _src_chordsymbol__WEBPACK_IMPORTED_MODULE_1__.ChordSymbol.symbolModifiers.SUBSCRIPT }); + notes[0].addModifier(chord1, 0); + notes[2].addModifier(chord2, 0); + const voice = score.voice(notes); + system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug }); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_4__.StaveConnector.type.BRACKET); + f.draw(); + _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry.disableDefaultRegistry(); + options.assert.ok(true); +} +function basic(options) { + _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry.enableDefaultRegistry(new _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry()); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 300, 400); + const system = f.System({ + x: 50, + width: 250, + debugFormatter: options.params.debug, + noPadding: options.params.noPadding, + details: { alpha: options.params.alpha }, + }); + const score = f.EasyScore(); + const newVoice = (notes) => score.voice(notes, { time: '1/4' }); + const newStave = (voice) => system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug }); + const voices = [ + [f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeat1Bar', 40), { duration: 'q' }, { line: 4 })], + [f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeat2Bars', 40), { duration: 'q', align_center: true })], + [ + f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: '16' }), + f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: '16' }), + f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeat4Bars', 40), { duration: '16' }), + f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: '16' }), + ], + ]; + voices.map(newVoice).forEach(newStave); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_4__.StaveConnector.type.BRACKET); + f.draw(); + _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry.disableDefaultRegistry(); + options.assert.ok(true); +} +function repeatNote(options) { + _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry.enableDefaultRegistry(new _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry()); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 300, 500); + const system = f.System({ + x: 50, + width: 250, + debugFormatter: options.params.debug, + noPadding: options.params.noPadding, + details: { alpha: options.params.alpha }, + }); + const score = f.EasyScore(); + const createVoice = (notes) => score.voice(notes, { time: '1/4' }); + const addStaveWithVoice = (voice) => system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug }); + const voices = [ + [f.RepeatNote('1')], + [f.RepeatNote('2')], + [f.RepeatNote('4')], + [ + f.RepeatNote('slash', { duration: '16' }), + f.RepeatNote('slash', { duration: '16' }), + f.RepeatNote('slash', { duration: '16' }), + f.RepeatNote('slash', { duration: '16' }), + ], + ]; + voices.map(createVoice).forEach(addStaveWithVoice); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_4__.StaveConnector.type.BRACKET); + f.draw(); + _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry.disableDefaultRegistry(); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(GlyphNoteTests); + + + +/***/ }), + +/***/ "./tests/gracenote_tests.ts": +/*!**********************************!*\ + !*** ./tests/gracenote_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GraceNoteTests": () => (/* binding */ GraceNoteTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); +/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); +/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// GraceNote Tests +// TODO: In the 'stem' test (aka Grace Note Stem › SVG + Petaluma in flow.html), the Petaluma note heads are not scaled down properly. + + + + + + +const GraceNoteTests = { + Start() { + QUnit.module('Grace Notes'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Grace Note Basic', basic); + run('With Articulation and Annotation on Parent Note', graceNoteModifiers); + run('Grace Note Basic with Slurs', basicSlurred); + run('Grace Note Stem', stem); + run('Grace Note Stem with Beams 1', stemWithBeamed, { + keys1: ['g/4'], + stemDirection1: 1, + keys2: ['d/5'], + stemDirection2: -1, + }); + run('Grace Note Stem with Beams 2', stemWithBeamed, { + keys1: ['a/3'], + stemDirection1: 1, + keys2: ['a/5'], + stemDirection2: -1, + }); + run('Grace Note Stem with Beams 3', stemWithBeamed, { + keys1: ['c/4'], + stemDirection1: 1, + keys2: ['c/6'], + stemDirection2: -1, + }); + run('Grace Note Slash', slash); + run('Grace Note Slash with Beams', slashWithBeams); + run('Grace Notes Multiple Voices', multipleVoices); + run('Grace Notes Multiple Voices Multiple Draws', multipleVoicesMultipleDraws); + }, +}; +function basic(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + const gracenotes = [ + { keys: ['e/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['g/4'], duration: '32' }, + { keys: ['a/4'], duration: '32' }, + ].map(f.GraceNote.bind(f)); + const gracenotes1 = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f)); + const gracenotes2 = [{ keys: ['b/4'], duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes3 = [ + { keys: ['e/4'], duration: '8' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['e/4', 'g/4'], duration: '8' }, + { keys: ['a/4'], duration: '32' }, + { keys: ['b/4'], duration: '32' }, + ].map(f.GraceNote.bind(f)); + const gracenotes4 = [ + { keys: ['g/4'], duration: '8' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + ].map(f.GraceNote.bind(f)); + gracenotes[1].addModifier(f.Accidental({ type: '##' }), 0); + gracenotes3[3].addModifier(f.Accidental({ type: 'bb' }), 0); + _src_dot__WEBPACK_IMPORTED_MODULE_4__.Dot.buildAndAttach([gracenotes4[0]], { all: true }); + const notes = [ + f + .StaveNote({ keys: ['b/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }).beamNotes(), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.GraceNoteGroup({ notes: gracenotes1 }).beamNotes(), 0), + f + .StaveNote({ keys: ['c/5', 'd/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0), + f + .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0), + f + .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0), + ]; + const voice = f.Voice().setStrict(false).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteBasic'); +} +function graceNoteModifiers(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + const gracenotes = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f)); + const notes = [ + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a-').setPosition(3), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a-').setPosition(3), 0) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#')), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a-').setPosition(3), 0) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('words')), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a-').setPosition(3), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a>').setPosition(3), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a-').setPosition(3), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a>').setPosition(3), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a@a').setPosition(3), 0), + ]; + const voice = f.Voice().setStrict(false).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteModifiers'); +} +function basicSlurred(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + const gracenotes0 = [ + { keys: ['e/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['g/4'], duration: '32' }, + { keys: ['a/4'], duration: '32' }, + ].map(f.GraceNote.bind(f)); + const gracenotes1 = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f)); + const gracenotes2 = [{ keys: ['b/4'], duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes3 = [ + { keys: ['e/4'], duration: '8' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['e/4', 'g/4'], duration: '8' }, + { keys: ['a/4'], duration: '32' }, + { keys: ['b/4'], duration: '32' }, + ].map(f.GraceNote.bind(f)); + const gracenotes4 = [ + { keys: ['a/4'], duration: '8' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + ].map(f.GraceNote.bind(f)); + gracenotes0[1].addModifier(f.Accidental({ type: '#' }), 0); + gracenotes3[3].addModifier(f.Accidental({ type: 'b' }), 0); + gracenotes3[2].addModifier(f.Accidental({ type: 'n' }), 0); + _src_dot__WEBPACK_IMPORTED_MODULE_4__.Dot.buildAndAttach([gracenotes4[0]], { all: true }); + const notes = [ + f + .StaveNote({ keys: ['b/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes0, slur: true }).beamNotes(), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.GraceNoteGroup({ notes: gracenotes1, slur: true }).beamNotes(), 0), + f + .StaveNote({ keys: ['c/5', 'd/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes2, slur: true }).beamNotes(), 0), + f + .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes3, slur: true }).beamNotes(), 0), + f + .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes4, slur: true }).beamNotes(), 0), + f.StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }), + ]; + const voice = f.Voice().setStrict(false).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteBasic'); +} +/** + * Helper function for three tests below: stem, stemWithBeamed, slash. + */ +const createNoteForStemTest = (duration, noteBuilder, keys, stem_direction, slash = false) => { + const struct = { duration, slash }; + struct.stem_direction = stem_direction; + struct.keys = keys; + return noteBuilder(struct); +}; +// Used in three tests below. +const durationsForStemTest = ['8', '16', '32', '64', '128']; +function stem(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + function createNotes(noteBuilder, keys, stem_direction) { + return durationsForStemTest.map((duration) => createNoteForStemTest(duration, noteBuilder, keys, stem_direction)); + } + function createNoteBlock(keys, stem_direction) { + const staveNotes = createNotes(f.StaveNote.bind(f), keys, stem_direction); + const gracenotes = createNotes(f.GraceNote.bind(f), keys, stem_direction); + // Add a bunch of GraceNotes in front of the first StaveNote. + staveNotes[0].addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0); + return staveNotes; + } + const voice = f.Voice().setStrict(false); + voice.addTickables(createNoteBlock(['g/4'], 1)); + voice.addTickables(createNoteBlock(['d/5'], -1)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteStem'); +} +function stemWithBeamed(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + function createBeamedNotes(noteBuilder, keys, stem_direction, beams, isGrace = false, notesToBeam) { + const ret = []; + durationsForStemTest.map((duration) => { + const n0 = createNoteForStemTest(duration, noteBuilder, keys, stem_direction); + const n1 = createNoteForStemTest(duration, noteBuilder, keys, stem_direction); + ret.push(n0); + ret.push(n1); + if (notesToBeam) { + notesToBeam.push([n0, n1]); + } + if (!isGrace) { + beams.push(f.Beam({ notes: [n0, n1] })); + } + }); + return ret; + } + function createBeamedNoteBlock(keys, stem_direction, beams) { + const bnotes = createBeamedNotes(f.StaveNote.bind(f), keys, stem_direction, beams); + const notesToBeam = []; + const gracenotes = createBeamedNotes(f.GraceNote.bind(f), keys, stem_direction, beams, true, notesToBeam); + const graceNoteGroup = f.GraceNoteGroup({ notes: gracenotes }); + notesToBeam.map(graceNoteGroup.beamNotes.bind(graceNoteGroup)); + bnotes[0].addModifier(graceNoteGroup, 0); + return bnotes; + } + const beams = []; + const voice = f.Voice().setStrict(false); + voice.addTickables(createBeamedNoteBlock(options.params.keys1, options.params.stemDirection1, beams)); + voice.addTickables(createBeamedNoteBlock(options.params.keys2, options.params.stemDirection2, beams)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteStem'); +} +function slash(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + function createNotes(noteT, keys, stem_direction, slash) { + return durationsForStemTest.map((d) => createNoteForStemTest(d, noteT, keys, stem_direction, slash)); + } + function createNoteBlock(keys, stem_direction) { + const notes = [f.StaveNote({ keys: ['f/4'], stem_direction, duration: '16' })]; + let graceNotes = createNotes(f.GraceNote.bind(f), keys, stem_direction, true); + const duration = '8'; + const gns = [ + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, + ].map(f.GraceNote.bind(f)); + const notesToBeam = []; + notesToBeam.push([gns[0], gns[1], gns[2]]); + notesToBeam.push([gns[3], gns[4], gns[5]]); + notesToBeam.push([gns[6], gns[7], gns[8]]); + // Merge the two GraceNote[]. + graceNotes = graceNotes.concat(gns); + const graceNoteGroup = f.GraceNoteGroup({ notes: graceNotes }); + notesToBeam.forEach((notes) => graceNoteGroup.beamNotes(notes)); + notes[0].addModifier(graceNoteGroup, 0); + return notes; + } + const voice = f.Voice().setStrict(false); + voice.addTickables(createNoteBlock(['d/4', 'a/4'], 1)); + voice.addTickables(createNoteBlock(['d/4', 'a/4'], -1)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteSlash'); +} +function slashWithBeams(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 130); + const stave = f.Stave({ x: 10, y: 10, width: 750 }); + function createNoteBlock(keys, stem_direction) { + const notes = [f.StaveNote({ keys: ['f/4'], stem_direction, duration: '16' })]; + let allGraceNotes = []; + const graceNotesToBeam = []; + ['8', '16', '32', '64'].forEach(function (duration) { + const graceNotes = [ + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: false }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: false }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: false }, + ].map(f.GraceNote.bind(f)); + graceNotesToBeam.push([graceNotes[0], graceNotes[1]]); + graceNotesToBeam.push([graceNotes[2], graceNotes[3]]); + graceNotesToBeam.push([graceNotes[4], graceNotes[5]]); + allGraceNotes = allGraceNotes.concat(graceNotes); + }); + const graceNoteGroup = f.GraceNoteGroup({ notes: allGraceNotes }); + graceNotesToBeam.forEach((g) => graceNoteGroup.beamNotes(g)); + notes[0].addModifier(graceNoteGroup, 0); + return notes; + } + const voice = f.Voice().setStrict(false); + voice.addTickables(createNoteBlock(['d/4', 'a/4'], 1)); + voice.addTickables(createNoteBlock(['d/4', 'a/4'], -1)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteSlashWithBeams'); +} +function multipleVoices(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 140); + const stave = f.Stave({ x: 10, y: 10, width: 450 }); + const notes = [ + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['d/5'], stem_direction: 1, duration: '16' }, + { keys: ['c/5'], stem_direction: 1, duration: '16' }, + { keys: ['c/5'], stem_direction: 1, duration: '16' }, + { keys: ['d/5'], stem_direction: 1, duration: '16' }, + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['e/5'], stem_direction: 1, duration: '16' }, + ].map(f.StaveNote.bind(f)); + const notes2 = [ + { keys: ['f/4'], stem_direction: -1, duration: '16' }, + { keys: ['e/4'], stem_direction: -1, duration: '16' }, + { keys: ['d/4'], stem_direction: -1, duration: '16' }, + { keys: ['c/4'], stem_direction: -1, duration: '16' }, + { keys: ['c/4'], stem_direction: -1, duration: '16' }, + { keys: ['d/4'], stem_direction: -1, duration: '16' }, + { keys: ['f/4'], stem_direction: -1, duration: '16' }, + { keys: ['e/4'], stem_direction: -1, duration: '16' }, + ].map(f.StaveNote.bind(f)); + const gracenotes1 = [{ keys: ['b/4'], stem_direction: 1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes2 = [{ keys: ['f/4'], stem_direction: -1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes3 = [ + { keys: ['f/4'], duration: '32', stem_direction: -1 }, + { keys: ['e/4'], duration: '32', stem_direction: -1 }, + ].map(f.GraceNote.bind(f)); + const gracenotes4 = [ + { keys: ['f/5'], duration: '32', stem_direction: 1 }, + { keys: ['e/5'], duration: '32', stem_direction: 1 }, + { keys: ['e/5'], duration: '8', stem_direction: 1 }, + ].map(f.GraceNote.bind(f)); + gracenotes2[0].setStemDirection(-1); + gracenotes2[0].addModifier(f.Accidental({ type: '#' }), 0); + notes[1].addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0); + notes[3].addModifier(f.GraceNoteGroup({ notes: gracenotes1 }), 0); + notes2[1].addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0); + notes2[5].addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0); + const voice = f.Voice().setStrict(false).addTickables(notes); + const voice2 = f.Voice().setStrict(false).addTickables(notes2); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Beam({ notes: notes2.slice(0, 4) }); + f.Beam({ notes: notes2.slice(4, 8) }); + f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave); + f.draw(); + options.assert.ok(true, 'Sixteenth Test'); +} +function multipleVoicesMultipleDraws(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 140); + const stave = f.Stave({ x: 10, y: 10, width: 450 }); + const notes = [ + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['d/5'], stem_direction: 1, duration: '16' }, + { keys: ['c/5'], stem_direction: 1, duration: '16' }, + { keys: ['c/5'], stem_direction: 1, duration: '16' }, + { keys: ['d/5'], stem_direction: 1, duration: '16' }, + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['e/5'], stem_direction: 1, duration: '16' }, + ].map(f.StaveNote.bind(f)); + const notes2 = [ + { keys: ['f/4'], stem_direction: -1, duration: '16' }, + { keys: ['e/4'], stem_direction: -1, duration: '16' }, + { keys: ['d/4'], stem_direction: -1, duration: '16' }, + { keys: ['c/4'], stem_direction: -1, duration: '16' }, + { keys: ['c/4'], stem_direction: -1, duration: '16' }, + { keys: ['d/4'], stem_direction: -1, duration: '16' }, + { keys: ['f/4'], stem_direction: -1, duration: '16' }, + { keys: ['e/4'], stem_direction: -1, duration: '16' }, + ].map(f.StaveNote.bind(f)); + const gracenotes1 = [{ keys: ['b/4'], stem_direction: 1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes2 = [{ keys: ['f/4'], stem_direction: -1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes3 = [ + { keys: ['f/4'], duration: '32', stem_direction: -1 }, + { keys: ['e/4'], duration: '32', stem_direction: -1 }, + ].map(f.GraceNote.bind(f)); + const gracenotes4 = [ + { keys: ['f/5'], duration: '32', stem_direction: 1 }, + { keys: ['e/5'], duration: '32', stem_direction: 1 }, + { keys: ['e/5'], duration: '8', stem_direction: 1 }, + ].map(f.GraceNote.bind(f)); + gracenotes2[0].setStemDirection(-1); + gracenotes2[0].addModifier(f.Accidental({ type: '#' }), 0); + notes[1].addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0); + notes[3].addModifier(f.GraceNoteGroup({ notes: gracenotes1 }), 0); + notes2[1].addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0); + notes2[5].addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0); + const voice = f.Voice().setStrict(false).addTickables(notes); + const voice2 = f.Voice().setStrict(false).addTickables(notes2); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Beam({ notes: notes2.slice(0, 4) }); + f.Beam({ notes: notes2.slice(4, 8) }); + f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave); + f.draw(); + f.draw(); + options.assert.ok(true, 'Seventeenth Test'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(GraceNoteTests); + + + +/***/ }), + +/***/ "./tests/gracetabnote_tests.ts": +/*!*************************************!*\ + !*** ./tests/gracetabnote_tests.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GraceTabNoteTests": () => (/* binding */ GraceTabNoteTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _src_gracetabnote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/gracetabnote */ "./src/gracetabnote.ts"); +/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// GraceTabNote Tests + + + + + + + + +const GraceTabNoteTests = { + Start() { + QUnit.module('Grace Tab Notes'); + // TODO: Rename tests below since it is redundant with the module name. + // Remove "Grace Tab Note " + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Grace Tab Note Simple', simple); + run('Grace Tab Note Slurred', slurred); + }, +}; +// Helper functions to create TabNote and GraceTabNote objects. +const tabNote = (noteStruct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_5__.TabNote(noteStruct); +const graceTabNote = (noteStruct) => new _src_gracetabnote__WEBPACK_IMPORTED_MODULE_4__.GraceTabNote(noteStruct); +/** + * Helper function to build a RenderContext and TabStave. + */ +function setupContext(opts, ctxBuilder) { + const context = ctxBuilder(opts.elementId, 350, 140); + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_6__.TabStave(10, 10, 350).addTabGlyph().setContext(context).draw(); + return { context, stave }; +} +function simple(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder); + const note0 = tabNote({ positions: [{ str: 4, fret: 6 }], duration: '4' }); + const note1 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: '4' }); + const note2 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: '4' }); + const note3 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: '4' }); + const gracenote_group0 = [{ positions: [{ str: 4, fret: 'x' }], duration: '8' }]; + const gracenote_group1 = [ + { positions: [{ str: 4, fret: 9 }], duration: '16' }, + { positions: [{ str: 4, fret: 10 }], duration: '16' }, + ]; + const gracenote_group2 = [{ positions: [{ str: 4, fret: 9 }], duration: '8' }]; + const gracenote_group3 = [ + { positions: [{ str: 5, fret: 10 }], duration: '8' }, + { positions: [{ str: 4, fret: 9 }], duration: '8' }, + ]; + const gracenotes0 = gracenote_group0.map(graceTabNote); + const gracenotes1 = gracenote_group1.map(graceTabNote); + const gracenotes2 = gracenote_group2.map(graceTabNote); + gracenotes2[0].setGhost(true); + const gracenotes3 = gracenote_group3.map(graceTabNote); + note0.addModifier(new _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup(gracenotes0), 0); + note1.addModifier(new _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup(gracenotes1), 0); + note2.addModifier(new _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup(gracenotes2), 0); + note3.addModifier(new _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup(gracenotes3), 0); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4); + voice.addTickables([note0, note1, note2, note3]); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).format([voice], 250); + voice.draw(context, stave); + options.assert.ok(true, 'Simple Test'); +} +function slurred(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder); + const note0 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: 'h' }); + const note1 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: 'h' }); + const gracenote_group0 = [ + { positions: [{ str: 4, fret: 9 }], duration: '8' }, + { positions: [{ str: 4, fret: 10 }], duration: '8' }, + ]; + const gracenote_group1 = [ + { positions: [{ str: 4, fret: 7 }], duration: '16' }, + { positions: [{ str: 4, fret: 8 }], duration: '16' }, + { positions: [{ str: 4, fret: 9 }], duration: '16' }, + ]; + const gracenotes0 = gracenote_group0.map(graceTabNote); + const gracenotes1 = gracenote_group1.map(graceTabNote); + note0.addModifier(new _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup(gracenotes0, true), 0); + note1.addModifier(new _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup(gracenotes1, true), 0); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4); + voice.addTickables([note0, note1]); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).format([voice], 200); + voice.draw(context, stave); + options.assert.ok(true, 'Slurred Test'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(GraceTabNoteTests); + + + +/***/ }), + +/***/ "./tests/index.ts": +/*!************************!*\ + !*** ./tests/index.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AccidentalTests": () => (/* reexport safe */ _accidental_tests__WEBPACK_IMPORTED_MODULE_0__.AccidentalTests), +/* harmony export */ "AnnotationTests": () => (/* reexport safe */ _annotation_tests__WEBPACK_IMPORTED_MODULE_1__.AnnotationTests), +/* harmony export */ "ArticulationTests": () => (/* reexport safe */ _articulation_tests__WEBPACK_IMPORTED_MODULE_2__.ArticulationTests), +/* harmony export */ "AutoBeamFormattingTests": () => (/* reexport safe */ _auto_beam_formatting_tests__WEBPACK_IMPORTED_MODULE_3__.AutoBeamFormattingTests), +/* harmony export */ "BachDemoTests": () => (/* reexport safe */ _bach_tests__WEBPACK_IMPORTED_MODULE_4__.BachDemoTests), +/* harmony export */ "BarlineTests": () => (/* reexport safe */ _barline_tests__WEBPACK_IMPORTED_MODULE_5__.BarlineTests), +/* harmony export */ "BeamTests": () => (/* reexport safe */ _beam_tests__WEBPACK_IMPORTED_MODULE_6__.BeamTests), +/* harmony export */ "BendTests": () => (/* reexport safe */ _bend_tests__WEBPACK_IMPORTED_MODULE_7__.BendTests), +/* harmony export */ "BoundingBoxTests": () => (/* reexport safe */ _boundingbox_tests__WEBPACK_IMPORTED_MODULE_8__.BoundingBoxTests), +/* harmony export */ "ChordSymbolTests": () => (/* reexport safe */ _chordsymbol_tests__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolTests), +/* harmony export */ "ClefKeySignatureTests": () => (/* reexport safe */ _key_clef_tests__WEBPACK_IMPORTED_MODULE_23__.ClefKeySignatureTests), +/* harmony export */ "ClefTests": () => (/* reexport safe */ _clef_tests__WEBPACK_IMPORTED_MODULE_10__.ClefTests), +/* harmony export */ "CrossBeamTests": () => (/* reexport safe */ _crossbeam_tests__WEBPACK_IMPORTED_MODULE_11__.CrossBeamTests), +/* harmony export */ "CurveTests": () => (/* reexport safe */ _curve_tests__WEBPACK_IMPORTED_MODULE_12__.CurveTests), +/* harmony export */ "DotTests": () => (/* reexport safe */ _dot_tests__WEBPACK_IMPORTED_MODULE_13__.DotTests), +/* harmony export */ "EasyScoreTests": () => (/* reexport safe */ _easyscore_tests__WEBPACK_IMPORTED_MODULE_14__.EasyScoreTests), +/* harmony export */ "FactoryTests": () => (/* reexport safe */ _factory_tests__WEBPACK_IMPORTED_MODULE_15__.FactoryTests), +/* harmony export */ "FontTests": () => (/* reexport safe */ _font_tests__WEBPACK_IMPORTED_MODULE_16__.FontTests), +/* harmony export */ "FormatterTests": () => (/* reexport safe */ _formatter_tests__WEBPACK_IMPORTED_MODULE_17__.FormatterTests), +/* harmony export */ "FractionTests": () => (/* reexport safe */ _fraction_tests__WEBPACK_IMPORTED_MODULE_18__.FractionTests), +/* harmony export */ "GhostNoteTests": () => (/* reexport safe */ _ghostnote_tests__WEBPACK_IMPORTED_MODULE_19__.GhostNoteTests), +/* harmony export */ "GlyphNoteTests": () => (/* reexport safe */ _glyphnote_tests__WEBPACK_IMPORTED_MODULE_20__.GlyphNoteTests), +/* harmony export */ "GraceNoteTests": () => (/* reexport safe */ _gracenote_tests__WEBPACK_IMPORTED_MODULE_21__.GraceNoteTests), +/* harmony export */ "GraceTabNoteTests": () => (/* reexport safe */ _gracetabnote_tests__WEBPACK_IMPORTED_MODULE_22__.GraceTabNoteTests), +/* harmony export */ "KeyManagerTests": () => (/* reexport safe */ _keymanager_tests__WEBPACK_IMPORTED_MODULE_24__.KeyManagerTests), +/* harmony export */ "KeySignatureTests": () => (/* reexport safe */ _keysignature_tests__WEBPACK_IMPORTED_MODULE_25__.KeySignatureTests), +/* harmony export */ "ModifierContextTests": () => (/* reexport safe */ _modifier_tests__WEBPACK_IMPORTED_MODULE_26__.ModifierContextTests), +/* harmony export */ "MultiMeasureRestTests": () => (/* reexport safe */ _multimeasurerest_tests__WEBPACK_IMPORTED_MODULE_27__.MultiMeasureRestTests), +/* harmony export */ "MusicTests": () => (/* reexport safe */ _music_tests__WEBPACK_IMPORTED_MODULE_28__.MusicTests), +/* harmony export */ "NoteHeadTests": () => (/* reexport safe */ _notehead_tests__WEBPACK_IMPORTED_MODULE_29__.NoteHeadTests), +/* harmony export */ "NoteSubGroupTests": () => (/* reexport safe */ _notesubgroup_tests__WEBPACK_IMPORTED_MODULE_30__.NoteSubGroupTests), +/* harmony export */ "OffscreenCanvasTests": () => (/* reexport safe */ _offscreencanvas_tests__WEBPACK_IMPORTED_MODULE_31__.OffscreenCanvasTests), +/* harmony export */ "OrnamentTests": () => (/* reexport safe */ _ornament_tests__WEBPACK_IMPORTED_MODULE_32__.OrnamentTests), +/* harmony export */ "ParserTests": () => (/* reexport safe */ _parser_tests__WEBPACK_IMPORTED_MODULE_33__.ParserTests), +/* harmony export */ "PedalMarkingTests": () => (/* reexport safe */ _pedalmarking_tests__WEBPACK_IMPORTED_MODULE_34__.PedalMarkingTests), +/* harmony export */ "PercussionTests": () => (/* reexport safe */ _percussion_tests__WEBPACK_IMPORTED_MODULE_35__.PercussionTests), +/* harmony export */ "RegistryTests": () => (/* reexport safe */ _registry_tests__WEBPACK_IMPORTED_MODULE_36__.RegistryTests), +/* harmony export */ "RendererTests": () => (/* reexport safe */ _renderer_tests__WEBPACK_IMPORTED_MODULE_37__.RendererTests), +/* harmony export */ "RestsTests": () => (/* reexport safe */ _rests_tests__WEBPACK_IMPORTED_MODULE_38__.RestsTests), +/* harmony export */ "RhythmTests": () => (/* reexport safe */ _rhythm_tests__WEBPACK_IMPORTED_MODULE_39__.RhythmTests), +/* harmony export */ "StaveConnectorTests": () => (/* reexport safe */ _staveconnector_tests__WEBPACK_IMPORTED_MODULE_41__.StaveConnectorTests), +/* harmony export */ "StaveHairpinTests": () => (/* reexport safe */ _stavehairpin_tests__WEBPACK_IMPORTED_MODULE_42__.StaveHairpinTests), +/* harmony export */ "StaveLineTests": () => (/* reexport safe */ _staveline_tests__WEBPACK_IMPORTED_MODULE_43__.StaveLineTests), +/* harmony export */ "StaveModifierTests": () => (/* reexport safe */ _stavemodifier_tests__WEBPACK_IMPORTED_MODULE_44__.StaveModifierTests), +/* harmony export */ "StaveNoteTests": () => (/* reexport safe */ _stavenote_tests__WEBPACK_IMPORTED_MODULE_45__.StaveNoteTests), +/* harmony export */ "StaveTests": () => (/* reexport safe */ _stave_tests__WEBPACK_IMPORTED_MODULE_40__.StaveTests), +/* harmony export */ "StaveTieTests": () => (/* reexport safe */ _stavetie_tests__WEBPACK_IMPORTED_MODULE_46__.StaveTieTests), +/* harmony export */ "StringNumberTests": () => (/* reexport safe */ _stringnumber_tests__WEBPACK_IMPORTED_MODULE_47__.StringNumberTests), +/* harmony export */ "StrokesTests": () => (/* reexport safe */ _strokes_tests__WEBPACK_IMPORTED_MODULE_48__.StrokesTests), +/* harmony export */ "StyleTests": () => (/* reexport safe */ _style_tests__WEBPACK_IMPORTED_MODULE_49__.StyleTests), +/* harmony export */ "TabNoteTests": () => (/* reexport safe */ _tabnote_tests__WEBPACK_IMPORTED_MODULE_50__.TabNoteTests), +/* harmony export */ "TabSlideTests": () => (/* reexport safe */ _tabslide_tests__WEBPACK_IMPORTED_MODULE_51__.TabSlideTests), +/* harmony export */ "TabStaveTests": () => (/* reexport safe */ _tabstave_tests__WEBPACK_IMPORTED_MODULE_52__.TabStaveTests), +/* harmony export */ "TabTieTests": () => (/* reexport safe */ _tabtie_tests__WEBPACK_IMPORTED_MODULE_53__.TabTieTests), +/* harmony export */ "TextBracketTests": () => (/* reexport safe */ _textbracket_tests__WEBPACK_IMPORTED_MODULE_54__.TextBracketTests), +/* harmony export */ "TextFormatterTests": () => (/* reexport safe */ _textformatter_tests__WEBPACK_IMPORTED_MODULE_55__.TextFormatterTests), +/* harmony export */ "TextNoteTests": () => (/* reexport safe */ _textnote_tests__WEBPACK_IMPORTED_MODULE_56__.TextNoteTests), +/* harmony export */ "ThreeVoicesTests": () => (/* reexport safe */ _threevoice_tests__WEBPACK_IMPORTED_MODULE_57__.ThreeVoicesTests), +/* harmony export */ "TickContextTests": () => (/* reexport safe */ _tickcontext_tests__WEBPACK_IMPORTED_MODULE_58__.TickContextTests), +/* harmony export */ "TimeSignatureTests": () => (/* reexport safe */ _timesignature_tests__WEBPACK_IMPORTED_MODULE_59__.TimeSignatureTests), +/* harmony export */ "TremoloTests": () => (/* reexport safe */ _tremolo_tests__WEBPACK_IMPORTED_MODULE_60__.TremoloTests), +/* harmony export */ "TuningTests": () => (/* reexport safe */ _tuning_tests__WEBPACK_IMPORTED_MODULE_61__.TuningTests), +/* harmony export */ "TupletTests": () => (/* reexport safe */ _tuplet_tests__WEBPACK_IMPORTED_MODULE_62__.TupletTests), +/* harmony export */ "TypeGuardTests": () => (/* reexport safe */ _typeguard_tests__WEBPACK_IMPORTED_MODULE_63__.TypeGuardTests), +/* harmony export */ "UnisonTests": () => (/* reexport safe */ _unison_tests__WEBPACK_IMPORTED_MODULE_64__.UnisonTests), +/* harmony export */ "VFPrefixTests": () => (/* reexport safe */ _vf_prefix_tests__WEBPACK_IMPORTED_MODULE_65__.VFPrefixTests), +/* harmony export */ "VibratoBracketTests": () => (/* reexport safe */ _vibratobracket_tests__WEBPACK_IMPORTED_MODULE_67__.VibratoBracketTests), +/* harmony export */ "VibratoTests": () => (/* reexport safe */ _vibrato_tests__WEBPACK_IMPORTED_MODULE_66__.VibratoTests), +/* harmony export */ "VoiceTests": () => (/* reexport safe */ _voice_tests__WEBPACK_IMPORTED_MODULE_68__.VoiceTests) +/* harmony export */ }); +/* harmony import */ var _accidental_tests__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental_tests */ "./tests/accidental_tests.ts"); +/* harmony import */ var _annotation_tests__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation_tests */ "./tests/annotation_tests.ts"); +/* harmony import */ var _articulation_tests__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation_tests */ "./tests/articulation_tests.ts"); +/* harmony import */ var _auto_beam_formatting_tests__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./auto_beam_formatting_tests */ "./tests/auto_beam_formatting_tests.ts"); +/* harmony import */ var _bach_tests__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./bach_tests */ "./tests/bach_tests.ts"); +/* harmony import */ var _barline_tests__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./barline_tests */ "./tests/barline_tests.ts"); +/* harmony import */ var _beam_tests__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./beam_tests */ "./tests/beam_tests.ts"); +/* harmony import */ var _bend_tests__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./bend_tests */ "./tests/bend_tests.ts"); +/* harmony import */ var _boundingbox_tests__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./boundingbox_tests */ "./tests/boundingbox_tests.ts"); +/* harmony import */ var _chordsymbol_tests__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol_tests */ "./tests/chordsymbol_tests.ts"); +/* harmony import */ var _clef_tests__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef_tests */ "./tests/clef_tests.ts"); +/* harmony import */ var _crossbeam_tests__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./crossbeam_tests */ "./tests/crossbeam_tests.ts"); +/* harmony import */ var _curve_tests__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./curve_tests */ "./tests/curve_tests.ts"); +/* harmony import */ var _dot_tests__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./dot_tests */ "./tests/dot_tests.ts"); +/* harmony import */ var _easyscore_tests__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./easyscore_tests */ "./tests/easyscore_tests.ts"); +/* harmony import */ var _factory_tests__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./factory_tests */ "./tests/factory_tests.ts"); +/* harmony import */ var _font_tests__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./font_tests */ "./tests/font_tests.ts"); +/* harmony import */ var _formatter_tests__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./formatter_tests */ "./tests/formatter_tests.ts"); +/* harmony import */ var _fraction_tests__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./fraction_tests */ "./tests/fraction_tests.ts"); +/* harmony import */ var _ghostnote_tests__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./ghostnote_tests */ "./tests/ghostnote_tests.ts"); +/* harmony import */ var _glyphnote_tests__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./glyphnote_tests */ "./tests/glyphnote_tests.ts"); +/* harmony import */ var _gracenote_tests__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./gracenote_tests */ "./tests/gracenote_tests.ts"); +/* harmony import */ var _gracetabnote_tests__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./gracetabnote_tests */ "./tests/gracetabnote_tests.ts"); +/* harmony import */ var _key_clef_tests__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./key_clef_tests */ "./tests/key_clef_tests.ts"); +/* harmony import */ var _keymanager_tests__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./keymanager_tests */ "./tests/keymanager_tests.ts"); +/* harmony import */ var _keysignature_tests__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./keysignature_tests */ "./tests/keysignature_tests.ts"); +/* harmony import */ var _modifier_tests__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./modifier_tests */ "./tests/modifier_tests.ts"); +/* harmony import */ var _multimeasurerest_tests__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./multimeasurerest_tests */ "./tests/multimeasurerest_tests.ts"); +/* harmony import */ var _music_tests__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./music_tests */ "./tests/music_tests.ts"); +/* harmony import */ var _notehead_tests__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./notehead_tests */ "./tests/notehead_tests.ts"); +/* harmony import */ var _notesubgroup_tests__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./notesubgroup_tests */ "./tests/notesubgroup_tests.ts"); +/* harmony import */ var _offscreencanvas_tests__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./offscreencanvas_tests */ "./tests/offscreencanvas_tests.ts"); +/* harmony import */ var _ornament_tests__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./ornament_tests */ "./tests/ornament_tests.ts"); +/* harmony import */ var _parser_tests__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./parser_tests */ "./tests/parser_tests.ts"); +/* harmony import */ var _pedalmarking_tests__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./pedalmarking_tests */ "./tests/pedalmarking_tests.ts"); +/* harmony import */ var _percussion_tests__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./percussion_tests */ "./tests/percussion_tests.ts"); +/* harmony import */ var _registry_tests__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./registry_tests */ "./tests/registry_tests.ts"); +/* harmony import */ var _renderer_tests__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./renderer_tests */ "./tests/renderer_tests.ts"); +/* harmony import */ var _rests_tests__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./rests_tests */ "./tests/rests_tests.ts"); +/* harmony import */ var _rhythm_tests__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./rhythm_tests */ "./tests/rhythm_tests.ts"); +/* harmony import */ var _stave_tests__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./stave_tests */ "./tests/stave_tests.ts"); +/* harmony import */ var _staveconnector_tests__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./staveconnector_tests */ "./tests/staveconnector_tests.ts"); +/* harmony import */ var _stavehairpin_tests__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./stavehairpin_tests */ "./tests/stavehairpin_tests.ts"); +/* harmony import */ var _staveline_tests__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./staveline_tests */ "./tests/staveline_tests.ts"); +/* harmony import */ var _stavemodifier_tests__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./stavemodifier_tests */ "./tests/stavemodifier_tests.ts"); +/* harmony import */ var _stavenote_tests__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./stavenote_tests */ "./tests/stavenote_tests.ts"); +/* harmony import */ var _stavetie_tests__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./stavetie_tests */ "./tests/stavetie_tests.ts"); +/* harmony import */ var _stringnumber_tests__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stringnumber_tests */ "./tests/stringnumber_tests.ts"); +/* harmony import */ var _strokes_tests__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./strokes_tests */ "./tests/strokes_tests.ts"); +/* harmony import */ var _style_tests__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./style_tests */ "./tests/style_tests.ts"); +/* harmony import */ var _tabnote_tests__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./tabnote_tests */ "./tests/tabnote_tests.ts"); +/* harmony import */ var _tabslide_tests__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./tabslide_tests */ "./tests/tabslide_tests.ts"); +/* harmony import */ var _tabstave_tests__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./tabstave_tests */ "./tests/tabstave_tests.ts"); +/* harmony import */ var _tabtie_tests__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./tabtie_tests */ "./tests/tabtie_tests.ts"); +/* harmony import */ var _textbracket_tests__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./textbracket_tests */ "./tests/textbracket_tests.ts"); +/* harmony import */ var _textformatter_tests__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./textformatter_tests */ "./tests/textformatter_tests.ts"); +/* harmony import */ var _textnote_tests__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./textnote_tests */ "./tests/textnote_tests.ts"); +/* harmony import */ var _threevoice_tests__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./threevoice_tests */ "./tests/threevoice_tests.ts"); +/* harmony import */ var _tickcontext_tests__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./tickcontext_tests */ "./tests/tickcontext_tests.ts"); +/* harmony import */ var _timesignature_tests__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./timesignature_tests */ "./tests/timesignature_tests.ts"); +/* harmony import */ var _tremolo_tests__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./tremolo_tests */ "./tests/tremolo_tests.ts"); +/* harmony import */ var _tuning_tests__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./tuning_tests */ "./tests/tuning_tests.ts"); +/* harmony import */ var _tuplet_tests__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./tuplet_tests */ "./tests/tuplet_tests.ts"); +/* harmony import */ var _typeguard_tests__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./typeguard_tests */ "./tests/typeguard_tests.ts"); +/* harmony import */ var _unison_tests__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./unison_tests */ "./tests/unison_tests.ts"); +/* harmony import */ var _vf_prefix_tests__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./vf_prefix_tests */ "./tests/vf_prefix_tests.ts"); +/* harmony import */ var _vibrato_tests__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./vibrato_tests */ "./tests/vibrato_tests.ts"); +/* harmony import */ var _vibratobracket_tests__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./vibratobracket_tests */ "./tests/vibratobracket_tests.ts"); +/* harmony import */ var _voice_tests__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./voice_tests */ "./tests/voice_tests.ts"); +// vexflow-debug-with-tests.ts includes this module via: +// export * from '../../tests'; +// +// To add a new test module, add a new line: +// `export * from './xxxx_tests';` +// to this file that points to the new file `xxxx_tests.ts`. +// +// The test module needs to call VexFlowTests.register(...). +// For example, in annotation_tests.ts, the last two lines are: +// VexFlowTests.register(AnnotationTests); +// export { AnnotationTests }; +// +// In vexflow_test_helpers.ts: VexFlowTests.run() will run all registered tests. +// +// To iterate faster during development, you can comment out most of this file +// and focus on just testing the module(s) you are currently working on. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/***/ }), + +/***/ "./tests/key_clef_tests.ts": +/*!*********************************!*\ + !*** ./tests/key_clef_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ClefKeySignatureTests": () => (/* binding */ ClefKeySignatureTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/glyph */ "./src/glyph.ts"); +/* harmony import */ var _src_keysignature__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Clef Key Signature Tests +// + + + + +const ClefKeySignatureTests = { + Start() { + QUnit.module('Clef Keys'); + // Removed an identical 'Key Parser Test'. See keysignature_tests.ts. + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Major Key Clef Test', keys, { majorKeys: true }); + run('Minor Key Clef Test', keys, { majorKeys: false }); + run('Stave Helper', staveHelper); + }, +}; +const fontWidths = () => { + const glyphScale = 39; // default font scale + const sharpWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth('accidentalSharp', glyphScale) + 1; + const flatWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth('accidentalFlat', glyphScale) + 1; + const ksPadding = 10; // hard-coded in keysignature.ts + const naturalWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth('accidentalNatural', glyphScale) + 2; + const clefWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth('gClef', glyphScale); // widest clef + return { sharpWidth, flatWidth, naturalWidth, clefWidth, ksPadding }; +}; +function keys(options, contextBuilder) { + const w = fontWidths(); + const accidentalCount = 28; // total number in all the keys + const sharpTestWidth = accidentalCount * w.sharpWidth + w.clefWidth + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.defaultPadding + 6 * w.ksPadding; + const flatTestWidth = accidentalCount * w.flatWidth + w.clefWidth + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.defaultPadding + 6 * w.ksPadding; + const clefs = [ + 'treble', + 'soprano', + 'mezzo-soprano', + 'alto', + 'tenor', + 'baritone-f', + 'baritone-c', + 'bass', + 'french', + 'subbass', + 'percussion', + ]; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 20 + 80 * 2 * clefs.length); + const staves = []; + const keys = options.params.majorKeys ? _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MAJOR_KEYS : _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MINOR_KEYS; + let i; + let flat; + let sharp; + let keySig; + const yOffsetForFlatStaves = 10 + 80 * clefs.length; + for (i = 0; i < clefs.length; i++) { + // Render all the sharps first, then all the flats: + staves[i] = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 10 + 80 * i, flatTestWidth); + staves[i].addClef(clefs[i]); + staves[i + clefs.length] = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, yOffsetForFlatStaves + 10 + 80 * i, sharpTestWidth); + staves[i + clefs.length].addClef(clefs[i]); + for (flat = 0; flat < 8; flat++) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_2__.KeySignature(keys[flat]); + keySig.addToStave(staves[i]); + } + for (sharp = 8; sharp < keys.length; sharp++) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_2__.KeySignature(keys[sharp]); + keySig.addToStave(staves[i + clefs.length]); + } + } + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.formatBegModifiers(staves); + for (i = 0; i < clefs.length; i++) { + staves[i].setContext(ctx); + staves[i].draw(); + staves[i + clefs.length].setContext(ctx); + staves[i + clefs.length].draw(); + } + options.assert.ok(true, 'all pass'); +} +function staveHelper(options, contextBuilder) { + const w = fontWidths(); + const accidentalCount = 28; // total number in all the keys + const sharpTestWidth = accidentalCount * w.sharpWidth + w.clefWidth + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.defaultPadding + 7 * w.ksPadding; + const flatTestWidth = accidentalCount * w.flatWidth + w.clefWidth + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.defaultPadding + 7 * w.ksPadding; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 400); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 10, flatTestWidth); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 90, flatTestWidth); + const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 170, sharpTestWidth); + const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 260, sharpTestWidth); + const keys = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MAJOR_KEYS; + stave1.addClef('treble'); + stave2.addClef('bass'); + stave3.addClef('alto'); + stave4.addClef('tenor'); + for (let n = 0; n < 8; ++n) { + stave1.addKeySignature(keys[n]); + stave2.addKeySignature(keys[n]); + } + for (let i = 8; i < keys.length; ++i) { + stave3.addKeySignature(keys[i]); + stave4.addKeySignature(keys[i]); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + stave3.setContext(ctx); + stave3.draw(); + stave4.setContext(ctx); + stave4.draw(); + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ClefKeySignatureTests); + + + +/***/ }), + +/***/ "./tests/keymanager_tests.ts": +/*!***********************************!*\ + !*** ./tests/keymanager_tests.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "KeyManagerTests": () => (/* binding */ KeyManagerTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Music Key Management Tests +// +// TODO: KeyManager.getAccidental(key) specifies that the return value's .accidental property is string | undefined. +// However, we check it against null. + + +const KeyManagerTests = { + Start() { + QUnit.module('KeyManager'); + QUnit.test('Valid Notes', works); + QUnit.test('Select Notes', selectNotes); + }, +}; +function works(assert) { + const manager = new _src_index__WEBPACK_IMPORTED_MODULE_1__.KeyManager('g'); + assert.equal(manager.getAccidental('f').accidental, '#'); + manager.setKey('a'); + assert.equal(manager.getAccidental('c').accidental, '#'); + assert.equal(manager.getAccidental('a').accidental, null); + assert.equal(manager.getAccidental('f').accidental, '#'); + manager.setKey('A'); + assert.equal(manager.getAccidental('c').accidental, '#'); + assert.equal(manager.getAccidental('a').accidental, null); + assert.equal(manager.getAccidental('f').accidental, '#'); +} +function selectNotes(assert) { + const manager = new _src_index__WEBPACK_IMPORTED_MODULE_1__.KeyManager('f'); + assert.equal(manager.selectNote('bb').note, 'bb'); + assert.equal(manager.selectNote('bb').accidental, 'b'); + assert.equal(manager.selectNote('g').note, 'g'); + assert.equal(manager.selectNote('g').accidental, null); + assert.equal(manager.selectNote('b').note, 'b'); + assert.equal(manager.selectNote('b').accidental, null); + assert.equal(manager.selectNote('a#').note, 'bb'); + assert.equal(manager.selectNote('g#').note, 'g#'); + // Changes have no effect? + assert.equal(manager.selectNote('g#').note, 'g#'); + assert.equal(manager.selectNote('bb').note, 'bb'); + assert.equal(manager.selectNote('bb').accidental, 'b'); + assert.equal(manager.selectNote('g').note, 'g'); + assert.equal(manager.selectNote('g').accidental, null); + assert.equal(manager.selectNote('b').note, 'b'); + assert.equal(manager.selectNote('b').accidental, null); + assert.equal(manager.selectNote('a#').note, 'bb'); + assert.equal(manager.selectNote('g#').note, 'g#'); + // Changes should propagate + manager.reset(); + assert.equal(manager.selectNote('g#').change, true); + assert.equal(manager.selectNote('g#').change, false); + assert.equal(manager.selectNote('g').change, true); + assert.equal(manager.selectNote('g').change, false); + assert.equal(manager.selectNote('g#').change, true); + manager.reset(); + let note = manager.selectNote('bb'); + assert.equal(note.change, false); + assert.equal(note.accidental, 'b'); + note = manager.selectNote('g'); + assert.equal(note.change, false); + assert.equal(note.accidental, null); + note = manager.selectNote('g#'); + assert.equal(note.change, true); + assert.equal(note.accidental, '#'); + note = manager.selectNote('g'); + assert.equal(note.change, true); + assert.equal(note.accidental, null); + note = manager.selectNote('g'); + assert.equal(note.change, false); + assert.equal(note.accidental, null); + note = manager.selectNote('g#'); + assert.equal(note.change, true); + assert.equal(note.accidental, '#'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(KeyManagerTests); + + + +/***/ }), + +/***/ "./tests/keysignature_tests.ts": +/*!*************************************!*\ + !*** ./tests/keysignature_tests.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "KeySignatureTests": () => (/* binding */ KeySignatureTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/glyph */ "./src/glyph.ts"); +/* harmony import */ var _src_keysignature__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Key Signature Tests +// + + + + + + +const KeySignatureTests = { + Start() { + QUnit.module('KeySignature'); + QUnit.test('Key Parser Test', parser); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Major Key Test', majorKeys); + run('Minor Key Test', minorKeys); + run('Stave Helper', staveHelper); + run('Cancelled key test', majorKeysCanceled); + run('Cancelled key (for each clef) test', keysCanceledForEachClef); + run('Altered key test', majorKeysAltered); + run('End key with clef test', endKeyWithClef); + run('Key Signature Change test', changeKey); + run('Key Signature with/without clef symbol', clefKeySignature); + }, +}; +const fontWidths = () => { + const glyphScale = 39; // default font scale + const sharpWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.getWidth('accidentalSharp', glyphScale) + 1; + const flatWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.getWidth('accidentalFlat', glyphScale) + 1; + const naturalWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.getWidth('accidentalNatural', glyphScale) + 2; + const clefWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.getWidth('gClef', glyphScale) * 2; // widest clef + return { sharpWidth, flatWidth, naturalWidth, clefWidth }; +}; +function parser(assert) { + assert.expect(11); + function catchError(spec) { + assert.throws(() => _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature(spec), /BadKeySignature/); + } + catchError('asdf'); + catchError('D!'); + catchError('E#'); + catchError('D#'); + catchError('#'); + catchError('b'); + catchError('Kb'); + catchError('Fb'); + catchError('Dbm'); + catchError('B#m'); + _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('B'); + _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('C'); + _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('Fm'); + _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('Ab'); + _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('Abm'); + _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('F#'); + _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('G#m'); + assert.ok(true, 'all pass'); +} +function majorKeys(options, contextBuilder) { + const w = fontWidths(); + const accidentalCount = 28; // total number in all the keys + const casePadding = 10; // hard-coded in staveModifier + const testCases = 7; // all keys, but includes key of C + const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, flatTestWidth); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 90, sharpTestWidth); + const keys = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MAJOR_KEYS; + let keySig = null; + for (let i = 0; i < 8; ++i) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[i]); + keySig.addToStave(stave1); + } + for (let n = 8; n < keys.length; ++n) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[n]); + keySig.addToStave(stave2); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + options.assert.ok(true, 'all pass'); +} +function majorKeysCanceled(options, contextBuilder) { + const scale = 0.9; + const w = fontWidths(); + const flatPadding = 18; + const sharpPadding = 20; + const flatTestCases = 8; + const sharpTestCases = 7; + // magic numbers are the numbers of that symbol that appear in the test case + const sharpTestWidth = 28 * w.sharpWidth + 21 * w.naturalWidth + sharpPadding * sharpTestCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding + w.clefWidth; + const flatTestWidth = 28 * w.flatWidth + 28 * w.naturalWidth + flatPadding * flatTestCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding + w.clefWidth; + const eFlatTestWidth = 28 * w.flatWidth + 32 * w.naturalWidth + flatPadding * flatTestCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding + w.clefWidth; + const eSharpTestWidth = 28 * w.sharpWidth + 28 * w.naturalWidth + sharpPadding * sharpTestCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding + w.clefWidth; + const maxWidth = Math.max(Math.max(sharpTestWidth, flatTestWidth, Math.max(eSharpTestWidth, eFlatTestWidth))); + const ctx = contextBuilder(options.elementId, maxWidth + 100, 500); + ctx.scale(scale, scale); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, flatTestWidth).addClef('treble'); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 90, sharpTestWidth).addClef('treble'); + const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 170, eFlatTestWidth).addClef('treble'); + const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 250, eSharpTestWidth).addClef('treble'); + const keys = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MAJOR_KEYS; + let keySig = null; + let i; + let n; + for (i = 0; i < 8; ++i) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[i]); + keySig.cancelKey('Cb'); + keySig.setPadding(flatPadding); + keySig.addToStave(stave1); + } + for (n = 8; n < keys.length; ++n) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[n]); + keySig.cancelKey('C#'); + keySig.setPadding(sharpPadding); + keySig.addToStave(stave2); + } + for (i = 0; i < 8; ++i) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[i]); + keySig.cancelKey('E'); + keySig.setPadding(flatPadding); + keySig.addToStave(stave3); + } + for (n = 8; n < keys.length; ++n) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[n]); + keySig.cancelKey('Ab'); + keySig.setPadding(sharpPadding); + keySig.addToStave(stave4); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + stave3.setContext(ctx); + stave3.draw(); + stave4.setContext(ctx); + stave4.draw(); + options.assert.ok(true, 'all pass'); +} +function keysCanceledForEachClef(options, contextBuilder) { + const scale = 0.8; + const w = fontWidths(); + const keyPadding = 10; + const keys = ['C#', 'Cb']; + const flatsKey = [7, 14]; + const sharpsKey = [14, 7]; + const natsKey = [7, 7]; + const max = 21 * Math.max(w.sharpWidth, w.flatWidth) * 2 + keyPadding * 6 + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding + w.clefWidth; + const ctx = contextBuilder(options.elementId, max + 100, 380); + ctx.scale(scale, scale); + const x = 20; + let y = 20; + let tx = x; + ['bass', 'tenor', 'soprano', 'mezzo-soprano', 'baritone-f'].forEach(function (clef) { + keys.forEach((key, keyIx) => { + const cancelKey = keys[(keyIx + 1) % 2]; + const width = flatsKey[keyIx] * w.flatWidth + + natsKey[keyIx] * w.naturalWidth + + sharpsKey[keyIx] * w.sharpWidth + + keyPadding * 3 + + w.clefWidth + + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(tx, y, width); + stave.setClef(clef); + stave.addKeySignature(cancelKey); + stave.addKeySignature(key, cancelKey); + stave.addKeySignature(key); + stave.setContext(ctx).draw(); + tx += width; + }); + tx = x; + y += 80; + }); + options.assert.ok(true, 'all pass'); +} +function majorKeysAltered(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 780, 500); + ctx.scale(0.9, 0.9); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, 750).addClef('treble'); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 90, 750).addClef('treble'); + const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 170, 750).addClef('treble'); + const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 250, 750).addClef('treble'); + const keys = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MAJOR_KEYS; + let keySig = null; + let i; + let n; + for (i = 0; i < 8; ++i) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[i]); + keySig.alterKey(['bs', 'bs']); + keySig.setPadding(18); + keySig.addToStave(stave1); + } + for (n = 8; n < keys.length; ++n) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[n]); + keySig.alterKey(['+', '+', '+']); + keySig.setPadding(20); + keySig.addToStave(stave2); + } + for (i = 0; i < 8; ++i) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[i]); + keySig.alterKey(['n', 'bs', 'bb']); + keySig.setPadding(18); + keySig.addToStave(stave3); + } + for (n = 8; n < keys.length; ++n) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[n]); + keySig.alterKey(['++', '+', 'n', '+']); + keySig.setPadding(20); + keySig.addToStave(stave4); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + stave3.setContext(ctx); + stave3.draw(); + stave4.setContext(ctx); + stave4.draw(); + options.assert.ok(true, 'all pass'); +} +function minorKeys(options, contextBuilder) { + const accidentalCount = 28; // total number in all the keys + const w = fontWidths(); + const casePadding = 10; // hard-coded in staveModifier + const testCases = 7; // all keys, but includes key of C + const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, flatTestWidth); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 90, sharpTestWidth); + const keys = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MINOR_KEYS; + let keySig = null; + for (let i = 0; i < 8; ++i) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[i]); + keySig.addToStave(stave1); + } + for (let n = 8; n < keys.length; ++n) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[n]); + keySig.addToStave(stave2); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + options.assert.ok(true, 'all pass'); +} +function endKeyWithClef(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 200); + ctx.scale(0.9, 0.9); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, 350); + stave1 + .setKeySignature('G') + .setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) + .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_END) + .setClef('treble') + .addTimeSignature('4/4') + .setEndClef('bass') + .setEndKeySignature('Cb'); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 90, 350); + stave2.setKeySignature('Cb').setClef('bass').setEndClef('treble').setEndKeySignature('G'); + stave1.setContext(ctx).draw(); + stave2.setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function staveHelper(options, contextBuilder) { + const w = fontWidths(); + const accidentalCount = 28; // total number in all the keys + const casePadding = 10; // hard-coded in staveModifier + const testCases = 7; // all keys, but includes key of C + const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, flatTestWidth); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 90, sharpTestWidth); + const keys = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MAJOR_KEYS; + for (let i = 0; i < 8; ++i) { + stave1.addKeySignature(keys[i]); + } + for (let n = 8; n < keys.length; ++n) { + stave2.addKeySignature(keys[n]); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + options.assert.ok(true, 'all pass'); +} +function changeKey(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 900); + // The previous code was buggy: f.Stave(10, 10, 800), even though Factory.Stave() only accepts 1 argument. + const stave = f.Stave({ x: 10, y: 10, width: 800 }).addClef('treble').addTimeSignature('C|'); + const voice = f + .Voice() + .setStrict(false) + .addTickables([ + f.KeySigNote({ key: 'Bb' }), + f.StaveNote({ keys: ['c/4'], duration: '1' }), + f.BarNote(), + f.KeySigNote({ key: 'D', cancelKey: 'Bb' }), + f.StaveNote({ keys: ['c/4'], duration: '1' }), + f.BarNote(), + f.KeySigNote({ key: 'Bb' }), + f.StaveNote({ keys: ['c/4'], duration: '1' }), + f.BarNote(), + f.KeySigNote({ key: 'D', alterKey: ['b', 'n'] }), + f.StaveNote({ keys: ['c/4'], duration: '1' }), + ]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'all pass'); +} +function clefKeySignature(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 900); + const stave = f.Stave({ x: 10, y: 10, width: 800 }).addClef('bass').addTimeSignature('C|').setClefLines('bass'); + const voice = f + .Voice() + .setStrict(false) + .addTickables([ + f.KeySigNote({ key: 'Bb' }), + f.StaveNote({ keys: ['c/4'], duration: '1', clef: 'bass' }), + f.BarNote(), + f.KeySigNote({ key: 'D', cancelKey: 'Bb' }), + f.StaveNote({ keys: ['c/4'], duration: '1', clef: 'bass' }), + f.BarNote(), + f.KeySigNote({ key: 'Bb' }), + f.StaveNote({ keys: ['c/4'], duration: '1', clef: 'bass' }), + f.BarNote(), + f.KeySigNote({ key: 'D', alterKey: ['b', 'n'] }), + f.StaveNote({ keys: ['c/4'], duration: '1', clef: 'bass' }), + ]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(KeySignatureTests); + + + +/***/ }), + +/***/ "./tests/mocks.ts": +/*!************************!*\ + !*** ./tests/mocks.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "MockTickable": () => (/* binding */ MockTickable) +/* harmony export */ }); +/* harmony import */ var _src_fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../src/fraction */ "./src/fraction.ts"); +/* harmony import */ var _src_tickable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/tickable */ "./src/tickable.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// TickContext Mocks + + +class MockTickable extends _src_tickable__WEBPACK_IMPORTED_MODULE_1__.Tickable { + constructor() { + super(...arguments); + this.ticks = new _src_fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(1, 1); + this.width = 0; + this.ignore_ticks = false; + } + init() { + // DO NOTHING. + } + getX() { + // eslint-disable-next-line + return this.tickContext.getX(); + } + getIntrinsicTicks() { + return this.ticks.value(); + } + getTicks() { + return this.ticks; + } + setTicks(t) { + this.ticks = new _src_fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(t, 1); + return this; + } + // Called by TickContext.preFormat(). + getMetrics() { + return { + width: 0, + glyphWidth: 0, + notePx: this.width, + modLeftPx: 0, + modRightPx: 0, + leftDisplacedHeadPx: 0, + rightDisplacedHeadPx: 0, + glyphPx: 0, + }; + } + getWidth() { + return this.width; + } + setWidth(w) { + this.width = w; + return this; + } + setVoice(v) { + this.voice = v; + return this; + } + setStave(stave) { + this.stave = stave; + return this; + } + getStave() { + return this.stave; + } + setTickContext(tc) { + this.tickContext = tc; + return this; + } + setIgnoreTicks(flag) { + this.ignore_ticks = flag; + return this; + } + shouldIgnoreTicks() { + return this.ignore_ticks; + } + preFormat() { + // DO NOTHING. + } + // eslint-disable-next-line + draw(...args) { + // DO NOTHING. + } +} + + + +/***/ }), + +/***/ "./tests/modifier_tests.ts": +/*!*********************************!*\ + !*** ./tests/modifier_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ModifierContextTests": () => (/* binding */ ModifierContextTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// ModifierContext Tests + + +const ModifierContextTests = { + Start() { + QUnit.module('ModifierContext'); + QUnit.test('Modifier Width Test', width); + QUnit.test('Modifier Management', management); + }, +}; +function width(assert) { + const mc = new _src_index__WEBPACK_IMPORTED_MODULE_1__.ModifierContext(); + assert.equal(mc.getWidth(), 0, 'New modifier context has no width'); +} +function management(assert) { + const mc = new _src_index__WEBPACK_IMPORTED_MODULE_1__.ModifierContext(); + const modifier1 = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Modifier(); + const modifier2 = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Modifier(); + mc.addMember(modifier1); + mc.addMember(modifier2); + const modifiers = mc.getMembers(_src_index__WEBPACK_IMPORTED_MODULE_1__.Modifier.CATEGORY); + assert.equal(modifiers.length, 2, 'Added two modifiers'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ModifierContextTests); + + + +/***/ }), + +/***/ "./tests/multimeasurerest_tests.ts": +/*!*****************************************!*\ + !*** ./tests/multimeasurerest_tests.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "MultiMeasureRestTests": () => (/* binding */ MultiMeasureRestTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// MultiMeasureRest Tests + + + +const MultiMeasureRestTests = { + Start() { + QUnit.module('MultiMeasureRest'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple Test', simple); + run('Stave with modifiers Test', staveWithModifiers); + }, +}; +function simple(options) { + const width = 910; + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, width, 300); + const line_spacing_15px = { options: { spacing_between_lines_px: 15 } }; + // Each item below is an array that contains: + // item[0] => staveParams to adjust vertical spacing between lines + // item[1] => multiMeasureRestParams + // eslint-disable-next-line + const params = [ + [{}, { number_of_measures: 2, show_number: false }], + [{}, { number_of_measures: 2 }], + [{}, { number_of_measures: 2, line_thickness: 8, serif_thickness: 3 }], + [{}, { number_of_measures: 1, use_symbols: true }], + [{}, { number_of_measures: 2, use_symbols: true }], + [{}, { number_of_measures: 3, use_symbols: true }], + [{}, { number_of_measures: 4, use_symbols: true }], + [{}, { number_of_measures: 5, use_symbols: true }], + [{}, { number_of_measures: 6, use_symbols: true }], + [{}, { number_of_measures: 7, use_symbols: true }], + [{}, { number_of_measures: 8, use_symbols: true }], + [{}, { number_of_measures: 9, use_symbols: true }], + [{}, { number_of_measures: 10, use_symbols: true }], + [{}, { number_of_measures: 11, use_symbols: true }], + [{}, { number_of_measures: 11, use_symbols: false, padding_left: 20, padding_right: 20 }], + [{}, { number_of_measures: 11, use_symbols: true, symbol_spacing: 5 }], + [{}, { number_of_measures: 11, use_symbols: false, line: 3, number_line: 2 }], + [{}, { number_of_measures: 11, use_symbols: true, line: 3, number_line: 2 }], + [line_spacing_15px, { number_of_measures: 12 }], + [line_spacing_15px, { number_of_measures: 9, use_symbols: true }], + [line_spacing_15px, { number_of_measures: 12, spacing_between_lines_px: 15, number_glyph_point: 40 * 1.5 }], + [ + line_spacing_15px, + { + number_of_measures: 9, + spacing_between_lines_px: 15, + use_symbols: true, + number_glyph_point: 40 * 1.5, + }, + ], + [ + line_spacing_15px, + { + number_of_measures: 9, + spacing_between_lines_px: 15, + use_symbols: true, + number_glyph_point: 40 * 1.5, + semibreve_rest_glyph_scale: _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.NOTATION_FONT_SCALE * 1.5, + }, + ], + ]; + const staveWidth = 100; + let x = 0; + let y = 0; + const mmRests = params.map((param) => { + if (x + staveWidth * 2 > width) { + x = 0; + y += 80; + } + const staveParams = param[0]; + const mmRestParams = param[1]; + staveParams.x = x; + staveParams.y = y; + staveParams.width = staveWidth; + x += staveWidth; + const stave = f.Stave(staveParams); + return f.MultiMeasureRest(mmRestParams).setStave(stave); + }); + f.draw(); + const xs = mmRests[0].getXs(); + // eslint-disable-next-line + const strY = mmRests[0].getStave().getYForLine(-0.5); + const str = 'TACET'; + const context = f.getContext(); + context.save(); + context.setFont(_src_font__WEBPACK_IMPORTED_MODULE_2__.Font.SERIF, 16, 'bold'); + const metrics = context.measureText(str); + context.fillText(str, xs.left + (xs.right - xs.left) * 0.5 - metrics.width * 0.5, strY); + context.restore(); + options.assert.ok(true, 'Simple Test'); +} +function staveWithModifiers(options) { + const width = 910; + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, width, 200); + let x = 0; + let y = 0; + // eslint-disable-next-line + const params = [ + [{ clef: 'treble', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', keySig: 'G', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', timeSig: '4/4', keySig: 'G', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', endClef: 'bass', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', endKeySig: 'F', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', endTimeSig: '2/4', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', endClef: 'bass', endTimeSig: '2/4', params: { width: 150 } }, { number_of_measures: 5 }], + [ + { clef: 'treble', endClef: 'bass', endTimeSig: '2/4', params: { width: 150 } }, + { number_of_measures: 5, use_symbols: true }, + ], + ]; + params.forEach((param) => { + const staveOptions = param[0]; + // eslint-disable-next-line + const staveParams = staveOptions.params; + const mmrestParams = param[1]; + if (x + staveParams.width > width) { + x = 0; + y += 80; + } + staveParams.x = x; + x += staveParams.width; + staveParams.y = y; + const stave = f.Stave(staveParams); + if (staveOptions.clef) { + stave.addClef(staveOptions.clef); + } + if (staveOptions.timeSig) { + stave.addTimeSignature(staveOptions.timeSig); + } + if (staveOptions.keySig) { + stave.addKeySignature(staveOptions.keySig); + } + if (staveOptions.endClef) { + stave.addEndClef(staveOptions.endClef); + } + if (staveOptions.endKeySig) { + stave.setEndKeySignature(staveOptions.endKeySig); + } + if (staveOptions.endTimeSig) { + stave.setEndTimeSignature(staveOptions.endTimeSig); + } + return f.MultiMeasureRest(mmrestParams).setStave(stave); + }); + f.draw(); + options.assert.ok(true, 'Stave with modifiers Test'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(MultiMeasureRestTests); + + + +/***/ }), + +/***/ "./tests/music_tests.ts": +/*!******************************!*\ + !*** ./tests/music_tests.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "MusicTests": () => (/* binding */ MusicTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_keymanager__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/keymanager */ "./src/keymanager.ts"); +/* harmony import */ var _src_music__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/music */ "./src/music.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Music Tests + + + +const MusicTests = { + Start() { + QUnit.module('MusicTests'); + QUnit.test('Valid Notes', validNotes); + QUnit.test('Valid Keys', validKeys); + QUnit.test('Note Values', noteValue); + QUnit.test('Interval Values', intervalValue); + QUnit.test('Relative Notes', relativeNotes); + QUnit.test('Relative Note Names', relativeNoteNames); + QUnit.test('Canonical Notes', canonicalNotes); + QUnit.test('Canonical Intervals', canonicalIntervals); + QUnit.test('Scale Tones', scaleTones); + QUnit.test('Scale Intervals', scaleIntervals); + }, +}; +function validNotes(assert) { + assert.expect(10); + const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + let parts = music.getNoteParts('c'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, null); + // getNoteParts() converts its argument to lowercase. + parts = music.getNoteParts('C'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, null); + parts = music.getNoteParts('c#'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, '#'); + parts = music.getNoteParts('c##'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, '##'); + assert.throws(() => music.getNoteParts('r'), /BadArguments/, 'Invalid note: r'); + assert.throws(() => music.getNoteParts(''), /BadArguments/, "Invalid note: ''"); +} +function validKeys(assert) { + assert.expect(18); + const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + let parts = music.getKeyParts('c'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, null); + assert.equal(parts.type, 'M'); + parts = music.getKeyParts('d#'); + assert.equal(parts.root, 'd'); + assert.equal(parts.accidental, '#'); + assert.equal(parts.type, 'M'); + parts = music.getKeyParts('fbm'); + assert.equal(parts.root, 'f'); + assert.equal(parts.accidental, 'b'); + assert.equal(parts.type, 'm'); + parts = music.getKeyParts('c#mel'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, '#'); + assert.equal(parts.type, 'mel'); + parts = music.getKeyParts('g#harm'); + assert.equal(parts.root, 'g'); + assert.equal(parts.accidental, '#'); + assert.equal(parts.type, 'harm'); + assert.throws(() => music.getKeyParts('r'), /BadArguments/, 'Invalid key: r'); + assert.throws(() => music.getKeyParts(''), /BadArguments/, `Invalid key: ''`); + assert.throws(() => music.getKeyParts('#m'), /BadArguments/, 'Invalid key: #m'); +} +function noteValue(assert) { + assert.expect(3); + const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + let note = music.getNoteValue('c'); + assert.equal(note, 0); + assert.throws(() => music.getNoteValue('r'), /BadArguments/, 'Invalid note name'); + note = music.getNoteValue('f#'); + assert.equal(note, 6); +} +function intervalValue(assert) { + assert.expect(2); + const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + const value = music.getIntervalValue('b2'); + assert.equal(value, 1); + assert.throws(() => music.getIntervalValue('7'), /BadArguments/, 'Invalid interval name'); +} +function relativeNotes(assert) { + assert.expect(8); + const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + let value = music.getRelativeNoteValue(music.getNoteValue('c'), music.getIntervalValue('b5')); + assert.equal(value, 6); + assert.throws(() => music.getRelativeNoteValue(music.getNoteValue('bc'), music.getIntervalValue('b2')), /BadArguments/, 'Invalid note'); + assert.throws(() => music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('p3')), /BadArguments/, 'Invalid interval'); + // Direction + value = music.getRelativeNoteValue(music.getNoteValue('d'), music.getIntervalValue('2'), -1); + assert.equal(value, 0); + assert.throws(() => music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('p4'), 0), /BadArguments/, 'Invalid direction: 0'); + // Rollover + value = music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('b5')); + assert.equal(value, 5); + // Reverse rollover + value = music.getRelativeNoteValue(music.getNoteValue('c'), music.getIntervalValue('b2'), -1); + assert.equal(value, 11); + // Practical tests + value = music.getRelativeNoteValue(music.getNoteValue('g'), music.getIntervalValue('p5')); + assert.equal(value, 2); +} +function relativeNoteNames(assert) { + assert.expect(9); + const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + assert.equal(music.getRelativeNoteName('b', music.getNoteValue('c#')), 'b##'); + assert.equal(music.getRelativeNoteName('c', music.getNoteValue('c')), 'c'); + assert.equal(music.getRelativeNoteName('c', music.getNoteValue('db')), 'c#'); + assert.equal(music.getRelativeNoteName('c', music.getNoteValue('b')), 'cb'); + assert.equal(music.getRelativeNoteName('c#', music.getNoteValue('db')), 'c#'); + assert.equal(music.getRelativeNoteName('e', music.getNoteValue('f#')), 'e##'); + assert.equal(music.getRelativeNoteName('e', music.getNoteValue('d#')), 'eb'); + assert.equal(music.getRelativeNoteName('e', music.getNoteValue('fb')), 'e'); + assert.throws(() => music.getRelativeNoteName('e', music.getNoteValue('g#')), /BadArguments/, 'Too far away. Notes not related.'); +} +function canonicalNotes(assert) { + assert.expect(3); + const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + assert.equal(music.getCanonicalNoteName(0), 'c'); + assert.equal(music.getCanonicalNoteName(2), 'd'); + assert.throws(() => music.getCanonicalNoteName(-1), /BadArguments/, 'Invalid note value'); +} +function canonicalIntervals(assert) { + assert.expect(3); + const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + assert.equal(music.getCanonicalIntervalName(0), 'unison'); + assert.equal(music.getCanonicalIntervalName(2), 'M2'); + assert.throws(() => music.getCanonicalIntervalName(-1), /BadArguments/, 'Invalid interval value'); +} +function scaleTones(assert) { + assert.expect(24); + // C Major + const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + const manager = new _src_keymanager__WEBPACK_IMPORTED_MODULE_1__.KeyManager('CM'); + const c_major = music.getScaleTones(music.getNoteValue('c'), _src_music__WEBPACK_IMPORTED_MODULE_2__.Music.scales.major); + let values = ['c', 'd', 'e', 'f', 'g', 'a', 'b']; + assert.equal(c_major.length, 7); + for (let i = 0; i < c_major.length; ++i) { + assert.equal(music.getCanonicalNoteName(c_major[i]), values[i]); + } + // Dorian + const c_dorian = music.getScaleTones(music.getNoteValue('c'), _src_music__WEBPACK_IMPORTED_MODULE_2__.Music.scales.dorian); + values = ['c', 'd', 'eb', 'f', 'g', 'a', 'bb']; + let note = null; + assert.equal(c_dorian.length, 7); + for (let i = 0; i < c_dorian.length; ++i) { + note = music.getCanonicalNoteName(c_dorian[i]); + assert.equal(manager.selectNote(note).note, values[i]); + } + // Mixolydian + const c_mixolydian = music.getScaleTones(music.getNoteValue('c'), _src_music__WEBPACK_IMPORTED_MODULE_2__.Music.scales.mixolydian); + values = ['c', 'd', 'e', 'f', 'g', 'a', 'bb']; + assert.equal(c_mixolydian.length, 7); + for (let i = 0; i < c_mixolydian.length; ++i) { + note = music.getCanonicalNoteName(c_mixolydian[i]); + assert.equal(manager.selectNote(note).note, values[i]); + } +} +function scaleIntervals(assert) { + assert.expect(6); + const m = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('c'), m.getNoteValue('d'))), 'M2'); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('g'), m.getNoteValue('c'))), 'p4'); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('c'), m.getNoteValue('c'))), 'unison'); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('f'), m.getNoteValue('cb'))), 'dim5'); + // Forwards and backwards + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('d'), m.getNoteValue('c'), 1)), 'b7'); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('d'), m.getNoteValue('c'), -1)), 'M2'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(MusicTests); + + + +/***/ }), + +/***/ "./tests/notehead_tests.ts": +/*!*********************************!*\ + !*** ./tests/notehead_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "NoteHeadTests": () => (/* binding */ NoteHeadTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_notehead__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/notehead */ "./src/notehead.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// NoteHead Tests +// TODO: There is a bug in RenderContext.scale(). The CanvasContext works as expected. +// Each time you call scale(sx, sy), it multiplies the sx and sy by the currently stored scale. +// The SVGContext operates differently. It just sets the sx and sy as the new scale, instead of multiplying it. +// See: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/scale + + + + + + + + +const NoteHeadTests = { + Start() { + QUnit.module('NoteHead'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Basic', basic); + run('Various Note Heads 1', variousNoteHeads); + run('Various Note Heads 2', variousNoteHeads2); + run('Various Heads', variousHeads); + run('Drum Chord Heads', drumChordHeads); + run('Bounding Boxes', basicBoundingBoxes); + }, +}; +function setContextStyle(ctx) { + // The final scale should be 1.8. + ctx.scale(0.9, 0.9); + ctx.scale(2.0, 2.0); + //ctx.scale(1.8, 1.8); + ctx.font = '10pt Arial'; +} +function basic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 450, 250); + setContextStyle(ctx); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 0, 250).addClef('treble'); + stave.setContext(ctx).draw(); + const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter(); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4).setStrict(false); + const note_head1 = new _src_notehead__WEBPACK_IMPORTED_MODULE_3__.NoteHead({ duration: '4', line: 3 }); + const note_head2 = new _src_notehead__WEBPACK_IMPORTED_MODULE_3__.NoteHead({ duration: '1', line: 2.5 }); + const note_head3 = new _src_notehead__WEBPACK_IMPORTED_MODULE_3__.NoteHead({ duration: '2', line: 0 }); + voice.addTickables([note_head1, note_head2, note_head3]); + formatter.joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok('Basic NoteHead test'); +} +/** + * Used by the next two test cases to draw a note. + */ +function showNote(noteStruct, stave, ctx, x) { + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote(noteStruct).setStave(stave); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_6__.TickContext().addTickable(note).preFormat().setX(x); + note.setContext(ctx).draw(); + return note; +} +function variousHeads(options, contextBuilder) { + const notes = [ + { keys: ['g/5/d0'], duration: '4' }, + { keys: ['g/5/d1'], duration: '4' }, + { keys: ['g/5/d2'], duration: '4' }, + { keys: ['g/5/d3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/t0'], duration: '1' }, + { keys: ['g/5/t1'], duration: '4' }, + { keys: ['g/5/t2'], duration: '4' }, + { keys: ['g/5/t3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/x0'], duration: '1' }, + { keys: ['g/5/x1'], duration: '4' }, + { keys: ['g/5/x2'], duration: '4' }, + { keys: ['g/5/x3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/s1'], duration: '4' }, + { keys: ['g/5/s2'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/r1'], duration: '4' }, + { keys: ['g/5/r2'], duration: '4' }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + // Draw two staves, one with up-stems and one with down-stems. + for (let staveNum = 0; staveNum < 2; ++staveNum) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10 + staveNum * 120, notes.length * 25 + 75) + .addClef('percussion') + .setContext(ctx) + .draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.stem_direction = staveNum === 0 ? -1 : 1; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } + } +} +function variousNoteHeads(options, contextBuilder) { + const notes = [ + { keys: ['g/5/d'], duration: '1/2' }, + { keys: ['g/5/d'], duration: '1' }, + { keys: ['g/5/d'], duration: '2' }, + { keys: ['g/5/d'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/x'], duration: '1/2' }, + { keys: ['g/5/x'], duration: '1' }, + { keys: ['g/5/x'], duration: '2' }, + { keys: ['g/5/x'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/cx'], duration: '1/2' }, + { keys: ['g/5/cx'], duration: '1' }, + { keys: ['g/5/cx'], duration: '2' }, + { keys: ['g/5/cx'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/tu'], duration: '1/2' }, + { keys: ['g/5/tu'], duration: '1' }, + { keys: ['g/5/tu'], duration: '2' }, + { keys: ['g/5/tu'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/td'], duration: '1/2' }, + { keys: ['g/5/td'], duration: '1' }, + { keys: ['g/5/td'], duration: '2' }, + { keys: ['g/5/td'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/sf'], duration: '1/2' }, + { keys: ['g/5/sf'], duration: '1' }, + { keys: ['g/5/sf'], duration: '2' }, + { keys: ['g/5/sf'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/sb'], duration: '1/2' }, + { keys: ['g/5/sb'], duration: '1' }, + { keys: ['g/5/sb'], duration: '2' }, + { keys: ['g/5/sb'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/ci'], duration: '1/2' }, + { keys: ['g/5/ci'], duration: '1' }, + { keys: ['g/5/ci'], duration: '2' }, + { keys: ['g/5/ci'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/sq'], duration: '1/2' }, + { keys: ['g/5/sq'], duration: '1' }, + { keys: ['g/5/sq'], duration: '2' }, + { keys: ['g/5/sq'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + // Draw two staves, one with up-stems and one with down-stems. + for (let staveNum = 0; staveNum < 2; ++staveNum) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10 + staveNum * 120, notes.length * 25 + 75) + .addClef('percussion') + .setContext(ctx) + .draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.stem_direction = staveNum === 0 ? -1 : 1; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } + } +} +function variousNoteHeads2(options, contextBuilder) { + const notes = [ + { keys: ['g/5/do'], duration: '4', auto_stem: true }, + { keys: ['g/5/re'], duration: '4', auto_stem: true }, + { keys: ['g/5/mi'], duration: '4', auto_stem: true }, + { keys: ['g/5/fa'], duration: '4', auto_stem: true }, + { keys: ['e/4/faup'], duration: '4', auto_stem: true }, + { keys: ['g/5/so'], duration: '4', auto_stem: true }, + { keys: ['g/5/la'], duration: '4', auto_stem: true }, + { keys: ['g/5/ti'], duration: '4', auto_stem: true }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drumChordHeads(options, contextBuilder) { + const notes = [ + { keys: ['a/4/d0', 'g/5/x3'], duration: '4' }, + { keys: ['a/4/x3', 'g/5/d0'], duration: '4' }, + { keys: ['a/4/d1', 'g/5/x2'], duration: '4' }, + { keys: ['a/4/x2', 'g/5/d1'], duration: '4' }, + { keys: ['a/4/d2', 'g/5/x1'], duration: '4' }, + { keys: ['a/4/x1', 'g/5/d2'], duration: '4' }, + { keys: ['a/4/d3', 'g/5/x0'], duration: '4' }, + { keys: ['a/4/x0', 'g/5/d3'], duration: '4' }, + { keys: ['a/4', 'g/5/d0'], duration: '4' }, + { keys: ['a/4/x3', 'g/5'], duration: '4' }, + { keys: ['a/4/t0', 'g/5/s1'], duration: '4' }, + { keys: ['a/4/s1', 'g/5/t0'], duration: '4' }, + { keys: ['a/4/t1', 'g/5/s2'], duration: '4' }, + { keys: ['a/4/s2', 'g/5/t1'], duration: '4' }, + { keys: ['a/4/t2', 'g/5/r1'], duration: '4' }, + { keys: ['a/4/r1', 'g/5/t2'], duration: '4' }, + { keys: ['a/4/t3', 'g/5/r2'], duration: '4' }, + { keys: ['a/4/r2', 'g/5/t3'], duration: '4' }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + // Draw two staves, one with up-stems and one with down-stems. + for (let h = 0; h < 2; ++h) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10 + h * 120, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.stem_direction = h === 0 ? -1 : 1; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } + } +} +function basicBoundingBoxes(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 450, 250); + setContextStyle(ctx); + // 250 is 450/1.8 + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 0, 250).addClef('treble'); + stave.setContext(ctx).draw(); + const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter(); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4).setStrict(false); + const nh1 = new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['b/4'], duration: '4' }); + const nh2 = new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['a/4'], duration: '2' }); + const nh3 = new _src_notehead__WEBPACK_IMPORTED_MODULE_3__.NoteHead({ duration: '1', line: 0 }); + voice.addTickables([nh1, nh2, nh3]); + formatter.joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + for (const bb of [nh1.noteHeads[0].getBoundingBox(), nh2.noteHeads[0].getBoundingBox(), nh3.getBoundingBox()]) { + ctx.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH()); + } + ctx.stroke(); + options.assert.ok('NoteHead Bounding Boxes'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(NoteHeadTests); + + + +/***/ }), + +/***/ "./tests/notesubgroup_tests.ts": +/*!*************************************!*\ + !*** ./tests/notesubgroup_tests.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "NoteSubGroupTests": () => (/* binding */ NoteSubGroupTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_barnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/barnote */ "./src/barnote.ts"); +/* harmony import */ var _src_note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/note */ "./src/note.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// Author: Taehoon Moon 2016 +// +// NoteSubGroup Tests + + + + +const NoteSubGroupTests = { + Start() { + QUnit.module('NoteSubGroup'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Basic - ClefNote, TimeSigNote and BarNote', basic); + run('Multi Voice', multiVoiceSingleDraw); + run('Multi Voice Multiple Draws', multiVoiceDoubleDraw); + run('Multi Staff', multiStaff); + }, +}; +// Return three helper functions for creating StaveNotes, and adding Accidental & NoteSubGroup to those StaveNotes. +function createShortcuts(f) { + return { + createStaveNote: (noteStruct) => f.StaveNote(noteStruct), + addAccidental: (note, accid) => note.addModifier(f.Accidental({ type: accid }), 0), + addSubGroup: (note, subNotes) => note.addModifier(f.NoteSubGroup({ notes: subNotes }), 0), + }; +} +function basic(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750, 200); + const ctx = f.getContext(); + const stave = f.Stave({ width: 600 }).addClef('treble'); + const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f); + const notes = [ + { keys: ['f/5'], stem_direction: -1, duration: '4' }, + { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'bass' }, + { keys: ['g/4'], stem_direction: -1, duration: '4', clef: 'alto' }, + { keys: ['a/4'], stem_direction: -1, duration: '4', clef: 'alto' }, + { keys: ['c/4'], stem_direction: -1, duration: '4', clef: 'tenor' }, + { keys: ['c/3'], stem_direction: +1, duration: '4', clef: 'tenor' }, + { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'tenor' }, + { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'tenor' }, + ].map(createStaveNote); + addAccidental(notes[1], '#'); + addAccidental(notes[2], 'n'); + addSubGroup(notes[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]); + addSubGroup(notes[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } })]); + addSubGroup(notes[4], [f.ClefNote({ type: 'tenor', options: { size: 'small' } }), new _src_barnote__WEBPACK_IMPORTED_MODULE_1__.BarNote()]); + addSubGroup(notes[5], [f.TimeSigNote({ time: '6/8' })]); + addSubGroup(notes[6], [new _src_barnote__WEBPACK_IMPORTED_MODULE_1__.BarNote(_src_stavebarline__WEBPACK_IMPORTED_MODULE_3__.BarlineType.REPEAT_BEGIN)]); + addAccidental(notes[4], 'b'); + addAccidental(notes[6], 'bb'); + const voice = f.Voice().setStrict(false).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + notes.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_2__.Note.plotMetrics(ctx, note, 150)); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 620, 120); + options.assert.ok(true, 'all pass'); +} +function multiVoiceSingleDraw(options) { + multiVoiceHelper(options, 1); +} +/** + * Call Factory.draw() twice. It should look identical to the multiVoice test case above. + */ +function multiVoiceDoubleDraw(options) { + multiVoiceHelper(options, 2); +} +/** + * Used by multiVoiceSingleDraw and multiVoiceDoubleDraw above. + */ +function multiVoiceHelper(options, numDraws) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 200); + const ctx = f.getContext(); + const stave = f.Stave().addClef('treble'); + const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f); + const notes1 = [ + { keys: ['f/5'], stem_direction: 1, duration: '4' }, + { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' }, + ].map(createStaveNote); + const notes2 = [ + { keys: ['c/4'], stem_direction: -1, duration: '4' }, + { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' }, + { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' }, + { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' }, + ].map(createStaveNote); + addAccidental(notes1[1], '#'); + addSubGroup(notes1[1], [ + f.ClefNote({ type: 'bass', options: { size: 'small' } }), + new _src_barnote__WEBPACK_IMPORTED_MODULE_1__.BarNote(_src_stavebarline__WEBPACK_IMPORTED_MODULE_3__.BarlineType.REPEAT_BEGIN), + f.TimeSigNote({ time: '3/4' }), + ]); + addSubGroup(notes2[2], [ + f.ClefNote({ type: 'alto', options: { size: 'small' } }), + f.TimeSigNote({ time: '9/8' }), + new _src_barnote__WEBPACK_IMPORTED_MODULE_1__.BarNote(_src_stavebarline__WEBPACK_IMPORTED_MODULE_3__.BarlineType.DOUBLE), + ]); + addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]); + addAccidental(notes1[2], 'b'); + addAccidental(notes2[3], '#'); + const voices = [f.Voice().addTickables(notes1), f.Voice().addTickables(notes2)]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + for (let i = 0; i < numDraws; i++) { + f.draw(); + } + notes1.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_2__.Note.plotMetrics(ctx, note, 150)); + options.assert.ok(true, 'all pass'); +} +function multiStaff(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 400); + const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f); + const stave1 = f.Stave({ x: 15, y: 30, width: 500 }).setClef('treble'); + const notes1 = [ + { keys: ['f/5'], stem_direction: 1, duration: '4' }, + { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' }, + ].map(createStaveNote); + const notes2 = [ + { keys: ['c/4'], stem_direction: -1, duration: '4' }, + { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' }, + { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' }, + { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' }, + ].map(createStaveNote); + const stave2 = f.Stave({ x: 15, y: 150, width: 500 }).setClef('bass'); + const notes3 = [ + { keys: ['e/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + { keys: ['g/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['d/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['f/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['c/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['g/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + { keys: ['d/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + { keys: ['f/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + ].map(createStaveNote); + f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'brace' }); + f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleLeft' }); + f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleRight' }); + f.Beam({ notes: notes3.slice(1, 4) }); + f.Beam({ notes: notes3.slice(5) }); + addAccidental(notes1[1], '#'); + addSubGroup(notes1[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } }), f.TimeSigNote({ time: '3/4' })]); + addSubGroup(notes2[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } }), f.TimeSigNote({ time: '9/8' })]); + addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]); + addSubGroup(notes3[1], [f.ClefNote({ type: 'treble', options: { size: 'small' } })]); + addSubGroup(notes3[5], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]); + addAccidental(notes3[0], '#'); + addAccidental(notes3[3], 'b'); + addAccidental(notes3[5], '#'); + addAccidental(notes1[2], 'b'); + addAccidental(notes2[3], '#'); + const voice1 = f.Voice().addTickables(notes1); + const voice2 = f.Voice().addTickables(notes2); + const voice3 = f.Voice().addTickables(notes3); + f.Formatter().joinVoices([voice1, voice2]).joinVoices([voice3]).formatToStave([voice1, voice2, voice3], stave1); + f.draw(); + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(NoteSubGroupTests); + + + +/***/ }), + +/***/ "./tests/offscreencanvas_tests.ts": +/*!****************************************!*\ + !*** ./tests/offscreencanvas_tests.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "OffscreenCanvasTests": () => (/* binding */ OffscreenCanvasTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_canvascontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021. +// MIT License +// +// OffscreenCanvas Tests + + + + + + + +const OffscreenCanvasTests = { + Start() { + // At the time of writing, OffscreenCanvas is still an experimental technology. + if ((0,_src_util__WEBPACK_IMPORTED_MODULE_6__.globalObject)().OffscreenCanvas === undefined) { + return; + } + QUnit.module('OffscreenCanvas'); + QUnit.test('Simple Test', simpleTest); + }, +}; +function simpleTest(assert) { + // Create a CanvasContext from an OffscreenCanvas. + // eslint-disable-next-line + // @ts-ignore + const offscreenCanvas = new OffscreenCanvas(550, 200); + // eslint-disable-next-line + // @ts-ignore + const offscreenCtx = offscreenCanvas.getContext('2d'); + if (offscreenCtx == null) { + throw new Error("Couldn't create offscreen context"); + } + const ctx = new _src_canvascontext__WEBPACK_IMPORTED_MODULE_1__.CanvasContext(offscreenCtx); + // Render to the OffscreenCavans. + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 50, 200); + stave.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); + stave.addClef('treble').setContext(ctx).draw(); + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['c/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['d/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['b/4'], duration: 'qr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter.FormatAndDraw(ctx, stave, notes); + // Copy the contents of the OffscreenCanvas to an HTMLCanvasElement. + const imgBmp = offscreenCanvas.transferToImageBitmap(); + const canvas = document.createElement('canvas'); + canvas.width = offscreenCanvas.width; + canvas.height = offscreenCanvas.height; + const canvasCtx = canvas.getContext('2d'); + if (canvasCtx == null) { + throw new Error("Couldn't create canvas context"); + } + canvasCtx.drawImage(imgBmp, 0, 0); + document.body.appendChild(canvas); + assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(OffscreenCanvasTests); + + + +/***/ }), + +/***/ "./tests/ornament_tests.ts": +/*!*********************************!*\ + !*** ./tests/ornament_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "OrnamentTests": () => (/* binding */ OrnamentTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_glyph__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/glyph */ "./src/glyph.ts"); +/* harmony import */ var _src_ornament__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/ornament */ "./src/ornament.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// Author: Cyril Silverman +// +// Ornament Tests +// TODO: Formatting for Jazz Ornaments is incorrect. The last note + ornament bleeds into the next measure. + + + + + + + + + + +const OrnamentTests = { + Start() { + QUnit.module('Ornament'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Ornaments', drawOrnaments); + run('Ornaments Vertically Shifted', drawOrnamentsDisplaced); + run('Ornaments - Delayed turns', drawOrnamentsDelayed); + run('Ornaments - Delayed turns, Multiple Draws', drawOrnamentsDelayedMultipleDraws); + run('Ornaments - Delayed turns, Multiple Voices', drawOrnamentsDelayedMultipleVoices); + run('Stacked', drawOrnamentsStacked); + run('With Upper/Lower Accidentals', drawOrnamentsWithAccidentals); + run('Jazz Ornaments', jazzOrnaments); + }, +}; +function drawOrnaments(options, contextBuilder) { + options.assert.expect(0); + // Get the rendering context + const ctx = contextBuilder(options.elementId, 750, 195); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 30, 700); + stave.setContext(ctx).draw(); + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('mordent'), 0); + notes[1].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('mordent_inverted'), 0); + notes[2].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('turn'), 0); + notes[3].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('turn_inverted'), 0); + notes[4].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('tr'), 0); + notes[5].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('upprall'), 0); + notes[6].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('downprall'), 0); + notes[7].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('prallup'), 0); + notes[8].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('pralldown'), 0); + notes[9].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('upmordent'), 0); + notes[10].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('downmordent'), 0); + notes[11].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('lineprall'), 0); + notes[12].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('prallprall'), 0); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); +} +function drawOrnamentsDisplaced(options, contextBuilder) { + options.assert.expect(0); + // Get the rendering context + const ctx = contextBuilder(options.elementId, 750, 195); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 30, 700); + stave.setContext(ctx).draw(); + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('mordent'), 0); + notes[1].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('mordent_inverted'), 0); + notes[1].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('mordent_inverted'), 0); + notes[2].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('turn'), 0); + notes[3].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('turn_inverted'), 0); + notes[4].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('tr'), 0); + notes[5].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('upprall'), 0); + notes[6].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('downprall'), 0); + notes[7].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('prallup'), 0); + notes[8].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('pralldown'), 0); + notes[9].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('upmordent'), 0); + notes[10].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('downmordent'), 0); + notes[11].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('lineprall'), 0); + notes[12].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('prallprall'), 0); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); +} +/** + * Helper function for the next two tests: drawOrnamentsDelayed and drawOrnamentsDelayedMultipleDraws. + * setDelayed(true) shifts the turn symbol to the right (after its note). + */ +const addDelayedTurns = (f) => { + // Get the rendering context + const context = f.getContext(); + const stave = f.Stave({ x: 10, y: 30, width: 500 }); + stave.setContext(context).draw(); + const notes = [ + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(f.Ornament('turn', { delayed: true }), 0); + notes[1].addModifier(f.Ornament('turn_inverted', { delayed: true }), 0); + notes[2].addModifier(f.Ornament('turn_inverted', { delayed: true }), 0); + notes[3].addModifier(f.Ornament('turn', { delayed: true }), 0); + return { context, stave, notes }; +}; +function drawOrnamentsDelayed(options) { + options.assert.expect(0); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 195); + const { context, stave, notes } = addDelayedTurns(f); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); +} +function drawOrnamentsDelayedMultipleDraws(options) { + options.assert.expect(0); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 195); + const { context, stave, notes } = addDelayedTurns(f); + // We can FormatAndDraw() two times, and it looks fine. + // However, if you inspect the SVG element, you will see duplicate paths. + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); +} +function drawOrnamentsDelayedMultipleVoices(options, contextBuilder) { + options.assert.expect(0); + // Get the rendering context + const ctx = contextBuilder(options.elementId, 550, 195); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 30, 500); + stave.addClef('treble'); + stave.addKeySignature('C#'); + stave.addTimeSignature('4/4'); + const notes1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/5'], duration: '2r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['c/5'], duration: '2', stem_direction: 1 }), + ]; + const notes2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['e/4'], duration: '4r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['e/4'], duration: '2r' }), + ]; + notes1[1].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('turn_inverted').setDelayed(true), 0); + notes2[0].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('turn').setDelayed(true), 0); + const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice({ num_beats: 4, beat_value: 4, }); + voice1.addTickables(notes1); + const voice2 = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice({ num_beats: 4, beat_value: 4, }); + voice2.addTickables(notes2); + const formatWidth = stave.getNoteEndX() - stave.getNoteStartX(); + const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter(); + formatter.joinVoices([voice1]); + formatter.joinVoices([voice2]); + formatter.format([voice1, voice2], formatWidth); + stave.setContext(ctx).draw(); + voice1.draw(ctx, stave); + voice2.draw(ctx, stave); +} +function drawOrnamentsStacked(options) { + options.assert.expect(0); + // Get the rendering context + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 195); + const ctx = f.getContext(); + const stave = f.Stave({ x: 10, y: 30, width: 500 }); + stave.setContext(ctx).draw(); + const notes = [ + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(f.Ornament('mordent'), 0); + notes[1].addModifier(f.Ornament('turn_inverted'), 0); + notes[2].addModifier(f.Ornament('turn'), 0); + notes[3].addModifier(f.Ornament('turn_inverted'), 0); + notes[0].addModifier(f.Ornament('turn'), 0); + notes[1].addModifier(f.Ornament('prallup'), 0); + notes[2].addModifier(f.Ornament('upmordent'), 0); + notes[3].addModifier(f.Ornament('lineprall'), 0); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); +} +function drawOrnamentsWithAccidentals(options) { + options.assert.expect(0); + // Get the rendering context + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 650, 250); + const ctx = f.getContext(); + const stave = f.Stave({ x: 10, y: 60, width: 600 }); + stave.setContext(ctx).draw(); + const notes = [ + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(f.Ornament('mordent', { lowerAccidental: '#', upperAccidental: '#' }), 0); + notes[1].addModifier(f.Ornament('turn_inverted', { lowerAccidental: 'b', upperAccidental: 'b' }), 0); + notes[2].addModifier(f.Ornament('turn', { upperAccidental: '##', lowerAccidental: '##' }), 0); + notes[3].addModifier(f.Ornament('mordent_inverted', { lowerAccidental: 'db', upperAccidental: 'db' }), 0); + notes[4].addModifier(f.Ornament('turn_inverted', { upperAccidental: '++', lowerAccidental: '++' }), 0); + notes[5].addModifier(f.Ornament('tr', { upperAccidental: 'n', lowerAccidental: 'n' }), 0); + notes[6].addModifier(f.Ornament('prallup', { upperAccidental: 'd', lowerAccidental: 'd' }), 0); + notes[7].addModifier(f.Ornament('lineprall', { upperAccidental: 'db', lowerAccidental: 'db' }), 0); + notes[8].addModifier(f.Ornament('upmordent', { upperAccidental: 'bbs', lowerAccidental: 'bbs' }), 0); + notes[9].addModifier(f.Ornament('prallprall', { upperAccidental: 'bb', lowerAccidental: 'bb' }), 0); + notes[10].addModifier(f.Ornament('turn_inverted', { upperAccidental: '+', lowerAccidental: '+' }), 0); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); +} +function jazzOrnaments(options) { + const clefWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_5__.Glyph.getWidth('gClef', 38); // widest clef + // Helper function. + function draw(modifiers, keys, x, width, y, stemDirection) { + // Helper function to create a StaveNote. + const note = (keys, duration, modifier, stemDirection) => { + const n = new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys, duration, stem_direction: stemDirection }) + .addModifier(modifier, 0) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 0); + const dot = duration.indexOf('d') >= 0; + if (dot) { + _src_dot__WEBPACK_IMPORTED_MODULE_3__.Dot.buildAndAttach([n], { all: true }); + } + return n; + }; + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(x, y, width).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(keys, '4d', modifiers[0], stemDirection), + note(keys, '8', modifiers[1], stemDirection), + note(keys, '4d', modifiers[2], stemDirection), + note(keys, '8', modifiers[3], stemDirection), + ]; + if (modifiers.length > 4) { + notes[3].addModifier(modifiers[4], 0); + } + _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam.generateBeams(notes); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice({ + num_beats: 4, + beat_value: 4, + }).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.VoiceMode.SOFT); + voice.addTickables(notes); + const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice]); + formatter.format([voice], width - _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave.defaultPadding - clefWidth); + stave.setContext(ctx).draw(); + voice.draw(ctx, stave); + } + options.assert.expect(0); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 950, 400); + const ctx = f.getContext(); + ctx.scale(1, 1); + const xStart = 10; + const width = 300; + const yStart = 50; + const staffHeight = 70; + let curX = xStart; + let curY = yStart; + let mods = [ + // measure 1 + f.Ornament('scoop'), + f.Ornament('doit'), + f.Ornament('fall'), + f.Ornament('doitLong'), + ]; + draw(mods, ['a/5'], curX, width, curY, -1); + curX += width; + mods = [ + // measure 2 + f.Ornament('fallLong'), + f.Ornament('bend'), + f.Ornament('plungerClosed'), + f.Ornament('plungerOpen'), + f.Ornament('bend'), + ]; + draw(mods, ['a/5'], curX, width, curY, -1); + curX += width; + mods = [ + // measure 3 + f.Ornament('flip'), + f.Ornament('jazzTurn'), + f.Ornament('smear'), + f.Ornament('doit'), + ]; + draw(mods, ['a/5'], curX, width, curY, 1); + // second line + curX = xStart; + curY += staffHeight; + mods = [ + // measure 4 + f.Ornament('scoop'), + f.Ornament('doit'), + f.Ornament('fall'), + f.Ornament('doitLong'), + ]; + draw(mods, ['e/5'], curX, width, curY); + curX += width; + mods = [ + // measure 5 + f.Ornament('fallLong'), + f.Ornament('bend'), + f.Ornament('plungerClosed'), + f.Ornament('plungerOpen'), + f.Ornament('bend'), + ]; + draw(mods, ['e/5'], curX, width, curY); + curX += width; + mods = [ + // measure 6 + f.Ornament('flip'), + f.Ornament('jazzTurn'), + f.Ornament('smear'), + f.Ornament('doit'), + ]; + draw(mods, ['e/5'], curX, width, curY); + // third line + curX = xStart; + curY += staffHeight; + mods = [ + // measure 7 + f.Ornament('scoop'), + f.Ornament('doit'), + f.Ornament('fall'), + f.Ornament('doitLong'), + ]; + draw(mods, ['e/4'], curX, width, curY); + curX += width; + mods = [ + // measure 8 + f.Ornament('fallLong'), + f.Ornament('bend'), + f.Ornament('plungerClosed'), + f.Ornament('plungerOpen'), + f.Ornament('bend'), + ]; + draw(mods, ['e/4'], curX, width, curY); + curX += width; + mods = [ + // measure 9 + f.Ornament('flip'), + f.Ornament('jazzTurn'), + f.Ornament('smear'), + f.Ornament('doit'), + ]; + draw(mods, ['e/4'], curX, width, curY); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(OrnamentTests); + + + +/***/ }), + +/***/ "./tests/parser_tests.ts": +/*!*******************************!*\ + !*** ./tests/parser_tests.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ParserTests": () => (/* binding */ ParserTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_parser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/parser */ "./src/parser.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Parser Tests + + +const ParserTests = { + Start() { + QUnit.module('Parser'); + QUnit.test('Basic', basic); + QUnit.test('Advanced', advanced); + QUnit.test('Mixed', mixed); + QUnit.test('Micro Score', microscore); + }, +}; +/** + * Grammar used in the first three test cases: basic, advanced, mixed. + */ +class TestGrammar { + // The begin() function is the only requirement when implementing the Grammar interface. + begin() { + return () => ({ expect: this.expect }); + } + BIGORLITTLE() { + return { expect: [this.BIGLINE, this.LITTLELINE], or: true }; + } + BIGLINE() { + return { expect: [this.LBRACE, this.WORD, this.WORDS, this.MAYBEEXCLAIM, this.RBRACE] }; + } + LITTLELINE() { + return { expect: [this.WORD, this.WORDS] }; + } + WORDS() { + return { expect: [this.COMMA, this.WORD], zeroOrMore: true }; + } + MAYBEEXCLAIM() { + return { expect: [this.EXCLAIM], maybe: true }; + } + LBRACE() { + return { token: '[{]' }; + } + RBRACE() { + return { token: '[}]' }; + } + WORD() { + return { token: '[a-zA-Z]+' }; + } + COMMA() { + return { token: '[,]' }; + } + EXCLAIM() { + return { token: '[!]' }; + } + EOL() { + return { token: '$' }; + } +} +/** + * Grammar used in the microscore test case. + * It represents a series of piano key numbers (Middle C == 40) separated by whitespace. + * C Major Scale => 40 42 44 45 47 49 51 52 + * A chord is 2 or more piano key numbers surrounded by BRACKETS and separated by PERIODS + * C Major == [40.44.47] + * C-major F-major G-major A-minor chord progression => [40.44.47] [45.49.52] [47.51.54] [49.52.56] + */ +class MicroScoreGrammar { + constructor() { + this.ITEM = () => ({ expect: [this.PIANO_KEY_NUMBER, this.CHORD], or: true }); + this.MAYBE_MORE_ITEMS = () => ({ expect: [this.ITEM], zeroOrMore: true }); + this.PIANO_KEY_NUMBER = () => ({ expect: [this.NUM], oneOrMore: true }); + this.CHORD = () => ({ expect: [this.LEFT_BRACKET, this.PIANO_KEY_NUMBER, this.MORE_CHORD_PARTS, this.RIGHT_BRACKET] }); + this.MORE_CHORD_PARTS = () => ({ expect: [this.PERIOD, this.PIANO_KEY_NUMBER], oneOrMore: true }); + this.NUM = () => ({ token: '\\d+' }); + this.WHITESPACE = () => ({ token: '\\s+' }); + this.PERIOD = () => ({ token: '\\.' }); + this.LEFT_BRACKET = () => ({ token: '\\[' }); + this.RIGHT_BRACKET = () => ({ token: '\\]' }); + this.EOL = () => ({ token: '$' }); + } + begin() { + return () => ({ expect: [this.ITEM, this.MAYBE_MORE_ITEMS, this.EOL] }); + } +} +/** + * Check that the result is a parse failure, and verify the error position. + */ +function fails(assert, result, expectedErrorPos, msg) { + assert.notOk(result.success, msg); + assert.equal(result.errorPos, expectedErrorPos, msg); +} +function basic(assert) { + const grammar = new TestGrammar(); + grammar.expect = [grammar.LITTLELINE, grammar.EOL]; + const parser = new _src_parser__WEBPACK_IMPORTED_MODULE_1__.Parser(grammar); + // Each of these strings will parse correctly. + const mustPass = ['first, second', 'first,second', 'first', 'first,second, third']; + mustPass.forEach((line) => assert.equal(parser.parse(line).success, true, line)); + fails(assert, parser.parse(''), 0); + fails(assert, parser.parse('first second'), 6); + fails(assert, parser.parse('first,,'), 5); + fails(assert, parser.parse('first,'), 5); + fails(assert, parser.parse(',,'), 0); +} +function advanced(assert) { + const grammar = new TestGrammar(); + grammar.expect = [grammar.BIGLINE, grammar.EOL]; + const parser = new _src_parser__WEBPACK_IMPORTED_MODULE_1__.Parser(grammar); + const mustPass = ['{first}', '{first!}', '{first,second}', '{first,second!}', '{first,second,third!}']; + mustPass.forEach((line) => assert.equal(parser.parse(line).success, true, line)); + fails(assert, parser.parse('{first,second,third,}'), 19); + fails(assert, parser.parse('first,second,third'), 0); + fails(assert, parser.parse('{first,second,third'), 19); + fails(assert, parser.parse('{!}'), 1); +} +function mixed(assert) { + const grammar = new TestGrammar(); + grammar.expect = [grammar.BIGORLITTLE, grammar.EOL]; + const parser = new _src_parser__WEBPACK_IMPORTED_MODULE_1__.Parser(grammar); + const mustPass = ['{first,second,third!}', 'first, second']; + mustPass.forEach((line) => assert.equal(parser.parse(line).success, true, line)); + fails(assert, parser.parse('first second'), 6); +} +function microscore(assert) { + const grammar = new MicroScoreGrammar(); + const parser = new _src_parser__WEBPACK_IMPORTED_MODULE_1__.Parser(grammar); + const mustPass = [ + '40 42 44 45 47 49 51 52', + '[40.44.47] [45.49.52] [47.51.54] [49.52.56]', + '40 [40.44.47] 45 47 [44.47.51]', // Mixed Notes and Chords: C4 [Cmajor] F4 G4 [Eminor] + ]; + mustPass.forEach((line) => { + var _a; + const result = parser.parse(line); + assert.equal(result.success, true, line); + assert.equal((_a = result.matches) === null || _a === void 0 ? void 0 : _a.length, 3, line); + }); + fails(assert, parser.parse('40 42 44 45 47 49 5A 52'), 19); + fails(assert, parser.parse('40.44.47] [45.49.52] [47.51.54] [49.52.56]'), 2); + fails(assert, parser.parse('40 [40] 45 47 [44.47.51]'), 3); // A chord with a single note is not allowed. +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ParserTests); + + + +/***/ }), + +/***/ "./tests/pedalmarking_tests.ts": +/*!*************************************!*\ + !*** ./tests/pedalmarking_tests.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PedalMarkingTests": () => (/* binding */ PedalMarkingTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// PedalMarking Tests +// TODO: Fix Error => Type 'Tickable' is not assignable to type 'StaveNote'. + +const PedalMarkingTests = { + Start() { + QUnit.module('PedalMarking'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple Pedal 1', simple1); + run('Simple Pedal 2', simple2); + run('Simple Pedal 3', simple3); + run('Release and Depress on Same Note 1', releaseDepress1); + run('Release and Depress on Same Note 2', releaseDepress2); + run('Custom Text 1', customTest1); + run('Custom Text 2', customTest2); + }, +}; +/** + * Every test below uses this to set up the score and two staves/voices. + */ +function createTest(makePedal) { + return (options) => { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 200); + const score = f.EasyScore(); + const stave0 = f.Stave({ width: 250 }).addClef('treble'); + const voice0 = score.voice(score.notes('b4/4, b4, b4, b4[stem="down"]', { stem: 'up' })); + f.Formatter().joinVoices([voice0]).formatToStave([voice0], stave0); + const stave1 = f.Stave({ width: 260, x: 250 }); + const voice1 = score.voice(score.notes('c4/4, c4, c4, c4', { stem: 'up' })); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + makePedal(f, voice0.getTickables(), voice1.getTickables()); + f.draw(); + options.assert.ok(true, 'Must render'); + }; +} +function withSimplePedal(style) { + return (factory, notes0, notes1) => factory.PedalMarking({ + notes: [notes0[0], notes0[2], notes0[3], notes1[3]], + options: { style }, + }); +} +function withReleaseAndDepressedPedal(style) { + return (factory, notes0, notes1) => factory.PedalMarking({ + notes: [notes0[0], notes0[3], notes0[3], notes1[1], notes1[1], notes1[3]], + options: { style }, + }); +} +const simple1 = createTest(withSimplePedal('text')); +const simple2 = createTest(withSimplePedal('bracket')); +const simple3 = createTest(withSimplePedal('mixed')); +const releaseDepress1 = createTest(withReleaseAndDepressedPedal('bracket')); +const releaseDepress2 = createTest(withReleaseAndDepressedPedal('mixed')); +const customTest1 = createTest((factory, notes0, notes1) => { + const pedal = factory.PedalMarking({ + notes: [notes0[0], notes1[3]], + options: { style: 'text' }, + }); + pedal.setCustomText('una corda', 'tre corda'); + return pedal; +}); +const customTest2 = createTest((factory, notes0, notes1) => { + const pedal = factory.PedalMarking({ + notes: [notes0[0], notes1[3]], + options: { style: 'mixed' }, + }); + pedal.setCustomText('Sost. Ped.'); + return pedal; +}); +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(PedalMarkingTests); + + + +/***/ }), + +/***/ "./tests/percussion_tests.ts": +/*!***********************************!*\ + !*** ./tests/percussion_tests.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PercussionTests": () => (/* binding */ PercussionTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// Author: Mike Corrigan 2012 +// +// Percussion Tests +// TODO: Type 'Tickable[]' is not assignable to type 'StemmableNote[]'. + + +const PercussionTests = { + Start() { + QUnit.module('Percussion'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Percussion Clef', draw); + run('Percussion Notes', drawNotes); + run('Percussion Basic0', basic0); + run('Percussion Basic1', basic1); + run('Percussion Basic2', basic2); + run('Percussion Snare0', snare0); + run('Percussion Snare1', snare1); + run('Percussion Snare2', snare2); + run('Percussion Snare3', snare3); + }, +}; +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300).addClef('percussion').setContext(ctx).draw(); + options.assert.ok(true); +} +/** + * Helper function used by the drawNotes() test case below. + */ +function showNote(struct, stave, ctx, x) { + const staveNote = new _src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote(struct).setStave(stave); + new _src_index__WEBPACK_IMPORTED_MODULE_1__.TickContext().addTickable(staveNote).preFormat().setX(x); + staveNote.setContext(ctx).draw(); + return staveNote; +} +function drawNotes(options, contextBuilder) { + const notes = [ + { keys: ['g/5/d0'], duration: '4' }, + { keys: ['g/5/d1'], duration: '4' }, + { keys: ['g/5/d2'], duration: '4' }, + { keys: ['g/5/d3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/t0'], duration: '1' }, + { keys: ['g/5/t1'], duration: '4' }, + { keys: ['g/5/t2'], duration: '4' }, + { keys: ['g/5/t3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/x0'], duration: '1' }, + { keys: ['g/5/x1'], duration: '4' }, + { keys: ['g/5/x2'], duration: '4' }, + { keys: ['g/5/x3'], duration: '4' }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + // Draw two staves, one with up-stems and one with down-stems. + for (let h = 0; h < 2; ++h) { + const stave = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10 + h * 120, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.stem_direction = h === 0 ? -1 : 1; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } + } +} +/** + * Helper function for the seven test cases below. + * Adds a percussion clef (two short vertical bars, like a pause sign) to the stave. + */ +function createSingleMeasureTest(setup) { + return (options) => { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500); + const stave = f.Stave().addClef('percussion').setTimeSignature('4/4'); + setup(f); + f.Formatter().joinVoices(f.getVoices()).formatToStave(f.getVoices(), stave); + f.draw(); + options.assert.ok(true); + }; +} +const basic0 = createSingleMeasureTest((f) => { + const voice0 = f + .Voice() + .addTickables([ + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + ]); + const voice1 = f + .Voice() + .addTickables([ + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + ]); + f.Beam({ notes: voice0.getTickables() }); + f.Beam({ notes: voice1.getTickables().slice(0, 2) }); + f.Beam({ notes: voice1.getTickables().slice(3, 5) }); +}); +const basic1 = createSingleMeasureTest((f) => { + f.Voice().addTickables([ + f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), + f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), + f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), + f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), + ]); + f.Voice().addTickables([ + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + ]); +}); +const basic2 = createSingleMeasureTest((f) => { + const voice0 = f + .Voice() + .addTickables([ + f.StaveNote({ keys: ['a/5/x3'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5'], duration: '8' }), + f.StaveNote({ keys: ['g/4/n', 'g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + ]); + f.Beam({ notes: voice0.getTickables().slice(1, 8) }); + const notes1 = [ + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '8d', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: -1 }), + ]; + _src_index__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([notes1[4]], { all: true }); + const voice1 = f.Voice().addTickables(notes1); + f.Beam({ notes: voice1.getTickables().slice(0, 2) }); + f.Beam({ notes: voice1.getTickables().slice(4, 6) }); +}); +const snare0 = createSingleMeasureTest((f) => { + const font = { + family: _src_index__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 14, + weight: _src_index__WEBPACK_IMPORTED_MODULE_1__.FontWeight.BOLD, + style: _src_index__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC, + }; + f.Voice().addTickables([ + f + .StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }) + .addModifier(f.Articulation({ type: 'a>' }), 0) + .addModifier(f.Annotation({ text: 'L', font }), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'R', font }), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'L', font }), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'L', font }), 0), + ]); +}); +const snare1 = createSingleMeasureTest((f) => { + f.Voice().addTickables([ + f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'ah' }), 0), + f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'ah' }), 0), + f.StaveNote({ keys: ['a/5/x3'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'a,' }), 0), + ]); +}); +const snare2 = createSingleMeasureTest((f) => { + f.Voice().addTickables([ + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(1), 0), + f.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(1), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(3), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(4), 0), + ]); +}); +const snare3 = createSingleMeasureTest((factory) => { + factory + .Voice() + .addTickables([ + factory.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(2), 0), + factory.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(2), 0), + factory.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(3), 0), + factory.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(4), 0), + ]); +}); +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(PercussionTests); + + + +/***/ }), + +/***/ "./tests/registry_tests.ts": +/*!*********************************!*\ + !*** ./tests/registry_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RegistryTests": () => (/* binding */ RegistryTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Registry Tests + + +const RegistryTests = { + Start() { + QUnit.module('Registry'); + QUnit.test('Register and Clear', registerAndClear); + QUnit.test('Default Registry', defaultRegistry); + QUnit.test('Multiple Classes', classes); + }, +}; +function registerAndClear(assert) { + const registry = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry(); + const score = new _src_index__WEBPACK_IMPORTED_MODULE_1__.EasyScore({ factory: _src_index__WEBPACK_IMPORTED_MODULE_1__.Factory.newFromElementId(null) }); + registry.register(score.notes('C4')[0], 'foobar'); + const foobar = registry.getElementById('foobar'); + assert.ok(foobar); + assert.equal(foobar.getAttribute('id'), 'foobar'); + registry.clear(); + assert.notOk(registry.getElementById('foobar')); + // eslint-disable-next-line + // @ts-ignore: intentional type mismatch to trigger an error. + assert.throws(() => registry.register(score.notes('C4'))); + registry.clear(); + assert.ok(registry.register(score.notes('C4[id="boobar"]')[0]).getElementById('boobar')); +} +function defaultRegistry(assert) { + const registry = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry(); + const score = new _src_index__WEBPACK_IMPORTED_MODULE_1__.EasyScore({ factory: _src_index__WEBPACK_IMPORTED_MODULE_1__.Factory.newFromElementId(null) }); + _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry.enableDefaultRegistry(registry); + score.notes('C4[id="foobar"]'); + const note = registry.getElementById('foobar'); + assert.ok(note); + note.setAttribute('id', 'boobar'); + assert.ok(registry.getElementById('boobar')); + assert.notOk(registry.getElementById('foobar')); + registry.clear(); + assert.equal(registry.getElementsByType(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote.CATEGORY).length, 0); + score.notes('C5'); + const elements = registry.getElementsByType(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote.CATEGORY); + assert.equal(elements.length, 1); +} +function classes(assert) { + const registry = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry(); + const score = new _src_index__WEBPACK_IMPORTED_MODULE_1__.EasyScore({ factory: _src_index__WEBPACK_IMPORTED_MODULE_1__.Factory.newFromElementId(null) }); + _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry.enableDefaultRegistry(registry); + score.notes('C4[id="foobar"]'); + const note = registry.getElementById('foobar'); + note.addClass('foo'); + assert.ok(note.hasClass('foo')); + assert.notOk(note.hasClass('boo')); + assert.equal(registry.getElementsByClass('foo').length, 1); + assert.equal(registry.getElementsByClass('boo').length, 0); + note.addClass('boo'); + assert.ok(note.hasClass('foo')); + assert.ok(note.hasClass('boo')); + assert.equal(registry.getElementsByClass('foo').length, 1); + assert.equal(registry.getElementsByClass('boo').length, 1); + note.removeClass('boo'); + note.removeClass('foo'); + assert.notOk(note.hasClass('foo')); + assert.notOk(note.hasClass('boo')); + assert.equal(registry.getElementsByClass('foo').length, 0); + assert.equal(registry.getElementsByClass('boo').length, 0); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(RegistryTests); + + + +/***/ }), + +/***/ "./tests/renderer_tests.ts": +/*!*********************************!*\ + !*** ./tests/renderer_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RendererTests": () => (/* binding */ RendererTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Ron B. Yeh +// MIT License +// +// Renderer Tests + + +// TODO: Should FactoryOptions.renderer.elementId also accept a canvas | div? +const STAVE_WIDTH = 700; +const STAVE_HEIGHT = 100; +// FactoryOptions.stave.space defaults to 10. +// We subtract 10 to make the useRendererAPI() output look identical to useFactoryAPI(). +const STAVE_RIGHT_MARGIN = 10; +const USE_RENDERER = { useRendererAPI: true }; +const USE_FACTORY = { useRendererAPI: false }; +const RendererTests = { + Start() { + QUnit.module('Renderer'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + // Randomly choose one of four setup paths. See below for a description. + // Refresh `flow.html` to see the test change each time. + // We can manually check that they look identical + // by opening `flow.html` in multiple tabs & quickly switching between tabs. + run('Random', random); + // These are the four setup paths. They should all produce the same output. + // Use the: Renderer API OR Factory API + // Pass in: element ID string OR canvas/div element. + run('Renderer API with element ID string', stringElementId, USE_RENDERER); + run('Renderer API with canvas or div', canvasOrDivElement, USE_RENDERER); + run('Renderer API with context', passRenderContext); + run('Factory API with element ID string', stringElementId, USE_FACTORY); + run('Factory API with canvas or div', canvasOrDivElement, USE_FACTORY); + }, +}; +/** + * Helper function to add three notes to a stave. + */ +function drawStave(stave, context) { + stave.addClef('bass').addTimeSignature('3/4').draw(); + _src_index__WEBPACK_IMPORTED_MODULE_1__.Formatter.FormatAndDraw(context, stave, [ + new _src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote({ keys: ['C/4'], duration: '4' }), + new _src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote({ keys: ['E/4'], duration: '4' }), + new _src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote({ keys: ['G/4'], duration: '4' }), + ]); +} +/** + * Randomize the test upon each refresh (for verifying that the output is identical). + * Draw a colored outline to indicate which of the four options is shown. + * - blue = element is a SVG or Canvas element + * - gray = element ID is a string + * - solid outline = use the Renderer API directly + * - dashed outline = use the Factory API + */ +function random(options) { + const useElementIDString = Math.random() > 0.5; + const useRendererAPI = Math.random() > 0.5; + options.params = { useRendererAPI }; + if (useElementIDString) { + stringElementId(options); + } + else { + canvasOrDivElement(options); + } + // eslint-disable-next-line + const element = document.getElementById(options.elementId); + const colorForElementType = useElementIDString ? '#CCCCCC' /* light gray */ : '#0074d9'; /* blue */ + const lineStyleForWhichAPI = useRendererAPI ? 'solid' : 'dashed'; + const borderStyle = `3px ${lineStyleForWhichAPI} ${colorForElementType}`; + let elementType; + if (options.backend === _src_index__WEBPACK_IMPORTED_MODULE_1__.Renderer.Backends.CANVAS) { + // If the backend is canvas, we draw a border around the canvas directly. + element.style.border = borderStyle; + elementType = '<canvas> element object'; + } + else { + // If the backend is SVG, we draw a border around the SVG child of the DIV. + element.children[0].style.border = borderStyle; + elementType = '<svg> element object'; + } + if (useElementIDString) { + elementType = 'elementID string'; + } + const whichAPI = useRendererAPI ? 'Renderer API' : 'Factory API'; + element.parentElement.insertAdjacentHTML('beforeend', `
` + + `${whichAPI}` + + ` with ` + + `${elementType}` + + `

`); +} +function useRendererAPI(e, backend) { + const renderer = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Renderer(e, backend); + renderer.resize(STAVE_WIDTH, STAVE_HEIGHT); + const context = renderer.getContext(); + drawStave(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stave(0, 0, STAVE_WIDTH - STAVE_RIGHT_MARGIN).setContext(context), context); +} +/** + * Alternatively, use the Factory API! + * The Factory API declares elementId to be string | null. + * However, if we pass in a canvas or div element, it will still work. + * This is because Factory calls new Renderer(elementId, ...) via Renderer.buildContext(). + */ +function useFactoryAPI(e, backend) { + const opts = { + renderer: { elementId: e, width: STAVE_WIDTH, height: STAVE_HEIGHT, backend }, + }; + const factory = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Factory(opts); + drawStave(factory.Stave(), factory.getContext()); +} +/** + * Pass in a elementId string. Renderer will call document.getElementById(). + */ +function stringElementId(options) { + const elementId = options.elementId; + if (options.params.useRendererAPI) { + useRendererAPI(elementId, options.backend); + } + else { + useFactoryAPI(elementId, options.backend); + } + options.assert.ok(true); +} +/** + * Pass a canvas or div element directly to the Renderer constructor. + */ +function canvasOrDivElement(options) { + const element = document.getElementById(options.elementId); + if (options.params.useRendererAPI) { + useRendererAPI(element, options.backend); + } + else { + useFactoryAPI(element, options.backend); + } + options.assert.ok(true); +} +/** + * Pass the render context directly to the Renderer constructor. + */ +function passRenderContext(options) { + let context; + const element = document.getElementById(options.elementId); + if ((0,_src_index__WEBPACK_IMPORTED_MODULE_1__.isHTMLCanvas)(element)) { + const ctx = element.getContext('2d'); + if (!ctx) { + throw new _src_index__WEBPACK_IMPORTED_MODULE_1__.RuntimeError(`Couldn't get context from element "${options.elementId}"`); + } + context = new _src_index__WEBPACK_IMPORTED_MODULE_1__.CanvasContext(ctx); + } + else { + context = new _src_index__WEBPACK_IMPORTED_MODULE_1__.SVGContext(element); + } + const renderer = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Renderer(context); + renderer.resize(STAVE_WIDTH, STAVE_HEIGHT); + drawStave(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stave(0, 0, STAVE_WIDTH - STAVE_RIGHT_MARGIN).setContext(context), context); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(RendererTests); + + + +/***/ }), + +/***/ "./tests/rests_tests.ts": +/*!******************************!*\ + !*** ./tests/rests_tests.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RestsTests": () => (/* binding */ RestsTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_tuplet__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Rests Tests + + + + + + + + + +const RestsTests = { + Start() { + QUnit.module('Rests'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Outside Stave', ledgerRest); + run('Dotted', basic); + run('Auto Align - Beamed Notes Stems Up', beamsUp); + run('Auto Align - Beamed Notes Stems Down', beamsDown); + run('Auto Align - Tuplets Stems Up', tupletsUp); + run('Auto Align - Tuplets Stems Down', tupletsDown); + run('Auto Align - Single Voice (Default)', singleVoiceDefaultAlignment); + run('Auto Align - Single Voice (Align All)', singleVoiceAlignAll); + run('Auto Align - Multi Voice', multiVoice); + }, +}; +/** + * Helper function to create a context and stave. + * + * @param options + * @param contextBuilder static function in renderer.ts (Renderer.getSVGContext or Renderer.getCanvasContext). + * @param width + * @param height + * @returns object with .context and .stave properties + */ +function setupContext(options, contextBuilder, width = 350, height = 150) { + // context is SVGContext or CanvasRenderingContext2D (native) or CanvasContext (only if Renderer.USE_CANVAS_PROXY is true). + const context = contextBuilder(options.elementId, width, height); + context.scale(0.9, 0.9); + context.font = '10pt Arial'; + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_5__.Stave(10, 30, width).addClef('treble').addTimeSignature('4/4').setContext(context).draw(); + return { context, stave }; +} +/** + * Dotted rests (whole to 128th). + * The rest duration is specified as 'wr', 'hr', ..., '128r'. + */ +function basic(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 700); + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'wr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'hr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '16r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '32r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '64r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '128r' }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach(notes, { all: true }); + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); + options.assert.ok(true, 'Dotted Rest Test'); +} +/** + * Use the ledger glyph if the whole or half rest is above/below the staff + */ +function ledgerRest(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 700); + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['a/5'], stem_direction: 1, duration: 'wr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['c/6'], stem_direction: 1, duration: 'hr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'hr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['a/3'], stem_direction: 1, duration: 'wr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['f/3'], stem_direction: 1, duration: 'hr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'wr' }), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); + options.assert.ok(true, 'Leger/Ledger Rest Test'); +} +// Optional: Use a helper function to make your code more concise. +const note = (noteStruct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote(noteStruct); +/** + * Rests are intermixed within beamed notes (with the stems and beams at the top). + */ +function beamsUp(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['e/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + note({ keys: ['b/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['c/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + note({ keys: ['c/4'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + note({ keys: ['c/4'], stem_direction: 1, duration: '8' }), + ]; + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(0, 4)); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(4, 8)); + const beam3 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(8, 12)); + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); + beam1.setContext(context).draw(); + beam2.setContext(context).draw(); + beam3.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Beams Up Test'); +} +/** + * Rests are intermixed within beamed notes (with the stems and beams at the bottom). + */ +function beamsDown(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['c/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['e/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['e/4'], stem_direction: -1, duration: '8' }), + ]; + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(0, 4)); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(4, 8)); + const beam3 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(8, 12)); + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); + beam1.setContext(context).draw(); + beam2.setContext(context).draw(); + beam3.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Beams Down Test'); +} +/** + * Call setTupletLocation(Tuplet.LOCATION_TOP) to place the tuplet indicator (bracket and number) at the + * top of the group of notes. Tuplet.LOCATION_TOP is the default, so this is optional. + */ +function tupletsUp(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['b/4'], stem_direction: 1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4r' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4r' }), + note({ keys: ['g/5'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['g/5'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + ]; + const tuplet1 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(0, 3)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_TOP); + const tuplet2 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(3, 6)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_TOP); + const tuplet3 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(6, 9)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_TOP); + const tuplet4 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(9, 12)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_TOP); + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); + tuplet1.setContext(context).draw(); + tuplet2.setContext(context).draw(); + tuplet3.setContext(context).draw(); + tuplet4.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Tuplets Stem Up Test'); +} +/** + * Call setTupletLocation(Tuplet.LOCATION_BOTTOM) to place the tuplet indicator (bracket and number) at the + * bottom of the group of notes. + */ +function tupletsDown(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['a/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + ]; + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(0, 3)); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(3, 6)); + const beam3 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(6, 9)); + const beam4 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(9, 12)); + const tuplet1 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(0, 3)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_BOTTOM); + const tuplet2 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(3, 6)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_BOTTOM); + const tuplet3 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(6, 9)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_BOTTOM); + const tuplet4 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(9, 12)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_BOTTOM); + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); + tuplet1.setContext(context).draw(); + tuplet2.setContext(context).draw(); + tuplet3.setContext(context).draw(); + tuplet4.setContext(context).draw(); + beam1.setContext(context).draw(); + beam2.setContext(context).draw(); + beam3.setContext(context).draw(); + beam4.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Tuplets Stem Down Test'); +} +/** + * By default rests are centered vertically within the stave, except + * when they are inside a group of beamed notes (in which case they are + * centered vertically within that group). + */ +function singleVoiceDefaultAlignment(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['f/4'], stem_direction: -1, duration: '4' }), + note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['d/5'], stem_direction: -1, duration: '4' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + ]; + const beam = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(5, 9)); + const tuplet = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(9, 12)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_TOP); + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); + tuplet.setContext(context).draw(); + beam.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Default Test'); +} +/** + * The only difference between staveRestsAll() and staveRests() is that this test case + * passes { align_rests: true } to Formatter.FormatAndDraw(...). + */ +function singleVoiceAlignAll(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['f/4'], stem_direction: -1, duration: '4' }), + note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['d/5'], stem_direction: -1, duration: '4' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + ]; + const beam = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(5, 9)); + const tuplet = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(9, 12)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_TOP); + // Set { align_rests: true } to align rests (vertically) with nearby notes in each voice. + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes, { align_rests: true }); + tuplet.setContext(context).draw(); + beam.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Align All Test'); +} +/** + * Multi Voice + * The top voice shows quarter-note chords alternating with quarter rests. + * The bottom voice shows two groups of beamed eighth notes, with eighth rests. + */ +function multiVoice(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_5__.Stave(50, 10, 500).addClef('treble').setContext(ctx).addTimeSignature('4/4').draw(); + const noteOnStave = (noteStruct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote(noteStruct).setStave(stave); + const notes1 = [ + noteOnStave({ keys: ['c/4', 'e/4', 'g/4'], duration: '4' }), + noteOnStave({ keys: ['b/4'], duration: '4r' }), + noteOnStave({ keys: ['c/4', 'd/4', 'a/4'], duration: '4' }), + noteOnStave({ keys: ['b/4'], duration: '4r' }), + ]; + const notes2 = [ + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + ]; + const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_8__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_3__.Flow.TIME4_4).addTickables(notes1); + const voice2 = new _src_voice__WEBPACK_IMPORTED_MODULE_8__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_3__.Flow.TIME4_4).addTickables(notes2); + // Set { align_rests: true } to align rests (vertically) with nearby notes in each voice. + new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave, { align_rests: true }); + const beam2_1 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes2.slice(0, 4)); + const beam2_2 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes2.slice(4, 8)); + // Important Note: we need to draw voice2 first, since voice2 generates ledger lines. + // Otherwise, the ledger lines will be drawn on top of middle C notes in voice1. + voice2.draw(ctx); + voice1.draw(ctx); + beam2_1.setContext(ctx).draw(); + beam2_2.setContext(ctx).draw(); + options.assert.ok(true, 'Strokes Test Multi Voice'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(RestsTests); + + + +/***/ }), + +/***/ "./tests/rhythm_tests.ts": +/*!*******************************!*\ + !*** ./tests/rhythm_tests.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RhythmTests": () => (/* binding */ RhythmTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Rhythm Tests + + + + + + + +const RhythmTests = { + Start() { + QUnit.module('Rhythm'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + // TODO: Simplify test names by removing 'Rhythm Draw - '. + run('Rhythm Draw - slash notes', drawBasic); + run('Rhythm Draw - beamed slash notes', drawBeamedSlashNotes); + run('Rhythm Draw - beamed slash notes, some rests', drawSlashAndBeamAndRests); + run('Rhythm Draw - 16th note rhythm with scratches', drawSixtenthWithScratches); + run('Rhythm Draw - 32nd note rhythm with scratches', drawThirtySecondWithScratches); + }, +}; +// CURRENTLY UNUSED. Draws 7 different slash notes without beams. +/* +function drawSlash(options: TestOptions, contextBuilder: ContextBuilder): void { + const ctx = contextBuilder(options.elementId, 350, 180); + const stave = new Stave(10, 10, 350); + stave.setContext(ctx); + stave.draw(); + + const notes: StaveNoteStruct[] = [ + { keys: ['b/4'], duration: 'ws', stem_direction: -1 }, + { keys: ['b/4'], duration: 'hs', stem_direction: -1 }, + { keys: ['b/4'], duration: 'qs', stem_direction: -1 }, + { keys: ['b/4'], duration: '8s', stem_direction: -1 }, + { keys: ['b/4'], duration: '16s', stem_direction: -1 }, + { keys: ['b/4'], duration: '32s', stem_direction: -1 }, + { keys: ['b/4'], duration: '64s', stem_direction: -1 }, + ]; + options.assert.expect(notes.length * 2); + + for (let i = 0; i < notes.length; ++i) { + const staveNote = new StaveNote(notes[i]).setStave(stave); + new TickContext() + .addTickable(staveNote) + .preFormat() + .setX((i + 1) * 25); + staveNote.setContext(ctx).draw(); + + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +*/ +function drawBasic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + // bar 1 + const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 30, 150); + staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.DOUBLE); + staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('C'); + staveBar1.setContext(ctx).draw(); + const notesBar1 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], duration: '1s', stem_direction: -1 })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); + // bar 2 - juxtaposing second bar next to first bar + const staveBar2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 120); + staveBar2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); + staveBar2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); + staveBar2.setContext(ctx).draw(); + // bar 2 + const notesBar2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], duration: '2s', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], duration: '2s', stem_direction: -1 }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); + // bar 3 - juxtaposing second bar next to first bar + const staveBar3 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(staveBar2.getWidth() + staveBar2.getX(), staveBar2.getY(), 170); + staveBar3.setContext(ctx).draw(); + // bar 3 + const notesBar3 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '4s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '4s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '4s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '4s', + stem_direction: -1, + }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar3, notesBar3); + // bar 4 - juxtaposing second bar next to first bar + const staveBar4 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(staveBar3.getWidth() + staveBar3.getX(), staveBar3.getY(), 200); + staveBar4.setContext(ctx).draw(); + // bar 4 + const notesBar4 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar4, notesBar4); + options.assert.expect(0); +} +function drawBeamedSlashNotes(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + // bar 1 + const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 30, 300); + staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.DOUBLE); + staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('C'); + staveBar1.setContext(ctx).draw(); + // bar 4 + const notesBar1_part1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + ]; + const notesBar1_part2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + ]; + // create the beams for 8th notes in 2nd measure + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1_part1); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1_part2); + const notesBar1 = notesBar1_part1.concat(notesBar1_part2); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); + // Render beams + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + options.assert.expect(0); +} +function drawSlashAndBeamAndRests(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + // bar 1 + const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 30, 300); + staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.DOUBLE); + staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('F'); + staveBar1.setContext(ctx).draw(); + // bar 1 + const notesBar1_part1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], duration: '8s', stem_direction: -1 }), + ]; + notesBar1_part1[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('C7').setFont('Times', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size + 2), 0); + const notesBar1_part2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8r', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8r', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8r', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + ]; + // create the beams for 8th notes in 2nd measure + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1_part1); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1.concat(notesBar1_part2)); + // Render beams + beam1.setContext(ctx).draw(); + // bar 2 - juxtaposing second bar next to first bar + const staveBar2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 220); + staveBar2.setContext(ctx).draw(); + const notesBar2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '1s', + stem_direction: -1, + }), + ]; + notesBar2[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('F').setFont('Times', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size + 2), 0); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); + options.assert.expect(0); +} +function drawSixtenthWithScratches(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + // bar 1 + const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 30, 300); + staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.DOUBLE); + staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('F'); + staveBar1.setContext(ctx).draw(); + // bar 1 + const notesBar1_part1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '16m', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + ]; + const notesBar1_part2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '16m', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '16r', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + ]; + notesBar1_part1[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('C7').setFont('Times', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size + 3), 0); + // create the beams for 8th notes in 2nd measure + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1_part1); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1_part2); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1.concat(notesBar1_part2)); + // Render beams + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + options.assert.expect(0); +} +function drawThirtySecondWithScratches(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + // bar 1 + const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 30, 300); + staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.DOUBLE); + staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('F'); + staveBar1.setContext(ctx).draw(); + // bar 1 + const notesBar1_part1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '32m', + stem_direction: 1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '32m', + stem_direction: 1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '32r', + stem_direction: 1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + ]; + notesBar1_part1[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('C7').setFont('Times', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size + 3), 0); + // Create the beams for 8th notes in 2nd measure. + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1_part1); + // Helper function to justify and draw a 4/4 voice. + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1); + // Render beams + beam1.setContext(ctx).draw(); + options.assert.expect(0); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(RhythmTests); + + + +/***/ }), + +/***/ "./tests/stave_tests.ts": +/*!******************************!*\ + !*** ./tests/stave_tests.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveTests": () => (/* binding */ StaveTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_clef__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/clef */ "./src/clef.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_keysignature__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_staverepetition__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/staverepetition */ "./src/staverepetition.ts"); +/* harmony import */ var _src_stavevolta__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/stavevolta */ "./src/stavevolta.ts"); +/* harmony import */ var _src_textnote__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/textnote */ "./src/textnote.ts"); +/* harmony import */ var _src_timesignature__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../src/timesignature */ "./src/timesignature.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Basic Stave Tests +// TODO: Like Stave.setTempo(t: StaveTempoOptions, ...), Stave.setText(...) could declare an interface called StaveTextOptions. +// This helps developers because they can use the named type in their code for type checking. + + + + + + + + + + + + + + +const StaveTests = { + Start() { + QUnit.module('Stave'); + QUnit.test('StaveModifiers SortByCategory', sortByCategory); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Stave Draw Test', draw); + run('Open Stave Draw Test', drawOpenStave); + run('Multiple Stave Barline Test', drawMultipleMeasures); + run('Multiple Stave Barline Test (14pt Section)', drawMultipleMeasures, { fontSize: 14 }); + run('Multiple Stave Repeats Test', drawRepeats); + run('Stave End Modifiers Test', drawEndModifiers); + run('Stave Repetition (CODA) Positioning', drawStaveRepetition, { yShift: 0 }); + run('Stave Repetition (CODA) Positioning (-20)', drawStaveRepetition, { yShift: -20 }); + run('Stave Repetition (CODA) Positioning (+10)', drawStaveRepetition, { yShift: +10 }); + run('Multiple Staves Volta Test', drawVolta); + run('Volta + Modifier Measure Test', drawVoltaModifier); + run('Tempo Test', drawTempo); + run('Single Line Configuration Test', configureSingleLine); + run('Batch Line Configuration Test', configureAllLines); + run('Stave Text Test', drawStaveText); + run('Multiple Line Stave Text Test', drawStaveTextMultiLine); + run('Factory API', factoryAPI); + }, +}; +function sortByCategory(assert) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(0, 0, 300); + const clef0 = new _src_clef__WEBPACK_IMPORTED_MODULE_3__.Clef('treble'); + const clef1 = new _src_clef__WEBPACK_IMPORTED_MODULE_3__.Clef('alto'); + const clef2 = new _src_clef__WEBPACK_IMPORTED_MODULE_3__.Clef('bass'); + const time0 = new _src_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature('C'); + const time1 = new _src_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature('C|'); + const time2 = new _src_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature('9/8'); + const key0 = new _src_keysignature__WEBPACK_IMPORTED_MODULE_5__.KeySignature('G'); + const key1 = new _src_keysignature__WEBPACK_IMPORTED_MODULE_5__.KeySignature('F'); + const key2 = new _src_keysignature__WEBPACK_IMPORTED_MODULE_5__.KeySignature('D'); + const bar0 = new _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.SINGLE); + const bar1 = new _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.DOUBLE); + const bar2 = new _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.NONE); + // const order0 = { barlines: 0, clefs: 1, keysignatures: 2, timesignatures: 3 }; + // const order1 = { timesignatures: 0, keysignatures: 1, barlines: 2, clefs: 3 }; + const order0 = { Barline: 0, Clef: 1, KeySignature: 2, TimeSignature: 3 }; + const order1 = { TimeSignature: 0, KeySignature: 1, Barline: 2, Clef: 3 }; + const sortAndCompare = (title, a, b, order) => { + stave.sortByCategory(a, order); + // Verify that the two arrays are identical. + let isSame = true; + if (a.length !== b.length) + isSame = false; + for (let i = 0; i < a.length; ++i) { + if (a[i] !== b[i]) + isSame = false; + } + assert.ok(isSame, title); + }; + sortAndCompare('Keep the original order 1', [bar0, bar1, clef0, clef1, key0, key1, time0, time1], [bar0, bar1, clef0, clef1, key0, key1, time0, time1], order0); + sortAndCompare('Keep the original order 2', [time0, time1, key0, key1, bar0, bar1, clef0, clef1], [time0, time1, key0, key1, bar0, bar1, clef0, clef1], order1); + sortAndCompare('Sort and keep 1', [bar0, bar1, clef0, clef1, key0, key1, time0, time1], [time0, time1, key0, key1, bar0, bar1, clef0, clef1], order1); + sortAndCompare('Sort and keep 2', [bar0, clef0, key0, time0, key1, time1, clef1, bar1, time2, clef2, bar2, key2], [bar0, bar1, bar2, clef0, clef1, clef2, key0, key1, key2, time0, time1, time2], order0); + sortAndCompare('Sort and keep 3', [bar2, clef2, key2, time0, key0, time2, clef1, bar1, time1, clef0, bar0, key1], [time0, time2, time1, key2, key0, key1, bar2, bar1, bar0, clef2, clef1, clef0], order1); +} +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 150); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 10, 300); + stave.setContext(ctx); + stave.draw(); + options.assert.equal(stave.getYForNote(0), 100, 'getYForNote(0)'); + options.assert.equal(stave.getYForLine(5), 100, 'getYForLine(5)'); + options.assert.equal(stave.getYForLine(0), 50, 'getYForLine(0) - Top Line'); + options.assert.equal(stave.getYForLine(4), 90, 'getYForLine(4) - Bottom Line'); + options.assert.ok(true, 'all pass'); +} +function drawOpenStave(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 350); + let stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 10, 300, { left_bar: false }); + stave.setContext(ctx); + stave.draw(); + stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 150, 300, { right_bar: false }); + stave.setContext(ctx); + stave.draw(); + options.assert.ok(true, 'all pass'); +} +function drawMultipleMeasures(options, contextBuilder) { + var _a, _b; + options.assert.expect(0); + // Get the rendering context + const ctx = contextBuilder(options.elementId, 550, 200); + // bar 1 + const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 200); + staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); + staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.DOUBLE); + staveBar1.setSection('A', 0, 0, (_a = options.params) === null || _a === void 0 ? void 0 : _a.fontSize, false); + staveBar1.addClef('treble').setContext(ctx).draw(); + const notesBar1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['b/4'], duration: 'qr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); + // bar 2 - juxtaposing second bar next to first bar + const staveBar2 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 300); + staveBar2.setSection('B', 0, 0, (_b = options.params) === null || _b === void 0 ? void 0 : _b.fontSize); + staveBar2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.END); + staveBar2.setContext(ctx).draw(); + const notesBar2_part1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), + ]; + const notesBar2_part2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), + ]; + // create the beams for 8th notes in 2nd measure + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar2_part1); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar2_part2); + const notesBar2 = notesBar2_part1.concat(notesBar2_part2); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); + // Render beams + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); +} +function drawRepeats(options, contextBuilder) { + options.assert.expect(0); + // Get the rendering context + const ctx = contextBuilder(options.elementId, 750, 120); + // bar 1 + const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 0, 250); + staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); + staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_END); + staveBar1.addClef('treble'); + staveBar1.addKeySignature('A'); + staveBar1.setContext(ctx).draw(); + const notesBar1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['b/4'], duration: 'qr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); + // bar 2 - juxtaposing second bar next to first bar + const staveBar2 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 250); + staveBar2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); + staveBar2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_END); + staveBar2.setContext(ctx).draw(); + const notesBar2_part1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), + ]; + const notesBar2_part2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), + ]; + notesBar2_part2[0].addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 0); + notesBar2_part2[1].addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 0); + notesBar2_part2[3].addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 0); + // create the beams for 8th notes in 2nd measure + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar2_part1); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar2_part2); + const notesBar2 = notesBar2_part1.concat(notesBar2_part2); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); + // Render beams + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + // bar 3 - juxtaposing third bar next to second bar + const staveBar3 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(staveBar2.getWidth() + staveBar2.getX(), staveBar2.getY(), 50); + staveBar3.setContext(ctx).draw(); + const notesBar3 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/5'], duration: 'wr' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar3, notesBar3); + // bar 4 - juxtaposing third bar next to third bar + const staveBar4 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(staveBar3.getWidth() + staveBar3.getX(), staveBar3.getY(), 250 - staveBar1.getModifierXShift()); + staveBar4.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); + staveBar4.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_END); + staveBar4.setContext(ctx).draw(); + const notesBar4 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['b/4'], duration: 'qr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar4, notesBar4); +} +function drawEndModifiers(options, contextBuilder) { + options.assert.expect(0); + const staveWidth = 230; + const blockHeight = 80; + let x = 10; + let y = 0; + const ctx = contextBuilder(options.elementId, 800, 700); + function drawStavesInTwoLines(endBarLine) { + // Draw a stave with one measure. Change the ending modifiers. + // eslint-disable-next-line + function drawStave(x, y, width, begMods, endMods) { + const staveBar = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(x, y, width - 10); + if (begMods) { + if (begMods.barLine !== undefined) { + staveBar.setBegBarType(begMods.barLine); + } + if (begMods.clef !== undefined) { + staveBar.addClef(begMods.clef); + } + if (begMods.keySig !== undefined) { + staveBar.addKeySignature(begMods.keySig); + } + if (begMods.timeSig !== undefined) { + staveBar.setTimeSignature(begMods.timeSig); + } + } + if (endMods) { + if (endMods.barLine !== undefined) { + staveBar.setEndBarType(endMods.barLine); + } + if (endMods.clef !== undefined) { + staveBar.addEndClef(endMods.clef); + } + if (endMods.keySig !== undefined) { + staveBar.setEndKeySignature(endMods.keySig); + } + if (endMods.timeSig !== undefined) { + staveBar.setEndTimeSignature(endMods.timeSig); + } + } + staveBar.setContext(ctx).draw(); + const notesBar = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['b/4'], duration: 'qr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar, notesBar); + } + drawStave(x, y, staveWidth + 50, { barLine: _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN, clef: 'treble', keySig: 'A' }, { barLine: endBarLine, clef: 'bass' }); + x += staveWidth + 50; + drawStave(x, y, staveWidth, { barLine: _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, keySig: 'E' }); + x += staveWidth; + drawStave(x, y, staveWidth, { barLine: _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, timeSig: '2/4' }); + x += staveWidth; + x = 10; + y += blockHeight; + drawStave(x, y, staveWidth, { barLine: _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'bass', timeSig: '2/4' }); + x += staveWidth; + drawStave(x, y, staveWidth, { barLine: _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'treble', keySig: 'Ab' }); + x += staveWidth; + drawStave(x, y, staveWidth, { barLine: _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'bass', keySig: 'Ab', timeSig: '2/4' }); + x += staveWidth; + } + y = 0; + x = 10; + // First pair of staves. + drawStavesInTwoLines(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.SINGLE); + y += blockHeight + 10; + x = 10; + // Second pair of staves, with double barlines. + drawStavesInTwoLines(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.DOUBLE); + y += blockHeight + 10; + x = 10; + // Third pair of staves, with "two dot" repeat barlines. + drawStavesInTwoLines(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_END); + y += blockHeight + 10; + x = 10; + // Fourth pair of staves, with "two dots" on each side of the barlines. + drawStavesInTwoLines(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BOTH); +} +function drawStaveRepetition(options, contextBuilder) { + options.assert.expect(0); + // Get the rendering context + const ctx = contextBuilder(options.elementId, 725, 200); + // bar 1 + const mm1 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 150); + mm1.addClef('treble'); + mm1.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS_AL_FINE, options.params.yShift); + mm1.setMeasure(1); + mm1.setContext(ctx).draw(); + const notesmm1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm1, notesmm1); + // bar 2 - juxtapose second measure + const mm2 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm1.getWidth() + mm1.getX(), mm1.getY(), 150); + mm2.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.TO_CODA, options.params.yShift); + mm2.setMeasure(2); + mm2.setContext(ctx).draw(); + const notesmm2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm2, notesmm2); + // bar 3 - juxtapose third measure + const mm3 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm2.getWidth() + mm2.getX(), mm1.getY(), 150); + mm3.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS_AL_CODA, options.params.yShift); + mm3.setMeasure(3); + mm3.setContext(ctx).draw(); + const notesmm3 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm3, notesmm3); + // bar 4 - juxtapose fourth measure + const mm4 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm3.getWidth() + mm3.getX(), mm1.getY(), 150); + mm4.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.CODA_LEFT, options.params.yShift); + mm4.setMeasure(4); + mm4.setContext(ctx).draw(); + const notesmm4 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm4, notesmm4); +} +function drawVolta(options, contextBuilder) { + options.assert.expect(0); + // Get the rendering context + const ctx = contextBuilder(options.elementId, 725, 200); + // bar 1 + const mm1 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 125); + mm1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); + mm1.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.SEGNO_LEFT); + mm1.addClef('treble'); + mm1.addKeySignature('A'); + mm1.setMeasure(1); + mm1.setSection('A', 0); + mm1.setContext(ctx).draw(); + const notesmm1 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm1, notesmm1); + // bar 2 - juxtapose second measure + const mm2 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm1.getWidth() + mm1.getX(), mm1.getY(), 60); + mm2.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.CODA_RIGHT); + mm2.setMeasure(2); + mm2.setContext(ctx).draw(); + const notesmm2 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm2, notesmm2); + // bar 3 - juxtapose third measure + const mm3 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm2.getWidth() + mm2.getX(), mm1.getY(), 60); + mm3.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.BEGIN, '1.', -5); + mm3.setMeasure(3); + mm3.setContext(ctx).draw(); + const notesmm3 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm3, notesmm3); + // bar 4 - juxtapose fourth measure + const mm4 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm3.getWidth() + mm3.getX(), mm1.getY(), 60); + mm4.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.MID, '', -5); + mm4.setMeasure(4); + mm4.setContext(ctx).draw(); + const notesmm4 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm4, notesmm4); + // bar 5 - juxtapose fifth measure + const mm5 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm4.getWidth() + mm4.getX(), mm1.getY(), 60); + mm5.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_END); + mm5.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.END, '', -5); + mm5.setMeasure(5); + mm5.setContext(ctx).draw(); + const notesmm5 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm5, notesmm5); + // bar 6 - juxtapose sixth measure + const mm6 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm5.getWidth() + mm5.getX(), mm1.getY(), 60); + mm6.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.BEGIN_END, '2.', -5); + mm6.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.DOUBLE); + mm6.setMeasure(6); + mm6.setContext(ctx).draw(); + const notesmm6 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm6, notesmm6); + // bar 7 - juxtapose seventh measure + const mm7 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm6.getWidth() + mm6.getX(), mm1.getY(), 60); + mm7.setMeasure(7); + mm7.setSection('B', 0); + mm7.setContext(ctx).draw(); + const notesmm7 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['b/4'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm7, notesmm7); + // bar 8 - juxtapose eighth measure + const mm8 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm7.getWidth() + mm7.getX(), mm1.getY(), 60); + mm8.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.DOUBLE); + mm8.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS_AL_CODA); + mm8.setMeasure(8); + mm8.setContext(ctx).draw(); + const notesmm8 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/5'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm8, notesmm8); + // bar 9 - juxtapose ninth measure + const mm9 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm8.getWidth() + mm8.getX() + 20, mm1.getY(), 125); + mm9.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.END); + mm9.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.CODA_LEFT); + mm9.addClef('treble'); + mm9.addKeySignature('A'); + mm9.setMeasure(9); + mm9.setContext(ctx).draw(); + const notesmm9 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/5'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm9, notesmm9); +} +function drawVoltaModifier(options, contextBuilder) { + options.assert.expect(0); + // Get the rendering context + const ctx = contextBuilder(options.elementId, 1100, 200); + // bar 1: volta begin, with modifiers (clef, keysignature) + const mm1 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 175); + mm1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); + mm1.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.BEGIN_END, '1.', -5); + mm1.addClef('treble'); + mm1.addKeySignature('A'); + mm1.setMeasure(1); + mm1.setSection('A', 0); + mm1.setContext(ctx).draw(); + const notesmm1 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm1, notesmm1); + // bar 2: volta begin_mid, with modifiers (clef, keysignature) + const mm2 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm1.getX() + mm1.getWidth(), mm1.getY(), 175); + mm2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); + mm2.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS); + mm2.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.BEGIN, '2.', -5); + mm2.addClef('treble'); + mm2.addKeySignature('A'); + mm2.setMeasure(2); + mm2.setContext(ctx).draw(); + const notesmm2 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm2, notesmm2); + // bar 3: volta mid, with modifiers (clef, keysignature) + const mm3 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm2.getX() + mm2.getWidth(), mm2.getY(), 175); + mm3.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.MID, '', -5); + mm3.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS); + mm3.addClef('treble'); + mm3.addKeySignature('B'); + mm3.setMeasure(3); + mm3.setSection('B', 0); + mm3.setContext(ctx).draw(); + const notesmm3 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm3, notesmm3); + // bar 4: volta end, with modifiers (clef, keysignature) + const mm4 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm3.getX() + mm3.getWidth(), mm3.getY(), 175); + mm4.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.END, '1.', -5); + mm4.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS); + mm4.addClef('treble'); + mm4.addKeySignature('A'); + mm4.setMeasure(4); + mm4.setSection('C', 0); + mm4.setContext(ctx).draw(); + const notesmm4 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm4, notesmm4); + // bar 5: d.s. shift (similar potential x-shift concern) + const mm5 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm4.getX() + mm4.getWidth(), mm4.getY(), 175); + // mm5.addModifier(new Repetition(Repetition.type.DS, mm4.getX() + mm4.getWidth(), 50), StaveModifierPosition.RIGHT); + mm5.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.DOUBLE); + mm5.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS); + mm5.addClef('treble'); + mm5.addKeySignature('A'); + mm5.setMeasure(5); + mm5.setSection('D', 0); + mm5.setContext(ctx).draw(); + const notesmm5 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm5, notesmm5); + // bar 6: d.s. without modifiers + const mm6 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm5.getX() + mm5.getWidth(), mm5.getY(), 175); + // mm5.addModifier(new Repetition(Repetition.type.DS, mm4.getX() + mm4.getWidth(), 50), StaveModifierPosition.RIGHT); + mm6.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS); + mm6.setMeasure(6); + mm6.setSection('E', 0); + mm6.setContext(ctx).draw(); + const notesmm6 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm6, notesmm6); +} +function drawTempo(options, contextBuilder) { + options.assert.expect(0); + const ctx = contextBuilder(options.elementId, 725, 350); + const padding = 10; + let x = 0; + let y = 50; + function drawTempoStaveBar(width, tempo, tempo_y, notes) { + const staveBar = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(padding + x, y, width); + if (x === 0) + staveBar.addClef('treble'); + staveBar.setTempo(tempo, tempo_y); + staveBar.setContext(ctx).draw(); + const notesBar = notes || [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['b/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'q' }), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar, notesBar); + x += width; + } + drawTempoStaveBar(120, { duration: 'q', dots: 1, bpm: 80 }, 0); + drawTempoStaveBar(100, { duration: '8', dots: 2, bpm: 90 }, 0); + drawTempoStaveBar(100, { duration: '16', dots: 1, bpm: 96 }, 0); + drawTempoStaveBar(100, { duration: '32', bpm: 70 }, 0); + drawTempoStaveBar(250, { name: 'Andante', bpm: 120 }, -20, [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/5'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), + ]); + x = 0; + y += 150; + drawTempoStaveBar(120, { duration: 'w', bpm: 80 }, 0); + drawTempoStaveBar(100, { duration: 'h', bpm: 90 }, 0); + drawTempoStaveBar(100, { duration: 'q', bpm: 96 }, 0); + drawTempoStaveBar(100, { duration: '8', bpm: 70 }, 0); + drawTempoStaveBar(250, { name: 'Andante grazioso' }, 0, [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), + ]); +} +function configureSingleLine(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 10, 300); + stave + .setConfigForLine(0, { visible: true }) + .setConfigForLine(1, { visible: false }) + .setConfigForLine(2, { visible: true }) + .setConfigForLine(3, { visible: false }) + .setConfigForLine(4, { visible: true }); + stave.setContext(ctx).draw(); + const config = stave.getConfigForLines(); + options.assert.equal(config[0].visible, true, 'getLinesConfiguration() - Line 0'); + options.assert.equal(config[1].visible, false, 'getLinesConfiguration() - Line 1'); + options.assert.equal(config[2].visible, true, 'getLinesConfiguration() - Line 2'); + options.assert.equal(config[3].visible, false, 'getLinesConfiguration() - Line 3'); + options.assert.equal(config[4].visible, true, 'getLinesConfiguration() - Line 4'); + options.assert.ok(true, 'all pass'); +} +function configureAllLines(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 10, 300); + stave + .setConfigForLines([{ visible: false }, {}, { visible: false }, { visible: true }, { visible: false }]) + .setContext(ctx) + .draw(); + const config = stave.getConfigForLines(); + options.assert.equal(config[0].visible, false, 'getLinesConfiguration() - Line 0'); + options.assert.equal(config[1].visible, true, 'getLinesConfiguration() - Line 1'); + options.assert.equal(config[2].visible, false, 'getLinesConfiguration() - Line 2'); + options.assert.equal(config[3].visible, true, 'getLinesConfiguration() - Line 3'); + options.assert.equal(config[4].visible, false, 'getLinesConfiguration() - Line 4'); + options.assert.ok(true, 'all pass'); +} +function drawStaveText(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 900, 140); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(300, 10, 300); + stave.setText('Violin', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.LEFT); + stave.setText('Right Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.RIGHT); + stave.setText('Above Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.ABOVE); + stave.setText('Below Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.BELOW); + stave.setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function drawStaveTextMultiLine(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 900, 200); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(300, 40, 300); + stave.setText('Violin', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.LEFT, { shift_y: -10 }); + stave.setText('2nd line', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.LEFT, { shift_y: 10 }); + stave.setText('Right Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.RIGHT, { shift_y: -10 }); + stave.setText('2nd line', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.RIGHT, { shift_y: 10 }); + stave.setText('Above Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.ABOVE, { shift_y: -10 }); + stave.setText('2nd line', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.ABOVE, { shift_y: 10 }); + stave.setText('Left Below Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.BELOW, { shift_y: -10, justification: _src_textnote__WEBPACK_IMPORTED_MODULE_12__.TextJustification.LEFT }); + stave.setText('Right Below Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.BELOW, { shift_y: 10, justification: _src_textnote__WEBPACK_IMPORTED_MODULE_12__.TextJustification.RIGHT }); + stave.setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function factoryAPI(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 900, 200); + const stave = f.Stave({ x: 300, y: 40, width: 300 }); + stave.setText('Violin', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.LEFT, { shift_y: -10 }); + stave.setText('2nd line', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.LEFT, { shift_y: 10 }); + f.draw(); + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveTests); + + + +/***/ }), + +/***/ "./tests/staveconnector_tests.ts": +/*!***************************************!*\ + !*** ./tests/staveconnector_tests.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveConnectorTests": () => (/* binding */ StaveConnectorTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/staveconnector */ "./src/staveconnector.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// StaveConnector Tests +// TODO: Should we change StaveConnector.type => StaveConnectorType? We are inconsistent with this. + + + + + + +const StaveConnectorTests = { + Start() { + QUnit.module('StaveConnector'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Single Draw Test', drawSingle); + run('Single Draw Test, 4px Stave Line Thickness', drawSingle4pxStaveLines); + run('Single Both Sides Test', drawSingleBoth); + run('Double Draw Test', drawDouble); + run('Bold Double Line Left Draw Test', drawRepeatBegin); + run('Bold Double Line Right Draw Test', drawRepeatEnd); + run('Thin Double Line Right Draw Test', drawThinDouble); + run('Bold Double Lines Overlapping Draw Test', drawRepeatAdjacent); + run('Bold Double Lines Offset Draw Test', drawRepeatOffset); + run('Bold Double Lines Offset Draw Test 2', drawRepeatOffset2); + run('Brace Draw Test', drawBrace); + run('Brace Wide Draw Test', drawBraceWide); + run('Bracket Draw Test', drawBracket); + run('Combined Draw Test', drawCombined); + }, +}; +function drawSingle(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + connector.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); + connector.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + options.assert.ok(true, 'all pass'); +} +function drawSingle4pxStaveLines(options, contextBuilder) { + const oldThickness = _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.STAVE_LINE_THICKNESS; + _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.STAVE_LINE_THICKNESS = 4; + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + connector.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); + connector.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.STAVE_LINE_THICKNESS = oldThickness; + options.assert.ok(true, 'all pass'); +} +function drawSingleBoth(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector1 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + connector1.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE_LEFT); + connector1.setContext(ctx); + const connector2 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + connector2.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE_RIGHT); + connector2.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector1.draw(); + connector2.draw(); + options.assert.ok(true, 'all pass'); +} +function drawDouble(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + connector.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.DOUBLE); + connector.setContext(ctx); + line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); + connector.setContext(ctx); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawBrace(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 450, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(100, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(100, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + connector.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BRACE); + connector.setContext(ctx); + connector.setText('Piano'); + line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); + connector.setContext(ctx); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawBraceWide(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, -20, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 200, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + connector.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BRACE); + connector.setContext(ctx); + line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); + connector.setContext(ctx); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawBracket(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + connector.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BRACKET); + connector.setContext(ctx); + line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); + connector.setContext(ctx); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatBegin(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatEnd(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); + stave2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); + const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawThinDouble(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.DOUBLE); + stave2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.DOUBLE); + const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.THIN_DOUBLE); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatAdjacent(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 150); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 150); + const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(175, 10, 150); + const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(175, 120, 150); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave3.setContext(ctx); + stave4.setContext(ctx); + stave1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); + stave2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); + stave3.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); + stave4.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); + stave1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave3.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave4.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + const connector1 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const connector2 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const connector3 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); + const connector4 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); + connector1.setContext(ctx); + connector2.setContext(ctx); + connector3.setContext(ctx); + connector4.setContext(ctx); + connector1.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); + connector2.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector3.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); + connector4.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); + stave1.draw(); + stave2.draw(); + stave3.draw(); + stave4.draw(); + connector1.draw(); + connector2.draw(); + connector3.draw(); + connector4.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatOffset2(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 150); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 150); + const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(175, 10, 150); + const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(175, 120, 150); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave3.setContext(ctx); + stave4.setContext(ctx); + stave1.addClef('treble'); + stave2.addClef('bass'); + stave3.addClef('alto'); + stave4.addClef('treble'); + stave1.addTimeSignature('4/4'); + stave2.addTimeSignature('4/4'); + stave3.addTimeSignature('6/8'); + stave4.addTimeSignature('6/8'); + stave1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); + stave2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); + stave3.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); + stave4.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); + stave1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave3.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave4.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + const connector1 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const connector2 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const connector3 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); + const connector4 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); + const connector5 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); + connector1.setContext(ctx); + connector2.setContext(ctx); + connector3.setContext(ctx); + connector4.setContext(ctx); + connector5.setContext(ctx); + connector1.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); + connector2.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector3.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); + connector4.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector5.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE_LEFT); + connector1.setXShift(stave1.getModifierXShift()); + connector3.setXShift(stave3.getModifierXShift()); + stave1.draw(); + stave2.draw(); + stave3.draw(); + stave4.draw(); + connector1.draw(); + connector2.draw(); + connector3.draw(); + connector4.draw(); + connector5.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatOffset(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 150); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 150); + const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(185, 10, 150); + const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(185, 120, 150); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave3.setContext(ctx); + stave4.setContext(ctx); + stave1.addClef('bass'); + stave2.addClef('alto'); + stave3.addClef('treble'); + stave4.addClef('tenor'); + stave3.addKeySignature('Ab'); + stave4.addKeySignature('Ab'); + stave1.addTimeSignature('4/4'); + stave2.addTimeSignature('4/4'); + stave3.addTimeSignature('6/8'); + stave4.addTimeSignature('6/8'); + stave1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); + stave2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); + stave3.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); + stave4.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); + stave1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave3.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave4.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + const connector1 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const connector2 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const connector3 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); + const connector4 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); + const connector5 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); + connector1.setContext(ctx); + connector2.setContext(ctx); + connector3.setContext(ctx); + connector4.setContext(ctx); + connector5.setContext(ctx); + connector1.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); + connector2.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector3.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); + connector4.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector5.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE_LEFT); + connector1.setXShift(stave1.getModifierXShift()); + connector3.setXShift(stave3.getModifierXShift()); + stave1.draw(); + stave2.draw(); + stave3.draw(); + stave4.draw(); + connector1.draw(); + connector2.draw(); + connector3.draw(); + connector4.draw(); + connector5.draw(); + options.assert.ok(true, 'all pass'); +} +function drawCombined(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 550, 700); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 100, 300); + const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 190, 300); + const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 280, 300); + const stave5 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 370, 300); + const stave6 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 460, 300); + const stave7 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 560, 300); + stave1.setText('Violin', _src_modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave3.setContext(ctx); + stave4.setContext(ctx); + stave5.setContext(ctx); + stave6.setContext(ctx); + stave7.setContext(ctx); + const conn_single = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave7); + const conn_double = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave2, stave3); + const conn_bracket = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave4, stave7); + const conn_none = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave4, stave5); + const conn_brace = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave6, stave7); + conn_single.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); + conn_double.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.DOUBLE); + conn_bracket.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BRACKET); + conn_brace.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BRACE); + conn_brace.setXShift(-5); + conn_double.setText('Piano'); + conn_none.setText('Multiple', { shift_y: -15 }); + conn_none.setText('Line Text', { shift_y: 15 }); + conn_brace.setText('Harpsichord'); + conn_single.setContext(ctx); + conn_double.setContext(ctx); + conn_bracket.setContext(ctx); + conn_none.setContext(ctx); + conn_brace.setContext(ctx); + stave1.draw(); + stave2.draw(); + stave3.draw(); + stave4.draw(); + stave5.draw(); + stave6.draw(); + stave7.draw(); + conn_single.draw(); + conn_double.draw(); + conn_bracket.draw(); + conn_none.draw(); + conn_brace.draw(); + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveConnectorTests); + + + +/***/ }), + +/***/ "./tests/stavehairpin_tests.ts": +/*!*************************************!*\ + !*** ./tests/stavehairpin_tests.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveHairpinTests": () => (/* binding */ StaveHairpinTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_stavehairpin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stavehairpin */ "./src/stavehairpin.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// Author: Raffaele Viglianti, 2012 +// +// StaveHairpin Tests +// TODO: Incorrect property names in the options object: vo, left_ho, right_ho. + + +const StaveHairpinTests = { + Start() { + QUnit.module('StaveHairpin'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple StaveHairpin', simple); + run('Horizontal Offset StaveHairpin', horizontal); + run('Vertical Offset StaveHairpin', vertical); + run('Height StaveHairpin', height); + }, +}; +/** + * Helper function to draw a single hairpin (either crescendo or decrescendo). + * @param type is StaveHairpin.type.CRESC or StaveHairpin.type.DECRESC. + * @param position is Modifier.Position.ABOVE or Modifier.Position.BELOW. + */ +function drawHairpin(first_note, last_note, ctx, type, position, options) { + const hairpin = new _src_stavehairpin__WEBPACK_IMPORTED_MODULE_1__.StaveHairpin({ first_note, last_note }, type); + hairpin.setContext(ctx); + hairpin.setPosition(position); + if (options) { + hairpin.setRenderOptions(options); + } + hairpin.draw(); +} +/** + * Helper function + */ +function createTest(drawTwoHairpins) { + return (options) => { + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const ctx = factory.getContext(); + const stave = factory.Stave(); + const notes = [ + factory + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' }) + .addModifier(factory.Accidental({ type: 'b' }), 0) + .addModifier(factory.Accidental({ type: '#' }), 1), + factory.StaveNote({ keys: ['d/4'], stem_direction: 1, duration: '4' }), + factory.StaveNote({ keys: ['e/4'], stem_direction: 1, duration: '4' }), + factory.StaveNote({ keys: ['f/4'], stem_direction: 1, duration: '4' }), + ]; + const voice = factory.Voice().addTickables(notes); + factory.Formatter().joinVoices([voice]).formatToStave([voice], stave); + factory.draw(); + drawTwoHairpins(ctx, notes); + options.assert.ok(true, 'Simple Test'); + }; +} +const simple = createTest((ctx, notes) => { + drawHairpin(notes[0], notes[2], ctx, 1, 4); + drawHairpin(notes[1], notes[3], ctx, 2, 3); +}); +const horizontal = createTest((ctx, notes) => { + drawHairpin(notes[0], notes[2], ctx, 1, 3, { + height: 10, + // TODO: these three property names seem to be incorrect. + // vo => should it be 'y_shift'? + // left_ho => should it be 'left_shift_px'? + // right_ho => should it be 'right_shift_px'? + vo: 20, + left_ho: 20, + right_ho: -20, // right horizontal offset + }); + drawHairpin(notes[3], notes[3], ctx, 2, 4, { + height: 10, + y_shift: 0, + left_shift_px: 0, + right_shift_px: 120, // right horizontal offset + }); +}); +const vertical = createTest((ctx, notes) => { + drawHairpin(notes[0], notes[2], ctx, 1, 4, { + height: 10, + y_shift: 0, + left_shift_px: 0, + right_shift_px: 0, // right horizontal offset + }); + drawHairpin(notes[2], notes[3], ctx, 2, 4, { + height: 10, + y_shift: -15, + left_shift_px: 2, + right_shift_px: 0, // right horizontal offset + }); +}); +const height = createTest((ctx, notes) => { + drawHairpin(notes[0], notes[2], ctx, 1, 4, { + height: 10, + y_shift: 0, + left_shift_px: 0, + right_shift_px: 0, // right horizontal offset + }); + drawHairpin(notes[2], notes[3], ctx, 2, 4, { + height: 15, + y_shift: 0, + left_shift_px: 2, + right_shift_px: 0, // right horizontal offset + }); +}); +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveHairpinTests); + + + +/***/ }), + +/***/ "./tests/staveline_tests.ts": +/*!**********************************!*\ + !*** ./tests/staveline_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveLineTests": () => (/* binding */ StaveLineTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// StaveLine Tests + + + +const StaveLineTests = { + Start() { + QUnit.module('StaveLine'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple StaveLine', simple0); + run('StaveLine Arrow Options', simple1); + }, +}; +function simple0(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave().addClef('treble'); + const notes = [ + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), + f.StaveNote({ keys: ['c/5'], duration: '4', clef: 'treble' }), + f.StaveNote({ keys: ['c/4', 'g/4', 'b/4'], duration: '4', clef: 'treble' }), + f.StaveNote({ keys: ['f/4', 'a/4', 'f/5'], duration: '4', clef: 'treble' }), + ]; + const voice = f.Voice().addTickables(notes); + f.StaveLine({ + from: notes[0], + to: notes[1], + first_indices: [0], + last_indices: [0], + options: { + font: { family: _src_font__WEBPACK_IMPORTED_MODULE_2__.Font.SERIF, size: 12, style: _src_font__WEBPACK_IMPORTED_MODULE_2__.FontStyle.ITALIC }, + text: 'gliss.', + }, + }); + const staveLine2 = f.StaveLine({ + from: notes[2], + to: notes[3], + first_indices: [2, 1, 0], + last_indices: [0, 1, 2], + }); + staveLine2.render_options.line_dash = [10, 10]; + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function simple1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 770); + const stave = f.Stave().addClef('treble'); + const notes = [ + f.StaveNote({ keys: ['c#/5', 'd/5'], duration: '4', clef: 'treble', stem_direction: -1 }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }).addModifier(f.Accidental({ type: '#' }), 0), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '4', clef: 'treble' }), + f + .StaveNote({ keys: ['f/4', 'a/4', 'c/5'], duration: '4', clef: 'treble' }) + .addModifier(f.Accidental({ type: '#' }), 2), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }).addModifier(f.Accidental({ type: '#' }), 0), + f.StaveNote({ keys: ['c#/5', 'd/5'], duration: '4', clef: 'treble', stem_direction: -1 }), + f.StaveNote({ keys: ['c/4', 'd/4', 'g/4'], duration: '4', clef: 'treble' }), + f + .StaveNote({ keys: ['f/4', 'a/4', 'c/5'], duration: '4', clef: 'treble' }) + .addModifier(f.Accidental({ type: '#' }), 2), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([notes[0]], { all: true }); + const voice = f.Voice().setStrict(false).addTickables(notes); + const staveLine0 = f.StaveLine({ + from: notes[0], + to: notes[1], + first_indices: [0], + last_indices: [0], + options: { text: 'Left' }, + }); + const staveLine4 = f.StaveLine({ + from: notes[2], + to: notes[3], + first_indices: [1], + last_indices: [1], + options: { text: 'Right' }, + }); + const staveLine1 = f.StaveLine({ + from: notes[4], + to: notes[5], + first_indices: [0], + last_indices: [0], + options: { text: 'Center' }, + }); + const staveLine2 = f.StaveLine({ + from: notes[6], + to: notes[7], + first_indices: [1], + last_indices: [0], + }); + const staveLine3 = f.StaveLine({ + from: notes[6], + to: notes[7], + first_indices: [2], + last_indices: [2], + options: { text: 'Top' }, + }); + staveLine0.render_options.draw_end_arrow = true; + staveLine0.render_options.text_justification = 1; + staveLine0.render_options.text_position_vertical = 2; + staveLine1.render_options.draw_end_arrow = true; + staveLine1.render_options.arrowhead_length = 30; + staveLine1.render_options.line_width = 5; + staveLine1.render_options.text_justification = 2; + staveLine1.render_options.text_position_vertical = 2; + staveLine4.render_options.line_width = 2; + staveLine4.render_options.draw_end_arrow = true; + staveLine4.render_options.draw_start_arrow = true; + staveLine4.render_options.arrowhead_angle = 0.5; + staveLine4.render_options.arrowhead_length = 20; + staveLine4.render_options.text_justification = 3; + staveLine4.render_options.text_position_vertical = 2; + staveLine2.render_options.draw_start_arrow = true; + staveLine2.render_options.line_dash = [5, 4]; + staveLine3.render_options.draw_end_arrow = true; + staveLine3.render_options.draw_start_arrow = true; + staveLine3.render_options.color = 'red'; + staveLine3.render_options.text_position_vertical = 1; + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveLineTests); + + + +/***/ }), + +/***/ "./tests/stavemodifier_tests.ts": +/*!**************************************!*\ + !*** ./tests/stavemodifier_tests.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveModifierTests": () => (/* binding */ StaveModifierTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _src_stavemodifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stavemodifier */ "./src/stavemodifier.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// StaveModifier Tests + + + + +const StaveModifierTests = { + Start() { + QUnit.module('StaveModifier'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Stave Draw Test', draw); + run('Begin & End StaveModifier Test', drawBeginAndEnd); + }, +}; +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300); + stave.setContext(ctx); + stave.draw(); + options.assert.equal(stave.getYForNote(0), 100, 'getYForNote(0)'); + options.assert.equal(stave.getYForLine(5), 100, 'getYForLine(5)'); + options.assert.equal(stave.getYForLine(0), 50, 'getYForLine(0) - Top Line'); + options.assert.equal(stave.getYForLine(4), 90, 'getYForLine(4) - Bottom Line'); + options.assert.ok(true, 'all pass'); +} +function drawBeginAndEnd(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 400); + stave.setContext(ctx); + stave.setTimeSignature('C|'); + stave.setKeySignature('Db'); + stave.setClef('treble'); + stave.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.BarlineType.REPEAT_BEGIN); + stave.setEndClef('alto'); + stave.setEndTimeSignature('9/8'); + stave.setEndKeySignature('G', 'C#'); + stave.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.BarlineType.DOUBLE); + stave.draw(); + // change + const END = _src_stavemodifier__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition.END; + stave.setY(100); + stave.setTimeSignature('3/4'); + stave.setKeySignature('G', 'C#'); + stave.setClef('bass'); + stave.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.BarlineType.SINGLE); + stave.setClef('treble', undefined, undefined, END); + stave.setTimeSignature('C', undefined, END); + stave.setKeySignature('F', undefined, END); + stave.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.BarlineType.SINGLE); + stave.draw(); + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveModifierTests); + + + +/***/ }), + +/***/ "./tests/stavenote_tests.ts": +/*!**********************************!*\ + !*** ./tests/stavenote_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveNoteTests": () => (/* binding */ StaveNoteTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); +/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); +/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_fraction__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/fraction */ "./src/fraction.ts"); +/* harmony import */ var _src_frethandfinger__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); +/* harmony import */ var _src_modifiercontext__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); +/* harmony import */ var _src_stringnumber__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../src/stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _src_strokes__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../src/strokes */ "./src/strokes.ts"); +/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// StaveNote Tests +// TODO: In StaveNote.preFormat() line 929, should noteHeadPadding default to StaveNote.minNoteheadPadding? +// The bounding box of a note changes slightly when we add a ModifierContext (even if we add zero modifiers). + + + + + + + + + + + + + + + + + + +const StaveNoteTests = { + Start() { + QUnit.module('StaveNote'); + QUnit.test('Tick', ticks); + QUnit.test('Tick - New API', ticksNewAPI); + QUnit.test('Stem', stem); + QUnit.test('Automatic Stem Direction', autoStem); + QUnit.test('Stem Extension Pitch', stemExtensionPitch); + QUnit.test('Displacement after calling setStemDirection', setStemDirectionDisplacement); + QUnit.test('StaveLine', staveLine); + QUnit.test('Width', width); + QUnit.test('TickContext', tickContext); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('StaveNote Draw - Treble', drawBasic, { clef: 'treble', octaveShift: 0, restKey: 'r/4' }); + run('StaveNote BoundingBoxes - Treble', drawBoundingBoxes, { clef: 'treble', octaveShift: 0, restKey: 'r/4' }); + run('StaveNote Draw - Alto', drawBasic, { clef: 'alto', octaveShift: -1, restKey: 'r/4' }); + run('StaveNote Draw - Tenor', drawBasic, { clef: 'tenor', octaveShift: -1, restKey: 'r/3' }); + run('StaveNote Draw - Bass', drawBasic, { clef: 'bass', octaveShift: -2, restKey: 'r/3' }); + run('StaveNote Draw - Harmonic And Muted', drawHarmonicAndMuted); + run('StaveNote Draw - Slash', drawSlash); + run('Displacements', displacements); + run('StaveNote Draw - Bass 2', drawBass); + run('StaveNote Draw - Key Styles', drawKeyStyles); + run('StaveNote Draw - StaveNote Stem Styles', drawNoteStemStyles); + run('StaveNote Draw - StaveNote Stem Lengths', drawNoteStemLengths); + run('StaveNote Draw - StaveNote Flag Styles', drawNoteStylesWithFlag); + run('StaveNote Draw - StaveNote Styles', drawNoteStyles); + run('Stave, Ledger Line, Beam, Stem and Flag Styles', drawBeamStyles); + run('Flag and Dot Placement - Stem Up', dotsAndFlagsStemUp); + run('Flag and Dots Placement - Stem Down', dotsAndFlagsStemDown); + run('Beam and Dot Placement - Stem Up', dotsAndBeamsUp); + run('Beam and Dot Placement - Stem Down', dotsAndBeamsDown); + run('No Padding', noPadding); + run('Note Heads Placement - Simple', noteHeadsSimple); + run('Note Heads Placement - Hidden Notes', noteHeadsHidden); + run('Center Aligned Note', centerAlignedRest); + run('Center Aligned Note with Articulation', centerAlignedRestFermata); + run('Center Aligned Note with Annotation', centerAlignedRestAnnotation); + run('Center Aligned Note - Multi Voice', centerAlignedMultiVoice); + run('Center Aligned Note with Multiple Modifiers', centerAlignedNoteMultiModifiers); + // This interactivity test currently only works with the SVG backend. + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runSVGTest('Interactive Mouseover StaveNote', drawBasic, { + clef: 'treble', + octaveShift: 0, + restKey: 'r/4', + ui: true, + }); + }, +}; +// Helper function to create StaveNotes. +const staveNote = (struct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote(struct); +/** + * Helper function to draw a note with an optional bounding box. + */ +function draw(note, stave, context, x, drawBoundingBox = false, addModifierContext = true) { + // Associate the note with the stave. + note.setStave(stave); + // A ModifierContext is required for dots and other modifiers to be drawn properly. + // If added, it changes the bounding box of a note, even if there are no modifiers to draw. + // See StaveNote.minNoteheadPadding in stavenote.ts. + if (addModifierContext) { + note.addToModifierContext(new _src_modifiercontext__WEBPACK_IMPORTED_MODULE_11__.ModifierContext()); + } + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note).preFormat().setX(x); + note.setContext(context).draw(); + if (drawBoundingBox) { + const bb = note.getBoundingBox(); + context.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH()); + context.stroke(); + } + return note; +} +function ticks(assert) { + const BEAT = (1 * _src_flow__WEBPACK_IMPORTED_MODULE_6__.Flow.RESOLUTION) / 4; + // Key value pairs of `testName: [durationString, expectedBeats, expectedNoteType]` + const tickTests = { + 'Breve note': ['1/2', 8.0, 'n'], + 'Whole note': ['w', 4.0, 'n'], + 'Quarter note': ['q', 1.0, 'n'], + 'Dotted half note': ['hd', 3.0, 'n'], + 'Doubled-dotted half note': ['hdd', 3.5, 'n'], + 'Triple-dotted half note': ['hddd', 3.75, 'n'], + 'Dotted half rest': ['hdr', 3.0, 'r'], + 'Double-dotted half rest': ['hddr', 3.5, 'r'], + 'Triple-dotted half rest': ['hdddr', 3.75, 'r'], + 'Dotted harmonic quarter note': ['qdh', 1.5, 'h'], + 'Double-dotted harmonic quarter note': ['qddh', 1.75, 'h'], + 'Triple-dotted harmonic quarter note': ['qdddh', 1.875, 'h'], + 'Dotted muted 8th note': ['8dm', 0.75, 'm'], + 'Double-dotted muted 8th note': ['8ddm', 0.875, 'm'], + 'Triple-dotted muted 8th note': ['8dddm', 0.9375, 'm'], + }; + Object.keys(tickTests).forEach((testName) => { + const testData = tickTests[testName]; + const durationString = testData[0]; + const expectedBeats = testData[1]; + const expectedNoteType = testData[2]; + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: durationString }); + assert.equal(note.getTicks().value(), BEAT * expectedBeats, testName + ' must have ' + expectedBeats + ' beats'); + assert.equal(note.getNoteType(), expectedNoteType, 'Note type must be ' + expectedNoteType); + }); + assert.throws(() => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '8.7dddm' }), /BadArguments/, "Invalid note duration '8.7' throws BadArguments exception"); + assert.throws(() => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2Z' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); + assert.throws(() => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2dddZ' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); +} +function ticksNewAPI(assert) { + const BEAT = (1 * _src_flow__WEBPACK_IMPORTED_MODULE_6__.Flow.RESOLUTION) / 4; + // Key value pairs of `testName: [noteData, expectedBeats, expectedNoteType]` + const tickTests = { + 'Breve note': [{ duration: '1/2' }, 8.0, 'n'], + 'Whole note': [{ duration: 'w' }, 4.0, 'n'], + 'Quarter note': [{ duration: 'q' }, 1.0, 'n'], + 'Dotted half note': [{ duration: 'h', dots: 1 }, 3.0, 'n'], + 'Doubled-dotted half note': [{ duration: 'h', dots: 2 }, 3.5, 'n'], + 'Triple-dotted half note': [{ duration: 'h', dots: 3 }, 3.75, 'n'], + 'Dotted half rest': [{ duration: 'h', dots: 1, type: 'r' }, 3.0, 'r'], + 'Double-dotted half rest': [{ duration: 'h', dots: 2, type: 'r' }, 3.5, 'r'], + 'Triple-dotted half rest': [{ duration: 'h', dots: 3, type: 'r' }, 3.75, 'r'], + 'Dotted harmonic quarter note': [{ duration: 'q', dots: 1, type: 'h' }, 1.5, 'h'], + 'Double-dotted harmonic quarter note': [{ duration: 'q', dots: 2, type: 'h' }, 1.75, 'h'], + 'Triple-dotted harmonic quarter note': [{ duration: 'q', dots: 3, type: 'h' }, 1.875, 'h'], + 'Dotted muted 8th note': [{ duration: '8', dots: 1, type: 'm' }, 0.75, 'm'], + 'Double-dotted muted 8th note': [{ duration: '8', dots: 2, type: 'm' }, 0.875, 'm'], + 'Triple-dotted muted 8th note': [{ duration: '8', dots: 3, type: 'm' }, 0.9375, 'm'], + }; + Object.keys(tickTests).forEach(function (testName) { + const testData = tickTests[testName]; + const noteData = testData[0]; + const expectedBeats = testData[1]; + const expectedNoteType = testData[2]; + noteData.keys = ['c/4', 'e/4', 'g/4']; + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote(noteData); + assert.equal(note.getTicks().value(), BEAT * expectedBeats, testName + ' must have ' + expectedBeats + ' beats'); + assert.equal(note.getNoteType(), expectedNoteType, 'Note type must be ' + expectedNoteType); + }); + assert.throws(() => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '8.7dddm' }), /BadArguments/, "Invalid note duration '8.7' throws BadArguments exception"); + assert.throws(() => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2Z' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); + assert.throws(() => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2dddZ' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); +} +function stem(assert) { + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'w' }); + assert.equal(note.getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP, 'Default note has UP stem'); +} +function autoStem(assert) { + const testData = [ + [['c/5', 'e/5', 'g/5'], _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN], + [['e/4', 'g/4', 'c/5'], _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP], + [['c/5'], _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN], + [['a/4', 'e/5', 'g/5'], _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN], + [['b/4'], _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN], + ]; + testData.forEach((td) => { + const keys = td[0]; + const expectedStemDirection = td[1]; + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: keys, auto_stem: true, duration: '8' }); + assert.equal(note.getStemDirection(), expectedStemDirection, 'Stem must be ' + (expectedStemDirection === _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP ? 'up' : 'down')); + }); +} +function stemExtensionPitch(assert) { + // [keys, expectedStemExtension, override stem direction] + const testData = [ + [['c/5', 'e/5', 'g/5'], 0, 0], + [['e/4', 'g/4', 'c/5'], 0, 0], + [['c/5'], 0, 0], + [['f/3'], 15, 0], + [['f/3'], 15, _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP], + [['f/3'], 0, _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN], + [['f/3', 'e/5'], 0, 0], + [['g/6'], 25, 0], + [['g/6'], 25, _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN], + [['g/6'], 0, _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP], + ]; + testData.forEach((td) => { + const keys = td[0]; + const expectedStemExtension = td[1]; + const overrideStemDirection = td[2]; + let note; + if (overrideStemDirection === 0) { + note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: keys, auto_stem: true, duration: '4' }); + } + else { + note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: keys, duration: '4', stem_direction: overrideStemDirection }); + } + assert.equal(note.getStemExtension(), expectedStemExtension, 'For ' + keys.toString() + ' StemExtension must be ' + expectedStemExtension); + // set to weird Stave + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 300, { spacing_between_lines_px: 20 }); + note.setStave(stave); + assert.equal(note.getStemExtension(), expectedStemExtension * 2, 'For wide staff ' + keys.toString() + ' StemExtension must be ' + expectedStemExtension * 2); + // const whole_note = new StaveNote({ keys: keys, duration: 'w' }); + // assert.equal( + // whole_note.getStemExtension(), + // -1 * Flow.STEM_HEIGHT, + // 'For ' + keys.toString() + ' whole_note StemExtension must always be -1 * Flow.STEM_HEIGHT' + // ); + }); +} +function setStemDirectionDisplacement(assert) { + function getDisplacements(note) { + return note.noteHeads.map((noteHead) => noteHead.isDisplaced()); + } + const stemUpDisplacements = [false, true, false]; + const stemDownDisplacements = [true, false, false]; + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/5', 'd/5', 'g/5'], stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP, duration: '4' }); + assert.deepEqual(getDisplacements(note), stemUpDisplacements); + note.setStemDirection(_src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN); + assert.deepEqual(getDisplacements(note), stemDownDisplacements); + note.setStemDirection(_src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP); + assert.deepEqual(getDisplacements(note), stemUpDisplacements); +} +function staveLine(assert) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 300); + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }); + note.setStave(stave); + const props = note.getKeyProps(); + assert.equal(props[0].line, 0, 'C/4 on line 0'); + assert.equal(props[1].line, 1, 'E/4 on line 1'); + assert.equal(props[2].line, 2.5, 'A/4 on line 2.5'); + const ys = note.getYs(); + assert.equal(ys.length, 3, 'Chord should be rendered on three lines'); + assert.equal(ys[0], 100, 'Line for C/4'); + assert.equal(ys[1], 90, 'Line for E/4'); + assert.equal(ys[2], 75, 'Line for A/4'); +} +function width(assert) { + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }); + assert.throws(() => note.getWidth(), /UnformattedNote/, 'Unformatted note should have no width'); +} +function tickContext(assert) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 400); + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }).setStave(stave); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note).preFormat().setX(10).setPadding(0); + assert.expect(0); +} +function drawBasic(options, contextBuilder) { + const clef = options.params.clef; + const octaveShift = options.params.octaveShift; + const restKey = options.params.restKey; + const ctx = contextBuilder(options.elementId, 700, 180); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 30, 750); + stave.setContext(ctx); + stave.addClef(clef); + stave.draw(); + const lowerKeys = ['c/', 'e/', 'a/']; + const higherKeys = ['c/', 'e/', 'a/']; + for (let k = 0; k < lowerKeys.length; k++) { + lowerKeys[k] = lowerKeys[k] + (4 + octaveShift); + higherKeys[k] = higherKeys[k] + (5 + octaveShift); + } + const restKeys = [restKey]; + const noteStructs = [ + { clef: clef, keys: higherKeys, duration: '1/2' }, + { clef: clef, keys: lowerKeys, duration: 'w' }, + { clef: clef, keys: higherKeys, duration: 'h' }, + { clef: clef, keys: lowerKeys, duration: 'q' }, + { clef: clef, keys: higherKeys, duration: '8' }, + { clef: clef, keys: lowerKeys, duration: '16' }, + { clef: clef, keys: higherKeys, duration: '32' }, + { clef: clef, keys: higherKeys, duration: '64' }, + { clef: clef, keys: higherKeys, duration: '128' }, + { clef: clef, keys: lowerKeys, duration: '1/2', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'w', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: restKeys, duration: '1/2r' }, + { clef: clef, keys: restKeys, duration: 'wr' }, + { clef: clef, keys: restKeys, duration: 'hr' }, + { clef: clef, keys: restKeys, duration: 'qr' }, + { clef: clef, keys: restKeys, duration: '8r' }, + { clef: clef, keys: restKeys, duration: '16r' }, + { clef: clef, keys: restKeys, duration: '32r' }, + { clef: clef, keys: restKeys, duration: '64r' }, + { clef: clef, keys: restKeys, duration: '128r' }, + { keys: ['x/4'], duration: 'h' }, + ]; + options.assert.expect(noteStructs.length * 2); + const colorDescendants = (parentItem, color) => () => parentItem.querySelectorAll('*').forEach((child) => { + child.setAttribute('fill', color); + child.setAttribute('stroke', color); + }); + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25); + // If this is an interactivity test (ui: true), then attach mouseover & mouseout handlers to the notes. + if (options.params.ui) { + const item = note.getSVGElement(); + if (item) { + item.addEventListener('mouseover', colorDescendants(item, 'green'), false); + item.addEventListener('mouseout', colorDescendants(item, 'black'), false); + } + } + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawBoundingBoxes(options, contextBuilder) { + const clef = options.params.clef; + const octaveShift = options.params.octaveShift; + const restKey = options.params.restKey; + const ctx = contextBuilder(options.elementId, 700, 180); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 30, 750); + stave.setContext(ctx); + stave.addClef(clef); + stave.draw(); + const lowerKeys = ['c/', 'e/', 'a/']; + const higherKeys = ['c/', 'e/', 'a/']; + for (let k = 0; k < lowerKeys.length; k++) { + lowerKeys[k] = lowerKeys[k] + (4 + octaveShift); + higherKeys[k] = higherKeys[k] + (5 + octaveShift); + } + const restKeys = [restKey]; + const noteStructs = [ + { clef: clef, keys: higherKeys, duration: '1/2' }, + { clef: clef, keys: lowerKeys, duration: 'w' }, + { clef: clef, keys: higherKeys, duration: 'h' }, + { clef: clef, keys: lowerKeys, duration: 'q' }, + { clef: clef, keys: higherKeys, duration: '8' }, + { clef: clef, keys: lowerKeys, duration: '16' }, + { clef: clef, keys: higherKeys, duration: '32' }, + { clef: clef, keys: higherKeys, duration: '64' }, + { clef: clef, keys: higherKeys, duration: '128' }, + { clef: clef, keys: lowerKeys, duration: '1/2', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'w', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '128' }, + { clef: clef, keys: restKeys, duration: '1/2r' }, + { clef: clef, keys: restKeys, duration: 'wr' }, + { clef: clef, keys: restKeys, duration: 'hr' }, + { clef: clef, keys: restKeys, duration: 'qr' }, + { clef: clef, keys: restKeys, duration: '8r' }, + { clef: clef, keys: restKeys, duration: '16r' }, + { clef: clef, keys: restKeys, duration: '32r' }, + { clef: clef, keys: restKeys, duration: '64r' }, + { clef: clef, keys: restKeys, duration: '128r' }, + { keys: ['x/4'], duration: 'h' }, + ]; + options.assert.expect(noteStructs.length * 2); + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25, true /* drawBoundingBox */, false /* addModifierContext */); + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawBass(options, contextBuilder) { + options.assert.expect(40); + const ctx = contextBuilder(options.elementId, 600, 280); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 650); + stave.setContext(ctx); + stave.addClef('bass'); + stave.draw(); + const noteStructs = [ + { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '1/2' }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'w' }, + { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: 'h' }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'q' }, + { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '8' }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '16' }, + { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '32' }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['r/4'], duration: '1/2r' }, + { keys: ['r/4'], duration: 'wr' }, + { keys: ['r/4'], duration: 'hr' }, + { keys: ['r/4'], duration: 'qr' }, + { keys: ['r/4'], duration: '8r' }, + { keys: ['r/4'], duration: '16r' }, + { keys: ['r/4'], duration: '32r' }, + { keys: ['x/4'], duration: 'h' }, + ]; + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25); + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function displacements(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 700, 155); + ctx.scale(0.9, 0.9); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 675); + stave.setContext(ctx); + stave.draw(); + const noteStructs = [ + { keys: ['g/3', 'a/3', 'c/4', 'd/4', 'e/4'], duration: '1/2' }, + { keys: ['g/3', 'a/3', 'c/4', 'd/4', 'e/4'], duration: 'w' }, + { keys: ['d/4', 'e/4', 'f/4'], duration: 'h' }, + { keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: 'q' }, + { keys: ['e/3', 'b/3', 'c/4', 'e/4', 'f/4', 'g/5', 'a/5'], duration: '8' }, + { keys: ['a/3', 'c/4', 'e/4', 'g/4', 'a/4', 'b/4'], duration: '16' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32' }, + { keys: ['c/4', 'e/4', 'a/4', 'a/4'], duration: '64' }, + { keys: ['g/3', 'c/4', 'd/4', 'e/4'], duration: 'h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['d/4', 'e/4', 'f/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'd/4', 'e/4', 'f/4', 'g/4', 'a/4'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/3', 'c/4', 'e/4', 'a/4', 'b/5', 'c/6', 'e/6'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { + keys: ['b/3', 'c/4', 'e/4', 'a/4', 'b/5', 'c/6', 'e/6', 'e/6'], + duration: '64', + stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN, + }, + ]; + options.assert.expect(noteStructs.length * 2); + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 45); + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawHarmonicAndMuted(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 1000, 180); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 950); + stave.setContext(ctx); + stave.draw(); + const noteStructs = [ + { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'wh' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'hh' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'qh' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '8h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '16h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '64h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '128h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'wh', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'hh', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'qh', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '8h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '16h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '64h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '128h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'wm' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'hm' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'qm' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '8m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '16m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '64m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '128m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2m', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'wm', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'hm', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'qm', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '8m', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '16m', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32m', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '64m', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '128m', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + ]; + options.assert.expect(noteStructs.length * 2); + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, i * 25 + 5); + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawSlash(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 700, 180); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 650); + stave.setContext(ctx); + stave.draw(); + const notes = [ + { keys: ['b/4'], duration: '1/2s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: 'ws', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: 'hs', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: 'qs', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '8s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '16s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '32s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '64s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '128s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '1/2s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: 'ws', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: 'hs', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: 'qs', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: '8s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: '16s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: '32s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: '64s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: '128s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + // Beam + { keys: ['b/4'], duration: '8s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '8s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '8s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: '8s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + ]; + const stave_notes = notes.map((struct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote(struct)); + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam([stave_notes[16], stave_notes[17]]); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam([stave_notes[18], stave_notes[19]]); + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, stave_notes, false); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + options.assert.ok('Slash Note Heads'); +} +function drawKeyStyles(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 300, 280); + ctx.scale(3, 3); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 0, 100); + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: 'q' }) + .setStave(stave) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 1) + .setKeyStyle(1, { shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue' }); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note).preFormat().setX(25); + stave.setContext(ctx).draw(); + note.setContext(ctx).draw(); + options.assert.ok(note.getX() > 0, 'Note has X value'); + options.assert.ok(note.getYs().length > 0, 'Note has Y values'); +} +function drawNoteStyles(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 300, 280); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 0, 100); + ctx.scale(3, 3); + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: '8' }) + .setStave(stave) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 1); + note.setStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note).preFormat().setX(25); + stave.setContext(ctx).draw(); + note.setContext(ctx).draw(); + options.assert.ok(note.getX() > 0, 'Note has X value'); + options.assert.ok(note.getYs().length > 0, 'Note has Y values'); +} +function drawNoteStemStyles(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 300, 280); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 0, 100); + ctx.scale(3, 3); + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: 'q' }) + .setStave(stave) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 1); + note.setStemStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note).preFormat().setX(25); + stave.setContext(ctx).draw(); + note.setContext(ctx).draw(); + options.assert.ok('Note Stem Style'); +} +function drawNoteStemLengths(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 975, 150); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 975); + stave.setContext(ctx).draw(); + const keys = [ + 'e/3', + 'f/3', + 'g/3', + 'a/3', + 'b/3', + 'c/4', + 'd/4', + 'e/4', + 'f/4', + 'g/4', + 'f/5', + 'g/5', + 'a/5', + 'b/5', + 'c/6', + 'd/6', + 'e/6', + 'f/6', + 'g/6', + 'a/6', + ]; + const notes = []; + let note; + let i; + for (i = 0; i < keys.length; i++) { + let duration = 'q'; + if (i % 2 === 1) { + duration = '8'; + } + note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: [keys[i]], duration, auto_stem: true }).setStave(stave); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note); + note.setContext(ctx); + notes.push(note); + } + const whole_keys = ['e/3', 'a/3', 'f/5', 'a/5', 'd/6', 'a/6']; + for (i = 0; i < whole_keys.length; i++) { + note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: [whole_keys[i]], duration: 'w' }).setStave(stave); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note); + note.setContext(ctx); + notes.push(note); + } + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok('Note Stem Length'); +} +function drawNoteStylesWithFlag(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 300, 280); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 0, 100); + ctx.scale(3, 3); + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: '8' }) + .setStave(stave) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 1); + note.setFlagStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note).preFormat().setX(25); + stave.setContext(ctx).draw(); + note.setContext(ctx).draw(); + options.assert.ok(note.getX() > 0, 'Note has X value'); + options.assert.ok(note.getYs().length > 0, 'Note has Y values'); +} +function drawBeamStyles(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 160); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 380); + stave.setStyle({ strokeStyle: '#EEAAEE', lineWidth: 3 }); + stave.setContext(ctx); + stave.draw(); + const notes = [ + // beam1 + { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + // should be unstyled... + { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + // beam2 should also be unstyled + { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + // beam3 + { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + // beam4 + { keys: ['d/6'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/6', 'd/6'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + // unbeamed + { keys: ['d/6', 'e/6'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + // unbeamed, unstyled + { keys: ['e/6', 'f/6'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + ]; + const staveNotes = notes.map((note) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote(note)); + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(staveNotes.slice(0, 2)); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(staveNotes.slice(3, 5)); + const beam3 = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(staveNotes.slice(5, 7)); + const beam4 = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(staveNotes.slice(7, 9)); + // stem, key, ledger, flag; beam.setStyle + beam1.setStyle({ fillStyle: 'blue', strokeStyle: 'blue' }); + staveNotes[0].setKeyStyle(0, { fillStyle: 'purple' }); + staveNotes[0].setStemStyle({ strokeStyle: 'green' }); + staveNotes[1].setStemStyle({ strokeStyle: 'orange' }); + staveNotes[1].setKeyStyle(0, { fillStyle: 'darkturquoise' }); + staveNotes[5].setStyle({ fillStyle: 'tomato', strokeStyle: 'tomato' }); + beam3.setStyle({ shadowBlur: 4, shadowColor: 'blue' }); + staveNotes[9].setLedgerLineStyle({ fillStyle: 'lawngreen', strokeStyle: 'lawngreen', lineWidth: 1 }); + staveNotes[9].setFlagStyle({ fillStyle: 'orange', strokeStyle: 'orange' }); + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, staveNotes, false); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + beam3.setContext(ctx).draw(); + beam4.setContext(ctx).draw(); + options.assert.ok('draw beam styles'); +} +function dotsAndFlagsStemUp(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + ctx.scale(1.0, 1.0); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 975); + const notes = [ + staveNote({ keys: ['f/4'], duration: '4', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['f/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['f/4'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['f/4'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['f/4'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['f/4'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['g/4'], duration: '4', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['g/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['g/4'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['g/4'], duration: '32' }), + staveNote({ keys: ['g/4'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['g/4'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach(notes, { all: true }); + _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach([notes[5], notes[11]], { all: true }); + stave.setContext(ctx).draw(); + for (let i = 0; i < notes.length; ++i) { + draw(notes[i], stave, ctx, i * 65); + } + options.assert.ok(true, 'Full Dot'); +} +function dotsAndFlagsStemDown(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 160); + ctx.scale(1.0, 1.0); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 975); + const staveNotes = [ + staveNote({ keys: ['e/5'], duration: '4', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '4', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach(staveNotes, { all: true }); + stave.setContext(ctx).draw(); + for (let i = 0; i < staveNotes.length; ++i) { + draw(staveNotes[i], stave, ctx, i * 65); + } + options.assert.ok(true, 'Full Dot'); +} +function dotsAndBeamsUp(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + ctx.scale(1.0, 1.0); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 975); + const staveNotes = [ + staveNote({ keys: ['f/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['f/4'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['f/4'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['f/4'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['f/4'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['g/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['g/4'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['g/4'], duration: '32' }), + staveNote({ keys: ['g/4'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['g/4'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach(staveNotes, { all: true }); + _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach([staveNotes[4], staveNotes[9]], { all: true }); + const beam = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(staveNotes); + stave.setContext(ctx).draw(); + for (let i = 0; i < staveNotes.length; ++i) { + draw(staveNotes[i], stave, ctx, i * 65); + } + beam.setContext(ctx).draw(); + options.assert.ok(true, 'Full Dot'); +} +function dotsAndBeamsDown(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 160); + ctx.scale(1.0, 1.0); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 975); + const staveNotes = [ + staveNote({ keys: ['e/5'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach(staveNotes, { all: true }); + const beam = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(staveNotes); + stave.setContext(ctx).draw(); + for (let i = 0; i < staveNotes.length; ++i) { + draw(staveNotes[i], stave, ctx, i * 65); + } + beam.setContext(ctx).draw(); + options.assert.ok(true, 'Full Dot'); +} +function noteHeadsSimple(options) { + const vf = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 250); + const score = vf.EasyScore(); + const system1 = vf.System({ y: 100, x: 50, width: 200 }); + system1 + .addStave({ + voices: [ + score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q/r, a4/h/r')]), + score.voice(score.notes('g4/w')), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + const system2 = vf.System({ y: 100, x: 250, width: 150 }); + system2.addStave({ + voices: [score.voice(score.notes('b4/h, b4/h/r')), score.voice(score.notes('b4/w'))], + }); + const system3 = vf.System({ y: 100, x: 400, width: 150 }); + system3.addStave({ + voices: [score.voice(score.notes('d5/h, d5/h/r')), score.voice(score.notes('e4/w'))], + }); + const system4 = vf.System({ y: 100, x: 550, width: 150 }); + system4.addStave({ + voices: [ + score.voice(score.notes('e4/q, e4/q/r, e4/h/r')), + score.voice(score.notes('e4/8, e4/8/r, e4/q/r, e4/h/r')), + ], + }); + vf.draw(); + options.assert.expect(0); +} +function noPadding(options) { + const vf = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 500); + const score = vf.EasyScore(); + function newStave(y, noPadding) { + let system = vf.System({ y, x: 50, width: 200, noPadding }); + system + .addStave({ + voices: [ + score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q, a4/h')]), + score.voice(score.notes('g4/w')), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + system = vf.System({ y, x: 250, width: 150, noPadding }); + system.addStave({ + voices: [score.voice(score.notes('b4/h, b4/h')), score.voice(score.notes('b4/w'))], + }); + system = vf.System({ y, x: 400, width: 150, noPadding }); + system.addStave({ + voices: [score.voice(score.notes('d5/h, d5/h')), score.voice(score.notes('e4/w'))], + }); + system = vf.System({ y, x: 550, width: 150, noPadding }); + system.addStave({ + voices: [score.voice(score.notes('e4/q, e4/q, e4/h')), score.voice(score.notes('e4/8, e4/8, e4/q, e4/h'))], + }); + } + newStave(100, true); + newStave(200, false); + vf.draw(); + options.assert.expect(0); +} +function noteHeadsHidden(options) { + const vf = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 250); + const score = vf.EasyScore(); + const system1 = vf.System({ y: 100, x: 50, width: 200 }); + const notes1 = score.notes('g4/w'); + notes1[0].render_options.draw = false; + system1 + .addStave({ + voices: [ + score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q/r, a4/h/r')]), + score.voice(notes1), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + const system2 = vf.System({ y: 100, x: 250, width: 150 }); + const notes2 = score.notes('b4/w'); + notes2[0].render_options.draw = false; + system2.addStave({ + voices: [score.voice(score.notes('b4/h, b4/h/r')), score.voice(notes2)], + }); + const system3 = vf.System({ y: 100, x: 400, width: 150 }); + system3.addStave({ + voices: [score.voice(score.notes('d5/h, d5/h/r')), score.voice(score.notes('e4/w'))], + }); + const system4 = vf.System({ y: 100, x: 550, width: 150 }); + const notes4 = score.notes('e4/q, e4/q/r, e4/h/r'); + notes4[0].render_options.draw = false; + notes4[2].render_options.draw = false; + system4.addStave({ + voices: [score.voice(notes4), score.voice(score.notes('e4/8, e4/8/r, e4/q/r, e4/h/r'))], + }); + vf.draw(); + options.assert.expect(0); +} +function centerAlignedRest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); + const note = f.StaveNote({ keys: ['b/4'], duration: '1r', align_center: true }); + const voice = f.Voice().setStrict(false).addTickables([note]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function centerAlignedRestFermata(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); + const note = f + .StaveNote({ keys: ['b/4'], duration: '1r', align_center: true }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a@a').setPosition(3), 0); + const voice = f.Voice().setStrict(false).addTickables([note]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function centerAlignedRestAnnotation(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); + const note = f + .StaveNote({ keys: ['b/4'], duration: '1r', align_center: true }) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('Whole measure rest').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.TOP), 0); + const voice = f.Voice().setStrict(false).addTickables([note]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function centerAlignedNoteMultiModifiers(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); + function newFinger(num, pos) { + return new _src_frethandfinger__WEBPACK_IMPORTED_MODULE_9__.FretHandFinger(num).setPosition(pos); + } + const note = f + .StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '4', align_center: true }) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('Test').setPosition(3), 0) + .addStroke(0, new _src_strokes__WEBPACK_IMPORTED_MODULE_16__.Stroke(2)) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 1) + .addModifier(newFinger('3', _src_modifier__WEBPACK_IMPORTED_MODULE_10__.Modifier.Position.LEFT), 0) + .addModifier(newFinger('2', _src_modifier__WEBPACK_IMPORTED_MODULE_10__.Modifier.Position.LEFT), 2) + .addModifier(newFinger('1', _src_modifier__WEBPACK_IMPORTED_MODULE_10__.Modifier.Position.RIGHT), 1) + .addModifier(new _src_stringnumber__WEBPACK_IMPORTED_MODULE_15__.StringNumber('4').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_10__.Modifier.Position.BELOW), 2); + _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach([note], { all: true }); + const voice = f.Voice().setStrict(false).addTickables([note]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function centerAlignedMultiVoice(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('3/8'); + // Set a custom duration of 3 / 8. + const custom_duration = new _src_fraction__WEBPACK_IMPORTED_MODULE_8__.Fraction(3, 8); + // TODO: Should the whole rest draw a ledger line that is visible to the left/right of the rest? + const notes0 = [ + f.StaveNote({ + keys: ['c/4'], + duration: '1r', + align_center: true, + duration_override: custom_duration, + }), + ]; + const createStaveNote = (struct) => f.StaveNote(struct); + const notes1 = [ + { keys: ['b/4'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + ].map(createStaveNote); + notes1[1].addModifier(f.Accidental({ type: '#' }), 0); + f.Beam({ notes: notes1 }); + const voice0 = f.Voice({ time: '3/8' }).setStrict(false).addTickables(notes0); + const voice1 = f.Voice({ time: '3/8' }).setStrict(false).addTickables(notes1); + f.Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave); + f.draw(); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveNoteTests); + + + +/***/ }), + +/***/ "./tests/stavetie_tests.ts": +/*!*********************************!*\ + !*** ./tests/stavetie_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveTieTests": () => (/* binding */ StaveTieTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// StaveTie Tests + + +const StaveTieTests = { + Start() { + QUnit.module('StaveTie'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple StaveTie', simple); + run('Chord StaveTie', chord); + run('Stem Up StaveTie', stemUp); + run('No End Note With Clef', noEndNote1); + run('No End Note', noEndNote2); + run('No Start Note With Clef', noStartNote1); + run('No Start Note', noStartNote2); + run('Set Direction Down', setDirectionDown); + run('Set Direction Up', setDirectionUp); + }, +}; +/** + * Used by the 7 tests below to set up the stave, easyscore, notes, voice, and to format & draw. + */ +function createTest(notesData, setupTies) { + return (options) => { + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 300); + const stave = factory.Stave(); + const score = factory.EasyScore(); + const notes = score.notes(notesData[0], notesData[1]); + const voice = score.voice(notes); + // const tickables = voice.getTickables(); // same as the notes that we passed in. + setupTies(factory, notes, stave); + factory.Formatter().joinVoices([voice]).formatToStave([voice], stave); + factory.draw(); + options.assert.ok(true); + }; +} +const simple = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1], + last_indices: [0, 1], + }); +}); +const chord = createTest(['(d4 e4 f4)/2, (cn4 f#4 a4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1, 2], + last_indices: [0, 1, 2], + }); +}); +const stemUp = createTest(['(d4 e4 f4)/2, (cn4 f#4 a4)', { stem: 'up' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1, 2], + last_indices: [0, 1, 2], + }); +}); +const noEndNote1 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes, stave) => { + stave.addEndClef('treble'); + f.StaveTie({ + from: notes[1], + first_indices: [2], + last_indices: [2], + text: 'slow.', + }); +}); +const noEndNote2 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[1], + first_indices: [2], + last_indices: [2], + text: 'slow.', + }); +}); +const noStartNote1 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes, stave) => { + stave.addClef('treble'); + f.StaveTie({ + to: notes[0], + first_indices: [2], + last_indices: [2], + text: 'H', + }); +}); +const noStartNote2 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + to: notes[0], + first_indices: [2], + last_indices: [2], + text: 'H', + }); +}); +const setDirectionDown = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1], + last_indices: [0, 1], + options: { direction: _src_stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN }, + }); +}); +const setDirectionUp = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1], + last_indices: [0, 1], + options: { direction: _src_stem__WEBPACK_IMPORTED_MODULE_1__.Stem.UP }, + }); +}); +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveTieTests); + + + +/***/ }), + +/***/ "./tests/stringnumber_tests.ts": +/*!*************************************!*\ + !*** ./tests/stringnumber_tests.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StringNumberTests": () => (/* binding */ StringNumberTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/glyph */ "./src/glyph.ts"); +/* harmony import */ var _src_renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/renderer */ "./src/renderer.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _src_strokes__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/strokes */ "./src/strokes.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// StringNumber Tests + + + + + + +const StringNumberTests = { + Start() { + QUnit.module('StringNumber'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('String Number In Notation', drawMultipleMeasures); + run('String Number In Notation - no circle', drawMultipleMeasures, { drawCircle: false }); + run('Fret Hand Finger In Notation', drawFretHandFingers); + run('Multi Voice With Strokes, String & Finger Numbers', multi); + run('Complex Measure With String & Finger Numbers', drawAccidentals); + run('Shifted Notehead, Multiple Modifiers', shiftedNoteheadMultipleModifiers); + }, +}; +function drawMultipleMeasures(options) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y; + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 775, 200); + const score = f.EasyScore(); + // bar 1 + const stave1 = f.Stave({ width: 300 }).setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.DOUBLE).addClef('treble'); + const notes1 = score.notes('(c4 e4 g4)/4., (c5 e5 g5)/8, (c4 f4 g4)/4, (c4 f4 g4)/4', { stem: 'down' }); + notes1[0] + .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_a = options.params) === null || _a === void 0 ? void 0 : _a.drawCircle), 0) + .addModifier(f.StringNumber({ number: '4', position: 'left' }, (_b = options.params) === null || _b === void 0 ? void 0 : _b.drawCircle), 1) + .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_c = options.params) === null || _c === void 0 ? void 0 : _c.drawCircle), 2); + notes1[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_d = options.params) === null || _d === void 0 ? void 0 : _d.drawCircle), 0) + .addModifier(f.Accidental({ type: '#' }).setAsCautionary(), 1) + .addModifier(f + .StringNumber({ number: '3', position: 'above' }, (_e = options.params) === null || _e === void 0 ? void 0 : _e.drawCircle) + .setLastNote(notes1[3]) + .setLineEndType(_src_renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN), 2); + notes1[2] + .addModifier(f.StringNumber({ number: '5', position: 'left' }, (_f = options.params) === null || _f === void 0 ? void 0 : _f.drawCircle), 0) + .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_g = options.params) === null || _g === void 0 ? void 0 : _g.drawCircle), 2) + .addModifier(f.Accidental({ type: '#' }), 1); + notes1[3] + .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_h = options.params) === null || _h === void 0 ? void 0 : _h.drawCircle).setOffsetY(7), 0) + .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_j = options.params) === null || _j === void 0 ? void 0 : _j.drawCircle).setOffsetY(6), 1) + .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_k = options.params) === null || _k === void 0 ? void 0 : _k.drawCircle).setOffsetY(-6), 2); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + // bar 2 - juxtaposing second bar next to first bar + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) + .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.DOUBLE); + const notes2 = score.notes('(c4 e4 g4)/4, (c5 e5 g5), (c4 f4 g4), (c4 f4 g4)', { stem: 'up' }); + notes2[0] + .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_l = options.params) === null || _l === void 0 ? void 0 : _l.drawCircle), 0) + .addModifier(f.StringNumber({ number: '4', position: 'left' }, (_m = options.params) === null || _m === void 0 ? void 0 : _m.drawCircle), 1) + .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_o = options.params) === null || _o === void 0 ? void 0 : _o.drawCircle), 2); + notes2[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_p = options.params) === null || _p === void 0 ? void 0 : _p.drawCircle), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f + .StringNumber({ number: '3', position: 'above' }, (_q = options.params) === null || _q === void 0 ? void 0 : _q.drawCircle) + .setLastNote(notes2[3]) + .setDashed(false), 2); + notes2[2] + .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_r = options.params) === null || _r === void 0 ? void 0 : _r.drawCircle), 2) + .addModifier(f.Accidental({ type: '#' }), 1); + notes2[3] + .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_s = options.params) === null || _s === void 0 ? void 0 : _s.drawCircle).setOffsetY(7), 0) + .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_t = options.params) === null || _t === void 0 ? void 0 : _t.drawCircle).setOffsetY(6), 1) + .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_u = options.params) === null || _u === void 0 ? void 0 : _u.drawCircle).setOffsetY(-6), 2); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + // bar 3 - juxtaposing third bar next to second bar + const stave3 = f + .Stave({ x: stave2.getWidth() + stave2.getX(), y: stave2.getY(), width: 150 }) + .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); + const notesBar3 = score.notes('(c4 e4 g4 a4)/1.'); + notesBar3[0] + .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_v = options.params) === null || _v === void 0 ? void 0 : _v.drawCircle), 0) + .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_w = options.params) === null || _w === void 0 ? void 0 : _w.drawCircle), 1) + .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_x = options.params) === null || _x === void 0 ? void 0 : _x.drawCircle), 2) + .addModifier(f.StringNumber({ number: '2', position: 'above' }, (_y = options.params) === null || _y === void 0 ? void 0 : _y.drawCircle), 3); + const voice3 = score.voice(notesBar3, { time: '6/4' }); + f.Formatter().joinVoices([voice3]).formatToStave([voice3], stave3); + f.draw(); + options.assert.ok(true, 'String Number'); +} +function drawFretHandFingers(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 725, 200); + const score = f.EasyScore(); + // bar 1 + const stave1 = f.Stave({ width: 350 }).setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.DOUBLE).addClef('treble'); + const notes1 = score.notes('(c4 e4 g4)/4, (c5 e5 g5), (c4 f4 g4), (c4 f4 g4)', { stem: 'down' }); + notes1[0] + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2); + notes1[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2); + notes1[2] + .addModifier(f.Fingering({ number: '3', position: 'below' }), 0) + .addModifier(f.Fingering({ number: '4', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'above' }), 2) + .addModifier(f.Accidental({ type: '#' }), 1); + notes1[3] + .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) + .addModifier(f.StringNumber({ number: '5', position: 'right' }).setOffsetY(7), 0) + .addModifier(f.Fingering({ number: '4', position: 'right' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'right' }).setOffsetY(6), 1) + .addModifier(f.Fingering({ number: '0', position: 'right' }).setOffsetY(-5), 2) + .addModifier(f.StringNumber({ number: '3', position: 'right' }).setOffsetY(-6), 2); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + // bar 2 - juxtaposing second bar next to first bar + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 350 }) + .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); + const notes2 = score.notes('(c4 e4 g4)/4., (c5 e5 g5)/8, (c4 f4 g4)/8, (c4 f4 g4)/4.[stem="down"]', { + stem: 'up', + }); + notes2[0] + .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'above' }), 2); + notes2[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2); + notes2[2] + .addModifier(f.Fingering({ number: '3', position: 'below' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1) + .addModifier(f.Fingering({ number: '1', position: 'right' }), 2) + .addModifier(f.Accidental({ type: '#' }), 2); + notes2[3] + .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) + .addModifier(f.StringNumber({ number: '5', position: 'right' }).setOffsetY(7), 0) + .addModifier(f.Fingering({ number: '4', position: 'right' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'right' }).setOffsetY(6), 1) + .addModifier(f.Fingering({ number: '1', position: 'right' }).setOffsetY(-6), 2) + .addModifier(f.StringNumber({ number: '3', position: 'right' }).setOffsetY(-6), 2); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + f.draw(); + options.assert.ok(true, 'String Number'); +} +function multi(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 200); + const score = f.EasyScore(); + const stave = f.Stave(); + const notes1 = score.notes('(c4 e4 g4)/4, (a3 e4 g4), (c4 d4 a4), (c4 d4 a4)', { stem: 'up' }); + notes1[0] + .addStroke(0, new _src_strokes__WEBPACK_IMPORTED_MODULE_5__.Stroke(5)) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2) + .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '3', position: 'above' }), 2); + notes1[1] + .addStroke(0, new _src_strokes__WEBPACK_IMPORTED_MODULE_5__.Stroke(6)) + .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1) + .addModifier(f.StringNumber({ number: '3', position: 'above' }), 2) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2); + notes1[2] + .addStroke(0, new _src_strokes__WEBPACK_IMPORTED_MODULE_5__.Stroke(2)) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '0', position: 'right' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1) + .addModifier(f.Fingering({ number: '1', position: 'left' }), 2) + .addModifier(f.StringNumber({ number: '3', position: 'right' }), 2); + notes1[3] + .addStroke(0, new _src_strokes__WEBPACK_IMPORTED_MODULE_5__.Stroke(1)) + .addModifier(f.StringNumber({ number: '3', position: 'left' }), 2) + .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1); + const notes2 = score.notes('e3/8, e3, e3, e3, e3, e3, e3, e3', { stem: 'down' }); + notes2[0] + .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) + .addModifier(f.StringNumber({ number: '6', position: 'below' }), 0); + notes2[2].addModifier(f.Accidental({ type: '#' }), 0); + notes2[4].addModifier(f.Fingering({ number: '0', position: 'left' }), 0); + // Position string number 6 beneath the strum arrow: left (15) and down (18) + notes2[4].addModifier(f.StringNumber({ number: '6', position: 'left' }).setOffsetX(15).setOffsetY(18), 0); + // Important Note: notes2 must come first, otherwise ledger lines from notes2 will be drawn on top of notes from notes1! + // BUG: VexFlow draws TWO ledger lines for middle C, because both notes1 and notes2 require the middle C ledger line. + const voices = [score.voice(notes2), score.voice(notes1)]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.Beam({ notes: notes2.slice(0, 4) }); + f.Beam({ notes: notes2.slice(4, 8) }); + f.draw(); + options.assert.ok(true, 'Strokes Test Multi Voice'); +} +function drawAccidentals(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750); + const glyphScale = 39; // default font scale + const clefWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth('gClef', glyphScale); // widest clef + const notes = [ + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5', 'e/5', 'g/5'], stem_direction: 1, duration: '4' }), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: 1, duration: '4' }), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: -1, duration: '4' }), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: -1, duration: '4' }), + ]; + notes[0] + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '2', position: 'left' }), 1) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 3) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Fingering({ number: '2', position: 'right' }), 4) + .addModifier(f.StringNumber({ number: '3', position: 'right' }), 4) + .addModifier(f.Accidental({ type: '#' }), 4) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 5) + .addModifier(f.Accidental({ type: '#' }), 5); + notes[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Accidental({ type: '#' }), 4) + .addModifier(f.Accidental({ type: '#' }), 5); + notes[2] + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '2', position: 'left' }), 1) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 3) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Fingering({ number: '2', position: 'right' }), 4) + .addModifier(f.StringNumber({ number: '3', position: 'right' }), 4) + .addModifier(f.Accidental({ type: '#' }), 4) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 5) + .addModifier(f.Accidental({ type: '#' }), 5); + notes[3] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Accidental({ type: '#' }), 4) + .addModifier(f.Accidental({ type: '#' }), 5); + const voice = f.Voice().addTickables(notes); + const ctx = f.getContext(); + const formatter = f.Formatter().joinVoices([voice]); + const stavePadding = clefWidth + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.defaultPadding + 10; + const nwidth = Math.max(formatter.preCalculateMinTotalWidth([voice]), 490 - stavePadding); + formatter.format([voice], nwidth); + const stave = f + .Stave({ x: 0, y: 0, width: nwidth + stavePadding }) + .setContext(ctx) + .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.DOUBLE) + .addClef('treble') + .draw(); + voice.draw(ctx, stave); + options.assert.ok(true, 'String Number'); +} +function shiftedNoteheadMultipleModifiers(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 900, 150); + const score = f.EasyScore(); + score.set({ time: '6/4' }); + const stave = f.Stave({ width: 900 }).setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END).addClef('treble'); + const notes = ['A4 B4', 'B4 C5', 'A4 B#4', 'B4 C#5', 'A#4 B#4', 'B#4 C#5'] + .map((keys) => score.notes(`(${keys})/q`)) + .flat(); + notes.forEach((note) => { + note + .addModifier(f.StringNumber({ number: '2', position: 'left' }, true), 1) + .addModifier(f.StringNumber({ number: '2', position: 'right' }, true), 1); + }); + const voice = score.voice(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'String Number'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StringNumberTests); + + + +/***/ }), + +/***/ "./tests/strokes_tests.ts": +/*!********************************!*\ + !*** ./tests/strokes_tests.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StrokesTests": () => (/* binding */ StrokesTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Strokes Tests + + +const StrokesTests = { + Start() { + QUnit.module('Strokes'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + // TODO: Rename tests by removing 'Strokes - ' since it is redundant with the module name. + // This will make flow.html easier to read. + run('Strokes - Brush/Roll/Rasquedo', brushRollRasquedo); + run('Strokes - Arpeggio directionless (without arrows)', arpeggioDirectionless); + run('Strokes - Multi Voice', multiVoice); + run('Strokes - Notation and Tab', notesWithTab); + run('Strokes - Multi-Voice Notation and Tab', multiNotationAndTab); + }, +}; +function brushRollRasquedo(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); + const score = f.EasyScore(); + // bar 1 + const stave1 = f.Stave({ width: 250 }).setEndBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); + const notes1 = score.notes('(a3 e4 a4)/4, (c4 e4 g4), (c4 e4 g4), (c4 e4 g4)', { stem: 'up' }); + notes1[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); + notes1[1] + .addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2)) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Accidental({ type: '#' }), 0); + notes1[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); + notes1[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2)); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + // bar 2 + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) + .setEndBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); + const notes2 = score.notes('(c4 d4 g4)/4, (c4 d4 g4), (c4 d4 g4), (c4 d4 a4)', { stem: 'up' }); + notes2[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(3)); + notes2[1].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(4)); + notes2[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(5)); + notes2[3] + .addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(6)) + .addModifier(f.Accidental({ type: 'bb' }), 0) + .addModifier(f.Accidental({ type: 'bb' }), 1) + .addModifier(f.Accidental({ type: 'bb' }), 2); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + f.draw(); + options.assert.ok(true, 'Brush/Roll/Rasquedo'); +} +function arpeggioDirectionless(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 200); + const score = f.EasyScore(); + // bar 1 + const stave1 = f.Stave({ x: 100, width: 500 }).setEndBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); + const notes1 = score.notes('(g4 b4 d5)/4, (g4 b4 d5 g5), (g4 b4 d5 g5), (g4 b4 d5)', { stem: 'up' }); + const graceNoteStructs = [ + { keys: ['e/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['g/4'], duration: '32' }, + ]; + const graceNotes = graceNoteStructs.map((graceNoteStruct) => f.GraceNote(graceNoteStruct)); + const graceNoteGroup = f.GraceNoteGroup({ notes: graceNotes, slur: false }); + graceNoteGroup.beamNotes(); + notes1[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(7)); + notes1[1] + .addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(7)) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Accidental({ type: '#' }), 3); + notes1[2] + .addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(7)) + .addModifier(f.Accidental({ type: 'b' }), 1) + .addModifier(graceNoteGroup, 0); + notes1[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(7)).addModifier(f.NoteSubGroup({ + notes: [f.ClefNote({ type: 'treble', options: { size: 'default', annotation: '8va' } })], + }), 0); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + f.draw(); + options.assert.ok(true, 'Arpeggio directionless (without arrows)'); +} +function multiVoice(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); + const score = f.EasyScore(); + const stave = f.Stave(); + const notes1 = score.notes('(c4 e4 g4)/4, (c4 e4 g4), (c4 d4 a4), (c4 d4 a4)', { stem: 'up' }); + notes1[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(5)); + notes1[1] + .addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(6)) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 2); + notes1[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2)); + notes1[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); + const notes2 = score.notes('e3/8, e3, e3, e3, e3, e3, e3, e3', { stem: 'down' }); + f.Beam({ notes: notes2.slice(0, 4) }); + f.Beam({ notes: notes2.slice(4, 8) }); + const voices = [notes1, notes2].map((notes) => score.voice(notes)); + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Strokes Test Multi Voice'); +} +function multiNotationAndTab(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 275); + const score = f.EasyScore(); + const stave = f.Stave().addClef('treble'); + // notation upper voice notes + const notes1 = score.notes('(g4 b4 e5)/4, (g4 b4 e5), (g4 b4 e5), (g4 b4 e5)', { stem: 'up' }); + notes1[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(3, { all_voices: false })); + notes1[1].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(6)); + notes1[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2, { all_voices: false })); + notes1[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); + const notes2 = score.notes('g3/4, g3, g3, g3', { stem: 'down' }); + f.TabStave({ y: 100 }).addClef('tab').setNoteStartX(stave.getNoteStartX()); + // tablature upper voice notes + const tabNotes1 = [ + f.TabNote({ + positions: [ + { str: 3, fret: 0 }, + { str: 2, fret: 0 }, + { str: 1, fret: 1 }, + ], + duration: '4', + }), + f.TabNote({ + positions: [ + { str: 3, fret: 0 }, + { str: 2, fret: 0 }, + { str: 1, fret: 1 }, + ], + duration: '4', + }), + f.TabNote({ + positions: [ + { str: 3, fret: 0 }, + { str: 2, fret: 0 }, + { str: 1, fret: 1 }, + ], + duration: '4', + }), + f.TabNote({ + positions: [ + { str: 3, fret: 0 }, + { str: 2, fret: 0 }, + { str: 1, fret: 1 }, + ], + duration: '4', + }), + ]; + tabNotes1[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(3, { all_voices: false })); + tabNotes1[1].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(6)); + tabNotes1[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2, { all_voices: false })); + tabNotes1[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); + const tabNotes2 = [ + f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), + f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), + f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), + f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), + ]; + const voices = [notes1, notes2, tabNotes1, tabNotes2].map((notes) => score.voice(notes)); + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Strokes Test Notation & Tab Multi Voice'); +} +/* +function drawTabStrokes(options: TestOptions): void { + const f = VexFlowTests.makeFactory(options, 600, 200); + const stave1 = f.TabStave({ width: 250 }).setEndBarType(Barline.type.DOUBLE); + + const tabNotes1 = [ + f.TabNote({ + positions: [ + { str: 2, fret: 8 }, + { str: 3, fret: 9 }, + { str: 4, fret: 10 }, + ], + duration: '4', + }), + f.TabNote({ + positions: [ + { str: 3, fret: 7 }, + { str: 4, fret: 8 }, + { str: 5, fret: 9 }, + ], + duration: '4', + }), + f.TabNote({ + positions: [ + { str: 1, fret: 5 }, + { str: 2, fret: 6 }, + { str: 3, fret: 7 }, + { str: 4, fret: 7 }, + { str: 5, fret: 5 }, + { str: 6, fret: 5 }, + ], + duration: '4', + }), + f.TabNote({ + positions: [ + { str: 4, fret: 3 }, + { str: 5, fret: 4 }, + { str: 6, fret: 5 }, + ], + duration: '4', + }), + ]; + + tabNotes1[0].addStroke(0, new Stroke(1)); + tabNotes1[1].addStroke(0, new Stroke(2)); + tabNotes1[2].addStroke(0, new Stroke(3)); + tabNotes1[3].addStroke(0, new Stroke(4)); + + const tabVoice1 = f.Voice().addTickables(tabNotes1); + + f.Formatter().joinVoices([tabVoice1]).formatToStave([tabVoice1], stave1); + + // bar 2 + const stave2 = f.TabStave({ x: stave1.getWidth() + stave1.getX(), width: 300 }).setEndBarType(Barline.type.DOUBLE); + + const tabNotes2 = [ + f.TabNote({ + positions: [ + { str: 2, fret: 7 }, + { str: 3, fret: 8 }, + { str: 4, fret: 9 }, + ], + duration: '2', + }), + f.TabNote({ + positions: [ + { str: 1, fret: 5 }, + { str: 2, fret: 6 }, + { str: 3, fret: 7 }, + { str: 4, fret: 7 }, + { str: 5, fret: 5 }, + { str: 6, fret: 5 }, + ], + duration: '2', + }), + ]; + + tabNotes2[0].addStroke(0, new Stroke(6)); + tabNotes2[1].addStroke(0, new Stroke(5)); + + const tabVoice2 = f.Voice().addTickables(tabNotes2); + + f.Formatter().joinVoices([tabVoice2]).formatToStave([tabVoice2], stave2); + + f.draw(); + + options.assert.ok(true, 'Strokes Tab test'); +} +*/ +function notesWithTab(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 300); + const stave = f.Stave({ x: 15, y: 40, width: 450 }).addClef('treble'); + const notes = [ + f + .StaveNote({ keys: ['b/4', 'd/5', 'g/5'], stem_direction: -1, duration: '4' }) + .addModifier(f.Accidental({ type: 'b' }), 1) + .addModifier(f.Accidental({ type: 'b' }), 0), + f.StaveNote({ keys: ['c/5', 'd/5'], stem_direction: -1, duration: '4' }), + f.StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5'], stem_direction: 1, duration: '8' }), + f + .StaveNote({ keys: ['a/3', 'e/4', 'a/4', 'c/5', 'e/5', 'a/5'], stem_direction: 1, duration: '8' }) + .addModifier(f.Accidental({ type: '#' }), 3), + f.StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5'], stem_direction: 1, duration: '8' }), + f + .StaveNote({ keys: ['a/3', 'e/4', 'a/4', 'c/5', 'f/5', 'a/5'], stem_direction: 1, duration: '8' }) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Accidental({ type: '#' }), 4), + ]; + const tabstave = f + .TabStave({ x: stave.getX(), y: 140, width: 450 }) + .addClef('tab') + .setNoteStartX(stave.getNoteStartX()); + const tabNotes = [ + f + .TabNote({ + positions: [ + { str: 1, fret: 3 }, + { str: 2, fret: 2 }, + { str: 3, fret: 3 }, + ], + duration: '4', + }) + .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Bend('Full'), 0), + f + .TabNote({ + positions: [ + { str: 2, fret: 3 }, + { str: 3, fret: 5 }, + ], + duration: '4', + }) + .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Bend('Unison'), 1), + f.TabNote({ + positions: [ + { str: 3, fret: 7 }, + { str: 4, fret: 7 }, + { str: 5, fret: 7 }, + { str: 6, fret: 7 }, + ], + duration: '8', + }), + f.TabNote({ + positions: [ + { str: 1, fret: 5 }, + { str: 2, fret: 5 }, + { str: 3, fret: 6 }, + { str: 4, fret: 7 }, + { str: 5, fret: 7 }, + { str: 6, fret: 5 }, + ], + duration: '8', + }), + f.TabNote({ + positions: [ + { str: 3, fret: 7 }, + { str: 4, fret: 7 }, + { str: 5, fret: 7 }, + { str: 6, fret: 7 }, + ], + duration: '8', + }), + f.TabNote({ + positions: [ + { str: 1, fret: 5 }, + { str: 2, fret: 5 }, + { str: 3, fret: 6 }, + { str: 4, fret: 7 }, + { str: 5, fret: 7 }, + { str: 6, fret: 5 }, + ], + duration: '8', + }), + ]; + notes[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); + notes[1].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2)); + notes[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(3)); + notes[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(4)); + notes[4].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(5)); + notes[5].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(6)); + tabNotes[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); + tabNotes[1].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2)); + tabNotes[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(3)); + tabNotes[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(4)); + tabNotes[4].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(5)); + tabNotes[5].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(6)); + f.StaveConnector({ + top_stave: stave, + bottom_stave: tabstave, + type: 'bracket', + }); + f.StaveConnector({ + top_stave: stave, + bottom_stave: tabstave, + type: 'single', + }); + const voice = f.Voice().addTickables(notes); + const tabVoice = f.Voice().addTickables(tabNotes); + const beams = _src_index__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).joinVoices([tabVoice]).formatToStave([voice, tabVoice], stave); + f.draw(); + beams.forEach(function (beam) { + beam.setContext(f.getContext()).draw(); + }); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StrokesTests); + + + +/***/ }), + +/***/ "./tests/style_tests.ts": +/*!******************************!*\ + !*** ./tests/style_tests.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StyleTests": () => (/* binding */ StyleTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); +/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); +/* harmony import */ var _src_bend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/bend */ "./src/bend.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_keysignature__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _src_notesubgroup__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _src_ornament__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/ornament */ "./src/ornament.ts"); +/* harmony import */ var _src_stavemodifier__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _src_strokes__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/strokes */ "./src/strokes.ts"); +/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _src_timesignature__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/timesignature */ "./src/timesignature.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Style Tests +// TODO: The .addStroke(0, new Stroke(...)) in the tab test case shows a NO GLYPH for the Petaluma font. +// TODO: Changing ctx.font seems to have no effect in the tab test case. Should it? +// Annotation sets its own font. +// TabNote sets its own font. +// Is there a way to set all the text fonts in one go? + + + + + + + + + + + + + +const StyleTests = { + Start() { + QUnit.module('Style'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Basic Style', stave); + run('TabNote modifiers Style', tab); + }, +}; +/** + * Helper function to create a ElementStyle options object of the form { fillStyle: XXX, strokeStyle: YYY }. + * Used for updating the fillStyle and optionally the strokeStyle. + */ +function FS(fillStyle, strokeStyle) { + const ret = { fillStyle }; + if (strokeStyle) { + ret.strokeStyle = strokeStyle; + } + return ret; +} +/** + * Color elements on a stave. + */ +function stave(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 150); + const stave = f.Stave({ x: 25, y: 20, width: 500 }); + // Stave modifiers test. + const keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_5__.KeySignature('D'); + keySig.addToStave(stave); + keySig.setStyle(FS('blue')); + stave.addTimeSignature('4/4'); + const timeSig = stave.getModifiers(_src_stavemodifier__WEBPACK_IMPORTED_MODULE_8__.StaveModifierPosition.BEGIN, _src_timesignature__WEBPACK_IMPORTED_MODULE_12__.TimeSignature.CATEGORY); + timeSig[0].setStyle(FS('brown')); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['e/4'], stem_direction: 1, duration: '4' }), + f.StaveNote({ keys: ['f/4'], stem_direction: 1, duration: '8' }), + // voice.draw() test. + f.TextDynamics({ text: 'sfz', duration: '16' }).setStyle(FS('blue')), + // GhostNote modifiers test. + f.GhostNote({ duration: '16' }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('GhostNote green text').setStyle(FS('green')), 0), + ]; + const notes0 = notes[0]; + const notes1 = notes[1]; + notes0.setKeyStyle(0, FS('red')); + notes1.setKeyStyle(0, FS('red')); + // StaveNote modifiers test. + const mods1 = notes1.getModifiers(); + mods1[0].setStyle(FS('green')); + notes0.addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a.').setPosition(4).setStyle(FS('green')), 0); + notes0.addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_7__.Ornament('mordent').setStyle(FS('lightgreen')), 0); + notes1.addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('blue').setStyle(FS('blue')), 0); + notes1.addModifier(new _src_notesubgroup__WEBPACK_IMPORTED_MODULE_6__.NoteSubGroup([f.ClefNote({ options: { size: 'small' } }).setStyle(FS('blue'))]), 0); + const voice = f.Voice().addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Basic Style'); +} +/** + * Color elements on a guitar tab. + */ +function tab(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 140); + ctx.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_11__.TabStave(10, 10, 450).addTabGlyph(); + stave.getModifiers()[2].setStyle(FS('blue')); + stave.setContext(ctx).draw(); + const tabNote = (noteStruct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_10__.TabNote(noteStruct); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('green text').setStyle(FS('green')), 0), + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }) + .addModifier(new _src_bend__WEBPACK_IMPORTED_MODULE_3__.Bend('Full').setStyle(FS('brown')), 0) + .addStroke(0, new _src_strokes__WEBPACK_IMPORTED_MODULE_9__.Stroke(1, { all_voices: false }).setStyle(FS('blue'))), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'TabNote Modifiers Style'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StyleTests); + + + +/***/ }), + +/***/ "./tests/tabnote_tests.ts": +/*!********************************!*\ + !*** ./tests/tabnote_tests.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabNoteTests": () => (/* binding */ TabNoteTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// TabNote Tests + + + + + + + + + + +const TabNoteTests = { + Start() { + QUnit.module('TabNote'); + QUnit.test('Tick', ticks); + QUnit.test('TabStave Line', tabStaveLine); + QUnit.test('Width', width); + QUnit.test('TickContext', tickContext); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('TabNote Draw', draw); + run('TabNote Stems Up', drawStemsUp); + run('TabNote Stems Down', drawStemsDown); + run('TabNote Stems Up Through Stave', drawStemsUpThrough); + run('TabNote Stems Down Through Stave', drawStemsDownThrough); + run('TabNote Stems with Dots', drawStemsDotted); + }, +}; +function ticks(assert) { + const BEAT = (1 * _src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.RESOLUTION) / 4; + let note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote({ positions: [{ str: 6, fret: 6 }], duration: '1' }); + assert.equal(note.getTicks().value(), BEAT * 4, 'Whole note has 4 beats'); + note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote({ positions: [{ str: 3, fret: 4 }], duration: '4' }); + assert.equal(note.getTicks().value(), BEAT, 'Quarter note has 1 beat'); +} +function tabStaveLine(assert) { + const note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote({ + positions: [ + { str: 6, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '1', + }); + const positions = note.getPositions(); + assert.equal(positions[0].str, 6, 'String 6, Fret 6'); + assert.equal(positions[0].fret, 6, 'String 6, Fret 6'); + assert.equal(positions[1].str, 4, 'String 4, Fret 5'); + assert.equal(positions[1].fret, 5, 'String 4, Fret 5'); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_5__.Stave(10, 10, 300); + note.setStave(stave); + const ys = note.getYs(); + assert.equal(ys.length, 2, 'Chord should be rendered on two lines'); + assert.equal(ys[0], 100, 'Line for String 6, Fret 6'); + assert.equal(ys[1], 80, 'Line for String 4, Fret 5'); +} +function width(assert) { + assert.expect(1); + const note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote({ + positions: [ + { str: 6, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '1', + }); + assert.throws(() => note.getWidth(), /UnformattedNote/, 'Unformatted note should have no width'); +} +function tickContext(assert) { + const note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote({ + positions: [ + { str: 6, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '1', + }); + const tickContext = new _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__.TickContext().addTickable(note).preFormat().setX(10).setPadding(0); + assert.equal(tickContext.getWidth(), 7); +} +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 140); + ctx.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const notes = [ + { positions: [{ str: 6, fret: 6 }], duration: '4' }, + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 'x' }, + { str: 5, fret: 15 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 'x' }, + { str: 5, fret: 5 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '4', + }, + { + positions: [ + { str: 6, fret: 0 }, + { str: 5, fret: 5 }, + { str: 4, fret: 5 }, + { str: 3, fret: 4 }, + { str: 2, fret: 3 }, + { str: 1, fret: 0 }, + ], + duration: '4', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '4', + }, + ]; + // Helper function + function showNote(noteStruct, stave, ctx, x) { + const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(noteStruct); + const tickContext = new _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__.TickContext(); + tickContext.addTickable(tabNote).preFormat().setX(x); + tabNote.setContext(ctx).setStave(stave); + tabNote.draw(); + return tabNote; + } + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + const tabNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(tabNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(tabNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawStemsUp(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 30, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + ]; + const notes = specs.map((struct) => { + const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(struct); + tabNote.render_options.draw_stem = true; + return tabNote; + }); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.VoiceMode.SOFT); + voice.addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +function drawStemsDown(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + ]; + const notes = specs.map((struct) => { + const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.setStemDirection(-1); + return tabNote; + }); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.VoiceMode.SOFT); + voice.addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'All objects have been drawn'); +} +function drawStemsUpThrough(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 30, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + ]; + const notes = specs.map((struct) => { + const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_stem_through_stave = true; + return tabNote; + }); + ctx.setFont(_src_font__WEBPACK_IMPORTED_MODULE_3__.Font.SANS_SERIF, 10, _src_font__WEBPACK_IMPORTED_MODULE_3__.FontWeight.BOLD); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.VoiceMode.SOFT); + voice.addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +function drawStemsDownThrough(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 250); + ctx.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 550, { num_lines: 8 }); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + { str: 6, fret: 10 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + { str: 5, fret: 5 }, + { str: 7, fret: 5 }, + ], + duration: '128', + }, + ]; + const notes = specs.map((struct) => { + const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_stem_through_stave = true; + tabNote.setStemDirection(-1); + return tabNote; + }); + ctx.setFont('Arial', 10, 'bold'); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.VoiceMode.SOFT); + voice.addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'All objects have been drawn'); +} +function drawStemsDotted(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4d', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '4dd', + stem_direction: -1, + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + stem_direction: -1, + }, + ]; + const notes = specs.map((struct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(struct, true /* draw_stem */)); + _src_dot__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([notes[0], notes[2], notes[2]]); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.VoiceMode.SOFT); + voice.addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TabNoteTests); + + + +/***/ }), + +/***/ "./tests/tabslide_tests.ts": +/*!*********************************!*\ + !*** ./tests/tabslide_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabSlideTests": () => (/* binding */ TabSlideTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _src_tabslide__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/tabslide */ "./src/tabslide.ts"); +/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// TabSlide Tests + + + + + + + +const TabSlideTests = { + Start() { + QUnit.module('TabSlide'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple TabSlide', simple); + run('Slide Up', slideUp); + run('Slide Down', slideDown); + }, +}; +function tieNotes(notes, indices, stave, ctx) { + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_6__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4); + voice.addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).format([voice], 100); + voice.draw(ctx, stave); + const tie = new _src_tabslide__WEBPACK_IMPORTED_MODULE_4__.TabSlide({ + first_note: notes[0], + last_note: notes[1], + first_indices: indices, + last_indices: indices, + }, _src_tabslide__WEBPACK_IMPORTED_MODULE_4__.TabSlide.SLIDE_UP); + tie.setContext(ctx); + tie.draw(); +} +function setupContext(options, width) { + // eslint-disable-next-line + const context = options.contextBuilder(options.elementId, 350, 140); + context.scale(0.9, 0.9); + context.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_5__.TabStave(10, 10, width || 350).addTabGlyph().setContext(context).draw(); + return { context, stave }; +} +// Helper function to create TabNote objects. +const tabNote = (noteStruct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_3__.TabNote(noteStruct); +/** + * Test Case + */ +function simple(options, contextBuilder) { + options.contextBuilder = contextBuilder; + const { stave, context } = setupContext(options); + tieNotes([ + tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'h' }), + tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }), + ], [0], stave, context); + options.assert.ok(true, 'Simple Test'); +} +/** + * The slideUp and slideDown tests pass in a builder function: TabSlide.createSlideUp | TabSlide.createSlideDown. + */ +function multiTest(options, buildTabSlide) { + const { context, stave } = setupContext(options, 440); + const notes = [ + tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), + tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), + tabNote({ + positions: [ + { str: 4, fret: 4 }, + { str: 5, fret: 4 }, + ], + duration: '8', + }), + tabNote({ + positions: [ + { str: 4, fret: 6 }, + { str: 5, fret: 6 }, + ], + duration: '8', + }), + tabNote({ positions: [{ str: 2, fret: 14 }], duration: '8' }), + tabNote({ positions: [{ str: 2, fret: 16 }], duration: '8' }), + tabNote({ + positions: [ + { str: 2, fret: 14 }, + { str: 3, fret: 14 }, + ], + duration: '8', + }), + tabNote({ + positions: [ + { str: 2, fret: 16 }, + { str: 3, fret: 16 }, + ], + duration: '8', + }), + ]; + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_6__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).format([voice], 300); + voice.draw(context, stave); + buildTabSlide({ + first_note: notes[0], + last_note: notes[1], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Single note'); + buildTabSlide({ + first_note: notes[2], + last_note: notes[3], + first_indices: [0, 1], + last_indices: [0, 1], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Chord'); + buildTabSlide({ + first_note: notes[4], + last_note: notes[5], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Single note high-fret'); + buildTabSlide({ + first_note: notes[6], + last_note: notes[7], + first_indices: [0, 1], + last_indices: [0, 1], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Chord high-fret'); +} +function slideUp(options, contextBuilder) { + options.contextBuilder = contextBuilder; + multiTest(options, _src_tabslide__WEBPACK_IMPORTED_MODULE_4__.TabSlide.createSlideUp); +} +function slideDown(options, contextBuilder) { + options.contextBuilder = contextBuilder; + multiTest(options, _src_tabslide__WEBPACK_IMPORTED_MODULE_4__.TabSlide.createSlideDown); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TabSlideTests); + + + +/***/ }), + +/***/ "./tests/tabstave_tests.ts": +/*!*********************************!*\ + !*** ./tests/tabstave_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabStaveTests": () => (/* binding */ TabStaveTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// TabStave Tests + + +const TabStaveTests = { + Start() { + QUnit.module('TabStave'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('TabStave Draw Test', draw); + }, +}; +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 160); + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_1__.TabStave(10, 10, 300); + stave.setNumLines(6); + stave.setContext(ctx); + stave.draw(); + options.assert.equal(stave.getYForNote(0), 127, 'getYForNote(0)'); + options.assert.equal(stave.getYForLine(5), 127, 'getYForLine(5)'); + options.assert.equal(stave.getYForLine(0), 62, 'getYForLine(0) - Top Line'); + options.assert.equal(stave.getYForLine(4), 114, 'getYForLine(4) - Bottom Line'); + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TabStaveTests); + + + +/***/ }), + +/***/ "./tests/tabtie_tests.ts": +/*!*******************************!*\ + !*** ./tests/tabtie_tests.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabTieTests": () => (/* binding */ TabTieTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _src_tabtie__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// TabTie Tests + + + + + + + + +const TabTieTests = { + Start() { + QUnit.module('TabTie'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple TabTie', simple); + run('Hammerons', simpleHammerOn); + run('Pulloffs', simplePullOff); + run('Tapping', tap); + run('Continuous', continuous); + }, +}; +/** + * Helper function to create TabNote objects. + */ +const tabNote = (noteStruct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_4__.TabNote(noteStruct); +/** + * Helper function to create a RenderContext and TabStave. + */ +function setupContext(options, w = 0, h = 0) { + // eslint-disable-next-line + const context = options.contextBuilder(options.elementId, w || 350, h || 160); + context.setFont('Arial', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size); + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_5__.TabStave(10, 10, w || 350).addTabGlyph().setContext(context).draw(); + return { context, stave }; +} +/** + * Helper function to create the TabTie between two Note objects. + */ +function tieNotes(notes, indices, stave, ctx, text) { + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4); + voice.addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter().joinVoices([voice]).format([voice], 100); + voice.draw(ctx, stave); + const tie = new _src_tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie({ + first_note: notes[0], + last_note: notes[1], + first_indices: indices, + last_indices: indices, + }, text !== null && text !== void 0 ? text : 'Annotation'); + tie.setContext(ctx); + tie.draw(); +} +/** + * Two notes on string 4 with a tie drawn between them. + */ +function simple(options, contextBuilder) { + options.contextBuilder = contextBuilder; + const { context, stave } = setupContext(options); + const note1 = tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'h' }); + const note2 = tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }); + tieNotes([note1, note2], [0], stave, context); + options.assert.ok(true, 'Simple Test'); +} +function simpleHammerOn(options, contextBuilder) { + options.contextBuilder = contextBuilder; + multiTest(options, _src_tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie.createHammeron); +} +function simplePullOff(options, contextBuilder) { + options.contextBuilder = contextBuilder; + multiTest(options, _src_tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie.createPulloff); +} +/** + * Helper function for the two test cases above (simpleHammerOn and simplePullOff). + */ +function multiTest(options, createTabTie) { + const { context, stave } = setupContext(options, 440, 140); + const notes = [ + tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), + tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), + tabNote({ + positions: [ + { str: 4, fret: 4 }, + { str: 5, fret: 4 }, + ], + duration: '8', + }), + tabNote({ + positions: [ + { str: 4, fret: 6 }, + { str: 5, fret: 6 }, + ], + duration: '8', + }), + tabNote({ positions: [{ str: 2, fret: 14 }], duration: '8' }), + tabNote({ positions: [{ str: 2, fret: 16 }], duration: '8' }), + tabNote({ + positions: [ + { str: 2, fret: 14 }, + { str: 3, fret: 14 }, + ], + duration: '8', + }), + tabNote({ + positions: [ + { str: 2, fret: 16 }, + { str: 3, fret: 16 }, + ], + duration: '8', + }), + ]; + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter().joinVoices([voice]).format([voice], 300); + voice.draw(context, stave); + createTabTie({ + first_note: notes[0], + last_note: notes[1], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Single note'); + createTabTie({ + first_note: notes[2], + last_note: notes[3], + first_indices: [0, 1], + last_indices: [0, 1], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Chord'); + createTabTie({ + first_note: notes[4], + last_note: notes[5], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Single note high-fret'); + createTabTie({ + first_note: notes[6], + last_note: notes[7], + first_indices: [0, 1], + last_indices: [0, 1], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Chord high-fret'); +} +function tap(options, contextBuilder) { + options.contextBuilder = contextBuilder; + const { context, stave } = setupContext(options); + const note1 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: 'h' }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('T'), 0); + const note2 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: 'h' }); + tieNotes([note1, note2], [0], stave, context, 'P'); + options.assert.ok(true, 'Tapping Test'); +} +function continuous(options, contextBuilder) { + options.contextBuilder = contextBuilder; + const { context, stave } = setupContext(options, 440, 140); + const notes = [ + tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'q' }), + tabNote({ positions: [{ str: 4, fret: 5 }], duration: 'q' }), + tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }), + ]; + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter().joinVoices([voice]).format([voice], 300); + voice.draw(context, stave); + _src_tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie.createHammeron({ + first_note: notes[0], + last_note: notes[1], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + _src_tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie.createPulloff({ + first_note: notes[1], + last_note: notes[2], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Continuous Hammeron'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TabTieTests); + + + +/***/ }), + +/***/ "./tests/textbracket_tests.ts": +/*!************************************!*\ + !*** ./tests/textbracket_tests.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextBracketTests": () => (/* binding */ TextBracketTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// TextBracket Tests + +const TextBracketTests = { + Start() { + QUnit.module('TextBracket'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple TextBracket', simple0); + run('TextBracket Styles', simple1); + }, +}; +function simple0(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550); + const stave = f.Stave(); + const score = f.EasyScore(); + const notes = score.notes('c4/4, c4, c4, c4, c4', { stem: 'up' }); + const voice = score.voice(notes, { time: '5/4' }); + f.TextBracket({ + from: notes[0], + to: notes[4], + text: '15', + options: { + superscript: 'va', + position: 'top', + }, + }); + f.TextBracket({ + from: notes[0], + to: notes[4], + text: '8', + options: { + superscript: 'vb', + position: 'bottom', + line: 3, + }, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function simple1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550); + const stave = f.Stave(); + const score = f.EasyScore(); + const notes = score.notes('c4/4, c4, c4, c4, c4', { stem: 'up' }); + const voice = score.voice(notes, { time: '5/4' }); + const topOctaves = [ + f.TextBracket({ + from: notes[0], + to: notes[1], + text: 'Cool notes', + options: { + superscript: '', + position: 'top', + }, + }), + f.TextBracket({ + from: notes[2], + to: notes[4], + text: 'Testing', + options: { + position: 'top', + superscript: 'superscript', + // weight & style below can be left undefined. They will fall back to the default defined in textbracket.ts. + font: { family: 'Arial', size: 15, weight: 'normal', style: 'normal' }, + }, + }), + ]; + const bottomOctaves = [ + f.TextBracket({ + from: notes[0], + to: notes[1], + text: '8', + options: { + superscript: 'vb', + position: 'bottom', + line: 3, + font: { size: 30 }, + }, + }), + f.TextBracket({ + from: notes[2], + to: notes[4], + text: 'Not cool notes', + options: { + superscript: ' super uncool', + position: 'bottom', + line: 4, + }, + }), + ]; + topOctaves[1].render_options.line_width = 2; + topOctaves[1].render_options.show_bracket = false; + bottomOctaves[0].render_options.underline_superscript = false; + bottomOctaves[0].setDashed(false); + bottomOctaves[1].render_options.bracket_height = 40; + bottomOctaves[1].setDashed(true, [2, 2]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TextBracketTests); + + + +/***/ }), + +/***/ "./tests/textformatter_tests.ts": +/*!**************************************!*\ + !*** ./tests/textformatter_tests.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextFormatterTests": () => (/* binding */ TextFormatterTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +/* harmony import */ var _src_textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/textformatter */ "./src/textformatter.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// TextFormatter Tests + + + +const TextFormatterTests = { + Start() { + QUnit.module('TextFormatter'); + QUnit.test('Basic', basic); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTextTests; + run('Accuracy', accuracy); + run('Box Text', textBoxAccuracy); + }, +}; +function basic(assert) { + var _a; + // See: src/fonts/textfonts.ts > loadTextFonts() + const registeredFamilies = _src_textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.getFontFamilies(); + assert.equal(registeredFamilies.length, 5, `There are five registered font families: 'Roboto Slab' & 'PetalumaScript' and default 'Serif', 'Serif-Bold' and 'Sans'`); + // Verify the advanceWidth and other metrics by opening the font file with a glyph inspector: + // https://fontdrop.info/ + // https://opentype.js.org/glyph-inspector.html + const petalumaFormatterInfo = _src_textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.getInfo('PetalumaScript'); + assert.equal((_a = petalumaFormatterInfo === null || petalumaFormatterInfo === void 0 ? void 0 : petalumaFormatterInfo.glyphs) === null || _a === void 0 ? void 0 : _a.C.advanceWidth, 623, 'PetalumaScript advanceWidth of C character is 623.'); + const formatterForPetalumaScript = _src_textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create({ family: 'PetalumaScript', size: '100px' }); + const metricsPetalumaScriptH = formatterForPetalumaScript.getGlyphMetrics('H'); + assert.equal(metricsPetalumaScriptH.leftSideBearing, 37); + const formatterForRobotoSlab = _src_textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create({ family: 'Roboto Slab', size: '100px', style: 'italic' }); + const metricsRobotoSlabH = formatterForRobotoSlab.getGlyphMetrics('H'); + assert.equal(metricsRobotoSlabH.advanceWidth, 1578); + // eslint-disable-next-line + // @ts-ignore direct access to protected variable .cacheKey + assert.equal(formatterForRobotoSlab.cacheKey, 'Roboto_Slab%75%normal%normal'); +} +function accuracy(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 500); + const lineHeight = 30; + const startX = 50; + const fonts = [ + { + family: _src_font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 14, + weight: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, + style: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, + }, + { + family: 'Roboto Slab', + size: 14, + weight: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, + style: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, + }, + { + family: _src_font__WEBPACK_IMPORTED_MODULE_1__.Font.SANS_SERIF, + size: 14, + weight: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.BOLD, + style: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, + }, + ]; + let startY = 20; + for (let j = 0; j < fonts.length; ++j) { + const font = fonts[j]; + const textFormatter = _src_textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(font); + ctx.setFont(font); + const texts = ['AVo(i)a', 'bghjIVex1/2', '@@@@@@@@', 'a very long String with Mixed Case Text,(0123456789)']; + for (let i = 0; i < texts.length; i++) { + ctx.setFillStyle('black'); + ctx.fillText(texts[i], startX, startY); + startY += 5; + ctx.setFillStyle('#3a2'); + ctx.fillRect(startX, startY, textFormatter.getWidthForTextInPx(texts[i]), 2); + ctx.setFillStyle('#32a'); + startY += 5; + ctx.fillRect(startX, startY, ctx.measureText(texts[i]).width, 2); + startY += lineHeight; + } + } + options.assert.ok(true, 'all pass'); +} +function textBoxAccuracy(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 800); + let startY = 35; + const boxBorder = 2; + const boxPadding = 3; + const startX = 50; + const fonts = [ + { + family: _src_font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 14, + weight: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, + style: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, + }, + { + family: 'Roboto Slab', + size: 14, + weight: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, + style: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, + }, + { + family: _src_font__WEBPACK_IMPORTED_MODULE_1__.Font.SANS_SERIF, + size: 14, + weight: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, + style: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, + }, + ]; + const texts = ['AVID', 'bghjIVex1/2', '@@@@@@@@']; + for (let j = 0; j < fonts.length; ++j) { + const font = fonts[j]; + const textFormatter = _src_textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(font); + ctx.save(); + ctx.setFont(font); + for (let i = 0; i < texts.length; i++) { + const textY = textFormatter.getYForStringInPx(texts[i]); + const height = textY.height + 2 * boxPadding; + const headroom = -1 * textY.yMin; + const width = textFormatter.getWidthForTextInPx(texts[i]) + 2 * boxPadding; + ctx.setFillStyle('black'); + ctx.fillText(texts[i], startX + boxPadding, startY - boxPadding); + ctx.setLineWidth(boxBorder); + ctx.setStrokeStyle('#3a2'); + ctx.setFillStyle('#3a2'); + ctx.beginPath(); + ctx.rect(startX, startY - height + headroom, width, height); + ctx.stroke(); + startY += height * 1.5 + boxBorder * 3; + const measureBox = ctx.measureText(texts[i]); + const mwidth = measureBox.width + boxBorder * 2; + const mheight = measureBox.height + boxBorder * 2; + ctx.setFillStyle('black'); + ctx.fillText(texts[i], startX + boxPadding, startY - boxPadding); + ctx.setStrokeStyle('#32a'); + ctx.setFillStyle('#32a'); + ctx.beginPath(); + ctx.rect(startX, startY - mheight, mwidth, mheight); + ctx.stroke(); + startY += mheight * 1.5 + boxBorder * 3; + } + ctx.restore(); + } + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TextFormatterTests); + + + +/***/ }), + +/***/ "./tests/textnote_tests.ts": +/*!*********************************!*\ + !*** ./tests/textnote_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextNoteTests": () => (/* binding */ TextNoteTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_crescendo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/crescendo */ "./src/crescendo.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +/* harmony import */ var _src_note__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/note */ "./src/note.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_textnote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/textnote */ "./src/textnote.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Text Note Tests + + + + + + + +const TextNoteTests = { + Start() { + QUnit.module('TextNote'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('TextNote Formatting', formatTextNotes); + run('TextNote Formatting 2', formatTextNotes2); + run('TextNote Superscript and Subscript', superscriptAndSubscript); + run('TextNote Formatting With Glyphs 0', formatTextGlyphs0); + run('TextNote Formatting With Glyphs 1', formatTextGlyphs1); + run('Crescendo', crescendo); + run('Text Dynamics', textDynamics); + }, +}; +function formatTextNotes(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: 'q' }), + f + .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }) + .addModifier(f.Accidental({ type: 'n' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + ]); + const voice2 = score.voice([ + f.TextNote({ text: 'Center Justification', duration: 'h' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), + f.TextNote({ text: 'Left Line 1', duration: 'q' }).setLine(1), + f.TextNote({ text: 'Right', duration: 'q' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.RIGHT), + ]); + const formatter = f.Formatter(); + formatter.joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true); +} +function formatTextNotes2(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: 'q' }), + ]); + const voice2 = score.voice([ + f.TextNote({ text: 'C', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), + f.TextNote({ text: 'L', duration: '16' }), + f.TextNote({ text: 'R', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.RIGHT), + f.TextNote({ text: 'C', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), + f.TextNote({ text: 'L', duration: '16' }), + f.TextNote({ text: 'R', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.RIGHT), + f.TextNote({ text: 'C', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), + f.TextNote({ text: 'L', duration: '16' }), + f.TextNote({ text: 'R', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.RIGHT), + f.TextNote({ text: 'C', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), + f.TextNote({ text: 'L', duration: '16' }), + f.TextNote({ text: 'R', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.RIGHT), + f.TextNote({ text: 'R', duration: 'q' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.RIGHT), + ]); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + voice2.getTickables().forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_4__.Note.plotMetrics(f.getContext(), note, 170)); + f.draw(); + options.assert.ok(true); +} +function superscriptAndSubscript(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 230); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: 'h' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: 1, duration: 'q' }), + f + .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: 1, duration: 'q' }) + .addModifier(f.Accidental({ type: 'n' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + ]); + const notes2 = [ + f.TextNote({ text: _src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.unicode.flat + 'I', superscript: '+5', duration: '8' }), + f.TextNote({ text: 'D' + _src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.unicode.sharp + '/F', duration: '4d', superscript: 'sus2' }), + f.TextNote({ text: 'ii', superscript: '6', subscript: '4', duration: '8' }), + f.TextNote({ text: 'C', superscript: _src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.unicode.triangle + '7', subscript: '', duration: '8' }), + f.TextNote({ text: 'vii', superscript: _src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.unicode["o-with-slash"] + '7', duration: '8' }), + f.TextNote({ text: 'V', superscript: '7', duration: '8' }), + ]; + options.assert.equal(notes2[0].getText(), _src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.unicode.flat + 'I', 'TextNote.getText() return .text'); + const voice2 = score.voice(notes2); + voice2.getTickables().forEach((note) => { + const textNote = note; + textNote.setFont({ family: _src_font__WEBPACK_IMPORTED_MODULE_3__.Font.SERIF, size: 15 }); + textNote.setLine(13); + textNote.setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.LEFT); + }); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true); +} +function formatTextGlyphs0(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 230); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + ]); + const voice2 = score.voice([ + f.TextNote({ text: 'Center', duration: '8' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), + f.TextNote({ glyph: 'f', duration: '8' }), + f.TextNote({ glyph: 'p', duration: '8' }), + f.TextNote({ glyph: 'm', duration: '8' }), + f.TextNote({ glyph: 'z', duration: '8' }), + f.TextNote({ glyph: 'mordent_upper', duration: '16' }), + f.TextNote({ glyph: 'mordent_lower', duration: '16' }), + f.TextNote({ glyph: 'segno', duration: '8' }), + f.TextNote({ glyph: 'coda', duration: '8' }), + ]); + voice2.getTickables().forEach((n) => n.setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER)); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true); +} +function formatTextGlyphs1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 230); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + ]); + const voice2 = score.voice([ + f.TextNote({ glyph: 'turn', duration: '16' }), + f.TextNote({ glyph: 'turn_inverted', duration: '16' }), + f.TextNote({ glyph: 'pedal_open', duration: '8' }).setLine(10), + f.TextNote({ glyph: 'pedal_close', duration: '8' }).setLine(10), + f.TextNote({ glyph: 'caesura_curved', duration: '8' }).setLine(3), + f.TextNote({ glyph: 'caesura_straight', duration: '8' }).setLine(3), + f.TextNote({ glyph: 'breath', duration: '8' }).setLine(2), + f.TextNote({ glyph: 'tick', duration: '8' }).setLine(3), + f.TextNote({ glyph: 'tr', duration: '8', smooth: true }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), + ]); + voice2.getTickables().forEach((n) => n.setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER)); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true); +} +function crescendo(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 230); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice([ + f.TextNote({ glyph: 'p', duration: '16' }), + new _src_crescendo__WEBPACK_IMPORTED_MODULE_1__.Crescendo({ duration: '4d' }).setLine(0).setHeight(25).setStave(stave), + f.TextNote({ glyph: 'f', duration: '16' }), + new _src_crescendo__WEBPACK_IMPORTED_MODULE_1__.Crescendo({ duration: '4' }).setLine(5).setStave(stave), + new _src_crescendo__WEBPACK_IMPORTED_MODULE_1__.Crescendo({ duration: '4' }).setLine(10).setDecrescendo(true).setHeight(5).setStave(stave), + ]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function textDynamics(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 230); + const score = f.EasyScore(); + const voice = score.voice([ + f.TextDynamics({ text: 'sfz', duration: '4' }), + f.TextDynamics({ text: 'rfz', duration: '4' }), + f.TextDynamics({ text: 'mp', duration: '4' }), + f.TextDynamics({ text: 'ppp', duration: '4' }), + f.TextDynamics({ text: 'fff', duration: '4' }), + f.TextDynamics({ text: 'mf', duration: '4' }), + f.TextDynamics({ text: 'sff', duration: '4' }), + ], { time: '7/4' }); + // This is refactored to use preCalculateMinWidth... to exercise + // a bug fix when textDynamic got formatted more than once. + const formatter = f.Formatter(); + formatter.joinVoices([voice]); + // const width = 250; //formatter.preCalculateMinTotalWidth([voice]); + const width = formatter.preCalculateMinTotalWidth([voice]); + formatter.format([voice]); + const stave = f.Stave({ y: 40, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_5__.Stave.defaultPadding }); + stave.draw(); + voice.draw(f.getContext(), stave); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TextNoteTests); + + + +/***/ }), + +/***/ "./tests/threevoice_tests.ts": +/*!***********************************!*\ + !*** ./tests/threevoice_tests.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ThreeVoicesTests": () => (/* binding */ ThreeVoicesTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Three Voices Tests - Three voices in single staff. + + +const ThreeVoicesTests = { + Start() { + // TODO: Rename the module to 'Three Voices', because we aren't really testing rests. + QUnit.module('Three Voice Rests'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Three Voices - #1', threeVoices1); + run('Three Voices - #2 Complex', threeVoices2); + run('Three Voices - #3', threeVoices3); + run('Auto Adjust Rest Positions - Two Voices', autoRestTwoVoices); + run('Auto Adjust Rest Positions - Three Voices #1', autoRestThreeVoices1); + run('Auto Adjust Rest Positions - Three Voices #2', autoRestThreeVoices2); + }, +}; +/** + * Helper for setting up the first three test cases: threeVoices1, threeVoices2, threeVoices3. + */ +function createThreeVoicesTest(noteGroup1, noteGroup2, noteGroup3, setup) { + return (options) => { + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); + const stave = factory.Stave().addClef('treble').addTimeSignature('4/4'); + const score = factory.EasyScore(); + // Convert each noteGroup array to StaveNote[]. + const noteGroups = [noteGroup1, noteGroup2, noteGroup3].map((args) => score.notes(...args)); + const voices = noteGroups.map((notes) => score.voice(notes)); + setup(factory, voices); + const beams = [ + _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voices[0], +1), + _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voices[1], -1), + _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voices[2], -1), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat); + // Set option to position rests near the notes in each voice. + factory.Formatter().joinVoices(voices).formatToStave(voices, stave); + factory.draw(); + for (let i = 0; i < beams.length; i++) { + beams[i].setContext(factory.getContext()).draw(); + } + options.assert.ok(true); + }; +} +/** + * + */ +const threeVoices1 = createThreeVoicesTest(['e5/2, e5', { stem: 'up' }], ['(d4 a4 d#5)/8, b4, (d4 a4 c5), b4, (d4 a4 c5), b4, (d4 a4 c5), b4', { stem: 'down' }], ['b3/4, e3, f3, a3', { stem: 'down' }], (f, voices) => { + voices[0].getTickables()[0].addModifier(f.Fingering({ number: '0', position: 'left' }), 0); + voices[1] + .getTickables()[0] + .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '4', position: 'left' }), 1); +}); +/** + * Lots of beamed notes. A beam and notehead overlap. + */ +const threeVoices2 = createThreeVoicesTest(['(a4 e5)/16, e5, e5, e5, e5/8, e5, e5/2', { stem: 'up' }], ['(d4 d#5)/16, (b4 c5), d5, e5, (d4 a4 c5)/8, b4, (d4 a4 c5), b4, (d4 a4 c5), b4', { stem: 'down' }], ['b3/8, b3, e3/4, f3, a3', { stem: 'down' }], (f, voices) => { + voices[0] + .getTickables()[0] + .addModifier(f.Fingering({ number: '2', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '0', position: 'above' }), 1); + voices[1] + .getTickables()[0] + .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '4', position: 'left' }), 1); +}); +/** + * + */ +const threeVoices3 = createThreeVoicesTest(['(g4 e5)/4, e5, (g4 e5)/2', { stem: 'up' }], ['c#5/4, b4/8, b4/8/r, a4/4., g4/8', { stem: 'down' }], ['c4/4, b3, a3, g3', { stem: 'down' }], (f, voices) => { + voices[0] + .getTickables()[0] + .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 1); + voices[1].getTickables()[0].addModifier(f.Fingering({ number: '1', position: 'left' }), 0); + voices[2].getTickables()[0].addModifier(f.Fingering({ number: '3', position: 'left' }), 0); +}); +function autoRestTwoVoices(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 900, 200); + const score = f.EasyScore(); + let x = 10; + let beams = []; + function createMeasure(measureTitle, width, align_rests) { + const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1); + x += width; + const noteArrays = [ + score.notes('b4/8/r, e5/16, b4/r, b4/8/r, e5/16, b4/r, b4/8/r, d5/16, b4/r, e5/4', { stem: 'up' }), + score.notes('c5/16, c4, b4/r, d4, e4, f4, b4/r, g4, g4[stem="up"], a4[stem="up"], b4/r, b4[stem="up"], e4/4', { + stem: 'down', + }), + [f.TextNote({ text: measureTitle, line: -1, duration: '1', smooth: true })], + ]; + const voices = noteArrays.map((notes) => score.voice(notes)); + beams = beams.concat(_src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voices[0], 1)).concat(_src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voices[1], -1)); + f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests }); + } + createMeasure('Default Rest Positions', 400, false); + createMeasure('Rests Repositioned To Avoid Collisions', 400, true); + f.draw(); + for (let i = 0; i < beams.length; i++) { + beams[i].setContext(f.getContext()).draw(); + } + options.assert.ok(true, 'Auto Adjust Rests - Two Voices'); +} +function autoRestThreeVoices1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 850, 200); + const score = f.EasyScore(); + let x = 10; + function createMeasure(measureTitle, width, align_rests) { + const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1); + const voices = [ + score.voice(score.notes('b4/4/r, e5, e5/r, e5/r, e5, e5, e5, e5/r', { stem: 'up' }), { time: '8/4' }), + score.voice(score.notes('b4/4/r, b4/r, b4/r, b4, b4/r, b4/r, b4, b4', { stem: 'down' }), { time: '8/4' }), + score.voice(score.notes('e4/4/r, e4/r, f4, b4/r, g4, c4, e4/r, c4', { stem: 'down' }), { time: '8/4' }), + score.voice([ + f.TextNote({ text: measureTitle, duration: '1', line: -1, smooth: true }), + f.TextNote({ text: '', duration: '1', line: -1, smooth: true }), + ], { time: '8/4' }), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests }); + x += width; + } + createMeasure('Default Rest Positions', 400, false); + createMeasure('Rests Repositioned To Avoid Collisions', 400, true); + f.draw(); + options.assert.ok(true); +} +function autoRestThreeVoices2(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 850, 200); + const score = f.EasyScore(); + let x = 10; + function createMeasure(measureTitle, width, align_rests) { + const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1); + const voices = [ + score.voice(score.notes('b4/16/r, e5, e5/r, e5/r, e5, e5, e5, e5/r'), { time: '2/4' }), + score.voice(score.notes('b4/16/r, b4/r, b4/r, b4, b4/r, b4/r, b4, b4'), { time: '2/4' }), + score.voice(score.notes('e4/16/r, e4/r, f4, b4/r, g4, c4, e4/r, c4'), { time: '2/4' }), + score.voice([f.TextNote({ text: measureTitle, duration: 'h', line: -1, smooth: true })], { time: '2/4' }), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests }); + x += width; + } + createMeasure('Default Rest Positions', 400, false); + createMeasure('Rests Repositioned To Avoid Collisions', 400, true); + f.draw(); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ThreeVoicesTests); + + + +/***/ }), + +/***/ "./tests/tickcontext_tests.ts": +/*!************************************!*\ + !*** ./tests/tickcontext_tests.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TickContextTests": () => (/* binding */ TickContextTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _mocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mocks */ "./tests/mocks.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// TickContext Tests + + + + +const TickContextTests = { + Start() { + QUnit.module('TickContext'); + QUnit.test('Current Tick Test', currentTick); + QUnit.test('Tracking Test', tracking); + }, +}; +function currentTick(assert) { + const tc = new _src_tickcontext__WEBPACK_IMPORTED_MODULE_2__.TickContext(); + assert.equal(tc.getCurrentTick().value(), 0, 'New tick context has no ticks'); +} +function tracking(assert) { + const BEAT = (1 * _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.RESOLUTION) / 4; + const tickables = [ + new _mocks__WEBPACK_IMPORTED_MODULE_3__.MockTickable().setTicks(BEAT).setWidth(10), + new _mocks__WEBPACK_IMPORTED_MODULE_3__.MockTickable().setTicks(BEAT * 2).setWidth(20), + new _mocks__WEBPACK_IMPORTED_MODULE_3__.MockTickable().setTicks(BEAT).setWidth(30), + ]; + const tc = new _src_tickcontext__WEBPACK_IMPORTED_MODULE_2__.TickContext(); + tc.setPadding(0); + tc.addTickable(tickables[0]); + assert.equal(tc.getMaxTicks().value(), BEAT); + tc.addTickable(tickables[1]); + assert.equal(tc.getMaxTicks().value(), BEAT * 2); + tc.addTickable(tickables[2]); + assert.equal(tc.getMaxTicks().value(), BEAT * 2); + assert.equal(tc.getWidth(), 0); + tc.preFormat(); + assert.equal(tc.getWidth(), 30); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TickContextTests); + + + +/***/ }), + +/***/ "./tests/timesignature_tests.ts": +/*!**************************************!*\ + !*** ./tests/timesignature_tests.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TimeSignatureTests": () => (/* binding */ TimeSignatureTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_staveconnector__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _src_timesignature__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/timesignature */ "./src/timesignature.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// TimeSignature Tests + + + + +const TimeSignatureTests = { + Start() { + QUnit.module('TimeSignature'); + QUnit.test('Time Signature Parser', parser); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Basic Time Signatures', basic); + run('Big Signature Test', big); + run('Additive Signature Test', additive); + run('Alternating Signature Test', alternating); + run('Interchangeable Signature Test', interchangeable); + run('Aggregate Signature Test', agregate); + run('Complex Signature Test', complex); + run('Time Signature multiple staves alignment test', multiple); + run('Time Signature Change Test', change); + }, +}; +function parser(assert) { + const timeSig = new _src_timesignature__WEBPACK_IMPORTED_MODULE_3__.TimeSignature(); + assert.equal(timeSig.getTimeSpec(), '4/4', 'default time signature is 4/4'); + const mustFail = ['asdf', '123/', '/10', '/', '4567', 'C+', '1+', '+1', '(3+', '+3)', '()', '(+)']; + mustFail.forEach((invalidString) => { + assert.throws(() => timeSig.parseTimeSpec(invalidString), /BadTimeSignature/); + }); + const mustPass = ['4/4', '10/12', '1/8', '1234567890/1234567890', 'C', 'C|', '+']; + mustPass.forEach((validString) => timeSig.parseTimeSpec(validString)); + timeSig.setTimeSig('4/4'); + assert.equal(timeSig.getIsNumeric(), true, '4/4 is numeric'); + assert.equal(timeSig.getLine(), 0, 'digits are on line 0'); + timeSig.setTimeSig('C|'); + assert.equal(timeSig.getTimeSpec(), 'C|', 'timeSpec changed to C|'); + assert.equal(timeSig.getIsNumeric(), false, 'cut time is not numeric'); + assert.equal(timeSig.getLine(), 2, 'cut/common are on line 2'); + assert.ok(true, 'all pass'); +} +function basic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 120); + new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 500) + .addTimeSignature('2/2') + .addTimeSignature('3/4') + .addTimeSignature('4/4') + .addTimeSignature('6/8') + .addTimeSignature('C') + .addTimeSignature('C|') + .addEndTimeSignature('2/2') + .addEndTimeSignature('3/4') + .addEndTimeSignature('4/4') + .addEndClef('treble') + .addEndTimeSignature('6/8') + .addEndTimeSignature('C') + .addEndTimeSignature('C|') + .setContext(ctx) + .draw(); + options.assert.ok(true, 'all pass'); +} +function big(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300) + .addTimeSignature('12/8') + .addTimeSignature('7/16') + .addTimeSignature('1234567/890') + .addTimeSignature('987/654321') + .setContext(ctx) + .draw(); + options.assert.ok(true, 'all pass'); +} +function additive(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300).addTimeSignature('2+3+2/8').setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function alternating(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300).addTimeSignature('6/8').addTimeSignature('+').addTimeSignature('3/4').setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function interchangeable(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300).addTimeSignature('3/4').addTimeSignature('-').addTimeSignature('2/4').setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function agregate(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300) + .addTimeSignature('2/4') + .addTimeSignature('+') + .addTimeSignature('3/8') + .addTimeSignature('+') + .addTimeSignature('5/4') + .setContext(ctx) + .draw(); + options.assert.ok(true, 'all pass'); +} +function complex(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300) + .addTimeSignature('(2+3)/16') + .addTimeSignature('+') + .addTimeSignature('3/8') + .setContext(ctx) + .draw(); + options.assert.ok(true, 'all pass'); +} +function multiple(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 350); + // Each StaveLineConfig object is of the form { visible: boolean }. + const stave1LineConfig = [false, false, true, false, false].map((visible) => ({ visible })); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(15, 0, 300) + .setConfigForLines(stave1LineConfig) + .addClef('percussion') + .addTimeSignature('4/4', 25) // passing the custom padding in pixels + .setContext(ctx) + .draw(); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(15, 110, 300).addClef('treble').addTimeSignature('4/4').setContext(ctx).draw(); + const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(15, 220, 300).addClef('bass').addTimeSignature('4/4').setContext(ctx).draw(); + _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave.formatBegModifiers([stave1, stave2, stave3]); + new _src_staveconnector__WEBPACK_IMPORTED_MODULE_2__.StaveConnector(stave1, stave2).setType('single').setContext(ctx).draw(); + new _src_staveconnector__WEBPACK_IMPORTED_MODULE_2__.StaveConnector(stave2, stave3).setType('single').setContext(ctx).draw(); + new _src_staveconnector__WEBPACK_IMPORTED_MODULE_2__.StaveConnector(stave2, stave3).setType('brace').setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function change(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 900); + const stave = f.Stave({ x: 0, y: 0 }).addClef('treble').addTimeSignature('C|'); + const tickables = [ + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), + f.TimeSigNote({ time: '3/4' }), + f.StaveNote({ keys: ['d/4'], duration: '4', clef: 'alto' }), + f.StaveNote({ keys: ['b/3'], duration: '4r', clef: 'alto' }), + f.TimeSigNote({ time: 'C' }), + f.StaveNote({ keys: ['c/3', 'e/3', 'g/3'], duration: '4', clef: 'bass' }), + f.TimeSigNote({ time: '9/8' }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), + ]; + const voice = f.Voice().setStrict(false).addTickables(tickables); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TimeSignatureTests); + + + +/***/ }), + +/***/ "./tests/tremolo_tests.ts": +/*!********************************!*\ + !*** ./tests/tremolo_tests.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TremoloTests": () => (/* binding */ TremoloTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _src_tremolo__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/tremolo */ "./src/tremolo.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Tremolo Tests + + + +const TremoloTests = { + Start() { + QUnit.module('Tremolo'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Tremolo - Basic', tremoloBasic); + run('Tremolo - Big', tremoloBig); + }, +}; +function tremoloBasic(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); + const score = f.EasyScore(); + // bar 1 + const stave1 = f.Stave({ width: 250 }).setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); + const notes1 = score.notes('e4/4, e4, e4, e4', { stem: 'up' }); + notes1[0].addModifier(new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(3), 0); + notes1[1].addModifier(new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(2), 0); + notes1[2].addModifier(new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(1), 0); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + // bar 2 + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) + .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); + const notes2 = score.notes('e5/4, e5, e5, e5', { stem: 'down' }); + notes2[1].addModifier(new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(1), 0); + notes2[2].addModifier(new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(2), 0); + notes2[3].addModifier(new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(3), 0); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + f.draw(); + options.assert.ok(true, 'Tremolo - Basic'); +} +function tremoloBig(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); + const score = f.EasyScore(); + // bar 1 + const stave1 = f.Stave({ width: 250 }).setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); + const notes1 = score.notes('e4/4, e4, e4, e4', { stem: 'up' }); + const tremolo1 = new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(3); + tremolo1.extra_stroke_scale = 1.7; + tremolo1.y_spacing_scale = 1.5; + const tremolo2 = new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(2); + tremolo2.extra_stroke_scale = 1.7; + tremolo2.y_spacing_scale = 1.5; + const tremolo3 = new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(1); + tremolo3.extra_stroke_scale = 1.7; + tremolo3.y_spacing_scale = 1.5; + notes1[0].addModifier(tremolo1, 0); + notes1[1].addModifier(tremolo2, 0); + notes1[2].addModifier(tremolo3, 0); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + // bar 2 + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) + .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); + const notes2 = score.notes('e5/4, e5, e5, e5', { stem: 'down' }); + const tremolo4 = new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(1); + tremolo4.extra_stroke_scale = 1.7; + tremolo4.y_spacing_scale = 1.5; + const tremolo5 = new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(2); + tremolo5.extra_stroke_scale = 1.7; + tremolo5.y_spacing_scale = 1.5; + const tremolo6 = new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(3); + tremolo6.extra_stroke_scale = 1.7; + tremolo6.y_spacing_scale = 1.5; + notes2[1].addModifier(tremolo4, 0); + notes2[2].addModifier(tremolo5, 0); + notes2[3].addModifier(tremolo6, 0); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + f.draw(); + options.assert.ok(true, 'Tremolo - Big'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TremoloTests); + + + +/***/ }), + +/***/ "./tests/tuning_tests.ts": +/*!*******************************!*\ + !*** ./tests/tuning_tests.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TuningTests": () => (/* binding */ TuningTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_tuning__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/tuning */ "./src/tuning.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Tuning Tests + + +const TuningTests = { + Start() { + QUnit.module('Tuning'); + QUnit.test('Standard Tuning', standard); + QUnit.test('Standard Banjo Tuning', banjo); + QUnit.test('Return note for fret', noteForFret); + }, +}; +/** + * Helper function to verify that the provided tuning matches a standard 6-string guitar. + */ +function checkStandard(assert, tuning) { + assert.throws(() => tuning.getValueForString(0), /BadArguments/, 'String 0'); + assert.throws(() => tuning.getValueForString(9), /BadArguments/, 'String 9'); + // TODO: Tuning constructor has a bug in that the default tuning has 8 strings. + // See: 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2' in tuning.ts constructor. + // assert.throws(() => tuning.getValueForString(7), /BadArguments/, 'String 7'); + // Tuning.getValueForString() returns a note number where the value 60 corresponds to middle C. + assert.equal(tuning.getValueForString(6), 40, 'Low E string'); + assert.equal(tuning.getValueForString(5), 45, 'A string'); + assert.equal(tuning.getValueForString(4), 50, 'D string'); + assert.equal(tuning.getValueForString(3), 55, 'G string'); + assert.equal(tuning.getValueForString(2), 59, 'B string'); + assert.equal(tuning.getValueForString(1), 64, 'High E string'); +} +/** + * Helper function to verify that the provided tuning matches a standard 5-string banjo. + */ +function checkStandardBanjo(assert, tuning) { + assert.throws(() => tuning.getValueForString(0), /BadArguments/, 'String 0'); + assert.throws(() => tuning.getValueForString(6), /BadArguments/, 'String 6'); + assert.equal(tuning.getValueForString(5), 67, 'High G string'); + assert.equal(tuning.getValueForString(4), 50, 'D string'); + assert.equal(tuning.getValueForString(3), 55, 'G string'); + assert.equal(tuning.getValueForString(2), 59, 'B string'); + assert.equal(tuning.getValueForString(1), 62, 'High D string'); +} +function standard(assert) { + assert.expect(16); + const tuning = new _src_tuning__WEBPACK_IMPORTED_MODULE_1__.Tuning(); + checkStandard(assert, tuning); + // Set the tuning by specifying a name: 'standard'. + tuning.setTuning('standard'); + checkStandard(assert, tuning); +} +function banjo(assert) { + assert.expect(7); + const tuning = new _src_tuning__WEBPACK_IMPORTED_MODULE_1__.Tuning(); + tuning.setTuning('standardBanjo'); + checkStandardBanjo(assert, tuning); +} +function noteForFret(assert) { + assert.expect(8); + const tuning = new _src_tuning__WEBPACK_IMPORTED_MODULE_1__.Tuning('E/5,B/4,G/4,D/4,A/3,E/3'); + assert.throws(() => tuning.getNoteForFret(-1, 1), /BadArguments/, 'Fret = -1'); + assert.throws(() => tuning.getNoteForFret(1, -1), /BadArguments/, 'String = -1'); + assert.equal(tuning.getNoteForFret(0, 1), 'E/5', 'High E string'); + assert.equal(tuning.getNoteForFret(5, 1), 'A/5', 'High E string, fret 5'); + assert.equal(tuning.getNoteForFret(0, 2), 'B/4', 'B string'); + assert.equal(tuning.getNoteForFret(0, 3), 'G/4', 'G string'); + assert.equal(tuning.getNoteForFret(12, 2), 'B/5', 'B string, fret 12'); + assert.equal(tuning.getNoteForFret(0, 6), 'E/3', 'Low E string'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TuningTests); + + + +/***/ }), + +/***/ "./tests/tuplet_tests.ts": +/*!*******************************!*\ + !*** ./tests/tuplet_tests.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TupletTests": () => (/* binding */ TupletTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); +/* harmony import */ var _src_tuplet__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/tuplet */ "./src/tuplet.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Tuplet Tests + + + + + +const TupletTests = { + Start() { + QUnit.module('Tuplet'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple Tuplet', simple); + run('Beamed Tuplet', beamed); + run('Ratioed Tuplet', ratio); + run('Bottom Tuplet', bottom); + run('Bottom Ratioed Tuplet', bottomRatio); + run('Awkward Tuplet', awkward); + run('Complex Tuplet', complex); + run('Mixed Stem Direction Tuplet', mixedTop); + run('Mixed Stem Direction Bottom Tuplet', mixedBottom); + run('Nested Tuplets', nested); + run('Single Tuplets', single); + }, +}; +// Helper Functions to set the stem direction and duration of the options objects (i.e., StaveNoteStruct) +// that are ultimately passed into Factory.StaveNote(). +// eslint-disable-next-line +const set = (key) => (value) => (object) => { + object[key] = value; + return object; +}; +const setStemDirection = set('stem_direction'); +const setStemUp = setStemDirection(_src_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP); +const setStemDown = setStemDirection(_src_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN); +const setDurationToQuarterNote = set('duration')('4'); +/** + * Simple test case with one ascending triplet and one descending triplet. + */ +function simple(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('3/4'); + const notes = [ + { keys: ['g/4'], duration: '4' }, + { keys: ['a/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['b/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Tuplet({ notes: notes.slice(0, 3) }); + f.Tuplet({ notes: notes.slice(3, 6) }); + // 3/4 time + const voice = f + .Voice({ time: { num_beats: 3, beat_value: 4 } }) + .setStrict(true) + .addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Simple Test'); +} +function beamed(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('3/8'); + const notes = [ + { keys: ['b/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ notes: notes.slice(0, 3) }); + f.Beam({ notes: notes.slice(3, 10) }); + f.Tuplet({ notes: notes.slice(0, 3) }); + f.Tuplet({ notes: notes.slice(3, 10) }); + // 3/8 time + const voice = f + .Voice({ time: { num_beats: 3, beat_value: 8 } }) + .setStrict(true) + .addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Beamed Test'); +} +function ratio(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('4/4'); + const notes = [ + { keys: ['f/4'], duration: '4' }, + { keys: ['a/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['g/4'], duration: '8' }, + { keys: ['e/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(3, 6), + }); + f.Tuplet({ + notes: notes.slice(0, 3), + options: { + ratioed: true, + }, + }); + f.Tuplet({ + notes: notes.slice(3, 6), + options: { + ratioed: true, + notes_occupied: 4, + }, + }); + const voice = f.Voice().setStrict(true).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Ratioed Test'); +} +function bottom(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 350, 160); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('3/4'); + const notes = [ + { keys: ['f/4'], duration: '4' }, + { keys: ['c/4'], duration: '4' }, + { keys: ['g/4'], duration: '4' }, + { keys: ['d/5'], duration: '8' }, + { keys: ['g/3'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + ] + .map(setStemDown) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(3, 6), + }); + f.Tuplet({ + notes: notes.slice(0, 3), + options: { location: _src_tuplet__WEBPACK_IMPORTED_MODULE_4__.Tuplet.LOCATION_BOTTOM }, + }); + f.Tuplet({ + notes: notes.slice(3, 6), + options: { location: _src_tuplet__WEBPACK_IMPORTED_MODULE_4__.Tuplet.LOCATION_BOTTOM }, + }); + const voice = f + .Voice({ time: { num_beats: 3, beat_value: 4 } }) + .setStrict(true) + .addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Bottom Test'); +} +function bottomRatio(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 350, 160); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('5/8'); + const notes = [ + { keys: ['f/4'], duration: '4' }, + { keys: ['c/4'], duration: '4' }, + { keys: ['d/4'], duration: '4' }, + { keys: ['d/5'], duration: '8' }, + { keys: ['g/5'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + ] + .map(setStemDown) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(3, 6), + }); + f.Tuplet({ + notes: notes.slice(0, 3), + options: { + location: _src_tuplet__WEBPACK_IMPORTED_MODULE_4__.Tuplet.LOCATION_BOTTOM, + ratioed: true, + }, + }); + f.Tuplet({ + notes: notes.slice(3, 6), + options: { + location: _src_tuplet__WEBPACK_IMPORTED_MODULE_4__.Tuplet.LOCATION_BOTTOM, + notes_occupied: 1, + }, + }); + const voice = f + .Voice({ time: { num_beats: 5, beat_value: 8 } }) + .setStrict(true) + .addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Bottom Ratioed Test'); +} +function awkward(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 370, 160); + const stave = f.Stave({ x: 10, y: 10 }); + const notes = [ + { keys: ['g/4'], duration: '16' }, + { keys: ['b/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['e/4'], duration: '16' }, + { keys: ['c/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['e/4'], duration: '16' }, + { keys: ['c/4'], duration: '8' }, + { keys: ['d/4'], duration: '8' }, + { keys: ['e/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ notes: notes.slice(0, 12) }); + f.Tuplet({ + notes: notes.slice(0, 12), + options: { + notes_occupied: 142, + ratioed: true, + }, + }); + f.Tuplet({ + notes: notes.slice(12, 15), + options: { + ratioed: true, + }, + }).setBracketed(true); + const voice = f.Voice().setStrict(false).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Awkward Test'); +} +function complex(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4'); + const notes1 = [ + { keys: ['b/4'], duration: '8d' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['g/4'], duration: '8' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['b/4'], duration: '16r' }, + { keys: ['g/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['g/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + _src_dot__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([notes1[0]], { all: true }); + const notes2 = [{ keys: ['c/4'] }, { keys: ['c/4'] }, { keys: ['c/4'] }, { keys: ['c/4'] }] + .map(setDurationToQuarterNote) + .map(setStemDown) + .map(f.StaveNote.bind(f)); + f.Beam({ notes: notes1.slice(0, 3) }); + f.Beam({ notes: notes1.slice(5, 9) }); + f.Beam({ notes: notes1.slice(11, 16) }); + f.Tuplet({ + notes: notes1.slice(0, 3), + }); + f.Tuplet({ + notes: notes1.slice(3, 11), + options: { + num_notes: 7, + notes_occupied: 4, + ratioed: false, + }, + }); + f.Tuplet({ + notes: notes1.slice(11, 16), + options: { + notes_occupied: 4, + }, + }); + const voice1 = f.Voice().setStrict(true).addTickables(notes1); + const voice2 = f.Voice().setStrict(true).addTickables(notes2); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true, 'Complex Test'); +} +function mixedTop(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10 }); + const notes = [ + { keys: ['a/4'], stem_direction: 1 }, + { keys: ['c/6'], stem_direction: -1 }, + { keys: ['a/4'], stem_direction: 1 }, + { keys: ['f/5'], stem_direction: 1 }, + { keys: ['a/4'], stem_direction: -1 }, + { keys: ['c/6'], stem_direction: -1 }, + ] + .map(setDurationToQuarterNote) + .map(f.StaveNote.bind(f)); + f.Tuplet({ + notes: notes.slice(0, 2), + options: { + notes_occupied: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(2, 4), + options: { + notes_occupied: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(4, 6), + options: { + notes_occupied: 3, + }, + }); + const voice = f.Voice().setStrict(false).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Mixed Stem Direction Tuplet'); +} +function mixedBottom(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10 }); + const notes = [ + { keys: ['f/3'], stem_direction: 1 }, + { keys: ['a/5'], stem_direction: -1 }, + { keys: ['a/4'], stem_direction: 1 }, + { keys: ['f/3'], stem_direction: 1 }, + { keys: ['a/4'], stem_direction: -1 }, + { keys: ['c/4'], stem_direction: -1 }, + ] + .map(setDurationToQuarterNote) + .map(f.StaveNote.bind(f)); + f.Tuplet({ + notes: notes.slice(0, 2), + options: { + notes_occupied: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(2, 4), + options: { + notes_occupied: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(4, 6), + options: { + notes_occupied: 3, + }, + }); + const voice = f.Voice().setStrict(false).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Mixed Stem Direction Bottom Tuplet'); +} +function nested(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4'); + const notes = [ + // Big triplet 1: + { keys: ['b/4'], duration: '4' }, + { keys: ['a/4'], duration: '4' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['b/4'], duration: '2' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(2, 7), + }); + f.Tuplet({ + notes: notes.slice(0, 7), + options: { + notes_occupied: 2, + num_notes: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(2, 7), + options: { + notes_occupied: 4, + num_notes: 5, + }, + }); + // 4/4 time + const voice = f.Voice().setStrict(true).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Nested Tuplets'); +} +function single(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4'); + const notes = [ + // Big triplet 1: + { keys: ['c/4'], duration: '4' }, + { keys: ['d/4'], duration: '8' }, + { keys: ['e/4'], duration: '8' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + { keys: ['a/4'], duration: '2' }, + { keys: ['b/4'], duration: '4' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(1, 4), + }); + // big quartuplet + f.Tuplet({ + notes: notes.slice(0, -1), + options: { + num_notes: 4, + notes_occupied: 3, + ratioed: true, + bracketed: true, + }, + }); + // first singleton + f.Tuplet({ + notes: notes.slice(0, 1), + options: { + num_notes: 3, + notes_occupied: 2, + ratioed: true, + }, + }); + // eighth note triplet + f.Tuplet({ + notes: notes.slice(1, 4), + options: { + num_notes: 3, + notes_occupied: 2, + }, + }); + // second singleton + f.Tuplet({ + notes: notes.slice(4, 5), + options: { + num_notes: 3, + notes_occupied: 2, + ratioed: true, + bracketed: true, + }, + }); + // 4/4 time + const voice = f + .Voice({ time: { num_beats: 4, beat_value: 4 } }) + .setStrict(true) + .addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Nested Tuplets'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TupletTests); + + + +/***/ }), + +/***/ "./tests/typeguard_tests.ts": +/*!**********************************!*\ + !*** ./tests/typeguard_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TypeGuardTests": () => (/* binding */ TypeGuardTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_canvascontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_stemmablenote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _src_typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Ron B. Yeh +// MIT License +// +// TypeGuard Tests +// eslint-disable-next-line +// @ts-nocheck to support ES5 style class declaration in the fakeES5() test case. + + + + + + +const TypeGuardTests = { + Start() { + QUnit.module('TypeGuard'); + QUnit.test('Real VexFlow Types', real); + QUnit.test('Fake VexFlow Types in ES5', fakeES5); + QUnit.test('Fake VexFlow Types in ES6', fakeES6); + QUnit.test('Edge Case ES5/ES6', edgeCaseES5vsES6); + }, +}; +function real(assert) { + const s = new _src_stavenote__WEBPACK_IMPORTED_MODULE_2__.StaveNote({ keys: ['c/4'], duration: 'w' }); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(s), 'isStaveNote helper function'); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isCategory)(s, 'StaveNote'), 'Use isCategory(s, "StaveNote") directly'); + assert.notOk((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(s), 'isTabNote helper function. s is NOT a TabNote.'); + const t = new _src_tabnote__WEBPACK_IMPORTED_MODULE_4__.TabNote({ positions: [{ str: 2, fret: 1 }], duration: '1' }); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(t), 'isTabNote helper function'); + assert.notOk((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(t), 't is NOT a StaveNote'); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isNote)(s), 'StaveNote extends StemmableNote which extends Note, so s is a Note'); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(t), 'TabNote extends StemmableNote'); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isNote)(t), 'TabNote extends StemmableNote which extends Note, so t is a Note'); + const canvas = document.createElement('canvas'); + canvas.width = 800; + canvas.height = 400; + const ctx = new _src_canvascontext__WEBPACK_IMPORTED_MODULE_1__.CanvasContext(canvas.getContext('2d')); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isRenderContext)(ctx), 'ctx is a RenderContext'); +} +/** + * Helper function to test the fake VexFlow objects we create in fakeES5() and fakeES6(). + */ +function checkFakeObjects(assert, fakeStemmableNote, fakeStaveNote) { + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(fakeStemmableNote), 'Fake StemmableNote is a StemmableNote.'); + assert.notOk((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isNote)(fakeStemmableNote), 'Fake StemmableNote is not a Note (no ancestors with the correct CATEGORY).'); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isCategory)(fakeStaveNote, 'StaveNote'), 'Fake StaveNote is a StaveNote.'); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(fakeStaveNote), 'Fake StaveNote is a StaveNote (via helper function).'); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isCategory)(fakeStaveNote, 'StemmableNote'), 'Fake StaveNote is also a StemmableNote (via inheritance).'); + assert.notOk((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isNote)(fakeStaveNote), 'Fake StaveNote is not a Note. CATEGORY does not match.'); +} +/** + * Demonstrate that an object (ES5-style) can pass the isCategory(...) test if it + * has the correct static .CATEGORY property. + */ +function fakeES5(assert) { + function FakeStemmableNote() { + this.isFake = true; + } + FakeStemmableNote.CATEGORY = _src_stemmablenote__WEBPACK_IMPORTED_MODULE_3__.StemmableNote.CATEGORY; + function FakeStaveNote() { + FakeStemmableNote.call(this); + } + FakeStaveNote.CATEGORY = _src_stavenote__WEBPACK_IMPORTED_MODULE_2__.StaveNote.CATEGORY; + FakeStaveNote.prototype = Object.create(FakeStemmableNote.prototype); + FakeStaveNote.prototype.constructor = FakeStaveNote; + const fakeStemmableNote = new FakeStemmableNote(); + const fakeStaveNote = new FakeStaveNote(); + checkFakeObjects(assert, fakeStemmableNote, fakeStaveNote); +} +/** + * Demonstrate that an object (ES6-style) can pass the isCategory(...) test if it + * or its ancestor has the correct static .CATEGORY property. + */ +function fakeES6(assert) { + class FakeStemmableNote { + } + FakeStemmableNote.CATEGORY = _src_stemmablenote__WEBPACK_IMPORTED_MODULE_3__.StemmableNote.CATEGORY; + class FakeStaveNote extends FakeStemmableNote { + } + FakeStaveNote.CATEGORY = _src_stavenote__WEBPACK_IMPORTED_MODULE_2__.StaveNote.CATEGORY; + const fakeStemmableNote = new FakeStemmableNote(); + const fakeStaveNote = new FakeStaveNote(); + checkFakeObjects(assert, fakeStemmableNote, fakeStaveNote); +} +/** + * The tsconfig.json target is ES6 (as of August 18, 2021), so isCategory() works even when the root class "extends Object". + */ +function edgeCaseES5vsES6(assert) { + class Z extends Object { + } + class Y extends Z { + } + class X extends Y { + } + const zInstance = new Z(); + const xInstance = new X(); + assert.ok(xInstance instanceof Object, 'es5 & es6: x IS an instanceof Object'); + // If targeting es5, these three assertions only pass if we remove "extends Object" from the class Z definition. + assert.ok(zInstance instanceof Z, 'es6: z IS an instanceof Z'); + assert.ok(xInstance instanceof Y, 'es6: x IS an instanceof Y'); + assert.ok(xInstance instanceof Z, 'es6: x IS an instanceof Z'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TypeGuardTests); + + + +/***/ }), + +/***/ "./tests/unison_tests.ts": +/*!*******************************!*\ + !*** ./tests/unison_tests.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "UnisonTests": () => (/* binding */ UnisonTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/tables */ "./src/tables.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Unison Tests + + +const UnisonTests = { + Start() { + QUnit.module('Unison'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple(true)', simple, { unison: true, voice1: 'e4/q, e4/q, e4/h', voice2: 'e4/8, e4/8, e4/q, e4/h' }); + run('Simple(false)', simple, { unison: false, voice1: 'e4/q, e4/q, e4/h', voice2: 'e4/8, e4/8, e4/q, e4/h' }); + run('Accidentals(true)', simple, { + unison: true, + voice1: 'e4/q, e#4/q, e#4/h', + voice2: 'e4/8, e4/8, eb4/q, eb4/h', + }); + run('Accidentals(false)', simple, { + unison: false, + voice1: 'e4/q, e#4/q, e#4/h', + voice2: 'e4/8, e4/8, eb4/q, eb4/h', + }); + run('Dots(true)', simple, { unison: true, voice1: 'e4/q.., e4/16, e4/h', voice2: '(a4 e4)/q., e4/8, e4/h' }); + run('Dots(false)', simple, { unison: false, voice1: 'e4/q.., e4/16, e4/h', voice2: '(a4 e4)/q., e4/8, e4/h' }); + run('Breve(true)', breve, { unison: true }); + run('Breve(false)', breve, { unison: false }); + run('Style(true)', style, { unison: true }); + run('Style(false)', style, { unison: false }); + }, +}; +function simple(options) { + _src_tables__WEBPACK_IMPORTED_MODULE_1__.Tables.UNISON = options.params.unison; + const vf = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); + const score = vf.EasyScore(); + const system = vf.System({ y: 40, x: 10, width: 400 }); + system.addStave({ + voices: [score.voice(score.notes(options.params.voice1)), score.voice(score.notes(options.params.voice2))], + }); + system.getStaves()[0].setClef('treble'); + system.getStaves()[0].setTimeSignature('4/4'); + vf.draw(); + options.assert.expect(0); +} +function style(options) { + _src_tables__WEBPACK_IMPORTED_MODULE_1__.Tables.UNISON = options.params.unison; + const vf = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); + const score = vf.EasyScore(); + const system = vf.System({ y: 40, x: 10, width: 400 }); + const notes1 = score.notes('e4/q, e4/q, e4/h'); + const notes2 = score.notes('e4/8, e4/8, e4/q, e4/h'); + notes1[2].setStyle({ fillStyle: 'blue', strokeStyle: 'blue' }); + notes2[3].setStyle({ fillStyle: 'green', strokeStyle: 'green' }); + system.addStave({ + voices: [score.voice(notes1), score.voice(notes2)], + }); + system.getStaves()[0].setClef('treble'); + system.getStaves()[0].setTimeSignature('4/4'); + vf.draw(); + options.assert.expect(0); +} +function breve(options) { + _src_tables__WEBPACK_IMPORTED_MODULE_1__.Tables.UNISON = options.params.unison; + const vf = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); + const score = vf.EasyScore(); + const system = vf.System({ y: 40, x: 10, width: 400 }); + system.addStave({ + voices: [ + score.voice([vf.StaveNote({ keys: ['e/4'], duration: '1/2' })], { time: '8/4' }), + score.voice(score.notes('e4/1, e4/1'), { time: '8/4' }), + ], + }); + system.getStaves()[0].setClef('treble'); + system.getStaves()[0].setTimeSignature('8/4'); + vf.draw(); + options.assert.expect(0); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(UnisonTests); + + + +/***/ }), + +/***/ "./tests/vexflow_test_helpers.ts": +/*!***************************************!*\ + !*** ./tests/vexflow_test_helpers.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "MAJOR_KEYS": () => (/* binding */ MAJOR_KEYS), +/* harmony export */ "MINOR_KEYS": () => (/* binding */ MINOR_KEYS), +/* harmony export */ "VexFlowTests": () => (/* binding */ VexFlowTests), +/* harmony export */ "concat": () => (/* binding */ concat) +/* harmony export */ }); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +/* harmony import */ var _src_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com/) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// VexFlow Test Support Library + + +const global = (0,_src_util__WEBPACK_IMPORTED_MODULE_1__.globalObject)(); +// Each test case will switch through the available fonts, and then restore the original font when done. +let originalFontNames; +function useTempFontStack(fontName) { + originalFontNames = _src_index__WEBPACK_IMPORTED_MODULE_0__.Flow.getMusicFont(); + _src_index__WEBPACK_IMPORTED_MODULE_0__.Flow.setMusicFont(...VexFlowTests.FONT_STACKS[fontName]); +} +function restoreOriginalFontStack() { + _src_index__WEBPACK_IMPORTED_MODULE_0__.Flow.setMusicFont(...originalFontNames); +} +// A micro util inspired by jQuery. +if (!global.$) { + // generate_png_images.js uses jsdom and does not include jQuery. + global.$ = (param) => { + let element; + if (typeof param !== 'string') { + element = param; + } + else if (param.startsWith('<')) { + // Extract the tag name: e.g.,
=> div + // Assume param.match returns something (! operator). + // eslint-disable-next-line + const tagName = param.match(/[A-Za-z]+/g)[0]; + element = document.createElement(tagName); + } + else { + element = document.querySelector(param); + } + const $element = { + // eslint-disable-next-line + get(index) { + return element; + }, + addClass(c) { + element.classList.add(c); + return $element; + }, + text(t) { + element.textContent = t; + return $element; + }, + html(h) { + if (!h) { + return element.innerHTML; + } + else { + element.innerHTML = h; + return $element; + } + }, + append(...elementsToAppend) { + elementsToAppend.forEach((e) => { + element.appendChild(e); + }); + return $element; + }, + attr(attrName, val) { + element.setAttribute(attrName, val); + return $element; + }, + }; + return $element; + }; +} +/** Allow `name` to be used inside file names. */ +function sanitizeName(name) { + return name.replace(/[^a-zA-Z0-9]/g, '_'); +} +const CANVAS_TEST_CONFIG = { + backend: _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.Backends.CANVAS, + tagName: 'canvas', + testType: 'Canvas', + fontStacks: ['Bravura'], +}; +const CANVAS_TEXT_CONFIG = { + backend: _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.Backends.CANVAS, + tagName: 'canvas', + testType: 'Canvas', + fontStacks: ['Bravura'], +}; +const SVG_TEST_CONFIG = { + backend: _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.Backends.SVG, + tagName: 'div', + testType: 'SVG', + fontStacks: ['Bravura', 'Gonville', 'Petaluma', 'Leland'], +}; +const SVG_TEXT_CONFIG = { + backend: _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.Backends.SVG, + tagName: 'div', + testType: 'SVG', + fontStacks: ['Bravura'], +}; +const NODE_TEST_CONFIG = { + backend: _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.Backends.CANVAS, + tagName: 'canvas', + testType: 'NodeCanvas', + fontStacks: ['Bravura', 'Gonville', 'Petaluma', 'Leland'], +}; +class VexFlowTests { + // Call this at the end of a `tests/xxxx_tests.ts` file to register the module. + static register(test) { + VexFlowTests.tests.push(test); + } + static parseJobOptions(runOptions) { + let { jobs, job } = runOptions || { jobs: 1, job: 0 }; + if (window) { + const { location } = window; + if (location) { + const sps = new URLSearchParams(location.search); + const jobsParam = sps.get('jobs'); + const jobParam = sps.get('job'); + if (jobsParam) { + jobs = parseInt(jobsParam, 10); + } + if (jobParam) { + job = parseInt(jobParam, 10); + } + } + } + return { + jobs, + job, + }; + } + // flow.html calls this to invoke all the tests. + static run(runOptions) { + const { jobs, job } = VexFlowTests.parseJobOptions(runOptions); + VexFlowTests.tests.forEach((test, idx) => { + if (jobs === 1 || idx % jobs === job) { + test.Start(); + } + }); + } + static set NODE_FONT_STACKS(fontStacks) { + NODE_TEST_CONFIG.fontStacks = fontStacks; + } + /** Return a unique ID for a test. */ + static generateTestID(prefix) { + return prefix + '_' + VexFlowTests.NEXT_TEST_ID++; + } + /** + * Run `func` inside a QUnit test for each of the enabled rendering backends. + * @param name + * @param testFunc + * @param params + */ + // eslint-disable-next-line + static runTests(name, testFunc, params) { + VexFlowTests.runCanvasTest(name, testFunc, params); + VexFlowTests.runSVGTest(name, testFunc, params); + VexFlowTests.runNodeTest(name, testFunc, params); + } + // eslint-disable-next-line + static runTextTests(name, testFunc, params) { + VexFlowTests.runCanvasText(name, testFunc, params); + VexFlowTests.runSVGText(name, testFunc, params); + } + /** + * Append a
which contains the test case title and rendered output. + * See flow.html and flow.css. + * @param elementId + * @param testTitle + * @param tagName + */ + static createTest(elementId, testTitle, tagName, titleId = '') { + const anchorTestTitle = `${testTitle}`; + const title = $('
').addClass('name').attr('id', titleId).html(anchorTestTitle).get(0); + const vexOutput = $(`<${tagName}/>`).addClass('vex-tabdiv').attr('id', elementId).get(0); + const container = $('
').addClass('testcanvas').append(title, vexOutput).get(0); + $('#qunit-tests').append(container); + return vexOutput; + } + static makeFactory(options, width = 450, height = 140) { + const { elementId, backend } = options; + return new _src_index__WEBPACK_IMPORTED_MODULE_0__.Factory({ renderer: { elementId, backend, width, height } }); + } + // eslint-disable-next-line + static runCanvasTest(name, testFunc, params) { + if (VexFlowTests.RUN_CANVAS_TESTS) { + const helper = null; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, CANVAS_TEST_CONFIG), { name, testFunc, params, helper })); + } + } + // eslint-disable-next-line + static runCanvasText(name, testFunc, params) { + if (VexFlowTests.RUN_CANVAS_TESTS) { + const helper = null; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, CANVAS_TEXT_CONFIG), { name, testFunc, params, helper })); + } + } + // eslint-disable-next-line + static runSVGTest(name, testFunc, params) { + if (VexFlowTests.RUN_SVG_TESTS) { + const helper = null; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, SVG_TEST_CONFIG), { name, testFunc, params, helper })); + } + } + // eslint-disable-next-line + static runSVGText(name, testFunc, params) { + if (VexFlowTests.RUN_SVG_TESTS) { + const helper = null; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, SVG_TEXT_CONFIG), { name, testFunc, params, helper })); + } + } + // eslint-disable-next-line + static runNodeTest(name, testFunc, params) { + if (VexFlowTests.RUN_NODE_TESTS) { + const helper = VexFlowTests.runNodeTestHelper; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, NODE_TEST_CONFIG), { name, testFunc, params, helper })); + } + } + /** + * Save the PNG file. + * @param fontName + * @param element + */ + static runNodeTestHelper(fontName, element) { + if (_src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.lastContext !== undefined) { + const moduleName = sanitizeName(QUnit.module.name); + const testName = sanitizeName(QUnit.test.name); + // If we are only testing Bravura, we OMIT the font name from the + // output image file name, which allows visual diffs against + // the previous release: version 3.0.9. In the future, if we decide + // to test all fonts by default, we can remove this check. + const onlyBravura = NODE_TEST_CONFIG.fontStacks.length === 1 && fontName === 'Bravura'; + const fontInfo = onlyBravura ? '' : `.${fontName}`; + const fileName = `${VexFlowTests.NODE_IMAGEDIR}/${moduleName}.${testName}${fontInfo}.png`; + const imageData = element.toDataURL().split(';base64,').pop(); + const imageBuffer = Buffer.from(imageData, 'base64'); + VexFlowTests.shims.fs.writeFileSync(fileName, imageBuffer, { encoding: 'base64' }); + } + } + /** Run QUnit.test(...) for each font. */ + // eslint-disable-next-line + static runWithParams({ fontStacks, testFunc, name, params, backend, tagName, testType, helper }) { + if (name === undefined) { + throw new Error('Test name is undefined.'); + } + const testTypeLowerCase = testType.toLowerCase(); + fontStacks.forEach((fontStackName) => { + QUnit.test(name, (assert) => { + useTempFontStack(fontStackName); + const elementId = VexFlowTests.generateTestID(`${testTypeLowerCase}_` + fontStackName); + const moduleName = assert.test.module.name; + const title = moduleName + ' › ' + name + ` › ${testType} + ${fontStackName}`; + // Add an element id for the title div, so that we can scroll directly to a test case. + // Add a fragment identifier to the url (e.g., #Stave.Multiple_Stave_Barline_Test.Bravura) + // This titleId will match the name of the PNGs generated by visual regression tests + // (without the _Current.png or _Reference.png). + let prefix = ''; + if (testTypeLowerCase === 'canvas') { + prefix = testTypeLowerCase + '_'; + } + else { + // DO NOT ADD A PREFIX TO SVG TESTS + // The canvas prefix above is for making sure our element ids are unique, + // since we have a canvas+bravura test case and a svg+bravura test case + // that would otherwise have the same titleId. + } + const titleId = `${prefix}${sanitizeName(moduleName)}.${sanitizeName(name)}.${fontStackName}`; + const element = VexFlowTests.createTest(elementId, title, tagName, titleId); + const options = { elementId, params, assert, backend }; + const isSVG = backend === _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.Backends.SVG; + const contextBuilder = isSVG ? _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.getSVGContext : _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.getCanvasContext; + testFunc(options, contextBuilder); + restoreOriginalFontStack(); + if (helper) + helper(fontStackName, element); + }); + }); + } + /** + * @param ctx + * @param x + * @param y + */ + static plotLegendForNoteWidth(ctx, x, y) { + ctx.save(); + ctx.setFont(_src_index__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, 8); + const spacing = 12; + let lastY = y; + function legend(color, text) { + ctx.beginPath(); + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + ctx.setLineWidth(10); + ctx.moveTo(x, lastY - 4); + ctx.lineTo(x + 10, lastY - 4); + ctx.stroke(); + ctx.setFillStyle('black'); + ctx.fillText(text, x + 15, lastY); + lastY += spacing; + } + legend('green', 'Note + Flag'); + legend('red', 'Modifiers'); + legend('#999', 'Displaced Head'); + legend('#DDD', 'Formatter Shift'); + ctx.restore(); + } +} +VexFlowTests.tests = []; +VexFlowTests.RUN_CANVAS_TESTS = true; +VexFlowTests.RUN_SVG_TESTS = true; +VexFlowTests.RUN_NODE_TESTS = false; +// Default font properties for tests. +VexFlowTests.Font = { size: 10 }; +/** + * Each font stack is a prioritized list of font names. + */ +VexFlowTests.FONT_STACKS = { + Bravura: ['Bravura', 'Custom'], + Gonville: ['Gonville', 'Bravura', 'Custom'], + Petaluma: ['Petaluma', 'Gonville', 'Bravura', 'Custom'], + Leland: ['Leland', 'Bravura', 'Custom'], +}; +VexFlowTests.NEXT_TEST_ID = 0; + +/** + * Used with array.reduce(...) to flatten arrays of arrays in the tests. + */ +// eslint-disable-next-line +const concat = (a, b) => a.concat(b); +/** Used in KeySignature and ClefKeySignature Tests. */ +const MAJOR_KEYS = [ + // + 'C', + 'F', + 'Bb', + 'Eb', + 'Ab', + 'Db', + 'Gb', + 'Cb', + 'G', + 'D', + 'A', + 'E', + 'B', + 'F#', + 'C#', +]; +const MINOR_KEYS = [ + 'Am', + 'Dm', + 'Gm', + 'Cm', + 'Fm', + 'Bbm', + 'Ebm', + 'Abm', + 'Em', + 'Bm', + 'F#m', + 'C#m', + 'G#m', + 'D#m', + 'A#m', +]; +// VexFlow classes can be accessed via Vex.Flow.* or by directly importing a library class. +// Tests can be accessed via Vex.Flow.Test.* or by directly importing a test class. +// Here we set Vex.Flow.Test = VexFlowTests. +// eslint-disable-next-line +// @ts-ignore +_src_index__WEBPACK_IMPORTED_MODULE_0__.Flow.Test = VexFlowTests; + + +/***/ }), + +/***/ "./tests/vf_prefix_tests.ts": +/*!**********************************!*\ + !*** ./tests/vf_prefix_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "VFPrefixTests": () => (/* binding */ VFPrefixTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// VF.* Prefix Tests +// +// VexFlow classes are available under the global Vex.Flow.* namespace. + + +const VFPrefixTests = { + Start() { + QUnit.module('VF.* API'); + QUnit.test('VF.* API', VF_Prefix); + QUnit.test('VF Alias', VF_Alias); + }, +}; +function VF_Prefix(assert) { + // Intentionally use Vex.Flow here so we can verify that the Vex.Flow.* API + // is equivalent to using the individual classes in TypeScript. + const VF = Vex.Flow; + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Accidental, VF.Accidental); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Annotation, VF.Annotation); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Articulation, VF.Articulation); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Barline, VF.Barline); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.BarNote, VF.BarNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Beam, VF.Beam); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Bend, VF.Bend); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox, VF.BoundingBox); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxComputation, VF.BoundingBoxComputation); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.ChordSymbol, VF.ChordSymbol); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Clef, VF.Clef); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.ClefNote, VF.ClefNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Crescendo, VF.Crescendo); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Curve, VF.Curve); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Dot, VF.Dot); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.EasyScore, VF.EasyScore); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Element, VF.Element); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Factory, VF.Factory); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Flow.RESOLUTION, VF.RESOLUTION); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Font, VF.Font); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Formatter, VF.Formatter); + assert.propEqual(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Formatter(), new VF.Formatter(), 'new Formatter()'); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Fraction, VF.Fraction); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.FretHandFinger, VF.FretHandFinger); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.GhostNote, VF.GhostNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Glyph, VF.Glyph); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.GlyphNote, VF.GlyphNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.GraceNote, VF.GraceNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.GraceNoteGroup, VF.GraceNoteGroup); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.GraceTabNote, VF.GraceTabNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.KeyManager, VF.KeyManager); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.KeySignature, VF.KeySignature); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.KeySigNote, VF.KeySigNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Modifier, VF.Modifier); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.ModifierContext, VF.ModifierContext); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.MultiMeasureRest, VF.MultiMeasureRest); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Music, VF.Music); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Note, VF.Note); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.NoteHead, VF.NoteHead); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.NoteSubGroup, VF.NoteSubGroup); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Ornament, VF.Ornament); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Parser, VF.Parser); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.PedalMarking, VF.PedalMarking); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Registry, VF.Registry); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Renderer, VF.Renderer); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.RepeatNote, VF.RepeatNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Repetition, VF.Repetition); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Stave, VF.Stave); + assert.notEqual(_src_index__WEBPACK_IMPORTED_MODULE_1__.Stave, VF.StaveNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveConnector, VF.StaveConnector); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveHairpin, VF.StaveHairpin); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveLine, VF.StaveLine); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveModifier, VF.StaveModifier); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote, VF.StaveNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveTempo, VF.StaveTempo); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveText, VF.StaveText); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveTie, VF.StaveTie); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Stem, VF.Stem); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StringNumber, VF.StringNumber); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke, VF.Stroke); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.System, VF.System); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TabNote, VF.TabNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TabSlide, VF.TabSlide); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TabStave, VF.TabStave); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TabTie, VF.TabTie); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TextBracket, VF.TextBracket); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TextDynamics, VF.TextDynamics); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TextFormatter, VF.TextFormatter); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TextNote, VF.TextNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TickContext, VF.TickContext); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TimeSignature, VF.TimeSignature); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TimeSigNote, VF.TimeSigNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo, VF.Tremolo); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Tuning, VF.Tuning); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Tuplet, VF.Tuplet); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato, VF.Vibrato); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.VibratoBracket, VF.VibratoBracket); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice, VF.Voice); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Volta, VF.Volta); +} +/** + * If you have name collisions with VexFlow classes, consider extracting classes from Vex.Flow + * and renaming them with a VF prefix. + */ +function VF_Alias(assert) { + const Flow = Vex.Flow; + const VFAliases = { + get VFAccidental() { + return Flow.Accidental; + }, + get VFAnnotation() { + return Flow.Annotation; + }, + get VFVibrato() { + return Flow.Vibrato; + }, + }; + const { VFVibrato, VFAccidental, VFAnnotation } = VFAliases; + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Accidental, VFAccidental); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Annotation, VFAnnotation); + const vibrato = new VFVibrato(); + assert.ok(vibrato); + const acc1 = new VFAccidental('##'); + const acc2 = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Accidental('##'); + assert.equal(acc1.type, acc2.type); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(VFPrefixTests); + + + +/***/ }), + +/***/ "./tests/vibrato_tests.ts": +/*!********************************!*\ + !*** ./tests/vibrato_tests.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "VibratoTests": () => (/* binding */ VibratoTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Vibrato Tests + + +const VibratoTests = { + Start() { + QUnit.module('Vibrato'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple Vibrato', simple); + run('Harsh Vibrato', harsh); + run('Vibrato with Bend', withBend); + }, +}; +// Helper function to create TabNote objects. +const tabNote = (noteStruct) => new _src_index__WEBPACK_IMPORTED_MODULE_1__.TabNote(noteStruct); +/** + * Default vibrato symbol (wavy line) on top of a tab with two notes fretted. + */ +function simple(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial'; + const stave = new _src_index__WEBPACK_IMPORTED_MODULE_1__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato(), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'h', + }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato(), 0), + ]; + _src_index__WEBPACK_IMPORTED_MODULE_1__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Simple Vibrato'); +} +/** + * The harsh vibrato symbol is a zig zag line with sharp points. + * This test is nearly identical to the 'simple' test above. + * The only difference is that we call .setHarsh(true) on each Vibrato object. + */ +function harsh(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial'; + const stave = new _src_index__WEBPACK_IMPORTED_MODULE_1__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato().setHarsh(true), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'h', + }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato().setHarsh(true), 0), + ]; + _src_index__WEBPACK_IMPORTED_MODULE_1__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Harsh Vibrato'); +} +function withBend(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.3, 1.3); + ctx.setFont(_src_index__WEBPACK_IMPORTED_MODULE_1__.Font.SANS_SERIF, _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size); + const stave = new _src_index__WEBPACK_IMPORTED_MODULE_1__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 9 }, + { str: 3, fret: 9 }, + ], + duration: 'q', + }) + .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Bend('1/2', true), 0) + .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Bend('1/2', true), 1) + .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato(), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'q', + }) + .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Bend('Full', false), 0) + .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato().setVibratoWidth(60), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'h', + }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato().setVibratoWidth(120).setHarsh(true), 0), + ]; + _src_index__WEBPACK_IMPORTED_MODULE_1__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Vibrato with Bend'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(VibratoTests); + + + +/***/ }), + +/***/ "./tests/vibratobracket_tests.ts": +/*!***************************************!*\ + !*** ./tests/vibratobracket_tests.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "VibratoBracketTests": () => (/* binding */ VibratoBracketTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// Author: Balazs Forian-Szabo +// +// VibratoBracket Tests +// TODO: It's annoying to have to cast "as Note" or "as Note[]". Could we add a method to Voice to get the tickables as Note[]? Voice.getTickables() vs Voice.getNotes()? + +const VibratoBracketTests = { + Start() { + QUnit.module('VibratoBracket'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple VibratoBracket', simple); + run('Harsh VibratoBracket Without End Note', withoutEndNote); + run('Harsh VibratoBracket Without Start Note', withoutStartNote); + }, +}; +// Helper function to set up the stave, easyscore, voice, and to format & draw. +function createTest(noteGroup, setupVibratoBracket) { + return (options) => { + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 650, 200); + const stave = factory.Stave(); + const score = factory.EasyScore(); + const voice = score.voice(score.notes(noteGroup)); + setupVibratoBracket(factory, voice.getTickables()); + factory.Formatter().joinVoices([voice]).formatToStave([voice], stave); + factory.draw(); + options.assert.ok(true); + }; +} +const simple = createTest('c4/4, c4, c4, c4', (factory, notes) => { + factory.VibratoBracket({ + from: notes[0], + to: notes[3], + options: { line: 2 }, + }); +}); +const withoutEndNote = createTest('c4/4, c4, c4, c4', (factory, notes) => { + factory.VibratoBracket({ + from: notes[2], + to: null, + options: { line: 2, harsh: true }, + }); +}); +const withoutStartNote = createTest('c4/4, c4, c4, c4', (factory, notes) => { + factory.VibratoBracket({ + from: null, + to: notes[2], + options: { line: 2, harsh: true }, + }); +}); +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(VibratoBracketTests); + + + +/***/ }), + +/***/ "./tests/voice_tests.ts": +/*!******************************!*\ + !*** ./tests/voice_tests.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "VoiceTests": () => (/* binding */ VoiceTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +/* harmony import */ var _mocks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./mocks */ "./tests/mocks.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Voice Tests + + + + + + + + +const VoiceTests = { + Start() { + QUnit.module('Voice'); + QUnit.test('Strict Test', strict); + QUnit.test('Ignore Test', ignore); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests('Full Voice Mode Test', full); + }, +}; +const BEAT = (1 * _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.RESOLUTION) / 4; +// Helper function to create a tickable with a preset number of ticks. +const createTickable = () => new _mocks__WEBPACK_IMPORTED_MODULE_7__.MockTickable().setTicks(BEAT); +function strict(assert) { + assert.expect(8); + const tickables = [createTickable(), createTickable(), createTickable()]; + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_6__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4); + assert.equal(voice.getTotalTicks().value(), BEAT * 4, '4/4 Voice has 4 beats'); + assert.equal(voice.getTicksUsed().value(), BEAT * 0, 'No beats in voice'); + voice.addTickables(tickables); + assert.equal(voice.getTicksUsed().value(), BEAT * 3, 'Three beats in voice'); + voice.addTickable(createTickable()); + assert.equal(voice.getTicksUsed().value(), BEAT * 4, 'Four beats in voice'); + assert.equal(voice.isComplete(), true, 'Voice is complete'); + const numeratorBeforeException = voice.getTicksUsed().numerator; + assert.throws(() => voice.addTickable(createTickable()), /BadArgument/, '"Too many ticks" exception'); + // Verify that adding too many ticks does not affect the `ticksUsed` property of the voice. + // See voice.ts: this.ticksUsed.subtract(ticks); + assert.equal(voice.getTicksUsed().numerator, numeratorBeforeException, 'Revert `ticksUsed` after a "Too many ticks" exception'); + assert.equal(voice.getSmallestTickCount().value(), BEAT, 'Smallest tick count is BEAT'); +} +function ignore(assert) { + const tickables = [ + createTickable(), + createTickable(), + createTickable().setIgnoreTicks(true), + createTickable(), + createTickable().setIgnoreTicks(true), + createTickable(), + ]; + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_6__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4); + voice.addTickables(tickables); + assert.ok(true, 'all pass'); +} +function full(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 550, 200); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 50, 500).addClef('treble').addTimeSignature('4/4').setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.Barline.type.END); + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['c/4'], duration: '4' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['d/4'], duration: '4' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['r/4'], duration: '4r' }), + ]; + notes.forEach((note) => note.setStave(stave)); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_6__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_6__.Voice.Mode.FULL).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + stave.setContext(ctx).draw(); + voice.draw(ctx); + const bb = voice.getBoundingBox(); + if (bb) { + ctx.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH()); + } + ctx.stroke(); + options.assert.throws(() => voice.addTickable(new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['c/4'], duration: '2' })), /BadArgument/, 'Voice cannot exceed full amount of ticks'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(VoiceTests); + + + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +(() => { +/*!*******************************************!*\ + !*** ./entry/vexflow-debug-with-tests.ts ***! + \*******************************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Accidental": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Accidental), +/* harmony export */ "AccidentalTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.AccidentalTests), +/* harmony export */ "Annotation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Annotation), +/* harmony export */ "AnnotationHorizontalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.AnnotationHorizontalJustify), +/* harmony export */ "AnnotationTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.AnnotationTests), +/* harmony export */ "AnnotationVerticalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.AnnotationVerticalJustify), +/* harmony export */ "Articulation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Articulation), +/* harmony export */ "ArticulationTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ArticulationTests), +/* harmony export */ "AutoBeamFormattingTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.AutoBeamFormattingTests), +/* harmony export */ "BEAM_BOTH": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BEAM_BOTH), +/* harmony export */ "BEAM_LEFT": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BEAM_LEFT), +/* harmony export */ "BEAM_RIGHT": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BEAM_RIGHT), +/* harmony export */ "BachDemoTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.BachDemoTests), +/* harmony export */ "BarNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BarNote), +/* harmony export */ "Barline": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Barline), +/* harmony export */ "BarlineTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.BarlineTests), +/* harmony export */ "BarlineType": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BarlineType), +/* harmony export */ "Beam": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Beam), +/* harmony export */ "BeamTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.BeamTests), +/* harmony export */ "Bend": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Bend), +/* harmony export */ "BendTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.BendTests), +/* harmony export */ "BoundingBox": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BoundingBox), +/* harmony export */ "BoundingBoxComputation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BoundingBoxComputation), +/* harmony export */ "BoundingBoxTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxTests), +/* harmony export */ "Builder": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Builder), +/* harmony export */ "CanvasContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.CanvasContext), +/* harmony export */ "Category": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Category), +/* harmony export */ "ChordSymbol": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.ChordSymbol), +/* harmony export */ "ChordSymbolHorizontalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.ChordSymbolHorizontalJustify), +/* harmony export */ "ChordSymbolTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ChordSymbolTests), +/* harmony export */ "ChordSymbolVerticalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.ChordSymbolVerticalJustify), +/* harmony export */ "Clef": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Clef), +/* harmony export */ "ClefKeySignatureTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ClefKeySignatureTests), +/* harmony export */ "ClefNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.ClefNote), +/* harmony export */ "ClefTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ClefTests), +/* harmony export */ "Crescendo": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Crescendo), +/* harmony export */ "CrossBeamTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.CrossBeamTests), +/* harmony export */ "Curve": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Curve), +/* harmony export */ "CurvePosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.CurvePosition), +/* harmony export */ "CurveTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.CurveTests), +/* harmony export */ "Dot": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Dot), +/* harmony export */ "DotTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.DotTests), +/* harmony export */ "EasyScore": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.EasyScore), +/* harmony export */ "EasyScoreGrammar": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.EasyScoreGrammar), +/* harmony export */ "EasyScoreTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.EasyScoreTests), +/* harmony export */ "Element": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Element), +/* harmony export */ "Factory": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Factory), +/* harmony export */ "FactoryTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.FactoryTests), +/* harmony export */ "Flow": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Flow), +/* harmony export */ "Font": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Font), +/* harmony export */ "FontStyle": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.FontStyle), +/* harmony export */ "FontTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.FontTests), +/* harmony export */ "FontWeight": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.FontWeight), +/* harmony export */ "Formatter": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Formatter), +/* harmony export */ "FormatterTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.FormatterTests), +/* harmony export */ "Fraction": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Fraction), +/* harmony export */ "FractionTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.FractionTests), +/* harmony export */ "FretHandFinger": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.FretHandFinger), +/* harmony export */ "GhostNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.GhostNote), +/* harmony export */ "GhostNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.GhostNoteTests), +/* harmony export */ "Glyph": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Glyph), +/* harmony export */ "GlyphNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.GlyphNote), +/* harmony export */ "GlyphNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.GlyphNoteTests), +/* harmony export */ "GraceNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.GraceNote), +/* harmony export */ "GraceNoteGroup": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.GraceNoteGroup), +/* harmony export */ "GraceNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.GraceNoteTests), +/* harmony export */ "GraceTabNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.GraceTabNote), +/* harmony export */ "GraceTabNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.GraceTabNoteTests), +/* harmony export */ "KeyManager": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.KeyManager), +/* harmony export */ "KeyManagerTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.KeyManagerTests), +/* harmony export */ "KeySigNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.KeySigNote), +/* harmony export */ "KeySignature": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.KeySignature), +/* harmony export */ "KeySignatureTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.KeySignatureTests), +/* harmony export */ "Modifier": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Modifier), +/* harmony export */ "ModifierContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.ModifierContext), +/* harmony export */ "ModifierContextTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ModifierContextTests), +/* harmony export */ "ModifierPosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.ModifierPosition), +/* harmony export */ "MultiMeasureRest": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.MultiMeasureRest), +/* harmony export */ "MultiMeasureRestTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.MultiMeasureRestTests), +/* harmony export */ "Music": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Music), +/* harmony export */ "MusicTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.MusicTests), +/* harmony export */ "Note": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Note), +/* harmony export */ "NoteHead": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.NoteHead), +/* harmony export */ "NoteHeadTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.NoteHeadTests), +/* harmony export */ "NoteSubGroup": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.NoteSubGroup), +/* harmony export */ "NoteSubGroupTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.NoteSubGroupTests), +/* harmony export */ "OffscreenCanvasTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.OffscreenCanvasTests), +/* harmony export */ "Ornament": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Ornament), +/* harmony export */ "OrnamentTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.OrnamentTests), +/* harmony export */ "OutlineCode": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.OutlineCode), +/* harmony export */ "Parenthesis": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Parenthesis), +/* harmony export */ "Parser": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Parser), +/* harmony export */ "ParserTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ParserTests), +/* harmony export */ "PedalMarking": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.PedalMarking), +/* harmony export */ "PedalMarkingTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.PedalMarkingTests), +/* harmony export */ "PercussionTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.PercussionTests), +/* harmony export */ "Piece": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Piece), +/* harmony export */ "Registry": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Registry), +/* harmony export */ "RegistryTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.RegistryTests), +/* harmony export */ "RenderContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.RenderContext), +/* harmony export */ "Renderer": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer), +/* harmony export */ "RendererBackends": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.RendererBackends), +/* harmony export */ "RendererLineEndType": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.RendererLineEndType), +/* harmony export */ "RendererTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.RendererTests), +/* harmony export */ "RepeatNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.RepeatNote), +/* harmony export */ "Repetition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Repetition), +/* harmony export */ "RestsTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.RestsTests), +/* harmony export */ "RhythmTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.RhythmTests), +/* harmony export */ "RuntimeError": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.RuntimeError), +/* harmony export */ "SVGContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.SVGContext), +/* harmony export */ "Stave": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Stave), +/* harmony export */ "StaveConnector": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveConnector), +/* harmony export */ "StaveConnectorTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveConnectorTests), +/* harmony export */ "StaveHairpin": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveHairpin), +/* harmony export */ "StaveHairpinTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveHairpinTests), +/* harmony export */ "StaveLine": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveLine), +/* harmony export */ "StaveLineTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveLineTests), +/* harmony export */ "StaveModifier": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveModifier), +/* harmony export */ "StaveModifierPosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveModifierPosition), +/* harmony export */ "StaveModifierTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveModifierTests), +/* harmony export */ "StaveNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveNote), +/* harmony export */ "StaveNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveNoteTests), +/* harmony export */ "StaveSection": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveSection), +/* harmony export */ "StaveTempo": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveTempo), +/* harmony export */ "StaveTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveTests), +/* harmony export */ "StaveText": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveText), +/* harmony export */ "StaveTie": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveTie), +/* harmony export */ "StaveTieTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveTieTests), +/* harmony export */ "Stem": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Stem), +/* harmony export */ "StemmableNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StemmableNote), +/* harmony export */ "StringNumber": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StringNumber), +/* harmony export */ "StringNumberTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StringNumberTests), +/* harmony export */ "Stroke": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Stroke), +/* harmony export */ "StrokesTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StrokesTests), +/* harmony export */ "StyleTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StyleTests), +/* harmony export */ "SymbolModifiers": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.SymbolModifiers), +/* harmony export */ "SymbolTypes": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.SymbolTypes), +/* harmony export */ "System": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.System), +/* harmony export */ "TabNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TabNote), +/* harmony export */ "TabNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TabNoteTests), +/* harmony export */ "TabSlide": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TabSlide), +/* harmony export */ "TabSlideTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TabSlideTests), +/* harmony export */ "TabStave": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TabStave), +/* harmony export */ "TabStaveTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TabStaveTests), +/* harmony export */ "TabTie": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TabTie), +/* harmony export */ "TabTieTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TabTieTests), +/* harmony export */ "TextBracket": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TextBracket), +/* harmony export */ "TextBracketPosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TextBracketPosition), +/* harmony export */ "TextBracketTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TextBracketTests), +/* harmony export */ "TextDynamics": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TextDynamics), +/* harmony export */ "TextFormatter": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TextFormatter), +/* harmony export */ "TextFormatterTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TextFormatterTests), +/* harmony export */ "TextJustification": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TextJustification), +/* harmony export */ "TextNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TextNote), +/* harmony export */ "TextNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TextNoteTests), +/* harmony export */ "ThreeVoicesTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ThreeVoicesTests), +/* harmony export */ "TickContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TickContext), +/* harmony export */ "TickContextTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TickContextTests), +/* harmony export */ "Tickable": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Tickable), +/* harmony export */ "TimeSigNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TimeSigNote), +/* harmony export */ "TimeSignature": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TimeSignature), +/* harmony export */ "TimeSignatureGlyph": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TimeSignatureGlyph), +/* harmony export */ "TimeSignatureTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TimeSignatureTests), +/* harmony export */ "Tremolo": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Tremolo), +/* harmony export */ "TremoloTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TremoloTests), +/* harmony export */ "Tuning": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Tuning), +/* harmony export */ "TuningTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TuningTests), +/* harmony export */ "Tuplet": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Tuplet), +/* harmony export */ "TupletLocation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TupletLocation), +/* harmony export */ "TupletTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TupletTests), +/* harmony export */ "TypeGuardTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TypeGuardTests), +/* harmony export */ "UnisonTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.UnisonTests), +/* harmony export */ "VFPrefixTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.VFPrefixTests), +/* harmony export */ "Vex": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Vex), +/* harmony export */ "Vibrato": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Vibrato), +/* harmony export */ "VibratoBracket": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.VibratoBracket), +/* harmony export */ "VibratoBracketTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.VibratoBracketTests), +/* harmony export */ "VibratoTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.VibratoTests), +/* harmony export */ "Voice": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Voice), +/* harmony export */ "VoiceMode": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.VoiceMode), +/* harmony export */ "VoiceTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.VoiceTests), +/* harmony export */ "Volta": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Volta), +/* harmony export */ "VoltaType": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.VoltaType), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), +/* harmony export */ "defined": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.defined), +/* harmony export */ "drawDot": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.drawDot), +/* harmony export */ "globalObject": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.globalObject), +/* harmony export */ "isAccidental": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isAccidental), +/* harmony export */ "isAnnotation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isAnnotation), +/* harmony export */ "isBarline": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isBarline), +/* harmony export */ "isCategory": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isCategory), +/* harmony export */ "isDot": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isDot), +/* harmony export */ "isGraceNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isGraceNote), +/* harmony export */ "isGraceNoteGroup": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isGraceNoteGroup), +/* harmony export */ "isHTMLCanvas": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isHTMLCanvas), +/* harmony export */ "isHTMLDiv": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isHTMLDiv), +/* harmony export */ "isNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isNote), +/* harmony export */ "isRenderContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isRenderContext), +/* harmony export */ "isStaveNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isStaveNote), +/* harmony export */ "isStemmableNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isStemmableNote), +/* harmony export */ "isTabNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isTabNote), +/* harmony export */ "log": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.log), +/* harmony export */ "midLine": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.midLine), +/* harmony export */ "normalizeAngle": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.normalizeAngle), +/* harmony export */ "prefix": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.prefix), +/* harmony export */ "sumArray": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.sumArray), +/* harmony export */ "warn": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.warn) +/* harmony export */ }); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +/* harmony import */ var _tests_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../tests/index */ "./tests/index.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_fonts_load_all__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/fonts/load_all */ "./src/fonts/load_all.ts"); +/* harmony import */ var _src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/fonts/textfonts */ "./src/fonts/textfonts.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// vexflow-debug-with-tests.ts is the entry point for the build output file vexflow-debug-with-tests.js. +// It statically bundles all the music engraving fonts, and also includes the tests from vexflow/tests/. +// The output file is used by flow.html & flow-headless-browser.html to run the tests. + + + + + +(0,_src_fonts_load_all__WEBPACK_IMPORTED_MODULE_3__.loadAllMusicFonts)(); +_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.setMusicFont('Bravura', 'Gonville', 'Custom'); +(0,_src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_4__.loadTextFonts)(); +// Re-export all exports from src/index.ts and tests/index.ts. + + +// Also collect all exports into a default export for CJS projects. +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Object.assign(Object.assign({}, _src_index__WEBPACK_IMPORTED_MODULE_0__), _tests_index__WEBPACK_IMPORTED_MODULE_1__)); + +})(); + +__webpack_exports__ = __webpack_exports__["default"]; +/******/ return __webpack_exports__; +/******/ })() +; +}); +//# sourceMappingURL=vexflow-debug-with-tests.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-debug-with-tests.js.map b/build/cjs/vexflow-debug-with-tests.js.map new file mode 100644 index 0000000000..8b33a7ecd8 --- /dev/null +++ b/build/cjs/vexflow-debug-with-tests.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vexflow-debug-with-tests.js","mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;;;;;;;;;ACVO;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACFP;AACA;AACA;AACA;AACsC;AACN;AACM;AACN;AACE;AAC+D;AAC3D;AACtC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,+CAAQ;AACjC;AACA;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA,oFAAoF;AACpF;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iDAAiD;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAA6C;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,gEAAgE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D,6BAA6B,kEAA6B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,+CAAQ;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,0BAA0B,yCAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,wDAAY;AACxC;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,wBAAwB,4DAAgB;AACxC;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA,wBAAwB,+DAA0B;AAClD;AACA;AACA;AACA;AACA,0BAA0B,2DAAsB;AAChD,QAAQ,8CAAO,+DAA+D,KAAK;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B;AACA;AACA,iCAAiC,yCAAK,CAAC,2DAAsB,GAAG;AAChE,kCAAkC,yCAAK,CAAC,2DAAsB,GAAG;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8CAAO;AACrC,+BAA+B,8CAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8CAAO,2CAA2C,KAAK;AAC/D;AACA;AACA,YAAY,uDAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8EAA8E,qCAAqC,IAAI;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8CAAO;AACrC,+BAA+B,8CAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsB;;;;;;;;;;;;;;;;;;;;;;;;AC/etB;AACA;AACoC;AACoB;AAC1B;AACI;AACc;AACmB;AACtC;AAC7B;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,kEAAkE;AAC5D;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,8DAA8D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,+CAAQ;AACjC;AACA;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA,kCAAkC,gEAAoB;AACtD;AACA,8FAA8F,+DAA0B;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,0CAAO;AACpF;AACA;AACA,gBAAgB,qDAAS;AACzB;AACA;AACA;AACA,kEAAkE,+DAA0B;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,2DAAe;AACpC;AACA;AACA,8DAA8D,+DAA0B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qDAAS;AAC7B;AACA;AACA,sCAAsC,0CAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qDAAS;AAC7B;AACA;AACA,sCAAsC,4CAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAgB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,0CAAO;AAChF,8BAA8B,gEAAoB;AAClD,8CAA8C,6DAAsB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,+DAA0B;AAClE,8CAA8C,4CAAS;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,+DAA0B;AACxE,8CAA8C,0CAAO;AACrD;AACA;AACA,mEAAmE,+DAA0B;AAC7F;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,EAAE,uDAAiB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsB;;;;;;;;;;;;;;;;;;;;;AC5RtB;AACA;AACA;AACgC;AACM;AACR;AACI;AAC2D;AACzC;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA,QAAQ,eAAe,EAAE,wDAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uDAAW,UAAU,uDAAW;AACrE;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,qDAAS;AACtB;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,qDAAS;AACtB;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,0CAAO;AAClF,2DAA2D,4CAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,+CAAQ;AACnC;AACA;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uHAAuH,8CAAO;AAC9H;AACA;AACA;AACA;AACA,6EAA6E,0CAAO;AACpF;AACA;AACA,gBAAgB,2DAAe;AAC/B;AACA;AACA,8DAA8D,+DAA0B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0CAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,4CAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,iCAAiC,8DAAuB;AACxD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAA0B;AAClD;AACA;AACA;AACA;AACA,4BAA4B,6DAAwB;AACpD;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B,QAAQ,8CAAO,yDAAyD,UAAU;AAClF,sBAAsB,8CAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA,gBAAgB,IAAI;AACpB;AACA;AACA,wBAAwB,4DAAuB,gCAAgC,gBAAgB;AAC/F;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,EAAE,OAAO,EAAE;AACtD;AACA;AACA;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;;;;ACnVxB;AACA;AAC8B;AACwB;AACf;AACV;AAC7B;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uCAAI;AAC1B;AACA,eAAe,wDAAgB;AAC/B;AACA,uBAAuB,6DAAkB;AACzC,gBAAgB,eAAe;AAC/B;AACA,sBAAsB;AACtB;AACA,qBAAqB,sDAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kDAAO;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,6DAAkB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACmB;;;;;;;;;;;;;;;;;;;;;;;;;AChFnB;AACA;AACoC;AACE;AACR;AACI;AACQ;AACqB;AACzB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA,eAAe,4CAAS;AACxB;AACA,WAAW,0CAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACO,mBAAmB,6CAAO;AACjC;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA;AACA,6CAA6C,+CAAQ;AACrD;AACA,oBAAoB,+CAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,wBAAwB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA,iCAAiC,+CAAQ;AACzC;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA,0CAA0C,sDAAiB;AAC3D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0FAA0F,+CAAQ;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,+CAAQ;AACrD;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,mCAAmC,4DAAuB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,iDAAiD,+CAAQ;AACzD;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,2DAAsB;AAC9E;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,0CAAO;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,2DAAsB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,iEAAiE,4CAAS,GAAG,0DAAqB,GAAG,uDAAkB;AACvH;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,0BAA0B,2DAAsB;AAChD,sBAAsB,+CAAY;AAClC;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,yBAAyB,uDAAW;AACpC;AACA;AACA,8BAA8B,qDAAS;AACvC;AACA;AACA,gDAAgD,0CAAO,GAAG,4CAAS;AACnE;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wDAAwD,oDAAoD,IAAI;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yCAAyC,oDAAoD,IAAI;AACjH;AACA;AACA;AACA,0BAA0B;AAC1B,kCAAkC;AAClC;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4CAAS;AAC5C;AACA;AACA;AACA;AACA,wCAAwC,0CAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,4CAAS;AACxC;AACA;AACA,oCAAoC,0CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,4CAAS;AAC7C;AACA;AACA,oCAAoC,0CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAqD,8CAA8C,IAAI;AACvH;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA,kEAAkE,0CAAO;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4DAAuB,eAAe;AACzE,gDAAgD,2DAAsB;AACtE,gDAAgD,2DAAsB;AACtE,sCAAsC,2DAAsB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,2DAAsB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,6CAAU;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+CAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACvzBA;AACA;AACoC;AACE;AACU;AACE;AACZ;AACtC;AACA,mBAAmB,+CAAQ;AAC3B;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA,gBAAgB,qDAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gCAAgC;AAC7D;AACA,mCAAmC,2BAA2B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,+DAAwB;AAC7E;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,EAAE,uDAAiB;AACpC;;;;;;;;;;;;;;;ACxPhB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC/HA;AACA;AAC8B;AACkB;AACJ;AACP;AACrC;AACA;AACA;AACA;AACO,4BAA4B,yDAAa;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2CAAI;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wGAAwG,mDAAY;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gDAAa;AACtC,8BAA8B,mDAAgB;AAC9C,0BAA0B,+DAA4B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACrPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACqD;AACrB;AACM;AACJ;AACc;AACQ;AACb;AAC3C;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,oEAAoE;AAC9D;AACP;AACA;AACA;AACA,CAAC,gEAAgE;AAC1D;AACP;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AAC5B;AACP;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA,0BAA0B,+CAAQ;AAClC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,4DAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4DAAuB;AACnD;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+DAA4B;AACzD,4BAA4B,iDAAc;AAC1C;AACA;AACA;AACA;AACA;AACA,4BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,2DAAe;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4DAAuB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oDAAiB;AACrC,mBAAmB,mDAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,mBAAmB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;AACA;AACA,sCAAsC,qCAAqC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8BAA8B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,yCAAK,gCAAgC,yBAAyB;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,iEAAiE,iBAAiB,kBAAkB;AACpG;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAmC;AACxE;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gEAAoB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mEAA8B;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,8BAA8B;AAC9D,gDAAgD,iDAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACuB;;;;;;;;;;;;;;;;;;;;ACnsBvB;AACA;AACA;AACgC;AACuC;AACrC;AACK;AACD;AACtC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yDAAa;AAChC;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD;AACA,sBAAsB,kDAAc,mDAAmD,UAAU;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA,wDAAwD,UAAU,eAAe,WAAW,GAAG,UAAU;AACzG,2DAA2D,UAAU,eAAe,WAAW,GAAG,UAAU;AAC5G,gCAAgC;AAChC,kCAAkC,yCAAK;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8CAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,+DAA0B,IAAI,+DAA0B;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAiB;AACzB,8BAA8B,UAAU;AACxC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgB;;;;;;;;;;;;;;;;;;;ACnKhB;AACA;AACA;AAC8B;AACE;AACF;AACS;AACvC;AACO,uBAAuB,uCAAI;AAClC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;AACA,sBAAsB,kDAAc,iBAAiB,gDAAa,yBAAyB,UAAU;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA,sBAAsB,kDAAc,iBAAiB,gDAAa,yBAAyB,UAAU;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAiB,gDAAgD,gDAAa;AACtF,kCAAkC,UAAU;AAC5C,SAAS;AACT;AACA;AACA,mCAAmC,yCAAK;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACc;AACL;AACV;AAC7B;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uCAAI;AAC5B;AACA;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,oEAA0B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACqB;;;;;;;;;;;;;;;;;;;ACrGrB;AACA;AACA;AACA;AACoC;AACG;AACD;AAC/B;AACP;AACA;AACA;AACA,CAAC,sCAAsC;AAChC,oBAAoB,6CAAO;AAClC;AACA,eAAe,sDAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;;;;;;;;ACnIA;AACA;AACA;AACA;AACsC;AACsC;AACtC;AAC/B,kBAAkB,+CAAQ;AACjC;AACA,eAAe,oDAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B;AACA;AACA;AACA;AACA;AACA,qBAAqB,qDAAS;AAC9B,0BAA0B,aAAa;AACvC;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA,4BAA4B,sCAAsC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C,oBAAoB,2BAA2B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC1JA;AACA;AAC8C;AAClB;AACsB;AAClB;AACE;AACJ;AACsB;AACpD;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA,sDAAsD;AACtD;AACA;AACA,qBAAqB,8CAAO;AAC5B;AACA,qBAAqB,8CAAO;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA,iFAAiF,UAAU,WAAW,EAAE;AACxG;AACA,oCAAoC,qDAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,2CAA2C;AAC3C;AACA;AACA,kCAAkC,gBAAgB;AAClD,kCAAkC,6CAA6C;AAC/E;AACA,kDAAkD,0CAAO,GAAG,4CAAS;AACrE;AACA;AACA;AACA;AACA;AACA,wDAAwD,aAAa;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,wBAAwB,UAAU;AAClC,YAAY,oDAAkB,WAAW,WAAW;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,qDAAqD,+BAA+B,qEAA0B,EAAE,yEAA4B,wBAAwB,cAAc;AAClL,qBAAqB;AACrB;AACA;AACA;AACA,0BAA0B,2CAAM;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;AACA;AACA,4BAA4B;AAC5B,kCAAkC,oDAAoD;AACtF;AACA;AACA;AACA,6BAA6B;AAC7B,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACqB;;;;;;;;;;;;;;;;;;;ACjarB;AACA;AACA;AACqD;AACf;AACC;AACE;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA,sBAAsB,aAAa;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kEAA2B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,UAAU;AAC5C;AACA,kCAAkC,kBAAkB,EAAE,UAAU;AAChE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6CAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,kCAAkC;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,4BAA4B,qDAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gDAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA,eAAe,+DAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B,UAAU,4CAAS;AACnB,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrYnB;AACA;AACA;AAC0C;AACwD;AACpD;AACV;AACN;AACc;AACN;AACN;AACQ;AACJ;AACI;AACU;AACV;AACA;AACA;AACU;AACR;AACU;AACE;AACR;AACR;AACQ;AACR;AACI;AACV;AACkB;AACV;AACA;AACF;AACQ;AACZ;AACE;AACE;AACM;AACE;AACR;AACM;AACA;AACV;AACkB;AACF;AAClB;AACK;AACrC;AACA;AACA;AACA,QAAQ,2CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA,6BAA6B,YAAY,4BAA4B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,YAAY,6CAA6C,EAAE;AAC7G;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mDAAY;AAC5B,0BAA0B,gEAAwB;AAClD;AACA;AACA,0BAA0B,6DAAqB;AAC/C;AACA;AACA,uBAAuB,6DAAqB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J,0BAA0B,0CAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J,0BAA0B,gDAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oDAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,4BAA4B,6CAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,eAAe;AACf,6BAA6B,+CAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C,gCAAgC,sDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,oDAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAc;AACxC;AACA;AACA;AACA;AACA,0BAA0B,mDAAU;AACpC;AACA;AACA;AACA;AACA,kCAAkC,qBAAqB,2EAAkC,YAAY,yEAAgC,EAAE;AACvI,+BAA+B,mDAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uEAAuE;AACzG,gCAAgC,qDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mCAAmC;AAC3E,6BAA6B,gDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4CAA4C;AAC9E,yBAAyB,wDAAY;AACrC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+BAA+B;AACjE,8BAA8B,4DAAc;AAC5C;AACA;AACA;AACA;AACA;AACA,iCAAiC,wDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sDAAW;AAC9B;AACA;AACA,mBAAmB,8DAAe;AAClC;AACA;AACA,4BAA4B,+CAAO;AACnC,qCAAqC,gEAAgB;AACrD;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C,0BAA0B,0CAAK;AAC/B;AACA;AACA;AACA;AACA,8BAA8B,4DAAc;AAC5C;AACA;AACA;AACA;AACA;AACA,mBAAmB,kDAAS;AAC5B;AACA;AACA,kCAAkC,wBAAwB;AAC1D,2BAA2B,4CAAM;AACjC;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,0BAA0B,yCAAK;AAC/B;AACA;AACA;AACA;AACA;AACA,wBAAwB,gDAAQ;AAChC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4DAAc;AACjD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,2BAA2B,4CAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,YAAY,6CAA6C;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,mBAAmB,iDAAS;AAC5B;AACA;AACA,kCAAkC;AAClC;AACA,eAAe;AACf,0BAA0B,wDAAY;AACtC,sBAAsB,mEAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA,kCAAkC,WAAW;AAC7C,0BAA0B,wDAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,EAAE,uDAAiB;AACpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9fnB,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AAC0C;AACwD;AACpD;AACV;AACN;AACA;AACc;AACsB;AAClB;AACqF;AACvG;AACQ;AACE;AACO;AACnB;AACY;AACJ;AACA;AACiB;AACb;AACF;AACY;AACV;AACR;AACQ;AACA;AACU;AACJ;AACJ;AACI;AACJ;AACc;AACJ;AACE;AACtB;AACF;AACQ;AACQ;AACR;AACM;AACV;AACY;AACR;AACU;AAC6B;AACnC;AACV;AACsB;AACJ;AACJ;AACN;AAC+B;AAC/B;AACO;AACL;AACF;AACF;AACU;AAClB;AACgB;AACX;AACO;AACR;AACA;AACE;AACE;AACA;AACJ;AAC+B;AACnB;AACE;AACS;AACb;AACI;AACJ;AACR;AACF;AACA;AACY;AACV;AACc;AACP;AAC3C;AACA;AACA;AACA;AACA,qBAAqB,8CAAO;AAC5B;AACA,gBAAgB,yCAAE;AAClB;AACA,kBAAkB,2CAAI;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,6CAAS;AAC3D,QAAQ,6DAAuB;AAC/B,QAAQ,2DAAsB;AAC9B,QAAQ,4DAAuB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,sBAAsB,6DAAuB;AAC7C;AACA;AACA;AACA,eAAe,6DAAuB;AACtC;AACA;AACA,eAAe,oEAA8B;AAC7C;AACA;AACA,QAAQ,oEAA8B;AACtC;AACA;AACA,eAAe,2DAAqB;AACpC;AACA;AACA,QAAQ,2DAAqB;AAC7B;AACA;AACA,eAAe,gEAA0B;AACzC;AACA;AACA,QAAQ,gEAA0B;AAClC;AACA;AACA,eAAe,iEAA2B;AAC1C;AACA;AACA,QAAQ,iEAA2B;AACnC;AACA;AACA,eAAe,uDAAiB;AAChC;AACA;AACA,QAAQ,uDAAiB;AACzB;AACA;AACA,eAAe,iEAA2B;AAC1C;AACA;AACA,QAAQ,iEAA2B;AACnC;AACA;AACA,eAAe,gEAA0B;AACzC;AACA;AACA,QAAQ,gEAA0B;AAClC;AACA;AACA,eAAe,iEAA2B;AAC1C;AACA;AACA,QAAQ,iEAA2B;AACnC;AACA;AACA,eAAe,wDAAkB;AACjC;AACA;AACA,QAAQ,wDAAkB;AAC1B;AACA;AACA,eAAe,uDAAiB;AAChC;AACA;AACA,QAAQ,uDAAiB;AACzB;AACA;AACA,eAAe,oDAAc;AAC7B;AACA;AACA,eAAe,0DAAoB;AACnC;AACA;AACA,eAAe,oDAAc;AAC7B;AACA;AACA,eAAe,yDAAmB;AAClC;AACA;AACA,eAAe,4DAAsB;AACrC;AACA;AACA,eAAe,6DAAuB;AACtC;AACA;AACA,eAAe,2DAAqB;AACpC;AACA;AACA;AACA,eAAe,0DAAoB;AACnC;AACA;AACA,eAAe,4DAAsB;AACrC;AACA;AACA,kBAAkB,mDAAU;AAC5B,kBAAkB,mDAAU;AAC5B,oBAAoB,uDAAY;AAChC,eAAe,mDAAO;AACtB,eAAe,6CAAO;AACtB,YAAY,uCAAI;AAChB,YAAY,uCAAI;AAChB,mBAAmB,qDAAW;AAC9B,8BAA8B,2EAAsB;AACpD,qBAAqB,yDAAa;AAClC,mBAAmB,qDAAW;AAC9B,YAAY,wCAAI;AAChB,gBAAgB,gDAAQ;AACxB,iBAAiB,kDAAS;AAC1B,aAAa,0CAAK;AAClB,WAAW,sCAAG;AACd,iBAAiB,kDAAS;AAC1B,eAAe,8CAAO;AACtB,eAAe,8CAAO;AACtB,YAAY,wCAAI;AAChB,iBAAiB,kDAAS;AAC1B,gBAAgB,gDAAQ;AACxB,sBAAsB,4DAAc;AACpC,iBAAiB,kDAAS;AAC1B,aAAa,0CAAK;AAClB,iBAAiB,kDAAS;AAC1B,iBAAiB,kDAAS;AAC1B,sBAAsB,4DAAc;AACpC,oBAAoB,wDAAY;AAChC,kBAAkB,oDAAU;AAC5B,oBAAoB,wDAAY;AAChC,kBAAkB,oDAAU;AAC5B,gBAAgB,gDAAQ;AACxB,uBAAuB,8DAAe;AACtC,wBAAwB,gEAAgB;AACxC,aAAa,0CAAK;AAClB,YAAY,wCAAI;AAChB,gBAAgB,gDAAQ;AACxB,oBAAoB,wDAAY;AAChC,gBAAgB,gDAAQ;AACxB,mBAAmB,sDAAW;AAC9B,cAAc,4CAAM;AACpB,oBAAoB,wDAAY;AAChC,gBAAgB,gDAAQ;AACxB,qBAAqB,0DAAa;AAClC,gBAAgB,gDAAQ;AACxB,kBAAkB,oDAAU;AAC5B,kBAAkB,yDAAU;AAC5B,aAAa,0CAAK;AAClB,sBAAsB,4DAAc;AACpC,oBAAoB,wDAAY;AAChC,iBAAiB,kDAAS;AAC1B,qBAAqB,0DAAa;AAClC,iBAAiB,kDAAS;AAC1B,kBAAkB,oDAAU;AAC5B,iBAAiB,kDAAS;AAC1B,gBAAgB,gDAAQ;AACxB,YAAY,wCAAI;AAChB,oBAAoB,wDAAY;AAChC,cAAc,6CAAM;AACpB,kBAAkB,oDAAU;AAC5B,cAAc,4CAAM;AACpB,eAAe,8CAAO;AACtB,gBAAgB,gDAAQ;AACxB,gBAAgB,gDAAQ;AACxB,cAAc,4CAAM;AACpB,mBAAmB,sDAAW;AAC9B,oBAAoB,wDAAY;AAChC,qBAAqB,0DAAa;AAClC,gBAAgB,gDAAQ;AACxB,mBAAmB,sDAAW;AAC9B,qBAAqB,0DAAa;AAClC,mBAAmB,sDAAW;AAC9B,eAAe,8CAAO;AACtB,cAAc,4CAAM;AACpB,cAAc,4CAAM;AACpB,eAAe,8CAAO;AACtB,sBAAsB,4DAAc;AACpC,aAAa,0CAAK;AAClB,aAAa,+CAAK;AAClB;AACA;AACA,mCAAmC,oEAA2B;AAC9D,iCAAiC,kEAAyB;AAC1D,oCAAoC,sEAA4B;AAChE,kCAAkC,oEAA0B;AAC5D,mBAAmB,qDAAW;AAC9B,uBAAuB,yDAAe;AACtC,qBAAqB,kDAAa;AAClC,kBAAkB,8CAAU;AAC5B,iBAAiB,6CAAS;AAC1B,wBAAwB,wDAAgB;AACxC,wBAAwB,wDAAgB;AACxC,2BAA2B,2DAAmB;AAC9C,mBAAmB,uDAAW;AAC9B,6BAA6B,kEAAqB;AAClD,iBAAiB,mDAAS;AAC1B,2BAA2B,8DAAmB;AAC9C,yBAAyB,yDAAiB;AAC1C,iBAAiB,8CAAS;AACV;;;;;;;;;;;;;;;;;;ACtVhB,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACiC;AAC1B;AACP;AACA;AACA;AACA,CAAC,gCAAgC;AAC1B;AACP;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8CAA8C;AAC9D,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,sBAAsB,oBAAoB,EAAE,KAAK;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,QAAQ;AAC3D,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,0BAA0B,mBAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgB;;;;;;;;;;;;;;;AC/XT;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;ACt9GO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,wBAAwB;AACxB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,4BAA4B;AAC5B,0BAA0B;AAC1B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,+BAA+B;AAC/B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,4BAA4B;AAC5B,iCAAiC;AACjC;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,oBAAoB;AACpB;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;AC7YO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;ACzCO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC9lCO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACtqCA;AACA;AACA;AACA;AAC6C;AACF;AACI;AACJ;AACI;AAC/C;AACA,YAAY,UAAU;AACtB;AACO;AACP,IAAI,0DAAW;AACf,IAAI,4DAAY;AAChB,IAAI,4DAAY;AAChB,IAAI,wDAAU;AACd,IAAI,wDAAU;AACd;AACA;AACA;;;;;;;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC+B;AACgB;AACE;AAC1C;AACP,IAAI,4CAAS,YAAY,wDAAW,EAAE,0DAAa;AACnD;;;;;;;;;;;;;;;;;;ACfA;AACA;AAC+B;AACkB;AACJ;AACtC;AACP,IAAI,4CAAS,WAAW,sDAAU,EAAE,0DAAa;AACjD;;;;;;;;;;;;;;;;;;ACPA;AACA;AAC+B;AACkB;AACK;AAC/C;AACP,IAAI,4CAAS,aAAa,+DAAiB,EAAE,0DAAa;AAC1D;;;;;;;;;;;;;;;;;;ACPA;AACA;AAC+B;AACkB;AACJ;AACtC;AACP,IAAI,4CAAS,WAAW,sDAAU,EAAE,0DAAa;AACjD;;;;;;;;;;;;;;;;;;ACPA;AACA;AAC+B;AACkB;AACA;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACO;AACP,8CAA8C,0DAAa;AAC3D;AACA;AACA;AACA;AACA,IAAI,4CAAS,aAAa,0DAAY;AACtC;;;;;;;;;;;;;;;ACpFO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;ACtmDO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC91BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC91BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC71BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;ACr2BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACr2BA;AACA;AAC+B;AACkB;AACY;AACR;AACG;AACT;AACE;AAC1C;AACP;AACA;AACA,yBAAyB,iEAAY;AACrC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,wDAAQ;AACjC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,0DAAS;AAClC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,8DAAc;AACvC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,sEAAkB;AAC3C,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACxHA;AACA;AAC8B;AACA;AACQ;AACc;AACpB;AACkB;AAChB;AACU;AACM;AACqB;AACvC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+CAAQ;AACtC;AACA;AACA;AACA;AACA,iDAAiD,sBAAsB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,0BAA0B;AACtE;AACA,YAAY,kDAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sBAAsB,IAAI;AAClE;AACA,0CAA0C,6DAAe;AACzD,6BAA6B,qDAAW;AACxC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kCAAkC,cAAc,4DAAuB,kCAAkC;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAe;AACnC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8BAA8B,uCAAuC,SAAS,wCAAwC,OAAO,6BAA6B;AAC1J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD,+EAA+E,kBAAkB;AACjG;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA,0BAA0B,0CAAK,CAAC,mDAAc,UAAU,oDAAe;AACvE;AACA,0CAA0C,wDAAqB;AAC/D;AACA;AACA,wCAAwC,kCAAkC;AAC1E,6CAA6C,yCAAyC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAAK,CAAC,mDAAc,UAAU,oDAAe;AAC3E;AACA,6BAA6B,0CAAK,CAAC,mDAAc,UAAU,oDAAe;AAC1E;AACA,uCAAuC,wDAAqB;AAC5D;AACA;AACA,4CAA4C,+BAA+B;AAC3E;AACA,2DAA2D,+BAA+B;AAC1F;AACA;AACA;AACA;AACA;AACA,YAAY,2DAAc;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,gDAAgD,qCAAqC,0DAAqB,oBAAoB;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,4DAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,qBAAqB,+CAAQ;AAC7B;AACA;AACA,qBAAqB,+CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA,oCAAoC,sDAAiB;AACrD,0BAA0B,+CAAY;AACtC;AACA,yCAAyC,mDAAY;AACrD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+CAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA,2CAA2C,6DAAe;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,qDAAW;AACzE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,gBAAgB,8CAA8C;AAC9D;AACA,6BAA6B,+CAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,8CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yCAAyC;AAClF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAoB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,6BAA6B;AACrE;AACA,2EAA2E,wDAAoB;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACqB;;;;;;;;;;;;;;;;;ACp2BrB;AACA;AACA;AACA;AACA;AACuC;AACD;AACtC;AACA;AACA;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,oCAAoC,EAAE,IAAI,EAAE;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,eAAe,GAAG,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uBAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACpNA;AACA;AACA;AACA;AACqD;AACG;AACtB;AACc;AACT;AACD;AACtC,6BAA6B,+CAAQ;AACrC;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA,kCAAkC,gEAAoB;AACtD;AACA,iCAAiC,6DAAsB;AACvD,oDAAoD,+DAA0B;AAC9E;AACA,iCAAiC,6DAAsB;AACvD,gDAAgD,+DAA0B;AAC1E;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA,oBAAoB,uCAAuC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA,mDAAmD;AACnD;AACA;AACA,6BAA6B,8DAAuB;AACpD;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,aAAa,IAAI;AAC5C;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB,EAAE;AAChD;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,iBAAiB,6DAAsB;AACvC;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,0BAA0B,+CAAY,oCAAoC,eAAe;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AAC0B;;;;;;;;;;;;;;;;;;ACpK1B;AACA;AACA;AACgD;AACK;AACf;AACtC;AACO,wBAAwB,yDAAa;AAC5C;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA,gBAAgB,wDAAY;AAC5B;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC7DA;AACA;AAC4C;AACsB;AAC9B;AACF;AACK;AACQ;AACxC;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,KAAK,GAAG,SAAS;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mEAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAO;AAC3B;AACA;AACA;AACA,eAAe,sDAAc;AAC7B;AACA;AACA,uCAAuC,SAAS,EAAE,KAAK,EAAE,IAAI;AAC7D,wCAAwC,SAAS,EAAE,IAAI;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,SAAS,GAAG,KAAK,GAAG,IAAI;AACxE;AACA,sDAAsD,MAAM;AAC5D,gDAAgD,SAAS,GAAG,IAAI;AAChE;AACA;AACA;AACA;AACA,QAAQ,8CAAO;AACf;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA,yBAAyB;AACzB;AACA,kBAAkB,+CAAY,sBAAsB,MAAM;AAC1D;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA,sBAAsB,+CAAY,sBAAsB,MAAM;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2EAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qDAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qDAAW;AACnC;AACA;AACA,eAAe,8CAAO,oCAAoC,WAAW;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACiB;;;;;;;;;;;;;;;;;ACzYjB;AACA;AACA;AAC8B;AACS;AAChC,wBAAwB,uCAAI;AACnC;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA,uCAAuC,6BAA6B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC9DA;AACwC;AACV;AACI;AACK;AACD;AAC/B,wBAAwB,iDAAS;AACxC;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB,+DAA0B,6DAA6D;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAW,2BAA2B,8CAAW;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,+DAA0B;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,4CAAS;AACpD;AACA;AACA,gEAAgE,4CAAS;AACzE,qCAAqC,uDAAkB;AACvD;AACA;AACA;AACA,mDAAmD,0CAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC1IA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACU;AACF;AACE;AACF;AACJ;AACA;AACkB;AACvB;AACG;AAChC;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA,6BAA6B,+CAAQ;AACrC;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6BAA6B;AACrD;AACA;AACA,iCAAiC,uDAAW;AAC5C;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA,8BAA8B,yCAAyC;AACvE;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,0GAA0G,oEAA4B;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B;AACA;AACA,wBAAwB,sDAAiB;AACzC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iDAAS;AAC1C;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uCAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oEAA4B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uDAAW;AAC5C,4CAA4C,+CAAQ,GAAG,2CAAM;AAC7D;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AAC0B;;;;;;;;;;;;;;;;;;ACjJ1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACM;AACG;AAChC,2BAA2B,6CAAO;AACzC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA,2BAA2B,kDAAe,CAAC,GAAG;AAC9C;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3BA;AACA;AAC6B;AACA;AACE;AACL;AACH;AACA;AACO;AACW;AACT;AACF;AACP;AACI;AACC;AACJ;AACF;AACM;AACF;AACA;AACH;AACA;AACvB;AAC4B;AACD;AACM;AACL;AACJ;AACI;AACA;AACK;AACF;AACF;AACE;AACF;AACF;AACO;AACC;AACX;AACD;AACI;AACI;AACJ;AACG;AACL;AACM;AACJ;AACK;AACL;AACE;AACL;AACO;AACE;AACF;AACH;AACI;AACJ;AACM;AACH;AACF;AACD;AACD;AACE;AACN;AACS;AACD;AACL;AACG;AACJ;AACzB;AAC0B;AACC;AACA;AACF;AACK;AACC;AACC;AACL;AACA;AACG;AACC;AACC;AACF;AACJ;AACD;AACA;AACG;AACL;AACvB;AACsB;AACI;AACO;AACT;AACF;;;;;;;;;;;;;;;;;AC7FtB;AACA;AACA;AACA;AACA;AACgC;AACM;AAC/B;AACP;AACA,yBAAyB,yCAAK;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oDAAgB;AAClD;AACA,sBAAsB,+CAAY,0CAA0C,SAAS;AACrF;AACA,uFAAuF,oDAAgB;AACvG;AACA;AACA;AACA,6BAA6B,sDAAkB;AAC/C,wBAAwB,IAAI,sDAAkB,EAAE;AAChD,+CAA+C,sDAAkB;AACjE,6BAA6B,+CAAW;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACgC;AACuC;AACrC;AACK;AACN;AACjC,2BAA2B,yDAAa;AACxC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD,8BAA8B,+DAA0B;AACxD;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2DAAsB;AACnD,0BAA0B,yCAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAmB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA,6BAA6B,2BAA2B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,uBAAuB,wDAAmB,CAAC,8CAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,qEAAyB;AACrE;AACA;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACwB;;;;;;;;;;;;;;;;;;ACtSxB;AACA;AAC8C;AAChB;AACS;AAChC,yBAAyB,uCAAI;AACpC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA,gBAAgB,eAAe;AAC/B,gCAAgC,uDAAY;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AClCA;AACA;AACoC;AACG;AACQ;AACxC;AACP;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,uBAAuB,6CAAO;AACrC;AACA;AACA;AACA;AACA;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8CAAO,sCAAsC,UAAU;AAC/D,eAAe,8CAAO,oCAAoC,UAAU;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC0C;AACA;AACI;AAChB;AACc;AAChB;AACsB;AACA;AACJ;AACR;AACM;AACJ;AACM;AACX;AACI;AACI;AACP;AACpC;AACA;AACA;AACA;AACA,QAAQ,2CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yDAAgB,SAAS,2DAAkB;AACnD,QAAQ,6DAAkB,SAAS,6DAAoB;AACvD,QAAQ,4CAAU,SAAS,qDAAY;AACvC,QAAQ,kEAAqB,SAAS,gEAAuB;AAC7D,QAAQ,0DAAiB,SAAS,4DAAmB;AACrD,QAAQ,oDAAa,SAAS,wDAAe;AAC7C,QAAQ,kEAAqB,SAAS,gEAAuB;AAC7D,QAAQ,8DAAmB,SAAS,8DAAqB;AACzD,QAAQ,+DAAmB,SAAS,8DAAqB;AACzD,QAAQ,8DAAmB,SAAS,8DAAqB;AACzD,QAAQ,sDAAe,SAAS,0DAAiB;AACjD,QAAQ,0DAAiB,SAAS,4DAAmB;AACrD,QAAQ,4DAAkB,SAAS,6DAAoB;AACvD,QAAQ,8CAAW,SAAS,sDAAa;AACzC,QAAQ,qDAAc,SAAS,yDAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAoB,iBAAiB,2DAAkB;AAC/D;AACA;AACA;AAC2B;;;;;;;;;;;;;;;;;;;;;;;AC9I3B;AACA;AACA;AACA;AACoC;AACJ;AACM;AACkB;AACtB;AACc;AACE;AACjB;AACjC;AACA;AACA;AACA,6BAA6B,+CAAQ,GAAG,+BAA+B;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,+BAA+B,6CAAO;AAC7C;AACA,eAAe,iEAAyB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD,8CAA8C,6JAA6J,+DAA0B,qCAAqC,+DAA0B,kDAAkD,+DAA0B,2EAA2E;AAC3b;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC,YAAY,qDAAiB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,uEAA2B;AAC3E,yCAAyC,qDAAS;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yDAAa;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC9LA;AACA;AACsC;AACtC;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,wBAAwB;AAC1C,oBAAoB,yBAAyB;AAC7C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,4BAA4B;AAC/C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,4BAA4B;AAChD,qBAAqB,4BAA4B;AACjD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,4BAA4B;AAC7C,kBAAkB,4BAA4B;AAC9C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,iCAAiC,UAAU;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,WAAW;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2CAA2C,eAAe;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wCAAwC,UAAU;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,4CAA4C,cAAc;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,UAAU;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY,uCAAuC,KAAK,IAAI,UAAU;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,KAAK,IAAI,UAAU;AAC5F;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA,6BAA6B,eAAe;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,UAAU;AACnF;AACA;AACA,sBAAsB,+CAAY,mCAAmC,MAAM,IAAI,MAAM;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AClXA;AACA;AAC8B;AACY;AACR;AACI;AACC;AACQ;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,mBAAmB,+CAAQ;AAClC;AACA;AACA;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAe;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,QAAQ,uDAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,oBAAoB,2DAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wDAAwD,2BAA2B;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yDAAoB;AAC9C,wDAAwD,yDAAoB;AAC5E;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,sCAAsC;AACtC,uCAAuC;AACvC,0BAA0B;AAC1B,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,oDAAY;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4DAAuB;AACzC;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,4DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,+DAA0B,IAAI,+DAA0B;AAC3F;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC/eA;AACA;AAC4C;AACZ;AACF;AACA;AACI;AACK;AACD;AACtC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gEAA2B;AAC7C;AACA,qBAAqB,sDAAiB;AACtC;AACA,QAAQ,4DAAuB;AAC/B;AACA;AACA;AACA,cAAc,sDAAiB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8DAAyB;AACjC;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uCAAI;AAC3B;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,0CAAO;AAClE;AACA;AACA;AACA,0BAA0B,yDAAoB;AAC9C,QAAQ,8CAAO,kEAAkE,cAAc,cAAc,cAAc;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,6DAA6D,+DAA0B,EAAE;AACzF;AACA;AACA;AACA,cAAc,kDAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,6CAAU;AACrD,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0CAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gBAAgB,MAAM,mBAAmB,0CAAO,iBAAiB;AACnG;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAiB;AAC7B,sCAAsC,eAAe;AACrD,aAAa;AACb;AACA;AACA;AACA;AACA;AACoB;;;;;;;;;;;;;;;;;;;;ACnNpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACwC;AACF;AACJ;AACK;AACP;AACzB,2BAA2B,+CAAQ;AAC1C;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA,SAAS;AACT;AACA,6BAA6B,iDAAS;AACtC,yBAAyB,yCAAK;AAC9B;AACA;AACA,wBAAwB,sDAAiB;AACzC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACpEA;AACA;AACA;AACgC;AACM;AACR;AACI;AACgB;AACE;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAQ;AAC/B;AACA;AACA,eAAe,yDAAiB;AAChC;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,6CAA6C;AAC7C;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,8CAAO;AAC5C,oFAAoF,8DAAuB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,8DAAuB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,4DAAuB;AACvD;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAA0B;AAClD;AACA;AACA;AACA,wBAAwB,yDAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,0CAA0C,UAAU;AACtF;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B,kCAAkC,mBAAmB;AACrD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,yCAAK,CAAC,2DAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,yCAAK,CAAC,2DAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4CAAS;AACrC;AACA,YAAY,qDAAS;AACrB;AACA,gCAAgC,4CAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,4CAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoB;;;;;;;;;;;;;;;;;;;;ACxRpB;AACA;AACA;AACgC;AACwB;AAC1B;AACI;AACkB;AACpD;AACO,0BAA0B,+CAAQ;AACzC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD,iDAAiD,4DAAqB;AACtE,iDAAiD,6DAAsB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA,wBAAwB,4DAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,6DAAsB;AACpG,2BAA2B,4DAAuB,+EAA+E,gDAAa;AAC9I,sBAAsB,4DAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA,2BAA2B,4DAAuB,+EAA+E,gDAAa;AAC9I,sBAAsB,4DAAuB;AAC7C,YAAY,uDAAW;AACvB,+BAA+B,4DAAuB,iFAAiF,gDAAa;AACpJ,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA;AACA,6BAA6B,8DAAuB;AACpD,YAAY,qDAAiB;AAC7B;AACA,aAAa;AACb;AACA,kCAAkC,6DAAsB;AACxD,YAAY,qDAAiB;AAC7B;AACA,aAAa;AACb;AACA;AACA;;;;;;;;;;;;;;;;AC3FA;AACA;AACA;AAC2C;AAC3C;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,cAAc;AACnE,kDAAkD,4BAA4B;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;AACkB;;;;;;;;;;;;;;;;;;;;;ACpNlB;AACA;AACoC;AACiB;AACrB;AACE;AACK;AACI;AAC3C;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,yCAAK,2BAA2B,0BAA0B;AAChF;AACA,0DAA0D,+DAA0B;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,6CAAO;AAClC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,4DAAuB,gCAAgC,mCAAmC,2CAA2C,+DAA0B;AAC/L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,4DAAuB,gCAAgC,mCAAmC,2CAA2C,+DAA0B;AAC/L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;ACtPxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,2BAA2B,yEAAyE;AACpG;AACA;AACA;AACA;AACA;AACA,oIAAoI;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACnHA;AACA;AACuC;AAChC;AACP;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACgD;AACN;AACI;AACR;AACU;AACzC;AACP;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACO;AACP;AACA;AACA;AACA;AACA,CAAC,kDAAkD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2DAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+CAAY,gDAAgD,aAAa;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,kDAAY;AACjC,8BAA8B,+CAAY;AAC1C;AACA,2DAA2D,0BAA0B;AACrF;AACA,8BAA8B,+CAAY;AAC1C;AACA,+BAA+B,yDAAa;AAC5C;AACA;AACA,qBAAqB,+CAAS;AAC9B,8BAA8B,+CAAY;AAC1C;AACA,+BAA+B,mDAAU;AACzC;AACA;AACA,0BAA0B,+CAAY,8CAA8C,QAAQ;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoB;;;;;;;;;;;;;;;;;;;AC/HpB;AACgC;AACQ;AACN;AACK;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,iDAAS;AACzC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA,0BAA0B,yCAAK,YAAY,4DAAuB;AAClE;AACA,SAAS;AACT,qCAAqC,+CAA+C;AACpF;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AACA;AAC4C;AACd;AACM;AACiB;AACP;AACQ;AACE;AACT;AACD;AACJ;AACF;AACH;AACH;AACc;AACE;AACZ;AACtC;AACA;AACA;AACA;AACA,KAAK,2DAAgB;AACrB,KAAK,gDAAa;AAClB,KAAK,gEAAqB;AAC1B,KAAK,mEAAsB;AAC3B;AACA;AACA,KAAK,mEAAsB;AAC3B,KAAK,gEAAqB;AAC1B,KAAK,2DAAgB;AACrB,KAAK,gDAAa;AAClB;AACA,oBAAoB,6CAAO;AAC3B;AACA,eAAe,uDAAc;AAC7B;AACA;AACA;AACA;AACA,0BAA0B,6DAAuB;AACjD;AACA;AACA;AACA;AACA,0BAA0B,6DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,uCAAuC,wHAAwH,gEAA0B,oHAAoH;AAC7S,wBAAwB;AACxB,wCAAwC;AACxC;AACA;AACA,6BAA6B,kDAAO,yBAAyB,6DAAkB,GAAG,2DAAgB;AAClG;AACA,gCAAgC,kDAAO,0BAA0B,6DAAkB,GAAG,2DAAgB;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD,4CAA4C,eAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,iEAA2B;AAChE;AACA;AACA,0DAA0D,iEAA2B;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,qFAAqF,iEAA2B,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA,8BAA8B,uEAA2B;AACzD;AACA;AACA;AACA,oDAAoD,uEAA2B;AAC/E;AACA;AACA;AACA;AACA,qCAAqC,mEAAwB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,wDAAU;AAC1C;AACA;AACA;AACA;AACA,gCAAgC,+CAAK;AACrC;AACA;AACA;AACA;AACA,iCAAiC,uDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mDAAU;AAC1C;AACA;AACA;AACA,wCAAwC;AACxC,gCAAgC,kDAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qEAAyB;AAC5D;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B,EAAE,sDAAW;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mEAAwB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,yBAAyB,qEAAyB;AAClD;AACA;AACA;AACA;AACA;AACA,kDAAkD,gDAAa;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,qEAAyB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,0DAA0D,gEAAqB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,qEAAyB;AAC9E;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,2DAA2D,mEAAsB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,qEAAyB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,6BAA6B,uDAAY;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uEAA2B;AAC9E;AACA;AACA,8BAA8B,qEAAyB;AACvD;AACA;AACA,6BAA6B,uCAAI;AACjC;AACA;AACA;AACA,6CAA6C,qEAAyB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,0DAAa;AAC1C;AACA;AACA;AACA,uDAAuD,qEAAyB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,uEAA2B;AAC1E,+CAA+C,qEAAyB;AACxE;AACA;AACA,gEAAgE,mEAAwB;AACxF;AACA,0CAA0C,kDAAO,CAAC,6DAAkB;AACpE;AACA;AACA,0CAA0C,kDAAO,CAAC,2DAAgB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA,6BAA6B,sDAAS;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,uEAA2B;AAChF;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,qDAAqD,uEAA2B;AAChF;AACA;AACA;AACA;AACA,iBAAiB;AACjB,wDAAwD,uEAA2B;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,6BAA6B,sDAAa;AAC1C;AACA,6BAA6B,8DAAqB;AAClD;AACA,6BAA6B,+DAAsB;AACnD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,iDAAiD,uEAA2B,EAAE,yDAAgB;AAC9F;AACA,0CAA0C,mEAAwB;AAClE;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,iDAAiD,uEAA2B,EAAE,yDAAgB;AAC9F;AACA,0CAA0C,mEAAwB;AAClE;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACiB;;;;;;;;;;;;;;;;;;;ACxuBjB;AACA;AACA;AACuE;AACrC;AACK;AAChC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AAC5B,sBAAsB,yDAAa;AAC1C;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACrMA;AACA;AACoC;AACiB;AACrB;AACE;AACK;AACD;AACtC;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA,6BAA6B;AAC7B,+BAA+B;AAC/B;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAO;AACpC;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA,yBAAyB,gEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B,GAAG;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,qCAAqC,wBAAwB;AAC7D,SAAS;AACT;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAiB;AACjC,gBAAgB,qDAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY,qDAAqD,UAAU;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC0B;;;;;;;;;;;;;;;;;;;AC/O1B;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACE;AACC;AACD;AACtC,2BAA2B,6CAAO;AAClC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8DAAuB,iBAAiB,8DAAuB;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8DAAuB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;;;;;AChKxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACF;AACa;AACR;AACD;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAO;AAC/B;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,mEAA8B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,EAAE,uDAAiB;AACzD;AACA;AACA;AACA;AACA;AACA,8BAA8B,wDAAiB;AAC1B;;;;;;;;;;;;;;;;;;;AClRrB;AACA;AACA;AACA;AACoC;AACG;AACN;AAC1B;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sDAAsD;AAChD,4BAA4B,6CAAO;AAC1C;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC4C;AACN;AACA;AACR;AACkB;AACd;AACK;AACsB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA,iFAAiF,0CAAO;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8CAAO;AACrC;AACA;AACA;AACA;AACA;AACA,wBAAwB,yDAAa;AACrC;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA,eAAe,0CAAO;AACtB;AACA;AACA;AACA;AACA;AACA,eAAe,4CAAS;AACxB;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,wDAAmB;AAC7D,0CAA0C,wDAAmB;AAC7D;AACA;AACA,yBAAyB,kDAAa;AACtC;AACA;AACA;AACA,8FAA8F,oDAAY;AAC1G;AACA,kGAAkG,oDAAY;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yDAAoB;AAC9C,QAAQ,8CAAO,kEAAkE,cAAc,cAAc,cAAc;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,6DAA6D,+DAA0B;AACvF;AACA,6EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oGAAoG,0CAAO;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI,GAAG,uBAAuB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,+CAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,0CAAO,GAAG,4CAAS;AACzE;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,0BAA0B,yDAAoB;AAC9C;AACA,0BAA0B,+CAAY,qDAAqD,IAAI;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB;AACxD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,2CAA2C;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8DAAyB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,6CAAU;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAO;AAC9B;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,4BAA4B,EAAE,wDAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0CAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,4CAAS;AACvF;AACA;AACA,kGAAkG,0CAAO;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,0CAAO;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,kBAAkB,QAAQ;AAC1B;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,cAAc;AAChC;AACA,kBAAkB,cAAc;AAChC,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B,WAAW,IAAI;AAC7D;AACA;AACA,sEAAsE,6CAAU;AAChF;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,iKAAiK;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,2BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,4CAAS;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,mBAAmB;AACxF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uCAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA,+BAA+B,0CAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACqB;;;;;;;;;;;;;;;;;;;;AChjCrB;AACA;AACqD;AACrB;AACgB;AACd;AACK;AACvC,yBAAyB,yDAAa;AACtC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAiB,sDAAsD,4DAAuB,+DAA+D,kBAAkB;AACvL;AACA;AACA;AACA;AACA,QAAQ,qDAAiB,sDAAsD,4DAAuB,iEAAiE,mBAAmB;AAC1L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA;AACA,YAAY,4DAAuB;AACnC;AACA,YAAY,qDAAiB,mBAAmB,+DAA4B;AAC5E;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB,UAAU,+DAA0B;AACpC,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsB;;;;;;;;;;;;;;;;;;;ACrKtB;AACA;AACqD;AACL;AACA;AACT;AACvC,2BAA2B,yDAAa;AACxC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACwB;;;;;;;;;;;;;;;;;;;;;AClExB;AACA;AACqD;AACrB;AACuC;AACrC;AACc;AACT;AACvC,yBAAyB,yDAAa;AACtC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,wBAAwB,uEAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,+DAA0B;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oBAAoB,mCAAmC;AACtH;AACA,sCAAsC,gEAAoB;AAC1D;AACA;AACA;AACA;AACA;AACA,+BAA+B,yDAAoB;AACnD;AACA,YAAY,qDAAiB;AAC7B,iBAAiB,kDAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,qDAAiB;AACzD;AACA,qBAAqB;AACrB,8CAA8C,+DAA0B;AACxE;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACsB;;;;;;;;;;;;;;;;;;;;ACrGtB;AACA;AACqD;AACkB;AACd;AAClB;AACD;AACtC,wBAAwB,yDAAa;AACrC;AACA,eAAe,0DAAkB;AACjC;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA,uCAAuC,uCAAuC,oEAA6B,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sEAA0B;AAC3C,iBAAiB,uEAA2B;AAC5C;AACA,sCAAsC,sEAA0B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uEAA2B;AAC5C,iBAAiB,uEAA2B;AAC5C;AACA,mDAAmD,+DAAwB;AAC3E;AACA;AACA,wDAAwD,8DAAuB;AAC/E;AACA;AACA,sCAAsC,uEAA2B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACqB;;;;;;;;;;;;;;;;;;ACrFrB;AACA;AACA;AACA;AACoC;AACG;AACD;AACtC,uBAAuB,6CAAO;AAC9B;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,qCAAqC,EAAE,uDAAiB;AACpC;;;;;;;;;;;;;;;;;;;ACpLpB;AACA;AACqD;AACL;AACT;AAChC;AACP;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B,oBAAoB,yDAAa;AACjC;AACA,eAAe,sDAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACiB;;;;;;;;;;;;;;;;;;;ACvEjB;AACA;AACA;AACA;AACA;AACoC;AACF;AACK;AACI;AAC3C;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA,mBAAmB,6CAAO;AAC1B;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sDAAiB;AAChC;AACA;AACA,eAAe,uDAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G;AAC7G;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,4DAAuB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mBAAmB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgB;;;;;;;;;;;;;;;;;;;;;ACnKhB;AACA;AACA;AACA;AACA;AACgC;AACF;AACA;AACI;AACK;AACD;AAC/B,4BAA4B,uCAAI;AACvC;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA,yDAAyD,4CAAS;AAClE;AACA,gCAAgC,yCAAK,mDAAmD,UAAU;AAClG;AACA;AACA;AACA;AACA,wCAAwC,4CAAS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAyB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,wBAAwB,0CAAO;AAC/B,0BAA0B,0CAAO,kBAAkB,4CAAS;AAC5D,sBAAsB,+CAAY,2CAA2C,UAAU;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4DAAuB,iCAAiC,qBAAqB;AACzG;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,4CAAS;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,0CAAO;AACtD;AACA;AACA;AACA;AACA;AACA,gDAAgD,8CAAW;AAC3D;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yDAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AChOA;AACA;AACA;AACA;AACA;AACqD;AACG;AAClB;AACR;AACI;AACmC;AAC/B;AACtC,2BAA2B,+CAAQ;AACnC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA,sBAAsB,4DAAuB;AAC7C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA,iBAAiB,uDAAW;AAC5B,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA,2DAA2D,+DAA0B;AACrF;AACA,4BAA4B,6DAAsB;AAClD;AACA;AACA;AACA,iCAAiC,6DAAsB;AACvD;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD,gCAAgC,6DAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA,yCAAyC;AACzC;AACA;AACA,6BAA6B,8DAAuB;AACpD;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB,EAAE;AACjD;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B,4BAA4B;AAC5B,mBAAmB,gEAAyB,EAAE;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gEAAyB,WAAW,gEAAyB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,0CAAO;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,2DAA2D,0CAAO;AAClE;AACA;AACA,mGAAmG,+DAA0B;AAC7H;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,2DAA2D,4CAAS;AACpE;AACA;AACA,mGAAmG,+DAA0B;AAC7H;AACA;AACA,iBAAiB,6DAAsB;AACvC;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,0BAA0B,+CAAY,oCAAoC,eAAe;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2DAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8DAAuB;AACvC;AACA;AACA,gBAAgB,8DAAuB;AACvC;AACA;AACA;AACA;AACA,qBAAqB,8DAAuB;AAC5C;AACA;AACA,oBAAoB,8DAAuB;AAC3C;AACA,qBAAqB,gEAAyB;AAC9C;AACA;AACA,oBAAoB,8DAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B,UAAU,4CAAS;AACnB,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACwB;;;;;;;;;;;;;;;;;;;;;ACpQxB;AACA;AACA;AACA;AACA;AACqD;AACrB;AACM;AACJ;AACqC;AACjC;AACtC,qBAAqB,+CAAQ;AAC7B;AACA,eAAe,uDAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B;AACA,wBAAwB,OAAO;AAC/B;AACA,yBAAyB;AACzB;AACA,qBAAqB,qDAAS;AAC9B;AACA,wBAAwB,cAAc;AACtC,yBAAyB;AACzB;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA,SAAS;AACT;AACA;AACA,oDAAoD,eAAe;AACnE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB;AACzD;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA,wBAAwB,+DAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA,gBAAgB,kDAAM;AACtB;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,0BAA0B,+CAAY,mCAAmC,WAAW;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B,mCAAmC,WAAW;AAC9C,oBAAoB,qDAAiB;AACrC;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C,oBAAoB,qDAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA,QAAQ,qDAAiB;AACzB,gCAAgC,WAAW,GAAG,MAAM;AACpD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB,UAAU,4CAAS;AACnB,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACkB;;;;;;;;;;;;;;;;;;;ACzNlB;AACA;AACA;AACqD;AACL;AACd;AAC4B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,wBAAwB;AAC7E;AACA;AACA;AACA,uDAAuD,0BAA0B;AACjF;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAa;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mEAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,2BAA2B,kDAAe;AAC1C,yBAAyB,4CAAS;AAClC,2BAA2B,oDAAiB;AAC5C,0BAA0B,mDAAgB;AAC1C;AACA,qCAAqC,sBAAsB;AAC3D,0CAA0C,iFAAiF;AAC3H;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,6CAAM;AAC9C;AACA,qCAAqC,6CAAM;AAC3C;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA,wDAAwD,qBAAqB;AAC7E;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gDAAgD;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAc;AAC3C,2BAA2B,qDAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,IAAI;AAC9E,6BAA6B,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,GAAG;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,IAAI,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,eAAe,KAAK,SAAS;AACvE;AACA;AACA;AACA;AACA,uDAAuD,sBAAsB,gBAAgB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB,4DAA4D;AAC3I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB;AAC/E,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gDAAa;AACtC,6BAA6B,mDAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsB;;;;;;;;;;;;;;;;;;;;;;ACpjBtB;AACA;AAC4C;AACR;AACI;AACV;AACE;AACO;AACD;AACtC;AACA;AACA;AACA;AACA;AACO,qBAAqB,6CAAO;AACnC;AACA,eAAe,uDAAe;AAC9B;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,qDAAqD,iLAAiL,cAAc,yBAAyB,YAAY,mDAAmD,0BAA0B;AACtW;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAyD,EAAE;AACpF;AACA;AACA;AACA,yBAAyB;AACzB,yDAAyD,WAAW;AACpE,iDAAiD,aAAa;AAC9D,UAAU,EAAE;AACZ;AACA;AACA;AACA,6CAA6C,iBAAiB;AAC9D,gGAAgG,wFAAwF;AACxL,gDAAgD,+EAA+E,aAAa,uBAAuB;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8BAA8B,iDAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,sDAAkB;AAClE;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,mEAAmE,wDAAoB;AACvF;AACA;AACA;AACA;AACA;AACA,wBAAwB,mCAAmC;AAC3D;AACA;AACA;AACA;AACA;AACA,+BAA+B,qDAAW;AAC1C,QAAQ,4DAAwB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,YAAY,+DAAuB;AACnC;AACA;AACA;AACA;AACA;AACA,wBAAwB,mDAAgB;AACxC,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;AC3MA;AACsC;AACN;AACM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ;AACjB,UAAU,QAAQ;AAClB,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,YAAY,kBAAkB;AAC9B,aAAa,kBAAkB;AAC/B,YAAY,kBAAkB;AAC9B,aAAa,kBAAkB;AAC/B;AACA;AACA,cAAc,eAAe;AAC7B,YAAY,eAAe;AAC3B,aAAa,eAAe;AAC5B,YAAY,eAAe;AAC3B,eAAe,eAAe;AAC9B,kBAAkB,eAAe;AACjC,uBAAuB,eAAe;AACtC,oBAAoB,eAAe;AACnC,oBAAoB,eAAe;AACnC,eAAe,eAAe;AAC9B,cAAc,gBAAgB;AAC9B;AACA;AACA,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,wCAAwC;AAClD,WAAW,yCAAyC;AACpD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,wCAAwC;AACpD,aAAa,yCAAyC;AACtD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,uBAAuB;AAChC,UAAU,wCAAwC;AAClD,YAAY,wCAAwC;AACpD,aAAa,yCAAyC;AACtD,UAAU,wCAAwC;AAClD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,SAAS,cAAc;AACvB,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAC3B,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAC1B,SAAS,WAAW;AACpB,UAAU,iBAAiB;AAC3B,UAAU,kBAAkB;AAC5B,UAAU,iBAAiB;AAC3B,UAAU,0BAA0B;AACpC,UAAU,gBAAgB;AAC1B,UAAU,qBAAqB;AAC/B,UAAU,uBAAuB;AACjC;AACA;AACA,WAAW,0DAA0D;AACrE,YAAY,gEAAgE;AAC5E,SAAS,yDAAyD;AAClE,UAAU,+DAA+D;AACzE,SAAS,4DAA4D;AACrE,MAAM,KAAK,+DAA+D;AAC1E,MAAM,KAAK,gEAAgE;AAC3E,UAAU,oFAAoF;AAC9F,SAAS,wEAAwE;AACjF,YAAY,gFAAgF;AAC5F,WAAW,0EAA0E;AACrF,YAAY,uEAAuE;AACnF,UAAU,+DAA+D;AACzE,WAAW,sEAAsE;AACjF,SAAS,yDAAyD;AAClE,SAAS,0DAA0D;AACnE,WAAW,mEAAmE;AAC9E,aAAa,uEAAuE;AACpF,YAAY,mEAAmE;AAC/E,YAAY,mEAAmE;AAC/E,+BAA+B,kEAAkE;AACjG,iCAAiC,oEAAoE;AACrG,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,2BAA2B,8DAA8D;AACzF,8BAA8B,iEAAiE;AAC/F,2BAA2B,8DAA8D;AACzF,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,wBAAwB,2DAA2D;AACnF,uBAAuB,0DAA0D;AACjF,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,iCAAiC,oEAAoE;AACrG,oCAAoC,uEAAuE;AAC3G,iCAAiC,oEAAoE;AACrG,sCAAsC,yEAAyE;AAC/G,mCAAmC,sEAAsE;AACzG,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,gCAAgC,mEAAmE;AACnG,kCAAkC,qEAAqE;AACvG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,+BAA+B,kEAAkE;AACjG,+BAA+B,kEAAkE;AACjG,iCAAiC,oEAAoE;AACrG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,sCAAsC,yEAAyE;AAC/G,wCAAwC,2EAA2E;AACnH,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,kCAAkC,qEAAqE;AACvG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,wCAAwC,2EAA2E;AACnH,qCAAqC,wEAAwE;AAC7G,sCAAsC,yEAAyE;AAC/G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,wBAAwB,2DAA2D;AACnF,wBAAwB,2DAA2D;AACnF,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,oCAAoC,uEAAuE;AAC3G;AACA;AACA;AACA,KAAK;AACL,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,YAAY,8CAA8C;AAC1D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL,YAAY,wDAAwD;AACpE;AACA;AACA;AACA;AACA,KAAK;AACL,UAAU,+CAA+C;AACzD,YAAY,4EAA4E;AACxF,aAAa,4CAA4C;AACzD,aAAa,4CAA4C;AACzD,aAAa,sFAAsF;AACnG,cAAc,iDAAiD;AAC/D,cAAc,iDAAiD;AAC/D,aAAa,oFAAoF;AACjG,cAAc,gDAAgD;AAC9D,cAAc,gDAAgD;AAC9D,cAAc,4FAA4F;AAC1G,eAAe,oDAAoD;AACnE,eAAe,oDAAoD;AACnE,YAAY,4CAA4C;AACxD,UAAU,8CAA8C;AACxD,YAAY,+CAA+C;AAC3D;AACA;AACA,eAAe,4BAA4B;AAC3C,wBAAwB,yBAAyB;AACjD,YAAY,sBAAsB;AAClC,qBAAqB,2BAA2B;AAChD,UAAU,uBAAuB;AACjC,eAAe,6CAA6C;AAC5D,iBAAiB,iDAAiD;AAClE,eAAe,4CAA4C;AAC3D,iBAAiB,yCAAyC;AAC1D,iBAAiB,uCAAuC;AACxD,mBAAmB,qDAAqD;AACxE,iBAAiB,oCAAoC;AACrD,kBAAkB,6BAA6B;AAC/C,aAAa,oBAAoB;AACjC,YAAY,yBAAyB;AACrC,YAAY,2BAA2B;AACvC,gBAAgB,yBAAyB;AACzC,gBAAgB,8BAA8B;AAC9C,YAAY,mBAAmB;AAC/B,qBAAqB,yBAAyB;AAC9C,mBAAmB,uBAAuB;AAC1C,YAAY,mBAAmB;AAC/B,gBAAgB,uBAAuB;AACvC,aAAa,oBAAoB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2EAA2E;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,gGAAgG,SAAS;AACzG;AACA;AACA;AACA,wBAAwB;AACxB;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,kFAAkF,eAAe;AACnI;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,+CAA+C;AACnF;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,sBAAsB,+CAAY,8EAA8E,QAAQ;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,oDAAoD,QAAQ;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,yCAAK;AAC1C;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,gDAAgD,KAAK;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wDAAwD,SAAS;AACnG;AACA;AACA;AACA;AACA;AACA,mBAAmB,+CAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,0BAA0B,6CAA6C;AACvI;AACA;AACA;AACA,iEAAiE,kDAAc;AAC/E;AACA,2DAA2D,kBAAkB,oBAAoB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;;;;;;;;;AC7xCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACE;AACM;AACR;AACkB;AACd;AACY;AACC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACO,sBAAsB,yDAAa;AAC1C;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA,4DAA4D;AAC5D;AACA,8BAA8B,gEAA2B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,4CAAS,CAAC,KAAK,kDAAe,CAAC,GAAG;AACvD,0BAA0B,yDAAoB;AAC9C,QAAQ,8CAAO,kEAAkE,cAAc,cAAc,cAAc;AAC3H;AACA;AACA;AACA;AACA;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,0CAAO;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA,+BAA+B,2DAAsB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+BAA+B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,WAAW;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,yBAAyB,6DAAsB;AAC/C,wBAAwB;AACxB;AACA,8BAA8B,8DAAuB;AACrD,gCAAgC;AAChC;AACA,8BAA8B,8DAAuB,iBAAiB,8DAAuB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oCAAoC,WAAW,IAAI;AACnE;AACA;AACA;AACA;AACA;AACA,uDAAuD,4CAAS;AAChE;AACA;AACA;AACA;AACA;AACA,sCAAsC,0BAA0B;AAChE;AACA,wFAAwF,0BAA0B;AAClH;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iDAAK;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAU;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,4DAA4D,mBAAmB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACzYA;AACA;AACA;AACA;AACA;AACqD;AACnB;AACK;AACD;AACtC,uBAAuB,2CAAM;AAC7B;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACoB;;;;;;;;;;;;;;;;;ACrGpB;AACgC;AACO;AAChC,uBAAuB,yCAAK;AACnC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA,4CAA4C,kEAAkE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACsC;AACC;AAChC,qBAAqB,+CAAQ;AACpC;AACA,eAAe,uDAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;;;;;;;;;;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACoC;AACiB;AACf;AACJ;AACK;AACI;AAC3C;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA,CAAC,kDAAkD;AACnD,0BAA0B,6CAAO;AACjC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,8EAA8E;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,mEAA8B;AACxG;AACA;AACA,0BAA0B,+CAAY,oCAAoC,eAAe;AACzF;AACA;AACA,wBAAwB;AACxB,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA,gCAAgC,iDAAc;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8DAAuB;AACnC;AACA;AACA,gBAAgB,8DAAuB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACuB;;;;;;;;;;;;;;;;;;;;ACxLvB;AACA;AACgC;AACF;AACI;AACK;AACa;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uCAAI;AAC/B;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,0BAA0B,iBAAiB,+DAA0B,EAAE;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC,yBAAyB,8CAAO;AAChC,8BAA8B,yCAAK,0BAA0B,sBAAsB;AACnF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;;AClHxB;AACA;AACqD;AACxB;AAC7B;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,mCAAmC,kDAAe;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAW;AACpC,2BAA2B,gDAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,+DAA4B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kDAAe,GAAG,oDAAiB;AACtE,oCAAoC,mDAAgB,GAAG,mDAAgB;AACvE;AACA,2BAA2B,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,wDAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACyB;;;;;;;;;;;;;;;;;;;;;;AC7TzB;AACA;AACqD;AACrB;AACF;AACI;AACK;AACD;AAC/B;AACP;AACA;AACA;AACA;AACA,CAAC,8CAA8C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uCAAI;AAC3B;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC,6BAA6B,yCAAK,cAAc,+DAA0B,IAAI,sBAAsB;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAA8B;AAClD;AACA,oCAAoC,iDAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACA;AACoB;;;;;;;;;;;;;;;;;;;;AClNpB;AACA;AACoC;AACE;AACJ;AACK;AACQ;AAC/C;AACA;AACA;AACA;AACO,uBAAuB,6CAAO;AACrC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,+CAAQ,QAAQ;AACzC,iCAAiC;AACjC,kCAAkC,+CAAQ;AAC1C;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,sDAAiB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;;;;;;;;;;;;;;;;;AChSA;AACA;AACA;AACA;AACA;AACsC;AACA;AACtC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,+CAAQ;AACvC,4BAA4B,+CAAQ;AACpC,sCAAsC;AACtC,mCAAmC;AACnC;AACA,0BAA0B;AAC1B;AACA,wBAAwB;AACxB,0BAA0B;AAC1B,6BAA6B;AAC7B,oCAAoC;AACpC;AACA,yBAAyB;AACzB,0BAA0B;AAC1B,sCAAsC;AACtC,uCAAuC;AACvC,4BAA4B;AAC5B,6BAA6B;AAC7B,8BAA8B;AAC9B,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uHAAuH;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACjMA;AACA;AACA;AACA;AACA;AACgC;AACC;AAC1B,iCAAiC,yCAAK;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yCAAK;AACtC;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yCAAK;AACtC;AACA,wBAAwB,8CAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA,YAAY,uDAAmB;AAC/B,uBAAuB,8CAAO;AAC9B;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA,YAAY,uDAAmB;AAC/B,uBAAuB,8CAAO;AAC9B;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACgC;AACuC;AACrC;AACkB;AACb;AACQ;AAC/C;AACA;AACA;AACA,kBAAkB,+CAAY,2CAA2C,SAAS;AAClF;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2CAA2C,SAAS;AACtF;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACO,4BAA4B,yDAAa;AAChD;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD,+DAA+D,+DAA0B;AACzF;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA,2BAA2B,yCAAK,OAAO,+DAA0B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6DAAkB;AACrC;AACA;AACA,gBAAgB,kCAAkC;AAClD;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACtLA;AACA;AAC8B;AACkB;AACT;AAChC,0BAA0B,uCAAI;AACrC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA,gBAAgB,eAAe;AAC/B,2BAA2B,yDAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACgC;AACQ;AACF;AACR;AACA;AACI;AACkB;AACpD;AACO,sBAAsB,+CAAQ;AACrC;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAW;AAC9B,2BAA2B,uDAAe;AAC1C,oCAAoC,yBAAyB;AAC7D,0BAA0B,4DAAuB;AACjD,kDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA,2CAA2C,SAAS;AACpD;AACA;AACA,2CAA2C,SAAS;AACpD;AACA,0DAA0D,SAAS,2CAA2C,gDAAa;AAC3H,uCAAuC,SAAS,cAAc,kBAAkB,0CAAO,iBAAiB;AACxG,wBAAwB,cAAc;AACtC,YAAY,qDAAiB,oCAAoC,0CAA0C;AAC3G;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC1DA;AACA;AACkC;AACI;AACtC;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,yDAAoB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2CAA2C,aAAa;AAC1F;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wDAAwD,yBAAyB,GAAG,UAAU;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,qDAAqD,QAAQ;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yDAAoB,QAAQ,GAAG,OAAO;AACxD;AACA;;;;;;;;;;;;;;;;;;;;;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,4BAA4B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACI;AACR;AACF;AACI;AACK;AACQ;AACxC;AACP;AACA;AACA;AACA,CAAC,wCAAwC;AAClC,qBAAqB,6CAAO;AACnC;AACA,eAAe,uDAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,4DAAuB;AACrD;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+DAA0B;AAChD;AACA;AACA;AACA;AACA,QAAQ,mEAA2B;AACnC;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,SAAS;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,yCAAK;AACnD;AACA;AACA;AACA;AACA;AACA,0CAA0C,yCAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,0CAAO;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,4BAA4B,uBAAuB;AACnD;AACA,0EAA0E,0CAAO;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,8CAAO;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4DAAuB;AAC9C;AACA;AACA;AACA,wBAAwB,8CAAO;AAC/B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8CAAO;AACnC,aAAa;AACb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;ACtH7B;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAM;AACrB,eAAe,qBAAM;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,MAAM,6BAA6B,MAAM;AACjF;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,iBAAiB,KAAK;AACtB;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;;;;;;;;;;;;;;;;;ACtFA;AACA;AACA;AAC8B;AACa;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,uCAAI;AACA;;;;;;;;;;;;;;;;;;;ACrEf;AACA;AAC8B;AACQ;AACJ;AACK;AACvC;AACO,sBAAsB,+CAAQ;AACrC;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gDAAa;AACtD;AACA,yGAAyG,+DAA0B;AACnI;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4DAA4D;AAC5E;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AClHA;AACA;AACA;AACoC;AACG;AACV;AACO;AACpC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA,6BAA6B,6CAAO;AACpC;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,2DAAqB;AAC7B;AACA;AACA;AACA;AAC0B;;;;;;;;;;;;;;;;;;;;;ACrE1B;AACA;AACoC;AACE;AACJ;AACK;AACkB;AAClD;AACP;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACO,oBAAoB,6CAAO;AAClC;AACA,eAAe,sDAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+CAAQ;AACrC;AACA;AACA;AACA,2BAA2B,0DAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,yCAAyC,sDAAiB,EAAE;AAChG;AACA,8BAA8B,+CAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA,YAAY,8CAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC/PA;AACA;AACA;AACA;AACA;AACA;AACsC;AACtC;AACO;AACP;AACA;AACA,mBAAmB,mDAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,mBAAmB,mDAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACsD;AACP;AACZ;AACF;AACE;AACU;AACY;AACtB;AACE;AACQ;AACV;AACc;AACA;AACD;AACX;AACrC;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kDAAkD,6DAAY;AAC9D;AACA;AACA;AACA,0CAA0C,MAAM;AAChD;AACA;AACA;AACA;AACA;AACA,gDAAgD,qDAAS;AACzD;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA,oBAAoB,8CAAK,WAAW,wDAAe;AACnD;AACA,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA,gBAAgB,8CAAK,WAAW,wDAAe;AAC/C;AACA,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA,gBAAgB,8CAAK,WAAW,wDAAe;AAC/C;AACA,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA,SAAS,kBAAkB,uDAAU;AACrC,YAAY,qDAAS;AACrB;AACA;AACA,SAAS,kBAAkB,uDAAU;AACrC,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,6BAA6B,uDAAU;AACvC,6BAA6B,uDAAU;AACvC,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,6BAA6B,uDAAU;AACvC,6BAA6B,uDAAU;AACvC,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT;AACA,IAAI,wDAAkB,eAAe,WAAW;AAChD,kBAAkB,yDAAkB;AACpC,sBAAsB,8CAAK;AAC3B;AACA;AACA,KAAK;AACL;AACA,0BAA0B,qDAAS,GAAG,eAAe;AACrD;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA,4BAA4B,uDAAgB;AAC5C,IAAI,sFAAmC;AACvC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,cAAc,0BAA0B;AACxC;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA;AACA;AACA,yBAAyB,wEAAwE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yEAAyE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iEAAiE;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kEAAsB,cAAc,oBAAoB;AAC5D;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,+BAA+B,yDAAkB,gCAAgC,iBAAiB;AAClG;AACA,gBAAgB,gBAAgB;AAChC,gCAAgC,kDAAkD;AAClF;AACA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,yBAAyB,8CAA8C,+CAAO,EAAE;AAChF,wCAAwC,iBAAiB;AACzD,2CAA2C,4BAA4B;AACvE;AACA;AACA;AACA,wEAAwE,gEAAmB;AAC3F;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,cAAc,0BAA0B;AACxC;AACA;AACA,yBAAyB,qCAAqC;AAC9D;AACA;AACA;AACA,yBAAyB,qCAAqC;AAC9D;AACA;AACA;AACA,yBAAyB,6CAA6C;AACtE;AACA;AACA;AACA;AACA,yBAAyB,oDAAoD;AAC7E;AACA;AACA;AACA;AACA,yBAAyB,mDAAmD;AAC5E;AACA;AACA;AACA;AACA;AACA,yBAAyB,0DAA0D;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kEAAsB,aAAa,oBAAoB;AAC3D;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,cAAc,0BAA0B;AACxC;AACA;AACA,yBAAyB,gEAAgE;AACzF;AACA;AACA;AACA,yBAAyB,4FAA4F;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6FAA6F;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kEAAsB,aAAa,oBAAoB;AAC3D;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA;AACA;AACA,oCAAoC,iEAAe;AACnD;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA,QAAQ,uDAAgB;AACxB,QAAQ,uDAAgB;AACxB;AACA,cAAc,2EAAwB;AACtC;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA,qBAAqB,gEAAgE;AACrF;AACA;AACA;AACA;AACA;AACA,qBAAqB,+DAA+D;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,gEAAgE;AACrF;AACA;AACA;AACA;AACA;AACA,qBAAqB,+DAA+D;AACpF;AACA;AACA;AACA;AACA,qBAAqB,gEAAgE;AACrF;AACA;AACA;AACA;AACA;AACA,qBAAqB,+DAA+D;AACpF;AACA;AACA;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,cAAc,0BAA0B;AACxC;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA;AACA,yBAAyB,wEAAwE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yEAAyE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iEAAiE;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kEAAkE;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kEAAsB,aAAa,oBAAoB;AAC3D;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,cAAc,0BAA0B;AACxC;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA;AACA,yBAAyB,wEAAwE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yEAAyE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iEAAiE;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oDAAoD;AAC7E;AACA;AACA;AACA;AACA;AACA,IAAI,kEAAsB,aAAa,oBAAoB;AAC3D;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,cAAc,0BAA0B;AACxC;AACA;AACA,yBAAyB,mDAAmD;AAC5E;AACA;AACA;AACA;AACA;AACA,yBAAyB,mDAAmD;AAC5E;AACA,sBAAsB,mDAAmD;AACzE;AACA,yBAAyB,mDAAmD;AAC5E;AACA;AACA;AACA;AACA,yBAAyB,mDAAmD;AAC5E;AACA;AACA;AACA;AACA,yBAAyB,mDAAmD;AAC5E;AACA,sBAAsB,mDAAmD;AACzE;AACA,yBAAyB,mDAAmD;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAS;AAChC,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAS;AAChC,SAAS;AACT,KAAK;AACL,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC,IAAI,kEAAsB;AAC1B;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,qCAAqC;AAC/C,UAAU,uCAAuC;AACjD,UAAU,uCAAuC;AACjD,UAAU,yCAAyC;AACnD,UAAU,yCAAyC;AACnD,UAAU,qCAAqC;AAC/C,UAAU,uCAAuC;AACjD,UAAU,yCAAyC;AACnD,UAAU,yCAAyC;AACnD,UAAU,uCAAuC;AACjD,UAAU,uCAAuC;AACjD,UAAU,qCAAqC;AAC/C;AACA,0BAA0B,6CAA6C;AACvE,4CAA4C,mBAAmB;AAC/D;AACA;AACA,iBAAiB,wDAAe;AAChC,yBAAyB,0DAAW;AACpC;AACA,IAAI,wEAA2B;AAC/B,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA,oCAAoC,wDAAe;AACnD,IAAI,wEAA2B;AAC/B,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC;AACA,oCAAoC,wDAAe;AACnD,IAAI,wEAA2B;AAC/B,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,gBAAgB,aAAa;AAC7B,oFAAoF,YAAY;AAChG,oCAAoC,wDAAe;AACnD,IAAI,wEAA2B;AAC/B,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA,qCAAqC,wDAAe;AACpD,qCAAqC,wDAAe;AACpD;AACA,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA,qCAAqC,wDAAe;AACpD,qCAAqC,wDAAe;AACpD;AACA,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA,qCAAqC,wDAAe;AACpD,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA,qCAAqC,wDAAe;AACpD,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA,qCAAqC,wDAAe;AACpD,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA,qCAAqC,wDAAe;AACpD,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,cAAc,0BAA0B;AACxC;AACA;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA;AACA,yBAAyB,wEAAwE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yEAAyE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iEAAiE;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kEAAsB;AAC1B;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,wEAAqB;AACM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACl+B3B;AACA;AACA;AACA;AACA;AACA;AACA;AACsD;AACoB;AACvB;AAChB;AACA;AACA;AACuB;AACb;AACM;AACR;AACN;AACQ;AACV;AACM;AACE;AACF;AACJ;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,kBAAkB,yEAAsB;AACxC;AACA,oCAAoC,kDAAO;AAC3C,sCAAsC,sDAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mDAAQ;AACjC,IAAI,yEAA8B;AAClC,cAAc,2EAAwB;AACtC;AACA,oBAAoB,OAAO;AAC3B;AACA,oBAAoB,aAAa;AACjC,kCAAkC,UAAU;AAC5C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,oDAAoD,MAAM;AAC1D,yCAAyC,iEAAsB;AAC/D;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS,kBAAkB,uDAAU;AACrC;AACA,0BAA0B,kBAAkB;AAC5C;AACA,SAAS,kBAAkB,2CAAI;AAC/B;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,qCAAqC,uDAAU,eAAe,iDAAU;AACxE;AACA,oBAAoB,qCAAqC;AACzD,oBAAoB,4CAA4C;AAChE;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,4CAA4C,uDAAU,eAAe,iDAAU;AAC/E;AACA,oBAAoB,qCAAqC,oCAAoC,mBAAmB;AAChH,oBAAoB,4CAA4C,sCAAsC,mBAAmB;AACzH;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS,kBAAkB,uDAAU;AACrC;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS;AACT,6BAA6B,uDAAU,kBAAkB,iDAAU,aAAa,wDAAiB,EAAE,uDAAgB;AACnH,6BAA6B,uDAAU;AACvC;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,gBAAgB,sDAAe;AAC/B,sBAAsB,oDAAQ;AAC9B,qCAAqC,uDAAU,eAAe,iDAAU,aAAa,wDAAiB,EAAE,uDAAgB;AACxH;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS,kBAAkB,kDAAO;AAClC;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS,uDAAuD,0EAA6B;AAC7F;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS,uDAAuD,0EAA6B;AAC7F;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS,uDAAuD,0EAA6B;AAC7F;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS,uDAAuD,0EAA6B;AAC7F;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,mDAAmD,uDAAU,eAAe,iDAAU;AACtF;AACA,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8BAA8B;AAClD,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8BAA8B;AAClD,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8BAA8B;AAClD,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8BAA8B;AAClD,8CAA8C,6EAAgC;AAC9E,8CAA8C,6EAAgC;AAC9E,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,8CAA8C,6EAAgC;AAC9E,8CAA8C,6EAAgC;AAC9E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,8CAA8C,6EAAgC;AAC9E,8CAA8C,6EAAgC;AAC9E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,8CAA8C,6EAAgC;AAC9E,8CAA8C,6EAAgC;AAC9E,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,8CAA8C,6EAAgC;AAC9E,8CAA8C,6EAAgC;AAC9E;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,qCAAqC,uDAAU,eAAe,iDAAU,sCAAsC,8EAAiC;AAC/I;AACA,oBAAoB,8BAA8B;AAClD,oBAAoB,8BAA8B;AAClD,oBAAoB,8BAA8B;AAClD,oBAAoB,8BAA8B;AAClD;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,YAAY,sDAAS,GAAG,8BAA8B,kBAAkB,uDAAU,kCAAkC,8EAAiC;AACrJ,YAAY,sDAAS,GAAG,8BAA8B,kBAAkB,uDAAU,kCAAkC,8EAAiC;AACrJ,YAAY,sDAAS,GAAG,8BAA8B,kBAAkB,uDAAU,mCAAmC,8EAAiC;AACtJ,YAAY,sDAAS,GAAG,8BAA8B,kBAAkB,uDAAU,kCAAkC,8EAAiC;AACrJ;AACA,qBAAqB,2CAAI;AACzB,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,uDAAU;AAC/E,iBAAiB,sDAAe;AAChC;AACA;AACA,oBAAoB,QAAQ;AAC5B,0BAA0B,8CAAK;AAC/B;AACA,wBAAwB,8BAA8B;AACtD,wBAAwB,8BAA8B;AACtD,wBAAwB,4CAA4C;AACpE,wBAAwB,8BAA8B;AACtD;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,uDAAU;AAC/E,iBAAiB,sDAAe;AAChC;AACA;AACA,oBAAoB,QAAQ;AAC5B,0BAA0B,8CAAK;AAC/B;AACA,wBAAwB,kDAAkD;AAC1E,wBAAwB,gEAAgE;AACxF,wBAAwB,kDAAkD;AAC1E,wBAAwB,kDAAkD;AAC1E;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,yBAAyB,kDAAO;AAChC;AACA;AACA,KAAK;AACL;AACA,yBAAyB,kDAAO;AAChC;AACA;AACA;AACA,KAAK;AACL,+CAA+C,kDAAO;AACtD,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,uCAAuC;AAC/E,8BAA8B,uDAAU,uCAAuC;AAC/E,8BAA8B,uDAAU,uCAAuC;AAC/E,8BAA8B,uDAAU,uCAAuC;AAC/E,sBAAsB,8CAAK,CAAC,mDAAY,UAAU,wDAAe;AACjE;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS,uDAAuD,OAAO;AAC/E;AACA;AACA;AACA,wEAAqB;AACM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnY3B;AACA;AACA;AACA;AACsD;AACH;AAChB;AACA;AACA;AACU;AACM;AACd;AACS;AACD;AACV;AACM;AACE;AACN;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,0EAA0E,wBAAwB;AAClG,iEAAiE,wBAAwB;AACzF,0EAA0E,wBAAwB;AAClG,0EAA0E,wBAAwB;AAClG,yEAAyE,wBAAwB;AACjG,iEAAiE,0BAA0B;AAC3F,uEAAuE,4BAA4B;AACnG,sEAAsE,4BAA4B;AAClG,2EAA2E,8BAA8B;AACzG,oEAAoE,wBAAwB;AAC5F,gDAAgD,wBAAwB;AACxE,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAoB;AAC5C,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,aAAa;AAC1D;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB,4DAAoB,EAAE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE;AACA,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C;AACA,sDAAsD,gEAAiB;AACvE;AACA;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE;AACA,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C;AACA,sDAAsD,kEAAmB;AACzE;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE;AACA,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C;AACA,sDAAsD,gEAAiB;AACvE;AACA;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE;AACA,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C;AACA,iDAAiD,+DAAgB;AACjE;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,wBAAwB,4DAAoB;AAC5C;AACA;AACA;AACA,6CAA6C,aAAa;AAC1D;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB,4DAAoB,EAAE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE;AACA,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,sDAAsD,gEAAiB;AACvE;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE;AACA,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C;AACA,iDAAiD,kEAAmB;AACpE;AACA;AACA;AACA,0CAA0C,qDAAS;AACnD,sBAAsB,6CAAK;AAC3B;AACA,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,0CAA0C,qDAAS;AACnD,sBAAsB,6CAAK;AAC3B;AACA,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE;AACA;AACA,gBAAgB,QAAQ;AACxB,qCAAqC,2DAAY;AACjD,qCAAqC,2DAAY;AACjD;AACA,yCAAyC,2DAAY;AACrD;AACA;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE;AACA,gBAAgB,QAAQ;AACxB,qCAAqC,2DAAY;AACjD,qCAAqC,2DAAY;AACjD;AACA,yCAAyC,2DAAY;AACrD;AACA;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,qCAAqC,iDAAiD;AACtF,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,IAAI,mEAAuB;AAC3B;AACA,uBAAuB,6CAAK;AAC5B;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA,qCAAqC,2DAAY;AACjD;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA,yBAAyB,sDAAe;AACxC,sBAAsB,oDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,4BAA4B,kDAAO;AACnC;AACA;AACA,KAAK;AACL;AACA,4BAA4B,kDAAO;AACnC;AACA;AACA;AACA,KAAK;AACL,+CAA+C,kDAAO;AACtD,8BAA8B,2DAAY,2BAA2B;AACrE,8BAA8B,2DAAY,2BAA2B;AACrE,8BAA8B,2DAAY,2BAA2B;AACrE,8BAA8B,2DAAY,2BAA2B;AACrE,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,sBAAsB,8CAAK,CAAC,mDAAY,UAAU,wDAAe;AACjE;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA,wEAAqB;AACQ;;;;;;;;;;;;;;;;;;;;AC3b7B;AACA;AACA;AACA;AACA;AACA;AAC8D;AAC3B;AACQ;AACN;AACF;AACnC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yGAAyG,aAAa;AACtH;AACA,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,iGAAiG,aAAa;AAC9G;AACA,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA,sDAAsD,8CAAO;AAC7D,sDAAsD,8CAAO;AAC7D,sDAAsD,8CAAO;AAC7D,sDAAsD,8CAAO;AAC7D,sDAAsD,gDAAS;AAC/D,sDAAsD,gDAAS;AAC/D;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,KAAK;AACL,wBAAwB,mDAAQ;AAChC,kBAAkB,4DAAqB;AACvC,sDAAsD,gDAAS;AAC/D,sDAAsD,gDAAS;AAC/D,sDAAsD,8CAAO;AAC7D,sDAAsD,gDAAS;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,sGAAsG,aAAa;AACnH,wBAAwB,mDAAQ,YAAY,mDAAQ,YAAY,mDAAQ;AACxE;AACA,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,iFAAiF,aAAa;AAC9F,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yIAAyI,aAAa;AACtJ,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yIAAyI,aAAa;AACtJ,kBAAkB,yDAAkB;AACpC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yIAAyI,aAAa;AACtJ,kBAAkB,yDAAkB;AACpC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yIAAyI,aAAa;AACtJ,kBAAkB,yDAAkB;AACpC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yIAAyI,aAAa;AACtJ,kBAAkB,yDAAkB;AACpC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY,KAAK,aAAa;AAClD,kBAAkB,yDAAkB;AACpC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY,KAAK,aAAa;AAClD,kBAAkB,yDAAkB;AACpC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,2EAA2E,aAAa;AACxF,kBAAkB,yDAAkB;AACpC,qBAAqB,mDAAQ;AAC7B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,uEAAuE,aAAa;AACpF,kBAAkB,yDAAkB;AACpC,qBAAqB,mDAAQ;AAC7B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,6BAA6B,OAAO;AACpC,0FAA0F,aAAa;AACvG,6BAA6B,QAAQ;AACrC,sEAAsE,aAAa;AACnF,6BAA6B,QAAQ;AACrC;AACA;AACA,KAAK;AACL;AACA;AACA,WAAW,4DAAqB,oBAAoB,gEAAyB;AAC7E,WAAW,4DAAqB,oBAAoB,gEAAyB;AAC7E,WAAW,4DAAqB,oBAAoB,gEAAyB;AAC7E;AACA;AACA,IAAI,gEAAwB;AAC5B;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,6BAA6B,OAAO;AACpC,0FAA0F,aAAa;AACvG,6BAA6B,QAAQ;AACrC,sEAAsE,aAAa;AACnF,6BAA6B,QAAQ;AACrC,uGAAuG,eAAe;AACtH,wBAAwB,mDAAQ;AAChC,wBAAwB,mDAAQ,YAAY,mDAAQ;AACpD,wBAAwB,mDAAQ,aAAa,mDAAQ,aAAa,mDAAQ;AAC1E;AACA;AACA;AACA,WAAW,4DAAqB;AAChC,WAAW,4DAAqB;AAChC,WAAW,4DAAqB;AAChC;AACA;AACA,IAAI,gEAAwB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA,yDAAyD,mCAAmC;AAC5F,SAAS,aAAa;AACtB,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,gBAAgB;AAC5B,wGAAwG,aAAa;AACrH,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,wGAAwG,aAAa;AACrH,kBAAkB,4DAAqB,mBAAmB,gEAAyB;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,iFAAiF,aAAa;AAC9F,kBAAkB,4DAAqB,wBAAwB,mDAAQ,YAAY,mDAAQ,YAAY,mDAAQ;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,8EAA8E,aAAa;AAC3F,kBAAkB,4DAAqB,wBAAwB,mDAAQ,YAAY,mDAAQ,YAAY,mDAAQ;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,KAAK;AACL,kBAAkB,4DAAqB,wBAAwB,mDAAQ,YAAY,mDAAQ,YAAY,mDAAQ;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,+FAA+F,aAAa;AAC5G,kBAAkB,4DAAqB,wBAAwB,mDAAQ,YAAY,mDAAQ,YAAY,mDAAQ;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yDAAkB,yBAAyB,uBAAuB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,yDAAM;AACnB,kBAAkB,yDAAkB,yBAAyB,uBAAuB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA,aAAa,yDAAM;AACnB,kBAAkB,yDAAkB;AACpC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA,kBAAkB,yDAAkB;AACpC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA,kBAAkB,yDAAkB,yBAAyB,kBAAkB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA,kBAAkB,yDAAkB;AACpC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA,kBAAkB,yDAAkB;AACpC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA,kBAAkB,yDAAkB;AACpC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,cAAc;AACjC,kBAAkB,yDAAkB;AACpC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACc;;;;;;;;;;;;;;;;;ACzjBnC;AACA;AACA;AACA;AAC8D;AACT;AACrD;AACA;AACA;AACA,QAAQ,wEAAqB;AAC7B,KAAK;AACL;AACA;AACA,yBAAyB,gDAAQ;AACjC,IAAI,sEAA8B;AAClC;AACA;AACA,cAAc,2EAAwB;AACtC,gCAAgC,oBAAoB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qCAAqC;AACvE;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA,6EAA6E,YAAY,WAAW,yDAAM;AAC1G,oCAAoC,4CAA4C;AAChF;AACA,KAAK;AACL;AACA;AACA;AACA,oBAAoB,qDAAqD;AACzE;AACA,oBAAoB,6CAA6C,cAAc,KAAK;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,aAAa;AACrD;AACA;AACA,sBAAsB,sEAAsE;AAC5F,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA,2CAA2C,+BAA+B;AAC1E,2CAA2C,+BAA+B;AAC1E,2CAA2C,+BAA+B;AAC1E;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,kFAAkF,cAAc,WAAW,yDAAM;AACjH,KAAK;AACL,wCAAwC,gCAAgC;AACxE,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA;AACA;AACA,sBAAsB,sEAAsE;AAC5F,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA,2CAA2C,+BAA+B;AAC1E,2CAA2C,+BAA+B;AAC1E,2CAA2C,+BAA+B;AAC1E;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,kFAAkF,cAAc,WAAW,yDAAM;AACjH,KAAK;AACL,wCAAwC,gCAAgC;AACxE,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA;AACA;AACA;AACA,kFAAkF,YAAY,WAAW,yDAAM;AAC/G,KAAK;AACL,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,YAAY,WAAW,yDAAM;AACpH;AACA,KAAK;AACL;AACA;AACA;AACA,oBAAoB,iDAAiD,cAAc,KAAK;AACxF;AACA;AACA;AACA;AACA;AACA,wCAAwC,gCAAgC;AACxE,wCAAwC,aAAa;AACrD,wCAAwC,gCAAgC;AACxE;AACA;AACA,gCAAgC,0DAA0D;AAC1F,sBAAsB,2CAA2C;AACjE;AACA;AACA;AACA,uBAAuB,cAAc;AACrC,4FAA4F,cAAc,WAAW,yDAAM;AAC3H;AACA,KAAK;AACL;AACA,wCAAwC,gCAAgC;AACxE,6CAA6C,gBAAgB;AAC7D;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL,iBAAiB,4BAA4B;AAC7C;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC,kFAAkF,YAAY,WAAW,yDAAM;AAC/G;AACA,KAAK;AACL,sBAAsB,qCAAqC,cAAc,KAAK;AAC9E;AACA,wCAAwC,aAAa;AACrD;AACA;AACA,sBAAsB,yEAAyE;AAC/F,sBAAsB,kDAAkD,cAAc,KAAK;AAC3F;AACA,4CAA4C,+BAA+B;AAC3E,4CAA4C,+BAA+B;AAC3E,4CAA4C,+BAA+B;AAC3E,yCAAyC,aAAa;AACtD;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,mFAAmF,cAAc,WAAW,yDAAM;AAClH,KAAK;AACL,yCAAyC,gCAAgC;AACzE,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA;AACA;AACA,sBAAsB,yEAAyE;AAC/F;AACA;AACA;AACA,uBAAuB,cAAc;AACrC,8FAA8F,cAAc,WAAW,yDAAM;AAC7H;AACA,KAAK;AACL;AACA,4CAA4C,+BAA+B;AAC3E,4CAA4C,+BAA+B;AAC3E,4CAA4C,+BAA+B;AAC3E,yCAAyC,gCAAgC;AACzE,yCAAyC,gCAAgC;AACzE;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC,mFAAmF,cAAc,WAAW,yDAAM;AAClH;AACA,KAAK;AACL;AACA;AACA;AACA,oBAAoB,2DAA2D,cAAc,KAAK;AAClG;AACA;AACA;AACA;AACA;AACA,yCAAyC,gCAAgC;AACzE,yCAAyC,aAAa;AACtD,yCAAyC,gCAAgC;AACzE;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC,wEAAwE,YAAY,WAAW,yDAAM;AACrG;AACA,KAAK;AACL,sBAAsB,2DAA2D,cAAc,KAAK;AACpG;AACA,yCAAyC,aAAa;AACtD,yCAAyC,aAAa;AACtD;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC,mFAAmF,YAAY,WAAW,yDAAM;AAChH;AACA,KAAK;AACL,sBAAsB,kDAAkD,cAAc,KAAK;AAC3F;AACA,yCAAyC,aAAa;AACtD,yCAAyC,aAAa;AACtD;AACA;AACA;AACA;AACA,6BAA6B,gBAAgB,2CAA2C,yDAAM;AAC9F,KAAK;AACL,uBAAuB,8DAAsB;AAC7C;AACA,oBAAoB,gDAAgD,cAAc,KAAK;AACvF,uBAAuB,8DAAsB;AAC7C;AACA,yCAAyC,aAAa;AACtD,yCAAyC,aAAa;AACtD;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC,mFAAmF,cAAc,WAAW,yDAAM;AAClH,oCAAoC,8CAA8C;AAClF;AACA,KAAK;AACL,uBAAuB,gEAAwB;AAC/C,sBAAsB,gCAAgC,cAAc,KAAK,gBAAgB,gEAAwB;AACjH;AACA;AACA,yCAAyC,gCAAgC;AACzE;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC,8FAA8F,cAAc,WAAW,yDAAM;AAC7H;AACA,KAAK;AACL,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA,yCAAyC,gCAAgC;AACzE;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,IAAI,uEAA+B;AACnC;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;;ACxWzB;AACA;AACA;AACA;AACsD;AACpB;AACyB;AAC3D;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,iBAAiB,2DAAY,EAAE,0DAAW;AAC1C,cAAc,iEAAqB;AACnC,cAAc,iEAAkB;AAChC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,sBAAsB,gEAAgE;AACtF,oBAAoB,gBAAgB;AACpC;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD;AACA;AACA;AACA;AACA,4BAA4B,uDAAqB;AACjD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,sBAAsB,gEAAgE;AACtF,oBAAoB,gBAAgB;AACpC;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD;AACA,wBAAwB,6EAA6E;AACrG;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACG;;;;;;;;;;;;;;;;;AC/DxB;AACA;AACA;AACA;AACA;AAC8D;AACiD;AAC/G;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,YAAY;AAC3F,aAAa,yDAAM,KAAK,aAAa;AACrC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,YAAY,mCAAmC,YAAY,WAAW,yDAAM;AAC5H,gDAAgD,cAAc,qCAAqC,cAAc,WAAW,yDAAM;AAClI;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,YAAY;AAC1D,8CAA8C,YAAY;AAC1D,4BAA4B,YAAY;AACxC,iBAAiB,yDAAM;AACvB;AACA,uDAAuD,cAAc;AACrE,uDAAuD,cAAc;AACrE,4BAA4B,cAAc;AAC1C,iBAAiB,yDAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,YAAY,KAAK,6BAA6B;AACtH,sDAAsD,YAAY,KAAK,0BAA0B;AACjG,iBAAiB,yDAAM,KAAK,aAAa;AACzC;AACA,8EAA8E,cAAc;AAC5F;AACA,aAAa;AACb,sDAAsD,cAAc,KAAK,0BAA0B;AACnG,iBAAiB,yDAAM,KAAK,aAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,YAAY;AACjE;AACA,qDAAqD,YAAY,KAAK,yBAAyB,YAAY;AAC3G;AACA,qDAAqD,YAAY,KAAK,yBAAyB,YAAY;AAC3G,iBAAiB,yDAAM,KAAK,aAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA,+CAA+C,YAAY;AAC3D,+CAA+C,YAAY;AAC3D,aAAa,yDAAM;AACnB;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,iBAAiB,qCAAqC,kBAAkB;AACxE,iBAAiB,qCAAqC,kBAAkB;AACxE,iBAAiB,qCAAqC,kBAAkB;AACxE,iBAAiB,qCAAqC,kBAAkB;AACxE,iBAAiB,sCAAsC,kBAAkB;AACzE,iBAAiB,uCAAuC,kBAAkB;AAC1E;AACA;AACA,eAAe,+CAAO;AACtB,iBAAiB,iDAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,+HAA+H,YAAY;AAC3I,+HAA+H,cAAc;AAC7I;AACA;AACA;AACA;AACA,kCAAkC,wDAAwD;AAC1F;AACA;AACA;AACA;AACA,kCAAkC,wDAAwD;AAC1F;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA,KAAK,KAAK,eAAe;AACzB;AACA;AACA,KAAK,KAAK,eAAe;AACzB,aAAa,0CAA0C;AACvD,aAAa,2CAA2C;AACxD;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,8HAA8H,YAAY,KAAK,aAAa;AAC5J;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,oKAAoK,eAAe;AACnL;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC,aAAa,4BAA4B;AACzC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,8FAA8F,YAAY;AAC1G;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,iIAAiI,YAAY;AAC7I;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,2EAA2E,YAAY,MAAM,aAAa;AAC1G;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC,sEAAsE,cAAc;AACpF;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,+BAA+B,OAAO;AACtC;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC,eAAe,sCAAsC,iBAAiB;AACtE,oCAAoC,uDAAe;AACnD;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,+BAA+B,WAAW,iBAAiB;AAC3D;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,UAAU,kCAAkC,iBAAiB,kBAAkB;AAC/E,UAAU,kCAAkC,iBAAiB,kBAAkB;AAC/E,UAAU,kCAAkC,iBAAiB,kBAAkB;AAC/E,UAAU,kCAAkC,iBAAiB,kBAAkB;AAC/E,UAAU,kCAAkC,iBAAiB,kBAAkB;AAC/E,UAAU,kCAAkC,kBAAkB,kBAAkB;AAChF,UAAU,kCAAkC,kBAAkB,kBAAkB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI,0DAAkB;AACtB,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC,eAAe,sCAAsC,gBAAgB;AACrE,eAAe,uCAAuC,gBAAgB;AACtE,oCAAoC,uDAAe;AACnD;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,oCAAoC,uDAAe;AACnD,kBAAkB,6DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,SAAS;AACT,UAAU,cAAc,iBAAiB,sCAAsC;AAC/E,UAAU,cAAc,iBAAiB,uCAAuC;AAChF,UAAU,cAAc,iBAAiB,uCAAuC;AAChF,UAAU,cAAc,iBAAiB,uCAAuC;AAChF,UAAU,cAAc,iBAAiB,sCAAsC;AAC/E,UAAU,cAAc,iBAAiB,sCAAsC;AAC/E,UAAU,cAAc,iBAAiB,sCAAsC;AAC/E,UAAU,cAAc,iBAAiB,uCAAuC;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,aAAa,qCAAqC,kBAAkB;AACpE;AACA,aAAa,sCAAsC,kBAAkB;AACrE,oCAAoC,uDAAe;AACnD;AACA;AACA;AACA;AACA;AACA,oBAAoB,2EAAwB;AAC5C,kCAAkC,OAAO;AACzC;AACA,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,iDAAiD;AAC3D,UAAU,yDAAyD;AACnE,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,oDAAoD;AAC9D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,0DAA0D;AACpE,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA;AACA,gBAAgB,kDAAU;AAC1B;AACA,gBAAgB,uDAAe;AAC/B,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA,0CAA0C,qBAAqB,qEAA6B,QAAQ;AACpG;AACA;AACA,0CAA0C,qBAAqB,wEAAgC,QAAQ;AACvG,mBAAmB,eAAe;AAClC,mBAAmB,eAAe;AAClC,0CAA0C,uDAAe;AACzD,4EAA4E,cAAc;AAC1F;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,iDAAiD;AAC3D,UAAU,yDAAyD;AACnE,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,oDAAoD;AAC9D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,0DAA0D;AACpE,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA,uFAAuF,+BAA+B;AACtH,uFAAuF,+BAA+B;AACtH,aAAa,eAAe;AAC5B,aAAa,eAAe;AAC5B,oCAAoC,uDAAe;AACnD,sEAAsE,cAAc;AACpF;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,iDAAiD;AAC3D,UAAU,yDAAyD;AACnE,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,oDAAoD;AAC9D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,0DAA0D;AACpE,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA,uFAAuF,+BAA+B;AACtH,uFAAuF,+BAA+B;AACtH,uFAAuF,+BAA+B;AACtH,uFAAuF,+BAA+B;AACtH,aAAa,eAAe;AAC5B,aAAa,eAAe;AAC5B,aAAa,eAAe;AAC5B,aAAa,eAAe;AAC5B,qCAAqC,uDAAe;AACpD,qCAAqC,uDAAe;AACpD,sBAAsB,kBAAkB;AACxC,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA,wEAAqB;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACtpBrB;AACA;AACA;AACA;AACsD;AACnB;AACA;AACU;AACY;AACtB;AACM;AACE;AACM;AACjD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,iCAAiC,iDAAO;AACxC,oDAAoD,2CAAI;AACxD,uCAAuC,2CAAI;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS;AACT;AACA,IAAI,mEAAuB;AAC3B,4BAA4B,uDAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yEAAsB;AAC/C,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS;AACT;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS;AACT;AACA,IAAI,mEAAuB;AAC3B,4BAA4B,uDAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS;AACT;AACA,oBAAoB,kBAAkB;AACtC;AACA,uBAAuB,iEAAe;AACtC;AACA,gCAAgC,yDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gDAAS,WAAW,sDAAe,EAAE;AACpD,sBAAsB,mDAAQ;AAC9B;AACA,UAAU,MAAM,8CAAO,gBAAgB;AACvC,UAAU,MAAM,gDAAS,qBAAqB;AAC9C,UAAU,MAAM,8CAAO,eAAe;AACtC,UAAU,MAAM,gDAAS,YAAY;AACrC;AACA;AACA;AACA;AACA,0BAA0B,kBAAkB;AAC5C;AACA,SAAS;AACT;AACA,oBAAoB,kBAAkB;AACtC;AACA,sCAAsC,iEAAe;AACrD,gCAAgC,yDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yEAAsB;AAC/C,sBAAsB,mDAAQ;AAC9B;AACA,UAAU,MAAM,8CAAO,gBAAgB;AACvC,UAAU,MAAM,gDAAS,YAAY;AACrC,UAAU,MAAM,8CAAO,eAAe;AACtC,UAAU,MAAM,gDAAS,YAAY;AACrC;AACA;AACA,UAAU,MAAM,8CAAO,gBAAgB;AACvC,UAAU,MAAM,8CAAO,gBAAgB;AACvC,UAAU,MAAM,8CAAO,eAAe;AACtC,UAAU,MAAM,gDAAS,YAAY;AACrC,UAAU,MAAM,gDAAS,gBAAgB;AACzC,UAAU,MAAM,gDAAS,gBAAgB;AACzC,UAAU,MAAM,8CAAO,eAAe;AACtC,UAAU,MAAM,gDAAS,YAAY;AACrC;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,IAAI,mEAAuB;AAC3B,IAAI,uDAAgB;AACpB;AACA;AACA,wEAAqB;AACA;;;;;;;;;;;;;;;;;AC/NrB;AACA;AACA;AACA;AACsD;AACX;AAC3C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,mBAAmB,mDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mDAAW;AAChC,qBAAqB,mDAAW;AAChC,wBAAwB,mDAAW;AACnC,SAAS;AACT;AACA;AACA,qBAAqB,mDAAW;AAChC,qBAAqB,mDAAW;AAChC,wBAAwB,mDAAW;AACnC,SAAS;AACT;AACA;AACA,qBAAqB,mDAAW;AAChC,qBAAqB,mDAAW;AAChC,wBAAwB,mDAAW;AACnC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,wEAAqB;AACO;;;;;;;;;;;;;;;;;;;;;;;;ACxD5B;AACA;AACA;AACA;AACsD;AACP;AACE;AACd;AACU;AACF;AACN;AACQ;AACN;AACvC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,sBAAsB,gBAAgB,qFAAuC;AAC7E,oBAAoB,gBAAgB,mFAAqC;AACzE;AACA,2EAA2E,gBAAgB;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gEAAuB;AAC7C;AACA;AACA,4BAA4B,4DAAqB;AACjD;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,6DAA6D,mDAAQ;AACrE;AACA,6DAA6D,mDAAQ;AACrE;AACA;AACA;AACA,2CAA2C,aAAa;AACxD;AACA;AACA;AACA,gCAAgC,4DAAoB;AACpD;AACA,gCAAgC,yBAAyB;AACzD;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA,gCAAgC,cAAc;AAC9C;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA,gCAAgC,cAAc;AAC9C,gCAAgC,cAAc;AAC9C;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC,wBAAwB,cAAc;AACtC,wBAAwB,cAAc;AACtC,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,aAAa;AACxD;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA,gCAAgC,cAAc;AAC9C,gCAAgC,cAAc;AAC9C;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC,wBAAwB,cAAc;AACtC,wBAAwB,cAAc;AACtC,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,aAAa;AACxD;AACA;AACA;AACA;AACA;AACA,wBAAwB,oCAAoC;AAC5D,wBAAwB,sCAAsC;AAC9D,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,0FAA0F,2CAA2C;AACrI;AACA,gCAAgC,sBAAsB;AACtD;AACA,uEAAuE,uDAAU;AACjF;AACA;AACA;AACA,2CAA2C,aAAa;AACxD;AACA;AACA;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B;AACA,wEAAwE,uDAAU;AAClF;AACA;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA,iCAAiC,kBAAkB;AACnD;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA,6BAA6B,oBAAoB;AACjD;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA,6BAA6B,mBAAmB;AAChD;AACA;AACA,uBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;AACA,6BAA6B,wBAAwB;AACrD;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B;AACA;AACA,2EAA2E,uDAAU;AACrF;AACA,2EAA2E,uDAAU;AACrF;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,0DAA0D,qDAAS,GAAG,oCAAoC;AAC1G,0BAA0B,6CAAK;AAC/B;AACA;AACA,wEAAwE,uDAAU;AAClF;AACA,wEAAwE,uDAAU;AAClF;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,yEAAyE,qDAAS,GAAG,gBAAgB;AACrG,gCAAgC,sBAAsB;AACtD;AACA;AACA,+FAA+F,WAAW;AAC1G;AACA,+FAA+F,WAAW;AAC1G;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C;AACA;AACA,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA,wEAAqB;AACO;;;;;;;;;;;;;;;;ACnZ5B;AACA;AACA;AACA;AACsD;AACtD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,sBAAsB,8CAA8C;AACpE,qBAAqB,yBAAyB,iBAAiB;AAC/D,sBAAsB,4CAA4C;AAClE,qBAAqB,0BAA0B,iBAAiB;AAChE,sBAAsB,6CAA6C;AACnE,qBAAqB,4BAA4B,iBAAiB;AAClE,sBAAsB,+CAA+C;AACrE,qBAAqB,yBAAyB,iBAAiB;AAC/D,sBAAsB,4CAA4C;AAClE,qBAAqB,kCAAkC,iBAAiB;AACxE,sBAAsB,qDAAqD;AAC3E,qBAAqB,+BAA+B,iBAAiB;AACrE,sBAAsB,kDAAkD;AACxE,qBAAqB,+BAA+B,iBAAiB;AACrE,sBAAsB,kDAAkD;AACxE,qBAAqB,4BAA4B,iBAAiB;AAClE,sBAAsB,+CAA+C;AACrE,qBAAqB,2BAA2B,iBAAiB;AACjE,sBAAsB,8CAA8C;AACpE,qBAAqB,2BAA2B,oCAAoC;AACpF,sBAAsB,gEAAgE;AACtF,qBAAqB,2BAA2B,oCAAoC;AACpF,sBAAsB,+DAA+D;AACrF;AACA,4BAA4B,cAAc;AAC1C;AACA;AACA;AACA;AACA,wEAAqB;AACA;;;;;;;;;;;;;;;;;ACtIrB;AACA;AACA;AACA;AACsD;AACjB;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+EAA+E;AAC7G;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8BAA8B,+EAA+E;AAC7G;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8BAA8B,qEAAqE;AACnG;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,0BAA0B,iDAAiD;AAC3E,0BAA0B,sCAAsC;AAChE,0BAA0B,kCAAkC;AAC5D;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAuD;AACjF,0BAA0B,wCAAwC;AAClE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+DAA+D;AACzF,0BAA0B,wCAAwC;AAClE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAA8D;AACxF,0BAA0B,yCAAyC;AACnE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAA8D;AACxF,0BAA0B,yCAAyC;AACnE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAuD;AACjF,0BAA0B,wCAAwC;AAClE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+DAA+D;AACzF,0BAA0B,wCAAwC;AAClE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAA8D;AACxF,0BAA0B,yCAAyC;AACnE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAA8D;AACxF,0BAA0B,yCAAyC;AACnE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAuD;AACjF,0BAA0B,wCAAwC;AAClE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+DAA+D;AACzF,0BAA0B,wCAAwC;AAClE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAA8D;AACxF,0BAA0B,yCAAyC;AACnE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAA8D;AACxF,0BAA0B,yCAAyC;AACnE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,cAAc,2EAAwB,gBAAgB,4DAAoB;AAC1E;AACA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA,wCAAwC,YAAY;AACpD;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C,mFAAmF,0BAA0B;AAC7G;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,oDAAoD,qBAAqB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;ACrT1B;AACA;AACA;AACA;AAC8D;AACjB;AAC7C;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2EAAwB;AAChD,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA,iBAAiB,yDAAM;AACvB;AACA,kDAAkD,aAAa;AAC/D;AACA;AACA;AACA;AACA;AACA,iDAAiD,YAAY;AAC7D,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL,CAAC;AACD,kDAAkD,YAAY;AAC9D,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL,CAAC;AACD,oDAAoD,YAAY;AAChE,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL,CAAC;AACD,8CAA8C,YAAY;AAC1D,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8DAAsB;AAC5C,0BAA0B,+DAAuB;AACjD;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,cAAc;AAChC;AACA,SAAS;AACT,KAAK;AACL,CAAC;AACD,wEAAqB;AACC;;;;;;;;;;;;;;;;;;;;;;;;;ACvItB;AACA;AACA;AACA;AACsD;AACnB;AACF;AACY;AACY;AACtB;AACE;AACQ;AACI;AACZ;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,gCAAgC,iEAAe;AAC/C;AACA,QAAQ,yDAAW;AACnB;AACA,IAAI,uDAAgB;AACpB;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA,YAAY,qDAAS,GAAG,mDAAmD;AAC3E,YAAY,qDAAS,GAAG,+DAA+D;AACvF,YAAY,qDAAS,GAAG,gEAAgE;AACxF,YAAY,qDAAS,GAAG,mDAAmD;AAC3E,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS,GAAG,uEAAuE;AAC/F,YAAY,qDAAS,GAAG,sEAAsE;AAC9F,YAAY,qDAAS,GAAG,wEAAwE;AAChG,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS,GAAG,4FAA4F;AACpH,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS,GAAG,uEAAuE;AAC/F;AACA,IAAI,wDAAkB,UAAU,WAAW;AAC3C,IAAI,wDAAkB,mCAAmC,WAAW;AACpE,IAAI,wDAAkB,yBAAyB,WAAW;AAC1D,qBAAqB,2CAAI;AACzB,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA,YAAY,qDAAS,GAAG,gEAAgE;AACxF,YAAY,qDAAS,GAAG,gEAAgE;AACxF,YAAY,qDAAS,GAAG,gEAAgE;AACxF,YAAY,qDAAS,GAAG,gEAAgE;AACxF,YAAY,qDAAS,GAAG,gEAAgE;AACxF;AACA,IAAI,wDAAkB,iDAAiD,WAAW;AAClF,IAAI,wDAAkB,iDAAiD,WAAW;AAClF,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB;AACtB;AACA,YAAY,qDAAS,GAAG,+DAA+D;AACvF,YAAY,qDAAS,GAAG,+DAA+D;AACvF,YAAY,qDAAS,GAAG,+DAA+D;AACvF,YAAY,qDAAS,GAAG,sEAAsE;AAC9F,YAAY,qDAAS,GAAG,+DAA+D;AACvF;AACA,IAAI,wDAAkB,WAAW,WAAW;AAC5C,IAAI,wDAAkB,gBAAgB,WAAW;AACjD,uBAAuB,6CAAK,WAAW,uDAAe;AACtD,uBAAuB,6CAAK,WAAW,uDAAe;AACtD,0BAA0B,qDAAS;AACnC;AACA;AACA;AACA,6BAA6B,uDAAgB;AAC7C,6BAA6B,uDAAgB;AAC7C,IAAI,sFAAmC;AACvC;AACA;AACA,wEAAqB;AACD;;;;;;;;;;;;;;;;;;;;;;;;AC7HpB;AACA;AACA;AACA;AACsD;AACH;AACN;AACU;AACZ;AACM;AACM;AACpB;AACI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,8DAA8D,cAAc;AAC5E,0CAA0C,YAAY;AACtD;AACA,KAAK;AACL;AACA;AACA;AACA,8DAA8D,cAAc;AAC5E,KAAK;AACL;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,8DAA8D,cAAc;AAC5E,yCAAyC,YAAY;AACrD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,8DAA8D,cAAc;AAC5E,KAAK;AACL;AACA;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,oEAAoE,cAAc;AAClF,8CAA8C,YAAY;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,sEAAsE,cAAc;AACpF,KAAK;AACL;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,oEAAoE,cAAc;AAClF,8CAA8C,YAAY;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,sEAAsE,cAAc;AACpF,KAAK;AACL;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,oEAAoE,cAAc;AAClF,8CAA8C,YAAY;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,sEAAsE,cAAc;AACpF,KAAK;AACL;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,uDAAuD,YAAY;AACnE,iEAAiE,YAAY;AAC7E,sDAAsD,YAAY;AAClE,iBAAiB,aAAa;AAC9B,gGAAgG,cAAc;AAC9G;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,0DAA0D,YAAY;AACtE,mEAAmE,YAAY;AAC/E,oDAAoD,YAAY;AAChE,iBAAiB,aAAa;AAC9B;AACA,0CAA0C,cAAc;AACxD,0DAA0D,cAAc;AACxE,kEAAkE,cAAc;AAChF,2DAA2D,cAAc;AACzE,iBAAiB,aAAa;AAC9B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B,+DAA+D,cAAc;AAC7E,IAAI,wEAA0B;AAC9B,2CAA2C,cAAc;AACzD,IAAI,wEAA0B;AAC9B;AACA;AACA;AACA,KAAK;AACL;AACA,0DAA0D,cAAc;AACxE,IAAI,wEAA0B;AAC9B;AACA;AACA;AACA,KAAK;AACL;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,2EAA2E,cAAc;AACzF,8CAA8C,YAAY;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,+DAA+D,cAAc;AAC7E,KAAK;AACL;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,qBAAqB;AACjC;AACA;AACA;AACA,8DAA8D,cAAc;AAC5E,wCAAwC,YAAY,iCAAiC,YAAY;AACjG;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,6BAA6B;AACzC;AACA,mEAAmE,cAAc;AACjF,kBAAkB,+DAAsB;AACxC,KAAK;AACL,wCAAwC,cAAc;AACtD;AACA;AACA,0CAA0C,YAAY;AACtD,gEAAgE,YAAY;AAC5E;AACA,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,sBAAsB,8BAA8B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,oEAAqB;AAC7E;AACA,wDAAwD,kEAAuB;AAC/E,wDAAwD,oEAAqB;AAC7E;AACA,wDAAwD,kEAAuB;AAC/E,mDAAmD,8CAAO;AAC1D,wDAAwD,oEAAqB;AAC7E;AACA,wDAAwD,kEAAuB;AAC/E,sDAAsD,gDAAS;AAC/D;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,sBAAsB,8BAA8B;AACpD;AACA;AACA,wDAAwD,wEAAuB;AAC/E;AACA,wDAAwD,iEAAsB;AAC9E;AACA,wDAAwD,wEAAuB;AAC/E;AACA,wDAAwD,kEAAuB;AAC/E;AACA,wDAAwD,wEAAuB;AAC/E;AACA,wDAAwD,kEAAuB;AAC/E;AACA;AACA;AACA;AACA,wDAAwD,wEAAuB;AAC/E;AACA,wDAAwD,iEAAsB;AAC9E,wDAAwD,wEAAuB;AAC/E;AACA,wDAAwD,iEAAsB;AAC9E,wDAAwD,wEAAuB;AAC/E;AACA,wDAAwD,iEAAsB;AAC9E;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,oIAAoI,cAAc;AAClJ,sBAAsB,0DAA0D;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;;ACtf1B;AACA;AACA;AACA;AACsD;AACb;AACK;AAC9C;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,4BAA4B,iDAAO,GAAG,YAAY,0CAA0C;AAC5F,wBAAwB,iDAAO;AAC/B,oBAAoB,0CAA0C;AAC9D,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kEAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,oBAAoB,2EAAwB;AAC5C,oCAAoC,YAAY;AAChD,wFAAwF,wEAAyB;AACjH,sEAAsE,eAAe;AACrF,sBAAsB,eAAe;AACrC,qEAAqE,wEAAyB;AAC9F,yEAAyE,eAAe;AACxF,sBAAsB,oCAAoC;AAC1D;AACA;AACA;AACA;AACA,wEAAqB;AACG;;;;;;;;;;;;;;;;;;;;;;;;;;;AClDxB;AACA;AACA;AACA;AACsD;AACP;AACZ;AACkB;AACZ;AACN;AACuB;AACP;AACN;AACI;AACN;AACN;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6DAAa;AACjC;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,qCAAqC,2DAAiB;AACtD;AACA;AACA;AACA,qBAAqB,uDAAU;AAC/B;AACA;AACA,4CAA4C;AAC5C;AACA,kDAAkD,uDAAgB;AAClE;AACA;AACA,uCAAuC,sDAAe;AACtD;AACA,uCAAuC,sDAAe,EAAE,uDAAgB;AACxE;AACA,uCAAuC,sDAAe;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2CAAI;AACtB;AACA;AACA,6EAA6E,sDAAe;AAC5F,2EAA2E,gDAAS;AACpF,6EAA6E,wDAAiB;AAC9F,4EAA4E,uDAAgB;AAC5F;AACA,kBAAkB,oDAAQ,GAAG,uBAAuB,cAAc;AAClE;AACA,mBAAmB,qDAAS,GAAG,8BAA8B;AAC7D,mBAAmB,qDAAS,GAAG,8BAA8B;AAC7D,mBAAmB,yDAAW,GAAG,qBAAqB;AACtD;AACA;AACA,mEAAmE,uDAAgB;AACnF;AACA,eAAe,yDAAkB;AACjC,uBAAuB,mEAA4B;AACnD;AACA;AACA;AACA;AACA;AACA,yBAAyB,mEAA4B,SAAS,4DAAqB;AACnF;AACA;AACA;AACA;AACA,yBAAyB,mEAA4B;AACrD;AACA;AACA;AACA,0BAA0B,2DAAY;AACtC;AACA;AACA;AACA,0DAA0D;AAC1D;AACA,8BAA8B,qDAAc,6BAA6B;AACzE;AACA,qBAAqB,qDAAc;AACnC;AACA;AACA;AACA,oBAAoB,2EAAwB;AAC5C,kCAAkC,OAAO;AACzC;AACA;AACA,4BAA4B,gEAAgE;AAC5F,4BAA4B,yDAAyD;AACrF,4BAA4B,gEAAgE;AAC5F;AACA,wBAAwB,8DAAkB;AAC1C;AACA,IAAI,8DAAkB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oDAAoD;AAC5E,8BAA8B,uEAA2B;AACzD;AACA;AACA;AACA;AACA;AACA,IAAI,8DAAkB;AACtB;AACA;AACA;AACA,IAAI,wDAAiB;AACrB,oBAAoB,2EAAwB;AAC5C,kCAAkC,OAAO;AACzC;AACA;AACA,4BAA4B,gEAAgE;AAC5F,4BAA4B,yDAAyD;AACrF,4BAA4B,gEAAgE;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3JrB;AACA;AACA;AACA;AACsD;AACP;AAC2B;AACvB;AAChB;AACA;AACF;AACE;AACY;AACF;AACU;AACJ;AAChB;AACQ;AACN;AACkB;AACV;AACV;AACgB;AACZ;AACA;AACF;AACE;AACvC;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,oFAAoF,sBAAsB;AAC1G,qGAAqG,qBAAqB;AAC1H,gFAAgF,qBAAqB;AACrG;AACA;AACA,0DAA0D,aAAa;AACvE;AACA;AACA;AACA;AACA;AACA,mEAAmE,4BAA4B;AAC/F,0EAA0E,4CAA4C;AACtH,uEAAuE,yCAAyC;AAChH,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iEAAuB;AAC7C;AACA;AACA,4BAA4B,4DAAqB;AACjD;AACA;AACA;AACA,mBAAmB,iDAAY;AAC/B;AACA,sBAAsB,sDAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAK,CAAC,mDAAY;AACzC,uBAAuB,8CAAK,CAAC,mDAAY;AACzC;AACA;AACA,0BAA0B,qDAAS;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA,4BAA4B,sDAAS,GAAG,6BAA6B;AACrE;AACA,mBAAmB,8CAAK;AACxB;AACA;AACA;AACA,gCAAgC,iBAAiB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,mDAAmD;AACpE,iBAAiB,mDAAmD;AACpE,iBAAiB,mDAAmD;AACpE,iBAAiB,mDAAmD;AACpE;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,mBAAmB;AAChD,uBAAuB,wBAAwB;AAC/C,SAAS;AACT;AACA;AACA,uCAAuC,cAAc;AACrD;AACA,qCAAqC,0BAA0B;AAC/D;AACA,qCAAqC,0BAA0B;AAC/D;AACA;AACA;AACA,4CAA4C,4BAA4B;AACxE;AACA,uCAAuC;AACvC;AACA;AACA;AACA,kCAAkC,gBAAgB;AAClD;AACA;AACA;AACA;AACA,4CAA4C,mBAAmB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oDAAQ;AACjC,IAAI,0EAA8B;AAClC,cAAc,2EAAwB;AACtC;AACA,gBAAgB,aAAa;AAC7B;AACA,uBAAuB,2CAAI;AAC3B,uBAAuB,8CAAK,WAAW,wDAAe;AACtD,2DAA2D,gBAAgB;AAC3E,uBAAuB,8CAAK,WAAW,wDAAe;AACtD;AACA;AACA;AACA;AACA;AACA,+BAA+B,6DAAoB;AACnD,6BAA6B,0BAA0B;AACvD,6BAA6B,2BAA2B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oDAAQ;AACjC,IAAI,0EAA8B;AAClC,cAAc,2EAAwB;AACtC;AACA,gBAAgB,aAAa;AAC7B;AACA,uBAAuB,8CAAK,WAAW,wDAAe;AACtD,2JAA2J,cAAc;AACzK,uBAAuB,8CAAK,WAAW,wDAAe;AACtD;AACA;AACA;AACA;AACA;AACA,6BAA6B,sBAAsB,6DAAoB,EAAE;AACzE,6BAA6B,uBAAuB,6DAAoB,EAAE;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,2CAA2C,aAAa;AACxD;AACA,2CAA2C,aAAa;AACxD,gBAAgB,yDAAkB;AAClC,gCAAgC,yDAAkB;AAClD,yBAAyB,yDAAkB;AAC3C,oCAAoC;AACpC;AACA,8BAA8B,sBAAsB,6DAAoB,EAAE;AAC1E,8BAA8B,uBAAuB,6DAAoB,EAAE;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,sDAAS,GAAG,8BAA8B;AACtD,YAAY,sDAAS,GAAG,8BAA8B;AACtD,YAAY,sDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD;AACA,IAAI,wDAAkB,iBAAiB,WAAW;AAClD;AACA,2CAA2C,aAAa,UAAU,wDAAe;AACjF,2CAA2C,aAAa,UAAU,wDAAe;AACjF,oBAAoB,yDAAkB;AACtC,oBAAoB,yDAAkB;AACtC,0BAA0B,qDAAS;AACnC;AACA;AACA;AACA,8BAA8B,sBAAsB,6DAAoB,EAAE;AAC1E,8BAA8B,uBAAuB,6DAAoB,EAAE;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD;AACA;AACA,YAAY,sDAAS,GAAG,gCAAgC;AACxD,YAAY,sDAAS,GAAG,gCAAgC;AACxD,YAAY,sDAAS,GAAG,8BAA8B;AACtD,YAAY,sDAAS,GAAG,gCAAgC;AACxD,YAAY,sDAAS,GAAG,gCAAgC;AACxD,YAAY,sDAAS,GAAG,8BAA8B;AACtD;AACA,cAAc,2EAAwB;AACtC;AACA,uBAAuB,8CAAK,GAAG,6BAA6B;AAC5D;AACA,uBAAuB,8CAAK,GAAG,6BAA6B;AAC5D;AACA,0BAA0B,qDAAS,GAAG,6CAA6C;AACnF;AACA;AACA;AACA;AACA,uBAAuB,8CAAK,iBAAiB,6DAAoB;AACjE,uBAAuB,8CAAK,kBAAkB,6DAAoB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,sBAAsB,8CAAK;AAC3B,uBAAuB,8CAAK;AAC5B;AACA,YAAY,sDAAS,GAAG,8BAA8B;AACtD,6BAA6B,uDAAU;AACvC,6BAA6B,gEAAc,kBAAkB,kEAAsB;AACnF,6BAA6B,4DAAY,kBAAkB,kEAAsB;AACjF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,kEAAsB;AACnF,6BAA6B,uDAAU,kCAAkC,6EAAgC;AACzG,6BAA6B,uDAAU,kCAAkC,6EAAgC;AACzG,6BAA6B,uDAAU,iCAAiC,6EAAgC;AACxG,YAAY,sDAAS,GAAG,8CAA8C,iDAAS,EAAE;AACjF,6BAA6B,4DAAY,kBAAkB,kEAAsB;AACjF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,YAAY,sDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,YAAY,sDAAS,GAAG,8BAA8B;AACtD,6BAA6B,4DAAY,kBAAkB,kEAAsB;AACjF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,uDAAU,kCAAkC,0EAA6B;AACtG,YAAY,sDAAS,GAAG,8CAA8C,iDAAS,EAAE;AACjF,6BAA6B,gEAAc,kBAAkB,kEAAsB;AACnF,6BAA6B,4DAAY,kBAAkB,kEAAsB;AACjF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,kEAAsB;AACnF,6BAA6B,uDAAU,kCAAkC,0EAA6B;AACtG,6BAA6B,uDAAU,kCAAkC,0EAA6B;AACtG,6BAA6B,uDAAU,iCAAiC,0EAA6B;AACrG,YAAY,sDAAS,GAAG,8BAA8B;AACtD;AACA,uBAAuB,gDAAM;AAC7B,wBAAwB,gDAAM;AAC9B,IAAI,mEAAuB;AAC3B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA,qGAAqG,cAAc;AACnH,uFAAuF,YAAY;AACnG;AACA;AACA;AACA,qCAAqC,6DAAoB;AACzD;AACA,mDAAmD,wDAAgB,uBAAuB;AAC1F,mDAAmD,wDAAgB,sBAAsB;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,gCAAgC,MAAM;AACtC,yFAAyF,YAAY;AACrG;AACA,qBAAqB,MAAM;AAC3B;AACA,wBAAwB,cAAc,iBAAiB,kBAAkB,kBAAkB,2CAAI;AAC/F;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC,sBAAsB,iBAAiB;AACvC;AACA;AACA,aAAa;AACb,iCAAiC,2CAAI;AACrC,wBAAwB,cAAc,iBAAiB,kBAAkB;AACzE;AACA;AACA,sBAAsB,iBAAiB;AACvC,sBAAsB,iBAAiB;AACvC,sBAAsB,iBAAiB;AACvC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,cAAc;AAC5E;AACA,+BAA+B,aAAa;AAC5C,+BAA+B,aAAa;AAC5C,+BAA+B,aAAa;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2CAAI;AAChB,YAAY,2CAAI;AAChB,YAAY,2CAAI;AAChB,YAAY,2CAAI;AAChB;AACA;AACA,kFAAkF,6DAAoB;AACtG;AACA,kBAAkB,kCAAkC;AACpD,kBAAkB,kCAAkC;AACpD,kBAAkB,kCAAkC;AACpD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,YAAY;AACrF,8DAA8D,cAAc;AAC5E;AACA,+BAA+B,aAAa;AAC5C,+BAA+B,aAAa;AAC5C,+BAA+B,aAAa;AAC5C;AACA;AACA;AACA;AACA;AACA,yBAAyB,6DAAoB;AAC7C;AACA,kBAAkB,6CAA6C;AAC/D,kBAAkB,6CAA6C;AAC/D,kBAAkB,6CAA6C;AAC/D;AACA;AACA;AACA;AACA,YAAY,2CAAI;AAChB,YAAY,2CAAI;AAChB;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA,mDAAmD,wDAAgB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,0EAA8B,KAAK,oDAAQ;AAC/C,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAA6B;AAChD,KAAK;AACL;AACA;AACA;AACA,oDAAoD,mBAAmB;AACvE;AACA,6DAA6D,mBAAmB;AAChF,qEAAqE,mBAAmB;AACxF;AACA,wDAAwD,aAAa;AACrE;AACA,oBAAoB,0CAA0C;AAC9D;AACA;AACA;AACA,kCAAkC,6EAA2B;AAC7D;AACA;AACA;AACA;AACA;AACA,IAAI,2EAA+B;AACnC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF,aAAa;AACnG;AACA,SAAS;AACT;AACA;AACA;AACA,4CAA4C,kBAAkB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB,gBAAgB,6DAAoB;AAC1E;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8CAAK;AAC/B;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAS,GAAG,6BAA6B;AACtE;AACA,gBAAgB,wDAAkB,WAAW,WAAW;AACxD;AACA;AACA,qCAAqC,uDAAU;AAC/C,8CAA8C,8EAAiC;AAC/E,6BAA6B,iDAAU,MAAM,wDAAiB;AAC9D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,gBAAgB,wDAAkB,WAAW,WAAW;AACxD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,2CAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,2BAA2B,8CAAK,GAAG,wCAAwC,UAAU,wDAAe;AACpG,wBAAwB,qDAAS,GAAG,wCAAwC;AAC5E;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;ACzuB1B;AACA;AACA;AACA;AACsD;AACX;AAC3C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA,+BAA+B,mDAAQ;AACvC,+BAA+B,mDAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,uBAAuB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,wDAAa;AAC9B,iBAAiB,wDAAa;AAC9B,iBAAiB,wDAAa;AAC9B,iBAAiB,wDAAa;AAC9B,iBAAiB,wDAAa;AAC9B,iBAAiB,wDAAa;AAC9B,iBAAiB,wDAAa;AAC9B;AACA,iBAAiB,uDAAY;AAC7B,iBAAiB,uDAAY;AAC7B,iBAAiB,uDAAY;AAC7B,iBAAiB,uDAAY;AAC7B,iBAAiB,uDAAY;AAC7B;AACA;AACA,sBAAsB,mDAAQ;AAC9B,sBAAsB,mDAAQ;AAC9B,sBAAsB,mDAAQ;AAC9B,oBAAoB,mDAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;AChFzB;AACA;AACA;AACA;AACsD;AACtD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2EAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG,YAAY;AAC5G;AACA,KAAK;AACL;AACA,aAAa,6BAA6B;AAC1C,aAAa,8BAA8B;AAC3C;AACA;AACA,sBAAsB,eAAe;AACrC,sBAAsB,kDAAkD;AACxE,sBAAsB,eAAe;AACrC,sBAAsB,kDAAkD;AACxE,sBAAsB,eAAe;AACrC,sBAAsB,kDAAkD,6BAA6B,YAAY;AACjH,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,SAAS,aAAa;AACtB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gBAAgB;AACtC,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,iBAAiB;AACvC,sBAAsB,iDAAiD;AACvE,SAAS,aAAa;AACtB;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,iBAAiB;AACvC,sBAAsB,mDAAmD;AACzE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,SAAS,aAAa;AACtB;AACA;AACA,0EAA0E,MAAM;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC,CAAC;AACD,wEAAqB;AACK;;;;;;;;;;;;;;;;;;;;ACzF1B;AACA;AACA;AACA;AACsD;AACL;AACZ;AACM;AACY;AACvD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC,2DAA2D,gCAAgC;AAC3F,8CAA8C,gCAAgC;AAC9E,mDAAmD,8BAA8B;AACjF,kDAAkD,+BAA+B;AACjF,KAAK;AACL;AACA;AACA,IAAI,yEAA8B,KAAK,mDAAQ;AAC/C,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAA6B;AAChD,KAAK;AACL;AACA;AACA,wBAAwB,6CAAK,0BAA0B,eAAe;AACtE,wBAAwB,6CAAK,0BAA0B,eAAe;AACtE,wBAAwB,6CAAK,0BAA0B,eAAe;AACtE,wBAAwB,6CAAK,0BAA0B,eAAe;AACtE;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA,qCAAqC,gBAAgB,qFAAuC,EAAE;AAC9F;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB,qFAAuC,EAAE;AAC1F,gCAAgC,gBAAgB,mFAAqC,EAAE;AACvF;AACA;AACA;AACA,sBAAsB,yDAAyD;AAC/E,kCAAkC,4EAA2B;AAC7D;AACA,IAAI,0EAA+B;AACnC;AACA;AACA;AACA,IAAI,yEAA8B,KAAK,mDAAQ;AAC/C,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAA6B;AAChD,KAAK;AACL;AACA,qDAAqD,aAAa;AAClE,kDAAkD,yDAAyD;AAC3G;AACA,yBAAyB,6CAAK,sBAAsB,eAAe,IAAI,SAAS;AAChF,yBAAyB,6CAAK,uBAAuB,mCAAmC;AACxF;AACA,4BAA4B,6CAAK,0BAA0B,gBAAgB;AAC3E,4BAA4B,6CAAK,0BAA0B,gBAAgB;AAC3E,4BAA4B,6CAAK,uBAAuB,gBAAgB;AACxE,4BAA4B,6CAAK,0BAA0B,gBAAgB;AAC3E;AACA;AACA;AACA,kCAAkC,4EAA2B;AAC7D;AACA,IAAI,0EAA+B;AACnC;AACA;AACA;AACA,IAAI,yEAA8B,KAAK,mDAAQ;AAC/C,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAA6B;AAChD,KAAK;AACL;AACA,wDAAwD,aAAa;AACrE,2DAA2D,yDAAyD;AACpH;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD,oCAAoC,gBAAgB;AACpD,oCAAoC,gBAAgB;AACpD,oCAAoC,gBAAgB;AACpD;AACA;AACA;AACA,kCAAkC,4EAA2B;AAC7D;AACA,IAAI,0EAA+B;AACnC;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;;;;;ACpH1B;AACA;AACA;AACA;AACA;AACsD;AACP;AACA;AACI;AAClB;AACY;AAC7C;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA,2BAA2B,4CAA4C;AACvE,2BAA2B,2CAA2C;AACtE;AACA,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,qCAAqC;AAC/C,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA,6CAA6C,YAAY;AACzD,8CAA8C,YAAY;AAC1D,IAAI,wDAAkB,qBAAqB,WAAW;AACtD;AACA;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D;AACA,yBAAyB,+CAA+C;AACxE,wCAAwC,WAAW;AACnD,4CAA4C,oBAAoB;AAChE;AACA,yBAAyB,sDAAsD;AAC/E,4CAA4C,oBAAoB;AAChE;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,oBAAoB;AAChE;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,oBAAoB;AAChE;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD,0BAA0B,4CAA4C;AACtE;AACA;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D,6BAA6B,2DAAY;AACzC;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D,6BAA6B,2DAAY;AACzC,6BAA6B,uDAAU;AACvC;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D,6BAA6B,2DAAY;AACzC,6BAA6B,uDAAU;AACvC;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA,2BAA2B,4CAA4C;AACvE,2BAA2B,2CAA2C;AACtE;AACA,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,qCAAqC;AAC/C,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA,8CAA8C,WAAW;AACzD,8CAA8C,WAAW;AACzD,8CAA8C,WAAW;AACzD,IAAI,wDAAkB,qBAAqB,WAAW;AACtD;AACA;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,gCAAgC;AAC5E;AACA,yBAAyB,+CAA+C;AACxE,wCAAwC,WAAW;AACnD,4CAA4C,gCAAgC;AAC5E;AACA,yBAAyB,sDAAsD;AAC/E,4CAA4C,gCAAgC;AAC5E;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,gCAAgC;AAC5E;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,gCAAgC;AAC5E,sBAAsB,+CAA+C;AACrE;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,mBAAmB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,mBAAmB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA,qCAAqC,+CAA+C;AACpF;AACA;AACA;AACA,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,mBAAmB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,qCAAqC,+CAA+C;AACpF;AACA;AACA;AACA;AACA,kBAAkB,6DAA6D;AAC/E,kBAAkB,8DAA8D;AAChF,kBAAkB,6DAA6D;AAC/E,kBAAkB,8DAA8D;AAChF,kBAAkB,6DAA6D;AAC/E,kBAAkB,8DAA8D;AAChF;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,kDAAkD,sBAAsB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA,2BAA2B,8DAA8D;AACzF,2BAA2B,+DAA+D;AAC1F;AACA,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,iDAAiD;AAC3D;AACA;AACA,8CAA8C,WAAW;AACzD,4CAA4C,oBAAoB;AAChE,4CAA4C,oBAAoB;AAChE,6CAA6C,oBAAoB;AACjE,6CAA6C,oBAAoB;AACjE;AACA;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA,2BAA2B,8DAA8D;AACzF,2BAA2B,+DAA+D;AAC1F;AACA,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,iDAAiD;AAC3D;AACA;AACA,8CAA8C,WAAW;AACzD,4CAA4C,oBAAoB;AAChE,4CAA4C,oBAAoB;AAChE,6CAA6C,oBAAoB;AACjE,6CAA6C,oBAAoB;AACjE;AACA;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;;;;;;;ACva1B;AACA;AACA;AACA;AACsD;AACnB;AACU;AACU;AACJ;AACV;AACE;AACN;AACrC;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA,oCAAoC,iDAAO;AAC3C,yCAAyC,2DAAY;AACrD;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B,aAAa;AACb;AACA;AACA,YAAY,iBAAiB;AAC7B,4BAA4B,cAAc,iBAAiB,kBAAkB;AAC7E,4BAA4B,cAAc,kBAAkB,kBAAkB;AAC9E,4BAA4B,cAAc,kBAAkB,kBAAkB;AAC9E,4BAA4B,cAAc,kBAAkB,kBAAkB;AAC9E,gCAAgC,cAAc,mBAAmB,kBAAkB;AACnF;AACA,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,kBAAkB,mBAAmB;AAC7D;AACA,gCAAgC,cAAc,iBAAiB,kBAAkB;AACjF;AACA,UAAU,cAAc,kBAAkB,kBAAkB;AAC5D,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+DAAc;AACxC,0BAA0B,+DAAc;AACxC,0BAA0B,+DAAc;AACxC,0BAA0B,+DAAc;AACxC,sBAAsB,6CAAK,CAAC,mDAAY;AACxC;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B,4BAA4B,cAAc,kBAAkB,kBAAkB;AAC9E,4BAA4B,cAAc,kBAAkB,kBAAkB;AAC9E;AACA,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D,UAAU,cAAc,kBAAkB,kBAAkB;AAC5D;AACA;AACA,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D;AACA;AACA;AACA,0BAA0B,+DAAc;AACxC,0BAA0B,+DAAc;AACxC,sBAAsB,6CAAK,CAAC,mDAAY;AACxC;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA,wEAAqB;AACQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxF7B;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACmC;AACA;AACE;AACQ;AAChB;AACG;AACH;AACA;AACO;AACA;AACP;AACK;AACJ;AACF;AACM;AACF;AACH;AACK;AACD;AACC;AACA;AACA;AACG;AACJ;AACE;AACE;AACJ;AACQ;AACX;AACG;AACI;AACG;AACP;AACF;AACM;AACF;AACF;AACA;AACH;AACC;AACD;AACS;AACF;AACH;AACI;AACJ;AACD;AACI;AACL;AACF;AACE;AACC;AACA;AACF;AACK;AACE;AACL;AACE;AACC;AACE;AACN;AACD;AACA;AACG;AACH;AACG;AACF;AACO;AACT;;;;;;;;;;;;;;;;;;;ACpF9B;AACA;AACA;AACA;AACA;AAC8E;AACzC;AACc;AACd;AACrC;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC,2CAA2C,iBAAiB;AAC5D,2CAA2C,kBAAkB;AAC7D;AACA,KAAK;AACL;AACA;AACA,2BAA2B;AAC3B,uBAAuB,sDAAc;AACrC,sBAAsB,sDAAc;AACpC,0BAA0B;AAC1B,yBAAyB,sDAAc;AACvC,sBAAsB,sDAAc,uBAAuB;AAC3D,aAAa;AACb;AACA;AACA;AACA,gCAAgC;AAChC,0EAA0E,4DAAoB;AAC9F,wEAAwE,4DAAoB;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,6DAAU,GAAG,6DAAU;AACnE;AACA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA,wBAAwB,6CAAK;AAC7B;AACA,uCAAuC,6CAAK;AAC5C;AACA,uBAAuB,UAAU;AACjC,yBAAyB,2DAAY;AACrC;AACA;AACA,wBAAwB,qBAAqB;AAC7C,yBAAyB,2DAAY;AACrC;AACA;AACA;AACA,IAAI,gEAAwB;AAC5B,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,0EAA0E,4DAAoB;AAC9F,wEAAwE,4DAAoB;AAC5F;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,iBAAiB,6DAAU;AAC3B;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACY;;;;;;;;;;;;;;;;;AChHjC;AACA;AACA;AACA;AACA;AACA;AACA;AACsD;AACZ;AAC1C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,wBAAwB,kDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACM;;;;;;;;;;;;;;;;;;;;;AC5E3B;AACA;AACA;AACA;AACA;AAC8E;AAC3C;AACE;AACc;AACd;AACa;AAClD;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,2BAA2B;AAC3B,uBAAuB,sDAAc;AACrC,sBAAsB,sDAAc;AACpC,yBAAyB,sDAAc;AACvC,sBAAsB,sDAAc,2BAA2B;AAC/D,aAAa;AACb;AACA;AACA;AACA;AACA,4BAA4B,wDAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,wDAAiB;AACrB,IAAI,wDAAiB;AACrB,IAAI,wDAAiB;AACrB,IAAI,wDAAiB;AACrB,IAAI,wDAAiB;AACrB,IAAI,wDAAiB;AACrB,IAAI,wDAAiB;AACrB;AACA;AACA;AACA;AACA,gCAAgC;AAChC,4BAA4B;AAC5B,yBAAyB;AACzB,sFAAsF,4DAAoB;AAC1G,oFAAoF,4DAAoB;AACxG;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,iBAAiB,6DAAU;AAC3B;AACA,oBAAoB,OAAO;AAC3B,qBAAqB,2DAAY;AACjC;AACA;AACA,oBAAoB,iBAAiB;AACrC,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qGAAqG,4DAAoB;AACzH,iGAAiG,4DAAoB;AACrH,kGAAkG,4DAAoB;AACtH,sGAAsG,4DAAoB;AAC1H;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,iBAAiB,6DAAU;AAC3B;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,4DAAoB;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4DAAoB;AACpC,8BAA8B,6CAAK;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,iBAAiB,6DAAU;AAC3B;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,4BAA4B;AAC5B,yBAAyB;AACzB,sFAAsF,4DAAoB;AAC1G,oFAAoF,4DAAoB;AACxG;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,iBAAiB,6DAAU;AAC3B;AACA,oBAAoB,OAAO;AAC3B,qBAAqB,2DAAY;AACjC;AACA;AACA,oBAAoB,iBAAiB;AACrC,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B;AACA;AACA,uBAAuB,uEAAwB;AAC/C,uBAAuB,qEAAsB;AAC7C;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,4BAA4B;AAC5B,yBAAyB;AACzB,sFAAsF,4DAAoB;AAC1G,oFAAoF,4DAAoB;AACxG;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,iBAAiB,6DAAU;AAC3B,oBAAoB,OAAO;AAC3B;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA,uBAAuB,WAAW;AAClC,sBAAsB,8BAA8B;AACpD;AACA,uBAAuB,2BAA2B;AAClD,sBAAsB,8BAA8B;AACpD;AACA,uBAAuB,WAAW;AAClC,sBAAsB,8BAA8B;AACpD;AACA,uBAAuB,gCAAgC;AACvD,sBAAsB,8BAA8B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA,uBAAuB,WAAW;AAClC,sBAAsB,4CAA4C;AAClE;AACA,uBAAuB,2BAA2B;AAClD,sBAAsB,4CAA4C;AAClE;AACA,uBAAuB,WAAW;AAClC,sBAAsB,4CAA4C;AAClE;AACA,uBAAuB,gCAAgC;AACvD,sBAAsB,4CAA4C;AAClE;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACQ;;;;;;;;;;;;;;;;;AClV7B;AACA;AACA;AACA;AAC2C;AACA;AAC3C,2BAA2B,mDAAQ;AACnC;AACA;AACA,yBAAyB,mDAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mDAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;;AChFxB;AACA;AACA;AACA;AACsD;AACG;AACzD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,mBAAmB,uDAAe;AAClC;AACA;AACA;AACA,mBAAmB,uDAAe;AAClC,0BAA0B,gDAAQ;AAClC,0BAA0B,gDAAQ;AAClC;AACA;AACA,oCAAoC,yDAAiB;AACrD;AACA;AACA,wEAAqB;AACW;;;;;;;;;;;;;;;;;;AC3BhC;AACA;AACA;AACA;AACsD;AACnB;AACA;AACnC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA,WAAW,IAAI,2CAA2C;AAC1D,WAAW,IAAI,uBAAuB;AACtC,WAAW,IAAI,8DAA8D;AAC7E,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,2CAA2C;AAC1D,WAAW,IAAI,2CAA2C;AAC1D,WAAW,IAAI,iFAAiF;AAChG,WAAW,IAAI,8DAA8D;AAC7E,WAAW,IAAI,qEAAqE;AACpF,WAAW,IAAI,oEAAoE;AACnF,8BAA8B,wBAAwB;AACtD,8BAA8B,0CAA0C;AACxE,8BAA8B,oFAAoF;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,+DAAwB;AACpE,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iDAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,WAAW,0BAA0B,cAAc,IAAI,uBAAuB;AAC9E,WAAW,uCAAuC,cAAc,IAAI,uBAAuB;AAC3F,WAAW,uDAAuD,cAAc,IAAI,uBAAuB;AAC3G,WAAW,2CAA2C,cAAc,IAAI,uBAAuB;AAC/F,WAAW,0CAA0C,cAAc,IAAI,uBAAuB;AAC9F,WAAW,6CAA6C,cAAc,IAAI,uBAAuB;AACjG,WAAW,8DAA8D,cAAc,IAAI,uBAAuB;AAClH;AACA,cAAc,8DAA8D,cAAc;AAC1F,cAAc,0CAA0C;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wEAAqB;AACY;;;;;;;;;;;;;;;;;;ACvJjC;AACA;AACA;AACA;AACsD;AACP;AACV;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B,wBAAwB,uDAAU;AAClC,iEAAiE,0DAAkB;AACnF;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA,kEAAkE,2DAAmB;AACrF;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA,sEAAsE,+DAAuB;AAC7F;AACA;AACA,oBAAoB,yBAAyB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,6CAAK;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACC;;;;;;;;;;;;;;;;;;;;;;;AC7KtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsD;AACnB;AACU;AACF;AACN;AACQ;AACI;AACZ;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA,0BAA0B,qDAAS;AACnC,sBAAsB,6CAAK,CAAC,mDAAY;AACxC,2BAA2B,mDAAQ,GAAG,wBAAwB;AAC9D,2BAA2B,mDAAQ,GAAG,0BAA0B;AAChE,2BAA2B,mDAAQ,GAAG,wBAAwB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,qDAAS;AAC9B,QAAQ,yDAAW;AACnB;AACA;AACA;AACA;AACA;AACA,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C;AACA;AACA;AACA,2BAA2B,cAAc;AACzC,0BAA0B,6CAAK;AAC/B;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,kCAAkC;AAC5C,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,6BAA6B;AACvC,UAAU,kCAAkC;AAC5C,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC;AACA;AACA;AACA,2BAA2B,cAAc;AACzC,0BAA0B,6CAAK;AAC/B;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,oDAAoD;AAC9D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,sBAAsB,6CAAK;AAC3B,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,wCAAwC;AAClD,UAAU,wCAAwC;AAClD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B,0BAA0B,6CAAK;AAC/B,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA,0BAA0B,qDAAS;AACnC,sBAAsB,6CAAK,CAAC,mDAAY;AACxC,oBAAoB,qDAAS,GAAG,8BAA8B;AAC9D,oBAAoB,qDAAS,GAAG,8BAA8B;AAC9D,oBAAoB,mDAAQ,GAAG,wBAAwB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;;;AC7OzB;AACA;AACA;AACA;AACA;AACsD;AACb;AACN;AACe;AAClD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wEAAwE,aAAa;AACrF,2EAA2E,iBAAiB;AAC5F;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,4BAA4B,YAAY;AACxC,YAAY,8CAA8C;AAC1D;AACA,UAAU,kDAAkD;AAC5D,UAAU,gEAAgE;AAC1E,UAAU,gEAAgE;AAC1E,UAAU,gEAAgE;AAC1E,UAAU,iEAAiE;AAC3E,UAAU,iEAAiE;AAC3E,UAAU,iEAAiE;AAC3E,UAAU,iEAAiE;AAC3E;AACA;AACA;AACA,wCAAwC,yBAAyB,iBAAiB;AAClF,wCAAwC,yBAAyB,iBAAiB;AAClF,wCAAwC,0BAA0B,iBAAiB,OAAO,iDAAO;AACjG,2CAA2C,aAAa;AACxD,+BAA+B,iDAAO,CAAC,uEAAwB;AAC/D;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAgB;AAC5C,IAAI,sFAAmC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,8CAA8C;AAC1D;AACA,UAAU,iDAAiD;AAC3D,UAAU,+DAA+D;AACzE,UAAU,+DAA+D;AACzE,UAAU,kEAAkE;AAC5E;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,gEAAgE;AAC1E,UAAU,gEAAgE;AAC1E,UAAU,mEAAmE;AAC7E;AACA;AACA;AACA,qBAAqB,yBAAyB,iBAAiB;AAC/D,YAAY,iDAAO,CAAC,uEAAwB;AAC5C,wBAAwB,aAAa;AACrC;AACA;AACA,qBAAqB,yBAAyB,iBAAiB;AAC/D,wBAAwB,aAAa;AACrC,YAAY,iDAAO,CAAC,iEAAkB;AACtC;AACA,yCAAyC,4BAA4B,iBAAiB;AACtF;AACA;AACA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA,6BAA6B,uDAAgB;AAC7C;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,YAAY,8CAA8C;AAC1D,6BAA6B,0BAA0B;AACvD;AACA,UAAU,iDAAiD;AAC3D,UAAU,+DAA+D;AACzE,UAAU,+DAA+D;AACzE,UAAU,kEAAkE;AAC5E;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,gEAAgE;AAC1E,UAAU,gEAAgE;AAC1E,UAAU,mEAAmE;AAC7E;AACA,6BAA6B,2BAA2B;AACxD;AACA,UAAU,gEAAgE;AAC1E,UAAU,iEAAiE;AAC3E,UAAU,iEAAiE;AAC3E,UAAU,iEAAiE;AAC3E,UAAU,iEAAiE;AAC3E,UAAU,gEAAgE;AAC1E,UAAU,gEAAgE;AAC1E,UAAU,gEAAgE;AAC1E;AACA,uBAAuB,wDAAwD;AAC/E,uBAAuB,6DAA6D;AACpF,uBAAuB,8DAA8D;AACrF,aAAa,2BAA2B;AACxC,aAAa,wBAAwB;AACrC;AACA,yCAAyC,yBAAyB,iBAAiB,mBAAmB,aAAa;AACnH,yCAAyC,yBAAyB,iBAAiB,mBAAmB,aAAa;AACnH,yCAAyC,4BAA4B,iBAAiB;AACtF,yCAAyC,2BAA2B,iBAAiB;AACrF,yCAAyC,yBAAyB,iBAAiB;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACQ;;;;;;;;;;;;;;;;;;;;;;AChK7B;AACA;AACA;AACA;AACsD;AACD;AACR;AACR;AACa;AACL;AACF;AAC3C;AACA;AACA;AACA,YAAY,uDAAY;AACxB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6DAAa;AACjC;AACA,sBAAsB,6CAAK;AAC3B,wBAAwB,8DAAe;AACvC;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,+BAA+B;AACvD,YAAY,qDAAS,GAAG,4CAA4C;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACW;;;;;;;;;;;;;;;;;;;;;;;;;AC1DhC;AACA;AACA;AACA;AACA;AACA;AACsD;AACP;AACZ;AACF;AACY;AACR;AACM;AACN;AACQ;AACG;AAChD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE;AACA,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,8BAA8B,mDAAQ;AACtC,8BAA8B,mDAAQ;AACtC,8BAA8B,mDAAQ;AACtC;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE;AACA,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,8BAA8B,mDAAQ;AACtC,8BAA8B,mDAAQ;AACtC,8BAA8B,mDAAQ;AACtC;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE;AACA,8CAA8C,eAAe;AAC7D,uDAAuD,eAAe;AACtE,uDAAuD,eAAe;AACtE,8CAA8C,eAAe;AAC7D,aAAa;AACb;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,YAAY,wBAAwB;AACpC;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,YAAY,wBAAwB;AACpC;AACA;AACA,IAAI,mEAAuB;AAC3B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA,YAAY,qDAAS,GAAG,+BAA+B;AACvD,YAAY,qDAAS,GAAG,iDAAiD;AACzE;AACA;AACA,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,+BAA+B;AACvD,YAAY,qDAAS,GAAG,+BAA+B;AACvD;AACA,8BAA8B,mDAAQ;AACtC,8BAA8B,mDAAQ;AACtC,uBAAuB,6CAAK,GAAG,8BAA8B;AAC7D;AACA,uBAAuB,6CAAK,GAAG,8BAA8B;AAC7D;AACA;AACA,0BAA0B,qDAAS;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE;AACA,iDAAiD,4CAA4C;AAC7F,uDAAuD,4CAA4C;AACnG,8CAA8C,8CAA8C;AAC5F,0DAA0D,8CAA8C;AACxG,uDAAuD,8CAA8C;AACrG,4CAA4C,4CAA4C;AACxF,iDAAiD,4CAA4C;AAC7F,mDAAmD,8CAA8C;AACjG,mDAAmD,gDAAgD;AACnG,oDAAoD,8CAA8C;AAClG,wDAAwD,4CAA4C;AACpG;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA,sBAAsB,sDAAc,eAAe;AACnD;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,+CAA+C;AACrF;AACA,iCAAiC,uDAAU;AAC3C;AACA;AACA,gBAAgB,wDAAkB,QAAQ,WAAW;AACrD;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yDAAkB;AAC1B,0BAA0B,6CAAK;AAC/B;AACA;AACA,SAAS,UAAU,sDAAc;AACjC;AACA,8BAA8B,qDAAS;AACvC,0CAA0C,4DAAoB;AAC9D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;AC/WzB;AACA;AACA;AACA;AACsD;AACf;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAuD;AACpF,yCAAyC,uCAAuC;AAChF,yCAAyC,qCAAqC;AAC9E,8BAA8B,+FAA+F;AAC7H,yCAAyC,+DAA+D;AACxG,4BAA4B,eAAe;AAC3C,mCAAmC,eAAe;AAClD,+BAA+B,cAAc;AAC7C,qCAAqC,cAAc;AACnD,sCAAsC,cAAc;AACpD,4BAA4B,YAAY;AACxC;AACA;AACA,wBAAwB,sDAAsD;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B,wBAAwB,MAAM,KAAK,OAAO,KAAK,aAAa,KAAK,cAAc,KAAK,oBAAoB;AACxG;AACA,iCAAiC,oBAAoB;AACrD;AACA,iCAAiC;AACjC,iCAAiC,EAAE;AACnC;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,gEAAgE;AAChE;AACA,wEAAqB;AACE;;;;;;;;;;;;;;;;AC7IvB;AACA;AACA;AACA;AACA;AACsD;AACtD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2EAAwB;AAC1C;AACA,iCAAiC,YAAY;AAC7C,kFAAkF,YAAY;AAC9F;AACA,iCAAiC,oBAAoB;AACrD,qEAAqE,YAAY;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B,KAAK;AACL;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,eAAe;AAClC,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC,KAAK;AACL;AACA;AACA,CAAC;AACD,wEAAqB;AACQ;;;;;;;;;;;;;;;;;ACvE7B;AACA;AACA;AACA;AACA;AACA;AACsD;AACmD;AACzG;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,iDAAS;AACnC,QAAQ,mDAAW;AACnB;AACA;AACA;AACA;AACA;AACA,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B,0BAA0B,6CAAK;AAC/B,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2EAAwB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD;AACA;AACA;AACA;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,4DAA4D;AAClF,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,4DAA4D;AAClF;AACA,aAAa,8BAA8B;AAC3C,aAAa,0CAA0C;AACvD,aAAa,0CAA0C;AACvD,CAAC;AACD;AACA;AACA,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD;AACA;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,4DAA4D;AAClF,sBAAsB,kDAAkD;AACxE,sBAAsB,4DAA4D;AAClF;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,8BAA8B;AACpD,sBAAsB,0CAA0C;AAChE,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD;AACA,aAAa,0CAA0C;AACvD;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,4DAA4D;AAClF,sBAAsB,kDAAkD;AACxE,sBAAsB,6DAA6D;AACnF,sBAAsB,mDAAmD;AACzE;AACA,IAAI,0DAAkB,gBAAgB,WAAW;AACjD;AACA,aAAa,0CAA0C;AACvD,aAAa,0CAA0C;AACvD,CAAC;AACD;AACA;AACA,gBAAgB,kDAAU;AAC1B;AACA,gBAAgB,uDAAe;AAC/B,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA,yBAAyB,kDAAkD;AAC3E,0CAA0C,YAAY;AACtD,wCAAwC,iBAAiB;AACzD,sBAAsB,kDAAkD,6BAA6B,iBAAiB;AACtH,sBAAsB,kDAAkD,6BAA6B,iBAAiB;AACtH,sBAAsB,kDAAkD,6BAA6B,iBAAiB;AACtH;AACA,CAAC;AACD;AACA;AACA,sBAAsB,qDAAqD,+BAA+B,YAAY;AACtH,sBAAsB,qDAAqD;AAC3E,sBAAsB,qDAAqD,+BAA+B,YAAY;AACtH,sBAAsB,qDAAqD,+BAA+B,YAAY;AACtH;AACA,CAAC;AACD;AACA;AACA,sBAAsB,kDAAkD,kBAAkB,+CAAO;AACjG,sBAAsB,kDAAkD,kBAAkB,+CAAO;AACjG,sBAAsB,kDAAkD,kBAAkB,+CAAO;AACjG,sBAAsB,kDAAkD,kBAAkB,+CAAO;AACjG;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,4BAA4B,iDAAiD,kBAAkB,+CAAO;AACtG,4BAA4B,iDAAiD,kBAAkB,+CAAO;AACtG,4BAA4B,iDAAiD,kBAAkB,+CAAO;AACtG,4BAA4B,iDAAiD,kBAAkB,+CAAO;AACtG;AACA,CAAC;AACD,wEAAqB;AACM;;;;;;;;;;;;;;;;;ACjM3B;AACA;AACA;AACA;AACsD;AACiB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,yBAAyB,gDAAQ;AACjC,sBAAsB,iDAAS,GAAG,SAAS,gEAAwB,QAAQ;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gDAAQ;AACjC,sBAAsB,iDAAS,GAAG,SAAS,gEAAwB,QAAQ;AAC3E,IAAI,sEAA8B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,0DAAkB;AAC9D;AACA,gDAAgD,0DAAkB;AAClE;AACA;AACA;AACA,yBAAyB,gDAAQ;AACjC,sBAAsB,iDAAS,GAAG,SAAS,gEAAwB,QAAQ;AAC3E,IAAI,sEAA8B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;ACrEzB;AACA;AACA;AACA;AACA;AACsD;AACgF;AACtI;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,sBAAsB;AACtB;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+DAAuB;AAC3B,YAAY,iDAAS,GAAG,8BAA8B;AACtD,YAAY,iDAAS,GAAG,8BAA8B;AACtD,YAAY,iDAAS,GAAG,8BAA8B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F;AAC7F;AACA,+BAA+B,sBAAsB,EAAE,oBAAoB;AAC3E;AACA,4BAA4B,gEAAwB;AACpD;AACA;AACA,2BAA2B,WAAW;AACtC;AACA;AACA;AACA;AACA,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA,0FAA0F,eAAe,gBAAgB;AACzH,uCAAuC,cAAc,qBAAqB,EAAE,qBAAqB,IAAI,SAAS;AAC9G;AACA,yCAAyC,sBAAsB,cAAc,YAAY,IAAI,YAAY;AACzG;AACA;AACA;AACA,yBAAyB,gDAAQ;AACjC;AACA;AACA,kBAAkB,6CAAK;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iEAAiE;AACrF;AACA,wBAAwB,+CAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,wDAAY;AACpB;AACA;AACA,sBAAsB,oDAAY,uCAAuC,kBAAkB;AAC3F;AACA,sBAAsB,qDAAa;AACnC;AACA;AACA,sBAAsB,kDAAU;AAChC;AACA,yBAAyB,gDAAQ;AACjC;AACA,kBAAkB,6CAAK;AACvB;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;;;;;;;;AC5JzB;AACA;AACA;AACA;AACsD;AACnB;AACF;AACE;AACU;AACR;AACQ;AACN;AACF;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,mDAAmD;AAC3E,YAAY,qDAAS,GAAG,mDAAmD;AAC3E,YAAY,qDAAS,GAAG,mDAAmD;AAC3E,YAAY,qDAAS,GAAG,oDAAoD;AAC5E;AACA,IAAI,wDAAkB,UAAU,WAAW;AAC3C,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA,iCAAiC,qDAAS;AAC1C;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,iDAAiD;AAChE,eAAe,+DAA+D;AAC9E,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,+DAA+D;AAC9E,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,gEAAgE;AAC/E,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,gEAAgE;AAC/E,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,eAAe,iDAAiD;AAChE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE;AACA,wBAAwB,+CAAM,sCAAsC,4DAAmB;AACvF,wBAAwB,+CAAM,sCAAsC,4DAAmB;AACvF,wBAAwB,+CAAM,sCAAsC,4DAAmB;AACvF,wBAAwB,+CAAM,uCAAuC,4DAAmB;AACxF,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,wBAAwB,+CAAM,sCAAsC,+DAAsB;AAC1F,wBAAwB,+CAAM,sCAAsC,+DAAsB;AAC1F,wBAAwB,+CAAM,sCAAsC,+DAAsB;AAC1F,wBAAwB,+CAAM,uCAAuC,+DAAsB;AAC3F,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE;AACA,qBAAqB,2CAAI;AACzB,uBAAuB,+CAAM,uCAAuC,4DAAmB;AACvF,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,oBAAoB;AAChC;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE;AACA,qBAAqB,2CAAI;AACzB,uBAAuB,+CAAM,uCAAuC,4DAAmB;AACvF,aAAa,oBAAoB;AACjC,IAAI,mEAAuB,0BAA0B,mBAAmB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B,4CAA4C,qDAAS;AACrD;AACA,sBAAsB,4CAA4C;AAClE,sBAAsB,+BAA+B;AACrD,sBAAsB,4CAA4C;AAClE,sBAAsB,+BAA+B;AACrD;AACA;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,mDAAmD;AACzE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE;AACA,uBAAuB,6CAAK,CAAC,mDAAY;AACzC,uBAAuB,6CAAK,CAAC,mDAAY;AACzC,aAAa,oBAAoB;AACjC,QAAQ,qDAAS,yEAAyE,mBAAmB;AAC7G,wBAAwB,2CAAI;AAC5B,wBAAwB,2CAAI;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACC;;;;;;;;;;;;;;;;;;;;;;ACzTtB;AACA;AACA;AACA;AACsD;AACP;AACZ;AACU;AACR;AACa;AACL;AAC7C;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,mDAAmD;AACzD,MAAM,mDAAmD;AACzD,MAAM,mDAAmD;AACzD,MAAM,mDAAmD;AACzD,MAAM,oDAAoD;AAC1D,MAAM,oDAAoD;AAC1D,MAAM,oDAAoD;AAC1D;AACA;;AAEA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,iEAAkB;AAC9C,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA;AACA,2BAA2B,qDAAS,GAAG,mDAAmD;AAC1F;AACA,IAAI,mEAAuB;AAC3B;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,iEAAkB;AAC9C,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA,YAAY,qDAAS,GAAG,mDAAmD;AAC3E,YAAY,qDAAS,GAAG,mDAAmD;AAC3E;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,0BAA0B,6CAAK;AAC/B;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,0BAA0B,6CAAK;AAC/B;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,iEAAkB;AAC9C,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,iEAAkB;AAC9C,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS,GAAG,mDAAmD;AAC3E;AACA,uCAAuC,uDAAU,wBAAwB,yEAAsB;AAC/F;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,sBAAsB,2CAAI;AAC1B;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA,iCAAiC,uDAAU,uBAAuB,yEAAsB;AACxF;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,iEAAkB;AAC9C,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA,uCAAuC,uDAAU,wBAAwB,yEAAsB;AAC/F;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,iEAAkB;AAC9C,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA,uCAAuC,uDAAU,wBAAwB,yEAAsB;AAC/F;AACA,sBAAsB,2CAAI;AAC1B;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,wEAAqB;AACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1avB;AACA;AACA;AACA;AACA;AACA;AACsD;AACP;AACZ;AACA;AACU;AACM;AACR;AACN;AACsB;AACd;AACO;AACN;AACM;AACC;AACrD;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA,kFAAkF,cAAc;AAChG;AACA;AACA,0EAA0E,WAAW;AACrF,gFAAgF,aAAa;AAC7F,gFAAgF,aAAa;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,sBAAsB,6CAAK;AAC3B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,8DAAa;AACnC,sBAAsB,8DAAa;AACnC,sBAAsB,8DAAa;AACnC,qBAAqB,2DAAY;AACjC,qBAAqB,2DAAY;AACjC,qBAAqB,2DAAY;AACjC,qBAAqB,sDAAO,CAAC,iEAAkB;AAC/C,qBAAqB,sDAAO,CAAC,iEAAkB;AAC/C,qBAAqB,sDAAO,CAAC,+DAAgB;AAC7C,wBAAwB;AACxB,wBAAwB;AACxB,qBAAqB;AACrB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAK,gBAAgB,iBAAiB;AAC1D;AACA;AACA,gBAAgB,6CAAK,iBAAiB,kBAAkB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,uEAAwB;AACpD,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,+BAA+B;AACvD,YAAY,qDAAS,GAAG,4CAA4C;AACpE;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,0BAA0B,6CAAK;AAC/B;AACA,4BAA4B,8DAAe;AAC3C;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,uEAAwB;AACpD,4BAA4B,qEAAsB;AAClD;AACA;AACA;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,+BAA+B;AACvD,YAAY,qDAAS,GAAG,4CAA4C;AACpE;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,uEAAwB;AACpD,4BAA4B,qEAAsB;AAClD;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA,uCAAuC,uDAAU;AACjD,uCAAuC,uDAAU;AACjD,uCAAuC,uDAAU;AACjD;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B;AACA,2BAA2B,qDAAS,GAAG,+BAA+B;AACtE;AACA,IAAI,mEAAuB;AAC3B;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,uEAAwB;AACpD,4BAA4B,qEAAsB;AAClD;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,+BAA+B;AACvD,YAAY,qDAAS,GAAG,4CAA4C;AACpE;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6CAAK;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qDAAS,GAAG,8BAA8B;AAC9D,oBAAoB,qDAAS,GAAG,8BAA8B;AAC9D,oBAAoB,qDAAS,GAAG,+BAA+B;AAC/D,oBAAoB,qDAAS,GAAG,4CAA4C;AAC5E;AACA,YAAY,mEAAuB;AACnC;AACA,2CAA2C,SAAS,uEAAwB,+BAA+B,IAAI,mCAAmC;AAClJ;AACA,sCAAsC,SAAS,uEAAwB,EAAE,IAAI,kCAAkC;AAC/G;AACA,sCAAsC,SAAS,uEAAwB,EAAE,IAAI,qCAAqC;AAClH;AACA;AACA;AACA,sCAAsC,SAAS,uEAAwB,EAAE,IAAI,mDAAmD;AAChI;AACA,sCAAsC,SAAS,uEAAwB,EAAE,IAAI,mDAAmD;AAChI;AACA,sCAAsC,SAAS,uEAAwB,EAAE,IAAI,iEAAiE;AAC9I;AACA;AACA;AACA;AACA;AACA,yBAAyB,iEAAkB;AAC3C;AACA;AACA;AACA,yBAAyB,iEAAkB;AAC3C;AACA;AACA;AACA,yBAAyB,qEAAsB;AAC/C;AACA;AACA;AACA,yBAAyB,sEAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAK;AACzB;AACA,0BAA0B,6EAA0B;AACpD;AACA;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,0BAA0B,0EAAuB;AACjD;AACA;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,0BAA0B,6EAA0B;AACpD;AACA;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,0BAA0B,4EAAyB;AACnD;AACA;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAK;AACzB,sBAAsB,uEAAwB;AAC9C,0BAA0B,6EAA0B;AACpD;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,0BAA0B,6EAA0B;AACpD;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,qBAAqB,6DAAe;AACpC;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,qBAAqB,2DAAa;AAClC;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,sBAAsB,qEAAsB;AAC5C,qBAAqB,2DAAa;AAClC;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,qBAAqB,iEAAmB;AACxC,sBAAsB,iEAAkB;AACxC;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,sBAAsB,iEAAkB;AACxC,0BAA0B,6EAA0B;AACpD;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,sBAAsB,8DAAe;AACrC,0BAA0B,4EAAyB;AACnD;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAK;AACzB,sBAAsB,uEAAwB;AAC9C,qBAAqB,iEAAmB;AACxC;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,sBAAsB,uEAAwB;AAC9C,0BAA0B,qEAAkB;AAC5C,qBAAqB,6DAAe;AACpC;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,qBAAqB,2DAAa;AAClC,0BAA0B,qEAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,qBAAqB,2DAAa;AAClC,0BAA0B,qEAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB;AACA,sBAAsB,iEAAkB;AACxC,0BAA0B,qEAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB;AACA,0BAA0B,qEAAkB;AAC5C;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAK;AAClC;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAS,GAAG,8BAA8B;AAC1D,gBAAgB,qDAAS,GAAG,8BAA8B;AAC1D,gBAAgB,qDAAS,GAAG,8BAA8B;AAC1D,gBAAgB,qDAAS,GAAG,8BAA8B;AAC1D;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA,6BAA6B,iCAAiC;AAC9D,6BAA6B,iCAAiC;AAC9D,6BAA6B,kCAAkC;AAC/D,6BAA6B,yBAAyB;AACtD,6BAA6B,2BAA2B;AACxD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA;AACA,6BAA6B,wBAAwB;AACrD,6BAA6B,wBAAwB;AACrD,6BAA6B,wBAAwB;AACrD,6BAA6B,wBAAwB;AACrD,6BAA6B,0BAA0B;AACvD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA,+BAA+B,eAAe;AAC9C,+BAA+B,gBAAgB;AAC/C,+BAA+B,eAAe;AAC9C,+BAA+B,gBAAgB;AAC/C,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA,8BAA8B,gBAAgB,IAAI,IAAI,gBAAgB,IAAI,eAAe,IAAI,gBAAgB;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B,4BAA4B,iEAAsB;AAClD,gCAAgC,kEAAuB;AACvD,gCAAgC,kEAAuB;AACvD,gCAAgC,kEAAuB;AACvD;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B,4BAA4B,iEAAsB,IAAI,cAAc;AACpE,8BAA8B,iEAAsB,IAAI,aAAa;AACrE,gCAAgC,kEAAuB,IAAI,cAAc;AACzE,8BAA8B,kEAAuB,IAAI,aAAa;AACtE,gCAAgC,kEAAuB,IAAI,cAAc;AACzE,8BAA8B,kEAAuB,IAAI,aAAa;AACtE,qCAAqC,kEAAuB,IAAI,6BAA6B,kEAAsB,EAAE;AACrH,sCAAsC,kEAAuB,IAAI,4BAA4B,mEAAuB,EAAE;AACtH;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,2BAA2B;AACvD,4BAA4B,iEAAsB,IAAI,cAAc;AACpE,8BAA8B,iEAAsB,IAAI,aAAa;AACrE;AACA;AACA;AACA,wEAAqB;AACC;;;;;;;;;;;;;;;;;;;;;ACtnBtB;AACA;AACA;AACA;AACA;AACsD;AACnB;AACQ;AACN;AACa;AACK;AACvD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,0BAA0B,+DAAc;AACxC,sBAAsB,2EAA0B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gEAAyB;AAClD,IAAI,gEAAyB;AAC7B;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,0BAA0B,+DAAc;AACxC,sBAAsB,2EAA0B;AAChD;AACA;AACA;AACA;AACA,IAAI,gEAAyB;AAC7B;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,2BAA2B,+DAAc;AACzC,uBAAuB,gFAA+B;AACtD;AACA,2BAA2B,+DAAc;AACzC,uBAAuB,iFAAgC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,0BAA0B,+DAAc;AACxC,qBAAqB,+DAAc;AACnC,sBAAsB,2EAA0B;AAChD;AACA,iBAAiB,2EAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,0BAA0B,+DAAc;AACxC,qBAAqB,+DAAc;AACnC,sBAAsB,0EAAyB;AAC/C;AACA;AACA,iBAAiB,2EAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,0BAA0B,+DAAc;AACxC,qBAAqB,+DAAc;AACnC,sBAAsB,0EAAyB;AAC/C;AACA,iBAAiB,2EAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,0BAA0B,+DAAc;AACxC,qBAAqB,+DAAc;AACnC,sBAAsB,4EAA2B;AACjD;AACA,iBAAiB,2EAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,qBAAqB,+DAAc;AACnC,iBAAiB,qFAAoC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,yBAAyB,qEAAsB;AAC/C,yBAAyB,qEAAsB;AAC/C,qBAAqB,+DAAc;AACnC,iBAAiB,sFAAqC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,yBAAyB,iEAAkB;AAC3C,yBAAyB,iEAAkB;AAC3C,qBAAqB,+DAAc;AACnC,iBAAiB,gFAA+B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA;AACA;AACA,yBAAyB,qEAAsB;AAC/C,yBAAyB,qEAAsB;AAC/C,yBAAyB,8DAAe;AACxC,yBAAyB,8DAAe;AACxC,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC;AACA;AACA;AACA;AACA,uBAAuB,qFAAoC;AAC3D,uBAAuB,sFAAqC;AAC5D,uBAAuB,qFAAoC;AAC3D,uBAAuB,sFAAqC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qEAAsB;AAC/C,yBAAyB,qEAAsB;AAC/C,yBAAyB,8DAAe;AACxC,yBAAyB,8DAAe;AACxC,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC;AACA;AACA;AACA;AACA;AACA,uBAAuB,qFAAoC;AAC3D,uBAAuB,sFAAqC;AAC5D,uBAAuB,qFAAoC;AAC3D,uBAAuB,sFAAqC;AAC5D,uBAAuB,gFAA+B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qEAAsB;AAC/C,yBAAyB,qEAAsB;AAC/C,yBAAyB,8DAAe;AACxC,yBAAyB,8DAAe;AACxC,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC;AACA;AACA;AACA;AACA;AACA,uBAAuB,qFAAoC;AAC3D,uBAAuB,sFAAqC;AAC5D,uBAAuB,qFAAoC;AAC3D,uBAAuB,sFAAqC;AAC5D,uBAAuB,gFAA+B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,6BAA6B,iEAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+DAAc;AAC1C,4BAA4B,+DAAc;AAC1C,6BAA6B,+DAAc;AAC3C,0BAA0B,+DAAc;AACxC,2BAA2B,+DAAc;AACzC,wBAAwB,2EAA0B;AAClD,wBAAwB,2EAA0B;AAClD,yBAAyB,4EAA2B;AACpD,uBAAuB,0EAAyB;AAChD;AACA;AACA,oCAAoC,cAAc;AAClD,qCAAqC,aAAa;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACU;;;;;;;;;;;;;;;;;ACtZ/B;AACA;AACA;AACA;AACA;AACA;AACsD;AACH;AACnD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2DAAY,GAAG,uBAAuB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2EAAwB;AAChD;AACA;AACA;AACA;AACA,6BAA6B,+DAA+D;AAC5F,kDAAkD,WAAW;AAC7D,kDAAkD,WAAW;AAC7D,gCAAgC,iDAAiD;AACjF,gCAAgC,iDAAiD;AACjF,gCAAgC,iDAAiD;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,wEAAqB;AACQ;;;;;;;;;;;;;;;;;;AC3G7B;AACA;AACA;AACA;AACsD;AACrB;AACa;AAC9C;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,sBAAsB,8CAA8C;AACpE,sBAAsB,8CAA8C;AACpE,sBAAsB,4DAA4D;AAClF,sBAAsB,4DAA4D;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ,iDAAU,mBAAmB,uDAAgB,EAAE;AAC3E;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,sBAAsB,0EAA0E;AAChG,sBAAsB,8CAA8C,6BAA6B,WAAW;AAC5G,sBAAsB,4DAA4D;AAClF;AACA,yBAAyB,4DAA4D;AACrF,wCAAwC,WAAW;AACnD,sBAAsB,8CAA8C,6BAA6B,WAAW;AAC5G,sBAAsB,0EAA0E;AAChG,sBAAsB,4DAA4D;AAClF;AACA,yBAAyB,4DAA4D;AACrF,wCAAwC,WAAW;AACnD;AACA,IAAI,wDAAkB,eAAe,WAAW;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,cAAc;AACjC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,mBAAmB,eAAe;AAClC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,mBAAmB,aAAa;AAChC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;;;AC7H1B;AACA;AACA;AACA;AACsD;AACjB;AACa;AACW;AAC7D;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA,wBAAwB,uEAAwB;AAChD;AACA;AACA;AACA,wBAAwB,iEAAkB;AAC1C;AACA;AACA,gBAAgB,yEAAyB;AACzC;AACA;AACA;AACA;AACA,wBAAwB,iEAAkB;AAC1C;AACA;AACA;AACA,wBAAwB,iEAAkB;AAC1C;AACA;AACA;AACA,wEAAqB;AACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvD9B;AACA;AACA;AACA;AACA;AACA;AACsD;AACP;AAC2B;AACvB;AAChB;AACF;AACE;AACU;AACF;AACY;AACZ;AACc;AACpB;AACQ;AACV;AACgB;AACX;AACS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC,oDAAoD,gDAAgD;AACpG,qEAAqE,gDAAgD;AACrH,kDAAkD,+CAA+C;AACjG,mDAAmD,gDAAgD;AACnG,kDAAkD,+CAA+C;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0EAAuB;AAC/B;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,kCAAkC,sDAAS;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,kEAAe;AACrD;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sDAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAS,GAAG,uDAAuD;AAC5F;AACA;AACA,KAAK;AACL,4BAA4B,sDAAS,GAAG,kDAAkD;AAC1F,4BAA4B,sDAAS,GAAG,6CAA6C;AACrF,4BAA4B,sDAAS,GAAG,gDAAgD;AACxF;AACA;AACA,sBAAsB,sDAAe;AACrC;AACA;AACA,yBAAyB,iBAAiB;AAC1C,yBAAyB,eAAe;AACxC,2BAA2B,eAAe;AAC1C,+BAA+B,wBAAwB;AACvD,uCAAuC,wBAAwB;AAC/D,sCAAsC,wBAAwB;AAC9D,+BAA+B,mCAAmC;AAClE,sCAAsC,mCAAmC;AACzE,sCAAsC,mCAAmC;AACzE,2CAA2C,mCAAmC;AAC9E,kDAAkD,mCAAmC;AACrF,kDAAkD,mCAAmC;AACrF,oCAAoC,mCAAmC;AACvE,2CAA2C,mCAAmC;AAC9E,2CAA2C,mCAAmC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAS;AAClC;AACA;AACA,KAAK;AACL,4BAA4B,sDAAS,GAAG,kDAAkD;AAC1F,4BAA4B,sDAAS,GAAG,6CAA6C;AACrF,4BAA4B,sDAAS,GAAG,gDAAgD;AACxF;AACA;AACA,qBAAqB,sDAAS,GAAG,4CAA4C;AAC7E,0CAA0C,+CAAO;AACjD;AACA;AACA;AACA,gCAAgC,iDAAS;AACzC,gCAAgC,+CAAO;AACvC,kBAAkB,iDAAS;AAC3B,gCAAgC,iDAAS;AACzC,kBAAkB,iDAAS;AAC3B;AACA;AACA;AACA;AACA,yBAAyB,sDAAS,GAAG,4CAA4C;AACjF,kHAAkH,+CAAO;AACzH,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAO;AAC7B,qBAAqB,iDAAS;AAC9B;AACA;AACA,sBAAsB,iDAAS;AAC/B,qBAAqB,+CAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAS,GAAG,4CAA4C;AAC/E;AACA;AACA,uBAAuB,sDAAS,GAAG,kEAAkE;AACrG;AACA;AACA;AACA,0BAA0B,8CAAK,gBAAgB,8BAA8B;AAC7E;AACA;AACA,iDAAiD,2BAA2B;AAC5E;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAS,GAAG,6CAA6C,+CAAO,iBAAiB;AACtG;AACA,0BAA0B,iDAAS;AACnC;AACA,0BAA0B,+CAAO;AACjC;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,qBAAqB,sDAAS,GAAG,4CAA4C;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAS,GAAG,4CAA4C;AAC7E;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,qBAAqB,sDAAS,GAAG,4CAA4C;AAC7E,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU,4CAA4C;AACtD,UAAU,6CAA6C;AACvD,UAAU,4CAA4C;AACtD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,+CAA+C;AACzD,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,8CAA8C;AACxD,UAAU,4CAA4C;AACtD,UAAU,4CAA4C;AACtD,UAAU,4CAA4C;AACtD,UAAU,4CAA4C;AACtD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,8CAA8C;AACxD,UAAU,8BAA8B;AACxC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU,4CAA4C;AACtD,UAAU,6CAA6C;AACvD,UAAU,4CAA4C;AACtD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,+CAA+C;AACzD,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,4CAA4C;AACtD,UAAU,4CAA4C;AACtD,UAAU,4CAA4C;AACtD,UAAU,4CAA4C;AACtD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,8CAA8C;AACxD,UAAU,8BAA8B;AACxC;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA;AACA,UAAU,4DAA4D;AACtE,UAAU,0DAA0D;AACpE,UAAU,0DAA0D;AACpE,UAAU,0DAA0D;AACpE,UAAU,0DAA0D;AACpE,UAAU,2DAA2D;AACrE,UAAU,2DAA2D;AACrE,UAAU,0EAA0E,iDAAS,EAAE;AAC/F,UAAU,0EAA0E,iDAAS,EAAE;AAC/F,UAAU,0EAA0E,iDAAS,EAAE;AAC/F,UAAU,2EAA2E,iDAAS,EAAE;AAChG,UAAU,2EAA2E,iDAAS,EAAE;AAChG,UAAU,iCAAiC;AAC3C,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,8BAA8B;AACxC;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA,UAAU,4DAA4D;AACtE,UAAU,0DAA0D;AACpE,UAAU,4CAA4C;AACtD,UAAU,mDAAmD;AAC7D,UAAU,wEAAwE;AAClF,UAAU,kEAAkE;AAC5E,UAAU,6CAA6C;AACvD,UAAU,oDAAoD;AAC9D,UAAU,mEAAmE,iDAAS,EAAE;AACxF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,mEAAmE,iDAAS,EAAE;AACxF,UAAU,kFAAkF,iDAAS,EAAE;AACvG,UAAU,yFAAyF,iDAAS,EAAE;AAC9G;AACA;AACA;AACA,4BAA4B,iDAAS;AACrC,SAAS;AACT;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,+CAA+C;AACzD,UAAU,+DAA+D,iDAAS,EAAE;AACpF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,+DAA+D,iDAAS,EAAE;AACpF,UAAU,+CAA+C;AACzD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,+CAA+C;AACzD,UAAU,+DAA+D,iDAAS,EAAE;AACpF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,+DAA+D,iDAAS,EAAE;AACpF;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA,UAAU,iDAAiD,iDAAS,EAAE;AACtE,UAAU,+CAA+C,iDAAS,EAAE;AACpE,UAAU,+CAA+C,iDAAS,EAAE;AACpE,UAAU,+CAA+C,iDAAS,EAAE;AACpE,UAAU,+CAA+C,iDAAS,EAAE;AACpE,UAAU,gDAAgD,iDAAS,EAAE;AACrE,UAAU,gDAAgD,iDAAS,EAAE;AACrE,UAAU,gDAAgD,iDAAS,EAAE;AACrE,UAAU,iDAAiD,iDAAS,EAAE;AACtE,UAAU,iDAAiD,+CAAO,EAAE;AACpE,UAAU,+CAA+C,+CAAO,EAAE;AAClE,UAAU,+CAA+C,+CAAO,EAAE;AAClE,UAAU,+CAA+C,+CAAO,EAAE;AAClE,UAAU,+CAA+C,+CAAO,EAAE;AAClE,UAAU,gDAAgD,+CAAO,EAAE;AACnE,UAAU,gDAAgD,+CAAO,EAAE;AACnE,UAAU,gDAAgD,+CAAO,EAAE;AACnE,UAAU,iDAAiD,+CAAO,EAAE;AACpE;AACA,UAAU,+CAA+C,iDAAS,EAAE;AACpE,UAAU,+CAA+C,iDAAS,EAAE;AACpE,UAAU,+CAA+C,+CAAO,EAAE;AAClE,UAAU,+CAA+C,+CAAO,EAAE;AAClE;AACA,kDAAkD,sDAAS;AAC3D,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,qBAAqB,sDAAS,GAAG,6CAA6C;AAC9E;AACA,yBAAyB,uDAAU;AACnC,0BAA0B,uDAAuD;AACjF,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,qBAAqB,sDAAS,GAAG,6CAA6C;AAC9E;AACA,yBAAyB,uDAAU;AACnC,oBAAoB,4EAA4E;AAChG,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,qBAAqB,sDAAS,GAAG,6CAA6C;AAC9E;AACA,yBAAyB,uDAAU;AACnC,wBAAwB,4EAA4E;AACpG,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA,mBAAmB,sDAAS,GAAG,4CAA4C;AAC3E,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,gBAAgB,uBAAuB;AACvC,mBAAmB,sDAAS,GAAG,sCAAsC;AACrE,YAAY,0DAAW;AACvB;AACA;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,qBAAqB,sDAAS,GAAG,6CAA6C;AAC9E;AACA,yBAAyB,uDAAU;AACnC,wBAAwB,4EAA4E;AACpG,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,qBAAqB,sCAAsC;AAC3D;AACA;AACA;AACA;AACA,UAAU,8CAA8C,iDAAS,EAAE;AACnE,UAAU,8CAA8C,iDAAS,EAAE;AACnE;AACA,UAAU,8CAA8C,iDAAS,EAAE;AACnE;AACA,UAAU,8CAA8C,iDAAS,EAAE;AACnE,UAAU,8CAA8C,iDAAS,EAAE;AACnE;AACA,UAAU,8CAA8C,+CAAO,EAAE;AACjE,UAAU,8CAA8C,+CAAO,EAAE;AACjE;AACA,UAAU,8CAA8C,iDAAS,EAAE;AACnE,UAAU,qDAAqD,iDAAS,EAAE;AAC1E;AACA,UAAU,qDAAqD,iDAAS,EAAE;AAC1E;AACA,UAAU,qDAAqD,iDAAS,EAAE;AAC1E;AACA,+CAA+C,sDAAS;AACxD,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,gCAAgC;AAChC,qBAAqB,wCAAwC;AAC7D,mCAAmC,qBAAqB;AACxD,iCAAiC,sBAAsB;AACvD,iCAAiC,uBAAuB;AACxD,mCAAmC,4BAA4B;AAC/D,6BAA6B,4CAA4C;AACzE,qBAAqB,oCAAoC;AACzD,uCAAuC,gEAAgE;AACvG,iCAAiC,4CAA4C;AAC7E,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,oBAAoB,8CAA8C,+CAAO,EAAE;AAC3E,oBAAoB,8CAA8C,+CAAO,EAAE;AAC3E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,gDAAgD,+CAAO,EAAE;AAC7E,oBAAoB,8CAA8C,+CAAO,EAAE;AAC3E,oBAAoB,8CAA8C,+CAAO,EAAE;AAC3E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,+BAA+B;AACnD,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,gDAAgD,+CAAO,EAAE;AAC7E;AACA,IAAI,wDAAkB,UAAU,WAAW;AAC3C,IAAI,wDAAkB,0BAA0B,WAAW;AAC3D;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,gDAAgD,iDAAS,EAAE;AAC/E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,gDAAgD,iDAAS,EAAE;AAC/E;AACA,IAAI,wDAAkB,eAAe,WAAW;AAChD;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,oBAAoB,8CAA8C,+CAAO,EAAE;AAC3E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,gDAAgD,+CAAO,EAAE;AAC7E,oBAAoB,8CAA8C,+CAAO,EAAE;AAC3E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,+BAA+B;AACnD,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,gDAAgD,+CAAO,EAAE;AAC7E;AACA,IAAI,wDAAkB,eAAe,WAAW;AAChD,IAAI,wDAAkB,mCAAmC,WAAW;AACpE,qBAAqB,2CAAI;AACzB;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,gDAAgD,iDAAS,EAAE;AAC/E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,gDAAgD,iDAAS,EAAE;AAC/E;AACA,IAAI,wDAAkB,eAAe,WAAW;AAChD,qBAAqB,2CAAI;AACzB;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2EAAwB;AACvC;AACA,gCAAgC,2BAA2B;AAC3D;AACA;AACA;AACA,mEAAmE,YAAY;AAC/E;AACA;AACA,KAAK;AACL;AACA;AACA,gCAAgC,4BAA4B;AAC5D;AACA;AACA,KAAK;AACL,gCAAgC,4BAA4B;AAC5D;AACA;AACA,KAAK;AACL,gCAAgC,4BAA4B;AAC5D;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,eAAe,2EAAwB;AACvC;AACA;AACA,iCAAiC,iCAAiC;AAClE;AACA;AACA;AACA,uEAAuE,YAAY;AACnF;AACA;AACA,SAAS;AACT;AACA;AACA,6BAA6B,kCAAkC;AAC/D;AACA;AACA,SAAS;AACT,6BAA6B,kCAAkC;AAC/D;AACA;AACA,SAAS;AACT,6BAA6B,kCAAkC;AAC/D;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2EAAwB;AACvC;AACA,gCAAgC,2BAA2B;AAC3D;AACA;AACA;AACA;AACA;AACA,mEAAmE,YAAY;AAC/E;AACA;AACA,KAAK;AACL;AACA;AACA,gCAAgC,4BAA4B;AAC5D;AACA;AACA;AACA;AACA,KAAK;AACL,gCAAgC,4BAA4B;AAC5D;AACA;AACA,KAAK;AACL,gCAAgC,4BAA4B;AAC5D;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD,+BAA+B,mDAAmD;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,qBAAqB,mDAAmD;AACxE,yBAAyB,2DAAY;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,qBAAqB,mDAAmD;AACxE,yBAAyB,uDAAU,gDAAgD,0EAA6B;AAChH;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,mBAAmB,+DAAc;AACjC;AACA;AACA,qBAAqB,gEAAgE;AACrF,yBAAyB,uDAAU;AACnC,0BAA0B,iDAAM;AAChC,yBAAyB,uDAAU;AACnC,oCAAoC,kEAAsB;AAC1D,oCAAoC,kEAAsB;AAC1D,oCAAoC,mEAAuB;AAC3D,yBAAyB,4DAAY,kBAAkB,mEAAuB;AAC9E,IAAI,wDAAkB,WAAW,WAAW;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,gCAAgC,mDAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA,yCAAyC,WAAW;AACpD,aAAa,eAAe;AAC5B,6BAA6B,aAAa;AAC1C,6BAA6B,aAAa;AAC1C;AACA;AACA;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;ACp8B1B;AACA;AACA;AACA;AACsD;AACnB;AACnC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2EAAwB;AAChD;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,cAAc;AACzE;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,0DAA0D,cAAc;AACxE;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,2DAA2D,YAAY;AACvE;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,+DAA+D,cAAc;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,+DAA+D,cAAc;AAC7E;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,iEAAiE,cAAc;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,iEAAiE,cAAc;AAC/E;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,qEAAqE,cAAc;AACnF;AACA;AACA;AACA;AACA;AACA,mBAAmB,WAAW,gDAAS,EAAE;AACzC,KAAK;AACL,CAAC;AACD,mEAAmE,cAAc;AACjF;AACA;AACA;AACA;AACA;AACA,mBAAmB,WAAW,8CAAO,EAAE;AACvC,KAAK;AACL,CAAC;AACD,wEAAqB;AACI;;;;;;;;;;;;;;;;;;;;;ACnHzB;AACA;AACA;AACA;AACsD;AACjB;AACM;AACN;AACa;AACV;AACxC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA,6EAA6E,mBAAmB;AAChG;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,6BAA6B,YAAY,gBAAgB,iEAAkB;AAC3E,4FAA4F,cAAc;AAC1G;AACA,sCAAsC,gCAAgC;AACtE,sCAAsC,+BAA+B;AACrE,sCAAsC,gCAAgC;AACtE;AACA,oCAAoC,WAAW;AAC/C,sCAAsC,gCAAgC;AACtE,oCAAoC,WAAW;AAC/C;AACA,wBAAwB,gCAAgC;AACxD;AACA,wBAAwB,oEAAyB;AACjD;AACA,sCAAsC,+BAA+B;AACrE,sCAAsC,+BAA+B;AACrE,oCAAoC,WAAW;AAC/C;AACA,sCAAsC,gCAAgC;AACtE,sCAAsC,gCAAgC;AACtE,sCAAsC,gCAAgC;AACtE;AACA;AACA;AACA;AACA,iBAAiB,oEAAoE;AACrF,uBAAuB,iEAAkB;AACzC,qFAAqF,YAAY;AACjG;AACA,sCAAsC,gCAAgC;AACtE,sCAAsC,+BAA+B;AACrE,sCAAsC,gCAAgC;AACtE;AACA,oCAAoC,WAAW;AAC/C,sCAAsC,gCAAgC;AACtE,oCAAoC,WAAW;AAC/C;AACA,wBAAwB,gCAAgC;AACxD;AACA;AACA;AACA,sCAAsC,+BAA+B;AACrE,oCAAoC,WAAW;AAC/C;AACA,sCAAsC,gCAAgC;AACtE,sCAAsC,gCAAgC;AACtE,sCAAsC,gCAAgC;AACtE;AACA;AACA;AACA;AACA,iBAAiB,oEAAoE;AACrF,uBAAuB,8DAAe;AACtC;AACA;AACA,sCAAsC,gCAAgC;AACtE,sCAAsC,gCAAgC;AACtE,sCAAsC,+BAA+B;AACrE,sCAAsC,gCAAgC;AACtE,4CAA4C,aAAa;AACzD;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,6BAA6B,YAAY,gBAAgB,iEAAkB;AAC3E,qFAAqF,cAAc;AACnG;AACA,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE;AACA,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE;AACA,mCAAmC,gCAAgC;AACnE,mCAAmC,+BAA+B;AAClE,sCAAsC,+BAA+B;AACrE,mCAAmC,gCAAgC;AACnE,oCAAoC,WAAW;AAC/C;AACA,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE;AACA;AACA;AACA;AACA,iBAAiB,oEAAoE;AACrF,uBAAuB,8DAAe;AACtC;AACA;AACA,KAAK;AACL;AACA,mCAAmC,gCAAgC;AACnE,mCAAmC,+BAA+B;AAClE,sCAAsC,gCAAgC;AACtE,mCAAmC,gCAAgC;AACnE;AACA,oCAAoC,WAAW;AAC/C,mCAAmC,gCAAgC;AACnE,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE;AACA,mCAAmC,gCAAgC;AACnE,mCAAmC,+BAA+B;AAClE,sCAAsC,+BAA+B;AACrE,mCAAmC,gCAAgC;AACnE,oCAAoC,WAAW;AAC/C;AACA,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,qFAAqF,YAAY;AACjG;AACA,0BAA0B,gDAAM;AAChC,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,sCAAsC,+BAA+B;AACrE,sCAAsC,gCAAgC;AACtE;AACA,0BAA0B,gDAAM;AAChC,sCAAsC,gCAAgC;AACtE,sCAAsC,gCAAgC;AACtE,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C;AACA,0BAA0B,gDAAM;AAChC,mCAAmC,+BAA+B;AAClE,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,mCAAmC,+BAA+B;AAClE,sCAAsC,gCAAgC;AACtE;AACA,0BAA0B,gDAAM;AAChC,sCAAsC,+BAA+B;AACrE,sCAAsC,gCAAgC;AACtE,qEAAqE,cAAc;AACnF;AACA,mCAAmC,+BAA+B;AAClE,sCAAsC,gCAAgC;AACtE,yCAAyC,WAAW;AACpD,wCAAwC,+BAA+B;AACvE;AACA,2CAA2C,+BAA+B;AAC1E;AACA;AACA;AACA;AACA,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,2BAA2B;AAC3B,sBAAsB,sDAAc,uBAAuB;AAC3D;AACA,sBAAsB,oFAAoF;AAC1G,sBAAsB,oFAAoF;AAC1G,sBAAsB,qFAAqF;AAC3G,sBAAsB,qFAAqF;AAC3G;AACA;AACA,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,sCAAsC,+BAA+B;AACrE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C;AACA,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C;AACA,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,sCAAsC,+BAA+B;AACrE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C;AACA,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C;AACA;AACA;AACA,qCAAqC,4DAAoB;AACzD;AACA;AACA;AACA,iBAAiB,0CAA0C;AAC3D;AACA,uBAAuB,iEAAkB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,gBAAgB,aAAa;AAC7B,4BAA4B,YAAY,gBAAgB,8DAAe;AACvE;AACA,uCAAuC,KAAK;AAC5C;AACA;AACA;AACA,0CAA0C,+BAA+B;AACzE,0CAA0C,gCAAgC;AAC1E,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACQ;;;;;;;;;;;;;;;;;ACtS7B;AACA;AACA;AACA;AACsD;AACK;AAC3D;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,6BAA6B,YAAY,gBAAgB,2DAAmB;AAC5E,qFAAqF,YAAY;AACjG,+BAA+B,8CAAM;AACrC;AACA,0BAA0B,8CAAM;AAChC,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,+BAA+B,8CAAM;AACrC,+BAA+B,8CAAM;AACrC;AACA;AACA;AACA;AACA,iBAAiB,oEAAoE;AACrF,uBAAuB,2DAAmB;AAC1C,qFAAqF,YAAY;AACjG,+BAA+B,8CAAM;AACrC,+BAA+B,8CAAM;AACrC,+BAA+B,8CAAM;AACrC;AACA,0BAA0B,8CAAM;AAChC,oCAAoC,YAAY;AAChD,oCAAoC,YAAY;AAChD,oCAAoC,YAAY;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,6BAA6B,oBAAoB,gBAAgB,2DAAmB;AACpF,2FAA2F,YAAY;AACvG;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA;AACA,8CAA8C,gCAAgC;AAC9E;AACA,+BAA+B,8CAAM;AACrC;AACA,0BAA0B,8CAAM;AAChC,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C;AACA,0BAA0B,8CAAM;AAChC,oCAAoC,WAAW;AAC/C;AACA,+BAA+B,8CAAM;AACrC,6BAA6B,2BAA2B,sCAAsC;AAC9F,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,qFAAqF,YAAY;AACjG,+BAA+B,8CAAM;AACrC;AACA,0BAA0B,8CAAM;AAChC,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,+BAA+B,8CAAM;AACrC,+BAA+B,8CAAM;AACrC,qEAAqE,cAAc;AACnF,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,qFAAqF,YAAY;AACjG,+BAA+B,8CAAM,MAAM,mBAAmB;AAC9D,+BAA+B,8CAAM;AACrC,+BAA+B,8CAAM,MAAM,mBAAmB;AAC9D,+BAA+B,8CAAM;AACrC,qDAAqD,cAAc;AACnE,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA,kCAAkC,8CAAM,MAAM,mBAAmB;AACjE,kCAAkC,8CAAM;AACxC,kCAAkC,8CAAM,MAAM,mBAAmB;AACjE,kCAAkC,8CAAM;AACxC;AACA,oBAAoB,cAAc,iBAAiB,kBAAkB;AACrE,oBAAoB,cAAc,iBAAiB,kBAAkB;AACrE,oBAAoB,cAAc,iBAAiB,kBAAkB;AACrE,oBAAoB,cAAc,iBAAiB,kBAAkB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;;AAE1C;AACA;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,kBAAkB;AAC5B;AACA;AACA,KAAK;AACL;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B;AACA;AACA,KAAK;AACL;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B;AACA;AACA,KAAK;AACL;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,8BAA8B,kDAAkD;;AAEhF;AACA;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B;AACA;AACA,KAAK;AACL;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD,sBAAsB,yDAAyD;AAC/E,sBAAsB,sEAAsE;AAC5F;AACA,yBAAyB,oFAAoF;AAC7G,wCAAwC,WAAW;AACnD,sBAAsB,sEAAsE;AAC5F;AACA,yBAAyB,oFAAoF;AAC7G,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD;AACA;AACA,oBAAoB,qCAAqC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,6BAA6B,4CAAI;AACjC;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,6BAA6B,4CAAI;AACjC;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA,8BAA8B,8CAAM;AACpC,8BAA8B,8CAAM;AACpC,8BAA8B,8CAAM;AACpC,8BAA8B,8CAAM;AACpC,8BAA8B,8CAAM;AACpC,8BAA8B,8CAAM;AACpC,iCAAiC,8CAAM;AACvC,iCAAiC,8CAAM;AACvC,iCAAiC,8CAAM;AACvC,iCAAiC,8CAAM;AACvC,iCAAiC,8CAAM;AACvC,iCAAiC,8CAAM;AACvC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kBAAkB,6DAAqB;AACvC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,wEAAqB;AACG;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtXxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsD;AACP;AACI;AAChB;AACU;AACM;AACA;AACR;AACkB;AACrB;AACC;AACE;AACU;AACrD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA,yEAAyE,kCAAkC;AAC3G;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,uBAAuB,2DAAY;AACnC;AACA;AACA;AACA,uCAAuC,2EAA2B,EAAE,uEAAsB;AAC1F;AACA;AACA;AACA,yBAAyB,+DAA+D;AACxF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD;AACA,yBAAyB,+DAA+D;AACxF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE;AACA,yBAAyB,6BAA6B;AACtD;AACA,sBAAsB,gBAAgB,kBAAkB,uDAAU;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,2DAAY;AACvC,2BAA2B,mDAAQ;AACnC,2BAA2B,uDAAU;AACrC,2BAA2B,2DAAY,eAAe,WAAW,iBAAiB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oDAAQ;AAC9B;AACA;AACA,wCAAwC,kDAAO;AAC/C;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS,kBAAkB,uDAAU;AACrC;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,6BAA6B,2CAAI;AACjC,8BAA8B,gDAAM,MAAM,mBAAmB;AAC7D;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA,wEAAqB;AACC;;;;;;;;;;;;;;;;;;;;;;;;;ACtHtB;AACA;AACA;AACA;AACsD;AACrB;AACE;AACY;AACF;AACR;AACI;AACE;AACM;AACD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,sBAAsB,sDAAe;AACrC,mBAAmB,iDAAO,GAAG,cAAc,iBAAiB,kBAAkB;AAC9E;AACA,eAAe,iDAAO,GAAG,cAAc,iBAAiB,kBAAkB;AAC1E;AACA;AACA;AACA,qBAAqB,iDAAO;AAC5B;AACA,cAAc,iBAAiB;AAC/B,cAAc,iBAAiB;AAC/B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,iDAAO;AAC5B;AACA,cAAc,iBAAiB;AAC/B,cAAc,iBAAiB;AAC/B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,qBAAqB,iDAAO;AAC5B;AACA,cAAc,iBAAiB;AAC/B,cAAc,iBAAiB;AAC/B;AACA;AACA,KAAK;AACL,4BAA4B,yDAAW;AACvC;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,mBAAmB;AACrC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,mBAAmB;AACrC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,4BAA4B,iDAAO;AACnC,gCAAgC,yDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,4BAA4B,iDAAO;AACnC;AACA;AACA,KAAK;AACL,sBAAsB,6CAAK,CAAC,mDAAY,UAAU,sDAAc;AAChE;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,4BAA4B,iDAAO;AACnC;AACA;AACA;AACA,KAAK;AACL,sBAAsB,6CAAK,CAAC,mDAAY,UAAU,sDAAc;AAChE;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,4BAA4B,iDAAO;AACnC;AACA;AACA;AACA,KAAK;AACL,gBAAgB,sDAAe,MAAM,sDAAe;AACpD,sBAAsB,6CAAK,CAAC,mDAAY,UAAU,sDAAc;AAChE;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ,gBAAgB,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,4BAA4B,iDAAO;AACnC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,sBAAsB,6CAAK,CAAC,mDAAY,UAAU,sDAAc;AAChE;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,SAAS;AACT;AACA,4CAA4C,iDAAO;AACnD,IAAI,wDAAkB;AACtB,sBAAsB,6CAAK,CAAC,mDAAY,UAAU,sDAAc;AAChE;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA,wEAAqB;AACG;;;;;;;;;;;;;;;;;;;;;;AC9dxB;AACA;AACA;AACA;AACsD;AACnB;AACU;AACJ;AACE;AACA;AACN;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC;AACA,QAAQ,qDAAS;AACjB;AACA,oBAAoB,mDAAQ;AAC5B;AACA;AACA;AACA;AACA,KAAK,EAAE,4DAAiB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B,aAAa;AACb;AACA;AACA,oCAAoC,iDAAO;AAC3C;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,kBAAkB,cAAc,kBAAkB,kBAAkB;AACpE,kBAAkB,cAAc,kBAAkB,kBAAkB;AACpE;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iEAAsB;AAC7C;AACA;AACA;AACA,uBAAuB,mEAAwB;AAC/C;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;AChJzB;AACA;AACA;AACA;AACsD;AACX;AAC3C;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA,KAAK;AACL;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;;;;;;;AC1BzB;AACA;AACA;AACA;AACsD;AACP;AACZ;AACU;AACJ;AACE;AACJ;AACF;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,oCAAoC,iDAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,yEAAsB;AACnD,sBAAsB,mDAAQ;AAC9B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC;AACA,QAAQ,qDAAS;AACjB;AACA,oBAAoB,+CAAM;AAC1B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B,4BAA4B,cAAc,iBAAiB,kBAAkB;AAC7E,4BAA4B,cAAc,iBAAiB,kBAAkB;AAC7E;AACA;AACA;AACA;AACA;AACA,uBAAuB,8DAAqB;AAC5C;AACA;AACA;AACA,uBAAuB,6DAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,kBAAkB,cAAc,kBAAkB,kBAAkB;AACpE,kBAAkB,cAAc,kBAAkB,kBAAkB;AACpE;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B,4BAA4B,cAAc,kBAAkB,kBAAkB,kBAAkB,uDAAU;AAC1G,4BAA4B,cAAc,kBAAkB,kBAAkB;AAC9E;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC,QAAQ,qDAAS;AACjB;AACA,IAAI,8DAAqB;AACzB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,IAAI,6DAAoB;AACxB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,wEAAqB;AACE;;;;;;;;;;;;;;;;AC9LvB;AACA;AACA;AACA;AACsD;AACtD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,wDAAwD,YAAY;AACpE,uCAAuC,aAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,wDAAwD,YAAY;AACpE,uCAAuC,aAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAA8D;AACtF,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACO;;;;;;;;;;;;;;;;;;ACxG5B;AACA;AACA;AACA;AACsD;AACI;AACL;AACrD;AACA;AACA;AACA;AACA,oBAAoB,4EAAyB;AAC7C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,+BAA+B,6EAA6B;AAC5D;AACA;AACA;AACA;AACA,kCAAkC,qEAAqB;AACvD;AACA,uCAAuC,oEAAoB,GAAG,yCAAyC;AACvG;AACA;AACA,mCAAmC,oEAAoB,GAAG,uDAAuD;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iDAAU;AAC9B;AACA,oBAAoB,wDAAiB;AACrC,mBAAmB,uDAAgB;AACnC,SAAS;AACT;AACA;AACA;AACA,oBAAoB,wDAAiB;AACrC,mBAAmB,uDAAgB;AACnC,SAAS;AACT;AACA,oBAAoB,sDAAe;AACnC;AACA,oBAAoB,sDAAe;AACnC,mBAAmB,uDAAgB;AACnC,SAAS;AACT;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA,8BAA8B,oEAAoB;AAClD;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iDAAU;AAC9B;AACA,oBAAoB,wDAAiB;AACrC,mBAAmB,uDAAgB;AACnC,SAAS;AACT;AACA;AACA;AACA,oBAAoB,wDAAiB;AACrC,mBAAmB,uDAAgB;AACnC,SAAS;AACT;AACA,oBAAoB,sDAAe;AACnC;AACA,oBAAoB,wDAAiB;AACrC,mBAAmB,uDAAgB;AACnC,SAAS;AACT;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA,8BAA8B,oEAAoB;AAClD;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACS;;;;;;;;;;;;;;;;;;;;;;AC/I9B;AACA;AACA;AACA;AACsD;AACT;AACV;AACA;AACA;AACE;AACM;AAC3C;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD,sBAAsB,gEAAgE;AACtF;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD;AACA;AACA,qBAAqB,6CAA6C,mBAAmB,wEAA6B;AAClH,qBAAqB,oCAAoC;AACzD,qBAAqB,8BAA8B,mBAAmB,uEAA4B;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,0DAA0D;AAChF,sBAAsB,0DAA0D;AAChF,sBAAsB,0DAA0D;AAChF,sBAAsB,yDAAyD;AAC/E,sBAAsB,yDAAyD;AAC/E,sBAAsB,yDAAyD;AAC/E,sBAAsB,wDAAwD;AAC9E;AACA;AACA,qBAAqB,2BAA2B,mBAAmB,wEAA6B;AAChG,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B,mBAAmB,uEAA4B;AAC/F,qBAAqB,2BAA2B,mBAAmB,wEAA6B;AAChG,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B,mBAAmB,uEAA4B;AAC/F,qBAAqB,2BAA2B,mBAAmB,wEAA6B;AAChG,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B,mBAAmB,uEAA4B;AAC/F,qBAAqB,2BAA2B,mBAAmB,wEAA6B;AAChG,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B,mBAAmB,uEAA4B;AAC/F,qBAAqB,0BAA0B,mBAAmB,uEAA4B;AAC9F;AACA;AACA,4CAA4C,uDAAgB;AAC5D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA,yBAAyB,+DAA+D;AACxF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD,sBAAsB,+DAA+D;AACrF;AACA,yBAAyB,+DAA+D;AACxF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD;AACA;AACA,qBAAqB,MAAM,wDAAiB,0CAA0C;AACtF,qBAAqB,YAAY,yDAAkB,8CAA8C;AACjG,qBAAqB,6DAA6D;AAClF,qBAAqB,wBAAwB,4DAAqB,sCAAsC;AACxG,qBAAqB,0BAA0B,mEAA4B,uBAAuB;AAClG,qBAAqB,4CAA4C;AACjE;AACA,8CAA8C,wDAAiB;AAC/D;AACA;AACA;AACA,2BAA2B,QAAQ,iDAAU,YAAY;AACzD;AACA,kCAAkC,sEAA2B;AAC7D,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD,sBAAsB,gEAAgE;AACtF,sBAAsB,gEAAgE;AACtF,sBAAsB,gEAAgE;AACtF,sBAAsB,gEAAgE;AACtF;AACA;AACA,qBAAqB,+BAA+B,mBAAmB,wEAA6B;AACpG,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B;AAChD,qBAAqB,wCAAwC;AAC7D,qBAAqB,wCAAwC;AAC7D,qBAAqB,+BAA+B;AACpD,qBAAqB,8BAA8B;AACnD;AACA,4DAA4D,wEAA6B;AACzF;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD,sBAAsB,gEAAgE;AACtF,sBAAsB,gEAAgE;AACtF,sBAAsB,gEAAgE;AACtF,sBAAsB,gEAAgE;AACtF;AACA;AACA,qBAAqB,+BAA+B;AACpD,qBAAqB,wCAAwC;AAC7D,qBAAqB,oCAAoC;AACzD,qBAAqB,qCAAqC;AAC1D,qBAAqB,wCAAwC;AAC7D,qBAAqB,0CAA0C;AAC/D,qBAAqB,gCAAgC;AACrD,qBAAqB,8BAA8B;AACnD,qBAAqB,0CAA0C,mBAAmB,wEAA6B;AAC/G;AACA,4DAA4D,wEAA6B;AACzF;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA,qBAAqB,4BAA4B;AACjD,YAAY,qDAAS,GAAG,gBAAgB;AACxC,qBAAqB,4BAA4B;AACjD,YAAY,qDAAS,GAAG,eAAe;AACvC,YAAY,qDAAS,GAAG,eAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yBAAyB,4BAA4B;AACrD,yBAAyB,4BAA4B;AACrD,yBAAyB,2BAA2B;AACpD,yBAAyB,4BAA4B;AACrD,yBAAyB,4BAA4B;AACrD,yBAAyB,2BAA2B;AACpD,yBAAyB,4BAA4B;AACrD,SAAS,aAAa;AACtB;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,4BAA4B,sBAAsB,4DAAoB,EAAE;AACxE;AACA;AACA;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;AC/NzB;AACA;AACA;AACA;AAC8D;AAC3B;AACnC;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2EAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4DAAqB;AACjC,YAAY,4DAAqB;AACjC,YAAY,4DAAqB;AACjC,iBAAiB,yDAAM;AACvB;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,YAAY,2EAA2E,cAAc,0BAA0B,cAAc;AACvM,0DAA0D,+BAA+B;AACzF;AACA;AACA,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,CAAC;AACD;AACA;AACA;AACA,wFAAwF,YAAY,wFAAwF,cAAc,gCAAgC,cAAc;AACxP;AACA;AACA,mCAAmC,+BAA+B;AAClE,mCAAmC,gCAAgC;AACnE;AACA;AACA,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,CAAC;AACD;AACA;AACA;AACA,0EAA0E,YAAY,0CAA0C,cAAc,0BAA0B,cAAc;AACtL;AACA;AACA,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,0DAA0D,+BAA+B;AACzF,0DAA0D,+BAA+B;AACzF,CAAC;AACD;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,gCAAgC,2BAA2B;AAC3D;AACA;AACA,iGAAiG,YAAY;AAC7G;AACA;AACA,aAAa;AACb,0BAA0B,2DAA2D;AACrF;AACA;AACA,6BAA6B,4DAAqB,uBAAuB,4DAAqB;AAC9F,wEAAwE,aAAa;AACrF;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,gCAAgC,2BAA2B;AAC3D;AACA,kFAAkF,YAAY,KAAK,aAAa;AAChH,oFAAoF,cAAc,KAAK,aAAa;AACpH,kFAAkF,cAAc,KAAK,aAAa;AAClH;AACA,6BAA6B,2DAA2D;AACxF,6BAA6B,iDAAiD;AAC9E,iBAAiB,aAAa;AAC9B;AACA,wEAAwE,aAAa;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,gCAAgC,2BAA2B;AAC3D;AACA,oFAAoF,aAAa;AACjG,sFAAsF,aAAa;AACnG,oFAAoF,aAAa;AACjG,sCAAsC,2DAA2D,MAAM,aAAa;AACpH;AACA,wEAAwE,aAAa;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACO;;;;;;;;;;;;;;;;;;;ACtJ5B;AACA;AACA;AACA;AACsD;AACnB;AACc;AACV;AACvC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,mBAAmB,yDAAW;AAC9B;AACA;AACA;AACA,sBAAsB,sDAAe;AACrC;AACA,YAAY,gDAAY;AACxB,YAAY,gDAAY;AACxB,YAAY,gDAAY;AACxB;AACA,mBAAmB,yDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACO;;;;;;;;;;;;;;;;;;;ACvC5B;AACA;AACA;AACA;AACsD;AACjB;AACkB;AACF;AACrD;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,wBAAwB,6DAAa;AACrC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,kBAAkB;AACtE,oFAAoF,SAAS;AAC7F,uBAAuB,6CAAK;AAC5B;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,IAAI,gEAAwB;AAC5B,QAAQ,+DAAc;AACtB,QAAQ,+DAAc;AACtB,QAAQ,+DAAc;AACtB;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,YAAY;AACxC;AACA,sBAAsB,8CAA8C;AACpE,wBAAwB,aAAa;AACrC,sBAAsB,4CAA4C;AAClE,sBAAsB,6CAA6C;AACnE,wBAAwB,WAAW;AACnC,sBAAsB,0DAA0D;AAChF,wBAAwB,aAAa;AACrC,sBAAsB,8CAA8C;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACS;;;;;;;;;;;;;;;;;;ACnJ9B;AACA;AACA;AACA;AACsD;AACR;AACL;AACzC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,6BAA6B,YAAY,gBAAgB,kEAAmB;AAC5E,qDAAqD,YAAY;AACjE,8BAA8B,iDAAO;AACrC,8BAA8B,iDAAO;AACrC,8BAA8B,iDAAO;AACrC;AACA;AACA;AACA;AACA,iBAAiB,oEAAoE;AACrF,uBAAuB,kEAAmB;AAC1C,qDAAqD,cAAc;AACnE,8BAA8B,iDAAO;AACrC,8BAA8B,iDAAO;AACrC,8BAA8B,iDAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,6BAA6B,YAAY,gBAAgB,kEAAmB;AAC5E,qDAAqD,YAAY;AACjE,yBAAyB,iDAAO;AAChC;AACA;AACA,yBAAyB,iDAAO;AAChC;AACA;AACA,yBAAyB,iDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,oEAAoE;AACrF,uBAAuB,kEAAmB;AAC1C,qDAAqD,cAAc;AACnE,yBAAyB,iDAAO;AAChC;AACA;AACA,yBAAyB,iDAAO;AAChC;AACA;AACA,yBAAyB,iDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACG;;;;;;;;;;;;;;;;;AClFxB;AACA;AACA;AACA;AACsD;AACf;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACE;;;;;;;;;;;;;;;;;;;;ACtEvB;AACA;AACA;AACA;AACsD;AACrB;AACY;AACV;AACI;AACvC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,8CAAO;AAC1C,qCAAqC,gDAAS;AAC9C;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA,eAAe,0BAA0B;AACzC,eAAe,0BAA0B;AACzC;AACA;AACA,iBAAiB,QAAQ,+BAA+B;AACxD;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC,eAAe,0BAA0B;AACzC,eAAe,2BAA2B;AAC1C;AACA;AACA,iBAAiB,QAAQ,+BAA+B;AACxD;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,mBAAmB,UAAU,+DAAsB,EAAE;AACrD,KAAK;AACL;AACA;AACA,mBAAmB,UAAU,+DAAsB,EAAE;AACrD,KAAK;AACL;AACA,iBAAiB,QAAQ,+BAA+B;AACxD;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,sBAAsB,+DAAsB;AAC5C;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,sBAAsB,+DAAsB;AAC5C;AACA,SAAS;AACT,KAAK;AACL;AACA,iBAAiB,QAAQ,+BAA+B;AACxD;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,gCAAgC;AAC1C,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA,IAAI,wDAAkB,gBAAgB,WAAW;AACjD,sBAAsB,eAAe,IAAI,eAAe,IAAI,eAAe,IAAI,eAAe;AAC9F;AACA;AACA;AACA,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC,aAAa,6BAA6B;AAC1C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA,UAAU,kCAAkC;AAC5C,UAAU,mCAAmC;AAC7C,UAAU,kCAAkC;AAC5C,UAAU,kCAAkC;AAC5C,UAAU,mCAAmC;AAC7C,UAAU,mCAAmC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA,UAAU,kCAAkC;AAC5C,UAAU,mCAAmC;AAC7C,UAAU,kCAAkC;AAC5C,UAAU,kCAAkC;AAC5C,UAAU,mCAAmC;AAC7C,UAAU,mCAAmC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,iBAAiB,QAAQ,+BAA+B;AACxD;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA,wEAAqB;AACE;;;;;;;;;;;;;;;;;;;;;ACrdvB;AACA;AACA;AACA;AACA;AACA;AACA;AACsD;AACD;AACR;AACQ;AACZ;AACuE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kBAAkB,qDAAS,GAAG,8BAA8B;AAC5D,cAAc,2DAAW;AACzB,cAAc,0DAAU;AACxB,iBAAiB,yDAAS;AAC1B,kBAAkB,iDAAO,GAAG,cAAc,iBAAiB,kBAAkB;AAC7E,cAAc,yDAAS;AACvB,iBAAiB,2DAAW;AAC5B,cAAc,sDAAM;AACpB,cAAc,+DAAe;AAC7B,cAAc,sDAAM;AACpB;AACA;AACA;AACA,oBAAoB,6DAAa;AACjC,cAAc,+DAAe;AAC7B;AACA;AACA;AACA;AACA;AACA,cAAc,+DAAe;AAC7B,iBAAiB,sDAAM;AACvB,cAAc,0DAAU;AACxB,cAAc,2DAAW;AACzB,cAAc,0DAAU;AACxB,iBAAiB,sDAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,sEAAsB;AACvD;AACA;AACA;AACA,6BAA6B,8DAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,sEAAsB;AACvD;AACA;AACA,6BAA6B,8DAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;ACvG1B;AACA;AACA;AACA;AACsD;AACf;AACvC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC,sCAAsC,4EAA4E;AAClH,uCAAuC,6EAA6E;AACpH;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT,oCAAoC,+EAA+E;AACnH,qCAAqC,gFAAgF;AACrH,oCAAoC,cAAc;AAClD,qCAAqC,eAAe;AACpD,oCAAoC,cAAc;AAClD,qCAAqC,eAAe;AACpD,KAAK;AACL;AACA;AACA,IAAI,sDAAa;AACjB,eAAe,2EAAwB;AACvC;AACA,+BAA+B,0BAA0B;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,sDAAa;AACjB,eAAe,2EAAwB;AACvC;AACA,+BAA+B,0BAA0B;AACzD;AACA;AACA,yBAAyB,wCAAwC;AACjE,yBAAyB,0CAA0C;AACnE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,sDAAa;AACjB,eAAe,2EAAwB;AACvC;AACA,+BAA+B,0BAA0B;AACzD;AACA;AACA,wCAAwC,gCAAgC,MAAM,aAAa;AAC3F,qDAAqD,aAAa;AAClE;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACE;;;;;;;;;;;;;;;;;;;;AC7EvB;AACA;AACA;AACA;AAC6D;AAClB;AAC3C,eAAe,uDAAY;AAC3B;AACA;AACA;AACA,wBAAwB,yDAAiB;AACzC,IAAI,yDAAiB;AACrB;AACA;AACA,IAAI,yDAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,gEAAwB;AACrC;AACA;AACA;AACA;AACA;AACA,aAAa,gEAAwB;AACrC;AACA;AACA;AACA;AACA;AACA,aAAa,6DAAqB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa,6DAAqB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa,gEAAwB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,YAAY,kBAAkB;AAC5C;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,QAAQ,IAAI,UAAU;AACnE;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA,gBAAgB,qBAAqB;AACrC,mBAAmB,+CAAO,GAAG,YAAY,qCAAqC;AAC9E;AACA;AACA;AACA;AACA;AACA,qEAAqE,yBAAyB,gCAAgC;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,yBAAyB,gCAAgC;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,sBAAsB,gCAAgC;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,sBAAsB,gCAAgC;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,uBAAuB,gCAAgC;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4DAAoB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,SAAS;AAC7D,gCAAgC,2BAA2B,GAAG,WAAW,GAAG,SAAS,EAAE,SAAS;AAChG,0DAA0D;AAC1D;AACA,yEAAyE,oBAAoB;AAC7F;AACA;AACA;AACA;AACA,2BAA2B,wEAAwE;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,kBAAkB;AACnF;AACA,gEAAgE,UAAU,IAAI,cAAc;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,OAAO,EAAE,yBAAyB,GAAG,mBAAmB,GAAG,cAAc;AAC5G;AACA,kCAAkC;AAClC,0CAA0C,6DAAqB;AAC/D,+CAA+C,8DAAsB,GAAG,iEAAyB;AACjG;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAe;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACwB;AACxB;AACA;AACA;AACA;AACO;AACP;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAS;;;;;;;;;;;;;;;;;ACjXT;AACA;AACA;AACA;AACA;AACA;AACsD;AAC+yB;AACr2B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,iBAAiB,kDAAU;AAC3B,iBAAiB,kDAAU;AAC3B,iBAAiB,oDAAY;AAC7B,iBAAiB,+CAAO;AACxB,iBAAiB,+CAAO;AACxB,iBAAiB,4CAAI;AACrB,iBAAiB,4CAAI;AACrB,iBAAiB,mDAAW;AAC5B,iBAAiB,8DAAsB;AACvC,iBAAiB,mDAAW;AAC5B,iBAAiB,4CAAI;AACrB,iBAAiB,gDAAQ;AACzB,iBAAiB,iDAAS;AAC1B,iBAAiB,6CAAK;AACtB,iBAAiB,2CAAG;AACpB,iBAAiB,iDAAS;AAC1B,iBAAiB,+CAAO;AACxB,iBAAiB,+CAAO;AACxB,iBAAiB,uDAAe;AAChC,iBAAiB,4CAAI;AACrB,iBAAiB,iDAAS;AAC1B,yBAAyB,iDAAS;AAClC,iBAAiB,gDAAQ;AACzB,iBAAiB,sDAAc;AAC/B,iBAAiB,iDAAS;AAC1B,iBAAiB,6CAAK;AACtB,iBAAiB,iDAAS;AAC1B,iBAAiB,iDAAS;AAC1B,iBAAiB,sDAAc;AAC/B,iBAAiB,oDAAY;AAC7B,iBAAiB,kDAAU;AAC3B,iBAAiB,oDAAY;AAC7B,iBAAiB,kDAAU;AAC3B,iBAAiB,gDAAQ;AACzB,iBAAiB,uDAAe;AAChC,iBAAiB,wDAAgB;AACjC,iBAAiB,6CAAK;AACtB,iBAAiB,4CAAI;AACrB,iBAAiB,gDAAQ;AACzB,iBAAiB,oDAAY;AAC7B,iBAAiB,gDAAQ;AACzB,iBAAiB,8CAAM;AACvB,iBAAiB,oDAAY;AAC7B,iBAAiB,gDAAQ;AACzB,iBAAiB,gDAAQ;AACzB,iBAAiB,kDAAU;AAC3B,iBAAiB,kDAAU;AAC3B,iBAAiB,6CAAK;AACtB,oBAAoB,6CAAK;AACzB,iBAAiB,sDAAc;AAC/B,iBAAiB,oDAAY;AAC7B,iBAAiB,iDAAS;AAC1B,iBAAiB,qDAAa;AAC9B,iBAAiB,iDAAS;AAC1B,iBAAiB,kDAAU;AAC3B,iBAAiB,iDAAS;AAC1B,iBAAiB,gDAAQ;AACzB,iBAAiB,4CAAI;AACrB,iBAAiB,oDAAY;AAC7B,iBAAiB,8CAAM;AACvB,iBAAiB,8CAAM;AACvB,iBAAiB,+CAAO;AACxB,iBAAiB,gDAAQ;AACzB,iBAAiB,gDAAQ;AACzB,iBAAiB,8CAAM;AACvB,iBAAiB,mDAAW;AAC5B,iBAAiB,oDAAY;AAC7B,iBAAiB,qDAAa;AAC9B,iBAAiB,gDAAQ;AACzB,iBAAiB,mDAAW;AAC5B,iBAAiB,qDAAa;AAC9B,iBAAiB,mDAAW;AAC5B,iBAAiB,+CAAO;AACxB,iBAAiB,8CAAM;AACvB,iBAAiB,8CAAM;AACvB,iBAAiB,+CAAO;AACxB,iBAAiB,sDAAc;AAC/B,iBAAiB,6CAAK;AACtB,iBAAiB,6CAAK;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,YAAY,wCAAwC;AACpD,iBAAiB,kDAAU;AAC3B,iBAAiB,kDAAU;AAC3B;AACA;AACA;AACA,qBAAqB,kDAAU;AAC/B;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;AC9HzB;AACA;AACA;AACA;AACsD;AAC2B;AACjF;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,oCAAoC,+CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS,kBAAkB,+CAAO;AAClC;AACA,0BAA0B,kBAAkB;AAC5C;AACA,SAAS,kBAAkB,+CAAO;AAClC;AACA,IAAI,+DAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS,kBAAkB,+CAAO;AAClC;AACA,0BAA0B,kBAAkB;AAC5C;AACA,SAAS,kBAAkB,+CAAO;AAClC;AACA,IAAI,+DAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAe,EAAE,yEAAsB;AACvD,sBAAsB,gDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,6BAA6B,4CAAI;AACjC,6BAA6B,4CAAI;AACjC,6BAA6B,+CAAO;AACpC;AACA,0BAA0B,kBAAkB;AAC5C;AACA,SAAS;AACT,6BAA6B,4CAAI;AACjC,6BAA6B,+CAAO;AACpC;AACA,0BAA0B,kBAAkB;AAC5C;AACA,SAAS,kBAAkB,+CAAO;AAClC;AACA,IAAI,+DAAuB;AAC3B;AACA;AACA,wEAAqB;AACG;;;;;;;;;;;;;;;;AClGxB;AACA;AACA;AACA;AACA;AACA;AACsD;AACtD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,wBAAwB,2EAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS;AAC5B,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC,KAAK;AACL,CAAC;AACD,wEAAqB;AACU;;;;;;;;;;;;;;;;;;;;;;;ACnD/B;AACA;AACA;AACA;AACsD;AACnB;AACU;AACR;AACS;AACD;AACR;AACE;AACvC;AACA;AACA;AACA;AACA;AACA,QAAQ,wEAAqB;AAC7B,KAAK;AACL;AACA,kBAAkB,sDAAe;AACjC;AACA,iCAAiC,gDAAY;AAC7C;AACA;AACA;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK,sEAAsE,+DAAgB;AACjH;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,+BAA+B;AACvD;AACA;AACA,sBAAsB,6CAAK,CAAC,mDAAY,UAAU,uDAAe;AACjE,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,qDAAS,GAAG,8BAA8B;AAChG;AACA,wEAAqB;AACC;;;;;;;UC3EtB;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACuC;AACI;AACR;AACuB;AACH;AACvD,sEAAiB;AACjB,wDAAiB;AACjB,mEAAa;AACb;AAC6B;AACE;AAC/B;AACA,iEAAe,8BAA8B,EAAE,uCAAM,GAAG,yCAAQ,CAAC,EAAC","sources":["webpack://Vex/webpack/universalModuleDefinition","webpack://Vex/./src/version.ts","webpack://Vex/./src/accidental.ts","webpack://Vex/./src/annotation.ts","webpack://Vex/./src/articulation.ts","webpack://Vex/./src/barnote.ts","webpack://Vex/./src/beam.ts","webpack://Vex/./src/bend.ts","webpack://Vex/./src/boundingbox.ts","webpack://Vex/./src/boundingboxcomputation.ts","webpack://Vex/./src/canvascontext.ts","webpack://Vex/./src/chordsymbol.ts","webpack://Vex/./src/clef.ts","webpack://Vex/./src/clefnote.ts","webpack://Vex/./src/crescendo.ts","webpack://Vex/./src/curve.ts","webpack://Vex/./src/dot.ts","webpack://Vex/./src/easyscore.ts","webpack://Vex/./src/element.ts","webpack://Vex/./src/factory.ts","webpack://Vex/./src/flow.ts","webpack://Vex/./src/font.ts","webpack://Vex/./src/fonts/bravura_glyphs.ts","webpack://Vex/./src/fonts/common_metrics.ts","webpack://Vex/./src/fonts/custom_glyphs.ts","webpack://Vex/./src/fonts/gonville_glyphs.ts","webpack://Vex/./src/fonts/leland_glyphs.ts","webpack://Vex/./src/fonts/load_all.ts","webpack://Vex/./src/fonts/load_bravura.ts","webpack://Vex/./src/fonts/load_custom.ts","webpack://Vex/./src/fonts/load_gonville.ts","webpack://Vex/./src/fonts/load_leland.ts","webpack://Vex/./src/fonts/load_petaluma.ts","webpack://Vex/./src/fonts/petaluma_glyphs.ts","webpack://Vex/./src/fonts/petalumascript_glyphs.ts","webpack://Vex/./src/fonts/robotoslab_glyphs.ts","webpack://Vex/./src/fonts/sans_bold_text_metrics.ts","webpack://Vex/./src/fonts/sans_text_metrics.ts","webpack://Vex/./src/fonts/serif_text_metrics.ts","webpack://Vex/./src/fonts/textfonts.ts","webpack://Vex/./src/formatter.ts","webpack://Vex/./src/fraction.ts","webpack://Vex/./src/frethandfinger.ts","webpack://Vex/./src/ghostnote.ts","webpack://Vex/./src/glyph.ts","webpack://Vex/./src/glyphnote.ts","webpack://Vex/./src/gracenote.ts","webpack://Vex/./src/gracenotegroup.ts","webpack://Vex/./src/gracetabnote.ts","webpack://Vex/./src/index.ts","webpack://Vex/./src/keymanager.ts","webpack://Vex/./src/keysignature.ts","webpack://Vex/./src/keysignote.ts","webpack://Vex/./src/modifier.ts","webpack://Vex/./src/modifiercontext.ts","webpack://Vex/./src/multimeasurerest.ts","webpack://Vex/./src/music.ts","webpack://Vex/./src/note.ts","webpack://Vex/./src/notehead.ts","webpack://Vex/./src/notesubgroup.ts","webpack://Vex/./src/ornament.ts","webpack://Vex/./src/parenthesis.ts","webpack://Vex/./src/parser.ts","webpack://Vex/./src/pedalmarking.ts","webpack://Vex/./src/registry.ts","webpack://Vex/./src/rendercontext.ts","webpack://Vex/./src/renderer.ts","webpack://Vex/./src/repeatnote.ts","webpack://Vex/./src/stave.ts","webpack://Vex/./src/stavebarline.ts","webpack://Vex/./src/staveconnector.ts","webpack://Vex/./src/stavehairpin.ts","webpack://Vex/./src/staveline.ts","webpack://Vex/./src/stavemodifier.ts","webpack://Vex/./src/stavenote.ts","webpack://Vex/./src/staverepetition.ts","webpack://Vex/./src/stavesection.ts","webpack://Vex/./src/stavetempo.ts","webpack://Vex/./src/stavetext.ts","webpack://Vex/./src/stavetie.ts","webpack://Vex/./src/stavevolta.ts","webpack://Vex/./src/stem.ts","webpack://Vex/./src/stemmablenote.ts","webpack://Vex/./src/stringnumber.ts","webpack://Vex/./src/strokes.ts","webpack://Vex/./src/svgcontext.ts","webpack://Vex/./src/system.ts","webpack://Vex/./src/tables.ts","webpack://Vex/./src/tabnote.ts","webpack://Vex/./src/tabslide.ts","webpack://Vex/./src/tabstave.ts","webpack://Vex/./src/tabtie.ts","webpack://Vex/./src/textbracket.ts","webpack://Vex/./src/textdynamics.ts","webpack://Vex/./src/textformatter.ts","webpack://Vex/./src/textnote.ts","webpack://Vex/./src/tickable.ts","webpack://Vex/./src/tickcontext.ts","webpack://Vex/./src/timesigglyph.ts","webpack://Vex/./src/timesignature.ts","webpack://Vex/./src/timesignote.ts","webpack://Vex/./src/tremolo.ts","webpack://Vex/./src/tuning.ts","webpack://Vex/./src/tuplet.ts","webpack://Vex/./src/typeguard.ts","webpack://Vex/./src/util.ts","webpack://Vex/./src/vex.ts","webpack://Vex/./src/vibrato.ts","webpack://Vex/./src/vibratobracket.ts","webpack://Vex/./src/voice.ts","webpack://Vex/./src/web.ts","webpack://Vex/./tests/accidental_tests.ts","webpack://Vex/./tests/annotation_tests.ts","webpack://Vex/./tests/articulation_tests.ts","webpack://Vex/./tests/auto_beam_formatting_tests.ts","webpack://Vex/./tests/bach_tests.ts","webpack://Vex/./tests/barline_tests.ts","webpack://Vex/./tests/beam_tests.ts","webpack://Vex/./tests/bend_tests.ts","webpack://Vex/./tests/boundingbox_tests.ts","webpack://Vex/./tests/chordsymbol_tests.ts","webpack://Vex/./tests/clef_tests.ts","webpack://Vex/./tests/crossbeam_tests.ts","webpack://Vex/./tests/curve_tests.ts","webpack://Vex/./tests/dot_tests.ts","webpack://Vex/./tests/easyscore_tests.ts","webpack://Vex/./tests/factory_tests.ts","webpack://Vex/./tests/font_tests.ts","webpack://Vex/./tests/formatter_tests.ts","webpack://Vex/./tests/fraction_tests.ts","webpack://Vex/./tests/ghostnote_tests.ts","webpack://Vex/./tests/glyphnote_tests.ts","webpack://Vex/./tests/gracenote_tests.ts","webpack://Vex/./tests/gracetabnote_tests.ts","webpack://Vex/./tests/index.ts","webpack://Vex/./tests/key_clef_tests.ts","webpack://Vex/./tests/keymanager_tests.ts","webpack://Vex/./tests/keysignature_tests.ts","webpack://Vex/./tests/mocks.ts","webpack://Vex/./tests/modifier_tests.ts","webpack://Vex/./tests/multimeasurerest_tests.ts","webpack://Vex/./tests/music_tests.ts","webpack://Vex/./tests/notehead_tests.ts","webpack://Vex/./tests/notesubgroup_tests.ts","webpack://Vex/./tests/offscreencanvas_tests.ts","webpack://Vex/./tests/ornament_tests.ts","webpack://Vex/./tests/parser_tests.ts","webpack://Vex/./tests/pedalmarking_tests.ts","webpack://Vex/./tests/percussion_tests.ts","webpack://Vex/./tests/registry_tests.ts","webpack://Vex/./tests/renderer_tests.ts","webpack://Vex/./tests/rests_tests.ts","webpack://Vex/./tests/rhythm_tests.ts","webpack://Vex/./tests/stave_tests.ts","webpack://Vex/./tests/staveconnector_tests.ts","webpack://Vex/./tests/stavehairpin_tests.ts","webpack://Vex/./tests/staveline_tests.ts","webpack://Vex/./tests/stavemodifier_tests.ts","webpack://Vex/./tests/stavenote_tests.ts","webpack://Vex/./tests/stavetie_tests.ts","webpack://Vex/./tests/stringnumber_tests.ts","webpack://Vex/./tests/strokes_tests.ts","webpack://Vex/./tests/style_tests.ts","webpack://Vex/./tests/tabnote_tests.ts","webpack://Vex/./tests/tabslide_tests.ts","webpack://Vex/./tests/tabstave_tests.ts","webpack://Vex/./tests/tabtie_tests.ts","webpack://Vex/./tests/textbracket_tests.ts","webpack://Vex/./tests/textformatter_tests.ts","webpack://Vex/./tests/textnote_tests.ts","webpack://Vex/./tests/threevoice_tests.ts","webpack://Vex/./tests/tickcontext_tests.ts","webpack://Vex/./tests/timesignature_tests.ts","webpack://Vex/./tests/tremolo_tests.ts","webpack://Vex/./tests/tuning_tests.ts","webpack://Vex/./tests/tuplet_tests.ts","webpack://Vex/./tests/typeguard_tests.ts","webpack://Vex/./tests/unison_tests.ts","webpack://Vex/./tests/vexflow_test_helpers.ts","webpack://Vex/./tests/vf_prefix_tests.ts","webpack://Vex/./tests/vibrato_tests.ts","webpack://Vex/./tests/vibratobracket_tests.ts","webpack://Vex/./tests/voice_tests.ts","webpack://Vex/webpack/bootstrap","webpack://Vex/webpack/runtime/define property getters","webpack://Vex/webpack/runtime/global","webpack://Vex/webpack/runtime/hasOwnProperty shorthand","webpack://Vex/webpack/runtime/make namespace object","webpack://Vex/./entry/vexflow-debug-with-tests.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Vex\"] = factory();\n\telse\n\t\troot[\"Vex\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","export const VERSION = '4.2.6';\nexport const ID = '103aad2b14837418c5e96c9e078edd036fcddf60';\nexport const DATE = '2024-08-26T20:16:17.134Z';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accidentalLinePositionsAndSpaceNeeds = [];\n let prevNote = undefined;\n let extraXSpaceNeededForLeftDisplacedNotehead = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n // If the current extra left-space needed isn't as big as this note's,\n // then we need to use this note's.\n extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accidentalLinePositionsAndSpaceNeeds.push({\n y,\n line: accLine,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n spacingBetweenStaveLines: lineSpace,\n });\n }\n else {\n accidentalLinePositionsAndSpaceNeeds.push({\n line: props.line,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n });\n }\n }\n // Sort accidentals by line number.\n accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line);\n const staveLineAccidentalLayoutMetrics = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let maxExtraXSpaceNeeded = 0;\n // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics)\n // from accidentalLinePositionsAndSpaceNeeds\n for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) {\n const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i];\n const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1];\n let currentLineMetric;\n // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric\n if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) {\n currentLineMetric = {\n line: accidentalLinePositionAndSpaceNeeds.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n };\n staveLineAccidentalLayoutMetrics.push(currentLineMetric);\n }\n else {\n currentLineMetric = priorLineMetric;\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' &&\n accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') {\n currentLineMetric.flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') {\n currentLineMetric.dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n currentLineMetric.numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing;\n // if this extraXSpaceNeeded is the largest so far, use it as the starting point for\n // all accidental columns.\n maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded);\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd])\n ? 'a'\n : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) {\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = leftShift + maxExtraXSpaceNeeded;\n columnXOffsets[0] = leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded;\n accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift = totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\nexport { Accidental };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\nexport { Annotation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\nexport { Articulation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n this.barline = new Barline(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n ctx.openGroup('barnote', this.getAttribute('id'));\n this.barline.setType(this.type);\n this.barline.setX(this.getAbsoluteX());\n this.barline.draw(this.checkStave());\n ctx.closeGroup();\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\nexport { BarNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nclass Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Bend };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height, devicePixelRatio) {\n var _a;\n const canvas = this.context2D.canvas;\n const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : globalObject().devicePixelRatio) !== null && _a !== void 0 ? _a : 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / dpr) | 0;\n height = (height / dpr) | 0;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(dpr, dpr);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\nexport { ChordSymbol };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\nexport { Clef };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\nexport { Crescendo };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\nexport { EasyScore };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Element };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Factory };\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static getMusicFontStack() {\n return Tables.MUSIC_FONT_STACK;\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\nexport { Flow };\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\nexport { Font };\n","export const BravuraFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 469,\n y_min: 0,\n y_max: 295,\n ha: 295,\n o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 469,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 36,\n y_min: 868,\n y_max: 1120,\n ha: 252,\n o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 500,\n y_min: 0,\n y_max: 502,\n ha: 502,\n o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z',\n },\n segno: {\n x_min: 4,\n x_max: 550,\n y_min: -27,\n y_max: 759,\n ha: 786,\n o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z',\n },\n coda: {\n x_min: -4,\n x_max: 955,\n y_min: -158,\n y_max: 898,\n ha: 1056,\n o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z',\n },\n gClef: {\n x_min: 0,\n x_max: 671,\n y_min: -658,\n y_max: 1098,\n ha: 1756,\n o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z',\n },\n cClef: {\n x_min: 0,\n x_max: 699,\n y_min: -506,\n y_max: 506,\n ha: 1012,\n o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z',\n },\n fClef: {\n x_min: -5,\n x_max: 684,\n y_min: -635,\n y_max: 262,\n ha: 897,\n o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 382,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z',\n },\n '6stringTabClef': {\n x_min: -3,\n x_max: 408,\n y_min: -748,\n y_max: 764,\n ha: 1512,\n o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 314,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 426,\n y_min: -257,\n y_max: 254,\n ha: 511,\n o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 401,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 383,\n y_min: -251,\n y_max: 246,\n ha: 497,\n o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 421,\n y_min: -250,\n y_max: 249,\n ha: 499,\n o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 416,\n y_min: -259,\n y_max: 259,\n ha: 518,\n o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z',\n },\n timeSigCommon: {\n x_min: 5,\n x_max: 424,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 418,\n y_min: -359,\n y_max: 361,\n ha: 720,\n o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z',\n },\n timeSigPlus: {\n x_min: -1,\n x_max: 499,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z',\n },\n timeSigPlusSmall: {\n x_min: -1,\n x_max: 255,\n y_min: -133,\n y_max: 123,\n ha: 256,\n o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 448,\n y_min: -35,\n y_max: 40,\n ha: 75,\n o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z',\n },\n timeSigParensLeft: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 599,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 546,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 377,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 290,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 603,\n y_min: -218,\n y_max: 213,\n ha: 431,\n o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z',\n },\n noteheadCircledWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -225,\n y_max: 211,\n ha: 436,\n o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z',\n },\n noteheadCircledHalf: {\n x_min: -18,\n x_max: 311,\n y_min: -162,\n y_max: 167,\n ha: 329,\n o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z',\n },\n noteheadCircledBlack: {\n x_min: -21,\n x_max: 321,\n y_min: -171,\n y_max: 167,\n ha: 338,\n o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 416,\n y_min: -190,\n y_max: 198,\n ha: 388,\n o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 292,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 207 -180 l 420 180 l 0 180 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 293,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 422 -180 l 207 180 l 0 -180 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 596,\n y_min: -179,\n y_max: 168,\n ha: 347,\n o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z',\n },\n noteheadSlashedWhole1: {\n x_min: -22,\n x_max: 433,\n y_min: -157,\n y_max: 148,\n ha: 305,\n o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z',\n },\n noteheadSlashedHalf1: {\n x_min: -67,\n x_max: 386,\n y_min: -142,\n y_max: 160,\n ha: 302,\n o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z',\n },\n noteheadSlashedBlack1: {\n x_min: -80,\n x_max: 375,\n y_min: -165,\n y_max: 167,\n ha: 332,\n o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 596,\n y_min: -178,\n y_max: 169,\n ha: 347,\n o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z',\n },\n noteheadSlashedWhole2: {\n x_min: -18,\n x_max: 436,\n y_min: -154,\n y_max: 151,\n ha: 305,\n o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 380,\n y_min: -134,\n y_max: 168,\n ha: 302,\n o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z',\n },\n noteheadSlashedBlack2: {\n x_min: -79,\n x_max: 376,\n y_min: -164,\n y_max: 168,\n ha: 332,\n o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 432,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 270,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 251,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z',\n },\n noteheadParenthesis: {\n x_min: -73,\n x_max: 368,\n y_min: -180,\n y_max: 182,\n ha: 362,\n o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z',\n },\n noteheadParenthesisRight: {\n x_min: -36,\n x_max: 73,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 109,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 315,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 -180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 180 l 0 -180 l 488 -180 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 278,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z',\n },\n tremolo1: {\n x_min: -150,\n x_max: 150,\n y_min: -93,\n y_max: 94,\n ha: 187,\n o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 264,\n y_min: -810,\n y_max: 9,\n ha: 819,\n o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 306,\n y_min: -14,\n y_max: 808,\n ha: 822,\n o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -813,\n y_max: 2,\n ha: 815,\n o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 291,\n y_min: -9,\n y_max: 812,\n ha: 821,\n o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 149,\n ha: 961,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 273,\n y_min: -172,\n y_max: 812,\n ha: 984,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 347,\n ha: 1159,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -376,\n y_max: 812,\n ha: 1188,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 533,\n ha: 1345,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -580,\n y_max: 812,\n ha: 1392,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 226,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 168,\n y_min: -335,\n y_max: 341,\n ha: 676,\n o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 249,\n y_min: -348,\n y_max: 350,\n ha: 698,\n o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 247,\n y_min: -125,\n y_max: 127,\n ha: 252,\n o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 411,\n y_min: -175,\n y_max: 437,\n ha: 612,\n o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 1,\n x_max: 227,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 1,\n x_max: 466,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 179,\n y_min: -353,\n y_max: 307,\n ha: 660,\n o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 3,\n x_max: 317,\n y_min: -347,\n y_max: 369,\n ha: 716,\n o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 1,\n x_max: 287,\n y_min: -174,\n y_max: 438,\n ha: 612,\n o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 341,\n y_min: -350,\n y_max: 348,\n ha: 698,\n o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z',\n },\n accidentalBakiyeFlat: {\n x_min: -1,\n x_max: 286,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 229,\n y_min: -337,\n y_max: 322,\n ha: 659,\n o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1,\n x_max: 339,\n y_min: -338,\n y_max: 321,\n ha: 659,\n o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 300,\n y_min: -472,\n y_max: 157,\n ha: 629,\n o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 421,\n y_min: -318,\n y_max: 328,\n ha: 646,\n o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 339,\n y_min: 1,\n y_max: 245,\n ha: 244,\n o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 339,\n y_min: -244,\n y_max: 0,\n ha: 244,\n o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z',\n },\n articTenutoAbove: {\n x_min: -1,\n x_max: 338,\n y_min: 0,\n y_max: 48,\n ha: 48,\n o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z',\n },\n articTenutoBelow: {\n x_min: -1,\n x_max: 338,\n y_min: -48,\n y_max: 0,\n ha: 48,\n o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 84,\n y_min: 0,\n y_max: 84,\n ha: 84,\n o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 84,\n y_min: -84,\n y_max: 0,\n ha: 84,\n o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z',\n },\n articStaccatissimoAbove: {\n x_min: 1,\n x_max: 100,\n y_min: -2,\n y_max: 293,\n ha: 295,\n o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z',\n },\n articStaccatissimoBelow: {\n x_min: 1,\n x_max: 100,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z',\n },\n articMarcatoAbove: {\n x_min: -1,\n x_max: 235,\n y_min: -1,\n y_max: 253,\n ha: 254,\n o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z',\n },\n articMarcatoBelow: {\n x_min: -1,\n x_max: 235,\n y_min: -254,\n y_max: 0,\n ha: 254,\n o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z',\n },\n fermataAbove: {\n x_min: 3,\n x_max: 605,\n y_min: -3,\n y_max: 329,\n ha: 332,\n o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z',\n },\n fermataBelow: {\n x_min: 3,\n x_max: 605,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 603,\n y_min: -1,\n y_max: 333,\n ha: 334,\n o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 603,\n y_min: -333,\n y_max: 1,\n ha: 334,\n o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: 0,\n y_max: 408,\n ha: 408,\n o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 715,\n y_min: -408,\n y_max: 0,\n ha: 408,\n o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 726,\n y_min: 0,\n y_max: 449,\n ha: 449,\n o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 726,\n y_min: -449,\n y_max: 0,\n ha: 449,\n o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 604,\n y_min: 0,\n y_max: 341,\n ha: 341,\n o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 604,\n y_min: -341,\n y_max: 0,\n ha: 341,\n o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z',\n },\n breathMarkComma: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n breathMarkUpbow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n caesura: {\n x_min: 0,\n x_max: 384,\n y_min: -1,\n y_max: 532,\n ha: 533,\n o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 373,\n y_min: 0,\n y_max: 530,\n ha: 530,\n o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 381,\n y_min: -249,\n y_max: 250,\n ha: 499,\n o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 282,\n y_min: -135,\n y_max: 9,\n ha: 144,\n o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z',\n },\n restWholeLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -135,\n y_max: 20,\n ha: 155,\n o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -2,\n y_max: 142,\n ha: 144,\n o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z',\n },\n restHalfLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -13,\n y_max: 142,\n ha: 155,\n o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z',\n },\n restQuarter: {\n x_min: 1,\n x_max: 270,\n y_min: -375,\n y_max: 373,\n ha: 748,\n o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 247,\n y_min: -251,\n y_max: 174,\n ha: 425,\n o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 320,\n y_min: -500,\n y_max: 179,\n ha: 679,\n o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 363,\n y_min: -500,\n y_max: 426,\n ha: 926,\n o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -753,\n y_max: 430,\n ha: 1183,\n o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 485,\n y_min: -750,\n y_max: 689,\n ha: 1439,\n o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z',\n },\n dynamicPiano: {\n x_min: -89,\n x_max: 366,\n y_min: -142,\n y_max: 274,\n ha: 416,\n o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z',\n },\n dynamicMezzo: {\n x_min: -20,\n x_max: 446,\n y_min: -10,\n y_max: 274,\n ha: 284,\n o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z',\n },\n dynamicForte: {\n x_min: -141,\n x_max: 364,\n y_min: -152,\n y_max: 444,\n ha: 596,\n o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z',\n },\n dynamicRinforzando: {\n x_min: -20,\n x_max: 277,\n y_min: 0,\n y_max: 274,\n ha: 274,\n o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 229,\n y_min: -10,\n y_max: 273,\n ha: 283,\n o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z',\n },\n dynamicZ: {\n x_min: -30,\n x_max: 244,\n y_min: -10,\n y_max: 268,\n ha: 278,\n o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z',\n },\n ornamentTrill: {\n x_min: 0,\n x_max: 521,\n y_min: -10,\n y_max: 390,\n ha: 400,\n o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 460,\n y_min: 0,\n y_max: 218,\n ha: 218,\n o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 460,\n y_min: -90,\n y_max: 306,\n ha: 396,\n o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z',\n },\n ornamentMordent: {\n x_min: 1,\n x_max: 729,\n y_min: -73,\n y_max: 319,\n ha: 392,\n o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 725,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z',\n },\n ornamentTremblement: {\n x_min: 1,\n x_max: 985,\n y_min: 0,\n y_max: 244,\n ha: 244,\n o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1119,\n y_min: 0,\n y_max: 481,\n ha: 481,\n o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 2,\n x_max: 1150,\n y_min: -367,\n y_max: 245,\n ha: 612,\n o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1048,\n y_min: -367,\n y_max: 331,\n ha: 698,\n o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 949,\n y_min: 0,\n y_max: 381,\n ha: 381,\n o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1278,\n y_min: 0,\n y_max: 247,\n ha: 247,\n o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1277,\n y_min: -62,\n y_max: 333,\n ha: 395,\n o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 859,\n y_min: -222,\n y_max: 246,\n ha: 468,\n o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z',\n },\n brassScoop: {\n x_min: 1,\n x_max: 320,\n y_min: -373,\n y_max: 13,\n ha: 386,\n o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 489,\n y_min: -40,\n y_max: 346,\n ha: 386,\n o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z',\n },\n brassFallLipShort: {\n x_min: 1,\n x_max: 293,\n y_min: -345,\n y_max: 42,\n ha: 387,\n o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 392,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 304,\n y_min: 0,\n y_max: 304,\n ha: 304,\n o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 379,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 620,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z',\n },\n brassSmear: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 170,\n ha: 170,\n o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 318,\n ha: 318,\n o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z',\n },\n stringsUpBow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 200,\n ha: 200,\n o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 1019,\n y_min: -8,\n y_max: 555,\n ha: 563,\n o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 450,\n y_min: 0,\n y_max: 450,\n ha: 450,\n o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -33,\n x_max: 292,\n y_min: 0,\n y_max: 119,\n ha: 119,\n o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z',\n },\n arrowheadBlackUp: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z',\n },\n arrowheadBlackDown: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z',\n },\n arpeggiatoUp: {\n x_min: 1,\n x_max: 229,\n y_min: 7,\n y_max: 1511,\n ha: 1504,\n o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z',\n },\n arpeggiatoDown: {\n x_min: 1,\n x_max: 229,\n y_min: -4,\n y_max: 1500,\n ha: 1504,\n o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 762,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1232,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z',\n },\n csymHalfDiminished: {\n x_min: -16,\n x_max: 488,\n y_min: -15,\n y_max: 489,\n ha: 504,\n o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 395,\n y_min: 1,\n y_max: 396,\n ha: 395,\n o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 558,\n y_min: 1,\n y_max: 477,\n ha: 476,\n o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 325,\n y_min: 216,\n y_max: 260,\n ha: 44,\n o: 'm 468 374 l 0 374 l 0 311 l 468 311 z',\n },\n csymParensLeftTall: {\n x_min: 1,\n x_max: 185,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z',\n },\n csymParensRightTall: {\n x_min: -20,\n x_max: 164,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 155,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 156,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z',\n },\n csymParensRightVeryTall: {\n x_min: -15,\n x_max: 107,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 999,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z',\n },\n accSagittal5v7KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z',\n },\n accSagittal5v7KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z',\n },\n accSagittal5CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z',\n },\n accSagittal5CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z',\n },\n accSagittal7CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z',\n },\n accSagittal7CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal25SmallDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z',\n },\n accSagittal25SmallDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z',\n },\n accSagittal35MediumDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z',\n },\n accSagittal35MediumDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal11MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z',\n },\n accSagittal11MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z',\n },\n accSagittal11LargeDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal11LargeDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp25SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z',\n },\n accSagittalFlat25SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z',\n },\n accSagittalSharp7CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z',\n },\n accSagittalFlat7CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp5CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z',\n },\n accSagittalSharp5v7kDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z',\n },\n accSagittalFlat5v7kUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z',\n },\n accSagittalSharp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z',\n },\n accSagittalSharp5v7kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -361,\n y_max: 172,\n ha: 533,\n o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5v7kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 361,\n ha: 533,\n o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z',\n },\n accSagittalSharp5CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z',\n },\n accSagittalFlat5CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z',\n },\n accSagittalSharp7CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z',\n },\n accSagittalFlat7CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp25SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z',\n },\n accSagittalFlat25SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z',\n },\n accSagittalSharp35MUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z',\n },\n accSagittalFlat35MDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z',\n },\n accSagittalSharp11MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z',\n },\n accSagittalFlat11MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z',\n },\n accSagittalSharp11LUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11LDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp35LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat35LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp25SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z',\n },\n accSagittalDoubleFlat25SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z',\n },\n accSagittalDoubleSharp7CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z',\n },\n accSagittalDoubleFlat7CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z',\n },\n accSagittalDoubleSharp5CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z',\n },\n accSagittalDoubleFlat5CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z',\n },\n accSagittalDoubleSharp5v7kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z',\n },\n accSagittalDoubleFlat5v7kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z',\n },\n accSagittalDoubleSharp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z',\n },\n accSagittalDoubleFlat: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z',\n },\n accSagittal7v11KleismaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z',\n },\n accSagittal7v11KleismaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal55CommaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z',\n },\n accSagittal55CommaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal7v11CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal7v11CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal5v11SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z',\n },\n accSagittal5v11SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat5v11SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z',\n },\n accSagittalFlat7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z',\n },\n accSagittalSharp55CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z',\n },\n accSagittalFlat55CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z',\n },\n accSagittalSharp17CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z',\n },\n accSagittalFlat17CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z',\n },\n accSagittalSharp7v11kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z',\n },\n accSagittalFlat7v11kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z',\n },\n accSagittalSharp7v11kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z',\n },\n accSagittalFlat7v11kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z',\n },\n accSagittalSharp17CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp55CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat55CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z',\n },\n accSagittalSharp7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z',\n },\n accSagittalFlat7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z',\n },\n accSagittalFlat5v11SDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp5v11SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat5v11SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp7v11CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z',\n },\n accSagittalDoubleFlat7v11CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z',\n },\n accSagittalDoubleSharp55CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z',\n },\n accSagittalDoubleFlat55CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z',\n },\n accSagittalDoubleSharp17CDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z',\n },\n accSagittalDoubleFlat17CUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z',\n },\n accSagittalDoubleSharp7v11kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat7v11kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittal23CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z',\n },\n accSagittal23CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z',\n },\n accSagittal5v19CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z',\n },\n accSagittal5v19CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal5v23SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z',\n },\n accSagittal5v23SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittalSharp5v23SDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z',\n },\n accSagittalFlat5v23SUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z',\n },\n accSagittalFlat5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z',\n },\n accSagittalFlat23CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z',\n },\n accSagittalSharp23CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z',\n },\n accSagittalFlat23CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalFlat5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z',\n },\n accSagittalSharp5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z',\n },\n accSagittalDoubleSharp5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z',\n },\n accSagittalDoubleFlat5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z',\n },\n accSagittalDoubleSharp5v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z',\n },\n accSagittalDoubleFlat5v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z',\n },\n accSagittalDoubleSharp23CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalDoubleFlat23CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z',\n },\n accSagittal19SchismaUp: {\n x_min: 0,\n x_max: 125,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z',\n },\n accSagittal19SchismaDown: {\n x_min: 0,\n x_max: 125,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal143CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z',\n },\n accSagittal143CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal11v49CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z',\n },\n accSagittal11v49CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z',\n },\n accSagittal19CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal19CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal7v19CommaUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal7v19CommaDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal49SmallDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal49SmallDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal23SmallDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal23SmallDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal5v13MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z',\n },\n accSagittal5v13MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z',\n },\n accSagittal11v19MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z',\n },\n accSagittal11v19MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z',\n },\n accSagittal49MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z',\n },\n accSagittal49MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z',\n },\n accSagittal5v49MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z',\n },\n accSagittal5v49MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z',\n },\n accSagittal49LargeDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z',\n },\n accSagittal49LargeDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z',\n },\n accSagittal11v19LargeDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z',\n },\n accSagittal11v19LargeDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z',\n },\n accSagittal5v13LargeDiesisUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z',\n },\n accSagittal5v13LargeDiesisDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z',\n },\n accSagittalFlat23SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp49SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z',\n },\n accSagittalFlat49SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalSharp7v19CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z',\n },\n accSagittalFlat7v19CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z',\n },\n accSagittalSharp19CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z',\n },\n accSagittalFlat19CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z',\n },\n accSagittalSharp11v49CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat11v49CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z',\n },\n accSagittalSharp143CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat143CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z',\n },\n accSagittalFlat17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z',\n },\n accSagittalSharp19sDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z',\n },\n accSagittalFlat19sUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z',\n },\n accSagittalSharp19sUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z',\n },\n accSagittalFlat19sDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z',\n },\n accSagittalSharp17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp143CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalFlat143CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp11v49CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z',\n },\n accSagittalFlat11v49CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z',\n },\n accSagittalSharp19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp49SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat49SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp23SUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat23SDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp5v13MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z',\n },\n accSagittalFlat5v13MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z',\n },\n accSagittalSharp11v19MUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11v19MDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp49MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z',\n },\n accSagittalFlat49MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z',\n },\n accSagittalSharp5v49MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z',\n },\n accSagittalFlat5v49MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z',\n },\n accSagittalSharp49LUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z',\n },\n accSagittalFlat49LDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z',\n },\n accSagittalSharp11v19LUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z',\n },\n accSagittalFlat11v19LDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v13LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat5v13LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalDoubleSharp23SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalDoubleFlat23SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z',\n },\n accSagittalDoubleSharp49SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z',\n },\n accSagittalDoubleFlat49SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalDoubleSharp7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalDoubleFlat7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z',\n },\n accSagittalDoubleSharp19CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z',\n },\n accSagittalDoubleFlat19CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z',\n },\n accSagittalDoubleSharp11v49CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat11v49CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp143CDown: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat143CUp: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp17kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat17kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittalDoubleSharp19sDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalDoubleFlat19sUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalShaftUp: {\n x_min: 0,\n x_max: 31,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z',\n },\n accSagittalShaftDown: {\n x_min: 0,\n x_max: 31,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z',\n },\n accSagittalAcute: {\n x_min: 0,\n x_max: 125,\n y_min: -62,\n y_max: 125,\n ha: 187,\n o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z',\n },\n accSagittalGrave: {\n x_min: 0,\n x_max: 125,\n y_min: -125,\n y_max: 62,\n ha: 187,\n o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z',\n },\n accSagittal1MinaUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal1MinaDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal2MinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal2MinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal1TinaUp: {\n x_min: 0,\n x_max: 93,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z',\n },\n accSagittal1TinaDown: {\n x_min: 0,\n x_max: 93,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z',\n },\n accSagittal2TinasUp: {\n x_min: 0,\n x_max: 94,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal2TinasDown: {\n x_min: 0,\n x_max: 94,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z',\n },\n accSagittal3TinasUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal3TinasDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal4TinasUp: {\n x_min: 0,\n x_max: 187,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal4TinasDown: {\n x_min: 0,\n x_max: 187,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal5TinasUp: {\n x_min: 0,\n x_max: 218,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal5TinasDown: {\n x_min: 0,\n x_max: 218,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal6TinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal6TinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal7TinasUp: {\n x_min: 0,\n x_max: 281,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal7TinasDown: {\n x_min: 0,\n x_max: 281,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal8TinasUp: {\n x_min: 0,\n x_max: 312,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal8TinasDown: {\n x_min: 0,\n x_max: 312,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal9TinasUp: {\n x_min: -7,\n x_max: 312,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal9TinasDown: {\n x_min: -7,\n x_max: 312,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittalFractionalTinaUp: {\n x_min: -3,\n x_max: 35,\n y_min: 73,\n y_max: 111,\n ha: 38,\n o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z',\n },\n accSagittalFractionalTinaDown: {\n x_min: -3,\n x_max: 35,\n y_min: -111,\n y_max: -73,\n ha: 38,\n o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 164,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 414,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 281,\n y_min: -203,\n y_max: 203,\n ha: 406,\n o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 281,\n y_min: -186,\n y_max: 186,\n ha: 372,\n o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z',\n },\n },\n fontFamily: 'Bravura',\n resolution: 1000,\n generatedOn: '2022-12-18T09:06:51.407Z',\n};\n","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const GonvilleSmuflFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 412,\n y_min: -18,\n y_max: 223,\n ha: 241,\n o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 412,\n y_min: -223,\n y_max: 18,\n ha: 241,\n o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z',\n },\n barlineTick: {\n x_min: -59,\n x_max: 59,\n y_min: -139,\n y_max: 139,\n ha: 279,\n o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z',\n },\n breathMarkTick: {\n x_min: -151,\n x_max: 272,\n y_min: 0,\n y_max: 429,\n ha: 429,\n o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z',\n },\n segno: {\n x_min: 7,\n x_max: 493,\n y_min: -50,\n y_max: 650,\n ha: 699,\n o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z',\n },\n coda: {\n x_min: 22,\n x_max: 478,\n y_min: -31,\n y_max: 531,\n ha: 563,\n o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z',\n },\n gClef: {\n x_min: 0,\n x_max: 623,\n y_min: -632,\n y_max: 1082,\n ha: 1713,\n o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z',\n },\n cClef: {\n x_min: 0,\n x_max: 643,\n y_min: -508,\n y_max: 508,\n ha: 1016,\n o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z',\n },\n fClef: {\n x_min: 0,\n x_max: 661,\n y_min: -545,\n y_max: 254,\n ha: 798,\n o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z',\n },\n unpitchedPercussionClef1: {\n x_min: -4,\n x_max: 337,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 501,\n y_min: -735,\n y_max: 753,\n ha: 1487,\n o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z',\n },\n timeSig0: {\n x_min: 0,\n x_max: 380,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z',\n },\n timeSig1: {\n x_min: 0,\n x_max: 254,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z',\n },\n timeSig2: {\n x_min: 0,\n x_max: 337,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z',\n },\n timeSig3: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig4: {\n x_min: 0,\n x_max: 345,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z',\n },\n timeSig5: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig6: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSig7: {\n x_min: 0,\n x_max: 326,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z',\n },\n timeSig8: {\n x_min: 0,\n x_max: 360,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z',\n },\n timeSig9: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -233,\n y_max: 233,\n ha: 466,\n o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -394,\n y_max: 394,\n ha: 788,\n o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 235,\n y_min: -23,\n y_max: 23,\n ha: 46,\n o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z',\n },\n timeSigParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensRightSmall: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n timeSigParensLeftSmall: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 663,\n y_min: -174,\n y_max: 174,\n ha: 349,\n o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 455,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 440,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 357,\n y_min: -178,\n y_max: 178,\n ha: 357,\n o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 323,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z',\n },\n augmentationDot: {\n x_min: -63,\n x_max: 63,\n y_min: -63,\n y_max: 63,\n ha: 126,\n o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z',\n },\n tremolo1: {\n x_min: -252,\n x_max: 216,\n y_min: -185,\n y_max: 148,\n ha: 333,\n o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z',\n },\n flag8thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -745,\n y_max: -4,\n ha: 741,\n o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z',\n },\n flag8thDown: {\n x_min: -15,\n x_max: 271,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z',\n },\n flag16thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -847,\n y_max: -4,\n ha: 843,\n o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z',\n },\n flag16thDown: {\n x_min: -15,\n x_max: 267,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z',\n },\n flag32ndUp: {\n x_min: -17,\n x_max: 233,\n y_min: -1005,\n y_max: 96,\n ha: 1101,\n o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z',\n },\n flag32ndDown: {\n x_min: -15,\n x_max: 270,\n y_min: -96,\n y_max: 895,\n ha: 991,\n o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z',\n },\n flag64thUp: {\n x_min: -17,\n x_max: 233,\n y_min: -933,\n y_max: 296,\n ha: 1230,\n o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z',\n },\n flag64thDown: {\n x_min: -15,\n x_max: 271,\n y_min: -296,\n y_max: 820,\n ha: 1116,\n o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z',\n },\n flag128thUp: {\n x_min: -17,\n x_max: 231,\n y_min: -987,\n y_max: 496,\n ha: 1484,\n o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z',\n },\n flag128thDown: {\n x_min: -15,\n x_max: 270,\n y_min: -496,\n y_max: 870,\n ha: 1366,\n o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z',\n },\n accidentalFlat: {\n x_min: -15,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 176,\n y_min: -334,\n y_max: 334,\n ha: 667,\n o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 239,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 271,\n y_min: -135,\n y_max: 135,\n ha: 271,\n o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z',\n },\n accidentalDoubleFlat: {\n x_min: -15,\n x_max: 356,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z',\n },\n accidentalParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n accidentalParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 200,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 446,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 335,\n y_min: -391,\n y_max: 391,\n ha: 782,\n o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -125,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 284,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z',\n },\n accidentalBakiyeFlat: {\n x_min: -129,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 188,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z',\n },\n articAccentAbove: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articAccentBelow: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articTenutoAbove: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articTenutoBelow: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articStaccatoAbove: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatoBelow: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatissimoAbove: {\n x_min: -53,\n x_max: 53,\n y_min: 0,\n y_max: 184,\n ha: 184,\n o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z',\n },\n articStaccatissimoBelow: {\n x_min: -53,\n x_max: 53,\n y_min: -184,\n y_max: 0,\n ha: 184,\n o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z',\n },\n articMarcatoAbove: {\n x_min: -114,\n x_max: 114,\n y_min: -256,\n y_max: 19,\n ha: 275,\n o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z',\n },\n articMarcatoBelow: {\n x_min: -114,\n x_max: 114,\n y_min: -19,\n y_max: 256,\n ha: 275,\n o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z',\n },\n fermataAbove: {\n x_min: -324,\n x_max: 324,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataBelow: {\n x_min: -324,\n x_max: 324,\n y_min: -353,\n y_max: 0,\n ha: 353,\n o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 364,\n ha: 364,\n o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z',\n },\n fermataLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -364,\n y_max: 0,\n ha: 364,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 438,\n ha: 438,\n o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataVeryLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -438,\n y_max: 0,\n ha: 438,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryShortAbove: {\n x_min: -351,\n x_max: 351,\n y_min: 0,\n y_max: 571,\n ha: 571,\n o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z',\n },\n fermataVeryShortBelow: {\n x_min: -351,\n x_max: 351,\n y_min: -571,\n y_max: 0,\n ha: 571,\n o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z',\n },\n fermataShortAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 469,\n ha: 469,\n o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataShortBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -469,\n y_max: 0,\n ha: 469,\n o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n breathMarkUpbow: {\n x_min: -125,\n x_max: 125,\n y_min: 0,\n y_max: 409,\n ha: 409,\n o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z',\n },\n caesura: {\n x_min: 0,\n x_max: 457,\n y_min: -202,\n y_max: 303,\n ha: 504,\n o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 370,\n y_min: -207,\n y_max: 310,\n ha: 517,\n o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 853,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 330,\n y_min: -125,\n y_max: 0,\n ha: 125,\n o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z',\n },\n restWholeLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -125,\n y_max: 11,\n ha: 137,\n o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 330,\n y_min: 0,\n y_max: 125,\n ha: 125,\n o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z',\n },\n restHalfLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -11,\n y_max: 125,\n ha: 137,\n o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 221,\n y_min: -365,\n y_max: 365,\n ha: 730,\n o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 258,\n y_min: -197,\n y_max: 219,\n ha: 416,\n o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 331,\n y_min: -443,\n y_max: 219,\n ha: 662,\n o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 405,\n y_min: -443,\n y_max: 466,\n ha: 909,\n o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 479,\n y_min: -689,\n y_max: 466,\n ha: 1155,\n o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 553,\n y_min: -689,\n y_max: 712,\n ha: 1401,\n o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z',\n },\n dynamicPiano: {\n x_min: -39,\n x_max: 378,\n y_min: -178,\n y_max: 277,\n ha: 455,\n o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z',\n },\n dynamicMezzo: {\n x_min: 35,\n x_max: 493,\n y_min: -19,\n y_max: 272,\n ha: 291,\n o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z',\n },\n dynamicForte: {\n x_min: -87,\n x_max: 440,\n y_min: -182,\n y_max: 415,\n ha: 597,\n o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z',\n },\n dynamicRinforzando: {\n x_min: 58,\n x_max: 357,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z',\n },\n dynamicSforzando: {\n x_min: 52,\n x_max: 278,\n y_min: -22,\n y_max: 270,\n ha: 292,\n o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z',\n },\n dynamicZ: {\n x_min: 23,\n x_max: 309,\n y_min: 2,\n y_max: 250,\n ha: 248,\n o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z',\n },\n ornamentTrill: {\n x_min: -249,\n x_max: 249,\n y_min: 0,\n y_max: 376,\n ha: 376,\n o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z',\n },\n ornamentTurn: {\n x_min: -310,\n x_max: 310,\n y_min: -143,\n y_max: 143,\n ha: 286,\n o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z',\n },\n ornamentTurnSlash: {\n x_min: -310,\n x_max: 310,\n y_min: -201,\n y_max: 201,\n ha: 402,\n o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z',\n },\n ornamentMordent: {\n x_min: -296,\n x_max: 296,\n y_min: -215,\n y_max: 198,\n ha: 413,\n o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z',\n },\n ornamentShortTrill: {\n x_min: -296,\n x_max: 296,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z',\n },\n ornamentTremblement: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 255,\n ha: 381,\n o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 127,\n ha: 370,\n o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 198,\n ha: 442,\n o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: -433,\n x_max: 433,\n y_min: -127,\n y_max: 244,\n ha: 370,\n o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: -439,\n x_max: 439,\n y_min: -127,\n y_max: 236,\n ha: 363,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: -439,\n x_max: 439,\n y_min: -215,\n y_max: 236,\n ha: 451,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: -439,\n x_max: 439,\n y_min: -236,\n y_max: 127,\n ha: 362,\n o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z',\n },\n stringsDownBow: {\n x_min: -168,\n x_max: 168,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z',\n },\n stringsUpBow: {\n x_min: -110,\n x_max: 110,\n y_min: 0,\n y_max: 277,\n ha: 277,\n o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z',\n },\n stringsHarmonic: {\n x_min: -82,\n x_max: 82,\n y_min: -82,\n y_max: 82,\n ha: 163,\n o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: -110,\n x_max: 110,\n y_min: -110,\n y_max: 205,\n ha: 315,\n o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: -110,\n x_max: 110,\n y_min: -205,\n y_max: 110,\n ha: 315,\n o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: -155,\n x_max: 155,\n y_min: -157,\n y_max: 157,\n ha: 315,\n o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 782,\n y_min: -1,\n y_max: 500,\n ha: 501,\n o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 435,\n y_min: 65,\n y_max: 500,\n ha: 435,\n o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z',\n },\n pictChokeCymbal: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -8,\n x_max: 269,\n y_min: 0,\n y_max: 126,\n ha: 126,\n o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z',\n },\n arrowheadBlackUp: {\n x_min: 11,\n x_max: 239,\n y_min: -6,\n y_max: 269,\n ha: 275,\n o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z',\n },\n arrowheadBlackDown: {\n x_min: 11,\n x_max: 239,\n y_min: 6,\n y_max: 281,\n ha: 275,\n o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z',\n },\n },\n fontFamily: 'GonvilleSmufl',\n resolution: 1000,\n generatedOn: '2023-04-20T22:11:26.009Z',\n};\n","export const LelandFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 491,\n y_min: 0,\n y_max: 279,\n ha: 279,\n o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 491,\n y_min: -279,\n y_max: 0,\n ha: 279,\n o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z',\n },\n segno: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 869,\n ha: 869,\n o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z',\n },\n coda: {\n x_min: 0,\n x_max: 745,\n y_min: -113,\n y_max: 735,\n ha: 848,\n o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z',\n },\n gClef: {\n x_min: 0,\n x_max: 640,\n y_min: -666,\n y_max: 1112,\n ha: 1778,\n o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z',\n },\n cClef: {\n x_min: 0,\n x_max: 627,\n y_min: -480,\n y_max: 482,\n ha: 962,\n o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z',\n },\n fClef: {\n x_min: 0,\n x_max: 664,\n y_min: -617,\n y_max: 251,\n ha: 868,\n o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 352,\n y_min: -252,\n y_max: 252,\n ha: 504,\n o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 439,\n y_min: -743,\n y_max: 746,\n ha: 1489,\n o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z',\n },\n timeSig0: {\n x_min: 15,\n x_max: 389,\n y_min: -254,\n y_max: 255,\n ha: 509,\n o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z',\n },\n timeSig1: {\n x_min: 15,\n x_max: 336,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z',\n },\n timeSig2: {\n x_min: 15,\n x_max: 377,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z',\n },\n timeSig3: {\n x_min: 15,\n x_max: 364,\n y_min: -244,\n y_max: 244,\n ha: 488,\n o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z',\n },\n timeSig4: {\n x_min: 14,\n x_max: 442,\n y_min: -248,\n y_max: 249,\n ha: 497,\n o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z',\n },\n timeSig5: {\n x_min: 15,\n x_max: 362,\n y_min: -244,\n y_max: 246,\n ha: 490,\n o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z',\n },\n timeSig6: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z',\n },\n timeSig7: {\n x_min: 15,\n x_max: 366,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z',\n },\n timeSig8: {\n x_min: 15,\n x_max: 393,\n y_min: -248,\n y_max: 246,\n ha: 494,\n o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z',\n },\n timeSig9: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -256,\n y_max: 258,\n ha: 514,\n o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -376,\n y_max: 388,\n ha: 764,\n o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 408,\n y_min: -204,\n y_max: 204,\n ha: 408,\n o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 538,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 325,\n y_min: -162,\n y_max: 163,\n ha: 325,\n o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 432,\n y_min: -179,\n y_max: 177,\n ha: 356,\n o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 223 176 l 0 -196 l 446 -196 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z',\n },\n noteheadSlashedWhole1: {\n x_min: -75,\n x_max: 448,\n y_min: -211,\n y_max: 214,\n ha: 425,\n o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z',\n },\n noteheadSlashedHalf1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z',\n },\n noteheadSlashedBlack1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z',\n },\n noteheadSlashedWhole2: {\n x_min: -75,\n x_max: 448,\n y_min: -212,\n y_max: 214,\n ha: 426,\n o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z',\n },\n noteheadSlashedHalf2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z',\n },\n noteheadSlashedBlack2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z',\n },\n noteheadParenthesisRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 0 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 488 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z',\n },\n tremolo1: {\n x_min: 0,\n x_max: 290,\n y_min: -93,\n y_max: 96,\n ha: 189,\n o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 289,\n y_min: -817,\n y_max: 12,\n ha: 829,\n o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -12,\n y_max: 817,\n ha: 829,\n o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -820,\n y_max: 12,\n ha: 832,\n o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -26,\n y_max: 803,\n ha: 829,\n o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 186,\n ha: 1007,\n o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 309,\n y_min: -216,\n y_max: 803,\n ha: 1019,\n o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -822,\n y_max: 373,\n ha: 1195,\n o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -403,\n y_max: 804,\n ha: 1207,\n o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 573,\n ha: 1394,\n o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -591,\n y_max: 803,\n ha: 1394,\n o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 203,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 171,\n y_min: -323,\n y_max: 325,\n ha: 648,\n o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 244,\n y_min: -333,\n y_max: 334,\n ha: 667,\n o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 275,\n y_min: -137,\n y_max: 138,\n ha: 275,\n o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 371,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 193,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 180,\n y_min: -316,\n y_max: 320,\n ha: 636,\n o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 290,\n y_min: -328,\n y_max: 339,\n ha: 667,\n o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -332,\n y_max: 334,\n ha: 666,\n o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z',\n },\n accidentalBakiyeFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -316,\n y_max: 318,\n ha: 634,\n o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 361,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 361,\n y_min: -235,\n y_max: 0,\n ha: 235,\n o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 316,\n y_min: 0,\n y_max: 46,\n ha: 46,\n o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 316,\n y_min: -46,\n y_max: 0,\n ha: 46,\n o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 78,\n y_min: 0,\n y_max: 78,\n ha: 78,\n o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 78,\n y_min: -78,\n y_max: 0,\n ha: 78,\n o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 127,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 127,\n y_min: -248,\n y_max: 0,\n ha: 248,\n o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z',\n },\n articMarcatoAbove: {\n x_min: 1,\n x_max: 296,\n y_min: 0,\n y_max: 253,\n ha: 253,\n o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 295,\n y_min: -253,\n y_max: 0,\n ha: 253,\n o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 622,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 622,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 623,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 623,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 842,\n y_min: 0,\n y_max: 549,\n ha: 549,\n o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 842,\n y_min: -549,\n y_max: 0,\n ha: 549,\n o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 642,\n y_min: 0,\n y_max: 454,\n ha: 454,\n o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 642,\n y_min: -454,\n y_max: 0,\n ha: 454,\n o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 321,\n ha: 321,\n o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z',\n },\n caesura: {\n x_min: 0,\n x_max: 380,\n y_min: 0,\n y_max: 490,\n ha: 490,\n o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 368,\n y_min: 0,\n y_max: 491,\n ha: 491,\n o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 450,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: -11,\n y_max: 262,\n ha: 273,\n o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 325,\n y_min: -131,\n y_max: 5,\n ha: 136,\n o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z',\n },\n restWholeLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -122,\n y_max: 14,\n ha: 136,\n o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -4,\n y_max: 132,\n ha: 136,\n o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z',\n },\n restHalfLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -14,\n y_max: 122,\n ha: 136,\n o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 235,\n y_min: -331,\n y_max: 401,\n ha: 732,\n o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 276,\n y_min: -255,\n y_max: 204,\n ha: 459,\n o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z',\n },\n rest16th: {\n x_min: 1,\n x_max: 344,\n y_min: -507,\n y_max: 204,\n ha: 711,\n o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 391,\n y_min: -507,\n y_max: 460,\n ha: 967,\n o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -758,\n y_max: 464,\n ha: 1222,\n o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z',\n },\n rest128th: {\n x_min: -1,\n x_max: 475,\n y_min: -759,\n y_max: 717,\n ha: 1476,\n o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z',\n },\n dynamicPiano: {\n x_min: -95,\n x_max: 317,\n y_min: -163,\n y_max: 263,\n ha: 426,\n o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z',\n },\n dynamicMezzo: {\n x_min: -7,\n x_max: 374,\n y_min: -2,\n y_max: 251,\n ha: 253,\n o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z',\n },\n dynamicForte: {\n x_min: -137,\n x_max: 334,\n y_min: -193,\n y_max: 421,\n ha: 614,\n o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z',\n },\n dynamicRinforzando: {\n x_min: -12,\n x_max: 230,\n y_min: 0,\n y_max: 254,\n ha: 254,\n o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 208,\n y_min: -5,\n y_max: 263,\n ha: 268,\n o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z',\n },\n dynamicZ: {\n x_min: -42,\n x_max: 239,\n y_min: -1,\n y_max: 258,\n ha: 259,\n o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z',\n },\n ornamentTrill: {\n x_min: -12,\n x_max: 383,\n y_min: 0,\n y_max: 383,\n ha: 383,\n o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 456,\n y_min: 0,\n y_max: 232,\n ha: 232,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 456,\n y_min: -80,\n y_max: 313,\n ha: 393,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 473,\n y_min: -77,\n y_max: 316,\n ha: 393,\n o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 680,\n y_min: 0,\n y_max: 388,\n ha: 388,\n o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 248,\n ha: 406,\n o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 321,\n ha: 479,\n o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 662,\n y_min: 0,\n y_max: 406,\n ha: 406,\n o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 857,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 565,\n y_min: -171,\n y_max: 249,\n ha: 420,\n o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 280,\n y_min: 0,\n y_max: 280,\n ha: 280,\n o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 315,\n y_min: 0,\n y_max: 293,\n ha: 293,\n o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 343,\n ha: 343,\n o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 181,\n y_min: 0,\n y_max: 181,\n ha: 181,\n o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 981,\n y_min: -10,\n y_max: 545,\n ha: 555,\n o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 242,\n y_min: 0,\n y_max: 164,\n ha: 164,\n o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 735,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1243,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 501,\n y_min: 0,\n y_max: 501,\n ha: 501,\n o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z',\n },\n csymHalfDiminished: {\n x_min: -1,\n x_max: 502,\n y_min: -1,\n y_max: 502,\n ha: 503,\n o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z',\n },\n csymAugmented: {\n x_min: 1,\n x_max: 321,\n y_min: 90,\n y_max: 410,\n ha: 320,\n o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 500,\n y_min: 10,\n y_max: 490,\n ha: 480,\n o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 160,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 416,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n },\n fontFamily: 'Leland',\n resolution: 1000,\n generatedOn: '2022-12-19T23:52:37.756Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow.js statically bundles & preloads all of our music engraving fonts.\nimport { loadBravura } from './load_bravura';\nimport { loadCustom } from './load_custom';\nimport { loadGonville } from './load_gonville';\nimport { loadLeland } from './load_leland';\nimport { loadPetaluma } from './load_petaluma';\n// ADD_MUSIC_FONT\n// import { loadXXX } from './load_xxx';\n// Populate our font \"database\" with all our music fonts.\nexport function loadAllMusicFonts() {\n loadBravura();\n loadGonville();\n loadPetaluma();\n loadCustom();\n loadLeland();\n // ADD_MUSIC_FONT\n // loadXXX();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base.\n// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts\n// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js).\n// ADD_MUSIC_FONT\n// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts.\n// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts.\n// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js\n// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary.\nimport { Font } from '../font';\nimport { BravuraFont } from './bravura_glyphs';\nimport { CommonMetrics } from './common_metrics';\nexport function loadBravura() {\n Font.load('Bravura', BravuraFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { CustomFont } from './custom_glyphs';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { GonvilleSmuflFont } from './gonville_glyphs';\nexport function loadGonville() {\n Font.load('Gonville', GonvilleSmuflFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { LelandFont } from './leland_glyphs';\nexport function loadLeland() {\n Font.load('Leland', LelandFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { PetalumaFont } from './petaluma_glyphs';\nconst petalumaChordMetrics = {\n csymDiminished: {\n leftSideBearing: -95,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: -25,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 150,\n },\n csymParensRightTall: {\n leftSideBearing: 40,\n advanceWidth: 189,\n yOffset: 150,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 210,\n yOffset: 250,\n },\n csymParensRightVeryTall: {\n leftSideBearing: -100,\n advanceWidth: 111,\n yOffset: 250,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 100,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 0,\n advanceWidth: 425,\n yOffset: -422,\n },\n accidentalFlat: {\n leftSideBearing: -10,\n advanceWidth: 228,\n yOffset: -284,\n },\n};\nexport function loadPetaluma() {\n const metrics = JSON.parse(JSON.stringify(CommonMetrics));\n const chordMetrics = metrics.chordSymbol;\n if (chordMetrics) {\n chordMetrics.glyphs = petalumaChordMetrics;\n }\n Font.load('Petaluma', PetalumaFont, metrics);\n}\n","export const PetalumaFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 508,\n y_min: 0,\n y_max: 370,\n ha: 370,\n o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 496,\n y_min: -393,\n y_max: 0,\n ha: 393,\n o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 56,\n y_min: 877,\n y_max: 1122,\n ha: 245,\n o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 568,\n y_min: 0,\n y_max: 621,\n ha: 621,\n o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z',\n },\n segno: {\n x_min: 0,\n x_max: 798,\n y_min: -65,\n y_max: 806,\n ha: 871,\n o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z',\n },\n coda: {\n x_min: 0,\n x_max: 1380,\n y_min: -196,\n y_max: 1037,\n ha: 1233,\n o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z',\n },\n gClef: {\n x_min: 0,\n x_max: 664,\n y_min: -559,\n y_max: 1009,\n ha: 1568,\n o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z',\n },\n cClef: {\n x_min: 0,\n x_max: 731,\n y_min: -543,\n y_max: 543,\n ha: 1086,\n o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z',\n },\n fClef: {\n x_min: 0,\n x_max: 776,\n y_min: -496,\n y_max: 216,\n ha: 712,\n o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 379,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 438,\n y_min: -768,\n y_max: 767,\n ha: 1535,\n o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 513,\n y_min: -358,\n y_max: 359,\n ha: 717,\n o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 283,\n y_min: -364,\n y_max: 366,\n ha: 730,\n o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 660,\n y_min: -379,\n y_max: 382,\n ha: 761,\n o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 540,\n y_min: -392,\n y_max: 392,\n ha: 784,\n o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 633,\n y_min: -490,\n y_max: 491,\n ha: 981,\n o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 583,\n y_min: -389,\n y_max: 389,\n ha: 778,\n o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 565,\n y_min: -363,\n y_max: 363,\n ha: 726,\n o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 592,\n y_min: -345,\n y_max: 345,\n ha: 690,\n o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 504,\n y_min: -428,\n y_max: 428,\n ha: 856,\n o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 494,\n y_min: -421,\n y_max: 421,\n ha: 842,\n o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z',\n },\n timeSigCommon: {\n x_min: 20,\n x_max: 585,\n y_min: -298,\n y_max: 294,\n ha: 592,\n o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z',\n },\n timeSigCutCommon: {\n x_min: 20,\n x_max: 695,\n y_min: -687,\n y_max: 687,\n ha: 1374,\n o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 661,\n y_min: -358,\n y_max: 358,\n ha: 716,\n o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 418,\n y_min: -197,\n y_max: 199,\n ha: 396,\n o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 662,\n y_min: -54,\n y_max: 55,\n ha: 109,\n o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 274,\n y_min: -723,\n y_max: 725,\n ha: 1448,\n o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 154,\n y_min: -422,\n y_max: 422,\n ha: 844,\n o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z',\n },\n timeSigParensLeft: {\n x_min: 1,\n x_max: 400,\n y_min: -728,\n y_max: 728,\n ha: 1456,\n o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 173,\n y_min: -405,\n y_max: 404,\n ha: 809,\n o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 614,\n y_min: -223,\n y_max: 223,\n ha: 446,\n o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 380,\n y_min: -186,\n y_max: 165,\n ha: 351,\n o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -174,\n y_max: 175,\n ha: 349,\n o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 730,\n y_min: -266,\n y_max: 267,\n ha: 533,\n o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 506,\n y_min: -143,\n y_max: 144,\n ha: 287,\n o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 421,\n y_min: -146,\n y_max: 151,\n ha: 297,\n o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 289,\n y_min: -156,\n y_max: 157,\n ha: 313,\n o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -220,\n y_max: 219,\n ha: 439,\n o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 323,\n y_min: -190,\n y_max: 184,\n ha: 374,\n o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 309,\n y_min: -179,\n y_max: 179,\n ha: 358,\n o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 344,\n y_min: -179,\n y_max: 175,\n ha: 354,\n o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 672,\n y_min: -291,\n y_max: 291,\n ha: 582,\n o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z',\n },\n noteheadCircledWhole: {\n x_min: -50,\n x_max: 472,\n y_min: -231,\n y_max: 232,\n ha: 463,\n o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z',\n },\n noteheadCircledHalf: {\n x_min: -50,\n x_max: 393,\n y_min: -175,\n y_max: 175,\n ha: 350,\n o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z',\n },\n noteheadCircledBlack: {\n x_min: -70,\n x_max: 326,\n y_min: -168,\n y_max: 192,\n ha: 360,\n o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 474,\n y_min: -209,\n y_max: 211,\n ha: 420,\n o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 350,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 342,\n y_min: -130,\n y_max: 132,\n ha: 262,\n o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 697,\n y_min: -290,\n y_max: 290,\n ha: 580,\n o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z',\n },\n noteheadSlashedWhole1: {\n x_min: -76,\n x_max: 498,\n y_min: -168,\n y_max: 168,\n ha: 336,\n o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z',\n },\n noteheadSlashedHalf1: {\n x_min: -79,\n x_max: 471,\n y_min: -184,\n y_max: 184,\n ha: 368,\n o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z',\n },\n noteheadSlashedBlack1: {\n x_min: -110,\n x_max: 452,\n y_min: -190,\n y_max: 190,\n ha: 380,\n o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 697,\n y_min: -295,\n y_max: 295,\n ha: 590,\n o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z',\n },\n noteheadSlashedWhole2: {\n x_min: -83,\n x_max: 510,\n y_min: -201,\n y_max: 198,\n ha: 399,\n o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 454,\n y_min: -188,\n y_max: 188,\n ha: 376,\n o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z',\n },\n noteheadSlashedBlack2: {\n x_min: -84,\n x_max: 405,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 429,\n y_min: -221,\n y_max: 221,\n ha: 442,\n o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 271,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z',\n },\n noteheadParenthesis: {\n x_min: -70,\n x_max: 329,\n y_min: -196,\n y_max: 201,\n ha: 397,\n o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z',\n },\n noteheadParenthesisRight: {\n x_min: -30,\n x_max: 82,\n y_min: -199,\n y_max: 206,\n ha: 405,\n o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 106,\n y_min: -197,\n y_max: 197,\n ha: 394,\n o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 328,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 391,\n y_min: -142,\n y_max: 142,\n ha: 284,\n o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 398,\n y_min: -139,\n y_max: 140,\n ha: 279,\n o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 96,\n y_min: -57,\n y_max: 57,\n ha: 114,\n o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z',\n },\n tremolo1: {\n x_min: -158,\n x_max: 156,\n y_min: -88,\n y_max: 88,\n ha: 176,\n o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 261,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 327,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 327,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 268,\n y_min: -849,\n y_max: 149,\n ha: 999,\n o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z',\n },\n flag32ndDown: {\n x_min: -3,\n x_max: 268,\n y_min: -169,\n y_max: 829,\n ha: 999,\n o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z',\n },\n flag64thUp: {\n x_min: -4,\n x_max: 282,\n y_min: -824,\n y_max: 347,\n ha: 1171,\n o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z',\n },\n flag64thDown: {\n x_min: -5,\n x_max: 281,\n y_min: -375,\n y_max: 796,\n ha: 1171,\n o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 252,\n y_min: -804,\n y_max: 530,\n ha: 1334,\n o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z',\n },\n flag128thDown: {\n x_min: -1,\n x_max: 252,\n y_min: -580,\n y_max: 754,\n ha: 1334,\n o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z',\n },\n accidentalFlat: {\n x_min: 1,\n x_max: 209,\n y_min: -208,\n y_max: 472,\n ha: 680,\n o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 214,\n y_min: -456,\n y_max: 462,\n ha: 918,\n o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z',\n },\n accidentalSharp: {\n x_min: -22,\n x_max: 390,\n y_min: -384,\n y_max: 383,\n ha: 767,\n o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 287,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 359,\n y_min: -220,\n y_max: 446,\n ha: 666,\n o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 130,\n y_min: -270,\n y_max: 268,\n ha: 538,\n o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 139,\n y_min: -275,\n y_max: 277,\n ha: 552,\n o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 208,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: -23,\n x_max: 388,\n y_min: -373,\n y_max: 445,\n ha: 818,\n o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -248,\n y_max: 432,\n ha: 680,\n o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: -1,\n x_max: 467,\n y_min: -460,\n y_max: 350,\n ha: 810,\n o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z',\n },\n accidentalBakiyeFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -236,\n y_max: 444,\n ha: 680,\n o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 359,\n y_min: -420,\n y_max: 343,\n ha: 763,\n o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 303,\n y_min: -462,\n y_max: 180,\n ha: 642,\n o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 434,\n y_min: -295,\n y_max: 325,\n ha: 620,\n o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 425,\n y_min: 0,\n y_max: 326,\n ha: 326,\n o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 425,\n y_min: -326,\n y_max: 0,\n ha: 326,\n o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 471,\n y_min: 0,\n y_max: 56,\n ha: 56,\n o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 471,\n y_min: -59,\n y_max: -3,\n ha: 56,\n o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z',\n },\n articStaccatoAbove: {\n x_min: 1,\n x_max: 112,\n y_min: 0,\n y_max: 156,\n ha: 156,\n o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z',\n },\n articStaccatoBelow: {\n x_min: 1,\n x_max: 112,\n y_min: -156,\n y_max: 0,\n ha: 156,\n o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 139,\n y_min: 0,\n y_max: 411,\n ha: 411,\n o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 139,\n y_min: -411,\n y_max: 0,\n ha: 411,\n o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z',\n },\n articMarcatoAbove: {\n x_min: 0,\n x_max: 396,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 396,\n y_min: -328,\n y_max: 0,\n ha: 328,\n o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 472,\n y_min: 2,\n y_max: 454,\n ha: 452,\n o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 519,\n y_min: -430,\n y_max: -1,\n ha: 429,\n o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 591,\n y_min: -6,\n y_max: 337,\n ha: 343,\n o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 602,\n y_min: -335,\n y_max: 7,\n ha: 342,\n o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: -14,\n y_max: 437,\n ha: 451,\n o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 686,\n y_min: -427,\n y_max: 30,\n ha: 457,\n o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 711,\n y_min: -31,\n y_max: 496,\n ha: 527,\n o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 697,\n y_min: -475,\n y_max: 13,\n ha: 488,\n o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 545,\n y_min: -18,\n y_max: 348,\n ha: 366,\n o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 565,\n y_min: -335,\n y_max: 10,\n ha: 345,\n o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 148,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z',\n },\n breathMarkUpbow: {\n x_min: 0,\n x_max: 254,\n y_min: 0,\n y_max: 595,\n ha: 595,\n o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z',\n },\n caesura: {\n x_min: 0,\n x_max: 566,\n y_min: 0,\n y_max: 562,\n ha: 563,\n o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 386,\n y_min: -10,\n y_max: 584,\n ha: 594,\n o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 366,\n y_min: -255,\n y_max: 255,\n ha: 510,\n o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 249,\n ha: 249,\n o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z',\n },\n restWhole: {\n x_min: 1,\n x_max: 500,\n y_min: -120,\n y_max: 14,\n ha: 134,\n o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z',\n },\n restWholeLegerLine: {\n x_min: -197,\n x_max: 685,\n y_min: -157,\n y_max: 29,\n ha: 186,\n o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 518,\n y_min: 0,\n y_max: 162,\n ha: 162,\n o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z',\n },\n restHalfLegerLine: {\n x_min: -120,\n x_max: 448,\n y_min: -20,\n y_max: 143,\n ha: 163,\n o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 263,\n y_min: -415,\n y_max: 415,\n ha: 830,\n o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 289,\n y_min: -260,\n y_max: 261,\n ha: 521,\n o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 333,\n y_min: -328,\n y_max: 244,\n ha: 572,\n o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 347,\n y_min: -498,\n y_max: 483,\n ha: 981,\n o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 428,\n y_min: -720,\n y_max: 474,\n ha: 1194,\n o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z',\n },\n rest128th: {\n x_min: 1,\n x_max: 491,\n y_min: -711,\n y_max: 719,\n ha: 1430,\n o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z',\n },\n dynamicPiano: {\n x_min: -49,\n x_max: 327,\n y_min: -142,\n y_max: 515,\n ha: 657,\n o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z',\n },\n dynamicMezzo: {\n x_min: -18,\n x_max: 559,\n y_min: -50,\n y_max: 365,\n ha: 415,\n o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z',\n },\n dynamicForte: {\n x_min: -144,\n x_max: 311,\n y_min: -115,\n y_max: 504,\n ha: 619,\n o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z',\n },\n dynamicRinforzando: {\n x_min: -75,\n x_max: 322,\n y_min: -90,\n y_max: 325,\n ha: 415,\n o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 296,\n y_min: 0,\n y_max: 379,\n ha: 379,\n o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z',\n },\n dynamicZ: {\n x_min: -43,\n x_max: 331,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z',\n },\n ornamentTrill: {\n x_min: 1,\n x_max: 551,\n y_min: -18,\n y_max: 539,\n ha: 557,\n o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 574,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 574,\n y_min: -106,\n y_max: 405,\n ha: 511,\n o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 700,\n y_min: 0,\n y_max: 497,\n ha: 497,\n o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 747,\n y_min: 0,\n y_max: 243,\n ha: 243,\n o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 982,\n y_min: 0,\n y_max: 224,\n ha: 224,\n o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1066,\n y_min: -50,\n y_max: 533,\n ha: 583,\n o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 1088,\n y_min: -380,\n y_max: 252,\n ha: 632,\n o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1185,\n y_min: -380,\n y_max: 465,\n ha: 845,\n o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 1003,\n y_min: -20,\n y_max: 521,\n ha: 541,\n o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1246,\n y_min: -30,\n y_max: 296,\n ha: 326,\n o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1226,\n y_min: -237,\n y_max: 436,\n ha: 673,\n o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 833,\n y_min: -309,\n y_max: 319,\n ha: 628,\n o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z',\n },\n brassScoop: {\n x_min: 0,\n x_max: 312,\n y_min: -390,\n y_max: 28,\n ha: 418,\n o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 476,\n y_min: -50,\n y_max: 333,\n ha: 383,\n o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z',\n },\n brassFallLipShort: {\n x_min: 0,\n x_max: 298,\n y_min: -344,\n y_max: 65,\n ha: 409,\n o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 807,\n y_min: 0,\n y_max: 838,\n ha: 838,\n o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 791,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 381,\n y_min: 0,\n y_max: 367,\n ha: 367,\n o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 274,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z',\n },\n brassMuteOpen: {\n x_min: 1,\n x_max: 313,\n y_min: 0,\n y_max: 309,\n ha: 309,\n o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 402,\n y_min: 0,\n y_max: 361,\n ha: 361,\n o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 646,\n y_min: 0,\n y_max: 212,\n ha: 212,\n o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z',\n },\n brassSmear: {\n x_min: 0,\n x_max: 334,\n y_min: 0,\n y_max: 151,\n ha: 151,\n o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 366,\n ha: 366,\n o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 219,\n y_min: 0,\n y_max: 489,\n ha: 489,\n o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 202,\n ha: 202,\n o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 201,\n y_min: 0,\n y_max: 325,\n ha: 325,\n o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 211,\n y_min: 0,\n y_max: 307,\n ha: 307,\n o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 271,\n y_min: 0,\n y_max: 284,\n ha: 284,\n o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 944,\n y_min: -13,\n y_max: 550,\n ha: 563,\n o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 437,\n y_min: 0,\n y_max: 461,\n ha: 461,\n o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 147,\n y_min: 0,\n y_max: 242,\n ha: 242,\n o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 300,\n y_min: 0,\n y_max: 176,\n ha: 176,\n o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z',\n },\n arpeggiatoUp: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 1459,\n ha: 1459,\n o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z',\n },\n arpeggiatoDown: {\n x_min: 0,\n x_max: 218,\n y_min: 0,\n y_max: 1440,\n ha: 1440,\n o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 599,\n y_min: -250,\n y_max: 175,\n ha: 425,\n o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 775,\n y_min: -247,\n y_max: 363,\n ha: 610,\n o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1374,\n y_min: -304,\n y_max: 304,\n ha: 608,\n o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 630,\n y_min: -225,\n y_max: 265,\n ha: 490,\n o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 506,\n y_min: 0,\n y_max: 500,\n ha: 500,\n o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z',\n },\n csymHalfDiminished: {\n x_min: -32,\n x_max: 496,\n y_min: -33,\n y_max: 492,\n ha: 525,\n o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 530,\n y_min: 0,\n y_max: 539,\n ha: 539,\n o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 593,\n y_min: 0,\n y_max: 569,\n ha: 569,\n o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 482,\n y_min: 193,\n y_max: 265,\n ha: 72,\n o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z',\n },\n csymParensLeftTall: {\n x_min: 0,\n x_max: 185,\n y_min: 0,\n y_max: 1034,\n ha: 1034,\n o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z',\n },\n csymParensRightTall: {\n x_min: -40,\n x_max: 189,\n y_min: 0,\n y_max: 1058,\n ha: 1058,\n o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 328,\n y_min: 2,\n y_max: 807,\n ha: 805,\n o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 829,\n ha: 829,\n o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 116,\n y_min: 0,\n y_max: 934,\n ha: 934,\n o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z',\n },\n csymParensRightVeryTall: {\n x_min: -20,\n x_max: 111,\n y_min: 0,\n y_max: 1009,\n ha: 1009,\n o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 990,\n y_min: -27,\n y_max: 1028,\n ha: 1054,\n o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 208,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 335,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 298,\n y_min: -218,\n y_max: 218,\n ha: 436,\n o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 284,\n y_min: -163,\n y_max: 163,\n ha: 326,\n o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z',\n },\n },\n fontFamily: 'Petaluma',\n resolution: 1000,\n generatedOn: '2022-12-18T09:07:50.817Z',\n};\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\nexport { Formatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\nexport { Fraction };\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { FretHandFinger };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\nexport { Glyph };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\nexport { GraceNoteGroup };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport * from './accidental';\nexport * from './annotation';\nexport * from './articulation';\nexport * from './barnote';\nexport * from './beam';\nexport * from './bend';\nexport * from './boundingbox';\nexport * from './boundingboxcomputation';\nexport * from './canvascontext';\nexport * from './chordsymbol';\nexport * from './clef';\nexport * from './clefnote';\nexport * from './crescendo';\nexport * from './curve';\nexport * from './dot';\nexport * from './easyscore';\nexport * from './element';\nexport * from './factory';\nexport * from './flow';\nexport * from './font';\n// Do not export './fonts/*' because they are used by the entry/* files.\nexport * from './formatter';\nexport * from './fraction';\nexport * from './frethandfinger';\nexport * from './ghostnote';\nexport * from './glyph';\nexport * from './glyphnote';\nexport * from './gracenote';\nexport * from './gracenotegroup';\nexport * from './gracetabnote';\nexport * from './keymanager';\nexport * from './keysignature';\nexport * from './keysignote';\nexport * from './modifier';\nexport * from './modifiercontext';\nexport * from './multimeasurerest';\nexport * from './music';\nexport * from './note';\nexport * from './notehead';\nexport * from './notesubgroup';\nexport * from './ornament';\nexport * from './parenthesis';\nexport * from './parser';\nexport * from './pedalmarking';\nexport * from './registry';\nexport * from './rendercontext';\nexport * from './renderer';\nexport * from './repeatnote';\nexport * from './stave';\nexport * from './stavebarline';\nexport * from './staveconnector';\nexport * from './stavehairpin';\nexport * from './staveline';\nexport * from './stavemodifier';\nexport * from './stavenote';\nexport * from './staverepetition';\nexport * from './stavesection';\nexport * from './stavetempo';\nexport * from './stavetext';\nexport * from './stavetie';\nexport * from './stavevolta';\nexport * from './stem';\nexport * from './stemmablenote';\nexport * from './stringnumber';\nexport * from './strokes';\nexport * from './svgcontext';\nexport * from './system';\n// Do not export './tables' because it is internal. Its public API is accessible via Vex.Flow.*.\nexport * from './tabnote';\nexport * from './tabslide';\nexport * from './tabstave';\nexport * from './tabtie';\nexport * from './textbracket';\nexport * from './textdynamics';\nexport * from './textformatter';\nexport * from './textnote';\nexport * from './tickable';\nexport * from './tickcontext';\nexport * from './timesigglyph';\nexport * from './timesignature';\nexport * from './timesignote';\nexport * from './tremolo';\nexport * from './tuning';\nexport * from './tuplet';\nexport * from './typeguard';\nexport * from './util';\n// Do not export './version'. It is accessible via Vex.Flow.BUILD.\nexport * from './vex';\nexport * from './vibrato';\nexport * from './vibratobracket';\nexport * from './voice';\nexport * from './web';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nclass KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\nexport { KeySignature };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\nexport { ModifierContext };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\nexport { NoteHead };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - stave.getNoteStartX();\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const tickables = note.getVoice().getTickables();\n const index = tickables.indexOf(note);\n const nextContext = index + 1 < tickables.length ? tickables[index + 1].checkTickContext() : undefined;\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - glyphX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\nexport { Ornament };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = (_b = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : Note.getPoint('gracenote');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\nexport { Parser };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\nexport { PedalMarking };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\nexport { Renderer };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nclass Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n /**\n * treat the stave as if the clef is clefSpec, but don't display the clef\n */\n setClefLines(clefSpec) {\n this.clef = clefSpec;\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Stave };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\nexport { StaveConnector };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\nexport { StaveHairpin };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\nexport { StaveLine };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n return this._noteHeads;\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\nexport { StaveNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nclass Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n var _a;\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', {\n category: 'coda',\n });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: Tables.NOTATION_FONT_SCALE / 3,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\nexport { Repetition };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveSection };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveTempo };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { StaveText };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { StaveTie };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { Volta };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nclass Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\nexport { Stem };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n /**\n * The modifier context's left_shift state.\n */\n const left_shift = state.left_shift;\n /**\n * The modifier context's right_shift state.\n */\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let extraXSpaceForDisplacedNotehead = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (pos === Modifier.Position.LEFT) {\n extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: extraXSpaceForDisplacedNotehead,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n let num_x_shift = 0;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + extraXSpaceForDisplacedNotehead);\n num_x_shift = num_width; // spacing\n x_widthL = Math.max(num_x_shift, x_widthL);\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_x_shift += num_width; // spacing\n x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StringNumber };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { Stroke };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\nexport { SVGContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave -= options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\nexport { Tables };\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { TabSlide };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\nexport { TextBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\nexport { TextDynamics };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\nexport { TextFormatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\nexport { TextNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n doubleCBanjo: 'D/5,C/5,G/4,C/4,G/5',\n doubleDBanjo: 'E/5,D/5,A/4,D/4,A/5',\n sawmillBanjo: 'D/5,C/5,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\nexport { Vex };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\nexport { VibratoBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Accidental Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Beam } from '../src/beam';\nimport { Dot } from '../src/dot';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { ModifierContext } from '../src/modifiercontext';\nimport { Note } from '../src/note';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { Stem } from '../src/stem';\nimport { TickContext } from '../src/tickcontext';\nimport { TimeSigNote } from '../src/timesignote';\nimport { isAccidental } from '../src/typeguard';\nimport { Voice } from '../src/voice';\nconst AccidentalTests = {\n Start() {\n QUnit.module('Accidental');\n QUnit.test('Automatic Accidentals - Simple Tests', autoAccidentalWorking);\n const run = VexFlowTests.runTests;\n run('Accidental Padding', formatAccidentalSpaces);\n run('Basic', basic);\n run('Stem Down', basicStemDown);\n run('Cautionary Accidental', cautionary);\n run('Accidental Arrangement Special Cases', specialCases);\n run('Multi Voice', multiVoice);\n run('Microtonal', microtonal);\n run('Microtonal (Iranian)', microtonal_iranian);\n run('Sagittal', sagittal);\n run('Automatic Accidentals', automaticAccidentals0);\n run('Automatic Accidentals - C major scale in Ab', automaticAccidentals1);\n run('Automatic Accidentals - No Accidentals Necessary', automaticAccidentals2);\n run('Automatic Accidentals - No Accidentals Necessary (EasyScore)', automaticAccidentals3);\n run('Automatic Accidentals - Multi Voice Inline', automaticAccidentalsMultiVoiceInline);\n run('Automatic Accidentals - Multi Voice Offset', automaticAccidentalsMultiVoiceOffset);\n run('Automatic Accidentals - Key C, Single Octave', automaticAccidentalsCornerCases1);\n run('Automatic Accidentals - Key C, Two Octaves', automaticAccidentalsCornerCases2);\n run('Automatic Accidentals - Key C#, Single Octave', automaticAccidentalsCornerCases3);\n run('Automatic Accidentals - Key C#, Two Octaves', automaticAccidentalsCornerCases4);\n run('Factory API', factoryAPI);\n },\n};\n// Check that at least one of the note's modifiers is an Accidental.\nfunction hasAccidental(note) {\n return note.getModifiers().some((modifier) => isAccidental(modifier));\n}\n// Return a convenience function for building accidentals from a string.\nfunction makeNewAccid(factory) {\n return (type) => factory.Accidental({ type });\n}\n/**\n *\n */\nfunction autoAccidentalWorking(assert) {\n const createStaveNote = (noteStruct) => new StaveNote(noteStruct);\n let notes = [\n { keys: ['bb/4'], duration: '4' },\n { keys: ['bb/4'], duration: '4' },\n { keys: ['g#/4'], duration: '4' },\n { keys: ['g/4'], duration: '4' },\n { keys: ['b/4'], duration: '4' },\n { keys: ['b/4'], duration: '4' },\n { keys: ['a#/4'], duration: '4' },\n { keys: ['g#/4'], duration: '4' },\n ].map(createStaveNote);\n let voice = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n // F Major (Bb)\n Accidental.applyAccidentals([voice], 'F');\n assert.equal(hasAccidental(notes[0]), false, 'No flat because of key signature');\n assert.equal(hasAccidental(notes[1]), false, 'No flat because of key signature');\n assert.equal(hasAccidental(notes[2]), true, 'Added a sharp');\n assert.equal(hasAccidental(notes[3]), true, 'Back to natural');\n assert.equal(hasAccidental(notes[4]), true, 'Back to natural');\n assert.equal(hasAccidental(notes[5]), false, 'Natural remembered');\n assert.equal(hasAccidental(notes[6]), true, 'Added sharp');\n assert.equal(hasAccidental(notes[7]), true, 'Added sharp');\n notes = [\n { keys: ['e#/4'], duration: '4' },\n { keys: ['cb/4'], duration: '4' },\n { keys: ['fb/4'], duration: '4' },\n { keys: ['b#/4'], duration: '4' },\n { keys: ['b#/4'], duration: '4' },\n { keys: ['cb/5'], duration: '4' },\n { keys: ['fb/5'], duration: '4' },\n { keys: ['e#/4'], duration: '4' },\n ].map(createStaveNote);\n voice = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n // A Major (F#,G#,C#)\n Accidental.applyAccidentals([voice], 'A');\n assert.equal(hasAccidental(notes[0]), true, 'Added sharp');\n assert.equal(hasAccidental(notes[1]), true, 'Added flat');\n assert.equal(hasAccidental(notes[2]), true, 'Added flat');\n assert.equal(hasAccidental(notes[3]), true, 'Added sharp');\n assert.equal(hasAccidental(notes[4]), false, 'Sharp remembered');\n assert.equal(hasAccidental(notes[5]), true, 'Added flat(different octave)');\n assert.equal(hasAccidental(notes[6]), true, 'Added flat(different octave)');\n assert.equal(hasAccidental(notes[7]), false, 'sharp remembered');\n notes = [\n { keys: ['c/4'], duration: '4' },\n { keys: ['cb/4'], duration: '4' },\n { keys: ['cb/4'], duration: '4' },\n { keys: ['c#/4'], duration: '4' },\n { keys: ['c#/4'], duration: '4' },\n { keys: ['cbb/4'], duration: '4' },\n { keys: ['cbb/4'], duration: '4' },\n { keys: ['c##/4'], duration: '4' },\n { keys: ['c##/4'], duration: '4' },\n { keys: ['c/4'], duration: '4' },\n { keys: ['c/4'], duration: '4' },\n ].map(createStaveNote);\n voice = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n // C Major (no sharps/flats)\n Accidental.applyAccidentals([voice], 'C');\n assert.equal(hasAccidental(notes[0]), false, 'No accidental');\n assert.equal(hasAccidental(notes[1]), true, 'Added flat');\n assert.equal(hasAccidental(notes[2]), false, 'Flat remembered');\n assert.equal(hasAccidental(notes[3]), true, 'Sharp added');\n assert.equal(hasAccidental(notes[4]), false, 'Sharp remembered');\n assert.equal(hasAccidental(notes[5]), true, 'Added doubled flat');\n assert.equal(hasAccidental(notes[6]), false, 'Double flat remembered');\n assert.equal(hasAccidental(notes[7]), true, 'Added double sharp');\n assert.equal(hasAccidental(notes[8]), false, 'Double sharp rememberd');\n assert.equal(hasAccidental(notes[9]), true, 'Added natural');\n assert.equal(hasAccidental(notes[10]), false, 'Natural remembered');\n}\n/**\n *\n */\nfunction formatAccidentalSpaces(options) {\n const f = VexFlowTests.makeFactory(options, 750, 280);\n const context = f.getContext();\n const softmaxFactor = 100;\n // Create the notes\n const notes = [\n new StaveNote({\n keys: ['e##/5'],\n duration: '8d',\n }).addModifier(new Accidental('##'), 0),\n new StaveNote({\n keys: ['b/4'],\n duration: '16',\n }).addModifier(new Accidental('b'), 0),\n new StaveNote({\n keys: ['f/3'],\n duration: '8',\n }),\n new StaveNote({\n keys: ['a/3'],\n duration: '16',\n }),\n new StaveNote({\n keys: ['e/4', 'g/4'],\n duration: '16',\n })\n .addModifier(new Accidental('bb'), 0)\n .addModifier(new Accidental('bb'), 1),\n new StaveNote({\n keys: ['d/4'],\n duration: '16',\n }),\n new StaveNote({\n keys: ['e/4', 'g/4'],\n duration: '16',\n })\n .addModifier(new Accidental('#'), 0)\n .addModifier(new Accidental('#'), 1),\n new StaveNote({\n keys: ['g/4'],\n duration: '32',\n }),\n new StaveNote({\n keys: ['a/4'],\n duration: '32',\n }),\n new StaveNote({\n keys: ['g/4'],\n duration: '16',\n }),\n new StaveNote({\n keys: ['d/4'],\n duration: 'q',\n }),\n ];\n Dot.buildAndAttach([notes[0]], { all: true });\n const beams = Beam.generateBeams(notes);\n const voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n });\n voice.addTickables(notes);\n const formatter = new Formatter({ softmaxFactor }).joinVoices([voice]);\n const width = formatter.preCalculateMinTotalWidth([voice]);\n const stave = new Stave(10, 40, width + 20);\n stave.setContext(context).draw();\n formatter.format([voice], width);\n voice.draw(context, stave);\n beams.forEach((b) => b.setContext(context).draw());\n notes.forEach((note) => Note.plotMetrics(context, note, 30));\n VexFlowTests.plotLegendForNoteWidth(context, 300, 150);\n options.assert.ok(true);\n}\nfunction basic(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n const accid = makeNewAccid(f);\n f.Stave({ x: 10, y: 10, width: 550 });\n const notes = [\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' })\n .addModifier(accid('b'), 0)\n .addModifier(accid('#'), 1),\n // Notes keys out of alphabetic order\n f\n .StaveNote({ keys: ['e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5', 'd/4'], duration: '2' })\n .addModifier(accid('##'), 6)\n .addModifier(accid('n'), 0)\n .addModifier(accid('bb'), 1)\n .addModifier(accid('b'), 2)\n .addModifier(accid('#'), 3)\n .addModifier(accid('n'), 4)\n .addModifier(accid('bb'), 5),\n // Notes keys out of alphabetic order\n f\n .StaveNote({ keys: ['g/5', 'f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5'], duration: '16' })\n .addModifier(accid('n'), 1)\n .addModifier(accid('#'), 2)\n .addModifier(accid('#'), 3)\n .addModifier(accid('b'), 4)\n .addModifier(accid('bb'), 5)\n .addModifier(accid('##'), 6)\n .addModifier(accid('#'), 0),\n f\n .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' })\n .addModifier(accid('#'), 0)\n .addModifier(accid('##').setAsCautionary(), 1)\n .addModifier(accid('#').setAsCautionary(), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('bb').setAsCautionary(), 4)\n .addModifier(accid('b').setAsCautionary(), 5),\n ];\n Formatter.SimpleFormat(notes, 10, { paddingBetween: 45 });\n notes.forEach((note, index) => {\n Note.plotMetrics(f.getContext(), note, 140);\n options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals');\n note.getModifiersByType('Accidental').forEach((accid, index) => {\n options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width');\n });\n });\n f.draw();\n VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140);\n options.assert.ok(true, 'Full Accidental');\n}\nfunction cautionary(options) {\n const staveCount = 12;\n const scale = 0.85;\n const staveWidth = 840;\n let i = 0;\n let j = 0;\n const f = VexFlowTests.makeFactory(options, staveWidth + 10, 175 * staveCount + 10);\n f.getContext().scale(scale, scale);\n const accids = Object.keys(Flow.accidentalMap).filter((accid) => accid !== '{' && accid !== '}');\n const mod = Math.round(accids.length / staveCount);\n for (i = 0; i < staveCount; ++i) {\n const stave = f.Stave({ x: 0, y: 10 + 200 * i, width: staveWidth / scale });\n const score = f.EasyScore();\n const rowMap = [];\n for (j = 0; j < mod && j + i * staveCount < accids.length; ++j) {\n rowMap.push(accids[j + i * staveCount]);\n }\n const notes = rowMap.map((accidType) => f\n .StaveNote({ keys: ['a/4'], duration: '4', stem_direction: Stem.UP })\n .addModifier(f.Accidental({ type: accidType }), 0));\n const voice = score.voice(notes, { time: rowMap.length + '/4' });\n voice.getTickables().forEach((tickable) => {\n tickable\n .getModifiers()\n .filter((modifier) => modifier.getAttribute('type') === Accidental.CATEGORY)\n .forEach((accid) => accid.setAsCautionary());\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n }\n options.assert.ok(true, 'Must successfully render cautionary accidentals');\n}\nfunction specialCases(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n const accid = makeNewAccid(f);\n f.Stave({ x: 10, y: 10, width: 550 });\n const notes = [\n f\n .StaveNote({ keys: ['f/4', 'd/5'], duration: '1' })\n .addModifier(accid('#'), 0)\n .addModifier(accid('b'), 1),\n f\n .StaveNote({ keys: ['c/4', 'g/4'], duration: '2' })\n .addModifier(accid('##'), 0)\n .addModifier(accid('##'), 1),\n f\n .StaveNote({ keys: ['b/3', 'd/4', 'f/4'], duration: '16' })\n .addModifier(accid('#'), 0)\n .addModifier(accid('#'), 1)\n .addModifier(accid('##'), 2),\n f\n .StaveNote({ keys: ['g/4', 'a/4', 'c/5', 'e/5'], duration: '16' })\n .addModifier(accid('b'), 0)\n .addModifier(accid('b'), 1)\n .addModifier(accid('n'), 3),\n f\n .StaveNote({ keys: ['e/4', 'g/4', 'b/4', 'c/5'], duration: '4' })\n .addModifier(accid('b').setAsCautionary(), 0)\n .addModifier(accid('b').setAsCautionary(), 1)\n .addModifier(accid('bb'), 2)\n .addModifier(accid('b'), 3),\n f\n .StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5', 'g/5'], duration: '8' })\n .addModifier(accid('bb'), 0)\n .addModifier(accid('b').setAsCautionary(), 1)\n .addModifier(accid('n').setAsCautionary(), 2)\n .addModifier(accid('#'), 3)\n .addModifier(accid('n').setAsCautionary(), 4),\n ];\n Formatter.SimpleFormat(notes, 0, { paddingBetween: 20 });\n notes.forEach((note, index) => {\n Note.plotMetrics(f.getContext(), note, 140);\n options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals');\n note.getModifiersByType('Accidental').forEach((accid, index) => {\n options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width');\n });\n });\n f.draw();\n VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140);\n options.assert.ok(true, 'Full Accidental');\n}\nfunction basicStemDown(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n const accid = makeNewAccid(f);\n f.Stave({ x: 10, y: 10, width: 550 });\n const notes = [\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w', stem_direction: -1 })\n .addModifier(accid('b'), 0)\n .addModifier(accid('#'), 1),\n f\n .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2', stem_direction: -1 })\n .addModifier(accid('##'), 0)\n .addModifier(accid('n'), 1)\n .addModifier(accid('bb'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('#'), 4)\n .addModifier(accid('n'), 5)\n .addModifier(accid('bb'), 6),\n f\n .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16', stem_direction: -1 })\n .addModifier(accid('n'), 0)\n .addModifier(accid('#'), 1)\n .addModifier(accid('#'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('bb'), 4)\n .addModifier(accid('##'), 5)\n .addModifier(accid('#'), 6),\n ];\n Formatter.SimpleFormat(notes, 0, { paddingBetween: 30 });\n notes.forEach((note, noteIndex) => {\n Note.plotMetrics(f.getContext(), note, 140);\n options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + noteIndex + ' has accidentals');\n note.getModifiersByType('Accidental').forEach((accid, accidIndex) => {\n options.assert.ok(accid.getWidth() > 0, 'Accidental ' + accidIndex + ' has set width');\n });\n });\n f.draw();\n VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140);\n options.assert.ok(true, 'Full Accidental');\n}\nfunction multiVoice(options) {\n // Helper function for visualizing\n function showNotes(note1, note2, stave, ctx, x) {\n const modifierContext = new ModifierContext();\n note1.addToModifierContext(modifierContext);\n note2.addToModifierContext(modifierContext);\n new TickContext().addTickable(note1).addTickable(note2).preFormat().setX(x);\n note1.setContext(ctx).draw();\n note2.setContext(ctx).draw();\n Note.plotMetrics(ctx, note1, 180);\n Note.plotMetrics(ctx, note2, 15);\n }\n const f = VexFlowTests.makeFactory(options, 460, 250);\n const accid = makeNewAccid(f);\n const stave = f.Stave({ x: 10, y: 45, width: 420 });\n const ctx = f.getContext();\n stave.draw();\n let note1 = f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '2', stem_direction: -1 })\n .addModifier(accid('b'), 0)\n .addModifier(accid('n'), 1)\n .addModifier(accid('#'), 2)\n .setStave(stave);\n let note2 = f\n .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '2', stem_direction: 1 })\n .addModifier(accid('b'), 0)\n .addModifier(accid('bb'), 1)\n .addModifier(accid('##'), 2)\n .setStave(stave);\n showNotes(note1, note2, stave, ctx, 60);\n note1 = f\n .StaveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: '2', stem_direction: -1 })\n .addModifier(accid('b'), 0)\n .addModifier(accid('n'), 1)\n .addModifier(accid('#'), 2)\n .setStave(stave);\n note2 = f\n .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 })\n .addModifier(accid('b'), 0)\n .setStave(stave);\n showNotes(note1, note2, stave, ctx, 150);\n note1 = f\n .StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '2', stem_direction: -1 })\n .addModifier(accid('b'), 0)\n .addModifier(accid('n'), 1)\n .addModifier(accid('#'), 2)\n .setStave(stave);\n note2 = f\n .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 })\n .addModifier(accid('b'), 0)\n .setStave(stave);\n showNotes(note1, note2, stave, ctx, 250);\n VexFlowTests.plotLegendForNoteWidth(ctx, 350, 150);\n options.assert.ok(true, 'Full Accidental');\n}\nfunction microtonal(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n const accid = makeNewAccid(f);\n const ctx = f.getContext();\n f.Stave({ x: 10, y: 10, width: 650 });\n const notes = [\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' })\n .addModifier(accid('db'), 0)\n .addModifier(accid('d'), 1),\n f\n .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' })\n .addModifier(accid('bbs'), 0)\n .addModifier(accid('++'), 1)\n .addModifier(accid('+'), 2)\n .addModifier(accid('d'), 3)\n .addModifier(accid('db'), 4)\n .addModifier(accid('+'), 5)\n .addModifier(accid('##'), 6),\n f\n .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' })\n .addModifier(accid('++'), 0)\n .addModifier(accid('bbs'), 1)\n .addModifier(accid('+'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('db'), 4)\n .addModifier(accid('##'), 5)\n .addModifier(accid('#'), 6),\n f\n .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' })\n .addModifier(accid('#'), 0)\n .addModifier(accid('db').setAsCautionary(), 1)\n .addModifier(accid('bbs').setAsCautionary(), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('++').setAsCautionary(), 4)\n .addModifier(accid('d').setAsCautionary(), 5),\n f\n .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'd/5', 'g/5'], duration: '16' })\n .addModifier(accid('++-'), 0)\n .addModifier(accid('+-'), 1)\n .addModifier(accid('bs'), 2)\n .addModifier(accid('bss'), 3)\n .addModifier(accid('afhf'), 4)\n .addModifier(accid('ashs'), 5),\n ];\n Formatter.SimpleFormat(notes, 0, { paddingBetween: 35 });\n notes.forEach((note, index) => {\n Note.plotMetrics(f.getContext(), note, 140);\n options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals');\n note.getModifiersByType('Accidental').forEach((accid, index) => {\n options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width');\n });\n });\n f.draw();\n VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140);\n options.assert.ok(true, 'Microtonal Accidental');\n}\nfunction microtonal_iranian(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n const accid = makeNewAccid(f);\n const ctx = f.getContext();\n f.Stave({ x: 10, y: 10, width: 650 });\n const notes = [\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' })\n .addModifier(accid('k'), 0)\n .addModifier(accid('o'), 1),\n f\n .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' })\n .addModifier(accid('b'), 0)\n .addModifier(accid('k'), 1)\n .addModifier(accid('n'), 2)\n .addModifier(accid('o'), 3)\n .addModifier(accid('#'), 4)\n .addModifier(accid('bb'), 5)\n .addModifier(accid('##'), 6),\n f\n .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' })\n .addModifier(accid('o'), 0)\n .addModifier(accid('k'), 1)\n .addModifier(accid('n'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('bb'), 4)\n .addModifier(accid('##'), 5)\n .addModifier(accid('#'), 6),\n f\n .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' })\n .addModifier(accid('#'), 0)\n .addModifier(accid('o').setAsCautionary(), 1)\n .addModifier(accid('n').setAsCautionary(), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('k').setAsCautionary(), 4),\n f\n .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: '16' })\n .addModifier(accid('k'), 0)\n .addModifier(accid('k'), 1)\n .addModifier(accid('k'), 2)\n .addModifier(accid('k'), 3),\n ];\n Formatter.SimpleFormat(notes, 0, { paddingBetween: 35 });\n notes.forEach((note, index) => {\n Note.plotMetrics(f.getContext(), note, 140);\n options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals');\n note.getModifiersByType('Accidental').forEach((accid, index) => {\n options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width');\n });\n });\n f.draw();\n VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140);\n options.assert.ok(true, 'Microtonal Accidental (Iranian)');\n}\nfunction sagittal(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n const accid = makeNewAccid(f);\n const ctx = f.getContext();\n f.Stave({ x: 10, y: 10, width: 650 });\n const notes = [\n f\n .StaveNote({ keys: ['d/4', 'f/4', 'b/4', 'b/4'], duration: '4' })\n .addModifier(accid('accSagittal11MediumDiesisUp'), 1)\n .addModifier(accid('accSagittal5CommaDown'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('accSagittal7CommaDown'), 3),\n f\n .StaveNote({ keys: ['d/4', 'f/4', 'a/4', 'b/4'], duration: '4' })\n .addModifier(accid('accSagittal35LargeDiesisDown'), 2),\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5'], duration: '8' }).addModifier(accid('accSagittal5CommaDown'), 1),\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'b/4'], duration: '8' })\n .addModifier(accid('b'), 1)\n .addModifier(accid('accSagittal7CommaDown'), 1)\n .addModifier(accid('accSagittal11LargeDiesisDown'), 3),\n f\n .StaveNote({ keys: ['d/4', 'f/4', 'b/4', 'b/4'], duration: '4' })\n .addModifier(accid('accSagittal11MediumDiesisUp'), 1)\n .addModifier(accid('accSagittal5CommaDown'), 2)\n .addModifier(accid('accSagittalFlat7CDown'), 3),\n f\n .StaveNote({ keys: ['d/4', 'f/4', 'a/4', 'b/4'], duration: '4' })\n .addModifier(accid('accSagittal35LargeDiesisDown'), 2),\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5'], duration: '8' }).addModifier(accid('accSagittal5CommaDown'), 1),\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'b/4'], duration: '8' })\n .addModifier(accid('accSagittalFlat7CDown'), 1)\n .addModifier(accid('accSagittal11LargeDiesisDown'), 3),\n ];\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [0, 1],\n last_indices: [0, 1],\n });\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [3],\n last_indices: [3],\n options: {\n direction: Stem.DOWN,\n },\n });\n f.StaveTie({\n from: notes[4],\n to: notes[5],\n first_indices: [0, 1],\n last_indices: [0, 1],\n });\n f.StaveTie({\n from: notes[4],\n to: notes[5],\n first_indices: [3],\n last_indices: [3],\n options: {\n direction: Stem.DOWN,\n },\n });\n f.Beam({ notes: notes.slice(2, 4) });\n f.Beam({ notes: notes.slice(6, 8) });\n Formatter.SimpleFormat(notes);\n notes.forEach((note, index) => {\n Note.plotMetrics(f.getContext(), note, 140);\n options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals');\n note.getModifiersByType('Accidental').forEach((accid, index) => {\n options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width');\n });\n });\n f.draw();\n VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140);\n options.assert.ok(true, 'Sagittal');\n}\nfunction automaticAccidentals0(options) {\n const f = VexFlowTests.makeFactory(options, 700, 200);\n const stave = f.Stave();\n const notes = [\n { keys: ['c/4', 'c/5'], duration: '4' },\n { keys: ['c#/4', 'c#/5'], duration: '4' },\n { keys: ['c#/4', 'c#/5'], duration: '4' },\n { keys: ['c##/4', 'c##/5'], duration: '4' },\n { keys: ['c##/4', 'c##/5'], duration: '4' },\n { keys: ['c/4', 'c/5'], duration: '4' },\n { keys: ['cn/4', 'cn/5'], duration: '4' },\n { keys: ['cbb/4', 'cbb/5'], duration: '4' },\n { keys: ['cbb/4', 'cbb/5'], duration: '4' },\n { keys: ['cb/4', 'cb/5'], duration: '4' },\n { keys: ['cb/4', 'cb/5'], duration: '4' },\n { keys: ['c/4', 'c/5'], duration: '4' },\n ].map(f.StaveNote.bind(f));\n const gracenotes = [{ keys: ['d#/4'], duration: '16', slash: true }].map(f.GraceNote.bind(f));\n notes[0].addModifier(f.GraceNoteGroup({ notes: gracenotes }).beamNotes(), 0);\n const voice = f\n .Voice()\n .setMode(Voice.Mode.SOFT)\n .addTickable(new TimeSigNote('12/4').setStave(stave))\n .addTickables(notes);\n Accidental.applyAccidentals([voice], 'C');\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction automaticAccidentals1(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('Ab');\n const notes = [\n { keys: ['c/4'], duration: '4' },\n { keys: ['d/4'], duration: '4' },\n { keys: ['e/4'], duration: '4' },\n { keys: ['f/4'], duration: '4' },\n { keys: ['g/4'], duration: '4' },\n { keys: ['a/4'], duration: '4' },\n { keys: ['b/4'], duration: '4' },\n { keys: ['c/5'], duration: '4' },\n ].map(f.StaveNote.bind(f));\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n Accidental.applyAccidentals([voice], 'Ab');\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction automaticAccidentals2(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('A');\n const notes = [\n { keys: ['a/4'], duration: '4' },\n { keys: ['b/4'], duration: '4' },\n { keys: ['c#/5'], duration: '4' },\n { keys: ['d/5'], duration: '4' },\n { keys: ['e/5'], duration: '4' },\n { keys: ['f#/5'], duration: '4' },\n { keys: ['g#/5'], duration: '4' },\n { keys: ['a/5'], duration: '4' },\n ].map(f.StaveNote.bind(f));\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n Accidental.applyAccidentals([voice], 'A');\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction automaticAccidentals3(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('A');\n const score = f.EasyScore();\n score.set({ time: '8/4' });\n const notes = score.notes('A4/q, B4/q, C#5/q, D5/q, E5/q,F#5/q, G#5/q, A5/q', { stem: 'UP' });\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n Accidental.applyAccidentals([voice], 'A');\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction automaticAccidentalsMultiVoiceInline(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('Ab');\n const notes0 = [\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['d/4'], duration: '4', stem_direction: -1 },\n { keys: ['e/4'], duration: '4', stem_direction: -1 },\n { keys: ['f/4'], duration: '4', stem_direction: -1 },\n { keys: ['g/4'], duration: '4', stem_direction: -1 },\n { keys: ['a/4'], duration: '4', stem_direction: -1 },\n { keys: ['b/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n ].map(f.StaveNote.bind(f));\n const notes1 = [\n { keys: ['c/5'], duration: '4' },\n { keys: ['d/5'], duration: '4' },\n { keys: ['e/5'], duration: '4' },\n { keys: ['f/5'], duration: '4' },\n { keys: ['g/5'], duration: '4' },\n { keys: ['a/5'], duration: '4' },\n { keys: ['b/5'], duration: '4' },\n { keys: ['c/6'], duration: '4' },\n ].map(f.StaveNote.bind(f));\n const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0);\n const voice1 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1);\n // Ab Major\n Accidental.applyAccidentals([voice0, voice1], 'Ab');\n options.assert.equal(hasAccidental(notes0[0]), false);\n options.assert.equal(hasAccidental(notes0[1]), true);\n options.assert.equal(hasAccidental(notes0[2]), true);\n options.assert.equal(hasAccidental(notes0[3]), false);\n options.assert.equal(hasAccidental(notes0[4]), false);\n options.assert.equal(hasAccidental(notes0[5]), true);\n options.assert.equal(hasAccidental(notes0[6]), true);\n options.assert.equal(hasAccidental(notes0[7]), false);\n options.assert.equal(hasAccidental(notes1[0]), false);\n options.assert.equal(hasAccidental(notes1[1]), true);\n options.assert.equal(hasAccidental(notes1[2]), true);\n options.assert.equal(hasAccidental(notes1[3]), false);\n options.assert.equal(hasAccidental(notes1[4]), false);\n options.assert.equal(hasAccidental(notes1[5]), true);\n options.assert.equal(hasAccidental(notes1[6]), true);\n options.assert.equal(hasAccidental(notes1[7]), false);\n new Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction automaticAccidentalsMultiVoiceOffset(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('Cb');\n const notes0 = [\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['d/4'], duration: '4', stem_direction: -1 },\n { keys: ['e/4'], duration: '4', stem_direction: -1 },\n { keys: ['f/4'], duration: '4', stem_direction: -1 },\n { keys: ['g/4'], duration: '4', stem_direction: -1 },\n { keys: ['a/4'], duration: '4', stem_direction: -1 },\n { keys: ['b/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n ].map(f.StaveNote.bind(f));\n const notes1 = [\n { keys: ['c/5'], duration: '8' },\n { keys: ['c/5'], duration: '4' },\n { keys: ['d/5'], duration: '4' },\n { keys: ['e/5'], duration: '4' },\n { keys: ['f/5'], duration: '4' },\n { keys: ['g/5'], duration: '4' },\n { keys: ['a/5'], duration: '4' },\n { keys: ['b/5'], duration: '4' },\n { keys: ['c/6'], duration: '4' },\n ].map(f.StaveNote.bind(f));\n const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0);\n const voice1 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1);\n // Cb Major (All flats)\n Accidental.applyAccidentals([voice0, voice1], 'Cb');\n options.assert.equal(hasAccidental(notes0[0]), true);\n options.assert.equal(hasAccidental(notes0[1]), true);\n options.assert.equal(hasAccidental(notes0[2]), true);\n options.assert.equal(hasAccidental(notes0[3]), true);\n options.assert.equal(hasAccidental(notes0[4]), true);\n options.assert.equal(hasAccidental(notes0[5]), true);\n options.assert.equal(hasAccidental(notes0[6]), true);\n options.assert.equal(hasAccidental(notes0[7]), false, 'Natural Remembered');\n options.assert.equal(hasAccidental(notes1[0]), true);\n options.assert.equal(hasAccidental(notes1[1]), false);\n options.assert.equal(hasAccidental(notes1[2]), true);\n options.assert.equal(hasAccidental(notes1[3]), true);\n options.assert.equal(hasAccidental(notes1[4]), true);\n options.assert.equal(hasAccidental(notes1[5]), true);\n options.assert.equal(hasAccidental(notes1[6]), true);\n options.assert.equal(hasAccidental(notes1[7]), true);\n new Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction automaticAccidentalsCornerCases1(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('C');\n const notes0 = [\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n ].map(f.StaveNote.bind(f));\n const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0);\n Accidental.applyAccidentals([voice0], 'C');\n options.assert.equal(hasAccidental(notes0[0]), false);\n options.assert.equal(hasAccidental(notes0[1]), true);\n options.assert.equal(hasAccidental(notes0[2]), false);\n options.assert.equal(hasAccidental(notes0[3]), true);\n options.assert.equal(hasAccidental(notes0[4]), false);\n options.assert.equal(hasAccidental(notes0[5]), true);\n options.assert.equal(hasAccidental(notes0[6]), false);\n options.assert.equal(hasAccidental(notes0[7]), true);\n options.assert.equal(hasAccidental(notes0[8]), false);\n new Formatter().joinVoices([voice0]).formatToStave([voice0], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction automaticAccidentalsCornerCases2(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('C');\n const notes0 = [\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/5'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/5'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n ].map(f.StaveNote.bind(f));\n const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0);\n Accidental.applyAccidentals([voice0], 'C');\n options.assert.equal(hasAccidental(notes0[0]), false);\n options.assert.equal(hasAccidental(notes0[2]), true);\n options.assert.equal(hasAccidental(notes0[4]), false);\n options.assert.equal(hasAccidental(notes0[6]), true);\n options.assert.equal(hasAccidental(notes0[8]), false);\n options.assert.equal(hasAccidental(notes0[10]), true);\n options.assert.equal(hasAccidental(notes0[12]), false);\n options.assert.equal(hasAccidental(notes0[14]), true);\n options.assert.equal(hasAccidental(notes0[16]), false);\n options.assert.equal(hasAccidental(notes0[1]), false);\n options.assert.equal(hasAccidental(notes0[3]), true);\n options.assert.equal(hasAccidental(notes0[5]), false);\n options.assert.equal(hasAccidental(notes0[7]), true);\n options.assert.equal(hasAccidental(notes0[9]), false);\n options.assert.equal(hasAccidental(notes0[11]), true);\n options.assert.equal(hasAccidental(notes0[13]), false);\n options.assert.equal(hasAccidental(notes0[15]), true);\n options.assert.equal(hasAccidental(notes0[17]), false);\n new Formatter().joinVoices([voice0]).formatToStave([voice0], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction automaticAccidentalsCornerCases3(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('C#');\n const notes0 = [\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n ].map(f.StaveNote.bind(f));\n const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0);\n Accidental.applyAccidentals([voice0], 'C#');\n options.assert.equal(hasAccidental(notes0[0]), true);\n options.assert.equal(hasAccidental(notes0[1]), true);\n options.assert.equal(hasAccidental(notes0[2]), false);\n options.assert.equal(hasAccidental(notes0[3]), true);\n options.assert.equal(hasAccidental(notes0[4]), false);\n options.assert.equal(hasAccidental(notes0[5]), true);\n options.assert.equal(hasAccidental(notes0[6]), false);\n options.assert.equal(hasAccidental(notes0[7]), true);\n options.assert.equal(hasAccidental(notes0[8]), false);\n new Formatter().joinVoices([voice0]).formatToStave([voice0], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction automaticAccidentalsCornerCases4(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('C#');\n const notes0 = [\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/5'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/5'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n ].map(f.StaveNote.bind(f));\n const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0);\n Accidental.applyAccidentals([voice0], 'C#');\n options.assert.equal(hasAccidental(notes0[0]), true);\n options.assert.equal(hasAccidental(notes0[2]), true);\n options.assert.equal(hasAccidental(notes0[4]), false);\n options.assert.equal(hasAccidental(notes0[6]), true);\n options.assert.equal(hasAccidental(notes0[8]), false);\n options.assert.equal(hasAccidental(notes0[10]), true);\n options.assert.equal(hasAccidental(notes0[12]), false);\n options.assert.equal(hasAccidental(notes0[14]), true);\n options.assert.equal(hasAccidental(notes0[16]), false);\n options.assert.equal(hasAccidental(notes0[1]), true);\n options.assert.equal(hasAccidental(notes0[3]), true);\n options.assert.equal(hasAccidental(notes0[5]), false);\n options.assert.equal(hasAccidental(notes0[7]), true);\n options.assert.equal(hasAccidental(notes0[9]), false);\n options.assert.equal(hasAccidental(notes0[11]), true);\n options.assert.equal(hasAccidental(notes0[13]), false);\n options.assert.equal(hasAccidental(notes0[15]), true);\n options.assert.equal(hasAccidental(notes0[17]), false);\n new Formatter().joinVoices([voice0]).formatToStave([voice0], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction factoryAPI(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n f.Stave({ x: 10, y: 10, width: 550 });\n const accid = makeNewAccid(f);\n const notes = [\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' })\n .addModifier(accid('b'), 0)\n .addModifier(accid('#'), 1),\n f\n .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: 'h' })\n .addModifier(accid('##'), 0)\n .addModifier(accid('n'), 1)\n .addModifier(accid('bb'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('#'), 4)\n .addModifier(accid('n'), 5)\n .addModifier(accid('bb'), 6),\n f\n .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' })\n .addModifier(accid('n'), 0)\n .addModifier(accid('#'), 1)\n .addModifier(accid('#'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('bb'), 4)\n .addModifier(accid('##'), 5)\n .addModifier(accid('#'), 6),\n f\n .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: 'w' })\n .addModifier(accid('#'), 0)\n .addModifier(accid('##').setAsCautionary(), 1)\n .addModifier(accid('#').setAsCautionary(), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('bb').setAsCautionary(), 4)\n .addModifier(accid('b').setAsCautionary(), 5),\n ];\n Formatter.SimpleFormat(notes);\n notes.forEach((n, i) => {\n options.assert.ok(n.getModifiersByType('Accidental').length > 0, 'Note ' + i + ' has accidentals');\n n.getModifiersByType('Accidental').forEach((accid, i) => {\n options.assert.ok(accid.getWidth() > 0, 'Accidental ' + i + ' has set width');\n });\n });\n f.draw();\n options.assert.ok(true, 'Factory API');\n}\nVexFlowTests.register(AccidentalTests);\nexport { AccidentalTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Annotation Tests\n// TODO: Formatter.FormatAndDraw(ctx, stave, notes, ???number???);\n// Did a previous version of the API accept a number as the fourth argument?\n// We removed the fourth argument from all of our test cases.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Annotation, AnnotationVerticalJustify } from '../src/annotation';\nimport { Articulation } from '../src/articulation';\nimport { Beam } from '../src/beam';\nimport { Bend } from '../src/bend';\nimport { Flow } from '../src/flow';\nimport { Font, FontStyle, FontWeight } from '../src/font';\nimport { Formatter } from '../src/formatter';\nimport { ModifierPosition } from '../src/modifier';\nimport { Registry } from '../src/registry';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { Stem } from '../src/stem';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { Vibrato } from '../src/vibrato';\nimport { Voice } from '../src/voice';\nconst AnnotationTests = {\n Start() {\n QUnit.module('Annotation');\n const run = VexFlowTests.runTests;\n run('Placement', placement);\n run('Lyrics', lyrics);\n run('Simple Annotation', simple);\n run('Styled Annotation', styling);\n run('Standard Notation Annotation', standard);\n run('Harmonics', harmonic);\n run('Fingerpicking', picking);\n run('Bottom Annotation', bottom);\n run('Bottom Annotations with Beams', bottomWithBeam);\n run('Test Justification Annotation Stem Up', justificationStemUp);\n run('Test Justification Annotation Stem Down', justificationStemDown);\n run('TabNote Annotations', tabNotes);\n },\n};\nconst FONT_SIZE = VexFlowTests.Font.size;\n// Helper functions to create TabNote and StaveNote objects.\nconst tabNote = (noteStruct) => new TabNote(noteStruct);\nconst staveNote = (noteStruct) => new StaveNote(noteStruct);\n/**\n * Show lyrics using Annotation objects.\n */\nfunction lyrics(options) {\n let fontSize = FONT_SIZE;\n let x = 10;\n let width = 170;\n let ratio = 1;\n const registry = new Registry();\n Registry.enableDefaultRegistry(registry);\n const f = VexFlowTests.makeFactory(options, 750, 260);\n // Add three groups of staves. Each time we increase the fontSize by 2.\n for (let i = 0; i < 3; ++i) {\n const score = f.EasyScore();\n score.set({ time: '3/4' });\n const system = f.System({ width, x });\n system.addStave({\n voices: [\n score.voice(score.notes('(C4 F4)/2[id=\"n0\"]').concat(score.beam(score.notes('(C4 A4)/8[id=\"n1\"], (C4 A4)/8[id=\"n2\"]')))),\n ],\n });\n // Add lyrics under the first row.\n ['hand,', 'and', 'me', 'pears', 'lead', 'the'].forEach((text, ix) => {\n const verse = Math.floor(ix / 3);\n const noteGroupID = 'n' + (ix % 3);\n const noteGroup = registry.getElementById(noteGroupID);\n const lyricsAnnotation = f.Annotation({ text }).setFont('Roboto Slab', fontSize);\n lyricsAnnotation.setPosition(ModifierPosition.BELOW);\n noteGroup.addModifier(lyricsAnnotation, verse);\n });\n // Second row doesn't have any lyrics.\n system.addStave({\n voices: [score.voice(score.notes('(F4 D5)/2').concat(score.beam(score.notes('(F4 F5)/8, (F4 F5)/8'))))],\n });\n f.draw();\n ratio = (fontSize + 2) / fontSize;\n width = width * ratio;\n x = x + width;\n fontSize = fontSize + 2;\n }\n options.assert.ok(true);\n}\nfunction simple(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.font = '10pt Arial, sans-serif';\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n tabNote({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'h',\n }).addModifier(new Annotation('T'), 0),\n tabNote({\n positions: [{ str: 2, fret: 10 }],\n duration: 'h',\n }).addModifier(new Bend('Full').setTap('T'), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'Simple Annotation');\n}\nfunction standard(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n const stave = new Stave(10, 10, 450).addClef('treble').setContext(ctx).draw();\n const annotation = (text) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE, 'normal', 'italic');\n const notes = [\n staveNote({ keys: ['c/4', 'e/4'], duration: 'h' }).addModifier(annotation('quiet'), 0),\n staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'h' }).addModifier(annotation('Allegro'), 2),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'Standard Notation Annotation');\n}\nfunction styling(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n const stave = new Stave(10, 10, 450).addClef('treble').setContext(ctx).draw();\n const annotation = (text, style) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE, 'normal', 'italic').setStyle(style);\n const notes = [\n staveNote({ keys: ['c/4', 'e/4'], duration: 'h' }).addModifier(annotation('quiet', { fillStyle: '#0F0' }), 0),\n staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'h' }).addModifier(annotation('Allegro', { fillStyle: '#00F' }), 2),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'Standard Notation Annotation');\n}\nfunction harmonic(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n tabNote({\n positions: [\n { str: 2, fret: 12 },\n { str: 3, fret: 12 },\n ],\n duration: 'h',\n }).addModifier(new Annotation('Harm.'), 0),\n tabNote({\n positions: [{ str: 2, fret: 9 }],\n duration: 'h',\n })\n .addModifier(new Annotation('(8va)').setFont(Font.SERIF, FONT_SIZE, FontWeight.NORMAL, FontStyle.ITALIC), 0)\n .addModifier(new Annotation('A.H.'), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'Simple Annotation');\n}\nfunction picking(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.setFont(Font.SANS_SERIF, FONT_SIZE);\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const annotation = (text) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE, FontWeight.NORMAL, FontStyle.ITALIC);\n const notes = [\n tabNote({\n positions: [\n { str: 1, fret: 0 },\n { str: 2, fret: 1 },\n { str: 3, fret: 2 },\n { str: 4, fret: 2 },\n { str: 5, fret: 0 },\n ],\n duration: 'h',\n }).addModifier(new Vibrato().setVibratoWidth(40), 0),\n tabNote({\n positions: [{ str: 6, fret: 9 }],\n duration: '8',\n }).addModifier(annotation('p').setVerticalJustification(AnnotationVerticalJustify.TOP), 0),\n tabNote({\n positions: [{ str: 3, fret: 9 }],\n duration: '8',\n }).addModifier(annotation('i').setVerticalJustification(AnnotationVerticalJustify.TOP), 0),\n tabNote({\n positions: [{ str: 2, fret: 9 }],\n duration: '8',\n }).addModifier(annotation('m').setVerticalJustification(AnnotationVerticalJustify.TOP), 0),\n tabNote({\n positions: [{ str: 1, fret: 9 }],\n duration: '8',\n }).addModifier(annotation('a').setVerticalJustification(AnnotationVerticalJustify.TOP), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'Fingerpicking');\n}\nfunction placement(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 750, 300);\n const stave = new Stave(10, 50, 750).addClef('treble').setContext(ctx).draw();\n const annotation = (text, fontSize, vj) => new Annotation(text).setFont(Font.SERIF, fontSize).setVerticalJustification(vj);\n const notes = [\n staveNote({ keys: ['e/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 10, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 10, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['c/5'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 10, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['f/4'], duration: 'q' })\n .addModifier(annotation('v1', 14, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 14, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['f/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('am').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 20, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(annotation('v1', 11, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 11, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(annotation('v1', 11, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 20, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['f/4'], duration: 'q' })\n .addModifier(annotation('v1', 12, AnnotationVerticalJustify.BOTTOM), 0)\n .addModifier(annotation('v2', 12, AnnotationVerticalJustify.BOTTOM), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(annotation('v1', 11, AnnotationVerticalJustify.BOTTOM), 0)\n .addModifier(annotation('v2', 20, AnnotationVerticalJustify.BOTTOM), 0),\n staveNote({ keys: ['f/5'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('am').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(annotation('v1', 10, AnnotationVerticalJustify.BOTTOM), 0)\n .addModifier(annotation('v2', 20, AnnotationVerticalJustify.BOTTOM), 0),\n staveNote({ keys: ['f/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(annotation('v1', 10, AnnotationVerticalJustify.BOTTOM), 0)\n .addModifier(annotation('v2', 20, AnnotationVerticalJustify.BOTTOM), 0),\n staveNote({ keys: ['f/5'], duration: 'w' })\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(annotation('v1', 11, AnnotationVerticalJustify.BOTTOM), 0)\n .addModifier(annotation('v2', 16, AnnotationVerticalJustify.BOTTOM), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, ' Annotation Placement');\n}\nfunction bottom(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n const stave = new Stave(10, 10, 300).addClef('treble').setContext(ctx).draw();\n const annotation = (text) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE).setVerticalJustification(Annotation.VerticalJustify.BOTTOM);\n const notes = [\n staveNote({ keys: ['f/4'], duration: 'w' }).addModifier(annotation('F'), 0),\n staveNote({ keys: ['a/4'], duration: 'w' }).addModifier(annotation('A'), 0),\n staveNote({ keys: ['c/5'], duration: 'w' }).addModifier(annotation('C'), 0),\n staveNote({ keys: ['e/5'], duration: 'w' }).addModifier(annotation('E'), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'Bottom Annotation');\n}\nfunction bottomWithBeam(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n const stave = new Stave(10, 10, 300).addClef('treble').setContext(ctx).draw();\n const notes = [\n new StaveNote({ keys: ['a/3'], duration: '8' }).addModifier(new Annotation('good').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)),\n new StaveNote({ keys: ['g/3'], duration: '8' }).addModifier(new Annotation('even').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)),\n new StaveNote({ keys: ['c/4'], duration: '8' }).addModifier(new Annotation('under').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)),\n new StaveNote({ keys: ['d/4'], duration: '8' }).addModifier(new Annotation('beam').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)),\n ];\n const beam = new Beam(notes.slice(1));\n Formatter.FormatAndDraw(ctx, stave, notes);\n beam.setContext(ctx).draw();\n options.assert.ok(true, 'Bottom Annotation with Beams');\n}\nfunction justificationStemUp(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 650, 950);\n ctx.scale(1.5, 1.5);\n const annotation = (text, hJustification, vJustification) => new Annotation(text)\n .setFont(Font.SANS_SERIF, FONT_SIZE)\n .setJustification(hJustification)\n .setVerticalJustification(vJustification);\n for (let v = 1; v <= 4; ++v) {\n const stave = new Stave(10, (v - 1) * 150 + 40, 400).addClef('treble').setContext(ctx).draw();\n const notes = [\n staveNote({ keys: ['c/3'], duration: 'q' }).addModifier(annotation('Text', 1, v), 0),\n staveNote({ keys: ['c/4'], duration: 'q' }).addModifier(annotation('Text', 2, v), 0),\n staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'q' }).addModifier(annotation('Text', 3, v), 0),\n staveNote({ keys: ['c/6'], duration: 'q' }).addModifier(annotation('Text', 4, v), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n }\n options.assert.ok(true, 'Test Justification Annotation');\n}\nfunction justificationStemDown(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 650, 1000);\n ctx.scale(1.5, 1.5);\n const annotation = (text, hJustification, vJustification) => new Annotation(text)\n .setFont(Font.SANS_SERIF, FONT_SIZE)\n .setJustification(hJustification)\n .setVerticalJustification(vJustification);\n for (let v = 1; v <= 4; ++v) {\n const stave = new Stave(10, (v - 1) * 150 + 40, 400).addClef('treble').setContext(ctx).draw();\n const notes = [\n staveNote({ keys: ['c/3'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 1, v), 0),\n staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 2, v), 0),\n staveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 3, v), 0),\n staveNote({ keys: ['c/6'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 4, v), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n }\n options.assert.ok(true, 'Test Justification Annotation');\n}\nfunction tabNotes(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n ctx.font = '10pt Arial, sans-serif';\n const stave = new TabStave(10, 10, 550);\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 3, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 3, fret: 5 },\n ],\n duration: '8',\n },\n ];\n const notes1 = specs.map((noteSpec) => {\n const note = new TabNote(noteSpec);\n note.render_options.draw_stem = true;\n return note;\n });\n const notes2 = specs.map((noteSpec) => {\n const note = new TabNote(noteSpec);\n note.render_options.draw_stem = true;\n note.setStemDirection(-1);\n return note;\n });\n const notes3 = specs.map((noteSpec) => new TabNote(noteSpec));\n notes1[0].addModifier(new Annotation('Text').setJustification(1).setVerticalJustification(1)); // U\n notes1[1].addModifier(new Annotation('Text').setJustification(2).setVerticalJustification(2)); // D\n notes1[2].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(3)); // U\n notes1[3].addModifier(new Annotation('Text').setJustification(4).setVerticalJustification(4)); // D\n notes2[0].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(1)); // U\n notes2[1].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(2)); // D\n notes2[2].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(3)); // U\n notes2[3].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(4)); // D\n notes3[0].addModifier(new Annotation('Text').setVerticalJustification(1)); // U\n notes3[1].addModifier(new Annotation('Text').setVerticalJustification(2)); // D\n notes3[2].addModifier(new Annotation('Text').setVerticalJustification(3)); // U\n notes3[3].addModifier(new Annotation('Text').setVerticalJustification(4)); // D\n const voice = new Voice(Flow.TIME4_4).setMode(Voice.Mode.SOFT);\n voice.addTickables(notes1);\n voice.addTickables(notes2);\n voice.addTickables(notes3);\n // Alternatively, you could add all the notes in one big array with spread syntax.\n // voice.addTickables([...notes1, ...notes2, ...notes3]);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave });\n voice.draw(ctx, stave);\n options.assert.ok(true, 'TabNotes successfully drawn');\n}\nVexFlowTests.register(AnnotationTests);\nexport { AnnotationTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Articulation Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Articulation } from '../src/articulation';\nimport { Beam } from '../src/beam';\nimport { Flow } from '../src/flow';\nimport { Font } from '../src/font';\nimport { Formatter } from '../src/formatter';\nimport { ModifierPosition } from '../src/modifier';\nimport { Stave } from '../src/stave';\nimport { Barline } from '../src/stavebarline';\nimport { StaveNote } from '../src/stavenote';\nimport { Stem } from '../src/stem';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { Voice } from '../src/voice';\nconst ArticulationTests = {\n Start() {\n QUnit.module('Articulation');\n const run = VexFlowTests.runTests;\n run('Articulation - Vertical Placement', verticalPlacement);\n run('Articulation - Vertical Placement (Glyph codes)', verticalPlacement2);\n run('Articulation - Staccato/Staccatissimo', drawArticulations, { sym1: 'a.', sym2: 'av' });\n run('Articulation - Accent/Tenuto', drawArticulations, { sym1: 'a>', sym2: 'a-' });\n run('Articulation - Marcato/L.H. Pizzicato', drawArticulations, { sym1: 'a^', sym2: 'a+' });\n run('Articulation - Snap Pizzicato/Fermata', drawArticulations, { sym1: 'ao', sym2: 'ao' });\n run('Articulation - Up-stroke/Down-Stroke', drawArticulations, { sym1: 'a|', sym2: 'am' });\n run('Articulation - Fermata Above/Below', drawFermata, { sym1: 'a@a', sym2: 'a@u' });\n run('Articulation - Fermata Short Above/Below', drawFermata, { sym1: 'a@as', sym2: 'a@us' });\n run('Articulation - Fermata Long Above/Below', drawFermata, { sym1: 'a@al', sym2: 'a@ul' });\n run('Articulation - Fermata Very Long Above/Below', drawFermata, { sym1: 'a@avl', sym2: 'a@uvl' });\n run('Articulation - Inline/Multiple', drawArticulations2, { sym1: 'a.', sym2: 'a.' });\n run('TabNote Articulation', tabNotes, { sym1: 'a.', sym2: 'a.' });\n },\n};\n// Helper function for creating StaveNotes.\nfunction drawArticulations(options) {\n const sym1 = options.params.sym1;\n const sym2 = options.params.sym2;\n const width = 125 - Stave.defaultPadding;\n const f = VexFlowTests.makeFactory(options, 675, 195);\n const ctx = f.getContext();\n options.assert.expect(0);\n let x = 10;\n const y = 30;\n const score = f.EasyScore();\n const formatAndDrawToWidth = (x, y, width, notes, barline) => {\n const voices = [score.voice(notes, { time: '4/4' })];\n const formatter = f.Formatter();\n voices.forEach((v) => formatter.joinVoices([v]));\n const nwidth = Math.max(formatter.preCalculateMinTotalWidth(voices), width);\n formatter.format(voices, nwidth);\n const stave = f\n .Stave({ x, y, width: nwidth + Stave.defaultPadding })\n .setEndBarType(barline)\n .setContext(ctx)\n .draw();\n voices.forEach((voice) => voice.draw(ctx, stave));\n return stave.getWidth();\n };\n // bar 1\n const notesBar1 = [\n f.StaveNote({ keys: ['a/3'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }),\n ];\n notesBar1[0].addModifier(new Articulation(sym1).setPosition(4), 0);\n notesBar1[1].addModifier(new Articulation(sym1).setPosition(4), 0);\n notesBar1[2].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar1[3].addModifier(new Articulation(sym1).setPosition(3), 0);\n // Helper function to justify and draw a 4/4 voice\n x += formatAndDrawToWidth(x, y, width, notesBar1, Barline.type.NONE);\n // bar 2 - juxtaposing second bar next to first bar\n const notesBar2 = [\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n ];\n notesBar2[0].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar2[1].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar2[2].addModifier(new Articulation(sym1).setPosition(4), 0);\n notesBar2[3].addModifier(new Articulation(sym1).setPosition(4), 0);\n // Helper function to justify and draw a 4/4 voice\n x += formatAndDrawToWidth(x, y, width, notesBar2, Barline.type.DOUBLE);\n // bar 3 - juxtaposing second bar next to first bar\n const notesBar3 = [\n f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }),\n ];\n notesBar3[0].addModifier(new Articulation(sym2).setPosition(4), 0);\n notesBar3[1].addModifier(new Articulation(sym2).setPosition(4), 0);\n notesBar3[2].addModifier(new Articulation(sym2).setPosition(3), 0);\n notesBar3[3].addModifier(new Articulation(sym2).setPosition(3), 0);\n // Helper function to justify and draw a 4/4 voice\n x += formatAndDrawToWidth(x, y, width, notesBar3, Barline.type.NONE);\n // bar 4 - juxtaposing second bar next to first bar\n const notesBar4 = [\n f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n ];\n notesBar4[0].addModifier(new Articulation(sym2).setPosition(3), 0);\n notesBar4[1].addModifier(new Articulation(sym2).setPosition(3), 0);\n notesBar4[2].addModifier(new Articulation(sym2).setPosition(4), 0);\n notesBar4[3].addModifier(new Articulation(sym2).setPosition(4), 0);\n // Helper function to justify and draw a 4/4 voice\n formatAndDrawToWidth(x, y, width, notesBar4, Barline.type.END);\n}\nfunction drawFermata(options) {\n const sym1 = options.params.sym1;\n const sym2 = options.params.sym2;\n const f = VexFlowTests.makeFactory(options, 400, 195);\n const ctx = f.getContext();\n const score = f.EasyScore();\n const width = 150 - Stave.defaultPadding;\n let x = 50;\n const y = 30;\n const formatAndDrawToWidth = (x, y, width, notes, barline) => {\n const voices = [score.voice(notes, { time: '4/4' })];\n const formatter = f.Formatter();\n voices.forEach((v) => formatter.joinVoices([v]));\n const nwidth = Math.max(formatter.preCalculateMinTotalWidth(voices), width);\n formatter.format(voices, nwidth);\n const stave = f\n .Stave({ x, y, width: nwidth + Stave.defaultPadding })\n .setEndBarType(barline)\n .setContext(ctx)\n .draw();\n voices.forEach((voice) => voice.draw(ctx, stave));\n return stave.getWidth();\n };\n options.assert.expect(0);\n const notesBar1 = [\n f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: -1 }),\n ];\n notesBar1[0].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar1[1].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar1[2].addModifier(new Articulation(sym2).setPosition(4), 0);\n notesBar1[3].addModifier(new Articulation(sym2).setPosition(4), 0);\n x += formatAndDrawToWidth(x, y, width, notesBar1, Barline.type.NONE);\n // bar 2 - juxtaposing second bar next to first bar\n const notesBar2 = [\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n ];\n notesBar2[0].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar2[1].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar2[2].addModifier(new Articulation(sym2).setPosition(4), 0);\n notesBar2[3].addModifier(new Articulation(sym2).setPosition(4), 0);\n // Helper function to justify and draw a 4/4 voice\n formatAndDrawToWidth(x, y, width, notesBar2, Barline.type.DOUBLE);\n}\nfunction verticalPlacement(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 750, 300);\n const staveNote = (noteStruct) => new StaveNote(noteStruct);\n const stave = new Stave(10, 50, 750).addClef('treble').setContext(ctx).draw();\n const notes = [\n staveNote({ keys: ['f/4'], duration: 'q' })\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0),\n staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0),\n staveNote({ keys: ['c/5'], duration: 'q' })\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0),\n staveNote({ keys: ['f/4'], duration: 'q' })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0),\n staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0),\n staveNote({ keys: ['c/5'], duration: 'q' })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0),\n staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0),\n staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0),\n staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0),\n staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, ' Annotation Placement');\n}\nfunction verticalPlacement2(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 750, 300);\n const staveNote = (noteStruct) => new StaveNote(noteStruct);\n const stave = new Stave(10, 50, 750).addClef('treble').setContext(ctx).draw();\n const notes = [\n staveNote({ keys: ['f/4'], duration: 'q' })\n .addModifier(new Articulation('fermataBelow'), 0)\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('articTenutoBelow'), 0),\n staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('fermataShortBelow'), 0)\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('articTenutoBelow'), 0),\n staveNote({ keys: ['c/5'], duration: 'q' })\n .addModifier(new Articulation('fermataLongBelow'), 0)\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('articTenutoBelow'), 0),\n staveNote({ keys: ['f/4'], duration: 'q' })\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('articTenutoBelow'), 0)\n .addModifier(new Articulation('fermataVeryShortBelow'), 0),\n staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('articTenutoBelow'), 0)\n .addModifier(new Articulation('fermataVeryLongBelow'), 0),\n staveNote({ keys: ['c/5'], duration: 'q' })\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW).setBetweenLines(), 0)\n .addModifier(new Articulation('articTenutoBelow').setBetweenLines(), 0)\n .addModifier(new Articulation('fermataBelow'), 0),\n staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('fermataAbove'), 0)\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('articTenutoAbove'), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(new Articulation('fermataShortAbove'), 0)\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('articTenutoAbove'), 0),\n staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('fermataLongAbove'), 0)\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('articTenutoAbove'), 0),\n staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('articTenutoAbove'), 0)\n .addModifier(new Articulation('fermataVeryShortAbove'), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('articTenutoAbove'), 0)\n .addModifier(new Articulation('fermataVeryLongAbove'), 0),\n staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE).setBetweenLines(), 0)\n .addModifier(new Articulation('articTenutoAbove').setBetweenLines(), 0)\n .addModifier(new Articulation('fermataAbove'), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, ' Annotation Placement (Glyph codes)');\n}\nfunction drawArticulations2(options) {\n options.assert.expect(0);\n const scale = 0.8;\n const f = VexFlowTests.makeFactory(options, 1500, 195);\n // Get the rendering context\n const ctx = f.getContext();\n ctx.scale(scale, scale);\n // bar 1\n const stave1 = new Stave(10, 50, 500).setContext(ctx).draw();\n const notesBar1 = [\n f.StaveNote({ keys: ['c/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['d/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['e/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['g/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['b/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['d/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['e/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['g/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['b/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/6'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/6'], duration: '16', stem_direction: -1 }),\n ];\n let i;\n for (i = 0; i < 16; i++) {\n notesBar1[i].addModifier(new Articulation('a.').setPosition(4), 0);\n notesBar1[i].addModifier(new Articulation('a>').setPosition(4), 0);\n if (i === 15) {\n notesBar1[i].addModifier(new Articulation('a@u').setPosition(4), 0);\n }\n }\n const beam1 = new Beam(notesBar1.slice(0, 8));\n const beam2 = new Beam(notesBar1.slice(8, 16));\n Formatter.FormatAndDraw(ctx, stave1, notesBar1);\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n // bar 2 - juxtaposing second bar next to first bar\n const stave2 = new Stave(510, 50, 500).setContext(ctx).draw();\n const notesBar2 = [\n f.StaveNote({ keys: ['f/3'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['g/3'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/3'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['b/3'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['d/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['e/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['g/4'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/4'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['b/4'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['e/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['g/5'], duration: '16', stem_direction: -1 }),\n ];\n for (i = 0; i < 16; i++) {\n notesBar2[i].addModifier(new Articulation('a-').setPosition(3), 0);\n notesBar2[i].addModifier(new Articulation('a^').setPosition(3), 0);\n if (i === 15) {\n notesBar2[i].addModifier(new Articulation('a@u').setPosition(4), 0);\n }\n }\n const beam3 = new Beam(notesBar2.slice(0, 8));\n const beam4 = new Beam(notesBar2.slice(8, 16));\n Formatter.FormatAndDraw(ctx, stave2, notesBar2);\n beam3.setContext(ctx).draw();\n beam4.setContext(ctx).draw();\n // bar 3 - juxtaposing second bar next to first bar\n const stave3 = new Stave(1010, 50, 100).setContext(ctx).draw();\n const notesBar3 = [f.StaveNote({ keys: ['c/4'], duration: 'w', stem_direction: 1 })];\n notesBar3[0].addModifier(new Articulation('a-').setPosition(3), 0);\n notesBar3[0].addModifier(new Articulation('a>').setPosition(3), 0);\n notesBar3[0].addModifier(new Articulation('a@a').setPosition(3), 0);\n Formatter.FormatAndDraw(ctx, stave3, notesBar3);\n // bar 4 - juxtaposing second bar next to first bar\n const stave4 = new Stave(1110, 50, 250).setContext(ctx).draw();\n const notesBar4 = [\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n ];\n for (i = 0; i < 4; i++) {\n let position1 = 3;\n if (i > 1) {\n position1 = 4;\n }\n notesBar4[i].addModifier(new Articulation('a-').setPosition(position1), 0);\n }\n Formatter.FormatAndDraw(ctx, stave4, notesBar4);\n}\nfunction tabNotes(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n ctx.font = '10pt ' + Font.SANS_SERIF;\n const stave = new TabStave(10, 10, 550);\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 3, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 3, fret: 5 },\n ],\n duration: '8',\n },\n ];\n const notes1 = specs.map((noteSpec) => {\n const tabNote = new TabNote(noteSpec);\n tabNote.render_options.draw_stem = true;\n return tabNote;\n });\n const notes2 = specs.map((noteSpec) => {\n const tabNote = new TabNote(noteSpec);\n tabNote.render_options.draw_stem = true;\n tabNote.setStemDirection(-1);\n return tabNote;\n });\n const notes3 = specs.map((noteSpec) => new TabNote(noteSpec));\n notes1[0].addModifier(new Articulation('a>').setPosition(3), 0); // U\n notes1[1].addModifier(new Articulation('a>').setPosition(4), 0); // D\n notes1[2].addModifier(new Articulation('a.').setPosition(3), 0); // U\n notes1[3].addModifier(new Articulation('a.').setPosition(4), 0); // D\n notes2[0].addModifier(new Articulation('a>').setPosition(3), 0);\n notes2[1].addModifier(new Articulation('a>').setPosition(4), 0);\n notes2[2].addModifier(new Articulation('a.').setPosition(3), 0);\n notes2[3].addModifier(new Articulation('a.').setPosition(4), 0);\n notes3[0].addModifier(new Articulation('a>').setPosition(3), 0);\n notes3[1].addModifier(new Articulation('a>').setPosition(4), 0);\n notes3[2].addModifier(new Articulation('a.').setPosition(3), 0);\n notes3[3].addModifier(new Articulation('a.').setPosition(4), 0);\n const voice = new Voice(Flow.TIME4_4).setMode(Voice.Mode.SOFT);\n voice.addTickables(notes1);\n voice.addTickables(notes2);\n voice.addTickables(notes3);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n options.assert.ok(true, 'TabNotes successfully drawn');\n}\nVexFlowTests.register(ArticulationTests);\nexport { ArticulationTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Auto Beaming Tests\n// TODO: Beam.generateBeams(voice.getTickables() as StemmableNote[], ...) requires a cast to StemmableNote[].\n// Is there a cleaner way to handle this?\nimport { concat, VexFlowTests } from './vexflow_test_helpers';\nimport { Beam } from '../src/beam';\nimport { Fraction } from '../src/fraction';\nimport { Stave } from '../src/stave';\nimport { Stem } from '../src/stem';\nconst AutoBeamFormattingTests = {\n Start() {\n QUnit.module('Auto-Beaming');\n const run = VexFlowTests.runTests;\n run('Simple Auto Beaming', simpleAuto);\n run('Auto Beaming With Overflow Group', simpleAutoWithOverflowGroup);\n run('Even Group Stem Directions', evenGroupStemDirections);\n run('Odd Group Stem Directions', oddGroupStemDirections);\n run('Odd Beam Groups Auto Beaming', oddBeamGroups);\n run('More Simple Auto Beaming 0', moreSimple0);\n run('More Simple Auto Beaming 1', moreSimple1);\n run('Beam Across All Rests', beamAcrossAllRests);\n run('Beam Across All Rests with Stemlets', beamAcrossAllRestsWithStemlets);\n run('Break Beams on Middle Rests Only', beamAcrossMiddleRests);\n run('Break Beams on Rest', breakBeamsOnRests);\n run('Maintain Stem Directions', maintainStemDirections);\n run('Maintain Stem Directions - Beam Over Rests', maintainStemDirectionsBeamAcrossRests);\n run('Beat group with unbeamable note - 2/2', groupWithUnbeamableNote);\n run('Offset beat grouping - 6/8 ', groupWithUnbeamableNote1);\n run('Odd Time - Guessing Default Beam Groups', autoOddBeamGroups);\n run('Custom Beam Groups', customBeamGroups);\n run('Simple Tuplet Auto Beaming', simpleTuplets);\n run('More Simple Tuplet Auto Beaming', moreSimpleTuplets);\n run('More Automatic Beaming', moreBeaming);\n run('Automatic Beaming 4/4 with 3, 3, 2 Pattern', beamingWithSeveralGroups1);\n run('Automatic Beaming 4/4 with 3, 3, 2 Pattern and Overflow', beamingWithSeveralGroupsOverflow);\n run('Automatic Beaming 8/4 with 3, 2, 3 Pattern and 2 Overflows', beamingWithSeveralGroupsOverflow2);\n run('Automatic Beaming 8/4 with 3, 2, 3 Pattern and 3 Overflows', beamingWithSeveralGroupsOverflow3);\n run('Duration-Based Secondary Beam Breaks', secondaryBreaks1);\n run('Duration-Based Secondary Beam Breaks 2', secondaryBreaks2);\n run('Flat Beams Up', flatBeamsUp);\n run('Flat Beams Down', flatBeamsDown);\n run('Flat Beams Mixed Direction', flatBeamsMixed);\n run('Flat Beams Up (uniform)', flatBeamsUpUniform);\n run('Flat Beams Down (uniform)', flatBeamsDownUniform);\n run('Flat Beams Up Bounds', flatBeamsUpBounds);\n run('Flat Beams Down Bounds', flatBeamsDownBounds);\n },\n};\nfunction simpleAuto(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('f5/8, e5, d5, c5/16, c5, d5/8, e5, f5, f5/32, f5, f5, f5'), { time: '4/4' });\n // Takes a voice and returns its auto beams.\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beaming Applicator Test');\n}\nfunction simpleAutoWithOverflowGroup(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n // Add a . after a note (e.g., f5/4.) to make it a dotted note.\n const voice = score.voice(score.notes('f5/4., e5/8, d5/8, d5/16, c5/16, c5/16, c5/16, f5/16, f5/32, f5/32'), {\n time: '4/4',\n });\n // Takes a voice and returns its auto beams.\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beaming Applicator Test');\n}\nfunction evenGroupStemDirections(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('a4/8, b4, g4, c5, f4, d5, e4, e5, b4, b4, g4, d5'), { time: '6/4' });\n // Takes a voice and returns its auto beams.\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.equal(beams[0].getStemDirection(), Stem.UP);\n options.assert.equal(beams[1].getStemDirection(), Stem.UP);\n options.assert.equal(beams[2].getStemDirection(), Stem.UP);\n options.assert.equal(beams[3].getStemDirection(), Stem.UP);\n options.assert.equal(beams[4].getStemDirection(), Stem.DOWN);\n options.assert.equal(beams[5].getStemDirection(), Stem.DOWN);\n options.assert.ok(true, 'Auto Beaming Applicator Test');\n}\nfunction oddGroupStemDirections(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('g4/8, b4, d5, c5, f4, d5, e4, g5, g4, b4, g4, d5, a4, c5, a4'), {\n time: '15/8',\n });\n const groups = [new Fraction(3, 8)];\n const beams = Beam.applyAndGetBeams(voice, undefined, groups);\n options.assert.equal(beams[0].getStemDirection(), Stem.DOWN, 'Notes are equidistant from middle line');\n options.assert.equal(beams[1].getStemDirection(), Stem.DOWN);\n options.assert.equal(beams[2].getStemDirection(), Stem.UP);\n options.assert.equal(beams[3].getStemDirection(), Stem.DOWN, 'Notes are equidistant from middle line');\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beaming Applicator Test');\n}\nfunction oddBeamGroups(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('f5, e5, d5, c5, c5, d5, e5, f5, f5, f4, f3, f5/16, f5'), { time: '6/4' });\n const groups = [new Fraction(2, 8), new Fraction(3, 8), new Fraction(1, 8)];\n // Takes a voice and returns its auto beams.\n const beams = Beam.applyAndGetBeams(voice, undefined, groups);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction moreSimple0(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c4/8, g4, c5, g5, a5, c4, d4, a5'), { time: '4/4' });\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction moreSimple1(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' });\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction breakBeamsOnRests(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n beam_rests: false,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamAcrossAllRestsWithStemlets(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n beam_rests: true,\n show_stemlets: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamAcrossAllRests(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n beam_rests: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamAcrossMiddleRests(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n beam_rests: true,\n beam_middle_only: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction maintainStemDirections(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave();\n const score = f.EasyScore();\n // EasyScore.notes(line, ...) ignores whitespace in the line string.\n const voice = score.voice(score.notes([\n 'b4/16, b4, b4[stem=\"down\"], b4/r',\n 'b4/r, b4[stem=\"down\"], b4, b4',\n 'b4[stem=\"down\"], b4[stem=\"down\"], b4, b4/r',\n 'b4/32, b4[stem=\"down\"], b4[stem=\"down\"], b4, b4/16/r, b4',\n ].join(', '), { stem: 'up' }), { time: '4/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n beam_rests: false,\n maintain_stem_directions: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction maintainStemDirectionsBeamAcrossRests(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes([\n 'b4/16, b4, b4[stem=\"down\"], b4/r',\n 'b4/r, b4[stem=\"down\"], b4, b4',\n 'b4[stem=\"down\"], b4[stem=\"down\"], b4, b4/r',\n 'b4/32, b4[stem=\"down\"], b4[stem=\"down\"], b4, b4/16/r, b4',\n ].join(', '), { stem: 'up' }), { time: '4/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n beam_rests: true,\n maintain_stem_directions: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction groupWithUnbeamableNote(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave().addTimeSignature('2/4');\n const score = f.EasyScore();\n const voice = score.voice(score.notes('b4/16, b4, b4/4, b4/16, b4'), { time: '2/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n groups: [new Fraction(2, 2)],\n beam_rests: false,\n maintain_stem_directions: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction groupWithUnbeamableNote1(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave().addTimeSignature('6/8');\n const score = f.EasyScore();\n const voice = score.voice(score.notes('b4/4, b4/4, b4/8, b4/8'), { time: '6/8' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n groups: [new Fraction(3, 8)],\n beam_rests: false,\n maintain_stem_directions: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction autoOddBeamGroups(options) {\n const f = VexFlowTests.makeFactory(options, 450, 400);\n const score = f.EasyScore();\n const stave1 = f.Stave({ y: 10 }).addTimeSignature('5/4');\n const voice1 = score.voice(score.notes('c5/8, g5, c5, b4, b4, c4, d4, a5, c4, g4'), { time: '5/4' });\n const stave2 = f.Stave({ y: 150 }).addTimeSignature('5/8');\n const voice2 = score.voice(score.notes('c5/8, g5, c5, b4, b4'), { time: '5/8' });\n const stave3 = f.Stave({ y: 290 }).addTimeSignature('13/16');\n const voice3 = score.voice(score.notes('c5/16, g5, c5, b4, b4, c5, g5, c5, b4, b4, c5, b4, b4'), {\n time: '13/16',\n });\n // Flatten the arrays into a single Beam[].\n const beams = [\n ...Beam.applyAndGetBeams(voice1, undefined, Beam.getDefaultBeamGroups('5/4')),\n ...Beam.applyAndGetBeams(voice2, undefined, Beam.getDefaultBeamGroups('5/8')),\n ...Beam.applyAndGetBeams(voice3, undefined, Beam.getDefaultBeamGroups('13/16')),\n ];\n f.Formatter().formatToStave([voice1], stave1).formatToStave([voice2], stave2).formatToStave([voice3], stave3);\n Stave.formatBegModifiers([stave1, stave2, stave3]);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction customBeamGroups(options) {\n const f = VexFlowTests.makeFactory(options, 450, 400);\n const score = f.EasyScore();\n const stave1 = f.Stave({ y: 10 }).addTimeSignature('5/4');\n const voice1 = score.voice(score.notes('c5/8, g5, c5, b4, b4, c4, d4, a5, c4, g4'), { time: '5/4' });\n const stave2 = f.Stave({ y: 150 }).addTimeSignature('5/8');\n const voice2 = score.voice(score.notes('c5/8, g5, c5, b4, b4'), { time: '5/8' });\n const stave3 = f.Stave({ y: 290 }).addTimeSignature('13/16');\n const voice3 = score.voice(score.notes('c5/16, g5, c5, b4, b4, c5, g5, c5, b4, b4, c5, b4, b4'), { time: '13/16' });\n const group1 = [new Fraction(5, 8)];\n const group2 = [new Fraction(3, 8), new Fraction(2, 8)];\n const group3 = [new Fraction(7, 16), new Fraction(2, 16), new Fraction(4, 16)];\n // Flatten the three Beam[] into a single Beam[].\n // Alternatively, you can use .reduce(concat) flatten arrays, where concat is defined as (a, b) => a.concat(b).\n const beams = [\n ...Beam.applyAndGetBeams(voice1, undefined, group1),\n ...Beam.applyAndGetBeams(voice2, undefined, group2),\n ...Beam.applyAndGetBeams(voice3, undefined, group3),\n ];\n f.Formatter().formatToStave([voice1], stave1).formatToStave([voice2], stave2).formatToStave([voice3], stave3);\n Stave.formatBegModifiers([stave1, stave2, stave3]);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\n/**\n * Helper function which uses Function.prototype.bind() to create shortcut methods.\n * This can improve the readability of large blocks of EasyScore code.\n */\nfunction createShortcuts(score) {\n return {\n notes: score.notes.bind(score),\n tuplet: score.tuplet.bind(score),\n };\n}\nfunction simpleTuplets(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const { notes, tuplet } = createShortcuts(score);\n const voice = score.voice([\n ...tuplet(notes('c4/8, g4, c5')),\n ...notes('g5/8, a5'),\n ...tuplet(notes('a5/16, (c5 e5), a5, d5, a5'), { ratioed: false, notes_occupied: 4 }),\n ], { time: '3/4' });\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction moreSimpleTuplets(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const { notes, tuplet } = createShortcuts(score);\n const voice = score.voice([...tuplet(notes('d4/4, g4, c5')), ...notes('g5/16, a5, a5, (c5 e5)')], { time: '3/4' });\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction moreBeaming(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c4/8, g4/4, c5/8., g5/16, a5/4, a5/16, (c5 e5)/16, a5/8'), { time: '9/8' });\n const beams = Beam.applyAndGetBeams(voice, undefined, Beam.getDefaultBeamGroups('9/8'));\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamingWithSeveralGroups1(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c4/8, g4/4, c5/8, g5, a5, a5, f5'), { time: '4/4' });\n const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(3, 8), new Fraction(2, 8)]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamingWithSeveralGroupsOverflow(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c4/8, g4/4., c5/8, g5, a5, a5'), { time: '4/4' });\n const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(3, 8), new Fraction(2, 8)]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamingWithSeveralGroupsOverflow2(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c4/16, g4/2, f4/16, c5/8, a4/16, c4/16, g4/8, b4, c5, g5, f5, e5, c5, a4/4'), {\n time: '8/4',\n });\n const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(2, 8), new Fraction(3, 8)]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamingWithSeveralGroupsOverflow3(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c4/16, g4/1, f4/16, c5/8, g5, f5, e5, c5, a4/4'), { time: '8/4' });\n const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(2, 8), new Fraction(3, 8)]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction secondaryBreaks1(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes([\n 'f5/32, f5, f5, f5, f5/16., f5/32',\n 'f5/16, f5/8, f5/16',\n 'f5/32, f5/16., f5., f5/32',\n 'f5/16., f5/32, f5, f5/16.',\n ].join(',')));\n const beams = Beam.generateBeams(voice.getTickables(), { secondary_breaks: '8' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Duration-Based Secondary Breaks Test');\n}\nfunction secondaryBreaks2(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const { notes, tuplet } = createShortcuts(score);\n const voice = score.voice([\n tuplet(notes('e5/16, f5, f5')),\n tuplet(notes('f5/16, f5, c5')),\n notes('a4/16., f4/32'),\n tuplet(notes('d4/16, d4, d4')),\n tuplet(notes('a5/8, (e5 g5), a5')),\n tuplet(notes('f5/16, f5, f5')),\n tuplet(notes('f5/16, f5, a4')),\n ].reduce(concat));\n const beams = Beam.generateBeams(voice.getTickables(), { secondary_breaks: '8' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Duration-Based Secondary Breaks Test');\n}\nfunction flatBeamsUp(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const { notes, tuplet } = createShortcuts(score);\n const voice = score.voice([\n tuplet(notes('c4/8, g4, f5')),\n notes('d5/8'),\n tuplet(notes('c5/16, (c4 e4 g4), f4')),\n notes('d5/8, e5, c4, f5/32, f5, f5, f5'),\n ].reduce(concat));\n const beams = Beam.generateBeams(voice.getTickables(), {\n flat_beams: true,\n stem_direction: 1,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Flat Beams Up Test');\n}\nfunction flatBeamsDown(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/64, c5, c5, c5, c5, c5, c5, c5, a5/8, g5, (d4 f4 a4)/16, d4, d5/8, e5, g5, a6/32, a6, a6, g4/64, g4'));\n const beams = Beam.generateBeams(voice.getTickables(), {\n flat_beams: true,\n stem_direction: -1,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Flat Beams Down Test');\n}\nfunction flatBeamsMixed(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/64, d5, e5, c5, f5, c5, a5, c5, a5/8, g5, (d4 f4 a4)/16, d4, d5/8, e5, c4, a4/32, a4, a4, g4/64, g4'));\n const beams = Beam.generateBeams(voice.getTickables(), { flat_beams: true });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Flat Beams Mixed Direction Test');\n}\nfunction flatBeamsUpUniform(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const { notes, tuplet } = createShortcuts(score);\n const voice = score.voice([\n ...tuplet(notes('c4/8, g4, g5')),\n ...notes('d5/8, c5/16, (c4 e4 g4), d5/8, e5, c4, f5/32, f5, f5, f5'),\n ]);\n const beams = Beam.generateBeams(voice.getTickables(), {\n flat_beams: true,\n flat_beam_offset: 50,\n stem_direction: 1,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Flat Beams Up (uniform) Test');\n}\nfunction flatBeamsDownUniform(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/64, c5, c5, c5, c5, c5, c5, c5, a5/8, g5, (e4 g4 b4)/16, e5, d5/8, e5/8, g5/8, a6/32, a6, a6, g4/64, g4'));\n const beams = Beam.generateBeams(voice.getTickables(), {\n flat_beams: true,\n flat_beam_offset: 155,\n stem_direction: -1,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Flat Beams Down (uniform) Test');\n}\nfunction flatBeamsUpBounds(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const { notes, tuplet } = createShortcuts(score);\n const voice = score.voice([\n ...tuplet(notes('c4/8, g4/8, g5/8')),\n ...notes('d5/8, c5/16, (c4 e4 g4)/16, d5/8, e5/8, c4/8, f5/32, f5/32, f5/32, f5/32'),\n ]);\n const beams = Beam.generateBeams(voice.getTickables(), {\n flat_beams: true,\n flat_beam_offset: 60,\n stem_direction: 1,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Flat Beams Up (uniform) Test');\n}\nfunction flatBeamsDownBounds(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes([\n 'g5/8, a6/32, a6/32, a6/32, g4/64, g4/64',\n 'c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, a5/8',\n 'g5/8, (e4 g4 b4)/16, e5/16',\n 'd5/8, e5/8',\n ].join(','), { stem: 'down' }));\n const beams = Beam.generateBeams(voice.getTickables(), {\n flat_beams: true,\n flat_beam_offset: 145,\n stem_direction: -1,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Flat Beams Down (uniform) Test');\n}\nVexFlowTests.register(AutoBeamFormattingTests);\nexport { AutoBeamFormattingTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Bach Demo\nimport { concat, VexFlowTests } from './vexflow_test_helpers';\nimport { BarlineType, Registry } from '../src/index';\nconst BachDemoTests = {\n Start() {\n QUnit.module('Bach Demo');\n VexFlowTests.runTests('Minuet 1', minuet1);\n },\n};\nfunction minuet1(options) {\n const registry = new Registry();\n Registry.enableDefaultRegistry(registry);\n // Retrieve the element from the registry and cast to StaveNote, so we can call .addModifier( ) later.\n const id = (id) => registry.getElementById(id);\n const f = VexFlowTests.makeFactory(options, 1100, 900);\n const score = f.EasyScore({ throwOnError: true });\n // Bind these three functions so the code looks cleaner.\n // Instead of score.voice(...), just call voice(...).\n const voice = score.voice.bind(score);\n const notes = score.notes.bind(score);\n const beam = score.beam.bind(score);\n let x = 120;\n let y = 80;\n function appendSystem(width) {\n const system = f.System({ x, y, width, spaceBetweenStaves: 10 });\n x += width;\n return system;\n }\n score.set({ time: '3/4' });\n /* Measure 1 */\n let system = appendSystem(220);\n system\n .addStave({\n voices: [\n voice([notes('D5/q[id=\"m1a\"]'), beam(notes('G4/8, A4, B4, C5', { stem: 'up' }))].reduce(concat)),\n voice([f.TextDynamics({ text: 'p', duration: 'h', dots: 1, line: 9 })]),\n ],\n })\n .addClef('treble')\n .addKeySignature('G')\n .addTimeSignature('3/4')\n .setTempo({ name: 'Allegretto', duration: 'h', dots: 1, bpm: 66 }, -30);\n system\n .addStave({ voices: [voice(notes('(G3 B3 D4)/h, A3/q', { clef: 'bass' }))] })\n .addClef('bass')\n .addKeySignature('G')\n .addTimeSignature('3/4');\n system.addConnector('brace');\n system.addConnector('singleRight');\n system.addConnector('singleLeft');\n id('m1a').addModifier(f.Fingering({ number: '5' }), 0);\n /* Measure 2 */\n system = appendSystem(150);\n system.addStave({ voices: [voice(notes('D5/q[id=\"m2a\"], G4[id=\"m2b\"], G4[id=\"m2c\"]'))] });\n system.addStave({ voices: [voice(notes('B3/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m2a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0);\n id('m2b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n id('m2c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n f.Curve({\n from: id('m1a'),\n to: id('m2a'),\n options: {\n cps: [\n { x: 0, y: 40 },\n { x: 0, y: 40 },\n ],\n },\n });\n /* Measure 3 */\n system = appendSystem(150);\n system.addStave({\n voices: [voice([notes('E5/q[id=\"m3a\"]'), beam(notes('C5/8, D5, E5, F5', { stem: 'down' }))].reduce(concat))],\n });\n id('m3a').addModifier(f.Fingering({ number: '3', position: 'above' }), 0);\n system.addStave({ voices: [voice(notes('C4/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n /* Measure 4 */\n system = appendSystem(150);\n system.addStave({ voices: [voice(notes('G5/q[id=\"m4a\"], G4[id=\"m4b\"], G4[id=\"m4c\"]'))] });\n system.addStave({ voices: [voice(notes('B3/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m4a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0);\n id('m4b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n id('m4c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n f.Curve({\n from: id('m3a'),\n to: id('m4a'),\n options: {\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 20 },\n ],\n },\n });\n /* Measure 5 */\n system = appendSystem(150);\n system.addStave({\n voices: [voice([notes('C5/q[id=\"m5a\"]'), beam(notes('D5/8, C5, B4, A4', { stem: 'down' }))].reduce(concat))],\n });\n id('m5a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0);\n system.addStave({ voices: [voice(notes('A3/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n /* Measure 6 */\n system = appendSystem(150);\n system.addStave({\n voices: [voice([notes('B4/q'), beam(notes('C5/8, B4, A4, G4[id=\"m6a\"]', { stem: 'up' }))].reduce(concat))],\n });\n system.addStave({ voices: [voice(notes('G3/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n f.Curve({\n from: id('m5a'),\n to: id('m6a'),\n options: {\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 20 },\n ],\n invert: true,\n position_end: 'nearTop',\n y_shift: 20,\n },\n });\n /* Measure 7 (New system) */\n x = 20;\n y += 230;\n system = appendSystem(220);\n system\n .addStave({\n voices: [\n voice([notes('F4/q[id=\"m7a\"]'), beam(notes('G4/8[id=\"m7b\"], A4, B4, G4', { stem: 'up' }))].reduce(concat)),\n ],\n })\n .addClef('treble')\n .addKeySignature('G');\n system\n .addStave({ voices: [voice(notes('D4/q, B3[id=\"m7c\"], G3', { clef: 'bass' }))] })\n .addClef('bass')\n .addKeySignature('G');\n system.addConnector('brace');\n system.addConnector('singleRight');\n system.addConnector('singleLeft');\n id('m7a').addModifier(f.Fingering({ number: '2', position: 'below' }), 0);\n id('m7b').addModifier(f.Fingering({ number: '1' }), 0);\n id('m7c').addModifier(f.Fingering({ number: '3', position: 'above' }), 0);\n /* Measure 8 */\n system = appendSystem(180);\n const grace = f.GraceNote({ keys: ['d/3'], clef: 'bass', duration: '4', slash: false });\n system.addStave({ voices: [voice(notes('A4/h.[id=\"m8c\"]'))] });\n system.addStave({\n voices: [\n score\n .set({ clef: 'bass' })\n .voice([notes('D4/q[id=\"m8a\"]'), beam(notes('D3/8, C4, B3[id=\"m8b\"], A3', { stem: 'down' }))].reduce(concat)),\n ],\n });\n system.addConnector('singleRight');\n id('m8b').addModifier(f.Fingering({ number: '1', position: 'above' }), 0);\n id('m8c').addModifier(f.GraceNoteGroup({ notes: [grace] }), 0);\n f.Curve({\n from: id('m7a'),\n to: id('m8c'),\n options: {\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 20 },\n ],\n invert: true,\n position: 'nearTop',\n position_end: 'nearTop',\n },\n });\n f.StaveTie({ from: grace, to: id('m8c') });\n /* Measure 9 */\n system = appendSystem(180);\n system.addStave({\n voices: [\n score\n .set({ clef: 'treble' })\n .voice([notes('D5/q[id=\"m9a\"]'), beam(notes('G4/8, A4, B4, C5', { stem: 'up' }))].reduce(concat)),\n ],\n });\n system.addStave({ voices: [voice(notes('B3/h, A3/q', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m9a').addModifier(f.Fingering({ number: '5' }), 0);\n /* Measure 10 */\n system = appendSystem(170);\n system.addStave({ voices: [voice(notes('D5/q[id=\"m10a\"], G4[id=\"m10b\"], G4[id=\"m10c\"]'))] });\n system.addStave({ voices: [voice(notes('G3/q[id=\"m10d\"], B3, G3', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m10a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0);\n id('m10b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n id('m10c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n id('m10d').addModifier(f.Fingering({ number: '4' }), 0);\n f.Curve({\n from: id('m9a'),\n to: id('m10a'),\n options: {\n cps: [\n { x: 0, y: 40 },\n { x: 0, y: 40 },\n ],\n },\n });\n /* Measure 11 */\n system = appendSystem(150);\n system.addStave({\n voices: [voice([notes('E5/q[id=\"m11a\"]'), beam(notes('C5/8, D5, E5, F5', { stem: 'down' }))].reduce(concat))],\n });\n id('m11a').addModifier(f.Fingering({ number: '3', position: 'above' }), 0);\n system.addStave({ voices: [voice(notes('C4/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n /* Measure 12 */\n system = appendSystem(170);\n system.addStave({ voices: [voice(notes('G5/q[id=\"m12a\"], G4[id=\"m12b\"], G4[id=\"m12c\"]'))] });\n system.addStave({\n voices: [\n score\n .set({ clef: 'bass' })\n .voice([notes('B3/q[id=\"m12d\"]'), beam(notes('C4/8, B3, A3, G3[id=\"m12e\"]', { stem: 'down' }))].reduce(concat)),\n ],\n });\n system.addConnector('singleRight');\n id('m12a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0);\n id('m12b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n id('m12c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n id('m12d').addModifier(f.Fingering({ number: '2', position: 'above' }), 0);\n id('m12e').addModifier(f.Fingering({ number: '4', position: 'above' }), 0);\n f.Curve({\n from: id('m11a'),\n to: id('m12a'),\n options: {\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 20 },\n ],\n },\n });\n /* Measure 13 (New system) */\n x = 20;\n y += 230;\n system = appendSystem(220);\n system\n .addStave({\n voices: [\n score\n .set({ clef: 'treble' })\n .voice([notes('c5/q[id=\"m13a\"]'), beam(notes('d5/8, c5, b4, a4', { stem: 'down' }))].reduce(concat)),\n ],\n })\n .addClef('treble')\n .addKeySignature('G');\n system\n .addStave({ voices: [voice(notes('a3/h[id=\"m13b\"], f3/q[id=\"m13c\"]', { clef: 'bass' }))] })\n .addClef('bass')\n .addKeySignature('G');\n system.addConnector('brace');\n system.addConnector('singleRight');\n system.addConnector('singleLeft');\n id('m13a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0);\n id('m13b').addModifier(f.Fingering({ number: '1' }), 0);\n id('m13c').addModifier(f.Fingering({ number: '3', position: 'above' }), 0);\n /* Measure 14 */\n system = appendSystem(180);\n system.addStave({\n voices: [\n score\n .set({ clef: 'treble' })\n .voice([notes('B4/q'), beam(notes('C5/8, b4, a4, g4', { stem: 'up' }))].reduce(concat)),\n ],\n });\n system.addStave({ voices: [voice(notes('g3/h[id=\"m14a\"], b3/q[id=\"m14b\"]', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m14a').addModifier(f.Fingering({ number: '2' }), 0);\n id('m14b').addModifier(f.Fingering({ number: '1' }), 0);\n /* Measure 15 */\n system = appendSystem(180);\n system.addStave({\n voices: [\n score\n .set({ clef: 'treble' })\n .voice([notes('a4/q'), beam(notes('b4/8, a4, g4, f4[id=\"m15a\"]', { stem: 'up' }))].reduce(concat)),\n ],\n });\n system.addStave({ voices: [voice(notes('c4/q[id=\"m15b\"], d4, d3', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m15a').addModifier(f.Fingering({ number: '2' }), 0);\n id('m15b').addModifier(f.Fingering({ number: '2' }), 0);\n /* Measure 16 */\n system = appendSystem(130);\n system\n .addStave({\n voices: [score.set({ clef: 'treble' }).voice([notes('g4/h.[id=\"m16a\"]')].reduce(concat))],\n })\n .setEndBarType(BarlineType.REPEAT_END);\n system\n .addStave({ voices: [voice(notes('g3/h[id=\"m16b\"], g2/q', { clef: 'bass' }))] })\n .setEndBarType(BarlineType.REPEAT_END);\n system.addConnector('boldDoubleRight');\n id('m16a').addModifier(f.Fingering({ number: '1' }), 0);\n id('m16b').addModifier(f.Fingering({ number: '1' }), 0);\n f.Curve({\n from: id('m13a'),\n to: id('m16a'),\n options: {\n cps: [\n { x: 0, y: 50 },\n { x: 0, y: 20 },\n ],\n invert: true,\n position_end: 'nearTop',\n },\n });\n /* Measure 17 */\n system = appendSystem(180);\n system\n .addStave({\n voices: [\n score\n .set({ clef: 'treble' })\n .voice([notes('b5/q[id=\"m17a\"]'), beam(notes('g5/8, a5, b5, g5', { stem: 'down' }))].reduce(concat)),\n voice([f.TextDynamics({ text: 'mf', duration: 'h', dots: 1, line: 10 })]),\n ],\n })\n .setBegBarType(BarlineType.REPEAT_BEGIN);\n system.addStave({ voices: [voice(notes('g3/h.', { clef: 'bass' }))] }).setBegBarType(BarlineType.REPEAT_BEGIN);\n system.addConnector('boldDoubleLeft');\n system.addConnector('singleRight');\n id('m17a').addModifier(f.Fingering({ number: '5', position: 'above' }), 0);\n /* Measure 18 */\n system = appendSystem(180);\n system.addStave({\n voices: [\n score\n .set({ clef: 'treble' })\n .voice([notes('a5/q[id=\"m18a\"]'), beam(notes('d5/8, e5, f5, d5[id=\"m18b\"]', { stem: 'down' }))].reduce(concat)),\n ],\n });\n system.addStave({ voices: [voice(notes('f3/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m18a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0);\n f.Curve({\n from: id('m17a'),\n to: id('m18b'),\n options: {\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 30 },\n ],\n },\n });\n /* Done */\n f.draw();\n Registry.disableDefaultRegistry();\n options.assert.ok(true, 'Bach Minuet 1');\n}\nVexFlowTests.register(BachDemoTests);\nexport { BachDemoTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Barline Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Renderer } from '../src';\nimport { Barline, BarlineType } from '../src/stavebarline';\nconst BarlineTests = {\n Start() {\n QUnit.module('Barline');\n QUnit.test('Enums', enums);\n const run = VexFlowTests.runTests;\n run('Simple BarNotes', simple);\n run('Style BarNotes', style);\n },\n};\nfunction enums(assert) {\n // VexFlow 4.0 renamed Barline.type => BarlineType.\n // The old way still works, for backwards compatibility.\n assert.equal(Barline.type, BarlineType);\n const a = BarlineType['DOUBLE'];\n const b = BarlineType.DOUBLE;\n assert.equal(a, b);\n}\nfunction simple(options) {\n const f = VexFlowTests.makeFactory(options, 380, 160);\n const stave = f.Stave();\n const notes = [\n f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '2' }),\n f.BarNote({ type: 'single' }),\n f\n .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '2' })\n .addModifier(f.Accidental({ type: 'n' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n ];\n const voice = f.Voice().addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n if (options.backend === Renderer.Backends.SVG) {\n notes.forEach((note) => {\n options.assert.notEqual(note.getSVGElement(), undefined);\n });\n }\n options.assert.ok(true, 'Simple Test');\n}\nfunction style(options) {\n const f = VexFlowTests.makeFactory(options, 380, 160);\n const stave = f.Stave();\n const notes = [\n f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '2' }),\n f.BarNote({ type: 'single' }),\n f\n .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '2' })\n .addModifier(f.Accidental({ type: 'n' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n ];\n notes[1].setStyle({ shadowBlur: 15, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' });\n const voice = f.Voice().addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Style');\n}\nVexFlowTests.register(BarlineTests);\nexport { BarlineTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Beam Tests\n// TODO: Factory.Beam()'s 'notes' argument is a StemmableNote[], but we only have access to Tickable[].\nimport { concat, VexFlowTests } from './vexflow_test_helpers';\nimport { AnnotationVerticalJustify, Beam, Dot, Font, FontStyle, FontWeight, Stem, Voice, } from '../src/index';\nconst BeamTests = {\n Start() {\n QUnit.module('Beam');\n const run = VexFlowTests.runTests;\n run('Simple Beam', simple);\n run('Multi Beam', multi);\n run('Sixteenth Beam', sixteenth);\n run('Slopey Beam', slopey);\n run('Auto-stemmed Beam', autoStem);\n run('Mixed Beam 1', mixed);\n run('Mixed Beam 2', mixed2);\n run('Dotted Beam', dotted);\n run('Partial Beam', partial);\n run('Close Trade-offs Beam', tradeoffs);\n run('Insane Beam', insane);\n run('Lengthy Beam', lenghty);\n run('Outlier Beam', outlier);\n run('Break Secondary Beams', breakSecondaryBeams);\n run('Partial Beam Direction', partialBeamDirection);\n run('TabNote Beams Up', tabBeamsUp);\n run('TabNote Beams Down', tabBeamsDown);\n run('TabNote Auto Create Beams', autoTabBeams);\n run('TabNote Beams Auto Stem', tabBeamsAutoStem);\n run('Complex Beams with Annotations', complexWithAnnotation);\n run('Complex Beams with Articulations', complexWithArticulation);\n run('Complex Beams with Articulations two Staves', complexWithArticulation2);\n },\n};\nfunction simple(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const beam = score.beam.bind(score);\n const notes = score.notes.bind(score);\n const voice = score.voice([\n notes('(cb4 e#4 a4)/2'),\n beam(notes('(cb4 e#4 a4)/8, (d4 f4 a4), (ebb4 g##4 b4), (f4 a4 c5)', { stem: 'up' })),\n ].reduce(concat), { time: '2/2' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Simple Test');\n}\nfunction multi(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice.bind(score);\n const beam = score.beam.bind(score);\n const notes = score.notes.bind(score);\n const voices = [\n voice([beam(notes('f5/8, e5, d5, c5', { stem: 'up' })), beam(notes('c5, d5, e5, f5', { stem: 'up' }))].reduce(concat)),\n voice([beam(notes('f4/8, e4, d4, c4', { stem: 'down' })), beam(notes('c4/8, d4, e4, f4', { stem: 'down' }))].reduce(concat)),\n ];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.draw();\n options.assert.ok(true, 'Multi Test');\n}\nfunction sixteenth(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice.bind(score);\n const beam = score.beam.bind(score);\n const notes = score.notes.bind(score);\n const voices = [\n voice([\n beam(notes('f5/16, f5, d5, c5', { stem: 'up' })),\n beam(notes('c5/16, d5, f5, e5', { stem: 'up' })),\n notes('f5/2', { stem: 'up' }),\n ].reduce(concat)),\n voice([\n beam(notes('f4/16, e4/16, d4/16, c4/16', { stem: 'down' })),\n beam(notes('c4/16, d4/16, f4/16, e4/16', { stem: 'down' })),\n notes('f4/2', { stem: 'down' }),\n ].reduce(concat)),\n ];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.draw();\n options.assert.ok(true, 'Sixteenth Test');\n}\nfunction breakSecondaryBeams(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice.bind(score);\n const beam = score.beam.bind(score);\n const notes = score.notes.bind(score);\n const voices = [\n voice([\n beam(notes('f5/16., f5/32, c5/16., d5/32, c5/16., d5/32', { stem: 'up' }), { secondaryBeamBreaks: [1, 3] }),\n beam(notes('f5/16, e5, e5, e5, e5, e5', { stem: 'up' }), { secondaryBeamBreaks: [2] }),\n ].reduce(concat), { time: '3/4' }),\n voice([\n beam(notes('f4/32, d4, e4, c4, d4, c4, f4, d4, e4, c4, c4, d4', { stem: 'down' }), {\n secondaryBeamBreaks: [3, 7],\n }),\n beam(notes('d4/16, f4, d4, e4, e4, e4', { stem: 'down' }), { secondaryBeamBreaks: [3] }),\n ].reduce(concat), { time: '3/4' }),\n ];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.draw();\n options.assert.ok(true, 'Breaking Secondary Beams Test');\n}\nfunction partialBeamDirection(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice.bind(score);\n const beam = score.beam.bind(score);\n const notes = score.notes.bind(score);\n const voices = [\n voice([\n // Default beaming:\n beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' })),\n // Force first 16th beam right\n beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' }), { partialBeamDirections: { '1': 'R' } }),\n // Force first 16th beam left\n beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' }), { partialBeamDirections: { '1': 'L' } }),\n ].reduce(concat), { time: '9/8' }),\n ];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.draw();\n options.assert.ok(true, 'Partial beam direction test');\n}\nfunction slopey(options) {\n const f = VexFlowTests.makeFactory(options, 350, 140);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const beam = score.beam.bind(score);\n const notes = score.notes.bind(score);\n const voice = score.voice([\n beam(notes('c4/8, f4/8, d5/8, g5/8', { stem: 'up' })),\n beam(notes('d6/8, f5/8, d4/8, g3/8', { stem: 'up' })),\n ].reduce(concat));\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Slopey Test');\n}\nfunction autoStem(options) {\n const f = VexFlowTests.makeFactory(options, 350, 140);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes('a4/8, b4/8, g4/8, c5/8, f4/8, d5/8, e4/8, e5/8, b4/8, b4/8, g4/8, d5/8'), {\n time: '6/4',\n });\n const notes = voice.getTickables();\n const beams = [\n f.Beam({ notes: notes.slice(0, 2), options: { autoStem: true } }),\n f.Beam({ notes: notes.slice(2, 4), options: { autoStem: true } }),\n f.Beam({ notes: notes.slice(4, 6), options: { autoStem: true } }),\n f.Beam({ notes: notes.slice(6, 8), options: { autoStem: true } }),\n f.Beam({ notes: notes.slice(8, 10), options: { autoStem: true } }),\n f.Beam({ notes: notes.slice(10, 12), options: { autoStem: true } }),\n ];\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n const UP = Stem.UP;\n const DOWN = Stem.DOWN;\n options.assert.equal(beams[0].getStemDirection(), UP);\n options.assert.equal(beams[1].getStemDirection(), UP);\n options.assert.equal(beams[2].getStemDirection(), UP);\n options.assert.equal(beams[3].getStemDirection(), UP);\n options.assert.equal(beams[4].getStemDirection(), DOWN);\n options.assert.equal(beams[5].getStemDirection(), DOWN);\n f.draw();\n options.assert.ok(true, 'AutoStem Beam Test');\n}\nfunction mixed(options) {\n const f = VexFlowTests.makeFactory(options, 350, 140);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice1 = score.voice(score.notes('f5/8, d5/16, c5/16, c5/16, d5/16, e5/8, f5/8, d5/16, c5/16, c5/16, d5/16, e5/8', { stem: 'up' }));\n const voice2 = score.voice(score.notes('f4/16, e4/8, d4/16, c4/16, d4/8, f4/16, f4/16, e4/8, d4/16, c4/16, d4/8, f4/16', { stem: 'down' }));\n [\n [0, 4],\n [4, 8],\n [8, 12],\n ].forEach((range) => f.Beam({ notes: voice1.getTickables().slice(range[0], range[1]) }));\n [\n [0, 4],\n [4, 8],\n [8, 12],\n ].forEach((range) => f.Beam({ notes: voice2.getTickables().slice(range[0], range[1]) }));\n f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n f.draw();\n options.assert.ok(true, 'Multi Test');\n}\nfunction mixed2(options) {\n const f = VexFlowTests.makeFactory(options, 450, 180);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes('f5/32, d5/16, c5/32, c5/64, d5/128, e5/8, f5/16, d5/32, c5/64, c5/32, d5/16, e5/128', {\n stem: 'up',\n }), { time: '31/64' });\n const voice2 = score.voice(score.notes('f4/32, d4/16, c4/32, c4/64, d4/128, e4/8, f4/16, d4/32, c4/64, c4/32, d4/16, e4/128', {\n stem: 'down',\n }), { time: '31/64' });\n f.Beam({ notes: voice.getTickables().slice(0, 12) });\n f.Beam({ notes: voice2.getTickables().slice(0, 12) });\n f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave);\n f.draw();\n options.assert.ok(true, 'Multi Test');\n}\nfunction dotted(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('d4/8, b3/8., a3/16, a3/8, b3/8., c4/16, d4/8, b3/8, a3/8., a3/16, b3/8., c4/16', { stem: 'up' }), { time: '6/4' });\n const notes = voice.getTickables();\n f.Beam({ notes: notes.slice(0, 4) });\n f.Beam({ notes: notes.slice(4, 8) });\n f.Beam({ notes: notes.slice(8, 12) });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Dotted Test');\n}\nfunction partial(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('d4/8, b3/32, c4/16., d4/16., e4/8, c4/64, c4/32, a3/8., b3/32., c4/8, e4/64, b3/16., b3/64, f4/8, e4/8, g4/64, e4/8'), { time: '89/64' });\n const notes = voice.getTickables();\n f.Beam({ notes: notes.slice(0, 3) });\n f.Beam({ notes: notes.slice(3, 9) });\n f.Beam({ notes: notes.slice(9, 13) });\n f.Beam({ notes: notes.slice(13, 17) });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Partial Test');\n}\nfunction tradeoffs(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('a4/8, b4/8, c4/8, d4/8, g4/8, a4/8, b4/8, c4/8', { stem: 'up' }));\n const notes = voice.getTickables();\n f.Beam({ notes: notes.slice(0, 4) });\n f.Beam({ notes: notes.slice(4, 8) });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Close Trade-offs Test');\n}\nfunction insane(options) {\n const f = VexFlowTests.makeFactory(options, 450, 180);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes('g4/8, g5/8, c4/8, b5/8, g4/8[stem=\"down\"], a5[stem=\"down\"], b4[stem=\"down\"], c4/8', { stem: 'up' }));\n const notes = voice.getTickables();\n f.Beam({ notes: notes.slice(0, 4) });\n f.Beam({ notes: notes.slice(4, 7) });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Insane Test');\n}\nfunction lenghty(options) {\n const f = VexFlowTests.makeFactory(options, 450, 180);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice(score.beam(score.notes('g4/8, g4, g4, a4', { stem: 'up' })), { time: '2/4' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Lengthy Test');\n}\nfunction outlier(options) {\n const f = VexFlowTests.makeFactory(options, 450, 180);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes([\n 'g4/8[stem=\"up\"], f4[stem=\"up\"], d5[stem=\"up\"], e4[stem=\"up\"]',\n 'd5/8[stem=\"down\"], d5[stem=\"down\"], c5[stem=\"down\"], d5[stem=\"down\"]',\n ].join()));\n const notes = voice.getTickables();\n f.Beam({ notes: notes.slice(0, 4) });\n f.Beam({ notes: notes.slice(4, 8) });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave });\n f.draw();\n options.assert.ok(true, 'Outlier Test');\n}\nfunction tabBeamsUp(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const stave = f.TabStave({ y: 20 });\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '32',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '64',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '128',\n },\n { positions: [{ str: 3, fret: 6 }], duration: '8' },\n { positions: [{ str: 3, fret: 6 }], duration: '8' },\n { positions: [{ str: 3, fret: 6 }], duration: '8' },\n { positions: [{ str: 3, fret: 6 }], duration: '8' },\n ];\n const notes = specs.map((struct) => {\n const tabNote = f.TabNote(struct);\n tabNote.render_options.draw_stem = true;\n return tabNote;\n });\n f.Beam({ notes: notes.slice(1, 7) });\n f.Beam({ notes: notes.slice(8, 11) });\n f.Tuplet({ notes: notes.slice(8, 11), options: { ratioed: true } });\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'All objects have been drawn');\n}\nfunction tabBeamsDown(options) {\n const f = VexFlowTests.makeFactory(options, 600, 250);\n const stave = f.TabStave({ options: { num_lines: 10 } });\n const specs = [\n {\n stem_direction: -1,\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n stem_direction: -1,\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8dd',\n },\n {\n stem_direction: -1,\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n stem_direction: -1,\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n stem_direction: -1,\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '32',\n },\n {\n stem_direction: -1,\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '64',\n },\n {\n stem_direction: -1,\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '128',\n },\n { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' },\n { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' },\n { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' },\n { stem_direction: -1, positions: [{ str: 7, fret: 6 }], duration: '8' },\n { stem_direction: -1, positions: [{ str: 7, fret: 6 }], duration: '8' },\n { stem_direction: -1, positions: [{ str: 10, fret: 6 }], duration: '8' },\n { stem_direction: -1, positions: [{ str: 10, fret: 6 }], duration: '8' },\n ];\n const notes = specs.map((struct) => {\n const tabNote = f.TabNote(struct);\n tabNote.render_options.draw_stem = true;\n tabNote.render_options.draw_dots = true;\n return tabNote;\n });\n Dot.buildAndAttach([notes[1], notes[1]]);\n f.Beam({ notes: notes.slice(1, 7) });\n f.Beam({ notes: notes.slice(8, 11) });\n f.Tuplet({ notes: notes.slice(8, 11), options: { location: -1 } });\n f.Tuplet({ notes: notes.slice(11, 14), options: { location: -1 } });\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'All objects have been drawn');\n}\nfunction autoTabBeams(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const stave = f.TabStave();\n const specs = [\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n { positions: [{ str: 1, fret: 6 }], duration: '32' },\n { positions: [{ str: 1, fret: 6 }], duration: '32' },\n { positions: [{ str: 1, fret: 6 }], duration: '32' },\n { positions: [{ str: 6, fret: 6 }], duration: '32' },\n { positions: [{ str: 6, fret: 6 }], duration: '16' },\n { positions: [{ str: 6, fret: 6 }], duration: '16' },\n { positions: [{ str: 6, fret: 6 }], duration: '16' },\n { positions: [{ str: 6, fret: 6 }], duration: '16' },\n ];\n const notes = specs.map((struct) => {\n const tabNote = f.TabNote(struct);\n tabNote.render_options.draw_stem = true;\n tabNote.render_options.draw_dots = true;\n return tabNote;\n });\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n const beams = Beam.applyAndGetBeams(voice, -1);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'All objects have been drawn');\n}\n// This tests makes sure the auto_stem functionality is works.\n// TabNote stems within a beam group should end up normalized\nfunction tabBeamsAutoStem(options) {\n const f = VexFlowTests.makeFactory(options, 600, 300);\n const stave = f.TabStave();\n const specs = [\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n stem_direction: -1,\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n stem_direction: 1,\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n stem_direction: -1,\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n stem_direction: 1,\n },\n { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: 1 },\n { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: -1 },\n { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: -1 },\n { positions: [{ str: 6, fret: 6 }], duration: '32', stem_direction: -1 },\n { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 },\n { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 },\n { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 },\n { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: -1 },\n ];\n const notes = specs.map((struct) => {\n const tabNote = f.TabNote(struct);\n tabNote.render_options.draw_stem = true;\n tabNote.render_options.draw_dots = true;\n return tabNote;\n });\n // Stems should format down\n f.Beam({ notes: notes.slice(0, 8), options: { autoStem: true } });\n // Stems should format up\n f.Beam({ notes: notes.slice(8, 12), options: { autoStem: true } });\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'All objects have been drawn');\n}\nfunction complexWithAnnotation(options) {\n const factory = VexFlowTests.makeFactory(options, 500, 200);\n const stave = factory.Stave({ y: 40 });\n const s1 = [\n { keys: ['e/4'], duration: '128', stem_direction: 1 },\n { keys: ['d/4'], duration: '16', stem_direction: 1 },\n { keys: ['e/4'], duration: '8', stem_direction: 1 },\n { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n ];\n const s2 = [\n { keys: ['e/5'], duration: '128', stem_direction: -1 },\n { keys: ['d/5'], duration: '16', stem_direction: -1 },\n { keys: ['e/5'], duration: '8', stem_direction: -1 },\n { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n ];\n const font = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n };\n const notes1 = s1.map((struct) => factory\n .StaveNote(struct) //\n .addModifier(factory.Annotation({ text: '1', vJustify: AnnotationVerticalJustify.TOP, font }), 0));\n const notes2 = s2.map((struct) => factory\n .StaveNote(struct) //\n .addModifier(factory.Annotation({ text: '3', vJustify: AnnotationVerticalJustify.BOTTOM, font }), 0));\n factory.Beam({ notes: notes1 });\n factory.Beam({ notes: notes2 });\n const voice = factory.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2);\n factory.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave });\n factory.draw();\n options.assert.ok(true, 'Complex beam annotations');\n}\nfunction complexWithArticulation(options) {\n const f = VexFlowTests.makeFactory(options, 500, 200);\n const stave = f.Stave({ y: 40 });\n const s1 = [\n { keys: ['e/4'], duration: '128', stem_direction: 1 },\n { keys: ['d/4'], duration: '16', stem_direction: 1 },\n { keys: ['e/4'], duration: '8', stem_direction: 1 },\n { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n ];\n const s2 = [\n { keys: ['e/5'], duration: '128', stem_direction: -1 },\n { keys: ['d/5'], duration: '16', stem_direction: -1 },\n { keys: ['e/5'], duration: '8', stem_direction: -1 },\n { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n ];\n const notes1 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0));\n const notes2 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0));\n f.Beam({ notes: notes1 });\n f.Beam({ notes: notes2 });\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave });\n f.draw();\n options.assert.ok(true, 'Complex beam articulations');\n}\nfunction complexWithArticulation2(options) {\n const f = VexFlowTests.makeFactory(options, 500, 300);\n const system = f.System();\n const s1 = [\n { keys: ['e/4'], duration: '128', stem_direction: 1 },\n { keys: ['d/4'], duration: '16', stem_direction: 1 },\n { keys: ['e/4'], duration: '8', stem_direction: 1 },\n { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n ];\n const s2 = [\n { keys: ['e/5'], duration: '128', stem_direction: -1 },\n { keys: ['d/5'], duration: '16', stem_direction: -1 },\n { keys: ['e/5'], duration: '8', stem_direction: -1 },\n { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n ];\n const notes1 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0));\n const notes2 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0));\n const notes3 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0));\n const notes4 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0));\n f.Beam({ notes: notes1 });\n f.Beam({ notes: notes2 });\n f.Beam({ notes: notes3 });\n f.Beam({ notes: notes4 });\n const voice1 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2);\n const voice2 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes3).addTickables(notes4);\n system.addStave({ voices: [voice1] });\n system.addStave({ voices: [voice2] });\n f.draw();\n options.assert.ok(true, 'Complex beam articulations two staves');\n}\nVexFlowTests.register(BeamTests);\nexport { BeamTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Bend Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Bend } from '../src/bend';\nimport { Font } from '../src/font';\nimport { Formatter } from '../src/formatter';\nimport { ModifierContext } from '../src/modifiercontext';\nimport { Note } from '../src/note';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { TickContext } from '../src/tickcontext';\nconst BendTests = {\n Start() {\n QUnit.module('Bend');\n const run = VexFlowTests.runTests;\n run('Double Bends', doubleBends);\n run('Reverse Bends', reverseBends);\n run('Bend Phrase', bendPhrase);\n run('Double Bends With Release', doubleBendsWithRelease);\n run('Whako Bend', whackoBends);\n // TODO: Rename 'Whako Bend' => 'Whacko'\n },\n};\n// Helper functions for creating TabNote and Bend objects.\nconst note = (noteStruct) => new TabNote(noteStruct);\nconst bendWithText = (text, release = false) => new Bend(text, release);\nconst bendWithPhrase = (phrase) => new Bend('', false, phrase);\n/**\n * Bend two strings at a time.\n */\nfunction doubleBends(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n note({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'q',\n })\n .addModifier(bendWithText('Full'), 0)\n .addModifier(bendWithText('1/2'), 1),\n note({\n positions: [\n { str: 2, fret: 5 },\n { str: 3, fret: 5 },\n ],\n duration: 'q',\n })\n .addModifier(bendWithText('1/4'), 0)\n .addModifier(bendWithText('1/4'), 1),\n // This note is not visible because it is pushed off to the right by the ctx.scale(1.5, 1.5) at the top.\n note({\n positions: [{ str: 4, fret: 7 }],\n duration: 'h',\n }),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n notes.forEach((note) => Note.plotMetrics(ctx, note, 140));\n options.assert.ok(true, 'Double Bends');\n}\nfunction doubleBendsWithRelease(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 550, 240);\n ctx.scale(1.0, 1.0);\n ctx.setBackgroundFillStyle('#FFF');\n ctx.setFont('Arial', VexFlowTests.Font.size);\n const stave = new TabStave(10, 10, 550).addTabGlyph().setContext(ctx).draw();\n const notes = [\n note({\n positions: [\n { str: 1, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'q',\n })\n .addModifier(bendWithText('1/2', true), 0)\n .addModifier(bendWithText('Full', true), 1),\n note({\n positions: [\n { str: 2, fret: 5 },\n { str: 3, fret: 5 },\n { str: 4, fret: 5 },\n ],\n duration: 'q',\n })\n .addModifier(bendWithText('1/4', true), 0)\n .addModifier(bendWithText('Monstrous', true), 1)\n .addModifier(bendWithText('1/4', true), 2),\n note({\n positions: [{ str: 4, fret: 7 }],\n duration: 'q',\n }),\n note({\n positions: [{ str: 4, fret: 7 }],\n duration: 'q',\n }),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n notes.forEach((note) => Note.plotMetrics(ctx, note, 140));\n options.assert.ok(true, 'Bend Release');\n}\n/**\n * Add the bend for note 1 before adding the bend for note 0,\n * by swapping the two indexes in .addModifier(modifier, index).\n * As a result, the bend curves intersect.\n */\nfunction reverseBends(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.setFont('10pt Arial');\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n note({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'w',\n })\n .addModifier(bendWithText('Full'), 1)\n .addModifier(bendWithText('1/2'), 0),\n note({\n positions: [\n { str: 2, fret: 5 },\n { str: 3, fret: 5 },\n ],\n duration: 'w',\n })\n .addModifier(bendWithText('1/4'), 1)\n .addModifier(bendWithText('1/4'), 0),\n note({\n positions: [{ str: 4, fret: 7 }],\n duration: 'w',\n }),\n ];\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const mc = new ModifierContext();\n note.addToModifierContext(mc);\n const tickContext = new TickContext();\n tickContext\n .addTickable(note)\n .preFormat()\n .setX(75 * i);\n note.setStave(stave).setContext(ctx).draw();\n Note.plotMetrics(ctx, note, 140);\n options.assert.ok(true, 'Bend ' + i);\n }\n}\nfunction bendPhrase(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.font = Font.SIZE + 'pt ' + Font.SANS_SERIF; // Optionally use constants defined in Font.\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const phrase1 = [\n { type: Bend.UP, text: 'Full' },\n { type: Bend.DOWN, text: 'Monstrous' },\n { type: Bend.UP, text: '1/2' },\n { type: Bend.DOWN, text: '' },\n ];\n const bend1 = bendWithPhrase(phrase1).setContext(ctx);\n const notes = [\n note({\n positions: [{ str: 2, fret: 10 }],\n duration: 'w',\n }).addModifier(bend1, 0),\n ];\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n note.addToModifierContext(new ModifierContext());\n const tickContext = new TickContext();\n tickContext\n .addTickable(note)\n .preFormat()\n .setX(75 * i);\n note.setStave(stave).setContext(ctx).draw();\n Note.plotMetrics(ctx, note, 140);\n options.assert.ok(true, 'Bend ' + i);\n }\n}\nfunction whackoBends(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 240);\n ctx.scale(1.0, 1.0);\n ctx.setBackgroundFillStyle('#FFF');\n ctx.setFont('Arial', VexFlowTests.Font.size);\n const stave = new TabStave(10, 10, 350).addTabGlyph().setContext(ctx).draw();\n const phrase1 = [\n { type: Bend.UP, text: 'Full' },\n { type: Bend.DOWN, text: '' },\n { type: Bend.UP, text: '1/2' },\n { type: Bend.DOWN, text: '' },\n ];\n const phrase2 = [\n { type: Bend.UP, text: 'Full' },\n { type: Bend.UP, text: 'Full' },\n { type: Bend.UP, text: '1/2' },\n { type: Bend.DOWN, text: '' },\n { type: Bend.DOWN, text: 'Full' },\n { type: Bend.DOWN, text: 'Full' },\n { type: Bend.UP, text: '1/2' },\n { type: Bend.DOWN, text: '' },\n ];\n const notes = [\n note({\n positions: [\n { str: 2, fret: 10 },\n { str: 3, fret: 9 },\n ],\n duration: 'q',\n })\n .addModifier(bendWithPhrase(phrase1), 0)\n .addModifier(bendWithPhrase(phrase2), 1),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n Note.plotMetrics(ctx, notes[0], 140);\n options.assert.ok(true, 'Whacko Bend & Release');\n}\nVexFlowTests.register(BendTests);\nexport { BendTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Bounding Box Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { BoundingBox } from '../src/index';\nconst BoundingBoxTests = {\n Start() {\n QUnit.module('BoundingBox');\n QUnit.test('Initialization Test', initialization);\n QUnit.test('Merging Text', merging);\n },\n};\nfunction initialization(assert) {\n const bb = new BoundingBox(4, 5, 6, 7);\n assert.equal(bb.getX(), 4, 'Bad X');\n assert.equal(bb.getY(), 5, 'Bad Y');\n assert.equal(bb.getW(), 6, 'Bad W');\n assert.equal(bb.getH(), 7, 'Bad H');\n bb.setX(5);\n assert.equal(bb.getX(), 5, 'Bad X');\n}\nfunction merging(assert) {\n const tests = [\n {\n type: 'Intersection',\n bb1: new BoundingBox(10, 10, 10, 10),\n bb2: new BoundingBox(15, 20, 10, 10),\n merged: new BoundingBox(10, 10, 15, 20),\n },\n {\n type: '1 contains 2',\n bb1: new BoundingBox(10, 10, 30, 30),\n bb2: new BoundingBox(15, 15, 10, 10),\n merged: new BoundingBox(10, 10, 30, 30),\n },\n {\n type: '2 contains 1',\n bb1: new BoundingBox(15, 15, 10, 10),\n bb2: new BoundingBox(10, 10, 30, 30),\n merged: new BoundingBox(10, 10, 30, 30),\n },\n ];\n tests.forEach((test) => {\n const type = test.type;\n const bb1 = test.bb1;\n const bb2 = test.bb2;\n const merged = test.merged;\n bb1.mergeWith(bb2);\n assert.equal(bb1.getX(), merged.getX(), type + ' - Bad X');\n assert.equal(bb1.getY(), merged.getY(), type + ' - Bad Y');\n assert.equal(bb1.getW(), merged.getW(), type + ' - Bad W');\n assert.equal(bb1.getH(), merged.getH(), type + ' - Bad H');\n });\n}\nVexFlowTests.register(BoundingBoxTests);\nexport { BoundingBoxTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// ChordSymbol Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { ChordSymbol } from '../src/chordsymbol';\nimport { Font } from '../src/font';\nimport { Formatter } from '../src/formatter';\nimport { Ornament } from '../src/ornament';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { Tables } from '../src/tables';\nconst ChordSymbolTests = {\n Start() {\n QUnit.module('ChordSymbol');\n const run = VexFlowTests.runTests;\n run('Chord Symbol With Modifiers', withModifiers);\n run('Chord Symbol Font Size Tests', fontSize);\n run('Chord Symbol Kerning Tests', kern);\n run('Top Chord Symbols', top);\n run('Top Chord Symbols Justified', topJustify);\n run('Bottom Chord Symbols', bottom);\n run('Bottom Stem Down Chord Symbols', bottomStemDown);\n run('Double Bottom Chord Symbols', doubleBottom);\n },\n};\n// Options for customizing addGlyphOrText() or addGlyph().\nconst superscript = { symbolModifier: ChordSymbol.symbolModifiers.SUPERSCRIPT };\nconst subscript = { symbolModifier: ChordSymbol.symbolModifiers.SUBSCRIPT };\n// Helper function for creating StaveNotes.\nconst note = (factory, keys, duration, chordSymbol) => factory.StaveNote({ keys, duration }).addModifier(chordSymbol, 0);\n/** Calculate the glyph's width in the current music font. */\n// How is this different from Glyph.getWidth()? The numbers don't match up.\nfunction getGlyphWidth(glyphName) {\n // `38` seems to be the `font_scale` specified in many classes, such as\n // Accidental, Articulation, Ornament, Strokes. Does this mean `38pt`???\n //\n // However, tables.ts specifies:\n // NOTATION_FONT_SCALE: 39,\n // TABLATURE_FONT_SCALE: 39,\n const musicFont = Tables.currentMusicFont();\n const glyph = musicFont.getGlyphs()[glyphName];\n const widthInEm = (glyph.x_max - glyph.x_min) / musicFont.getResolution();\n return widthInEm * 38 * Font.scaleToPxFrom.pt;\n}\nfunction withModifiers(options) {\n const f = VexFlowTests.makeFactory(options, 750, 580);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chords, y) {\n const notes = [\n note(f, ['c/4'], 'q', chords[0]).addModifier(new Ornament('doit')),\n note(f, ['c/4'], 'q', chords[1]),\n note(f, ['c/4'], 'q', chords[2]).addModifier(new Ornament('fall')),\n note(f, ['c/4'], 'q', chords[3]),\n ];\n const score = f.EasyScore();\n const voice = score.voice(notes, { time: '4/4' });\n const formatter = f.Formatter();\n formatter.joinVoices([voice]);\n const voiceW = formatter.preCalculateMinTotalWidth([voice]);\n const staffW = voiceW + Stave.defaultPadding + getGlyphWidth('gClef');\n formatter.format([voice], voiceW);\n const staff = f.Stave({ x: 10, y, width: staffW }).addClef('treble').draw();\n voice.draw(ctx, staff);\n }\n let chords = [];\n chords.push(f\n .ChordSymbol({ fontSize: 10 })\n .addText('F7')\n .addGlyph('leftParenTall')\n .addGlyphOrText('b9', superscript)\n .addGlyphOrText('#11', subscript)\n .addGlyph('rightParenTall'));\n chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('b9', superscript).addGlyphOrText('#11', subscript));\n chords.push(f\n .ChordSymbol({ fontSize: 14 })\n .addText('F7')\n .addGlyph('leftParenTall')\n .addGlyphOrText('add 3', superscript)\n .addGlyphOrText('omit 9', subscript)\n .addGlyph('rightParenTall'));\n chords.push(f\n .ChordSymbol({ fontSize: 16 })\n .addText('F7')\n .addGlyph('leftParenTall')\n .addGlyphOrText('b9', superscript)\n .addGlyphOrText('#11', subscript)\n .addGlyph('rightParenTall'));\n draw(chords, 40);\n chords = [];\n chords.push(f\n .ChordSymbol({ fontSize: 10 })\n .setFontSize(10)\n .addText('F7')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript));\n chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript));\n chords.push(f.ChordSymbol({ fontSize: 14 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript));\n chords.push(f\n .ChordSymbol({ fontSize: 16 })\n .setFontSize(16)\n .addText('F7')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript));\n draw(chords, 140);\n chords = [\n f.ChordSymbol({ fontSize: 10 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript),\n f.ChordSymbol({ fontSize: 14 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript),\n f.ChordSymbol({ fontSize: 16 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript),\n f.ChordSymbol({ fontSize: 18 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript),\n ];\n draw(chords, 240);\n options.assert.ok(true, 'Font Size Chord Symbol');\n}\nfunction fontSize(options) {\n const f = VexFlowTests.makeFactory(options, 750, 580);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chords, y) {\n const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble');\n const notes = [\n note(f, ['c/4'], 'q', chords[0]),\n note(f, ['c/4'], 'q', chords[1]),\n note(f, ['c/4'], 'q', chords[2]),\n note(f, ['c/4'], 'q', chords[3]),\n ];\n const score = f.EasyScore();\n const voice = score.voice(notes, { time: '4/4' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n }\n let chords = [];\n chords.push(f\n .ChordSymbol({ fontSize: 10 })\n .addText('F7')\n .addGlyph('leftParenTall')\n .addGlyphOrText('b9', superscript)\n .addGlyphOrText('#11', subscript)\n .addGlyph('rightParenTall')\n .setReportWidth(false));\n chords.push(f\n .ChordSymbol({ fontSize: 12 })\n .addText('F7')\n .addGlyphOrText('b9', superscript)\n .addGlyphOrText('#11', subscript)\n .setReportWidth(false));\n chords.push(f\n .ChordSymbol({ fontSize: 14 })\n .addText('F7')\n .addGlyph('leftParenTall')\n .addGlyphOrText('add 3', superscript)\n .addGlyphOrText('omit 9', subscript)\n .addGlyph('rightParenTall')\n .setReportWidth(false));\n chords.push(f\n .ChordSymbol({ fontSize: 16 })\n .addText('F7')\n .addGlyph('leftParenTall')\n .addGlyphOrText('b9', superscript)\n .addGlyphOrText('#11', subscript)\n .addGlyph('rightParenTall')\n .setReportWidth(false));\n draw(chords, 40);\n chords = [];\n chords.push(f\n .ChordSymbol({ fontSize: 10 })\n .setFontSize(10)\n .addText('F7')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript));\n chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript));\n chords.push(f.ChordSymbol({ fontSize: 14 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript));\n chords.push(f\n .ChordSymbol({ fontSize: 16 })\n .setFontSize(16)\n .addText('F7')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript));\n draw(chords, 140);\n chords = [\n f.ChordSymbol({ fontSize: 10 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript),\n f.ChordSymbol({ fontSize: 14 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript),\n f.ChordSymbol({ fontSize: 16 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript),\n f.ChordSymbol({ fontSize: 18 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript),\n ];\n draw(chords, 240);\n options.assert.ok(true, 'Font Size Chord Symbol');\n}\nfunction kern(options) {\n const f = VexFlowTests.makeFactory(options, 650 * 1.5, 650);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chords, y) {\n const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(f, ['C/4'], 'q', chords[0]),\n note(f, ['C/4'], 'q', chords[1]),\n note(f, ['C/4'], 'q', chords[2]),\n note(f, ['C/4'], 'q', chords[3]),\n ];\n const score = f.EasyScore();\n const voice = score.voice(notes, { time: '4/4' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n }\n let chords = [\n f.ChordSymbol().addText('A').addGlyphSuperscript('dim').setReportWidth(false),\n f.ChordSymbol({ kerning: false, reportWidth: false }).addText('A').addGlyphSuperscript('dim'),\n f.ChordSymbol({ hJustify: 'left', reportWidth: false }).addText('C').addGlyph('halfDiminished', superscript),\n f.ChordSymbol({ reportWidth: false }).addText('D').addGlyph('halfDiminished', superscript),\n ];\n draw(chords, 10);\n chords = [\n f.ChordSymbol().addText('A').addGlyphSuperscript('dim'),\n f.ChordSymbol({ kerning: false }).addText('A').addGlyphSuperscript('dim'),\n f.ChordSymbol().addText('A').addGlyphSuperscript('+').addTextSuperscript('5'),\n f.ChordSymbol().addText('G').addGlyphSuperscript('+').addTextSuperscript('5'),\n ];\n draw(chords, 110);\n chords = [\n f.ChordSymbol().addText('A').addGlyph('-'),\n f.ChordSymbol().addText('E').addGlyph('-'),\n f.ChordSymbol().addText('A').addGlyphOrText('(#11)', superscript),\n f.ChordSymbol().addText('E').addGlyphOrText('(#9)', superscript),\n ];\n draw(chords, 210);\n chords = [\n f.ChordSymbol().addGlyphOrText('F/B').addGlyphOrText('b', superscript),\n f.ChordSymbol().addText('E').addGlyphOrText('V/V'),\n f.ChordSymbol().addText('A').addGlyphOrText('(#11)', superscript),\n f.ChordSymbol().addText('E').addGlyphOrText('(#9)', superscript),\n ];\n draw(chords, 310);\n options.assert.ok(true, 'Chord Symbol Kerning Tests');\n}\nfunction top(options) {\n const f = VexFlowTests.makeFactory(options, 650 * 1.5, 650);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n // Helper function for creating StaveNotes.\n const note = (factory, keys, duration, chordSymbol, direction) => factory.StaveNote({ keys, duration, stem_direction: direction }).addModifier(chordSymbol, 0);\n function draw(c1, c2, y) {\n const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(f, ['e/4', 'a/4', 'd/5'], 'h', c1, 1).addModifier(new Accidental('b'), 0),\n note(f, ['c/5', 'e/5', 'c/6'], 'h', c2, -1),\n ];\n const score = f.EasyScore();\n const voice = score.voice(notes, { time: '4/4' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n }\n let chord1 = f\n .ChordSymbol({ reportWidth: false })\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('(#11b9)', superscript);\n let chord2 = f\n .ChordSymbol({ reportWidth: false })\n .addText('C')\n .setHorizontal('left')\n .addGlyphSuperscript('majorSeventh');\n draw(chord1, chord2, 40);\n chord1 = f\n .ChordSymbol()\n .addText('F7')\n .addTextSuperscript('(')\n .addGlyphOrText('#11b9', superscript)\n .addTextSuperscript(')');\n chord2 = f.ChordSymbol().addText('C').setHorizontal('left').addTextSuperscript('Maj.');\n draw(chord1, chord2, 140);\n chord1 = f\n .ChordSymbol()\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript);\n chord2 = f.ChordSymbol().addText('C').addTextSuperscript('sus4');\n draw(chord1, chord2, 240);\n options.assert.ok(true, 'Top Chord Symbol');\n}\nfunction topJustify(options) {\n const f = VexFlowTests.makeFactory(options, 500 * 1.5, 680);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chord1, chord2, y) {\n const stave = new Stave(10, y, 450).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(f, ['e/4', 'a/4', 'd/5'], 'h', chord1).addModifier(new Accidental('b'), 0),\n note(f, ['c/4', 'e/4', 'B/4'], 'h', chord2),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n }\n let chord1 = f.ChordSymbol().addText('F7').setHorizontal('left').addGlyphOrText('(#11b9)', superscript);\n let chord2 = f.ChordSymbol({ hJustify: 'left' }).addText('C').addGlyphSuperscript('majorSeventh');\n draw(chord1, chord2, 40);\n chord1 = f\n .ChordSymbol({ hJustify: 'center' })\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('(#11b9)', superscript);\n chord2 = f.ChordSymbol({ hJustify: 'center' }).addText('C').addTextSuperscript('Maj.');\n draw(chord1, chord2, 140);\n chord1 = f\n .ChordSymbol({ hJustify: 'right' })\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript);\n chord2 = f.ChordSymbol({ hJustify: 'right' }).addText('C').addTextSuperscript('Maj.');\n draw(chord1, chord2, 240);\n chord1 = f\n .ChordSymbol({ hJustify: 'left' })\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript);\n chord2 = f.ChordSymbol({ hJustify: 'centerStem' }).addText('C').addTextSuperscript('Maj.');\n draw(chord1, chord2, 340);\n options.assert.ok(true, 'Top Chord Justified');\n}\nfunction bottom(options) {\n const f = VexFlowTests.makeFactory(options, 600 * 1.5, 230);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chords, y) {\n const stave = new Stave(10, y, 400).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(f, ['c/4', 'f/4', 'a/4'], 'q', chords[0]),\n note(f, ['c/4', 'e/4', 'b/4'], 'q', chords[1]).addModifier(new Accidental('b'), 2),\n note(f, ['c/4', 'e/4', 'g/4'], 'q', chords[2]),\n note(f, ['c/4', 'f/4', 'a/4'], 'q', chords[3]).addModifier(new Accidental('#'), 1),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n }\n const chords = [\n f.ChordSymbol({ vJustify: 'bottom' }).addText('I').addTextSuperscript('6').addTextSubscript('4'),\n f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V'),\n f.ChordSymbol({ vJustify: 'bottom' }).addLine(12),\n f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V/V'),\n ];\n draw(chords, 10);\n options.assert.ok(true, 'Bottom Chord Symbol');\n}\nfunction bottomStemDown(options) {\n const f = VexFlowTests.makeFactory(options, 600 * 1.5, 330);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chords, y) {\n // Helper function to create a StaveNote with a ChordSymbol and the stem pointing down.\n const note = (keys, duration, chordSymbol) => new StaveNote({ keys, duration, stem_direction: -1 }).addModifier(chordSymbol, 0);\n const stave = new Stave(10, y, 400).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(['c/4', 'f/4', 'a/4'], 'q', chords[0]),\n note(['c/4', 'e/4', 'b/4'], 'q', chords[1]).addModifier(new Accidental('b'), 2),\n note(['c/4', 'e/4', 'g/4'], 'q', chords[2]),\n note(['c/4', 'f/4', 'a/4'], 'q', chords[3]).addModifier(new Accidental('#'), 1),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n }\n const chords = [\n f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('F'),\n f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('C7'),\n f.ChordSymbol({ vJustify: 'bottom' }).addLine(12),\n f.ChordSymbol({ vJustify: 'bottom' }).addText('A').addGlyphSuperscript('dim'),\n ];\n draw(chords, 10);\n options.assert.ok(true, 'Bottom Stem Down Chord Symbol');\n}\nfunction doubleBottom(options) {\n const f = VexFlowTests.makeFactory(options, 600 * 1.5, 260);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chords, chords2, y) {\n // Helper function to create a StaveNote with two ChordSymbols attached.\n const note = (keys, duration, chordSymbol1, chordSymbol2) => new StaveNote({ keys, duration }).addModifier(chordSymbol1, 0).addModifier(chordSymbol2, 0);\n const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(['c/4', 'f/4', 'a/4'], 'q', chords[0], chords2[0]),\n note(['c/4', 'e/4', 'b/4'], 'q', chords[1], chords2[1]).addModifier(f.Accidental({ type: 'b' }), 2),\n note(['c/4', 'e/4', 'g/4'], 'q', chords[2], chords2[2]),\n note(['c/4', 'f/4', 'a/4'], 'q', chords[3], chords2[3]).addModifier(f.Accidental({ type: '#' }), 1),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n }\n const chords1 = [\n f.ChordSymbol({ vJustify: 'bottom' }).addText('I').addTextSuperscript('6').addTextSubscript('4'),\n f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V'),\n f.ChordSymbol({ vJustify: 'bottom' }).addLine(12),\n f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V/V'),\n ];\n const chords2 = [\n f.ChordSymbol({ vJustify: 'bottom' }).addText('T'),\n f.ChordSymbol({ vJustify: 'bottom' }).addText('D'),\n f.ChordSymbol({ vJustify: 'bottom' }).addText('D'),\n f.ChordSymbol({ vJustify: 'bottom' }).addText('SD'),\n ];\n draw(chords1, chords2, 10);\n options.assert.ok(true, '2 Bottom Chord Symbol');\n}\nVexFlowTests.register(ChordSymbolTests);\nexport { ChordSymbolTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Clef Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nconst ClefTests = {\n Start() {\n QUnit.module('Clef');\n const run = VexFlowTests.runTests;\n run('Clef Test', draw);\n run('Clef End Test', drawEnd);\n run('Small Clef Test', drawSmall);\n run('Small Clef End Test', drawSmallEnd);\n run('Clef Change Test', drawClefChange);\n },\n};\nfunction draw(options) {\n const f = VexFlowTests.makeFactory(options, 800, 120);\n f.Stave()\n .addClef('treble')\n .addClef('treble', 'default', '8va')\n .addClef('treble', 'default', '8vb')\n .addClef('alto')\n .addClef('tenor')\n .addClef('soprano')\n .addClef('bass')\n .addClef('bass', 'default', '8vb')\n .addClef('mezzo-soprano')\n .addClef('baritone-c')\n .addClef('baritone-f')\n .addClef('subbass')\n .addClef('percussion')\n .addClef('french')\n .addEndClef('treble');\n f.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawEnd(options) {\n const f = VexFlowTests.makeFactory(options, 800, 120);\n f.Stave()\n .addClef('bass')\n .addEndClef('treble')\n .addEndClef('treble', 'default', '8va')\n .addEndClef('treble', 'default', '8vb')\n .addEndClef('alto')\n .addEndClef('tenor')\n .addEndClef('soprano')\n .addEndClef('bass')\n .addEndClef('bass', 'default', '8vb')\n .addEndClef('mezzo-soprano')\n .addEndClef('baritone-c')\n .addEndClef('baritone-f')\n .addEndClef('subbass')\n .addEndClef('percussion')\n .addEndClef('french');\n f.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawSmall(options) {\n const f = VexFlowTests.makeFactory(options, 800, 120);\n f.Stave()\n .addClef('treble', 'small')\n .addClef('treble', 'small', '8va')\n .addClef('treble', 'small', '8vb')\n .addClef('alto', 'small')\n .addClef('tenor', 'small')\n .addClef('soprano', 'small')\n .addClef('bass', 'small')\n .addClef('bass', 'small', '8vb')\n .addClef('mezzo-soprano', 'small')\n .addClef('baritone-c', 'small')\n .addClef('baritone-f', 'small')\n .addClef('subbass', 'small')\n .addClef('percussion', 'small')\n .addClef('french', 'small')\n .addEndClef('treble', 'small');\n f.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawSmallEnd(options) {\n const f = VexFlowTests.makeFactory(options, 800, 120);\n f.Stave()\n .addClef('bass', 'small')\n .addEndClef('treble', 'small')\n .addEndClef('treble', 'small', '8va')\n .addEndClef('treble', 'small', '8vb')\n .addEndClef('alto', 'small')\n .addEndClef('tenor', 'small')\n .addEndClef('soprano', 'small')\n .addEndClef('bass', 'small')\n .addEndClef('bass', 'small', '8vb')\n .addEndClef('mezzo-soprano', 'small')\n .addEndClef('baritone-c', 'small')\n .addEndClef('baritone-f', 'small')\n .addEndClef('subbass', 'small')\n .addEndClef('percussion', 'small')\n .addEndClef('french', 'small');\n f.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawClefChange(options) {\n const f = VexFlowTests.makeFactory(options, 800, 180);\n const stave = f.Stave().addClef('treble');\n const notes = [\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }),\n f.ClefNote({ type: 'alto', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'alto' }),\n f.ClefNote({ type: 'tenor', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'tenor' }),\n f.ClefNote({ type: 'soprano', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'soprano' }),\n f.ClefNote({ type: 'bass', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'bass' }),\n f.ClefNote({ type: 'mezzo-soprano', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'mezzo-soprano' }),\n f.ClefNote({ type: 'baritone-c', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'baritone-c' }),\n f.ClefNote({ type: 'baritone-f', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'baritone-f' }),\n f.ClefNote({ type: 'subbass', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'subbass' }),\n f.ClefNote({ type: 'french', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'french' }),\n f.ClefNote({ type: 'treble', options: { size: 'small', annotation: '8vb' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble', octave_shift: -1 }),\n f.ClefNote({ type: 'treble', options: { size: 'small', annotation: '8va' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble', octave_shift: 1 }),\n ];\n const voice = f.Voice({ time: '12/4' }).addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(ClefTests);\nexport { ClefTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Formatter Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Stave } from '../src/stave';\nconst CrossBeamTests = {\n Start() {\n QUnit.module('CrossBeam');\n const run = VexFlowTests.runTests;\n const crossStaveTests = [];\n crossStaveTests.push({\n title: 'Single clef mixed 1',\n time: '3/4',\n voices: [\n {\n notes: [{ notestring: 'g4/16, f4/16, a6/16, g6/16, b4/4/r, g6/8, g4/8 ', clef: 'treble' }],\n stavemask: [0, 0, 0, 0, 0, 0, 0],\n beammask: [1, 1, -1, -1, 0, -1, 1],\n clef: 'treble',\n },\n ],\n });\n crossStaveTests.push({\n title: 'Single clef mixed 2',\n time: '3/4',\n voices: [\n {\n notes: [{ notestring: 'g4/16, f6/16, a4/16, g6/16, b4/4/r, g6/8, g4/8 ', clef: 'treble' }],\n stavemask: [0, 0, 0, 0, 0, 0, 0],\n beammask: [1, -1, 1, -1, 0, -1, 1],\n clef: 'treble',\n },\n ],\n });\n crossStaveTests.push({\n title: 'Mixed clef voice middle',\n time: '2/4',\n voices: [\n {\n notes: [{ notestring: 'e#5/4, b4/16/r, b4/16, d5/16., c5/32 ', clef: 'treble' }],\n stavemask: [0, 0, 0, 0, 0],\n beammask: [0, 0, 1, 1, 1],\n clef: 'treble',\n },\n {\n notes: [\n { notestring: 'C3/16, B3/16, C4/16', clef: 'bass' },\n { notestring: 'E#4/16', clef: 'treble' },\n { notestring: 'C4/4', clef: 'bass' },\n ],\n stavemask: [1, 1, 1, 0, 1],\n beammask: [1, 1, 1, -1, 0],\n clef: 'bass',\n },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam up1)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' },\n { notestring: 'C4/8, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 1, 1, 1, 1],\n stavemask: [0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam up2)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' },\n { notestring: 'C4/8, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, 1, 1, 1, 1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam up3)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' },\n { notestring: 'C4/16, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, 1, 1, 1, 1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam up4)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' },\n { notestring: 'C4/16, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, 1, 1, 1, 1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam down1)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' },\n { notestring: 'C4/8, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, -1, -1, -1, -1],\n stavemask: [0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam down2)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' },\n { notestring: 'C4/8, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, -1, -1, -1, -1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam down3)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' },\n { notestring: 'C4/16, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, -1, -1, -1, -1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam down4)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' },\n { notestring: 'C4/16, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, -1, -1, -1, -1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam middle1)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' },\n { notestring: 'C4/8, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, -1, -1, 1, 1],\n stavemask: [0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam middle2)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' },\n { notestring: 'C4/8, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, -1, -1, 1, 1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam middle3)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' },\n { notestring: 'C4/16, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, -1, -1, 1, 1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam middle4)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' },\n { notestring: 'C4/16, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, -1, -1, 1, 1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.forEach((cst) => {\n run(cst.title, crossClef, cst);\n });\n },\n};\nfunction crossClef(options) {\n const f = VexFlowTests.makeFactory(options, 400 + Stave.defaultPadding, 250);\n f.getContext().scale(0.8, 0.8);\n const score = f.EasyScore();\n const system = f.System({\n details: { softmaxFactor: 100 },\n autoWidth: true,\n debugFormatter: false,\n });\n const testdata = options.params;\n const voicedata = testdata.voices;\n const stavemap = [];\n for (let i = 0; i < voicedata.length; ++i) {\n const clef = voicedata[i].clef;\n stavemap.push(system.addStave({ voices: [] }).addClef(clef).addTimeSignature(testdata.time));\n }\n for (let i = 0; i < voicedata.length; ++i) {\n const stavemask = voicedata[i].stavemask;\n let scoreNotes = [];\n const voicenotes = voicedata[i].notes;\n for (let k = 0; k < voicenotes.length; ++k) {\n scoreNotes = scoreNotes.concat(score.notes(voicenotes[k].notestring, { clef: voicenotes[k].clef }));\n }\n const beammask = voicedata[i].beammask;\n let curGroup = [];\n const beamGroups = [];\n for (let j = 0; j < scoreNotes.length; ++j) {\n const note = scoreNotes[j];\n note.setStave(stavemap[stavemask[j]]);\n if (beammask[j] !== 0) {\n note.setStemDirection(beammask[j]);\n curGroup.push(note);\n }\n else {\n if (curGroup.length) {\n beamGroups.push(curGroup);\n curGroup = [];\n }\n }\n }\n if (curGroup.length) {\n beamGroups.push(curGroup);\n }\n beamGroups.forEach((bg) => {\n score.beam(bg);\n });\n if (scoreNotes.length > 0) {\n const voice = score.voice(scoreNotes, { time: testdata.time });\n system.addVoices([voice]);\n }\n }\n f.draw();\n options.assert.ok(true);\n}\nVexFlowTests.register(CrossBeamTests);\nexport { CrossBeamTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Curve Tests\nimport { concat, VexFlowTests } from './vexflow_test_helpers';\nimport { CurvePosition } from '../src/curve';\nconst CurveTests = {\n Start() {\n QUnit.module('Curve');\n const run = VexFlowTests.runTests;\n run('Simple Curve', simple);\n run('Rounded Curve', rounded);\n run('Thick Thin Curves', thickThin);\n run('Top Curve', top);\n },\n};\n/**\n * Helper function. Each test case passes in a set of notes and\n * a setupCurves() callback which uses Factory.Curve(...) to build the curves.\n * Curves can be used to indicate slurs (legato articulation).\n */\nfunction createTest(noteGroup1, noteGroup2, setupCurves) {\n return (options) => {\n const factory = VexFlowTests.makeFactory(options, 350, 200);\n const stave = factory.Stave({ y: 50 });\n const score = factory.EasyScore();\n // Use .reduce(concat) to flatten the two StaveNote[] into a single StaveNote[].\n const staveNotes = [\n score.beam(score.notes(...noteGroup1)),\n score.beam(score.notes(...noteGroup2)), // group 2\n ].reduce(concat);\n setupCurves(factory, staveNotes);\n const voices = [score.voice(staveNotes, { time: '4/4' })];\n factory.Formatter().joinVoices(voices).formatToStave(voices, stave);\n factory.draw();\n options.assert.ok('Simple Curve');\n };\n}\nconst simple = createTest(['c4/8, f5, d5, g5', { stem: 'up' }], // beamGroup1\n['d6/8, f5, d5, g5', { stem: 'down' }], // beamGroup2\n(f, notes) => {\n f.Curve({\n from: notes[0],\n to: notes[3],\n options: {\n cps: [\n { x: 0, y: 10 },\n { x: 0, y: 50 },\n ],\n },\n });\n f.Curve({\n from: notes[4],\n to: notes[7],\n options: {\n cps: [\n { x: 0, y: 10 },\n { x: 0, y: 20 },\n ],\n },\n });\n});\nconst rounded = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], // beamGroup1\n['d5/8, d6, d6, g5', { stem: 'down' }], // beamGroup2\n(f, notes) => {\n f.Curve({\n from: notes[0],\n to: notes[3],\n options: {\n x_shift: -10,\n y_shift: 30,\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 50 },\n ],\n },\n });\n f.Curve({\n from: notes[4],\n to: notes[7],\n options: {\n cps: [\n { x: 0, y: 50 },\n { x: 0, y: 50 },\n ],\n },\n });\n});\nconst thickThin = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], // beamGroup1\n['d5/8, d6, d6, g5', { stem: 'down' }], // beamGroup2\n(f, notes) => {\n f.Curve({\n from: notes[0],\n to: notes[3],\n options: {\n thickness: 10,\n x_shift: -10,\n y_shift: 30,\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 50 },\n ],\n },\n });\n f.Curve({\n from: notes[4],\n to: notes[7],\n options: {\n thickness: 0,\n cps: [\n { x: 0, y: 50 },\n { x: 0, y: 50 },\n ],\n },\n });\n});\nconst top = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], // beamGroup1\n['d5/8, d6, d6, g5', { stem: 'down' }], // beamGroup2\n(f, notes) => {\n f.Curve({\n from: notes[0],\n to: notes[7],\n options: {\n x_shift: -3,\n y_shift: 10,\n position: CurvePosition.NEAR_TOP,\n position_end: CurvePosition.NEAR_HEAD,\n cps: [\n { x: 0, y: 20 },\n { x: 40, y: 80 },\n ],\n },\n });\n});\nVexFlowTests.register(CurveTests);\nexport { CurveTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Dot Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Beam } from '../src/beam';\nimport { Dot } from '../src/dot';\nimport { Formatter } from '../src/formatter';\nimport { ModifierContext } from '../src/modifiercontext';\nimport { Note } from '../src/note';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { TickContext } from '../src/tickcontext';\nimport { Voice } from '../src/voice';\nconst DotTests = {\n Start() {\n QUnit.module('Dot');\n const run = VexFlowTests.runTests;\n run('Basic', basic);\n run('Multi Voice', multiVoice);\n },\n};\n/**\n * Helper function for the basic test case below.\n */\nfunction showOneNote(note1, stave, ctx, x) {\n const modifierContext = new ModifierContext();\n note1.setStave(stave).addToModifierContext(modifierContext);\n new TickContext().addTickable(note1).preFormat().setX(x);\n note1.setContext(ctx).draw();\n Note.plotMetrics(ctx, note1, 140);\n}\nfunction basic(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 1000, 240);\n const stave = new Stave(10, 10, 975);\n stave.setContext(ctx);\n stave.draw();\n const notes = [\n new StaveNote({ keys: ['c/4', 'e/4', 'a/4', 'b/4'], duration: 'w' }),\n new StaveNote({ keys: ['a/4', 'b/4', 'c/5'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['g/4', 'a/4', 'b/4'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['e/4', 'f/4', 'b/4', 'c/5'], duration: '4' }),\n new StaveNote({\n keys: ['g/4', 'a/4', 'd/5', 'e/5', 'g/5'],\n duration: '4',\n stem_direction: -1,\n }),\n new StaveNote({ keys: ['g/4', 'b/4', 'd/5', 'e/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['e/4', 'g/4', 'b/4', 'c/5'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }),\n new StaveNote({\n keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'],\n duration: '16',\n stem_direction: -1,\n }),\n new StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16', stem_direction: 1 }),\n new StaveNote({\n keys: ['e/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'f/5'],\n duration: '16',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['e/4', 'g/4', 'a/4', 'b/4', 'c/5'],\n duration: '16',\n stem_direction: 1,\n }),\n new StaveNote({ keys: ['e/4', 'a/4', 'b/4', 'c/5'], duration: '16', stem_direction: 1 }),\n ];\n Dot.buildAndAttach(notes, { all: true });\n Dot.buildAndAttach([notes[7], notes[8], notes[9]], { all: true });\n Dot.buildAndAttach([notes[8], notes[9]], { all: true });\n const beam = new Beam(notes.slice(notes.length - 2));\n for (let i = 0; i < notes.length; i++) {\n showOneNote(notes[i], stave, ctx, 30 + i * 65);\n const dots = notes[i].getModifiersByType('Dot');\n options.assert.ok(dots.length > 0, 'Note ' + i + ' has dots');\n for (let j = 0; j < dots.length; ++j) {\n options.assert.ok(dots[j].getWidth() > 0, 'Dot ' + j + ' has width set');\n }\n }\n beam.setContext(ctx).draw();\n VexFlowTests.plotLegendForNoteWidth(ctx, 890, 140);\n options.assert.ok(true, 'Full Dot');\n}\nfunction multiVoice(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 750, 300);\n const stave = new Stave(30, 45, 700).setContext(ctx).draw();\n const notes1 = [\n new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '2', stem_direction: -1 }),\n new StaveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: '2', stem_direction: -1 }),\n new StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '2', stem_direction: -1 }),\n new StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '8', stem_direction: -1 }),\n new StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '8', stem_direction: -1 }),\n ];\n Dot.buildAndAttach([notes1[0], notes1[2], notes1[3], notes1[4]], { all: true });\n Dot.buildAndAttach([notes1[0], notes1[2], notes1[3], notes1[4]], { all: true });\n Dot.buildAndAttach([notes1[1]], { index: 0 });\n Dot.buildAndAttach([notes1[1]], { index: 0 });\n Dot.buildAndAttach([notes1[1]], { index: 1 });\n Dot.buildAndAttach([notes1[1]], { index: 1 });\n Dot.buildAndAttach([notes1[1]], { index: 2 });\n Dot.buildAndAttach([notes1[1]], { index: 2 });\n Dot.buildAndAttach([notes1[1]], { index: 2 });\n Dot.buildAndAttach([notes1[2], notes1[3], notes1[4]]);\n const notes2 = [\n new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '2', stem_direction: 1 }),\n new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['d/5', 'g/5', 'a/5', 'b/5'], duration: '8', stem_direction: 1 }),\n new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '8', stem_direction: 1 }),\n ];\n Dot.buildAndAttach(notes2, { all: true });\n Dot.buildAndAttach([notes2[1]], { all: true });\n const voice1 = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes1);\n const voice2 = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes2);\n const formatter = new Formatter().joinVoices([voice1, voice2]);\n formatter.format([voice1, voice2], 700);\n voice1.draw(ctx, stave);\n voice2.draw(ctx, stave);\n notes1.forEach((note) => Note.plotMetrics(ctx, note, 190));\n notes2.forEach((note) => Note.plotMetrics(ctx, note, 20));\n VexFlowTests.plotLegendForNoteWidth(ctx, 620, 220);\n options.assert.ok(true, 'Full Dot');\n}\nVexFlowTests.register(DotTests);\nexport { DotTests };\n","// [VexFlow](https://vexflow.com/) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// EasyScore Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Articulation } from '../src/articulation';\nimport { EasyScore } from '../src/easyscore';\nimport { FretHandFinger } from '../src/frethandfinger';\nimport { Modifier } from '../src/modifier';\nimport { Parenthesis } from '../src/parenthesis';\nimport { StaveConnector } from '../src/staveconnector';\nimport { Stem } from '../src/stem';\nimport { Tuplet } from '../src/tuplet';\nconst EasyScoreTests = {\n Start() {\n QUnit.module('EasyScore');\n QUnit.test('Basic', basic);\n QUnit.test('Accidentals', accidentals);\n QUnit.test('Durations', durations);\n QUnit.test('Chords', chords);\n QUnit.test('Dots', dots);\n QUnit.test('Types', types);\n QUnit.test('Options', options);\n const run = VexFlowTests.runTests;\n run('Draw Basic', drawBasicTest);\n run('Draw Different KeySignature', drawDiffKeysig);\n run('Draw Basic Muted', drawBasicMutedTest);\n run('Draw Basic Harmonic', drawBasicHarmonicTest);\n run('Draw Basic Slash', drawBasicSlashTest);\n run('Draw Ghostnote Basic', drawGhostBasicTest);\n run('Draw Ghostnote Dotted', drawGhostDottedTest);\n run('Draw Parenthesised', drawParenthesisedTest);\n run('Draw Accidentals', drawAccidentalsTest);\n run('Draw Beams', drawBeamsTest);\n run('Draw Tuplets', drawTupletsTest);\n run('Draw Dots', drawDotsTest);\n run('Draw Options', drawOptionsTest);\n run('Draw Fingerings', drawFingeringsTest);\n run('Keys', keys);\n },\n};\n/**\n * Use Function.prototype.bind() to create shortcut methods.\n * This can improve the readability of your EasyScore code.\n */\nfunction createShortcuts(score) {\n return {\n voice: score.voice.bind(score),\n notes: score.notes.bind(score),\n beam: score.beam.bind(score),\n tuplet: score.tuplet.bind(score),\n };\n}\n/**\n * Test case verifies:\n * - all strings in `mustPass` parse correctly\n * - all strings in `mustFail` fail to parse (i.e., Result.success is `false`).\n */\nfunction basic(assert) {\n const score = new EasyScore();\n const mustPass = ['c4', 'c#4', 'c4/r', 'c#5', 'c3/m', 'c3//m', 'c3//h', 'c3/s', 'c3//s', 'c3/g', 'c3//g'];\n const mustFail = ['', '()', '7', '(c#4 e5 g6'];\n mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line));\n}\nfunction accidentals(assert) {\n const score = new EasyScore();\n const mustPass = [\n 'c3',\n 'c##3, cb3',\n 'Cn3',\n 'f3//m',\n '(c##3 cbb3 cn3), cb3',\n 'cbbs7',\n 'cbb7',\n 'cbss7',\n 'cbs7',\n 'cb7',\n 'cdb7',\n 'cd7',\n 'c##7',\n 'c#7',\n 'cn7',\n 'c++-7',\n 'c++7',\n 'c+-7',\n 'c+7',\n '(cbs3 bbs3 dbs3), ebs3',\n '(cd7 cbb3 cn3), cb3',\n 'co7',\n 'ck7',\n ];\n const mustFail = [\n 'ct3',\n 'cdbb7',\n '(cq cbb3 cn3), cb3',\n '(cdd7 cbb3 cn3), cb3',\n 'cbbbs7',\n 'cbbss7',\n 'cbsss7',\n 'csbs7',\n 'cddb7',\n 'cddbb7',\n 'cdd7',\n 'c##b7',\n 'c#bs7',\n 'cnb#7',\n 'c+#+b-d7',\n 'c+--7',\n 'c++--7',\n 'c+++7',\n 'cbk7',\n 'cok7',\n 'cko7',\n 'c#s7',\n ];\n mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line));\n}\nfunction durations(assert) {\n const score = new EasyScore();\n const mustPass = ['c3/4', 'c##3/w, cb3', 'c##3/w, cb3/q', 'c##3/q, cb3/32', '(c##3 cbb3 cn3), cb3'];\n const mustFail = ['Cn3/]', '/', '(cq cbb3 cn3), cb3', '(cdd7 cbb3 cn3), cb3'];\n mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line));\n}\nfunction chords(assert) {\n const score = new EasyScore();\n const mustPass = [\n '(c5)',\n '(c3 e0 g9)',\n '(c##4 cbb4 cn4)/w, (c#5 cb2 a3)/32',\n '(d##4 cbb4 cn4)/w/r, (c#5 cb2 a3)',\n '(c##4 cbb4 cn4)/4, (c#5 cb2 a3)',\n '(c##4 cbb4 cn4)/m, (c#5 cb2 a3)',\n ];\n const mustFail = ['(c)'];\n mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line));\n}\nfunction dots(assert) {\n const score = new EasyScore();\n const mustPass = [\n 'c3/4.',\n 'c##3/w.., cb3',\n 'f##3/s, cb3/q...',\n 'c##3/q, cb3/32',\n '(c##3 cbb3 cn3)., cb3',\n '(c5).',\n '(c##4 cbb4 cn4)/w.., (c#5 cb2 a3)/32',\n ];\n const mustFail = ['.', 'c.#', 'c#4./4'];\n mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line));\n}\nfunction types(assert) {\n const score = new EasyScore();\n const mustPass = ['c3/4/m.', 'c##3//r.., cb3', 'c##3/m.., cb3', 'c##3/r.., cb3', 'd##3/w/s, cb3/q...', 'Fb4'];\n const mustFail = ['c4/q/U', '(c##4, cbb4 cn4)/w.., (c#5 cb2 a3)/32', 'z#3'];\n mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line));\n}\nfunction options(assert) {\n const score = new EasyScore();\n const mustPass = [\n 'c3/4.[foo=\"bar\"]',\n 'c##3/w.., cb3[id=\"blah\"]',\n 'c##3/q, cb3/32',\n '(c##3 cbb3 cn3).[blah=\"bod4o\"], cb3',\n '(c5)[fooooo=\"booo\"]',\n 'c#5[id=\"foobar\"]',\n ];\n const mustFail = ['.[', 'f##3/w[], cb3/q...'];\n mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line));\n}\nfunction drawBasicTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })),\n voice(notes('c#5/h., c5/q', { stem: 'up' })),\n ],\n })\n .addClef('treble');\n system\n .addStave({\n voices: [voice(notes('c#3/q, cn3/q, bb3/q, d##3/q', { clef: 'bass' }))],\n })\n .addClef('bass');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n options.assert.expect(0);\n}\nfunction drawDiffKeysig(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })),\n voice(notes('c5/h., c5/q', { stem: 'up' })),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4')\n .addKeySignature('D');\n system\n .addStave({\n voices: [voice(notes('c#3/q, cn3/q, bb3/q, d##3/q', { clef: 'bass' }))],\n })\n .addClef('bass')\n .addTimeSignature('4/4');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n options.assert.expect(0);\n}\nfunction drawBasicMutedTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(d4 e4 g4)/q/m, c4/q/m, c4/q/r, c4/q/m', { stem: 'down' })),\n voice(notes('c#5/h/m., c5/q/m', { stem: 'up' })),\n ],\n })\n .addClef('treble');\n system\n .addStave({\n voices: [voice(notes('c#3/q/m, cn3/q/m, bb3/q/m, d##3/q/m', { clef: 'bass' }))],\n })\n .addClef('bass');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n options.assert.expect(0);\n}\nfunction drawBasicHarmonicTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(d4 e4 g4)/q/h, c4/q/h, c4/q/r, c4/q/h', { stem: 'down' })),\n voice(notes('c#5/h/h., c5/q/h', { stem: 'up' })),\n ],\n })\n .addClef('treble');\n system\n .addStave({\n voices: [voice(notes('c#3/q/h, cn3/q/h, bb3/q/h, d##3/q/h', { clef: 'bass' }))],\n })\n .addClef('bass');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n options.assert.expect(0);\n}\nfunction drawBasicSlashTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(d4 e4 g4)/q/s, c4/q/s, c4/q/r, c4/q/s', { stem: 'down' })),\n voice(notes('c#5/h/s., c5/q/s', { stem: 'up' })),\n ],\n })\n .addClef('treble');\n system\n .addStave({\n voices: [voice(notes('c#3/q/s, cn3/q/s, bb3/q/s, d##3/q/s', { clef: 'bass' }))],\n })\n .addClef('bass');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n options.assert.expect(0);\n}\nfunction drawGhostBasicTest(options) {\n const f = VexFlowTests.makeFactory(options, 550);\n const score = f.EasyScore();\n const system = f.System();\n system.addStave({\n voices: [\n score.voice([\n ...score.notes('f#5/4, f5, db5, c5', { stem: 'up' }),\n ...score.beam(score.notes('c5/8, d5, fn5, e5', { stem: 'up' })),\n ...score.beam(score.notes('d5, c5', { stem: 'up' })),\n ], { time: '7/4' }),\n score.voice(score.notes('c4/h/g, f4/4, c4/4/g, e4/4, c4/8/g, d##4/8, c4/8, c4/8', { stem: 'down' }), {\n time: '7/4',\n }),\n ],\n });\n f.draw();\n options.assert.expect(0);\n}\nfunction drawGhostDottedTest(options) {\n const f = VexFlowTests.makeFactory(options, 550);\n const score = f.EasyScore();\n const system = f.System();\n system.addStave({\n voices: [\n score.voice([\n ...score.notes('c4/4/g., fbb5/8, d5/4', { stem: 'up' }),\n ...score.beam(score.notes('c5/8, c#5/16, d5/16', { stem: 'up' })),\n ...score.notes('c4/2/g.., fn5/8', { stem: 'up' }),\n ], { time: '8/4' }),\n score.voice([\n ...score.notes('f#4/4', { stem: 'down' }),\n ...score.beam(score.notes('e4/8, d4/8', { stem: 'down' })),\n ...score.notes('c4/4/g.., cb4/16, c#4/h, d4/4', { stem: 'down' }),\n ...score.beam(score.notes('fn4/8, e4/8', { stem: 'down' })),\n ], { time: '8/4' }),\n ],\n });\n f.draw();\n options.assert.expect(0);\n}\nfunction drawParenthesisedTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n const notes1 = notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' });\n Parenthesis.buildAndAttach([notes1[0], notes1[3]]);\n const notes2 = notes('c#5/h., c5/q', { stem: 'down' });\n Parenthesis.buildAndAttach([notes2[0], notes2[1]]);\n system\n .addStave({\n voices: [voice(notes1), voice(notes2)],\n })\n .addClef('treble');\n const notes3 = notes('c#3/q, cn3/q, bb3/q, d##3/q', { stem: 'down' });\n Parenthesis.buildAndAttach(notes3);\n system\n .addStave({\n voices: [voice(notes3)],\n })\n .addClef('bass');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n options.assert.expect(0);\n}\nfunction drawAccidentalsTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(cbbs4 ebb4 gbss4)/q, cbs4/q, cdb4/q/r, cd4/q', { stem: 'down' })),\n voice(notes('c++-5/h., c++5/q', { stem: 'up' })),\n ],\n })\n .addClef('treble');\n system\n .addStave({\n voices: [voice(notes('c+-3/q, c+3/q, bb3/q, d##3/q', { clef: 'bass' }))],\n })\n .addClef('bass');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n options.assert.expect(0);\n}\nfunction drawBeamsTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 250);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes, beam } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(c4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })),\n voice([...notes('c#5/h.', { stem: 'up' }), ...beam(notes('c5/8, c5/8', { stem: 'up' }))]),\n ],\n })\n .addClef('treble');\n f.draw();\n options.assert.expect(0);\n}\nfunction drawTupletsTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 250);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes, tuplet, beam } = createShortcuts(score);\n // Voice 1, with stems pointed down.\n const v1_tuplet = tuplet(notes('(c4 e4 g4)/q, cbb4/q, c4/q', { stem: 'down' }), {\n location: Tuplet.LOCATION_BOTTOM,\n });\n const v1_halfNote = notes('c4/h', { stem: 'down' });\n const v1 = voice([...v1_tuplet, ...v1_halfNote]);\n // Voice 2, with stems pointed up.\n const v2_halfNote = notes('c#5/h.', { stem: 'up' });\n const v2_tuplet = tuplet(beam(notes('cb5/8, cn5/8, c5/8', { stem: 'up' })));\n const v2 = voice([...v2_halfNote, ...v2_tuplet]);\n system.addStave({ voices: [v1, v2] }).addClef('treble');\n f.draw();\n options.assert.expect(0);\n}\nfunction drawDotsTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 250);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [voice(notes('(c4 e4 g4)/8., (c4 e4 g4)/8.., (c4 e4 g4)/8..., (c4 e4 g4)/8...., (c4 e4 g4)/16...'))],\n })\n .addClef('treble');\n f.draw();\n options.assert.expect(0);\n}\nfunction drawOptionsTest(options) {\n const f = VexFlowTests.makeFactory(options, 500, 200);\n const score = f.EasyScore();\n const system = f.System();\n const notes = score.notes('B4/h[id=\"foobar\", class=\"red,bold\", stem=\"up\", articulations=\"staccato.below,tenuto\"], B4/q[articulations=\"accent.above\"], B4/q[stem=\"down\"]');\n system.addStave({ voices: [score.voice(notes)] });\n f.draw();\n const note0 = notes[0];\n const note1 = notes[1];\n const note0_modifier0 = note0.getModifiers()[0];\n const note0_modifier1 = note0.getModifiers()[1];\n const note1_modifier0 = note1.getModifiers()[0];\n options.assert.equal(note0.getAttribute('id'), 'foobar');\n options.assert.ok(note0.hasClass('red'));\n options.assert.ok(note0.hasClass('bold'));\n options.assert.equal(note0_modifier0.getCategory(), Articulation.CATEGORY);\n options.assert.equal(note0_modifier0.type, 'a.');\n options.assert.equal(note0_modifier0.getPosition(), Modifier.Position.BELOW);\n options.assert.equal(note0_modifier1.getCategory(), Articulation.CATEGORY);\n options.assert.equal(note0_modifier1.type, 'a-');\n options.assert.equal(note0_modifier1.getPosition(), Modifier.Position.ABOVE);\n options.assert.equal(note0.getStemDirection(), Stem.UP);\n options.assert.equal(note1_modifier0.getCategory(), Articulation.CATEGORY);\n options.assert.equal(note1_modifier0.type, 'a>');\n options.assert.equal(note1_modifier0.getPosition(), Modifier.Position.ABOVE);\n options.assert.equal(notes[2].getStemDirection(), Stem.DOWN);\n}\nfunction drawFingeringsTest(options) {\n const f = VexFlowTests.makeFactory(options, 500, 200);\n const score = f.EasyScore();\n const system = f.System();\n const notes = score.notes('C4/q[fingerings=\"1\"], E4[fingerings=\"3.above\"], G4[fingerings=\"5.below\"], (C4 E4 G4)[fingerings=\"1,3,5\"]');\n system.addStave({ voices: [score.voice(notes)] });\n f.draw();\n const note0_modifier0 = notes[0].getModifiers()[0];\n options.assert.equal(note0_modifier0.getCategory(), FretHandFinger.CATEGORY);\n options.assert.equal(note0_modifier0.getFretHandFinger(), '1');\n options.assert.equal(note0_modifier0.getPosition(), Modifier.Position.LEFT);\n const note1_modifier0 = notes[1].getModifiers()[0];\n options.assert.equal(note1_modifier0.getCategory(), FretHandFinger.CATEGORY);\n options.assert.equal(note1_modifier0.getFretHandFinger(), '3');\n options.assert.equal(note1_modifier0.getPosition(), Modifier.Position.ABOVE);\n const note2_modifier0 = notes[2].getModifiers()[0];\n options.assert.equal(note2_modifier0.getCategory(), FretHandFinger.CATEGORY);\n options.assert.equal(note2_modifier0.getFretHandFinger(), '5');\n options.assert.equal(note2_modifier0.getPosition(), Modifier.Position.BELOW);\n const note3_modifiers = notes[3].getModifiers();\n const note3_modifier0 = note3_modifiers[0];\n const note3_modifier1 = note3_modifiers[1];\n const note3_modifier2 = note3_modifiers[2];\n options.assert.equal(note3_modifier0.getCategory(), FretHandFinger.CATEGORY);\n options.assert.equal(note3_modifier0.getFretHandFinger(), '1');\n options.assert.equal(note3_modifier0.getPosition(), Modifier.Position.LEFT);\n options.assert.equal(note3_modifier1.getCategory(), FretHandFinger.CATEGORY);\n options.assert.equal(note3_modifier1.getFretHandFinger(), '3');\n options.assert.equal(note3_modifier1.getPosition(), Modifier.Position.LEFT);\n options.assert.equal(note3_modifier2.getCategory(), FretHandFinger.CATEGORY);\n options.assert.equal(note3_modifier2.getFretHandFinger(), '5');\n options.assert.equal(note3_modifier2.getPosition(), Modifier.Position.LEFT);\n}\nfunction keys(options) {\n const f = VexFlowTests.makeFactory(options, 700, 200);\n const score = f.EasyScore();\n const system = f.System();\n const notes = score.notes('c#3/q, c##3, cb3, cbb3, cn3, c3, cbbs3, cbss3, cbs3, cdb3, cd3, c++-3, c++3, c+-3, c+3, co3, ck3', { clef: 'bass' });\n system.addStave({ voices: [f.Voice().setStrict(false).addTickables(notes)] }).addClef('bass');\n f.draw();\n options.assert.equal(notes[0].keys, 'c#/3');\n options.assert.equal(notes[1].keys, 'c##/3');\n options.assert.equal(notes[2].keys, 'cb/3');\n options.assert.equal(notes[3].keys, 'cbb/3');\n options.assert.equal(notes[4].keys, 'cn/3');\n for (let i = 5; i < notes.length; i++) {\n options.assert.equal(notes[i].keys, 'c/3');\n }\n}\nVexFlowTests.register(EasyScoreTests);\nexport { EasyScoreTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Factory Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Factory } from '../src/factory';\nimport { Barline } from '../src/stavebarline';\nconst FactoryTests = {\n Start() {\n QUnit.module('Factory');\n QUnit.test('Defaults', defaults);\n const run = VexFlowTests.runTests;\n run('Draw', draw);\n run('Draw Tab (repeat barlines must be aligned)', drawTab);\n },\n};\nfunction defaults(assert) {\n // Throws RuntimeError: 'HTML DOM element not set in Factory'\n assert.throws(() => new Factory({ renderer: { elementId: '', width: 700, height: 500 } }), 'Empty string for elementId throws an exception.');\n const factory = new Factory({\n renderer: { elementId: null, width: 700, height: 500 },\n });\n // eslint-disable-next-line\n // @ts-ignore access a protected member for testing purposes.\n const options = factory.options;\n assert.equal(options.renderer.width, 700);\n assert.equal(options.renderer.height, 500);\n assert.equal(options.renderer.elementId, null);\n assert.equal(options.stave.space, 10);\n}\nfunction draw(options) {\n const f = Factory.newFromElementId(options.elementId);\n f.Stave().setClef('treble');\n f.draw();\n options.assert.expect(0);\n}\nfunction drawTab(options) {\n const factory = VexFlowTests.makeFactory(options, 500, 400);\n const system = factory.System({ width: 500 });\n const stave = factory.Stave().setClef('treble').setKeySignature('C#').setBegBarType(Barline.type.REPEAT_BEGIN);\n const voices = [factory.Voice().addTickables([factory.GhostNote({ duration: 'w' })])];\n system.addStave({ stave, voices });\n const tabStave = factory.TabStave().setClef('tab').setBegBarType(Barline.type.REPEAT_BEGIN);\n const tabVoices = [factory.Voice().addTickables([factory.GhostNote({ duration: 'w' })])];\n system.addStave({ stave: tabStave, voices: tabVoices });\n factory.draw();\n options.assert.equal(stave.getModifiers()[0].getX(), tabStave.getModifiers()[0].getX());\n options.assert.expect(1);\n}\nVexFlowTests.register(FactoryTests);\nexport { FactoryTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Font Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Bend } from '../src/bend';\nimport { CanvasContext } from '../src/canvascontext';\nimport { Element } from '../src/element';\nimport { Flow } from '../src/flow';\nimport { Font, FontStyle, FontWeight } from '../src/font';\nimport { PedalMarking } from '../src/pedalmarking';\nimport { StaveNote } from '../src/stavenote';\nimport { TextBracket } from '../src/textbracket';\nimport { TextNote } from '../src/textnote';\nimport { Voice } from '../src/voice';\nconst FontTests = {\n Start() {\n QUnit.module('Font');\n QUnit.test('setFont', setFont);\n QUnit.test('Parsing', fontParsing);\n QUnit.test('Sizes', fontSizes);\n const run = VexFlowTests.runTests;\n run('Set Text Font to Georgia', setTextFontToGeorgia);\n run('Set Music Font to Petaluma', setMusicFontToPetaluma);\n },\n};\n/**\n * Test out the setFont method in various classes.\n */\nfunction setFont(assert) {\n // Create a CanvasCntext and call setFont on it.\n const canvas = document.createElement('canvas');\n canvas.width = 800;\n canvas.height = 400;\n // Set the font and get the font to verify that it matches.\n // NOTE: Safari has a bug where it does not return the font-weight!\n // https://github.com/0xfe/vexflow/issues/1240#issuecomment-986504088\n const ctx = new CanvasContext(canvas.getContext('2d'));\n ctx.setFont('PetalumaScript', '100px', 'normal', 'italic');\n assert.equal(ctx.font, 'italic 100px PetalumaScript');\n const voice = new Voice();\n // Many elements do not override the default Element.TEXT_FONT.\n assert.propEqual(voice.fontInfo, Element.TEXT_FONT);\n voice.setFont('bold 32pt Arial');\n const fontInfo = voice.fontInfo;\n assert.equal(fontInfo === null || fontInfo === void 0 ? void 0 : fontInfo.size, '32pt');\n const flat = new Accidental('b');\n // eslint-disable-next-line\n // @ts-ignore access a protected member for testing purposes.\n assert.equal(flat.textFont, undefined); // The internal instance variable .textFont is undefined by default.\n // Add italic to the default font as defined in Element.TEXT_FONT (since Accidental does not override TEXT_FONT).\n flat.setFont(undefined, undefined, undefined, FontStyle.ITALIC);\n assert.equal(flat.getFont(), 'italic 10pt Arial, sans-serif');\n // Anything that is not set will be reset to the defaults.\n flat.setFont(undefined, undefined, FontWeight.BOLD, undefined);\n assert.equal(flat.getFont(), 'bold 10pt Arial, sans-serif');\n flat.setFont(undefined, undefined, FontWeight.BOLD, FontStyle.ITALIC);\n assert.equal(flat.getFont(), 'italic bold 10pt Arial, sans-serif');\n flat.setFont(undefined, undefined, FontWeight.BOLD, 'oblique');\n assert.equal(flat.getFont(), 'oblique bold 10pt Arial, sans-serif');\n // '' is equivalent to 'normal'. Neither will be included in the CSS font string.\n flat.setFont(undefined, undefined, 'normal', '');\n assert.equal(flat.getFont(), '10pt Arial, sans-serif');\n}\nfunction fontParsing(assert) {\n const b = new Bend('1/2', true);\n const bFont = b.fontInfo;\n // Check the default font.\n assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.family, Font.SANS_SERIF);\n assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.size, Font.SIZE);\n assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.weight, FontWeight.NORMAL);\n assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.style, FontStyle.NORMAL);\n const f1 = 'Roboto Slab, serif';\n const t = new TextNote({ duration: '4', font: { family: f1 } });\n assert.equal(f1, t.fontInfo.family);\n const n1 = new StaveNote({ keys: ['e/5'], duration: '4' });\n const n2 = new StaveNote({ keys: ['c/5'], duration: '4' });\n const tb = new TextBracket({ start: n1, stop: n2 });\n const f2 = tb.fontInfo;\n assert.equal(f2 === null || f2 === void 0 ? void 0 : f2.size, 15);\n assert.equal(f2 === null || f2 === void 0 ? void 0 : f2.style, FontStyle.ITALIC);\n // The line-height /3 is currently ignored.\n const f3 = Font.fromCSSString(`bold 1.5em/3 \"Lucida Sans Typewriter\", \"Lucida Console\", Consolas, monospace`);\n const f3SizeInPx = Font.convertSizeToPixelValue(f3.size);\n assert.equal(f3SizeInPx, 24);\n}\nfunction fontSizes(assert) {\n {\n const size = '17px';\n const sizeInEm = Font.convertSizeToPixelValue(size) / Font.scaleToPxFrom.em;\n assert.equal(sizeInEm, 1.0625);\n }\n {\n const size = '2em';\n const sizeInPx = Font.convertSizeToPixelValue(size);\n assert.equal(sizeInPx, 32);\n }\n {\n const pedal = new PedalMarking([]);\n assert.equal(pedal.getFont(), 'italic bold 12pt Times New Roman, serif');\n assert.equal(pedal.fontSizeInPoints, 12);\n assert.equal(pedal.fontSizeInPixels, 16);\n const doubledSizePx = pedal.fontSizeInPixels * 2; // Double the font size.\n assert.equal(doubledSizePx, 32);\n const doubledSizePt = Font.scaleSize(pedal.fontSizeInPoints, 2); // Double the font size.\n assert.equal(doubledSizePt, 24);\n assert.equal(Font.scaleSize('1.5em', 3), '4.5em');\n }\n}\nfunction setTextFontToGeorgia(options) {\n const factory = VexFlowTests.makeFactory(options, 400, 200);\n const stave = factory.Stave({ y: 40 });\n const score = factory.EasyScore();\n const voice1 = score.voice([\n factory.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }),\n factory.StaveNote({ keys: ['d/4', 'f/4'], stem_direction: -1, duration: 'q' }),\n factory.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }),\n ]);\n const defaultFont = TextNote.TEXT_FONT;\n // Set the default before we instantiate TextNote objects with the factory.\n TextNote.TEXT_FONT = {\n family: 'Georgia, Courier New, serif',\n size: 14,\n weight: 'bold',\n style: 'italic',\n };\n const voice2 = score.voice([\n factory\n .TextNote({ text: 'Here are some fun lyrics...', duration: 'w' })\n .setJustification(TextNote.Justification.LEFT),\n ]);\n const formatter = factory.Formatter();\n formatter.joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n factory.draw();\n // Restore the previous default, or else it will affect the rest of the tests.\n TextNote.TEXT_FONT = defaultFont;\n options.assert.ok(true);\n}\nfunction setMusicFontToPetaluma(options) {\n Flow.setMusicFont('Petaluma');\n const factory = VexFlowTests.makeFactory(options, 400, 200);\n const stave = factory.Stave({ y: 40 });\n const score = factory.EasyScore();\n const voice = score.voice([\n factory.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }),\n factory.StaveNote({ keys: ['d/4', 'f/4'], stem_direction: -1, duration: 'q' }),\n factory.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }),\n ]);\n const formatter = factory.Formatter();\n formatter.joinVoices([voice]).formatToStave([voice], stave);\n factory.draw();\n options.assert.ok(true);\n}\nVexFlowTests.register(FontTests);\nexport { FontTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Formatter Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Annotation, AnnotationVerticalJustify } from '../src/annotation';\nimport { Articulation } from '../src/articulation';\nimport { Beam } from '../src/beam';\nimport { Bend } from '../src/bend';\nimport { Dot } from '../src/dot';\nimport { Flow } from '../src/flow';\nimport { Font, FontWeight } from '../src/font';\nimport { Formatter } from '../src/formatter';\nimport { FretHandFinger } from '../src/frethandfinger';\nimport { ModifierPosition } from '../src/modifier';\nimport { Note } from '../src/note';\nimport { Registry } from '../src/registry';\nimport { Stave } from '../src/stave';\nimport { StaveConnector } from '../src/staveconnector';\nimport { StaveNote } from '../src/stavenote';\nimport { Stem } from '../src/stem';\nimport { StringNumber } from '../src/stringnumber';\nimport { Tables } from '../src/tables';\nimport { Tuplet } from '../src/tuplet';\nimport { Voice } from '../src/voice';\nimport { MockTickable } from './mocks';\nconst FormatterTests = {\n Start() {\n QUnit.module('Formatter');\n QUnit.test('TickContext Building', buildTickContexts);\n const run = VexFlowTests.runTests;\n run('Penultimate Note Padding', penultimateNote);\n run('Whitespace and justify', rightJustify);\n run('Notehead padding', noteHeadPadding);\n run('Justification and alignment with accidentals', accidentalJustification);\n run('Long measure taking full space', longMeasureProblems);\n run('Vertical alignment - few unaligned beats', unalignedNoteDurations1);\n run('Vertical alignment - many unaligned beats', unalignedNoteDurations2, { globalSoftmax: false });\n run('Vertical alignment - many unaligned beats (global softmax)', unalignedNoteDurations2, { globalSoftmax: true });\n run('Vertical alignment - many mixed elements', alignedMixedElements, { globalSoftmax: true });\n run('StaveNote - Justification', justifyStaveNotes);\n run('Notes with Tab', notesWithTab);\n run('Multiple Staves - Justified', multiStaves, { debug: true });\n run('Softmax', softMax);\n run('Mixtime', mixTime);\n run('Tight', tightNotes1);\n run('Tight 2', tightNotes2);\n run('Annotations', annotations);\n run('Proportional Formatting - No Tuning', proportional, { debug: true, iterations: 0 });\n run('Proportional Formatting - No Justification', proportional, { justify: false, debug: true, iterations: 0 });\n run('Proportional Formatting (20 iterations)', proportional, { debug: true, iterations: 20, alpha: 0.5 });\n },\n};\n/** Calculate the glyph's width in the current music font. */\n// How is this different from Glyph.getWidth()? The numbers don't match up.\nfunction getGlyphWidth(glyphName) {\n // `38` seems to be the `font_scale` specified in many classes, such as\n // Accidental, Articulation, Ornament, Strokes. Does this mean `38pt`???\n //\n // However, tables.ts specifies:\n // NOTATION_FONT_SCALE: 39,\n // TABLATURE_FONT_SCALE: 39,\n const musicFont = Tables.currentMusicFont();\n const glyph = musicFont.getGlyphs()[glyphName];\n const widthInEm = (glyph.x_max - glyph.x_min) / musicFont.getResolution();\n return widthInEm * 38 * Font.scaleToPxFrom.pt;\n}\nfunction buildTickContexts(assert) {\n function createTickable(beat) {\n return new MockTickable().setTicks(beat);\n }\n const BEAT = (1 * Flow.RESOLUTION) / 4;\n const tickables1 = [\n createTickable(BEAT).setWidth(10),\n createTickable(BEAT * 2).setWidth(20),\n createTickable(BEAT).setWidth(30),\n ];\n const tickables2 = [\n createTickable(BEAT * 2).setWidth(10),\n createTickable(BEAT).setWidth(20),\n createTickable(BEAT).setWidth(30),\n ];\n const voice1 = new Voice(Flow.TIME4_4);\n const voice2 = new Voice(Flow.TIME4_4);\n voice1.addTickables(tickables1);\n voice2.addTickables(tickables2);\n const formatter = new Formatter();\n const tContexts = formatter.createTickContexts([voice1, voice2]);\n assert.equal(tContexts.list.length, 4, 'Voices should have four tick contexts');\n assert.throws(() => formatter.getMinTotalWidth(), /NoMinTotalWidth/, 'Expected to throw exception');\n assert.ok(formatter.preCalculateMinTotalWidth([voice1, voice2]), 'Successfully runs preCalculateMinTotalWidth');\n assert.equal(formatter.getMinTotalWidth(), 88, 'Get minimum total width without passing voices');\n formatter.preFormat();\n assert.equal(formatter.getMinTotalWidth(), 88, 'Minimum total width');\n assert.equal(tickables1[0].getX(), tickables2[0].getX(), 'First notes of both voices have the same X');\n assert.equal(tickables1[2].getX(), tickables2[2].getX(), 'Last notes of both voices have the same X');\n assert.ok(tickables1[1].getX() < tickables2[1].getX(), 'Second note of voice 2 is to the right of the second note of voice 1');\n}\nfunction rightJustify(options) {\n const f = VexFlowTests.makeFactory(options, 1200, 150);\n const getTickables = (time, n, duration, duration2) => {\n const tickar = [];\n let i = 0;\n for (i = 0; i < n; ++i) {\n const dd = i === n - 1 ? duration2 : duration;\n tickar.push(new StaveNote({ keys: ['f/4'], duration: dd }));\n }\n return new Voice(time).addTickables(tickar);\n };\n const renderTest = (time, n, duration, duration2, x, width) => {\n const formatter = f.Formatter();\n const stave = f.Stave({ x, y: 20, width });\n // stave.addClef('treble').addTimeSignature('4/4');\n const voice = getTickables(time, n, duration, duration2);\n formatter.joinVoices([voice]).formatToStave([voice], stave);\n stave.draw();\n voice.draw(f.getContext(), stave);\n };\n renderTest({ num_beats: 4, beat_value: 4, resolution: 4 * 4096 }, 3, '4', '2', 10, 300);\n renderTest({ num_beats: 4, beat_value: 4, resolution: 4 * 4096 }, 1, 'w', 'w', 310, 300);\n renderTest({ num_beats: 3, beat_value: 4, resolution: 4 * 4096 }, 3, '4', '4', 610, 300);\n renderTest({ num_beats: 3, beat_value: 4, resolution: 4 * 4096 }, 6, '8', '8', 910, 300);\n options.assert.ok(true);\n}\nfunction penultimateNote(options) {\n const f = VexFlowTests.makeFactory(options, 500, 550);\n const score = f.EasyScore();\n const staffWidth = 310;\n let system = undefined;\n let voices = [];\n let notes = [];\n let note = undefined;\n let stave = undefined;\n let y = 10;\n const draw = (softmax) => {\n system = f.System({\n width: staffWidth,\n y,\n formatOptions: { align_rests: true },\n details: { softmaxFactor: softmax },\n });\n notes = [];\n voices = [];\n note = score.notes('C4/8/r', { clef: 'bass' })[0];\n notes.push(note);\n note = score.notes('A3/8', { stem: 'up', clef: 'bass' })[0];\n notes.push(note);\n note = score.notes('C4/4', { stem: 'up', clef: 'bass' })[0];\n notes.push(note);\n voices.push(score.voice(notes).setMode(2));\n notes = [];\n note = score.notes('( F3 A3 )/4', { stem: 'down', clef: 'bass' })[0];\n notes.push(note);\n note = score.notes('B4/4/r', {})[0];\n notes.push(note);\n voices.push(score.voice(notes).setMode(2));\n notes = [];\n stave = system.addStave({ voices: voices });\n stave.addClef('bass');\n stave.addTimeSignature('2/4');\n voices = [];\n f.draw();\n f.getContext().fillText(`softmax: ${softmax.toString()}`, staffWidth + 20, y + 50);\n y += 100;\n };\n draw(15);\n draw(10);\n draw(5);\n draw(2);\n draw(1);\n options.assert.ok(true);\n}\nfunction noteHeadPadding(options) {\n const registry = new Registry();\n Registry.enableDefaultRegistry(registry);\n const f = VexFlowTests.makeFactory(options, 600, 300);\n const score = f.EasyScore();\n score.set({ time: '9/8' });\n const notes1 = score.notes('(d5 f5)/8,(c5 e5)/8,(d5 f5)/8,(c5 e5)/2.');\n const beams = [new Beam(notes1.slice(0, 3), true)];\n const voice1 = new Voice().setMode(Voice.Mode.SOFT);\n const notes2 = score.notes('(g4 an4)/2.,(g4 a4)/4.', { clef: 'treble' });\n const voice2 = new Voice().setMode(Voice.Mode.SOFT);\n voice2.addTickables(notes2);\n voice1.addTickables(notes1);\n const formatter = f.Formatter().joinVoices([voice1]).joinVoices([voice2]);\n const width = formatter.preCalculateMinTotalWidth([voice1, voice2]);\n formatter.format([voice1, voice2], width);\n const staveWidth = width + Stave.defaultPadding;\n const stave1 = f.Stave({ y: 50, width: staveWidth });\n const stave2 = f.Stave({ y: 150, width: staveWidth });\n stave1.draw();\n stave2.draw();\n voice1.draw(f.getContext(), stave1);\n voice2.draw(f.getContext(), stave2);\n beams.forEach((b) => b.setContext(f.getContext()).draw());\n options.assert.ok(true);\n}\nfunction longMeasureProblems(options) {\n const registry = new Registry();\n Registry.enableDefaultRegistry(registry);\n const f = VexFlowTests.makeFactory(options, 1500, 300);\n const score = f.EasyScore();\n score.set({ time: '4/4' });\n const notes1 = score.notes('b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/2,b4/8,b4/8');\n const voice1 = new Voice().setMode(Voice.Mode.SOFT);\n const notes2 = score.notes('d3/4,(ab3 f4)/2,d3/4,ab3/4,d3/2,ab3/4,d3/4,ab3/2,d3/4,ab3/4,d3/2,ab3/4,d3/4,ab3/2,d3/4,ab3/4,d3/2,ab3/4,d4/4,d4/2,d4/4', { clef: 'bass' });\n const voice2 = new Voice().setMode(Voice.Mode.SOFT);\n voice2.addTickables(notes2);\n voice1.addTickables(notes1);\n const formatter = f.Formatter().joinVoices([voice1]).joinVoices([voice2]);\n const width = formatter.preCalculateMinTotalWidth([voice1, voice2]);\n formatter.format([voice1, voice2], width);\n const stave1 = f.Stave({ y: 50, width: width + Stave.defaultPadding });\n const stave2 = f.Stave({ y: 200, width: width + Stave.defaultPadding });\n stave1.draw();\n stave2.draw();\n voice1.draw(f.getContext(), stave1);\n voice2.draw(f.getContext(), stave2);\n options.assert.ok(true);\n}\nfunction accidentalJustification(options) {\n const f = VexFlowTests.makeFactory(options, 600, 300);\n const score = f.EasyScore();\n const notes11 = score.notes('a4/2, a4/4, a4/8, ab4/16, an4/16');\n const voice11 = score.voice(notes11, { time: '4/4' });\n const notes21 = score.notes('c4/2, d4/8, d4/8, e4/8, e4/8');\n const voice21 = score.voice(notes21, { time: '4/4' });\n let beams = Beam.generateBeams(notes11.slice(2));\n beams = beams.concat(beams, Beam.generateBeams(notes21.slice(1, 3)));\n beams = beams.concat(Beam.generateBeams(notes21.slice(3)));\n const formatter = f.Formatter({}).joinVoices([voice11]).joinVoices([voice21]);\n const width = formatter.preCalculateMinTotalWidth([voice11, voice21]);\n const stave11 = f.Stave({ y: 20, width: width + Stave.defaultPadding });\n const stave21 = f.Stave({ y: 130, width: width + Stave.defaultPadding });\n formatter.format([voice11, voice21], width);\n const ctx = f.getContext();\n stave11.setContext(ctx).draw();\n stave21.setContext(ctx).draw();\n voice11.draw(ctx, stave11);\n voice21.draw(ctx, stave21);\n beams.forEach((b) => b.setContext(ctx).draw());\n options.assert.ok(true);\n}\nfunction unalignedNoteDurations1(options) {\n const f = VexFlowTests.makeFactory(options, 600, 250);\n const score = f.EasyScore();\n const notes11 = [\n new StaveNote({ keys: ['a/4'], duration: '8' }),\n new StaveNote({ keys: ['b/4'], duration: '4' }),\n new StaveNote({ keys: ['b/4'], duration: '8' }),\n ];\n const notes21 = [\n new StaveNote({ keys: ['a/4'], duration: '16' }),\n new StaveNote({ keys: ['b/4.'], duration: '4' }),\n new StaveNote({ keys: ['a/4'], duration: '8d' }),\n ];\n Dot.buildAndAttach([notes21[2]], { all: true });\n const ctx = f.getContext();\n const voice11 = score.voice(notes11, { time: '2/4' }).setMode(Voice.Mode.SOFT);\n const voice21 = score.voice(notes21, { time: '2/4' }).setMode(Voice.Mode.SOFT);\n const beams21 = Beam.generateBeams(notes21);\n const beams11 = Beam.generateBeams(notes11);\n const formatter = new Formatter();\n formatter.joinVoices([voice11]);\n formatter.joinVoices([voice21]);\n const width = formatter.preCalculateMinTotalWidth([voice11, voice21]);\n const stave11 = f.Stave({ y: 20, width: width + Stave.defaultPadding });\n const stave21 = f.Stave({ y: 130, width: width + Stave.defaultPadding });\n formatter.format([voice11, voice21], width);\n stave11.setContext(ctx).draw();\n stave21.setContext(ctx).draw();\n voice11.draw(ctx, stave11);\n voice21.draw(ctx, stave21);\n beams21.forEach((b) => b.setContext(ctx).draw());\n beams11.forEach((b) => b.setContext(ctx).draw());\n options.assert.ok(voice11.getTickables()[1].getX() > voice21.getTickables()[1].getX());\n}\nfunction unalignedNoteDurations2(options) {\n const notes1 = [\n new StaveNote({ keys: ['b/4'], duration: '8r' }),\n new StaveNote({ keys: ['g/4'], duration: '16' }),\n new StaveNote({ keys: ['c/5'], duration: '16' }),\n new StaveNote({ keys: ['e/5'], duration: '16' }),\n new StaveNote({ keys: ['g/4'], duration: '16' }),\n new StaveNote({ keys: ['c/5'], duration: '16' }),\n new StaveNote({ keys: ['e/5'], duration: '16' }),\n new StaveNote({ keys: ['b/4'], duration: '8r' }),\n new StaveNote({ keys: ['g/4'], duration: '16' }),\n new StaveNote({ keys: ['c/5'], duration: '16' }),\n new StaveNote({ keys: ['e/5'], duration: '16' }),\n new StaveNote({ keys: ['g/4'], duration: '16' }),\n new StaveNote({ keys: ['c/5'], duration: '16' }),\n new StaveNote({ keys: ['e/5'], duration: '16' }),\n ];\n const notes2 = [\n new StaveNote({ keys: ['a/4'], duration: '16r' }),\n new StaveNote({ keys: ['e/4.'], duration: '8d' }),\n new StaveNote({ keys: ['e/4'], duration: '4' }),\n new StaveNote({ keys: ['a/4'], duration: '16r' }),\n new StaveNote({ keys: ['e/4.'], duration: '8d' }),\n new StaveNote({ keys: ['e/4'], duration: '4' }),\n ];\n const f = VexFlowTests.makeFactory(options, 750, 280);\n const context = f.getContext();\n const voice1 = new Voice({ num_beats: 4, beat_value: 4 });\n voice1.addTickables(notes1);\n const voice2 = new Voice({ num_beats: 4, beat_value: 4 });\n voice2.addTickables(notes2);\n const formatter = new Formatter({ globalSoftmax: options.params.globalSoftmax });\n formatter.joinVoices([voice1]);\n formatter.joinVoices([voice2]);\n const width = formatter.preCalculateMinTotalWidth([voice1, voice2]);\n formatter.format([voice1, voice2], width);\n const stave1 = new Stave(10, 40, width + Stave.defaultPadding);\n const stave2 = new Stave(10, 100, width + Stave.defaultPadding);\n stave1.setContext(context).draw();\n stave2.setContext(context).draw();\n voice1.draw(context, stave1);\n voice2.draw(context, stave2);\n options.assert.ok(voice1.getTickables()[1].getX() > voice2.getTickables()[1].getX());\n}\nfunction alignedMixedElements(options) {\n const f = VexFlowTests.makeFactory(options, 800, 500);\n const context = f.getContext();\n const stave = new Stave(10, 200, 400);\n const stave2 = new Stave(410, 200, 400);\n const notes = [\n new StaveNote({ keys: ['c/5'], duration: '8' })\n .addModifier(new Accidental('##'), 0)\n .addModifier(new FretHandFinger('4').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new StringNumber('3').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a>').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a^').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('am').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Annotation('yyyy').setVerticalJustification(AnnotationVerticalJustify.BOTTOM), 0)\n .addModifier(new Annotation('xxxx').setVerticalJustification(AnnotationVerticalJustify.BOTTOM).setFont('sans-serif', 20), 0)\n .addModifier(new Annotation('ttt').setVerticalJustification(AnnotationVerticalJustify.BOTTOM).setFont('sans-serif', 20), 0),\n new StaveNote({ keys: ['c/5'], duration: '8', stem_direction: Stem.DOWN })\n .addModifier(new StringNumber('3').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a>').setPosition(ModifierPosition.BELOW), 0),\n new StaveNote({ keys: ['c/5'], duration: '8' }),\n ];\n const notes2 = [\n new StaveNote({ keys: ['c/5'], duration: '8' })\n .addModifier(new StringNumber('3').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Annotation('yyyy').setVerticalJustification(AnnotationVerticalJustify.TOP), 0),\n new StaveNote({ keys: ['c/5'], duration: '8', stem_direction: Stem.DOWN })\n .addModifier(new FretHandFinger('4').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new StringNumber('3').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a>').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a^').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('am').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Annotation('yyyy').setVerticalJustification(AnnotationVerticalJustify.TOP), 0)\n .addModifier(new Annotation('xxxx').setVerticalJustification(AnnotationVerticalJustify.TOP).setFont('sans-serif', 20), 0)\n .addModifier(new Annotation('ttt').setVerticalJustification(AnnotationVerticalJustify.TOP).setFont('sans-serif', 20), 0),\n new StaveNote({ keys: ['c/5'], duration: '8' }),\n ];\n const tuplet = new Tuplet(notes).setTupletLocation(-1);\n const tuplet2 = new Tuplet(notes2).setTupletLocation(1);\n Formatter.FormatAndDraw(context, stave, notes);\n Formatter.FormatAndDraw(context, stave2, notes2);\n stave.setContext(context).draw();\n stave2.setContext(context).draw();\n tuplet.setContext(context).draw();\n tuplet2.setContext(context).draw();\n options.assert.ok(true);\n}\nfunction justifyStaveNotes(options) {\n const f = VexFlowTests.makeFactory(options, 520, 280);\n const ctx = f.getContext();\n const score = f.EasyScore();\n let y = 30;\n function justifyToWidth(width) {\n f.Stave({ y: y }).addClef('treble');\n const voices = [\n score.voice(score.notes('(cbb4 en4 a4)/2, (d4 e4 f4)/8, (d4 f4 a4)/8, (cn4 f#4 a4)/4', { stem: 'down' })),\n score.voice(score.notes('(bb4 e#5 a5)/4, (d5 e5 f5)/2, (c##5 fb5 a5)/4', { stem: 'up' })),\n ];\n f.Formatter()\n .joinVoices(voices)\n .format(voices, width - (Stave.defaultPadding + getGlyphWidth('gClef')));\n // Show the the width of notes via a horizontal line with red, green, yellow, blue, gray indicators.\n voices[0].getTickables().forEach((note) => Note.plotMetrics(ctx, note, y + 140)); // Bottom line.\n voices[1].getTickables().forEach((note) => Note.plotMetrics(ctx, note, y - 20)); // Top Line\n y += 210;\n }\n justifyToWidth(520);\n f.draw();\n options.assert.ok(true);\n}\nfunction notesWithTab(options) {\n const f = VexFlowTests.makeFactory(options, 420, 580);\n const score = f.EasyScore();\n let y = 10;\n function justifyToWidth(width) {\n const stave = f.Stave({ y: y }).addClef('treble');\n const voice = score.voice(score.notes('d#4/2, (c4 d4)/8, d4/8, (c#4 e4 a4)/4', { stem: 'up' }));\n y += 100;\n f.TabStave({ y: y }).addTabGlyph().setNoteStartX(stave.getNoteStartX());\n const tabVoice = score.voice([\n f.TabNote({ positions: [{ str: 3, fret: 6 }], duration: '2' }).addModifier(new Bend('Full'), 0),\n f\n .TabNote({\n positions: [\n { str: 2, fret: 3 },\n { str: 3, fret: 5 },\n ],\n duration: '8',\n })\n .addModifier(new Bend('Unison'), 1),\n f.TabNote({ positions: [{ str: 3, fret: 7 }], duration: '8' }),\n f.TabNote({\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 7 },\n { str: 2, fret: 5 },\n ],\n duration: '4',\n }),\n ]);\n f.Formatter().joinVoices([voice]).joinVoices([tabVoice]).format([voice, tabVoice], width);\n y += 150;\n }\n justifyToWidth(0);\n justifyToWidth(300);\n f.draw();\n options.assert.ok(true);\n}\nfunction multiStaves(options) {\n const f = VexFlowTests.makeFactory(options, 600, 400);\n const ctx = f.getContext();\n const score = f.EasyScore();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Draw 3 Staves (one measure each).\n const notes11 = score.notes('f4/4, d4/8, g4/4, eb4/8');\n const notes21 = score.notes('d4/8, d4, d4, d4, e4, eb4');\n const notes31 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' });\n let voices = [\n score.voice(notes11, { time: '6/8' }),\n score.voice(notes21, { time: '6/8' }),\n score.voice(notes31, { time: '6/8' }),\n ];\n let formatter = f.Formatter();\n voices.forEach((v) => formatter.joinVoices([v]));\n let width = formatter.preCalculateMinTotalWidth(voices);\n formatter.format(voices, width);\n let beams = [\n new Beam(notes21.slice(0, 3), true),\n new Beam(notes21.slice(3, 6), true),\n new Beam(notes31.slice(0, 3), true),\n new Beam(notes31.slice(3, 6), true),\n ];\n const staveYs = [20, 130, 250];\n let staveWidth = width + getGlyphWidth('gClef') + getGlyphWidth('timeSig8') + Stave.defaultPadding;\n let staves = [\n f.Stave({ y: staveYs[0], width: staveWidth }).addClef('treble').addTimeSignature('6/8'),\n f.Stave({ y: staveYs[1], width: staveWidth }).addClef('treble').addTimeSignature('6/8'),\n f.Stave({ y: staveYs[2], width: staveWidth }).addClef('bass').addTimeSignature('6/8'),\n ];\n f.StaveConnector({\n top_stave: staves[1],\n bottom_stave: staves[2],\n type: 'brace',\n });\n for (let i = 0; i < staves.length; ++i) {\n staves[i].setContext(ctx).draw();\n voices[i].draw(ctx, staves[i]);\n }\n beams.forEach((beam) => beam.setContext(ctx).draw());\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Draw 3 more staves (one measure each).\n // These are adjacent to the first set of staves, representing the second measure of each stave.\n const notes12 = score.notes('ab4/4, bb4/8, (cb5 eb5)/4[stem=\"down\"], d5/8[stem=\"down\"]');\n const notes22 = score.notes('(eb4 ab4)/4., (c4 eb4 ab4)/4, db5/8', { stem: 'up' });\n const notes32 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' });\n voices = [\n score.voice(notes12, { time: '6/8' }),\n score.voice(notes22, { time: '6/8' }),\n score.voice(notes32, { time: '6/8' }),\n ];\n formatter = f.Formatter();\n voices.forEach((v) => formatter.joinVoices([v]));\n width = formatter.preCalculateMinTotalWidth(voices);\n const staveX = staves[0].getX() + staves[0].getWidth();\n staveWidth = width + Stave.defaultPadding;\n staves = [\n f.Stave({ x: staveX, y: staveYs[0], width: staveWidth }),\n f.Stave({ x: staveX, y: staveYs[1], width: staveWidth }),\n f.Stave({ x: staveX, y: staveYs[2], width: staveWidth }),\n ];\n formatter.format(voices, width);\n beams = [\n // Add beams to each group of 3 notes.\n new Beam(notes32.slice(0, 3), true),\n new Beam(notes32.slice(3, 6), true),\n ];\n for (let i = 0; i < staves.length; ++i) {\n staves[i].setContext(ctx).draw();\n voices[i].draw(ctx, staves[i]);\n voices[i].getTickables().forEach((note) => Note.plotMetrics(ctx, note, staveYs[i] - 20));\n }\n beams.forEach((beam) => beam.setContext(ctx).draw());\n options.assert.ok(true);\n}\nfunction proportional(options) {\n const debug = options.params.debug;\n Registry.enableDefaultRegistry(new Registry());\n const f = VexFlowTests.makeFactory(options, 775, 750);\n const system = f.System({\n x: 50,\n autoWidth: true,\n debugFormatter: debug,\n noJustification: !(options.params.justify === undefined && true),\n formatIterations: options.params.iterations,\n details: { alpha: options.params.alpha },\n });\n const score = f.EasyScore();\n const voices = [\n score.notes('c5/8, c5'),\n score.tuplet(score.notes('a4/8, a4, a4'), { notes_occupied: 2 }),\n score.notes('c5/16, c5, c5, c5'),\n score.tuplet(score.notes('a4/16, a4, a4, a4, a4'), { notes_occupied: 4 }),\n score.tuplet(score.notes('a4/32, a4, a4, a4, a4, a4, a4'), { notes_occupied: 8 }),\n ];\n const createVoice = (notes) => score.voice(notes, { time: '1/4' });\n const createStave = (voice) => system\n .addStave({ voices: [voice], debugNoteMetrics: debug })\n .addClef('treble')\n .addTimeSignature('1/4');\n voices.map(createVoice).forEach(createStave);\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n // Debugging: Show how many elements of each type we have added.\n // const typeMap = Registry.getDefaultRegistry().index.type;\n // const table = Object.keys(typeMap).map((typeName) => typeName + ': ' + Object.keys(typeMap[typeName]).length);\n // console.log(table);\n Registry.disableDefaultRegistry();\n options.assert.ok(true);\n}\nfunction softMax(options) {\n const f = VexFlowTests.makeFactory(options, 550, 500);\n const textX = 450 / 0.8;\n f.getContext().scale(0.8, 0.8);\n function draw(y, factor) {\n const score = f.EasyScore();\n const system = f.System({\n x: 100,\n y,\n details: { softmaxFactor: factor },\n autoWidth: true,\n });\n system\n .addStave({\n voices: [\n score.voice(score\n .notes('C#5/h, a4/q')\n .concat(score.beam(score.notes('Abb4/8, A4/8')))\n .concat(score.beam(score.notes('A4/16, A#4, A4, Ab4/32, A4'))), { time: '5/4' }),\n ],\n })\n .addClef('treble')\n .addTimeSignature('5/4');\n f.draw();\n f.getContext().fillText(`softmax: ${factor.toString()}`, textX, y + 50);\n options.assert.ok(true);\n }\n draw(50, 1);\n draw(150, 2);\n draw(250, 5);\n draw(350, 10);\n draw(450, 15);\n}\nfunction mixTime(options) {\n const f = VexFlowTests.makeFactory(options, 400 + Stave.defaultPadding, 250);\n f.getContext().scale(0.8, 0.8);\n const score = f.EasyScore();\n const system = f.System({\n details: {},\n autoWidth: true,\n debugFormatter: true,\n });\n system\n .addStave({\n voices: [score.voice(score.notes('C#5/q, B4').concat(score.beam(score.notes('A4/8, E4, C4, D4'))))],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n system\n .addStave({\n voices: [score.voice(score.notes('C#5/q, B4, B4').concat(score.tuplet(score.beam(score.notes('A4/8, E4, C4')))))],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n f.draw();\n options.assert.ok(true);\n}\nfunction tightNotes1(options) {\n const f = VexFlowTests.makeFactory(options, 440, 250);\n f.getContext().scale(0.8, 0.8);\n const score = f.EasyScore();\n const system = f.System({\n autoWidth: true,\n debugFormatter: true,\n details: { maxIterations: 10 },\n });\n system\n .addStave({\n voices: [\n score.voice(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')).concat(score.notes('B4/q, B4'))),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n system\n .addStave({\n voices: [\n score.voice(score.notes('B4/q, B4').concat(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')))),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n f.draw();\n options.assert.ok(true);\n}\nfunction tightNotes2(options) {\n const f = VexFlowTests.makeFactory(options, 440, 250);\n f.getContext().scale(0.8, 0.8);\n const score = f.EasyScore();\n const system = f.System({\n autoWidth: true,\n debugFormatter: true,\n });\n system\n .addStave({\n voices: [\n score.voice(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')).concat(score.notes('B4/q, B4'))),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n system\n .addStave({\n voices: [score.voice(score.notes('B4/w'))],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n f.draw();\n options.assert.ok(true);\n}\nfunction annotations(options) {\n const pageWidth = 916;\n const pageHeight = 600;\n const f = VexFlowTests.makeFactory(options, pageWidth, pageHeight);\n const context = f.getContext();\n const lyrics1 = ['ipso', 'ipso-', 'ipso', 'ipso', 'ipsoz', 'ipso-', 'ipso', 'ipso', 'ipso', 'ip', 'ipso'];\n const lyrics2 = ['ipso', 'ipso-', 'ipsoz', 'ipso', 'ipso', 'ipso-', 'ipso', 'ipso', 'ipso', 'ip', 'ipso'];\n const smar = [\n {\n sm: 5,\n width: 550,\n lyrics: lyrics1,\n title: '550px,softMax:5',\n },\n {\n sm: 5,\n width: 550,\n lyrics: lyrics2,\n title: '550px,softmax:5,different word order',\n },\n {\n sm: 10,\n width: 550,\n lyrics: lyrics2,\n title: '550px,softmax:10',\n },\n {\n sm: 15,\n width: 550,\n lyrics: lyrics2,\n title: '550px,softmax:15',\n },\n ];\n const rowSize = 140;\n const beats = 12;\n const beatsPer = 8;\n const beamGroup = 3;\n const durations = ['8d', '16', '8', '8d', '16', '8', '8d', '16', '8', '4', '8'];\n const beams = [];\n let y = 40;\n smar.forEach((sm) => {\n const stave = new Stave(10, y, sm.width);\n const notes = [];\n let iii = 0;\n context.fillText(sm.title, 100, y);\n y += rowSize;\n durations.forEach((dd) => {\n const note = new StaveNote({ keys: ['b/4'], duration: dd });\n if (dd.indexOf('d') >= 0) {\n Dot.buildAndAttach([note], { all: true });\n }\n if (sm.lyrics.length > iii) {\n note.addModifier(new Annotation(sm.lyrics[iii])\n .setVerticalJustification(Annotation.VerticalJustify.BOTTOM)\n .setFont(Font.SERIF, 12, FontWeight.NORMAL));\n }\n notes.push(note);\n iii += 1;\n });\n notes.forEach((note) => {\n if (note.getDuration().indexOf('d') >= 0) {\n Dot.buildAndAttach([note], { all: true });\n }\n });\n // Don't beam the last group\n let notesToBeam = [];\n notes.forEach((note) => {\n if (note.getIntrinsicTicks() < 4096) {\n notesToBeam.push(note);\n if (notesToBeam.length >= beamGroup) {\n beams.push(new Beam(notesToBeam));\n notesToBeam = [];\n }\n }\n else {\n notesToBeam = [];\n }\n });\n const voice1 = new Voice({ num_beats: beats, beat_value: beatsPer }).setMode(Voice.Mode.SOFT).addTickables(notes);\n const fmt = new Formatter({ softmaxFactor: sm.sm, maxIterations: 2 }).joinVoices([voice1]);\n fmt.format([voice1], sm.width - 11);\n stave.setContext(context).draw();\n voice1.draw(context, stave);\n beams.forEach((b) => b.setContext(context).draw());\n });\n options.assert.ok(true);\n}\nVexFlowTests.register(FormatterTests);\nexport { FormatterTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Fraction Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Fraction } from '../src/fraction';\nconst FractionTests = {\n Start() {\n QUnit.module('Fraction');\n QUnit.test('Basic', basic);\n QUnit.test('With Other Fractions', withOtherFractions);\n },\n};\nfunction basic(assert) {\n const f_1_2 = new Fraction(1, 2);\n assert.ok(f_1_2.equals(0.5), 'Fraction: 1/2 equals 0.5');\n assert.ok(f_1_2.equals(new Fraction(1, 2)), 'Fraction: 1/2 equals 1/2');\n assert.ok(f_1_2.equals(new Fraction(2, 4)), 'Fraction: 1/2 equals 2/4');\n assert.notOk(f_1_2.greaterThan(1), 'Fraction: ! 1/2 > 1');\n assert.ok(f_1_2.greaterThan(0.2), 'Fraction: 1/2 > 0.2');\n assert.ok(f_1_2.greaterThanEquals(0.2), 'Fraction: 1/2 >= 0.2');\n assert.ok(f_1_2.greaterThanEquals(0.5), 'Fraction: 1/2 >= 0.5');\n assert.notOk(f_1_2.greaterThanEquals(1), 'Fraction: ! 1/2 >= 1');\n assert.notOk(f_1_2.lessThan(0.5), 'Fraction: ! 1/2 < 0.5');\n assert.ok(f_1_2.lessThan(1), 'Fraction: 1/2 < 1');\n assert.ok(f_1_2.lessThanEquals(0.6), 'Fraction: 1/2 <= 0.6');\n assert.ok(f_1_2.lessThanEquals(0.5), 'Fraction: 1/2 <= 0.5');\n assert.notOk(f_1_2.lessThanEquals(0.4), 'Fraction: ! 1/2 <= 0.4');\n const f_05 = f_1_2.copy(0.5);\n assert.strictEqual(f_05, f_1_2, 'Fraction: f_05 === f_1_2');\n assert.strictEqual(f_05.toString(), '0.5/1', 'Fraction: f_05.toString() === \"0.5/1\"');\n assert.strictEqual(f_05.toSimplifiedString(), '1/2', 'Fraction: f_05.toSimplifiedString() === \"1/2\"');\n const tF_n = f_05.clone();\n assert.notStrictEqual(tF_n, f_05, 'Fraction: tF_n !== f_05');\n assert.notEqual(tF_n, f_05, 'Fraction: tF_n != f_05');\n assert.deepEqual(tF_n, f_05, 'tF_n deepEqual f_05');\n assert.notDeepEqual(tF_n, {}, 'tF_n notDeepEqual {}');\n tF_n.subtract(-0.5);\n assert.ok(tF_n.equals(1), 'Fraction: 0.5 -(-0.5) equals 1');\n tF_n.add(1);\n assert.ok(tF_n.equals(2), 'Fraction: 1 + 1 equals 2');\n tF_n.multiply(2);\n assert.ok(tF_n.equals(4), 'Fraction: 2 * 2 equals 4');\n tF_n.divide(2);\n assert.ok(tF_n.equals(2), 'Fraction: 4 / 2 equals 2');\n // Lowest common multiple.\n assert.equal(Fraction.LCMM([]), 0);\n assert.equal(Fraction.LCMM([17]), 17);\n assert.equal(Fraction.LCMM([2, 5]), 10);\n assert.equal(Fraction.LCMM([15, 3, 5]), 15);\n assert.equal(Fraction.LCMM([2, 4, 6]), 12);\n assert.equal(Fraction.LCMM([2, 3, 4, 5]), 60);\n assert.equal(Fraction.LCMM([12, 15, 10, 75]), 300);\n // Greatest common divisor.\n assert.equal(Fraction.GCD(0, 0), 0);\n assert.equal(Fraction.GCD(0, 99), 99);\n assert.equal(Fraction.GCD(77, 0), 77);\n assert.equal(Fraction.GCD(42, 14), 14);\n assert.equal(Fraction.GCD(15, 10), 5);\n}\nfunction withOtherFractions(assert) {\n const f_1_2 = new Fraction(1, 2);\n const f_1_4 = new Fraction(1, 4);\n const f_1_8 = new Fraction(1, 8);\n const f_2 = new Fraction(2, 1);\n // IMPORTANT NOTE: Fraction methods modify the existing Fraction object.\n // They do not return new objects.\n // Use clone() if you don't want to modify the original object.\n const a = f_1_2.clone().multiply(f_1_2);\n assert.ok(a.equals(f_1_4), '1/2 x 1/2 == 1/4');\n const b = f_1_2.clone().divide(f_1_4);\n assert.ok(b.equals(f_2), '1/2 / 1/4 == 2');\n const c = f_2.clone().subtract(f_1_2).subtract(f_1_2).subtract(f_1_4); // 3/4\n const d = f_1_8.clone().add(f_1_8).add(f_1_8).multiply(f_2);\n assert.ok(c.equals(d), '2-1/2-1/2-1/4 == (1/8+1/8+1/8)*(2/1)');\n assert.equal(c.value(), 0.75, '3/4 == 0.75');\n const e = f_1_8.clone().add(f_1_4).add(f_1_8);\n assert.ok(e.equals(f_1_2), '1/8 + 1/4 + 1/8 == 1/2');\n}\nVexFlowTests.register(FractionTests);\nexport { FractionTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// GhostNote Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nconst GhostNoteTests = {\n Start() {\n QUnit.module('GhostNote');\n const run = VexFlowTests.runTests;\n run('GhostNote Basic', basic);\n run('GhostNote Dotted', dotted);\n },\n};\n/**\n * Helper function to set up the stave, easyscore, voice, and to format & draw.\n */\nfunction createTest(addItems) {\n return (options) => {\n const factory = VexFlowTests.makeFactory(options, 550);\n const stave = factory.Stave();\n const score = factory.EasyScore();\n addItems(factory, score);\n const voices = factory.getVoices();\n factory.Formatter().joinVoices(voices).formatToStave(voices, stave);\n factory.draw();\n options.assert.ok(true, 'all pass');\n };\n}\nconst basic = createTest((f, score) => {\n // Top Voice\n const voiceTop = score.voice(score.notes('f#5/4, f5, db5, c5, c5/8, d5, fn5, e5, d5, c5', { stem: 'up' }), {\n time: '7/4',\n });\n const notesTop = voiceTop.getTickables();\n f.Beam({ notes: notesTop.slice(4, 8) });\n f.Beam({ notes: notesTop.slice(8, 10) });\n // Bottom Voice\n score.voice([\n f.GhostNote({ duration: '2' }),\n f.StaveNote({ keys: ['f/4'], stem_direction: -1, duration: '4' }),\n f.GhostNote({ duration: '4' }),\n f.StaveNote({ keys: ['e/4'], stem_direction: -1, duration: '4' }),\n f.GhostNote({ duration: '8' }),\n f.StaveNote({ keys: ['d/4'], stem_direction: -1, duration: '8' }).addModifier(f.Accidental({ type: '##' }), 0),\n f.StaveNote({ keys: ['c/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4'], stem_direction: -1, duration: '8' }),\n ], { time: '7/4' });\n});\n/**\n * A ghost note is invisible, but takes up space on the stave corresponding to its duration.\n * '4d' is a dotted quarter note, equivalent to a quarter + eighth note.\n */\nconst dotted = createTest((f, score) => {\n const voice1 = score.voice([\n f.GhostNote({ duration: '4d' }),\n f.StaveNote({ duration: '8', keys: ['f/5'], stem_direction: 1 }),\n f.StaveNote({ duration: '4', keys: ['d/5'], stem_direction: 1 }),\n f.StaveNote({ duration: '8', keys: ['c/5'], stem_direction: 1 }),\n f.StaveNote({ duration: '16', keys: ['c/5'], stem_direction: 1 }),\n f.StaveNote({ duration: '16', keys: ['d/5'], stem_direction: 1 }),\n f.GhostNote({ duration: '2dd' }),\n f.StaveNote({ duration: '8', keys: ['f/5'], stem_direction: 1 }),\n ], { time: '8/4' });\n const voice2 = score.voice([\n f.StaveNote({ duration: '4', keys: ['f/4'], stem_direction: -1 }),\n f.StaveNote({ duration: '8', keys: ['e/4'], stem_direction: -1 }),\n f.StaveNote({ duration: '8', keys: ['d/4'], stem_direction: -1 }),\n f.GhostNote({ duration: '4dd' }),\n f.StaveNote({ duration: '16', keys: ['c/4'], stem_direction: -1 }),\n f.StaveNote({ duration: '2', keys: ['c/4'], stem_direction: -1 }),\n f.StaveNote({ duration: '4', keys: ['d/4'], stem_direction: -1 }),\n f.StaveNote({ duration: '8', keys: ['f/4'], stem_direction: -1 }),\n f.StaveNote({ duration: '8', keys: ['e/4'], stem_direction: -1 }),\n ], { time: '8/4' });\n const notes1 = voice1.getTickables();\n const notes2 = voice2.getTickables();\n const addAccidental = (note, type) => note.addModifier(f.Accidental({ type }), 0);\n addAccidental(notes1[1], 'bb');\n addAccidental(notes1[4], '#');\n addAccidental(notes1[7], 'n');\n addAccidental(notes2[0], '#');\n addAccidental(notes2[4], 'b');\n addAccidental(notes2[5], '#');\n addAccidental(notes2[7], 'n');\n f.Beam({ notes: notes1.slice(3, 6) });\n f.Beam({ notes: notes2.slice(1, 3) });\n f.Beam({ notes: notes2.slice(7, 9) });\n});\nVexFlowTests.register(GhostNoteTests);\nexport { GhostNoteTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// GlyphNote Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { ChordSymbol } from '../src/chordsymbol';\nimport { Glyph } from '../src/glyph';\nimport { Registry } from '../src/registry';\nimport { StaveConnector } from '../src/staveconnector';\nconst GlyphNoteTests = {\n Start() {\n QUnit.module('GlyphNote');\n const run = VexFlowTests.runTests;\n run('GlyphNote with ChordSymbols', chordChanges, { debug: false, noPadding: false });\n run('GlyphNote Positioning', basic, { debug: false, noPadding: false });\n run('GlyphNote No Stave Padding', basic, { debug: true, noPadding: true });\n run('GlyphNote RepeatNote', repeatNote, { debug: false, noPadding: true });\n },\n};\nfunction chordChanges(options) {\n Registry.enableDefaultRegistry(new Registry());\n const f = VexFlowTests.makeFactory(options, 300, 200);\n const system = f.System({\n x: 50,\n width: 250,\n debugFormatter: options.params.debug,\n noPadding: options.params.noPadding,\n details: { alpha: options.params.alpha },\n });\n const score = f.EasyScore();\n const notes = [\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }),\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }),\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }),\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }),\n ];\n const chord1 = f\n .ChordSymbol({ reportWidth: false })\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('(#11b9)', { symbolModifier: ChordSymbol.symbolModifiers.SUPERSCRIPT });\n const chord2 = f\n .ChordSymbol()\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('#11', { symbolModifier: ChordSymbol.symbolModifiers.SUPERSCRIPT })\n .addGlyphOrText('b9', { symbolModifier: ChordSymbol.symbolModifiers.SUBSCRIPT });\n notes[0].addModifier(chord1, 0);\n notes[2].addModifier(chord2, 0);\n const voice = score.voice(notes);\n system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug });\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n Registry.disableDefaultRegistry();\n options.assert.ok(true);\n}\nfunction basic(options) {\n Registry.enableDefaultRegistry(new Registry());\n const f = VexFlowTests.makeFactory(options, 300, 400);\n const system = f.System({\n x: 50,\n width: 250,\n debugFormatter: options.params.debug,\n noPadding: options.params.noPadding,\n details: { alpha: options.params.alpha },\n });\n const score = f.EasyScore();\n const newVoice = (notes) => score.voice(notes, { time: '1/4' });\n const newStave = (voice) => system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug });\n const voices = [\n [f.GlyphNote(new Glyph('repeat1Bar', 40), { duration: 'q' }, { line: 4 })],\n [f.GlyphNote(new Glyph('repeat2Bars', 40), { duration: 'q', align_center: true })],\n [\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: '16' }),\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: '16' }),\n f.GlyphNote(new Glyph('repeat4Bars', 40), { duration: '16' }),\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: '16' }),\n ],\n ];\n voices.map(newVoice).forEach(newStave);\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n Registry.disableDefaultRegistry();\n options.assert.ok(true);\n}\nfunction repeatNote(options) {\n Registry.enableDefaultRegistry(new Registry());\n const f = VexFlowTests.makeFactory(options, 300, 500);\n const system = f.System({\n x: 50,\n width: 250,\n debugFormatter: options.params.debug,\n noPadding: options.params.noPadding,\n details: { alpha: options.params.alpha },\n });\n const score = f.EasyScore();\n const createVoice = (notes) => score.voice(notes, { time: '1/4' });\n const addStaveWithVoice = (voice) => system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug });\n const voices = [\n [f.RepeatNote('1')],\n [f.RepeatNote('2')],\n [f.RepeatNote('4')],\n [\n f.RepeatNote('slash', { duration: '16' }),\n f.RepeatNote('slash', { duration: '16' }),\n f.RepeatNote('slash', { duration: '16' }),\n f.RepeatNote('slash', { duration: '16' }),\n ],\n ];\n voices.map(createVoice).forEach(addStaveWithVoice);\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n Registry.disableDefaultRegistry();\n options.assert.ok(true);\n}\nVexFlowTests.register(GlyphNoteTests);\nexport { GlyphNoteTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// GraceNote Tests\n// TODO: In the 'stem' test (aka Grace Note Stem › SVG + Petaluma in flow.html), the Petaluma note heads are not scaled down properly.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Annotation } from '../src/annotation';\nimport { Articulation } from '../src/articulation';\nimport { Dot } from '../src/dot';\nimport { Formatter } from '../src/formatter';\nconst GraceNoteTests = {\n Start() {\n QUnit.module('Grace Notes');\n const run = VexFlowTests.runTests;\n run('Grace Note Basic', basic);\n run('With Articulation and Annotation on Parent Note', graceNoteModifiers);\n run('Grace Note Basic with Slurs', basicSlurred);\n run('Grace Note Stem', stem);\n run('Grace Note Stem with Beams 1', stemWithBeamed, {\n keys1: ['g/4'],\n stemDirection1: 1,\n keys2: ['d/5'],\n stemDirection2: -1,\n });\n run('Grace Note Stem with Beams 2', stemWithBeamed, {\n keys1: ['a/3'],\n stemDirection1: 1,\n keys2: ['a/5'],\n stemDirection2: -1,\n });\n run('Grace Note Stem with Beams 3', stemWithBeamed, {\n keys1: ['c/4'],\n stemDirection1: 1,\n keys2: ['c/6'],\n stemDirection2: -1,\n });\n run('Grace Note Slash', slash);\n run('Grace Note Slash with Beams', slashWithBeams);\n run('Grace Notes Multiple Voices', multipleVoices);\n run('Grace Notes Multiple Voices Multiple Draws', multipleVoicesMultipleDraws);\n },\n};\nfunction basic(options) {\n const f = VexFlowTests.makeFactory(options, 700, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 650 });\n const gracenotes = [\n { keys: ['e/4'], duration: '32' },\n { keys: ['f/4'], duration: '32' },\n { keys: ['g/4'], duration: '32' },\n { keys: ['a/4'], duration: '32' },\n ].map(f.GraceNote.bind(f));\n const gracenotes1 = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f));\n const gracenotes2 = [{ keys: ['b/4'], duration: '8', slash: true }].map(f.GraceNote.bind(f));\n const gracenotes3 = [\n { keys: ['e/4'], duration: '8' },\n { keys: ['f/4'], duration: '16' },\n { keys: ['e/4', 'g/4'], duration: '8' },\n { keys: ['a/4'], duration: '32' },\n { keys: ['b/4'], duration: '32' },\n ].map(f.GraceNote.bind(f));\n const gracenotes4 = [\n { keys: ['g/4'], duration: '8' },\n { keys: ['g/4'], duration: '16' },\n { keys: ['g/4'], duration: '16' },\n ].map(f.GraceNote.bind(f));\n gracenotes[1].addModifier(f.Accidental({ type: '##' }), 0);\n gracenotes3[3].addModifier(f.Accidental({ type: 'bb' }), 0);\n Dot.buildAndAttach([gracenotes4[0]], { all: true });\n const notes = [\n f\n .StaveNote({ keys: ['b/4'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.GraceNoteGroup({ notes: gracenotes1 }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['c/5', 'd/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0),\n ];\n const voice = f.Voice().setStrict(false).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'GraceNoteBasic');\n}\nfunction graceNoteModifiers(options) {\n const f = VexFlowTests.makeFactory(options, 700, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 650 });\n const gracenotes = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f));\n const notes = [\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0)\n .addModifier(new Articulation('a-').setPosition(3), 0),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0)\n .addModifier(new Articulation('a-').setPosition(3), 0)\n .addModifier(new Accidental('#')),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0)\n .addModifier(new Articulation('a-').setPosition(3), 0)\n .addModifier(new Annotation('words')),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0)\n .addModifier(new Articulation('a-').setPosition(3), 0)\n .addModifier(new Articulation('a>').setPosition(3), 0),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0)\n .addModifier(new Articulation('a-').setPosition(3), 0)\n .addModifier(new Articulation('a>').setPosition(3), 0)\n .addModifier(new Articulation('a@a').setPosition(3), 0),\n ];\n const voice = f.Voice().setStrict(false).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'GraceNoteModifiers');\n}\nfunction basicSlurred(options) {\n const f = VexFlowTests.makeFactory(options, 700, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 650 });\n const gracenotes0 = [\n { keys: ['e/4'], duration: '32' },\n { keys: ['f/4'], duration: '32' },\n { keys: ['g/4'], duration: '32' },\n { keys: ['a/4'], duration: '32' },\n ].map(f.GraceNote.bind(f));\n const gracenotes1 = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f));\n const gracenotes2 = [{ keys: ['b/4'], duration: '8', slash: true }].map(f.GraceNote.bind(f));\n const gracenotes3 = [\n { keys: ['e/4'], duration: '8' },\n { keys: ['f/4'], duration: '16' },\n { keys: ['e/4', 'g/4'], duration: '8' },\n { keys: ['a/4'], duration: '32' },\n { keys: ['b/4'], duration: '32' },\n ].map(f.GraceNote.bind(f));\n const gracenotes4 = [\n { keys: ['a/4'], duration: '8' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n ].map(f.GraceNote.bind(f));\n gracenotes0[1].addModifier(f.Accidental({ type: '#' }), 0);\n gracenotes3[3].addModifier(f.Accidental({ type: 'b' }), 0);\n gracenotes3[2].addModifier(f.Accidental({ type: 'n' }), 0);\n Dot.buildAndAttach([gracenotes4[0]], { all: true });\n const notes = [\n f\n .StaveNote({ keys: ['b/4'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes0, slur: true }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.GraceNoteGroup({ notes: gracenotes1, slur: true }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['c/5', 'd/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes2, slur: true }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes3, slur: true }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes4, slur: true }).beamNotes(), 0),\n f.StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }),\n ];\n const voice = f.Voice().setStrict(false).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'GraceNoteBasic');\n}\n/**\n * Helper function for three tests below: stem, stemWithBeamed, slash.\n */\nconst createNoteForStemTest = (duration, noteBuilder, keys, stem_direction, slash = false) => {\n const struct = { duration, slash };\n struct.stem_direction = stem_direction;\n struct.keys = keys;\n return noteBuilder(struct);\n};\n// Used in three tests below.\nconst durationsForStemTest = ['8', '16', '32', '64', '128'];\nfunction stem(options) {\n const f = VexFlowTests.makeFactory(options, 700, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 650 });\n function createNotes(noteBuilder, keys, stem_direction) {\n return durationsForStemTest.map((duration) => createNoteForStemTest(duration, noteBuilder, keys, stem_direction));\n }\n function createNoteBlock(keys, stem_direction) {\n const staveNotes = createNotes(f.StaveNote.bind(f), keys, stem_direction);\n const gracenotes = createNotes(f.GraceNote.bind(f), keys, stem_direction);\n // Add a bunch of GraceNotes in front of the first StaveNote.\n staveNotes[0].addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0);\n return staveNotes;\n }\n const voice = f.Voice().setStrict(false);\n voice.addTickables(createNoteBlock(['g/4'], 1));\n voice.addTickables(createNoteBlock(['d/5'], -1));\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'GraceNoteStem');\n}\nfunction stemWithBeamed(options) {\n const f = VexFlowTests.makeFactory(options, 700, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 650 });\n function createBeamedNotes(noteBuilder, keys, stem_direction, beams, isGrace = false, notesToBeam) {\n const ret = [];\n durationsForStemTest.map((duration) => {\n const n0 = createNoteForStemTest(duration, noteBuilder, keys, stem_direction);\n const n1 = createNoteForStemTest(duration, noteBuilder, keys, stem_direction);\n ret.push(n0);\n ret.push(n1);\n if (notesToBeam) {\n notesToBeam.push([n0, n1]);\n }\n if (!isGrace) {\n beams.push(f.Beam({ notes: [n0, n1] }));\n }\n });\n return ret;\n }\n function createBeamedNoteBlock(keys, stem_direction, beams) {\n const bnotes = createBeamedNotes(f.StaveNote.bind(f), keys, stem_direction, beams);\n const notesToBeam = [];\n const gracenotes = createBeamedNotes(f.GraceNote.bind(f), keys, stem_direction, beams, true, notesToBeam);\n const graceNoteGroup = f.GraceNoteGroup({ notes: gracenotes });\n notesToBeam.map(graceNoteGroup.beamNotes.bind(graceNoteGroup));\n bnotes[0].addModifier(graceNoteGroup, 0);\n return bnotes;\n }\n const beams = [];\n const voice = f.Voice().setStrict(false);\n voice.addTickables(createBeamedNoteBlock(options.params.keys1, options.params.stemDirection1, beams));\n voice.addTickables(createBeamedNoteBlock(options.params.keys2, options.params.stemDirection2, beams));\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'GraceNoteStem');\n}\nfunction slash(options) {\n const f = VexFlowTests.makeFactory(options, 700, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 650 });\n function createNotes(noteT, keys, stem_direction, slash) {\n return durationsForStemTest.map((d) => createNoteForStemTest(d, noteT, keys, stem_direction, slash));\n }\n function createNoteBlock(keys, stem_direction) {\n const notes = [f.StaveNote({ keys: ['f/4'], stem_direction, duration: '16' })];\n let graceNotes = createNotes(f.GraceNote.bind(f), keys, stem_direction, true);\n const duration = '8';\n const gns = [\n { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true },\n { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true },\n { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true },\n { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true },\n ].map(f.GraceNote.bind(f));\n const notesToBeam = [];\n notesToBeam.push([gns[0], gns[1], gns[2]]);\n notesToBeam.push([gns[3], gns[4], gns[5]]);\n notesToBeam.push([gns[6], gns[7], gns[8]]);\n // Merge the two GraceNote[].\n graceNotes = graceNotes.concat(gns);\n const graceNoteGroup = f.GraceNoteGroup({ notes: graceNotes });\n notesToBeam.forEach((notes) => graceNoteGroup.beamNotes(notes));\n notes[0].addModifier(graceNoteGroup, 0);\n return notes;\n }\n const voice = f.Voice().setStrict(false);\n voice.addTickables(createNoteBlock(['d/4', 'a/4'], 1));\n voice.addTickables(createNoteBlock(['d/4', 'a/4'], -1));\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'GraceNoteSlash');\n}\nfunction slashWithBeams(options) {\n const f = VexFlowTests.makeFactory(options, 800, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 750 });\n function createNoteBlock(keys, stem_direction) {\n const notes = [f.StaveNote({ keys: ['f/4'], stem_direction, duration: '16' })];\n let allGraceNotes = [];\n const graceNotesToBeam = [];\n ['8', '16', '32', '64'].forEach(function (duration) {\n const graceNotes = [\n { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['d/4', 'a/4'], stem_direction, duration, slash: false },\n { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['b/4', 'f/5'], stem_direction, duration, slash: false },\n { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true },\n { keys: ['e/4', 'a/4'], stem_direction, duration, slash: false },\n ].map(f.GraceNote.bind(f));\n graceNotesToBeam.push([graceNotes[0], graceNotes[1]]);\n graceNotesToBeam.push([graceNotes[2], graceNotes[3]]);\n graceNotesToBeam.push([graceNotes[4], graceNotes[5]]);\n allGraceNotes = allGraceNotes.concat(graceNotes);\n });\n const graceNoteGroup = f.GraceNoteGroup({ notes: allGraceNotes });\n graceNotesToBeam.forEach((g) => graceNoteGroup.beamNotes(g));\n notes[0].addModifier(graceNoteGroup, 0);\n return notes;\n }\n const voice = f.Voice().setStrict(false);\n voice.addTickables(createNoteBlock(['d/4', 'a/4'], 1));\n voice.addTickables(createNoteBlock(['d/4', 'a/4'], -1));\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'GraceNoteSlashWithBeams');\n}\nfunction multipleVoices(options) {\n const f = VexFlowTests.makeFactory(options, 450, 140);\n const stave = f.Stave({ x: 10, y: 10, width: 450 });\n const notes = [\n { keys: ['f/5'], stem_direction: 1, duration: '16' },\n { keys: ['f/5'], stem_direction: 1, duration: '16' },\n { keys: ['d/5'], stem_direction: 1, duration: '16' },\n { keys: ['c/5'], stem_direction: 1, duration: '16' },\n { keys: ['c/5'], stem_direction: 1, duration: '16' },\n { keys: ['d/5'], stem_direction: 1, duration: '16' },\n { keys: ['f/5'], stem_direction: 1, duration: '16' },\n { keys: ['e/5'], stem_direction: 1, duration: '16' },\n ].map(f.StaveNote.bind(f));\n const notes2 = [\n { keys: ['f/4'], stem_direction: -1, duration: '16' },\n { keys: ['e/4'], stem_direction: -1, duration: '16' },\n { keys: ['d/4'], stem_direction: -1, duration: '16' },\n { keys: ['c/4'], stem_direction: -1, duration: '16' },\n { keys: ['c/4'], stem_direction: -1, duration: '16' },\n { keys: ['d/4'], stem_direction: -1, duration: '16' },\n { keys: ['f/4'], stem_direction: -1, duration: '16' },\n { keys: ['e/4'], stem_direction: -1, duration: '16' },\n ].map(f.StaveNote.bind(f));\n const gracenotes1 = [{ keys: ['b/4'], stem_direction: 1, duration: '8', slash: true }].map(f.GraceNote.bind(f));\n const gracenotes2 = [{ keys: ['f/4'], stem_direction: -1, duration: '8', slash: true }].map(f.GraceNote.bind(f));\n const gracenotes3 = [\n { keys: ['f/4'], duration: '32', stem_direction: -1 },\n { keys: ['e/4'], duration: '32', stem_direction: -1 },\n ].map(f.GraceNote.bind(f));\n const gracenotes4 = [\n { keys: ['f/5'], duration: '32', stem_direction: 1 },\n { keys: ['e/5'], duration: '32', stem_direction: 1 },\n { keys: ['e/5'], duration: '8', stem_direction: 1 },\n ].map(f.GraceNote.bind(f));\n gracenotes2[0].setStemDirection(-1);\n gracenotes2[0].addModifier(f.Accidental({ type: '#' }), 0);\n notes[1].addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0);\n notes[3].addModifier(f.GraceNoteGroup({ notes: gracenotes1 }), 0);\n notes2[1].addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0);\n notes2[5].addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0);\n const voice = f.Voice().setStrict(false).addTickables(notes);\n const voice2 = f.Voice().setStrict(false).addTickables(notes2);\n f.Beam({ notes: notes.slice(0, 4) });\n f.Beam({ notes: notes.slice(4, 8) });\n f.Beam({ notes: notes2.slice(0, 4) });\n f.Beam({ notes: notes2.slice(4, 8) });\n f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave);\n f.draw();\n options.assert.ok(true, 'Sixteenth Test');\n}\nfunction multipleVoicesMultipleDraws(options) {\n const f = VexFlowTests.makeFactory(options, 450, 140);\n const stave = f.Stave({ x: 10, y: 10, width: 450 });\n const notes = [\n { keys: ['f/5'], stem_direction: 1, duration: '16' },\n { keys: ['f/5'], stem_direction: 1, duration: '16' },\n { keys: ['d/5'], stem_direction: 1, duration: '16' },\n { keys: ['c/5'], stem_direction: 1, duration: '16' },\n { keys: ['c/5'], stem_direction: 1, duration: '16' },\n { keys: ['d/5'], stem_direction: 1, duration: '16' },\n { keys: ['f/5'], stem_direction: 1, duration: '16' },\n { keys: ['e/5'], stem_direction: 1, duration: '16' },\n ].map(f.StaveNote.bind(f));\n const notes2 = [\n { keys: ['f/4'], stem_direction: -1, duration: '16' },\n { keys: ['e/4'], stem_direction: -1, duration: '16' },\n { keys: ['d/4'], stem_direction: -1, duration: '16' },\n { keys: ['c/4'], stem_direction: -1, duration: '16' },\n { keys: ['c/4'], stem_direction: -1, duration: '16' },\n { keys: ['d/4'], stem_direction: -1, duration: '16' },\n { keys: ['f/4'], stem_direction: -1, duration: '16' },\n { keys: ['e/4'], stem_direction: -1, duration: '16' },\n ].map(f.StaveNote.bind(f));\n const gracenotes1 = [{ keys: ['b/4'], stem_direction: 1, duration: '8', slash: true }].map(f.GraceNote.bind(f));\n const gracenotes2 = [{ keys: ['f/4'], stem_direction: -1, duration: '8', slash: true }].map(f.GraceNote.bind(f));\n const gracenotes3 = [\n { keys: ['f/4'], duration: '32', stem_direction: -1 },\n { keys: ['e/4'], duration: '32', stem_direction: -1 },\n ].map(f.GraceNote.bind(f));\n const gracenotes4 = [\n { keys: ['f/5'], duration: '32', stem_direction: 1 },\n { keys: ['e/5'], duration: '32', stem_direction: 1 },\n { keys: ['e/5'], duration: '8', stem_direction: 1 },\n ].map(f.GraceNote.bind(f));\n gracenotes2[0].setStemDirection(-1);\n gracenotes2[0].addModifier(f.Accidental({ type: '#' }), 0);\n notes[1].addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0);\n notes[3].addModifier(f.GraceNoteGroup({ notes: gracenotes1 }), 0);\n notes2[1].addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0);\n notes2[5].addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0);\n const voice = f.Voice().setStrict(false).addTickables(notes);\n const voice2 = f.Voice().setStrict(false).addTickables(notes2);\n f.Beam({ notes: notes.slice(0, 4) });\n f.Beam({ notes: notes.slice(4, 8) });\n f.Beam({ notes: notes2.slice(0, 4) });\n f.Beam({ notes: notes2.slice(4, 8) });\n f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave);\n f.draw();\n f.draw();\n options.assert.ok(true, 'Seventeenth Test');\n}\nVexFlowTests.register(GraceNoteTests);\nexport { GraceNoteTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// GraceTabNote Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { GraceNoteGroup } from '../src/gracenotegroup';\nimport { GraceTabNote } from '../src/gracetabnote';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { Voice } from '../src/voice';\nconst GraceTabNoteTests = {\n Start() {\n QUnit.module('Grace Tab Notes');\n // TODO: Rename tests below since it is redundant with the module name.\n // Remove \"Grace Tab Note \"\n const run = VexFlowTests.runTests;\n run('Grace Tab Note Simple', simple);\n run('Grace Tab Note Slurred', slurred);\n },\n};\n// Helper functions to create TabNote and GraceTabNote objects.\nconst tabNote = (noteStruct) => new TabNote(noteStruct);\nconst graceTabNote = (noteStruct) => new GraceTabNote(noteStruct);\n/**\n * Helper function to build a RenderContext and TabStave.\n */\nfunction setupContext(opts, ctxBuilder) {\n const context = ctxBuilder(opts.elementId, 350, 140);\n const stave = new TabStave(10, 10, 350).addTabGlyph().setContext(context).draw();\n return { context, stave };\n}\nfunction simple(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder);\n const note0 = tabNote({ positions: [{ str: 4, fret: 6 }], duration: '4' });\n const note1 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: '4' });\n const note2 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: '4' });\n const note3 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: '4' });\n const gracenote_group0 = [{ positions: [{ str: 4, fret: 'x' }], duration: '8' }];\n const gracenote_group1 = [\n { positions: [{ str: 4, fret: 9 }], duration: '16' },\n { positions: [{ str: 4, fret: 10 }], duration: '16' },\n ];\n const gracenote_group2 = [{ positions: [{ str: 4, fret: 9 }], duration: '8' }];\n const gracenote_group3 = [\n { positions: [{ str: 5, fret: 10 }], duration: '8' },\n { positions: [{ str: 4, fret: 9 }], duration: '8' },\n ];\n const gracenotes0 = gracenote_group0.map(graceTabNote);\n const gracenotes1 = gracenote_group1.map(graceTabNote);\n const gracenotes2 = gracenote_group2.map(graceTabNote);\n gracenotes2[0].setGhost(true);\n const gracenotes3 = gracenote_group3.map(graceTabNote);\n note0.addModifier(new GraceNoteGroup(gracenotes0), 0);\n note1.addModifier(new GraceNoteGroup(gracenotes1), 0);\n note2.addModifier(new GraceNoteGroup(gracenotes2), 0);\n note3.addModifier(new GraceNoteGroup(gracenotes3), 0);\n const voice = new Voice(Flow.TIME4_4);\n voice.addTickables([note0, note1, note2, note3]);\n new Formatter().joinVoices([voice]).format([voice], 250);\n voice.draw(context, stave);\n options.assert.ok(true, 'Simple Test');\n}\nfunction slurred(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder);\n const note0 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: 'h' });\n const note1 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: 'h' });\n const gracenote_group0 = [\n { positions: [{ str: 4, fret: 9 }], duration: '8' },\n { positions: [{ str: 4, fret: 10 }], duration: '8' },\n ];\n const gracenote_group1 = [\n { positions: [{ str: 4, fret: 7 }], duration: '16' },\n { positions: [{ str: 4, fret: 8 }], duration: '16' },\n { positions: [{ str: 4, fret: 9 }], duration: '16' },\n ];\n const gracenotes0 = gracenote_group0.map(graceTabNote);\n const gracenotes1 = gracenote_group1.map(graceTabNote);\n note0.addModifier(new GraceNoteGroup(gracenotes0, true), 0);\n note1.addModifier(new GraceNoteGroup(gracenotes1, true), 0);\n const voice = new Voice(Flow.TIME4_4);\n voice.addTickables([note0, note1]);\n new Formatter().joinVoices([voice]).format([voice], 200);\n voice.draw(context, stave);\n options.assert.ok(true, 'Slurred Test');\n}\nVexFlowTests.register(GraceTabNoteTests);\nexport { GraceTabNoteTests };\n","// vexflow-debug-with-tests.ts includes this module via:\n// export * from '../../tests';\n//\n// To add a new test module, add a new line:\n// `export * from './xxxx_tests';`\n// to this file that points to the new file `xxxx_tests.ts`.\n//\n// The test module needs to call VexFlowTests.register(...).\n// For example, in annotation_tests.ts, the last two lines are:\n// VexFlowTests.register(AnnotationTests);\n// export { AnnotationTests };\n//\n// In vexflow_test_helpers.ts: VexFlowTests.run() will run all registered tests.\n//\n// To iterate faster during development, you can comment out most of this file\n// and focus on just testing the module(s) you are currently working on.\nexport * from './accidental_tests';\nexport * from './annotation_tests';\nexport * from './articulation_tests';\nexport * from './auto_beam_formatting_tests';\nexport * from './bach_tests';\nexport * from './barline_tests';\nexport * from './beam_tests';\nexport * from './bend_tests';\nexport * from './boundingbox_tests';\nexport * from './chordsymbol_tests';\nexport * from './clef_tests';\nexport * from './crossbeam_tests';\nexport * from './curve_tests';\nexport * from './dot_tests';\nexport * from './easyscore_tests';\nexport * from './factory_tests';\nexport * from './font_tests';\nexport * from './formatter_tests';\nexport * from './fraction_tests';\nexport * from './ghostnote_tests';\nexport * from './glyphnote_tests';\nexport * from './gracenote_tests';\nexport * from './gracetabnote_tests';\nexport * from './key_clef_tests';\nexport * from './keymanager_tests';\nexport * from './keysignature_tests';\nexport * from './modifier_tests';\nexport * from './multimeasurerest_tests';\nexport * from './music_tests';\nexport * from './notehead_tests';\nexport * from './notesubgroup_tests';\nexport * from './offscreencanvas_tests';\nexport * from './ornament_tests';\nexport * from './parser_tests';\nexport * from './pedalmarking_tests';\nexport * from './percussion_tests';\nexport * from './registry_tests';\nexport * from './renderer_tests';\nexport * from './rests_tests';\nexport * from './rhythm_tests';\nexport * from './stave_tests';\nexport * from './staveconnector_tests';\nexport * from './stavehairpin_tests';\nexport * from './staveline_tests';\nexport * from './stavemodifier_tests';\nexport * from './stavenote_tests';\nexport * from './stavetie_tests';\nexport * from './stringnumber_tests';\nexport * from './strokes_tests';\nexport * from './style_tests';\nexport * from './tabnote_tests';\nexport * from './tabslide_tests';\nexport * from './tabstave_tests';\nexport * from './tabtie_tests';\nexport * from './textbracket_tests';\nexport * from './textformatter_tests';\nexport * from './textnote_tests';\nexport * from './threevoice_tests';\nexport * from './tickcontext_tests';\nexport * from './timesignature_tests';\nexport * from './tremolo_tests';\nexport * from './tuning_tests';\nexport * from './tuplet_tests';\nexport * from './typeguard_tests';\nexport * from './unison_tests';\nexport * from './vf_prefix_tests';\nexport * from './vibrato_tests';\nexport * from './vibratobracket_tests';\nexport * from './voice_tests';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Clef Key Signature Tests\n//\nimport { MAJOR_KEYS, MINOR_KEYS, VexFlowTests } from './vexflow_test_helpers';\nimport { Glyph } from '../src/glyph';\nimport { KeySignature } from '../src/keysignature';\nimport { Stave } from '../src/stave';\nconst ClefKeySignatureTests = {\n Start() {\n QUnit.module('Clef Keys');\n // Removed an identical 'Key Parser Test'. See keysignature_tests.ts.\n const run = VexFlowTests.runTests;\n run('Major Key Clef Test', keys, { majorKeys: true });\n run('Minor Key Clef Test', keys, { majorKeys: false });\n run('Stave Helper', staveHelper);\n },\n};\nconst fontWidths = () => {\n const glyphScale = 39; // default font scale\n const sharpWidth = Glyph.getWidth('accidentalSharp', glyphScale) + 1;\n const flatWidth = Glyph.getWidth('accidentalFlat', glyphScale) + 1;\n const ksPadding = 10; // hard-coded in keysignature.ts\n const naturalWidth = Glyph.getWidth('accidentalNatural', glyphScale) + 2;\n const clefWidth = Glyph.getWidth('gClef', glyphScale); // widest clef\n return { sharpWidth, flatWidth, naturalWidth, clefWidth, ksPadding };\n};\nfunction keys(options, contextBuilder) {\n const w = fontWidths();\n const accidentalCount = 28; // total number in all the keys\n const sharpTestWidth = accidentalCount * w.sharpWidth + w.clefWidth + Stave.defaultPadding + 6 * w.ksPadding;\n const flatTestWidth = accidentalCount * w.flatWidth + w.clefWidth + Stave.defaultPadding + 6 * w.ksPadding;\n const clefs = [\n 'treble',\n 'soprano',\n 'mezzo-soprano',\n 'alto',\n 'tenor',\n 'baritone-f',\n 'baritone-c',\n 'bass',\n 'french',\n 'subbass',\n 'percussion',\n ];\n const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 20 + 80 * 2 * clefs.length);\n const staves = [];\n const keys = options.params.majorKeys ? MAJOR_KEYS : MINOR_KEYS;\n let i;\n let flat;\n let sharp;\n let keySig;\n const yOffsetForFlatStaves = 10 + 80 * clefs.length;\n for (i = 0; i < clefs.length; i++) {\n // Render all the sharps first, then all the flats:\n staves[i] = new Stave(10, 10 + 80 * i, flatTestWidth);\n staves[i].addClef(clefs[i]);\n staves[i + clefs.length] = new Stave(10, yOffsetForFlatStaves + 10 + 80 * i, sharpTestWidth);\n staves[i + clefs.length].addClef(clefs[i]);\n for (flat = 0; flat < 8; flat++) {\n keySig = new KeySignature(keys[flat]);\n keySig.addToStave(staves[i]);\n }\n for (sharp = 8; sharp < keys.length; sharp++) {\n keySig = new KeySignature(keys[sharp]);\n keySig.addToStave(staves[i + clefs.length]);\n }\n }\n Stave.formatBegModifiers(staves);\n for (i = 0; i < clefs.length; i++) {\n staves[i].setContext(ctx);\n staves[i].draw();\n staves[i + clefs.length].setContext(ctx);\n staves[i + clefs.length].draw();\n }\n options.assert.ok(true, 'all pass');\n}\nfunction staveHelper(options, contextBuilder) {\n const w = fontWidths();\n const accidentalCount = 28; // total number in all the keys\n const sharpTestWidth = accidentalCount * w.sharpWidth + w.clefWidth + Stave.defaultPadding + 7 * w.ksPadding;\n const flatTestWidth = accidentalCount * w.flatWidth + w.clefWidth + Stave.defaultPadding + 7 * w.ksPadding;\n const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 400);\n const stave1 = new Stave(10, 10, flatTestWidth);\n const stave2 = new Stave(10, 90, flatTestWidth);\n const stave3 = new Stave(10, 170, sharpTestWidth);\n const stave4 = new Stave(10, 260, sharpTestWidth);\n const keys = MAJOR_KEYS;\n stave1.addClef('treble');\n stave2.addClef('bass');\n stave3.addClef('alto');\n stave4.addClef('tenor');\n for (let n = 0; n < 8; ++n) {\n stave1.addKeySignature(keys[n]);\n stave2.addKeySignature(keys[n]);\n }\n for (let i = 8; i < keys.length; ++i) {\n stave3.addKeySignature(keys[i]);\n stave4.addKeySignature(keys[i]);\n }\n stave1.setContext(ctx);\n stave1.draw();\n stave2.setContext(ctx);\n stave2.draw();\n stave3.setContext(ctx);\n stave3.draw();\n stave4.setContext(ctx);\n stave4.draw();\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(ClefKeySignatureTests);\nexport { ClefKeySignatureTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Music Key Management Tests\n//\n// TODO: KeyManager.getAccidental(key) specifies that the return value's .accidental property is string | undefined.\n// However, we check it against null.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { KeyManager } from '../src/index';\nconst KeyManagerTests = {\n Start() {\n QUnit.module('KeyManager');\n QUnit.test('Valid Notes', works);\n QUnit.test('Select Notes', selectNotes);\n },\n};\nfunction works(assert) {\n const manager = new KeyManager('g');\n assert.equal(manager.getAccidental('f').accidental, '#');\n manager.setKey('a');\n assert.equal(manager.getAccidental('c').accidental, '#');\n assert.equal(manager.getAccidental('a').accidental, null);\n assert.equal(manager.getAccidental('f').accidental, '#');\n manager.setKey('A');\n assert.equal(manager.getAccidental('c').accidental, '#');\n assert.equal(manager.getAccidental('a').accidental, null);\n assert.equal(manager.getAccidental('f').accidental, '#');\n}\nfunction selectNotes(assert) {\n const manager = new KeyManager('f');\n assert.equal(manager.selectNote('bb').note, 'bb');\n assert.equal(manager.selectNote('bb').accidental, 'b');\n assert.equal(manager.selectNote('g').note, 'g');\n assert.equal(manager.selectNote('g').accidental, null);\n assert.equal(manager.selectNote('b').note, 'b');\n assert.equal(manager.selectNote('b').accidental, null);\n assert.equal(manager.selectNote('a#').note, 'bb');\n assert.equal(manager.selectNote('g#').note, 'g#');\n // Changes have no effect?\n assert.equal(manager.selectNote('g#').note, 'g#');\n assert.equal(manager.selectNote('bb').note, 'bb');\n assert.equal(manager.selectNote('bb').accidental, 'b');\n assert.equal(manager.selectNote('g').note, 'g');\n assert.equal(manager.selectNote('g').accidental, null);\n assert.equal(manager.selectNote('b').note, 'b');\n assert.equal(manager.selectNote('b').accidental, null);\n assert.equal(manager.selectNote('a#').note, 'bb');\n assert.equal(manager.selectNote('g#').note, 'g#');\n // Changes should propagate\n manager.reset();\n assert.equal(manager.selectNote('g#').change, true);\n assert.equal(manager.selectNote('g#').change, false);\n assert.equal(manager.selectNote('g').change, true);\n assert.equal(manager.selectNote('g').change, false);\n assert.equal(manager.selectNote('g#').change, true);\n manager.reset();\n let note = manager.selectNote('bb');\n assert.equal(note.change, false);\n assert.equal(note.accidental, 'b');\n note = manager.selectNote('g');\n assert.equal(note.change, false);\n assert.equal(note.accidental, null);\n note = manager.selectNote('g#');\n assert.equal(note.change, true);\n assert.equal(note.accidental, '#');\n note = manager.selectNote('g');\n assert.equal(note.change, true);\n assert.equal(note.accidental, null);\n note = manager.selectNote('g');\n assert.equal(note.change, false);\n assert.equal(note.accidental, null);\n note = manager.selectNote('g#');\n assert.equal(note.change, true);\n assert.equal(note.accidental, '#');\n}\nVexFlowTests.register(KeyManagerTests);\nexport { KeyManagerTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Key Signature Tests\n//\nimport { MAJOR_KEYS, MINOR_KEYS, VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Glyph } from '../src/glyph';\nimport { KeySignature } from '../src/keysignature';\nimport { Stave } from '../src/stave';\nimport { BarlineType } from '../src/stavebarline';\nconst KeySignatureTests = {\n Start() {\n QUnit.module('KeySignature');\n QUnit.test('Key Parser Test', parser);\n const run = VexFlowTests.runTests;\n run('Major Key Test', majorKeys);\n run('Minor Key Test', minorKeys);\n run('Stave Helper', staveHelper);\n run('Cancelled key test', majorKeysCanceled);\n run('Cancelled key (for each clef) test', keysCanceledForEachClef);\n run('Altered key test', majorKeysAltered);\n run('End key with clef test', endKeyWithClef);\n run('Key Signature Change test', changeKey);\n run('Key Signature with/without clef symbol', clefKeySignature);\n },\n};\nconst fontWidths = () => {\n const glyphScale = 39; // default font scale\n const sharpWidth = Glyph.getWidth('accidentalSharp', glyphScale) + 1;\n const flatWidth = Glyph.getWidth('accidentalFlat', glyphScale) + 1;\n const naturalWidth = Glyph.getWidth('accidentalNatural', glyphScale) + 2;\n const clefWidth = Glyph.getWidth('gClef', glyphScale) * 2; // widest clef\n return { sharpWidth, flatWidth, naturalWidth, clefWidth };\n};\nfunction parser(assert) {\n assert.expect(11);\n function catchError(spec) {\n assert.throws(() => Flow.keySignature(spec), /BadKeySignature/);\n }\n catchError('asdf');\n catchError('D!');\n catchError('E#');\n catchError('D#');\n catchError('#');\n catchError('b');\n catchError('Kb');\n catchError('Fb');\n catchError('Dbm');\n catchError('B#m');\n Flow.keySignature('B');\n Flow.keySignature('C');\n Flow.keySignature('Fm');\n Flow.keySignature('Ab');\n Flow.keySignature('Abm');\n Flow.keySignature('F#');\n Flow.keySignature('G#m');\n assert.ok(true, 'all pass');\n}\nfunction majorKeys(options, contextBuilder) {\n const w = fontWidths();\n const accidentalCount = 28; // total number in all the keys\n const casePadding = 10; // hard-coded in staveModifier\n const testCases = 7; // all keys, but includes key of C\n const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + Stave.defaultPadding;\n const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + Stave.defaultPadding;\n const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240);\n const stave1 = new Stave(10, 10, flatTestWidth);\n const stave2 = new Stave(10, 90, sharpTestWidth);\n const keys = MAJOR_KEYS;\n let keySig = null;\n for (let i = 0; i < 8; ++i) {\n keySig = new KeySignature(keys[i]);\n keySig.addToStave(stave1);\n }\n for (let n = 8; n < keys.length; ++n) {\n keySig = new KeySignature(keys[n]);\n keySig.addToStave(stave2);\n }\n stave1.setContext(ctx);\n stave1.draw();\n stave2.setContext(ctx);\n stave2.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction majorKeysCanceled(options, contextBuilder) {\n const scale = 0.9;\n const w = fontWidths();\n const flatPadding = 18;\n const sharpPadding = 20;\n const flatTestCases = 8;\n const sharpTestCases = 7;\n // magic numbers are the numbers of that symbol that appear in the test case\n const sharpTestWidth = 28 * w.sharpWidth + 21 * w.naturalWidth + sharpPadding * sharpTestCases + Stave.defaultPadding + w.clefWidth;\n const flatTestWidth = 28 * w.flatWidth + 28 * w.naturalWidth + flatPadding * flatTestCases + Stave.defaultPadding + w.clefWidth;\n const eFlatTestWidth = 28 * w.flatWidth + 32 * w.naturalWidth + flatPadding * flatTestCases + Stave.defaultPadding + w.clefWidth;\n const eSharpTestWidth = 28 * w.sharpWidth + 28 * w.naturalWidth + sharpPadding * sharpTestCases + Stave.defaultPadding + w.clefWidth;\n const maxWidth = Math.max(Math.max(sharpTestWidth, flatTestWidth, Math.max(eSharpTestWidth, eFlatTestWidth)));\n const ctx = contextBuilder(options.elementId, maxWidth + 100, 500);\n ctx.scale(scale, scale);\n const stave1 = new Stave(10, 10, flatTestWidth).addClef('treble');\n const stave2 = new Stave(10, 90, sharpTestWidth).addClef('treble');\n const stave3 = new Stave(10, 170, eFlatTestWidth).addClef('treble');\n const stave4 = new Stave(10, 250, eSharpTestWidth).addClef('treble');\n const keys = MAJOR_KEYS;\n let keySig = null;\n let i;\n let n;\n for (i = 0; i < 8; ++i) {\n keySig = new KeySignature(keys[i]);\n keySig.cancelKey('Cb');\n keySig.setPadding(flatPadding);\n keySig.addToStave(stave1);\n }\n for (n = 8; n < keys.length; ++n) {\n keySig = new KeySignature(keys[n]);\n keySig.cancelKey('C#');\n keySig.setPadding(sharpPadding);\n keySig.addToStave(stave2);\n }\n for (i = 0; i < 8; ++i) {\n keySig = new KeySignature(keys[i]);\n keySig.cancelKey('E');\n keySig.setPadding(flatPadding);\n keySig.addToStave(stave3);\n }\n for (n = 8; n < keys.length; ++n) {\n keySig = new KeySignature(keys[n]);\n keySig.cancelKey('Ab');\n keySig.setPadding(sharpPadding);\n keySig.addToStave(stave4);\n }\n stave1.setContext(ctx);\n stave1.draw();\n stave2.setContext(ctx);\n stave2.draw();\n stave3.setContext(ctx);\n stave3.draw();\n stave4.setContext(ctx);\n stave4.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction keysCanceledForEachClef(options, contextBuilder) {\n const scale = 0.8;\n const w = fontWidths();\n const keyPadding = 10;\n const keys = ['C#', 'Cb'];\n const flatsKey = [7, 14];\n const sharpsKey = [14, 7];\n const natsKey = [7, 7];\n const max = 21 * Math.max(w.sharpWidth, w.flatWidth) * 2 + keyPadding * 6 + Stave.defaultPadding + w.clefWidth;\n const ctx = contextBuilder(options.elementId, max + 100, 380);\n ctx.scale(scale, scale);\n const x = 20;\n let y = 20;\n let tx = x;\n ['bass', 'tenor', 'soprano', 'mezzo-soprano', 'baritone-f'].forEach(function (clef) {\n keys.forEach((key, keyIx) => {\n const cancelKey = keys[(keyIx + 1) % 2];\n const width = flatsKey[keyIx] * w.flatWidth +\n natsKey[keyIx] * w.naturalWidth +\n sharpsKey[keyIx] * w.sharpWidth +\n keyPadding * 3 +\n w.clefWidth +\n Stave.defaultPadding;\n const stave = new Stave(tx, y, width);\n stave.setClef(clef);\n stave.addKeySignature(cancelKey);\n stave.addKeySignature(key, cancelKey);\n stave.addKeySignature(key);\n stave.setContext(ctx).draw();\n tx += width;\n });\n tx = x;\n y += 80;\n });\n options.assert.ok(true, 'all pass');\n}\nfunction majorKeysAltered(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 780, 500);\n ctx.scale(0.9, 0.9);\n const stave1 = new Stave(10, 10, 750).addClef('treble');\n const stave2 = new Stave(10, 90, 750).addClef('treble');\n const stave3 = new Stave(10, 170, 750).addClef('treble');\n const stave4 = new Stave(10, 250, 750).addClef('treble');\n const keys = MAJOR_KEYS;\n let keySig = null;\n let i;\n let n;\n for (i = 0; i < 8; ++i) {\n keySig = new KeySignature(keys[i]);\n keySig.alterKey(['bs', 'bs']);\n keySig.setPadding(18);\n keySig.addToStave(stave1);\n }\n for (n = 8; n < keys.length; ++n) {\n keySig = new KeySignature(keys[n]);\n keySig.alterKey(['+', '+', '+']);\n keySig.setPadding(20);\n keySig.addToStave(stave2);\n }\n for (i = 0; i < 8; ++i) {\n keySig = new KeySignature(keys[i]);\n keySig.alterKey(['n', 'bs', 'bb']);\n keySig.setPadding(18);\n keySig.addToStave(stave3);\n }\n for (n = 8; n < keys.length; ++n) {\n keySig = new KeySignature(keys[n]);\n keySig.alterKey(['++', '+', 'n', '+']);\n keySig.setPadding(20);\n keySig.addToStave(stave4);\n }\n stave1.setContext(ctx);\n stave1.draw();\n stave2.setContext(ctx);\n stave2.draw();\n stave3.setContext(ctx);\n stave3.draw();\n stave4.setContext(ctx);\n stave4.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction minorKeys(options, contextBuilder) {\n const accidentalCount = 28; // total number in all the keys\n const w = fontWidths();\n const casePadding = 10; // hard-coded in staveModifier\n const testCases = 7; // all keys, but includes key of C\n const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + Stave.defaultPadding;\n const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + Stave.defaultPadding;\n const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240);\n const stave1 = new Stave(10, 10, flatTestWidth);\n const stave2 = new Stave(10, 90, sharpTestWidth);\n const keys = MINOR_KEYS;\n let keySig = null;\n for (let i = 0; i < 8; ++i) {\n keySig = new KeySignature(keys[i]);\n keySig.addToStave(stave1);\n }\n for (let n = 8; n < keys.length; ++n) {\n keySig = new KeySignature(keys[n]);\n keySig.addToStave(stave2);\n }\n stave1.setContext(ctx);\n stave1.draw();\n stave2.setContext(ctx);\n stave2.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction endKeyWithClef(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 200);\n ctx.scale(0.9, 0.9);\n const stave1 = new Stave(10, 10, 350);\n stave1\n .setKeySignature('G')\n .setBegBarType(BarlineType.REPEAT_BEGIN)\n .setEndBarType(BarlineType.REPEAT_END)\n .setClef('treble')\n .addTimeSignature('4/4')\n .setEndClef('bass')\n .setEndKeySignature('Cb');\n const stave2 = new Stave(10, 90, 350);\n stave2.setKeySignature('Cb').setClef('bass').setEndClef('treble').setEndKeySignature('G');\n stave1.setContext(ctx).draw();\n stave2.setContext(ctx).draw();\n options.assert.ok(true, 'all pass');\n}\nfunction staveHelper(options, contextBuilder) {\n const w = fontWidths();\n const accidentalCount = 28; // total number in all the keys\n const casePadding = 10; // hard-coded in staveModifier\n const testCases = 7; // all keys, but includes key of C\n const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + Stave.defaultPadding;\n const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + Stave.defaultPadding;\n const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240);\n const stave1 = new Stave(10, 10, flatTestWidth);\n const stave2 = new Stave(10, 90, sharpTestWidth);\n const keys = MAJOR_KEYS;\n for (let i = 0; i < 8; ++i) {\n stave1.addKeySignature(keys[i]);\n }\n for (let n = 8; n < keys.length; ++n) {\n stave2.addKeySignature(keys[n]);\n }\n stave1.setContext(ctx);\n stave1.draw();\n stave2.setContext(ctx);\n stave2.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction changeKey(options) {\n const f = VexFlowTests.makeFactory(options, 900);\n // The previous code was buggy: f.Stave(10, 10, 800), even though Factory.Stave() only accepts 1 argument.\n const stave = f.Stave({ x: 10, y: 10, width: 800 }).addClef('treble').addTimeSignature('C|');\n const voice = f\n .Voice()\n .setStrict(false)\n .addTickables([\n f.KeySigNote({ key: 'Bb' }),\n f.StaveNote({ keys: ['c/4'], duration: '1' }),\n f.BarNote(),\n f.KeySigNote({ key: 'D', cancelKey: 'Bb' }),\n f.StaveNote({ keys: ['c/4'], duration: '1' }),\n f.BarNote(),\n f.KeySigNote({ key: 'Bb' }),\n f.StaveNote({ keys: ['c/4'], duration: '1' }),\n f.BarNote(),\n f.KeySigNote({ key: 'D', alterKey: ['b', 'n'] }),\n f.StaveNote({ keys: ['c/4'], duration: '1' }),\n ]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction clefKeySignature(options) {\n const f = VexFlowTests.makeFactory(options, 900);\n const stave = f.Stave({ x: 10, y: 10, width: 800 }).addClef('bass').addTimeSignature('C|').setClefLines('bass');\n const voice = f\n .Voice()\n .setStrict(false)\n .addTickables([\n f.KeySigNote({ key: 'Bb' }),\n f.StaveNote({ keys: ['c/4'], duration: '1', clef: 'bass' }),\n f.BarNote(),\n f.KeySigNote({ key: 'D', cancelKey: 'Bb' }),\n f.StaveNote({ keys: ['c/4'], duration: '1', clef: 'bass' }),\n f.BarNote(),\n f.KeySigNote({ key: 'Bb' }),\n f.StaveNote({ keys: ['c/4'], duration: '1', clef: 'bass' }),\n f.BarNote(),\n f.KeySigNote({ key: 'D', alterKey: ['b', 'n'] }),\n f.StaveNote({ keys: ['c/4'], duration: '1', clef: 'bass' }),\n ]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(KeySignatureTests);\nexport { KeySignatureTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TickContext Mocks\nimport { Fraction } from '../src/fraction';\nimport { Tickable } from '../src/tickable';\nclass MockTickable extends Tickable {\n constructor() {\n super(...arguments);\n this.ticks = new Fraction(1, 1);\n this.width = 0;\n this.ignore_ticks = false;\n }\n init() {\n // DO NOTHING.\n }\n getX() {\n // eslint-disable-next-line\n return this.tickContext.getX();\n }\n getIntrinsicTicks() {\n return this.ticks.value();\n }\n getTicks() {\n return this.ticks;\n }\n setTicks(t) {\n this.ticks = new Fraction(t, 1);\n return this;\n }\n // Called by TickContext.preFormat().\n getMetrics() {\n return {\n width: 0,\n glyphWidth: 0,\n notePx: this.width,\n modLeftPx: 0,\n modRightPx: 0,\n leftDisplacedHeadPx: 0,\n rightDisplacedHeadPx: 0,\n glyphPx: 0,\n };\n }\n getWidth() {\n return this.width;\n }\n setWidth(w) {\n this.width = w;\n return this;\n }\n setVoice(v) {\n this.voice = v;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n setTickContext(tc) {\n this.tickContext = tc;\n return this;\n }\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n preFormat() {\n // DO NOTHING.\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\nexport { MockTickable };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// ModifierContext Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Modifier, ModifierContext } from '../src/index';\nconst ModifierContextTests = {\n Start() {\n QUnit.module('ModifierContext');\n QUnit.test('Modifier Width Test', width);\n QUnit.test('Modifier Management', management);\n },\n};\nfunction width(assert) {\n const mc = new ModifierContext();\n assert.equal(mc.getWidth(), 0, 'New modifier context has no width');\n}\nfunction management(assert) {\n const mc = new ModifierContext();\n const modifier1 = new Modifier();\n const modifier2 = new Modifier();\n mc.addMember(modifier1);\n mc.addMember(modifier2);\n const modifiers = mc.getMembers(Modifier.CATEGORY);\n assert.equal(modifiers.length, 2, 'Added two modifiers');\n}\nVexFlowTests.register(ModifierContextTests);\nexport { ModifierContextTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// MultiMeasureRest Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Font } from '../src/font';\nconst MultiMeasureRestTests = {\n Start() {\n QUnit.module('MultiMeasureRest');\n const run = VexFlowTests.runTests;\n run('Simple Test', simple);\n run('Stave with modifiers Test', staveWithModifiers);\n },\n};\nfunction simple(options) {\n const width = 910;\n const f = VexFlowTests.makeFactory(options, width, 300);\n const line_spacing_15px = { options: { spacing_between_lines_px: 15 } };\n // Each item below is an array that contains:\n // item[0] => staveParams to adjust vertical spacing between lines\n // item[1] => multiMeasureRestParams\n // eslint-disable-next-line\n const params = [\n [{}, { number_of_measures: 2, show_number: false }],\n [{}, { number_of_measures: 2 }],\n [{}, { number_of_measures: 2, line_thickness: 8, serif_thickness: 3 }],\n [{}, { number_of_measures: 1, use_symbols: true }],\n [{}, { number_of_measures: 2, use_symbols: true }],\n [{}, { number_of_measures: 3, use_symbols: true }],\n [{}, { number_of_measures: 4, use_symbols: true }],\n [{}, { number_of_measures: 5, use_symbols: true }],\n [{}, { number_of_measures: 6, use_symbols: true }],\n [{}, { number_of_measures: 7, use_symbols: true }],\n [{}, { number_of_measures: 8, use_symbols: true }],\n [{}, { number_of_measures: 9, use_symbols: true }],\n [{}, { number_of_measures: 10, use_symbols: true }],\n [{}, { number_of_measures: 11, use_symbols: true }],\n [{}, { number_of_measures: 11, use_symbols: false, padding_left: 20, padding_right: 20 }],\n [{}, { number_of_measures: 11, use_symbols: true, symbol_spacing: 5 }],\n [{}, { number_of_measures: 11, use_symbols: false, line: 3, number_line: 2 }],\n [{}, { number_of_measures: 11, use_symbols: true, line: 3, number_line: 2 }],\n [line_spacing_15px, { number_of_measures: 12 }],\n [line_spacing_15px, { number_of_measures: 9, use_symbols: true }],\n [line_spacing_15px, { number_of_measures: 12, spacing_between_lines_px: 15, number_glyph_point: 40 * 1.5 }],\n [\n line_spacing_15px,\n {\n number_of_measures: 9,\n spacing_between_lines_px: 15,\n use_symbols: true,\n number_glyph_point: 40 * 1.5,\n },\n ],\n [\n line_spacing_15px,\n {\n number_of_measures: 9,\n spacing_between_lines_px: 15,\n use_symbols: true,\n number_glyph_point: 40 * 1.5,\n semibreve_rest_glyph_scale: Flow.NOTATION_FONT_SCALE * 1.5,\n },\n ],\n ];\n const staveWidth = 100;\n let x = 0;\n let y = 0;\n const mmRests = params.map((param) => {\n if (x + staveWidth * 2 > width) {\n x = 0;\n y += 80;\n }\n const staveParams = param[0];\n const mmRestParams = param[1];\n staveParams.x = x;\n staveParams.y = y;\n staveParams.width = staveWidth;\n x += staveWidth;\n const stave = f.Stave(staveParams);\n return f.MultiMeasureRest(mmRestParams).setStave(stave);\n });\n f.draw();\n const xs = mmRests[0].getXs();\n // eslint-disable-next-line\n const strY = mmRests[0].getStave().getYForLine(-0.5);\n const str = 'TACET';\n const context = f.getContext();\n context.save();\n context.setFont(Font.SERIF, 16, 'bold');\n const metrics = context.measureText(str);\n context.fillText(str, xs.left + (xs.right - xs.left) * 0.5 - metrics.width * 0.5, strY);\n context.restore();\n options.assert.ok(true, 'Simple Test');\n}\nfunction staveWithModifiers(options) {\n const width = 910;\n const f = VexFlowTests.makeFactory(options, width, 200);\n let x = 0;\n let y = 0;\n // eslint-disable-next-line\n const params = [\n [{ clef: 'treble', params: { width: 150 } }, { number_of_measures: 5 }],\n [{ clef: 'treble', keySig: 'G', params: { width: 150 } }, { number_of_measures: 5 }],\n [{ clef: 'treble', timeSig: '4/4', keySig: 'G', params: { width: 150 } }, { number_of_measures: 5 }],\n [{ clef: 'treble', endClef: 'bass', params: { width: 150 } }, { number_of_measures: 5 }],\n [{ clef: 'treble', endKeySig: 'F', params: { width: 150 } }, { number_of_measures: 5 }],\n [{ clef: 'treble', endTimeSig: '2/4', params: { width: 150 } }, { number_of_measures: 5 }],\n [{ clef: 'treble', endClef: 'bass', endTimeSig: '2/4', params: { width: 150 } }, { number_of_measures: 5 }],\n [\n { clef: 'treble', endClef: 'bass', endTimeSig: '2/4', params: { width: 150 } },\n { number_of_measures: 5, use_symbols: true },\n ],\n ];\n params.forEach((param) => {\n const staveOptions = param[0];\n // eslint-disable-next-line\n const staveParams = staveOptions.params;\n const mmrestParams = param[1];\n if (x + staveParams.width > width) {\n x = 0;\n y += 80;\n }\n staveParams.x = x;\n x += staveParams.width;\n staveParams.y = y;\n const stave = f.Stave(staveParams);\n if (staveOptions.clef) {\n stave.addClef(staveOptions.clef);\n }\n if (staveOptions.timeSig) {\n stave.addTimeSignature(staveOptions.timeSig);\n }\n if (staveOptions.keySig) {\n stave.addKeySignature(staveOptions.keySig);\n }\n if (staveOptions.endClef) {\n stave.addEndClef(staveOptions.endClef);\n }\n if (staveOptions.endKeySig) {\n stave.setEndKeySignature(staveOptions.endKeySig);\n }\n if (staveOptions.endTimeSig) {\n stave.setEndTimeSignature(staveOptions.endTimeSig);\n }\n return f.MultiMeasureRest(mmrestParams).setStave(stave);\n });\n f.draw();\n options.assert.ok(true, 'Stave with modifiers Test');\n}\nVexFlowTests.register(MultiMeasureRestTests);\nexport { MultiMeasureRestTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Music Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { KeyManager } from '../src/keymanager';\nimport { Music } from '../src/music';\nconst MusicTests = {\n Start() {\n QUnit.module('MusicTests');\n QUnit.test('Valid Notes', validNotes);\n QUnit.test('Valid Keys', validKeys);\n QUnit.test('Note Values', noteValue);\n QUnit.test('Interval Values', intervalValue);\n QUnit.test('Relative Notes', relativeNotes);\n QUnit.test('Relative Note Names', relativeNoteNames);\n QUnit.test('Canonical Notes', canonicalNotes);\n QUnit.test('Canonical Intervals', canonicalIntervals);\n QUnit.test('Scale Tones', scaleTones);\n QUnit.test('Scale Intervals', scaleIntervals);\n },\n};\nfunction validNotes(assert) {\n assert.expect(10);\n const music = new Music();\n let parts = music.getNoteParts('c');\n assert.equal(parts.root, 'c');\n assert.equal(parts.accidental, null);\n // getNoteParts() converts its argument to lowercase.\n parts = music.getNoteParts('C');\n assert.equal(parts.root, 'c');\n assert.equal(parts.accidental, null);\n parts = music.getNoteParts('c#');\n assert.equal(parts.root, 'c');\n assert.equal(parts.accidental, '#');\n parts = music.getNoteParts('c##');\n assert.equal(parts.root, 'c');\n assert.equal(parts.accidental, '##');\n assert.throws(() => music.getNoteParts('r'), /BadArguments/, 'Invalid note: r');\n assert.throws(() => music.getNoteParts(''), /BadArguments/, \"Invalid note: ''\");\n}\nfunction validKeys(assert) {\n assert.expect(18);\n const music = new Music();\n let parts = music.getKeyParts('c');\n assert.equal(parts.root, 'c');\n assert.equal(parts.accidental, null);\n assert.equal(parts.type, 'M');\n parts = music.getKeyParts('d#');\n assert.equal(parts.root, 'd');\n assert.equal(parts.accidental, '#');\n assert.equal(parts.type, 'M');\n parts = music.getKeyParts('fbm');\n assert.equal(parts.root, 'f');\n assert.equal(parts.accidental, 'b');\n assert.equal(parts.type, 'm');\n parts = music.getKeyParts('c#mel');\n assert.equal(parts.root, 'c');\n assert.equal(parts.accidental, '#');\n assert.equal(parts.type, 'mel');\n parts = music.getKeyParts('g#harm');\n assert.equal(parts.root, 'g');\n assert.equal(parts.accidental, '#');\n assert.equal(parts.type, 'harm');\n assert.throws(() => music.getKeyParts('r'), /BadArguments/, 'Invalid key: r');\n assert.throws(() => music.getKeyParts(''), /BadArguments/, `Invalid key: ''`);\n assert.throws(() => music.getKeyParts('#m'), /BadArguments/, 'Invalid key: #m');\n}\nfunction noteValue(assert) {\n assert.expect(3);\n const music = new Music();\n let note = music.getNoteValue('c');\n assert.equal(note, 0);\n assert.throws(() => music.getNoteValue('r'), /BadArguments/, 'Invalid note name');\n note = music.getNoteValue('f#');\n assert.equal(note, 6);\n}\nfunction intervalValue(assert) {\n assert.expect(2);\n const music = new Music();\n const value = music.getIntervalValue('b2');\n assert.equal(value, 1);\n assert.throws(() => music.getIntervalValue('7'), /BadArguments/, 'Invalid interval name');\n}\nfunction relativeNotes(assert) {\n assert.expect(8);\n const music = new Music();\n let value = music.getRelativeNoteValue(music.getNoteValue('c'), music.getIntervalValue('b5'));\n assert.equal(value, 6);\n assert.throws(() => music.getRelativeNoteValue(music.getNoteValue('bc'), music.getIntervalValue('b2')), /BadArguments/, 'Invalid note');\n assert.throws(() => music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('p3')), /BadArguments/, 'Invalid interval');\n // Direction\n value = music.getRelativeNoteValue(music.getNoteValue('d'), music.getIntervalValue('2'), -1);\n assert.equal(value, 0);\n assert.throws(() => music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('p4'), 0), /BadArguments/, 'Invalid direction: 0');\n // Rollover\n value = music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('b5'));\n assert.equal(value, 5);\n // Reverse rollover\n value = music.getRelativeNoteValue(music.getNoteValue('c'), music.getIntervalValue('b2'), -1);\n assert.equal(value, 11);\n // Practical tests\n value = music.getRelativeNoteValue(music.getNoteValue('g'), music.getIntervalValue('p5'));\n assert.equal(value, 2);\n}\nfunction relativeNoteNames(assert) {\n assert.expect(9);\n const music = new Music();\n assert.equal(music.getRelativeNoteName('b', music.getNoteValue('c#')), 'b##');\n assert.equal(music.getRelativeNoteName('c', music.getNoteValue('c')), 'c');\n assert.equal(music.getRelativeNoteName('c', music.getNoteValue('db')), 'c#');\n assert.equal(music.getRelativeNoteName('c', music.getNoteValue('b')), 'cb');\n assert.equal(music.getRelativeNoteName('c#', music.getNoteValue('db')), 'c#');\n assert.equal(music.getRelativeNoteName('e', music.getNoteValue('f#')), 'e##');\n assert.equal(music.getRelativeNoteName('e', music.getNoteValue('d#')), 'eb');\n assert.equal(music.getRelativeNoteName('e', music.getNoteValue('fb')), 'e');\n assert.throws(() => music.getRelativeNoteName('e', music.getNoteValue('g#')), /BadArguments/, 'Too far away. Notes not related.');\n}\nfunction canonicalNotes(assert) {\n assert.expect(3);\n const music = new Music();\n assert.equal(music.getCanonicalNoteName(0), 'c');\n assert.equal(music.getCanonicalNoteName(2), 'd');\n assert.throws(() => music.getCanonicalNoteName(-1), /BadArguments/, 'Invalid note value');\n}\nfunction canonicalIntervals(assert) {\n assert.expect(3);\n const music = new Music();\n assert.equal(music.getCanonicalIntervalName(0), 'unison');\n assert.equal(music.getCanonicalIntervalName(2), 'M2');\n assert.throws(() => music.getCanonicalIntervalName(-1), /BadArguments/, 'Invalid interval value');\n}\nfunction scaleTones(assert) {\n assert.expect(24);\n // C Major\n const music = new Music();\n const manager = new KeyManager('CM');\n const c_major = music.getScaleTones(music.getNoteValue('c'), Music.scales.major);\n let values = ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n assert.equal(c_major.length, 7);\n for (let i = 0; i < c_major.length; ++i) {\n assert.equal(music.getCanonicalNoteName(c_major[i]), values[i]);\n }\n // Dorian\n const c_dorian = music.getScaleTones(music.getNoteValue('c'), Music.scales.dorian);\n values = ['c', 'd', 'eb', 'f', 'g', 'a', 'bb'];\n let note = null;\n assert.equal(c_dorian.length, 7);\n for (let i = 0; i < c_dorian.length; ++i) {\n note = music.getCanonicalNoteName(c_dorian[i]);\n assert.equal(manager.selectNote(note).note, values[i]);\n }\n // Mixolydian\n const c_mixolydian = music.getScaleTones(music.getNoteValue('c'), Music.scales.mixolydian);\n values = ['c', 'd', 'e', 'f', 'g', 'a', 'bb'];\n assert.equal(c_mixolydian.length, 7);\n for (let i = 0; i < c_mixolydian.length; ++i) {\n note = music.getCanonicalNoteName(c_mixolydian[i]);\n assert.equal(manager.selectNote(note).note, values[i]);\n }\n}\nfunction scaleIntervals(assert) {\n assert.expect(6);\n const m = new Music();\n assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('c'), m.getNoteValue('d'))), 'M2');\n assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('g'), m.getNoteValue('c'))), 'p4');\n assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('c'), m.getNoteValue('c'))), 'unison');\n assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('f'), m.getNoteValue('cb'))), 'dim5');\n // Forwards and backwards\n assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('d'), m.getNoteValue('c'), 1)), 'b7');\n assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('d'), m.getNoteValue('c'), -1)), 'M2');\n}\nVexFlowTests.register(MusicTests);\nexport { MusicTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// NoteHead Tests\n// TODO: There is a bug in RenderContext.scale(). The CanvasContext works as expected.\n// Each time you call scale(sx, sy), it multiplies the sx and sy by the currently stored scale.\n// The SVGContext operates differently. It just sets the sx and sy as the new scale, instead of multiplying it.\n// See: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/scale\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { NoteHead } from '../src/notehead';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { TickContext } from '../src/tickcontext';\nimport { Voice } from '../src/voice';\nconst NoteHeadTests = {\n Start() {\n QUnit.module('NoteHead');\n const run = VexFlowTests.runTests;\n run('Basic', basic);\n run('Various Note Heads 1', variousNoteHeads);\n run('Various Note Heads 2', variousNoteHeads2);\n run('Various Heads', variousHeads);\n run('Drum Chord Heads', drumChordHeads);\n run('Bounding Boxes', basicBoundingBoxes);\n },\n};\nfunction setContextStyle(ctx) {\n // The final scale should be 1.8.\n ctx.scale(0.9, 0.9);\n ctx.scale(2.0, 2.0);\n //ctx.scale(1.8, 1.8);\n ctx.font = '10pt Arial';\n}\nfunction basic(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 450, 250);\n setContextStyle(ctx);\n const stave = new Stave(10, 0, 250).addClef('treble');\n stave.setContext(ctx).draw();\n const formatter = new Formatter();\n const voice = new Voice(Flow.TIME4_4).setStrict(false);\n const note_head1 = new NoteHead({ duration: '4', line: 3 });\n const note_head2 = new NoteHead({ duration: '1', line: 2.5 });\n const note_head3 = new NoteHead({ duration: '2', line: 0 });\n voice.addTickables([note_head1, note_head2, note_head3]);\n formatter.joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n options.assert.ok('Basic NoteHead test');\n}\n/**\n * Used by the next two test cases to draw a note.\n */\nfunction showNote(noteStruct, stave, ctx, x) {\n const note = new StaveNote(noteStruct).setStave(stave);\n new TickContext().addTickable(note).preFormat().setX(x);\n note.setContext(ctx).draw();\n return note;\n}\nfunction variousHeads(options, contextBuilder) {\n const notes = [\n { keys: ['g/5/d0'], duration: '4' },\n { keys: ['g/5/d1'], duration: '4' },\n { keys: ['g/5/d2'], duration: '4' },\n { keys: ['g/5/d3'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/t0'], duration: '1' },\n { keys: ['g/5/t1'], duration: '4' },\n { keys: ['g/5/t2'], duration: '4' },\n { keys: ['g/5/t3'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/x0'], duration: '1' },\n { keys: ['g/5/x1'], duration: '4' },\n { keys: ['g/5/x2'], duration: '4' },\n { keys: ['g/5/x3'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/s1'], duration: '4' },\n { keys: ['g/5/s2'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/r1'], duration: '4' },\n { keys: ['g/5/r2'], duration: '4' },\n ];\n const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240);\n // Draw two staves, one with up-stems and one with down-stems.\n for (let staveNum = 0; staveNum < 2; ++staveNum) {\n const stave = new Stave(10, 10 + staveNum * 120, notes.length * 25 + 75)\n .addClef('percussion')\n .setContext(ctx)\n .draw();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n note.stem_direction = staveNum === 0 ? -1 : 1;\n const staveNote = showNote(note, stave, ctx, (i + 1) * 25);\n options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n }\n}\nfunction variousNoteHeads(options, contextBuilder) {\n const notes = [\n { keys: ['g/5/d'], duration: '1/2' },\n { keys: ['g/5/d'], duration: '1' },\n { keys: ['g/5/d'], duration: '2' },\n { keys: ['g/5/d'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/x'], duration: '1/2' },\n { keys: ['g/5/x'], duration: '1' },\n { keys: ['g/5/x'], duration: '2' },\n { keys: ['g/5/x'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/cx'], duration: '1/2' },\n { keys: ['g/5/cx'], duration: '1' },\n { keys: ['g/5/cx'], duration: '2' },\n { keys: ['g/5/cx'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/tu'], duration: '1/2' },\n { keys: ['g/5/tu'], duration: '1' },\n { keys: ['g/5/tu'], duration: '2' },\n { keys: ['g/5/tu'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/td'], duration: '1/2' },\n { keys: ['g/5/td'], duration: '1' },\n { keys: ['g/5/td'], duration: '2' },\n { keys: ['g/5/td'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/sf'], duration: '1/2' },\n { keys: ['g/5/sf'], duration: '1' },\n { keys: ['g/5/sf'], duration: '2' },\n { keys: ['g/5/sf'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/sb'], duration: '1/2' },\n { keys: ['g/5/sb'], duration: '1' },\n { keys: ['g/5/sb'], duration: '2' },\n { keys: ['g/5/sb'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/ci'], duration: '1/2' },\n { keys: ['g/5/ci'], duration: '1' },\n { keys: ['g/5/ci'], duration: '2' },\n { keys: ['g/5/ci'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/sq'], duration: '1/2' },\n { keys: ['g/5/sq'], duration: '1' },\n { keys: ['g/5/sq'], duration: '2' },\n { keys: ['g/5/sq'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n ];\n const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240);\n // Draw two staves, one with up-stems and one with down-stems.\n for (let staveNum = 0; staveNum < 2; ++staveNum) {\n const stave = new Stave(10, 10 + staveNum * 120, notes.length * 25 + 75)\n .addClef('percussion')\n .setContext(ctx)\n .draw();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n note.stem_direction = staveNum === 0 ? -1 : 1;\n const staveNote = showNote(note, stave, ctx, (i + 1) * 25);\n options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n }\n}\nfunction variousNoteHeads2(options, contextBuilder) {\n const notes = [\n { keys: ['g/5/do'], duration: '4', auto_stem: true },\n { keys: ['g/5/re'], duration: '4', auto_stem: true },\n { keys: ['g/5/mi'], duration: '4', auto_stem: true },\n { keys: ['g/5/fa'], duration: '4', auto_stem: true },\n { keys: ['e/4/faup'], duration: '4', auto_stem: true },\n { keys: ['g/5/so'], duration: '4', auto_stem: true },\n { keys: ['g/5/la'], duration: '4', auto_stem: true },\n { keys: ['g/5/ti'], duration: '4', auto_stem: true },\n ];\n const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240);\n const stave = new Stave(10, 10, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const staveNote = showNote(note, stave, ctx, (i + 1) * 25);\n options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction drumChordHeads(options, contextBuilder) {\n const notes = [\n { keys: ['a/4/d0', 'g/5/x3'], duration: '4' },\n { keys: ['a/4/x3', 'g/5/d0'], duration: '4' },\n { keys: ['a/4/d1', 'g/5/x2'], duration: '4' },\n { keys: ['a/4/x2', 'g/5/d1'], duration: '4' },\n { keys: ['a/4/d2', 'g/5/x1'], duration: '4' },\n { keys: ['a/4/x1', 'g/5/d2'], duration: '4' },\n { keys: ['a/4/d3', 'g/5/x0'], duration: '4' },\n { keys: ['a/4/x0', 'g/5/d3'], duration: '4' },\n { keys: ['a/4', 'g/5/d0'], duration: '4' },\n { keys: ['a/4/x3', 'g/5'], duration: '4' },\n { keys: ['a/4/t0', 'g/5/s1'], duration: '4' },\n { keys: ['a/4/s1', 'g/5/t0'], duration: '4' },\n { keys: ['a/4/t1', 'g/5/s2'], duration: '4' },\n { keys: ['a/4/s2', 'g/5/t1'], duration: '4' },\n { keys: ['a/4/t2', 'g/5/r1'], duration: '4' },\n { keys: ['a/4/r1', 'g/5/t2'], duration: '4' },\n { keys: ['a/4/t3', 'g/5/r2'], duration: '4' },\n { keys: ['a/4/r2', 'g/5/t3'], duration: '4' },\n ];\n const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240);\n // Draw two staves, one with up-stems and one with down-stems.\n for (let h = 0; h < 2; ++h) {\n const stave = new Stave(10, 10 + h * 120, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n note.stem_direction = h === 0 ? -1 : 1;\n const staveNote = showNote(note, stave, ctx, (i + 1) * 25);\n options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n }\n}\nfunction basicBoundingBoxes(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 450, 250);\n setContextStyle(ctx);\n // 250 is 450/1.8\n const stave = new Stave(10, 0, 250).addClef('treble');\n stave.setContext(ctx).draw();\n const formatter = new Formatter();\n const voice = new Voice(Flow.TIME4_4).setStrict(false);\n const nh1 = new StaveNote({ keys: ['b/4'], duration: '4' });\n const nh2 = new StaveNote({ keys: ['a/4'], duration: '2' });\n const nh3 = new NoteHead({ duration: '1', line: 0 });\n voice.addTickables([nh1, nh2, nh3]);\n formatter.joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n for (const bb of [nh1.noteHeads[0].getBoundingBox(), nh2.noteHeads[0].getBoundingBox(), nh3.getBoundingBox()]) {\n ctx.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH());\n }\n ctx.stroke();\n options.assert.ok('NoteHead Bounding Boxes');\n}\nVexFlowTests.register(NoteHeadTests);\nexport { NoteHeadTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Author: Taehoon Moon 2016\n//\n// NoteSubGroup Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { BarNote } from '../src/barnote';\nimport { Note } from '../src/note';\nimport { BarlineType } from '../src/stavebarline';\nconst NoteSubGroupTests = {\n Start() {\n QUnit.module('NoteSubGroup');\n const run = VexFlowTests.runTests;\n run('Basic - ClefNote, TimeSigNote and BarNote', basic);\n run('Multi Voice', multiVoiceSingleDraw);\n run('Multi Voice Multiple Draws', multiVoiceDoubleDraw);\n run('Multi Staff', multiStaff);\n },\n};\n// Return three helper functions for creating StaveNotes, and adding Accidental & NoteSubGroup to those StaveNotes.\nfunction createShortcuts(f) {\n return {\n createStaveNote: (noteStruct) => f.StaveNote(noteStruct),\n addAccidental: (note, accid) => note.addModifier(f.Accidental({ type: accid }), 0),\n addSubGroup: (note, subNotes) => note.addModifier(f.NoteSubGroup({ notes: subNotes }), 0),\n };\n}\nfunction basic(options) {\n const f = VexFlowTests.makeFactory(options, 750, 200);\n const ctx = f.getContext();\n const stave = f.Stave({ width: 600 }).addClef('treble');\n const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f);\n const notes = [\n { keys: ['f/5'], stem_direction: -1, duration: '4' },\n { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'bass' },\n { keys: ['g/4'], stem_direction: -1, duration: '4', clef: 'alto' },\n { keys: ['a/4'], stem_direction: -1, duration: '4', clef: 'alto' },\n { keys: ['c/4'], stem_direction: -1, duration: '4', clef: 'tenor' },\n { keys: ['c/3'], stem_direction: +1, duration: '4', clef: 'tenor' },\n { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'tenor' },\n { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'tenor' },\n ].map(createStaveNote);\n addAccidental(notes[1], '#');\n addAccidental(notes[2], 'n');\n addSubGroup(notes[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]);\n addSubGroup(notes[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } })]);\n addSubGroup(notes[4], [f.ClefNote({ type: 'tenor', options: { size: 'small' } }), new BarNote()]);\n addSubGroup(notes[5], [f.TimeSigNote({ time: '6/8' })]);\n addSubGroup(notes[6], [new BarNote(BarlineType.REPEAT_BEGIN)]);\n addAccidental(notes[4], 'b');\n addAccidental(notes[6], 'bb');\n const voice = f.Voice().setStrict(false).addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n notes.forEach((note) => Note.plotMetrics(ctx, note, 150));\n VexFlowTests.plotLegendForNoteWidth(ctx, 620, 120);\n options.assert.ok(true, 'all pass');\n}\nfunction multiVoiceSingleDraw(options) {\n multiVoiceHelper(options, 1);\n}\n/**\n * Call Factory.draw() twice. It should look identical to the multiVoice test case above.\n */\nfunction multiVoiceDoubleDraw(options) {\n multiVoiceHelper(options, 2);\n}\n/**\n * Used by multiVoiceSingleDraw and multiVoiceDoubleDraw above.\n */\nfunction multiVoiceHelper(options, numDraws) {\n const f = VexFlowTests.makeFactory(options, 550, 200);\n const ctx = f.getContext();\n const stave = f.Stave().addClef('treble');\n const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f);\n const notes1 = [\n { keys: ['f/5'], stem_direction: 1, duration: '4' },\n { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' },\n { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' },\n { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' },\n ].map(createStaveNote);\n const notes2 = [\n { keys: ['c/4'], stem_direction: -1, duration: '4' },\n { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' },\n { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' },\n { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' },\n ].map(createStaveNote);\n addAccidental(notes1[1], '#');\n addSubGroup(notes1[1], [\n f.ClefNote({ type: 'bass', options: { size: 'small' } }),\n new BarNote(BarlineType.REPEAT_BEGIN),\n f.TimeSigNote({ time: '3/4' }),\n ]);\n addSubGroup(notes2[2], [\n f.ClefNote({ type: 'alto', options: { size: 'small' } }),\n f.TimeSigNote({ time: '9/8' }),\n new BarNote(BarlineType.DOUBLE),\n ]);\n addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]);\n addAccidental(notes1[2], 'b');\n addAccidental(notes2[3], '#');\n const voices = [f.Voice().addTickables(notes1), f.Voice().addTickables(notes2)];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n for (let i = 0; i < numDraws; i++) {\n f.draw();\n }\n notes1.forEach((note) => Note.plotMetrics(ctx, note, 150));\n options.assert.ok(true, 'all pass');\n}\nfunction multiStaff(options) {\n const f = VexFlowTests.makeFactory(options, 550, 400);\n const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f);\n const stave1 = f.Stave({ x: 15, y: 30, width: 500 }).setClef('treble');\n const notes1 = [\n { keys: ['f/5'], stem_direction: 1, duration: '4' },\n { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' },\n { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' },\n { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' },\n ].map(createStaveNote);\n const notes2 = [\n { keys: ['c/4'], stem_direction: -1, duration: '4' },\n { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' },\n { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' },\n { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' },\n ].map(createStaveNote);\n const stave2 = f.Stave({ x: 15, y: 150, width: 500 }).setClef('bass');\n const notes3 = [\n { keys: ['e/3'], duration: '8', stem_direction: -1, clef: 'bass' },\n { keys: ['g/4'], duration: '8', stem_direction: 1, clef: 'treble' },\n { keys: ['d/4'], duration: '8', stem_direction: 1, clef: 'treble' },\n { keys: ['f/4'], duration: '8', stem_direction: 1, clef: 'treble' },\n { keys: ['c/4'], duration: '8', stem_direction: 1, clef: 'treble' },\n { keys: ['g/3'], duration: '8', stem_direction: -1, clef: 'bass' },\n { keys: ['d/3'], duration: '8', stem_direction: -1, clef: 'bass' },\n { keys: ['f/3'], duration: '8', stem_direction: -1, clef: 'bass' },\n ].map(createStaveNote);\n f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'brace' });\n f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleLeft' });\n f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleRight' });\n f.Beam({ notes: notes3.slice(1, 4) });\n f.Beam({ notes: notes3.slice(5) });\n addAccidental(notes1[1], '#');\n addSubGroup(notes1[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } }), f.TimeSigNote({ time: '3/4' })]);\n addSubGroup(notes2[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } }), f.TimeSigNote({ time: '9/8' })]);\n addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]);\n addSubGroup(notes3[1], [f.ClefNote({ type: 'treble', options: { size: 'small' } })]);\n addSubGroup(notes3[5], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]);\n addAccidental(notes3[0], '#');\n addAccidental(notes3[3], 'b');\n addAccidental(notes3[5], '#');\n addAccidental(notes1[2], 'b');\n addAccidental(notes2[3], '#');\n const voice1 = f.Voice().addTickables(notes1);\n const voice2 = f.Voice().addTickables(notes2);\n const voice3 = f.Voice().addTickables(notes3);\n f.Formatter().joinVoices([voice1, voice2]).joinVoices([voice3]).formatToStave([voice1, voice2, voice3], stave1);\n f.draw();\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(NoteSubGroupTests);\nexport { NoteSubGroupTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\n//\n// OffscreenCanvas Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { CanvasContext } from '../src/canvascontext';\nimport { Formatter } from '../src/formatter';\nimport { Stave } from '../src/stave';\nimport { BarlineType } from '../src/stavebarline';\nimport { StaveNote } from '../src/stavenote';\nimport { globalObject } from '../src/util';\nconst OffscreenCanvasTests = {\n Start() {\n // At the time of writing, OffscreenCanvas is still an experimental technology.\n if (globalObject().OffscreenCanvas === undefined) {\n return;\n }\n QUnit.module('OffscreenCanvas');\n QUnit.test('Simple Test', simpleTest);\n },\n};\nfunction simpleTest(assert) {\n // Create a CanvasContext from an OffscreenCanvas.\n // eslint-disable-next-line\n // @ts-ignore\n const offscreenCanvas = new OffscreenCanvas(550, 200);\n // eslint-disable-next-line\n // @ts-ignore\n const offscreenCtx = offscreenCanvas.getContext('2d');\n if (offscreenCtx == null) {\n throw new Error(\"Couldn't create offscreen context\");\n }\n const ctx = new CanvasContext(offscreenCtx);\n // Render to the OffscreenCavans.\n const stave = new Stave(10, 50, 200);\n stave.setEndBarType(BarlineType.END);\n stave.addClef('treble').setContext(ctx).draw();\n const notes = [\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n new StaveNote({ keys: ['d/4'], duration: 'q' }),\n new StaveNote({ keys: ['b/4'], duration: 'qr' }),\n new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n // Copy the contents of the OffscreenCanvas to an HTMLCanvasElement.\n const imgBmp = offscreenCanvas.transferToImageBitmap();\n const canvas = document.createElement('canvas');\n canvas.width = offscreenCanvas.width;\n canvas.height = offscreenCanvas.height;\n const canvasCtx = canvas.getContext('2d');\n if (canvasCtx == null) {\n throw new Error(\"Couldn't create canvas context\");\n }\n canvasCtx.drawImage(imgBmp, 0, 0);\n document.body.appendChild(canvas);\n assert.ok(true, 'all pass');\n}\nVexFlowTests.register(OffscreenCanvasTests);\nexport { OffscreenCanvasTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Author: Cyril Silverman\n//\n// Ornament Tests\n// TODO: Formatting for Jazz Ornaments is incorrect. The last note + ornament bleeds into the next measure.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Beam } from '../src/beam';\nimport { Dot } from '../src/dot';\nimport { Formatter } from '../src/formatter';\nimport { Glyph } from '../src/glyph';\nimport { Ornament } from '../src/ornament';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { Voice, VoiceMode } from '../src/voice';\nconst OrnamentTests = {\n Start() {\n QUnit.module('Ornament');\n const run = VexFlowTests.runTests;\n run('Ornaments', drawOrnaments);\n run('Ornaments Vertically Shifted', drawOrnamentsDisplaced);\n run('Ornaments - Delayed turns', drawOrnamentsDelayed);\n run('Ornaments - Delayed turns, Multiple Draws', drawOrnamentsDelayedMultipleDraws);\n run('Ornaments - Delayed turns, Multiple Voices', drawOrnamentsDelayedMultipleVoices);\n run('Stacked', drawOrnamentsStacked);\n run('With Upper/Lower Accidentals', drawOrnamentsWithAccidentals);\n run('Jazz Ornaments', jazzOrnaments);\n },\n};\nfunction drawOrnaments(options, contextBuilder) {\n options.assert.expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 750, 195);\n const stave = new Stave(10, 30, 700);\n stave.setContext(ctx).draw();\n const notes = [\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n ];\n notes[0].addModifier(new Ornament('mordent'), 0);\n notes[1].addModifier(new Ornament('mordent_inverted'), 0);\n notes[2].addModifier(new Ornament('turn'), 0);\n notes[3].addModifier(new Ornament('turn_inverted'), 0);\n notes[4].addModifier(new Ornament('tr'), 0);\n notes[5].addModifier(new Ornament('upprall'), 0);\n notes[6].addModifier(new Ornament('downprall'), 0);\n notes[7].addModifier(new Ornament('prallup'), 0);\n notes[8].addModifier(new Ornament('pralldown'), 0);\n notes[9].addModifier(new Ornament('upmordent'), 0);\n notes[10].addModifier(new Ornament('downmordent'), 0);\n notes[11].addModifier(new Ornament('lineprall'), 0);\n notes[12].addModifier(new Ornament('prallprall'), 0);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, stave, notes);\n}\nfunction drawOrnamentsDisplaced(options, contextBuilder) {\n options.assert.expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 750, 195);\n const stave = new Stave(10, 30, 700);\n stave.setContext(ctx).draw();\n const notes = [\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n ];\n notes[0].addModifier(new Ornament('mordent'), 0);\n notes[1].addModifier(new Ornament('mordent_inverted'), 0);\n notes[1].addModifier(new Ornament('mordent_inverted'), 0);\n notes[2].addModifier(new Ornament('turn'), 0);\n notes[3].addModifier(new Ornament('turn_inverted'), 0);\n notes[4].addModifier(new Ornament('tr'), 0);\n notes[5].addModifier(new Ornament('upprall'), 0);\n notes[6].addModifier(new Ornament('downprall'), 0);\n notes[7].addModifier(new Ornament('prallup'), 0);\n notes[8].addModifier(new Ornament('pralldown'), 0);\n notes[9].addModifier(new Ornament('upmordent'), 0);\n notes[10].addModifier(new Ornament('downmordent'), 0);\n notes[11].addModifier(new Ornament('lineprall'), 0);\n notes[12].addModifier(new Ornament('prallprall'), 0);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, stave, notes);\n}\n/**\n * Helper function for the next two tests: drawOrnamentsDelayed and drawOrnamentsDelayedMultipleDraws.\n * setDelayed(true) shifts the turn symbol to the right (after its note).\n */\nconst addDelayedTurns = (f) => {\n // Get the rendering context\n const context = f.getContext();\n const stave = f.Stave({ x: 10, y: 30, width: 500 });\n stave.setContext(context).draw();\n const notes = [\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n ];\n notes[0].addModifier(f.Ornament('turn', { delayed: true }), 0);\n notes[1].addModifier(f.Ornament('turn_inverted', { delayed: true }), 0);\n notes[2].addModifier(f.Ornament('turn_inverted', { delayed: true }), 0);\n notes[3].addModifier(f.Ornament('turn', { delayed: true }), 0);\n return { context, stave, notes };\n};\nfunction drawOrnamentsDelayed(options) {\n options.assert.expect(0);\n const f = VexFlowTests.makeFactory(options, 550, 195);\n const { context, stave, notes } = addDelayedTurns(f);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(context, stave, notes);\n}\nfunction drawOrnamentsDelayedMultipleDraws(options) {\n options.assert.expect(0);\n const f = VexFlowTests.makeFactory(options, 550, 195);\n const { context, stave, notes } = addDelayedTurns(f);\n // We can FormatAndDraw() two times, and it looks fine.\n // However, if you inspect the SVG element, you will see duplicate paths.\n Formatter.FormatAndDraw(context, stave, notes);\n Formatter.FormatAndDraw(context, stave, notes);\n}\nfunction drawOrnamentsDelayedMultipleVoices(options, contextBuilder) {\n options.assert.expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 550, 195);\n const stave = new Stave(10, 30, 500);\n stave.addClef('treble');\n stave.addKeySignature('C#');\n stave.addTimeSignature('4/4');\n const notes1 = [\n new StaveNote({ keys: ['f/5'], duration: '2r' }),\n new StaveNote({ keys: ['c/5'], duration: '2', stem_direction: 1 }),\n ];\n const notes2 = [\n new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['e/4'], duration: '4r' }),\n new StaveNote({ keys: ['e/4'], duration: '2r' }),\n ];\n notes1[1].addModifier(new Ornament('turn_inverted').setDelayed(true), 0);\n notes2[0].addModifier(new Ornament('turn').setDelayed(true), 0);\n const voice1 = new Voice({ num_beats: 4, beat_value: 4, });\n voice1.addTickables(notes1);\n const voice2 = new Voice({ num_beats: 4, beat_value: 4, });\n voice2.addTickables(notes2);\n const formatWidth = stave.getNoteEndX() - stave.getNoteStartX();\n const formatter = new Formatter();\n formatter.joinVoices([voice1]);\n formatter.joinVoices([voice2]);\n formatter.format([voice1, voice2], formatWidth);\n stave.setContext(ctx).draw();\n voice1.draw(ctx, stave);\n voice2.draw(ctx, stave);\n}\nfunction drawOrnamentsStacked(options) {\n options.assert.expect(0);\n // Get the rendering context\n const f = VexFlowTests.makeFactory(options, 550, 195);\n const ctx = f.getContext();\n const stave = f.Stave({ x: 10, y: 30, width: 500 });\n stave.setContext(ctx).draw();\n const notes = [\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n ];\n notes[0].addModifier(f.Ornament('mordent'), 0);\n notes[1].addModifier(f.Ornament('turn_inverted'), 0);\n notes[2].addModifier(f.Ornament('turn'), 0);\n notes[3].addModifier(f.Ornament('turn_inverted'), 0);\n notes[0].addModifier(f.Ornament('turn'), 0);\n notes[1].addModifier(f.Ornament('prallup'), 0);\n notes[2].addModifier(f.Ornament('upmordent'), 0);\n notes[3].addModifier(f.Ornament('lineprall'), 0);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, stave, notes);\n}\nfunction drawOrnamentsWithAccidentals(options) {\n options.assert.expect(0);\n // Get the rendering context\n const f = VexFlowTests.makeFactory(options, 650, 250);\n const ctx = f.getContext();\n const stave = f.Stave({ x: 10, y: 60, width: 600 });\n stave.setContext(ctx).draw();\n const notes = [\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n ];\n notes[0].addModifier(f.Ornament('mordent', { lowerAccidental: '#', upperAccidental: '#' }), 0);\n notes[1].addModifier(f.Ornament('turn_inverted', { lowerAccidental: 'b', upperAccidental: 'b' }), 0);\n notes[2].addModifier(f.Ornament('turn', { upperAccidental: '##', lowerAccidental: '##' }), 0);\n notes[3].addModifier(f.Ornament('mordent_inverted', { lowerAccidental: 'db', upperAccidental: 'db' }), 0);\n notes[4].addModifier(f.Ornament('turn_inverted', { upperAccidental: '++', lowerAccidental: '++' }), 0);\n notes[5].addModifier(f.Ornament('tr', { upperAccidental: 'n', lowerAccidental: 'n' }), 0);\n notes[6].addModifier(f.Ornament('prallup', { upperAccidental: 'd', lowerAccidental: 'd' }), 0);\n notes[7].addModifier(f.Ornament('lineprall', { upperAccidental: 'db', lowerAccidental: 'db' }), 0);\n notes[8].addModifier(f.Ornament('upmordent', { upperAccidental: 'bbs', lowerAccidental: 'bbs' }), 0);\n notes[9].addModifier(f.Ornament('prallprall', { upperAccidental: 'bb', lowerAccidental: 'bb' }), 0);\n notes[10].addModifier(f.Ornament('turn_inverted', { upperAccidental: '+', lowerAccidental: '+' }), 0);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, stave, notes);\n}\nfunction jazzOrnaments(options) {\n const clefWidth = Glyph.getWidth('gClef', 38); // widest clef\n // Helper function.\n function draw(modifiers, keys, x, width, y, stemDirection) {\n // Helper function to create a StaveNote.\n const note = (keys, duration, modifier, stemDirection) => {\n const n = new StaveNote({ keys, duration, stem_direction: stemDirection })\n .addModifier(modifier, 0)\n .addModifier(new Accidental('b'), 0);\n const dot = duration.indexOf('d') >= 0;\n if (dot) {\n Dot.buildAndAttach([n], { all: true });\n }\n return n;\n };\n const stave = new Stave(x, y, width).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(keys, '4d', modifiers[0], stemDirection),\n note(keys, '8', modifiers[1], stemDirection),\n note(keys, '4d', modifiers[2], stemDirection),\n note(keys, '8', modifiers[3], stemDirection),\n ];\n if (modifiers.length > 4) {\n notes[3].addModifier(modifiers[4], 0);\n }\n Beam.generateBeams(notes);\n const voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n }).setMode(VoiceMode.SOFT);\n voice.addTickables(notes);\n const formatter = new Formatter().joinVoices([voice]);\n formatter.format([voice], width - Stave.defaultPadding - clefWidth);\n stave.setContext(ctx).draw();\n voice.draw(ctx, stave);\n }\n options.assert.expect(0);\n const f = VexFlowTests.makeFactory(options, 950, 400);\n const ctx = f.getContext();\n ctx.scale(1, 1);\n const xStart = 10;\n const width = 300;\n const yStart = 50;\n const staffHeight = 70;\n let curX = xStart;\n let curY = yStart;\n let mods = [\n // measure 1\n f.Ornament('scoop'),\n f.Ornament('doit'),\n f.Ornament('fall'),\n f.Ornament('doitLong'),\n ];\n draw(mods, ['a/5'], curX, width, curY, -1);\n curX += width;\n mods = [\n // measure 2\n f.Ornament('fallLong'),\n f.Ornament('bend'),\n f.Ornament('plungerClosed'),\n f.Ornament('plungerOpen'),\n f.Ornament('bend'),\n ];\n draw(mods, ['a/5'], curX, width, curY, -1);\n curX += width;\n mods = [\n // measure 3\n f.Ornament('flip'),\n f.Ornament('jazzTurn'),\n f.Ornament('smear'),\n f.Ornament('doit'),\n ];\n draw(mods, ['a/5'], curX, width, curY, 1);\n // second line\n curX = xStart;\n curY += staffHeight;\n mods = [\n // measure 4\n f.Ornament('scoop'),\n f.Ornament('doit'),\n f.Ornament('fall'),\n f.Ornament('doitLong'),\n ];\n draw(mods, ['e/5'], curX, width, curY);\n curX += width;\n mods = [\n // measure 5\n f.Ornament('fallLong'),\n f.Ornament('bend'),\n f.Ornament('plungerClosed'),\n f.Ornament('plungerOpen'),\n f.Ornament('bend'),\n ];\n draw(mods, ['e/5'], curX, width, curY);\n curX += width;\n mods = [\n // measure 6\n f.Ornament('flip'),\n f.Ornament('jazzTurn'),\n f.Ornament('smear'),\n f.Ornament('doit'),\n ];\n draw(mods, ['e/5'], curX, width, curY);\n // third line\n curX = xStart;\n curY += staffHeight;\n mods = [\n // measure 7\n f.Ornament('scoop'),\n f.Ornament('doit'),\n f.Ornament('fall'),\n f.Ornament('doitLong'),\n ];\n draw(mods, ['e/4'], curX, width, curY);\n curX += width;\n mods = [\n // measure 8\n f.Ornament('fallLong'),\n f.Ornament('bend'),\n f.Ornament('plungerClosed'),\n f.Ornament('plungerOpen'),\n f.Ornament('bend'),\n ];\n draw(mods, ['e/4'], curX, width, curY);\n curX += width;\n mods = [\n // measure 9\n f.Ornament('flip'),\n f.Ornament('jazzTurn'),\n f.Ornament('smear'),\n f.Ornament('doit'),\n ];\n draw(mods, ['e/4'], curX, width, curY);\n}\nVexFlowTests.register(OrnamentTests);\nexport { OrnamentTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Parser Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Parser } from '../src/parser';\nconst ParserTests = {\n Start() {\n QUnit.module('Parser');\n QUnit.test('Basic', basic);\n QUnit.test('Advanced', advanced);\n QUnit.test('Mixed', mixed);\n QUnit.test('Micro Score', microscore);\n },\n};\n/**\n * Grammar used in the first three test cases: basic, advanced, mixed.\n */\nclass TestGrammar {\n // The begin() function is the only requirement when implementing the Grammar interface.\n begin() {\n return () => ({ expect: this.expect });\n }\n BIGORLITTLE() {\n return { expect: [this.BIGLINE, this.LITTLELINE], or: true };\n }\n BIGLINE() {\n return { expect: [this.LBRACE, this.WORD, this.WORDS, this.MAYBEEXCLAIM, this.RBRACE] };\n }\n LITTLELINE() {\n return { expect: [this.WORD, this.WORDS] };\n }\n WORDS() {\n return { expect: [this.COMMA, this.WORD], zeroOrMore: true };\n }\n MAYBEEXCLAIM() {\n return { expect: [this.EXCLAIM], maybe: true };\n }\n LBRACE() {\n return { token: '[{]' };\n }\n RBRACE() {\n return { token: '[}]' };\n }\n WORD() {\n return { token: '[a-zA-Z]+' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n EXCLAIM() {\n return { token: '[!]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\n/**\n * Grammar used in the microscore test case.\n * It represents a series of piano key numbers (Middle C == 40) separated by whitespace.\n * C Major Scale => 40 42 44 45 47 49 51 52\n * A chord is 2 or more piano key numbers surrounded by BRACKETS and separated by PERIODS\n * C Major == [40.44.47]\n * C-major F-major G-major A-minor chord progression => [40.44.47] [45.49.52] [47.51.54] [49.52.56]\n */\nclass MicroScoreGrammar {\n constructor() {\n this.ITEM = () => ({ expect: [this.PIANO_KEY_NUMBER, this.CHORD], or: true });\n this.MAYBE_MORE_ITEMS = () => ({ expect: [this.ITEM], zeroOrMore: true });\n this.PIANO_KEY_NUMBER = () => ({ expect: [this.NUM], oneOrMore: true });\n this.CHORD = () => ({ expect: [this.LEFT_BRACKET, this.PIANO_KEY_NUMBER, this.MORE_CHORD_PARTS, this.RIGHT_BRACKET] });\n this.MORE_CHORD_PARTS = () => ({ expect: [this.PERIOD, this.PIANO_KEY_NUMBER], oneOrMore: true });\n this.NUM = () => ({ token: '\\\\d+' });\n this.WHITESPACE = () => ({ token: '\\\\s+' });\n this.PERIOD = () => ({ token: '\\\\.' });\n this.LEFT_BRACKET = () => ({ token: '\\\\[' });\n this.RIGHT_BRACKET = () => ({ token: '\\\\]' });\n this.EOL = () => ({ token: '$' });\n }\n begin() {\n return () => ({ expect: [this.ITEM, this.MAYBE_MORE_ITEMS, this.EOL] });\n }\n}\n/**\n * Check that the result is a parse failure, and verify the error position.\n */\nfunction fails(assert, result, expectedErrorPos, msg) {\n assert.notOk(result.success, msg);\n assert.equal(result.errorPos, expectedErrorPos, msg);\n}\nfunction basic(assert) {\n const grammar = new TestGrammar();\n grammar.expect = [grammar.LITTLELINE, grammar.EOL];\n const parser = new Parser(grammar);\n // Each of these strings will parse correctly.\n const mustPass = ['first, second', 'first,second', 'first', 'first,second, third'];\n mustPass.forEach((line) => assert.equal(parser.parse(line).success, true, line));\n fails(assert, parser.parse(''), 0);\n fails(assert, parser.parse('first second'), 6);\n fails(assert, parser.parse('first,,'), 5);\n fails(assert, parser.parse('first,'), 5);\n fails(assert, parser.parse(',,'), 0);\n}\nfunction advanced(assert) {\n const grammar = new TestGrammar();\n grammar.expect = [grammar.BIGLINE, grammar.EOL];\n const parser = new Parser(grammar);\n const mustPass = ['{first}', '{first!}', '{first,second}', '{first,second!}', '{first,second,third!}'];\n mustPass.forEach((line) => assert.equal(parser.parse(line).success, true, line));\n fails(assert, parser.parse('{first,second,third,}'), 19);\n fails(assert, parser.parse('first,second,third'), 0);\n fails(assert, parser.parse('{first,second,third'), 19);\n fails(assert, parser.parse('{!}'), 1);\n}\nfunction mixed(assert) {\n const grammar = new TestGrammar();\n grammar.expect = [grammar.BIGORLITTLE, grammar.EOL];\n const parser = new Parser(grammar);\n const mustPass = ['{first,second,third!}', 'first, second'];\n mustPass.forEach((line) => assert.equal(parser.parse(line).success, true, line));\n fails(assert, parser.parse('first second'), 6);\n}\nfunction microscore(assert) {\n const grammar = new MicroScoreGrammar();\n const parser = new Parser(grammar);\n const mustPass = [\n '40 42 44 45 47 49 51 52',\n '[40.44.47] [45.49.52] [47.51.54] [49.52.56]',\n '40 [40.44.47] 45 47 [44.47.51]', // Mixed Notes and Chords: C4 [Cmajor] F4 G4 [Eminor]\n ];\n mustPass.forEach((line) => {\n var _a;\n const result = parser.parse(line);\n assert.equal(result.success, true, line);\n assert.equal((_a = result.matches) === null || _a === void 0 ? void 0 : _a.length, 3, line);\n });\n fails(assert, parser.parse('40 42 44 45 47 49 5A 52'), 19);\n fails(assert, parser.parse('40.44.47] [45.49.52] [47.51.54] [49.52.56]'), 2);\n fails(assert, parser.parse('40 [40] 45 47 [44.47.51]'), 3); // A chord with a single note is not allowed.\n}\nVexFlowTests.register(ParserTests);\nexport { ParserTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// PedalMarking Tests\n// TODO: Fix Error => Type 'Tickable' is not assignable to type 'StaveNote'.\nimport { VexFlowTests } from './vexflow_test_helpers';\nconst PedalMarkingTests = {\n Start() {\n QUnit.module('PedalMarking');\n const run = VexFlowTests.runTests;\n run('Simple Pedal 1', simple1);\n run('Simple Pedal 2', simple2);\n run('Simple Pedal 3', simple3);\n run('Release and Depress on Same Note 1', releaseDepress1);\n run('Release and Depress on Same Note 2', releaseDepress2);\n run('Custom Text 1', customTest1);\n run('Custom Text 2', customTest2);\n },\n};\n/**\n * Every test below uses this to set up the score and two staves/voices.\n */\nfunction createTest(makePedal) {\n return (options) => {\n const f = VexFlowTests.makeFactory(options, 550, 200);\n const score = f.EasyScore();\n const stave0 = f.Stave({ width: 250 }).addClef('treble');\n const voice0 = score.voice(score.notes('b4/4, b4, b4, b4[stem=\"down\"]', { stem: 'up' }));\n f.Formatter().joinVoices([voice0]).formatToStave([voice0], stave0);\n const stave1 = f.Stave({ width: 260, x: 250 });\n const voice1 = score.voice(score.notes('c4/4, c4, c4, c4', { stem: 'up' }));\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n makePedal(f, voice0.getTickables(), voice1.getTickables());\n f.draw();\n options.assert.ok(true, 'Must render');\n };\n}\nfunction withSimplePedal(style) {\n return (factory, notes0, notes1) => factory.PedalMarking({\n notes: [notes0[0], notes0[2], notes0[3], notes1[3]],\n options: { style },\n });\n}\nfunction withReleaseAndDepressedPedal(style) {\n return (factory, notes0, notes1) => factory.PedalMarking({\n notes: [notes0[0], notes0[3], notes0[3], notes1[1], notes1[1], notes1[3]],\n options: { style },\n });\n}\nconst simple1 = createTest(withSimplePedal('text'));\nconst simple2 = createTest(withSimplePedal('bracket'));\nconst simple3 = createTest(withSimplePedal('mixed'));\nconst releaseDepress1 = createTest(withReleaseAndDepressedPedal('bracket'));\nconst releaseDepress2 = createTest(withReleaseAndDepressedPedal('mixed'));\nconst customTest1 = createTest((factory, notes0, notes1) => {\n const pedal = factory.PedalMarking({\n notes: [notes0[0], notes1[3]],\n options: { style: 'text' },\n });\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n});\nconst customTest2 = createTest((factory, notes0, notes1) => {\n const pedal = factory.PedalMarking({\n notes: [notes0[0], notes1[3]],\n options: { style: 'mixed' },\n });\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n});\nVexFlowTests.register(PedalMarkingTests);\nexport { PedalMarkingTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Author: Mike Corrigan 2012 \n//\n// Percussion Tests\n// TODO: Type 'Tickable[]' is not assignable to type 'StemmableNote[]'.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Dot, Font, FontStyle, FontWeight, Stave, StaveNote, TickContext, Tremolo, } from '../src/index';\nconst PercussionTests = {\n Start() {\n QUnit.module('Percussion');\n const run = VexFlowTests.runTests;\n run('Percussion Clef', draw);\n run('Percussion Notes', drawNotes);\n run('Percussion Basic0', basic0);\n run('Percussion Basic1', basic1);\n run('Percussion Basic2', basic2);\n run('Percussion Snare0', snare0);\n run('Percussion Snare1', snare1);\n run('Percussion Snare2', snare2);\n run('Percussion Snare3', snare3);\n },\n};\nfunction draw(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300).addClef('percussion').setContext(ctx).draw();\n options.assert.ok(true);\n}\n/**\n * Helper function used by the drawNotes() test case below.\n */\nfunction showNote(struct, stave, ctx, x) {\n const staveNote = new StaveNote(struct).setStave(stave);\n new TickContext().addTickable(staveNote).preFormat().setX(x);\n staveNote.setContext(ctx).draw();\n return staveNote;\n}\nfunction drawNotes(options, contextBuilder) {\n const notes = [\n { keys: ['g/5/d0'], duration: '4' },\n { keys: ['g/5/d1'], duration: '4' },\n { keys: ['g/5/d2'], duration: '4' },\n { keys: ['g/5/d3'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/t0'], duration: '1' },\n { keys: ['g/5/t1'], duration: '4' },\n { keys: ['g/5/t2'], duration: '4' },\n { keys: ['g/5/t3'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/x0'], duration: '1' },\n { keys: ['g/5/x1'], duration: '4' },\n { keys: ['g/5/x2'], duration: '4' },\n { keys: ['g/5/x3'], duration: '4' },\n ];\n const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240);\n // Draw two staves, one with up-stems and one with down-stems.\n for (let h = 0; h < 2; ++h) {\n const stave = new Stave(10, 10 + h * 120, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n note.stem_direction = h === 0 ? -1 : 1;\n const staveNote = showNote(note, stave, ctx, (i + 1) * 25);\n options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n }\n}\n/**\n * Helper function for the seven test cases below.\n * Adds a percussion clef (two short vertical bars, like a pause sign) to the stave.\n */\nfunction createSingleMeasureTest(setup) {\n return (options) => {\n const f = VexFlowTests.makeFactory(options, 500);\n const stave = f.Stave().addClef('percussion').setTimeSignature('4/4');\n setup(f);\n f.Formatter().joinVoices(f.getVoices()).formatToStave(f.getVoices(), stave);\n f.draw();\n options.assert.ok(true);\n };\n}\nconst basic0 = createSingleMeasureTest((f) => {\n const voice0 = f\n .Voice()\n .addTickables([\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n ]);\n const voice1 = f\n .Voice()\n .addTickables([\n f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }),\n ]);\n f.Beam({ notes: voice0.getTickables() });\n f.Beam({ notes: voice1.getTickables().slice(0, 2) });\n f.Beam({ notes: voice1.getTickables().slice(3, 5) });\n});\nconst basic1 = createSingleMeasureTest((f) => {\n f.Voice().addTickables([\n f.StaveNote({ keys: ['f/5/x2'], duration: '4' }),\n f.StaveNote({ keys: ['f/5/x2'], duration: '4' }),\n f.StaveNote({ keys: ['f/5/x2'], duration: '4' }),\n f.StaveNote({ keys: ['f/5/x2'], duration: '4' }),\n ]);\n f.Voice().addTickables([\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }),\n ]);\n});\nconst basic2 = createSingleMeasureTest((f) => {\n const voice0 = f\n .Voice()\n .addTickables([\n f.StaveNote({ keys: ['a/5/x3'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5'], duration: '8' }),\n f.StaveNote({ keys: ['g/4/n', 'g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n ]);\n f.Beam({ notes: voice0.getTickables().slice(1, 8) });\n const notes1 = [\n f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '8d', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: -1 }),\n ];\n Dot.buildAndAttach([notes1[4]], { all: true });\n const voice1 = f.Voice().addTickables(notes1);\n f.Beam({ notes: voice1.getTickables().slice(0, 2) });\n f.Beam({ notes: voice1.getTickables().slice(4, 6) });\n});\nconst snare0 = createSingleMeasureTest((f) => {\n const font = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n };\n f.Voice().addTickables([\n f\n .StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 })\n .addModifier(f.Articulation({ type: 'a>' }), 0)\n .addModifier(f.Annotation({ text: 'L', font }), 0),\n f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'R', font }), 0),\n f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'L', font }), 0),\n f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'L', font }), 0),\n ]);\n});\nconst snare1 = createSingleMeasureTest((f) => {\n f.Voice().addTickables([\n f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'ah' }), 0),\n f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'ah' }), 0),\n f.StaveNote({ keys: ['a/5/x3'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'a,' }), 0),\n ]);\n});\nconst snare2 = createSingleMeasureTest((f) => {\n f.Voice().addTickables([\n f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(1), 0),\n f.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(1), 0),\n f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(3), 0),\n f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(4), 0),\n ]);\n});\nconst snare3 = createSingleMeasureTest((factory) => {\n factory\n .Voice()\n .addTickables([\n factory.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(2), 0),\n factory.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(2), 0),\n factory.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(3), 0),\n factory.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(4), 0),\n ]);\n});\nVexFlowTests.register(PercussionTests);\nexport { PercussionTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Registry Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { EasyScore, Factory, Registry, StaveNote } from '../src/index';\nconst RegistryTests = {\n Start() {\n QUnit.module('Registry');\n QUnit.test('Register and Clear', registerAndClear);\n QUnit.test('Default Registry', defaultRegistry);\n QUnit.test('Multiple Classes', classes);\n },\n};\nfunction registerAndClear(assert) {\n const registry = new Registry();\n const score = new EasyScore({ factory: Factory.newFromElementId(null) });\n registry.register(score.notes('C4')[0], 'foobar');\n const foobar = registry.getElementById('foobar');\n assert.ok(foobar);\n assert.equal(foobar.getAttribute('id'), 'foobar');\n registry.clear();\n assert.notOk(registry.getElementById('foobar'));\n // eslint-disable-next-line\n // @ts-ignore: intentional type mismatch to trigger an error.\n assert.throws(() => registry.register(score.notes('C4')));\n registry.clear();\n assert.ok(registry.register(score.notes('C4[id=\"boobar\"]')[0]).getElementById('boobar'));\n}\nfunction defaultRegistry(assert) {\n const registry = new Registry();\n const score = new EasyScore({ factory: Factory.newFromElementId(null) });\n Registry.enableDefaultRegistry(registry);\n score.notes('C4[id=\"foobar\"]');\n const note = registry.getElementById('foobar');\n assert.ok(note);\n note.setAttribute('id', 'boobar');\n assert.ok(registry.getElementById('boobar'));\n assert.notOk(registry.getElementById('foobar'));\n registry.clear();\n assert.equal(registry.getElementsByType(StaveNote.CATEGORY).length, 0);\n score.notes('C5');\n const elements = registry.getElementsByType(StaveNote.CATEGORY);\n assert.equal(elements.length, 1);\n}\nfunction classes(assert) {\n const registry = new Registry();\n const score = new EasyScore({ factory: Factory.newFromElementId(null) });\n Registry.enableDefaultRegistry(registry);\n score.notes('C4[id=\"foobar\"]');\n const note = registry.getElementById('foobar');\n note.addClass('foo');\n assert.ok(note.hasClass('foo'));\n assert.notOk(note.hasClass('boo'));\n assert.equal(registry.getElementsByClass('foo').length, 1);\n assert.equal(registry.getElementsByClass('boo').length, 0);\n note.addClass('boo');\n assert.ok(note.hasClass('foo'));\n assert.ok(note.hasClass('boo'));\n assert.equal(registry.getElementsByClass('foo').length, 1);\n assert.equal(registry.getElementsByClass('boo').length, 1);\n note.removeClass('boo');\n note.removeClass('foo');\n assert.notOk(note.hasClass('foo'));\n assert.notOk(note.hasClass('boo'));\n assert.equal(registry.getElementsByClass('foo').length, 0);\n assert.equal(registry.getElementsByClass('boo').length, 0);\n}\nVexFlowTests.register(RegistryTests);\nexport { RegistryTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Renderer Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { CanvasContext, Factory, Formatter, isHTMLCanvas, Renderer, RuntimeError, Stave, StaveNote, SVGContext, } from '../src/index';\n// TODO: Should FactoryOptions.renderer.elementId also accept a canvas | div?\nconst STAVE_WIDTH = 700;\nconst STAVE_HEIGHT = 100;\n// FactoryOptions.stave.space defaults to 10.\n// We subtract 10 to make the useRendererAPI() output look identical to useFactoryAPI().\nconst STAVE_RIGHT_MARGIN = 10;\nconst USE_RENDERER = { useRendererAPI: true };\nconst USE_FACTORY = { useRendererAPI: false };\nconst RendererTests = {\n Start() {\n QUnit.module('Renderer');\n const run = VexFlowTests.runTests;\n // Randomly choose one of four setup paths. See below for a description.\n // Refresh `flow.html` to see the test change each time.\n // We can manually check that they look identical\n // by opening `flow.html` in multiple tabs & quickly switching between tabs.\n run('Random', random);\n // These are the four setup paths. They should all produce the same output.\n // Use the: Renderer API OR Factory API\n // Pass in: element ID string OR canvas/div element.\n run('Renderer API with element ID string', stringElementId, USE_RENDERER);\n run('Renderer API with canvas or div', canvasOrDivElement, USE_RENDERER);\n run('Renderer API with context', passRenderContext);\n run('Factory API with element ID string', stringElementId, USE_FACTORY);\n run('Factory API with canvas or div', canvasOrDivElement, USE_FACTORY);\n },\n};\n/**\n * Helper function to add three notes to a stave.\n */\nfunction drawStave(stave, context) {\n stave.addClef('bass').addTimeSignature('3/4').draw();\n Formatter.FormatAndDraw(context, stave, [\n new StaveNote({ keys: ['C/4'], duration: '4' }),\n new StaveNote({ keys: ['E/4'], duration: '4' }),\n new StaveNote({ keys: ['G/4'], duration: '4' }),\n ]);\n}\n/**\n * Randomize the test upon each refresh (for verifying that the output is identical).\n * Draw a colored outline to indicate which of the four options is shown.\n * - blue = element is a SVG or Canvas element\n * - gray = element ID is a string\n * - solid outline = use the Renderer API directly\n * - dashed outline = use the Factory API\n */\nfunction random(options) {\n const useElementIDString = Math.random() > 0.5;\n const useRendererAPI = Math.random() > 0.5;\n options.params = { useRendererAPI };\n if (useElementIDString) {\n stringElementId(options);\n }\n else {\n canvasOrDivElement(options);\n }\n // eslint-disable-next-line\n const element = document.getElementById(options.elementId);\n const colorForElementType = useElementIDString ? '#CCCCCC' /* light gray */ : '#0074d9'; /* blue */\n const lineStyleForWhichAPI = useRendererAPI ? 'solid' : 'dashed';\n const borderStyle = `3px ${lineStyleForWhichAPI} ${colorForElementType}`;\n let elementType;\n if (options.backend === Renderer.Backends.CANVAS) {\n // If the backend is canvas, we draw a border around the canvas directly.\n element.style.border = borderStyle;\n elementType = '<canvas> element object';\n }\n else {\n // If the backend is SVG, we draw a border around the SVG child of the DIV.\n element.children[0].style.border = borderStyle;\n elementType = '<svg> element object';\n }\n if (useElementIDString) {\n elementType = 'elementID string';\n }\n const whichAPI = useRendererAPI ? 'Renderer API' : 'Factory API';\n element.parentElement.insertAdjacentHTML('beforeend', `
` +\n `${whichAPI}` +\n ` with ` +\n `${elementType}` +\n `

`);\n}\nfunction useRendererAPI(e, backend) {\n const renderer = new Renderer(e, backend);\n renderer.resize(STAVE_WIDTH, STAVE_HEIGHT);\n const context = renderer.getContext();\n drawStave(new Stave(0, 0, STAVE_WIDTH - STAVE_RIGHT_MARGIN).setContext(context), context);\n}\n/**\n * Alternatively, use the Factory API!\n * The Factory API declares elementId to be string | null.\n * However, if we pass in a canvas or div element, it will still work.\n * This is because Factory calls new Renderer(elementId, ...) via Renderer.buildContext().\n */\nfunction useFactoryAPI(e, backend) {\n const opts = {\n renderer: { elementId: e, width: STAVE_WIDTH, height: STAVE_HEIGHT, backend },\n };\n const factory = new Factory(opts);\n drawStave(factory.Stave(), factory.getContext());\n}\n/**\n * Pass in a elementId string. Renderer will call document.getElementById().\n */\nfunction stringElementId(options) {\n const elementId = options.elementId;\n if (options.params.useRendererAPI) {\n useRendererAPI(elementId, options.backend);\n }\n else {\n useFactoryAPI(elementId, options.backend);\n }\n options.assert.ok(true);\n}\n/**\n * Pass a canvas or div element directly to the Renderer constructor.\n */\nfunction canvasOrDivElement(options) {\n const element = document.getElementById(options.elementId);\n if (options.params.useRendererAPI) {\n useRendererAPI(element, options.backend);\n }\n else {\n useFactoryAPI(element, options.backend);\n }\n options.assert.ok(true);\n}\n/**\n * Pass the render context directly to the Renderer constructor.\n */\nfunction passRenderContext(options) {\n let context;\n const element = document.getElementById(options.elementId);\n if (isHTMLCanvas(element)) {\n const ctx = element.getContext('2d');\n if (!ctx) {\n throw new RuntimeError(`Couldn't get context from element \"${options.elementId}\"`);\n }\n context = new CanvasContext(ctx);\n }\n else {\n context = new SVGContext(element);\n }\n const renderer = new Renderer(context);\n renderer.resize(STAVE_WIDTH, STAVE_HEIGHT);\n drawStave(new Stave(0, 0, STAVE_WIDTH - STAVE_RIGHT_MARGIN).setContext(context), context);\n options.assert.ok(true);\n}\nVexFlowTests.register(RendererTests);\nexport { RendererTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Rests Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Beam } from '../src/beam';\nimport { Dot } from '../src/dot';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { Tuplet } from '../src/tuplet';\nimport { Voice } from '../src/voice';\nconst RestsTests = {\n Start() {\n QUnit.module('Rests');\n const run = VexFlowTests.runTests;\n run('Outside Stave', ledgerRest);\n run('Dotted', basic);\n run('Auto Align - Beamed Notes Stems Up', beamsUp);\n run('Auto Align - Beamed Notes Stems Down', beamsDown);\n run('Auto Align - Tuplets Stems Up', tupletsUp);\n run('Auto Align - Tuplets Stems Down', tupletsDown);\n run('Auto Align - Single Voice (Default)', singleVoiceDefaultAlignment);\n run('Auto Align - Single Voice (Align All)', singleVoiceAlignAll);\n run('Auto Align - Multi Voice', multiVoice);\n },\n};\n/**\n * Helper function to create a context and stave.\n *\n * @param options\n * @param contextBuilder static function in renderer.ts (Renderer.getSVGContext or Renderer.getCanvasContext).\n * @param width\n * @param height\n * @returns object with .context and .stave properties\n */\nfunction setupContext(options, contextBuilder, width = 350, height = 150) {\n // context is SVGContext or CanvasRenderingContext2D (native) or CanvasContext (only if Renderer.USE_CANVAS_PROXY is true).\n const context = contextBuilder(options.elementId, width, height);\n context.scale(0.9, 0.9);\n context.font = '10pt Arial';\n const stave = new Stave(10, 30, width).addClef('treble').addTimeSignature('4/4').setContext(context).draw();\n return { context, stave };\n}\n/**\n * Dotted rests (whole to 128th).\n * The rest duration is specified as 'wr', 'hr', ..., '128r'.\n */\nfunction basic(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 700);\n const notes = [\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'wr' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'hr' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '4r' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '8r' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '16r' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '32r' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '64r' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '128r' }),\n ];\n Dot.buildAndAttach(notes, { all: true });\n Formatter.FormatAndDraw(context, stave, notes);\n options.assert.ok(true, 'Dotted Rest Test');\n}\n/**\n * Use the ledger glyph if the whole or half rest is above/below the staff\n */\nfunction ledgerRest(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 700);\n const notes = [\n new StaveNote({ keys: ['a/5'], stem_direction: 1, duration: 'wr' }),\n new StaveNote({ keys: ['c/6'], stem_direction: 1, duration: 'hr' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'hr' }),\n new StaveNote({ keys: ['a/3'], stem_direction: 1, duration: 'wr' }),\n new StaveNote({ keys: ['f/3'], stem_direction: 1, duration: 'hr' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'wr' }),\n ];\n Formatter.FormatAndDraw(context, stave, notes);\n options.assert.ok(true, 'Leger/Ledger Rest Test');\n}\n// Optional: Use a helper function to make your code more concise.\nconst note = (noteStruct) => new StaveNote(noteStruct);\n/**\n * Rests are intermixed within beamed notes (with the stems and beams at the top).\n */\nfunction beamsUp(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 600, 160);\n const notes = [\n note({ keys: ['e/5'], stem_direction: 1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }),\n note({ keys: ['b/5'], stem_direction: 1, duration: '8' }),\n note({ keys: ['c/5'], stem_direction: 1, duration: '8' }),\n note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: 1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }),\n note({ keys: ['c/4'], stem_direction: 1, duration: '8' }),\n note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: 1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }),\n note({ keys: ['c/4'], stem_direction: 1, duration: '8' }),\n ];\n const beam1 = new Beam(notes.slice(0, 4));\n const beam2 = new Beam(notes.slice(4, 8));\n const beam3 = new Beam(notes.slice(8, 12));\n Formatter.FormatAndDraw(context, stave, notes);\n beam1.setContext(context).draw();\n beam2.setContext(context).draw();\n beam3.setContext(context).draw();\n options.assert.ok(true, 'Auto Align Rests - Beams Up Test');\n}\n/**\n * Rests are intermixed within beamed notes (with the stems and beams at the bottom).\n */\nfunction beamsDown(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 600, 160);\n const notes = [\n note({ keys: ['a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['c/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['e/4'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['e/4'], stem_direction: -1, duration: '8' }),\n ];\n const beam1 = new Beam(notes.slice(0, 4));\n const beam2 = new Beam(notes.slice(4, 8));\n const beam3 = new Beam(notes.slice(8, 12));\n Formatter.FormatAndDraw(context, stave, notes);\n beam1.setContext(context).draw();\n beam2.setContext(context).draw();\n beam3.setContext(context).draw();\n options.assert.ok(true, 'Auto Align Rests - Beams Down Test');\n}\n/**\n * Call setTupletLocation(Tuplet.LOCATION_TOP) to place the tuplet indicator (bracket and number) at the\n * top of the group of notes. Tuplet.LOCATION_TOP is the default, so this is optional.\n */\nfunction tupletsUp(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 600, 160);\n const notes = [\n note({ keys: ['b/4'], stem_direction: 1, duration: '4' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '4' }),\n note({ keys: ['a/5'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['a/5'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['g/5'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['b/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['a/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['g/5'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '4' }),\n note({ keys: ['a/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }),\n ];\n const tuplet1 = new Tuplet(notes.slice(0, 3)).setTupletLocation(Tuplet.LOCATION_TOP);\n const tuplet2 = new Tuplet(notes.slice(3, 6)).setTupletLocation(Tuplet.LOCATION_TOP);\n const tuplet3 = new Tuplet(notes.slice(6, 9)).setTupletLocation(Tuplet.LOCATION_TOP);\n const tuplet4 = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_TOP);\n Formatter.FormatAndDraw(context, stave, notes);\n tuplet1.setContext(context).draw();\n tuplet2.setContext(context).draw();\n tuplet3.setContext(context).draw();\n tuplet4.setContext(context).draw();\n options.assert.ok(true, 'Auto Align Rests - Tuplets Stem Up Test');\n}\n/**\n * Call setTupletLocation(Tuplet.LOCATION_BOTTOM) to place the tuplet indicator (bracket and number) at the\n * bottom of the group of notes.\n */\nfunction tupletsDown(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 600, 160);\n const notes = [\n note({ keys: ['a/5'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8' }),\n note({ keys: ['a/5'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['g/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8' }),\n note({ keys: ['a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n ];\n const beam1 = new Beam(notes.slice(0, 3));\n const beam2 = new Beam(notes.slice(3, 6));\n const beam3 = new Beam(notes.slice(6, 9));\n const beam4 = new Beam(notes.slice(9, 12));\n const tuplet1 = new Tuplet(notes.slice(0, 3)).setTupletLocation(Tuplet.LOCATION_BOTTOM);\n const tuplet2 = new Tuplet(notes.slice(3, 6)).setTupletLocation(Tuplet.LOCATION_BOTTOM);\n const tuplet3 = new Tuplet(notes.slice(6, 9)).setTupletLocation(Tuplet.LOCATION_BOTTOM);\n const tuplet4 = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_BOTTOM);\n Formatter.FormatAndDraw(context, stave, notes);\n tuplet1.setContext(context).draw();\n tuplet2.setContext(context).draw();\n tuplet3.setContext(context).draw();\n tuplet4.setContext(context).draw();\n beam1.setContext(context).draw();\n beam2.setContext(context).draw();\n beam3.setContext(context).draw();\n beam4.setContext(context).draw();\n options.assert.ok(true, 'Auto Align Rests - Tuplets Stem Down Test');\n}\n/**\n * By default rests are centered vertically within the stave, except\n * when they are inside a group of beamed notes (in which case they are\n * centered vertically within that group).\n */\nfunction singleVoiceDefaultAlignment(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 600, 160);\n const notes = [\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n note({ keys: ['f/4'], stem_direction: -1, duration: '4' }),\n note({ keys: ['e/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8' }),\n note({ keys: ['e/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['a/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['b/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['d/5'], stem_direction: -1, duration: '4' }),\n note({ keys: ['g/5'], stem_direction: -1, duration: '4' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n ];\n const beam = new Beam(notes.slice(5, 9));\n const tuplet = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_TOP);\n Formatter.FormatAndDraw(context, stave, notes);\n tuplet.setContext(context).draw();\n beam.setContext(context).draw();\n options.assert.ok(true, 'Auto Align Rests - Default Test');\n}\n/**\n * The only difference between staveRestsAll() and staveRests() is that this test case\n * passes { align_rests: true } to Formatter.FormatAndDraw(...).\n */\nfunction singleVoiceAlignAll(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 600, 160);\n const notes = [\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n note({ keys: ['f/4'], stem_direction: -1, duration: '4' }),\n note({ keys: ['e/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8' }),\n note({ keys: ['e/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['a/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['b/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['d/5'], stem_direction: -1, duration: '4' }),\n note({ keys: ['g/5'], stem_direction: -1, duration: '4' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n ];\n const beam = new Beam(notes.slice(5, 9));\n const tuplet = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_TOP);\n // Set { align_rests: true } to align rests (vertically) with nearby notes in each voice.\n Formatter.FormatAndDraw(context, stave, notes, { align_rests: true });\n tuplet.setContext(context).draw();\n beam.setContext(context).draw();\n options.assert.ok(true, 'Auto Align Rests - Align All Test');\n}\n/**\n * Multi Voice\n * The top voice shows quarter-note chords alternating with quarter rests.\n * The bottom voice shows two groups of beamed eighth notes, with eighth rests.\n */\nfunction multiVoice(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n const stave = new Stave(50, 10, 500).addClef('treble').setContext(ctx).addTimeSignature('4/4').draw();\n const noteOnStave = (noteStruct) => new StaveNote(noteStruct).setStave(stave);\n const notes1 = [\n noteOnStave({ keys: ['c/4', 'e/4', 'g/4'], duration: '4' }),\n noteOnStave({ keys: ['b/4'], duration: '4r' }),\n noteOnStave({ keys: ['c/4', 'd/4', 'a/4'], duration: '4' }),\n noteOnStave({ keys: ['b/4'], duration: '4r' }),\n ];\n const notes2 = [\n noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }),\n noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }),\n noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }),\n noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }),\n noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }),\n ];\n const voice1 = new Voice(Flow.TIME4_4).addTickables(notes1);\n const voice2 = new Voice(Flow.TIME4_4).addTickables(notes2);\n // Set { align_rests: true } to align rests (vertically) with nearby notes in each voice.\n new Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave, { align_rests: true });\n const beam2_1 = new Beam(notes2.slice(0, 4));\n const beam2_2 = new Beam(notes2.slice(4, 8));\n // Important Note: we need to draw voice2 first, since voice2 generates ledger lines.\n // Otherwise, the ledger lines will be drawn on top of middle C notes in voice1.\n voice2.draw(ctx);\n voice1.draw(ctx);\n beam2_1.setContext(ctx).draw();\n beam2_2.setContext(ctx).draw();\n options.assert.ok(true, 'Strokes Test Multi Voice');\n}\nVexFlowTests.register(RestsTests);\nexport { RestsTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Rhythm Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Annotation } from '../src/annotation';\nimport { Beam } from '../src/beam';\nimport { Formatter } from '../src/formatter';\nimport { Stave } from '../src/stave';\nimport { BarlineType } from '../src/stavebarline';\nimport { StaveNote } from '../src/stavenote';\nconst RhythmTests = {\n Start() {\n QUnit.module('Rhythm');\n const run = VexFlowTests.runTests;\n // TODO: Simplify test names by removing 'Rhythm Draw - '.\n run('Rhythm Draw - slash notes', drawBasic);\n run('Rhythm Draw - beamed slash notes', drawBeamedSlashNotes);\n run('Rhythm Draw - beamed slash notes, some rests', drawSlashAndBeamAndRests);\n run('Rhythm Draw - 16th note rhythm with scratches', drawSixtenthWithScratches);\n run('Rhythm Draw - 32nd note rhythm with scratches', drawThirtySecondWithScratches);\n },\n};\n// CURRENTLY UNUSED. Draws 7 different slash notes without beams.\n/*\nfunction drawSlash(options: TestOptions, contextBuilder: ContextBuilder): void {\n const ctx = contextBuilder(options.elementId, 350, 180);\n const stave = new Stave(10, 10, 350);\n stave.setContext(ctx);\n stave.draw();\n\n const notes: StaveNoteStruct[] = [\n { keys: ['b/4'], duration: 'ws', stem_direction: -1 },\n { keys: ['b/4'], duration: 'hs', stem_direction: -1 },\n { keys: ['b/4'], duration: 'qs', stem_direction: -1 },\n { keys: ['b/4'], duration: '8s', stem_direction: -1 },\n { keys: ['b/4'], duration: '16s', stem_direction: -1 },\n { keys: ['b/4'], duration: '32s', stem_direction: -1 },\n { keys: ['b/4'], duration: '64s', stem_direction: -1 },\n ];\n options.assert.expect(notes.length * 2);\n\n for (let i = 0; i < notes.length; ++i) {\n const staveNote = new StaveNote(notes[i]).setStave(stave);\n new TickContext()\n .addTickable(staveNote)\n .preFormat()\n .setX((i + 1) * 25);\n staveNote.setContext(ctx).draw();\n\n options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\n*/\nfunction drawBasic(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n // bar 1\n const staveBar1 = new Stave(10, 30, 150);\n staveBar1.setBegBarType(BarlineType.DOUBLE);\n staveBar1.setEndBarType(BarlineType.SINGLE);\n staveBar1.addClef('treble');\n staveBar1.addTimeSignature('4/4');\n staveBar1.addKeySignature('C');\n staveBar1.setContext(ctx).draw();\n const notesBar1 = [new StaveNote({ keys: ['b/4'], duration: '1s', stem_direction: -1 })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1);\n // bar 2 - juxtaposing second bar next to first bar\n const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 120);\n staveBar2.setBegBarType(BarlineType.SINGLE);\n staveBar2.setEndBarType(BarlineType.SINGLE);\n staveBar2.setContext(ctx).draw();\n // bar 2\n const notesBar2 = [\n new StaveNote({ keys: ['b/4'], duration: '2s', stem_direction: -1 }),\n new StaveNote({ keys: ['b/4'], duration: '2s', stem_direction: -1 }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar2, notesBar2);\n // bar 3 - juxtaposing second bar next to first bar\n const staveBar3 = new Stave(staveBar2.getWidth() + staveBar2.getX(), staveBar2.getY(), 170);\n staveBar3.setContext(ctx).draw();\n // bar 3\n const notesBar3 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '4s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '4s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '4s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '4s',\n stem_direction: -1,\n }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar3, notesBar3);\n // bar 4 - juxtaposing second bar next to first bar\n const staveBar4 = new Stave(staveBar3.getWidth() + staveBar3.getX(), staveBar3.getY(), 200);\n staveBar4.setContext(ctx).draw();\n // bar 4\n const notesBar4 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar4, notesBar4);\n options.assert.expect(0);\n}\nfunction drawBeamedSlashNotes(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n // bar 1\n const staveBar1 = new Stave(10, 30, 300);\n staveBar1.setBegBarType(BarlineType.DOUBLE);\n staveBar1.setEndBarType(BarlineType.SINGLE);\n staveBar1.addClef('treble');\n staveBar1.addTimeSignature('4/4');\n staveBar1.addKeySignature('C');\n staveBar1.setContext(ctx).draw();\n // bar 4\n const notesBar1_part1 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n ];\n const notesBar1_part2 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n ];\n // create the beams for 8th notes in 2nd measure\n const beam1 = new Beam(notesBar1_part1);\n const beam2 = new Beam(notesBar1_part2);\n const notesBar1 = notesBar1_part1.concat(notesBar1_part2);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1);\n // Render beams\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n options.assert.expect(0);\n}\nfunction drawSlashAndBeamAndRests(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n // bar 1\n const staveBar1 = new Stave(10, 30, 300);\n staveBar1.setBegBarType(BarlineType.DOUBLE);\n staveBar1.setEndBarType(BarlineType.SINGLE);\n staveBar1.addClef('treble');\n staveBar1.addTimeSignature('4/4');\n staveBar1.addKeySignature('F');\n staveBar1.setContext(ctx).draw();\n // bar 1\n const notesBar1_part1 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({ keys: ['b/4'], duration: '8s', stem_direction: -1 }),\n ];\n notesBar1_part1[0].addModifier(new Annotation('C7').setFont('Times', VexFlowTests.Font.size + 2), 0);\n const notesBar1_part2 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '8r',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8r',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8r',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n ];\n // create the beams for 8th notes in 2nd measure\n const beam1 = new Beam(notesBar1_part1);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1.concat(notesBar1_part2));\n // Render beams\n beam1.setContext(ctx).draw();\n // bar 2 - juxtaposing second bar next to first bar\n const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 220);\n staveBar2.setContext(ctx).draw();\n const notesBar2 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '1s',\n stem_direction: -1,\n }),\n ];\n notesBar2[0].addModifier(new Annotation('F').setFont('Times', VexFlowTests.Font.size + 2), 0);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar2, notesBar2);\n options.assert.expect(0);\n}\nfunction drawSixtenthWithScratches(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n // bar 1\n const staveBar1 = new Stave(10, 30, 300);\n staveBar1.setBegBarType(BarlineType.DOUBLE);\n staveBar1.setEndBarType(BarlineType.SINGLE);\n staveBar1.addClef('treble');\n staveBar1.addTimeSignature('4/4');\n staveBar1.addKeySignature('F');\n staveBar1.setContext(ctx).draw();\n // bar 1\n const notesBar1_part1 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '16s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '16s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '16m',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '16s',\n stem_direction: -1,\n }),\n ];\n const notesBar1_part2 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '16m',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '16s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '16r',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '16s',\n stem_direction: -1,\n }),\n ];\n notesBar1_part1[0].addModifier(new Annotation('C7').setFont('Times', VexFlowTests.Font.size + 3), 0);\n // create the beams for 8th notes in 2nd measure\n const beam1 = new Beam(notesBar1_part1);\n const beam2 = new Beam(notesBar1_part2);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1.concat(notesBar1_part2));\n // Render beams\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n options.assert.expect(0);\n}\nfunction drawThirtySecondWithScratches(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n // bar 1\n const staveBar1 = new Stave(10, 30, 300);\n staveBar1.setBegBarType(BarlineType.DOUBLE);\n staveBar1.setEndBarType(BarlineType.SINGLE);\n staveBar1.addClef('treble');\n staveBar1.addTimeSignature('4/4');\n staveBar1.addKeySignature('F');\n staveBar1.setContext(ctx).draw();\n // bar 1\n const notesBar1_part1 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '32s',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32s',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32m',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32s',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32m',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32s',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32r',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32s',\n stem_direction: 1,\n }),\n ];\n notesBar1_part1[0].addModifier(new Annotation('C7').setFont('Times', VexFlowTests.Font.size + 3), 0);\n // Create the beams for 8th notes in 2nd measure.\n const beam1 = new Beam(notesBar1_part1);\n // Helper function to justify and draw a 4/4 voice.\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1);\n // Render beams\n beam1.setContext(ctx).draw();\n options.assert.expect(0);\n}\nVexFlowTests.register(RhythmTests);\nexport { RhythmTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Basic Stave Tests\n// TODO: Like Stave.setTempo(t: StaveTempoOptions, ...), Stave.setText(...) could declare an interface called StaveTextOptions.\n// This helps developers because they can use the named type in their code for type checking.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Beam } from '../src/beam';\nimport { Clef } from '../src/clef';\nimport { Formatter } from '../src/formatter';\nimport { KeySignature } from '../src/keysignature';\nimport { Modifier } from '../src/modifier';\nimport { Stave } from '../src/stave';\nimport { Barline, BarlineType } from '../src/stavebarline';\nimport { StaveNote } from '../src/stavenote';\nimport { Repetition } from '../src/staverepetition';\nimport { VoltaType } from '../src/stavevolta';\nimport { TextJustification } from '../src/textnote';\nimport { TimeSignature } from '../src/timesignature';\nconst StaveTests = {\n Start() {\n QUnit.module('Stave');\n QUnit.test('StaveModifiers SortByCategory', sortByCategory);\n const run = VexFlowTests.runTests;\n run('Stave Draw Test', draw);\n run('Open Stave Draw Test', drawOpenStave);\n run('Multiple Stave Barline Test', drawMultipleMeasures);\n run('Multiple Stave Barline Test (14pt Section)', drawMultipleMeasures, { fontSize: 14 });\n run('Multiple Stave Repeats Test', drawRepeats);\n run('Stave End Modifiers Test', drawEndModifiers);\n run('Stave Repetition (CODA) Positioning', drawStaveRepetition, { yShift: 0 });\n run('Stave Repetition (CODA) Positioning (-20)', drawStaveRepetition, { yShift: -20 });\n run('Stave Repetition (CODA) Positioning (+10)', drawStaveRepetition, { yShift: +10 });\n run('Multiple Staves Volta Test', drawVolta);\n run('Volta + Modifier Measure Test', drawVoltaModifier);\n run('Tempo Test', drawTempo);\n run('Single Line Configuration Test', configureSingleLine);\n run('Batch Line Configuration Test', configureAllLines);\n run('Stave Text Test', drawStaveText);\n run('Multiple Line Stave Text Test', drawStaveTextMultiLine);\n run('Factory API', factoryAPI);\n },\n};\nfunction sortByCategory(assert) {\n const stave = new Stave(0, 0, 300);\n const clef0 = new Clef('treble');\n const clef1 = new Clef('alto');\n const clef2 = new Clef('bass');\n const time0 = new TimeSignature('C');\n const time1 = new TimeSignature('C|');\n const time2 = new TimeSignature('9/8');\n const key0 = new KeySignature('G');\n const key1 = new KeySignature('F');\n const key2 = new KeySignature('D');\n const bar0 = new Barline(BarlineType.SINGLE);\n const bar1 = new Barline(BarlineType.DOUBLE);\n const bar2 = new Barline(BarlineType.NONE);\n // const order0 = { barlines: 0, clefs: 1, keysignatures: 2, timesignatures: 3 };\n // const order1 = { timesignatures: 0, keysignatures: 1, barlines: 2, clefs: 3 };\n const order0 = { Barline: 0, Clef: 1, KeySignature: 2, TimeSignature: 3 };\n const order1 = { TimeSignature: 0, KeySignature: 1, Barline: 2, Clef: 3 };\n const sortAndCompare = (title, a, b, order) => {\n stave.sortByCategory(a, order);\n // Verify that the two arrays are identical.\n let isSame = true;\n if (a.length !== b.length)\n isSame = false;\n for (let i = 0; i < a.length; ++i) {\n if (a[i] !== b[i])\n isSame = false;\n }\n assert.ok(isSame, title);\n };\n sortAndCompare('Keep the original order 1', [bar0, bar1, clef0, clef1, key0, key1, time0, time1], [bar0, bar1, clef0, clef1, key0, key1, time0, time1], order0);\n sortAndCompare('Keep the original order 2', [time0, time1, key0, key1, bar0, bar1, clef0, clef1], [time0, time1, key0, key1, bar0, bar1, clef0, clef1], order1);\n sortAndCompare('Sort and keep 1', [bar0, bar1, clef0, clef1, key0, key1, time0, time1], [time0, time1, key0, key1, bar0, bar1, clef0, clef1], order1);\n sortAndCompare('Sort and keep 2', [bar0, clef0, key0, time0, key1, time1, clef1, bar1, time2, clef2, bar2, key2], [bar0, bar1, bar2, clef0, clef1, clef2, key0, key1, key2, time0, time1, time2], order0);\n sortAndCompare('Sort and keep 3', [bar2, clef2, key2, time0, key0, time2, clef1, bar1, time1, clef0, bar0, key1], [time0, time2, time1, key2, key0, key1, bar2, bar1, bar0, clef2, clef1, clef0], order1);\n}\nfunction draw(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 150);\n const stave = new Stave(10, 10, 300);\n stave.setContext(ctx);\n stave.draw();\n options.assert.equal(stave.getYForNote(0), 100, 'getYForNote(0)');\n options.assert.equal(stave.getYForLine(5), 100, 'getYForLine(5)');\n options.assert.equal(stave.getYForLine(0), 50, 'getYForLine(0) - Top Line');\n options.assert.equal(stave.getYForLine(4), 90, 'getYForLine(4) - Bottom Line');\n options.assert.ok(true, 'all pass');\n}\nfunction drawOpenStave(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 350);\n let stave = new Stave(10, 10, 300, { left_bar: false });\n stave.setContext(ctx);\n stave.draw();\n stave = new Stave(10, 150, 300, { right_bar: false });\n stave.setContext(ctx);\n stave.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawMultipleMeasures(options, contextBuilder) {\n var _a, _b;\n options.assert.expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 550, 200);\n // bar 1\n const staveBar1 = new Stave(10, 50, 200);\n staveBar1.setBegBarType(BarlineType.REPEAT_BEGIN);\n staveBar1.setEndBarType(BarlineType.DOUBLE);\n staveBar1.setSection('A', 0, 0, (_a = options.params) === null || _a === void 0 ? void 0 : _a.fontSize, false);\n staveBar1.addClef('treble').setContext(ctx).draw();\n const notesBar1 = [\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n new StaveNote({ keys: ['d/4'], duration: 'q' }),\n new StaveNote({ keys: ['b/4'], duration: 'qr' }),\n new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1);\n // bar 2 - juxtaposing second bar next to first bar\n const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 300);\n staveBar2.setSection('B', 0, 0, (_b = options.params) === null || _b === void 0 ? void 0 : _b.fontSize);\n staveBar2.setEndBarType(BarlineType.END);\n staveBar2.setContext(ctx).draw();\n const notesBar2_part1 = [\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n ];\n const notesBar2_part2 = [\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n ];\n // create the beams for 8th notes in 2nd measure\n const beam1 = new Beam(notesBar2_part1);\n const beam2 = new Beam(notesBar2_part2);\n const notesBar2 = notesBar2_part1.concat(notesBar2_part2);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar2, notesBar2);\n // Render beams\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n}\nfunction drawRepeats(options, contextBuilder) {\n options.assert.expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 750, 120);\n // bar 1\n const staveBar1 = new Stave(10, 0, 250);\n staveBar1.setBegBarType(BarlineType.REPEAT_BEGIN);\n staveBar1.setEndBarType(BarlineType.REPEAT_END);\n staveBar1.addClef('treble');\n staveBar1.addKeySignature('A');\n staveBar1.setContext(ctx).draw();\n const notesBar1 = [\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n new StaveNote({ keys: ['d/4'], duration: 'q' }),\n new StaveNote({ keys: ['b/4'], duration: 'qr' }),\n new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1);\n // bar 2 - juxtaposing second bar next to first bar\n const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 250);\n staveBar2.setBegBarType(BarlineType.REPEAT_BEGIN);\n staveBar2.setEndBarType(BarlineType.REPEAT_END);\n staveBar2.setContext(ctx).draw();\n const notesBar2_part1 = [\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n ];\n const notesBar2_part2 = [\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n ];\n notesBar2_part2[0].addModifier(new Accidental('#'), 0);\n notesBar2_part2[1].addModifier(new Accidental('#'), 0);\n notesBar2_part2[3].addModifier(new Accidental('b'), 0);\n // create the beams for 8th notes in 2nd measure\n const beam1 = new Beam(notesBar2_part1);\n const beam2 = new Beam(notesBar2_part2);\n const notesBar2 = notesBar2_part1.concat(notesBar2_part2);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar2, notesBar2);\n // Render beams\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n // bar 3 - juxtaposing third bar next to second bar\n const staveBar3 = new Stave(staveBar2.getWidth() + staveBar2.getX(), staveBar2.getY(), 50);\n staveBar3.setContext(ctx).draw();\n const notesBar3 = [new StaveNote({ keys: ['d/5'], duration: 'wr' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar3, notesBar3);\n // bar 4 - juxtaposing third bar next to third bar\n const staveBar4 = new Stave(staveBar3.getWidth() + staveBar3.getX(), staveBar3.getY(), 250 - staveBar1.getModifierXShift());\n staveBar4.setBegBarType(BarlineType.REPEAT_BEGIN);\n staveBar4.setEndBarType(BarlineType.REPEAT_END);\n staveBar4.setContext(ctx).draw();\n const notesBar4 = [\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n new StaveNote({ keys: ['d/4'], duration: 'q' }),\n new StaveNote({ keys: ['b/4'], duration: 'qr' }),\n new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar4, notesBar4);\n}\nfunction drawEndModifiers(options, contextBuilder) {\n options.assert.expect(0);\n const staveWidth = 230;\n const blockHeight = 80;\n let x = 10;\n let y = 0;\n const ctx = contextBuilder(options.elementId, 800, 700);\n function drawStavesInTwoLines(endBarLine) {\n // Draw a stave with one measure. Change the ending modifiers.\n // eslint-disable-next-line\n function drawStave(x, y, width, begMods, endMods) {\n const staveBar = new Stave(x, y, width - 10);\n if (begMods) {\n if (begMods.barLine !== undefined) {\n staveBar.setBegBarType(begMods.barLine);\n }\n if (begMods.clef !== undefined) {\n staveBar.addClef(begMods.clef);\n }\n if (begMods.keySig !== undefined) {\n staveBar.addKeySignature(begMods.keySig);\n }\n if (begMods.timeSig !== undefined) {\n staveBar.setTimeSignature(begMods.timeSig);\n }\n }\n if (endMods) {\n if (endMods.barLine !== undefined) {\n staveBar.setEndBarType(endMods.barLine);\n }\n if (endMods.clef !== undefined) {\n staveBar.addEndClef(endMods.clef);\n }\n if (endMods.keySig !== undefined) {\n staveBar.setEndKeySignature(endMods.keySig);\n }\n if (endMods.timeSig !== undefined) {\n staveBar.setEndTimeSignature(endMods.timeSig);\n }\n }\n staveBar.setContext(ctx).draw();\n const notesBar = [\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n new StaveNote({ keys: ['d/4'], duration: 'q' }),\n new StaveNote({ keys: ['b/4'], duration: 'qr' }),\n new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }),\n ];\n Formatter.FormatAndDraw(ctx, staveBar, notesBar);\n }\n drawStave(x, y, staveWidth + 50, { barLine: BarlineType.REPEAT_BEGIN, clef: 'treble', keySig: 'A' }, { barLine: endBarLine, clef: 'bass' });\n x += staveWidth + 50;\n drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, keySig: 'E' });\n x += staveWidth;\n drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, timeSig: '2/4' });\n x += staveWidth;\n x = 10;\n y += blockHeight;\n drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'bass', timeSig: '2/4' });\n x += staveWidth;\n drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'treble', keySig: 'Ab' });\n x += staveWidth;\n drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'bass', keySig: 'Ab', timeSig: '2/4' });\n x += staveWidth;\n }\n y = 0;\n x = 10;\n // First pair of staves.\n drawStavesInTwoLines(BarlineType.SINGLE);\n y += blockHeight + 10;\n x = 10;\n // Second pair of staves, with double barlines.\n drawStavesInTwoLines(BarlineType.DOUBLE);\n y += blockHeight + 10;\n x = 10;\n // Third pair of staves, with \"two dot\" repeat barlines.\n drawStavesInTwoLines(BarlineType.REPEAT_END);\n y += blockHeight + 10;\n x = 10;\n // Fourth pair of staves, with \"two dots\" on each side of the barlines.\n drawStavesInTwoLines(BarlineType.REPEAT_BOTH);\n}\nfunction drawStaveRepetition(options, contextBuilder) {\n options.assert.expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 725, 200);\n // bar 1\n const mm1 = new Stave(10, 50, 150);\n mm1.addClef('treble');\n mm1.setRepetitionType(Repetition.type.DS_AL_FINE, options.params.yShift);\n mm1.setMeasure(1);\n mm1.setContext(ctx).draw();\n const notesmm1 = [\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm1, notesmm1);\n // bar 2 - juxtapose second measure\n const mm2 = new Stave(mm1.getWidth() + mm1.getX(), mm1.getY(), 150);\n mm2.setRepetitionType(Repetition.type.TO_CODA, options.params.yShift);\n mm2.setMeasure(2);\n mm2.setContext(ctx).draw();\n const notesmm2 = [\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm2, notesmm2);\n // bar 3 - juxtapose third measure\n const mm3 = new Stave(mm2.getWidth() + mm2.getX(), mm1.getY(), 150);\n mm3.setRepetitionType(Repetition.type.DS_AL_CODA, options.params.yShift);\n mm3.setMeasure(3);\n mm3.setContext(ctx).draw();\n const notesmm3 = [\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm3, notesmm3);\n // bar 4 - juxtapose fourth measure\n const mm4 = new Stave(mm3.getWidth() + mm3.getX(), mm1.getY(), 150);\n mm4.setRepetitionType(Repetition.type.CODA_LEFT, options.params.yShift);\n mm4.setMeasure(4);\n mm4.setContext(ctx).draw();\n const notesmm4 = [\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm4, notesmm4);\n}\nfunction drawVolta(options, contextBuilder) {\n options.assert.expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 725, 200);\n // bar 1\n const mm1 = new Stave(10, 50, 125);\n mm1.setBegBarType(BarlineType.REPEAT_BEGIN);\n mm1.setRepetitionType(Repetition.type.SEGNO_LEFT);\n mm1.addClef('treble');\n mm1.addKeySignature('A');\n mm1.setMeasure(1);\n mm1.setSection('A', 0);\n mm1.setContext(ctx).draw();\n const notesmm1 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm1, notesmm1);\n // bar 2 - juxtapose second measure\n const mm2 = new Stave(mm1.getWidth() + mm1.getX(), mm1.getY(), 60);\n mm2.setRepetitionType(Repetition.type.CODA_RIGHT);\n mm2.setMeasure(2);\n mm2.setContext(ctx).draw();\n const notesmm2 = [new StaveNote({ keys: ['d/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm2, notesmm2);\n // bar 3 - juxtapose third measure\n const mm3 = new Stave(mm2.getWidth() + mm2.getX(), mm1.getY(), 60);\n mm3.setVoltaType(VoltaType.BEGIN, '1.', -5);\n mm3.setMeasure(3);\n mm3.setContext(ctx).draw();\n const notesmm3 = [new StaveNote({ keys: ['e/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm3, notesmm3);\n // bar 4 - juxtapose fourth measure\n const mm4 = new Stave(mm3.getWidth() + mm3.getX(), mm1.getY(), 60);\n mm4.setVoltaType(VoltaType.MID, '', -5);\n mm4.setMeasure(4);\n mm4.setContext(ctx).draw();\n const notesmm4 = [new StaveNote({ keys: ['f/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm4, notesmm4);\n // bar 5 - juxtapose fifth measure\n const mm5 = new Stave(mm4.getWidth() + mm4.getX(), mm1.getY(), 60);\n mm5.setEndBarType(BarlineType.REPEAT_END);\n mm5.setVoltaType(VoltaType.END, '', -5);\n mm5.setMeasure(5);\n mm5.setContext(ctx).draw();\n const notesmm5 = [new StaveNote({ keys: ['g/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm5, notesmm5);\n // bar 6 - juxtapose sixth measure\n const mm6 = new Stave(mm5.getWidth() + mm5.getX(), mm1.getY(), 60);\n mm6.setVoltaType(VoltaType.BEGIN_END, '2.', -5);\n mm6.setEndBarType(BarlineType.DOUBLE);\n mm6.setMeasure(6);\n mm6.setContext(ctx).draw();\n const notesmm6 = [new StaveNote({ keys: ['a/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm6, notesmm6);\n // bar 7 - juxtapose seventh measure\n const mm7 = new Stave(mm6.getWidth() + mm6.getX(), mm1.getY(), 60);\n mm7.setMeasure(7);\n mm7.setSection('B', 0);\n mm7.setContext(ctx).draw();\n const notesmm7 = [new StaveNote({ keys: ['b/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm7, notesmm7);\n // bar 8 - juxtapose eighth measure\n const mm8 = new Stave(mm7.getWidth() + mm7.getX(), mm1.getY(), 60);\n mm8.setEndBarType(BarlineType.DOUBLE);\n mm8.setRepetitionType(Repetition.type.DS_AL_CODA);\n mm8.setMeasure(8);\n mm8.setContext(ctx).draw();\n const notesmm8 = [new StaveNote({ keys: ['c/5'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm8, notesmm8);\n // bar 9 - juxtapose ninth measure\n const mm9 = new Stave(mm8.getWidth() + mm8.getX() + 20, mm1.getY(), 125);\n mm9.setEndBarType(BarlineType.END);\n mm9.setRepetitionType(Repetition.type.CODA_LEFT);\n mm9.addClef('treble');\n mm9.addKeySignature('A');\n mm9.setMeasure(9);\n mm9.setContext(ctx).draw();\n const notesmm9 = [new StaveNote({ keys: ['d/5'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm9, notesmm9);\n}\nfunction drawVoltaModifier(options, contextBuilder) {\n options.assert.expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 1100, 200);\n // bar 1: volta begin, with modifiers (clef, keysignature)\n const mm1 = new Stave(10, 50, 175);\n mm1.setBegBarType(BarlineType.REPEAT_BEGIN);\n mm1.setVoltaType(VoltaType.BEGIN_END, '1.', -5);\n mm1.addClef('treble');\n mm1.addKeySignature('A');\n mm1.setMeasure(1);\n mm1.setSection('A', 0);\n mm1.setContext(ctx).draw();\n const notesmm1 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm1, notesmm1);\n // bar 2: volta begin_mid, with modifiers (clef, keysignature)\n const mm2 = new Stave(mm1.getX() + mm1.getWidth(), mm1.getY(), 175);\n mm2.setBegBarType(BarlineType.REPEAT_BEGIN);\n mm2.setRepetitionType(Repetition.type.DS);\n mm2.setVoltaType(VoltaType.BEGIN, '2.', -5);\n mm2.addClef('treble');\n mm2.addKeySignature('A');\n mm2.setMeasure(2);\n mm2.setContext(ctx).draw();\n const notesmm2 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n Formatter.FormatAndDraw(ctx, mm2, notesmm2);\n // bar 3: volta mid, with modifiers (clef, keysignature)\n const mm3 = new Stave(mm2.getX() + mm2.getWidth(), mm2.getY(), 175);\n mm3.setVoltaType(VoltaType.MID, '', -5);\n mm3.setRepetitionType(Repetition.type.DS);\n mm3.addClef('treble');\n mm3.addKeySignature('B');\n mm3.setMeasure(3);\n mm3.setSection('B', 0);\n mm3.setContext(ctx).draw();\n const notesmm3 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n Formatter.FormatAndDraw(ctx, mm3, notesmm3);\n // bar 4: volta end, with modifiers (clef, keysignature)\n const mm4 = new Stave(mm3.getX() + mm3.getWidth(), mm3.getY(), 175);\n mm4.setVoltaType(VoltaType.END, '1.', -5);\n mm4.setRepetitionType(Repetition.type.DS);\n mm4.addClef('treble');\n mm4.addKeySignature('A');\n mm4.setMeasure(4);\n mm4.setSection('C', 0);\n mm4.setContext(ctx).draw();\n const notesmm4 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n Formatter.FormatAndDraw(ctx, mm4, notesmm4);\n // bar 5: d.s. shift (similar potential x-shift concern)\n const mm5 = new Stave(mm4.getX() + mm4.getWidth(), mm4.getY(), 175);\n // mm5.addModifier(new Repetition(Repetition.type.DS, mm4.getX() + mm4.getWidth(), 50), StaveModifierPosition.RIGHT);\n mm5.setEndBarType(BarlineType.DOUBLE);\n mm5.setRepetitionType(Repetition.type.DS);\n mm5.addClef('treble');\n mm5.addKeySignature('A');\n mm5.setMeasure(5);\n mm5.setSection('D', 0);\n mm5.setContext(ctx).draw();\n const notesmm5 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n Formatter.FormatAndDraw(ctx, mm5, notesmm5);\n // bar 6: d.s. without modifiers\n const mm6 = new Stave(mm5.getX() + mm5.getWidth(), mm5.getY(), 175);\n // mm5.addModifier(new Repetition(Repetition.type.DS, mm4.getX() + mm4.getWidth(), 50), StaveModifierPosition.RIGHT);\n mm6.setRepetitionType(Repetition.type.DS);\n mm6.setMeasure(6);\n mm6.setSection('E', 0);\n mm6.setContext(ctx).draw();\n const notesmm6 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n Formatter.FormatAndDraw(ctx, mm6, notesmm6);\n}\nfunction drawTempo(options, contextBuilder) {\n options.assert.expect(0);\n const ctx = contextBuilder(options.elementId, 725, 350);\n const padding = 10;\n let x = 0;\n let y = 50;\n function drawTempoStaveBar(width, tempo, tempo_y, notes) {\n const staveBar = new Stave(padding + x, y, width);\n if (x === 0)\n staveBar.addClef('treble');\n staveBar.setTempo(tempo, tempo_y);\n staveBar.setContext(ctx).draw();\n const notesBar = notes || [\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n new StaveNote({ keys: ['d/4'], duration: 'q' }),\n new StaveNote({ keys: ['b/4'], duration: 'q' }),\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n ];\n Formatter.FormatAndDraw(ctx, staveBar, notesBar);\n x += width;\n }\n drawTempoStaveBar(120, { duration: 'q', dots: 1, bpm: 80 }, 0);\n drawTempoStaveBar(100, { duration: '8', dots: 2, bpm: 90 }, 0);\n drawTempoStaveBar(100, { duration: '16', dots: 1, bpm: 96 }, 0);\n drawTempoStaveBar(100, { duration: '32', bpm: 70 }, 0);\n drawTempoStaveBar(250, { name: 'Andante', bpm: 120 }, -20, [\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/5'], duration: '8' }),\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n ]);\n x = 0;\n y += 150;\n drawTempoStaveBar(120, { duration: 'w', bpm: 80 }, 0);\n drawTempoStaveBar(100, { duration: 'h', bpm: 90 }, 0);\n drawTempoStaveBar(100, { duration: 'q', bpm: 96 }, 0);\n drawTempoStaveBar(100, { duration: '8', bpm: 70 }, 0);\n drawTempoStaveBar(250, { name: 'Andante grazioso' }, 0, [\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n ]);\n}\nfunction configureSingleLine(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n const stave = new Stave(10, 10, 300);\n stave\n .setConfigForLine(0, { visible: true })\n .setConfigForLine(1, { visible: false })\n .setConfigForLine(2, { visible: true })\n .setConfigForLine(3, { visible: false })\n .setConfigForLine(4, { visible: true });\n stave.setContext(ctx).draw();\n const config = stave.getConfigForLines();\n options.assert.equal(config[0].visible, true, 'getLinesConfiguration() - Line 0');\n options.assert.equal(config[1].visible, false, 'getLinesConfiguration() - Line 1');\n options.assert.equal(config[2].visible, true, 'getLinesConfiguration() - Line 2');\n options.assert.equal(config[3].visible, false, 'getLinesConfiguration() - Line 3');\n options.assert.equal(config[4].visible, true, 'getLinesConfiguration() - Line 4');\n options.assert.ok(true, 'all pass');\n}\nfunction configureAllLines(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n const stave = new Stave(10, 10, 300);\n stave\n .setConfigForLines([{ visible: false }, {}, { visible: false }, { visible: true }, { visible: false }])\n .setContext(ctx)\n .draw();\n const config = stave.getConfigForLines();\n options.assert.equal(config[0].visible, false, 'getLinesConfiguration() - Line 0');\n options.assert.equal(config[1].visible, true, 'getLinesConfiguration() - Line 1');\n options.assert.equal(config[2].visible, false, 'getLinesConfiguration() - Line 2');\n options.assert.equal(config[3].visible, true, 'getLinesConfiguration() - Line 3');\n options.assert.equal(config[4].visible, false, 'getLinesConfiguration() - Line 4');\n options.assert.ok(true, 'all pass');\n}\nfunction drawStaveText(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 900, 140);\n const stave = new Stave(300, 10, 300);\n stave.setText('Violin', Modifier.Position.LEFT);\n stave.setText('Right Text', Modifier.Position.RIGHT);\n stave.setText('Above Text', Modifier.Position.ABOVE);\n stave.setText('Below Text', Modifier.Position.BELOW);\n stave.setContext(ctx).draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawStaveTextMultiLine(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 900, 200);\n const stave = new Stave(300, 40, 300);\n stave.setText('Violin', Modifier.Position.LEFT, { shift_y: -10 });\n stave.setText('2nd line', Modifier.Position.LEFT, { shift_y: 10 });\n stave.setText('Right Text', Modifier.Position.RIGHT, { shift_y: -10 });\n stave.setText('2nd line', Modifier.Position.RIGHT, { shift_y: 10 });\n stave.setText('Above Text', Modifier.Position.ABOVE, { shift_y: -10 });\n stave.setText('2nd line', Modifier.Position.ABOVE, { shift_y: 10 });\n stave.setText('Left Below Text', Modifier.Position.BELOW, { shift_y: -10, justification: TextJustification.LEFT });\n stave.setText('Right Below Text', Modifier.Position.BELOW, { shift_y: 10, justification: TextJustification.RIGHT });\n stave.setContext(ctx).draw();\n options.assert.ok(true, 'all pass');\n}\nfunction factoryAPI(options) {\n const f = VexFlowTests.makeFactory(options, 900, 200);\n const stave = f.Stave({ x: 300, y: 40, width: 300 });\n stave.setText('Violin', Modifier.Position.LEFT, { shift_y: -10 });\n stave.setText('2nd line', Modifier.Position.LEFT, { shift_y: 10 });\n f.draw();\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(StaveTests);\nexport { StaveTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// StaveConnector Tests\n// TODO: Should we change StaveConnector.type => StaveConnectorType? We are inconsistent with this.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Modifier } from '../src/modifier';\nimport { Stave } from '../src/stave';\nimport { BarlineType } from '../src/stavebarline';\nimport { StaveConnector } from '../src/staveconnector';\nconst StaveConnectorTests = {\n Start() {\n QUnit.module('StaveConnector');\n const run = VexFlowTests.runTests;\n run('Single Draw Test', drawSingle);\n run('Single Draw Test, 4px Stave Line Thickness', drawSingle4pxStaveLines);\n run('Single Both Sides Test', drawSingleBoth);\n run('Double Draw Test', drawDouble);\n run('Bold Double Line Left Draw Test', drawRepeatBegin);\n run('Bold Double Line Right Draw Test', drawRepeatEnd);\n run('Thin Double Line Right Draw Test', drawThinDouble);\n run('Bold Double Lines Overlapping Draw Test', drawRepeatAdjacent);\n run('Bold Double Lines Offset Draw Test', drawRepeatOffset);\n run('Bold Double Lines Offset Draw Test 2', drawRepeatOffset2);\n run('Brace Draw Test', drawBrace);\n run('Brace Wide Draw Test', drawBraceWide);\n run('Bracket Draw Test', drawBracket);\n run('Combined Draw Test', drawCombined);\n },\n};\nfunction drawSingle(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector = new StaveConnector(stave1, stave2);\n connector.setType(StaveConnector.type.SINGLE);\n connector.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawSingle4pxStaveLines(options, contextBuilder) {\n const oldThickness = Flow.STAVE_LINE_THICKNESS;\n Flow.STAVE_LINE_THICKNESS = 4;\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector = new StaveConnector(stave1, stave2);\n connector.setType(StaveConnector.type.SINGLE);\n connector.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector.draw();\n Flow.STAVE_LINE_THICKNESS = oldThickness;\n options.assert.ok(true, 'all pass');\n}\nfunction drawSingleBoth(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector1 = new StaveConnector(stave1, stave2);\n connector1.setType(StaveConnector.type.SINGLE_LEFT);\n connector1.setContext(ctx);\n const connector2 = new StaveConnector(stave1, stave2);\n connector2.setType(StaveConnector.type.SINGLE_RIGHT);\n connector2.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector1.draw();\n connector2.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawDouble(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector = new StaveConnector(stave1, stave2);\n const line = new StaveConnector(stave1, stave2);\n connector.setType(StaveConnector.type.DOUBLE);\n connector.setContext(ctx);\n line.setType(StaveConnector.type.SINGLE);\n connector.setContext(ctx);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector.draw();\n line.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawBrace(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 450, 300);\n const stave1 = new Stave(100, 10, 300);\n const stave2 = new Stave(100, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector = new StaveConnector(stave1, stave2);\n const line = new StaveConnector(stave1, stave2);\n connector.setType(StaveConnector.type.BRACE);\n connector.setContext(ctx);\n connector.setText('Piano');\n line.setType(StaveConnector.type.SINGLE);\n connector.setContext(ctx);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector.draw();\n line.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawBraceWide(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, -20, 300);\n const stave2 = new Stave(25, 200, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector = new StaveConnector(stave1, stave2);\n const line = new StaveConnector(stave1, stave2);\n connector.setType(StaveConnector.type.BRACE);\n connector.setContext(ctx);\n line.setType(StaveConnector.type.SINGLE);\n connector.setContext(ctx);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector.draw();\n line.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawBracket(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector = new StaveConnector(stave1, stave2);\n const line = new StaveConnector(stave1, stave2);\n connector.setType(StaveConnector.type.BRACKET);\n connector.setContext(ctx);\n line.setType(StaveConnector.type.SINGLE);\n connector.setContext(ctx);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector.draw();\n line.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawRepeatBegin(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave1.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave2.setBegBarType(BarlineType.REPEAT_BEGIN);\n const line = new StaveConnector(stave1, stave2);\n line.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n line.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawRepeatEnd(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave1.setEndBarType(BarlineType.REPEAT_END);\n stave2.setEndBarType(BarlineType.REPEAT_END);\n const line = new StaveConnector(stave1, stave2);\n line.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n line.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawThinDouble(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave1.setEndBarType(BarlineType.DOUBLE);\n stave2.setEndBarType(BarlineType.DOUBLE);\n const line = new StaveConnector(stave1, stave2);\n line.setType(StaveConnector.type.THIN_DOUBLE);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n line.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawRepeatAdjacent(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 150);\n const stave2 = new Stave(25, 120, 150);\n const stave3 = new Stave(175, 10, 150);\n const stave4 = new Stave(175, 120, 150);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave3.setContext(ctx);\n stave4.setContext(ctx);\n stave1.setEndBarType(BarlineType.REPEAT_END);\n stave2.setEndBarType(BarlineType.REPEAT_END);\n stave3.setEndBarType(BarlineType.END);\n stave4.setEndBarType(BarlineType.END);\n stave1.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave2.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave3.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave4.setBegBarType(BarlineType.REPEAT_BEGIN);\n const connector1 = new StaveConnector(stave1, stave2);\n const connector2 = new StaveConnector(stave1, stave2);\n const connector3 = new StaveConnector(stave3, stave4);\n const connector4 = new StaveConnector(stave3, stave4);\n connector1.setContext(ctx);\n connector2.setContext(ctx);\n connector3.setContext(ctx);\n connector4.setContext(ctx);\n connector1.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n connector2.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n connector3.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n connector4.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n stave1.draw();\n stave2.draw();\n stave3.draw();\n stave4.draw();\n connector1.draw();\n connector2.draw();\n connector3.draw();\n connector4.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawRepeatOffset2(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 150);\n const stave2 = new Stave(25, 120, 150);\n const stave3 = new Stave(175, 10, 150);\n const stave4 = new Stave(175, 120, 150);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave3.setContext(ctx);\n stave4.setContext(ctx);\n stave1.addClef('treble');\n stave2.addClef('bass');\n stave3.addClef('alto');\n stave4.addClef('treble');\n stave1.addTimeSignature('4/4');\n stave2.addTimeSignature('4/4');\n stave3.addTimeSignature('6/8');\n stave4.addTimeSignature('6/8');\n stave1.setEndBarType(BarlineType.REPEAT_END);\n stave2.setEndBarType(BarlineType.REPEAT_END);\n stave3.setEndBarType(BarlineType.END);\n stave4.setEndBarType(BarlineType.END);\n stave1.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave2.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave3.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave4.setBegBarType(BarlineType.REPEAT_BEGIN);\n const connector1 = new StaveConnector(stave1, stave2);\n const connector2 = new StaveConnector(stave1, stave2);\n const connector3 = new StaveConnector(stave3, stave4);\n const connector4 = new StaveConnector(stave3, stave4);\n const connector5 = new StaveConnector(stave3, stave4);\n connector1.setContext(ctx);\n connector2.setContext(ctx);\n connector3.setContext(ctx);\n connector4.setContext(ctx);\n connector5.setContext(ctx);\n connector1.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n connector2.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n connector3.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n connector4.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n connector5.setType(StaveConnector.type.SINGLE_LEFT);\n connector1.setXShift(stave1.getModifierXShift());\n connector3.setXShift(stave3.getModifierXShift());\n stave1.draw();\n stave2.draw();\n stave3.draw();\n stave4.draw();\n connector1.draw();\n connector2.draw();\n connector3.draw();\n connector4.draw();\n connector5.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawRepeatOffset(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 150);\n const stave2 = new Stave(25, 120, 150);\n const stave3 = new Stave(185, 10, 150);\n const stave4 = new Stave(185, 120, 150);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave3.setContext(ctx);\n stave4.setContext(ctx);\n stave1.addClef('bass');\n stave2.addClef('alto');\n stave3.addClef('treble');\n stave4.addClef('tenor');\n stave3.addKeySignature('Ab');\n stave4.addKeySignature('Ab');\n stave1.addTimeSignature('4/4');\n stave2.addTimeSignature('4/4');\n stave3.addTimeSignature('6/8');\n stave4.addTimeSignature('6/8');\n stave1.setEndBarType(BarlineType.REPEAT_END);\n stave2.setEndBarType(BarlineType.REPEAT_END);\n stave3.setEndBarType(BarlineType.END);\n stave4.setEndBarType(BarlineType.END);\n stave1.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave2.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave3.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave4.setBegBarType(BarlineType.REPEAT_BEGIN);\n const connector1 = new StaveConnector(stave1, stave2);\n const connector2 = new StaveConnector(stave1, stave2);\n const connector3 = new StaveConnector(stave3, stave4);\n const connector4 = new StaveConnector(stave3, stave4);\n const connector5 = new StaveConnector(stave3, stave4);\n connector1.setContext(ctx);\n connector2.setContext(ctx);\n connector3.setContext(ctx);\n connector4.setContext(ctx);\n connector5.setContext(ctx);\n connector1.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n connector2.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n connector3.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n connector4.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n connector5.setType(StaveConnector.type.SINGLE_LEFT);\n connector1.setXShift(stave1.getModifierXShift());\n connector3.setXShift(stave3.getModifierXShift());\n stave1.draw();\n stave2.draw();\n stave3.draw();\n stave4.draw();\n connector1.draw();\n connector2.draw();\n connector3.draw();\n connector4.draw();\n connector5.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawCombined(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 550, 700);\n const stave1 = new Stave(150, 10, 300);\n const stave2 = new Stave(150, 100, 300);\n const stave3 = new Stave(150, 190, 300);\n const stave4 = new Stave(150, 280, 300);\n const stave5 = new Stave(150, 370, 300);\n const stave6 = new Stave(150, 460, 300);\n const stave7 = new Stave(150, 560, 300);\n stave1.setText('Violin', Modifier.Position.LEFT);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave3.setContext(ctx);\n stave4.setContext(ctx);\n stave5.setContext(ctx);\n stave6.setContext(ctx);\n stave7.setContext(ctx);\n const conn_single = new StaveConnector(stave1, stave7);\n const conn_double = new StaveConnector(stave2, stave3);\n const conn_bracket = new StaveConnector(stave4, stave7);\n const conn_none = new StaveConnector(stave4, stave5);\n const conn_brace = new StaveConnector(stave6, stave7);\n conn_single.setType(StaveConnector.type.SINGLE);\n conn_double.setType(StaveConnector.type.DOUBLE);\n conn_bracket.setType(StaveConnector.type.BRACKET);\n conn_brace.setType(StaveConnector.type.BRACE);\n conn_brace.setXShift(-5);\n conn_double.setText('Piano');\n conn_none.setText('Multiple', { shift_y: -15 });\n conn_none.setText('Line Text', { shift_y: 15 });\n conn_brace.setText('Harpsichord');\n conn_single.setContext(ctx);\n conn_double.setContext(ctx);\n conn_bracket.setContext(ctx);\n conn_none.setContext(ctx);\n conn_brace.setContext(ctx);\n stave1.draw();\n stave2.draw();\n stave3.draw();\n stave4.draw();\n stave5.draw();\n stave6.draw();\n stave7.draw();\n conn_single.draw();\n conn_double.draw();\n conn_bracket.draw();\n conn_none.draw();\n conn_brace.draw();\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(StaveConnectorTests);\nexport { StaveConnectorTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Author: Raffaele Viglianti, 2012\n//\n// StaveHairpin Tests\n// TODO: Incorrect property names in the options object: vo, left_ho, right_ho.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { StaveHairpin } from '../src/stavehairpin';\nconst StaveHairpinTests = {\n Start() {\n QUnit.module('StaveHairpin');\n const run = VexFlowTests.runTests;\n run('Simple StaveHairpin', simple);\n run('Horizontal Offset StaveHairpin', horizontal);\n run('Vertical Offset StaveHairpin', vertical);\n run('Height StaveHairpin', height);\n },\n};\n/**\n * Helper function to draw a single hairpin (either crescendo or decrescendo).\n * @param type is StaveHairpin.type.CRESC or StaveHairpin.type.DECRESC.\n * @param position is Modifier.Position.ABOVE or Modifier.Position.BELOW.\n */\nfunction drawHairpin(first_note, last_note, ctx, type, position, options) {\n const hairpin = new StaveHairpin({ first_note, last_note }, type);\n hairpin.setContext(ctx);\n hairpin.setPosition(position);\n if (options) {\n hairpin.setRenderOptions(options);\n }\n hairpin.draw();\n}\n/**\n * Helper function\n */\nfunction createTest(drawTwoHairpins) {\n return (options) => {\n const factory = VexFlowTests.makeFactory(options);\n const ctx = factory.getContext();\n const stave = factory.Stave();\n const notes = [\n factory\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' })\n .addModifier(factory.Accidental({ type: 'b' }), 0)\n .addModifier(factory.Accidental({ type: '#' }), 1),\n factory.StaveNote({ keys: ['d/4'], stem_direction: 1, duration: '4' }),\n factory.StaveNote({ keys: ['e/4'], stem_direction: 1, duration: '4' }),\n factory.StaveNote({ keys: ['f/4'], stem_direction: 1, duration: '4' }),\n ];\n const voice = factory.Voice().addTickables(notes);\n factory.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n factory.draw();\n drawTwoHairpins(ctx, notes);\n options.assert.ok(true, 'Simple Test');\n };\n}\nconst simple = createTest((ctx, notes) => {\n drawHairpin(notes[0], notes[2], ctx, 1, 4);\n drawHairpin(notes[1], notes[3], ctx, 2, 3);\n});\nconst horizontal = createTest((ctx, notes) => {\n drawHairpin(notes[0], notes[2], ctx, 1, 3, {\n height: 10,\n // TODO: these three property names seem to be incorrect.\n // vo => should it be 'y_shift'?\n // left_ho => should it be 'left_shift_px'?\n // right_ho => should it be 'right_shift_px'?\n vo: 20,\n left_ho: 20,\n right_ho: -20, // right horizontal offset\n });\n drawHairpin(notes[3], notes[3], ctx, 2, 4, {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 120, // right horizontal offset\n });\n});\nconst vertical = createTest((ctx, notes) => {\n drawHairpin(notes[0], notes[2], ctx, 1, 4, {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0, // right horizontal offset\n });\n drawHairpin(notes[2], notes[3], ctx, 2, 4, {\n height: 10,\n y_shift: -15,\n left_shift_px: 2,\n right_shift_px: 0, // right horizontal offset\n });\n});\nconst height = createTest((ctx, notes) => {\n drawHairpin(notes[0], notes[2], ctx, 1, 4, {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0, // right horizontal offset\n });\n drawHairpin(notes[2], notes[3], ctx, 2, 4, {\n height: 15,\n y_shift: 0,\n left_shift_px: 2,\n right_shift_px: 0, // right horizontal offset\n });\n});\nVexFlowTests.register(StaveHairpinTests);\nexport { StaveHairpinTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// StaveLine Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Dot } from '../src/dot';\nimport { Font, FontStyle } from '../src/font';\nconst StaveLineTests = {\n Start() {\n QUnit.module('StaveLine');\n const run = VexFlowTests.runTests;\n run('Simple StaveLine', simple0);\n run('StaveLine Arrow Options', simple1);\n },\n};\nfunction simple0(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave().addClef('treble');\n const notes = [\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }),\n f.StaveNote({ keys: ['c/5'], duration: '4', clef: 'treble' }),\n f.StaveNote({ keys: ['c/4', 'g/4', 'b/4'], duration: '4', clef: 'treble' }),\n f.StaveNote({ keys: ['f/4', 'a/4', 'f/5'], duration: '4', clef: 'treble' }),\n ];\n const voice = f.Voice().addTickables(notes);\n f.StaveLine({\n from: notes[0],\n to: notes[1],\n first_indices: [0],\n last_indices: [0],\n options: {\n font: { family: Font.SERIF, size: 12, style: FontStyle.ITALIC },\n text: 'gliss.',\n },\n });\n const staveLine2 = f.StaveLine({\n from: notes[2],\n to: notes[3],\n first_indices: [2, 1, 0],\n last_indices: [0, 1, 2],\n });\n staveLine2.render_options.line_dash = [10, 10];\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction simple1(options) {\n const f = VexFlowTests.makeFactory(options, 770);\n const stave = f.Stave().addClef('treble');\n const notes = [\n f.StaveNote({ keys: ['c#/5', 'd/5'], duration: '4', clef: 'treble', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }).addModifier(f.Accidental({ type: '#' }), 0),\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '4', clef: 'treble' }),\n f\n .StaveNote({ keys: ['f/4', 'a/4', 'c/5'], duration: '4', clef: 'treble' })\n .addModifier(f.Accidental({ type: '#' }), 2),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }).addModifier(f.Accidental({ type: '#' }), 0),\n f.StaveNote({ keys: ['c#/5', 'd/5'], duration: '4', clef: 'treble', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/4', 'd/4', 'g/4'], duration: '4', clef: 'treble' }),\n f\n .StaveNote({ keys: ['f/4', 'a/4', 'c/5'], duration: '4', clef: 'treble' })\n .addModifier(f.Accidental({ type: '#' }), 2),\n ];\n Dot.buildAndAttach([notes[0]], { all: true });\n const voice = f.Voice().setStrict(false).addTickables(notes);\n const staveLine0 = f.StaveLine({\n from: notes[0],\n to: notes[1],\n first_indices: [0],\n last_indices: [0],\n options: { text: 'Left' },\n });\n const staveLine4 = f.StaveLine({\n from: notes[2],\n to: notes[3],\n first_indices: [1],\n last_indices: [1],\n options: { text: 'Right' },\n });\n const staveLine1 = f.StaveLine({\n from: notes[4],\n to: notes[5],\n first_indices: [0],\n last_indices: [0],\n options: { text: 'Center' },\n });\n const staveLine2 = f.StaveLine({\n from: notes[6],\n to: notes[7],\n first_indices: [1],\n last_indices: [0],\n });\n const staveLine3 = f.StaveLine({\n from: notes[6],\n to: notes[7],\n first_indices: [2],\n last_indices: [2],\n options: { text: 'Top' },\n });\n staveLine0.render_options.draw_end_arrow = true;\n staveLine0.render_options.text_justification = 1;\n staveLine0.render_options.text_position_vertical = 2;\n staveLine1.render_options.draw_end_arrow = true;\n staveLine1.render_options.arrowhead_length = 30;\n staveLine1.render_options.line_width = 5;\n staveLine1.render_options.text_justification = 2;\n staveLine1.render_options.text_position_vertical = 2;\n staveLine4.render_options.line_width = 2;\n staveLine4.render_options.draw_end_arrow = true;\n staveLine4.render_options.draw_start_arrow = true;\n staveLine4.render_options.arrowhead_angle = 0.5;\n staveLine4.render_options.arrowhead_length = 20;\n staveLine4.render_options.text_justification = 3;\n staveLine4.render_options.text_position_vertical = 2;\n staveLine2.render_options.draw_start_arrow = true;\n staveLine2.render_options.line_dash = [5, 4];\n staveLine3.render_options.draw_end_arrow = true;\n staveLine3.render_options.draw_start_arrow = true;\n staveLine3.render_options.color = 'red';\n staveLine3.render_options.text_position_vertical = 1;\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nVexFlowTests.register(StaveLineTests);\nexport { StaveLineTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// StaveModifier Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Stave } from '../src/stave';\nimport { BarlineType } from '../src/stavebarline';\nimport { StaveModifierPosition } from '../src/stavemodifier';\nconst StaveModifierTests = {\n Start() {\n QUnit.module('StaveModifier');\n const run = VexFlowTests.runTests;\n run('Stave Draw Test', draw);\n run('Begin & End StaveModifier Test', drawBeginAndEnd);\n },\n};\nfunction draw(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n const stave = new Stave(10, 10, 300);\n stave.setContext(ctx);\n stave.draw();\n options.assert.equal(stave.getYForNote(0), 100, 'getYForNote(0)');\n options.assert.equal(stave.getYForLine(5), 100, 'getYForLine(5)');\n options.assert.equal(stave.getYForLine(0), 50, 'getYForLine(0) - Top Line');\n options.assert.equal(stave.getYForLine(4), 90, 'getYForLine(4) - Bottom Line');\n options.assert.ok(true, 'all pass');\n}\nfunction drawBeginAndEnd(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n const stave = new Stave(10, 10, 400);\n stave.setContext(ctx);\n stave.setTimeSignature('C|');\n stave.setKeySignature('Db');\n stave.setClef('treble');\n stave.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave.setEndClef('alto');\n stave.setEndTimeSignature('9/8');\n stave.setEndKeySignature('G', 'C#');\n stave.setEndBarType(BarlineType.DOUBLE);\n stave.draw();\n // change\n const END = StaveModifierPosition.END;\n stave.setY(100);\n stave.setTimeSignature('3/4');\n stave.setKeySignature('G', 'C#');\n stave.setClef('bass');\n stave.setBegBarType(BarlineType.SINGLE);\n stave.setClef('treble', undefined, undefined, END);\n stave.setTimeSignature('C', undefined, END);\n stave.setKeySignature('F', undefined, END);\n stave.setEndBarType(BarlineType.SINGLE);\n stave.draw();\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(StaveModifierTests);\nexport { StaveModifierTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// StaveNote Tests\n// TODO: In StaveNote.preFormat() line 929, should noteHeadPadding default to StaveNote.minNoteheadPadding?\n// The bounding box of a note changes slightly when we add a ModifierContext (even if we add zero modifiers).\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Annotation, AnnotationVerticalJustify } from '../src/annotation';\nimport { Articulation } from '../src/articulation';\nimport { Beam } from '../src/beam';\nimport { Dot } from '../src/dot';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { Fraction } from '../src/fraction';\nimport { FretHandFinger } from '../src/frethandfinger';\nimport { Modifier } from '../src/modifier';\nimport { ModifierContext } from '../src/modifiercontext';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { Stem } from '../src/stem';\nimport { StringNumber } from '../src/stringnumber';\nimport { Stroke } from '../src/strokes';\nimport { TickContext } from '../src/tickcontext';\nconst StaveNoteTests = {\n Start() {\n QUnit.module('StaveNote');\n QUnit.test('Tick', ticks);\n QUnit.test('Tick - New API', ticksNewAPI);\n QUnit.test('Stem', stem);\n QUnit.test('Automatic Stem Direction', autoStem);\n QUnit.test('Stem Extension Pitch', stemExtensionPitch);\n QUnit.test('Displacement after calling setStemDirection', setStemDirectionDisplacement);\n QUnit.test('StaveLine', staveLine);\n QUnit.test('Width', width);\n QUnit.test('TickContext', tickContext);\n const run = VexFlowTests.runTests;\n run('StaveNote Draw - Treble', drawBasic, { clef: 'treble', octaveShift: 0, restKey: 'r/4' });\n run('StaveNote BoundingBoxes - Treble', drawBoundingBoxes, { clef: 'treble', octaveShift: 0, restKey: 'r/4' });\n run('StaveNote Draw - Alto', drawBasic, { clef: 'alto', octaveShift: -1, restKey: 'r/4' });\n run('StaveNote Draw - Tenor', drawBasic, { clef: 'tenor', octaveShift: -1, restKey: 'r/3' });\n run('StaveNote Draw - Bass', drawBasic, { clef: 'bass', octaveShift: -2, restKey: 'r/3' });\n run('StaveNote Draw - Harmonic And Muted', drawHarmonicAndMuted);\n run('StaveNote Draw - Slash', drawSlash);\n run('Displacements', displacements);\n run('StaveNote Draw - Bass 2', drawBass);\n run('StaveNote Draw - Key Styles', drawKeyStyles);\n run('StaveNote Draw - StaveNote Stem Styles', drawNoteStemStyles);\n run('StaveNote Draw - StaveNote Stem Lengths', drawNoteStemLengths);\n run('StaveNote Draw - StaveNote Flag Styles', drawNoteStylesWithFlag);\n run('StaveNote Draw - StaveNote Styles', drawNoteStyles);\n run('Stave, Ledger Line, Beam, Stem and Flag Styles', drawBeamStyles);\n run('Flag and Dot Placement - Stem Up', dotsAndFlagsStemUp);\n run('Flag and Dots Placement - Stem Down', dotsAndFlagsStemDown);\n run('Beam and Dot Placement - Stem Up', dotsAndBeamsUp);\n run('Beam and Dot Placement - Stem Down', dotsAndBeamsDown);\n run('No Padding', noPadding);\n run('Note Heads Placement - Simple', noteHeadsSimple);\n run('Note Heads Placement - Hidden Notes', noteHeadsHidden);\n run('Center Aligned Note', centerAlignedRest);\n run('Center Aligned Note with Articulation', centerAlignedRestFermata);\n run('Center Aligned Note with Annotation', centerAlignedRestAnnotation);\n run('Center Aligned Note - Multi Voice', centerAlignedMultiVoice);\n run('Center Aligned Note with Multiple Modifiers', centerAlignedNoteMultiModifiers);\n // This interactivity test currently only works with the SVG backend.\n VexFlowTests.runSVGTest('Interactive Mouseover StaveNote', drawBasic, {\n clef: 'treble',\n octaveShift: 0,\n restKey: 'r/4',\n ui: true,\n });\n },\n};\n// Helper function to create StaveNotes.\nconst staveNote = (struct) => new StaveNote(struct);\n/**\n * Helper function to draw a note with an optional bounding box.\n */\nfunction draw(note, stave, context, x, drawBoundingBox = false, addModifierContext = true) {\n // Associate the note with the stave.\n note.setStave(stave);\n // A ModifierContext is required for dots and other modifiers to be drawn properly.\n // If added, it changes the bounding box of a note, even if there are no modifiers to draw.\n // See StaveNote.minNoteheadPadding in stavenote.ts.\n if (addModifierContext) {\n note.addToModifierContext(new ModifierContext());\n }\n new TickContext().addTickable(note).preFormat().setX(x);\n note.setContext(context).draw();\n if (drawBoundingBox) {\n const bb = note.getBoundingBox();\n context.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH());\n context.stroke();\n }\n return note;\n}\nfunction ticks(assert) {\n const BEAT = (1 * Flow.RESOLUTION) / 4;\n // Key value pairs of `testName: [durationString, expectedBeats, expectedNoteType]`\n const tickTests = {\n 'Breve note': ['1/2', 8.0, 'n'],\n 'Whole note': ['w', 4.0, 'n'],\n 'Quarter note': ['q', 1.0, 'n'],\n 'Dotted half note': ['hd', 3.0, 'n'],\n 'Doubled-dotted half note': ['hdd', 3.5, 'n'],\n 'Triple-dotted half note': ['hddd', 3.75, 'n'],\n 'Dotted half rest': ['hdr', 3.0, 'r'],\n 'Double-dotted half rest': ['hddr', 3.5, 'r'],\n 'Triple-dotted half rest': ['hdddr', 3.75, 'r'],\n 'Dotted harmonic quarter note': ['qdh', 1.5, 'h'],\n 'Double-dotted harmonic quarter note': ['qddh', 1.75, 'h'],\n 'Triple-dotted harmonic quarter note': ['qdddh', 1.875, 'h'],\n 'Dotted muted 8th note': ['8dm', 0.75, 'm'],\n 'Double-dotted muted 8th note': ['8ddm', 0.875, 'm'],\n 'Triple-dotted muted 8th note': ['8dddm', 0.9375, 'm'],\n };\n Object.keys(tickTests).forEach((testName) => {\n const testData = tickTests[testName];\n const durationString = testData[0];\n const expectedBeats = testData[1];\n const expectedNoteType = testData[2];\n const note = new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: durationString });\n assert.equal(note.getTicks().value(), BEAT * expectedBeats, testName + ' must have ' + expectedBeats + ' beats');\n assert.equal(note.getNoteType(), expectedNoteType, 'Note type must be ' + expectedNoteType);\n });\n assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '8.7dddm' }), /BadArguments/, \"Invalid note duration '8.7' throws BadArguments exception\");\n assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2Z' }), /BadArguments/, \"Invalid note type 'Z' throws BadArguments exception\");\n assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2dddZ' }), /BadArguments/, \"Invalid note type 'Z' throws BadArguments exception\");\n}\nfunction ticksNewAPI(assert) {\n const BEAT = (1 * Flow.RESOLUTION) / 4;\n // Key value pairs of `testName: [noteData, expectedBeats, expectedNoteType]`\n const tickTests = {\n 'Breve note': [{ duration: '1/2' }, 8.0, 'n'],\n 'Whole note': [{ duration: 'w' }, 4.0, 'n'],\n 'Quarter note': [{ duration: 'q' }, 1.0, 'n'],\n 'Dotted half note': [{ duration: 'h', dots: 1 }, 3.0, 'n'],\n 'Doubled-dotted half note': [{ duration: 'h', dots: 2 }, 3.5, 'n'],\n 'Triple-dotted half note': [{ duration: 'h', dots: 3 }, 3.75, 'n'],\n 'Dotted half rest': [{ duration: 'h', dots: 1, type: 'r' }, 3.0, 'r'],\n 'Double-dotted half rest': [{ duration: 'h', dots: 2, type: 'r' }, 3.5, 'r'],\n 'Triple-dotted half rest': [{ duration: 'h', dots: 3, type: 'r' }, 3.75, 'r'],\n 'Dotted harmonic quarter note': [{ duration: 'q', dots: 1, type: 'h' }, 1.5, 'h'],\n 'Double-dotted harmonic quarter note': [{ duration: 'q', dots: 2, type: 'h' }, 1.75, 'h'],\n 'Triple-dotted harmonic quarter note': [{ duration: 'q', dots: 3, type: 'h' }, 1.875, 'h'],\n 'Dotted muted 8th note': [{ duration: '8', dots: 1, type: 'm' }, 0.75, 'm'],\n 'Double-dotted muted 8th note': [{ duration: '8', dots: 2, type: 'm' }, 0.875, 'm'],\n 'Triple-dotted muted 8th note': [{ duration: '8', dots: 3, type: 'm' }, 0.9375, 'm'],\n };\n Object.keys(tickTests).forEach(function (testName) {\n const testData = tickTests[testName];\n const noteData = testData[0];\n const expectedBeats = testData[1];\n const expectedNoteType = testData[2];\n noteData.keys = ['c/4', 'e/4', 'g/4'];\n const note = new StaveNote(noteData);\n assert.equal(note.getTicks().value(), BEAT * expectedBeats, testName + ' must have ' + expectedBeats + ' beats');\n assert.equal(note.getNoteType(), expectedNoteType, 'Note type must be ' + expectedNoteType);\n });\n assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '8.7dddm' }), /BadArguments/, \"Invalid note duration '8.7' throws BadArguments exception\");\n assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2Z' }), /BadArguments/, \"Invalid note type 'Z' throws BadArguments exception\");\n assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2dddZ' }), /BadArguments/, \"Invalid note type 'Z' throws BadArguments exception\");\n}\nfunction stem(assert) {\n const note = new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'w' });\n assert.equal(note.getStemDirection(), Stem.UP, 'Default note has UP stem');\n}\nfunction autoStem(assert) {\n const testData = [\n [['c/5', 'e/5', 'g/5'], Stem.DOWN],\n [['e/4', 'g/4', 'c/5'], Stem.UP],\n [['c/5'], Stem.DOWN],\n [['a/4', 'e/5', 'g/5'], Stem.DOWN],\n [['b/4'], Stem.DOWN],\n ];\n testData.forEach((td) => {\n const keys = td[0];\n const expectedStemDirection = td[1];\n const note = new StaveNote({ keys: keys, auto_stem: true, duration: '8' });\n assert.equal(note.getStemDirection(), expectedStemDirection, 'Stem must be ' + (expectedStemDirection === Stem.UP ? 'up' : 'down'));\n });\n}\nfunction stemExtensionPitch(assert) {\n // [keys, expectedStemExtension, override stem direction]\n const testData = [\n [['c/5', 'e/5', 'g/5'], 0, 0],\n [['e/4', 'g/4', 'c/5'], 0, 0],\n [['c/5'], 0, 0],\n [['f/3'], 15, 0],\n [['f/3'], 15, Stem.UP],\n [['f/3'], 0, Stem.DOWN],\n [['f/3', 'e/5'], 0, 0],\n [['g/6'], 25, 0],\n [['g/6'], 25, Stem.DOWN],\n [['g/6'], 0, Stem.UP],\n ];\n testData.forEach((td) => {\n const keys = td[0];\n const expectedStemExtension = td[1];\n const overrideStemDirection = td[2];\n let note;\n if (overrideStemDirection === 0) {\n note = new StaveNote({ keys: keys, auto_stem: true, duration: '4' });\n }\n else {\n note = new StaveNote({ keys: keys, duration: '4', stem_direction: overrideStemDirection });\n }\n assert.equal(note.getStemExtension(), expectedStemExtension, 'For ' + keys.toString() + ' StemExtension must be ' + expectedStemExtension);\n // set to weird Stave\n const stave = new Stave(10, 10, 300, { spacing_between_lines_px: 20 });\n note.setStave(stave);\n assert.equal(note.getStemExtension(), expectedStemExtension * 2, 'For wide staff ' + keys.toString() + ' StemExtension must be ' + expectedStemExtension * 2);\n // const whole_note = new StaveNote({ keys: keys, duration: 'w' });\n // assert.equal(\n // whole_note.getStemExtension(),\n // -1 * Flow.STEM_HEIGHT,\n // 'For ' + keys.toString() + ' whole_note StemExtension must always be -1 * Flow.STEM_HEIGHT'\n // );\n });\n}\nfunction setStemDirectionDisplacement(assert) {\n function getDisplacements(note) {\n return note.noteHeads.map((noteHead) => noteHead.isDisplaced());\n }\n const stemUpDisplacements = [false, true, false];\n const stemDownDisplacements = [true, false, false];\n const note = new StaveNote({ keys: ['c/5', 'd/5', 'g/5'], stem_direction: Stem.UP, duration: '4' });\n assert.deepEqual(getDisplacements(note), stemUpDisplacements);\n note.setStemDirection(Stem.DOWN);\n assert.deepEqual(getDisplacements(note), stemDownDisplacements);\n note.setStemDirection(Stem.UP);\n assert.deepEqual(getDisplacements(note), stemUpDisplacements);\n}\nfunction staveLine(assert) {\n const stave = new Stave(10, 10, 300);\n const note = new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' });\n note.setStave(stave);\n const props = note.getKeyProps();\n assert.equal(props[0].line, 0, 'C/4 on line 0');\n assert.equal(props[1].line, 1, 'E/4 on line 1');\n assert.equal(props[2].line, 2.5, 'A/4 on line 2.5');\n const ys = note.getYs();\n assert.equal(ys.length, 3, 'Chord should be rendered on three lines');\n assert.equal(ys[0], 100, 'Line for C/4');\n assert.equal(ys[1], 90, 'Line for E/4');\n assert.equal(ys[2], 75, 'Line for A/4');\n}\nfunction width(assert) {\n const note = new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' });\n assert.throws(() => note.getWidth(), /UnformattedNote/, 'Unformatted note should have no width');\n}\nfunction tickContext(assert) {\n const stave = new Stave(10, 10, 400);\n const note = new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }).setStave(stave);\n new TickContext().addTickable(note).preFormat().setX(10).setPadding(0);\n assert.expect(0);\n}\nfunction drawBasic(options, contextBuilder) {\n const clef = options.params.clef;\n const octaveShift = options.params.octaveShift;\n const restKey = options.params.restKey;\n const ctx = contextBuilder(options.elementId, 700, 180);\n const stave = new Stave(10, 30, 750);\n stave.setContext(ctx);\n stave.addClef(clef);\n stave.draw();\n const lowerKeys = ['c/', 'e/', 'a/'];\n const higherKeys = ['c/', 'e/', 'a/'];\n for (let k = 0; k < lowerKeys.length; k++) {\n lowerKeys[k] = lowerKeys[k] + (4 + octaveShift);\n higherKeys[k] = higherKeys[k] + (5 + octaveShift);\n }\n const restKeys = [restKey];\n const noteStructs = [\n { clef: clef, keys: higherKeys, duration: '1/2' },\n { clef: clef, keys: lowerKeys, duration: 'w' },\n { clef: clef, keys: higherKeys, duration: 'h' },\n { clef: clef, keys: lowerKeys, duration: 'q' },\n { clef: clef, keys: higherKeys, duration: '8' },\n { clef: clef, keys: lowerKeys, duration: '16' },\n { clef: clef, keys: higherKeys, duration: '32' },\n { clef: clef, keys: higherKeys, duration: '64' },\n { clef: clef, keys: higherKeys, duration: '128' },\n { clef: clef, keys: lowerKeys, duration: '1/2', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: 'w', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: 'h', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: 'q', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '8', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '16', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '32', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '64', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '128', stem_direction: Stem.DOWN },\n { clef: clef, keys: restKeys, duration: '1/2r' },\n { clef: clef, keys: restKeys, duration: 'wr' },\n { clef: clef, keys: restKeys, duration: 'hr' },\n { clef: clef, keys: restKeys, duration: 'qr' },\n { clef: clef, keys: restKeys, duration: '8r' },\n { clef: clef, keys: restKeys, duration: '16r' },\n { clef: clef, keys: restKeys, duration: '32r' },\n { clef: clef, keys: restKeys, duration: '64r' },\n { clef: clef, keys: restKeys, duration: '128r' },\n { keys: ['x/4'], duration: 'h' },\n ];\n options.assert.expect(noteStructs.length * 2);\n const colorDescendants = (parentItem, color) => () => parentItem.querySelectorAll('*').forEach((child) => {\n child.setAttribute('fill', color);\n child.setAttribute('stroke', color);\n });\n for (let i = 0; i < noteStructs.length; ++i) {\n const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25);\n // If this is an interactivity test (ui: true), then attach mouseover & mouseout handlers to the notes.\n if (options.params.ui) {\n const item = note.getSVGElement();\n if (item) {\n item.addEventListener('mouseover', colorDescendants(item, 'green'), false);\n item.addEventListener('mouseout', colorDescendants(item, 'black'), false);\n }\n }\n options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction drawBoundingBoxes(options, contextBuilder) {\n const clef = options.params.clef;\n const octaveShift = options.params.octaveShift;\n const restKey = options.params.restKey;\n const ctx = contextBuilder(options.elementId, 700, 180);\n const stave = new Stave(10, 30, 750);\n stave.setContext(ctx);\n stave.addClef(clef);\n stave.draw();\n const lowerKeys = ['c/', 'e/', 'a/'];\n const higherKeys = ['c/', 'e/', 'a/'];\n for (let k = 0; k < lowerKeys.length; k++) {\n lowerKeys[k] = lowerKeys[k] + (4 + octaveShift);\n higherKeys[k] = higherKeys[k] + (5 + octaveShift);\n }\n const restKeys = [restKey];\n const noteStructs = [\n { clef: clef, keys: higherKeys, duration: '1/2' },\n { clef: clef, keys: lowerKeys, duration: 'w' },\n { clef: clef, keys: higherKeys, duration: 'h' },\n { clef: clef, keys: lowerKeys, duration: 'q' },\n { clef: clef, keys: higherKeys, duration: '8' },\n { clef: clef, keys: lowerKeys, duration: '16' },\n { clef: clef, keys: higherKeys, duration: '32' },\n { clef: clef, keys: higherKeys, duration: '64' },\n { clef: clef, keys: higherKeys, duration: '128' },\n { clef: clef, keys: lowerKeys, duration: '1/2', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: 'w', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: 'h', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: 'q', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '8', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '16', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '32', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '64', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '128' },\n { clef: clef, keys: restKeys, duration: '1/2r' },\n { clef: clef, keys: restKeys, duration: 'wr' },\n { clef: clef, keys: restKeys, duration: 'hr' },\n { clef: clef, keys: restKeys, duration: 'qr' },\n { clef: clef, keys: restKeys, duration: '8r' },\n { clef: clef, keys: restKeys, duration: '16r' },\n { clef: clef, keys: restKeys, duration: '32r' },\n { clef: clef, keys: restKeys, duration: '64r' },\n { clef: clef, keys: restKeys, duration: '128r' },\n { keys: ['x/4'], duration: 'h' },\n ];\n options.assert.expect(noteStructs.length * 2);\n for (let i = 0; i < noteStructs.length; ++i) {\n const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25, true /* drawBoundingBox */, false /* addModifierContext */);\n options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction drawBass(options, contextBuilder) {\n options.assert.expect(40);\n const ctx = contextBuilder(options.elementId, 600, 280);\n const stave = new Stave(10, 10, 650);\n stave.setContext(ctx);\n stave.addClef('bass');\n stave.draw();\n const noteStructs = [\n { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '1/2' },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'w' },\n { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: 'h' },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'q' },\n { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '8' },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '16' },\n { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '32' },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'h', stem_direction: Stem.DOWN },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'q', stem_direction: Stem.DOWN },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '8', stem_direction: Stem.DOWN },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '16', stem_direction: Stem.DOWN },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '32', stem_direction: Stem.DOWN },\n { keys: ['r/4'], duration: '1/2r' },\n { keys: ['r/4'], duration: 'wr' },\n { keys: ['r/4'], duration: 'hr' },\n { keys: ['r/4'], duration: 'qr' },\n { keys: ['r/4'], duration: '8r' },\n { keys: ['r/4'], duration: '16r' },\n { keys: ['r/4'], duration: '32r' },\n { keys: ['x/4'], duration: 'h' },\n ];\n for (let i = 0; i < noteStructs.length; ++i) {\n const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25);\n options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction displacements(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 700, 155);\n ctx.scale(0.9, 0.9);\n const stave = new Stave(10, 10, 675);\n stave.setContext(ctx);\n stave.draw();\n const noteStructs = [\n { keys: ['g/3', 'a/3', 'c/4', 'd/4', 'e/4'], duration: '1/2' },\n { keys: ['g/3', 'a/3', 'c/4', 'd/4', 'e/4'], duration: 'w' },\n { keys: ['d/4', 'e/4', 'f/4'], duration: 'h' },\n { keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: 'q' },\n { keys: ['e/3', 'b/3', 'c/4', 'e/4', 'f/4', 'g/5', 'a/5'], duration: '8' },\n { keys: ['a/3', 'c/4', 'e/4', 'g/4', 'a/4', 'b/4'], duration: '16' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '32' },\n { keys: ['c/4', 'e/4', 'a/4', 'a/4'], duration: '64' },\n { keys: ['g/3', 'c/4', 'd/4', 'e/4'], duration: 'h', stem_direction: Stem.DOWN },\n { keys: ['d/4', 'e/4', 'f/4'], duration: 'q', stem_direction: Stem.DOWN },\n { keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: '8', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'd/4', 'e/4', 'f/4', 'g/4', 'a/4'], duration: '16', stem_direction: Stem.DOWN },\n { keys: ['b/3', 'c/4', 'e/4', 'a/4', 'b/5', 'c/6', 'e/6'], duration: '32', stem_direction: Stem.DOWN },\n {\n keys: ['b/3', 'c/4', 'e/4', 'a/4', 'b/5', 'c/6', 'e/6', 'e/6'],\n duration: '64',\n stem_direction: Stem.DOWN,\n },\n ];\n options.assert.expect(noteStructs.length * 2);\n for (let i = 0; i < noteStructs.length; ++i) {\n const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 45);\n options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction drawHarmonicAndMuted(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 1000, 180);\n const stave = new Stave(10, 10, 950);\n stave.setContext(ctx);\n stave.draw();\n const noteStructs = [\n { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2h' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'wh' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'hh' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'qh' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '8h' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '16h' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '32h' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '64h' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '128h' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2h', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'wh', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'hh', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'qh', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '8h', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '16h', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '32h', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '64h', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '128h', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2m' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'wm' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'hm' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'qm' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '8m' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '16m' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '32m' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '64m' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '128m' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2m', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'wm', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'hm', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'qm', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '8m', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '16m', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '32m', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '64m', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '128m', stem_direction: Stem.DOWN },\n ];\n options.assert.expect(noteStructs.length * 2);\n for (let i = 0; i < noteStructs.length; ++i) {\n const note = draw(staveNote(noteStructs[i]), stave, ctx, i * 25 + 5);\n options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction drawSlash(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 700, 180);\n const stave = new Stave(10, 10, 650);\n stave.setContext(ctx);\n stave.draw();\n const notes = [\n { keys: ['b/4'], duration: '1/2s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: 'ws', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: 'hs', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: 'qs', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '8s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '16s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '32s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '64s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '128s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '1/2s', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: 'ws', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: 'hs', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: 'qs', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '8s', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '16s', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '32s', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '64s', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '128s', stem_direction: Stem.UP },\n // Beam\n { keys: ['b/4'], duration: '8s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '8s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '8s', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '8s', stem_direction: Stem.UP },\n ];\n const stave_notes = notes.map((struct) => new StaveNote(struct));\n const beam1 = new Beam([stave_notes[16], stave_notes[17]]);\n const beam2 = new Beam([stave_notes[18], stave_notes[19]]);\n Formatter.FormatAndDraw(ctx, stave, stave_notes, false);\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n options.assert.ok('Slash Note Heads');\n}\nfunction drawKeyStyles(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 300, 280);\n ctx.scale(3, 3);\n const stave = new Stave(10, 0, 100);\n const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: 'q' })\n .setStave(stave)\n .addModifier(new Accidental('b'), 1)\n .setKeyStyle(1, { shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue' });\n new TickContext().addTickable(note).preFormat().setX(25);\n stave.setContext(ctx).draw();\n note.setContext(ctx).draw();\n options.assert.ok(note.getX() > 0, 'Note has X value');\n options.assert.ok(note.getYs().length > 0, 'Note has Y values');\n}\nfunction drawNoteStyles(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 300, 280);\n const stave = new Stave(10, 0, 100);\n ctx.scale(3, 3);\n const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: '8' })\n .setStave(stave)\n .addModifier(new Accidental('b'), 1);\n note.setStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' });\n new TickContext().addTickable(note).preFormat().setX(25);\n stave.setContext(ctx).draw();\n note.setContext(ctx).draw();\n options.assert.ok(note.getX() > 0, 'Note has X value');\n options.assert.ok(note.getYs().length > 0, 'Note has Y values');\n}\nfunction drawNoteStemStyles(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 300, 280);\n const stave = new Stave(10, 0, 100);\n ctx.scale(3, 3);\n const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: 'q' })\n .setStave(stave)\n .addModifier(new Accidental('b'), 1);\n note.setStemStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' });\n new TickContext().addTickable(note).preFormat().setX(25);\n stave.setContext(ctx).draw();\n note.setContext(ctx).draw();\n options.assert.ok('Note Stem Style');\n}\nfunction drawNoteStemLengths(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 975, 150);\n const stave = new Stave(10, 10, 975);\n stave.setContext(ctx).draw();\n const keys = [\n 'e/3',\n 'f/3',\n 'g/3',\n 'a/3',\n 'b/3',\n 'c/4',\n 'd/4',\n 'e/4',\n 'f/4',\n 'g/4',\n 'f/5',\n 'g/5',\n 'a/5',\n 'b/5',\n 'c/6',\n 'd/6',\n 'e/6',\n 'f/6',\n 'g/6',\n 'a/6',\n ];\n const notes = [];\n let note;\n let i;\n for (i = 0; i < keys.length; i++) {\n let duration = 'q';\n if (i % 2 === 1) {\n duration = '8';\n }\n note = new StaveNote({ keys: [keys[i]], duration, auto_stem: true }).setStave(stave);\n new TickContext().addTickable(note);\n note.setContext(ctx);\n notes.push(note);\n }\n const whole_keys = ['e/3', 'a/3', 'f/5', 'a/5', 'd/6', 'a/6'];\n for (i = 0; i < whole_keys.length; i++) {\n note = new StaveNote({ keys: [whole_keys[i]], duration: 'w' }).setStave(stave);\n new TickContext().addTickable(note);\n note.setContext(ctx);\n notes.push(note);\n }\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok('Note Stem Length');\n}\nfunction drawNoteStylesWithFlag(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 300, 280);\n const stave = new Stave(10, 0, 100);\n ctx.scale(3, 3);\n const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: '8' })\n .setStave(stave)\n .addModifier(new Accidental('b'), 1);\n note.setFlagStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' });\n new TickContext().addTickable(note).preFormat().setX(25);\n stave.setContext(ctx).draw();\n note.setContext(ctx).draw();\n options.assert.ok(note.getX() > 0, 'Note has X value');\n options.assert.ok(note.getYs().length > 0, 'Note has Y values');\n}\nfunction drawBeamStyles(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 160);\n const stave = new Stave(10, 10, 380);\n stave.setStyle({ strokeStyle: '#EEAAEE', lineWidth: 3 });\n stave.setContext(ctx);\n stave.draw();\n const notes = [\n // beam1\n { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN },\n // should be unstyled...\n { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN },\n // beam2 should also be unstyled\n { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN },\n // beam3\n { keys: ['b/4'], duration: '8', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '8', stem_direction: Stem.UP },\n // beam4\n { keys: ['d/6'], duration: '8', stem_direction: Stem.DOWN },\n { keys: ['c/6', 'd/6'], duration: '8', stem_direction: Stem.DOWN },\n // unbeamed\n { keys: ['d/6', 'e/6'], duration: '8', stem_direction: Stem.DOWN },\n // unbeamed, unstyled\n { keys: ['e/6', 'f/6'], duration: '8', stem_direction: Stem.DOWN },\n ];\n const staveNotes = notes.map((note) => new StaveNote(note));\n const beam1 = new Beam(staveNotes.slice(0, 2));\n const beam2 = new Beam(staveNotes.slice(3, 5));\n const beam3 = new Beam(staveNotes.slice(5, 7));\n const beam4 = new Beam(staveNotes.slice(7, 9));\n // stem, key, ledger, flag; beam.setStyle\n beam1.setStyle({ fillStyle: 'blue', strokeStyle: 'blue' });\n staveNotes[0].setKeyStyle(0, { fillStyle: 'purple' });\n staveNotes[0].setStemStyle({ strokeStyle: 'green' });\n staveNotes[1].setStemStyle({ strokeStyle: 'orange' });\n staveNotes[1].setKeyStyle(0, { fillStyle: 'darkturquoise' });\n staveNotes[5].setStyle({ fillStyle: 'tomato', strokeStyle: 'tomato' });\n beam3.setStyle({ shadowBlur: 4, shadowColor: 'blue' });\n staveNotes[9].setLedgerLineStyle({ fillStyle: 'lawngreen', strokeStyle: 'lawngreen', lineWidth: 1 });\n staveNotes[9].setFlagStyle({ fillStyle: 'orange', strokeStyle: 'orange' });\n Formatter.FormatAndDraw(ctx, stave, staveNotes, false);\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n beam3.setContext(ctx).draw();\n beam4.setContext(ctx).draw();\n options.assert.ok('draw beam styles');\n}\nfunction dotsAndFlagsStemUp(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n ctx.scale(1.0, 1.0);\n const stave = new Stave(10, 10, 975);\n const notes = [\n staveNote({ keys: ['f/4'], duration: '4', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '8', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '16', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '32', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '64', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '128', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '4', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '8', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '16', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '32' }),\n staveNote({ keys: ['g/4'], duration: '64', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '128', stem_direction: Stem.UP }),\n ];\n Dot.buildAndAttach(notes, { all: true });\n Dot.buildAndAttach([notes[5], notes[11]], { all: true });\n stave.setContext(ctx).draw();\n for (let i = 0; i < notes.length; ++i) {\n draw(notes[i], stave, ctx, i * 65);\n }\n options.assert.ok(true, 'Full Dot');\n}\nfunction dotsAndFlagsStemDown(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 160);\n ctx.scale(1.0, 1.0);\n const stave = new Stave(10, 10, 975);\n const staveNotes = [\n staveNote({ keys: ['e/5'], duration: '4', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '8', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '16', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '32', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '64', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '128', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '4', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '8', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '16', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '32', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '64', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '128', stem_direction: Stem.DOWN }),\n ];\n Dot.buildAndAttach(staveNotes, { all: true });\n stave.setContext(ctx).draw();\n for (let i = 0; i < staveNotes.length; ++i) {\n draw(staveNotes[i], stave, ctx, i * 65);\n }\n options.assert.ok(true, 'Full Dot');\n}\nfunction dotsAndBeamsUp(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n ctx.scale(1.0, 1.0);\n const stave = new Stave(10, 10, 975);\n const staveNotes = [\n staveNote({ keys: ['f/4'], duration: '8', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '16', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '32', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '64', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '128', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '8', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '16', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '32' }),\n staveNote({ keys: ['g/4'], duration: '64', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '128', stem_direction: Stem.UP }),\n ];\n Dot.buildAndAttach(staveNotes, { all: true });\n Dot.buildAndAttach([staveNotes[4], staveNotes[9]], { all: true });\n const beam = new Beam(staveNotes);\n stave.setContext(ctx).draw();\n for (let i = 0; i < staveNotes.length; ++i) {\n draw(staveNotes[i], stave, ctx, i * 65);\n }\n beam.setContext(ctx).draw();\n options.assert.ok(true, 'Full Dot');\n}\nfunction dotsAndBeamsDown(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 160);\n ctx.scale(1.0, 1.0);\n const stave = new Stave(10, 10, 975);\n const staveNotes = [\n staveNote({ keys: ['e/5'], duration: '8', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '16', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '32', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '64', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '128', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '8', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '16', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '32', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '64', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '128', stem_direction: Stem.DOWN }),\n ];\n Dot.buildAndAttach(staveNotes, { all: true });\n const beam = new Beam(staveNotes);\n stave.setContext(ctx).draw();\n for (let i = 0; i < staveNotes.length; ++i) {\n draw(staveNotes[i], stave, ctx, i * 65);\n }\n beam.setContext(ctx).draw();\n options.assert.ok(true, 'Full Dot');\n}\nfunction noteHeadsSimple(options) {\n const vf = VexFlowTests.makeFactory(options, 800, 250);\n const score = vf.EasyScore();\n const system1 = vf.System({ y: 100, x: 50, width: 200 });\n system1\n .addStave({\n voices: [\n score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q/r, a4/h/r')]),\n score.voice(score.notes('g4/w')),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n const system2 = vf.System({ y: 100, x: 250, width: 150 });\n system2.addStave({\n voices: [score.voice(score.notes('b4/h, b4/h/r')), score.voice(score.notes('b4/w'))],\n });\n const system3 = vf.System({ y: 100, x: 400, width: 150 });\n system3.addStave({\n voices: [score.voice(score.notes('d5/h, d5/h/r')), score.voice(score.notes('e4/w'))],\n });\n const system4 = vf.System({ y: 100, x: 550, width: 150 });\n system4.addStave({\n voices: [\n score.voice(score.notes('e4/q, e4/q/r, e4/h/r')),\n score.voice(score.notes('e4/8, e4/8/r, e4/q/r, e4/h/r')),\n ],\n });\n vf.draw();\n options.assert.expect(0);\n}\nfunction noPadding(options) {\n const vf = VexFlowTests.makeFactory(options, 800, 500);\n const score = vf.EasyScore();\n function newStave(y, noPadding) {\n let system = vf.System({ y, x: 50, width: 200, noPadding });\n system\n .addStave({\n voices: [\n score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q, a4/h')]),\n score.voice(score.notes('g4/w')),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n system = vf.System({ y, x: 250, width: 150, noPadding });\n system.addStave({\n voices: [score.voice(score.notes('b4/h, b4/h')), score.voice(score.notes('b4/w'))],\n });\n system = vf.System({ y, x: 400, width: 150, noPadding });\n system.addStave({\n voices: [score.voice(score.notes('d5/h, d5/h')), score.voice(score.notes('e4/w'))],\n });\n system = vf.System({ y, x: 550, width: 150, noPadding });\n system.addStave({\n voices: [score.voice(score.notes('e4/q, e4/q, e4/h')), score.voice(score.notes('e4/8, e4/8, e4/q, e4/h'))],\n });\n }\n newStave(100, true);\n newStave(200, false);\n vf.draw();\n options.assert.expect(0);\n}\nfunction noteHeadsHidden(options) {\n const vf = VexFlowTests.makeFactory(options, 800, 250);\n const score = vf.EasyScore();\n const system1 = vf.System({ y: 100, x: 50, width: 200 });\n const notes1 = score.notes('g4/w');\n notes1[0].render_options.draw = false;\n system1\n .addStave({\n voices: [\n score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q/r, a4/h/r')]),\n score.voice(notes1),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n const system2 = vf.System({ y: 100, x: 250, width: 150 });\n const notes2 = score.notes('b4/w');\n notes2[0].render_options.draw = false;\n system2.addStave({\n voices: [score.voice(score.notes('b4/h, b4/h/r')), score.voice(notes2)],\n });\n const system3 = vf.System({ y: 100, x: 400, width: 150 });\n system3.addStave({\n voices: [score.voice(score.notes('d5/h, d5/h/r')), score.voice(score.notes('e4/w'))],\n });\n const system4 = vf.System({ y: 100, x: 550, width: 150 });\n const notes4 = score.notes('e4/q, e4/q/r, e4/h/r');\n notes4[0].render_options.draw = false;\n notes4[2].render_options.draw = false;\n system4.addStave({\n voices: [score.voice(notes4), score.voice(score.notes('e4/8, e4/8/r, e4/q/r, e4/h/r'))],\n });\n vf.draw();\n options.assert.expect(0);\n}\nfunction centerAlignedRest(options) {\n const f = VexFlowTests.makeFactory(options, 400, 160);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4');\n const note = f.StaveNote({ keys: ['b/4'], duration: '1r', align_center: true });\n const voice = f.Voice().setStrict(false).addTickables([note]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction centerAlignedRestFermata(options) {\n const f = VexFlowTests.makeFactory(options, 400, 160);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4');\n const note = f\n .StaveNote({ keys: ['b/4'], duration: '1r', align_center: true })\n .addModifier(new Articulation('a@a').setPosition(3), 0);\n const voice = f.Voice().setStrict(false).addTickables([note]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction centerAlignedRestAnnotation(options) {\n const f = VexFlowTests.makeFactory(options, 400, 160);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4');\n const note = f\n .StaveNote({ keys: ['b/4'], duration: '1r', align_center: true })\n .addModifier(new Annotation('Whole measure rest').setVerticalJustification(AnnotationVerticalJustify.TOP), 0);\n const voice = f.Voice().setStrict(false).addTickables([note]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction centerAlignedNoteMultiModifiers(options) {\n const f = VexFlowTests.makeFactory(options, 400, 160);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4');\n function newFinger(num, pos) {\n return new FretHandFinger(num).setPosition(pos);\n }\n const note = f\n .StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '4', align_center: true })\n .addModifier(new Annotation('Test').setPosition(3), 0)\n .addStroke(0, new Stroke(2))\n .addModifier(new Accidental('#'), 1)\n .addModifier(newFinger('3', Modifier.Position.LEFT), 0)\n .addModifier(newFinger('2', Modifier.Position.LEFT), 2)\n .addModifier(newFinger('1', Modifier.Position.RIGHT), 1)\n .addModifier(new StringNumber('4').setPosition(Modifier.Position.BELOW), 2);\n Dot.buildAndAttach([note], { all: true });\n const voice = f.Voice().setStrict(false).addTickables([note]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction centerAlignedMultiVoice(options) {\n const f = VexFlowTests.makeFactory(options, 400, 160);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('3/8');\n // Set a custom duration of 3 / 8.\n const custom_duration = new Fraction(3, 8);\n // TODO: Should the whole rest draw a ledger line that is visible to the left/right of the rest?\n const notes0 = [\n f.StaveNote({\n keys: ['c/4'],\n duration: '1r',\n align_center: true,\n duration_override: custom_duration,\n }),\n ];\n const createStaveNote = (struct) => f.StaveNote(struct);\n const notes1 = [\n { keys: ['b/4'], duration: '8' },\n { keys: ['b/4'], duration: '8' },\n { keys: ['b/4'], duration: '8' },\n ].map(createStaveNote);\n notes1[1].addModifier(f.Accidental({ type: '#' }), 0);\n f.Beam({ notes: notes1 });\n const voice0 = f.Voice({ time: '3/8' }).setStrict(false).addTickables(notes0);\n const voice1 = f.Voice({ time: '3/8' }).setStrict(false).addTickables(notes1);\n f.Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave);\n f.draw();\n options.assert.ok(true);\n}\nVexFlowTests.register(StaveNoteTests);\nexport { StaveNoteTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// StaveTie Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Stem } from '../src/stem';\nconst StaveTieTests = {\n Start() {\n QUnit.module('StaveTie');\n const run = VexFlowTests.runTests;\n run('Simple StaveTie', simple);\n run('Chord StaveTie', chord);\n run('Stem Up StaveTie', stemUp);\n run('No End Note With Clef', noEndNote1);\n run('No End Note', noEndNote2);\n run('No Start Note With Clef', noStartNote1);\n run('No Start Note', noStartNote2);\n run('Set Direction Down', setDirectionDown);\n run('Set Direction Up', setDirectionUp);\n },\n};\n/**\n * Used by the 7 tests below to set up the stave, easyscore, notes, voice, and to format & draw.\n */\nfunction createTest(notesData, setupTies) {\n return (options) => {\n const factory = VexFlowTests.makeFactory(options, 300);\n const stave = factory.Stave();\n const score = factory.EasyScore();\n const notes = score.notes(notesData[0], notesData[1]);\n const voice = score.voice(notes);\n // const tickables = voice.getTickables(); // same as the notes that we passed in.\n setupTies(factory, notes, stave);\n factory.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n factory.draw();\n options.assert.ok(true);\n };\n}\nconst simple = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => {\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [0, 1],\n last_indices: [0, 1],\n });\n});\nconst chord = createTest(['(d4 e4 f4)/2, (cn4 f#4 a4)', { stem: 'down' }], (f, notes) => {\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [0, 1, 2],\n last_indices: [0, 1, 2],\n });\n});\nconst stemUp = createTest(['(d4 e4 f4)/2, (cn4 f#4 a4)', { stem: 'up' }], (f, notes) => {\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [0, 1, 2],\n last_indices: [0, 1, 2],\n });\n});\nconst noEndNote1 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes, stave) => {\n stave.addEndClef('treble');\n f.StaveTie({\n from: notes[1],\n first_indices: [2],\n last_indices: [2],\n text: 'slow.',\n });\n});\nconst noEndNote2 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => {\n f.StaveTie({\n from: notes[1],\n first_indices: [2],\n last_indices: [2],\n text: 'slow.',\n });\n});\nconst noStartNote1 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes, stave) => {\n stave.addClef('treble');\n f.StaveTie({\n to: notes[0],\n first_indices: [2],\n last_indices: [2],\n text: 'H',\n });\n});\nconst noStartNote2 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => {\n f.StaveTie({\n to: notes[0],\n first_indices: [2],\n last_indices: [2],\n text: 'H',\n });\n});\nconst setDirectionDown = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => {\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [0, 1],\n last_indices: [0, 1],\n options: { direction: Stem.DOWN },\n });\n});\nconst setDirectionUp = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => {\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [0, 1],\n last_indices: [0, 1],\n options: { direction: Stem.UP },\n });\n});\nVexFlowTests.register(StaveTieTests);\nexport { StaveTieTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// StringNumber Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Glyph } from '../src/glyph';\nimport { Renderer } from '../src/renderer';\nimport { Stave } from '../src/stave';\nimport { BarlineType } from '../src/stavebarline';\nimport { Stroke } from '../src/strokes';\nconst StringNumberTests = {\n Start() {\n QUnit.module('StringNumber');\n const run = VexFlowTests.runTests;\n run('String Number In Notation', drawMultipleMeasures);\n run('String Number In Notation - no circle', drawMultipleMeasures, { drawCircle: false });\n run('Fret Hand Finger In Notation', drawFretHandFingers);\n run('Multi Voice With Strokes, String & Finger Numbers', multi);\n run('Complex Measure With String & Finger Numbers', drawAccidentals);\n run('Shifted Notehead, Multiple Modifiers', shiftedNoteheadMultipleModifiers);\n },\n};\nfunction drawMultipleMeasures(options) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;\n const f = VexFlowTests.makeFactory(options, 775, 200);\n const score = f.EasyScore();\n // bar 1\n const stave1 = f.Stave({ width: 300 }).setEndBarType(BarlineType.DOUBLE).addClef('treble');\n const notes1 = score.notes('(c4 e4 g4)/4., (c5 e5 g5)/8, (c4 f4 g4)/4, (c4 f4 g4)/4', { stem: 'down' });\n notes1[0]\n .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_a = options.params) === null || _a === void 0 ? void 0 : _a.drawCircle), 0)\n .addModifier(f.StringNumber({ number: '4', position: 'left' }, (_b = options.params) === null || _b === void 0 ? void 0 : _b.drawCircle), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_c = options.params) === null || _c === void 0 ? void 0 : _c.drawCircle), 2);\n notes1[1]\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_d = options.params) === null || _d === void 0 ? void 0 : _d.drawCircle), 0)\n .addModifier(f.Accidental({ type: '#' }).setAsCautionary(), 1)\n .addModifier(f\n .StringNumber({ number: '3', position: 'above' }, (_e = options.params) === null || _e === void 0 ? void 0 : _e.drawCircle)\n .setLastNote(notes1[3])\n .setLineEndType(Renderer.LineEndType.DOWN), 2);\n notes1[2]\n .addModifier(f.StringNumber({ number: '5', position: 'left' }, (_f = options.params) === null || _f === void 0 ? void 0 : _f.drawCircle), 0)\n .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_g = options.params) === null || _g === void 0 ? void 0 : _g.drawCircle), 2)\n .addModifier(f.Accidental({ type: '#' }), 1);\n notes1[3]\n .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_h = options.params) === null || _h === void 0 ? void 0 : _h.drawCircle).setOffsetY(7), 0)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_j = options.params) === null || _j === void 0 ? void 0 : _j.drawCircle).setOffsetY(6), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_k = options.params) === null || _k === void 0 ? void 0 : _k.drawCircle).setOffsetY(-6), 2);\n const voice1 = score.voice(notes1);\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n // bar 2 - juxtaposing second bar next to first bar\n const stave2 = f\n .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 })\n .setEndBarType(BarlineType.DOUBLE);\n const notes2 = score.notes('(c4 e4 g4)/4, (c5 e5 g5), (c4 f4 g4), (c4 f4 g4)', { stem: 'up' });\n notes2[0]\n .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_l = options.params) === null || _l === void 0 ? void 0 : _l.drawCircle), 0)\n .addModifier(f.StringNumber({ number: '4', position: 'left' }, (_m = options.params) === null || _m === void 0 ? void 0 : _m.drawCircle), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_o = options.params) === null || _o === void 0 ? void 0 : _o.drawCircle), 2);\n notes2[1]\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_p = options.params) === null || _p === void 0 ? void 0 : _p.drawCircle), 0)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f\n .StringNumber({ number: '3', position: 'above' }, (_q = options.params) === null || _q === void 0 ? void 0 : _q.drawCircle)\n .setLastNote(notes2[3])\n .setDashed(false), 2);\n notes2[2]\n .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_r = options.params) === null || _r === void 0 ? void 0 : _r.drawCircle), 2)\n .addModifier(f.Accidental({ type: '#' }), 1);\n notes2[3]\n .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_s = options.params) === null || _s === void 0 ? void 0 : _s.drawCircle).setOffsetY(7), 0)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_t = options.params) === null || _t === void 0 ? void 0 : _t.drawCircle).setOffsetY(6), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_u = options.params) === null || _u === void 0 ? void 0 : _u.drawCircle).setOffsetY(-6), 2);\n const voice2 = score.voice(notes2);\n f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2);\n // bar 3 - juxtaposing third bar next to second bar\n const stave3 = f\n .Stave({ x: stave2.getWidth() + stave2.getX(), y: stave2.getY(), width: 150 })\n .setEndBarType(BarlineType.END);\n const notesBar3 = score.notes('(c4 e4 g4 a4)/1.');\n notesBar3[0]\n .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_v = options.params) === null || _v === void 0 ? void 0 : _v.drawCircle), 0)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_w = options.params) === null || _w === void 0 ? void 0 : _w.drawCircle), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_x = options.params) === null || _x === void 0 ? void 0 : _x.drawCircle), 2)\n .addModifier(f.StringNumber({ number: '2', position: 'above' }, (_y = options.params) === null || _y === void 0 ? void 0 : _y.drawCircle), 3);\n const voice3 = score.voice(notesBar3, { time: '6/4' });\n f.Formatter().joinVoices([voice3]).formatToStave([voice3], stave3);\n f.draw();\n options.assert.ok(true, 'String Number');\n}\nfunction drawFretHandFingers(options) {\n const f = VexFlowTests.makeFactory(options, 725, 200);\n const score = f.EasyScore();\n // bar 1\n const stave1 = f.Stave({ width: 350 }).setEndBarType(BarlineType.DOUBLE).addClef('treble');\n const notes1 = score.notes('(c4 e4 g4)/4, (c5 e5 g5), (c4 f4 g4), (c4 f4 g4)', { stem: 'down' });\n notes1[0]\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 2);\n notes1[1]\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 2);\n notes1[2]\n .addModifier(f.Fingering({ number: '3', position: 'below' }), 0)\n .addModifier(f.Fingering({ number: '4', position: 'left' }), 1)\n .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'above' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 1);\n notes1[3]\n .addModifier(f.Fingering({ number: '3', position: 'right' }), 0)\n .addModifier(f.StringNumber({ number: '5', position: 'right' }).setOffsetY(7), 0)\n .addModifier(f.Fingering({ number: '4', position: 'right' }), 1)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }).setOffsetY(6), 1)\n .addModifier(f.Fingering({ number: '0', position: 'right' }).setOffsetY(-5), 2)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }).setOffsetY(-6), 2);\n const voice1 = score.voice(notes1);\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n // bar 2 - juxtaposing second bar next to first bar\n const stave2 = f\n .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 350 })\n .setEndBarType(BarlineType.END);\n const notes2 = score.notes('(c4 e4 g4)/4., (c5 e5 g5)/8, (c4 f4 g4)/8, (c4 f4 g4)/4.[stem=\"down\"]', {\n stem: 'up',\n });\n notes2[0]\n .addModifier(f.Fingering({ number: '3', position: 'right' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'above' }), 2);\n notes2[1]\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Fingering({ number: '3', position: 'right' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 2);\n notes2[2]\n .addModifier(f.Fingering({ number: '3', position: 'below' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1)\n .addModifier(f.Fingering({ number: '1', position: 'right' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 2);\n notes2[3]\n .addModifier(f.Fingering({ number: '3', position: 'right' }), 0)\n .addModifier(f.StringNumber({ number: '5', position: 'right' }).setOffsetY(7), 0)\n .addModifier(f.Fingering({ number: '4', position: 'right' }), 1)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }).setOffsetY(6), 1)\n .addModifier(f.Fingering({ number: '1', position: 'right' }).setOffsetY(-6), 2)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }).setOffsetY(-6), 2);\n const voice2 = score.voice(notes2);\n f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2);\n f.draw();\n options.assert.ok(true, 'String Number');\n}\nfunction multi(options) {\n const f = VexFlowTests.makeFactory(options, 700, 200);\n const score = f.EasyScore();\n const stave = f.Stave();\n const notes1 = score.notes('(c4 e4 g4)/4, (a3 e4 g4), (c4 d4 a4), (c4 d4 a4)', { stem: 'up' });\n notes1[0]\n .addStroke(0, new Stroke(5))\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 2)\n .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'above' }), 2);\n notes1[1]\n .addStroke(0, new Stroke(6))\n .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'above' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 2);\n notes1[2]\n .addStroke(0, new Stroke(2))\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '0', position: 'right' }), 1)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1)\n .addModifier(f.Fingering({ number: '1', position: 'left' }), 2)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }), 2);\n notes1[3]\n .addStroke(0, new Stroke(1))\n .addModifier(f.StringNumber({ number: '3', position: 'left' }), 2)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1);\n const notes2 = score.notes('e3/8, e3, e3, e3, e3, e3, e3, e3', { stem: 'down' });\n notes2[0]\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 0)\n .addModifier(f.StringNumber({ number: '6', position: 'below' }), 0);\n notes2[2].addModifier(f.Accidental({ type: '#' }), 0);\n notes2[4].addModifier(f.Fingering({ number: '0', position: 'left' }), 0);\n // Position string number 6 beneath the strum arrow: left (15) and down (18)\n notes2[4].addModifier(f.StringNumber({ number: '6', position: 'left' }).setOffsetX(15).setOffsetY(18), 0);\n // Important Note: notes2 must come first, otherwise ledger lines from notes2 will be drawn on top of notes from notes1!\n // BUG: VexFlow draws TWO ledger lines for middle C, because both notes1 and notes2 require the middle C ledger line.\n const voices = [score.voice(notes2), score.voice(notes1)];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.Beam({ notes: notes2.slice(0, 4) });\n f.Beam({ notes: notes2.slice(4, 8) });\n f.draw();\n options.assert.ok(true, 'Strokes Test Multi Voice');\n}\nfunction drawAccidentals(options) {\n const f = VexFlowTests.makeFactory(options, 750);\n const glyphScale = 39; // default font scale\n const clefWidth = Glyph.getWidth('gClef', glyphScale); // widest clef\n const notes = [\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5', 'e/5', 'g/5'], stem_direction: 1, duration: '4' }),\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: 1, duration: '4' }),\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: -1, duration: '4' }),\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: -1, duration: '4' }),\n ];\n notes[0]\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.StringNumber({ number: '2', position: 'left' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 2)\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 3)\n .addModifier(f.Accidental({ type: '#' }), 3)\n .addModifier(f.Fingering({ number: '2', position: 'right' }), 4)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }), 4)\n .addModifier(f.Accidental({ type: '#' }), 4)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 5)\n .addModifier(f.Accidental({ type: '#' }), 5);\n notes[1]\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 3)\n .addModifier(f.Accidental({ type: '#' }), 4)\n .addModifier(f.Accidental({ type: '#' }), 5);\n notes[2]\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.StringNumber({ number: '2', position: 'left' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 2)\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 3)\n .addModifier(f.Accidental({ type: '#' }), 3)\n .addModifier(f.Fingering({ number: '2', position: 'right' }), 4)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }), 4)\n .addModifier(f.Accidental({ type: '#' }), 4)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 5)\n .addModifier(f.Accidental({ type: '#' }), 5);\n notes[3]\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 3)\n .addModifier(f.Accidental({ type: '#' }), 4)\n .addModifier(f.Accidental({ type: '#' }), 5);\n const voice = f.Voice().addTickables(notes);\n const ctx = f.getContext();\n const formatter = f.Formatter().joinVoices([voice]);\n const stavePadding = clefWidth + Stave.defaultPadding + 10;\n const nwidth = Math.max(formatter.preCalculateMinTotalWidth([voice]), 490 - stavePadding);\n formatter.format([voice], nwidth);\n const stave = f\n .Stave({ x: 0, y: 0, width: nwidth + stavePadding })\n .setContext(ctx)\n .setEndBarType(BarlineType.DOUBLE)\n .addClef('treble')\n .draw();\n voice.draw(ctx, stave);\n options.assert.ok(true, 'String Number');\n}\nfunction shiftedNoteheadMultipleModifiers(options) {\n const f = VexFlowTests.makeFactory(options, 900, 150);\n const score = f.EasyScore();\n score.set({ time: '6/4' });\n const stave = f.Stave({ width: 900 }).setEndBarType(BarlineType.END).addClef('treble');\n const notes = ['A4 B4', 'B4 C5', 'A4 B#4', 'B4 C#5', 'A#4 B#4', 'B#4 C#5']\n .map((keys) => score.notes(`(${keys})/q`))\n .flat();\n notes.forEach((note) => {\n note\n .addModifier(f.StringNumber({ number: '2', position: 'left' }, true), 1)\n .addModifier(f.StringNumber({ number: '2', position: 'right' }, true), 1);\n });\n const voice = score.voice(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'String Number');\n}\nVexFlowTests.register(StringNumberTests);\nexport { StringNumberTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Strokes Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Barline, Beam, Bend, Stroke } from '../src/index';\nconst StrokesTests = {\n Start() {\n QUnit.module('Strokes');\n const run = VexFlowTests.runTests;\n // TODO: Rename tests by removing 'Strokes - ' since it is redundant with the module name.\n // This will make flow.html easier to read.\n run('Strokes - Brush/Roll/Rasquedo', brushRollRasquedo);\n run('Strokes - Arpeggio directionless (without arrows)', arpeggioDirectionless);\n run('Strokes - Multi Voice', multiVoice);\n run('Strokes - Notation and Tab', notesWithTab);\n run('Strokes - Multi-Voice Notation and Tab', multiNotationAndTab);\n },\n};\nfunction brushRollRasquedo(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const score = f.EasyScore();\n // bar 1\n const stave1 = f.Stave({ width: 250 }).setEndBarType(Barline.type.DOUBLE);\n const notes1 = score.notes('(a3 e4 a4)/4, (c4 e4 g4), (c4 e4 g4), (c4 e4 g4)', { stem: 'up' });\n notes1[0].addStroke(0, new Stroke(1));\n notes1[1]\n .addStroke(0, new Stroke(2))\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 0);\n notes1[2].addStroke(0, new Stroke(1));\n notes1[3].addStroke(0, new Stroke(2));\n const voice1 = score.voice(notes1);\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n // bar 2\n const stave2 = f\n .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 })\n .setEndBarType(Barline.type.DOUBLE);\n const notes2 = score.notes('(c4 d4 g4)/4, (c4 d4 g4), (c4 d4 g4), (c4 d4 a4)', { stem: 'up' });\n notes2[0].addStroke(0, new Stroke(3));\n notes2[1].addStroke(0, new Stroke(4));\n notes2[2].addStroke(0, new Stroke(5));\n notes2[3]\n .addStroke(0, new Stroke(6))\n .addModifier(f.Accidental({ type: 'bb' }), 0)\n .addModifier(f.Accidental({ type: 'bb' }), 1)\n .addModifier(f.Accidental({ type: 'bb' }), 2);\n const voice2 = score.voice(notes2);\n f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2);\n f.draw();\n options.assert.ok(true, 'Brush/Roll/Rasquedo');\n}\nfunction arpeggioDirectionless(options) {\n const f = VexFlowTests.makeFactory(options, 700, 200);\n const score = f.EasyScore();\n // bar 1\n const stave1 = f.Stave({ x: 100, width: 500 }).setEndBarType(Barline.type.DOUBLE);\n const notes1 = score.notes('(g4 b4 d5)/4, (g4 b4 d5 g5), (g4 b4 d5 g5), (g4 b4 d5)', { stem: 'up' });\n const graceNoteStructs = [\n { keys: ['e/4'], duration: '32' },\n { keys: ['f/4'], duration: '32' },\n { keys: ['g/4'], duration: '32' },\n ];\n const graceNotes = graceNoteStructs.map((graceNoteStruct) => f.GraceNote(graceNoteStruct));\n const graceNoteGroup = f.GraceNoteGroup({ notes: graceNotes, slur: false });\n graceNoteGroup.beamNotes();\n notes1[0].addStroke(0, new Stroke(7));\n notes1[1]\n .addStroke(0, new Stroke(7))\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 3);\n notes1[2]\n .addStroke(0, new Stroke(7))\n .addModifier(f.Accidental({ type: 'b' }), 1)\n .addModifier(graceNoteGroup, 0);\n notes1[3].addStroke(0, new Stroke(7)).addModifier(f.NoteSubGroup({\n notes: [f.ClefNote({ type: 'treble', options: { size: 'default', annotation: '8va' } })],\n }), 0);\n const voice1 = score.voice(notes1);\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n f.draw();\n options.assert.ok(true, 'Arpeggio directionless (without arrows)');\n}\nfunction multiVoice(options) {\n const f = VexFlowTests.makeFactory(options, 500, 200);\n const score = f.EasyScore();\n const stave = f.Stave();\n const notes1 = score.notes('(c4 e4 g4)/4, (c4 e4 g4), (c4 d4 a4), (c4 d4 a4)', { stem: 'up' });\n notes1[0].addStroke(0, new Stroke(5));\n notes1[1]\n .addStroke(0, new Stroke(6))\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 2);\n notes1[2].addStroke(0, new Stroke(2));\n notes1[3].addStroke(0, new Stroke(1));\n const notes2 = score.notes('e3/8, e3, e3, e3, e3, e3, e3, e3', { stem: 'down' });\n f.Beam({ notes: notes2.slice(0, 4) });\n f.Beam({ notes: notes2.slice(4, 8) });\n const voices = [notes1, notes2].map((notes) => score.voice(notes));\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.draw();\n options.assert.ok(true, 'Strokes Test Multi Voice');\n}\nfunction multiNotationAndTab(options) {\n const f = VexFlowTests.makeFactory(options, 400, 275);\n const score = f.EasyScore();\n const stave = f.Stave().addClef('treble');\n // notation upper voice notes\n const notes1 = score.notes('(g4 b4 e5)/4, (g4 b4 e5), (g4 b4 e5), (g4 b4 e5)', { stem: 'up' });\n notes1[0].addStroke(0, new Stroke(3, { all_voices: false }));\n notes1[1].addStroke(0, new Stroke(6));\n notes1[2].addStroke(0, new Stroke(2, { all_voices: false }));\n notes1[3].addStroke(0, new Stroke(1));\n const notes2 = score.notes('g3/4, g3, g3, g3', { stem: 'down' });\n f.TabStave({ y: 100 }).addClef('tab').setNoteStartX(stave.getNoteStartX());\n // tablature upper voice notes\n const tabNotes1 = [\n f.TabNote({\n positions: [\n { str: 3, fret: 0 },\n { str: 2, fret: 0 },\n { str: 1, fret: 1 },\n ],\n duration: '4',\n }),\n f.TabNote({\n positions: [\n { str: 3, fret: 0 },\n { str: 2, fret: 0 },\n { str: 1, fret: 1 },\n ],\n duration: '4',\n }),\n f.TabNote({\n positions: [\n { str: 3, fret: 0 },\n { str: 2, fret: 0 },\n { str: 1, fret: 1 },\n ],\n duration: '4',\n }),\n f.TabNote({\n positions: [\n { str: 3, fret: 0 },\n { str: 2, fret: 0 },\n { str: 1, fret: 1 },\n ],\n duration: '4',\n }),\n ];\n tabNotes1[0].addStroke(0, new Stroke(3, { all_voices: false }));\n tabNotes1[1].addStroke(0, new Stroke(6));\n tabNotes1[2].addStroke(0, new Stroke(2, { all_voices: false }));\n tabNotes1[3].addStroke(0, new Stroke(1));\n const tabNotes2 = [\n f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }),\n f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }),\n f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }),\n f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }),\n ];\n const voices = [notes1, notes2, tabNotes1, tabNotes2].map((notes) => score.voice(notes));\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.draw();\n options.assert.ok(true, 'Strokes Test Notation & Tab Multi Voice');\n}\n/*\nfunction drawTabStrokes(options: TestOptions): void {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const stave1 = f.TabStave({ width: 250 }).setEndBarType(Barline.type.DOUBLE);\n\n const tabNotes1 = [\n f.TabNote({\n positions: [\n { str: 2, fret: 8 },\n { str: 3, fret: 9 },\n { str: 4, fret: 10 },\n ],\n duration: '4',\n }),\n f.TabNote({\n positions: [\n { str: 3, fret: 7 },\n { str: 4, fret: 8 },\n { str: 5, fret: 9 },\n ],\n duration: '4',\n }),\n f.TabNote({\n positions: [\n { str: 1, fret: 5 },\n { str: 2, fret: 6 },\n { str: 3, fret: 7 },\n { str: 4, fret: 7 },\n { str: 5, fret: 5 },\n { str: 6, fret: 5 },\n ],\n duration: '4',\n }),\n f.TabNote({\n positions: [\n { str: 4, fret: 3 },\n { str: 5, fret: 4 },\n { str: 6, fret: 5 },\n ],\n duration: '4',\n }),\n ];\n\n tabNotes1[0].addStroke(0, new Stroke(1));\n tabNotes1[1].addStroke(0, new Stroke(2));\n tabNotes1[2].addStroke(0, new Stroke(3));\n tabNotes1[3].addStroke(0, new Stroke(4));\n\n const tabVoice1 = f.Voice().addTickables(tabNotes1);\n\n f.Formatter().joinVoices([tabVoice1]).formatToStave([tabVoice1], stave1);\n\n // bar 2\n const stave2 = f.TabStave({ x: stave1.getWidth() + stave1.getX(), width: 300 }).setEndBarType(Barline.type.DOUBLE);\n\n const tabNotes2 = [\n f.TabNote({\n positions: [\n { str: 2, fret: 7 },\n { str: 3, fret: 8 },\n { str: 4, fret: 9 },\n ],\n duration: '2',\n }),\n f.TabNote({\n positions: [\n { str: 1, fret: 5 },\n { str: 2, fret: 6 },\n { str: 3, fret: 7 },\n { str: 4, fret: 7 },\n { str: 5, fret: 5 },\n { str: 6, fret: 5 },\n ],\n duration: '2',\n }),\n ];\n\n tabNotes2[0].addStroke(0, new Stroke(6));\n tabNotes2[1].addStroke(0, new Stroke(5));\n\n const tabVoice2 = f.Voice().addTickables(tabNotes2);\n\n f.Formatter().joinVoices([tabVoice2]).formatToStave([tabVoice2], stave2);\n\n f.draw();\n\n options.assert.ok(true, 'Strokes Tab test');\n}\n*/\nfunction notesWithTab(options) {\n const f = VexFlowTests.makeFactory(options, 500, 300);\n const stave = f.Stave({ x: 15, y: 40, width: 450 }).addClef('treble');\n const notes = [\n f\n .StaveNote({ keys: ['b/4', 'd/5', 'g/5'], stem_direction: -1, duration: '4' })\n .addModifier(f.Accidental({ type: 'b' }), 1)\n .addModifier(f.Accidental({ type: 'b' }), 0),\n f.StaveNote({ keys: ['c/5', 'd/5'], stem_direction: -1, duration: '4' }),\n f.StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5'], stem_direction: 1, duration: '8' }),\n f\n .StaveNote({ keys: ['a/3', 'e/4', 'a/4', 'c/5', 'e/5', 'a/5'], stem_direction: 1, duration: '8' })\n .addModifier(f.Accidental({ type: '#' }), 3),\n f.StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5'], stem_direction: 1, duration: '8' }),\n f\n .StaveNote({ keys: ['a/3', 'e/4', 'a/4', 'c/5', 'f/5', 'a/5'], stem_direction: 1, duration: '8' })\n .addModifier(f.Accidental({ type: '#' }), 3)\n .addModifier(f.Accidental({ type: '#' }), 4),\n ];\n const tabstave = f\n .TabStave({ x: stave.getX(), y: 140, width: 450 })\n .addClef('tab')\n .setNoteStartX(stave.getNoteStartX());\n const tabNotes = [\n f\n .TabNote({\n positions: [\n { str: 1, fret: 3 },\n { str: 2, fret: 2 },\n { str: 3, fret: 3 },\n ],\n duration: '4',\n })\n .addModifier(new Bend('Full'), 0),\n f\n .TabNote({\n positions: [\n { str: 2, fret: 3 },\n { str: 3, fret: 5 },\n ],\n duration: '4',\n })\n .addModifier(new Bend('Unison'), 1),\n f.TabNote({\n positions: [\n { str: 3, fret: 7 },\n { str: 4, fret: 7 },\n { str: 5, fret: 7 },\n { str: 6, fret: 7 },\n ],\n duration: '8',\n }),\n f.TabNote({\n positions: [\n { str: 1, fret: 5 },\n { str: 2, fret: 5 },\n { str: 3, fret: 6 },\n { str: 4, fret: 7 },\n { str: 5, fret: 7 },\n { str: 6, fret: 5 },\n ],\n duration: '8',\n }),\n f.TabNote({\n positions: [\n { str: 3, fret: 7 },\n { str: 4, fret: 7 },\n { str: 5, fret: 7 },\n { str: 6, fret: 7 },\n ],\n duration: '8',\n }),\n f.TabNote({\n positions: [\n { str: 1, fret: 5 },\n { str: 2, fret: 5 },\n { str: 3, fret: 6 },\n { str: 4, fret: 7 },\n { str: 5, fret: 7 },\n { str: 6, fret: 5 },\n ],\n duration: '8',\n }),\n ];\n notes[0].addStroke(0, new Stroke(1));\n notes[1].addStroke(0, new Stroke(2));\n notes[2].addStroke(0, new Stroke(3));\n notes[3].addStroke(0, new Stroke(4));\n notes[4].addStroke(0, new Stroke(5));\n notes[5].addStroke(0, new Stroke(6));\n tabNotes[0].addStroke(0, new Stroke(1));\n tabNotes[1].addStroke(0, new Stroke(2));\n tabNotes[2].addStroke(0, new Stroke(3));\n tabNotes[3].addStroke(0, new Stroke(4));\n tabNotes[4].addStroke(0, new Stroke(5));\n tabNotes[5].addStroke(0, new Stroke(6));\n f.StaveConnector({\n top_stave: stave,\n bottom_stave: tabstave,\n type: 'bracket',\n });\n f.StaveConnector({\n top_stave: stave,\n bottom_stave: tabstave,\n type: 'single',\n });\n const voice = f.Voice().addTickables(notes);\n const tabVoice = f.Voice().addTickables(tabNotes);\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).joinVoices([tabVoice]).formatToStave([voice, tabVoice], stave);\n f.draw();\n beams.forEach(function (beam) {\n beam.setContext(f.getContext()).draw();\n });\n options.assert.ok(true);\n}\nVexFlowTests.register(StrokesTests);\nexport { StrokesTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Style Tests\n// TODO: The .addStroke(0, new Stroke(...)) in the tab test case shows a NO GLYPH for the Petaluma font.\n// TODO: Changing ctx.font seems to have no effect in the tab test case. Should it?\n// Annotation sets its own font.\n// TabNote sets its own font.\n// Is there a way to set all the text fonts in one go?\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Annotation } from '../src/annotation';\nimport { Articulation } from '../src/articulation';\nimport { Bend } from '../src/bend';\nimport { Formatter } from '../src/formatter';\nimport { KeySignature } from '../src/keysignature';\nimport { NoteSubGroup } from '../src/notesubgroup';\nimport { Ornament } from '../src/ornament';\nimport { StaveModifierPosition } from '../src/stavemodifier';\nimport { Stroke } from '../src/strokes';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { TimeSignature } from '../src/timesignature';\nconst StyleTests = {\n Start() {\n QUnit.module('Style');\n const run = VexFlowTests.runTests;\n run('Basic Style', stave);\n run('TabNote modifiers Style', tab);\n },\n};\n/**\n * Helper function to create a ElementStyle options object of the form { fillStyle: XXX, strokeStyle: YYY }.\n * Used for updating the fillStyle and optionally the strokeStyle.\n */\nfunction FS(fillStyle, strokeStyle) {\n const ret = { fillStyle };\n if (strokeStyle) {\n ret.strokeStyle = strokeStyle;\n }\n return ret;\n}\n/**\n * Color elements on a stave.\n */\nfunction stave(options) {\n const f = VexFlowTests.makeFactory(options, 600, 150);\n const stave = f.Stave({ x: 25, y: 20, width: 500 });\n // Stave modifiers test.\n const keySig = new KeySignature('D');\n keySig.addToStave(stave);\n keySig.setStyle(FS('blue'));\n stave.addTimeSignature('4/4');\n const timeSig = stave.getModifiers(StaveModifierPosition.BEGIN, TimeSignature.CATEGORY);\n timeSig[0].setStyle(FS('brown'));\n const notes = [\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' })\n .addModifier(f.Accidental({ type: 'b' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' })\n .addModifier(f.Accidental({ type: 'b' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n f.StaveNote({ keys: ['e/4'], stem_direction: 1, duration: '4' }),\n f.StaveNote({ keys: ['f/4'], stem_direction: 1, duration: '8' }),\n // voice.draw() test.\n f.TextDynamics({ text: 'sfz', duration: '16' }).setStyle(FS('blue')),\n // GhostNote modifiers test.\n f.GhostNote({ duration: '16' }).addModifier(new Annotation('GhostNote green text').setStyle(FS('green')), 0),\n ];\n const notes0 = notes[0];\n const notes1 = notes[1];\n notes0.setKeyStyle(0, FS('red'));\n notes1.setKeyStyle(0, FS('red'));\n // StaveNote modifiers test.\n const mods1 = notes1.getModifiers();\n mods1[0].setStyle(FS('green'));\n notes0.addModifier(new Articulation('a.').setPosition(4).setStyle(FS('green')), 0);\n notes0.addModifier(new Ornament('mordent').setStyle(FS('lightgreen')), 0);\n notes1.addModifier(new Annotation('blue').setStyle(FS('blue')), 0);\n notes1.addModifier(new NoteSubGroup([f.ClefNote({ options: { size: 'small' } }).setStyle(FS('blue'))]), 0);\n const voice = f.Voice().addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Basic Style');\n}\n/**\n * Color elements on a guitar tab.\n */\nfunction tab(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 140);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 450).addTabGlyph();\n stave.getModifiers()[2].setStyle(FS('blue'));\n stave.setContext(ctx).draw();\n const tabNote = (noteStruct) => new TabNote(noteStruct);\n const notes = [\n tabNote({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'h',\n }).addModifier(new Annotation('green text').setStyle(FS('green')), 0),\n tabNote({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'h',\n })\n .addModifier(new Bend('Full').setStyle(FS('brown')), 0)\n .addStroke(0, new Stroke(1, { all_voices: false }).setStyle(FS('blue'))),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'TabNote Modifiers Style');\n}\nVexFlowTests.register(StyleTests);\nexport { StyleTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TabNote Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Dot } from '../src/dot';\nimport { Flow } from '../src/flow';\nimport { Font, FontWeight } from '../src/font';\nimport { Formatter } from '../src/formatter';\nimport { Stave } from '../src/stave';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { TickContext } from '../src/tickcontext';\nimport { Voice, VoiceMode } from '../src/voice';\nconst TabNoteTests = {\n Start() {\n QUnit.module('TabNote');\n QUnit.test('Tick', ticks);\n QUnit.test('TabStave Line', tabStaveLine);\n QUnit.test('Width', width);\n QUnit.test('TickContext', tickContext);\n const run = VexFlowTests.runTests;\n run('TabNote Draw', draw);\n run('TabNote Stems Up', drawStemsUp);\n run('TabNote Stems Down', drawStemsDown);\n run('TabNote Stems Up Through Stave', drawStemsUpThrough);\n run('TabNote Stems Down Through Stave', drawStemsDownThrough);\n run('TabNote Stems with Dots', drawStemsDotted);\n },\n};\nfunction ticks(assert) {\n const BEAT = (1 * Flow.RESOLUTION) / 4;\n let note = new TabNote({ positions: [{ str: 6, fret: 6 }], duration: '1' });\n assert.equal(note.getTicks().value(), BEAT * 4, 'Whole note has 4 beats');\n note = new TabNote({ positions: [{ str: 3, fret: 4 }], duration: '4' });\n assert.equal(note.getTicks().value(), BEAT, 'Quarter note has 1 beat');\n}\nfunction tabStaveLine(assert) {\n const note = new TabNote({\n positions: [\n { str: 6, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '1',\n });\n const positions = note.getPositions();\n assert.equal(positions[0].str, 6, 'String 6, Fret 6');\n assert.equal(positions[0].fret, 6, 'String 6, Fret 6');\n assert.equal(positions[1].str, 4, 'String 4, Fret 5');\n assert.equal(positions[1].fret, 5, 'String 4, Fret 5');\n const stave = new Stave(10, 10, 300);\n note.setStave(stave);\n const ys = note.getYs();\n assert.equal(ys.length, 2, 'Chord should be rendered on two lines');\n assert.equal(ys[0], 100, 'Line for String 6, Fret 6');\n assert.equal(ys[1], 80, 'Line for String 4, Fret 5');\n}\nfunction width(assert) {\n assert.expect(1);\n const note = new TabNote({\n positions: [\n { str: 6, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '1',\n });\n assert.throws(() => note.getWidth(), /UnformattedNote/, 'Unformatted note should have no width');\n}\nfunction tickContext(assert) {\n const note = new TabNote({\n positions: [\n { str: 6, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '1',\n });\n const tickContext = new TickContext().addTickable(note).preFormat().setX(10).setPadding(0);\n assert.equal(tickContext.getWidth(), 7);\n}\nfunction draw(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 140);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 550);\n stave.setContext(ctx);\n stave.draw();\n const notes = [\n { positions: [{ str: 6, fret: 6 }], duration: '4' },\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 'x' },\n { str: 5, fret: 15 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 'x' },\n { str: 5, fret: 5 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 6, fret: 0 },\n { str: 5, fret: 5 },\n { str: 4, fret: 5 },\n { str: 3, fret: 4 },\n { str: 2, fret: 3 },\n { str: 1, fret: 0 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '4',\n },\n ];\n // Helper function\n function showNote(noteStruct, stave, ctx, x) {\n const tabNote = new TabNote(noteStruct);\n const tickContext = new TickContext();\n tickContext.addTickable(tabNote).preFormat().setX(x);\n tabNote.setContext(ctx).setStave(stave);\n tabNote.draw();\n return tabNote;\n }\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const tabNote = showNote(note, stave, ctx, (i + 1) * 25);\n options.assert.ok(tabNote.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(tabNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction drawStemsUp(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 30, 550);\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '32',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '64',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '128',\n },\n ];\n const notes = specs.map((struct) => {\n const tabNote = new TabNote(struct);\n tabNote.render_options.draw_stem = true;\n return tabNote;\n });\n const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n options.assert.ok(true, 'TabNotes successfully drawn');\n}\nfunction drawStemsDown(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 550);\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '32',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '64',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '128',\n },\n ];\n const notes = specs.map((struct) => {\n const tabNote = new TabNote(struct);\n tabNote.render_options.draw_stem = true;\n tabNote.setStemDirection(-1);\n return tabNote;\n });\n const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n options.assert.ok(true, 'All objects have been drawn');\n}\nfunction drawStemsUpThrough(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 30, 550);\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '32',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '64',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '128',\n },\n ];\n const notes = specs.map((struct) => {\n const tabNote = new TabNote(struct);\n tabNote.render_options.draw_stem = true;\n tabNote.render_options.draw_stem_through_stave = true;\n return tabNote;\n });\n ctx.setFont(Font.SANS_SERIF, 10, FontWeight.BOLD);\n const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n options.assert.ok(true, 'TabNotes successfully drawn');\n}\nfunction drawStemsDownThrough(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 250);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 550, { num_lines: 8 });\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n { str: 6, fret: 10 },\n ],\n duration: '32',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '64',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 3, fret: 5 },\n { str: 5, fret: 5 },\n { str: 7, fret: 5 },\n ],\n duration: '128',\n },\n ];\n const notes = specs.map((struct) => {\n const tabNote = new TabNote(struct);\n tabNote.render_options.draw_stem = true;\n tabNote.render_options.draw_stem_through_stave = true;\n tabNote.setStemDirection(-1);\n return tabNote;\n });\n ctx.setFont('Arial', 10, 'bold');\n const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n options.assert.ok(true, 'All objects have been drawn');\n}\nfunction drawStemsDotted(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 550);\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4d',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '4dd',\n stem_direction: -1,\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n stem_direction: -1,\n },\n ];\n const notes = specs.map((struct) => new TabNote(struct, true /* draw_stem */));\n Dot.buildAndAttach([notes[0], notes[2], notes[2]]);\n const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n options.assert.ok(true, 'TabNotes successfully drawn');\n}\nVexFlowTests.register(TabNoteTests);\nexport { TabNoteTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TabSlide Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { TabNote } from '../src/tabnote';\nimport { TabSlide } from '../src/tabslide';\nimport { TabStave } from '../src/tabstave';\nimport { Voice } from '../src/voice';\nconst TabSlideTests = {\n Start() {\n QUnit.module('TabSlide');\n const run = VexFlowTests.runTests;\n run('Simple TabSlide', simple);\n run('Slide Up', slideUp);\n run('Slide Down', slideDown);\n },\n};\nfunction tieNotes(notes, indices, stave, ctx) {\n const voice = new Voice(Flow.TIME4_4);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).format([voice], 100);\n voice.draw(ctx, stave);\n const tie = new TabSlide({\n first_note: notes[0],\n last_note: notes[1],\n first_indices: indices,\n last_indices: indices,\n }, TabSlide.SLIDE_UP);\n tie.setContext(ctx);\n tie.draw();\n}\nfunction setupContext(options, width) {\n // eslint-disable-next-line\n const context = options.contextBuilder(options.elementId, 350, 140);\n context.scale(0.9, 0.9);\n context.font = '10pt Arial';\n const stave = new TabStave(10, 10, width || 350).addTabGlyph().setContext(context).draw();\n return { context, stave };\n}\n// Helper function to create TabNote objects.\nconst tabNote = (noteStruct) => new TabNote(noteStruct);\n/**\n * Test Case\n */\nfunction simple(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n const { stave, context } = setupContext(options);\n tieNotes([\n tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'h' }),\n tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }),\n ], [0], stave, context);\n options.assert.ok(true, 'Simple Test');\n}\n/**\n * The slideUp and slideDown tests pass in a builder function: TabSlide.createSlideUp | TabSlide.createSlideDown.\n */\nfunction multiTest(options, buildTabSlide) {\n const { context, stave } = setupContext(options, 440);\n const notes = [\n tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }),\n tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }),\n tabNote({\n positions: [\n { str: 4, fret: 4 },\n { str: 5, fret: 4 },\n ],\n duration: '8',\n }),\n tabNote({\n positions: [\n { str: 4, fret: 6 },\n { str: 5, fret: 6 },\n ],\n duration: '8',\n }),\n tabNote({ positions: [{ str: 2, fret: 14 }], duration: '8' }),\n tabNote({ positions: [{ str: 2, fret: 16 }], duration: '8' }),\n tabNote({\n positions: [\n { str: 2, fret: 14 },\n { str: 3, fret: 14 },\n ],\n duration: '8',\n }),\n tabNote({\n positions: [\n { str: 2, fret: 16 },\n { str: 3, fret: 16 },\n ],\n duration: '8',\n }),\n ];\n const voice = new Voice(Flow.TIME4_4).addTickables(notes);\n new Formatter().joinVoices([voice]).format([voice], 300);\n voice.draw(context, stave);\n buildTabSlide({\n first_note: notes[0],\n last_note: notes[1],\n first_indices: [0],\n last_indices: [0],\n })\n .setContext(context)\n .draw();\n options.assert.ok(true, 'Single note');\n buildTabSlide({\n first_note: notes[2],\n last_note: notes[3],\n first_indices: [0, 1],\n last_indices: [0, 1],\n })\n .setContext(context)\n .draw();\n options.assert.ok(true, 'Chord');\n buildTabSlide({\n first_note: notes[4],\n last_note: notes[5],\n first_indices: [0],\n last_indices: [0],\n })\n .setContext(context)\n .draw();\n options.assert.ok(true, 'Single note high-fret');\n buildTabSlide({\n first_note: notes[6],\n last_note: notes[7],\n first_indices: [0, 1],\n last_indices: [0, 1],\n })\n .setContext(context)\n .draw();\n options.assert.ok(true, 'Chord high-fret');\n}\nfunction slideUp(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n multiTest(options, TabSlide.createSlideUp);\n}\nfunction slideDown(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n multiTest(options, TabSlide.createSlideDown);\n}\nVexFlowTests.register(TabSlideTests);\nexport { TabSlideTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TabStave Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { TabStave } from '../src/tabstave';\nconst TabStaveTests = {\n Start() {\n QUnit.module('TabStave');\n const run = VexFlowTests.runTests;\n run('TabStave Draw Test', draw);\n },\n};\nfunction draw(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 160);\n const stave = new TabStave(10, 10, 300);\n stave.setNumLines(6);\n stave.setContext(ctx);\n stave.draw();\n options.assert.equal(stave.getYForNote(0), 127, 'getYForNote(0)');\n options.assert.equal(stave.getYForLine(5), 127, 'getYForLine(5)');\n options.assert.equal(stave.getYForLine(0), 62, 'getYForLine(0) - Top Line');\n options.assert.equal(stave.getYForLine(4), 114, 'getYForLine(4) - Bottom Line');\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(TabStaveTests);\nexport { TabStaveTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TabTie Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Annotation } from '../src/annotation';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { TabTie } from '../src/tabtie';\nimport { Voice } from '../src/voice';\nconst TabTieTests = {\n Start() {\n QUnit.module('TabTie');\n const run = VexFlowTests.runTests;\n run('Simple TabTie', simple);\n run('Hammerons', simpleHammerOn);\n run('Pulloffs', simplePullOff);\n run('Tapping', tap);\n run('Continuous', continuous);\n },\n};\n/**\n * Helper function to create TabNote objects.\n */\nconst tabNote = (noteStruct) => new TabNote(noteStruct);\n/**\n * Helper function to create a RenderContext and TabStave.\n */\nfunction setupContext(options, w = 0, h = 0) {\n // eslint-disable-next-line\n const context = options.contextBuilder(options.elementId, w || 350, h || 160);\n context.setFont('Arial', VexFlowTests.Font.size);\n const stave = new TabStave(10, 10, w || 350).addTabGlyph().setContext(context).draw();\n return { context, stave };\n}\n/**\n * Helper function to create the TabTie between two Note objects.\n */\nfunction tieNotes(notes, indices, stave, ctx, text) {\n const voice = new Voice(Flow.TIME4_4);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).format([voice], 100);\n voice.draw(ctx, stave);\n const tie = new TabTie({\n first_note: notes[0],\n last_note: notes[1],\n first_indices: indices,\n last_indices: indices,\n }, text !== null && text !== void 0 ? text : 'Annotation');\n tie.setContext(ctx);\n tie.draw();\n}\n/**\n * Two notes on string 4 with a tie drawn between them.\n */\nfunction simple(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n const { context, stave } = setupContext(options);\n const note1 = tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'h' });\n const note2 = tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' });\n tieNotes([note1, note2], [0], stave, context);\n options.assert.ok(true, 'Simple Test');\n}\nfunction simpleHammerOn(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n multiTest(options, TabTie.createHammeron);\n}\nfunction simplePullOff(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n multiTest(options, TabTie.createPulloff);\n}\n/**\n * Helper function for the two test cases above (simpleHammerOn and simplePullOff).\n */\nfunction multiTest(options, createTabTie) {\n const { context, stave } = setupContext(options, 440, 140);\n const notes = [\n tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }),\n tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }),\n tabNote({\n positions: [\n { str: 4, fret: 4 },\n { str: 5, fret: 4 },\n ],\n duration: '8',\n }),\n tabNote({\n positions: [\n { str: 4, fret: 6 },\n { str: 5, fret: 6 },\n ],\n duration: '8',\n }),\n tabNote({ positions: [{ str: 2, fret: 14 }], duration: '8' }),\n tabNote({ positions: [{ str: 2, fret: 16 }], duration: '8' }),\n tabNote({\n positions: [\n { str: 2, fret: 14 },\n { str: 3, fret: 14 },\n ],\n duration: '8',\n }),\n tabNote({\n positions: [\n { str: 2, fret: 16 },\n { str: 3, fret: 16 },\n ],\n duration: '8',\n }),\n ];\n const voice = new Voice(Flow.TIME4_4).addTickables(notes);\n new Formatter().joinVoices([voice]).format([voice], 300);\n voice.draw(context, stave);\n createTabTie({\n first_note: notes[0],\n last_note: notes[1],\n first_indices: [0],\n last_indices: [0],\n })\n .setContext(context)\n .draw();\n options.assert.ok(true, 'Single note');\n createTabTie({\n first_note: notes[2],\n last_note: notes[3],\n first_indices: [0, 1],\n last_indices: [0, 1],\n })\n .setContext(context)\n .draw();\n options.assert.ok(true, 'Chord');\n createTabTie({\n first_note: notes[4],\n last_note: notes[5],\n first_indices: [0],\n last_indices: [0],\n })\n .setContext(context)\n .draw();\n options.assert.ok(true, 'Single note high-fret');\n createTabTie({\n first_note: notes[6],\n last_note: notes[7],\n first_indices: [0, 1],\n last_indices: [0, 1],\n })\n .setContext(context)\n .draw();\n options.assert.ok(true, 'Chord high-fret');\n}\nfunction tap(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n const { context, stave } = setupContext(options);\n const note1 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: 'h' }).addModifier(new Annotation('T'), 0);\n const note2 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: 'h' });\n tieNotes([note1, note2], [0], stave, context, 'P');\n options.assert.ok(true, 'Tapping Test');\n}\nfunction continuous(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n const { context, stave } = setupContext(options, 440, 140);\n const notes = [\n tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'q' }),\n tabNote({ positions: [{ str: 4, fret: 5 }], duration: 'q' }),\n tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }),\n ];\n const voice = new Voice(Flow.TIME4_4).addTickables(notes);\n new Formatter().joinVoices([voice]).format([voice], 300);\n voice.draw(context, stave);\n TabTie.createHammeron({\n first_note: notes[0],\n last_note: notes[1],\n first_indices: [0],\n last_indices: [0],\n })\n .setContext(context)\n .draw();\n TabTie.createPulloff({\n first_note: notes[1],\n last_note: notes[2],\n first_indices: [0],\n last_indices: [0],\n })\n .setContext(context)\n .draw();\n options.assert.ok(true, 'Continuous Hammeron');\n}\nVexFlowTests.register(TabTieTests);\nexport { TabTieTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TextBracket Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nconst TextBracketTests = {\n Start() {\n QUnit.module('TextBracket');\n const run = VexFlowTests.runTests;\n run('Simple TextBracket', simple0);\n run('TextBracket Styles', simple1);\n },\n};\nfunction simple0(options) {\n const f = VexFlowTests.makeFactory(options, 550);\n const stave = f.Stave();\n const score = f.EasyScore();\n const notes = score.notes('c4/4, c4, c4, c4, c4', { stem: 'up' });\n const voice = score.voice(notes, { time: '5/4' });\n f.TextBracket({\n from: notes[0],\n to: notes[4],\n text: '15',\n options: {\n superscript: 'va',\n position: 'top',\n },\n });\n f.TextBracket({\n from: notes[0],\n to: notes[4],\n text: '8',\n options: {\n superscript: 'vb',\n position: 'bottom',\n line: 3,\n },\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction simple1(options) {\n const f = VexFlowTests.makeFactory(options, 550);\n const stave = f.Stave();\n const score = f.EasyScore();\n const notes = score.notes('c4/4, c4, c4, c4, c4', { stem: 'up' });\n const voice = score.voice(notes, { time: '5/4' });\n const topOctaves = [\n f.TextBracket({\n from: notes[0],\n to: notes[1],\n text: 'Cool notes',\n options: {\n superscript: '',\n position: 'top',\n },\n }),\n f.TextBracket({\n from: notes[2],\n to: notes[4],\n text: 'Testing',\n options: {\n position: 'top',\n superscript: 'superscript',\n // weight & style below can be left undefined. They will fall back to the default defined in textbracket.ts.\n font: { family: 'Arial', size: 15, weight: 'normal', style: 'normal' },\n },\n }),\n ];\n const bottomOctaves = [\n f.TextBracket({\n from: notes[0],\n to: notes[1],\n text: '8',\n options: {\n superscript: 'vb',\n position: 'bottom',\n line: 3,\n font: { size: 30 },\n },\n }),\n f.TextBracket({\n from: notes[2],\n to: notes[4],\n text: 'Not cool notes',\n options: {\n superscript: ' super uncool',\n position: 'bottom',\n line: 4,\n },\n }),\n ];\n topOctaves[1].render_options.line_width = 2;\n topOctaves[1].render_options.show_bracket = false;\n bottomOctaves[0].render_options.underline_superscript = false;\n bottomOctaves[0].setDashed(false);\n bottomOctaves[1].render_options.bracket_height = 40;\n bottomOctaves[1].setDashed(true, [2, 2]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nVexFlowTests.register(TextBracketTests);\nexport { TextBracketTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TextFormatter Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Font, FontStyle, FontWeight } from '../src/font';\nimport { TextFormatter } from '../src/textformatter';\nconst TextFormatterTests = {\n Start() {\n QUnit.module('TextFormatter');\n QUnit.test('Basic', basic);\n const run = VexFlowTests.runTextTests;\n run('Accuracy', accuracy);\n run('Box Text', textBoxAccuracy);\n },\n};\nfunction basic(assert) {\n var _a;\n // See: src/fonts/textfonts.ts > loadTextFonts()\n const registeredFamilies = TextFormatter.getFontFamilies();\n assert.equal(registeredFamilies.length, 5, `There are five registered font families: 'Roboto Slab' & 'PetalumaScript' and default 'Serif', 'Serif-Bold' and 'Sans'`);\n // Verify the advanceWidth and other metrics by opening the font file with a glyph inspector:\n // https://fontdrop.info/\n // https://opentype.js.org/glyph-inspector.html\n const petalumaFormatterInfo = TextFormatter.getInfo('PetalumaScript');\n assert.equal((_a = petalumaFormatterInfo === null || petalumaFormatterInfo === void 0 ? void 0 : petalumaFormatterInfo.glyphs) === null || _a === void 0 ? void 0 : _a.C.advanceWidth, 623, 'PetalumaScript advanceWidth of C character is 623.');\n const formatterForPetalumaScript = TextFormatter.create({ family: 'PetalumaScript', size: '100px' });\n const metricsPetalumaScriptH = formatterForPetalumaScript.getGlyphMetrics('H');\n assert.equal(metricsPetalumaScriptH.leftSideBearing, 37);\n const formatterForRobotoSlab = TextFormatter.create({ family: 'Roboto Slab', size: '100px', style: 'italic' });\n const metricsRobotoSlabH = formatterForRobotoSlab.getGlyphMetrics('H');\n assert.equal(metricsRobotoSlabH.advanceWidth, 1578);\n // eslint-disable-next-line\n // @ts-ignore direct access to protected variable .cacheKey\n assert.equal(formatterForRobotoSlab.cacheKey, 'Roboto_Slab%75%normal%normal');\n}\nfunction accuracy(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 500);\n const lineHeight = 30;\n const startX = 50;\n const fonts = [\n {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n },\n {\n family: 'Roboto Slab',\n size: 14,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n },\n {\n family: Font.SANS_SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n },\n ];\n let startY = 20;\n for (let j = 0; j < fonts.length; ++j) {\n const font = fonts[j];\n const textFormatter = TextFormatter.create(font);\n ctx.setFont(font);\n const texts = ['AVo(i)a', 'bghjIVex1/2', '@@@@@@@@', 'a very long String with Mixed Case Text,(0123456789)'];\n for (let i = 0; i < texts.length; i++) {\n ctx.setFillStyle('black');\n ctx.fillText(texts[i], startX, startY);\n startY += 5;\n ctx.setFillStyle('#3a2');\n ctx.fillRect(startX, startY, textFormatter.getWidthForTextInPx(texts[i]), 2);\n ctx.setFillStyle('#32a');\n startY += 5;\n ctx.fillRect(startX, startY, ctx.measureText(texts[i]).width, 2);\n startY += lineHeight;\n }\n }\n options.assert.ok(true, 'all pass');\n}\nfunction textBoxAccuracy(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 800);\n let startY = 35;\n const boxBorder = 2;\n const boxPadding = 3;\n const startX = 50;\n const fonts = [\n {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n },\n {\n family: 'Roboto Slab',\n size: 14,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n },\n {\n family: Font.SANS_SERIF,\n size: 14,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n },\n ];\n const texts = ['AVID', 'bghjIVex1/2', '@@@@@@@@'];\n for (let j = 0; j < fonts.length; ++j) {\n const font = fonts[j];\n const textFormatter = TextFormatter.create(font);\n ctx.save();\n ctx.setFont(font);\n for (let i = 0; i < texts.length; i++) {\n const textY = textFormatter.getYForStringInPx(texts[i]);\n const height = textY.height + 2 * boxPadding;\n const headroom = -1 * textY.yMin;\n const width = textFormatter.getWidthForTextInPx(texts[i]) + 2 * boxPadding;\n ctx.setFillStyle('black');\n ctx.fillText(texts[i], startX + boxPadding, startY - boxPadding);\n ctx.setLineWidth(boxBorder);\n ctx.setStrokeStyle('#3a2');\n ctx.setFillStyle('#3a2');\n ctx.beginPath();\n ctx.rect(startX, startY - height + headroom, width, height);\n ctx.stroke();\n startY += height * 1.5 + boxBorder * 3;\n const measureBox = ctx.measureText(texts[i]);\n const mwidth = measureBox.width + boxBorder * 2;\n const mheight = measureBox.height + boxBorder * 2;\n ctx.setFillStyle('black');\n ctx.fillText(texts[i], startX + boxPadding, startY - boxPadding);\n ctx.setStrokeStyle('#32a');\n ctx.setFillStyle('#32a');\n ctx.beginPath();\n ctx.rect(startX, startY - mheight, mwidth, mheight);\n ctx.stroke();\n startY += mheight * 1.5 + boxBorder * 3;\n }\n ctx.restore();\n }\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(TextFormatterTests);\nexport { TextFormatterTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Text Note Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Crescendo } from '../src/crescendo';\nimport { Flow } from '../src/flow';\nimport { Font } from '../src/font';\nimport { Note } from '../src/note';\nimport { Stave } from '../src/stave';\nimport { TextNote } from '../src/textnote';\nconst TextNoteTests = {\n Start() {\n QUnit.module('TextNote');\n const run = VexFlowTests.runTests;\n run('TextNote Formatting', formatTextNotes);\n run('TextNote Formatting 2', formatTextNotes2);\n run('TextNote Superscript and Subscript', superscriptAndSubscript);\n run('TextNote Formatting With Glyphs 0', formatTextGlyphs0);\n run('TextNote Formatting With Glyphs 1', formatTextGlyphs1);\n run('Crescendo', crescendo);\n run('Text Dynamics', textDynamics);\n },\n};\nfunction formatTextNotes(options) {\n const f = VexFlowTests.makeFactory(options, 400, 200);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice1 = score.voice([\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' })\n .addModifier(f.Accidental({ type: 'b' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: 'q' }),\n f\n .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' })\n .addModifier(f.Accidental({ type: 'n' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n ]);\n const voice2 = score.voice([\n f.TextNote({ text: 'Center Justification', duration: 'h' }).setJustification(TextNote.Justification.CENTER),\n f.TextNote({ text: 'Left Line 1', duration: 'q' }).setLine(1),\n f.TextNote({ text: 'Right', duration: 'q' }).setJustification(TextNote.Justification.RIGHT),\n ]);\n const formatter = f.Formatter();\n formatter.joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction formatTextNotes2(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice1 = score.voice([\n f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }),\n f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }),\n f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }),\n f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }),\n f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }),\n f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }),\n f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }),\n f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }),\n f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }),\n f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }),\n f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }),\n f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }),\n f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: 'q' }),\n ]);\n const voice2 = score.voice([\n f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER),\n f.TextNote({ text: 'L', duration: '16' }),\n f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT),\n f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER),\n f.TextNote({ text: 'L', duration: '16' }),\n f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT),\n f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER),\n f.TextNote({ text: 'L', duration: '16' }),\n f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT),\n f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER),\n f.TextNote({ text: 'L', duration: '16' }),\n f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT),\n f.TextNote({ text: 'R', duration: 'q' }).setJustification(TextNote.Justification.RIGHT),\n ]);\n f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n voice2.getTickables().forEach((note) => Note.plotMetrics(f.getContext(), note, 170));\n f.draw();\n options.assert.ok(true);\n}\nfunction superscriptAndSubscript(options) {\n const f = VexFlowTests.makeFactory(options, 600, 230);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice1 = score.voice([\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: 'h' })\n .addModifier(f.Accidental({ type: 'b' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: 1, duration: 'q' }),\n f\n .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: 1, duration: 'q' })\n .addModifier(f.Accidental({ type: 'n' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n ]);\n const notes2 = [\n f.TextNote({ text: Flow.unicode.flat + 'I', superscript: '+5', duration: '8' }),\n f.TextNote({ text: 'D' + Flow.unicode.sharp + '/F', duration: '4d', superscript: 'sus2' }),\n f.TextNote({ text: 'ii', superscript: '6', subscript: '4', duration: '8' }),\n f.TextNote({ text: 'C', superscript: Flow.unicode.triangle + '7', subscript: '', duration: '8' }),\n f.TextNote({ text: 'vii', superscript: Flow.unicode['o-with-slash'] + '7', duration: '8' }),\n f.TextNote({ text: 'V', superscript: '7', duration: '8' }),\n ];\n options.assert.equal(notes2[0].getText(), Flow.unicode.flat + 'I', 'TextNote.getText() return .text');\n const voice2 = score.voice(notes2);\n voice2.getTickables().forEach((note) => {\n const textNote = note;\n textNote.setFont({ family: Font.SERIF, size: 15 });\n textNote.setLine(13);\n textNote.setJustification(TextNote.Justification.LEFT);\n });\n f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction formatTextGlyphs0(options) {\n const f = VexFlowTests.makeFactory(options, 600, 230);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice1 = score.voice([\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' })\n .addModifier(f.Accidental({ type: 'b' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }),\n ]);\n const voice2 = score.voice([\n f.TextNote({ text: 'Center', duration: '8' }).setJustification(TextNote.Justification.CENTER),\n f.TextNote({ glyph: 'f', duration: '8' }),\n f.TextNote({ glyph: 'p', duration: '8' }),\n f.TextNote({ glyph: 'm', duration: '8' }),\n f.TextNote({ glyph: 'z', duration: '8' }),\n f.TextNote({ glyph: 'mordent_upper', duration: '16' }),\n f.TextNote({ glyph: 'mordent_lower', duration: '16' }),\n f.TextNote({ glyph: 'segno', duration: '8' }),\n f.TextNote({ glyph: 'coda', duration: '8' }),\n ]);\n voice2.getTickables().forEach((n) => n.setJustification(TextNote.Justification.CENTER));\n f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction formatTextGlyphs1(options) {\n const f = VexFlowTests.makeFactory(options, 600, 230);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice1 = score.voice([\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' })\n .addModifier(f.Accidental({ type: 'b' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }),\n ]);\n const voice2 = score.voice([\n f.TextNote({ glyph: 'turn', duration: '16' }),\n f.TextNote({ glyph: 'turn_inverted', duration: '16' }),\n f.TextNote({ glyph: 'pedal_open', duration: '8' }).setLine(10),\n f.TextNote({ glyph: 'pedal_close', duration: '8' }).setLine(10),\n f.TextNote({ glyph: 'caesura_curved', duration: '8' }).setLine(3),\n f.TextNote({ glyph: 'caesura_straight', duration: '8' }).setLine(3),\n f.TextNote({ glyph: 'breath', duration: '8' }).setLine(2),\n f.TextNote({ glyph: 'tick', duration: '8' }).setLine(3),\n f.TextNote({ glyph: 'tr', duration: '8', smooth: true }).setJustification(TextNote.Justification.CENTER),\n ]);\n voice2.getTickables().forEach((n) => n.setJustification(TextNote.Justification.CENTER));\n f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction crescendo(options) {\n const f = VexFlowTests.makeFactory(options, 600, 230);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice = score.voice([\n f.TextNote({ glyph: 'p', duration: '16' }),\n new Crescendo({ duration: '4d' }).setLine(0).setHeight(25).setStave(stave),\n f.TextNote({ glyph: 'f', duration: '16' }),\n new Crescendo({ duration: '4' }).setLine(5).setStave(stave),\n new Crescendo({ duration: '4' }).setLine(10).setDecrescendo(true).setHeight(5).setStave(stave),\n ]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction textDynamics(options) {\n const f = VexFlowTests.makeFactory(options, 600, 230);\n const score = f.EasyScore();\n const voice = score.voice([\n f.TextDynamics({ text: 'sfz', duration: '4' }),\n f.TextDynamics({ text: 'rfz', duration: '4' }),\n f.TextDynamics({ text: 'mp', duration: '4' }),\n f.TextDynamics({ text: 'ppp', duration: '4' }),\n f.TextDynamics({ text: 'fff', duration: '4' }),\n f.TextDynamics({ text: 'mf', duration: '4' }),\n f.TextDynamics({ text: 'sff', duration: '4' }),\n ], { time: '7/4' });\n // This is refactored to use preCalculateMinWidth... to exercise\n // a bug fix when textDynamic got formatted more than once.\n const formatter = f.Formatter();\n formatter.joinVoices([voice]);\n // const width = 250; //formatter.preCalculateMinTotalWidth([voice]);\n const width = formatter.preCalculateMinTotalWidth([voice]);\n formatter.format([voice]);\n const stave = f.Stave({ y: 40, width: width + Stave.defaultPadding });\n stave.draw();\n voice.draw(f.getContext(), stave);\n options.assert.ok(true);\n}\nVexFlowTests.register(TextNoteTests);\nexport { TextNoteTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Three Voices Tests - Three voices in single staff.\nimport { concat, VexFlowTests } from './vexflow_test_helpers';\nimport { Beam } from '../src/beam';\nconst ThreeVoicesTests = {\n Start() {\n // TODO: Rename the module to 'Three Voices', because we aren't really testing rests.\n QUnit.module('Three Voice Rests');\n const run = VexFlowTests.runTests;\n run('Three Voices - #1', threeVoices1);\n run('Three Voices - #2 Complex', threeVoices2);\n run('Three Voices - #3', threeVoices3);\n run('Auto Adjust Rest Positions - Two Voices', autoRestTwoVoices);\n run('Auto Adjust Rest Positions - Three Voices #1', autoRestThreeVoices1);\n run('Auto Adjust Rest Positions - Three Voices #2', autoRestThreeVoices2);\n },\n};\n/**\n * Helper for setting up the first three test cases: threeVoices1, threeVoices2, threeVoices3.\n */\nfunction createThreeVoicesTest(noteGroup1, noteGroup2, noteGroup3, setup) {\n return (options) => {\n const factory = VexFlowTests.makeFactory(options, 600, 200);\n const stave = factory.Stave().addClef('treble').addTimeSignature('4/4');\n const score = factory.EasyScore();\n // Convert each noteGroup array to StaveNote[].\n const noteGroups = [noteGroup1, noteGroup2, noteGroup3].map((args) => score.notes(...args));\n const voices = noteGroups.map((notes) => score.voice(notes));\n setup(factory, voices);\n const beams = [\n Beam.applyAndGetBeams(voices[0], +1),\n Beam.applyAndGetBeams(voices[1], -1),\n Beam.applyAndGetBeams(voices[2], -1),\n ].reduce(concat);\n // Set option to position rests near the notes in each voice.\n factory.Formatter().joinVoices(voices).formatToStave(voices, stave);\n factory.draw();\n for (let i = 0; i < beams.length; i++) {\n beams[i].setContext(factory.getContext()).draw();\n }\n options.assert.ok(true);\n };\n}\n/**\n *\n */\nconst threeVoices1 = createThreeVoicesTest(['e5/2, e5', { stem: 'up' }], ['(d4 a4 d#5)/8, b4, (d4 a4 c5), b4, (d4 a4 c5), b4, (d4 a4 c5), b4', { stem: 'down' }], ['b3/4, e3, f3, a3', { stem: 'down' }], (f, voices) => {\n voices[0].getTickables()[0].addModifier(f.Fingering({ number: '0', position: 'left' }), 0);\n voices[1]\n .getTickables()[0]\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '4', position: 'left' }), 1);\n});\n/**\n * Lots of beamed notes. A beam and notehead overlap.\n */\nconst threeVoices2 = createThreeVoicesTest(['(a4 e5)/16, e5, e5, e5, e5/8, e5, e5/2', { stem: 'up' }], ['(d4 d#5)/16, (b4 c5), d5, e5, (d4 a4 c5)/8, b4, (d4 a4 c5), b4, (d4 a4 c5), b4', { stem: 'down' }], ['b3/8, b3, e3/4, f3, a3', { stem: 'down' }], (f, voices) => {\n voices[0]\n .getTickables()[0]\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '0', position: 'above' }), 1);\n voices[1]\n .getTickables()[0]\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '4', position: 'left' }), 1);\n});\n/**\n *\n */\nconst threeVoices3 = createThreeVoicesTest(['(g4 e5)/4, e5, (g4 e5)/2', { stem: 'up' }], ['c#5/4, b4/8, b4/8/r, a4/4., g4/8', { stem: 'down' }], ['c4/4, b3, a3, g3', { stem: 'down' }], (f, voices) => {\n voices[0]\n .getTickables()[0]\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 1);\n voices[1].getTickables()[0].addModifier(f.Fingering({ number: '1', position: 'left' }), 0);\n voices[2].getTickables()[0].addModifier(f.Fingering({ number: '3', position: 'left' }), 0);\n});\nfunction autoRestTwoVoices(options) {\n const f = VexFlowTests.makeFactory(options, 900, 200);\n const score = f.EasyScore();\n let x = 10;\n let beams = [];\n function createMeasure(measureTitle, width, align_rests) {\n const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1);\n x += width;\n const noteArrays = [\n score.notes('b4/8/r, e5/16, b4/r, b4/8/r, e5/16, b4/r, b4/8/r, d5/16, b4/r, e5/4', { stem: 'up' }),\n score.notes('c5/16, c4, b4/r, d4, e4, f4, b4/r, g4, g4[stem=\"up\"], a4[stem=\"up\"], b4/r, b4[stem=\"up\"], e4/4', {\n stem: 'down',\n }),\n [f.TextNote({ text: measureTitle, line: -1, duration: '1', smooth: true })],\n ];\n const voices = noteArrays.map((notes) => score.voice(notes));\n beams = beams.concat(Beam.applyAndGetBeams(voices[0], 1)).concat(Beam.applyAndGetBeams(voices[1], -1));\n f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests });\n }\n createMeasure('Default Rest Positions', 400, false);\n createMeasure('Rests Repositioned To Avoid Collisions', 400, true);\n f.draw();\n for (let i = 0; i < beams.length; i++) {\n beams[i].setContext(f.getContext()).draw();\n }\n options.assert.ok(true, 'Auto Adjust Rests - Two Voices');\n}\nfunction autoRestThreeVoices1(options) {\n const f = VexFlowTests.makeFactory(options, 850, 200);\n const score = f.EasyScore();\n let x = 10;\n function createMeasure(measureTitle, width, align_rests) {\n const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1);\n const voices = [\n score.voice(score.notes('b4/4/r, e5, e5/r, e5/r, e5, e5, e5, e5/r', { stem: 'up' }), { time: '8/4' }),\n score.voice(score.notes('b4/4/r, b4/r, b4/r, b4, b4/r, b4/r, b4, b4', { stem: 'down' }), { time: '8/4' }),\n score.voice(score.notes('e4/4/r, e4/r, f4, b4/r, g4, c4, e4/r, c4', { stem: 'down' }), { time: '8/4' }),\n score.voice([\n f.TextNote({ text: measureTitle, duration: '1', line: -1, smooth: true }),\n f.TextNote({ text: '', duration: '1', line: -1, smooth: true }),\n ], { time: '8/4' }),\n ];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests });\n x += width;\n }\n createMeasure('Default Rest Positions', 400, false);\n createMeasure('Rests Repositioned To Avoid Collisions', 400, true);\n f.draw();\n options.assert.ok(true);\n}\nfunction autoRestThreeVoices2(options) {\n const f = VexFlowTests.makeFactory(options, 850, 200);\n const score = f.EasyScore();\n let x = 10;\n function createMeasure(measureTitle, width, align_rests) {\n const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1);\n const voices = [\n score.voice(score.notes('b4/16/r, e5, e5/r, e5/r, e5, e5, e5, e5/r'), { time: '2/4' }),\n score.voice(score.notes('b4/16/r, b4/r, b4/r, b4, b4/r, b4/r, b4, b4'), { time: '2/4' }),\n score.voice(score.notes('e4/16/r, e4/r, f4, b4/r, g4, c4, e4/r, c4'), { time: '2/4' }),\n score.voice([f.TextNote({ text: measureTitle, duration: 'h', line: -1, smooth: true })], { time: '2/4' }),\n ];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests });\n x += width;\n }\n createMeasure('Default Rest Positions', 400, false);\n createMeasure('Rests Repositioned To Avoid Collisions', 400, true);\n f.draw();\n options.assert.ok(true);\n}\nVexFlowTests.register(ThreeVoicesTests);\nexport { ThreeVoicesTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TickContext Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { TickContext } from '../src/tickcontext';\nimport { MockTickable } from './mocks';\nconst TickContextTests = {\n Start() {\n QUnit.module('TickContext');\n QUnit.test('Current Tick Test', currentTick);\n QUnit.test('Tracking Test', tracking);\n },\n};\nfunction currentTick(assert) {\n const tc = new TickContext();\n assert.equal(tc.getCurrentTick().value(), 0, 'New tick context has no ticks');\n}\nfunction tracking(assert) {\n const BEAT = (1 * Flow.RESOLUTION) / 4;\n const tickables = [\n new MockTickable().setTicks(BEAT).setWidth(10),\n new MockTickable().setTicks(BEAT * 2).setWidth(20),\n new MockTickable().setTicks(BEAT).setWidth(30),\n ];\n const tc = new TickContext();\n tc.setPadding(0);\n tc.addTickable(tickables[0]);\n assert.equal(tc.getMaxTicks().value(), BEAT);\n tc.addTickable(tickables[1]);\n assert.equal(tc.getMaxTicks().value(), BEAT * 2);\n tc.addTickable(tickables[2]);\n assert.equal(tc.getMaxTicks().value(), BEAT * 2);\n assert.equal(tc.getWidth(), 0);\n tc.preFormat();\n assert.equal(tc.getWidth(), 30);\n}\nVexFlowTests.register(TickContextTests);\nexport { TickContextTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TimeSignature Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Stave } from '../src/stave';\nimport { StaveConnector } from '../src/staveconnector';\nimport { TimeSignature } from '../src/timesignature';\nconst TimeSignatureTests = {\n Start() {\n QUnit.module('TimeSignature');\n QUnit.test('Time Signature Parser', parser);\n const run = VexFlowTests.runTests;\n run('Basic Time Signatures', basic);\n run('Big Signature Test', big);\n run('Additive Signature Test', additive);\n run('Alternating Signature Test', alternating);\n run('Interchangeable Signature Test', interchangeable);\n run('Aggregate Signature Test', agregate);\n run('Complex Signature Test', complex);\n run('Time Signature multiple staves alignment test', multiple);\n run('Time Signature Change Test', change);\n },\n};\nfunction parser(assert) {\n const timeSig = new TimeSignature();\n assert.equal(timeSig.getTimeSpec(), '4/4', 'default time signature is 4/4');\n const mustFail = ['asdf', '123/', '/10', '/', '4567', 'C+', '1+', '+1', '(3+', '+3)', '()', '(+)'];\n mustFail.forEach((invalidString) => {\n assert.throws(() => timeSig.parseTimeSpec(invalidString), /BadTimeSignature/);\n });\n const mustPass = ['4/4', '10/12', '1/8', '1234567890/1234567890', 'C', 'C|', '+'];\n mustPass.forEach((validString) => timeSig.parseTimeSpec(validString));\n timeSig.setTimeSig('4/4');\n assert.equal(timeSig.getIsNumeric(), true, '4/4 is numeric');\n assert.equal(timeSig.getLine(), 0, 'digits are on line 0');\n timeSig.setTimeSig('C|');\n assert.equal(timeSig.getTimeSpec(), 'C|', 'timeSpec changed to C|');\n assert.equal(timeSig.getIsNumeric(), false, 'cut time is not numeric');\n assert.equal(timeSig.getLine(), 2, 'cut/common are on line 2');\n assert.ok(true, 'all pass');\n}\nfunction basic(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 120);\n new Stave(10, 10, 500)\n .addTimeSignature('2/2')\n .addTimeSignature('3/4')\n .addTimeSignature('4/4')\n .addTimeSignature('6/8')\n .addTimeSignature('C')\n .addTimeSignature('C|')\n .addEndTimeSignature('2/2')\n .addEndTimeSignature('3/4')\n .addEndTimeSignature('4/4')\n .addEndClef('treble')\n .addEndTimeSignature('6/8')\n .addEndTimeSignature('C')\n .addEndTimeSignature('C|')\n .setContext(ctx)\n .draw();\n options.assert.ok(true, 'all pass');\n}\nfunction big(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300)\n .addTimeSignature('12/8')\n .addTimeSignature('7/16')\n .addTimeSignature('1234567/890')\n .addTimeSignature('987/654321')\n .setContext(ctx)\n .draw();\n options.assert.ok(true, 'all pass');\n}\nfunction additive(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300).addTimeSignature('2+3+2/8').setContext(ctx).draw();\n options.assert.ok(true, 'all pass');\n}\nfunction alternating(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300).addTimeSignature('6/8').addTimeSignature('+').addTimeSignature('3/4').setContext(ctx).draw();\n options.assert.ok(true, 'all pass');\n}\nfunction interchangeable(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300).addTimeSignature('3/4').addTimeSignature('-').addTimeSignature('2/4').setContext(ctx).draw();\n options.assert.ok(true, 'all pass');\n}\nfunction agregate(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300)\n .addTimeSignature('2/4')\n .addTimeSignature('+')\n .addTimeSignature('3/8')\n .addTimeSignature('+')\n .addTimeSignature('5/4')\n .setContext(ctx)\n .draw();\n options.assert.ok(true, 'all pass');\n}\nfunction complex(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300)\n .addTimeSignature('(2+3)/16')\n .addTimeSignature('+')\n .addTimeSignature('3/8')\n .setContext(ctx)\n .draw();\n options.assert.ok(true, 'all pass');\n}\nfunction multiple(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 350);\n // Each StaveLineConfig object is of the form { visible: boolean }.\n const stave1LineConfig = [false, false, true, false, false].map((visible) => ({ visible }));\n const stave1 = new Stave(15, 0, 300)\n .setConfigForLines(stave1LineConfig)\n .addClef('percussion')\n .addTimeSignature('4/4', 25) // passing the custom padding in pixels\n .setContext(ctx)\n .draw();\n const stave2 = new Stave(15, 110, 300).addClef('treble').addTimeSignature('4/4').setContext(ctx).draw();\n const stave3 = new Stave(15, 220, 300).addClef('bass').addTimeSignature('4/4').setContext(ctx).draw();\n Stave.formatBegModifiers([stave1, stave2, stave3]);\n new StaveConnector(stave1, stave2).setType('single').setContext(ctx).draw();\n new StaveConnector(stave2, stave3).setType('single').setContext(ctx).draw();\n new StaveConnector(stave2, stave3).setType('brace').setContext(ctx).draw();\n options.assert.ok(true, 'all pass');\n}\nfunction change(options) {\n const f = VexFlowTests.makeFactory(options, 900);\n const stave = f.Stave({ x: 0, y: 0 }).addClef('treble').addTimeSignature('C|');\n const tickables = [\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }),\n f.TimeSigNote({ time: '3/4' }),\n f.StaveNote({ keys: ['d/4'], duration: '4', clef: 'alto' }),\n f.StaveNote({ keys: ['b/3'], duration: '4r', clef: 'alto' }),\n f.TimeSigNote({ time: 'C' }),\n f.StaveNote({ keys: ['c/3', 'e/3', 'g/3'], duration: '4', clef: 'bass' }),\n f.TimeSigNote({ time: '9/8' }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }),\n ];\n const voice = f.Voice().setStrict(false).addTickables(tickables);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(TimeSignatureTests);\nexport { TimeSignatureTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Tremolo Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Barline } from '../src/stavebarline';\nimport { Tremolo } from '../src/tremolo';\nconst TremoloTests = {\n Start() {\n QUnit.module('Tremolo');\n const run = VexFlowTests.runTests;\n run('Tremolo - Basic', tremoloBasic);\n run('Tremolo - Big', tremoloBig);\n },\n};\nfunction tremoloBasic(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const score = f.EasyScore();\n // bar 1\n const stave1 = f.Stave({ width: 250 }).setEndBarType(Barline.type.DOUBLE);\n const notes1 = score.notes('e4/4, e4, e4, e4', { stem: 'up' });\n notes1[0].addModifier(new Tremolo(3), 0);\n notes1[1].addModifier(new Tremolo(2), 0);\n notes1[2].addModifier(new Tremolo(1), 0);\n const voice1 = score.voice(notes1);\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n // bar 2\n const stave2 = f\n .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 })\n .setEndBarType(Barline.type.DOUBLE);\n const notes2 = score.notes('e5/4, e5, e5, e5', { stem: 'down' });\n notes2[1].addModifier(new Tremolo(1), 0);\n notes2[2].addModifier(new Tremolo(2), 0);\n notes2[3].addModifier(new Tremolo(3), 0);\n const voice2 = score.voice(notes2);\n f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2);\n f.draw();\n options.assert.ok(true, 'Tremolo - Basic');\n}\nfunction tremoloBig(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const score = f.EasyScore();\n // bar 1\n const stave1 = f.Stave({ width: 250 }).setEndBarType(Barline.type.DOUBLE);\n const notes1 = score.notes('e4/4, e4, e4, e4', { stem: 'up' });\n const tremolo1 = new Tremolo(3);\n tremolo1.extra_stroke_scale = 1.7;\n tremolo1.y_spacing_scale = 1.5;\n const tremolo2 = new Tremolo(2);\n tremolo2.extra_stroke_scale = 1.7;\n tremolo2.y_spacing_scale = 1.5;\n const tremolo3 = new Tremolo(1);\n tremolo3.extra_stroke_scale = 1.7;\n tremolo3.y_spacing_scale = 1.5;\n notes1[0].addModifier(tremolo1, 0);\n notes1[1].addModifier(tremolo2, 0);\n notes1[2].addModifier(tremolo3, 0);\n const voice1 = score.voice(notes1);\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n // bar 2\n const stave2 = f\n .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 })\n .setEndBarType(Barline.type.DOUBLE);\n const notes2 = score.notes('e5/4, e5, e5, e5', { stem: 'down' });\n const tremolo4 = new Tremolo(1);\n tremolo4.extra_stroke_scale = 1.7;\n tremolo4.y_spacing_scale = 1.5;\n const tremolo5 = new Tremolo(2);\n tremolo5.extra_stroke_scale = 1.7;\n tremolo5.y_spacing_scale = 1.5;\n const tremolo6 = new Tremolo(3);\n tremolo6.extra_stroke_scale = 1.7;\n tremolo6.y_spacing_scale = 1.5;\n notes2[1].addModifier(tremolo4, 0);\n notes2[2].addModifier(tremolo5, 0);\n notes2[3].addModifier(tremolo6, 0);\n const voice2 = score.voice(notes2);\n f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2);\n f.draw();\n options.assert.ok(true, 'Tremolo - Big');\n}\nVexFlowTests.register(TremoloTests);\nexport { TremoloTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Tuning Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Tuning } from '../src/tuning';\nconst TuningTests = {\n Start() {\n QUnit.module('Tuning');\n QUnit.test('Standard Tuning', standard);\n QUnit.test('Standard Banjo Tuning', banjo);\n QUnit.test('Return note for fret', noteForFret);\n },\n};\n/**\n * Helper function to verify that the provided tuning matches a standard 6-string guitar.\n */\nfunction checkStandard(assert, tuning) {\n assert.throws(() => tuning.getValueForString(0), /BadArguments/, 'String 0');\n assert.throws(() => tuning.getValueForString(9), /BadArguments/, 'String 9');\n // TODO: Tuning constructor has a bug in that the default tuning has 8 strings.\n // See: 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2' in tuning.ts constructor.\n // assert.throws(() => tuning.getValueForString(7), /BadArguments/, 'String 7');\n // Tuning.getValueForString() returns a note number where the value 60 corresponds to middle C.\n assert.equal(tuning.getValueForString(6), 40, 'Low E string');\n assert.equal(tuning.getValueForString(5), 45, 'A string');\n assert.equal(tuning.getValueForString(4), 50, 'D string');\n assert.equal(tuning.getValueForString(3), 55, 'G string');\n assert.equal(tuning.getValueForString(2), 59, 'B string');\n assert.equal(tuning.getValueForString(1), 64, 'High E string');\n}\n/**\n * Helper function to verify that the provided tuning matches a standard 5-string banjo.\n */\nfunction checkStandardBanjo(assert, tuning) {\n assert.throws(() => tuning.getValueForString(0), /BadArguments/, 'String 0');\n assert.throws(() => tuning.getValueForString(6), /BadArguments/, 'String 6');\n assert.equal(tuning.getValueForString(5), 67, 'High G string');\n assert.equal(tuning.getValueForString(4), 50, 'D string');\n assert.equal(tuning.getValueForString(3), 55, 'G string');\n assert.equal(tuning.getValueForString(2), 59, 'B string');\n assert.equal(tuning.getValueForString(1), 62, 'High D string');\n}\nfunction standard(assert) {\n assert.expect(16);\n const tuning = new Tuning();\n checkStandard(assert, tuning);\n // Set the tuning by specifying a name: 'standard'.\n tuning.setTuning('standard');\n checkStandard(assert, tuning);\n}\nfunction banjo(assert) {\n assert.expect(7);\n const tuning = new Tuning();\n tuning.setTuning('standardBanjo');\n checkStandardBanjo(assert, tuning);\n}\nfunction noteForFret(assert) {\n assert.expect(8);\n const tuning = new Tuning('E/5,B/4,G/4,D/4,A/3,E/3');\n assert.throws(() => tuning.getNoteForFret(-1, 1), /BadArguments/, 'Fret = -1');\n assert.throws(() => tuning.getNoteForFret(1, -1), /BadArguments/, 'String = -1');\n assert.equal(tuning.getNoteForFret(0, 1), 'E/5', 'High E string');\n assert.equal(tuning.getNoteForFret(5, 1), 'A/5', 'High E string, fret 5');\n assert.equal(tuning.getNoteForFret(0, 2), 'B/4', 'B string');\n assert.equal(tuning.getNoteForFret(0, 3), 'G/4', 'G string');\n assert.equal(tuning.getNoteForFret(12, 2), 'B/5', 'B string, fret 12');\n assert.equal(tuning.getNoteForFret(0, 6), 'E/3', 'Low E string');\n}\nVexFlowTests.register(TuningTests);\nexport { TuningTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Tuplet Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Dot } from '../src/dot';\nimport { Formatter } from '../src/formatter';\nimport { Stem } from '../src/stem';\nimport { Tuplet } from '../src/tuplet';\nconst TupletTests = {\n Start() {\n QUnit.module('Tuplet');\n const run = VexFlowTests.runTests;\n run('Simple Tuplet', simple);\n run('Beamed Tuplet', beamed);\n run('Ratioed Tuplet', ratio);\n run('Bottom Tuplet', bottom);\n run('Bottom Ratioed Tuplet', bottomRatio);\n run('Awkward Tuplet', awkward);\n run('Complex Tuplet', complex);\n run('Mixed Stem Direction Tuplet', mixedTop);\n run('Mixed Stem Direction Bottom Tuplet', mixedBottom);\n run('Nested Tuplets', nested);\n run('Single Tuplets', single);\n },\n};\n// Helper Functions to set the stem direction and duration of the options objects (i.e., StaveNoteStruct)\n// that are ultimately passed into Factory.StaveNote().\n// eslint-disable-next-line\nconst set = (key) => (value) => (object) => {\n object[key] = value;\n return object;\n};\nconst setStemDirection = set('stem_direction');\nconst setStemUp = setStemDirection(Stem.UP);\nconst setStemDown = setStemDirection(Stem.DOWN);\nconst setDurationToQuarterNote = set('duration')('4');\n/**\n * Simple test case with one ascending triplet and one descending triplet.\n */\nfunction simple(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('3/4');\n const notes = [\n { keys: ['g/4'], duration: '4' },\n { keys: ['a/4'], duration: '4' },\n { keys: ['b/4'], duration: '4' },\n { keys: ['b/4'], duration: '8' },\n { keys: ['a/4'], duration: '8' },\n { keys: ['g/4'], duration: '8' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n f.Tuplet({ notes: notes.slice(0, 3) });\n f.Tuplet({ notes: notes.slice(3, 6) });\n // 3/4 time\n const voice = f\n .Voice({ time: { num_beats: 3, beat_value: 4 } })\n .setStrict(true)\n .addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Simple Test');\n}\nfunction beamed(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('3/8');\n const notes = [\n { keys: ['b/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['g/4'], duration: '16' },\n { keys: ['a/4'], duration: '8' },\n { keys: ['f/4'], duration: '8' },\n { keys: ['a/4'], duration: '8' },\n { keys: ['f/4'], duration: '8' },\n { keys: ['a/4'], duration: '8' },\n { keys: ['f/4'], duration: '8' },\n { keys: ['g/4'], duration: '8' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n f.Beam({ notes: notes.slice(0, 3) });\n f.Beam({ notes: notes.slice(3, 10) });\n f.Tuplet({ notes: notes.slice(0, 3) });\n f.Tuplet({ notes: notes.slice(3, 10) });\n // 3/8 time\n const voice = f\n .Voice({ time: { num_beats: 3, beat_value: 8 } })\n .setStrict(true)\n .addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Beamed Test');\n}\nfunction ratio(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('4/4');\n const notes = [\n { keys: ['f/4'], duration: '4' },\n { keys: ['a/4'], duration: '4' },\n { keys: ['b/4'], duration: '4' },\n { keys: ['g/4'], duration: '8' },\n { keys: ['e/4'], duration: '8' },\n { keys: ['g/4'], duration: '8' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n f.Beam({\n notes: notes.slice(3, 6),\n });\n f.Tuplet({\n notes: notes.slice(0, 3),\n options: {\n ratioed: true,\n },\n });\n f.Tuplet({\n notes: notes.slice(3, 6),\n options: {\n ratioed: true,\n notes_occupied: 4,\n },\n });\n const voice = f.Voice().setStrict(true).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Ratioed Test');\n}\nfunction bottom(options) {\n const f = VexFlowTests.makeFactory(options, 350, 160);\n const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('3/4');\n const notes = [\n { keys: ['f/4'], duration: '4' },\n { keys: ['c/4'], duration: '4' },\n { keys: ['g/4'], duration: '4' },\n { keys: ['d/5'], duration: '8' },\n { keys: ['g/3'], duration: '8' },\n { keys: ['b/4'], duration: '8' },\n ]\n .map(setStemDown)\n .map(f.StaveNote.bind(f));\n f.Beam({\n notes: notes.slice(3, 6),\n });\n f.Tuplet({\n notes: notes.slice(0, 3),\n options: { location: Tuplet.LOCATION_BOTTOM },\n });\n f.Tuplet({\n notes: notes.slice(3, 6),\n options: { location: Tuplet.LOCATION_BOTTOM },\n });\n const voice = f\n .Voice({ time: { num_beats: 3, beat_value: 4 } })\n .setStrict(true)\n .addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Bottom Test');\n}\nfunction bottomRatio(options) {\n const f = VexFlowTests.makeFactory(options, 350, 160);\n const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('5/8');\n const notes = [\n { keys: ['f/4'], duration: '4' },\n { keys: ['c/4'], duration: '4' },\n { keys: ['d/4'], duration: '4' },\n { keys: ['d/5'], duration: '8' },\n { keys: ['g/5'], duration: '8' },\n { keys: ['b/4'], duration: '8' },\n ]\n .map(setStemDown)\n .map(f.StaveNote.bind(f));\n f.Beam({\n notes: notes.slice(3, 6),\n });\n f.Tuplet({\n notes: notes.slice(0, 3),\n options: {\n location: Tuplet.LOCATION_BOTTOM,\n ratioed: true,\n },\n });\n f.Tuplet({\n notes: notes.slice(3, 6),\n options: {\n location: Tuplet.LOCATION_BOTTOM,\n notes_occupied: 1,\n },\n });\n const voice = f\n .Voice({ time: { num_beats: 5, beat_value: 8 } })\n .setStrict(true)\n .addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Bottom Ratioed Test');\n}\nfunction awkward(options) {\n const f = VexFlowTests.makeFactory(options, 370, 160);\n const stave = f.Stave({ x: 10, y: 10 });\n const notes = [\n { keys: ['g/4'], duration: '16' },\n { keys: ['b/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['g/4'], duration: '16' },\n { keys: ['f/4'], duration: '16' },\n { keys: ['e/4'], duration: '16' },\n { keys: ['c/4'], duration: '16' },\n { keys: ['g/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['f/4'], duration: '16' },\n { keys: ['e/4'], duration: '16' },\n { keys: ['c/4'], duration: '8' },\n { keys: ['d/4'], duration: '8' },\n { keys: ['e/4'], duration: '8' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n f.Beam({ notes: notes.slice(0, 12) });\n f.Tuplet({\n notes: notes.slice(0, 12),\n options: {\n notes_occupied: 142,\n ratioed: true,\n },\n });\n f.Tuplet({\n notes: notes.slice(12, 15),\n options: {\n ratioed: true,\n },\n }).setBracketed(true);\n const voice = f.Voice().setStrict(false).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Awkward Test');\n}\nfunction complex(options) {\n const f = VexFlowTests.makeFactory(options, 600);\n const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4');\n const notes1 = [\n { keys: ['b/4'], duration: '8d' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['g/4'], duration: '8' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['b/4'], duration: '16r' },\n { keys: ['g/4'], duration: '32' },\n { keys: ['f/4'], duration: '32' },\n { keys: ['g/4'], duration: '32' },\n { keys: ['f/4'], duration: '32' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['f/4'], duration: '8' },\n { keys: ['b/4'], duration: '8' },\n { keys: ['a/4'], duration: '8' },\n { keys: ['g/4'], duration: '8' },\n { keys: ['b/4'], duration: '8' },\n { keys: ['a/4'], duration: '8' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n Dot.buildAndAttach([notes1[0]], { all: true });\n const notes2 = [{ keys: ['c/4'] }, { keys: ['c/4'] }, { keys: ['c/4'] }, { keys: ['c/4'] }]\n .map(setDurationToQuarterNote)\n .map(setStemDown)\n .map(f.StaveNote.bind(f));\n f.Beam({ notes: notes1.slice(0, 3) });\n f.Beam({ notes: notes1.slice(5, 9) });\n f.Beam({ notes: notes1.slice(11, 16) });\n f.Tuplet({\n notes: notes1.slice(0, 3),\n });\n f.Tuplet({\n notes: notes1.slice(3, 11),\n options: {\n num_notes: 7,\n notes_occupied: 4,\n ratioed: false,\n },\n });\n f.Tuplet({\n notes: notes1.slice(11, 16),\n options: {\n notes_occupied: 4,\n },\n });\n const voice1 = f.Voice().setStrict(true).addTickables(notes1);\n const voice2 = f.Voice().setStrict(true).addTickables(notes2);\n new Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n f.draw();\n options.assert.ok(true, 'Complex Test');\n}\nfunction mixedTop(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10 });\n const notes = [\n { keys: ['a/4'], stem_direction: 1 },\n { keys: ['c/6'], stem_direction: -1 },\n { keys: ['a/4'], stem_direction: 1 },\n { keys: ['f/5'], stem_direction: 1 },\n { keys: ['a/4'], stem_direction: -1 },\n { keys: ['c/6'], stem_direction: -1 },\n ]\n .map(setDurationToQuarterNote)\n .map(f.StaveNote.bind(f));\n f.Tuplet({\n notes: notes.slice(0, 2),\n options: {\n notes_occupied: 3,\n },\n });\n f.Tuplet({\n notes: notes.slice(2, 4),\n options: {\n notes_occupied: 3,\n },\n });\n f.Tuplet({\n notes: notes.slice(4, 6),\n options: {\n notes_occupied: 3,\n },\n });\n const voice = f.Voice().setStrict(false).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Mixed Stem Direction Tuplet');\n}\nfunction mixedBottom(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10 });\n const notes = [\n { keys: ['f/3'], stem_direction: 1 },\n { keys: ['a/5'], stem_direction: -1 },\n { keys: ['a/4'], stem_direction: 1 },\n { keys: ['f/3'], stem_direction: 1 },\n { keys: ['a/4'], stem_direction: -1 },\n { keys: ['c/4'], stem_direction: -1 },\n ]\n .map(setDurationToQuarterNote)\n .map(f.StaveNote.bind(f));\n f.Tuplet({\n notes: notes.slice(0, 2),\n options: {\n notes_occupied: 3,\n },\n });\n f.Tuplet({\n notes: notes.slice(2, 4),\n options: {\n notes_occupied: 3,\n },\n });\n f.Tuplet({\n notes: notes.slice(4, 6),\n options: {\n notes_occupied: 3,\n },\n });\n const voice = f.Voice().setStrict(false).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Mixed Stem Direction Bottom Tuplet');\n}\nfunction nested(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4');\n const notes = [\n // Big triplet 1:\n { keys: ['b/4'], duration: '4' },\n { keys: ['a/4'], duration: '4' },\n { keys: ['g/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['f/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['g/4'], duration: '16' },\n { keys: ['b/4'], duration: '2' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n f.Beam({\n notes: notes.slice(2, 7),\n });\n f.Tuplet({\n notes: notes.slice(0, 7),\n options: {\n notes_occupied: 2,\n num_notes: 3,\n },\n });\n f.Tuplet({\n notes: notes.slice(2, 7),\n options: {\n notes_occupied: 4,\n num_notes: 5,\n },\n });\n // 4/4 time\n const voice = f.Voice().setStrict(true).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Nested Tuplets');\n}\nfunction single(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4');\n const notes = [\n // Big triplet 1:\n { keys: ['c/4'], duration: '4' },\n { keys: ['d/4'], duration: '8' },\n { keys: ['e/4'], duration: '8' },\n { keys: ['f/4'], duration: '8' },\n { keys: ['g/4'], duration: '8' },\n { keys: ['a/4'], duration: '2' },\n { keys: ['b/4'], duration: '4' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n f.Beam({\n notes: notes.slice(1, 4),\n });\n // big quartuplet\n f.Tuplet({\n notes: notes.slice(0, -1),\n options: {\n num_notes: 4,\n notes_occupied: 3,\n ratioed: true,\n bracketed: true,\n },\n });\n // first singleton\n f.Tuplet({\n notes: notes.slice(0, 1),\n options: {\n num_notes: 3,\n notes_occupied: 2,\n ratioed: true,\n },\n });\n // eighth note triplet\n f.Tuplet({\n notes: notes.slice(1, 4),\n options: {\n num_notes: 3,\n notes_occupied: 2,\n },\n });\n // second singleton\n f.Tuplet({\n notes: notes.slice(4, 5),\n options: {\n num_notes: 3,\n notes_occupied: 2,\n ratioed: true,\n bracketed: true,\n },\n });\n // 4/4 time\n const voice = f\n .Voice({ time: { num_beats: 4, beat_value: 4 } })\n .setStrict(true)\n .addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Nested Tuplets');\n}\nVexFlowTests.register(TupletTests);\nexport { TupletTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// TypeGuard Tests\n// eslint-disable-next-line\n// @ts-nocheck to support ES5 style class declaration in the fakeES5() test case.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { CanvasContext } from '../src/canvascontext';\nimport { StaveNote } from '../src/stavenote';\nimport { StemmableNote } from '../src/stemmablenote';\nimport { TabNote } from '../src/tabnote';\nimport { isCategory, isNote, isRenderContext, isStaveNote, isStemmableNote, isTabNote } from '../src/typeguard';\nconst TypeGuardTests = {\n Start() {\n QUnit.module('TypeGuard');\n QUnit.test('Real VexFlow Types', real);\n QUnit.test('Fake VexFlow Types in ES5', fakeES5);\n QUnit.test('Fake VexFlow Types in ES6', fakeES6);\n QUnit.test('Edge Case ES5/ES6', edgeCaseES5vsES6);\n },\n};\nfunction real(assert) {\n const s = new StaveNote({ keys: ['c/4'], duration: 'w' });\n assert.ok(isStaveNote(s), 'isStaveNote helper function');\n assert.ok(isCategory(s, 'StaveNote'), 'Use isCategory(s, \"StaveNote\") directly');\n assert.notOk(isTabNote(s), 'isTabNote helper function. s is NOT a TabNote.');\n const t = new TabNote({ positions: [{ str: 2, fret: 1 }], duration: '1' });\n assert.ok(isTabNote(t), 'isTabNote helper function');\n assert.notOk(isStaveNote(t), 't is NOT a StaveNote');\n assert.ok(isNote(s), 'StaveNote extends StemmableNote which extends Note, so s is a Note');\n assert.ok(isStemmableNote(t), 'TabNote extends StemmableNote');\n assert.ok(isNote(t), 'TabNote extends StemmableNote which extends Note, so t is a Note');\n const canvas = document.createElement('canvas');\n canvas.width = 800;\n canvas.height = 400;\n const ctx = new CanvasContext(canvas.getContext('2d'));\n assert.ok(isRenderContext(ctx), 'ctx is a RenderContext');\n}\n/**\n * Helper function to test the fake VexFlow objects we create in fakeES5() and fakeES6().\n */\nfunction checkFakeObjects(assert, fakeStemmableNote, fakeStaveNote) {\n assert.ok(isStemmableNote(fakeStemmableNote), 'Fake StemmableNote is a StemmableNote.');\n assert.notOk(isNote(fakeStemmableNote), 'Fake StemmableNote is not a Note (no ancestors with the correct CATEGORY).');\n assert.ok(isCategory(fakeStaveNote, 'StaveNote'), 'Fake StaveNote is a StaveNote.');\n assert.ok(isStaveNote(fakeStaveNote), 'Fake StaveNote is a StaveNote (via helper function).');\n assert.ok(isCategory(fakeStaveNote, 'StemmableNote'), 'Fake StaveNote is also a StemmableNote (via inheritance).');\n assert.notOk(isNote(fakeStaveNote), 'Fake StaveNote is not a Note. CATEGORY does not match.');\n}\n/**\n * Demonstrate that an object (ES5-style) can pass the isCategory(...) test if it\n * has the correct static .CATEGORY property.\n */\nfunction fakeES5(assert) {\n function FakeStemmableNote() {\n this.isFake = true;\n }\n FakeStemmableNote.CATEGORY = StemmableNote.CATEGORY;\n function FakeStaveNote() {\n FakeStemmableNote.call(this);\n }\n FakeStaveNote.CATEGORY = StaveNote.CATEGORY;\n FakeStaveNote.prototype = Object.create(FakeStemmableNote.prototype);\n FakeStaveNote.prototype.constructor = FakeStaveNote;\n const fakeStemmableNote = new FakeStemmableNote();\n const fakeStaveNote = new FakeStaveNote();\n checkFakeObjects(assert, fakeStemmableNote, fakeStaveNote);\n}\n/**\n * Demonstrate that an object (ES6-style) can pass the isCategory(...) test if it\n * or its ancestor has the correct static .CATEGORY property.\n */\nfunction fakeES6(assert) {\n class FakeStemmableNote {\n }\n FakeStemmableNote.CATEGORY = StemmableNote.CATEGORY;\n class FakeStaveNote extends FakeStemmableNote {\n }\n FakeStaveNote.CATEGORY = StaveNote.CATEGORY;\n const fakeStemmableNote = new FakeStemmableNote();\n const fakeStaveNote = new FakeStaveNote();\n checkFakeObjects(assert, fakeStemmableNote, fakeStaveNote);\n}\n/**\n * The tsconfig.json target is ES6 (as of August 18, 2021), so isCategory() works even when the root class \"extends Object\".\n */\nfunction edgeCaseES5vsES6(assert) {\n class Z extends Object {\n }\n class Y extends Z {\n }\n class X extends Y {\n }\n const zInstance = new Z();\n const xInstance = new X();\n assert.ok(xInstance instanceof Object, 'es5 & es6: x IS an instanceof Object');\n // If targeting es5, these three assertions only pass if we remove \"extends Object\" from the class Z definition.\n assert.ok(zInstance instanceof Z, 'es6: z IS an instanceof Z');\n assert.ok(xInstance instanceof Y, 'es6: x IS an instanceof Y');\n assert.ok(xInstance instanceof Z, 'es6: x IS an instanceof Z');\n}\nVexFlowTests.register(TypeGuardTests);\nexport { TypeGuardTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Unison Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Tables } from '../src/tables';\nconst UnisonTests = {\n Start() {\n QUnit.module('Unison');\n const run = VexFlowTests.runTests;\n run('Simple(true)', simple, { unison: true, voice1: 'e4/q, e4/q, e4/h', voice2: 'e4/8, e4/8, e4/q, e4/h' });\n run('Simple(false)', simple, { unison: false, voice1: 'e4/q, e4/q, e4/h', voice2: 'e4/8, e4/8, e4/q, e4/h' });\n run('Accidentals(true)', simple, {\n unison: true,\n voice1: 'e4/q, e#4/q, e#4/h',\n voice2: 'e4/8, e4/8, eb4/q, eb4/h',\n });\n run('Accidentals(false)', simple, {\n unison: false,\n voice1: 'e4/q, e#4/q, e#4/h',\n voice2: 'e4/8, e4/8, eb4/q, eb4/h',\n });\n run('Dots(true)', simple, { unison: true, voice1: 'e4/q.., e4/16, e4/h', voice2: '(a4 e4)/q., e4/8, e4/h' });\n run('Dots(false)', simple, { unison: false, voice1: 'e4/q.., e4/16, e4/h', voice2: '(a4 e4)/q., e4/8, e4/h' });\n run('Breve(true)', breve, { unison: true });\n run('Breve(false)', breve, { unison: false });\n run('Style(true)', style, { unison: true });\n run('Style(false)', style, { unison: false });\n },\n};\nfunction simple(options) {\n Tables.UNISON = options.params.unison;\n const vf = VexFlowTests.makeFactory(options, 500, 200);\n const score = vf.EasyScore();\n const system = vf.System({ y: 40, x: 10, width: 400 });\n system.addStave({\n voices: [score.voice(score.notes(options.params.voice1)), score.voice(score.notes(options.params.voice2))],\n });\n system.getStaves()[0].setClef('treble');\n system.getStaves()[0].setTimeSignature('4/4');\n vf.draw();\n options.assert.expect(0);\n}\nfunction style(options) {\n Tables.UNISON = options.params.unison;\n const vf = VexFlowTests.makeFactory(options, 500, 200);\n const score = vf.EasyScore();\n const system = vf.System({ y: 40, x: 10, width: 400 });\n const notes1 = score.notes('e4/q, e4/q, e4/h');\n const notes2 = score.notes('e4/8, e4/8, e4/q, e4/h');\n notes1[2].setStyle({ fillStyle: 'blue', strokeStyle: 'blue' });\n notes2[3].setStyle({ fillStyle: 'green', strokeStyle: 'green' });\n system.addStave({\n voices: [score.voice(notes1), score.voice(notes2)],\n });\n system.getStaves()[0].setClef('treble');\n system.getStaves()[0].setTimeSignature('4/4');\n vf.draw();\n options.assert.expect(0);\n}\nfunction breve(options) {\n Tables.UNISON = options.params.unison;\n const vf = VexFlowTests.makeFactory(options, 500, 200);\n const score = vf.EasyScore();\n const system = vf.System({ y: 40, x: 10, width: 400 });\n system.addStave({\n voices: [\n score.voice([vf.StaveNote({ keys: ['e/4'], duration: '1/2' })], { time: '8/4' }),\n score.voice(score.notes('e4/1, e4/1'), { time: '8/4' }),\n ],\n });\n system.getStaves()[0].setClef('treble');\n system.getStaves()[0].setTimeSignature('8/4');\n vf.draw();\n options.assert.expect(0);\n}\nVexFlowTests.register(UnisonTests);\nexport { UnisonTests };\n","// [VexFlow](https://vexflow.com/) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// VexFlow Test Support Library\nimport { Factory, Flow, Font, Renderer } from '../src/index';\nimport { globalObject } from '../src/util';\nconst global = globalObject();\n// Each test case will switch through the available fonts, and then restore the original font when done.\nlet originalFontNames;\nfunction useTempFontStack(fontName) {\n originalFontNames = Flow.getMusicFont();\n Flow.setMusicFont(...VexFlowTests.FONT_STACKS[fontName]);\n}\nfunction restoreOriginalFontStack() {\n Flow.setMusicFont(...originalFontNames);\n}\n// A micro util inspired by jQuery.\nif (!global.$) {\n // generate_png_images.js uses jsdom and does not include jQuery.\n global.$ = (param) => {\n let element;\n if (typeof param !== 'string') {\n element = param;\n }\n else if (param.startsWith('<')) {\n // Extract the tag name: e.g.,
=> div\n // Assume param.match returns something (! operator).\n // eslint-disable-next-line\n const tagName = param.match(/[A-Za-z]+/g)[0];\n element = document.createElement(tagName);\n }\n else {\n element = document.querySelector(param);\n }\n const $element = {\n // eslint-disable-next-line\n get(index) {\n return element;\n },\n addClass(c) {\n element.classList.add(c);\n return $element;\n },\n text(t) {\n element.textContent = t;\n return $element;\n },\n html(h) {\n if (!h) {\n return element.innerHTML;\n }\n else {\n element.innerHTML = h;\n return $element;\n }\n },\n append(...elementsToAppend) {\n elementsToAppend.forEach((e) => {\n element.appendChild(e);\n });\n return $element;\n },\n attr(attrName, val) {\n element.setAttribute(attrName, val);\n return $element;\n },\n };\n return $element;\n };\n}\n/** Allow `name` to be used inside file names. */\nfunction sanitizeName(name) {\n return name.replace(/[^a-zA-Z0-9]/g, '_');\n}\nconst CANVAS_TEST_CONFIG = {\n backend: Renderer.Backends.CANVAS,\n tagName: 'canvas',\n testType: 'Canvas',\n fontStacks: ['Bravura'],\n};\nconst CANVAS_TEXT_CONFIG = {\n backend: Renderer.Backends.CANVAS,\n tagName: 'canvas',\n testType: 'Canvas',\n fontStacks: ['Bravura'],\n};\nconst SVG_TEST_CONFIG = {\n backend: Renderer.Backends.SVG,\n tagName: 'div',\n testType: 'SVG',\n fontStacks: ['Bravura', 'Gonville', 'Petaluma', 'Leland'],\n};\nconst SVG_TEXT_CONFIG = {\n backend: Renderer.Backends.SVG,\n tagName: 'div',\n testType: 'SVG',\n fontStacks: ['Bravura'],\n};\nconst NODE_TEST_CONFIG = {\n backend: Renderer.Backends.CANVAS,\n tagName: 'canvas',\n testType: 'NodeCanvas',\n fontStacks: ['Bravura', 'Gonville', 'Petaluma', 'Leland'],\n};\nclass VexFlowTests {\n // Call this at the end of a `tests/xxxx_tests.ts` file to register the module.\n static register(test) {\n VexFlowTests.tests.push(test);\n }\n static parseJobOptions(runOptions) {\n let { jobs, job } = runOptions || { jobs: 1, job: 0 };\n if (window) {\n const { location } = window;\n if (location) {\n const sps = new URLSearchParams(location.search);\n const jobsParam = sps.get('jobs');\n const jobParam = sps.get('job');\n if (jobsParam) {\n jobs = parseInt(jobsParam, 10);\n }\n if (jobParam) {\n job = parseInt(jobParam, 10);\n }\n }\n }\n return {\n jobs,\n job,\n };\n }\n // flow.html calls this to invoke all the tests.\n static run(runOptions) {\n const { jobs, job } = VexFlowTests.parseJobOptions(runOptions);\n VexFlowTests.tests.forEach((test, idx) => {\n if (jobs === 1 || idx % jobs === job) {\n test.Start();\n }\n });\n }\n static set NODE_FONT_STACKS(fontStacks) {\n NODE_TEST_CONFIG.fontStacks = fontStacks;\n }\n /** Return a unique ID for a test. */\n static generateTestID(prefix) {\n return prefix + '_' + VexFlowTests.NEXT_TEST_ID++;\n }\n /**\n * Run `func` inside a QUnit test for each of the enabled rendering backends.\n * @param name\n * @param testFunc\n * @param params\n */\n // eslint-disable-next-line\n static runTests(name, testFunc, params) {\n VexFlowTests.runCanvasTest(name, testFunc, params);\n VexFlowTests.runSVGTest(name, testFunc, params);\n VexFlowTests.runNodeTest(name, testFunc, params);\n }\n // eslint-disable-next-line\n static runTextTests(name, testFunc, params) {\n VexFlowTests.runCanvasText(name, testFunc, params);\n VexFlowTests.runSVGText(name, testFunc, params);\n }\n /**\n * Append a
which contains the test case title and rendered output.\n * See flow.html and flow.css.\n * @param elementId\n * @param testTitle\n * @param tagName\n */\n static createTest(elementId, testTitle, tagName, titleId = '') {\n const anchorTestTitle = `${testTitle}`;\n const title = $('
').addClass('name').attr('id', titleId).html(anchorTestTitle).get(0);\n const vexOutput = $(`<${tagName}/>`).addClass('vex-tabdiv').attr('id', elementId).get(0);\n const container = $('
').addClass('testcanvas').append(title, vexOutput).get(0);\n $('#qunit-tests').append(container);\n return vexOutput;\n }\n static makeFactory(options, width = 450, height = 140) {\n const { elementId, backend } = options;\n return new Factory({ renderer: { elementId, backend, width, height } });\n }\n // eslint-disable-next-line\n static runCanvasTest(name, testFunc, params) {\n if (VexFlowTests.RUN_CANVAS_TESTS) {\n const helper = null;\n VexFlowTests.runWithParams(Object.assign(Object.assign({}, CANVAS_TEST_CONFIG), { name, testFunc, params, helper }));\n }\n }\n // eslint-disable-next-line\n static runCanvasText(name, testFunc, params) {\n if (VexFlowTests.RUN_CANVAS_TESTS) {\n const helper = null;\n VexFlowTests.runWithParams(Object.assign(Object.assign({}, CANVAS_TEXT_CONFIG), { name, testFunc, params, helper }));\n }\n }\n // eslint-disable-next-line\n static runSVGTest(name, testFunc, params) {\n if (VexFlowTests.RUN_SVG_TESTS) {\n const helper = null;\n VexFlowTests.runWithParams(Object.assign(Object.assign({}, SVG_TEST_CONFIG), { name, testFunc, params, helper }));\n }\n }\n // eslint-disable-next-line\n static runSVGText(name, testFunc, params) {\n if (VexFlowTests.RUN_SVG_TESTS) {\n const helper = null;\n VexFlowTests.runWithParams(Object.assign(Object.assign({}, SVG_TEXT_CONFIG), { name, testFunc, params, helper }));\n }\n }\n // eslint-disable-next-line\n static runNodeTest(name, testFunc, params) {\n if (VexFlowTests.RUN_NODE_TESTS) {\n const helper = VexFlowTests.runNodeTestHelper;\n VexFlowTests.runWithParams(Object.assign(Object.assign({}, NODE_TEST_CONFIG), { name, testFunc, params, helper }));\n }\n }\n /**\n * Save the PNG file.\n * @param fontName\n * @param element\n */\n static runNodeTestHelper(fontName, element) {\n if (Renderer.lastContext !== undefined) {\n const moduleName = sanitizeName(QUnit.module.name);\n const testName = sanitizeName(QUnit.test.name);\n // If we are only testing Bravura, we OMIT the font name from the\n // output image file name, which allows visual diffs against\n // the previous release: version 3.0.9. In the future, if we decide\n // to test all fonts by default, we can remove this check.\n const onlyBravura = NODE_TEST_CONFIG.fontStacks.length === 1 && fontName === 'Bravura';\n const fontInfo = onlyBravura ? '' : `.${fontName}`;\n const fileName = `${VexFlowTests.NODE_IMAGEDIR}/${moduleName}.${testName}${fontInfo}.png`;\n const imageData = element.toDataURL().split(';base64,').pop();\n const imageBuffer = Buffer.from(imageData, 'base64');\n VexFlowTests.shims.fs.writeFileSync(fileName, imageBuffer, { encoding: 'base64' });\n }\n }\n /** Run QUnit.test(...) for each font. */\n // eslint-disable-next-line\n static runWithParams({ fontStacks, testFunc, name, params, backend, tagName, testType, helper }) {\n if (name === undefined) {\n throw new Error('Test name is undefined.');\n }\n const testTypeLowerCase = testType.toLowerCase();\n fontStacks.forEach((fontStackName) => {\n QUnit.test(name, (assert) => {\n useTempFontStack(fontStackName);\n const elementId = VexFlowTests.generateTestID(`${testTypeLowerCase}_` + fontStackName);\n const moduleName = assert.test.module.name;\n const title = moduleName + ' › ' + name + ` › ${testType} + ${fontStackName}`;\n // Add an element id for the title div, so that we can scroll directly to a test case.\n // Add a fragment identifier to the url (e.g., #Stave.Multiple_Stave_Barline_Test.Bravura)\n // This titleId will match the name of the PNGs generated by visual regression tests\n // (without the _Current.png or _Reference.png).\n let prefix = '';\n if (testTypeLowerCase === 'canvas') {\n prefix = testTypeLowerCase + '_';\n }\n else {\n // DO NOT ADD A PREFIX TO SVG TESTS\n // The canvas prefix above is for making sure our element ids are unique,\n // since we have a canvas+bravura test case and a svg+bravura test case\n // that would otherwise have the same titleId.\n }\n const titleId = `${prefix}${sanitizeName(moduleName)}.${sanitizeName(name)}.${fontStackName}`;\n const element = VexFlowTests.createTest(elementId, title, tagName, titleId);\n const options = { elementId, params, assert, backend };\n const isSVG = backend === Renderer.Backends.SVG;\n const contextBuilder = isSVG ? Renderer.getSVGContext : Renderer.getCanvasContext;\n testFunc(options, contextBuilder);\n restoreOriginalFontStack();\n if (helper)\n helper(fontStackName, element);\n });\n });\n }\n /**\n * @param ctx\n * @param x\n * @param y\n */\n static plotLegendForNoteWidth(ctx, x, y) {\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n const spacing = 12;\n let lastY = y;\n function legend(color, text) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(10);\n ctx.moveTo(x, lastY - 4);\n ctx.lineTo(x + 10, lastY - 4);\n ctx.stroke();\n ctx.setFillStyle('black');\n ctx.fillText(text, x + 15, lastY);\n lastY += spacing;\n }\n legend('green', 'Note + Flag');\n legend('red', 'Modifiers');\n legend('#999', 'Displaced Head');\n legend('#DDD', 'Formatter Shift');\n ctx.restore();\n }\n}\nVexFlowTests.tests = [];\nVexFlowTests.RUN_CANVAS_TESTS = true;\nVexFlowTests.RUN_SVG_TESTS = true;\nVexFlowTests.RUN_NODE_TESTS = false;\n// Default font properties for tests.\nVexFlowTests.Font = { size: 10 };\n/**\n * Each font stack is a prioritized list of font names.\n */\nVexFlowTests.FONT_STACKS = {\n Bravura: ['Bravura', 'Custom'],\n Gonville: ['Gonville', 'Bravura', 'Custom'],\n Petaluma: ['Petaluma', 'Gonville', 'Bravura', 'Custom'],\n Leland: ['Leland', 'Bravura', 'Custom'],\n};\nVexFlowTests.NEXT_TEST_ID = 0;\nexport { VexFlowTests };\n/**\n * Used with array.reduce(...) to flatten arrays of arrays in the tests.\n */\n// eslint-disable-next-line\nexport const concat = (a, b) => a.concat(b);\n/** Used in KeySignature and ClefKeySignature Tests. */\nexport const MAJOR_KEYS = [\n //\n 'C',\n 'F',\n 'Bb',\n 'Eb',\n 'Ab',\n 'Db',\n 'Gb',\n 'Cb',\n 'G',\n 'D',\n 'A',\n 'E',\n 'B',\n 'F#',\n 'C#',\n];\nexport const MINOR_KEYS = [\n 'Am',\n 'Dm',\n 'Gm',\n 'Cm',\n 'Fm',\n 'Bbm',\n 'Ebm',\n 'Abm',\n 'Em',\n 'Bm',\n 'F#m',\n 'C#m',\n 'G#m',\n 'D#m',\n 'A#m',\n];\n// VexFlow classes can be accessed via Vex.Flow.* or by directly importing a library class.\n// Tests can be accessed via Vex.Flow.Test.* or by directly importing a test class.\n// Here we set Vex.Flow.Test = VexFlowTests.\n// eslint-disable-next-line\n// @ts-ignore\nFlow.Test = VexFlowTests;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// VF.* Prefix Tests\n//\n// VexFlow classes are available under the global Vex.Flow.* namespace.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental, Annotation, Articulation, Barline, BarNote, Beam, Bend, BoundingBox, BoundingBoxComputation, ChordSymbol, Clef, ClefNote, Crescendo, Curve, Dot, EasyScore, Element, Factory, Flow, Font, Formatter, Fraction, FretHandFinger, GhostNote, Glyph, GlyphNote, GraceNote, GraceNoteGroup, GraceTabNote, KeyManager, KeySignature, KeySigNote, Modifier, ModifierContext, MultiMeasureRest, Music, Note, NoteHead, NoteSubGroup, Ornament, Parser, PedalMarking, Registry, Renderer, RepeatNote, Repetition, Stave, StaveConnector, StaveHairpin, StaveLine, StaveModifier, StaveNote, StaveTempo, StaveText, StaveTie, Stem, StringNumber, Stroke, System, TabNote, TabSlide, TabStave, TabTie, TextBracket, TextDynamics, TextFormatter, TextNote, TickContext, TimeSignature, TimeSigNote, Tremolo, Tuning, Tuplet, Vibrato, VibratoBracket, Voice, Volta, } from '../src/index';\nconst VFPrefixTests = {\n Start() {\n QUnit.module('VF.* API');\n QUnit.test('VF.* API', VF_Prefix);\n QUnit.test('VF Alias', VF_Alias);\n },\n};\nfunction VF_Prefix(assert) {\n // Intentionally use Vex.Flow here so we can verify that the Vex.Flow.* API\n // is equivalent to using the individual classes in TypeScript.\n const VF = Vex.Flow;\n assert.equal(Accidental, VF.Accidental);\n assert.equal(Annotation, VF.Annotation);\n assert.equal(Articulation, VF.Articulation);\n assert.equal(Barline, VF.Barline);\n assert.equal(BarNote, VF.BarNote);\n assert.equal(Beam, VF.Beam);\n assert.equal(Bend, VF.Bend);\n assert.equal(BoundingBox, VF.BoundingBox);\n assert.equal(BoundingBoxComputation, VF.BoundingBoxComputation);\n assert.equal(ChordSymbol, VF.ChordSymbol);\n assert.equal(Clef, VF.Clef);\n assert.equal(ClefNote, VF.ClefNote);\n assert.equal(Crescendo, VF.Crescendo);\n assert.equal(Curve, VF.Curve);\n assert.equal(Dot, VF.Dot);\n assert.equal(EasyScore, VF.EasyScore);\n assert.equal(Element, VF.Element);\n assert.equal(Factory, VF.Factory);\n assert.equal(Flow.RESOLUTION, VF.RESOLUTION);\n assert.equal(Font, VF.Font);\n assert.equal(Formatter, VF.Formatter);\n assert.propEqual(new Formatter(), new VF.Formatter(), 'new Formatter()');\n assert.equal(Fraction, VF.Fraction);\n assert.equal(FretHandFinger, VF.FretHandFinger);\n assert.equal(GhostNote, VF.GhostNote);\n assert.equal(Glyph, VF.Glyph);\n assert.equal(GlyphNote, VF.GlyphNote);\n assert.equal(GraceNote, VF.GraceNote);\n assert.equal(GraceNoteGroup, VF.GraceNoteGroup);\n assert.equal(GraceTabNote, VF.GraceTabNote);\n assert.equal(KeyManager, VF.KeyManager);\n assert.equal(KeySignature, VF.KeySignature);\n assert.equal(KeySigNote, VF.KeySigNote);\n assert.equal(Modifier, VF.Modifier);\n assert.equal(ModifierContext, VF.ModifierContext);\n assert.equal(MultiMeasureRest, VF.MultiMeasureRest);\n assert.equal(Music, VF.Music);\n assert.equal(Note, VF.Note);\n assert.equal(NoteHead, VF.NoteHead);\n assert.equal(NoteSubGroup, VF.NoteSubGroup);\n assert.equal(Ornament, VF.Ornament);\n assert.equal(Parser, VF.Parser);\n assert.equal(PedalMarking, VF.PedalMarking);\n assert.equal(Registry, VF.Registry);\n assert.equal(Renderer, VF.Renderer);\n assert.equal(RepeatNote, VF.RepeatNote);\n assert.equal(Repetition, VF.Repetition);\n assert.equal(Stave, VF.Stave);\n assert.notEqual(Stave, VF.StaveNote);\n assert.equal(StaveConnector, VF.StaveConnector);\n assert.equal(StaveHairpin, VF.StaveHairpin);\n assert.equal(StaveLine, VF.StaveLine);\n assert.equal(StaveModifier, VF.StaveModifier);\n assert.equal(StaveNote, VF.StaveNote);\n assert.equal(StaveTempo, VF.StaveTempo);\n assert.equal(StaveText, VF.StaveText);\n assert.equal(StaveTie, VF.StaveTie);\n assert.equal(Stem, VF.Stem);\n assert.equal(StringNumber, VF.StringNumber);\n assert.equal(Stroke, VF.Stroke);\n assert.equal(System, VF.System);\n assert.equal(TabNote, VF.TabNote);\n assert.equal(TabSlide, VF.TabSlide);\n assert.equal(TabStave, VF.TabStave);\n assert.equal(TabTie, VF.TabTie);\n assert.equal(TextBracket, VF.TextBracket);\n assert.equal(TextDynamics, VF.TextDynamics);\n assert.equal(TextFormatter, VF.TextFormatter);\n assert.equal(TextNote, VF.TextNote);\n assert.equal(TickContext, VF.TickContext);\n assert.equal(TimeSignature, VF.TimeSignature);\n assert.equal(TimeSigNote, VF.TimeSigNote);\n assert.equal(Tremolo, VF.Tremolo);\n assert.equal(Tuning, VF.Tuning);\n assert.equal(Tuplet, VF.Tuplet);\n assert.equal(Vibrato, VF.Vibrato);\n assert.equal(VibratoBracket, VF.VibratoBracket);\n assert.equal(Voice, VF.Voice);\n assert.equal(Volta, VF.Volta);\n}\n/**\n * If you have name collisions with VexFlow classes, consider extracting classes from Vex.Flow\n * and renaming them with a VF prefix.\n */\nfunction VF_Alias(assert) {\n const Flow = Vex.Flow;\n const VFAliases = {\n get VFAccidental() {\n return Flow.Accidental;\n },\n get VFAnnotation() {\n return Flow.Annotation;\n },\n get VFVibrato() {\n return Flow.Vibrato;\n },\n };\n const { VFVibrato, VFAccidental, VFAnnotation } = VFAliases;\n assert.equal(Accidental, VFAccidental);\n assert.equal(Annotation, VFAnnotation);\n const vibrato = new VFVibrato();\n assert.ok(vibrato);\n const acc1 = new VFAccidental('##');\n const acc2 = new Accidental('##');\n assert.equal(acc1.type, acc2.type);\n}\nVexFlowTests.register(VFPrefixTests);\nexport { VFPrefixTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Vibrato Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Bend, Font, Formatter, TabNote, TabStave, Vibrato } from '../src/index';\nconst VibratoTests = {\n Start() {\n QUnit.module('Vibrato');\n const run = VexFlowTests.runTests;\n run('Simple Vibrato', simple);\n run('Harsh Vibrato', harsh);\n run('Vibrato with Bend', withBend);\n },\n};\n// Helper function to create TabNote objects.\nconst tabNote = (noteStruct) => new TabNote(noteStruct);\n/**\n * Default vibrato symbol (wavy line) on top of a tab with two notes fretted.\n */\nfunction simple(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n tabNote({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'h',\n }).addModifier(new Vibrato(), 0),\n tabNote({\n positions: [{ str: 2, fret: 10 }],\n duration: 'h',\n }).addModifier(new Vibrato(), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'Simple Vibrato');\n}\n/**\n * The harsh vibrato symbol is a zig zag line with sharp points.\n * This test is nearly identical to the 'simple' test above.\n * The only difference is that we call .setHarsh(true) on each Vibrato object.\n */\nfunction harsh(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n tabNote({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'h',\n }).addModifier(new Vibrato().setHarsh(true), 0),\n tabNote({\n positions: [{ str: 2, fret: 10 }],\n duration: 'h',\n }).addModifier(new Vibrato().setHarsh(true), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'Harsh Vibrato');\n}\nfunction withBend(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.3, 1.3);\n ctx.setFont(Font.SANS_SERIF, VexFlowTests.Font.size);\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n tabNote({\n positions: [\n { str: 2, fret: 9 },\n { str: 3, fret: 9 },\n ],\n duration: 'q',\n })\n .addModifier(new Bend('1/2', true), 0)\n .addModifier(new Bend('1/2', true), 1)\n .addModifier(new Vibrato(), 0),\n tabNote({\n positions: [{ str: 2, fret: 10 }],\n duration: 'q',\n })\n .addModifier(new Bend('Full', false), 0)\n .addModifier(new Vibrato().setVibratoWidth(60), 0),\n tabNote({\n positions: [{ str: 2, fret: 10 }],\n duration: 'h',\n }).addModifier(new Vibrato().setVibratoWidth(120).setHarsh(true), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'Vibrato with Bend');\n}\nVexFlowTests.register(VibratoTests);\nexport { VibratoTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Author: Balazs Forian-Szabo\n//\n// VibratoBracket Tests\n// TODO: It's annoying to have to cast \"as Note\" or \"as Note[]\". Could we add a method to Voice to get the tickables as Note[]? Voice.getTickables() vs Voice.getNotes()?\nimport { VexFlowTests } from './vexflow_test_helpers';\nconst VibratoBracketTests = {\n Start() {\n QUnit.module('VibratoBracket');\n const run = VexFlowTests.runTests;\n run('Simple VibratoBracket', simple);\n run('Harsh VibratoBracket Without End Note', withoutEndNote);\n run('Harsh VibratoBracket Without Start Note', withoutStartNote);\n },\n};\n// Helper function to set up the stave, easyscore, voice, and to format & draw.\nfunction createTest(noteGroup, setupVibratoBracket) {\n return (options) => {\n const factory = VexFlowTests.makeFactory(options, 650, 200);\n const stave = factory.Stave();\n const score = factory.EasyScore();\n const voice = score.voice(score.notes(noteGroup));\n setupVibratoBracket(factory, voice.getTickables());\n factory.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n factory.draw();\n options.assert.ok(true);\n };\n}\nconst simple = createTest('c4/4, c4, c4, c4', (factory, notes) => {\n factory.VibratoBracket({\n from: notes[0],\n to: notes[3],\n options: { line: 2 },\n });\n});\nconst withoutEndNote = createTest('c4/4, c4, c4, c4', (factory, notes) => {\n factory.VibratoBracket({\n from: notes[2],\n to: null,\n options: { line: 2, harsh: true },\n });\n});\nconst withoutStartNote = createTest('c4/4, c4, c4, c4', (factory, notes) => {\n factory.VibratoBracket({\n from: null,\n to: notes[2],\n options: { line: 2, harsh: true },\n });\n});\nVexFlowTests.register(VibratoBracketTests);\nexport { VibratoBracketTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Voice Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { Stave } from '../src/stave';\nimport { Barline } from '../src/stavebarline';\nimport { StaveNote } from '../src/stavenote';\nimport { Voice } from '../src/voice';\nimport { MockTickable } from './mocks';\nconst VoiceTests = {\n Start() {\n QUnit.module('Voice');\n QUnit.test('Strict Test', strict);\n QUnit.test('Ignore Test', ignore);\n VexFlowTests.runTests('Full Voice Mode Test', full);\n },\n};\nconst BEAT = (1 * Flow.RESOLUTION) / 4;\n// Helper function to create a tickable with a preset number of ticks.\nconst createTickable = () => new MockTickable().setTicks(BEAT);\nfunction strict(assert) {\n assert.expect(8);\n const tickables = [createTickable(), createTickable(), createTickable()];\n const voice = new Voice(Flow.TIME4_4);\n assert.equal(voice.getTotalTicks().value(), BEAT * 4, '4/4 Voice has 4 beats');\n assert.equal(voice.getTicksUsed().value(), BEAT * 0, 'No beats in voice');\n voice.addTickables(tickables);\n assert.equal(voice.getTicksUsed().value(), BEAT * 3, 'Three beats in voice');\n voice.addTickable(createTickable());\n assert.equal(voice.getTicksUsed().value(), BEAT * 4, 'Four beats in voice');\n assert.equal(voice.isComplete(), true, 'Voice is complete');\n const numeratorBeforeException = voice.getTicksUsed().numerator;\n assert.throws(() => voice.addTickable(createTickable()), /BadArgument/, '\"Too many ticks\" exception');\n // Verify that adding too many ticks does not affect the `ticksUsed` property of the voice.\n // See voice.ts: this.ticksUsed.subtract(ticks);\n assert.equal(voice.getTicksUsed().numerator, numeratorBeforeException, 'Revert `ticksUsed` after a \"Too many ticks\" exception');\n assert.equal(voice.getSmallestTickCount().value(), BEAT, 'Smallest tick count is BEAT');\n}\nfunction ignore(assert) {\n const tickables = [\n createTickable(),\n createTickable(),\n createTickable().setIgnoreTicks(true),\n createTickable(),\n createTickable().setIgnoreTicks(true),\n createTickable(),\n ];\n const voice = new Voice(Flow.TIME4_4);\n voice.addTickables(tickables);\n assert.ok(true, 'all pass');\n}\nfunction full(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 550, 200);\n const stave = new Stave(10, 50, 500).addClef('treble').addTimeSignature('4/4').setEndBarType(Barline.type.END);\n const notes = [\n new StaveNote({ keys: ['c/4'], duration: '4' }),\n new StaveNote({ keys: ['d/4'], duration: '4' }),\n new StaveNote({ keys: ['r/4'], duration: '4r' }),\n ];\n notes.forEach((note) => note.setStave(stave));\n const voice = new Voice(Flow.TIME4_4).setMode(Voice.Mode.FULL).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n stave.setContext(ctx).draw();\n voice.draw(ctx);\n const bb = voice.getBoundingBox();\n if (bb) {\n ctx.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH());\n }\n ctx.stroke();\n options.assert.throws(() => voice.addTickable(new StaveNote({ keys: ['c/4'], duration: '2' })), /BadArgument/, 'Voice cannot exceed full amount of ticks');\n}\nVexFlowTests.register(VoiceTests);\nexport { VoiceTests };\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-debug-with-tests.ts is the entry point for the build output file vexflow-debug-with-tests.js.\n// It statically bundles all the music engraving fonts, and also includes the tests from vexflow/tests/.\n// The output file is used by flow.html & flow-headless-browser.html to run the tests.\nimport * as VexSrc from '../src/index';\nimport * as VexTests from '../tests/index';\nimport { Flow } from '../src/flow';\nimport { loadAllMusicFonts } from '../src/fonts/load_all';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadAllMusicFonts();\nFlow.setMusicFont('Bravura', 'Gonville', 'Custom');\nloadTextFonts();\n// Re-export all exports from src/index.ts and tests/index.ts.\nexport * from '../src/index';\nexport * from '../tests/index';\n// Also collect all exports into a default export for CJS projects.\nexport default Object.assign(Object.assign({}, VexSrc), VexTests);\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-debug.js b/build/cjs/vexflow-debug.js new file mode 100644 index 0000000000..a847c22076 --- /dev/null +++ b/build/cjs/vexflow-debug.js @@ -0,0 +1,36477 @@ +/*! + * VexFlow 4.2.6 2024-08-26T20:16:17.134Z 103aad2b14837418c5e96c9e078edd036fcddf60 + * Copyright (c) 2010 Mohit Muthanna Cheppudira + * https://www.vexflow.com https://github.com/0xfe/vexflow + */ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["Vex"] = factory(); + else + root["Vex"] = factory(); +})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => { +return /******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/version.ts": +/*!************************!*\ + !*** ./src/version.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "DATE": () => (/* binding */ DATE), +/* harmony export */ "ID": () => (/* binding */ ID), +/* harmony export */ "VERSION": () => (/* binding */ VERSION) +/* harmony export */ }); +const VERSION = '4.2.6'; +const ID = '103aad2b14837418c5e96c9e078edd036fcddf60'; +const DATE = '2024-08-26T20:16:17.134Z'; + + +/***/ }), + +/***/ "./src/accidental.ts": +/*!***************************!*\ + !*** ./src/accidental.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Accidental": () => (/* binding */ Accidental) +/* harmony export */ }); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// @author Mohit Cheppudira +// @author Greg Ristow (modifications) + + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Accidental.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Accidental', args); +} +/** + * An `Accidental` inherits from `Modifier`, and is formatted within a + * `ModifierContext`. Accidentals are modifiers that can be attached to + * notes. Support is included for both western and microtonal accidentals. + * + * See `tests/accidental_tests.ts` for usage examples. + */ +class Accidental extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + /** Accidentals category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Accidental; + } + /** Arrange accidentals inside a ModifierContext. */ + static format(accidentals, state) { + // If there are no accidentals, no need to format their positions. + if (!accidentals || accidentals.length === 0) + return; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); + const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding'); + const leftShift = state.left_shift + noteheadAccidentalPadding; + const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing'); + const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals + const accidentalLinePositionsAndSpaceNeeds = []; + let prevNote = undefined; + let extraXSpaceNeededForLeftDisplacedNotehead = 0; + // First determine the accidentals' Y positions from the note.keys + for (let i = 0; i < accidentals.length; ++i) { + const acc = accidentals[i]; + const note = acc.getNote(); + const stave = note.getStave(); + const index = acc.checkIndex(); + const props = note.getKeyProps()[index]; + if (note !== prevNote) { + // Iterate through all notes to get the displaced pixels + for (let n = 0; n < note.keys.length; ++n) { + // If the current extra left-space needed isn't as big as this note's, + // then we need to use this note's. + extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead); + } + prevNote = note; + } + if (stave) { + const lineSpace = stave.getSpacingBetweenLines(); + const y = stave.getYForLine(props.line); + const accLine = Math.round((y / lineSpace) * 2) / 2; + accidentalLinePositionsAndSpaceNeeds.push({ + y, + line: accLine, + extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead, + acc, + spacingBetweenStaveLines: lineSpace, + }); + } + else { + accidentalLinePositionsAndSpaceNeeds.push({ + line: props.line, + extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead, + acc, + }); + } + } + // Sort accidentals by line number. + accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line); + const staveLineAccidentalLayoutMetrics = []; + // amount by which all accidentals must be shifted right or left for + // stem flipping, notehead shifting concerns. + let maxExtraXSpaceNeeded = 0; + // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics) + // from accidentalLinePositionsAndSpaceNeeds + for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) { + const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i]; + const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1]; + let currentLineMetric; + // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric + if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) { + currentLineMetric = { + line: accidentalLinePositionAndSpaceNeeds.line, + flatLine: true, + dblSharpLine: true, + numAcc: 0, + width: 0, + column: 0, + }; + staveLineAccidentalLayoutMetrics.push(currentLineMetric); + } + else { + currentLineMetric = priorLineMetric; + } + // if this accidental is not a flat, the accidental needs 3.0 lines lower + // clearance instead of 2.5 lines for b or bb. + if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' && + accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') { + currentLineMetric.flatLine = false; + } + // if this accidental is not a double sharp, the accidental needs 3.0 lines above + if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') { + currentLineMetric.dblSharpLine = false; + } + // Track how many accidentals are on this line: + currentLineMetric.numAcc++; + // Track the total x_offset needed for this line which will be needed + // for formatting lines w/ multiple accidentals: + // width = accidental width + universal spacing between accidentals + currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing; + // if this extraXSpaceNeeded is the largest so far, use it as the starting point for + // all accidental columns. + maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded); + } + // ### Place Accidentals in Columns + // + // Default to a classic triangular layout (middle accidental farthest left), + // but follow exceptions as outlined in G. Read's _Music Notation_ and + // Elaine Gould's _Behind Bars_. + // + // Additionally, this implements different vertical collision rules for + // flats (only need 2.5 lines clearance below) and double sharps (only + // need 2.5 lines of clearance above or below). + // + // Classic layouts and exception patterns are found in the 'tables.js' + // in 'Tables.accidentalColumnsTable' + // + // Beyond 6 vertical accidentals, default to the parallel ascending lines approach, + // using as few columns as possible for the verticle structure. + // + // TODO (?): Allow column to be specified for an accidental at run-time? + let totalColumns = 0; + // establish the boundaries for a group of notes with clashing accidentals: + for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) { + let noFurtherConflicts = false; + const groupStart = i; + let groupEnd = i; + while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) { + // if this note conflicts with the next: + if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) { + // include the next note in the group: + groupEnd++; + } + else { + noFurtherConflicts = true; + } + } + // Gets an a line from the `lineList`, relative to the current group + const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index]; + const getGroupLines = (indexes) => indexes.map(getGroupLine); + const lineDifference = (indexA, indexB) => { + const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line); + return a - b; + }; + const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2)); + // Set columns for the lines in this group: + const groupLength = groupEnd - groupStart + 1; + // Set the accidental column for each line of the group + let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd]) + ? 'a' + : 'b'; + switch (groupLength) { + case 3: + if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) { + endCase = 'second_on_bottom'; + } + break; + case 4: + if (notColliding([0, 2], [1, 3])) { + endCase = 'spaced_out_tetrachord'; + } + break; + case 5: + if (endCase === 'b' && notColliding([1, 3])) { + endCase = 'spaced_out_pentachord'; + if (notColliding([0, 2], [2, 4])) { + endCase = 'very_spaced_out_pentachord'; + } + } + break; + case 6: + if (notColliding([0, 3], [1, 4], [2, 5])) { + endCase = 'spaced_out_hexachord'; + } + if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) { + endCase = 'very_spaced_out_hexachord'; + } + break; + default: + break; + } + let groupMember; + let column; + // If the group contains seven members or more, use ascending parallel lines + // of accidentals, using as few columns as possible while avoiding collisions. + if (groupLength >= 7) { + // First, determine how many columns to use: + let patternLength = 2; + let collisionDetected = true; + while (collisionDetected === true) { + collisionDetected = false; + for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) { + if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) { + collisionDetected = true; + patternLength++; + break; + } + } + } + // Then, assign a column to each line of accidentals + for (groupMember = i; groupMember <= groupEnd; groupMember++) { + column = ((groupMember - i) % patternLength) + 1; + staveLineAccidentalLayoutMetrics[groupMember].column = column; + totalColumns = totalColumns > column ? totalColumns : column; + } + } + else { + // If the group contains fewer than seven members, use the layouts from + // the Tables.accidentalColumnsTable (See: tables.ts). + for (groupMember = i; groupMember <= groupEnd; groupMember++) { + column = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i]; + staveLineAccidentalLayoutMetrics[groupMember].column = column; + totalColumns = totalColumns > column ? totalColumns : column; + } + } + // Increment i to the last note that was set, so that if a lower set of notes + // does not conflict at all with this group, it can have its own classic shape. + i = groupEnd; + } + // ### Convert Columns to x_offsets + // + // This keeps columns aligned, even if they have different accidentals within them + // which sometimes results in a larger x_offset than is an accidental might need + // to preserve the symmetry of the accidental shape. + // + // Neither A.C. Vinci nor G. Read address this, and it typically only happens in + // music with complex chord clusters. + // + // TODO (?): Optionally allow closer compression of accidentals, instead of forcing + // parallel columns. + // track each column's max width, which will be used as initial shift of later columns: + const columnWidths = []; + const columnXOffsets = []; + for (let i = 0; i <= totalColumns; i++) { + columnWidths[i] = 0; + columnXOffsets[i] = 0; + } + columnWidths[0] = leftShift + maxExtraXSpaceNeeded; + columnXOffsets[0] = leftShift; + // Fill columnWidths with widest needed x-space; + // this is what keeps the columns parallel. + staveLineAccidentalLayoutMetrics.forEach((line) => { + if (line.width > columnWidths[line.column]) + columnWidths[line.column] = line.width; + }); + for (let i = 1; i < columnWidths.length; i++) { + // this column's offset = this column's width + previous column's offset + columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1]; + } + const totalShift = columnXOffsets[columnXOffsets.length - 1]; + // Set the xShift for each accidental according to column offsets: + let accCount = 0; + staveLineAccidentalLayoutMetrics.forEach((line) => { + let lineWidth = 0; + const lastAccOnLine = accCount + line.numAcc; + // handle all of the accidentals on a given line: + for (accCount; accCount < lastAccOnLine; accCount++) { + const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded; + accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift); + // keep track of the width of accidentals we've added so far, so that when + // we loop, we add space for them. + lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing; + L('Line, accCount, shift: ', line.line, accCount, xShift); + } + }); + // update the overall layout with the full width of the accidental shapes: + state.left_shift = totalShift + additionalPadding; + } + /** Helper function to determine whether two lines of accidentals collide vertically */ + static checkCollision(line1, line2) { + let clearance = line2.line - line1.line; + let clearanceRequired = 3; + // But less clearance is required for certain accidentals: b, bb and ##. + if (clearance > 0) { + // then line 2 is on top + clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0; + if (line1.dblSharpLine) + clearance -= 0.5; + } + else { + // line 1 is on top + clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0; + if (line2.dblSharpLine) + clearance -= 0.5; + } + const collision = Math.abs(clearance) < clearanceRequired; + L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision); + return collision; + } + /** + * Use this method to automatically apply accidentals to a set of `voices`. + * The accidentals will be remembered between all the voices provided. + * Optionally, you can also provide an initial `keySignature`. + */ + static applyAccidentals(voices, keySignature) { + const tickPositions = []; + const tickNoteMap = {}; + // Sort the tickables in each voice by their tick position in the voice. + voices.forEach((voice) => { + const tickPosition = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1); + const tickable = voice.getTickables(); + tickable.forEach((t) => { + if (t.shouldIgnoreTicks()) + return; + const notesAtPosition = tickNoteMap[tickPosition.value()]; + if (!notesAtPosition) { + tickPositions.push(tickPosition.value()); + tickNoteMap[tickPosition.value()] = [t]; + } + else { + notesAtPosition.push(t); + } + tickPosition.add(t.getTicks()); + }); + }); + const music = new _music__WEBPACK_IMPORTED_MODULE_3__.Music(); + // Default key signature is C major. + if (!keySignature) + keySignature = 'C'; + // Get the scale map, which represents the current state of each pitch. + const scaleMapKey = music.createScaleMap(keySignature); + const scaleMap = {}; + tickPositions.forEach((tickPos) => { + const tickables = tickNoteMap[tickPos]; + // Array to store all pitches that modified accidental states + // at this tick position + const modifiedPitches = []; + const processNote = (t) => { + // Only StaveNote implements .addModifier(), which is used below. + if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(t) || t.isRest() || t.shouldIgnoreTicks()) { + return; + } + // Go through each key and determine if an accidental should be applied. + const staveNote = t; + staveNote.keys.forEach((keyString, keyIndex) => { + const key = music.getNoteParts(keyString.split('/')[0]); + const octave = keyString.split('/')[1]; + // Force a natural for every key without an accidental + const accidentalString = key.accidental || 'n'; + const pitch = key.root + accidentalString; + // Determine if the current pitch has the same accidental + // as the scale state + if (!scaleMap[key.root + octave]) + scaleMap[key.root + octave] = scaleMapKey[key.root]; + const sameAccidental = scaleMap[key.root + octave] === pitch; + // Determine if an identical pitch in the chord already + // modified the accidental state + const previouslyModified = modifiedPitches.indexOf(keyString) > -1; + // Remove accidentals + staveNote.getModifiers().forEach((modifier, index) => { + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isAccidental)(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) { + staveNote.getModifiers().splice(index, 1); + } + }); + // Add the accidental to the StaveNote + if (!sameAccidental || (sameAccidental && previouslyModified)) { + // Modify the scale map so that the root pitch has an + // updated state + scaleMap[key.root + octave] = pitch; + // Create the accidental + const accidental = new Accidental(accidentalString); + // Attach the accidental to the StaveNote + staveNote.addModifier(accidental, keyIndex); + // Add the pitch to list of pitches that modified accidentals + modifiedPitches.push(keyString); + } + }); + // process grace notes + staveNote.getModifiers().forEach((modifier) => { + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNoteGroup)(modifier)) { + modifier.getGraceNotes().forEach(processNote); + } + }); + }; + tickables.forEach(processNote); + }); + } + /** + * Create accidental. + * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`. + * For example: `#`, `##`, `b`, `n`, etc. + */ + constructor(type) { + super(); + L('New accidental: ', type); + this.type = type; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT; + this.render_options = { + // Font size for glyphs + font_scale: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, + // Padding between accidental and parentheses on each side + parenLeftPadding: 2, + parenRightPadding: 2, + }; + this.accidental = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes(this.type); + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`); + // Cautionary accidentals have parentheses around them + this.cautionary = false; + this.reset(); + } + reset() { + const fontScale = this.render_options.font_scale; + this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.accidental.code, fontScale); + this.glyph.setOriginX(1.0); + if (this.cautionary) { + this.parenLeft = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('{').code, fontScale); + this.parenRight = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('}').code, fontScale); + this.parenLeft.setOriginX(1.0); + this.parenRight.setOriginX(1.0); + } + } + /** Get width in pixels. */ + getWidth() { + if (this.cautionary) { + const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft); + const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight); + const parenWidth = parenLeft.getMetrics().width + + parenRight.getMetrics().width + + this.render_options.parenLeftPadding + + this.render_options.parenRightPadding; + return this.glyph.getMetrics().width + parenWidth; + } + else { + return this.glyph.getMetrics().width; + } + } + /** Attach this accidental to `note`, which must be a `StaveNote`. */ + setNote(note) { + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(note, 'ArgumentError', `Bad note value: ${note}`); + this.note = note; + // Accidentals attached to grace notes are rendered smaller. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNote)(note)) { + this.render_options.font_scale = 25; + this.reset(); + } + return this; + } + /** If called, draws parenthesis around accidental. */ + setAsCautionary() { + this.cautionary = true; + this.render_options.font_scale = 28; + this.reset(); + return this; + } + /** Render accidental onto canvas. */ + draw() { + const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this; + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + // Figure out the start `x` and `y` coordinates for note and index. + const start = note.getModifierStartXY(position, index); + let accX = start.x + x_shift; + const accY = start.y + y_shift; + L('Rendering: ', type, accX, accY); + if (!cautionary) { + glyph.render(ctx, accX, accY); + } + else { + const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft); + const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight); + // Render the accidental in parentheses. + parenRight.render(ctx, accX, accY); + accX -= parenRight.getMetrics().width; + accX -= parenRightPadding; + accX -= this.accidental.parenRightPaddingAdjustment; + glyph.render(ctx, accX, accY); + accX -= glyph.getMetrics().width; + accX -= parenLeftPadding; + parenLeft.render(ctx, accX, accY); + } + } +} +/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */ +Accidental.DEBUG = false; + + + +/***/ }), + +/***/ "./src/annotation.ts": +/*!***************************!*\ + !*** ./src/annotation.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Annotation": () => (/* binding */ Annotation), +/* harmony export */ "AnnotationHorizontalJustify": () => (/* binding */ AnnotationHorizontalJustify), +/* harmony export */ "AnnotationVerticalJustify": () => (/* binding */ AnnotationVerticalJustify) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Annotation.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Annotation', args); +} +var AnnotationHorizontalJustify; +(function (AnnotationHorizontalJustify) { + AnnotationHorizontalJustify[AnnotationHorizontalJustify["LEFT"] = 1] = "LEFT"; + AnnotationHorizontalJustify[AnnotationHorizontalJustify["CENTER"] = 2] = "CENTER"; + AnnotationHorizontalJustify[AnnotationHorizontalJustify["RIGHT"] = 3] = "RIGHT"; + AnnotationHorizontalJustify[AnnotationHorizontalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; +})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {})); +var AnnotationVerticalJustify; +(function (AnnotationVerticalJustify) { + AnnotationVerticalJustify[AnnotationVerticalJustify["TOP"] = 1] = "TOP"; + AnnotationVerticalJustify[AnnotationVerticalJustify["CENTER"] = 2] = "CENTER"; + AnnotationVerticalJustify[AnnotationVerticalJustify["BOTTOM"] = 3] = "BOTTOM"; + AnnotationVerticalJustify[AnnotationVerticalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; +})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {})); +/** + * Annotations are modifiers that can be attached to + * notes. + * + * See `tests/annotation_tests.ts` for usage examples. + */ +class Annotation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + /** Annotations category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Annotation; + } + // Use the same padding for annotations as note head so the + // words don't run into each other. + static get minAnnotationPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + /** Arrange annotations within a `ModifierContext` */ + static format(annotations, state) { + if (!annotations || annotations.length === 0) + return false; + let leftWidth = 0; + let rightWidth = 0; + let maxLeftGlyphWidth = 0; + let maxRightGlyphWidth = 0; + for (let i = 0; i < annotations.length; ++i) { + const annotation = annotations[i]; + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(annotation.textFont); + // Text height is expressed in fractional stave spaces. + const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + let verticalSpaceNeeded = textLines; + const note = annotation.checkAttachedNote(); + const glyphWidth = note.getGlyphProps().getWidth(); + // Get the text width from the font metrics. + const textWidth = textFormatter.getWidthForTextInPx(annotation.text); + if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) { + maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth); + leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding; + } + else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) { + maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth); + rightWidth = Math.max(rightWidth, textWidth); + } + else { + leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding; + rightWidth = Math.max(rightWidth, textWidth / 2); + maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth); + maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth); + } + const stave = note.getStave(); + const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + let stemHeight = 0; + let lines = 5; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { + if (note.render_options.draw_stem) { + const stem = note.getStem(); + if (stem) { + stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + } + } + else { + stemHeight = 0; + } + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) { + const stem = note.getStem(); + if (stem && note.getNoteType() === 'n') { + stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + } + } + if (stave) { + lines = stave.getNumLines(); + } + if (annotation.verticalJustification === this.VerticalJustify.TOP) { + let noteLine = note.getLineNumber(true); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { + noteLine = lines - (note.leastString() - 0.5); + } + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + noteLine += stemHeight; + } + const curTop = noteLine + state.top_text_line + 0.5; + if (curTop < lines) { + annotation.setTextLine(lines - noteLine); + verticalSpaceNeeded += lines - noteLine; + state.top_text_line = verticalSpaceNeeded; + } + else { + annotation.setTextLine(state.top_text_line); + state.top_text_line += verticalSpaceNeeded; + } + } + else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) { + let noteLine = lines - note.getLineNumber(); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { + noteLine = note.greatestString() - 1; + } + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + noteLine += stemHeight; + } + const curBottom = noteLine + state.text_line + 1; + if (curBottom < lines) { + annotation.setTextLine(lines - curBottom); + verticalSpaceNeeded += lines - curBottom; + state.text_line = verticalSpaceNeeded; + } + else { + annotation.setTextLine(state.text_line); + state.text_line += verticalSpaceNeeded; + } + } + else { + annotation.setTextLine(state.text_line); + } + } + const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0)); + const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0)); + state.left_shift += leftOverlap; + state.right_shift += rightOverlap; + return true; + } + /** + * Annotations inherit from `Modifier` and is positioned correctly when + * in a `ModifierContext`. + * Create a new `Annotation` with the string `text`. + */ + constructor(text) { + super(); + this.text = text; + this.horizontalJustification = AnnotationHorizontalJustify.CENTER; + // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM. + // this is to support legacy application that may expect this. + this.verticalJustification = AnnotationVerticalJustify.TOP; + this.resetFont(); + // The default width is calculated from the text. + this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.textWidth(text)); + } + /** + * Set vertical position of text (above or below stave). + * @param just value in `AnnotationVerticalJustify`. + */ + setVerticalJustification(just) { + this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just; + return this; + } + /** + * Get horizontal justification. + */ + getJustification() { + return this.horizontalJustification; + } + /** + * Set horizontal justification. + * @param justification value in `Annotation.Justify`. + */ + setJustification(just) { + this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just; + return this; + } + /** Render text beside the note. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont); + const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE, this.index); + this.setRendered(); + // We're changing context parameters. Save current state. + ctx.save(); + // Apply style might not save context, if this.style is undefined, so we + // still need to save context state just before this, since we will be + // changing ctx parameters below. + this.applyStyle(); + ctx.openGroup('annotation', this.getAttribute('id')); + ctx.setFont(this.textFont); + const text_width = textFormatter.getWidthForTextInPx(this.text); + const text_height = textFormatter.getYForStringInPx(this.text).height; + let x; + let y; + if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) { + x = start.x; + } + else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) { + x = start.x - text_width; + } + else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) { + x = start.x - text_width / 2; + } /* CENTER_STEM */ + else { + x = note.getStemX() - text_width / 2; + } + let stem_ext = {}; + let spacing = 0; + const has_stem = note.hasStem(); + const stave = note.checkStave(); + // The position of the text varies based on whether or not the note + // has a stem. + if (has_stem) { + stem_ext = note.checkStem().getExtents(); + spacing = stave.getSpacingBetweenLines(); + } + if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) { + // Use the largest (lowest) Y value + const ys = note.getYs(); + y = ys.reduce((a, b) => (a > b ? a : b)); + y += (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE + text_height; + if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line); + } + } + else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) { + const yt = note.getYForTopText(this.text_line) - 1; + const yb = stave.getYForBottomText(this.text_line); + y = yt + (yb - yt) / 2 + text_height / 2; + } + else if (this.verticalJustification === AnnotationVerticalJustify.TOP) { + const topY = Math.min(...note.getYs()); + y = topY - (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + // If the stem is above the stave already, go with default line width vs. actual + // since the lines between don't really matter. + spacing = stem_ext.topY < stave.getTopLineTopY() ? _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE : spacing; + y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1)); + } + } /* CENTER_STEM */ + else { + const extents = note.getStemExtents(); + y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2; + } + L('Rendering annotation: ', this.text, x, y); + ctx.fillText(this.text, x, y); + ctx.closeGroup(); + this.restoreStyle(); + ctx.restore(); + } +} +/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */ +Annotation.DEBUG = false; +Annotation.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); +/** Text annotations can be positioned and justified relative to the note. */ +Annotation.HorizontalJustify = AnnotationHorizontalJustify; +Annotation.HorizontalJustifyString = { + left: AnnotationHorizontalJustify.LEFT, + right: AnnotationHorizontalJustify.RIGHT, + center: AnnotationHorizontalJustify.CENTER, + centerStem: AnnotationHorizontalJustify.CENTER_STEM, +}; +Annotation.VerticalJustify = AnnotationVerticalJustify; +Annotation.VerticalJustifyString = { + above: AnnotationVerticalJustify.TOP, + top: AnnotationVerticalJustify.TOP, + below: AnnotationVerticalJustify.BOTTOM, + bottom: AnnotationVerticalJustify.BOTTOM, + center: AnnotationVerticalJustify.CENTER, + centerStem: AnnotationVerticalJustify.CENTER_STEM, +}; + + + +/***/ }), + +/***/ "./src/articulation.ts": +/*!*****************************!*\ + !*** ./src/articulation.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Articulation": () => (/* binding */ Articulation) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Larry Kuhns. +// MIT License + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Articulation.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.Articulation', args); +} +const { ABOVE, BELOW } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position; +function roundToNearestHalf(mathFn, value) { + return mathFn(value / 0.5) * 0.5; +} +// This includes both staff and ledger lines +function isWithinLines(line, position) { + return position === ABOVE ? line <= 5 : line >= 1; +} +function getRoundingFunction(line, position) { + if (isWithinLines(line, position)) { + if (position === ABOVE) { + return Math.ceil; + } + else { + return Math.floor; + } + } + else { + return Math.round; + } +} +function snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) { + // Initially, snap to nearest staff line or space + const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line); + const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position); + const onStaffLine = snappedLine % 1 === 0; + if (canSnapToStaffSpace && onStaffLine) { + const HALF_STAFF_SPACE = 0.5; + return snappedLine + HALF_STAFF_SPACE * -offsetDirection; + } + else { + return snappedLine; + } +} +// Helper function for checking if a Note object is either a StaveNote or a GraceNote. +const isStaveOrGraceNote = (note) => (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note) || (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isGraceNote)(note); +function getTopY(note, textLine) { + const stemDirection = note.getStemDirection(); + const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents(); + if (isStaveOrGraceNote(note)) { + if (note.hasStem()) { + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + return stemTipY; + } + else { + return stemBaseY; + } + } + else { + return Math.min(...note.getYs()); + } + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) { + if (note.hasStem()) { + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + return stemTipY; + } + else { + return note.checkStave().getYForTopText(textLine); + } + } + else { + return note.checkStave().getYForTopText(textLine); + } + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'); + } +} +function getBottomY(note, textLine) { + const stemDirection = note.getStemDirection(); + const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents(); + if (isStaveOrGraceNote(note)) { + if (note.hasStem()) { + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + return stemBaseY; + } + else { + return stemTipY; + } + } + else { + return Math.max(...note.getYs()); + } + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) { + if (note.hasStem()) { + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + return note.checkStave().getYForBottomText(textLine); + } + else { + return stemTipY; + } + } + else { + return note.checkStave().getYForBottomText(textLine); + } + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'); + } +} +/** + * Get the initial offset of the articulation from the y value of the starting position. + * This is required because the top/bottom text positions already have spacing applied to + * provide a "visually pleasant" default position. However the y values provided from + * the stavenote's top/bottom do *not* have any pre-applied spacing. This function + * normalizes this asymmetry. + * @param note + * @param position + * @returns + */ +function getInitialOffset(note, position) { + const isOnStemTip = (position === ABOVE && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) || + (position === BELOW && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN); + if (isStaveOrGraceNote(note)) { + if (note.hasStem() && isOnStemTip) { + return 0.5; + } + else { + // this amount is larger than the stem-tip offset because we start from + // the center of the notehead + return 1; + } + } + else { + if (note.hasStem() && isOnStemTip) { + return 1; + } + else { + return 0; + } + } +} +/** + * Articulations and Accents are modifiers that can be + * attached to notes. The complete list of articulations is available in + * `tables.ts` under `Vex.Flow.articulationCodes`. + * + * See `tests/articulation_tests.ts` for usage examples. + */ +class Articulation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + /** Articulations category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Articulation; + } + /** + * FIXME: + * Most of the complex formatting logic (ie: snapping to space) is + * actually done in .render(). But that logic belongs in this method. + * + * Unfortunately, this isn't possible because, by this point, stem lengths + * have not yet been finalized. Finalized stem lengths are required to determine the + * initial position of any stem-side articulation. + * + * This indicates that all objects should have their stave set before being + * formatted. It can't be an optional if you want accurate vertical positioning. + * Consistently positioned articulations that play nice with other modifiers + * won't be possible until we stop relying on render-time formatting. + * + * Ideally, when this function has completed, the vertical articulation positions + * should be ready to render without further adjustment. But the current state + * is far from this ideal. + */ + static format(articulations, state) { + if (!articulations || articulations.length === 0) + return false; + const margin = 0.5; + let maxGlyphWidth = 0; + const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(articulation.glyph.getMetrics().height) / 10 + margin); + articulations.forEach((articulation) => { + const note = articulation.checkAttachedNote(); + maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth); + let lines = 5; + const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + let stemHeight = 0; + // Decide if we need to consider beam direction in placement. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStemmableNote)(note)) { + const stem = note.getStem(); + if (stem) { + stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + } + } + const stave = note.getStave(); + if (stave) { + lines = stave.getNumLines(); + } + if (articulation.getPosition() === ABOVE) { + let noteLine = note.getLineNumber(true); + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + noteLine += stemHeight; + } + let increment = getIncrement(articulation, state.top_text_line, ABOVE); + const curTop = noteLine + state.top_text_line + 0.5; + // If articulation must be above stave, add lines between note and stave top + if (!articulation.articulation.between_lines && curTop < lines) { + increment += lines - curTop; + } + articulation.setTextLine(state.top_text_line); + state.top_text_line += increment; + } + else if (articulation.getPosition() === BELOW) { + let noteLine = Math.max(lines - note.getLineNumber(), 0); + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + noteLine += stemHeight; + } + let increment = getIncrement(articulation, state.text_line, BELOW); + const curBottom = noteLine + state.text_line + 0.5; + // if articulation must be below stave, add lines from note to stave bottom + if (!articulation.articulation.between_lines && curBottom < lines) { + increment += lines - curBottom; + } + articulation.setTextLine(state.text_line); + state.text_line += increment; + } + }); + const width = articulations + .map((articulation) => articulation.getWidth()) + .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth)); + const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0)); + state.left_shift += overlap / 2; + state.right_shift += overlap / 2; + return true; + } + static easyScoreHook({ articulations }, note, builder) { + if (!articulations) + return; + const articNameToCode = { + staccato: 'a.', + tenuto: 'a-', + accent: 'a>', + }; + articulations + .split(',') + .map((articString) => articString.trim().split('.')) + .map(([name, position]) => { + const artic = { type: articNameToCode[name] }; + if (position) + artic.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.PositionString[position]; + return builder.getFactory().Articulation(artic); + }) + .map((artic) => note.addModifier(artic, 0)); + } + /** + * Create a new articulation. + * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code. + * + * Notes (by default): + * - Glyph codes ending with 'Above' will be positioned ABOVE + * - Glyph codes ending with 'Below' will be positioned BELOW + */ + constructor(type) { + super(); + this.type = type; + this.position = ABOVE; + this.render_options = { + font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, + }; + this.reset(); + } + reset() { + this.articulation = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.articulationCodes(this.type); + // Use type as glyph code, if not defined as articulation code + if (!this.articulation) { + this.articulation = { code: this.type, between_lines: false }; + if (this.type.endsWith('Above')) + this.position = ABOVE; + if (this.type.endsWith('Below')) + this.position = BELOW; + } + const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code; + this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale); + (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`); + this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width)); + } + /** Set if articulation should be rendered between lines. */ + setBetweenLines(betweenLines = true) { + this.articulation.between_lines = betweenLines; + return this; + } + /** Render articulation in position next to note. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const index = this.checkIndex(); + const { position, glyph, text_line: textLine } = this; + const canSitBetweenLines = this.articulation.between_lines; + const stave = note.checkStave(); + const staffSpace = stave.getSpacingBetweenLines(); + const isTab = (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note); + // Articulations are centered over/under the note head. + const { x } = note.getModifierStartXY(position, index); + const shouldSitOutsideStaff = !canSitBetweenLines || isTab; + const initialOffset = getInitialOffset(note, position); + const padding = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0); + let y = { + [ABOVE]: () => { + glyph.setOrigin(0.5, 1); + const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace; + return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y; + }, + [BELOW]: () => { + glyph.setOrigin(0.5, 0); + const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace; + return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y; + }, + }[position](); + if (!isTab) { + const offsetDirection = position === ABOVE ? -1 : +1; + const noteLine = note.getKeyProps()[index].line; + const distanceFromNote = (note.getYs()[index] - y) / staffSpace; + const articLine = distanceFromNote + Number(noteLine); + const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection); + if (isWithinLines(snappedLine, position)) + glyph.setOrigin(0.5, 0.5); + y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection; + } + L(`Rendering articulation at (x: ${x}, y: ${y})`); + glyph.render(ctx, x, y); + } +} +/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */ +Articulation.DEBUG = false; +Articulation.INITIAL_OFFSET = -0.5; + + + +/***/ }), + +/***/ "./src/barnote.ts": +/*!************************!*\ + !*** ./src/barnote.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BarNote": () => (/* binding */ BarNote) +/* harmony export */ }); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + +// eslint-disable-next-line +function L(...args) { + if (BarNote.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.BarNote', args); +} +/** + * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can + * be added to a voice and rendered in the middle of a stave. Since it has no + * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter. + * + * See `tests/barnote_tests.ts` for usage examples. + */ +class BarNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.BarNote; + } + constructor(type = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType.SINGLE) { + super({ duration: 'b' }); + this.metrics = { + widths: {}, + }; + const TYPE = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType; + this.metrics.widths = { + [TYPE.SINGLE]: 8, + [TYPE.DOUBLE]: 12, + [TYPE.END]: 15, + [TYPE.REPEAT_BEGIN]: 14, + [TYPE.REPEAT_END]: 14, + [TYPE.REPEAT_BOTH]: 18, + [TYPE.NONE]: 0, + }; + // Tell the formatter that bar notes have no duration. + this.ignore_ticks = true; + this.setType(type); + this.barline = new _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline(type); + } + /** Get the type of bar note.*/ + getType() { + return this.type; + } + /** Set the type of bar note. */ + setType(type) { + this.type = typeof type === 'string' ? _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.typeString[type] : type; + // Set width to width of relevant `Barline`. + this.setWidth(this.metrics.widths[this.type]); + return this; + } + /* Overridden to ignore */ + // eslint-disable-next-line + addToModifierContext(mc) { + // DO NOTHING. + return this; + } + /** Overridden to ignore. */ + preFormat() { + this.preFormatted = true; + return this; + } + /** Render note to stave. */ + draw() { + const ctx = this.checkContext(); + L('Rendering bar line at: ', this.getAbsoluteX()); + this.applyStyle(ctx); + ctx.openGroup('barnote', this.getAttribute('id')); + this.barline.setType(this.type); + this.barline.setX(this.getAbsoluteX()); + this.barline.draw(this.checkStave()); + ctx.closeGroup(); + this.restoreStyle(ctx); + this.setRendered(); + } +} +/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */ +BarNote.DEBUG = false; + + + +/***/ }), + +/***/ "./src/beam.ts": +/*!*********************!*\ + !*** ./src/beam.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BEAM_BOTH": () => (/* binding */ BEAM_BOTH), +/* harmony export */ "BEAM_LEFT": () => (/* binding */ BEAM_LEFT), +/* harmony export */ "BEAM_RIGHT": () => (/* binding */ BEAM_RIGHT), +/* harmony export */ "Beam": () => (/* binding */ Beam) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +function calculateStemDirection(notes) { + let lineSum = 0; + notes.forEach((note) => { + if (note.keyProps) { + note.keyProps.forEach((keyProp) => { + lineSum += keyProp.line - 3; + }); + } + }); + if (lineSum >= 0) { + return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN; + } + return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; +} +function getStemSlope(firstNote, lastNote) { + const firstStemTipY = firstNote.getStemExtents().topY; + const firstStemX = firstNote.getStemX(); + const lastStemTipY = lastNote.getStemExtents().topY; + const lastStemX = lastNote.getStemX(); + return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX); +} +const BEAM_LEFT = 'L'; +const BEAM_RIGHT = 'R'; +const BEAM_BOTH = 'B'; +/** `Beams` span over a set of `StemmableNotes`. */ +class Beam extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Beam; + } + /** Get the direction of the beam */ + getStemDirection() { + return this.stem_direction; + } + /** + * Get the default beam groups for a provided time signature. + * Attempt to guess if the time signature is not found in table. + * Currently this is fairly naive. + */ + static getDefaultBeamGroups(time_sig) { + if (!time_sig || time_sig === 'c') { + time_sig = '4/4'; + } + const defaults = { + '1/2': ['1/2'], + '2/2': ['1/2'], + '3/2': ['1/2'], + '4/2': ['1/2'], + '1/4': ['1/4'], + '2/4': ['1/4'], + '3/4': ['1/4'], + '4/4': ['1/4'], + '1/8': ['1/8'], + '2/8': ['2/8'], + '3/8': ['3/8'], + '4/8': ['2/8'], + '1/16': ['1/16'], + '2/16': ['2/16'], + '3/16': ['3/16'], + '4/16': ['2/16'], + }; + const groups = defaults[time_sig]; + if (groups === undefined) { + // If no beam groups found, naively determine + // the beam groupings from the time signature + const beatTotal = parseInt(time_sig.split('/')[0], 10); + const beatValue = parseInt(time_sig.split('/')[1], 10); + const tripleMeter = beatTotal % 3 === 0; + if (tripleMeter) { + return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(3, beatValue)]; + } + else if (beatValue > 4) { + return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, beatValue)]; + } + else if (beatValue <= 4) { + return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, beatValue)]; + } + } + else { + return groups.map((group) => new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction().parse(group)); + } + return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 4)]; + } + /** + * A helper function to automatically build basic beams for a voice. For more + * complex auto-beaming use `Beam.generateBeams()`. + * @param voice the voice to generate the beams for + * @param stem_direction a stem direction to apply to the entire voice + * @param groups an array of `Fraction` representing beat groupings for the beam + */ + static applyAndGetBeams(voice, stem_direction, groups) { + return Beam.generateBeams(voice.getTickables(), { groups, stem_direction }); + } + /** + * A helper function to autimatically build beams for a voice with + * configuration options. + * + * Example configuration object: + * + * ``` + * config = { + * groups: [new Vex.Flow.Fraction(2, 8)], + * stem_direction: -1, + * beam_rests: true, + * beam_middle_only: true, + * show_stemlets: false + * }; + * ``` + * @param notes an array of notes to create the beams for + * @param config the configuration object + * @param config.stem_direction set to apply the same direction to all notes + * @param config.beam_rests set to `true` to include rests in the beams + * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat + * @param config.show_stemlets set to `true` to draw stemlets for rests + * @param config.maintain_stem_directions set to `true` to not apply new stem directions + * @param config.groups array of `Fractions` that represent the beat structure to beam the notes + * + */ + static generateBeams(notes, config = {}) { + if (!config.groups || !config.groups.length) { + config.groups = [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, 8)]; + } + // Convert beam groups to tick amounts + const tickGroups = config.groups.map((group) => { + if (!group.multiply) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions'); + } + return group.clone().multiply(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RESOLUTION, 1); + }); + const unprocessedNotes = notes; + let currentTickGroup = 0; + let noteGroups = []; + let currentGroup = []; + function getTotalTicks(vf_notes) { + return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1)); + } + function nextTickGroup() { + if (tickGroups.length - 1 > currentTickGroup) { + currentTickGroup += 1; + } + else { + currentTickGroup = 0; + } + } + function createGroups() { + let nextGroup = []; + // number of ticks in current group + let currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); + unprocessedNotes.forEach((unprocessedNote) => { + nextGroup = []; + if (unprocessedNote.shouldIgnoreTicks()) { + noteGroups.push(currentGroup); + currentGroup = nextGroup; + return; // Ignore untickables (like bar notes) + } + currentGroup.push(unprocessedNote); + const ticksPerGroup = tickGroups[currentTickGroup].clone(); + const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks); + // Double the amount of ticks in a group, if it's an unbeamable tuplet + const unbeamable = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(unprocessedNote.getDuration()) < 8; + if (unbeamable && unprocessedNote.getTuplet()) { + ticksPerGroup.numerator *= 2; + } + // If the note that was just added overflows the group tick total + if (totalTicks.greaterThan(ticksPerGroup)) { + // If the overflow note can be beamed, start the next group + // with it. Unbeamable notes leave the group overflowed. + if (!unbeamable) { + const note = currentGroup.pop(); + if (note) + nextGroup.push(note); + } + noteGroups.push(currentGroup); + // We have overflown, so we're going to next tick group. As we might have + // overflown by more than 1 group, we need to go forward as many times as + // needed, decreasing currentGroupTotalTicks by as many ticks as there are + // in current groups as we go forward. + do { + currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]); + nextTickGroup(); + } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup])); + currentGroup = nextGroup; + } + else if (totalTicks.equals(ticksPerGroup)) { + noteGroups.push(currentGroup); + currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); + currentGroup = nextGroup; + nextTickGroup(); + } + }); + // Adds any remainder notes beam + if (currentGroup.length > 0) { + noteGroups.push(currentGroup); + } + } + function getBeamGroups() { + return noteGroups.filter((group) => { + if (group.length > 1) { + let beamable = true; + group.forEach((note) => { + if (note.getIntrinsicTicks() >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) { + beamable = false; + } + }); + return beamable; + } + return false; + }); + } + // Splits up groups by Rest + function sanitizeGroups() { + const sanitizedGroups = []; + noteGroups.forEach((group) => { + let tempGroup = []; + group.forEach((note, index, group) => { + const isFirstOrLast = index === 0 || index === group.length - 1; + const prevNote = group[index - 1]; + const breaksOnEachRest = !config.beam_rests && note.isRest(); + const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast; + let breakOnStemChange = false; + if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) { + const prevDirection = prevNote.getStemDirection(); + const currentDirection = note.getStemDirection(); + breakOnStemChange = currentDirection !== prevDirection; + } + const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8; + // Determine if the group should be broken at this note + const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration; + if (shouldBreak) { + // Add current group + if (tempGroup.length > 0) { + sanitizedGroups.push(tempGroup); + } + // Start a new group. Include the current note if the group + // was broken up by stem direction, as that note needs to start + // the next group of notes + tempGroup = breakOnStemChange ? [note] : []; + } + else { + // Add note to group + tempGroup.push(note); + } + }); + // If there is a remaining group, add it as well + if (tempGroup.length > 0) { + sanitizedGroups.push(tempGroup); + } + }); + noteGroups = sanitizedGroups; + } + function formatStems() { + noteGroups.forEach((group) => { + let stemDirection; + if (config.maintain_stem_directions) { + const note = findFirstNote(group); + stemDirection = note ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + } + else { + if (config.stem_direction) { + stemDirection = config.stem_direction; + } + else { + stemDirection = calculateStemDirection(group); + } + } + applyStemDirection(group, stemDirection); + }); + } + function findFirstNote(group) { + for (let i = 0; i < group.length; i++) { + const note = group[i]; + if (!note.isRest()) { + return note; + } + } + return false; + } + function applyStemDirection(group, direction) { + group.forEach((note) => { + note.setStemDirection(direction); + }); + } + // Get all of the tuplets in all of the note groups + function getTuplets() { + const uniqueTuplets = []; + // Go through all of the note groups and inspect for tuplets + noteGroups.forEach((group) => { + let tuplet; + group.forEach((note) => { + const noteTuplet = note.getTuplet(); + if (noteTuplet && tuplet !== noteTuplet) { + tuplet = noteTuplet; + uniqueTuplets.push(tuplet); + } + }); + }); + return uniqueTuplets; + } + // Using closures to store the variables throughout the various functions + // IMO Keeps it this process lot cleaner - but not super consistent with + // the rest of the API's style - Silverwolf90 (Cyril) + createGroups(); + sanitizeGroups(); + formatStems(); + // Get the notes to be beamed + const beamedNoteGroups = getBeamGroups(); + // Get the tuplets in order to format them accurately + const allTuplets = getTuplets(); + // Create a Vex.Flow.Beam from each group of notes to be beamed + const beams = []; + beamedNoteGroups.forEach((group) => { + const beam = new Beam(group); + if (config.show_stemlets) { + beam.render_options.show_stemlets = true; + } + if (config.secondary_breaks) { + beam.render_options.secondary_break_ticks = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(config.secondary_breaks); + } + if (config.flat_beams === true) { + beam.render_options.flat_beams = true; + beam.render_options.flat_beam_offset = config.flat_beam_offset; + } + beams.push(beam); + }); + // Reformat tuplets + allTuplets.forEach((tuplet) => { + // Set the tuplet location based on the stem direction + const direction = tuplet.notes[0].stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.BOTTOM : _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.TOP; + tuplet.setTupletLocation(direction); + // If any of the notes in the tuplet are not beamed, draw a bracket. + let bracketed = false; + for (let i = 0; i < tuplet.notes.length; i++) { + const note = tuplet.notes[i]; + if (!note.hasBeam()) { + bracketed = true; + break; + } + } + tuplet.setBracketed(bracketed); + }); + return beams; + } + constructor(notes, auto_stem = false) { + super(); + this.slope = 0; + this.y_shift = 0; + /** + * Overrides to default beam directions for secondary-level beams that do not + * connect to any other note. See further explanation at + * `setPartialBeamSideAt` + */ + this.forcedPartialDirections = {}; + if (!notes || notes.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for beam.'); + } + if (notes.length === 1) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Too few notes for beam.'); + } + // Validate beam line, direction and ticks. + this.ticks = notes[0].getIntrinsicTicks(); + if (this.ticks >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.'); + } + let i; // shared iterator + let note; + this.stem_direction = notes[0].getStemDirection(); + let stem_direction = this.stem_direction; + // Figure out optimal stem direction based on given notes + if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(notes[0])) { + stem_direction = calculateStemDirection(notes); + } + else if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(notes[0])) { + // Auto Stem TabNotes + const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0); + stem_direction = stem_weight > -1 ? _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN; + } + // Apply stem directions and attach beam to notes + for (i = 0; i < notes.length; ++i) { + note = notes[i]; + if (auto_stem) { + note.setStemDirection(stem_direction); + this.stem_direction = stem_direction; + } + note.setBeam(this); + } + this.postFormatted = false; + this.notes = notes; + this.beam_count = this.getBeamCount(); + this.break_on_indices = []; + this.render_options = { + beam_width: 5, + max_slope: 0.25, + min_slope: -0.25, + slope_iterations: 20, + slope_cost: 100, + show_stemlets: false, + stemlet_extension: 7, + partial_beam_length: 10, + flat_beams: false, + min_flat_beam_offset: 15, + }; + } + /** Get the notes in this beam. */ + getNotes() { + return this.notes; + } + /** Get the max number of beams in the set of notes. */ + getBeamCount() { + const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count); + const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max)); + return maxBeamCount; + } + /** Set which note `indices` to break the secondary beam at. */ + breakSecondaryAt(indices) { + this.break_on_indices = indices; + return this; + } + /** + * Forces the direction of a partial beam (a secondary-level beam that exists + * on one note only of the beam group). This is useful in rhythms such as 6/8 + * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the + * first sixteenth note can help imply whether the rhythm is to be felt as + * three groups of eighth notes (typical) or as two groups of three-sixteenths + * (less common): + * ``` + * ┌───┬──┬──┐ ┌──┬──┬──┐ + * │ ├─ │ ─┤ vs │ ─┤ │ ─┤ + * │ │ │ │ │ │ │ │ + * ``` + */ + setPartialBeamSideAt(noteIndex, side) { + this.forcedPartialDirections[noteIndex] = side; + return this; + } + /** + * Restore the default direction of a partial beam (a secondary-level beam + * that does not connect to any other notes). + */ + unsetPartialBeamSideAt(noteIndex) { + delete this.forcedPartialDirections[noteIndex]; + return this; + } + /** Return the y coordinate for linear function. */ + getSlopeY(x, first_x_px, first_y_px, slope) { + return first_y_px + (x - first_x_px) * slope; + } + /** Calculate the best possible slope for the provided notes. */ + calculateSlope() { + const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this; + const firstNote = notes[0]; + const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]); + const increment = (max_slope - min_slope) / slope_iterations; + let minCost = Number.MAX_VALUE; + let bestSlope = 0; + let yShift = 0; + // iterate through slope values to find best weighted fit + for (let slope = min_slope; slope <= max_slope; slope += increment) { + let totalStemExtension = 0; + let yShiftTemp = 0; + // iterate through notes, calculating y shift and stem extension + for (let i = 1; i < notes.length; ++i) { + const note = notes[i]; + if (note.hasStem() || note.isRest()) { + const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp; + const stemTipY = note.getStemExtents().topY; + // beam needs to be shifted up to accommodate note + if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) { + const diff = Math.abs(stemTipY - adjustedStemTipY); + yShiftTemp += diff * -stemDirection; + totalStemExtension += diff * i; + } + else { + // beam overshoots note, account for the difference + totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection; + } + } + } + // most engraving books suggest aiming for a slope about half the angle of the + // difference between the first and last notes' stem length; + const idealSlope = initialSlope / 2; + const distanceFromIdeal = Math.abs(idealSlope - slope); + // This tries to align most beams to something closer to the idealSlope, but + // doesn't go crazy. To disable, set this.render_options.slope_cost = 0 + const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension); + // update state when a more ideal slope is found + if (cost < minCost) { + minCost = cost; + bestSlope = slope; + yShift = yShiftTemp; + } + } + this.slope = bestSlope; + this.y_shift = yShift; + } + /** Calculate a slope and y-shift for flat beams. */ + calculateFlatSlope() { + const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this; + // If a flat beam offset has not yet been supplied or calculated, + // generate one based on the notes in this particular note group + let total = 0; + let extremeY = 0; // Store the highest or lowest note here + let extremeBeamCount = 0; // The beam count of the extreme note + let currentExtreme = 0; + for (let i = 0; i < notes.length; i++) { + // Total up all of the offsets so we can average them out later + const note = notes[i]; + const stemTipY = note.getStemExtents().topY; + total += stemTipY; + // Store the highest (stems-up) or lowest (stems-down) note so the + // offset can be adjusted in case the average isn't enough + if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && currentExtreme < stemTipY) { + currentExtreme = stemTipY; + extremeY = Math.max(...note.getYs()); + extremeBeamCount = note.getBeamCount(); + } + else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) { + currentExtreme = stemTipY; + extremeY = Math.min(...note.getYs()); + extremeBeamCount = note.getBeamCount(); + } + } + // Average the offsets to try and come up with a reasonable one that + // works for all of the notes in the beam group. + let offset = total / notes.length; + // In case the average isn't long enough, add or subtract some more + // based on the highest or lowest note (again, based on the stem + // direction). This also takes into account the added height due to + // the width of the beams. + const beamWidth = beam_width * 1.5; + const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth; + const newOffset = extremeY + extremeTest * -stem_direction; + if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset < newOffset) { + offset = extremeY + extremeTest; + } + else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset > newOffset) { + offset = extremeY - extremeTest; + } + if (!flat_beam_offset) { + // Set the offset for the group based on the calculations above. + this.render_options.flat_beam_offset = offset; + } + else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset > flat_beam_offset) { + this.render_options.flat_beam_offset = offset; + } + else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset < flat_beam_offset) { + this.render_options.flat_beam_offset = offset; + } + // for flat beams, the slope and y_shift are simply 0 + this.slope = 0; + this.y_shift = 0; + } + /** Return the Beam y offset. */ + getBeamYToDraw() { + const firstNote = this.notes[0]; + const firstStemTipY = firstNote.getStemExtents().topY; + let beamY = firstStemTipY; + // For flat beams, set the first and last Y to the offset, rather than + // using the note's stem extents. + if (this.render_options.flat_beams && this.render_options.flat_beam_offset) { + beamY = this.render_options.flat_beam_offset; + } + return beamY; + } + /** + * Create new stems for the notes in the beam, so that each stem + * extends into the beams. + */ + applyStemExtensions() { + const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this; + const firstNote = notes[0]; + const firstStemTipY = this.getBeamYToDraw(); + const firstStemX = firstNote.getStemX(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + const stem = note.getStem(); + if (stem) { + const stemX = note.getStemX(); + const { topY: stemTipY } = note.getStemExtents(); + const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift; + const preBeamExtension = stem.getExtension(); + const beamExtension = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY; + // Determine necessary extension for cross-stave notes in the beam group + let crossStemExtension = 0; + if (note.getStemDirection() !== this.stem_direction) { + const beamCount = note.getGlyphProps().beam_count; + crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width; + /* This will be required if the partial beams are moved to the note side. + if (i > 0 && note.getGlyph().beam_count > 1) { + const prevBeamCount = this.notes[i - 1].getGlyph().beam_count; + const beamDiff = Math.abs(prevBeamCount - beamCount); + if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5); + } + */ + } + stem.setExtension(preBeamExtension + beamExtension + crossStemExtension); + stem.adjustHeightForBeam(); + if (note.isRest() && show_stemlets) { + const beamWidth = beam_width; + const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth; + stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension); + } + } + } + } + /** Return upper level beam direction. */ + lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) { + if (duration === '4') { + return BEAM_LEFT; + } + const forcedBeamDirection = this.forcedPartialDirections[noteIndex]; + if (forcedBeamDirection) + return forcedBeamDirection; + const lookup_duration = `${_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(duration) / 2}`; + const prev_note_gets_beam = prev_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration); + const next_note_gets_beam = next_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration); + const note_gets_beam = tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration); + if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) { + return BEAM_BOTH; + } + else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) { + return BEAM_LEFT; + } + else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) { + return BEAM_RIGHT; + } + return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex); + } + /** Get the x coordinates for the beam lines of specific `duration`. */ + getBeamLines(duration) { + const tick_of_duration = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(duration); + let beam_started = false; + const beam_lines = []; + let current_beam = undefined; + const partial_beam_length = this.render_options.partial_beam_length; + let previous_should_break = false; + let tick_tally = 0; + for (let i = 0; i < this.notes.length; ++i) { + const note = this.notes[i]; + // See if we need to break secondary beams on this note. + const ticks = note.getTicks().value(); + tick_tally += ticks; + let should_break = false; + // 8th note beams are always drawn. + if (parseInt(duration, 10) >= 8) { + // First, check to see if any indices were set up through breakSecondaryAt() + should_break = this.break_on_indices.indexOf(i) !== -1; + // If the secondary breaks were auto-configured in the render options, + // handle that as well. + if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) { + tick_tally = 0; + should_break = true; + } + } + const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration; + const stem_x = note.getStemX() - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.WIDTH / 2; + // Check to see if the next note in the group will get a beam at this + // level. This will help to inform the partial beam logic below. + const prev_note = this.notes[i - 1]; + const next_note = this.notes[i + 1]; + const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration; + const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration; + const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam; + // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam; + if (note_gets_beam) { + // This note gets a beam at the current level + if (beam_started) { + // We're currently in the middle of a beam. Just continue it on to + // the stem X of the current note. + current_beam = beam_lines[beam_lines.length - 1]; + current_beam.end = stem_x; + // If a secondary beam break is set up, end the beam right now. + if (should_break) { + beam_started = false; + if (next_note && !next_note_gets_beam && current_beam.end === undefined) { + // This note gets a beam,.but the next one does not. This means + // we need a partial pointing right. + current_beam.end = current_beam.start - partial_beam_length; + } + } + } + else { + // No beam started yet. Start a new one. + current_beam = { start: stem_x, end: undefined }; + beam_started = true; + if (beam_alone) { + // previous and next beam exists and does not get a beam but current gets it. + const prev_tick = prev_note.getIntrinsicTicks(); + const next_tick = next_note.getIntrinsicTicks(); + const tick = note.getIntrinsicTicks(); + const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i); + if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) { + current_beam.end = current_beam.start - partial_beam_length; + } + else { + current_beam.end = current_beam.start + partial_beam_length; + } + } + else if (!next_note_gets_beam) { + // The next note doesn't get a beam. Draw a partial. + if ((previous_should_break || i === 0) && next_note) { + // This is the first note (but not the last one), or it is + // following a secondary break. Draw a partial to the right. + current_beam.end = current_beam.start + partial_beam_length; + } + else { + // By default, draw a partial to the left. + current_beam.end = current_beam.start - partial_beam_length; + } + } + else if (should_break) { + // This note should have a secondary break after it. Even though + // we just started a beam, it needs to end immediately. + current_beam.end = current_beam.start - partial_beam_length; + beam_started = false; + } + beam_lines.push(current_beam); + } + } + else { + // The current note does not get a beam. + beam_started = false; + } + // Store the secondary break flag to inform the partial beam logic in + // the next iteration of the loop. + previous_should_break = should_break; + } + // Add a partial beam pointing left if this is the last note in the group + const last_beam = beam_lines[beam_lines.length - 1]; + if (last_beam && last_beam.end === undefined) { + last_beam.end = last_beam.start - partial_beam_length; + } + return beam_lines; + } + /** Render the stems for each note. */ + drawStems(ctx) { + this.notes.forEach((note) => { + const stem = note.getStem(); + if (stem) { + const stem_x = note.getStemX(); + stem.setNoteHeadXBounds(stem_x, stem_x); + stem.setContext(ctx).draw(); + } + }, this); + } + // Render the beam lines + drawBeamLines(ctx) { + const valid_beam_durations = ['4', '8', '16', '32', '64']; + const firstNote = this.notes[0]; + let beamY = this.getBeamYToDraw(); + const firstStemX = firstNote.getStemX(); + const beamThickness = this.render_options.beam_width * this.stem_direction; + // Draw the beams. + for (let i = 0; i < valid_beam_durations.length; ++i) { + const duration = valid_beam_durations[i]; + const beamLines = this.getBeamLines(duration); + for (let j = 0; j < beamLines.length; ++j) { + const beam_line = beamLines[j]; + const startBeamX = beam_line.start; + const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope); + const lastBeamX = beam_line.end; + if (lastBeamX) { + const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope); + ctx.beginPath(); + ctx.moveTo(startBeamX, startBeamY); + ctx.lineTo(startBeamX, startBeamY + beamThickness); + ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness); + ctx.lineTo(lastBeamX + 1, lastBeamY); + ctx.closePath(); + ctx.fill(); + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoLastBeamX', 'lastBeamX undefined.'); + } + } + beamY += beamThickness * 1.5; + } + } + /** Pre-format the beam. */ + preFormat() { + return this; + } + /** + * Post-format the beam. This can only be called after + * the notes in the beam have both `x` and `y` values. ie: they've + * been formatted and have staves. + */ + postFormat() { + if (this.postFormatted) + return; + // Calculate a smart slope if we're not forcing the beams to be flat. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(this.notes[0]) || this.render_options.flat_beams) { + this.calculateFlatSlope(); + } + else { + this.calculateSlope(); + } + this.applyStemExtensions(); + this.postFormatted = true; + } + /** Render the beam to the canvas context */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + if (this.unbeamable) + return; + if (!this.postFormatted) { + this.postFormat(); + } + this.drawStems(ctx); + this.applyStyle(); + ctx.openGroup('beam', this.getAttribute('id')); + this.drawBeamLines(ctx); + ctx.closeGroup(); + this.restoreStyle(); + } +} + + +/***/ }), + +/***/ "./src/bend.ts": +/*!*********************!*\ + !*** ./src/bend.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Bend": () => (/* binding */ Bend) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +/** Bend implements tablature bends. */ +class Bend extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Bend; + } + static get UP() { + return 0; + } + static get DOWN() { + return 1; + } + // Arrange bends in `ModifierContext` + static format(bends, state) { + if (!bends || bends.length === 0) + return false; + let last_width = 0; + // Format Bends + for (let i = 0; i < bends.length; ++i) { + const bend = bends[i]; + const note = bend.checkAttachedNote(); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isTabNote)(note)) { + const stringPos = note.leastString() - 1; + if (state.top_text_line < stringPos) { + state.top_text_line = stringPos; + } + } + bend.setXShift(last_width); + last_width = bend.getWidth(); + bend.setTextLine(state.top_text_line); + } + state.right_shift += last_width; + state.top_text_line += 1; + return true; + } + /** + * Example of a phrase: + * ``` + * [{ + * type: UP, + * text: "whole" + * width: 8; + * }, + * { + * type: DOWN, + * text: "whole" + * width: 8; + * }, + * { + * type: UP, + * text: "half" + * width: 8; + * }, + * { + * type: UP, + * text: "whole" + * width: 8; + * }, + * { + * type: DOWN, + * text: "1 1/2" + * width: 8; + * }] + * ``` + * @param text text for bend ("Full", "Half", etc.) (DEPRECATED) + * @param release if true, render a release. (DEPRECATED) + * @param phrase if set, ignore "text" and "release", and use the more sophisticated phrase specified + */ + constructor(text, release = false, phrase) { + super(); + this.text = text; + this.x_shift = 0; + this.release = release; + this.tap = ''; + this.resetFont(); + this.render_options = { + line_width: 1.5, + line_style: '#777777', + bend_width: 8, + release_width: 8, + }; + if (phrase) { + this.phrase = phrase; + } + else { + // Backward compatibility + this.phrase = [{ type: Bend.UP, text: this.text }]; + if (this.release) + this.phrase.push({ type: Bend.DOWN, text: '' }); + } + this.updateWidth(); + } + /** Set horizontal shift in pixels. */ + setXShift(value) { + this.x_shift = value; + this.updateWidth(); + return this; + } + setTap(value) { + this.tap = value; + return this; + } + /** Get text provided in the constructor. */ + getText() { + return this.text; + } + getTextHeight() { + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont); + return textFormatter.maxHeight; + } + /** Recalculate width. */ + updateWidth() { + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont); + const measureText = (text) => { + return textFormatter.getWidthForTextInPx(text); + }; + let totalWidth = 0; + for (let i = 0; i < this.phrase.length; ++i) { + const bend = this.phrase[i]; + if (bend.width !== undefined) { + totalWidth += bend.width; + } + else { + const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width; + bend.width = Math.max(additional_width, measureText(bend.text)) + 3; + bend.draw_width = bend.width / 2; + totalWidth += bend.width; + } + } + this.setWidth(totalWidth + this.x_shift); + return this; + } + /** Draw the bend on the rendering context. */ + draw() { + var _a; + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index); + start.x += 3; + start.y += 0.5; + const x_shift = this.x_shift; + const stave = note.checkStave(); + const spacing = stave.getSpacingBetweenLines(); + const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b)); + // this.text_line is relative to top string in the group. + const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3; + const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1; + const renderBend = (x, y, width, height) => { + const cp_x = x + width; + const cp_y = y; + ctx.save(); + ctx.beginPath(); + ctx.setLineWidth(this.render_options.line_width); + ctx.setStrokeStyle(this.render_options.line_style); + ctx.setFillStyle(this.render_options.line_style); + ctx.moveTo(x, y); + ctx.quadraticCurveTo(cp_x, cp_y, x + width, height); + ctx.stroke(); + ctx.restore(); + }; + const renderRelease = (x, y, width, height) => { + ctx.save(); + ctx.beginPath(); + ctx.setLineWidth(this.render_options.line_width); + ctx.setStrokeStyle(this.render_options.line_style); + ctx.setFillStyle(this.render_options.line_style); + ctx.moveTo(x, height); + ctx.quadraticCurveTo(x + width, height, x + width, y); + ctx.stroke(); + ctx.restore(); + }; + const renderArrowHead = (x, y, direction) => { + const width = 4; + const yBase = y + width * direction; + ctx.beginPath(); + ctx.moveTo(x, y); // tip of the arrow + ctx.lineTo(x - width, yBase); + ctx.lineTo(x + width, yBase); + ctx.closePath(); + ctx.fill(); + }; + const renderText = (x, text) => { + ctx.save(); + ctx.setFont(this.textFont); + const render_x = x - ctx.measureText(text).width / 2; + ctx.fillText(text, render_x, annotation_y); + ctx.restore(); + }; + let last_bend = undefined; + let last_bend_draw_width = 0; + let last_drawn_width = 0; + if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) { + const tapStart = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.CENTER, this.index); + renderText(tapStart.x, this.tap); + } + for (let i = 0; i < this.phrase.length; ++i) { + const bend = this.phrase[i]; + if (!bend.draw_width) + bend.draw_width = 0; + if (i === 0) + bend.draw_width += x_shift; + last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0); + if (bend.type === Bend.UP) { + if (last_bend && last_bend.type === Bend.UP) { + renderArrowHead(start.x, bend_height, +1); + } + renderBend(start.x, start.y, last_drawn_width, bend_height); + } + if (bend.type === Bend.DOWN) { + if (last_bend && last_bend.type === Bend.UP) { + renderRelease(start.x, start.y, last_drawn_width, bend_height); + } + if (last_bend && last_bend.type === Bend.DOWN) { + renderArrowHead(start.x, start.y, -1); + renderRelease(start.x, start.y, last_drawn_width, bend_height); + } + if (!last_bend) { + last_drawn_width = bend.draw_width; + renderRelease(start.x, start.y, last_drawn_width, bend_height); + } + } + renderText(start.x + last_drawn_width, bend.text); + last_bend = bend; + last_bend_draw_width = bend.draw_width; + last_bend.x = start.x; + start.x += last_drawn_width; + } + if (!last_bend || last_bend.x == undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoLastBendForBend', 'Internal error.'); + } + // Final arrowhead and text + if (last_bend.type === Bend.UP) { + renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1); + } + else if (last_bend.type === Bend.DOWN) { + renderArrowHead(last_bend.x + last_drawn_width, start.y, -1); + } + } +} +/** Default text font. */ +Bend.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); + + + +/***/ }), + +/***/ "./src/boundingbox.ts": +/*!****************************!*\ + !*** ./src/boundingbox.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BoundingBox": () => (/* binding */ BoundingBox) +/* harmony export */ }); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +class BoundingBox { + /** + * Create a new copy. + */ + static copy(that) { + return new BoundingBox(that.x, that.y, that.w, that.h); + } + constructor(x, y, w, h) { + this.x = x; + this.y = y; + this.w = w; + this.h = h; + } + /** Get x position. */ + getX() { + return this.x; + } + /** Get y position. */ + getY() { + return this.y; + } + /** Get width. */ + getW() { + return this.w; + } + /** Get height. */ + getH() { + return this.h; + } + /** Set x position. */ + setX(x) { + this.x = x; + return this; + } + /** Set y position. */ + setY(y) { + this.y = y; + return this; + } + /** Set width. */ + setW(w) { + this.w = w; + return this; + } + /** Set height. */ + setH(h) { + this.h = h; + return this; + } + /** Move to position. */ + move(x, y) { + this.x += x; + this.y += y; + return this; + } + /** Clone. */ + clone() { + return BoundingBox.copy(this); + } + /** + * Merge my box with given box. Creates a bigger bounding box unless + * the given box is contained in this one. + */ + mergeWith(boundingBox) { + const that = boundingBox; + const new_x = this.x < that.x ? this.x : that.x; + const new_y = this.y < that.y ? this.y : that.y; + const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x; + const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y; + this.x = new_x; + this.y = new_y; + this.w = new_w; + this.h = new_h; + return this; + } +} + + +/***/ }), + +/***/ "./src/boundingboxcomputation.ts": +/*!***************************************!*\ + !*** ./src/boundingboxcomputation.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BoundingBoxComputation": () => (/* binding */ BoundingBoxComputation) +/* harmony export */ }); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +/** + * BoundingBoxComputation computes metrics for a bounding box by continuously + * taking canvas path commands. + * + * Warning: This class is merely a crutch to get bounding box information without + * explicit metadata. This is likely to get deprecated following SMuFL support. + * + * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License) + */ +class BoundingBoxComputation { + constructor() { + this.x1 = Number.NaN; + this.y1 = Number.NaN; + this.x2 = Number.NaN; + this.y2 = Number.NaN; + } + /** Get calculated X1. */ + getX1() { + return this.x1; + } + /** Get calculated Y1. */ + getY1() { + return this.y1; + } + /** Get calculated width. */ + width() { + return this.x2 - this.x1; + } + /** Get calculated height. */ + height() { + return this.y2 - this.y1; + } + /** Add point to BoundingBox. */ + addPoint(x, y) { + if (isNaN(this.x1) || x < this.x1) + this.x1 = x; + if (isNaN(this.x2) || x > this.x2) + this.x2 = x; + if (isNaN(this.y1) || y < this.y1) + this.y1 = y; + if (isNaN(this.y2) || y > this.y2) + this.y2 = y; + } + /** Add X to BoundingBox. */ + addX(x) { + this.addPoint(x, this.y1); + } + /** Add Y to BoundingBox. */ + addY(y) { + this.addPoint(this.x1, y); + } + /** Add quadratic curve to BoundingBox. */ + addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) { + this.addPoint(p0x, p0y); + this.addPoint(p2x, p2y); + const p01x = p1x - p0x; + const p12x = p2x - p1x; + let denom = p01x - p12x; + if (denom != 0) { + const t = p01x / denom; + if (t > 0 && t < 1) { + const it = 1 - t; + this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x); + } + } + const p01y = p1y - p0y; + const p12y = p2y - p1y; + denom = p01y - p12y; + if (denom != 0) { + const t = p01y / denom; + if (t > 0 && t < 1) { + const it = 1 - t; + this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y); + } + } + } + /** Add bezier curve to BoundingBox. */ + addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) { + // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html + const p0 = [p0x, p0y]; + const p1 = [p1x, p1y]; + const p2 = [p2x, p2y]; + const p3 = [p3x, p3y]; + let i; + this.addPoint(p0[0], p0[1]); + this.addPoint(p3[0], p3[1]); + const f = (t, i) => Math.pow(1 - t, 3) * p0[i] + + 3 * Math.pow(1 - t, 2) * t * p1[i] + + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + + Math.pow(t, 3) * p3[i]; + for (i = 0; i <= 1; i++) { + const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; + const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; + const c = 3 * p1[i] - 3 * p0[i]; + if (a === 0) { + if (b === 0) + continue; + const t = -c / b; + if (0 < t && t < 1) { + if (i === 0) + this.addX(f(t, i)); + if (i === 1) + this.addY(f(t, i)); + } + continue; + } + const b2ac = Math.pow(b, 2) - 4 * c * a; + if (b2ac < 0) + continue; + const t1 = (-b + Math.sqrt(b2ac)) / (2 * a); + if (0 < t1 && t1 < 1) { + if (i === 0) + this.addX(f(t1, i)); + if (i === 1) + this.addY(f(t1, i)); + } + const t2 = (-b - Math.sqrt(b2ac)) / (2 * a); + if (0 < t2 && t2 < 1) { + if (i === 0) + this.addX(f(t2, i)); + if (i === 1) + this.addY(f(t2, i)); + } + } + } +} + + +/***/ }), + +/***/ "./src/canvascontext.ts": +/*!******************************!*\ + !*** ./src/canvascontext.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CanvasContext": () => (/* binding */ CanvasContext) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./web */ "./src/web.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + +/** + * A rendering context for the Canvas backend. This class serves as a proxy for the + * underlying CanvasRenderingContext2D object, part of the browser's API. + */ +class CanvasContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext { + static get WIDTH() { + return 600; + } + static get HEIGHT() { + return 400; + } + static get CANVAS_BROWSER_SIZE_LIMIT() { + return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size. + } + /** + * Ensure that width and height do not exceed the browser limit. + * @returns array of [width, height] clamped to the browser limit. + */ + static sanitizeCanvasDims(width, height) { + const limit = this.CANVAS_BROWSER_SIZE_LIMIT; + if (Math.max(width, height) > limit) { + (0,_util__WEBPACK_IMPORTED_MODULE_2__.warn)('Canvas dimensions exceed browser limit. Cropping to ' + limit); + if (width > limit) { + width = limit; + } + if (height > limit) { + height = limit; + } + } + return [width, height]; + } + constructor(context) { + super(); + /** Height of one line of text (in pixels). */ + this.textHeight = 0; + this.context2D = context; + if (!context.canvas) { + this.canvas = { + width: CanvasContext.WIDTH, + height: CanvasContext.HEIGHT, + }; + } + else { + this.canvas = context.canvas; + } + } + /** + * Set all pixels to transparent black rgba(0,0,0,0). + */ + clear() { + this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height); + } + // eslint-disable-next-line + openGroup(cls, id, attrs) { + // Containers not implemented. + } + closeGroup() { + // Containers not implemented. + } + // eslint-disable-next-line + add(child) { + // Containers not implemented. + } + setFillStyle(style) { + this.context2D.fillStyle = style; + return this; + } + /** CanvasContext ignores `setBackgroundFillStyle()`. */ + // eslint-disable-next-line + setBackgroundFillStyle(style) { + // DO NOTHING + return this; + } + setStrokeStyle(style) { + this.context2D.strokeStyle = style; + return this; + } + setShadowColor(color) { + this.context2D.shadowColor = color; + return this; + } + setShadowBlur(blur) { + // CanvasRenderingContext2D does not scale the shadow blur by the current + // transform, so we have to do it manually. We assume uniform scaling + // (though allow for rotation) because the blur can only be scaled + // uniformly anyway. + const t = this.context2D.getTransform(); + const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d); + this.context2D.shadowBlur = scale * blur; + return this; + } + setLineWidth(width) { + this.context2D.lineWidth = width; + return this; + } + setLineCap(capType) { + this.context2D.lineCap = capType; + return this; + } + setLineDash(dash) { + this.context2D.setLineDash(dash); + return this; + } + scale(x, y) { + this.context2D.scale(x, y); + return this; + } + resize(width, height, devicePixelRatio) { + var _a; + const canvas = this.context2D.canvas; + const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : (0,_util__WEBPACK_IMPORTED_MODULE_2__.globalObject)().devicePixelRatio) !== null && _a !== void 0 ? _a : 1; + // Scale the canvas size by the device pixel ratio clamping to the maximum supported size. + [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr); + // Divide back down by the pixel ratio and convert to integers. + width = (width / dpr) | 0; + height = (height / dpr) | 0; + canvas.width = width * dpr; + canvas.height = height * dpr; + // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas. + // Only HTMLCanvasElement has a style attribute. + if ((0,_web__WEBPACK_IMPORTED_MODULE_3__.isHTMLCanvas)(canvas)) { + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } + return this.scale(dpr, dpr); + } + rect(x, y, width, height) { + this.context2D.rect(x, y, width, height); + return this; + } + fillRect(x, y, width, height) { + this.context2D.fillRect(x, y, width, height); + return this; + } + /** + * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0). + */ + clearRect(x, y, width, height) { + this.context2D.clearRect(x, y, width, height); + return this; + } + beginPath() { + this.context2D.beginPath(); + return this; + } + moveTo(x, y) { + this.context2D.moveTo(x, y); + return this; + } + lineTo(x, y) { + this.context2D.lineTo(x, y); + return this; + } + bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) { + this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); + return this; + } + quadraticCurveTo(cpx, cpy, x, y) { + this.context2D.quadraticCurveTo(cpx, cpy, x, y); + return this; + } + arc(x, y, radius, startAngle, endAngle, counterclockwise) { + this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise); + return this; + } + fill() { + this.context2D.fill(); + return this; + } + stroke() { + this.context2D.stroke(); + return this; + } + closePath() { + this.context2D.closePath(); + return this; + } + measureText(text) { + const metrics = this.context2D.measureText(text); + let y = 0; + let height = 0; + if (metrics.fontBoundingBoxAscent) { + y = -metrics.fontBoundingBoxAscent; + height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent; + } + else { + y = -metrics.actualBoundingBoxAscent; + height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent; + } + // Return x, y, width & height in the same manner as svg getBBox + return { + x: 0, + y: y, + width: metrics.width, + height: height, + }; + } + fillText(text, x, y) { + this.context2D.fillText(text, x, y); + return this; + } + save() { + this.context2D.save(); + return this; + } + restore() { + this.context2D.restore(); + return this; + } + set fillStyle(style) { + this.context2D.fillStyle = style; + } + get fillStyle() { + return this.context2D.fillStyle; + } + set strokeStyle(style) { + this.context2D.strokeStyle = style; + } + get strokeStyle() { + return this.context2D.strokeStyle; + } + /** + * @param f is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). + * @param style is a string (e.g., 'italic', 'normal'). + */ + setFont(f, size, weight, style) { + const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style); + this.context2D.font = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo); + this.textHeight = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(fontInfo.size); + return this; + } + /** Return a string of the form `'italic bold 15pt Arial'` */ + getFont() { + return this.context2D.font; + } +} + + +/***/ }), + +/***/ "./src/chordsymbol.ts": +/*!****************************!*\ + !*** ./src/chordsymbol.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ChordSymbol": () => (/* binding */ ChordSymbol), +/* harmony export */ "ChordSymbolHorizontalJustify": () => (/* binding */ ChordSymbolHorizontalJustify), +/* harmony export */ "ChordSymbolVerticalJustify": () => (/* binding */ ChordSymbolVerticalJustify), +/* harmony export */ "SymbolModifiers": () => (/* binding */ SymbolModifiers), +/* harmony export */ "SymbolTypes": () => (/* binding */ SymbolTypes) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// Author: Aaron (@AaronDavidNewman) +// +// This implements chord symbols above/below a chord. +// Chord symbols are modifiers that can be attached to notes. +// They can contain multiple 'blocks' which represent text or +// glyphs with various positioning options. +// +// See `tests/chordsymbol_tests.ts` for usage examples. + + + + + + + +// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (ChordSymbol.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.ChordSymbol', args); +} +var ChordSymbolHorizontalJustify; +(function (ChordSymbolHorizontalJustify) { + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["LEFT"] = 1] = "LEFT"; + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["CENTER"] = 2] = "CENTER"; + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["RIGHT"] = 3] = "RIGHT"; + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; +})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {})); +var ChordSymbolVerticalJustify; +(function (ChordSymbolVerticalJustify) { + ChordSymbolVerticalJustify[ChordSymbolVerticalJustify["TOP"] = 1] = "TOP"; + ChordSymbolVerticalJustify[ChordSymbolVerticalJustify["BOTTOM"] = 2] = "BOTTOM"; +})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {})); +var SymbolTypes; +(function (SymbolTypes) { + SymbolTypes[SymbolTypes["GLYPH"] = 1] = "GLYPH"; + SymbolTypes[SymbolTypes["TEXT"] = 2] = "TEXT"; + SymbolTypes[SymbolTypes["LINE"] = 3] = "LINE"; +})(SymbolTypes || (SymbolTypes = {})); +var SymbolModifiers; +(function (SymbolModifiers) { + SymbolModifiers[SymbolModifiers["NONE"] = 1] = "NONE"; + SymbolModifiers[SymbolModifiers["SUBSCRIPT"] = 2] = "SUBSCRIPT"; + SymbolModifiers[SymbolModifiers["SUPERSCRIPT"] = 3] = "SUPERSCRIPT"; +})(SymbolModifiers || (SymbolModifiers = {})); +/** + * ChordSymbol is a modifier that creates a chord symbol above/below a chord. + * As a modifier, it is attached to an existing note. + */ +class ChordSymbol extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.ChordSymbol; + } + static get superSubRatio() { + return ChordSymbol.metrics.global.superSubRatio; + } + /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */ + static set NO_TEXT_FORMAT(val) { + ChordSymbol.noFormat = val; + } + static get NO_TEXT_FORMAT() { + return ChordSymbol.noFormat; + } + static getMetricForGlyph(glyphCode) { + if (ChordSymbol.metrics.glyphs[glyphCode]) { + return ChordSymbol.metrics.glyphs[glyphCode]; + } + return undefined; + } + static get engravingFontResolution() { + return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getResolution(); + } + static get spacingBetweenBlocks() { + return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution; + } + static getWidthForGlyph(glyph) { + const metric = ChordSymbol.getMetricForGlyph(glyph.code); + if (!metric) { + return 0.65; // probably should do something here. + } + return metric.advanceWidth / ChordSymbol.engravingFontResolution; + } + static getYShiftForGlyph(glyph) { + const metric = ChordSymbol.getMetricForGlyph(glyph.code); + if (!metric) { + return 0; + } + return metric.yOffset / ChordSymbol.engravingFontResolution; + } + static getXShiftForGlyph(glyph) { + const metric = ChordSymbol.getMetricForGlyph(glyph.code); + if (!metric) { + return 0; + } + return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution; + } + static get superscriptOffset() { + return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution; + } + static get subscriptOffset() { + return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution; + } + static get kerningOffset() { + return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution; + } + static get metrics() { + const chordSymbol = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().chordSymbol; + if (!chordSymbol) + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `chordSymbol missing`); + return chordSymbol; + } + static get lowerKerningText() { + // For example, see: `bravura_metrics.ts` + // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters. + // ['D', 'F', 'P', 'T', 'V', 'Y'] + return ChordSymbol.metrics.global.lowerKerningText; + } + static get upperKerningText() { + return ChordSymbol.metrics.global.upperKerningText; + } + static isSuperscript(block) { + return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT; + } + static isSubscript(block) { + return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT; + } + static get minPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + /** + * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks. + * Estimate how many lines above/below the staff we need. + */ + static format(symbols, state) { + var _a; + if (!symbols || symbols.length === 0) + return false; + let width = 0; + let nonSuperWidth = 0; + let leftWidth = 0; + let rightWidth = 0; + let maxLeftGlyphWidth = 0; + let maxRightGlyphWidth = 0; + for (const symbol of symbols) { + const fontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size); + const fontAdj = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(fontSize, 0.05); + const glyphAdj = fontAdj * 2; + const note = symbol.checkAttachedNote(); + let symbolWidth = 0; + let lineSpaces = 1; + let vAlign = false; + for (let j = 0; j < symbol.symbolBlocks.length; ++j) { + const block = symbol.symbolBlocks[j]; + const sup = ChordSymbol.isSuperscript(block); + const sub = ChordSymbol.isSubscript(block); + const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1; + const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale; + // If there are super/subscripts, they extend beyond the line so + // assume they take up 2 lines + if (sup || sub) { + lineSpaces = 2; + } + // If there is a symbol-specific offset, add it but consider font + // size since font and glyphs will be interspersed. + const fontSize = symbol.textFormatter.fontSizeInPixels; + const superSubFontSize = fontSize * superSubScale; + if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) { + block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize; + block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize; + block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize; + block.glyph.scale = block.glyph.scale * adj; + } + else if (block.symbolType === SymbolTypes.TEXT) { + block.width = block.width * superSubFontSize; + block.yShift += symbol.getYOffsetForText(block.text) * adj; + } + if (block.symbolType === SymbolTypes.GLYPH && + block.glyph !== undefined && + block.glyph.code === ChordSymbol.glyphs.over.code) { + lineSpaces = 2; + } + block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale; + // If a subscript immediately follows a superscript block, try to + // overlay them. + if (sup && j > 0) { + const prev = symbol.symbolBlocks[j - 1]; + if (!ChordSymbol.isSuperscript(prev)) { + nonSuperWidth = width; + } + } + if (sub && nonSuperWidth > 0) { + vAlign = true; + // slide the symbol over so it lines up with superscript + block.xShift = block.xShift + (nonSuperWidth - width); + width = nonSuperWidth; + nonSuperWidth = 0; + // If we have vertically lined up, turn kerning off. + symbol.setEnableKerning(false); + } + if (!sup && !sub) { + nonSuperWidth = 0; + } + block.vAlign = vAlign; + width += block.width; + symbolWidth = width; + } + // make kerning adjustments after computing super/subscripts + symbol.updateKerningAdjustments(); + symbol.updateOverBarAdjustments(); + if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) { + symbol.setTextLine(state.top_text_line); + state.top_text_line += lineSpaces; + } + else { + symbol.setTextLine(state.text_line + 1); + state.text_line += lineSpaces + 1; + } + if (symbol.getReportWidth() && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) { + const glyphWidth = note.getGlyphProps().getWidth(); + if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) { + maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth); + leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding; + } + else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) { + maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth); + rightWidth = Math.max(rightWidth, symbolWidth); + } + else { + leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding; + rightWidth = Math.max(rightWidth, symbolWidth / 2); + maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth); + maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth); + } + } + width = 0; // reset symbol width + } + const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0)); + const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0)); + state.left_shift += leftOverlap; + state.right_shift += rightOverlap; + return true; + } + constructor() { + super(); + this.symbolBlocks = []; + this.horizontal = ChordSymbolHorizontalJustify.LEFT; + this.vertical = ChordSymbolVerticalJustify.TOP; + this.useKerning = true; + this.reportWidth = true; + this.resetFont(); + } + /** + * Default text font. + * Choose a font family that works well with the current music engraving font. + * @override `Element.TEXT_FONT`. + */ + static get TEXT_FONT() { + let family = 'Roboto Slab, Times, serif'; + if (_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getName() === 'Petaluma') { + // Fixes Issue #1180 + family = 'PetalumaScript, Arial, sans-serif'; + } + return { + family, + size: 12, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, + }; + } + /** + * The offset is specified in `em`. Scale this value by the font size in pixels. + */ + get superscriptOffset() { + return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels; + } + get subscriptOffset() { + return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels; + } + setReportWidth(value) { + this.reportWidth = value; + return this; + } + getReportWidth() { + return this.reportWidth; + } + updateOverBarAdjustments() { + const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash'); + if (barIndex < 0) { + return; + } + const bar = this.symbolBlocks[barIndex]; + const xoff = bar.width / 4; + const yoff = 0.25 * this.textFormatter.fontSizeInPixels; + let symIndex = 0; + for (symIndex === 0; symIndex < barIndex; ++symIndex) { + const symbol = this.symbolBlocks[symIndex]; + symbol.xShift = symbol.xShift + xoff; + symbol.yShift = symbol.yShift - yoff; + } + for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) { + const symbol = this.symbolBlocks[symIndex]; + symbol.xShift = symbol.xShift - xoff; + symbol.yShift = symbol.yShift + yoff; + } + } + updateKerningAdjustments() { + let accum = 0; + for (let j = 0; j < this.symbolBlocks.length; ++j) { + const symbol = this.symbolBlocks[j]; + accum += this.getKerningAdjustment(j); + symbol.xShift += accum; + } + } + /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */ + getKerningAdjustment(j) { + if (!this.useKerning) { + return 0; + } + const currSymbol = this.symbolBlocks[j]; + const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined; + let adjustment = 0; + // Move things into the '/' over bar + if (currSymbol.symbolType === SymbolTypes.GLYPH && + currSymbol.glyph !== undefined && + currSymbol.glyph.code === ChordSymbol.glyphs.over.code) { + adjustment += currSymbol.glyph.metrics.x_shift; + } + if (prevSymbol !== undefined && + prevSymbol.symbolType === SymbolTypes.GLYPH && + prevSymbol.glyph !== undefined && + prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) { + adjustment += prevSymbol.glyph.metrics.x_shift; + } + // For superscripts that follow a letter without much top part, move it to the left slightly + let preKernUpper = false; + let preKernLower = false; + if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) { + preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]); + preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]); + } + const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels; + // TODO: adjust kern for font size. + // Where should this constant live? + if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) { + adjustment += kerningOffsetPixels; + } + if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) { + if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') { + adjustment += kerningOffsetPixels / 2; + } + if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) { + adjustment += kerningOffsetPixels / 2; + } + } + return adjustment; + } + /** + * ChordSymbol allows multiple blocks so we can mix glyphs and font text. + * Each block can have its own vertical orientation. + */ + // eslint-disable-next-line + getSymbolBlock(params = {}) { + var _a, _b, _c; + const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT; + const symbolBlock = { + text: (_b = params.text) !== null && _b !== void 0 ? _b : '', + symbolType, + symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE, + xShift: 0, + yShift: 0, + vAlign: false, + width: 0, + }; + // Note: symbol widths are resolution and font-independent. + // We convert to pixel values when we know what the font is. + if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') { + const glyphArgs = ChordSymbol.glyphs[params.glyph]; + const glyphPoints = 20; + symbolBlock.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' }); + } + else if (symbolType === SymbolTypes.TEXT) { + symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text); + } + else if (symbolType === SymbolTypes.LINE) { + symbolBlock.width = params.width; + } + return symbolBlock; + } + /** Add a symbol to this chord, could be text, glyph or line. */ + // eslint-disable-next-line + addSymbolBlock(parameters) { + this.symbolBlocks.push(this.getSymbolBlock(parameters)); + return this; + } + // ### Convenience functions for creating different types of chord symbol parts. + /** Add a text block. */ + // eslint-disable-next-line + addText(text, parameters = {}) { + const symbolType = SymbolTypes.TEXT; + return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType })); + } + /** Add a text block with superscript modifier. */ + addTextSuperscript(text) { + const symbolType = SymbolTypes.TEXT; + const symbolModifier = SymbolModifiers.SUPERSCRIPT; + return this.addSymbolBlock({ text, symbolType, symbolModifier }); + } + /** Add a text block with subscript modifier. */ + addTextSubscript(text) { + const symbolType = SymbolTypes.TEXT; + const symbolModifier = SymbolModifiers.SUBSCRIPT; + return this.addSymbolBlock({ text, symbolType, symbolModifier }); + } + /** Add a glyph block with superscript modifier. */ + addGlyphSuperscript(glyph) { + const symbolType = SymbolTypes.GLYPH; + const symbolModifier = SymbolModifiers.SUPERSCRIPT; + return this.addSymbolBlock({ glyph, symbolType, symbolModifier }); + } + /** Add a glyph block. */ + // eslint-disable-next-line + addGlyph(glyph, params = {}) { + const symbolType = SymbolTypes.GLYPH; + return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType })); + } + /** + * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font. + * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else. + */ + // eslint-disable-next-line + addGlyphOrText(text, params = {}) { + let str = ''; + for (let i = 0; i < text.length; ++i) { + const char = text[i]; + if (ChordSymbol.glyphs[char]) { + if (str.length > 0) { + this.addText(str, params); + str = ''; + } + this.addGlyph(char, params); + } + else { + // Collect consecutive characters with no glyphs. + str += char; + } + } + if (str.length > 0) { + this.addText(str, params); + } + return this; + } + /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */ + // eslint-disable-next-line + addLine(width, params = {}) { + const symbolType = SymbolTypes.LINE; + return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width })); + } + /** + * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`). + * + * @param f is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). + * @param style is a string (e.g., 'italic', 'normal'). + * + * @override See: Element. + */ + setFont(f, size, weight, style) { + super.setFont(f, size, weight, style); + this.textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont); + return this; + } + setEnableKerning(val) { + this.useKerning = val; + return this; + } + /** Set vertical position of text (above or below stave). */ + setVertical(vj) { + this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj; + return this; + } + getVertical() { + return this.vertical; + } + /** Set horizontal justification. */ + setHorizontal(hj) { + this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj; + return this; + } + getHorizontal() { + return this.horizontal; + } + getWidth() { + let width = 0; + this.symbolBlocks.forEach((symbol) => { + width += symbol.vAlign ? 0 : symbol.width; + }); + return width; + } + getYOffsetForText(text) { + var _a; + let acc = 0; + let i = 0; + for (i = 0; i < text.length; ++i) { + const metrics = this.textFormatter.getGlyphMetrics(text[i]); + if (metrics) { + const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0; + acc = yMax < acc ? yMax : acc; + } + } + const resolution = this.textFormatter.getResolution(); + return i > 0 ? -1 * (acc / resolution) : 0; + } + /** Render text and glyphs above/below the note. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + // We're changing context parameters. Save current state. + ctx.save(); + this.applyStyle(); + ctx.openGroup('chordsymbol', this.getAttribute('id')); + const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE, this.index); + ctx.setFont(this.textFont); + let y; + // The position of the text varies based on whether or not the note + // has a stem. + const hasStem = note.hasStem(); + const stave = note.checkStave(); + if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) { + // HACK: We need to compensate for the text's height since its origin is bottom-right. + y = stave.getYForBottomText(this.text_line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK); + if (hasStem) { + const stem_ext = note.checkStem().getExtents(); + const spacing = stave.getSpacingBetweenLines(); + const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY; + y = Math.max(y, stem_base + spacing * (this.text_line + 2)); + } + } + else { + // (this.vertical === VerticalJustify.TOP) + const topY = Math.min(...note.getYs()); + y = Math.min(stave.getYForTopText(this.text_line), topY - 10); + if (hasStem) { + const stem_ext = note.checkStem().getExtents(); + const spacing = stave.getSpacingBetweenLines(); + y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line); + } + } + let x = start.x; + if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) { + x = start.x; + } + else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) { + x = start.x + this.getWidth(); + } + else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) { + x = start.x - this.getWidth() / 2; + } + else { + // HorizontalJustify.CENTER_STEM + x = note.getStemX() - this.getWidth() / 2; + } + L('Rendering ChordSymbol: ', this.textFormatter, x, y); + this.symbolBlocks.forEach((symbol) => { + const isSuper = ChordSymbol.isSuperscript(symbol); + const isSub = ChordSymbol.isSubscript(symbol); + let curY = y; + L('shift was ', symbol.xShift, symbol.yShift); + L('curY pre sub ', curY); + if (isSuper) { + curY += this.superscriptOffset; + } + if (isSub) { + curY += this.subscriptOffset; + } + L('curY sup/sub ', curY); + if (symbol.symbolType === SymbolTypes.TEXT) { + if (isSuper || isSub) { + ctx.save(); + if (this.textFont) { + const { family, size, weight, style } = this.textFont; + const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, ChordSymbol.superSubRatio); + ctx.setFont(family, smallerFontSize, weight, style); + } + } + // TODO??? + // We estimate the text width, fill it in with the empirical value so the formatting is even. + // const textDim = ctx.measureText(symbol.text); + // symbol.width = textDim.width; + L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift); + ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift); + if (isSuper || isSub) { + ctx.restore(); + } + } + else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) { + curY += symbol.yShift; + L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY); + symbol.glyph.render(ctx, x + symbol.xShift, curY); + } + else if (symbol.symbolType === SymbolTypes.LINE) { + L('Rendering Line : ', symbol.width, x, curY); + ctx.beginPath(); + ctx.setLineWidth(1); // ? + ctx.moveTo(x, y); + ctx.lineTo(x + symbol.width, curY); + ctx.stroke(); + } + x += symbol.width; + if (symbol.vAlign) { + x += symbol.xShift; + } + }); + ctx.closeGroup(); + this.restoreStyle(); + ctx.restore(); + } +} +ChordSymbol.DEBUG = false; +// Chord symbols can be positioned and justified relative to the note. +ChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify; +ChordSymbol.HorizontalJustifyString = { + left: ChordSymbolHorizontalJustify.LEFT, + right: ChordSymbolHorizontalJustify.RIGHT, + center: ChordSymbolHorizontalJustify.CENTER, + centerStem: ChordSymbolHorizontalJustify.CENTER_STEM, +}; +ChordSymbol.VerticalJustify = ChordSymbolVerticalJustify; +ChordSymbol.VerticalJustifyString = { + top: ChordSymbolVerticalJustify.TOP, + above: ChordSymbolVerticalJustify.TOP, + below: ChordSymbolVerticalJustify.BOTTOM, + bottom: ChordSymbolVerticalJustify.BOTTOM, +}; +// Glyph data +ChordSymbol.glyphs = { + diminished: { + code: 'csymDiminished', + }, + dim: { + code: 'csymDiminished', + }, + halfDiminished: { + code: 'csymHalfDiminished', + }, + '+': { + code: 'csymAugmented', + }, + augmented: { + code: 'csymAugmented', + }, + majorSeventh: { + code: 'csymMajorSeventh', + }, + minor: { + code: 'csymMinor', + }, + '-': { + code: 'csymMinor', + }, + '(': { + code: 'csymParensLeftTall', + }, + leftParen: { + code: 'csymParensLeftTall', + }, + ')': { + code: 'csymParensRightTall', + }, + rightParen: { + code: 'csymParensRightTall', + }, + leftBracket: { + code: 'csymBracketLeftTall', + }, + rightBracket: { + code: 'csymBracketRightTall', + }, + leftParenTall: { + code: 'csymParensLeftVeryTall', + }, + rightParenTall: { + code: 'csymParensRightVeryTall', + }, + '/': { + code: 'csymDiagonalArrangementSlash', + }, + over: { + code: 'csymDiagonalArrangementSlash', + }, + '#': { + code: 'accidentalSharp', + }, + b: { + code: 'accidentalFlat', + }, +}; +ChordSymbol.symbolTypes = SymbolTypes; +ChordSymbol.symbolModifiers = SymbolModifiers; +/** Currently unused. */ +ChordSymbol.noFormat = false; + + + +/***/ }), + +/***/ "./src/clef.ts": +/*!*********************!*\ + !*** ./src/clef.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Clef": () => (/* binding */ Clef) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013. +// Co-author: Benjamin W. Bohl +// MIT License + + + + + +// eslint-disable-next-line +function L(...args) { + if (Clef.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_4__.log)('Vex.Flow.Clef', args); +} +/** + * Clef implements various types of clefs that can be rendered on a stave. + * + * See `tests/clef_tests.ts` for usage examples. + */ +class Clef extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Clef; + } + /** + * Every clef name is associated with a glyph code from the font file + * and a default stave line number. + */ + static get types() { + return { + treble: { + code: 'gClef', + line: 3, + }, + bass: { + code: 'fClef', + line: 1, + }, + alto: { + code: 'cClef', + line: 2, + }, + tenor: { + code: 'cClef', + line: 1, + }, + percussion: { + code: 'unpitchedPercussionClef1', + line: 2, + }, + soprano: { + code: 'cClef', + line: 4, + }, + 'mezzo-soprano': { + code: 'cClef', + line: 3, + }, + 'baritone-c': { + code: 'cClef', + line: 0, + }, + 'baritone-f': { + code: 'fClef', + line: 2, + }, + subbass: { + code: 'fClef', + line: 0, + }, + french: { + code: 'gClef', + line: 4, + }, + tab: { + code: '6stringTabClef', + line: 2.5, + }, + }; + } + static get annotationSmufl() { + return { + '8va': 'timeSig8', + '8vb': 'timeSig8', + }; + } + /** Create a new clef. */ + constructor(type, size, annotation) { + super(); + /** + * The attribute `clef` must be a key from + * `Clef.types` + */ + this.clef = Clef.types['treble']; + this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN); + this.setType(type, size, annotation); + this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`)); + L('Creating clef:', type); + } + /** Set clef type, size and annotation. */ + setType(type, size, annotation) { + this.type = type; + this.clef = Clef.types[type]; + if (size === undefined) { + this.size = 'default'; + } + else { + this.size = size; + } + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont(); + // If an annotation, such as 8va, is specified, add it to the Clef object. + if (annotation !== undefined) { + const code = Clef.annotationSmufl[annotation]; + const point = (Clef.getPoint(this.size) / 5) * 3; + const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`); + const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`); + this.annotation = { code, point, line, x_shift }; + this.attachment = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.annotation.code, this.annotation.point); + this.attachment.metrics.x_max = 0; + this.attachment.setXShift(this.annotation.x_shift); + } + else { + this.annotation = undefined; + } + return this; + } + /** Get clef width. */ + getWidth() { + if (this.type === 'tab') { + (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'ClefError', "Can't get width without stave."); + } + return this.width; + } + /** Get point for clefs. */ + static getPoint(size) { + // for sizes other than 'default', clef is 2/3 of the default value + return size == 'default' ? _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE : (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE / 3) * 2; + } + /** Set associated stave. */ + setStave(stave) { + this.stave = stave; + return this; + } + /** Render clef. */ + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('clef', this.getAttribute('id')); + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, { + category: `clef_${this.size}`, + }); + if (this.annotation !== undefined && this.attachment !== undefined) { + this.placeGlyphOnLine(this.attachment, stave, this.annotation.line); + this.attachment.setStave(stave); + this.attachment.setContext(ctx); + this.attachment.renderToStave(this.x); + } + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} +/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */ +Clef.DEBUG = false; + + + +/***/ }), + +/***/ "./src/clefnote.ts": +/*!*************************!*\ + !*** ./src/clefnote.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ClefNote": () => (/* binding */ ClefNote) +/* harmony export */ }); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Taehoon Moon 2014 +// MIT License + + + + +/** ClefNote implements clef annotations in measures. */ +class ClefNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.ClefNote; + } + constructor(type, size, annotation) { + super({ duration: 'b' }); + this.type = type; + const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation); + this.clef = clef.clef; + this.annotation = clef.annotation; + this.size = size === undefined ? 'default' : size; + this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), `clefNote_${this.size}`)); + // Note properties + this.ignore_ticks = true; + } + /** Set clef type, size and annotation. */ + setType(type, size, annotation) { + this.type = type; + this.size = size; + const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation); + this.clef = clef.clef; + this.annotation = clef.annotation; + this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), `clefNote_${this.size}`)); + return this; + } + /** Get associated clef. */ + getClef() { + return this.clef; + } + preFormat() { + this.preFormatted = true; + return this; + } + /** Render clef note. */ + draw() { + const stave = this.checkStave(); + const ctx = this.checkContext(); + this.setRendered(); + const abs_x = this.getAbsoluteX(); + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), this.clef.code, { + category: `clefNote_${this.size}`, + }); + // If the Vex.Flow.Clef has an annotation, such as 8va, draw it. + if (this.annotation !== undefined) { + const attachment = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.annotation.code, this.annotation.point); + attachment.setContext(ctx); + attachment.setStave(stave); + attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs()); + attachment.setXShift(this.annotation.x_shift); + attachment.renderToStave(abs_x); + } + } +} + + +/***/ }), + +/***/ "./src/crescendo.ts": +/*!**************************!*\ + !*** ./src/crescendo.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Crescendo": () => (/* binding */ Crescendo) +/* harmony export */ }); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// This file implements the `Crescendo` object which draws crescendos and +// decrescendo dynamics markings. A `Crescendo` is initialized with a +// duration and formatted as part of a `Voice` like any other `Note` +// type in VexFlow. This object would most likely be formatted in a Voice +// with `TextNotes` - which are used to represent other dynamics markings. + + + + +// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (Crescendo.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Crescendo', args); +} +// Private helper to draw the hairpin +function renderHairpin(ctx, params) { + const begin_x = params.begin_x; + const end_x = params.end_x; + const y = params.y; + const half_height = params.height / 2; + ctx.beginPath(); + if (params.reverse) { + ctx.moveTo(begin_x, y - half_height); + ctx.lineTo(end_x, y); + ctx.lineTo(begin_x, y + half_height); + } + else { + ctx.moveTo(end_x, y - half_height); + ctx.lineTo(begin_x, y); + ctx.lineTo(end_x, y + half_height); + } + ctx.stroke(); + ctx.closePath(); +} +class Crescendo extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { + /** Crescendo category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Crescendo; + } + // Initialize the crescendo's properties + constructor(noteStruct) { + super(noteStruct); + this.options = { + // Extensions to the length of the crescendo on either side + extend_left: 0, + extend_right: 0, + // Vertical shift + y_shift: 0, + }; + // Whether the object is a decrescendo + this.decrescendo = false; + // The staff line to be placed on + this.line = noteStruct.line || 0; + // The height at the open end of the cresc/decresc + this.height = 15; + } + // Set the line to center the element on + setLine(line) { + this.line = line; + return this; + } + // Set the full height at the open end + setHeight(height) { + this.height = height; + return this; + } + // Set whether the sign should be a descresendo by passing a bool + // to `decresc` + setDecrescendo(decresc) { + this.decrescendo = decresc; + return this; + } + // Preformat the note + preFormat() { + this.preFormatted = true; + return this; + } + // Render the Crescendo object onto the canvas + draw() { + const ctx = this.checkContext(); + const stave = this.checkStave(); + this.setRendered(); + const tick_context = this.getTickContext(); + const next_context = _tickcontext__WEBPACK_IMPORTED_MODULE_1__.TickContext.getNextContext(tick_context); + const begin_x = this.getAbsoluteX(); + const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth(); + const y = stave.getYForLine(this.line + -3) + 1; + L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x); + renderHairpin(ctx, { + begin_x: begin_x - this.options.extend_left, + end_x: end_x + this.options.extend_right, + y: y + this.options.y_shift, + height: this.height, + reverse: this.decrescendo, + }); + } +} +Crescendo.DEBUG = false; + + + +/***/ }), + +/***/ "./src/curve.ts": +/*!**********************!*\ + !*** ./src/curve.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Curve": () => (/* binding */ Curve), +/* harmony export */ "CurvePosition": () => (/* binding */ CurvePosition) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// VexFlow - Music Engraving for HTML5 +// Copyright Mohit Muthanna 2010 +// +// This class implements curves (for slurs) + + + +var CurvePosition; +(function (CurvePosition) { + CurvePosition[CurvePosition["NEAR_HEAD"] = 1] = "NEAR_HEAD"; + CurvePosition[CurvePosition["NEAR_TOP"] = 2] = "NEAR_TOP"; +})(CurvePosition || (CurvePosition = {})); +class Curve extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Curve; + } + static get Position() { + return CurvePosition; + } + static get PositionString() { + return { + nearHead: CurvePosition.NEAR_HEAD, + nearTop: CurvePosition.NEAR_TOP, + }; + } + // from: Start note + // to: End note + // options: + // cps: List of control points + // x_shift: pixels to shift + // y_shift: pixels to shift + constructor(from, to, options) { + super(); + this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [ + { x: 0, y: 10 }, + { x: 0, y: 10 }, + ] }, options); + this.from = from; + this.to = to; + } + setNotes(from, to) { + if (!from && !to) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.'); + } + this.from = from; + this.to = to; + return this; + } + /** + * @return {boolean} Returns true if this is a partial bar. + */ + isPartial() { + return !this.from || !this.to; + } + renderCurve(params) { + const ctx = this.checkContext(); + const x_shift = this.render_options.x_shift; + const y_shift = this.render_options.y_shift * params.direction; + const first_x = params.first_x + x_shift; + const first_y = params.first_y + y_shift; + const last_x = params.last_x - x_shift; + const last_y = params.last_y + y_shift; + const thickness = this.render_options.thickness; + const cps = this.render_options.cps; + const { x: cp0x, y: cp0y } = cps[0]; + const { x: cp1x, y: cp1y } = cps[1]; + const cp_spacing = (last_x - first_x) / (cps.length + 2); + ctx.beginPath(); + ctx.moveTo(first_x, first_y); + ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y); + ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y); + ctx.stroke(); + ctx.closePath(); + ctx.fill(); + } + draw() { + this.checkContext(); + this.setRendered(); + const first_note = this.from; + const last_note = this.to; + let first_x; + let last_x; + let first_y; + let last_y; + let stem_direction = 0; + let metric = 'baseY'; + let end_metric = 'baseY'; + function getPosition(position) { + return typeof position === 'string' ? Curve.PositionString[position] : position; + } + const position = getPosition(this.render_options.position); + const position_end = getPosition(this.render_options.position_end); + if (position === CurvePosition.NEAR_TOP) { + metric = 'topY'; + end_metric = 'topY'; + } + if (position_end === CurvePosition.NEAR_HEAD) { + end_metric = 'baseY'; + } + else if (position_end === CurvePosition.NEAR_TOP) { + end_metric = 'topY'; + } + if (first_note) { + first_x = first_note.getTieRightX(); + stem_direction = first_note.getStemDirection(); + first_y = first_note.getStemExtents()[metric]; + } + else { + const stave = last_note.checkStave(); + first_x = stave.getTieStartX(); + first_y = last_note.getStemExtents()[metric]; + } + if (last_note) { + last_x = last_note.getTieLeftX(); + stem_direction = last_note.getStemDirection(); + last_y = last_note.getStemExtents()[end_metric]; + } + else { + const stave = first_note.checkStave(); + last_x = stave.getTieEndX(); + last_y = first_note.getStemExtents()[end_metric]; + } + this.renderCurve({ + first_x, + last_x, + first_y, + last_y, + direction: stem_direction * (this.render_options.invert === true ? -1 : 1), + }); + return true; + } +} + + +/***/ }), + +/***/ "./src/dot.ts": +/*!********************!*\ + !*** ./src/dot.ts ***! + \********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Dot": () => (/* binding */ Dot) +/* harmony export */ }); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// VexFlow - Music Engraving for HTML5 +// Copyright Mohit Muthanna 2010 +// +// This class implements dot modifiers for notes. + + + +class Dot extends _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Dot; + } + /** Returns the dots associated to a Note. */ + static getDots(note) { + return note.getModifiersByType(Dot.CATEGORY); + } + /** Add a dot on the specified keys to the notes. */ + static buildAndAttach(notes, options) { + for (const note of notes) { + if (options === null || options === void 0 ? void 0 : options.all) { + for (let i = 0; i < note.keys.length; i++) { + const dot = new Dot(); + dot.setDotShiftY(note.glyphProps.dot_shiftY); + note.addModifier(dot, i); + } + } + else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) { + const dot = new Dot(); + dot.setDotShiftY(note.glyphProps.dot_shiftY); + note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index); + } + else { + const dot = new Dot(); + dot.setDotShiftY(note.glyphProps.dot_shiftY); + note.addModifier(dot, 0); + } + } + } + // Arrange dots inside a ModifierContext. + static format(dots, state) { + const right_shift = state.right_shift; + const dot_spacing = 1; + if (!dots || dots.length === 0) + return false; + const dot_list = []; + const max_shift_map = {}; + for (let i = 0; i < dots.length; ++i) { + const dot = dots[i]; + const note = dot.getNote(); + let props; + let shift; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isStaveNote)(note)) { + const index = dot.checkIndex(); + props = note.getKeyProps()[index]; + // consider right displaced head with no previous modifier + shift = note.getFirstDotPx(); + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) { + props = { line: 0.5 }; // Shim key props for dot placement + shift = right_shift; + } + else { + // note object is not StaveNote or TabNote. + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('Internal', 'Unexpected instance.'); + } + const note_id = note.getAttribute('id'); + dot_list.push({ line: props.line, note, note_id, dot }); + max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift); + } + // Sort dots by line number. + dot_list.sort((a, b) => b.line - a.line); + let dot_shift = right_shift; + let x_width = 0; + let last_line = null; + let last_note = null; + let prev_dotted_space = null; + let half_shiftY = 0; + for (let i = 0; i < dot_list.length; ++i) { + const { dot, note, note_id, line } = dot_list[i]; + // Reset the position of the dot every line. + if (line !== last_line || note !== last_note) { + dot_shift = max_shift_map[note_id]; + } + if (!note.isRest() && line !== last_line) { + if (Math.abs(line % 1) === 0.5) { + // note is on a space, so no dot shift + half_shiftY = 0; + } + else { + // note is on a line, so shift dot to space above the line + half_shiftY = 0.5; + if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) { + // previous note on a space, so shift dot to space below the line + half_shiftY = -0.5; + } + else if (line + half_shiftY === prev_dotted_space) { + // previous space is dotted, so shift dot to space below the line + half_shiftY = -0.5; + } + } + } + // convert half_shiftY to a multiplier for dots.draw() + if (note.isRest()) { + dot.dot_shiftY += -half_shiftY; + } + else { + dot.dot_shiftY = -half_shiftY; + } + prev_dotted_space = line + half_shiftY; + dot.setXShift(dot_shift); + dot_shift += dot.getWidth() + dot_spacing; // spacing + x_width = dot_shift > x_width ? dot_shift : x_width; + last_line = line; + last_note = note; + } + // Update state. + state.right_shift += x_width; + return true; + } + constructor() { + super(); + this.position = _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier.Position.RIGHT; + this.radius = 2; + this.setWidth(5); + this.dot_shiftY = 0; + } + setNote(note) { + this.note = note; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isGraceNote)(note)) { + this.radius *= 0.5; + this.setWidth(3); + } + return this; + } + setDotShiftY(y) { + this.dot_shiftY = y; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const stave = note.checkStave(); + const lineSpace = stave.getSpacingBetweenLines(); + const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true }); + // Set the starting y coordinate to the base of the stem for TabNotes. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) { + start.y = note.getStemExtents().baseY; + } + const x = start.x + this.x_shift + this.width - this.radius; + const y = start.y + this.y_shift + this.dot_shiftY * lineSpace; + ctx.beginPath(); + ctx.arc(x, y, this.radius, 0, Math.PI * 2, false); + ctx.fill(); + } +} + + +/***/ }), + +/***/ "./src/easyscore.ts": +/*!**************************!*\ + !*** ./src/easyscore.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Builder": () => (/* binding */ Builder), +/* harmony export */ "EasyScore": () => (/* binding */ EasyScore), +/* harmony export */ "EasyScoreGrammar": () => (/* binding */ EasyScoreGrammar), +/* harmony export */ "Piece": () => (/* binding */ Piece) +/* harmony export */ }); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./parser */ "./src/parser.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (EasyScore.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.EasyScore', args); +} +class EasyScoreGrammar { + constructor(builder) { + this.builder = builder; + } + begin() { + return this.LINE; + } + LINE() { + return { + expect: [this.PIECE, this.PIECES, this.EOL], + }; + } + PIECE() { + return { + expect: [this.CHORDORNOTE, this.PARAMS], + run: () => this.builder.commitPiece(), + }; + } + PIECES() { + return { + expect: [this.COMMA, this.PIECE], + zeroOrMore: true, + }; + } + PARAMS() { + return { + expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS], + }; + } + CHORDORNOTE() { + return { + expect: [this.CHORD, this.SINGLENOTE], + or: true, + }; + } + CHORD() { + return { + expect: [this.LPAREN, this.NOTES, this.RPAREN], + // eslint-disable-next-line + run: (state) => this.builder.addChord(state.matches[1]), + }; + } + NOTES() { + return { + expect: [this.NOTE], + oneOrMore: true, + }; + } + NOTE() { + return { + expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE], + }; + } + SINGLENOTE() { + return { + expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE], + run: (state) => { + // eslint-disable-next-line + const s = state; + this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]); + }, + }; + } + ACCIDENTAL() { + return { + expect: [this.MICROTONES, this.ACCIDENTALS], + maybe: true, + or: true, + }; + } + DOTS() { + return { + expect: [this.DOT], + zeroOrMore: true, + // eslint-disable-next-line + run: (state) => this.builder.setNoteDots(state.matches), + }; + } + TYPE() { + return { + expect: [this.SLASH, this.MAYBESLASH, this.TYPES], + maybe: true, + // eslint-disable-next-line + run: (state) => this.builder.setNoteType(state.matches[2]), + }; + } + DURATION() { + return { + expect: [this.SLASH, this.DURATIONS], + maybe: true, + // eslint-disable-next-line + run: (state) => this.builder.setNoteDuration(state.matches[1]), + }; + } + OPTS() { + return { + expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET], + maybe: true, + }; + } + KEYVALS() { + return { + expect: [this.COMMA, this.KEYVAL], + zeroOrMore: true, + }; + } + KEYVAL() { + const unquote = (str) => str.slice(1, -1); + return { + expect: [this.KEY, this.EQUALS, this.VAL], + // eslint-disable-next-line + run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])), + }; + } + VAL() { + return { + expect: [this.SVAL, this.DVAL], + or: true, + }; + } + KEY() { + return { token: '[a-zA-Z][a-zA-Z0-9]*' }; + } + DVAL() { + return { token: '["][^"]*["]' }; + } + SVAL() { + return { token: "['][^']*[']" }; + } + NOTENAME() { + return { token: '[a-gA-G]' }; + } + OCTAVE() { + return { token: '[0-9]+' }; + } + ACCIDENTALS() { + return { token: 'bb|b|##|#|n' }; + } + MICROTONES() { + return { token: 'bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o' }; + } + DURATIONS() { + return { token: '[0-9whq]+' }; + } + TYPES() { + return { token: '[rRsSmMhHgG]' }; + } + LPAREN() { + return { token: '[(]' }; + } + RPAREN() { + return { token: '[)]' }; + } + COMMA() { + return { token: '[,]' }; + } + DOT() { + return { token: '[.]' }; + } + SLASH() { + return { token: '[/]' }; + } + MAYBESLASH() { + return { token: '[/]?' }; + } + EQUALS() { + return { token: '[=]' }; + } + LBRACKET() { + return { token: '\\[' }; + } + RBRACKET() { + return { token: '\\]' }; + } + EOL() { + return { token: '$' }; + } +} +class Piece { + constructor(duration) { + this.chord = []; + this.dots = 0; + this.options = {}; + this.duration = duration; + } +} +class Builder { + constructor(factory) { + this.commitHooks = []; + this.factory = factory; + this.reset(); + } + reset(options) { + this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options); + this.elements = { notes: [], accidentals: [] }; + this.rollingDuration = '8'; + this.resetPiece(); + } + getFactory() { + return this.factory; + } + getElements() { + return this.elements; + } + addCommitHook(commitHook) { + this.commitHooks.push(commitHook); + } + resetPiece() { + L('resetPiece'); + this.piece = new Piece(this.rollingDuration); + } + setNoteDots(dots) { + L('setNoteDots:', dots); + if (dots) + this.piece.dots = dots.length; + } + setNoteDuration(duration) { + L('setNoteDuration:', duration); + this.rollingDuration = this.piece.duration = duration || this.rollingDuration; + } + setNoteType(type) { + L('setNoteType:', type); + if (type) + this.piece.type = type; + } + addNoteOption(key, value) { + L('addNoteOption: key:', key, 'value:', value); + this.piece.options[key] = value; + } + addNote(key, accid, octave) { + L('addNote:', key, accid, octave); + this.piece.chord.push({ + key: key, + accid, + octave, + }); + } + addSingleNote(key, accid, octave) { + L('addSingleNote:', key, accid, octave); + this.addNote(key, accid, octave); + } + // notes is an array with 3 entries + addChord(notes) { + L('startChord'); + if (typeof notes[0] !== 'object') { + this.addSingleNote(notes[0]); + } + else { + notes.forEach((n) => { + if (n) + this.addNote(...n); // n => [string, string | null, string] + }); + } + L('endChord'); + } + commitPiece() { + L('commitPiece'); + const { factory } = this; + if (!factory) + return; + const options = Object.assign(Object.assign({}, this.options), this.piece.options); + // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed. + // e.g., auto | up | down + const stem = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase(); + // e.g., treble | bass + const clef = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase(); + const { chord, duration, dots, type } = this.piece; + // Create a string[] that will be assigned to the .keys property of the StaveNote. + // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave} + // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included. + const standardAccidentals = _music__WEBPACK_IMPORTED_MODULE_3__.Music.accidentals; + const keys = chord.map((notePiece) => { + var _a; + return notePiece.key + + (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') + + '/' + + notePiece.octave; + }); + const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase. + // Build a GhostNote or StaveNote using the information we gathered. + const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g' + ? factory.GhostNote({ duration, dots }) + : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem }); + if (!auto_stem) + note.setStemDirection(stem === 'up' ? _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.DOWN); + // Attach accidentals. + const accidentals = []; + chord.forEach((notePiece, index) => { + const accid = notePiece.accid; + if (typeof accid === 'string') { + const accidental = factory.Accidental({ type: accid }); + note.addModifier(accidental, index); + accidentals.push(accidental); + } + else { + accidentals.push(undefined); + } + }); + // Attach dots. + for (let i = 0; i < dots; i++) + _dot__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([note], { all: true }); + this.commitHooks.forEach((commitHook) => commitHook(options, note, this)); + this.elements.notes.push(note); + this.elements.accidentals.push(accidentals); + this.resetPiece(); + } +} +/** + * Commit hook used by EasyScore.setOptions(). + */ +function setId(options, note) { + if (options.id === undefined) + return; + note.setAttribute('id', options.id); +} +// Used by setClass() below. +const commaSeparatedRegex = /\s*,\s*/; +/** + * Commit hook used by EasyScore.setOptions(). + */ +function setClass(options, note) { + if (options.class === undefined) + return; + options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className)); +} +/** + * EasyScore implements a parser for a simple language to generate VexFlow objects. + */ +class EasyScore { + constructor(options = {}) { + this.defaults = { + clef: 'treble', + time: '4/4', + stem: 'auto', + }; + this.setOptions(options); + } + /** + * Set the score defaults. + * clef must be set appropriately to avoid errors when adding Staves. + * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types} + * @param defaults.time default time signature ( 4/4 | 9/8 ...) + * @param defaults.stem default stem arrangement (auto | up | down) + * @returns this + */ + set(defaults) { + this.defaults = Object.assign(Object.assign({}, this.defaults), defaults); + return this; + } + /** + * @param options.factory is required. + * @returns this + */ + setOptions(options) { + var _a, _b; + // eslint-disable-next-line + const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore(). + const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory); + this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, _articulation__WEBPACK_IMPORTED_MODULE_0__.Articulation.easyScoreHook, _frethandfinger__WEBPACK_IMPORTED_MODULE_2__.FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory, + builder }); + this.factory = factory; + this.builder = builder; + this.grammar = new EasyScoreGrammar(this.builder); + this.parser = new _parser__WEBPACK_IMPORTED_MODULE_4__.Parser(this.grammar); + (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook)); + return this; + } + setContext(context) { + this.factory.setContext(context); + return this; + } + parse(line, options = {}) { + this.builder.reset(options); + const result = this.parser.parse(line); + if (!result.success && this.options.throwOnError) { + L(result); + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('Error parsing line: ' + line); + } + return result; + } + beam(notes, options) { + this.factory.Beam({ notes, options }); + return notes; + } + tuplet(notes, options) { + this.factory.Tuplet({ notes, options }); + return notes; + } + notes(line, options = {}) { + options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options); + this.parse(line, options); + return this.builder.getElements().notes; + } + voice(notes, options = {}) { + options = Object.assign({ time: this.defaults.time }, options); + return this.factory.Voice(options).addTickables(notes); + } + addCommitHook(commitHook) { + this.builder.addCommitHook(commitHook); + } +} +EasyScore.DEBUG = false; + + + +/***/ }), + +/***/ "./src/element.ts": +/*!************************!*\ + !*** ./src/element.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Element": () => (/* binding */ Element) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./registry */ "./src/registry.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// @author Mohit Cheppudira +// MIT License + + + + +/** + * Element implements a generic base class for VexFlow, with implementations + * of general functions and properties that can be inherited by all VexFlow elements. + * + * The Element is an abstract class that needs to be subclassed to work. It handles + * style and text-font properties for the Element and any child elements, along with + * working with the Registry to create unique ids, but does not have any tools for + * formatting x or y positions or connections to a Stave. + */ +class Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Element; + } + static newID() { + return `auto${Element.ID++}`; + } + constructor() { + var _a; + // all Element objects keep a list of children that they are responsible and which + // inherit the style of their parents. + this.children = []; + this.attrs = { + id: Element.newID(), + type: this.getCategory(), + class: '', + }; + this.rendered = false; + // If a default registry exist, then register with it right away. + (_a = _registry__WEBPACK_IMPORTED_MODULE_1__.Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this); + } + /** + * Adds a child Element to the Element, which lets it inherit the + * same style as the parent when setGroupStyle() is called. + * + * Examples of children are noteheads and stems. Modifiers such + * as Accidentals are generally not set as children. + * + * Note that StaveNote calls setGroupStyle() when setStyle() is called. + */ + addChildElement(child) { + this.children.push(child); + return this; + } + getCategory() { + return this.constructor.CATEGORY; + } + /** + * Set the element style used to render. + * + * Example: + * ```typescript + * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); + * element.draw(); + * ``` + * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave), + * the style can be applied to all of them by means of the context: + * ```typescript + * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); + * element.getContext().setFillStyle('red'); + * element.getContext().setStrokeStyle('red'); + * element.draw(); + * ``` + * or using drawWithStyle: + * ```typescript + * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); + * element.drawWithStyle(); + * ``` + */ + setStyle(style) { + this.style = style; + return this; + } + /** Set the element & associated children style used for rendering. */ + setGroupStyle(style) { + this.style = style; + this.children.forEach((child) => child.setGroupStyle(style)); + return this; + } + /** Get the element style used for rendering. */ + getStyle() { + return this.style; + } + /** Apply the element style to `context`. */ + applyStyle(context = this.context, style = this.getStyle()) { + if (!style) + return this; + if (!context) + return this; + context.save(); + if (style.shadowColor) + context.setShadowColor(style.shadowColor); + if (style.shadowBlur) + context.setShadowBlur(style.shadowBlur); + if (style.fillStyle) + context.setFillStyle(style.fillStyle); + if (style.strokeStyle) + context.setStrokeStyle(style.strokeStyle); + if (style.lineWidth) + context.setLineWidth(style.lineWidth); + return this; + } + /** Restore the style of `context`. */ + restoreStyle(context = this.context, style = this.getStyle()) { + if (!style) + return this; + if (!context) + return this; + context.restore(); + return this; + } + /** + * Draw the element and all its sub-elements (ie.: Modifiers in a Stave) + * with the element's style (see `getStyle()` and `setStyle()`) + */ + drawWithStyle() { + this.checkContext(); + this.applyStyle(); + this.draw(); + this.restoreStyle(); + } + /** Check if it has a class label (An element can have multiple class labels). */ + hasClass(className) { + var _a; + if (!this.attrs.class) + return false; + return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1; + } + /** Add a class label (An element can have multiple class labels). */ + addClass(className) { + var _a; + if (this.hasClass(className)) + return this; + if (!this.attrs.class) + this.attrs.class = `${className}`; + else + this.attrs.class = `${this.attrs.class} ${className}`; + (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ + id: this.attrs.id, + name: 'class', + value: className, + oldValue: undefined, + }); + return this; + } + /** Remove a class label (An element can have multiple class labels). */ + removeClass(className) { + var _a, _b; + if (!this.hasClass(className)) + return this; + const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' '); + if (arr) { + arr.splice(arr.indexOf(className)); + this.attrs.class = arr.join(' '); + } + (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({ + id: this.attrs.id, + name: 'class', + value: undefined, + oldValue: className, + }); + return this; + } + /** Call back from registry after the element is registered. */ + onRegister(registry) { + this.registry = registry; + return this; + } + /** Return the rendered status. */ + isRendered() { + return this.rendered; + } + /** Set the rendered status. */ + setRendered(rendered = true) { + this.rendered = rendered; + return this; + } + /** Return the element attributes. */ + getAttributes() { + return this.attrs; + } + /** Return an attribute, such as 'id', 'type' or 'class'. */ + // eslint-disable-next-line + getAttribute(name) { + return this.attrs[name]; + } + /** Return associated SVGElement. */ + getSVGElement(suffix = '') { + const id = (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(this.attrs.id + suffix); + const element = document.getElementById(id); + if (element) + return element; + } + /** Set an attribute such as 'id', 'class', or 'type'. */ + setAttribute(name, value) { + var _a; + const oldID = this.attrs.id; + const oldValue = this.attrs[name]; + this.attrs[name] = value; + // Register with old id to support id changes. + (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue }); + return this; + } + /** Get the boundingBox. */ + getBoundingBox() { + return this.boundingBox; + } + /** Return the context, such as an SVGContext or CanvasContext object. */ + getContext() { + return this.context; + } + /** Set the context to an SVGContext or CanvasContext object */ + setContext(context) { + this.context = context; + return this; + } + /** Validate and return the rendering context. */ + checkContext() { + return (0,_util__WEBPACK_IMPORTED_MODULE_3__.defined)(this.context, 'NoContext', 'No rendering context attached to instance.'); + } + ////////////////////////////////////////////////////////////////////////////////////////////////// + // Font Handling + /** + * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied + * to text (not glyphs). + */ + set font(f) { + this.setFont(f); + } + /** Returns the CSS compatible font string for the text font. */ + get font() { + return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont); + } + /** + * Set the element's text font family, size, weight, style + * (e.g., `Arial`, `10pt`, `bold`, `italic`). + * + * This attribute does not determine the font used for musical Glyphs like treble clefs. + * + * @param font is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). + * @param style is a string (e.g., 'italic', 'normal'). + * If no arguments are provided, then the font is set to the default font. + * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property. + */ + setFont(font, size, weight, style) { + // Allow subclasses to override `TEXT_FONT`. + const defaultTextFont = this.constructor.TEXT_FONT; + const fontIsObject = typeof font === 'object'; + const fontIsString = typeof font === 'string'; + const fontIsUndefined = font === undefined; + const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined; + if (fontIsObject) { + // `font` is case 1) a FontInfo object + this.textFont = Object.assign(Object.assign({}, defaultTextFont), font); + } + else if (fontIsString && sizeWeightStyleAreUndefined) { + // `font` is case 2) CSS font shorthand. + this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.fromCSSString(font); + } + else if (fontIsUndefined && sizeWeightStyleAreUndefined) { + // All arguments are undefined. Do not check for `arguments.length === 0`, + // which fails on the edge case: `setFont(undefined)`. + // TODO: See if we can remove this case entirely without introducing a visual diff. + // The else case below seems like it should be equivalent to this case. + this.textFont = Object.assign({}, defaultTextFont); + } + else { + // `font` is case 3) a font family string (e.g., 'Times New Roman'). + // The other parameters represent the size, weight, and style. + // It is okay for `font` to be undefined while one or more of the other arguments is provided. + // Following CSS conventions, unspecified params are reset to the default. + this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style); + } + return this; + } + /** + * Get the css string describing this Element's text font. e.g., + * 'bold 10pt Arial'. + */ + getFont() { + if (!this.textFont) { + this.resetFont(); + } + return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont); + } + /** + * Reset the text font to the style indicated by the static `TEXT_FONT` property. + * Subclasses can call this to initialize `textFont` for the first time. + */ + resetFont() { + this.setFont(); + } + /** Return a copy of the current FontInfo object. */ + get fontInfo() { + if (!this.textFont) { + this.resetFont(); + } + // We can cast to Required here, because + // we just called resetFont() above to ensure this.textFont is set. + return Object.assign({}, this.textFont); + } + set fontInfo(fontInfo) { + this.setFont(fontInfo); + } + /** Change the font size, while keeping everything else the same. */ + setFontSize(size) { + const fontInfo = this.fontInfo; + this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style); + return this; + } + /** + * @returns a CSS font-size string (e.g., '18pt', '12px', '1em'). + * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes. + */ + getFontSize() { + return this.fontSize; + } + /** + * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property. + * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt'). + */ + set fontSize(size) { + this.setFontSize(size); + } + /** + * @returns a CSS font-size string (e.g., '18pt', '12px', '1em'). + */ + get fontSize() { + let size = this.fontInfo.size; + if (typeof size === 'number') { + size = `${size}pt`; + } + return size; + } + /** + * @returns the font size in `pt`. + */ + get fontSizeInPoints() { + return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(this.fontSize); + } + /** + * @returns the font size in `px`. + */ + get fontSizeInPixels() { + return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(this.fontSize); + } + /** + * @returns a CSS font-style string (e.g., 'italic'). + */ + get fontStyle() { + return this.fontInfo.style; + } + set fontStyle(style) { + const fontInfo = this.fontInfo; + this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style); + } + /** + * @returns a CSS font-weight string (e.g., 'bold'). + * As in CSS, font-weight is always returned as a string, even if it was set as a number. + */ + get fontWeight() { + return this.fontInfo.weight + ''; + } + set fontWeight(weight) { + const fontInfo = this.fontInfo; + this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style); + } +} +Element.ID = 1000; +/** + * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)` + * to customize the font for musical symbols placed on the score. + */ +Element.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/factory.ts": +/*!************************!*\ + !*** ./src/factory.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Factory": () => (/* binding */ Factory) +/* harmony export */ }); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ "./src/barnote.ts"); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.ts"); +/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./curve */ "./src/curve.ts"); +/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./staveline */ "./src/staveline.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./system */ "./src/system.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.ts"); +/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./web */ "./src/web.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// @author Mohit Cheppudira +// MIT License + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Factory.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_39__.log)('Vex.Flow.Factory', args); +} +/** + * Factory implements a high level API around VexFlow. + */ +class Factory { + /** + * Static simplified function to access constructor without providing FactoryOptions + * + * Example: + * + * Create an SVG renderer and attach it to the DIV element named "boo" to render using 1200 and 600 + * + * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );` + */ + static newFromElementId(elementId, width = 500, height = 200) { + return new Factory({ renderer: { elementId, width, height } }); + } + /** + * Example: + * + * Create an SVG renderer and attach it to the DIV element named "boo" to render using 1200 and 600 + * + * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});` + */ + constructor(options = {}) { + L('New factory: ', options); + this.options = { + stave: { + space: 10, + }, + renderer: { + elementId: '', + width: 500, + height: 200, + background: '#FFF', + }, + font: Factory.TEXT_FONT, + }; + this.setOptions(options); + } + reset() { + this.renderQ = []; + this.systems = []; + this.staves = []; + this.voices = []; + this.stave = undefined; // current stave + } + setOptions(options) { + this.options = Object.assign(Object.assign({}, this.options), options); + this.initRenderer(); + this.reset(); + } + initRenderer() { + const { elementId, width, height, background } = this.options.renderer; + if (elementId == null) { + return; + } + if (elementId == '') { + L(this); + throw new _util__WEBPACK_IMPORTED_MODULE_39__.RuntimeError('renderer.elementId not set in FactoryOptions'); + } + let backend = this.options.renderer.backend; + if (backend === undefined) { + const elem = document.getElementById(elementId); + // We use a custom type check here, because node-canvas mimics canvas, + // but is not an instance of window.HTMLCanvasElement. + // In fact, `window` might be undefined here. + // See: https://www.npmjs.com/package/canvas + if ((0,_web__WEBPACK_IMPORTED_MODULE_42__.isHTMLCanvas)(elem)) { + backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.CANVAS; + } + else { + backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.SVG; + } + } + this.context = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.buildContext(elementId, backend, width, height, background); + } + getContext() { + return this.context; + } + setContext(context) { + this.context = context; + return this; + } + getStave() { + return this.stave; + } + getVoices() { + return this.voices; + } + /** Return pixels from current stave spacing. */ + Stave(params) { + const staveSpace = this.options.stave.space; + const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params); + const stave = new _stave__WEBPACK_IMPORTED_MODULE_24__.Stave(p.x, p.y, p.width, p.options); + this.staves.push(stave); + stave.setContext(this.context); + this.stave = stave; + return stave; + } + TabStave(params) { + const staveSpace = this.options.stave.space; + const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params); + const stave = new _tabstave__WEBPACK_IMPORTED_MODULE_32__.TabStave(p.x, p.y, p.width, p.options); + this.staves.push(stave); + stave.setContext(this.context); + this.stave = stave; + return stave; + } + StaveNote(noteStruct) { + const note = new _stavenote__WEBPACK_IMPORTED_MODULE_27__.StaveNote(noteStruct); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + GlyphNote(glyph, noteStruct, options) { + const note = new _glyphnote__WEBPACK_IMPORTED_MODULE_13__.GlyphNote(glyph, noteStruct, options); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + RepeatNote(type, noteStruct, options) { + const note = new _repeatnote__WEBPACK_IMPORTED_MODULE_23__.RepeatNote(type, noteStruct, options); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + GhostNote(noteStruct) { + const ghostNote = new _ghostnote__WEBPACK_IMPORTED_MODULE_12__.GhostNote(noteStruct); + if (this.stave) + ghostNote.setStave(this.stave); + ghostNote.setContext(this.context); + this.renderQ.push(ghostNote); + return ghostNote; + } + TextNote(noteStruct) { + const textNote = new _textnote__WEBPACK_IMPORTED_MODULE_35__.TextNote(noteStruct); + if (this.stave) + textNote.setStave(this.stave); + textNote.setContext(this.context); + this.renderQ.push(textNote); + return textNote; + } + BarNote(params = {}) { + const barNote = new _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote(params.type); + if (this.stave) + barNote.setStave(this.stave); + barNote.setContext(this.context); + this.renderQ.push(barNote); + return barNote; + } + ClefNote(params) { + const p = Object.assign({ type: 'treble', options: { + size: 'default', + annotation: undefined, + } }, params); + const clefNote = new _clefnote__WEBPACK_IMPORTED_MODULE_6__.ClefNote(p.type, p.options.size, p.options.annotation); + if (this.stave) + clefNote.setStave(this.stave); + clefNote.setContext(this.context); + this.renderQ.push(clefNote); + return clefNote; + } + TimeSigNote(params) { + const p = Object.assign({ time: '4/4' }, params); + const timeSigNote = new _timesignote__WEBPACK_IMPORTED_MODULE_37__.TimeSigNote(p.time); + if (this.stave) + timeSigNote.setStave(this.stave); + timeSigNote.setContext(this.context); + this.renderQ.push(timeSigNote); + return timeSigNote; + } + KeySigNote(params) { + const keySigNote = new _keysignote__WEBPACK_IMPORTED_MODULE_16__.KeySigNote(params.key, params.cancelKey, params.alterKey); + if (this.stave) + keySigNote.setStave(this.stave); + keySigNote.setContext(this.context); + this.renderQ.push(keySigNote); + return keySigNote; + } + TabNote(noteStruct) { + const note = new _tabnote__WEBPACK_IMPORTED_MODULE_31__.TabNote(noteStruct); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + GraceNote(noteStruct) { + const note = new _gracenote__WEBPACK_IMPORTED_MODULE_14__.GraceNote(noteStruct); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + return note; + } + GraceNoteGroup(params) { + const group = new _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__.GraceNoteGroup(params.notes, params.slur); + group.setContext(this.context); + return group; + } + Accidental(params) { + const accid = new _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental(params.type); + accid.setContext(this.context); + return accid; + } + Annotation(params) { + const p = Object.assign({ text: 'p', hJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify.CENTER, vJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM }, params); + const annotation = new _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(p.text); + annotation.setJustification(p.hJustify); + annotation.setVerticalJustification(p.vJustify); + annotation.setFont(p.font); + annotation.setContext(this.context); + return annotation; + } + ChordSymbol(params) { + const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params); + const chordSymbol = new _chordsymbol__WEBPACK_IMPORTED_MODULE_5__.ChordSymbol(); + chordSymbol.setHorizontal(p.hJustify); + chordSymbol.setVertical(p.vJustify); + chordSymbol.setEnableKerning(p.kerning); + chordSymbol.setReportWidth(p.reportWidth); + // There is a default font based on the engraving font. Only set then + // font if it is specific, else use the default + if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') { + if (typeof p.fontWeight === 'string') + chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight); + else + chordSymbol.setFont(p.fontFamily, p.fontSize, ''); + } + else if (typeof p.fontSize === 'number') { + chordSymbol.setFontSize(p.fontSize); + } + chordSymbol.setContext(this.context); + return chordSymbol; + } + Articulation(params) { + var _a; + const articulation = new _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.'); + if ((params === null || params === void 0 ? void 0 : params.position) != undefined) + articulation.setPosition(params.position); + if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined) + articulation.setBetweenLines(params.betweenLines); + articulation.setContext(this.context); + return articulation; + } + Ornament(type, params) { + const options = Object.assign({ type, position: 0, accidental: '' }, params); + const ornament = new _ornament__WEBPACK_IMPORTED_MODULE_20__.Ornament(type); + ornament.setPosition(options.position); + if (options.upperAccidental) { + ornament.setUpperAccidental(options.upperAccidental); + } + if (options.lowerAccidental) { + ornament.setLowerAccidental(options.lowerAccidental); + } + if (typeof options.delayed !== 'undefined') { + ornament.setDelayed(options.delayed); + } + ornament.setContext(this.context); + return ornament; + } + TextDynamics(params) { + const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params); + const text = new _textdynamics__WEBPACK_IMPORTED_MODULE_34__.TextDynamics({ + text: p.text, + line: p.line, + duration: p.duration, + dots: p.dots, + }); + if (this.stave) + text.setStave(this.stave); + text.setContext(this.context); + this.renderQ.push(text); + return text; + } + Fingering(params) { + const p = Object.assign({ number: '0', position: 'left' }, params); + const fingering = new _frethandfinger__WEBPACK_IMPORTED_MODULE_11__.FretHandFinger(p.number); + fingering.setPosition(p.position); + fingering.setContext(this.context); + return fingering; + } + StringNumber(params, drawCircle = true) { + const stringNumber = new _stringnumber__WEBPACK_IMPORTED_MODULE_29__.StringNumber(params.number); + stringNumber.setPosition(params.position); + stringNumber.setContext(this.context); + stringNumber.setDrawCircle(drawCircle); + return stringNumber; + } + TickContext() { + return new _tickcontext__WEBPACK_IMPORTED_MODULE_36__.TickContext(); + } + ModifierContext() { + return new _modifiercontext__WEBPACK_IMPORTED_MODULE_17__.ModifierContext(); + } + MultiMeasureRest(params) { + const numMeasures = (0,_util__WEBPACK_IMPORTED_MODULE_39__.defined)(params.number_of_measures, 'NoNumberOfMeasures'); + const multiMeasureRest = new _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__.MultiMeasureRest(numMeasures, params); + multiMeasureRest.setContext(this.context); + this.renderQ.push(multiMeasureRest); + return multiMeasureRest; + } + Voice(params) { + const p = Object.assign({ time: '4/4' }, params); + const voice = new _voice__WEBPACK_IMPORTED_MODULE_41__.Voice(p.time); + this.voices.push(voice); + return voice; + } + StaveConnector(params) { + const connector = new _staveconnector__WEBPACK_IMPORTED_MODULE_25__.StaveConnector(params.top_stave, params.bottom_stave); + connector.setType(params.type).setContext(this.context); + this.renderQ.push(connector); + return connector; + } + Formatter(options) { + return new _formatter__WEBPACK_IMPORTED_MODULE_10__.Formatter(options); + } + Tuplet(params) { + const p = Object.assign({ notes: [], options: {} }, params); + const tuplet = new _tuplet__WEBPACK_IMPORTED_MODULE_38__.Tuplet(p.notes, p.options).setContext(this.context); + this.renderQ.push(tuplet); + return tuplet; + } + Beam(params) { + var _a, _b, _c, _d, _e; + const beam = new _beam__WEBPACK_IMPORTED_MODULE_4__.Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context); + beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []); + if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) { + Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => { + beam.setPartialBeamSideAt(Number(noteIndex), direction); + }); + } + this.renderQ.push(beam); + return beam; + } + Curve(params) { + const curve = new _curve__WEBPACK_IMPORTED_MODULE_7__.Curve(params.from, params.to, params.options).setContext(this.context); + this.renderQ.push(curve); + return curve; + } + StaveTie(params) { + var _a; + const tie = new _stavetie__WEBPACK_IMPORTED_MODULE_28__.StaveTie({ + first_note: params.from, + last_note: params.to, + first_indices: params.first_indices, + last_indices: params.last_indices, + }, params.text); + if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction) + tie.setDirection(params.options.direction); + tie.setContext(this.context); + this.renderQ.push(tie); + return tie; + } + StaveLine(params) { + var _a, _b; + const line = new _staveline__WEBPACK_IMPORTED_MODULE_26__.StaveLine({ + first_note: params.from, + last_note: params.to, + first_indices: params.first_indices, + last_indices: params.last_indices, + }); + if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text) + line.setText(params.options.text); + if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font) + line.setFont(params.options.font); + line.setContext(this.context); + this.renderQ.push(line); + return line; + } + VibratoBracket(params) { + const vibratoBracket = new _vibratobracket__WEBPACK_IMPORTED_MODULE_40__.VibratoBracket({ + start: params.from, + stop: params.to, + }); + if (params.options.line) + vibratoBracket.setLine(params.options.line); + if (params.options.harsh) + vibratoBracket.setHarsh(params.options.harsh); + vibratoBracket.setContext(this.context); + this.renderQ.push(vibratoBracket); + return vibratoBracket; + } + TextBracket(params) { + const textBracket = new _textbracket__WEBPACK_IMPORTED_MODULE_33__.TextBracket({ + start: params.from, + stop: params.to, + text: params.text, + superscript: params.options.superscript, + position: params.options.position, + }); + if (params.options.line) + textBracket.setLine(params.options.line); + if (params.options.font) + textBracket.setFont(params.options.font); + textBracket.setContext(this.context); + this.renderQ.push(textBracket); + return textBracket; + } + System(params = {}) { + params.factory = this; + const system = new _system__WEBPACK_IMPORTED_MODULE_30__.System(params).setContext(this.context); + this.systems.push(system); + return system; + } + /** + * Creates EasyScore. Normally the first step after constructing a Factory. For example: + * ``` + * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }}); + * const score: EasyScore = vf.EasyScore(); + * ``` + * @param options.factory optional instance of Factory + * @param options.builder instance of Builder + * @param options.commitHooks function to call after a note element is created + * @param options.throwOnError throw error in case of parsing error + */ + EasyScore(options = {}) { + options.factory = this; + return new _easyscore__WEBPACK_IMPORTED_MODULE_8__.EasyScore(options); + } + PedalMarking(params) { + const p = Object.assign({ notes: [], options: { + style: 'mixed', + } }, params); + const pedal = new _pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking(p.notes); + pedal.setType(_pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking.typeString[p.options.style]); + pedal.setContext(this.context); + this.renderQ.push(pedal); + return pedal; + } + NoteSubGroup(params) { + const p = Object.assign({ notes: [] }, params); + const group = new _notesubgroup__WEBPACK_IMPORTED_MODULE_19__.NoteSubGroup(p.notes); + group.setContext(this.context); + return group; + } + /** Render the score. */ + draw() { + const ctx = this.context; + this.systems.forEach((s) => s.setContext(ctx).format()); + this.staves.forEach((s) => s.setContext(ctx).draw()); + this.voices.forEach((v) => v.setContext(ctx).draw()); + this.renderQ.forEach((e) => { + if (!e.isRendered()) + e.setContext(ctx).draw(); + }); + this.systems.forEach((s) => s.setContext(ctx).draw()); + this.reset(); + } +} +/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */ +Factory.DEBUG = false; +/** Default text font. */ +Factory.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_9__.Element.TEXT_FONT); + + + +/***/ }), + +/***/ "./src/flow.ts": +/*!*********************!*\ + !*** ./src/flow.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Flow": () => (/* binding */ Flow) +/* harmony export */ }); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ "./src/barnote.ts"); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); +/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.ts"); +/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ "./src/crescendo.ts"); +/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ "./src/curve.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ "./src/factory.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracetabnote */ "./src/gracetabnote.ts"); +/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./keymanager */ "./src/keymanager.ts"); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./parenthesis */ "./src/parenthesis.ts"); +/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parser */ "./src/parser.ts"); +/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); +/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./registry */ "./src/registry.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./stavehairpin */ "./src/stavehairpin.ts"); +/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./staveline */ "./src/staveline.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.ts"); +/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.ts"); +/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./strokes */ "./src/strokes.ts"); +/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./svgcontext */ "./src/svgcontext.ts"); +/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./system */ "./src/system.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./tabslide */ "./src/tabslide.ts"); +/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.ts"); +/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.ts"); +/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tremolo */ "./src/tremolo.ts"); +/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./tuning */ "./src/tuning.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./version */ "./src/version.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); +/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +class Flow { + static get BUILD() { + return { + /** version number. */ + VERSION: _version__WEBPACK_IMPORTED_MODULE_78__.VERSION, + /** git commit ID that this library was built from. */ + ID: _version__WEBPACK_IMPORTED_MODULE_78__.ID, + /** The date when this library was compiled. */ + DATE: _version__WEBPACK_IMPORTED_MODULE_78__.DATE, + }; + } + /** + * Examples: + * ``` + * Vex.Flow.setMusicFont('Petaluma'); + * Vex.Flow.setMusicFont('Bravura', 'Gonville'); + * ``` + * + * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom). + * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of: + * 'Bravura', 'Gonville', 'Custom'. + * + * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`, + * which includes a single music font. Calling this method is unnecessary. + * + * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts. + * In this case, the default music font stack is empty. + * Example: + * ``` + * await Vex.Flow.fetchMusicFont('Petaluma'); + * Vex.Flow.setMusicFont('Petaluma'); + * ... (do VexFlow stuff) ... + * ``` + * See `demos/fonts/` for more examples. + * + * @returns an array of Font objects corresponding to the provided `fontNames`. + */ + static setMusicFont(...fontNames) { + // Convert the array of font names into an array of Font objects. + const fonts = fontNames.map((fontName) => _font__WEBPACK_IMPORTED_MODULE_18__.Font.load(fontName)); + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK = fonts; + _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.MUSIC_FONT_STACK = fonts.slice(); + _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.CURRENT_CACHE_KEY = fontNames.join(','); + return fonts; + } + /** + * Used with vexflow-core which supports dynamic font loading. + */ + // eslint-disable-next-line + static fetchMusicFont(fontName, fontModuleOrPath) { + return __awaiter(this, void 0, void 0, function* () { + // The default implementation does nothing. + // See vexflow-core.ts for the implementation that vexflow-core.js uses. + }); + } + static getMusicFont() { + const fonts = _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK; + return fonts.map((font) => font.getName()); + } + static getMusicFontStack() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK; + } + static get RENDER_PRECISION_PLACES() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES; + } + static set RENDER_PRECISION_PLACES(precision) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES = precision; + } + static get SOFTMAX_FACTOR() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR; + } + static set SOFTMAX_FACTOR(factor) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR = factor; + } + static get NOTATION_FONT_SCALE() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE; + } + static set NOTATION_FONT_SCALE(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE = value; + } + static get TABLATURE_FONT_SCALE() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE; + } + static set TABLATURE_FONT_SCALE(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE = value; + } + static get RESOLUTION() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION; + } + static set RESOLUTION(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION = value; + } + static get SLASH_NOTEHEAD_WIDTH() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH; + } + static set SLASH_NOTEHEAD_WIDTH(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH = value; + } + static get STAVE_LINE_DISTANCE() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE; + } + static set STAVE_LINE_DISTANCE(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE = value; + } + static get STAVE_LINE_THICKNESS() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS; + } + static set STAVE_LINE_THICKNESS(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS = value; + } + static get STEM_HEIGHT() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT; + } + static set STEM_HEIGHT(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT = value; + } + static get STEM_WIDTH() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH; + } + static set STEM_WIDTH(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH = value; + } + static get TIME4_4() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TIME4_4; + } + static get accidentalMap() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.accidentalMap; + } + static get unicode() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.unicode; + } + static keySignature(spec) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keySignature(spec); + } + static hasKeySignature(spec) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.hasKeySignature(spec); + } + static getKeySignatures() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.getKeySignatures(); + } + static clefProperties(clef) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.clefProperties(clef); + } + // eslint-disable-next-line + static keyProperties(key, clef, params) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keyProperties(key, clef, params); + } + static durationToTicks(duration) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.durationToTicks(duration); + } +} +Flow.Accidental = _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental; +Flow.Annotation = _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation; +Flow.Articulation = _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation; +Flow.Barline = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.Barline; +Flow.BarNote = _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote; +Flow.Beam = _beam__WEBPACK_IMPORTED_MODULE_4__.Beam; +Flow.Bend = _bend__WEBPACK_IMPORTED_MODULE_5__.Bend; +Flow.BoundingBox = _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox; +Flow.BoundingBoxComputation = _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation; +Flow.CanvasContext = _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext; +Flow.ChordSymbol = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol; +Flow.Clef = _clef__WEBPACK_IMPORTED_MODULE_10__.Clef; +Flow.ClefNote = _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote; +Flow.Crescendo = _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo; +Flow.Curve = _curve__WEBPACK_IMPORTED_MODULE_13__.Curve; +Flow.Dot = _dot__WEBPACK_IMPORTED_MODULE_14__.Dot; +Flow.EasyScore = _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore; +Flow.Element = _element__WEBPACK_IMPORTED_MODULE_16__.Element; +Flow.Factory = _factory__WEBPACK_IMPORTED_MODULE_17__.Factory; +Flow.Font = _font__WEBPACK_IMPORTED_MODULE_18__.Font; +Flow.Formatter = _formatter__WEBPACK_IMPORTED_MODULE_19__.Formatter; +Flow.Fraction = _fraction__WEBPACK_IMPORTED_MODULE_20__.Fraction; +Flow.FretHandFinger = _frethandfinger__WEBPACK_IMPORTED_MODULE_21__.FretHandFinger; +Flow.GhostNote = _ghostnote__WEBPACK_IMPORTED_MODULE_22__.GhostNote; +Flow.Glyph = _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph; +Flow.GlyphNote = _glyphnote__WEBPACK_IMPORTED_MODULE_24__.GlyphNote; +Flow.GraceNote = _gracenote__WEBPACK_IMPORTED_MODULE_25__.GraceNote; +Flow.GraceNoteGroup = _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__.GraceNoteGroup; +Flow.GraceTabNote = _gracetabnote__WEBPACK_IMPORTED_MODULE_27__.GraceTabNote; +Flow.KeyManager = _keymanager__WEBPACK_IMPORTED_MODULE_28__.KeyManager; +Flow.KeySignature = _keysignature__WEBPACK_IMPORTED_MODULE_29__.KeySignature; +Flow.KeySigNote = _keysignote__WEBPACK_IMPORTED_MODULE_30__.KeySigNote; +Flow.Modifier = _modifier__WEBPACK_IMPORTED_MODULE_31__.Modifier; +Flow.ModifierContext = _modifiercontext__WEBPACK_IMPORTED_MODULE_32__.ModifierContext; +Flow.MultiMeasureRest = _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__.MultiMeasureRest; +Flow.Music = _music__WEBPACK_IMPORTED_MODULE_34__.Music; +Flow.Note = _note__WEBPACK_IMPORTED_MODULE_35__.Note; +Flow.NoteHead = _notehead__WEBPACK_IMPORTED_MODULE_36__.NoteHead; +Flow.NoteSubGroup = _notesubgroup__WEBPACK_IMPORTED_MODULE_37__.NoteSubGroup; +Flow.Ornament = _ornament__WEBPACK_IMPORTED_MODULE_38__.Ornament; +Flow.Parenthesis = _parenthesis__WEBPACK_IMPORTED_MODULE_39__.Parenthesis; +Flow.Parser = _parser__WEBPACK_IMPORTED_MODULE_40__.Parser; +Flow.PedalMarking = _pedalmarking__WEBPACK_IMPORTED_MODULE_41__.PedalMarking; +Flow.Registry = _registry__WEBPACK_IMPORTED_MODULE_42__.Registry; +Flow.RenderContext = _rendercontext__WEBPACK_IMPORTED_MODULE_43__.RenderContext; +Flow.Renderer = _renderer__WEBPACK_IMPORTED_MODULE_44__.Renderer; +Flow.RepeatNote = _repeatnote__WEBPACK_IMPORTED_MODULE_45__.RepeatNote; +Flow.Repetition = _staverepetition__WEBPACK_IMPORTED_MODULE_53__.Repetition; +Flow.Stave = _stave__WEBPACK_IMPORTED_MODULE_46__.Stave; +Flow.StaveConnector = _staveconnector__WEBPACK_IMPORTED_MODULE_48__.StaveConnector; +Flow.StaveHairpin = _stavehairpin__WEBPACK_IMPORTED_MODULE_49__.StaveHairpin; +Flow.StaveLine = _staveline__WEBPACK_IMPORTED_MODULE_50__.StaveLine; +Flow.StaveModifier = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifier; +Flow.StaveNote = _stavenote__WEBPACK_IMPORTED_MODULE_52__.StaveNote; +Flow.StaveTempo = _stavetempo__WEBPACK_IMPORTED_MODULE_54__.StaveTempo; +Flow.StaveText = _stavetext__WEBPACK_IMPORTED_MODULE_55__.StaveText; +Flow.StaveTie = _stavetie__WEBPACK_IMPORTED_MODULE_56__.StaveTie; +Flow.Stem = _stem__WEBPACK_IMPORTED_MODULE_58__.Stem; +Flow.StringNumber = _stringnumber__WEBPACK_IMPORTED_MODULE_59__.StringNumber; +Flow.Stroke = _strokes__WEBPACK_IMPORTED_MODULE_60__.Stroke; +Flow.SVGContext = _svgcontext__WEBPACK_IMPORTED_MODULE_61__.SVGContext; +Flow.System = _system__WEBPACK_IMPORTED_MODULE_62__.System; +Flow.TabNote = _tabnote__WEBPACK_IMPORTED_MODULE_64__.TabNote; +Flow.TabSlide = _tabslide__WEBPACK_IMPORTED_MODULE_65__.TabSlide; +Flow.TabStave = _tabstave__WEBPACK_IMPORTED_MODULE_66__.TabStave; +Flow.TabTie = _tabtie__WEBPACK_IMPORTED_MODULE_67__.TabTie; +Flow.TextBracket = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracket; +Flow.TextDynamics = _textdynamics__WEBPACK_IMPORTED_MODULE_69__.TextDynamics; +Flow.TextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_70__.TextFormatter; +Flow.TextNote = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextNote; +Flow.TickContext = _tickcontext__WEBPACK_IMPORTED_MODULE_72__.TickContext; +Flow.TimeSignature = _timesignature__WEBPACK_IMPORTED_MODULE_73__.TimeSignature; +Flow.TimeSigNote = _timesignote__WEBPACK_IMPORTED_MODULE_74__.TimeSigNote; +Flow.Tremolo = _tremolo__WEBPACK_IMPORTED_MODULE_75__.Tremolo; +Flow.Tuning = _tuning__WEBPACK_IMPORTED_MODULE_76__.Tuning; +Flow.Tuplet = _tuplet__WEBPACK_IMPORTED_MODULE_77__.Tuplet; +Flow.Vibrato = _vibrato__WEBPACK_IMPORTED_MODULE_79__.Vibrato; +Flow.VibratoBracket = _vibratobracket__WEBPACK_IMPORTED_MODULE_80__.VibratoBracket; +Flow.Voice = _voice__WEBPACK_IMPORTED_MODULE_81__.Voice; +Flow.Volta = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.Volta; +// Exported Enums. +// Sorted by the module / file they are exported from. +Flow.AnnotationHorizontalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify; +Flow.AnnotationVerticalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify; +Flow.ChordSymbolHorizontalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify; +Flow.ChordSymbolVerticalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify; +Flow.SymbolTypes = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes; +Flow.SymbolModifiers = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers; +Flow.CurvePosition = _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition; +Flow.FontWeight = _font__WEBPACK_IMPORTED_MODULE_18__.FontWeight; +Flow.FontStyle = _font__WEBPACK_IMPORTED_MODULE_18__.FontStyle; +Flow.ModifierPosition = _modifier__WEBPACK_IMPORTED_MODULE_31__.ModifierPosition; +Flow.RendererBackends = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererBackends; +Flow.RendererLineEndType = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererLineEndType; +Flow.BarlineType = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.BarlineType; +Flow.StaveModifierPosition = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifierPosition; +Flow.VoltaType = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.VoltaType; +Flow.TextBracketPosition = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracketPosition; +Flow.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextJustification; +Flow.VoiceMode = _voice__WEBPACK_IMPORTED_MODULE_81__.VoiceMode; + + + +/***/ }), + +/***/ "./src/font.ts": +/*!*********************!*\ + !*** ./src/font.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Font": () => (/* binding */ Font), +/* harmony export */ "FontStyle": () => (/* binding */ FontStyle), +/* harmony export */ "FontWeight": () => (/* binding */ FontWeight) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + +var FontWeight; +(function (FontWeight) { + FontWeight["NORMAL"] = "normal"; + FontWeight["BOLD"] = "bold"; +})(FontWeight || (FontWeight = {})); +var FontStyle; +(function (FontStyle) { + FontStyle["NORMAL"] = "normal"; + FontStyle["ITALIC"] = "italic"; +})(FontStyle || (FontStyle = {})); +// Internal element for parsing CSS font shorthand strings. +let fontParser; +const Fonts = {}; +class Font { + /** + * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em') + * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported + * units (e.g., pt, em, %). + * @returns the number of pixels that is equivalent to `fontSize` + */ + static convertSizeToPixelValue(fontSize = Font.SIZE) { + var _a; + if (typeof fontSize === 'number') { + // Assume the numeric fontSize is specified in pt. + return fontSize * Font.scaleToPxFrom.pt; + } + else { + const value = parseFloat(fontSize); + if (isNaN(value)) { + return 0; + } + const unit = fontSize.replace(/[\d.\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces. + const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1; + return value * conversionFactor; + } + } + /** + * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em') + * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported + * units (e.g., pt, em, %). + * @returns the number of points that is equivalent to `fontSize` + */ + static convertSizeToPointValue(fontSize = Font.SIZE) { + var _a; + if (typeof fontSize === 'number') { + // Assume the numeric fontSize is specified in pt. + return fontSize; + } + else { + const value = parseFloat(fontSize); + if (isNaN(value)) { + return 0; + } + const unit = fontSize.replace(/[\d.\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces. + const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt; + return value * conversionFactor; + } + } + /** + * @param f + * @param size + * @param weight + * @param style + * @returns the `size` field will include the units (e.g., '12pt', '16px'). + */ + static validate(f, size, weight, style) { + // If f is a string but all other arguments are undefined, we assume that + // f is CSS font shorthand (e.g., 'italic bold 10pt Arial'). + if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) { + return Font.fromCSSString(f); + } + let family; + if (typeof f === 'object') { + // f is a FontInfo object, so we extract its fields. + family = f.family; + size = f.size; + weight = f.weight; + style = f.style; + } + else { + // f is a string representing the font family name or undefined. + family = f; + } + family = family !== null && family !== void 0 ? family : Font.SANS_SERIF; + size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt'; + weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL; + style = style !== null && style !== void 0 ? style : FontStyle.NORMAL; + if (weight === '') { + weight = FontWeight.NORMAL; + } + if (style === '') { + style = FontStyle.NORMAL; + } + // If size is a number, we assume the unit is `pt`. + if (typeof size === 'number') { + size = `${size}pt`; + } + // If weight is a number (e.g., 900), turn it into a string representation of that number. + if (typeof weight === 'number') { + weight = weight.toString(); + } + // At this point, `family`, `size`, `weight`, and `style` are all strings. + return { family, size, weight, style }; + } + /** + * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial'). + */ + static fromCSSString(cssFontShorthand) { + // Let the browser parse this string for us. + // First, create a span element. + // Then, set its style.font and extract it back out. + if (!fontParser) { + fontParser = document.createElement('span'); + } + fontParser.style.font = cssFontShorthand; + const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style; + return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle }; + } + /** + * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`. + */ + static toCSSString(fontInfo) { + var _a; + if (!fontInfo) { + return ''; + } + let style; + const st = fontInfo.style; + if (st === FontStyle.NORMAL || st === '' || st === undefined) { + style = ''; // no space! Omit the style section. + } + else { + style = st.trim() + ' '; + } + let weight; + const wt = fontInfo.weight; + if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) { + weight = ''; // no space! Omit the weight section. + } + else if (typeof wt === 'number') { + weight = wt + ' '; + } + else { + weight = wt.trim() + ' '; + } + let size; + const sz = fontInfo.size; + if (sz === undefined) { + size = Font.SIZE + 'pt '; + } + else if (typeof sz === 'number') { + size = sz + 'pt '; + } + else { + // size is already a string. + size = sz.trim() + ' '; + } + const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF; + return `${style}${weight}${size}${family}`; + } + /** + * @param fontSize a number representing a font size, or a string font size with units. + * @param scaleFactor multiply the size by this factor. + * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48). + * If the fontSize argument was a number, the return value will be a number. + * If the fontSize argument was a string, the return value will be a string. + */ + static scaleSize(fontSize, scaleFactor) { + if (typeof fontSize === 'number') { + return (fontSize * scaleFactor); + } + else { + const value = parseFloat(fontSize); + const unit = fontSize.replace(/[\d.\s]/g, ''); // Remove all numbers, dots, spaces. + return `${value * scaleFactor}${unit}`; + } + } + /** + * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec). + * @returns true if the font weight indicates bold. + */ + static isBold(weight) { + if (!weight) { + return false; + } + else if (typeof weight === 'number') { + return weight >= 600; + } + else { + // a string can be 'bold' or '700' + const parsedWeight = parseInt(weight, 10); + if (isNaN(parsedWeight)) { + return weight.toLowerCase() === 'bold'; + } + else { + return parsedWeight >= 600; + } + } + } + /** + * @param style + * @returns true if the font style indicates 'italic'. + */ + static isItalic(style) { + if (!style) { + return false; + } + else { + return style.toLowerCase() === FontStyle.ITALIC; + } + } + /** + * @param fontName + * @param woffURL The absolute or relative URL to the woff file. + * @param includeWoff2 If true, we assume that a woff2 file is in + * the same folder as the woff file, and will append a `2` to the url. + */ + // Support distributions of the typescript compiler that do not yet include the FontFace API declarations. + // eslint-disable-next-line + // @ts-ignore + static loadWebFont(fontName, woffURL, includeWoff2 = true) { + return __awaiter(this, void 0, void 0, function* () { + const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : ''; + const woff1URL = `url(${woffURL}) format('woff')`; + const woffURLs = woff2URL + woff1URL; + // eslint-disable-next-line + // @ts-ignore + const fontFace = new FontFace(fontName, woffURLs); + yield fontFace.load(); + // eslint-disable-next-line + // @ts-ignore + document.fonts.add(fontFace); + return fontFace; + }); + } + /** + * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls: + * `await Vex.Flow.Font.loadWebFonts();` + * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts), + * and a @font-face { font-family: ... } rule in your CSS. + * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial, + * depending on the current music engraving font. + * + * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts + * for your app. + */ + static loadWebFonts() { + return __awaiter(this, void 0, void 0, function* () { + const host = Font.WEB_FONT_HOST; + const files = Font.WEB_FONT_FILES; + for (const fontName in files) { + const fontPath = files[fontName]; + Font.loadWebFont(fontName, host + fontPath); + } + }); + } + /** + * @param fontName + * @param data optionally set the Font object's `.data` property. + * This is usually done when setting up a font for the first time. + * @param metrics optionally set the Font object's `.metrics` property. + * This is usually done when setting up a font for the first time. + * @returns a Font object with the given `fontName`. + * Reuse an existing Font object if a matching one is found. + */ + static load(fontName, data, metrics) { + let font = Fonts[fontName]; + if (!font) { + font = new Font(fontName); + Fonts[fontName] = font; + } + if (data) { + font.setData(data); + } + if (metrics) { + font.setMetrics(metrics); + } + return font; + } + /** + * Use `Font.load(fontName)` to get a Font object. + * Do not call this constructor directly. + */ + constructor(fontName) { + this.name = fontName; + } + getName() { + return this.name; + } + getData() { + return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.data, 'FontError', 'Missing font data'); + } + getMetrics() { + return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.metrics, 'FontError', 'Missing metrics'); + } + setData(data) { + this.data = data; + } + setMetrics(metrics) { + this.metrics = metrics; + } + hasData() { + return this.data !== undefined; + } + getResolution() { + return this.getData().resolution; + } + getGlyphs() { + return this.getData().glyphs; + } + /** + * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts). + * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY). + * @param defaultValue is returned if the lookup fails. + * @returns the retrieved value (or `defaultValue` if the lookup fails). + */ + // eslint-disable-next-line + lookupMetric(key, defaultValue) { + const keyParts = key.split('.'); + // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key). + let currObj = this.getMetrics(); + for (let i = 0; i < keyParts.length; i++) { + const keyPart = keyParts[i]; + const value = currObj[keyPart]; + if (value === undefined) { + // If the key lookup fails, we fall back to the defaultValue. + return defaultValue; + } + // The most recent lookup succeeded, so we drill deeper into the object. + currObj = value; + } + // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value. + return currObj; + } + /** For debugging. */ + toString() { + return '[' + this.name + ' Font]'; + } +} +////////////////////////////////////////////////////////////////////////////////////////////////// +// STATIC MEMBERS +/** Default sans-serif font family. */ +Font.SANS_SERIF = 'Arial, sans-serif'; +/** Default serif font family. */ +Font.SERIF = 'Times New Roman, serif'; +/** Default font size in `pt`. */ +Font.SIZE = 10; +// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in +/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */ +Font.scaleToPxFrom = { + pt: 4 / 3, + px: 1, + em: 16, + '%': 4 / 25, + in: 96, + mm: 96 / 25.4, + cm: 96 / 2.54, +}; +/** + * Customize this field to specify a different CDN for delivering web fonts. + * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/ + * Or you can use your own host. + */ +Font.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/'; +/** + * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when + * `await Font.loadWebFonts()` is called. Customize this field to specify a different + * set of fonts to load. See: `Font.loadWebFonts()`. + */ +Font.WEB_FONT_FILES = { + 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff', + PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff', +}; + + + +/***/ }), + +/***/ "./src/fonts/bravura_glyphs.ts": +/*!*************************************!*\ + !*** ./src/fonts/bravura_glyphs.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BravuraFont": () => (/* binding */ BravuraFont) +/* harmony export */ }); +const BravuraFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 469, + y_min: 0, + y_max: 295, + ha: 295, + o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z', + }, + bracketBottom: { + x_min: 0, + x_max: 469, + y_min: -295, + y_max: 0, + ha: 295, + o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z', + }, + barlineTick: { + x_min: 0, + x_max: 36, + y_min: 868, + y_max: 1120, + ha: 252, + o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z', + }, + breathMarkTick: { + x_min: 0, + x_max: 500, + y_min: 0, + y_max: 502, + ha: 502, + o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z', + }, + segno: { + x_min: 4, + x_max: 550, + y_min: -27, + y_max: 759, + ha: 786, + o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z', + }, + coda: { + x_min: -4, + x_max: 955, + y_min: -158, + y_max: 898, + ha: 1056, + o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z', + }, + gClef: { + x_min: 0, + x_max: 671, + y_min: -658, + y_max: 1098, + ha: 1756, + o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z', + }, + cClef: { + x_min: 0, + x_max: 699, + y_min: -506, + y_max: 506, + ha: 1012, + o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z', + }, + fClef: { + x_min: -5, + x_max: 684, + y_min: -635, + y_max: 262, + ha: 897, + o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z', + }, + unpitchedPercussionClef1: { + x_min: 0, + x_max: 382, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z', + }, + '6stringTabClef': { + x_min: -3, + x_max: 408, + y_min: -748, + y_max: 764, + ha: 1512, + o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z', + }, + timeSig0: { + x_min: 20, + x_max: 450, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z', + }, + timeSig1: { + x_min: 20, + x_max: 314, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z', + }, + timeSig2: { + x_min: 20, + x_max: 426, + y_min: -257, + y_max: 254, + ha: 511, + o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z', + }, + timeSig3: { + x_min: 20, + x_max: 401, + y_min: -251, + y_max: 249, + ha: 500, + o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z', + }, + timeSig4: { + x_min: 20, + x_max: 450, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z', + }, + timeSig5: { + x_min: 20, + x_max: 383, + y_min: -251, + y_max: 246, + ha: 497, + o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z', + }, + timeSig6: { + x_min: 20, + x_max: 414, + y_min: -249, + y_max: 251, + ha: 500, + o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z', + }, + timeSig7: { + x_min: 20, + x_max: 421, + y_min: -250, + y_max: 249, + ha: 499, + o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z', + }, + timeSig8: { + x_min: 20, + x_max: 416, + y_min: -259, + y_max: 259, + ha: 518, + o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z', + }, + timeSig9: { + x_min: 20, + x_max: 414, + y_min: -249, + y_max: 251, + ha: 500, + o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z', + }, + timeSigCommon: { + x_min: 5, + x_max: 424, + y_min: -249, + y_max: 251, + ha: 500, + o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z', + }, + timeSigCutCommon: { + x_min: 0, + x_max: 418, + y_min: -359, + y_max: 361, + ha: 720, + o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z', + }, + timeSigPlus: { + x_min: -1, + x_max: 499, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z', + }, + timeSigPlusSmall: { + x_min: -1, + x_max: 255, + y_min: -133, + y_max: 123, + ha: 256, + o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z', + }, + timeSigMinus: { + x_min: 0, + x_max: 448, + y_min: -35, + y_max: 40, + ha: 75, + o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z', + }, + timeSigParensRight: { + x_min: 0, + x_max: 184, + y_min: -489, + y_max: 491, + ha: 980, + o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z', + }, + timeSigParensRightSmall: { + x_min: 0, + x_max: 110, + y_min: -251, + y_max: 249, + ha: 500, + o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z', + }, + timeSigParensLeft: { + x_min: 0, + x_max: 184, + y_min: -489, + y_max: 491, + ha: 980, + o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z', + }, + timeSigParensLeftSmall: { + x_min: 0, + x_max: 110, + y_min: -251, + y_max: 249, + ha: 500, + o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 599, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 422, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 295, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 295, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z', + }, + noteheadXDoubleWhole: { + x_min: 0, + x_max: 546, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z', + }, + noteheadXWhole: { + x_min: 0, + x_max: 377, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z', + }, + noteheadXHalf: { + x_min: 0, + x_max: 334, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 290, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z', + }, + noteheadCircleXDoubleWhole: { + x_min: 0, + x_max: 422, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z', + }, + noteheadCircleXWhole: { + x_min: 0, + x_max: 249, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z', + }, + noteheadCircleXHalf: { + x_min: 0, + x_max: 250, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 249, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z', + }, + noteheadCircledDoubleWhole: { + x_min: 0, + x_max: 603, + y_min: -218, + y_max: 213, + ha: 431, + o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z', + }, + noteheadCircledWhole: { + x_min: 0, + x_max: 437, + y_min: -225, + y_max: 211, + ha: 436, + o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z', + }, + noteheadCircledHalf: { + x_min: -18, + x_max: 311, + y_min: -162, + y_max: 167, + ha: 329, + o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z', + }, + noteheadCircledBlack: { + x_min: -21, + x_max: 321, + y_min: -171, + y_max: 167, + ha: 338, + o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z', + }, + noteheadDoubleWholeSquare: { + x_min: 0, + x_max: 416, + y_min: -190, + y_max: 198, + ha: 388, + o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z', + }, + noteheadSquareWhite: { + x_min: 0, + x_max: 313, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z', + }, + noteheadSquareBlack: { + x_min: 0, + x_max: 313, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z', + }, + noteheadTriangleDownDoubleWhole: { + x_min: 0, + x_max: 483, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z', + }, + noteheadTriangleDownWhole: { + x_min: 0, + x_max: 319, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z', + }, + noteheadTriangleDownHalf: { + x_min: 0, + x_max: 285, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z', + }, + noteheadTriangleDownBlack: { + x_min: 0, + x_max: 292, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 207 -180 l 420 180 l 0 180 z', + }, + noteheadTriangleUpDoubleWhole: { + x_min: 0, + x_max: 483, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z', + }, + noteheadTriangleUpWhole: { + x_min: 0, + x_max: 319, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z', + }, + noteheadTriangleUpHalf: { + x_min: 0, + x_max: 285, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 293, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 422 -180 l 207 180 l 0 -180 z', + }, + noteheadSlashedDoubleWhole1: { + x_min: 0, + x_max: 596, + y_min: -179, + y_max: 168, + ha: 347, + o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z', + }, + noteheadSlashedWhole1: { + x_min: -22, + x_max: 433, + y_min: -157, + y_max: 148, + ha: 305, + o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z', + }, + noteheadSlashedHalf1: { + x_min: -67, + x_max: 386, + y_min: -142, + y_max: 160, + ha: 302, + o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z', + }, + noteheadSlashedBlack1: { + x_min: -80, + x_max: 375, + y_min: -165, + y_max: 167, + ha: 332, + o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z', + }, + noteheadSlashedDoubleWhole2: { + x_min: 0, + x_max: 596, + y_min: -178, + y_max: 169, + ha: 347, + o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z', + }, + noteheadSlashedWhole2: { + x_min: -18, + x_max: 436, + y_min: -154, + y_max: 151, + ha: 305, + o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z', + }, + noteheadSlashedHalf2: { + x_min: -73, + x_max: 380, + y_min: -134, + y_max: 168, + ha: 302, + o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z', + }, + noteheadSlashedBlack2: { + x_min: -79, + x_max: 376, + y_min: -164, + y_max: 168, + ha: 332, + o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z', + }, + noteheadDiamondDoubleWhole: { + x_min: 0, + x_max: 432, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 270, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 251, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 250, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z', + }, + noteheadParenthesis: { + x_min: -73, + x_max: 368, + y_min: -180, + y_max: 182, + ha: 362, + o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z', + }, + noteheadParenthesisRight: { + x_min: -36, + x_max: 73, + y_min: -181, + y_max: 181, + ha: 362, + o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z', + }, + noteheadParenthesisLeft: { + x_min: 0, + x_max: 109, + y_min: -181, + y_max: 181, + ha: 362, + o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z', + }, + noteheadMoonBlack: { + x_min: 0, + x_max: 315, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z', + }, + noteheadTriangleLeftBlack: { + x_min: 0, + x_max: 339, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 488 -180 l 0 180 l 0 -180 z', + }, + noteheadTriangleRightBlack: { + x_min: 0, + x_max: 339, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 488 180 l 0 -180 l 488 -180 z', + }, + noteheadTriangleRoundDownBlack: { + x_min: 0, + x_max: 278, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z', + }, + augmentationDot: { + x_min: 0, + x_max: 100, + y_min: -50, + y_max: 50, + ha: 100, + o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z', + }, + tremolo1: { + x_min: -150, + x_max: 150, + y_min: -93, + y_max: 94, + ha: 187, + o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z', + }, + flag8thUp: { + x_min: 0, + x_max: 264, + y_min: -810, + y_max: 9, + ha: 819, + o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z', + }, + flag8thDown: { + x_min: 0, + x_max: 306, + y_min: -14, + y_max: 808, + ha: 822, + o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z', + }, + flag16thUp: { + x_min: 0, + x_max: 279, + y_min: -813, + y_max: 2, + ha: 815, + o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z', + }, + flag16thDown: { + x_min: 0, + x_max: 291, + y_min: -9, + y_max: 812, + ha: 821, + o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z', + }, + flag32ndUp: { + x_min: 0, + x_max: 261, + y_min: -812, + y_max: 149, + ha: 961, + o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', + }, + flag32ndDown: { + x_min: 0, + x_max: 273, + y_min: -172, + y_max: 812, + ha: 984, + o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z', + }, + flag64thUp: { + x_min: 0, + x_max: 261, + y_min: -812, + y_max: 347, + ha: 1159, + o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', + }, + flag64thDown: { + x_min: 0, + x_max: 273, + y_min: -376, + y_max: 812, + ha: 1188, + o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z', + }, + flag128thUp: { + x_min: 0, + x_max: 261, + y_min: -812, + y_max: 533, + ha: 1345, + o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', + }, + flag128thDown: { + x_min: 0, + x_max: 273, + y_min: -580, + y_max: 812, + ha: 1392, + o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z', + }, + accidentalFlat: { + x_min: 0, + x_max: 226, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 168, + y_min: -335, + y_max: 341, + ha: 676, + o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z', + }, + accidentalSharp: { + x_min: 0, + x_max: 249, + y_min: -348, + y_max: 350, + ha: 698, + o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 247, + y_min: -125, + y_max: 127, + ha: 252, + o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z', + }, + accidentalDoubleFlat: { + x_min: 0, + x_max: 411, + y_min: -175, + y_max: 437, + ha: 612, + o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z', + }, + accidentalParensLeft: { + x_min: 0, + x_max: 141, + y_min: -248, + y_max: 247, + ha: 495, + o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z', + }, + accidentalParensRight: { + x_min: 0, + x_max: 141, + y_min: -248, + y_max: 247, + ha: 495, + o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 1, + x_max: 227, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 1, + x_max: 466, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 179, + y_min: -353, + y_max: 307, + ha: 660, + o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: 3, + x_max: 317, + y_min: -347, + y_max: 369, + ha: 716, + o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z', + }, + accidentalBuyukMucennebFlat: { + x_min: 1, + x_max: 287, + y_min: -174, + y_max: 438, + ha: 612, + o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z', + }, + accidentalBuyukMucennebSharp: { + x_min: 0, + x_max: 341, + y_min: -350, + y_max: 348, + ha: 698, + o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z', + }, + accidentalBakiyeFlat: { + x_min: -1, + x_max: 286, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z', + }, + accidentalKomaSharp: { + x_min: 0, + x_max: 229, + y_min: -337, + y_max: 322, + ha: 659, + o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z', + }, + accidentalKucukMucennebSharp: { + x_min: -1, + x_max: 339, + y_min: -338, + y_max: 321, + ha: 659, + o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z', + }, + accidentalKoron: { + x_min: 0, + x_max: 300, + y_min: -472, + y_max: 157, + ha: 629, + o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z', + }, + accidentalSori: { + x_min: 0, + x_max: 421, + y_min: -318, + y_max: 328, + ha: 646, + o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z', + }, + articAccentAbove: { + x_min: 0, + x_max: 339, + y_min: 1, + y_max: 245, + ha: 244, + o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z', + }, + articAccentBelow: { + x_min: 0, + x_max: 339, + y_min: -244, + y_max: 0, + ha: 244, + o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z', + }, + articTenutoAbove: { + x_min: -1, + x_max: 338, + y_min: 0, + y_max: 48, + ha: 48, + o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z', + }, + articTenutoBelow: { + x_min: -1, + x_max: 338, + y_min: -48, + y_max: 0, + ha: 48, + o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z', + }, + articStaccatoAbove: { + x_min: 0, + x_max: 84, + y_min: 0, + y_max: 84, + ha: 84, + o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z', + }, + articStaccatoBelow: { + x_min: 0, + x_max: 84, + y_min: -84, + y_max: 0, + ha: 84, + o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z', + }, + articStaccatissimoAbove: { + x_min: 1, + x_max: 100, + y_min: -2, + y_max: 293, + ha: 295, + o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z', + }, + articStaccatissimoBelow: { + x_min: 1, + x_max: 100, + y_min: -295, + y_max: 0, + ha: 295, + o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z', + }, + articMarcatoAbove: { + x_min: -1, + x_max: 235, + y_min: -1, + y_max: 253, + ha: 254, + o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z', + }, + articMarcatoBelow: { + x_min: -1, + x_max: 235, + y_min: -254, + y_max: 0, + ha: 254, + o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z', + }, + fermataAbove: { + x_min: 3, + x_max: 605, + y_min: -3, + y_max: 329, + ha: 332, + o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z', + }, + fermataBelow: { + x_min: 3, + x_max: 605, + y_min: -332, + y_max: 0, + ha: 332, + o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z', + }, + fermataLongAbove: { + x_min: 0, + x_max: 603, + y_min: -1, + y_max: 333, + ha: 334, + o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z', + }, + fermataLongBelow: { + x_min: 0, + x_max: 603, + y_min: -333, + y_max: 1, + ha: 334, + o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z', + }, + fermataVeryLongAbove: { + x_min: 0, + x_max: 715, + y_min: 0, + y_max: 408, + ha: 408, + o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z', + }, + fermataVeryLongBelow: { + x_min: 0, + x_max: 715, + y_min: -408, + y_max: 0, + ha: 408, + o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z', + }, + fermataVeryShortAbove: { + x_min: 0, + x_max: 726, + y_min: 0, + y_max: 449, + ha: 449, + o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z', + }, + fermataVeryShortBelow: { + x_min: 0, + x_max: 726, + y_min: -449, + y_max: 0, + ha: 449, + o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z', + }, + fermataShortAbove: { + x_min: 0, + x_max: 604, + y_min: 0, + y_max: 341, + ha: 341, + o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z', + }, + fermataShortBelow: { + x_min: 0, + x_max: 604, + y_min: -341, + y_max: 0, + ha: 341, + o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z', + }, + breathMarkComma: { + x_min: 1, + x_max: 152, + y_min: 2, + y_max: 251, + ha: 249, + o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z', + }, + breathMarkUpbow: { + x_min: 1, + x_max: 249, + y_min: 1, + y_max: 495, + ha: 494, + o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z', + }, + caesura: { + x_min: 0, + x_max: 384, + y_min: -1, + y_max: 532, + ha: 533, + o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 373, + y_min: 0, + y_max: 530, + ha: 530, + o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z', + }, + restMaxima: { + x_min: 0, + x_max: 381, + y_min: -249, + y_max: 250, + ha: 499, + o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 125, + y_min: 0, + y_max: 250, + ha: 250, + o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z', + }, + restWhole: { + x_min: 0, + x_max: 282, + y_min: -135, + y_max: 9, + ha: 144, + o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z', + }, + restWholeLegerLine: { + x_min: -117, + x_max: 399, + y_min: -135, + y_max: 20, + ha: 155, + o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z', + }, + restHalf: { + x_min: 0, + x_max: 282, + y_min: -2, + y_max: 142, + ha: 144, + o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z', + }, + restHalfLegerLine: { + x_min: -117, + x_max: 399, + y_min: -13, + y_max: 142, + ha: 155, + o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z', + }, + restQuarter: { + x_min: 1, + x_max: 270, + y_min: -375, + y_max: 373, + ha: 748, + o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z', + }, + rest8th: { + x_min: 0, + x_max: 247, + y_min: -251, + y_max: 174, + ha: 425, + o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z', + }, + rest16th: { + x_min: 0, + x_max: 320, + y_min: -500, + y_max: 179, + ha: 679, + o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z', + }, + rest32nd: { + x_min: 0, + x_max: 363, + y_min: -500, + y_max: 426, + ha: 926, + o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z', + }, + rest64th: { + x_min: 0, + x_max: 423, + y_min: -753, + y_max: 430, + ha: 1183, + o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z', + }, + rest128th: { + x_min: 0, + x_max: 485, + y_min: -750, + y_max: 689, + ha: 1439, + o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z', + }, + dynamicPiano: { + x_min: -89, + x_max: 366, + y_min: -142, + y_max: 274, + ha: 416, + o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z', + }, + dynamicMezzo: { + x_min: -20, + x_max: 446, + y_min: -10, + y_max: 274, + ha: 284, + o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z', + }, + dynamicForte: { + x_min: -141, + x_max: 364, + y_min: -152, + y_max: 444, + ha: 596, + o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z', + }, + dynamicRinforzando: { + x_min: -20, + x_max: 277, + y_min: 0, + y_max: 274, + ha: 274, + o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z', + }, + dynamicSforzando: { + x_min: 0, + x_max: 229, + y_min: -10, + y_max: 273, + ha: 283, + o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z', + }, + dynamicZ: { + x_min: -30, + x_max: 244, + y_min: -10, + y_max: 268, + ha: 278, + o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z', + }, + ornamentTrill: { + x_min: 0, + x_max: 521, + y_min: -10, + y_max: 390, + ha: 400, + o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z', + }, + ornamentTurn: { + x_min: 0, + x_max: 460, + y_min: 0, + y_max: 218, + ha: 218, + o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z', + }, + ornamentTurnSlash: { + x_min: 0, + x_max: 460, + y_min: -90, + y_max: 306, + ha: 396, + o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z', + }, + ornamentMordent: { + x_min: 1, + x_max: 729, + y_min: -73, + y_max: 319, + ha: 392, + o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z', + }, + ornamentShortTrill: { + x_min: 0, + x_max: 725, + y_min: 0, + y_max: 245, + ha: 245, + o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z', + }, + ornamentTremblement: { + x_min: 1, + x_max: 985, + y_min: 0, + y_max: 244, + ha: 244, + o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z', + }, + ornamentPrecompAppoggTrill: { + x_min: 0, + x_max: 1119, + y_min: 0, + y_max: 481, + ha: 481, + o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: 2, + x_max: 1150, + y_min: -367, + y_max: 245, + ha: 612, + o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: 0, + x_max: 1048, + y_min: -367, + y_max: 331, + ha: 698, + o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: 0, + x_max: 949, + y_min: 0, + y_max: 381, + ha: 381, + o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: 0, + x_max: 1278, + y_min: 0, + y_max: 247, + ha: 247, + o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z', + }, + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: 0, + x_max: 1277, + y_min: -62, + y_max: 333, + ha: 395, + o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: 0, + x_max: 859, + y_min: -222, + y_max: 246, + ha: 468, + o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z', + }, + brassScoop: { + x_min: 1, + x_max: 320, + y_min: -373, + y_max: 13, + ha: 386, + o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z', + }, + brassDoitMedium: { + x_min: 0, + x_max: 489, + y_min: -40, + y_max: 346, + ha: 386, + o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z', + }, + brassFallLipShort: { + x_min: 1, + x_max: 293, + y_min: -345, + y_max: 42, + ha: 387, + o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z', + }, + brassLiftMedium: { + x_min: 0, + x_max: 811, + y_min: 0, + y_max: 852, + ha: 852, + o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z', + }, + brassFallRoughMedium: { + x_min: 0, + x_max: 811, + y_min: 0, + y_max: 852, + ha: 852, + o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z', + }, + brassBend: { + x_min: 0, + x_max: 392, + y_min: 0, + y_max: 282, + ha: 282, + o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z', + }, + brassMuteClosed: { + x_min: 0, + x_max: 272, + y_min: 0, + y_max: 272, + ha: 272, + o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z', + }, + brassMuteOpen: { + x_min: 0, + x_max: 304, + y_min: 0, + y_max: 304, + ha: 304, + o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z', + }, + brassFlip: { + x_min: 0, + x_max: 379, + y_min: 0, + y_max: 282, + ha: 282, + o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z', + }, + brassJazzTurn: { + x_min: 0, + x_max: 620, + y_min: 0, + y_max: 245, + ha: 245, + o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z', + }, + brassSmear: { + x_min: 1, + x_max: 306, + y_min: 0, + y_max: 170, + ha: 170, + o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z', + }, + stringsDownBow: { + x_min: 0, + x_max: 312, + y_min: 0, + y_max: 318, + ha: 318, + o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z', + }, + stringsUpBow: { + x_min: 1, + x_max: 249, + y_min: 1, + y_max: 495, + ha: 494, + o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z', + }, + stringsHarmonic: { + x_min: 0, + x_max: 200, + y_min: 0, + y_max: 200, + ha: 200, + o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: 0, + x_max: 200, + y_min: 0, + y_max: 300, + ha: 300, + o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: 0, + x_max: 200, + y_min: 0, + y_max: 300, + ha: 300, + o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z', + }, + pluckedLeftHandPizzicato: { + x_min: 0, + x_max: 272, + y_min: 0, + y_max: 272, + ha: 272, + o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 1019, + y_min: -8, + y_max: 555, + ha: 563, + o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 450, + y_min: 0, + y_max: 450, + ha: 450, + o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z', + }, + pictChokeCymbal: { + x_min: 1, + x_max: 152, + y_min: 2, + y_max: 251, + ha: 249, + o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z', + }, + wiggleArpeggiatoUp: { + x_min: -33, + x_max: 292, + y_min: 0, + y_max: 119, + ha: 119, + o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z', + }, + arrowheadBlackUp: { + x_min: 0, + x_max: 228, + y_min: 0, + y_max: 299, + ha: 299, + o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z', + }, + arrowheadBlackDown: { + x_min: 0, + x_max: 228, + y_min: 0, + y_max: 299, + ha: 299, + o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z', + }, + arpeggiatoUp: { + x_min: 1, + x_max: 229, + y_min: 7, + y_max: 1511, + ha: 1504, + o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z', + }, + arpeggiatoDown: { + x_min: 1, + x_max: 229, + y_min: -4, + y_max: 1500, + ha: 1504, + o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z', + }, + repeat1Bar: { + x_min: 0, + x_max: 532, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z', + }, + repeat2Bars: { + x_min: 0, + x_max: 762, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z', + }, + repeat4Bars: { + x_min: 0, + x_max: 1232, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z', + }, + repeatBarSlash: { + x_min: 0, + x_max: 532, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z', + }, + csymDiminished: { + x_min: 0, + x_max: 473, + y_min: 0, + y_max: 473, + ha: 473, + o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z', + }, + csymHalfDiminished: { + x_min: -16, + x_max: 488, + y_min: -15, + y_max: 489, + ha: 504, + o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z', + }, + csymAugmented: { + x_min: 0, + x_max: 395, + y_min: 1, + y_max: 396, + ha: 395, + o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z', + }, + csymMajorSeventh: { + x_min: 0, + x_max: 558, + y_min: 1, + y_max: 477, + ha: 476, + o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z', + }, + csymMinor: { + x_min: 0, + x_max: 325, + y_min: 216, + y_max: 260, + ha: 44, + o: 'm 468 374 l 0 374 l 0 311 l 468 311 z', + }, + csymParensLeftTall: { + x_min: 1, + x_max: 185, + y_min: 0, + y_max: 997, + ha: 997, + o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z', + }, + csymParensRightTall: { + x_min: -20, + x_max: 164, + y_min: 0, + y_max: 997, + ha: 997, + o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z', + }, + csymBracketLeftTall: { + x_min: 0, + x_max: 155, + y_min: 0, + y_max: 1000, + ha: 1000, + o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z', + }, + csymBracketRightTall: { + x_min: 1, + x_max: 156, + y_min: 0, + y_max: 1000, + ha: 1000, + o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z', + }, + csymParensLeftVeryTall: { + x_min: 0, + x_max: 122, + y_min: 0, + y_max: 993, + ha: 993, + o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z', + }, + csymParensRightVeryTall: { + x_min: -15, + x_max: 107, + y_min: 0, + y_max: 993, + ha: 993, + o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z', + }, + csymDiagonalArrangementSlash: { + x_min: 0, + x_max: 999, + y_min: 0, + y_max: 1000, + ha: 1000, + o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z', + }, + accSagittal5v7KleismaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z', + }, + accSagittal5v7KleismaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z', + }, + accSagittal5CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z', + }, + accSagittal5CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z', + }, + accSagittal7CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z', + }, + accSagittal7CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z', + }, + accSagittal25SmallDiesisUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z', + }, + accSagittal25SmallDiesisDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z', + }, + accSagittal35MediumDiesisUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z', + }, + accSagittal35MediumDiesisDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z', + }, + accSagittal11MediumDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z', + }, + accSagittal11MediumDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z', + }, + accSagittal11LargeDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z', + }, + accSagittal11LargeDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittal35LargeDiesisUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittal35LargeDiesisDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittalSharp25SDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z', + }, + accSagittalFlat25SUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z', + }, + accSagittalSharp7CDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z', + }, + accSagittalFlat7CUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z', + }, + accSagittalSharp5CDown: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z', + }, + accSagittalFlat5CUp: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z', + }, + accSagittalSharp5v7kDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z', + }, + accSagittalFlat5v7kUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z', + }, + accSagittalSharp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z', + }, + accSagittalFlat: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z', + }, + accSagittalSharp5v7kUp: { + x_min: 0, + x_max: 312, + y_min: -361, + y_max: 172, + ha: 533, + o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z', + }, + accSagittalFlat5v7kDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 361, + ha: 533, + o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z', + }, + accSagittalSharp5CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z', + }, + accSagittalFlat5CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z', + }, + accSagittalSharp7CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z', + }, + accSagittalFlat7CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z', + }, + accSagittalSharp25SUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z', + }, + accSagittalFlat25SDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z', + }, + accSagittalSharp35MUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z', + }, + accSagittalFlat35MDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z', + }, + accSagittalSharp11MUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z', + }, + accSagittalFlat11MDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z', + }, + accSagittalSharp11LUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalFlat11LDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalSharp35LUp: { + x_min: 0, + x_max: 500, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalFlat35LDown: { + x_min: 0, + x_max: 500, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalDoubleSharp25SDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z', + }, + accSagittalDoubleFlat25SUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z', + }, + accSagittalDoubleSharp7CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z', + }, + accSagittalDoubleFlat7CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z', + }, + accSagittalDoubleSharp5CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z', + }, + accSagittalDoubleFlat5CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z', + }, + accSagittalDoubleSharp5v7kDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z', + }, + accSagittalDoubleFlat5v7kUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z', + }, + accSagittalDoubleSharp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z', + }, + accSagittalDoubleFlat: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z', + }, + accSagittal7v11KleismaUp: { + x_min: 0, + x_max: 219, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z', + }, + accSagittal7v11KleismaDown: { + x_min: 0, + x_max: 219, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z', + }, + accSagittal17CommaUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal17CommaDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal55CommaUp: { + x_min: 0, + x_max: 219, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z', + }, + accSagittal55CommaDown: { + x_min: 0, + x_max: 219, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z', + }, + accSagittal7v11CommaUp: { + x_min: 0, + x_max: 188, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z', + }, + accSagittal7v11CommaDown: { + x_min: 0, + x_max: 188, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittal5v11SmallDiesisUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z', + }, + accSagittal5v11SmallDiesisDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittalSharp5v11SDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z', + }, + accSagittalFlat5v11SUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', + }, + accSagittalSharp7v11CDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z', + }, + accSagittalFlat7v11CUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z', + }, + accSagittalSharp55CDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z', + }, + accSagittalFlat55CUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z', + }, + accSagittalSharp17CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z', + }, + accSagittalFlat17CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z', + }, + accSagittalSharp7v11kDown: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z', + }, + accSagittalFlat7v11kUp: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z', + }, + accSagittalSharp7v11kUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z', + }, + accSagittalFlat7v11kDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z', + }, + accSagittalSharp17CUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat17CDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp55CUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z', + }, + accSagittalFlat55CDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z', + }, + accSagittalSharp7v11CUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z', + }, + accSagittalFlat7v11CDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z', + }, + accSagittalSharp5v11SUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z', + }, + accSagittalFlat5v11SDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalDoubleSharp5v11SDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalDoubleFlat5v11SUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalDoubleSharp7v11CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z', + }, + accSagittalDoubleFlat7v11CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z', + }, + accSagittalDoubleSharp55CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z', + }, + accSagittalDoubleFlat55CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z', + }, + accSagittalDoubleSharp17CDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z', + }, + accSagittalDoubleFlat17CUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z', + }, + accSagittalDoubleSharp7v11kDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z', + }, + accSagittalDoubleFlat7v11kUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z', + }, + accSagittal23CommaUp: { + x_min: 0, + x_max: 188, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z', + }, + accSagittal23CommaDown: { + x_min: 0, + x_max: 188, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z', + }, + accSagittal5v19CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z', + }, + accSagittal5v19CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z', + }, + accSagittal5v23SmallDiesisUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z', + }, + accSagittal5v23SmallDiesisDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z', + }, + accSagittalSharp5v23SDown: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z', + }, + accSagittalFlat5v23SUp: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z', + }, + accSagittalSharp5v19CDown: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z', + }, + accSagittalFlat5v19CUp: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z', + }, + accSagittalSharp23CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z', + }, + accSagittalFlat23CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z', + }, + accSagittalSharp23CUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z', + }, + accSagittalFlat23CDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z', + }, + accSagittalSharp5v19CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z', + }, + accSagittalFlat5v19CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z', + }, + accSagittalSharp5v23SUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z', + }, + accSagittalFlat5v23SDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z', + }, + accSagittalDoubleSharp5v23SDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z', + }, + accSagittalDoubleFlat5v23SUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z', + }, + accSagittalDoubleSharp5v19CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z', + }, + accSagittalDoubleFlat5v19CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z', + }, + accSagittalDoubleSharp23CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z', + }, + accSagittalDoubleFlat23CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z', + }, + accSagittal19SchismaUp: { + x_min: 0, + x_max: 125, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z', + }, + accSagittal19SchismaDown: { + x_min: 0, + x_max: 125, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z', + }, + accSagittal17KleismaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal17KleismaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal143CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z', + }, + accSagittal143CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal11v49CommaUp: { + x_min: 0, + x_max: 188, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z', + }, + accSagittal11v49CommaDown: { + x_min: 0, + x_max: 188, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z', + }, + accSagittal19CommaUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z', + }, + accSagittal19CommaDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z', + }, + accSagittal7v19CommaUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z', + }, + accSagittal7v19CommaDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z', + }, + accSagittal49SmallDiesisUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal49SmallDiesisDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal23SmallDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal23SmallDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal5v13MediumDiesisUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z', + }, + accSagittal5v13MediumDiesisDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z', + }, + accSagittal11v19MediumDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z', + }, + accSagittal11v19MediumDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z', + }, + accSagittal49MediumDiesisUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z', + }, + accSagittal49MediumDiesisDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z', + }, + accSagittal5v49MediumDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z', + }, + accSagittal5v49MediumDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z', + }, + accSagittal49LargeDiesisUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z', + }, + accSagittal49LargeDiesisDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z', + }, + accSagittal11v19LargeDiesisUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z', + }, + accSagittal11v19LargeDiesisDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z', + }, + accSagittal5v13LargeDiesisUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z', + }, + accSagittal5v13LargeDiesisDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z', + }, + accSagittalSharp23SDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z', + }, + accSagittalFlat23SUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', + }, + accSagittalSharp49SDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z', + }, + accSagittalFlat49SUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z', + }, + accSagittalSharp7v19CDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z', + }, + accSagittalFlat7v19CUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z', + }, + accSagittalSharp19CDown: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z', + }, + accSagittalFlat19CUp: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z', + }, + accSagittalSharp11v49CDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z', + }, + accSagittalFlat11v49CUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z', + }, + accSagittalSharp143CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z', + }, + accSagittalFlat143CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', + }, + accSagittalSharp17kDown: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z', + }, + accSagittalFlat17kUp: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z', + }, + accSagittalSharp19sDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z', + }, + accSagittalFlat19sUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z', + }, + accSagittalSharp19sUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z', + }, + accSagittalFlat19sDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z', + }, + accSagittalSharp17kUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat17kDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp143CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z', + }, + accSagittalFlat143CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp11v49CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z', + }, + accSagittalFlat11v49CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z', + }, + accSagittalSharp19CUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', + }, + accSagittalFlat19CDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', + }, + accSagittalSharp7v19CUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', + }, + accSagittalFlat7v19CDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', + }, + accSagittalSharp49SUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat49SDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp23SUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat23SDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp5v13MUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z', + }, + accSagittalFlat5v13MDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z', + }, + accSagittalSharp11v19MUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalFlat11v19MDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalSharp49MUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z', + }, + accSagittalFlat49MDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z', + }, + accSagittalSharp5v49MUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z', + }, + accSagittalFlat5v49MDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z', + }, + accSagittalSharp49LUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z', + }, + accSagittalFlat49LDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z', + }, + accSagittalSharp11v19LUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z', + }, + accSagittalFlat11v19LDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z', + }, + accSagittalSharp5v13LUp: { + x_min: 0, + x_max: 500, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', + }, + accSagittalFlat5v13LDown: { + x_min: 0, + x_max: 500, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', + }, + accSagittalDoubleSharp23SDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z', + }, + accSagittalDoubleFlat23SUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z', + }, + accSagittalDoubleSharp49SDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z', + }, + accSagittalDoubleFlat49SUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z', + }, + accSagittalDoubleSharp7v19CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z', + }, + accSagittalDoubleFlat7v19CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z', + }, + accSagittalDoubleSharp19CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z', + }, + accSagittalDoubleFlat19CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z', + }, + accSagittalDoubleSharp11v49CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalDoubleFlat11v49CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalDoubleSharp143CDown: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalDoubleFlat143CUp: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalDoubleSharp17kDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z', + }, + accSagittalDoubleFlat17kUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z', + }, + accSagittalDoubleSharp19sDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalDoubleFlat19sUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittalShaftUp: { + x_min: 0, + x_max: 31, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z', + }, + accSagittalShaftDown: { + x_min: 0, + x_max: 31, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z', + }, + accSagittalAcute: { + x_min: 0, + x_max: 125, + y_min: -62, + y_max: 125, + ha: 187, + o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z', + }, + accSagittalGrave: { + x_min: 0, + x_max: 125, + y_min: -125, + y_max: 62, + ha: 187, + o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z', + }, + accSagittal1MinaUp: { + x_min: -7, + x_max: 124, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal1MinaDown: { + x_min: -7, + x_max: 124, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal2MinasUp: { + x_min: -7, + x_max: 218, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal2MinasDown: { + x_min: -7, + x_max: 218, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal1TinaUp: { + x_min: 0, + x_max: 93, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z', + }, + accSagittal1TinaDown: { + x_min: 0, + x_max: 93, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z', + }, + accSagittal2TinasUp: { + x_min: 0, + x_max: 94, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', + }, + accSagittal2TinasDown: { + x_min: 0, + x_max: 94, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z', + }, + accSagittal3TinasUp: { + x_min: -7, + x_max: 124, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal3TinasDown: { + x_min: -7, + x_max: 124, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal4TinasUp: { + x_min: 0, + x_max: 187, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z', + }, + accSagittal4TinasDown: { + x_min: 0, + x_max: 187, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z', + }, + accSagittal5TinasUp: { + x_min: 0, + x_max: 218, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', + }, + accSagittal5TinasDown: { + x_min: 0, + x_max: 218, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z', + }, + accSagittal6TinasUp: { + x_min: -7, + x_max: 218, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal6TinasDown: { + x_min: -7, + x_max: 218, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal7TinasUp: { + x_min: 0, + x_max: 281, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z', + }, + accSagittal7TinasDown: { + x_min: 0, + x_max: 281, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z', + }, + accSagittal8TinasUp: { + x_min: 0, + x_max: 312, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', + }, + accSagittal8TinasDown: { + x_min: 0, + x_max: 312, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z', + }, + accSagittal9TinasUp: { + x_min: -7, + x_max: 312, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal9TinasDown: { + x_min: -7, + x_max: 312, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittalFractionalTinaUp: { + x_min: -3, + x_max: 35, + y_min: 73, + y_max: 111, + ha: 38, + o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z', + }, + accSagittalFractionalTinaDown: { + x_min: -3, + x_max: 35, + y_min: -111, + y_max: -73, + ha: 38, + o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z', + }, + accidentalNarrowReversedFlat: { + x_min: 0, + x_max: 164, + y_min: -194, + y_max: 421, + ha: 615, + o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z', + }, + accidentalNarrowReversedFlatAndFlat: { + x_min: 0, + x_max: 414, + y_min: -194, + y_max: 421, + ha: 615, + o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z', + }, + accidentalWilsonPlus: { + x_min: 0, + x_max: 281, + y_min: -203, + y_max: 203, + ha: 406, + o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z', + }, + accidentalWilsonMinus: { + x_min: 0, + x_max: 281, + y_min: -186, + y_max: 186, + ha: 372, + o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z', + }, + }, + fontFamily: 'Bravura', + resolution: 1000, + generatedOn: '2022-12-18T09:06:51.407Z', +}; + + +/***/ }), + +/***/ "./src/fonts/common_metrics.ts": +/*!*************************************!*\ + !*** ./src/fonts/common_metrics.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CommonMetrics": () => (/* binding */ CommonMetrics) +/* harmony export */ }); +const CommonMetrics = { + smufl: true, + stave: { + padding: 12, + endPaddingMax: 10, + endPaddingMin: 5, + unalignedNotePadding: 10, + }, + accidental: { + noteheadAccidentalPadding: 1, + leftPadding: 2, + accidentalSpacing: 3, + }, + chordSymbol: { + global: { + superscriptOffset: -400, + subscriptOffset: 300, + kerningOffset: -250, + lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'], + upperKerningText: ['A', 'L'], + spacing: 100, + superSubRatio: 0.66, + }, + glyphs: { + csymDiminished: { + leftSideBearing: -32, + advanceWidth: 506, + yOffset: 0, + }, + csymHalfDiminished: { + leftSideBearing: -32, + advanceWidth: 506, + yOffset: 0, + }, + csymAugmented: { + leftSideBearing: 0, + advanceWidth: 530, + yOffset: 0, + }, + csymParensLeftTall: { + leftSideBearing: -20, + advanceWidth: 184, + yOffset: 250, + }, + csymParensRightTall: { + leftSideBearing: 0, + advanceWidth: 189, + yOffset: 250, + }, + csymBracketLeftTall: { + leftSideBearing: 0, + advanceWidth: 328, + yOffset: 0, + }, + csymBracketRightTall: { + leftSideBearing: 1, + advanceWidth: 600, + yOffset: 0, + }, + csymParensLeftVeryTall: { + leftSideBearing: 50, + advanceWidth: 121, + yOffset: 350, + }, + csymParensRightVeryTall: { + leftSideBearing: 0, + advanceWidth: 111, + yOffset: 350, + }, + csymDiagonalArrangementSlash: { + leftSideBearing: 250, + advanceWidth: 990, + yOffset: 300, + }, + csymMinor: { + leftSideBearing: 0, + advanceWidth: 482, + yOffset: 0, + }, + csymMajorSeventh: { + leftSideBearing: 200, + yOffset: 0, + advanceWidth: 600, + }, + accidentalSharp: { + leftSideBearing: 20, + advanceWidth: 250, + yOffset: -302, + }, + accidentalFlat: { + leftSideBearing: -20, + advanceWidth: 226, + yOffset: -184, + }, + }, + }, + clef_default: { + width: 26, + annotations: { + '8va': { + treble: { + line: -2, + shiftX: 12, + }, + }, + '8vb': { + treble: { + line: 6.5, + shiftX: 10, + }, + bass: { + line: 4, + shiftX: 1, + }, + }, + }, + }, + clef_small: { + width: 20, + annotations: { + '8va': { + treble: { + line: -0.2, + shiftX: 8, + }, + }, + '8vb': { + treble: { + line: 5.3, + shiftX: 6, + }, + bass: { + line: 3.1, + shiftX: 0.5, + }, + }, + }, + }, + ornament: { + brassScoop: { + xOffset: -12, + yOffset: 0, + stemUpYOffset: 0, + reportedWidth: 20, + }, + brassDoitMedium: { + xOffset: 16, + yOffset: 0, + stemUpYOffset: 0, + reportedWidth: 22, + }, + brassFallLipShort: { + xOffset: 16, + yOffset: 0, + stemUpYOffset: 0, + reportedWidth: 15, + }, + brassLiftMedium: { + xOffset: 16, + yOffset: 5, + stemUpYOffset: 0, + reportedWidth: 5, + }, + brassFallRoughMedium: { + xOffset: 16, + yOffset: 28, + stemUpYOffset: 0, + reportedWidth: 5, + }, + brassBend: { + xOffset: 2, + yOffset: -8, + stemUpYOffset: 25, + reportedWidth: 5, + }, + brassMuteClosed: { + xOffset: 3, + yOffset: -8, + stemUpYOffset: 25, + reportedWidth: 5, + }, + brassMuteOpen: { + xOffset: 3, + yOffset: -7, + stemUpYOffset: 25, + reportedWidth: 5, + }, + brassFlip: { + xOffset: 10, + yOffset: 0, + stemUpYOffset: 7, + reportedWidth: 10, + }, + brassJazzTurn: { + xOffset: 0, + yOffset: 0, + stemUpYOffset: 8, + reportedWidth: 31, + }, + brassSmear: { + xOffset: 10, + yOffset: 0, + stemUpYOffset: 8, + reportedWidth: 5, + }, + }, + parenthesis: { + default: { + width: 7, + }, + gracenote: { + width: 3, + }, + }, + pedalMarking: {}, + // These are for numeric digits, such as in time signatures + digits: { + // used by TimeSignature objects + shiftLine: -1, + // used by tuplets + shiftY: -6, + }, + articulation: { + articStaccatissimoAbove: { + padding: 2, + }, + articStaccatissimoBelow: { + padding: 2, + }, + }, + tremolo: { + default: { + spacing: 7, + offsetYStemUp: -8, + offsetYStemDown: 8, + offsetXStemUp: 11, + offsetXStemDown: 1, + }, + grace: { + spacing: (7 * 3) / 5, + offsetYStemUp: -(8 * 3) / 5, + offsetYStemDown: (8 * 3) / 5, + offsetXStemUp: 7, + offsetXStemDown: 1, + }, + }, + staveRepetition: { + symbolText: { + offsetX: 12, + offsetY: 25, + spacing: 5, + }, + coda: { + offsetY: 25, + }, + segno: { + offsetY: 10, + }, + }, + noteHead: { + minPadding: 2, + }, + stem: { + heightAdjustmentForFlag: -3, + // These are stem (Y) offsets to the note heads. To shift the + // noteheads (x-position) themselves, see glyphs.notehead.custom. + noteHead: { + noteheadTriangleUpHalf: { + offsetYBaseStemUp: 5, + offsetYBaseStemDown: 4, + }, + noteheadTriangleUpBlack: { + offsetYBaseStemUp: 5, + offsetYBaseStemDown: 4, + }, + noteheadTriangleUpWhole: { + offsetYBaseStemUp: 5, + offsetYBaseStemDown: 4, + }, + noteheadXHalf: { + offsetYBaseStemUp: -4, + offsetYBaseStemDown: 4, + }, + noteheadXBlack: { + offsetYBaseStemUp: -4, + offsetYBaseStemDown: 4, + }, + noteheadXWhole: { + offsetYBaseStemUp: -4, + offsetYBaseStemDown: 4, + }, + noteheadHalf: { + offsetYBaseStemUp: -2.55, + offsetYBaseStemDown: 2.65, + }, + noteheadBlack: { + offsetYBaseStemUp: -2, + offsetYBaseStemDown: 2, + }, + noteheadSquareWhite: { + offsetYBaseStemDown: -5, + offsetYBaseStemUp: 5, + }, + }, + }, + stringNumber: { + verticalPadding: 8, + stemPadding: 2, + leftPadding: 5, + rightPadding: 6, + }, + tuplet: { + noteHeadOffset: 20, + stemOffset: 10, + bottomLine: 4, + topModifierOffset: 15, + }, + // Values under here are used by the Glyph class to reposition and rescale + // glyphs based on their category. This should be the first stop for + // custom font glyph repositioning. + // + // The glyph loader first looks up a specific set of settings based on the + // glyph code, and if not found, uses the defaults from the category. See + // glyphs.textNote for an example of this. + // + // Details in Glyph.lookupFontMetrics. + glyphs: { + coda: { + shiftX: -7, + shiftY: 8, + }, + segno: { + shiftX: -7, + }, + flag: { + shiftX: -0.75, + staveTempo: { + shiftX: -1, + }, + }, + clef_default: {}, + clef_small: { + gClef: { + shiftY: 1.5, + }, + }, + clefNote_default: {}, + clefNote_small: {}, + stroke_straight: { + arrowheadBlackDown: { + shiftX: -4.5, + }, + arrowheadBlackUp: { + shiftX: -0.85, + }, + }, + stroke_wiggly: { + arrowheadBlackDown: { + shiftX: -1, + shiftY: 1, + }, + arrowheadBlackUp: { + shiftX: -1, + shiftY: 1, + }, + }, + textNote: { + breathMarkTick: { + shiftY: 9, + }, + breathMarkComma: {}, + segno: { + shiftX: -7, + shiftY: 8, + }, + coda: { + shiftX: -7, + shiftY: 8, + }, + ornamentTrill: { + shiftX: -8, + shiftY: 8, + }, + ornamentTurn: {}, + ornamentTurnSlash: {}, + ornamentMordent: { + shiftX: -8, + }, + ornamentShortTrill: { + shiftX: -8, + }, + }, + noteHead: {}, + chordSymbol: { + scale: 0.8, + }, + }, +}; + + +/***/ }), + +/***/ "./src/fonts/custom_glyphs.ts": +/*!************************************!*\ + !*** ./src/fonts/custom_glyphs.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CustomFont": () => (/* binding */ CustomFont) +/* harmony export */ }); +const CustomFont = { + resolution: 1000, + fontFamily: 'VexFlowCustom', + glyphs: { + vexAccidentalMicrotonal1: { + x_min: -171.5, + x_max: 483.1875, + ha: 493, + o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ', + }, + vexAccidentalMicrotonal3: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ', + }, + vexAccidentalMicrotonal4: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ', + }, + vexNoteHeadRectBlack: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ', + }, + vexNoteHeadRectWhite: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100', + }, + vexWiggleArpeggioUp: { + x_min: 58.53125, + x_max: 228.671875, + ha: 294, + o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ', + }, + }, +}; + + +/***/ }), + +/***/ "./src/fonts/gonville_glyphs.ts": +/*!**************************************!*\ + !*** ./src/fonts/gonville_glyphs.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GonvilleSmuflFont": () => (/* binding */ GonvilleSmuflFont) +/* harmony export */ }); +const GonvilleSmuflFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 412, + y_min: -18, + y_max: 223, + ha: 241, + o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z', + }, + bracketBottom: { + x_min: 0, + x_max: 412, + y_min: -223, + y_max: 18, + ha: 241, + o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z', + }, + barlineTick: { + x_min: -59, + x_max: 59, + y_min: -139, + y_max: 139, + ha: 279, + o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z', + }, + breathMarkTick: { + x_min: -151, + x_max: 272, + y_min: 0, + y_max: 429, + ha: 429, + o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z', + }, + segno: { + x_min: 7, + x_max: 493, + y_min: -50, + y_max: 650, + ha: 699, + o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z', + }, + coda: { + x_min: 22, + x_max: 478, + y_min: -31, + y_max: 531, + ha: 563, + o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z', + }, + gClef: { + x_min: 0, + x_max: 623, + y_min: -632, + y_max: 1082, + ha: 1713, + o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z', + }, + cClef: { + x_min: 0, + x_max: 643, + y_min: -508, + y_max: 508, + ha: 1016, + o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z', + }, + fClef: { + x_min: 0, + x_max: 661, + y_min: -545, + y_max: 254, + ha: 798, + o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z', + }, + unpitchedPercussionClef1: { + x_min: -4, + x_max: 337, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z', + }, + '6stringTabClef': { + x_min: 0, + x_max: 501, + y_min: -735, + y_max: 753, + ha: 1487, + o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z', + }, + timeSig0: { + x_min: 0, + x_max: 380, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z', + }, + timeSig1: { + x_min: 0, + x_max: 254, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z', + }, + timeSig2: { + x_min: 0, + x_max: 337, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z', + }, + timeSig3: { + x_min: 0, + x_max: 302, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z', + }, + timeSig4: { + x_min: 0, + x_max: 345, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z', + }, + timeSig5: { + x_min: 0, + x_max: 302, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z', + }, + timeSig6: { + x_min: 0, + x_max: 349, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z', + }, + timeSig7: { + x_min: 0, + x_max: 326, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z', + }, + timeSig8: { + x_min: 0, + x_max: 360, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z', + }, + timeSig9: { + x_min: 0, + x_max: 349, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z', + }, + timeSigCommon: { + x_min: 0, + x_max: 409, + y_min: -233, + y_max: 233, + ha: 466, + o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z', + }, + timeSigCutCommon: { + x_min: 0, + x_max: 409, + y_min: -394, + y_max: 394, + ha: 788, + o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z', + }, + timeSigPlus: { + x_min: 0, + x_max: 235, + y_min: -118, + y_max: 118, + ha: 235, + o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z', + }, + timeSigPlusSmall: { + x_min: 0, + x_max: 235, + y_min: -118, + y_max: 118, + ha: 235, + o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z', + }, + timeSigMinus: { + x_min: 0, + x_max: 235, + y_min: -23, + y_max: 23, + ha: 46, + o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z', + }, + timeSigParensRight: { + x_min: 19, + x_max: 122, + y_min: -267, + y_max: 267, + ha: 535, + o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z', + }, + timeSigParensRightSmall: { + x_min: 19, + x_max: 122, + y_min: -267, + y_max: 267, + ha: 535, + o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z', + }, + timeSigParensLeft: { + x_min: -122, + x_max: -19, + y_min: -267, + y_max: 267, + ha: 534, + o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z', + }, + timeSigParensLeftSmall: { + x_min: -122, + x_max: -19, + y_min: -267, + y_max: 267, + ha: 534, + o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 663, + y_min: -174, + y_max: 174, + ha: 349, + o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 455, + y_min: -135, + y_max: 135, + ha: 269, + o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 316, + y_min: -135, + y_max: 135, + ha: 269, + o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 316, + y_min: -135, + y_max: 135, + ha: 269, + o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z', + }, + noteheadXWhole: { + x_min: 0, + x_max: 440, + y_min: -133, + y_max: 133, + ha: 265, + o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z', + }, + noteheadXHalf: { + x_min: 0, + x_max: 300, + y_min: -133, + y_max: 133, + ha: 265, + o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 300, + y_min: -133, + y_max: 133, + ha: 265, + o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 357, + y_min: -178, + y_max: 178, + ha: 357, + o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z', + }, + noteheadTriangleUpWhole: { + x_min: 0, + x_max: 462, + y_min: -149, + y_max: 149, + ha: 297, + o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z', + }, + noteheadTriangleUpHalf: { + x_min: 0, + x_max: 323, + y_min: -149, + y_max: 149, + ha: 298, + o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 322, + y_min: -149, + y_max: 149, + ha: 297, + o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 462, + y_min: -138, + y_max: 138, + ha: 277, + o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 322, + y_min: -138, + y_max: 138, + ha: 277, + o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 322, + y_min: -138, + y_max: 138, + ha: 277, + o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z', + }, + augmentationDot: { + x_min: -63, + x_max: 63, + y_min: -63, + y_max: 63, + ha: 126, + o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z', + }, + tremolo1: { + x_min: -252, + x_max: 216, + y_min: -185, + y_max: 148, + ha: 333, + o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z', + }, + flag8thUp: { + x_min: -17, + x_max: 234, + y_min: -745, + y_max: -4, + ha: 741, + o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z', + }, + flag8thDown: { + x_min: -15, + x_max: 271, + y_min: 4, + y_max: 745, + ha: 741, + o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z', + }, + flag16thUp: { + x_min: -17, + x_max: 234, + y_min: -847, + y_max: -4, + ha: 843, + o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z', + }, + flag16thDown: { + x_min: -15, + x_max: 267, + y_min: 4, + y_max: 745, + ha: 741, + o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z', + }, + flag32ndUp: { + x_min: -17, + x_max: 233, + y_min: -1005, + y_max: 96, + ha: 1101, + o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z', + }, + flag32ndDown: { + x_min: -15, + x_max: 270, + y_min: -96, + y_max: 895, + ha: 991, + o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z', + }, + flag64thUp: { + x_min: -17, + x_max: 233, + y_min: -933, + y_max: 296, + ha: 1230, + o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z', + }, + flag64thDown: { + x_min: -15, + x_max: 271, + y_min: -296, + y_max: 820, + ha: 1116, + o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z', + }, + flag128thUp: { + x_min: -17, + x_max: 231, + y_min: -987, + y_max: 496, + ha: 1484, + o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z', + }, + flag128thDown: { + x_min: -15, + x_max: 270, + y_min: -496, + y_max: 870, + ha: 1366, + o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z', + }, + accidentalFlat: { + x_min: -15, + x_max: 185, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 176, + y_min: -334, + y_max: 334, + ha: 667, + o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z', + }, + accidentalSharp: { + x_min: 0, + x_max: 239, + y_min: -388, + y_max: 388, + ha: 775, + o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 271, + y_min: -135, + y_max: 135, + ha: 271, + o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z', + }, + accidentalDoubleFlat: { + x_min: -15, + x_max: 356, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z', + }, + accidentalParensLeft: { + x_min: -122, + x_max: -19, + y_min: -267, + y_max: 267, + ha: 534, + o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z', + }, + accidentalParensRight: { + x_min: 19, + x_max: 122, + y_min: -267, + y_max: 267, + ha: 535, + o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 0, + x_max: 200, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 0, + x_max: 446, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 142, + y_min: -373, + y_max: 373, + ha: 747, + o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: 0, + x_max: 335, + y_min: -391, + y_max: 391, + ha: 782, + o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z', + }, + accidentalBuyukMucennebFlat: { + x_min: -125, + x_max: 185, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z', + }, + accidentalBuyukMucennebSharp: { + x_min: 0, + x_max: 284, + y_min: -388, + y_max: 388, + ha: 775, + o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z', + }, + accidentalBakiyeFlat: { + x_min: -129, + x_max: 185, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z', + }, + accidentalKomaSharp: { + x_min: 0, + x_max: 142, + y_min: -373, + y_max: 373, + ha: 747, + o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z', + }, + accidentalKucukMucennebSharp: { + x_min: 0, + x_max: 188, + y_min: -373, + y_max: 373, + ha: 747, + o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z', + }, + articAccentAbove: { + x_min: -256, + x_max: 19, + y_min: -114, + y_max: 114, + ha: 227, + o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z', + }, + articAccentBelow: { + x_min: -256, + x_max: 19, + y_min: -114, + y_max: 114, + ha: 227, + o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z', + }, + articTenutoAbove: { + x_min: -154, + x_max: 154, + y_min: -15, + y_max: 15, + ha: 30, + o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z', + }, + articTenutoBelow: { + x_min: -154, + x_max: 154, + y_min: -15, + y_max: 15, + ha: 30, + o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z', + }, + articStaccatoAbove: { + x_min: -49, + x_max: 49, + y_min: -49, + y_max: 49, + ha: 99, + o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z', + }, + articStaccatoBelow: { + x_min: -49, + x_max: 49, + y_min: -49, + y_max: 49, + ha: 99, + o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z', + }, + articStaccatissimoAbove: { + x_min: -53, + x_max: 53, + y_min: 0, + y_max: 184, + ha: 184, + o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z', + }, + articStaccatissimoBelow: { + x_min: -53, + x_max: 53, + y_min: -184, + y_max: 0, + ha: 184, + o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z', + }, + articMarcatoAbove: { + x_min: -114, + x_max: 114, + y_min: -256, + y_max: 19, + ha: 275, + o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z', + }, + articMarcatoBelow: { + x_min: -114, + x_max: 114, + y_min: -19, + y_max: 256, + ha: 275, + o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z', + }, + fermataAbove: { + x_min: -324, + x_max: 324, + y_min: 0, + y_max: 353, + ha: 353, + o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z', + }, + fermataBelow: { + x_min: -324, + x_max: 324, + y_min: -353, + y_max: 0, + ha: 353, + o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + fermataLongAbove: { + x_min: -286, + x_max: 286, + y_min: 0, + y_max: 364, + ha: 364, + o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z', + }, + fermataLongBelow: { + x_min: -286, + x_max: 286, + y_min: -364, + y_max: 0, + ha: 364, + o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + fermataVeryLongAbove: { + x_min: -286, + x_max: 286, + y_min: 0, + y_max: 438, + ha: 438, + o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z', + }, + fermataVeryLongBelow: { + x_min: -286, + x_max: 286, + y_min: -438, + y_max: 0, + ha: 438, + o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + fermataVeryShortAbove: { + x_min: -351, + x_max: 351, + y_min: 0, + y_max: 571, + ha: 571, + o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z', + }, + fermataVeryShortBelow: { + x_min: -351, + x_max: 351, + y_min: -571, + y_max: 0, + ha: 571, + o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z', + }, + fermataShortAbove: { + x_min: -286, + x_max: 286, + y_min: 0, + y_max: 469, + ha: 469, + o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z', + }, + fermataShortBelow: { + x_min: -286, + x_max: 286, + y_min: -469, + y_max: 0, + ha: 469, + o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + breathMarkComma: { + x_min: 0, + x_max: 168, + y_min: -155, + y_max: 155, + ha: 311, + o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z', + }, + breathMarkUpbow: { + x_min: -125, + x_max: 125, + y_min: 0, + y_max: 409, + ha: 409, + o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z', + }, + caesura: { + x_min: 0, + x_max: 457, + y_min: -202, + y_max: 303, + ha: 504, + o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 370, + y_min: -207, + y_max: 310, + ha: 517, + o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z', + }, + restMaxima: { + x_min: 0, + x_max: 853, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 284, + y_min: 0, + y_max: 250, + ha: 250, + o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z', + }, + restWhole: { + x_min: 0, + x_max: 330, + y_min: -125, + y_max: 0, + ha: 125, + o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z', + }, + restWholeLegerLine: { + x_min: 0, + x_max: 542, + y_min: -125, + y_max: 11, + ha: 137, + o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z', + }, + restHalf: { + x_min: 0, + x_max: 330, + y_min: 0, + y_max: 125, + ha: 125, + o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z', + }, + restHalfLegerLine: { + x_min: 0, + x_max: 542, + y_min: -11, + y_max: 125, + ha: 137, + o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z', + }, + restQuarter: { + x_min: 0, + x_max: 221, + y_min: -365, + y_max: 365, + ha: 730, + o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z', + }, + rest8th: { + x_min: 0, + x_max: 258, + y_min: -197, + y_max: 219, + ha: 416, + o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z', + }, + rest16th: { + x_min: 0, + x_max: 331, + y_min: -443, + y_max: 219, + ha: 662, + o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z', + }, + rest32nd: { + x_min: 0, + x_max: 405, + y_min: -443, + y_max: 466, + ha: 909, + o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z', + }, + rest64th: { + x_min: 0, + x_max: 479, + y_min: -689, + y_max: 466, + ha: 1155, + o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z', + }, + rest128th: { + x_min: 0, + x_max: 553, + y_min: -689, + y_max: 712, + ha: 1401, + o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z', + }, + dynamicPiano: { + x_min: -39, + x_max: 378, + y_min: -178, + y_max: 277, + ha: 455, + o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z', + }, + dynamicMezzo: { + x_min: 35, + x_max: 493, + y_min: -19, + y_max: 272, + ha: 291, + o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z', + }, + dynamicForte: { + x_min: -87, + x_max: 440, + y_min: -182, + y_max: 415, + ha: 597, + o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z', + }, + dynamicRinforzando: { + x_min: 58, + x_max: 357, + y_min: 0, + y_max: 275, + ha: 275, + o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z', + }, + dynamicSforzando: { + x_min: 52, + x_max: 278, + y_min: -22, + y_max: 270, + ha: 292, + o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z', + }, + dynamicZ: { + x_min: 23, + x_max: 309, + y_min: 2, + y_max: 250, + ha: 248, + o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z', + }, + ornamentTrill: { + x_min: -249, + x_max: 249, + y_min: 0, + y_max: 376, + ha: 376, + o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z', + }, + ornamentTurn: { + x_min: -310, + x_max: 310, + y_min: -143, + y_max: 143, + ha: 286, + o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z', + }, + ornamentTurnSlash: { + x_min: -310, + x_max: 310, + y_min: -201, + y_max: 201, + ha: 402, + o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z', + }, + ornamentMordent: { + x_min: -296, + x_max: 296, + y_min: -215, + y_max: 198, + ha: 413, + o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z', + }, + ornamentShortTrill: { + x_min: -296, + x_max: 296, + y_min: -127, + y_max: 127, + ha: 253, + o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z', + }, + ornamentTremblement: { + x_min: -419, + x_max: 419, + y_min: -127, + y_max: 127, + ha: 253, + o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z', + }, + ornamentPrecompAppoggTrill: { + x_min: -419, + x_max: 419, + y_min: -127, + y_max: 255, + ha: 381, + o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: -433, + x_max: 433, + y_min: -243, + y_max: 127, + ha: 370, + o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: -433, + x_max: 433, + y_min: -243, + y_max: 198, + ha: 442, + o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: -433, + x_max: 433, + y_min: -127, + y_max: 244, + ha: 370, + o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: -439, + x_max: 439, + y_min: -127, + y_max: 236, + ha: 363, + o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z', + }, + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: -439, + x_max: 439, + y_min: -215, + y_max: 236, + ha: 451, + o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: -439, + x_max: 439, + y_min: -236, + y_max: 127, + ha: 362, + o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z', + }, + stringsDownBow: { + x_min: -168, + x_max: 168, + y_min: 0, + y_max: 353, + ha: 353, + o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z', + }, + stringsUpBow: { + x_min: -110, + x_max: 110, + y_min: 0, + y_max: 277, + ha: 277, + o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z', + }, + stringsHarmonic: { + x_min: -82, + x_max: 82, + y_min: -82, + y_max: 82, + ha: 163, + o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: -110, + x_max: 110, + y_min: -110, + y_max: 205, + ha: 315, + o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: -110, + x_max: 110, + y_min: -205, + y_max: 110, + ha: 315, + o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z', + }, + pluckedLeftHandPizzicato: { + x_min: -155, + x_max: 155, + y_min: -157, + y_max: 157, + ha: 315, + o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 782, + y_min: -1, + y_max: 500, + ha: 501, + o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 435, + y_min: 65, + y_max: 500, + ha: 435, + o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z', + }, + pictChokeCymbal: { + x_min: 0, + x_max: 168, + y_min: -155, + y_max: 155, + ha: 311, + o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z', + }, + wiggleArpeggiatoUp: { + x_min: -8, + x_max: 269, + y_min: 0, + y_max: 126, + ha: 126, + o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z', + }, + arrowheadBlackUp: { + x_min: 11, + x_max: 239, + y_min: -6, + y_max: 269, + ha: 275, + o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z', + }, + arrowheadBlackDown: { + x_min: 11, + x_max: 239, + y_min: 6, + y_max: 281, + ha: 275, + o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z', + }, + }, + fontFamily: 'GonvilleSmufl', + resolution: 1000, + generatedOn: '2023-04-20T22:11:26.009Z', +}; + + +/***/ }), + +/***/ "./src/fonts/leland_glyphs.ts": +/*!************************************!*\ + !*** ./src/fonts/leland_glyphs.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "LelandFont": () => (/* binding */ LelandFont) +/* harmony export */ }); +const LelandFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 491, + y_min: 0, + y_max: 279, + ha: 279, + o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z', + }, + bracketBottom: { + x_min: 0, + x_max: 491, + y_min: -279, + y_max: 0, + ha: 279, + o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z', + }, + segno: { + x_min: 0, + x_max: 654, + y_min: 0, + y_max: 869, + ha: 869, + o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z', + }, + coda: { + x_min: 0, + x_max: 745, + y_min: -113, + y_max: 735, + ha: 848, + o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z', + }, + gClef: { + x_min: 0, + x_max: 640, + y_min: -666, + y_max: 1112, + ha: 1778, + o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z', + }, + cClef: { + x_min: 0, + x_max: 627, + y_min: -480, + y_max: 482, + ha: 962, + o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z', + }, + fClef: { + x_min: 0, + x_max: 664, + y_min: -617, + y_max: 251, + ha: 868, + o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z', + }, + unpitchedPercussionClef1: { + x_min: 0, + x_max: 352, + y_min: -252, + y_max: 252, + ha: 504, + o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z', + }, + '6stringTabClef': { + x_min: 0, + x_max: 439, + y_min: -743, + y_max: 746, + ha: 1489, + o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z', + }, + timeSig0: { + x_min: 15, + x_max: 389, + y_min: -254, + y_max: 255, + ha: 509, + o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z', + }, + timeSig1: { + x_min: 15, + x_max: 336, + y_min: -243, + y_max: 245, + ha: 488, + o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z', + }, + timeSig2: { + x_min: 15, + x_max: 377, + y_min: -243, + y_max: 245, + ha: 488, + o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z', + }, + timeSig3: { + x_min: 15, + x_max: 364, + y_min: -244, + y_max: 244, + ha: 488, + o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z', + }, + timeSig4: { + x_min: 14, + x_max: 442, + y_min: -248, + y_max: 249, + ha: 497, + o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z', + }, + timeSig5: { + x_min: 15, + x_max: 362, + y_min: -244, + y_max: 246, + ha: 490, + o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z', + }, + timeSig6: { + x_min: 15, + x_max: 387, + y_min: -244, + y_max: 245, + ha: 489, + o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z', + }, + timeSig7: { + x_min: 15, + x_max: 366, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z', + }, + timeSig8: { + x_min: 15, + x_max: 393, + y_min: -248, + y_max: 246, + ha: 494, + o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z', + }, + timeSig9: { + x_min: 15, + x_max: 387, + y_min: -244, + y_max: 245, + ha: 489, + o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z', + }, + timeSigCommon: { + x_min: 0, + x_max: 463, + y_min: -256, + y_max: 258, + ha: 514, + o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z', + }, + timeSigCutCommon: { + x_min: 0, + x_max: 463, + y_min: -376, + y_max: 388, + ha: 764, + o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z', + }, + timeSigPlus: { + x_min: 0, + x_max: 408, + y_min: -204, + y_max: 204, + ha: 408, + o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 538, + y_min: -178, + y_max: 179, + ha: 357, + o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 373, + y_min: -134, + y_max: 136, + ha: 270, + o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 325, + y_min: -133, + y_max: 132, + ha: 265, + o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 325, + y_min: -133, + y_max: 132, + ha: 265, + o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 325, + y_min: -132, + y_max: 132, + ha: 264, + o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 325, + y_min: -162, + y_max: 163, + ha: 325, + o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z', + }, + noteheadDoubleWholeSquare: { + x_min: 0, + x_max: 432, + y_min: -179, + y_max: 177, + ha: 356, + o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z', + }, + noteheadSquareWhite: { + x_min: 0, + x_max: 310, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z', + }, + noteheadSquareBlack: { + x_min: 0, + x_max: 310, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 310, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 223 176 l 0 -196 l 446 -196 z', + }, + noteheadSlashedDoubleWhole1: { + x_min: -66, + x_max: 456, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z', + }, + noteheadSlashedWhole1: { + x_min: -75, + x_max: 448, + y_min: -211, + y_max: 214, + ha: 425, + o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z', + }, + noteheadSlashedHalf1: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z', + }, + noteheadSlashedBlack1: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z', + }, + noteheadSlashedDoubleWhole2: { + x_min: -66, + x_max: 456, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z', + }, + noteheadSlashedWhole2: { + x_min: -75, + x_max: 448, + y_min: -212, + y_max: 214, + ha: 426, + o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z', + }, + noteheadSlashedHalf2: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z', + }, + noteheadSlashedBlack2: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z', + }, + noteheadDiamondDoubleWhole: { + x_min: 0, + x_max: 373, + y_min: -178, + y_max: 179, + ha: 357, + o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 373, + y_min: -133, + y_max: 132, + ha: 265, + o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 335, + y_min: -132, + y_max: 133, + ha: 265, + o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 335, + y_min: -132, + y_max: 133, + ha: 265, + o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z', + }, + noteheadParenthesisRight: { + x_min: 0, + x_max: 75, + y_min: -209, + y_max: 212, + ha: 421, + o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z', + }, + noteheadParenthesisLeft: { + x_min: 0, + x_max: 75, + y_min: -212, + y_max: 209, + ha: 421, + o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z', + }, + noteheadMoonBlack: { + x_min: 0, + x_max: 310, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z', + }, + noteheadTriangleLeftBlack: { + x_min: 0, + x_max: 339, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 0 176 l 0 -196 l 488 -196 z', + }, + noteheadTriangleRightBlack: { + x_min: 0, + x_max: 339, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 488 176 l 0 -196 l 488 -196 z', + }, + noteheadTriangleRoundDownBlack: { + x_min: 0, + x_max: 310, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z', + }, + augmentationDot: { + x_min: 0, + x_max: 100, + y_min: -50, + y_max: 50, + ha: 100, + o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z', + }, + tremolo1: { + x_min: 0, + x_max: 290, + y_min: -93, + y_max: 96, + ha: 189, + o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z', + }, + flag8thUp: { + x_min: 0, + x_max: 289, + y_min: -817, + y_max: 12, + ha: 829, + o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z', + }, + flag8thDown: { + x_min: 0, + x_max: 309, + y_min: -12, + y_max: 817, + ha: 829, + o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z', + }, + flag16thUp: { + x_min: 0, + x_max: 279, + y_min: -820, + y_max: 12, + ha: 832, + o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z', + }, + flag16thDown: { + x_min: 0, + x_max: 309, + y_min: -26, + y_max: 803, + ha: 829, + o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z', + }, + flag32ndUp: { + x_min: 0, + x_max: 279, + y_min: -821, + y_max: 186, + ha: 1007, + o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z', + }, + flag32ndDown: { + x_min: 0, + x_max: 309, + y_min: -216, + y_max: 803, + ha: 1019, + o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z', + }, + flag64thUp: { + x_min: 0, + x_max: 279, + y_min: -822, + y_max: 373, + ha: 1195, + o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z', + }, + flag64thDown: { + x_min: 0, + x_max: 309, + y_min: -403, + y_max: 804, + ha: 1207, + o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z', + }, + flag128thUp: { + x_min: 0, + x_max: 279, + y_min: -821, + y_max: 573, + ha: 1394, + o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z', + }, + flag128thDown: { + x_min: 0, + x_max: 309, + y_min: -591, + y_max: 803, + ha: 1394, + o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z', + }, + accidentalFlat: { + x_min: 0, + x_max: 203, + y_min: -176, + y_max: 453, + ha: 629, + o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 171, + y_min: -323, + y_max: 325, + ha: 648, + o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z', + }, + accidentalSharp: { + x_min: 0, + x_max: 244, + y_min: -333, + y_max: 334, + ha: 667, + o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 275, + y_min: -137, + y_max: 138, + ha: 275, + o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z', + }, + accidentalDoubleFlat: { + x_min: 0, + x_max: 371, + y_min: -176, + y_max: 453, + ha: 629, + o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z', + }, + accidentalParensLeft: { + x_min: 0, + x_max: 75, + y_min: -212, + y_max: 209, + ha: 421, + o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z', + }, + accidentalParensRight: { + x_min: 0, + x_max: 75, + y_min: -209, + y_max: 212, + ha: 421, + o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 0, + x_max: 193, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 0, + x_max: 422, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 180, + y_min: -316, + y_max: 320, + ha: 636, + o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: 0, + x_max: 290, + y_min: -328, + y_max: 339, + ha: 667, + o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z', + }, + accidentalBuyukMucennebFlat: { + x_min: 0, + x_max: 277, + y_min: -176, + y_max: 454, + ha: 630, + o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z', + }, + accidentalBuyukMucennebSharp: { + x_min: 0, + x_max: 348, + y_min: -332, + y_max: 334, + ha: 666, + o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z', + }, + accidentalBakiyeFlat: { + x_min: 0, + x_max: 277, + y_min: -176, + y_max: 454, + ha: 630, + o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z', + }, + accidentalKucukMucennebSharp: { + x_min: 0, + x_max: 348, + y_min: -316, + y_max: 318, + ha: 634, + o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z', + }, + articAccentAbove: { + x_min: 0, + x_max: 361, + y_min: 0, + y_max: 235, + ha: 235, + o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z', + }, + articAccentBelow: { + x_min: 0, + x_max: 361, + y_min: -235, + y_max: 0, + ha: 235, + o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z', + }, + articTenutoAbove: { + x_min: 0, + x_max: 316, + y_min: 0, + y_max: 46, + ha: 46, + o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z', + }, + articTenutoBelow: { + x_min: 0, + x_max: 316, + y_min: -46, + y_max: 0, + ha: 46, + o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z', + }, + articStaccatoAbove: { + x_min: 0, + x_max: 78, + y_min: 0, + y_max: 78, + ha: 78, + o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z', + }, + articStaccatoBelow: { + x_min: 0, + x_max: 78, + y_min: -78, + y_max: 0, + ha: 78, + o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z', + }, + articStaccatissimoAbove: { + x_min: 0, + x_max: 127, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z', + }, + articStaccatissimoBelow: { + x_min: 0, + x_max: 127, + y_min: -248, + y_max: 0, + ha: 248, + o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z', + }, + articMarcatoAbove: { + x_min: 1, + x_max: 296, + y_min: 0, + y_max: 253, + ha: 253, + o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z', + }, + articMarcatoBelow: { + x_min: 0, + x_max: 295, + y_min: -253, + y_max: 0, + ha: 253, + o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z', + }, + fermataAbove: { + x_min: 0, + x_max: 622, + y_min: 0, + y_max: 368, + ha: 368, + o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z', + }, + fermataBelow: { + x_min: 0, + x_max: 622, + y_min: -368, + y_max: 0, + ha: 368, + o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z', + }, + fermataLongAbove: { + x_min: 0, + x_max: 623, + y_min: 0, + y_max: 368, + ha: 368, + o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z', + }, + fermataLongBelow: { + x_min: 0, + x_max: 623, + y_min: -368, + y_max: 0, + ha: 368, + o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z', + }, + fermataVeryLongAbove: { + x_min: 0, + x_max: 842, + y_min: 0, + y_max: 549, + ha: 549, + o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z', + }, + fermataVeryLongBelow: { + x_min: 0, + x_max: 842, + y_min: -549, + y_max: 0, + ha: 549, + o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z', + }, + fermataShortAbove: { + x_min: 0, + x_max: 642, + y_min: 0, + y_max: 454, + ha: 454, + o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z', + }, + fermataShortBelow: { + x_min: 0, + x_max: 642, + y_min: -454, + y_max: 0, + ha: 454, + o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z', + }, + breathMarkComma: { + x_min: 0, + x_max: 191, + y_min: 0, + y_max: 321, + ha: 321, + o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z', + }, + caesura: { + x_min: 0, + x_max: 380, + y_min: 0, + y_max: 490, + ha: 490, + o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 368, + y_min: 0, + y_max: 491, + ha: 491, + o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z', + }, + restMaxima: { + x_min: 0, + x_max: 450, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 125, + y_min: -11, + y_max: 262, + ha: 273, + o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z', + }, + restWhole: { + x_min: 0, + x_max: 325, + y_min: -131, + y_max: 5, + ha: 136, + o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z', + }, + restWholeLegerLine: { + x_min: -139, + x_max: 464, + y_min: -122, + y_max: 14, + ha: 136, + o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z', + }, + restHalf: { + x_min: 0, + x_max: 325, + y_min: -4, + y_max: 132, + ha: 136, + o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z', + }, + restHalfLegerLine: { + x_min: -139, + x_max: 464, + y_min: -14, + y_max: 122, + ha: 136, + o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z', + }, + restQuarter: { + x_min: 0, + x_max: 235, + y_min: -331, + y_max: 401, + ha: 732, + o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z', + }, + rest8th: { + x_min: 0, + x_max: 276, + y_min: -255, + y_max: 204, + ha: 459, + o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z', + }, + rest16th: { + x_min: 1, + x_max: 344, + y_min: -507, + y_max: 204, + ha: 711, + o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z', + }, + rest32nd: { + x_min: 0, + x_max: 391, + y_min: -507, + y_max: 460, + ha: 967, + o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z', + }, + rest64th: { + x_min: 0, + x_max: 423, + y_min: -758, + y_max: 464, + ha: 1222, + o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z', + }, + rest128th: { + x_min: -1, + x_max: 475, + y_min: -759, + y_max: 717, + ha: 1476, + o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z', + }, + dynamicPiano: { + x_min: -95, + x_max: 317, + y_min: -163, + y_max: 263, + ha: 426, + o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z', + }, + dynamicMezzo: { + x_min: -7, + x_max: 374, + y_min: -2, + y_max: 251, + ha: 253, + o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z', + }, + dynamicForte: { + x_min: -137, + x_max: 334, + y_min: -193, + y_max: 421, + ha: 614, + o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z', + }, + dynamicRinforzando: { + x_min: -12, + x_max: 230, + y_min: 0, + y_max: 254, + ha: 254, + o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z', + }, + dynamicSforzando: { + x_min: 0, + x_max: 208, + y_min: -5, + y_max: 263, + ha: 268, + o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z', + }, + dynamicZ: { + x_min: -42, + x_max: 239, + y_min: -1, + y_max: 258, + ha: 259, + o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z', + }, + ornamentTrill: { + x_min: -12, + x_max: 383, + y_min: 0, + y_max: 383, + ha: 383, + o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z', + }, + ornamentTurn: { + x_min: 0, + x_max: 456, + y_min: 0, + y_max: 232, + ha: 232, + o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z', + }, + ornamentTurnSlash: { + x_min: 0, + x_max: 456, + y_min: -80, + y_max: 313, + ha: 393, + o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z', + }, + ornamentMordent: { + x_min: 0, + x_max: 473, + y_min: -77, + y_max: 316, + ha: 393, + o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z', + }, + ornamentShortTrill: { + x_min: 0, + x_max: 473, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z', + }, + ornamentTremblement: { + x_min: 0, + x_max: 654, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z', + }, + ornamentPrecompAppoggTrill: { + x_min: 0, + x_max: 680, + y_min: 0, + y_max: 388, + ha: 388, + o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: 0, + x_max: 662, + y_min: -158, + y_max: 248, + ha: 406, + o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: 0, + x_max: 662, + y_min: -158, + y_max: 321, + ha: 479, + o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: 0, + x_max: 662, + y_min: 0, + y_max: 406, + ha: 406, + o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: 0, + x_max: 857, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: 0, + x_max: 565, + y_min: -171, + y_max: 249, + ha: 420, + o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z', + }, + brassMuteClosed: { + x_min: 0, + x_max: 312, + y_min: 0, + y_max: 312, + ha: 312, + o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z', + }, + brassMuteOpen: { + x_min: 0, + x_max: 280, + y_min: 0, + y_max: 280, + ha: 280, + o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z', + }, + stringsDownBow: { + x_min: 0, + x_max: 315, + y_min: 0, + y_max: 293, + ha: 293, + o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z', + }, + stringsUpBow: { + x_min: 0, + x_max: 262, + y_min: 0, + y_max: 343, + ha: 343, + o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z', + }, + stringsHarmonic: { + x_min: 0, + x_max: 181, + y_min: 0, + y_max: 181, + ha: 181, + o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: 0, + x_max: 269, + y_min: 0, + y_max: 389, + ha: 389, + o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: 0, + x_max: 269, + y_min: 0, + y_max: 389, + ha: 389, + o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 981, + y_min: -10, + y_max: 545, + ha: 555, + o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 473, + y_min: 0, + y_max: 473, + ha: 473, + o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z', + }, + wiggleArpeggiatoUp: { + x_min: -22, + x_max: 242, + y_min: 0, + y_max: 164, + ha: 164, + o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z', + }, + repeat1Bar: { + x_min: 0, + x_max: 481, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z', + }, + repeat2Bars: { + x_min: 0, + x_max: 735, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z', + }, + repeat4Bars: { + x_min: 0, + x_max: 1243, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z', + }, + repeatBarSlash: { + x_min: 0, + x_max: 481, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z', + }, + csymDiminished: { + x_min: 0, + x_max: 501, + y_min: 0, + y_max: 501, + ha: 501, + o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z', + }, + csymHalfDiminished: { + x_min: -1, + x_max: 502, + y_min: -1, + y_max: 502, + ha: 503, + o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z', + }, + csymAugmented: { + x_min: 1, + x_max: 321, + y_min: 90, + y_max: 410, + ha: 320, + o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z', + }, + csymMajorSeventh: { + x_min: 0, + x_max: 500, + y_min: 10, + y_max: 490, + ha: 480, + o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z', + }, + accidentalNarrowReversedFlat: { + x_min: 0, + x_max: 160, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z', + }, + accidentalNarrowReversedFlatAndFlat: { + x_min: 0, + x_max: 416, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z', + }, + }, + fontFamily: 'Leland', + resolution: 1000, + generatedOn: '2022-12-19T23:52:37.756Z', +}; + + +/***/ }), + +/***/ "./src/fonts/load_all.ts": +/*!*******************************!*\ + !*** ./src/fonts/load_all.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadAllMusicFonts": () => (/* binding */ loadAllMusicFonts) +/* harmony export */ }); +/* harmony import */ var _load_bravura__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./load_bravura */ "./src/fonts/load_bravura.ts"); +/* harmony import */ var _load_custom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./load_custom */ "./src/fonts/load_custom.ts"); +/* harmony import */ var _load_gonville__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./load_gonville */ "./src/fonts/load_gonville.ts"); +/* harmony import */ var _load_leland__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./load_leland */ "./src/fonts/load_leland.ts"); +/* harmony import */ var _load_petaluma__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./load_petaluma */ "./src/fonts/load_petaluma.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// vexflow.js statically bundles & preloads all of our music engraving fonts. + + + + + +// ADD_MUSIC_FONT +// import { loadXXX } from './load_xxx'; +// Populate our font "database" with all our music fonts. +function loadAllMusicFonts() { + (0,_load_bravura__WEBPACK_IMPORTED_MODULE_0__.loadBravura)(); + (0,_load_gonville__WEBPACK_IMPORTED_MODULE_2__.loadGonville)(); + (0,_load_petaluma__WEBPACK_IMPORTED_MODULE_4__.loadPetaluma)(); + (0,_load_custom__WEBPACK_IMPORTED_MODULE_1__.loadCustom)(); + (0,_load_leland__WEBPACK_IMPORTED_MODULE_3__.loadLeland)(); + // ADD_MUSIC_FONT + // loadXXX(); +} + + +/***/ }), + +/***/ "./src/fonts/load_bravura.ts": +/*!***********************************!*\ + !*** ./src/fonts/load_bravura.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadBravura": () => (/* binding */ loadBravura) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bravura_glyphs */ "./src/fonts/bravura_glyphs.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base. +// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts +// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js). +// ADD_MUSIC_FONT +// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts. +// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts. +// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js +// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary. + + + +function loadBravura() { + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Bravura', _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__.BravuraFont, _common_metrics__WEBPACK_IMPORTED_MODULE_2__.CommonMetrics); +} + + +/***/ }), + +/***/ "./src/fonts/load_custom.ts": +/*!**********************************!*\ + !*** ./src/fonts/load_custom.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadCustom": () => (/* binding */ loadCustom) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _custom_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./custom_glyphs */ "./src/fonts/custom_glyphs.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +function loadCustom() { + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Custom', _custom_glyphs__WEBPACK_IMPORTED_MODULE_2__.CustomFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics); +} + + +/***/ }), + +/***/ "./src/fonts/load_gonville.ts": +/*!************************************!*\ + !*** ./src/fonts/load_gonville.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadGonville": () => (/* binding */ loadGonville) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _gonville_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./gonville_glyphs */ "./src/fonts/gonville_glyphs.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +function loadGonville() { + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Gonville', _gonville_glyphs__WEBPACK_IMPORTED_MODULE_2__.GonvilleSmuflFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics); +} + + +/***/ }), + +/***/ "./src/fonts/load_leland.ts": +/*!**********************************!*\ + !*** ./src/fonts/load_leland.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadLeland": () => (/* binding */ loadLeland) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _leland_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./leland_glyphs */ "./src/fonts/leland_glyphs.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +function loadLeland() { + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Leland', _leland_glyphs__WEBPACK_IMPORTED_MODULE_2__.LelandFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics); +} + + +/***/ }), + +/***/ "./src/fonts/load_petaluma.ts": +/*!************************************!*\ + !*** ./src/fonts/load_petaluma.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadPetaluma": () => (/* binding */ loadPetaluma) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petaluma_glyphs */ "./src/fonts/petaluma_glyphs.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +const petalumaChordMetrics = { + csymDiminished: { + leftSideBearing: -95, + advanceWidth: 506, + yOffset: 0, + }, + csymHalfDiminished: { + leftSideBearing: -32, + advanceWidth: 506, + yOffset: 0, + }, + csymAugmented: { + leftSideBearing: -25, + advanceWidth: 530, + yOffset: 0, + }, + csymParensLeftTall: { + leftSideBearing: 0, + advanceWidth: 155, + yOffset: 150, + }, + csymParensRightTall: { + leftSideBearing: 40, + advanceWidth: 189, + yOffset: 150, + }, + csymBracketLeftTall: { + leftSideBearing: 0, + advanceWidth: 328, + yOffset: 0, + }, + csymBracketRightTall: { + leftSideBearing: 1, + advanceWidth: 600, + yOffset: 0, + }, + csymParensLeftVeryTall: { + leftSideBearing: 0, + advanceWidth: 210, + yOffset: 250, + }, + csymParensRightVeryTall: { + leftSideBearing: -100, + advanceWidth: 111, + yOffset: 250, + }, + csymDiagonalArrangementSlash: { + leftSideBearing: -1, + advanceWidth: 990, + yOffset: 0, + }, + csymMinor: { + leftSideBearing: 0, + advanceWidth: 482, + yOffset: 0, + }, + csymMajorSeventh: { + leftSideBearing: 100, + yOffset: 0, + advanceWidth: 600, + }, + accidentalSharp: { + leftSideBearing: 0, + advanceWidth: 425, + yOffset: -422, + }, + accidentalFlat: { + leftSideBearing: -10, + advanceWidth: 228, + yOffset: -284, + }, +}; +function loadPetaluma() { + const metrics = JSON.parse(JSON.stringify(_common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics)); + const chordMetrics = metrics.chordSymbol; + if (chordMetrics) { + chordMetrics.glyphs = petalumaChordMetrics; + } + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Petaluma', _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_2__.PetalumaFont, metrics); +} + + +/***/ }), + +/***/ "./src/fonts/petaluma_glyphs.ts": +/*!**************************************!*\ + !*** ./src/fonts/petaluma_glyphs.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PetalumaFont": () => (/* binding */ PetalumaFont) +/* harmony export */ }); +const PetalumaFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 508, + y_min: 0, + y_max: 370, + ha: 370, + o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z', + }, + bracketBottom: { + x_min: 0, + x_max: 496, + y_min: -393, + y_max: 0, + ha: 393, + o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z', + }, + barlineTick: { + x_min: 0, + x_max: 56, + y_min: 877, + y_max: 1122, + ha: 245, + o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z', + }, + breathMarkTick: { + x_min: 0, + x_max: 568, + y_min: 0, + y_max: 621, + ha: 621, + o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z', + }, + segno: { + x_min: 0, + x_max: 798, + y_min: -65, + y_max: 806, + ha: 871, + o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z', + }, + coda: { + x_min: 0, + x_max: 1380, + y_min: -196, + y_max: 1037, + ha: 1233, + o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z', + }, + gClef: { + x_min: 0, + x_max: 664, + y_min: -559, + y_max: 1009, + ha: 1568, + o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z', + }, + cClef: { + x_min: 0, + x_max: 731, + y_min: -543, + y_max: 543, + ha: 1086, + o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z', + }, + fClef: { + x_min: 0, + x_max: 776, + y_min: -496, + y_max: 216, + ha: 712, + o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z', + }, + unpitchedPercussionClef1: { + x_min: 0, + x_max: 379, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z', + }, + '6stringTabClef': { + x_min: 0, + x_max: 438, + y_min: -768, + y_max: 767, + ha: 1535, + o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z', + }, + timeSig0: { + x_min: 20, + x_max: 513, + y_min: -358, + y_max: 359, + ha: 717, + o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z', + }, + timeSig1: { + x_min: 20, + x_max: 283, + y_min: -364, + y_max: 366, + ha: 730, + o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z', + }, + timeSig2: { + x_min: 20, + x_max: 660, + y_min: -379, + y_max: 382, + ha: 761, + o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z', + }, + timeSig3: { + x_min: 20, + x_max: 540, + y_min: -392, + y_max: 392, + ha: 784, + o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z', + }, + timeSig4: { + x_min: 20, + x_max: 633, + y_min: -490, + y_max: 491, + ha: 981, + o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z', + }, + timeSig5: { + x_min: 20, + x_max: 583, + y_min: -389, + y_max: 389, + ha: 778, + o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z', + }, + timeSig6: { + x_min: 20, + x_max: 565, + y_min: -363, + y_max: 363, + ha: 726, + o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z', + }, + timeSig7: { + x_min: 20, + x_max: 592, + y_min: -345, + y_max: 345, + ha: 690, + o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z', + }, + timeSig8: { + x_min: 20, + x_max: 504, + y_min: -428, + y_max: 428, + ha: 856, + o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z', + }, + timeSig9: { + x_min: 20, + x_max: 494, + y_min: -421, + y_max: 421, + ha: 842, + o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z', + }, + timeSigCommon: { + x_min: 20, + x_max: 585, + y_min: -298, + y_max: 294, + ha: 592, + o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z', + }, + timeSigCutCommon: { + x_min: 20, + x_max: 695, + y_min: -687, + y_max: 687, + ha: 1374, + o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z', + }, + timeSigPlus: { + x_min: 0, + x_max: 661, + y_min: -358, + y_max: 358, + ha: 716, + o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z', + }, + timeSigPlusSmall: { + x_min: 0, + x_max: 418, + y_min: -197, + y_max: 199, + ha: 396, + o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z', + }, + timeSigMinus: { + x_min: 0, + x_max: 662, + y_min: -54, + y_max: 55, + ha: 109, + o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z', + }, + timeSigParensRight: { + x_min: 0, + x_max: 274, + y_min: -723, + y_max: 725, + ha: 1448, + o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z', + }, + timeSigParensRightSmall: { + x_min: 0, + x_max: 154, + y_min: -422, + y_max: 422, + ha: 844, + o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z', + }, + timeSigParensLeft: { + x_min: 1, + x_max: 400, + y_min: -728, + y_max: 728, + ha: 1456, + o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z', + }, + timeSigParensLeftSmall: { + x_min: 0, + x_max: 173, + y_min: -405, + y_max: 404, + ha: 809, + o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 614, + y_min: -223, + y_max: 223, + ha: 446, + o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 380, + y_min: -186, + y_max: 165, + ha: 351, + o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 334, + y_min: -174, + y_max: 175, + ha: 349, + o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 334, + y_min: -164, + y_max: 164, + ha: 328, + o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z', + }, + noteheadXDoubleWhole: { + x_min: 0, + x_max: 730, + y_min: -266, + y_max: 267, + ha: 533, + o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z', + }, + noteheadXWhole: { + x_min: 0, + x_max: 506, + y_min: -143, + y_max: 144, + ha: 287, + o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z', + }, + noteheadXHalf: { + x_min: 0, + x_max: 421, + y_min: -146, + y_max: 151, + ha: 297, + o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 289, + y_min: -156, + y_max: 157, + ha: 313, + o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z', + }, + noteheadCircleXDoubleWhole: { + x_min: 0, + x_max: 437, + y_min: -220, + y_max: 219, + ha: 439, + o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z', + }, + noteheadCircleXWhole: { + x_min: 0, + x_max: 323, + y_min: -190, + y_max: 184, + ha: 374, + o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z', + }, + noteheadCircleXHalf: { + x_min: 0, + x_max: 309, + y_min: -179, + y_max: 179, + ha: 358, + o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 344, + y_min: -179, + y_max: 175, + ha: 354, + o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z', + }, + noteheadCircledDoubleWhole: { + x_min: 0, + x_max: 672, + y_min: -291, + y_max: 291, + ha: 582, + o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z', + }, + noteheadCircledWhole: { + x_min: -50, + x_max: 472, + y_min: -231, + y_max: 232, + ha: 463, + o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z', + }, + noteheadCircledHalf: { + x_min: -50, + x_max: 393, + y_min: -175, + y_max: 175, + ha: 350, + o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z', + }, + noteheadCircledBlack: { + x_min: -70, + x_max: 326, + y_min: -168, + y_max: 192, + ha: 360, + o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z', + }, + noteheadDoubleWholeSquare: { + x_min: 0, + x_max: 474, + y_min: -209, + y_max: 211, + ha: 420, + o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z', + }, + noteheadSquareWhite: { + x_min: 0, + x_max: 350, + y_min: -131, + y_max: 131, + ha: 262, + o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z', + }, + noteheadSquareBlack: { + x_min: 0, + x_max: 342, + y_min: -130, + y_max: 132, + ha: 262, + o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z', + }, + noteheadTriangleDownDoubleWhole: { + x_min: 0, + x_max: 510, + y_min: -213, + y_max: 213, + ha: 426, + o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z', + }, + noteheadTriangleDownWhole: { + x_min: 0, + x_max: 366, + y_min: -145, + y_max: 138, + ha: 283, + o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z', + }, + noteheadTriangleDownHalf: { + x_min: 0, + x_max: 341, + y_min: -159, + y_max: 159, + ha: 318, + o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z', + }, + noteheadTriangleDownBlack: { + x_min: 0, + x_max: 346, + y_min: -149, + y_max: 149, + ha: 298, + o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z', + }, + noteheadTriangleUpDoubleWhole: { + x_min: 0, + x_max: 510, + y_min: -213, + y_max: 213, + ha: 426, + o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z', + }, + noteheadTriangleUpWhole: { + x_min: 0, + x_max: 366, + y_min: -145, + y_max: 138, + ha: 283, + o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z', + }, + noteheadTriangleUpHalf: { + x_min: 0, + x_max: 341, + y_min: -159, + y_max: 159, + ha: 318, + o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 346, + y_min: -149, + y_max: 149, + ha: 298, + o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z', + }, + noteheadSlashedDoubleWhole1: { + x_min: 0, + x_max: 697, + y_min: -290, + y_max: 290, + ha: 580, + o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z', + }, + noteheadSlashedWhole1: { + x_min: -76, + x_max: 498, + y_min: -168, + y_max: 168, + ha: 336, + o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z', + }, + noteheadSlashedHalf1: { + x_min: -79, + x_max: 471, + y_min: -184, + y_max: 184, + ha: 368, + o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z', + }, + noteheadSlashedBlack1: { + x_min: -110, + x_max: 452, + y_min: -190, + y_max: 190, + ha: 380, + o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z', + }, + noteheadSlashedDoubleWhole2: { + x_min: 0, + x_max: 697, + y_min: -295, + y_max: 295, + ha: 590, + o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z', + }, + noteheadSlashedWhole2: { + x_min: -83, + x_max: 510, + y_min: -201, + y_max: 198, + ha: 399, + o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z', + }, + noteheadSlashedHalf2: { + x_min: -73, + x_max: 454, + y_min: -188, + y_max: 188, + ha: 376, + o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z', + }, + noteheadSlashedBlack2: { + x_min: -84, + x_max: 405, + y_min: -189, + y_max: 189, + ha: 378, + o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z', + }, + noteheadDiamondDoubleWhole: { + x_min: 0, + x_max: 429, + y_min: -221, + y_max: 221, + ha: 442, + o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 271, + y_min: -132, + y_max: 132, + ha: 264, + o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 295, + y_min: -148, + y_max: 148, + ha: 296, + o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 310, + y_min: -146, + y_max: 146, + ha: 292, + o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z', + }, + noteheadParenthesis: { + x_min: -70, + x_max: 329, + y_min: -196, + y_max: 201, + ha: 397, + o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z', + }, + noteheadParenthesisRight: { + x_min: -30, + x_max: 82, + y_min: -199, + y_max: 206, + ha: 405, + o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z', + }, + noteheadParenthesisLeft: { + x_min: 0, + x_max: 106, + y_min: -197, + y_max: 197, + ha: 394, + o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z', + }, + noteheadMoonBlack: { + x_min: 0, + x_max: 328, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z', + }, + noteheadTriangleLeftBlack: { + x_min: 0, + x_max: 391, + y_min: -142, + y_max: 142, + ha: 284, + o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z', + }, + noteheadTriangleRightBlack: { + x_min: 0, + x_max: 398, + y_min: -139, + y_max: 140, + ha: 279, + o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z', + }, + noteheadTriangleRoundDownBlack: { + x_min: 0, + x_max: 334, + y_min: -134, + y_max: 136, + ha: 270, + o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z', + }, + augmentationDot: { + x_min: 0, + x_max: 96, + y_min: -57, + y_max: 57, + ha: 114, + o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z', + }, + tremolo1: { + x_min: -158, + x_max: 156, + y_min: -88, + y_max: 88, + ha: 176, + o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z', + }, + flag8thUp: { + x_min: 0, + x_max: 261, + y_min: -819, + y_max: 0, + ha: 819, + o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z', + }, + flag8thDown: { + x_min: 0, + x_max: 261, + y_min: 0, + y_max: 819, + ha: 819, + o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z', + }, + flag16thUp: { + x_min: 0, + x_max: 327, + y_min: -819, + y_max: 0, + ha: 819, + o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z', + }, + flag16thDown: { + x_min: 0, + x_max: 327, + y_min: 0, + y_max: 819, + ha: 819, + o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z', + }, + flag32ndUp: { + x_min: 0, + x_max: 268, + y_min: -849, + y_max: 149, + ha: 999, + o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z', + }, + flag32ndDown: { + x_min: -3, + x_max: 268, + y_min: -169, + y_max: 829, + ha: 999, + o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z', + }, + flag64thUp: { + x_min: -4, + x_max: 282, + y_min: -824, + y_max: 347, + ha: 1171, + o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z', + }, + flag64thDown: { + x_min: -5, + x_max: 281, + y_min: -375, + y_max: 796, + ha: 1171, + o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z', + }, + flag128thUp: { + x_min: 0, + x_max: 252, + y_min: -804, + y_max: 530, + ha: 1334, + o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z', + }, + flag128thDown: { + x_min: -1, + x_max: 252, + y_min: -580, + y_max: 754, + ha: 1334, + o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z', + }, + accidentalFlat: { + x_min: 1, + x_max: 209, + y_min: -208, + y_max: 472, + ha: 680, + o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 214, + y_min: -456, + y_max: 462, + ha: 918, + o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z', + }, + accidentalSharp: { + x_min: -22, + x_max: 390, + y_min: -384, + y_max: 383, + ha: 767, + o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 287, + y_min: -159, + y_max: 159, + ha: 318, + o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z', + }, + accidentalDoubleFlat: { + x_min: 0, + x_max: 359, + y_min: -220, + y_max: 446, + ha: 666, + o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z', + }, + accidentalParensLeft: { + x_min: 0, + x_max: 130, + y_min: -270, + y_max: 268, + ha: 538, + o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z', + }, + accidentalParensRight: { + x_min: 0, + x_max: 139, + y_min: -275, + y_max: 277, + ha: 552, + o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 0, + x_max: 208, + y_min: -240, + y_max: 440, + ha: 680, + o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 0, + x_max: 422, + y_min: -240, + y_max: 440, + ha: 680, + o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 300, + y_min: -338, + y_max: 351, + ha: 689, + o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: -23, + x_max: 388, + y_min: -373, + y_max: 445, + ha: 818, + o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z', + }, + accidentalBuyukMucennebFlat: { + x_min: 2, + x_max: 287, + y_min: -248, + y_max: 432, + ha: 680, + o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z', + }, + accidentalBuyukMucennebSharp: { + x_min: -1, + x_max: 467, + y_min: -460, + y_max: 350, + ha: 810, + o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z', + }, + accidentalBakiyeFlat: { + x_min: 2, + x_max: 287, + y_min: -236, + y_max: 444, + ha: 680, + o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z', + }, + accidentalKomaSharp: { + x_min: 0, + x_max: 300, + y_min: -338, + y_max: 351, + ha: 689, + o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z', + }, + accidentalKucukMucennebSharp: { + x_min: 0, + x_max: 359, + y_min: -420, + y_max: 343, + ha: 763, + o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z', + }, + accidentalKoron: { + x_min: 0, + x_max: 303, + y_min: -462, + y_max: 180, + ha: 642, + o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z', + }, + accidentalSori: { + x_min: 0, + x_max: 434, + y_min: -295, + y_max: 325, + ha: 620, + o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z', + }, + articAccentAbove: { + x_min: 0, + x_max: 425, + y_min: 0, + y_max: 326, + ha: 326, + o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z', + }, + articAccentBelow: { + x_min: 0, + x_max: 425, + y_min: -326, + y_max: 0, + ha: 326, + o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z', + }, + articTenutoAbove: { + x_min: 0, + x_max: 471, + y_min: 0, + y_max: 56, + ha: 56, + o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z', + }, + articTenutoBelow: { + x_min: 0, + x_max: 471, + y_min: -59, + y_max: -3, + ha: 56, + o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z', + }, + articStaccatoAbove: { + x_min: 1, + x_max: 112, + y_min: 0, + y_max: 156, + ha: 156, + o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z', + }, + articStaccatoBelow: { + x_min: 1, + x_max: 112, + y_min: -156, + y_max: 0, + ha: 156, + o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z', + }, + articStaccatissimoAbove: { + x_min: 0, + x_max: 139, + y_min: 0, + y_max: 411, + ha: 411, + o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z', + }, + articStaccatissimoBelow: { + x_min: 0, + x_max: 139, + y_min: -411, + y_max: 0, + ha: 411, + o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z', + }, + articMarcatoAbove: { + x_min: 0, + x_max: 396, + y_min: 0, + y_max: 328, + ha: 328, + o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z', + }, + articMarcatoBelow: { + x_min: 0, + x_max: 396, + y_min: -328, + y_max: 0, + ha: 328, + o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z', + }, + fermataAbove: { + x_min: 0, + x_max: 472, + y_min: 2, + y_max: 454, + ha: 452, + o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z', + }, + fermataBelow: { + x_min: 0, + x_max: 519, + y_min: -430, + y_max: -1, + ha: 429, + o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z', + }, + fermataLongAbove: { + x_min: 0, + x_max: 591, + y_min: -6, + y_max: 337, + ha: 343, + o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z', + }, + fermataLongBelow: { + x_min: 0, + x_max: 602, + y_min: -335, + y_max: 7, + ha: 342, + o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z', + }, + fermataVeryLongAbove: { + x_min: 0, + x_max: 715, + y_min: -14, + y_max: 437, + ha: 451, + o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z', + }, + fermataVeryLongBelow: { + x_min: 0, + x_max: 686, + y_min: -427, + y_max: 30, + ha: 457, + o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z', + }, + fermataVeryShortAbove: { + x_min: 0, + x_max: 711, + y_min: -31, + y_max: 496, + ha: 527, + o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z', + }, + fermataVeryShortBelow: { + x_min: 0, + x_max: 697, + y_min: -475, + y_max: 13, + ha: 488, + o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z', + }, + fermataShortAbove: { + x_min: 0, + x_max: 545, + y_min: -18, + y_max: 348, + ha: 366, + o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z', + }, + fermataShortBelow: { + x_min: 0, + x_max: 565, + y_min: -335, + y_max: 10, + ha: 345, + o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z', + }, + breathMarkComma: { + x_min: 0, + x_max: 148, + y_min: 0, + y_max: 275, + ha: 275, + o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z', + }, + breathMarkUpbow: { + x_min: 0, + x_max: 254, + y_min: 0, + y_max: 595, + ha: 595, + o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z', + }, + caesura: { + x_min: 0, + x_max: 566, + y_min: 0, + y_max: 562, + ha: 563, + o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 386, + y_min: -10, + y_max: 584, + ha: 594, + o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z', + }, + restMaxima: { + x_min: 0, + x_max: 366, + y_min: -255, + y_max: 255, + ha: 510, + o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 122, + y_min: 0, + y_max: 249, + ha: 249, + o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z', + }, + restWhole: { + x_min: 1, + x_max: 500, + y_min: -120, + y_max: 14, + ha: 134, + o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z', + }, + restWholeLegerLine: { + x_min: -197, + x_max: 685, + y_min: -157, + y_max: 29, + ha: 186, + o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z', + }, + restHalf: { + x_min: 0, + x_max: 518, + y_min: 0, + y_max: 162, + ha: 162, + o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z', + }, + restHalfLegerLine: { + x_min: -120, + x_max: 448, + y_min: -20, + y_max: 143, + ha: 163, + o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z', + }, + restQuarter: { + x_min: 0, + x_max: 263, + y_min: -415, + y_max: 415, + ha: 830, + o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z', + }, + rest8th: { + x_min: 0, + x_max: 289, + y_min: -260, + y_max: 261, + ha: 521, + o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z', + }, + rest16th: { + x_min: 0, + x_max: 333, + y_min: -328, + y_max: 244, + ha: 572, + o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z', + }, + rest32nd: { + x_min: 0, + x_max: 347, + y_min: -498, + y_max: 483, + ha: 981, + o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z', + }, + rest64th: { + x_min: 0, + x_max: 428, + y_min: -720, + y_max: 474, + ha: 1194, + o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z', + }, + rest128th: { + x_min: 1, + x_max: 491, + y_min: -711, + y_max: 719, + ha: 1430, + o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z', + }, + dynamicPiano: { + x_min: -49, + x_max: 327, + y_min: -142, + y_max: 515, + ha: 657, + o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z', + }, + dynamicMezzo: { + x_min: -18, + x_max: 559, + y_min: -50, + y_max: 365, + ha: 415, + o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z', + }, + dynamicForte: { + x_min: -144, + x_max: 311, + y_min: -115, + y_max: 504, + ha: 619, + o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z', + }, + dynamicRinforzando: { + x_min: -75, + x_max: 322, + y_min: -90, + y_max: 325, + ha: 415, + o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z', + }, + dynamicSforzando: { + x_min: 0, + x_max: 296, + y_min: 0, + y_max: 379, + ha: 379, + o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z', + }, + dynamicZ: { + x_min: -43, + x_max: 331, + y_min: 0, + y_max: 328, + ha: 328, + o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z', + }, + ornamentTrill: { + x_min: 1, + x_max: 551, + y_min: -18, + y_max: 539, + ha: 557, + o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z', + }, + ornamentTurn: { + x_min: 0, + x_max: 574, + y_min: 0, + y_max: 312, + ha: 312, + o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z', + }, + ornamentTurnSlash: { + x_min: 0, + x_max: 574, + y_min: -106, + y_max: 405, + ha: 511, + o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z', + }, + ornamentMordent: { + x_min: 0, + x_max: 700, + y_min: 0, + y_max: 497, + ha: 497, + o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z', + }, + ornamentShortTrill: { + x_min: 0, + x_max: 747, + y_min: 0, + y_max: 243, + ha: 243, + o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z', + }, + ornamentTremblement: { + x_min: 0, + x_max: 982, + y_min: 0, + y_max: 224, + ha: 224, + o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z', + }, + ornamentPrecompAppoggTrill: { + x_min: 0, + x_max: 1066, + y_min: -50, + y_max: 533, + ha: 583, + o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: 0, + x_max: 1088, + y_min: -380, + y_max: 252, + ha: 632, + o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: 0, + x_max: 1185, + y_min: -380, + y_max: 465, + ha: 845, + o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: 0, + x_max: 1003, + y_min: -20, + y_max: 521, + ha: 541, + o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: 0, + x_max: 1246, + y_min: -30, + y_max: 296, + ha: 326, + o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z', + }, + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: 0, + x_max: 1226, + y_min: -237, + y_max: 436, + ha: 673, + o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: 0, + x_max: 833, + y_min: -309, + y_max: 319, + ha: 628, + o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z', + }, + brassScoop: { + x_min: 0, + x_max: 312, + y_min: -390, + y_max: 28, + ha: 418, + o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z', + }, + brassDoitMedium: { + x_min: 0, + x_max: 476, + y_min: -50, + y_max: 333, + ha: 383, + o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z', + }, + brassFallLipShort: { + x_min: 0, + x_max: 298, + y_min: -344, + y_max: 65, + ha: 409, + o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z', + }, + brassLiftMedium: { + x_min: 0, + x_max: 807, + y_min: 0, + y_max: 838, + ha: 838, + o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z', + }, + brassFallRoughMedium: { + x_min: 0, + x_max: 791, + y_min: 0, + y_max: 819, + ha: 819, + o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z', + }, + brassBend: { + x_min: 0, + x_max: 381, + y_min: 0, + y_max: 367, + ha: 367, + o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z', + }, + brassMuteClosed: { + x_min: 0, + x_max: 274, + y_min: 0, + y_max: 260, + ha: 260, + o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z', + }, + brassMuteOpen: { + x_min: 1, + x_max: 313, + y_min: 0, + y_max: 309, + ha: 309, + o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z', + }, + brassFlip: { + x_min: 0, + x_max: 402, + y_min: 0, + y_max: 361, + ha: 361, + o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z', + }, + brassJazzTurn: { + x_min: 0, + x_max: 646, + y_min: 0, + y_max: 212, + ha: 212, + o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z', + }, + brassSmear: { + x_min: 0, + x_max: 334, + y_min: 0, + y_max: 151, + ha: 151, + o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z', + }, + stringsDownBow: { + x_min: 0, + x_max: 306, + y_min: 0, + y_max: 366, + ha: 366, + o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z', + }, + stringsUpBow: { + x_min: 0, + x_max: 219, + y_min: 0, + y_max: 489, + ha: 489, + o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z', + }, + stringsHarmonic: { + x_min: 0, + x_max: 191, + y_min: 0, + y_max: 202, + ha: 202, + o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: 0, + x_max: 201, + y_min: 0, + y_max: 325, + ha: 325, + o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: 0, + x_max: 211, + y_min: 0, + y_max: 307, + ha: 307, + o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z', + }, + pluckedLeftHandPizzicato: { + x_min: 0, + x_max: 271, + y_min: 0, + y_max: 284, + ha: 284, + o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 944, + y_min: -13, + y_max: 550, + ha: 563, + o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 437, + y_min: 0, + y_max: 461, + ha: 461, + o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z', + }, + pictChokeCymbal: { + x_min: 1, + x_max: 147, + y_min: 0, + y_max: 242, + ha: 242, + o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z', + }, + wiggleArpeggiatoUp: { + x_min: -22, + x_max: 300, + y_min: 0, + y_max: 176, + ha: 176, + o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z', + }, + arpeggiatoUp: { + x_min: 0, + x_max: 262, + y_min: 0, + y_max: 1459, + ha: 1459, + o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z', + }, + arpeggiatoDown: { + x_min: 0, + x_max: 218, + y_min: 0, + y_max: 1440, + ha: 1440, + o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z', + }, + repeat1Bar: { + x_min: 0, + x_max: 599, + y_min: -250, + y_max: 175, + ha: 425, + o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z', + }, + repeat2Bars: { + x_min: 0, + x_max: 775, + y_min: -247, + y_max: 363, + ha: 610, + o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z', + }, + repeat4Bars: { + x_min: 0, + x_max: 1374, + y_min: -304, + y_max: 304, + ha: 608, + o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z', + }, + repeatBarSlash: { + x_min: 0, + x_max: 630, + y_min: -225, + y_max: 265, + ha: 490, + o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z', + }, + csymDiminished: { + x_min: 0, + x_max: 506, + y_min: 0, + y_max: 500, + ha: 500, + o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z', + }, + csymHalfDiminished: { + x_min: -32, + x_max: 496, + y_min: -33, + y_max: 492, + ha: 525, + o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z', + }, + csymAugmented: { + x_min: 0, + x_max: 530, + y_min: 0, + y_max: 539, + ha: 539, + o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z', + }, + csymMajorSeventh: { + x_min: 0, + x_max: 593, + y_min: 0, + y_max: 569, + ha: 569, + o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z', + }, + csymMinor: { + x_min: 0, + x_max: 482, + y_min: 193, + y_max: 265, + ha: 72, + o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z', + }, + csymParensLeftTall: { + x_min: 0, + x_max: 185, + y_min: 0, + y_max: 1034, + ha: 1034, + o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z', + }, + csymParensRightTall: { + x_min: -40, + x_max: 189, + y_min: 0, + y_max: 1058, + ha: 1058, + o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z', + }, + csymBracketLeftTall: { + x_min: 0, + x_max: 328, + y_min: 2, + y_max: 807, + ha: 805, + o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z', + }, + csymBracketRightTall: { + x_min: 1, + x_max: 306, + y_min: 0, + y_max: 829, + ha: 829, + o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z', + }, + csymParensLeftVeryTall: { + x_min: 0, + x_max: 116, + y_min: 0, + y_max: 934, + ha: 934, + o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z', + }, + csymParensRightVeryTall: { + x_min: -20, + x_max: 111, + y_min: 0, + y_max: 1009, + ha: 1009, + o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z', + }, + csymDiagonalArrangementSlash: { + x_min: 0, + x_max: 990, + y_min: -27, + y_max: 1028, + ha: 1054, + o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z', + }, + accidentalNarrowReversedFlat: { + x_min: 0, + x_max: 208, + y_min: -231, + y_max: 449, + ha: 680, + o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z', + }, + accidentalNarrowReversedFlatAndFlat: { + x_min: 0, + x_max: 335, + y_min: -231, + y_max: 449, + ha: 680, + o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z', + }, + accidentalWilsonPlus: { + x_min: 0, + x_max: 298, + y_min: -218, + y_max: 218, + ha: 436, + o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z', + }, + accidentalWilsonMinus: { + x_min: 0, + x_max: 284, + y_min: -163, + y_max: 163, + ha: 326, + o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z', + }, + }, + fontFamily: 'Petaluma', + resolution: 1000, + generatedOn: '2022-12-18T09:07:50.817Z', +}; + + +/***/ }), + +/***/ "./src/fonts/petalumascript_glyphs.ts": +/*!********************************************!*\ + !*** ./src/fonts/petalumascript_glyphs.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PetalumaScriptFont": () => (/* binding */ PetalumaScriptFont) +/* harmony export */ }); +const PetalumaScriptFont = { + spacing: 50, + glyphs: { + ' ': { + x_min: 0, + x_max: 250, + y_min: 0, + y_max: 500, + ha: 500, + leftSideBearing: 0, + advanceWidth: 250, + }, + '0': { + x_min: 33, + x_max: 534, + y_min: -13, + y_max: 751, + ha: 764, + leftSideBearing: 33, + advanceWidth: 570, + }, + '1': { + x_min: 48, + x_max: 235, + y_min: -17, + y_max: 734, + ha: 751, + leftSideBearing: 48, + advanceWidth: 286, + }, + '2': { + x_min: 56, + x_max: 571, + y_min: -19, + y_max: 741, + ha: 760, + leftSideBearing: 56, + advanceWidth: 626, + }, + '3': { + x_min: 50, + x_max: 528, + y_min: -7, + y_max: 731, + ha: 738, + leftSideBearing: 50, + advanceWidth: 589, + }, + '4': { + x_min: 38, + x_max: 564, + y_min: -13, + y_max: 743, + ha: 756, + leftSideBearing: 38, + advanceWidth: 614, + }, + '5': { + x_min: 42, + x_max: 601, + y_min: -34, + y_max: 743, + ha: 777, + leftSideBearing: 42, + advanceWidth: 648, + }, + '6': { + x_min: 47, + x_max: 606, + y_min: -16, + y_max: 743, + ha: 759, + leftSideBearing: 47, + advanceWidth: 667, + }, + '7': { + x_min: 47, + x_max: 567, + y_min: 5, + y_max: 739, + ha: 734, + leftSideBearing: 0, + advanceWidth: 615, + }, + '8': { + x_min: 40, + x_max: 541, + y_min: -15, + y_max: 752, + ha: 767, + leftSideBearing: 40, + advanceWidth: 585, + }, + '9': { + x_min: 40, + x_max: 537, + y_min: -52, + y_max: 736, + ha: 788, + leftSideBearing: 40, + advanceWidth: 592, + }, + '!': { + x_min: 49, + x_max: 180, + y_min: -7, + y_max: 761, + ha: 768, + leftSideBearing: 49, + advanceWidth: 230, + }, + '"': { + x_min: 39, + x_max: 304, + y_min: 596, + y_max: 804, + ha: 208, + leftSideBearing: 39, + advanceWidth: 353, + }, + '#': { + x_min: 33, + x_max: 599, + y_min: -8, + y_max: 765, + ha: 773, + leftSideBearing: 33, + advanceWidth: 648, + }, + $: { + x_min: 53, + x_max: 495, + y_min: -111, + y_max: 823, + ha: 934, + leftSideBearing: 53, + advanceWidth: 560, + }, + '%': { + x_min: 35, + x_max: 656, + y_min: -128, + y_max: 808, + ha: 936, + leftSideBearing: 35, + advanceWidth: 711, + }, + '&': { + x_min: 53, + x_max: 441, + y_min: -3, + y_max: 753, + ha: 756, + leftSideBearing: 53, + advanceWidth: 500, + }, + "'": { + x_min: 43, + x_max: 161, + y_min: 590, + y_max: 811, + ha: 221, + leftSideBearing: 43, + advanceWidth: 217, + }, + '(': { + x_min: 41, + x_max: 311, + y_min: -36, + y_max: 845, + ha: 881, + leftSideBearing: 41, + advanceWidth: 308, + }, + ')': { + x_min: -8, + x_max: 257, + y_min: -21, + y_max: 852, + ha: 873, + leftSideBearing: -8, + advanceWidth: 280, + }, + '*': { + x_min: 59, + x_max: 539, + y_min: 175, + y_max: 589, + ha: 414, + leftSideBearing: 59, + advanceWidth: 601, + }, + '+': { + x_min: 33, + x_max: 361, + y_min: 180, + y_max: 587, + ha: 407, + leftSideBearing: 33, + advanceWidth: 400, + }, + ',': { + x_min: 15, + x_max: 176, + y_min: -129, + y_max: 92, + ha: 221, + leftSideBearing: 15, + advanceWidth: 205, + }, + '-': { + x_min: 40, + x_max: 380, + y_min: 317, + y_max: 452, + ha: 135, + leftSideBearing: 40, + advanceWidth: 422, + }, + '.': { + x_min: 48, + x_max: 185, + y_min: -56, + y_max: 84, + ha: 140, + leftSideBearing: 48, + advanceWidth: 227, + }, + '/': { + x_min: -58, + x_max: 654, + y_min: -122, + y_max: 844, + ha: 966, + leftSideBearing: -58, + advanceWidth: 626, + }, + ':': { + x_min: 65, + x_max: 225, + y_min: 97, + y_max: 536, + ha: 439, + leftSideBearing: 65, + advanceWidth: 302, + }, + ';': { + x_min: 13, + x_max: 295, + y_min: -139, + y_max: 536, + ha: 675, + leftSideBearing: 13, + advanceWidth: 334, + }, + '<': { + x_min: 28, + x_max: 438, + y_min: -1, + y_max: 607, + ha: 608, + leftSideBearing: 28, + advanceWidth: 475, + }, + '=': { + x_min: 40, + x_max: 383, + y_min: 199.9598640852289, + y_max: 541, + ha: 341.0401359147711, + leftSideBearing: 40, + advanceWidth: 422, + }, + '>': { + x_min: 35, + x_max: 421, + y_min: 28, + y_max: 632, + ha: 604, + leftSideBearing: 35, + advanceWidth: 466, + }, + '?': { + x_min: 45, + x_max: 548, + y_min: -17, + y_max: 767, + ha: 784, + leftSideBearing: 45, + advanceWidth: 592, + }, + '@': { + x_min: 51, + x_max: 730, + y_min: -78, + y_max: 753, + ha: 831, + leftSideBearing: 51, + advanceWidth: 781, + }, + A: { + x_min: 37, + x_max: 554, + y_min: -4, + y_max: 746, + ha: 750, + leftSideBearing: 37, + advanceWidth: 617, + }, + B: { + x_min: 37, + x_max: 532, + y_min: 3, + y_max: 783, + ha: 780, + leftSideBearing: 37, + advanceWidth: 579, + }, + C: { + x_min: 37, + x_max: 583, + y_min: -3, + y_max: 775, + ha: 778, + leftSideBearing: 37, + advanceWidth: 623, + }, + D: { + x_min: 50, + x_max: 530, + y_min: -15, + y_max: 749, + ha: 764, + leftSideBearing: 50, + advanceWidth: 579, + }, + E: { + x_min: 45, + x_max: 531, + y_min: -1, + y_max: 743, + ha: 744, + leftSideBearing: 45, + advanceWidth: 585, + }, + F: { + x_min: 45, + x_max: 459, + y_min: 23, + y_max: 727, + ha: 704, + leftSideBearing: 45, + advanceWidth: 510, + }, + G: { + x_min: 31, + x_max: 577, + y_min: -8, + y_max: 733, + ha: 741, + leftSideBearing: 31, + advanceWidth: 611, + }, + H: { + x_min: 37, + x_max: 493, + y_min: -22, + y_max: 758, + ha: 780, + leftSideBearing: 37, + advanceWidth: 535, + }, + I: { + x_min: 47, + x_max: 501, + y_min: -3, + y_max: 731, + ha: 734, + leftSideBearing: 47, + advanceWidth: 541, + }, + J: { + x_min: 33, + x_max: 531, + y_min: -23, + y_max: 725, + ha: 748, + leftSideBearing: 33, + advanceWidth: 573, + }, + K: { + x_min: 43, + x_max: 505, + y_min: -10, + y_max: 740, + ha: 750, + leftSideBearing: 43, + advanceWidth: 560, + }, + L: { + x_min: 49, + x_max: 457, + y_min: -2, + y_max: 746, + ha: 748, + leftSideBearing: 49, + advanceWidth: 510, + }, + M: { + x_min: 35, + x_max: 699, + y_min: 1, + y_max: 744, + ha: 743, + leftSideBearing: 35, + advanceWidth: 743, + }, + N: { + x_min: 34, + x_max: 533, + y_min: -17, + y_max: 761, + ha: 778, + leftSideBearing: 34, + advanceWidth: 579, + }, + O: { + x_min: 41, + x_max: 608, + y_min: -5, + y_max: 735, + ha: 740, + leftSideBearing: 41, + advanceWidth: 667, + }, + P: { + x_min: 53, + x_max: 451, + y_min: -18, + y_max: 735, + ha: 753, + leftSideBearing: 53, + advanceWidth: 497, + }, + Q: { + x_min: 40, + x_max: 599, + y_min: -67, + y_max: 744, + ha: 811, + leftSideBearing: 40, + advanceWidth: 648, + }, + R: { + x_min: 39, + x_max: 487, + y_min: 16, + y_max: 735, + ha: 719, + leftSideBearing: 39, + advanceWidth: 535, + }, + S: { + x_min: 35, + x_max: 552, + y_min: -47, + y_max: 708, + ha: 755, + leftSideBearing: 35, + advanceWidth: 604, + }, + T: { + x_min: 26, + x_max: 656, + y_min: -13, + y_max: 718, + ha: 731, + leftSideBearing: 26, + advanceWidth: 705, + }, + U: { + x_min: 41, + x_max: 518, + y_min: -20, + y_max: 748, + ha: 768, + leftSideBearing: 41, + advanceWidth: 567, + }, + V: { + x_min: 47, + x_max: 509, + y_min: -26, + y_max: 744, + ha: 770, + leftSideBearing: 47, + advanceWidth: 567, + }, + W: { + x_min: 44, + x_max: 789, + y_min: -35, + y_max: 720, + ha: 755, + leftSideBearing: 44, + advanceWidth: 833, + }, + X: { + x_min: 63, + x_max: 635, + y_min: -10, + y_max: 745, + ha: 755, + leftSideBearing: 63, + advanceWidth: 680, + }, + Y: { + x_min: 43, + x_max: 503, + y_min: -21, + y_max: 734, + ha: 755, + leftSideBearing: 43, + advanceWidth: 541, + }, + Z: { + x_min: 42, + x_max: 584, + y_min: -10, + y_max: 739, + ha: 749, + leftSideBearing: 42, + advanceWidth: 629, + }, + '[': { + x_min: 46, + x_max: 346, + y_min: -150, + y_max: 884, + ha: 1034, + leftSideBearing: 46, + advanceWidth: 291, + }, + '\\': { + x_min: 20, + x_max: 616, + y_min: -100, + y_max: 797, + ha: 897, + leftSideBearing: 20, + advanceWidth: 645, + }, + ']': { + x_min: -76, + x_max: 226, + y_min: -150, + y_max: 881, + ha: 1031, + leftSideBearing: -76, + advanceWidth: 297, + }, + '^': { + x_min: 43, + x_max: 437, + y_min: 517, + y_max: 812, + ha: 295, + leftSideBearing: 43, + advanceWidth: 478, + }, + _: { + x_min: 29, + x_max: 563, + y_min: -110, + y_max: -1, + ha: 109, + leftSideBearing: 29, + advanceWidth: 598, + }, + '`': { + x_min: 54, + x_max: 321, + y_min: 540, + y_max: 747, + ha: 207, + leftSideBearing: 54, + advanceWidth: 368, + }, + a: { + x_min: 20, + x_max: 447, + y_min: -17, + y_max: 495, + ha: 512, + leftSideBearing: 20, + advanceWidth: 494, + }, + b: { + x_min: 37, + x_max: 466, + y_min: -27, + y_max: 770, + ha: 797, + leftSideBearing: 37, + advanceWidth: 510, + }, + c: { + x_min: 35, + x_max: 456, + y_min: -9, + y_max: 507, + ha: 516, + leftSideBearing: 35, + advanceWidth: 460, + }, + d: { + x_min: 45, + x_max: 520, + y_min: -15, + y_max: 764, + ha: 779, + leftSideBearing: 45, + advanceWidth: 560, + }, + e: { + x_min: 33, + x_max: 370, + y_min: -5, + y_max: 501, + ha: 506, + leftSideBearing: 33, + advanceWidth: 397, + }, + f: { + x_min: 35, + x_max: 411, + y_min: -13, + y_max: 695, + ha: 708, + leftSideBearing: 35, + advanceWidth: 453, + }, + g: { + x_min: 33, + x_max: 551, + y_min: -257, + y_max: 505, + ha: 762, + leftSideBearing: 33, + advanceWidth: 611, + }, + h: { + x_min: 32, + x_max: 458, + y_min: -29, + y_max: 743, + ha: 772, + leftSideBearing: 32, + advanceWidth: 491, + }, + i: { + x_min: 45, + x_max: 167, + y_min: -13, + y_max: 631, + ha: 644, + leftSideBearing: 45, + advanceWidth: 220, + }, + j: { + x_min: -127, + x_max: 261, + y_min: -231, + y_max: 601, + ha: 832, + leftSideBearing: -127, + advanceWidth: 308, + }, + k: { + x_min: 39, + x_max: 443, + y_min: -3, + y_max: 700, + ha: 703, + leftSideBearing: 39, + advanceWidth: 497, + }, + l: { + x_min: 58, + x_max: 168, + y_min: -8, + y_max: 686, + ha: 694, + leftSideBearing: 58, + advanceWidth: 227, + }, + m: { + x_min: 39, + x_max: 688, + y_min: -14, + y_max: 501, + ha: 515, + leftSideBearing: 39, + advanceWidth: 718, + }, + n: { + x_min: 45, + x_max: 491, + y_min: -32, + y_max: 512, + ha: 544, + leftSideBearing: 45, + advanceWidth: 541, + }, + o: { + x_min: 41, + x_max: 424, + y_min: -12, + y_max: 493, + ha: 505, + leftSideBearing: 41, + advanceWidth: 447, + }, + p: { + x_min: 25, + x_max: 529, + y_min: -260, + y_max: 500, + ha: 760, + leftSideBearing: 25, + advanceWidth: 573, + }, + q: { + x_min: 53, + x_max: 603, + y_min: -235, + y_max: 514, + ha: 749, + leftSideBearing: 53, + advanceWidth: 623, + }, + r: { + x_min: 32, + x_max: 407, + y_min: -7, + y_max: 492, + ha: 499, + leftSideBearing: 32, + advanceWidth: 460, + }, + s: { + x_min: 49, + x_max: 416, + y_min: -12, + y_max: 519, + ha: 531, + leftSideBearing: 49, + advanceWidth: 460, + }, + t: { + x_min: 32, + x_max: 442, + y_min: -5, + y_max: 684, + ha: 689, + leftSideBearing: 32, + advanceWidth: 469, + }, + u: { + x_min: 41, + x_max: 487, + y_min: -5, + y_max: 507, + ha: 512, + leftSideBearing: 41, + advanceWidth: 510, + }, + v: { + x_min: 16, + x_max: 441, + y_min: -20, + y_max: 542, + ha: 562, + leftSideBearing: 16, + advanceWidth: 456, + }, + w: { + x_min: 39, + x_max: 639, + y_min: -22, + y_max: 505, + ha: 527, + leftSideBearing: 39, + advanceWidth: 661, + }, + x: { + x_min: 15, + x_max: 505, + y_min: -39, + y_max: 539, + ha: 578, + leftSideBearing: 15, + advanceWidth: 541, + }, + y: { + x_min: -98, + x_max: 501, + y_min: -242, + y_max: 511, + ha: 753, + leftSideBearing: -98, + advanceWidth: 548, + }, + z: { + x_min: 27, + x_max: 479, + y_min: -3, + y_max: 494, + ha: 497, + leftSideBearing: 27, + advanceWidth: 494, + }, + '{': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + '|': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + '}': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + '~': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + }, + fontFamily: 'PetalumaScript', + resolution: 1000, + generatedOn: '2020-06-14T18:33:25.407Z', +}; + + +/***/ }), + +/***/ "./src/fonts/robotoslab_glyphs.ts": +/*!****************************************!*\ + !*** ./src/fonts/robotoslab_glyphs.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RobotoSlabFont": () => (/* binding */ RobotoSlabFont) +/* harmony export */ }); +const RobotoSlabFont = { + spacing: 50, + glyphs: { + ' ': { + x_min: 0, + x_max: 509, + y_min: 0, + y_max: 2000, + ha: 2000, + leftSideBearing: 0, + advanceWidth: 509, + }, + '0': { + x_min: 121, + x_max: 1048, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 121, + advanceWidth: 1168, + }, + '1': { + x_min: 117, + x_max: 767, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 117, + advanceWidth: 844, + }, + '2': { + x_min: 75.8474576645637, + x_max: 1040, + y_min: 0, + y_max: 1477, + ha: 1477, + leftSideBearing: 75, + advanceWidth: 1131, + }, + '3': { + x_min: 74.85365853658536, + x_max: 994, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 74, + advanceWidth: 1106, + }, + '4': { + x_min: 63, + x_max: 1114, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 63, + advanceWidth: 1187, + }, + '5': { + x_min: 96.8448275474953, + x_max: 982, + y_min: -21, + y_max: 1456, + ha: 1477, + leftSideBearing: 96, + advanceWidth: 1081, + }, + '6': { + x_min: 121, + x_max: 1067, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 121, + advanceWidth: 1144, + }, + '7': { + x_min: 76, + x_max: 1060, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: -30, + advanceWidth: 1128, + }, + '8': { + x_min: 92, + x_max: 1039, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 92, + advanceWidth: 1131, + }, + '9': { + x_min: 84, + x_max: 1026, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 84, + advanceWidth: 1154, + }, + '!': { + x_min: 143, + x_max: 340, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 143, + advanceWidth: 483, + }, + '"': { + x_min: 166, + x_max: 634, + y_min: 1055, + y_max: 1560, + ha: 505, + leftSideBearing: 166, + advanceWidth: 770, + }, + '#': { + x_min: 63, + x_max: 1179, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 63, + advanceWidth: 1246, + }, + $: { + x_min: 81.92156915727656, + x_max: 1012, + y_min: -208, + y_max: 1693, + ha: 1901, + leftSideBearing: 81, + advanceWidth: 1110, + }, + '%': { + x_min: 77, + x_max: 1384, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 77, + advanceWidth: 1460, + }, + '&': { + x_min: 74, + x_max: 1242, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 74, + advanceWidth: 1289, + }, + "'": { + x_min: 166, + x_max: 324, + y_min: 1055, + y_max: 1560, + ha: 505, + leftSideBearing: 166, + advanceWidth: 460, + }, + '(': { + x_min: 114, + x_max: 650, + y_min: -463, + y_max: 1636, + ha: 2099, + leftSideBearing: 114, + advanceWidth: 662, + }, + ')': { + x_min: 11, + x_max: 547, + y_min: -463, + y_max: 1636, + ha: 2099, + leftSideBearing: 11, + advanceWidth: 654, + }, + '*': { + x_min: 66, + x_max: 893, + y_min: 607, + y_max: 1456, + ha: 849, + leftSideBearing: 66, + advanceWidth: 958, + }, + '+': { + x_min: 73, + x_max: 1071, + y_min: 146, + y_max: 1206, + ha: 1060, + leftSideBearing: 73, + advanceWidth: 1145, + }, + ',': { + x_min: 23, + x_max: 315, + y_min: -311, + y_max: 221, + ha: 532, + leftSideBearing: 23, + advanceWidth: 404, + }, + '-': { + x_min: 154, + x_max: 643, + y_min: 538, + y_max: 692, + ha: 154, + leftSideBearing: 154, + advanceWidth: 797, + }, + '.': { + x_min: 145, + x_max: 342, + y_min: 0, + y_max: 202, + ha: 202, + leftSideBearing: 145, + advanceWidth: 493, + }, + '/': { + x_min: 0, + x_max: 774, + y_min: -125, + y_max: 1456, + ha: 1581, + leftSideBearing: 0, + advanceWidth: 824, + }, + ':': { + x_min: 145, + x_max: 342, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 145, + advanceWidth: 419, + }, + ';': { + x_min: 53, + x_max: 345, + y_min: -311, + y_max: 1082, + ha: 1393, + leftSideBearing: 53, + advanceWidth: 424, + }, + '<': { + x_min: 76, + x_max: 892, + y_min: 107, + y_max: 1013, + ha: 906, + leftSideBearing: 76, + advanceWidth: 1017, + }, + '=': { + x_min: 147, + x_max: 981, + y_min: 407, + y_max: 987, + ha: 580, + leftSideBearing: 147, + advanceWidth: 1127, + }, + '>': { + x_min: 125, + x_max: 980, + y_min: 87, + y_max: 993, + ha: 906, + leftSideBearing: 125, + advanceWidth: 1060, + }, + '?': { + x_min: 65.92660602419838, + x_max: 890, + y_min: 0, + y_max: 1477, + ha: 1477, + leftSideBearing: 65, + advanceWidth: 953, + }, + '@': { + x_min: 84.3592218305664, + x_max: 1705.2346925277395, + y_min: -453, + y_max: 1431, + ha: 1884, + leftSideBearing: 84, + advanceWidth: 1821, + }, + A: { + x_min: 70, + x_max: 1463, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 70, + advanceWidth: 1533, + }, + B: { + x_min: 81, + x_max: 1253, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1322, + }, + C: { + x_min: 80, + x_max: 1174, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 80, + advanceWidth: 1290, + }, + D: { + x_min: 81, + x_max: 1291, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1356, + }, + E: { + x_min: 81, + x_max: 1190, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1306, + }, + F: { + x_min: 81, + x_max: 1176, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1256, + }, + G: { + x_min: 80, + x_max: 1226, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 80, + advanceWidth: 1346, + }, + H: { + x_min: 81, + x_max: 1497, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1578, + }, + I: { + x_min: 81, + x_max: 604, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 685, + }, + J: { + x_min: 60, + x_max: 1100, + y_min: -21, + y_max: 1456, + ha: 1477, + leftSideBearing: 60, + advanceWidth: 1169, + }, + K: { + x_min: 81, + x_max: 1427, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1501, + }, + L: { + x_min: 81, + x_max: 1130, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1210, + }, + M: { + x_min: 94, + x_max: 1888, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 94, + advanceWidth: 1982, + }, + N: { + x_min: 83, + x_max: 1509, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 83, + advanceWidth: 1592, + }, + O: { + x_min: 70, + x_max: 1281, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 70, + advanceWidth: 1351, + }, + P: { + x_min: 81, + x_max: 1242, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1297, + }, + Q: { + x_min: 70, + x_max: 1348, + y_min: -245, + y_max: 1477, + ha: 1722, + leftSideBearing: 70, + advanceWidth: 1376, + }, + R: { + x_min: 81, + x_max: 1285, + y_min: 0, + y_max: 1455, + ha: 1455, + leftSideBearing: 81, + advanceWidth: 1385, + }, + S: { + x_min: 115, + x_max: 1116, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 115, + advanceWidth: 1206, + }, + T: { + x_min: 96, + x_max: 1306, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 96, + advanceWidth: 1406, + }, + U: { + x_min: 70, + x_max: 1452, + y_min: -21, + y_max: 1456, + ha: 1477, + leftSideBearing: 70, + advanceWidth: 1522, + }, + V: { + x_min: 65, + x_max: 1443, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 65, + advanceWidth: 1508, + }, + W: { + x_min: 72, + x_max: 2057, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 72, + advanceWidth: 2129, + }, + X: { + x_min: 80, + x_max: 1449, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 80, + advanceWidth: 1529, + }, + Y: { + x_min: 65, + x_max: 1396, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 65, + advanceWidth: 1461, + }, + Z: { + x_min: 90, + x_max: 1107, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 90, + advanceWidth: 1197, + }, + '[': { + x_min: 157, + x_max: 541, + y_min: -312, + y_max: 1664, + ha: 1976, + leftSideBearing: 157, + advanceWidth: 573, + }, + '\\': { + x_min: 36, + x_max: 830, + y_min: -125, + y_max: 1456, + ha: 1581, + leftSideBearing: 36, + advanceWidth: 841, + }, + ']': { + x_min: 23, + x_max: 408, + y_min: -312, + y_max: 1664, + ha: 1976, + leftSideBearing: 23, + advanceWidth: 552, + }, + '^': { + x_min: 71, + x_max: 802, + y_min: 729, + y_max: 1456, + ha: 727, + leftSideBearing: 71, + advanceWidth: 864, + }, + _: { + x_min: 119, + x_max: 1041, + y_min: -154, + y_max: 0, + ha: 154, + leftSideBearing: 119, + advanceWidth: 1168, + }, + '`': { + x_min: 40, + x_max: 456, + y_min: 1288, + y_max: 1560, + ha: 272, + leftSideBearing: 40, + advanceWidth: 496, + }, + a: { + x_min: 79, + x_max: 1053, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 79, + advanceWidth: 1132, + }, + b: { + x_min: -16, + x_max: 1071, + y_min: -21, + y_max: 1560, + ha: 1581, + leftSideBearing: -16, + advanceWidth: 1145, + }, + c: { + x_min: 78, + x_max: 988, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 78, + advanceWidth: 1067, + }, + d: { + x_min: 78, + x_max: 1156, + y_min: -21, + y_max: 1560, + ha: 1581, + leftSideBearing: 78, + advanceWidth: 1218, + }, + e: { + x_min: 74, + x_max: 980, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 74, + advanceWidth: 1059, + }, + f: { + x_min: 64, + x_max: 731, + y_min: 0, + y_max: 1581, + ha: 1581, + leftSideBearing: 64, + advanceWidth: 725, + }, + g: { + x_min: 78, + x_max: 1133, + y_min: -437, + y_max: 1102, + ha: 1539, + leftSideBearing: 78, + advanceWidth: 1157, + }, + h: { + x_min: 49, + x_max: 1255, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 49, + advanceWidth: 1315, + }, + i: { + x_min: 67, + x_max: 590, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 67, + advanceWidth: 652, + }, + j: { + x_min: -56, + x_max: 381, + y_min: -437, + y_max: 1560, + ha: 1997, + leftSideBearing: -56, + advanceWidth: 525, + }, + k: { + x_min: 64, + x_max: 1248, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 64, + advanceWidth: 1287, + }, + l: { + x_min: 64, + x_max: 587, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 64, + advanceWidth: 653, + }, + m: { + x_min: 74, + x_max: 1905, + y_min: 0, + y_max: 1102, + ha: 1102, + leftSideBearing: 74, + advanceWidth: 1977, + }, + n: { + x_min: 74, + x_max: 1278, + y_min: 0, + y_max: 1102, + ha: 1102, + leftSideBearing: 74, + advanceWidth: 1343, + }, + o: { + x_min: 78, + x_max: 1046, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 78, + advanceWidth: 1124, + }, + p: { + x_min: 34, + x_max: 1119, + y_min: -416, + y_max: 1102, + ha: 1518, + leftSideBearing: 34, + advanceWidth: 1197, + }, + q: { + x_min: 78, + x_max: 1135, + y_min: -416, + y_max: 1102, + ha: 1518, + leftSideBearing: 78, + advanceWidth: 1139, + }, + r: { + x_min: 72, + x_max: 808, + y_min: 0, + y_max: 1102, + ha: 1102, + leftSideBearing: 72, + advanceWidth: 854, + }, + s: { + x_min: 104, + x_max: 933, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 104, + advanceWidth: 1022, + }, + t: { + x_min: 24, + x_max: 678, + y_min: -17, + y_max: 1343, + ha: 1360, + leftSideBearing: 24, + advanceWidth: 730, + }, + u: { + x_min: 52, + x_max: 1181, + y_min: -21, + y_max: 1082, + ha: 1103, + leftSideBearing: 52, + advanceWidth: 1245, + }, + v: { + x_min: 26, + x_max: 1176, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 26, + advanceWidth: 1206, + }, + w: { + x_min: 52, + x_max: 1777, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 52, + advanceWidth: 1823, + }, + x: { + x_min: 42, + x_max: 1163, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 42, + advanceWidth: 1203, + }, + y: { + x_min: 24, + x_max: 1172, + y_min: -437, + y_max: 1082, + ha: 1519, + leftSideBearing: 24, + advanceWidth: 1192, + }, + z: { + x_min: 88, + x_max: 960, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 88, + advanceWidth: 1032, + }, + '{': { + x_min: 63, + x_max: 671, + y_min: -364, + y_max: 1597, + ha: 1961, + leftSideBearing: 63, + advanceWidth: 701, + }, + '|': { + x_min: 150, + x_max: 307, + y_min: -270, + y_max: 1456, + ha: 1726, + leftSideBearing: 150, + advanceWidth: 451, + }, + '}': { + x_min: 27, + x_max: 635, + y_min: -364, + y_max: 1597, + ha: 1961, + leftSideBearing: 27, + advanceWidth: 701, + }, + '~': { + x_min: 121, + x_max: 1257, + y_min: 401, + y_max: 803, + ha: 402, + leftSideBearing: 121, + advanceWidth: 1386, + }, + }, + fontFamily: 'Roboto Slab', + resolution: 2048, + generatedOn: '2020-06-15T19:12:58.120Z', +}; + + +/***/ }), + +/***/ "./src/fonts/sans_bold_text_metrics.ts": +/*!*********************************************!*\ + !*** ./src/fonts/sans_bold_text_metrics.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SansFontBold": () => (/* binding */ SansFontBold) +/* harmony export */ }); +const SansFontBold = { + glyphs: { + '0': { + x_min: 86, + x_max: 1038, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 86, + advanceWidth: 1139, + }, + '1': { + x_min: 162, + x_max: 806, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 162, + advanceWidth: 1139, + }, + '2': { + x_min: 51, + x_max: 1036, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 51, + advanceWidth: 1139, + }, + '3': { + x_min: 77, + x_max: 1051, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 77, + advanceWidth: 1139, + }, + '4': { + x_min: 38, + x_max: 1092, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 38, + advanceWidth: 1139, + }, + '5': { + x_min: 91, + x_max: 1077, + y_min: -25, + y_max: 1446, + ha: 1471, + leftSideBearing: 91, + advanceWidth: 1139, + }, + '6': { + x_min: 87, + x_max: 1066, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 87, + advanceWidth: 1139, + }, + '7': { + x_min: 87, + x_max: 1048, + y_min: 0, + y_max: 1446, + ha: 1446, + leftSideBearing: 87, + advanceWidth: 1139, + }, + '8': { + x_min: 83, + x_max: 1047, + y_min: -26, + y_max: 1472, + ha: 1498, + leftSideBearing: 83, + advanceWidth: 1139, + }, + '9': { + x_min: 65, + x_max: 1044, + y_min: -26, + y_max: 1472, + ha: 1498, + leftSideBearing: 65, + advanceWidth: 1139, + }, + ' ': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 569, + }, + '!': { + x_min: 184, + x_max: 488, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 184, + advanceWidth: 682, + }, + '"': { + x_min: 112, + x_max: 869, + y_min: 945, + y_max: 1466, + ha: 521, + leftSideBearing: 112, + advanceWidth: 971, + }, + '#': { + x_min: 18, + x_max: 1115, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 18, + advanceWidth: 1139, + }, + $: { + x_min: 70, + x_max: 1048, + y_min: -205, + y_max: 1584, + ha: 1789, + leftSideBearing: 70, + advanceWidth: 1139, + }, + '%': { + x_min: 89, + x_max: 1725, + y_min: -59, + y_max: 1491, + ha: 1550, + leftSideBearing: 89, + advanceWidth: 1821, + }, + '&': { + x_min: 90, + x_max: 1446, + y_min: -38, + y_max: 1491, + ha: 1529, + leftSideBearing: 90, + advanceWidth: 1479, + }, + "'": { + x_min: 92, + x_max: 398, + y_min: 945, + y_max: 1466, + ha: 521, + leftSideBearing: 92, + advanceWidth: 487, + }, + '(': { + x_min: 107, + x_max: 616, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 107, + advanceWidth: 682, + }, + ')': { + x_min: 67, + x_max: 576, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 67, + advanceWidth: 682, + }, + '*': { + x_min: 28, + x_max: 753, + y_min: 792, + y_max: 1491, + ha: 699, + leftSideBearing: 28, + advanceWidth: 797, + }, + '+': { + x_min: 85, + x_max: 1110, + y_min: 211, + y_max: 1236, + ha: 1025, + leftSideBearing: 85, + advanceWidth: 1196, + }, + ',': { + x_min: 117, + x_max: 421, + y_min: -327, + y_max: 281, + ha: 608, + leftSideBearing: 117, + advanceWidth: 569, + }, + '-': { + x_min: 115, + x_max: 667, + y_min: 391, + y_max: 672, + ha: 281, + leftSideBearing: 115, + advanceWidth: 682, + }, + '.': { + x_min: 147, + x_max: 428, + y_min: 0, + y_max: 281, + ha: 281, + leftSideBearing: 147, + advanceWidth: 569, + }, + '/': { + x_min: -3, + x_max: 571, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: -3, + advanceWidth: 569, + }, + ':': { + x_min: 201, + x_max: 482, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 201, + advanceWidth: 682, + }, + ';': { + x_min: 170, + x_max: 474, + y_min: -327, + y_max: 1062, + ha: 1389, + leftSideBearing: 170, + advanceWidth: 682, + }, + '<': { + x_min: 95, + x_max: 1100, + y_min: 167, + y_max: 1281, + ha: 1114, + leftSideBearing: 95, + advanceWidth: 1196, + }, + '=': { + x_min: 85, + x_max: 1110, + y_min: 372, + y_max: 1074, + ha: 702, + leftSideBearing: 85, + advanceWidth: 1196, + }, + '>': { + x_min: 95, + x_max: 1101, + y_min: 166, + y_max: 1279, + ha: 1113, + leftSideBearing: 95, + advanceWidth: 1196, + }, + '?': { + x_min: 106, + x_max: 1158, + y_min: 0, + y_max: 1481, + ha: 1481, + leftSideBearing: 106, + advanceWidth: 1251, + }, + '@': { + x_min: 61, + x_max: 1990, + y_min: -431, + y_max: 1492, + ha: 1923, + leftSideBearing: 61, + advanceWidth: 1997, + }, + A: { + x_min: 0, + x_max: 1471, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 0, + advanceWidth: 1479, + }, + B: { + x_min: 150, + x_max: 1378, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1479, + }, + C: { + x_min: 97, + x_max: 1374, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 97, + advanceWidth: 1479, + }, + D: { + x_min: 148, + x_max: 1377, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 148, + advanceWidth: 1479, + }, + E: { + x_min: 149, + x_max: 1264, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 149, + advanceWidth: 1366, + }, + F: { + x_min: 151, + x_max: 1156, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 151, + advanceWidth: 1251, + }, + G: { + x_min: 98, + x_max: 1469, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 98, + advanceWidth: 1593, + }, + H: { + x_min: 150, + x_max: 1322, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1479, + }, + I: { + x_min: 140, + x_max: 436, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 140, + advanceWidth: 569, + }, + J: { + x_min: 35, + x_max: 973, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 35, + advanceWidth: 1139, + }, + K: { + x_min: 153, + x_max: 1475, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 153, + advanceWidth: 1479, + }, + L: { + x_min: 157, + x_max: 1189, + y_min: 0, + y_max: 1454, + ha: 1454, + leftSideBearing: 157, + advanceWidth: 1251, + }, + M: { + x_min: 145, + x_max: 1561, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 145, + advanceWidth: 1706, + }, + N: { + x_min: 152, + x_max: 1315, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 152, + advanceWidth: 1479, + }, + O: { + x_min: 89, + x_max: 1511, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 89, + advanceWidth: 1593, + }, + P: { + x_min: 149, + x_max: 1272, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 149, + advanceWidth: 1366, + }, + Q: { + x_min: 89, + x_max: 1566, + y_min: -147, + y_max: 1491, + ha: 1638, + leftSideBearing: 89, + advanceWidth: 1593, + }, + R: { + x_min: 150, + x_max: 1468, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1479, + }, + S: { + x_min: 74, + x_max: 1266, + y_min: -26, + y_max: 1491, + ha: 1517, + leftSideBearing: 74, + advanceWidth: 1366, + }, + T: { + x_min: 44, + x_max: 1209, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 44, + advanceWidth: 1251, + }, + U: { + x_min: 147, + x_max: 1316, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 147, + advanceWidth: 1479, + }, + V: { + x_min: -1, + x_max: 1364, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: -1, + advanceWidth: 1366, + }, + W: { + x_min: 7, + x_max: 1931, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 7, + advanceWidth: 1933, + }, + X: { + x_min: 0, + x_max: 1363, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 0, + advanceWidth: 1366, + }, + Y: { + x_min: -3, + x_max: 1368, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: -3, + advanceWidth: 1366, + }, + Z: { + x_min: 22, + x_max: 1213, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 22, + advanceWidth: 1251, + }, + '[': { + x_min: 146, + x_max: 644, + y_min: -413, + y_max: 1466, + ha: 1879, + leftSideBearing: 146, + advanceWidth: 682, + }, + '\\': { + x_min: -3, + x_max: 571, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: -3, + advanceWidth: 569, + }, + ']': { + x_min: 38, + x_max: 536, + y_min: -413, + y_max: 1466, + ha: 1879, + leftSideBearing: 38, + advanceWidth: 682, + }, + '^': { + x_min: 115, + x_max: 1080, + y_min: 692, + y_max: 1491, + ha: 799, + leftSideBearing: 115, + advanceWidth: 1196, + }, + _: { + x_min: -19, + x_max: 1149, + y_min: -405, + y_max: -223, + ha: 182, + leftSideBearing: -19, + advanceWidth: 1139, + }, + '`': { + x_min: 42, + x_max: 495, + y_min: 1192, + y_max: 1491, + ha: 299, + leftSideBearing: 42, + advanceWidth: 682, + }, + a: { + x_min: 73, + x_max: 1070, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 73, + advanceWidth: 1139, + }, + b: { + x_min: 135, + x_max: 1172, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 135, + advanceWidth: 1251, + }, + c: { + x_min: 85, + x_max: 1087, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 85, + advanceWidth: 1139, + }, + d: { + x_min: 84, + x_max: 1121, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 84, + advanceWidth: 1251, + }, + e: { + x_min: 65, + x_max: 1057.2517482517483, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 65, + advanceWidth: 1139, + }, + f: { + x_min: 24, + x_max: 742, + y_min: 0, + y_max: 1491, + ha: 1491, + leftSideBearing: 24, + advanceWidth: 682, + }, + g: { + x_min: 84, + x_max: 1120, + y_min: -431, + y_max: 1086, + ha: 1517, + leftSideBearing: 84, + advanceWidth: 1251, + }, + h: { + x_min: 146, + x_max: 1113, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 146, + advanceWidth: 1251, + }, + i: { + x_min: 147, + x_max: 428, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 147, + advanceWidth: 569, + }, + j: { + x_min: -94, + x_max: 422, + y_min: -431, + y_max: 1466, + ha: 1897, + leftSideBearing: -94, + advanceWidth: 569, + }, + k: { + x_min: 137, + x_max: 1119, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 137, + advanceWidth: 1139, + }, + l: { + x_min: 147, + x_max: 428, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 147, + advanceWidth: 569, + }, + m: { + x_min: 126, + x_max: 1688, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 126, + advanceWidth: 1821, + }, + n: { + x_min: 145, + x_max: 1113, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 145, + advanceWidth: 1251, + }, + o: { + x_min: 82, + x_max: 1178, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 82, + advanceWidth: 1251, + }, + p: { + x_min: 139, + x_max: 1175, + y_min: -404, + y_max: 1086, + ha: 1490, + leftSideBearing: 139, + advanceWidth: 1251, + }, + q: { + x_min: 91, + x_max: 1122, + y_min: -404, + y_max: 1086, + ha: 1490, + leftSideBearing: 91, + advanceWidth: 1251, + }, + r: { + x_min: 135, + x_max: 823, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 135, + advanceWidth: 797, + }, + s: { + x_min: 48, + x_max: 1040, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 48, + advanceWidth: 1139, + }, + t: { + x_min: 31, + x_max: 657, + y_min: -24, + y_max: 1437, + ha: 1461, + leftSideBearing: 31, + advanceWidth: 682, + }, + u: { + x_min: 141, + x_max: 1107, + y_min: -24, + y_max: 1062, + ha: 1086, + leftSideBearing: 141, + advanceWidth: 1251, + }, + v: { + x_min: 11, + x_max: 1114, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 11, + advanceWidth: 1139, + }, + w: { + x_min: 9, + x_max: 1592, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 9, + advanceWidth: 1593, + }, + x: { + x_min: 12, + x_max: 1120, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 12, + advanceWidth: 1139, + }, + y: { + x_min: 14, + x_max: 1106, + y_min: -431, + y_max: 1062, + ha: 1493, + leftSideBearing: 14, + advanceWidth: 1139, + }, + z: { + x_min: 34, + x_max: 982, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 34, + advanceWidth: 1024, + }, + '{': { + x_min: 60, + x_max: 744, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 60, + advanceWidth: 797, + }, + '|': { + x_min: 176, + x_max: 399, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 176, + advanceWidth: 573, + }, + '}': { + x_min: 45, + x_max: 729, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 45, + advanceWidth: 797, + }, + '~': { + x_min: 67, + x_max: 1129, + y_min: 519, + y_max: 924, + ha: 405, + leftSideBearing: 67, + advanceWidth: 1196, + }, + }, + fontFamily: 'Arial', + resolution: 2048, + generatedOn: '2022-11-04T20:05:21.000Z', +}; + + +/***/ }), + +/***/ "./src/fonts/sans_text_metrics.ts": +/*!****************************************!*\ + !*** ./src/fonts/sans_text_metrics.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SansFont": () => (/* binding */ SansFont) +/* harmony export */ }); +const SansFont = { + smufl: false, + name: 'SANS', + spacing: 50, + Description: 'Built-in sans-serif font', + bold: true, + italic: true, + monospaced: false, + serifs: false, + glyphs: { + '0': { + x_min: 85, + x_max: 1041, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 85, + advanceWidth: 1139, + }, + '1': { + x_min: 223, + x_max: 763, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 223, + advanceWidth: 1139, + }, + '2': { + x_min: 61.840001123045234, + x_max: 1031, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 61, + advanceWidth: 1139, + }, + '3': { + x_min: 86, + x_max: 1046, + y_min: -26, + y_max: 1472, + ha: 1498, + leftSideBearing: 86, + advanceWidth: 1139, + }, + '4': { + x_min: 26, + x_max: 1040, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 26, + advanceWidth: 1139, + }, + '5': { + x_min: 85, + x_max: 1057, + y_min: -25, + y_max: 1446, + ha: 1471, + leftSideBearing: 85, + advanceWidth: 1139, + }, + '6': { + x_min: 77, + x_max: 1045, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 77, + advanceWidth: 1139, + }, + '7': { + x_min: 97, + x_max: 1046, + y_min: 0, + y_max: 1447, + ha: 1447, + leftSideBearing: 97, + advanceWidth: 1139, + }, + '8': { + x_min: 83, + x_max: 1049, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 83, + advanceWidth: 1139, + }, + '9': { + x_min: 85, + x_max: 1049, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 85, + advanceWidth: 1139, + }, + ' ': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 569, + }, + '!': { + x_min: 176, + x_max: 399, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 176, + advanceWidth: 569, + }, + '"': { + x_min: 94, + x_max: 631, + y_min: 947, + y_max: 1466, + ha: 519, + leftSideBearing: 94, + advanceWidth: 727, + }, + '#': { + x_min: 21, + x_max: 1113, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 21, + advanceWidth: 1139, + }, + $: { + x_min: 73, + x_max: 1043, + y_min: -211, + y_max: 1601, + ha: 1812, + leftSideBearing: 73, + advanceWidth: 1139, + }, + '%': { + x_min: 119, + x_max: 1695, + y_min: -54, + y_max: 1491, + ha: 1545, + leftSideBearing: 119, + advanceWidth: 1821, + }, + '&': { + x_min: 88, + x_max: 1319, + y_min: -34, + y_max: 1491, + ha: 1525, + leftSideBearing: 88, + advanceWidth: 1366, + }, + "'": { + x_min: 90, + x_max: 295, + y_min: 947, + y_max: 1466, + ha: 519, + leftSideBearing: 90, + advanceWidth: 391, + }, + '(': { + x_min: 124, + x_max: 608, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 124, + advanceWidth: 682, + }, + ')': { + x_min: 124, + x_max: 608, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 124, + advanceWidth: 682, + }, + '*': { + x_min: 64, + x_max: 725, + y_min: 867, + y_max: 1491, + ha: 624, + leftSideBearing: 64, + advanceWidth: 797, + }, + '+': { + x_min: 114, + x_max: 1082, + y_min: 237, + y_max: 1206, + ha: 969, + leftSideBearing: 114, + advanceWidth: 1196, + }, + ',': { + x_min: 170, + x_max: 387, + y_min: -290, + y_max: 205, + ha: 495, + leftSideBearing: 170, + advanceWidth: 569, + }, + '-': { + x_min: 65, + x_max: 618, + y_min: 440, + y_max: 621, + ha: 181, + leftSideBearing: 65, + advanceWidth: 682, + }, + '.': { + x_min: 186, + x_max: 391, + y_min: 0, + y_max: 205, + ha: 205, + leftSideBearing: 186, + advanceWidth: 569, + }, + '/': { + x_min: 0, + x_max: 569, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 0, + advanceWidth: 569, + }, + ':': { + x_min: 185, + x_max: 390, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 185, + advanceWidth: 569, + }, + ';': { + x_min: 170, + x_max: 387, + y_min: -290, + y_max: 1062, + ha: 1352, + leftSideBearing: 170, + advanceWidth: 569, + }, + '<': { + x_min: 112, + x_max: 1083, + y_min: 226, + y_max: 1219, + ha: 993, + leftSideBearing: 112, + advanceWidth: 1196, + }, + '=': { + x_min: 114, + x_max: 1082, + y_min: 417, + y_max: 1030, + ha: 613, + leftSideBearing: 114, + advanceWidth: 1196, + }, + '>': { + x_min: 112, + x_max: 1083, + y_min: 226, + y_max: 1219, + ha: 993, + leftSideBearing: 112, + advanceWidth: 1196, + }, + '?': { + x_min: 90, + x_max: 1036, + y_min: 0, + y_max: 1491, + ha: 1491, + leftSideBearing: 90, + advanceWidth: 1139, + }, + '@': { + x_min: 111, + x_max: 2005, + y_min: -431, + y_max: 1493, + ha: 1924, + leftSideBearing: 111, + advanceWidth: 2079, + }, + A: { + x_min: -3, + x_max: 1369, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: -3, + advanceWidth: 1366, + }, + B: { + x_min: 150, + x_max: 1257, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1366, + }, + C: { + x_min: 102, + x_max: 1398, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 102, + advanceWidth: 1479, + }, + D: { + x_min: 158, + x_max: 1370, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 158, + advanceWidth: 1479, + }, + E: { + x_min: 162, + x_max: 1256, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 162, + advanceWidth: 1366, + }, + F: { + x_min: 168, + x_max: 1157, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 168, + advanceWidth: 1251, + }, + G: { + x_min: 109, + x_max: 1465, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 109, + advanceWidth: 1593, + }, + H: { + x_min: 164, + x_max: 1314, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 164, + advanceWidth: 1479, + }, + I: { + x_min: 191, + x_max: 385, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 191, + advanceWidth: 569, + }, + J: { + x_min: 58.84976474807333, + x_max: 865, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 58, + advanceWidth: 1024, + }, + K: { + x_min: 150, + x_max: 1362, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1366, + }, + L: { + x_min: 150, + x_max: 1066, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1139, + }, + M: { + x_min: 152, + x_max: 1551, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 152, + advanceWidth: 1706, + }, + N: { + x_min: 156, + x_max: 1311, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 156, + advanceWidth: 1479, + }, + O: { + x_min: 99, + x_max: 1501, + y_min: -25, + y_max: 1492, + ha: 1517, + leftSideBearing: 99, + advanceWidth: 1593, + }, + P: { + x_min: 158, + x_max: 1277, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 158, + advanceWidth: 1366, + }, + Q: { + x_min: 88, + x_max: 1518, + y_min: -114, + y_max: 1492, + ha: 1606, + leftSideBearing: 88, + advanceWidth: 1593, + }, + R: { + x_min: 161, + x_max: 1453, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 161, + advanceWidth: 1479, + }, + S: { + x_min: 92, + x_max: 1259, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 92, + advanceWidth: 1366, + }, + T: { + x_min: 48, + x_max: 1210, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 48, + advanceWidth: 1251, + }, + U: { + x_min: 161, + x_max: 1314, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 161, + advanceWidth: 1479, + }, + V: { + x_min: 9, + x_max: 1350, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 9, + advanceWidth: 1366, + }, + W: { + x_min: 25, + x_max: 1910, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 25, + advanceWidth: 1933, + }, + X: { + x_min: 9, + x_max: 1353, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 9, + advanceWidth: 1366, + }, + Y: { + x_min: 6, + x_max: 1350, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 6, + advanceWidth: 1366, + }, + Z: { + x_min: 41, + x_max: 1200, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 41, + advanceWidth: 1251, + }, + '[': { + x_min: 139, + x_max: 536, + y_min: -407, + y_max: 1466, + ha: 1873, + leftSideBearing: 139, + advanceWidth: 569, + }, + '\\': { + x_min: 0, + x_max: 569, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 0, + advanceWidth: 569, + }, + ']': { + x_min: 39, + x_max: 436, + y_min: -407, + y_max: 1466, + ha: 1873, + leftSideBearing: 39, + advanceWidth: 569, + }, + '^': { + x_min: 54, + x_max: 907, + y_min: 690, + y_max: 1491, + ha: 801, + leftSideBearing: 54, + advanceWidth: 961, + }, + _: { + x_min: -31, + x_max: 1162, + y_min: -407, + y_max: -277, + ha: 130, + leftSideBearing: -31, + advanceWidth: 1139, + }, + '`': { + x_min: 89, + x_max: 465, + y_min: 1194, + y_max: 1474, + ha: 280, + leftSideBearing: 89, + advanceWidth: 682, + }, + a: { + x_min: 74, + x_max: 1052, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 74, + advanceWidth: 1139, + }, + b: { + x_min: 134, + x_max: 1055, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 134, + advanceWidth: 1139, + }, + c: { + x_min: 80, + x_max: 1005, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 80, + advanceWidth: 1024, + }, + d: { + x_min: 70, + x_max: 991, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 70, + advanceWidth: 1139, + }, + e: { + x_min: 75, + x_max: 1054, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 75, + advanceWidth: 1139, + }, + f: { + x_min: 19, + x_max: 640, + y_min: 0, + y_max: 1491, + ha: 1491, + leftSideBearing: 19, + advanceWidth: 569, + }, + g: { + x_min: 66, + x_max: 1002, + y_min: -431, + y_max: 1086, + ha: 1517, + leftSideBearing: 66, + advanceWidth: 1139, + }, + h: { + x_min: 135, + x_max: 1000, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 135, + advanceWidth: 1139, + }, + i: { + x_min: 136, + x_max: 316, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 136, + advanceWidth: 455, + }, + j: { + x_min: -94, + x_max: 314, + y_min: -431, + y_max: 1466, + ha: 1897, + leftSideBearing: -94, + advanceWidth: 455, + }, + k: { + x_min: 136, + x_max: 1016, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 136, + advanceWidth: 1024, + }, + l: { + x_min: 131, + x_max: 311, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 131, + advanceWidth: 455, + }, + m: { + x_min: 135, + x_max: 1574, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 135, + advanceWidth: 1706, + }, + n: { + x_min: 135, + x_max: 998, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 135, + advanceWidth: 1139, + }, + o: { + x_min: 68, + x_max: 1063, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 68, + advanceWidth: 1139, + }, + p: { + x_min: 135, + x_max: 1057, + y_min: -407, + y_max: 1086, + ha: 1493, + leftSideBearing: 135, + advanceWidth: 1139, + }, + q: { + x_min: 72, + x_max: 992, + y_min: -407, + y_max: 1086, + ha: 1493, + leftSideBearing: 72, + advanceWidth: 1139, + }, + r: { + x_min: 133, + x_max: 710, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 133, + advanceWidth: 682, + }, + s: { + x_min: 63, + x_max: 945, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 63, + advanceWidth: 1024, + }, + t: { + x_min: 36, + x_max: 554, + y_min: -14, + y_max: 1433, + ha: 1447, + leftSideBearing: 36, + advanceWidth: 569, + }, + u: { + x_min: 131, + x_max: 992, + y_min: -24, + y_max: 1062, + ha: 1086, + leftSideBearing: 131, + advanceWidth: 1139, + }, + v: { + x_min: 26, + x_max: 1000, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 26, + advanceWidth: 1024, + }, + w: { + x_min: 6, + x_max: 1463, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 6, + advanceWidth: 1479, + }, + x: { + x_min: 15, + x_max: 1009, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 15, + advanceWidth: 1024, + }, + y: { + x_min: 33, + x_max: 1006, + y_min: -431, + y_max: 1062, + ha: 1493, + leftSideBearing: 33, + advanceWidth: 1024, + }, + z: { + x_min: 40, + x_max: 980, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 40, + advanceWidth: 1024, + }, + '{': { + x_min: 57, + x_max: 636, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 57, + advanceWidth: 684, + }, + '|': { + x_min: 188, + x_max: 345, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 188, + advanceWidth: 532, + }, + '}': { + x_min: 47, + x_max: 626, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 47, + advanceWidth: 684, + }, + '~': { + x_min: 87, + x_max: 1110, + y_min: 557, + y_max: 885, + ha: 328, + leftSideBearing: 87, + advanceWidth: 1196, + }, + }, + fontFamily: 'sans-serif', + resolution: 2048, + generatedOn: '2020-10-18T18:48:11.823Z', +}; + + +/***/ }), + +/***/ "./src/fonts/serif_text_metrics.ts": +/*!*****************************************!*\ + !*** ./src/fonts/serif_text_metrics.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SerifFont": () => (/* binding */ SerifFont) +/* harmony export */ }); +const SerifFont = { + smufl: false, + name: 'SERIF', + spacing: 50, + Description: 'Built-in serif font', + bold: true, + italic: true, + monospaced: false, + serifs: true, + glyphs: { + '0': { + x_min: 49, + x_max: 975, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: 49, + advanceWidth: 1024, + }, + '1': { + x_min: 227, + x_max: 811, + y_min: 0, + y_max: 1383, + ha: 1383, + leftSideBearing: 227, + advanceWidth: 1024, + }, + '2': { + x_min: 61, + x_max: 965, + y_min: 0, + y_max: 1383, + ha: 1383, + leftSideBearing: 61, + advanceWidth: 1024, + }, + '3': { + x_min: 88, + x_max: 883, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: 88, + advanceWidth: 1024, + }, + '4': { + x_min: 25, + x_max: 967, + y_min: 0, + y_max: 1384, + ha: 1384, + leftSideBearing: 25, + advanceWidth: 1024, + }, + '5': { + x_min: 66, + x_max: 898, + y_min: -27, + y_max: 1409, + ha: 1436, + leftSideBearing: 66, + advanceWidth: 1024, + }, + '6': { + x_min: 70, + x_max: 958, + y_min: -27, + y_max: 1401, + ha: 1428, + leftSideBearing: 70, + advanceWidth: 1024, + }, + '7': { + x_min: 41, + x_max: 920, + y_min: -16, + y_max: 1356, + ha: 1372, + leftSideBearing: 41, + advanceWidth: 1024, + }, + '8': { + x_min: 115, + x_max: 911, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: 115, + advanceWidth: 1024, + }, + '9': { + x_min: 61, + x_max: 940, + y_min: -41, + y_max: 1383, + ha: 1424, + leftSideBearing: 61, + advanceWidth: 1024, + }, + ' ': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 512, + }, + '!': { + x_min: 266, + x_max: 488, + y_min: -22, + y_max: 1383, + ha: 1405, + leftSideBearing: 266, + advanceWidth: 682, + }, + '"': { + x_min: 157.2000021972655, + x_max: 678.2500021457677, + y_min: 881, + y_max: 1385, + ha: 504, + leftSideBearing: 157, + advanceWidth: 836, + }, + '#': { + x_min: 10, + x_max: 1016, + y_min: -1, + y_max: 1356, + ha: 1357, + leftSideBearing: 10, + advanceWidth: 1024, + }, + $: { + x_min: 90, + x_max: 936, + y_min: -180, + y_max: 1492, + ha: 1672, + leftSideBearing: 90, + advanceWidth: 1024, + }, + '%': { + x_min: 125, + x_max: 1581, + y_min: -30, + y_max: 1388, + ha: 1418, + leftSideBearing: 125, + advanceWidth: 1706, + }, + '&': { + x_min: 86, + x_max: 1536, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 86, + advanceWidth: 1593, + }, + "'": { + x_min: 97.20000219726548, + x_max: 273.2500021457677, + y_min: 881, + y_max: 1385, + ha: 504, + leftSideBearing: 97, + advanceWidth: 369, + }, + '(': { + x_min: 98, + x_max: 623, + y_min: -363, + y_max: 1383, + ha: 1746, + leftSideBearing: 98, + advanceWidth: 682, + }, + ')': { + x_min: 59, + x_max: 584, + y_min: -363, + y_max: 1383, + ha: 1746, + leftSideBearing: 59, + advanceWidth: 682, + }, + '*': { + x_min: 137.96078522291893, + x_max: 886.039214777081, + y_min: 543, + y_max: 1383, + ha: 840, + leftSideBearing: 137, + advanceWidth: 1024, + }, + '+': { + x_min: 61, + x_max: 1093, + y_min: 2, + y_max: 1034, + ha: 1032, + leftSideBearing: 61, + advanceWidth: 1155, + }, + ',': { + x_min: 115, + x_max: 399, + y_min: -291, + y_max: 208, + ha: 499, + leftSideBearing: 115, + advanceWidth: 512, + }, + '-': { + x_min: 80, + x_max: 584, + y_min: 396, + y_max: 525, + ha: 129, + leftSideBearing: 80, + advanceWidth: 682, + }, + '.': { + x_min: 143, + x_max: 371, + y_min: -22, + y_max: 205, + ha: 227, + leftSideBearing: 143, + advanceWidth: 512, + }, + '/': { + x_min: -17, + x_max: 586, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: -17, + advanceWidth: 569, + }, + ':': { + x_min: 166, + x_max: 394, + y_min: -22, + y_max: 943, + ha: 965, + leftSideBearing: 166, + advanceWidth: 569, + }, + ';': { + x_min: 164, + x_max: 448, + y_min: -290, + y_max: 943, + ha: 1233, + leftSideBearing: 164, + advanceWidth: 569, + }, + '<': { + x_min: 57, + x_max: 1098, + y_min: -15, + y_max: 1051, + ha: 1066, + leftSideBearing: 57, + advanceWidth: 1155, + }, + '=': { + x_min: 61, + x_max: 1093, + y_min: 246, + y_max: 791, + ha: 545, + leftSideBearing: 61, + advanceWidth: 1155, + }, + '>': { + x_min: 57, + x_max: 1098, + y_min: -15, + y_max: 1051, + ha: 1066, + leftSideBearing: 57, + advanceWidth: 1155, + }, + '?': { + x_min: 139, + x_max: 848, + y_min: -15, + y_max: 1383, + ha: 1398, + leftSideBearing: 139, + advanceWidth: 909, + }, + '@': { + x_min: 238, + x_max: 1657, + y_min: -29, + y_max: 1386, + ha: 1415, + leftSideBearing: 238, + advanceWidth: 1886, + }, + A: { + x_min: 31, + x_max: 1445, + y_min: 0, + y_max: 1380, + ha: 1380, + leftSideBearing: 31, + advanceWidth: 1479, + }, + B: { + x_min: 35, + x_max: 1214, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 35, + advanceWidth: 1366, + }, + C: { + x_min: 57, + x_max: 1296, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 57, + advanceWidth: 1366, + }, + D: { + x_min: 33, + x_max: 1403, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 33, + advanceWidth: 1479, + }, + E: { + x_min: 25, + x_max: 1222, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1251, + }, + F: { + x_min: 25, + x_max: 1119, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1139, + }, + G: { + x_min: 66, + x_max: 1452, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 66, + advanceWidth: 1479, + }, + H: { + x_min: 39, + x_max: 1438, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 39, + advanceWidth: 1479, + }, + I: { + x_min: 37, + x_max: 642, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 37, + advanceWidth: 682, + }, + J: { + x_min: 20, + x_max: 758, + y_min: -28, + y_max: 1356, + ha: 1384, + leftSideBearing: 20, + advanceWidth: 797, + }, + K: { + x_min: 70, + x_max: 1479, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 70, + advanceWidth: 1479, + }, + L: { + x_min: 25, + x_max: 1224, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1251, + }, + M: { + x_min: 25, + x_max: 1768, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1821, + }, + N: { + x_min: 25, + x_max: 1450, + y_min: -22, + y_max: 1356, + ha: 1378, + leftSideBearing: 25, + advanceWidth: 1479, + }, + O: { + x_min: 70, + x_max: 1409, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 70, + advanceWidth: 1479, + }, + P: { + x_min: 33, + x_max: 1110, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 33, + advanceWidth: 1139, + }, + Q: { + x_min: 70, + x_max: 1435, + y_min: -364.28571588721996, + y_max: 1383, + ha: 1747.28571588722, + leftSideBearing: 70, + advanceWidth: 1479, + }, + R: { + x_min: 35, + x_max: 1347, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 35, + advanceWidth: 1366, + }, + S: { + x_min: 86, + x_max: 1006, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 86, + advanceWidth: 1139, + }, + T: { + x_min: 35, + x_max: 1214, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 35, + advanceWidth: 1251, + }, + U: { + x_min: 29, + x_max: 1444, + y_min: -28, + y_max: 1356, + ha: 1384, + leftSideBearing: 29, + advanceWidth: 1479, + }, + V: { + x_min: 33, + x_max: 1428, + y_min: -22, + y_max: 1356, + ha: 1378, + leftSideBearing: 33, + advanceWidth: 1479, + }, + W: { + x_min: 10, + x_max: 1906, + y_min: -22, + y_max: 1356, + ha: 1378, + leftSideBearing: 10, + advanceWidth: 1933, + }, + X: { + x_min: 20, + x_max: 1449, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 20, + advanceWidth: 1479, + }, + Y: { + x_min: 45, + x_max: 1441, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 45, + advanceWidth: 1479, + }, + Z: { + x_min: 18, + x_max: 1222, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 18, + advanceWidth: 1251, + }, + '[': { + x_min: 180, + x_max: 612, + y_min: -319, + y_max: 1355, + ha: 1674, + leftSideBearing: 180, + advanceWidth: 682, + }, + '\\': { + x_min: -17, + x_max: 586, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: -17, + advanceWidth: 569, + }, + ']': { + x_min: 70, + x_max: 502, + y_min: -319, + y_max: 1355, + ha: 1674, + leftSideBearing: 70, + advanceWidth: 682, + }, + '^': { + x_min: 49, + x_max: 914, + y_min: 608, + y_max: 1355, + ha: 747, + leftSideBearing: 49, + advanceWidth: 961, + }, + _: { + x_min: 0, + x_max: 1024, + y_min: -255, + y_max: -153, + ha: 102, + leftSideBearing: 0, + advanceWidth: 1024, + }, + '`': { + x_min: 39, + x_max: 499, + y_min: 1037, + y_max: 1392.509803639748, + ha: 355.50980363974804, + leftSideBearing: 39, + advanceWidth: 682, + }, + a: { + x_min: 76, + x_max: 905, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 76, + advanceWidth: 909, + }, + b: { + x_min: 6, + x_max: 958, + y_min: -20, + y_max: 1399, + ha: 1419, + leftSideBearing: 6, + advanceWidth: 1024, + }, + c: { + x_min: 51, + x_max: 843, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 51, + advanceWidth: 909, + }, + d: { + x_min: 55, + x_max: 1006, + y_min: -20, + y_max: 1399, + ha: 1419, + leftSideBearing: 55, + advanceWidth: 1024, + }, + e: { + x_min: 51, + x_max: 868, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 51, + advanceWidth: 909, + }, + f: { + x_min: 41, + x_max: 783, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 41, + advanceWidth: 682, + }, + g: { + x_min: 57, + x_max: 963, + y_min: -446, + y_max: 942, + ha: 1388, + leftSideBearing: 57, + advanceWidth: 1024, + }, + h: { + x_min: 18, + x_max: 997, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 18, + advanceWidth: 1024, + }, + i: { + x_min: 33, + x_max: 516, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 33, + advanceWidth: 569, + }, + j: { + x_min: -142, + x_max: 397, + y_min: -446, + y_max: 1399, + ha: 1845, + leftSideBearing: -142, + advanceWidth: 569, + }, + k: { + x_min: 14, + x_max: 1029, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 14, + advanceWidth: 1024, + }, + l: { + x_min: 39, + x_max: 523, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 39, + advanceWidth: 569, + }, + m: { + x_min: 33, + x_max: 1587, + y_min: 0, + y_max: 944, + ha: 944, + leftSideBearing: 33, + advanceWidth: 1593, + }, + n: { + x_min: 33, + x_max: 993, + y_min: 0, + y_max: 944, + ha: 944, + leftSideBearing: 33, + advanceWidth: 1024, + }, + o: { + x_min: 59, + x_max: 963, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 59, + advanceWidth: 1024, + }, + p: { + x_min: 10, + x_max: 964, + y_min: -443, + y_max: 944, + ha: 1387, + leftSideBearing: 10, + advanceWidth: 1024, + }, + q: { + x_min: 49, + x_max: 999, + y_min: -443, + y_max: 942.0135137169275, + ha: 1385.0135137169275, + leftSideBearing: 49, + advanceWidth: 1024, + }, + r: { + x_min: 10, + x_max: 685, + y_min: 0, + y_max: 944, + ha: 944, + leftSideBearing: 10, + advanceWidth: 682, + }, + s: { + x_min: 104, + x_max: 713, + y_min: -20, + y_max: 942.0263161804552, + ha: 962.0263161804552, + leftSideBearing: 104, + advanceWidth: 797, + }, + t: { + x_min: 27, + x_max: 572, + y_min: -18, + y_max: 1186, + ha: 1204, + leftSideBearing: 27, + advanceWidth: 569, + }, + u: { + x_min: 18, + x_max: 981, + y_min: -21, + y_max: 921, + ha: 942, + leftSideBearing: 18, + advanceWidth: 1024, + }, + v: { + x_min: 39, + x_max: 976, + y_min: -28, + y_max: 921, + ha: 949, + leftSideBearing: 39, + advanceWidth: 1024, + }, + w: { + x_min: 43, + x_max: 1423, + y_min: -28, + y_max: 921, + ha: 949, + leftSideBearing: 43, + advanceWidth: 1479, + }, + x: { + x_min: 35, + x_max: 989, + y_min: 0, + y_max: 921, + ha: 921, + leftSideBearing: 35, + advanceWidth: 1024, + }, + y: { + x_min: 29, + x_max: 976, + y_min: -445, + y_max: 921, + ha: 1366, + leftSideBearing: 29, + advanceWidth: 1024, + }, + z: { + x_min: 55, + x_max: 855, + y_min: 0, + y_max: 921, + ha: 921, + leftSideBearing: 55, + advanceWidth: 909, + }, + '{': { + x_min: 205, + x_max: 717, + y_min: -377, + y_max: 1397, + ha: 1774, + leftSideBearing: 205, + advanceWidth: 983, + }, + '|': { + x_min: 137, + x_max: 273, + y_min: -512, + y_max: 1535, + ha: 2047, + leftSideBearing: 137, + advanceWidth: 410, + }, + '}': { + x_min: 266, + x_max: 778, + y_min: -377, + y_max: 1397, + ha: 1774, + leftSideBearing: 266, + advanceWidth: 983, + }, + '~': { + x_min: 82, + x_max: 1028, + y_min: 380, + y_max: 666, + ha: 286, + leftSideBearing: 82, + advanceWidth: 1108, + }, + }, + fontFamily: 'serif', + resolution: 2048, + generatedOn: '2020-10-18T19:03:12.514Z', +}; + + +/***/ }), + +/***/ "./src/fonts/textfonts.ts": +/*!********************************!*\ + !*** ./src/fonts/textfonts.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadTextFonts": () => (/* binding */ loadTextFonts) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petalumascript_glyphs */ "./src/fonts/petalumascript_glyphs.ts"); +/* harmony import */ var _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./robotoslab_glyphs */ "./src/fonts/robotoslab_glyphs.ts"); +/* harmony import */ var _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sans_bold_text_metrics */ "./src/fonts/sans_bold_text_metrics.ts"); +/* harmony import */ var _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sans_text_metrics */ "./src/fonts/sans_text_metrics.ts"); +/* harmony import */ var _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./serif_text_metrics */ "./src/fonts/serif_text_metrics.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +function loadTextFonts() { + // Sans-serif fallback font, very close to Arial + { + const fontData = _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__.SansFontBold; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // Usually @ is the tallest and widest character, although not the + // highest since it starts below the baseline. + const maxSizeGlyph = '@'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: true, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: false, + description: 'Generic SANS font', + }); + } + // Sans-serif fallback font, very close to Arial + { + const fontData = _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__.SansFont; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // Usually @ is the tallest and widest character, although not the + // highest since it starts below the baseline. + const maxSizeGlyph = '@'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: false, + description: 'Generic SANS font', + }); + } + // Serif fallback font, very close to Times + { + const fontData = _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__.SerifFont; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // M is wider, but H is taller. :-) + // Lowercase b is also taller in this font. + const maxSizeGlyph = '@'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: true, + description: 'Generic SERIF font', + }); + } + // Roboto Slab + { + const fontData = _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__.RobotoSlabFont; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // Previously we used 'H', but it isn't actually the tallest or the widest. + // Interestingly, the lowercase 'b' is the tallest glyph. + const maxSizeGlyph = 'b'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: true, + description: 'Text font to pair with the Bravura / Gonville music fonts.', + }); + } + // PetalumaScript + { + const fontData = _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__.PetalumaScriptFont; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // M is wider, but H is taller. :-) + // Lowercase b is also taller in this font. + const maxSizeGlyph = 'b'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: false, + description: 'Text font to pair with the Petaluma music font.', + }); + } +} + + +/***/ }), + +/***/ "./src/formatter.ts": +/*!**************************!*\ + !*** ./src/formatter.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Formatter": () => (/* binding */ Formatter) +/* harmony export */ }); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + + + + + +/** + * Create `Alignment`s for each tick in `voices`. Also calculate the + * total number of ticks in voices. + */ +function createContexts(voices, makeContext, addToContext) { + if (voices.length == 0) + return { + map: {}, + array: [], + list: [], + resolutionMultiplier: 0, + }; + // Initialize tick maps. + const tickToContextMap = {}; + const tickList = []; + const contexts = []; + const resolutionMultiplier = Formatter.getResolutionMultiplier(voices); + // For each voice, extract notes and create a context for every + // new tick that hasn't been seen before. + voices.forEach((voice, voiceIndex) => { + // Use resolution multiplier as denominator so that no additional expansion + // of fractional tick values is needed. + const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier); + voice.getTickables().forEach((tickable) => { + const integerTicks = ticksUsed.numerator; + // If we have no tick context for this tick, create one. + if (!tickToContextMap[integerTicks]) { + const newContext = makeContext({ tickID: integerTicks }); + contexts.push(newContext); + tickToContextMap[integerTicks] = newContext; + // Maintain a list of unique integerTicks. + tickList.push(integerTicks); + } + // Add this tickable to the TickContext. + addToContext(tickable, tickToContextMap[integerTicks], voiceIndex); + ticksUsed.add(tickable.getTicks()); + }); + }); + return { + map: tickToContextMap, + array: contexts, + list: tickList.sort((a, b) => a - b), + resolutionMultiplier, + }; +} +// eslint-disable-next-line +function L(...args) { + if (Formatter.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_9__.log)('Vex.Flow.Formatter', args); +} +/** + * Get the rest line number of the next non-rest note(s). + * @param notes array of Notes + * @param currRestLine + * @param currNoteIndex current note index + * @param compare if true, return the midpoint between the current rest line and the next rest line + * @returns a line number, which determines the vertical position of a rest. + */ +function getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) { + // If no valid next note group, nextRestLine is same as current. + let nextRestLine = currRestLine; + // Start with the next note and keep going until we find a valid non-rest note group. + for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) { + const note = notes[noteIndex]; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isNote)(note) && !note.isRest() && !note.shouldIgnoreTicks()) { + nextRestLine = note.getLineForRest(); + break; + } + } + // Locate the mid point between two lines. + if (compare && currRestLine !== nextRestLine) { + const top = Math.max(currRestLine, nextRestLine); + const bot = Math.min(currRestLine, nextRestLine); + nextRestLine = (0,_util__WEBPACK_IMPORTED_MODULE_9__.midLine)(top, bot); + } + return nextRestLine; +} +/** + * Format implements the formatting and layout algorithms that are used + * to position notes in a voice. The algorithm can align multiple voices both + * within a stave, and across multiple staves. + * + * To do this, the formatter breaks up voices into a grid of rational-valued + * `ticks`, to which each note is assigned. Then, minimum widths are assigned + * to each tick based on the widths of the notes and modifiers in that tick. This + * establishes the smallest amount of space required for each tick. + * + * Finally, the formatter distributes the left over space proportionally to + * all the ticks, setting the `x` values of the notes in each tick. + * + * See `tests/formatter_tests.ts` for usage examples. The helper functions included + * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples. + */ +class Formatter { + /** + * Helper function to layout "notes" one after the other without + * regard for proportions. Useful for tests and debugging. + */ + static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) { + notes.reduce((accumulator, note) => { + note.addToModifierContext(new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext()); + const tick = new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext().addTickable(note).preFormat(); + const metrics = tick.getMetrics(); + tick.setX(accumulator + metrics.totalLeftPx); + return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween; + }, x); + } + /** Helper function to plot formatter debug info. */ + static plotDebugging(ctx, formatter, xPos, y1, y2, options) { + options = Object.assign({ stavePadding: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.padding') }, options); + const x = xPos + options.stavePadding; + const contextGaps = formatter.contextGaps; + function stroke(x1, x2, color) { + ctx.beginPath(); + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + ctx.setLineWidth(1); + ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1); + } + ctx.save(); + ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_1__.Font.SANS_SERIF, 8); + contextGaps.gaps.forEach((gap) => { + stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)'); + ctx.setFillStyle('green'); + ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12); + }); + ctx.setFillStyle('red'); + ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27); + ctx.restore(); + } + /** + * Helper function to format and draw a single voice. Returns a bounding + * box for the notation. + * @param ctx the rendering context + * @param stave the stave to which to draw (`Stave` or `TabStave`) + * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.) + * @param params one of below: + * * Setting `autobeam` only `(context, stave, notes, true)` or + * `(ctx, stave, notes, {autobeam: true})` + * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})` + * * Setting both a struct is needed `(context, stave, notes, { + * autobeam: true, align_rests: true})` + * * `autobeam` automatically generates beams for the notes. + * * `align_rests` aligns rests with nearby notes. + */ + static FormatAndDraw(ctx, stave, notes, params) { + let options = { + auto_beam: false, + align_rests: false, + }; + if (typeof params === 'object') { + options = Object.assign(Object.assign({}, options), params); + } + else if (typeof params === 'boolean') { + options.auto_beam = params; + } + // Start by creating a voice and adding all the notes to it. + const voice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes); + // Then create beams, if requested. + const beams = options.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(voice) : []; + // Instantiate a `Formatter` and format the notes. + new Formatter() + .joinVoices([voice]) // , { align_rests: options.align_rests }) + .formatToStave([voice], stave, { align_rests: options.align_rests, stave }); + // Render the voice and beams to the stave. + voice.setStave(stave).draw(ctx, stave); + beams.forEach((beam) => beam.setContext(ctx).draw()); + // Return the bounding box of the voice. + return voice.getBoundingBox(); + } + /** + * Helper function to format and draw aligned tab and stave notes in two + * separate staves. + * @param ctx the rendering context + * @param tabstave a `TabStave` instance on which to render `TabNote`s. + * @param stave a `Stave` instance on which to render `Note`s. + * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.) + * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.) + * @param autobeam automatically generate beams. + * @param params a configuration object: + * * `autobeam` automatically generates beams for the notes. + * * `align_rests` aligns rests with nearby notes. + */ + static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) { + let opts = { + auto_beam: autobeam, + align_rests: false, + }; + if (typeof params === 'object') { + opts = Object.assign(Object.assign({}, opts), params); + } + else if (typeof params === 'boolean') { + opts.auto_beam = params; + } + // Create a `4/4` voice for `notes`. + const notevoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes); + // Create a `4/4` voice for `tabnotes`. + const tabvoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(tabnotes); + // Then create beams, if requested. + const beams = opts.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(notevoice) : []; + // Instantiate a `Formatter` and align tab and stave notes. + new Formatter() + .joinVoices([notevoice]) // , { align_rests: opts.align_rests }) + .joinVoices([tabvoice]) + .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests }); + // Render voices and beams to staves. + notevoice.draw(ctx, stave); + tabvoice.draw(ctx, tabstave); + beams.forEach((beam) => beam.setContext(ctx).draw()); + // Draw a connector between tab and note staves. + new _staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave, tabstave).setContext(ctx).draw(); + } + /** + * Automatically set the vertical position of rests based on previous/next note positions. + * @param tickables an array of Tickables. + * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes. + * @param alignTuplets If `false`, ignores tuplets. + */ + static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) { + tickables.forEach((currTickable, index) => { + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(currTickable) && currTickable.isRest()) { + if (currTickable.getTuplet() && !alignTuplets) { + return; + } + // If activated rests not on default can be rendered as specified. + const position = currTickable.getGlyphProps().position.toUpperCase(); + if (position !== 'R/4' && position !== 'B/4') { + return; + } + if (alignAllNotes || currTickable.getBeam()) { + // Align rests with previous/next notes. + const props = currTickable.getKeyProps()[0]; + if (index === 0) { + props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false); + } + else if (index > 0 && index < tickables.length) { + // If previous tickable is a rest, use its line number. + const prevTickable = tickables[index - 1]; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(prevTickable)) { + if (prevTickable.isRest()) { + props.line = prevTickable.getKeyProps()[0].line; + } + else { + const restLine = prevTickable.getLineForRest(); + // Get the rest line for next valid non-rest note group. + props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true); + } + } + } + currTickable.setKeyLine(0, props.line); + } + } + }); + } + constructor(options) { + this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options); + this.justifyWidth = 0; + this.totalCost = 0; + this.totalShift = 0; + this.durationStats = {}; + // Minimum width required to render all the notes in the voices. + this.minTotalWidth = 0; + // This is set to `true` after `minTotalWidth` is calculated. + this.hasMinTotalWidth = false; + // Arrays of tick and modifier contexts. + this.tickContexts = { + map: {}, + array: [], + list: [], + resolutionMultiplier: 0, + }; + this.modifierContexts = []; + // Gaps between contexts, for free movement of notes post + // formatting. + this.contextGaps = { + total: 0, + gaps: [], + }; + this.voices = []; + this.lossHistory = []; + } + /** + * Find all the rests in each of the `voices` and align them to neighboring notes. + * + * @param voices + * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests. + */ + alignRests(voices, alignAllNotes) { + if (!voices || !voices.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format rests'); + } + voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes)); + } + /** + * Estimate the width required to render 'voices'. This is done by: + * 1. Sum the widths of all the tick contexts + * 2. Estimate the padding. + * The latter is done by calculating the padding 3 different ways, and taking the + * greatest value: + * 1. the padding required for unaligned notes in different voices + * 2. the padding based on the stddev of the tickable widths + * 3. the padding based on the stddev of the tickable durations. + * + * The last 2 quantities estimate a 'width entropy', where notes might need more + * room than the proportional formatting gives them. A measure of all same duration + * and width will need no extra padding, and all these quantities will be + * zero in that case. + * + * Note: joinVoices has to be called before calling preCalculateMinTotalWidth. + * + * @param voices the voices that contain the notes + * @returns the estimated width in pixels + */ + preCalculateMinTotalWidth(voices) { + const unalignedPadding = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding'); + // Calculate additional padding based on 3 methods: + // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations + let unalignedCtxCount = 0; + let wsum = 0; + let dsum = 0; + const widths = []; + const durations = []; + // Cache results. + if (this.hasMinTotalWidth) + return this.minTotalWidth; + // Create tick contexts. + if (!voices) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', "'voices' required to run preCalculateMinTotalWidth"); + } + this.createTickContexts(voices); + // eslint-disable-next-line + const { list: contextList, map: contextMap } = this.tickContexts; + this.minTotalWidth = 0; + // Go through each tick context and calculate total width, + // and also accumulate values used in padding hints + contextList.forEach((tick) => { + const context = contextMap[tick]; + context.preFormat(); + // If this TC doesn't have all the voices on it, it's unaligned. + // so increment the unaligned padding accumulator + if (context.getTickables().length < voices.length) { + unalignedCtxCount += 1; + } + // Calculate the 'width entropy' over all the Tickables. + context.getTickables().forEach((t) => { + wsum += t.getMetrics().width; + dsum += t.getTicks().value(); + widths.push(t.getMetrics().width); + durations.push(t.getTicks().value()); + }); + const width = context.getWidth(); + this.minTotalWidth += width; + }); + this.hasMinTotalWidth = true; + // normalized (0-1) STDDEV of widths/durations gives us padding hints. + const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length; + const wvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(widths.map((ll) => Math.pow(ll - wavg, 2))); + const wpads = Math.pow(wvar / widths.length, 0.5) / wavg; + const davg = dsum / durations.length; + const dvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(durations.map((ll) => Math.pow(ll - davg, 2))); + const dpads = Math.pow(dvar / durations.length, 0.5) / davg; + // Find max of 3 methods pad the width with that + const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding; + const unalignedPad = unalignedPadding * unalignedCtxCount; + return this.minTotalWidth + Math.max(unalignedPad, padmax); + } + /** + * Get minimum width required to render all voices. Either `format` or + * `preCalculateMinTotalWidth` must be called before this method. + */ + getMinTotalWidth() { + if (!this.hasMinTotalWidth) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoMinTotalWidth', "Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'"); + } + return this.minTotalWidth; + } + /** Calculate the resolution multiplier for `voices`. */ + static getResolutionMultiplier(voices) { + if (!voices || !voices.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format'); + } + const totalTicks = voices[0].getTotalTicks(); + const resolutionMultiplier = voices.reduce((accumulator, voice) => { + if (!voice.getTotalTicks().equals(totalTicks)) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.'); + } + if (voice.getMode() === _voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.STRICT && !voice.isComplete()) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('IncompleteVoice', 'Voice does not have enough notes.'); + } + return Math.max(accumulator, _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction.LCM(accumulator, voice.getResolutionMultiplier())); + }, 1); + return resolutionMultiplier; + } + /** Create a `ModifierContext` for each tick in `voices`. */ + createModifierContexts(voices) { + if (voices.length == 0) + return; + const resolutionMultiplier = Formatter.getResolutionMultiplier(voices); + // Initialize tick maps. + const tickToContextMap = new Map(); + const contexts = []; + // For each voice, extract notes and create a context for every + // new tick that hasn't been seen before. + voices.forEach((voice) => { + // Use resolution multiplier as denominator so that no additional expansion + // of fractional tick values is needed. + const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier); + voice.getTickables().forEach((tickable) => { + const integerTicks = ticksUsed.numerator; + let staveTickToContextMap = tickToContextMap.get(tickable.getStave()); + // If we have no tick context for this tick, create one. + if (!staveTickToContextMap) { + tickToContextMap.set(tickable.getStave(), {}); + staveTickToContextMap = tickToContextMap.get(tickable.getStave()); + } + if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) { + const newContext = new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext(); + contexts.push(newContext); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + staveTickToContextMap[integerTicks] = newContext; + } + // Add this tickable to the TickContext. + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + tickable.addToModifierContext(staveTickToContextMap[integerTicks]); + ticksUsed.add(tickable.getTicks()); + }); + }); + this.modifierContexts.push({ + map: tickToContextMap, + array: contexts, + resolutionMultiplier, + }); + } + /** + * Create a `TickContext` for each tick in `voices`. Also calculate the + * total number of ticks in voices. + */ + createTickContexts(voices) { + const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex); + const contexts = createContexts(voices, (tick) => new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext(tick), fn); + this.tickContexts = contexts; + const contextArray = this.tickContexts.array; + contextArray.forEach((context) => { + context.tContexts = contextArray; + }); + return contexts; + } + /** + * Get the AlignmentContexts of TickContexts that were created by createTickContexts. + * Returns undefined if createTickContexts has not yet been run. + */ + getTickContexts() { + return this.tickContexts; + } + /** + * This is the core formatter logic. Format voices and justify them + * to `justifyWidth` pixels. `renderingContext` is required to justify elements + * that can't retrieve widths without a canvas. This method sets the `x` positions + * of all the tickables/notes in the formatter. + */ + preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) { + // Initialize context maps. + const contexts = this.tickContexts; + if (!contexts) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoTickContexts', 'preFormat requires TickContexts'); + } + const { list: contextList, map: contextMap } = contexts; + // Reset loss history for evaluator. + this.lossHistory = []; + // If voices and a stave were provided, set the Stave for each voice + // and preFormat to apply Y values to the notes; + if (voicesParam && stave) { + voicesParam.forEach((voice) => voice.setStave(stave).preFormat()); + } + // Now distribute the ticks to each tick context, and assign them their + // own X positions. + let x = 0; + let shift = 0; + this.minTotalWidth = 0; + let totalTicks = 0; + // Pass 1: Give each note maximum width requested by context. + contextList.forEach((tick) => { + const context = contextMap[tick]; + // Make sure that all tickables in this context have calculated their + // space requirements. + context.preFormat(); + const width = context.getWidth(); + this.minTotalWidth += width; + const maxTicks = context.getMaxTicks().value(); + totalTicks += maxTicks; + const metrics = context.getMetrics(); + x = x + shift + metrics.totalLeftPx; + context.setX(x); + // Calculate shift for the next tick. + shift = width - metrics.totalLeftPx; + }); + // Use softmax based on all notes across all staves. (options.globalSoftmax) + const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions; + const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks)); + const expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(contextList.map(exp)); + this.minTotalWidth = x + shift; + this.hasMinTotalWidth = true; + // No justification needed. End formatting. + if (justifyWidth <= 0) + return this.evaluate(); + // Start justification. Subtract the right extra pixels of the final context because the formatter + // justifies based on the context's X position, which is the left-most part of the note head. + const firstContext = contextMap[contextList[0]]; + const lastContext = contextMap[contextList[contextList.length - 1]]; + // Calculate the "distance error" between the tick contexts. The expected distance is the spacing proportional to + // the softmax of the ticks. + function calculateIdealDistances(adjustedJustifyWidth) { + const distances = contextList.map((tick, i) => { + const context = contextMap[tick]; + const voices = context.getTickablesByVoice(); + let backTickable; + if (i > 0) { + const prevContext = contextMap[contextList[i - 1]]; + // Go through each tickable and search backwards for another tickable + // in the same voice. If found, use that duration (ticks) to calculate + // the expected distance. + for (let j = i - 1; j >= 0; j--) { + const backTick = contextMap[contextList[j]]; + const backVoices = backTick.getTickablesByVoice(); + // Look for matching voices between tick contexts. + const matchingVoices = []; + Object.keys(voices).forEach((v) => { + if (backVoices[v]) { + matchingVoices.push(v); + } + }); + if (matchingVoices.length > 0) { + // Found matching voices, get largest duration + let maxTicks = 0; + let maxNegativeShiftPx = Infinity; + let expectedDistance = 0; + matchingVoices.forEach((v) => { + const ticks = backVoices[v].getTicks().value(); + if (ticks > maxTicks) { + backTickable = backVoices[v]; + maxTicks = ticks; + } + // Calculate the limits of the shift based on modifiers, etc. + const thisTickable = voices[v]; + const insideLeftEdge = thisTickable.getX() - + (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx); + const backMetrics = backVoices[v].getMetrics(); + const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx; + // Don't allow shifting if notes in the same voice can collide + maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge); + }); + // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right + // so that two different tick contexts don't align across staves. + maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05)); + // Calculate the expected distance of the current context from the last matching tickable. The + // distance is scaled down by the softmax for the voice. + if (globalSoftmax) { + const t = totalTicks; + expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth; + } + else if (typeof backTickable !== 'undefined') { + expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth; + } + return { + expectedDistance, + maxNegativeShiftPx, + fromTickable: backTickable, + }; + } + } + } + return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 }; + }); + return distances; + } + function shiftToIdealDistances(idealDistances) { + // Distribute ticks to the contexts based on the calculated distance error. + const centerX = adjustedJustifyWidth / 2; + let spaceAccum = 0; + contextList.forEach((tick, index) => { + const context = contextMap[tick]; + if (index > 0) { + const contextX = context.getX(); + const ideal = idealDistances[index]; + const errorPx = (0,_util__WEBPACK_IMPORTED_MODULE_9__.defined)(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum); + let negativeShiftPx = 0; + if (errorPx > 0) { + spaceAccum += errorPx; + } + else if (errorPx < 0) { + negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx)); + spaceAccum += -negativeShiftPx; + } + context.setX(contextX + spaceAccum); + } + // Move center aligned tickables to middle + context.getCenterAlignedTickables().forEach((tickable) => { + tickable.setCenterXShift(centerX - context.getX()); + }); + }); + return lastContext.getX() - firstContext.getX(); + } + const adjustedJustifyWidth = justifyWidth - + lastContext.getMetrics().notePx - + lastContext.getMetrics().totalRightPx - + firstContext.getMetrics().totalLeftPx; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont(); + const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin'); + const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax'); + const leftPadding = musicFont.lookupMetric('stave.padding'); + let targetWidth = adjustedJustifyWidth; + const distances = calculateIdealDistances(targetWidth); + let actualWidth = shiftToIdealDistances(distances); + // Just one context. Done formatting. + if (contextList.length === 1) + return 0; + const calcMinDistance = (targetWidth, distances) => { + let mdCalc = targetWidth / 2; + if (distances.length > 1) { + for (let di = 1; di < distances.length; ++di) { + mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc); + } + } + return mdCalc; + }; + const minDistance = calcMinDistance(targetWidth, distances); + // right justify to either the configured padding, or the min distance between notes, whichever is greatest. + // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break + // existing visual regression tests. + const paddingMaxCalc = (curTargetWidth) => { + let lastTickablePadding = 0; + const lastTickable = lastContext && lastContext.getMaxTickable(); + if (lastTickable) { + const voice = lastTickable.getVoice(); + // If the number of actual ticks in the measure <> configured ticks, right-justify + // because the softmax won't yield the correct value + if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) { + return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding; + } + const tickWidth = lastTickable.getWidth(); + lastTickablePadding = + voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding); + } + return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding; + }; + let paddingMax = paddingMaxCalc(targetWidth); + let paddingMin = paddingMax - (configMaxPadding - configMinPadding); + const maxX = adjustedJustifyWidth - paddingMin; + let iterations = maxIterations; + // Adjust justification width until the right margin is as close as possible to the calculated padding, + // without going over + while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) { + targetWidth -= actualWidth - maxX; + paddingMax = paddingMaxCalc(targetWidth); + paddingMin = paddingMax - (configMaxPadding - configMinPadding); + actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth)); + iterations--; + } + this.justifyWidth = justifyWidth; + return this.evaluate(); + } + /** Calculate the total cost of this formatting decision. */ + evaluate() { + const contexts = this.tickContexts; + const justifyWidth = this.justifyWidth; + // Calculate available slack per tick context. This works out how much freedom + // to move a context has in either direction, without affecting other notes. + this.contextGaps = { total: 0, gaps: [] }; + contexts.list.forEach((tick, index) => { + if (index === 0) + return; + const prevTick = contexts.list[index - 1]; + const prevContext = contexts.map[prevTick]; + const context = contexts.map[tick]; + const prevMetrics = prevContext.getMetrics(); + const currMetrics = context.getMetrics(); + // Calculate X position of right edge of previous note + const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx; + // Calculate X position of left edge of current note + const insideLeftEdge = context.getX() - currMetrics.totalLeftPx; + const gap = insideLeftEdge - insideRightEdge; + this.contextGaps.total += gap; + this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge }); + // Tell the tick contexts how much they can reposition themselves. + context.getFormatterMetrics().freedom.left = gap; + prevContext.getFormatterMetrics().freedom.right = gap; + }); + // Calculate mean distance in each voice for each duration type, then calculate + // how far each note is from the mean. + this.durationStats = {}; + const durationStats = this.durationStats; + function updateStats(duration, space) { + const stats = durationStats[duration]; + if (stats === undefined) { + durationStats[duration] = { mean: space, count: 1 }; + } + else { + stats.count += 1; + stats.mean = (stats.mean + space) / 2; + } + } + this.voices.forEach((voice) => { + voice.getTickables().forEach((note, i, notes) => { + const duration = note.getTicks().clone().simplify().toString(); + const metrics = note.getMetrics(); + const formatterMetrics = note.getFormatterMetrics(); + const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx; + let space = 0; + if (i < notes.length - 1) { + const rightNote = notes[i + 1]; + const rightMetrics = rightNote.getMetrics(); + const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx; + space = rightNoteEdge - leftNoteEdge; + formatterMetrics.space.used = rightNote.getX() - note.getX(); + rightNote.getFormatterMetrics().freedom.left = space; + } + else { + space = justifyWidth - leftNoteEdge; + formatterMetrics.space.used = justifyWidth - note.getX(); + } + formatterMetrics.freedom.right = space; + updateStats(duration, formatterMetrics.space.used); + }); + }); + // Calculate how much each note deviates from the mean. Loss function is square + // root of the sum of squared deviations. + let totalDeviation = 0; + this.voices.forEach((voice) => { + voice.getTickables().forEach((note) => { + const duration = note.getTicks().clone().simplify().toString(); + const metrics = note.getFormatterMetrics(); + metrics.space.mean = durationStats[duration].mean; + metrics.duration = duration; + metrics.iterations += 1; + metrics.space.deviation = metrics.space.used - metrics.space.mean; + totalDeviation += Math.pow(metrics.space.deviation, 2); + }); + }); + this.totalCost = Math.sqrt(totalDeviation); + this.lossHistory.push(this.totalCost); + return this.totalCost; + } + /** + * Run a single iteration of rejustification. At a high level, this method calculates + * the overall "loss" (or cost) of this layout, and repositions tickcontexts in an + * attempt to reduce the cost. You can call this method multiple times until it finds + * and oscillates around a global minimum. + * @param options[alpha] the "learning rate" for the formatter. It determines how much of a shift + * the formatter should make based on its cost function. + */ + tune(options) { + var _a; + const contexts = this.tickContexts; + if (!contexts) { + return 0; + } + const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5; + // Move `current` tickcontext by `shift` pixels, and adjust the freedom + // on adjacent tickcontexts. + function move(current, shift, prev, next) { + current.setX(current.getX() + shift); + current.getFormatterMetrics().freedom.left += shift; + current.getFormatterMetrics().freedom.right -= shift; + if (prev) + prev.getFormatterMetrics().freedom.right += shift; + if (next) + next.getFormatterMetrics().freedom.left -= shift; + } + let shift = 0; + this.totalShift = 0; + contexts.list.forEach((tick, index, list) => { + const context = contexts.map[tick]; + const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined; + const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined; + move(context, shift, prevContext, nextContext); + const cost = -(0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation)); + if (cost > 0) { + shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost)); + } + else if (cost < 0) { + if (nextContext) { + shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost)); + } + else { + shift = 0; + } + } + shift *= alpha; + this.totalShift += shift; + }); + return this.evaluate(); + } + /** + * This is the top-level call for all formatting logic completed + * after `x` *and* `y` values have been computed for the notes + * in the voices. + */ + postFormat() { + this.modifierContexts.forEach((modifierContexts) => { + modifierContexts.array.forEach((mc) => mc.postFormat()); + }); + this.tickContexts.list.forEach((tick) => { + this.tickContexts.map[tick].postFormat(); + }); + return this; + } + /** + * Take all `voices` and create `ModifierContext`s out of them. This tells + * the formatters that the voices belong on a single stave. + */ + joinVoices(voices) { + this.createModifierContexts(voices); + this.hasMinTotalWidth = false; + return this; + } + /** + * Align rests in voices, justify the contexts, and position the notes + * so voices are aligned and ready to render onto the stave. This method + * mutates the `x` positions of all tickables in `voices`. + * + * Voices are full justified to fit in `justifyWidth` pixels. + * + * Set `options.context` to the rendering context. Set `options.align_rests` + * to true to enable rest alignment. + */ + format(voices, justifyWidth, options) { + const opts = Object.assign({ align_rests: false }, options); + this.voices = voices; + const softmaxFactor = this.formatterOptions.softmaxFactor; + if (softmaxFactor) { + this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor)); + } + this.alignRests(voices, opts.align_rests); + this.createTickContexts(voices); + this.preFormat(justifyWidth, opts.context, voices, opts.stave); + // Only postFormat if a stave was supplied for y value formatting + if (opts.stave) + this.postFormat(); + return this; + } + // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`. + formatToStave(voices, stave, optionsParam) { + const options = Object.assign({ context: stave.getContext() }, optionsParam); + // eslint-disable-next-line + const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + L('Formatting voices to width: ', justifyWidth); + return this.format(voices, justifyWidth, options); + } + getTickContext(tick) { + var _a; + return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick]; + } +} +// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`. +Formatter.DEBUG = false; + + + +/***/ }), + +/***/ "./src/fraction.ts": +/*!*************************!*\ + !*** ./src/fraction.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Fraction": () => (/* binding */ Fraction) +/* harmony export */ }); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Author: Joshua Koo / @zz85 +// Author: @incompleteopus + + +/** Fraction represents a rational number. */ +class Fraction { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.Fraction; + } + /** + * GCD: Greatest common divisor using the Euclidean algorithm. + * Note: GCD(0, 0) => 0 and GCD(0, n) => n. + */ + static GCD(a, b) { + if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`); + } + let t; + while (b !== 0) { + t = b; + b = a % b; + a = t; + } + return a; + } + /** LCM: Lowest common multiple. */ + static LCM(a, b) { + return (a * b) / Fraction.GCD(a, b); + } + /** Lowest common multiple for more than two numbers. */ + static LCMM(args) { + if (args.length === 0) { + return 0; + } + else if (args.length === 1) { + return args[0]; + } + else if (args.length === 2) { + return Fraction.LCM(args[0], args[1]); + } + else { + // args.shift() removes the first number. + // LCM the first number with the rest of the numbers. + return Fraction.LCM(args.shift(), Fraction.LCMM(args)); + } + } + /** Set the numerator and denominator. */ + constructor(numerator, denominator) { + this.numerator = 1; + this.denominator = 1; + this.set(numerator, denominator); + } + /** Set the numerator and denominator. */ + set(numerator = 1, denominator = 1) { + this.numerator = numerator; + this.denominator = denominator; + return this; + } + /** Return the value of the fraction. */ + value() { + return this.numerator / this.denominator; + } + /** Simplify numerator and denominator using GCD. */ + simplify() { + let u = this.numerator; + let d = this.denominator; + const gcd = Fraction.GCD(u, d); + u /= gcd; + d /= gcd; + if (d < 0) { + d = -d; + u = -u; + } + return this.set(u, d); + } + /** Add value of another fraction. */ + add(param1 = 0, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + const lcm = Fraction.LCM(this.denominator, otherDenominator); + const a = lcm / this.denominator; + const b = lcm / otherDenominator; + const u = this.numerator * a + otherNumerator * b; + return this.set(u, lcm); + } + /** Substract value of another fraction. */ + subtract(param1 = 0, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + const lcm = Fraction.LCM(this.denominator, otherDenominator); + const a = lcm / this.denominator; + const b = lcm / otherDenominator; + const u = this.numerator * a - otherNumerator * b; + return this.set(u, lcm); + } + /** Multiply by value of another fraction. */ + multiply(param1 = 1, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator); + } + /** Divide by value of another Fraction. */ + divide(param1 = 1, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator); + } + /** Simplify both sides and check if they are equal. */ + equals(compare) { + const a = Fraction.__staticFractionA.copy(compare).simplify(); + const b = Fraction.__staticFractionB.copy(this).simplify(); + return a.numerator === b.numerator && a.denominator === b.denominator; + } + /** Greater than operator. */ + greaterThan(compare) { + const a = Fraction.__staticFractionB.copy(this); + a.subtract(compare); + return a.numerator > 0; + } + /** Greater than or equals operator. */ + greaterThanEquals(compare) { + const a = Fraction.__staticFractionB.copy(this); + a.subtract(compare); + return a.numerator >= 0; + } + /** Less than operator. */ + lessThan(compare) { + return !this.greaterThanEquals(compare); + } + /** Less than or equals operator. */ + lessThanEquals(compare) { + return !this.greaterThan(compare); + } + /** Return a new copy with current values. */ + clone() { + return new Fraction(this.numerator, this.denominator); + } + /** Copy value of another fraction. */ + copy(other) { + if (typeof other === 'number') { + return this.set(other, 1); + } + else { + return this.set(other.numerator, other.denominator); + } + } + /** Return the integer component (eg. 5/2 => 2). */ + quotient() { + return Math.floor(this.numerator / this.denominator); + } + /** Return the remainder component (eg. 5/2 => 1). */ + remainder() { + return this.numerator % this.denominator; + } + /** Calculate absolute value. */ + makeAbs() { + this.denominator = Math.abs(this.denominator); + this.numerator = Math.abs(this.numerator); + return this; + } + /** Return a raw string representation (eg. "5/2"). */ + toString() { + return `${this.numerator}/${this.denominator}`; + } + /** Return a simplified string respresentation. */ + toSimplifiedString() { + return Fraction.__staticFractionTmp.copy(this).simplify().toString(); + } + /** Return string representation in mixed form. */ + toMixedString() { + let s = ''; + const q = this.quotient(); + const f = Fraction.__staticFractionTmp.copy(this); + if (q < 0) { + f.makeAbs(); + } + if (q !== 0) { + s += q; + if (f.numerator !== 0) { + s += ` ${f.toSimplifiedString()}`; + } + } + else if (f.numerator === 0) { + s = '0'; + } + else { + s = f.toSimplifiedString(); + } + return s; + } + /** Parse a fraction string. */ + parse(str) { + const i = str.split('/'); + const n = parseInt(i[0], 10); + const d = i[1] ? parseInt(i[1], 10) : 1; + return this.set(n, d); + } +} +// Cached objects for comparisons. +Fraction.__staticFractionA = new Fraction(); +Fraction.__staticFractionB = new Fraction(); +Fraction.__staticFractionTmp = new Fraction(); + +/** Helper function to extract the numerator and denominator from another fraction. */ +function getNumeratorAndDenominator(n, d = 1) { + if (typeof n === 'number') { + // Both params are numbers, so we return them as [numerator, denominator]. + return [n, d]; + } + else { + // First param is a Fraction object. We ignore the second param. + return [n.numerator, n.denominator]; + } +} + + +/***/ }), + +/***/ "./src/frethandfinger.ts": +/*!*******************************!*\ + !*** ./src/frethandfinger.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "FretHandFinger": () => (/* binding */ FretHandFinger) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// VexFlow - Music Engraving for HTML5 +// Copyright Mohit Muthanna 2010 +// Author Larry Kuhns 2013 +// Class to draws string numbers into the notation. + + + + + + +class FretHandFinger extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.FretHandFinger; + } + // Arrange fingerings inside a ModifierContext. + static format(nums, state) { + const { left_shift, right_shift } = state; + const num_spacing = 1; + if (!nums || nums.length === 0) + return false; + const nums_list = []; + let prev_note = null; + let shiftLeft = 0; + let shiftRight = 0; + for (let i = 0; i < nums.length; ++i) { + const num = nums[i]; + const note = num.getNote(); + const pos = num.getPosition(); + const index = num.checkIndex(); + const props = note.getKeyProps()[index]; + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_3__.TextFormatter.create(num.textFont); + const textHeight = textFormatter.maxHeight; + if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) { + state.top_text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5; + } + if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) { + state.text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5; + } + if (note !== prev_note) { + for (let n = 0; n < note.keys.length; ++n) { + if (left_shift === 0) { + shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft); + } + if (right_shift === 0) { + shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight); + } + } + prev_note = note; + } + nums_list.push({ + note, + num, + pos, + line: props.line, + shiftL: shiftLeft, + shiftR: shiftRight, + }); + } + // Sort fingernumbers by line number. + nums_list.sort((a, b) => b.line - a.line); + let numShiftL = 0; + let numShiftR = 0; + let xWidthL = 0; + let xWidthR = 0; + let lastLine = null; + let lastNote = null; + for (let i = 0; i < nums_list.length; ++i) { + let num_shift = 0; + const { note, pos, num, line, shiftL, shiftR } = nums_list[i]; + // Reset the position of the string number every line. + if (line !== lastLine || note !== lastNote) { + numShiftL = left_shift + shiftL; + numShiftR = right_shift + shiftR; + } + const numWidth = num.getWidth() + num_spacing; + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { + num.setXShift(left_shift + numShiftL); + num_shift = left_shift + numWidth; // spacing + xWidthL = num_shift > xWidthL ? num_shift : xWidthL; + } + else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) { + num.setXShift(numShiftR); + num_shift = shiftRight + numWidth; // spacing + xWidthR = num_shift > xWidthR ? num_shift : xWidthR; + } + lastLine = line; + lastNote = note; + } + state.left_shift += xWidthL; + state.right_shift += xWidthR; + return true; + } + static easyScoreHook({ fingerings } = {}, note, builder) { + fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => { + const split = fingeringString.trim().split('.'); + const params = { number: split[0] }; + if (split[1]) + params.position = split[1]; + return builder.getFactory().Fingering(params); + }).map((fingering, index) => note.addModifier(fingering, index)); + } + constructor(finger) { + super(); + this.finger = finger; + this.width = 7; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; // Default position above stem or note head + this.x_shift = 0; + this.y_shift = 0; + this.x_offset = 0; // Horizontal offset from default + this.y_offset = 0; // Vertical offset from default + this.resetFont(); + } + setFretHandFinger(finger) { + this.finger = finger; + return this; + } + getFretHandFinger() { + return this.finger; + } + setOffsetX(x) { + this.x_offset = x; + return this; + } + setOffsetY(y) { + this.y_offset = y; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index); + let dot_x = start.x + this.x_shift + this.x_offset; + let dot_y = start.y + this.y_shift + this.y_offset + 5; + switch (this.position) { + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE: + dot_x -= 4; + dot_y -= 12; + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW: + dot_x -= 2; + dot_y += 10; + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT: + dot_x -= this.width; + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT: + dot_x += 1; + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} does not exist`); + } + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText('' + this.finger, dot_x, dot_y); + ctx.restore(); + } +} +FretHandFinger.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: 9, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/ghostnote.ts": +/*!**************************!*\ + !*** ./src/ghostnote.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GhostNote": () => (/* binding */ GhostNote) +/* harmony export */ }); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description + + + +const ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.'; +class GhostNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_0__.StemmableNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GhostNote; + } + constructor(parameter) { + if (!parameter) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG); + } + let noteStruct; + if (typeof parameter === 'string') { + // Preserve backwards-compatibility + noteStruct = { duration: parameter }; + } + else if (typeof parameter === 'object') { + noteStruct = parameter; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG); + } + super(noteStruct); + // Note properties + this.setWidth(0); + } + /** + * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score. + */ + isRest() { + return true; + } + setStave(stave) { + super.setStave(stave); + return this; + } + /* Overridden to ignore */ + // eslint-disable-next-line + addToModifierContext(mc) { + // DO NOTHING. + return this; + } + preFormat() { + this.preFormatted = true; + return this; + } + draw() { + // Draw Annotations + this.setRendered(); + for (let i = 0; i < this.modifiers.length; ++i) { + const modifier = this.modifiers[i]; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isAnnotation)(modifier)) { + modifier.setContext(this.getContext()); + modifier.drawWithStyle(); + } + } + } +} + + +/***/ }), + +/***/ "./src/glyph.ts": +/*!**********************!*\ + !*** ./src/glyph.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Glyph": () => (/* binding */ Glyph), +/* harmony export */ "OutlineCode": () => (/* binding */ OutlineCode) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +var OutlineCode; +(function (OutlineCode) { + OutlineCode[OutlineCode["MOVE"] = 0] = "MOVE"; + OutlineCode[OutlineCode["LINE"] = 1] = "LINE"; + OutlineCode[OutlineCode["QUADRATIC"] = 2] = "QUADRATIC"; + OutlineCode[OutlineCode["BEZIER"] = 3] = "BEZIER"; +})(OutlineCode || (OutlineCode = {})); +class GlyphCacheEntry { + constructor(fontStack, code, category) { + this.point = -1; + this.metrics = Glyph.loadMetrics(fontStack, code, category); + this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift); + if (category) { + this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1); + } + } +} +class GlyphCache { + constructor() { + this.cache = new Map(); + } + lookup(code, category) { + let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY); + if (entries === undefined) { + entries = {}; + this.cache.set(Glyph.CURRENT_CACHE_KEY, entries); + } + const key = category ? `${code}%${category}` : code; + let entry = entries[key]; + if (entry === undefined) { + entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category); + entries[key] = entry; + } + return entry; + } +} +class GlyphOutline { + constructor(outline, originX, originY, scale) { + this.outline = outline; + this.originX = originX; + this.originY = originY; + this.scale = scale; + this.i = 0; + this.precision = 1; + // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale. + this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RENDER_PRECISION_PLACES); + } + done() { + return this.i >= this.outline.length; + } + next() { + return Math.round((this.outline[this.i++] * this.precision) / this.precision); + } + nextX() { + return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision; + } + nextY() { + return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision; + } + static parse(str) { + const result = []; + const parts = str.split(' '); + let i = 0; + while (i < parts.length) { + switch (parts[i++]) { + case 'm': + result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++])); + break; + case 'l': + result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++])); + break; + case 'q': + result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++])); + break; + case 'b': + result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++])); + break; + } + } + return result; + } +} +class Glyph extends _element__WEBPACK_IMPORTED_MODULE_2__.Element { + ////////////////////////////////////////////////////////////////////////////////////////////////// + // STATIC MEMBERS + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Glyph; + } + /** + * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails, + * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue. + * + * @param font + * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc. + * @param code + * @param key + * @param defaultValue + */ + static lookupFontMetric(font, category, code, key, defaultValue) { + let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined); + if (value === undefined) { + // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time). + value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue); + } + return value; + } + static lookupGlyph(fontStack, code) { + (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(fontStack, 'BadFontStack', 'Font stack is misconfigured'); + let glyph; + let font; + for (let i = 0; i < fontStack.length; i++) { + font = fontStack[i]; + glyph = font.getGlyphs()[code]; + if (glyph) + return { glyph, font }; + } + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`); + } + static loadMetrics(fontStack, code, category) { + const { glyph, font } = Glyph.lookupGlyph(fontStack, code); + if (!glyph.o) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`); + let x_shift = 0; + let y_shift = 0; + let scale = 1; + if (category && font) { + x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0); + y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0); + scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1); + } + const x_min = glyph.x_min; + const x_max = glyph.x_max; + const ha = glyph.ha; + if (!glyph.cached_outline) { + glyph.cached_outline = GlyphOutline.parse(glyph.o); + } + return { + x_min, + x_max, + x_shift, + y_shift, + scale, + ha, + outline: glyph.cached_outline, + font, + width: x_max - x_min, + height: ha, + }; + } + /** + * Renders glyphs from the default font stack. + * + * @param ctx Canvas or SVG context + * @param x_pos x coordinate + * @param y_pos y coordinate + * @param point the point size of the font + * @param code the glyph code in font.getGlyphs() + * @param options + * @returns + */ + static renderGlyph(ctx, x_pos, y_pos, point, code, options) { + var _a; + const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category); + const metrics = data.metrics; + if (data.point != -1) { + point = data.point; + } + const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1; + const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale; + Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale); + return metrics; + } + static renderOutline(ctx, outline, scale, x_pos, y_pos) { + const go = new GlyphOutline(outline, x_pos, y_pos, scale); + ctx.beginPath(); + let x, y; + while (!go.done()) { + switch (go.next()) { + case OutlineCode.MOVE: + ctx.moveTo(go.nextX(), go.nextY()); + break; + case OutlineCode.LINE: + ctx.lineTo(go.nextX(), go.nextY()); + break; + case OutlineCode.QUADRATIC: + x = go.nextX(); + y = go.nextY(); + ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y); + break; + case OutlineCode.BEZIER: + x = go.nextX(); + y = go.nextY(); + ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y); + break; + } + } + ctx.fill(); + } + static getOutlineBoundingBox(outline, scale, x_pos, y_pos) { + const go = new GlyphOutline(outline, x_pos, y_pos, scale); + const bboxComp = new _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxComputation(); + // (penX, penY) hold the pen position: the start of each stroke. + let penX = x_pos; + let penY = y_pos; + let x, y; + while (!go.done()) { + switch (go.next()) { + case OutlineCode.MOVE: + // Note that we don't add any points to the bounding box until a srroke is actually drawn. + penX = go.nextX(); + penY = go.nextY(); + break; + case OutlineCode.LINE: + bboxComp.addPoint(penX, penY); + penX = go.nextX(); + penY = go.nextY(); + bboxComp.addPoint(penX, penY); + break; + case OutlineCode.QUADRATIC: + x = go.nextX(); + y = go.nextY(); + bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y); + penX = x; + penY = y; + break; + case OutlineCode.BEZIER: + x = go.nextX(); + y = go.nextY(); + bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y); + penX = x; + penY = y; + break; + } + } + return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height()); + } + static getWidth(code, point, category) { + const data = Glyph.cache.lookup(code, category); + if (data.point != -1) { + point = data.point; + } + const scale = (point * 72) / (data.metrics.font.getResolution() * 100); + return data.bbox.getW() * scale; + } + /** + * @param code + * @param point + * @param options + */ + constructor(code, point, options) { + super(); + ////////////////////////////////////////////////////////////////////////////////////////////////// + // INSTANCE MEMBERS + this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(0, 0, 0, 0); + this.topGlyphs = []; + this.botGlyphs = []; + this.options = {}; + this.scale = 1; + this.code = code; + this.point = point; + this.originShift = { x: 0, y: 0 }; + this.x_shift = 0; + this.y_shift = 0; + if (options) { + this.setOptions(options); + } + else { + this.reset(); + } + } + // eslint-disable-next-line + draw(...args) { + // DO NOTHING. + } + getCode() { + return this.code; + } + // eslint-disable-next-line + setOptions(options) { + this.options = Object.assign(Object.assign({}, this.options), options); + this.reset(); + } + setPoint(point) { + this.point = point; + return this; + } + setStave(stave) { + this.stave = stave; + return this; + } + getXShift() { + return this.x_shift; + } + setXShift(x_shift) { + this.x_shift = x_shift; + return this; + } + getYshift() { + return this.y_shift; + } + setYShift(y_shift) { + this.y_shift = y_shift; + return this; + } + reset() { + const data = Glyph.cache.lookup(this.code, this.options.category); + this.metrics = data.metrics; + // Override point from metrics file + if (data.point != -1) { + this.point = data.point; + } + this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100); + this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale); + } + checkMetrics() { + return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`); + } + getMetrics() { + const metrics = this.checkMetrics(); + const metricsScale = metrics.scale; + return { + x_min: metrics.x_min * this.scale * metricsScale, + x_max: metrics.x_max * this.scale * metricsScale, + width: this.bbox.getW(), + height: this.bbox.getH(), + scale: this.scale * metricsScale, + x_shift: metrics.x_shift, + y_shift: metrics.y_shift, + outline: metrics.outline, + font: metrics.font, + ha: metrics.ha, + }; + } + setOriginX(x) { + const { bbox } = this; + const originX = Math.abs(bbox.getX() / bbox.getW()); + const xShift = (x - originX) * bbox.getW(); + this.originShift.x = -xShift; + } + setOriginY(y) { + const { bbox } = this; + const originY = Math.abs(bbox.getY() / bbox.getH()); + const yShift = (y - originY) * bbox.getH(); + this.originShift.y = -yShift; + } + setOrigin(x, y) { + this.setOriginX(x); + this.setOriginY(y); + } + render(ctx, x, y) { + const metrics = this.checkMetrics(); + const outline = metrics.outline; + const scale = this.scale * metrics.scale; + this.setRendered(); + this.applyStyle(ctx); + const xPos = x + this.originShift.x + metrics.x_shift; + const yPos = y + this.originShift.y + metrics.y_shift; + Glyph.renderOutline(ctx, outline, scale, xPos, yPos); + this.restoreStyle(ctx); + } + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + renderToStave(x) { + const context = this.checkContext(); + const metrics = this.checkMetrics(); + const stave = this.checkStave(); + const outline = metrics.outline; + const scale = this.scale * metrics.scale; + this.setRendered(); + this.applyStyle(); + const xPos = x + this.x_shift + metrics.x_shift; + const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift; + Glyph.renderOutline(context, outline, scale, xPos, yPos); + this.restoreStyle(); + } +} +Glyph.cache = new GlyphCache(); +// The current cache key for GlyphCache above. +// Computed when Flow.setMusicFont(...) is called. +// It is set to a comma separated list of font names. +Glyph.CURRENT_CACHE_KEY = ''; +// Used by the GlyphCache above. +// Set when Flow.setMusicFont(...) is called. +Glyph.MUSIC_FONT_STACK = []; + + + +/***/ }), + +/***/ "./src/glyphnote.ts": +/*!**************************!*\ + !*** ./src/glyphnote.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GlyphNote": () => (/* binding */ GlyphNote) +/* harmony export */ }); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// Any glyph that is set to appear on a Stave and take up musical time and graphical space. + + +class GlyphNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GlyphNote; + } + constructor(glyph, noteStruct, options) { + super(noteStruct); + this.options = Object.assign({ ignoreTicks: false, line: 2 }, options); + // Note properties + this.ignore_ticks = this.options.ignoreTicks; + this.setGlyph(glyph); + } + setGlyph(glyph) { + this.glyph = glyph; + this.setWidth(this.glyph.getMetrics().width); + return this; + } + getBoundingBox() { + return this.glyph.getBoundingBox(); + } + preFormat() { + if (!this.preFormatted && this.modifierContext) { + this.modifierContext.preFormat(); + } + this.preFormatted = true; + return this; + } + drawModifiers() { + const ctx = this.checkContext(); + for (let i = 0; i < this.modifiers.length; i++) { + const modifier = this.modifiers[i]; + modifier.setContext(ctx); + modifier.drawWithStyle(); + } + } + /** Get the glyph width. */ + getGlyphWidth() { + return this.glyph.getMetrics().width; + } + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('glyphNote', this.getAttribute('id')); + // Context is set when setStave is called on Note + const glyph = this.glyph; + if (!glyph.getContext()) { + glyph.setContext(ctx); + } + glyph.setStave(stave); + glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs()); + const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX(); + glyph.renderToStave(x); + this.drawModifiers(); + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} + + +/***/ }), + +/***/ "./src/gracenote.ts": +/*!**************************!*\ + !*** ./src/gracenote.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GraceNote": () => (/* binding */ GraceNote) +/* harmony export */ }); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. + + + + + +class GraceNote extends _stavenote__WEBPACK_IMPORTED_MODULE_0__.StaveNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.GraceNote; + } + static get LEDGER_LINE_OFFSET() { + return 2; + } + static get SCALE() { + return 0.66; + } + constructor(noteStruct) { + super(Object.assign({ glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct)); + this.slash = noteStruct.slash || false; + this.slur = true; + this.buildNoteHeads(); + this.width = 3; + } + getStemExtension() { + if (this.stem_extension_override) { + return this.stem_extension_override; + } + const glyphProps = this.getGlyphProps(); + if (glyphProps) { + let ret = super.getStemExtension(); + if (glyphProps.stem) { + const staveNoteScale = this.getStaveNoteScale(); + ret = (_stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT + ret) * staveNoteScale - _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT; + } + return ret; + } + return 0; + } + getStaveNoteScale() { + return this.render_options.glyph_font_scale / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE; + } + draw() { + super.draw(); + this.setRendered(); + const stem = this.stem; + if (this.slash && stem) { + const staveNoteScale = this.getStaveNoteScale(); + // some magic numbers are based on the staveNoteScale 0.66. + const offsetScale = staveNoteScale / 0.66; + let slashBBox = undefined; + const beam = this.beam; + if (beam) { + // FIXME: should render slash after beam? + if (!beam.postFormatted) { + beam.postFormat(); + } + slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, { + stem: 6 * offsetScale, + beam: 5 * offsetScale, + }); + } + else { + const stem_direction = this.getStemDirection(); + const noteHeadBounds = this.getNoteHeadBounds(); + const noteStemHeight = stem.getHeight(); + let x = this.getAbsoluteX(); + let y = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN + ? noteHeadBounds.y_top - noteStemHeight + : noteHeadBounds.y_bottom - noteStemHeight; + const defaultStemExtention = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension; + let defaultOffsetY = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STEM_HEIGHT; + defaultOffsetY -= defaultOffsetY / 2.8; + defaultOffsetY += defaultStemExtention; + y += defaultOffsetY * staveNoteScale * stem_direction; + const offsets = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.UP + ? { + x1: 1, + y1: 0, + x2: 13, + y2: -9, + } + : { + x1: -4, + y1: 1, + x2: 13, + y2: 9, + }; + x += offsets.x1 * offsetScale; + y += offsets.y1 * offsetScale; + slashBBox = { + x1: x, + y1: y, + x2: x + offsets.x2 * offsetScale, + y2: y + offsets.y2 * offsetScale, + }; + } + // FIXME: avoid staff lines, ledger lines or others. + const ctx = this.checkContext(); + ctx.save(); + ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value. + ctx.beginPath(); + ctx.moveTo(slashBBox.x1, slashBBox.y1); + ctx.lineTo(slashBBox.x2, slashBBox.y2); + ctx.closePath(); + ctx.stroke(); + ctx.restore(); + } + } + calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) { + const beam = this.beam; + if (!beam) + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoBeam', "Can't calculate without a beam."); + const beam_slope = beam.slope; + const isBeamEndNote = beam.notes[beam.notes.length - 1] === this; + const scaleX = isBeamEndNote ? -1 : 1; + const beam_angle = Math.atan(beam_slope * scaleX); + // slash line intersecting point on beam. + const iPointOnBeam = { + dx: Math.cos(beam_angle) * slashBeamOffset, + dy: Math.sin(beam_angle) * slashBeamOffset, + }; + slashStemOffset *= this.getStemDirection(); + const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx); + const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX; + const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem; + const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX; + const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam; + const stemX = this.getStemX(); + const stem0X = beam.notes[0].getStemX(); + const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope; + const ret = { + x1: stemX - protrusion_stem_dx, + y1: stemY + slashStemOffset - protrusion_stem_dy, + x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx, + y2: stemY + iPointOnBeam.dy + protrusion_beam_dy, + }; + return ret; + } +} + + +/***/ }), + +/***/ "./src/gracenotegroup.ts": +/*!*******************************!*\ + !*** ./src/gracenotegroup.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GraceNoteGroup": () => (/* binding */ GraceNoteGroup) +/* harmony export */ }); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// This file implements `GraceNoteGroup` which is used to format and +// render grace notes. + + + + + + + + + + +// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (GraceNoteGroup.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_8__.log)('Vex.Flow.GraceNoteGroup', args); +} +/** GraceNoteGroup is used to format and render grace notes. */ +class GraceNoteGroup extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_7__.Category.GraceNoteGroup; + } + /** Arranges groups inside a `ModifierContext`. */ + static format(gracenote_groups, state) { + const group_spacing_stave = 4; + const group_spacing_tab = 0; + if (!gracenote_groups || gracenote_groups.length === 0) + return false; + const group_list = []; + let prev_note = null; + let shiftL = 0; + for (let i = 0; i < gracenote_groups.length; ++i) { + const gracenote_group = gracenote_groups[i]; + const note = gracenote_group.getNote(); + const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note); + const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab; + if (is_stavenote && note !== prev_note) { + // Iterate through all notes to get the displaced pixels + for (let n = 0; n < note.keys.length; ++n) { + shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL); + } + prev_note = note; + } + group_list.push({ shift: shiftL, gracenote_group, spacing }); + } + // If first note left shift in case it is displaced + let group_shift = group_list[0].shift; + let formatWidth; + for (let i = 0; i < group_list.length; ++i) { + const gracenote_group = group_list[i].gracenote_group; + gracenote_group.preFormat(); + formatWidth = gracenote_group.getWidth() + group_list[i].spacing; + group_shift = Math.max(formatWidth, group_shift); + } + for (let i = 0; i < group_list.length; ++i) { + const gracenote_group = group_list[i].gracenote_group; + formatWidth = gracenote_group.getWidth() + group_list[i].spacing; + gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding); + } + state.left_shift += group_shift; + return true; + } + //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */ + constructor(grace_notes, show_slur) { + super(); + this.preFormatted = false; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT; + this.grace_notes = grace_notes; + this.width = 0; + this.show_slur = show_slur; + this.slur = undefined; + this.voice = new _voice__WEBPACK_IMPORTED_MODULE_9__.Voice({ + num_beats: 4, + beat_value: 4, + resolution: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.RESOLUTION, + }).setStrict(false); + this.render_options = { + slur_y_shift: 0, + }; + this.beams = []; + this.voice.addTickables(this.grace_notes); + return this; + } + preFormat() { + if (this.preFormatted) + return; + if (!this.formatter) { + this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter(); + } + this.formatter.joinVoices([this.voice]).format([this.voice], 0, {}); + this.setWidth(this.formatter.getMinTotalWidth()); + this.preFormatted = true; + } + beamNotes(grace_notes) { + grace_notes = grace_notes || this.grace_notes; + if (grace_notes.length > 1) { + const beam = new _beam__WEBPACK_IMPORTED_MODULE_0__.Beam(grace_notes); + beam.render_options.beam_width = 3; + beam.render_options.partial_beam_length = 4; + this.beams.push(beam); + } + return this; + } + setWidth(width) { + this.width = width; + return this; + } + getWidth() { + return this.width + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding; + } + getGraceNotes() { + return this.grace_notes; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + L('Drawing grace note group for:', note); + this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function + // Draw grace notes. + this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw()); + // Draw beams. + this.beams.forEach((beam) => beam.setContext(ctx).draw()); + if (this.show_slur) { + // Create and draw slur. + const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note); + const TieClass = is_stavenote ? _stavetie__WEBPACK_IMPORTED_MODULE_4__.StaveTie : _tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie; + this.slur = new TieClass({ + last_note: this.grace_notes[0], + first_note: note, + first_indices: [0], + last_indices: [0], + }); + this.slur.render_options.cp2 = 12; + this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift; + this.slur.setContext(ctx).draw(); + } + } +} +GraceNoteGroup.DEBUG = false; + + + +/***/ }), + +/***/ "./src/gracetabnote.ts": +/*!*****************************!*\ + !*** ./src/gracetabnote.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GraceTabNote": () => (/* binding */ GraceTabNote) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// @author Balazs Forian-Szabo +// +// ## Description +// +// A basic implementation of grace notes +// to be rendered on a tab stave. +// +// See `tests/gracetabnote_tests.ts` for usage examples. + + + +class GraceTabNote extends _tabnote__WEBPACK_IMPORTED_MODULE_1__.TabNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.GraceTabNote; + } + constructor(noteStruct) { + super(noteStruct, false); + this.render_options = Object.assign(Object.assign({}, this.render_options), { + // vertical shift from stave line + y_shift: 0.3, + // grace glyph scale + scale: 0.6, + // grace tablature font + font: `7.5pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` }); + this.updateWidth(); + } +} + + +/***/ }), + +/***/ "./src/index.ts": +/*!**********************!*\ + !*** ./src/index.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Accidental": () => (/* reexport safe */ _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental), +/* harmony export */ "Annotation": () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation), +/* harmony export */ "AnnotationHorizontalJustify": () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify), +/* harmony export */ "AnnotationVerticalJustify": () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify), +/* harmony export */ "Articulation": () => (/* reexport safe */ _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation), +/* harmony export */ "BEAM_BOTH": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_BOTH), +/* harmony export */ "BEAM_LEFT": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_LEFT), +/* harmony export */ "BEAM_RIGHT": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_RIGHT), +/* harmony export */ "BarNote": () => (/* reexport safe */ _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote), +/* harmony export */ "Barline": () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.Barline), +/* harmony export */ "BarlineType": () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.BarlineType), +/* harmony export */ "Beam": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.Beam), +/* harmony export */ "Bend": () => (/* reexport safe */ _bend__WEBPACK_IMPORTED_MODULE_5__.Bend), +/* harmony export */ "BoundingBox": () => (/* reexport safe */ _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox), +/* harmony export */ "BoundingBoxComputation": () => (/* reexport safe */ _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation), +/* harmony export */ "Builder": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Builder), +/* harmony export */ "CanvasContext": () => (/* reexport safe */ _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext), +/* harmony export */ "Category": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.Category), +/* harmony export */ "ChordSymbol": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol), +/* harmony export */ "ChordSymbolHorizontalJustify": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify), +/* harmony export */ "ChordSymbolVerticalJustify": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify), +/* harmony export */ "Clef": () => (/* reexport safe */ _clef__WEBPACK_IMPORTED_MODULE_10__.Clef), +/* harmony export */ "ClefNote": () => (/* reexport safe */ _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote), +/* harmony export */ "Crescendo": () => (/* reexport safe */ _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo), +/* harmony export */ "Curve": () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.Curve), +/* harmony export */ "CurvePosition": () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition), +/* harmony export */ "Dot": () => (/* reexport safe */ _dot__WEBPACK_IMPORTED_MODULE_14__.Dot), +/* harmony export */ "EasyScore": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore), +/* harmony export */ "EasyScoreGrammar": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScoreGrammar), +/* harmony export */ "Element": () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_16__.Element), +/* harmony export */ "Factory": () => (/* reexport safe */ _factory__WEBPACK_IMPORTED_MODULE_17__.Factory), +/* harmony export */ "Flow": () => (/* reexport safe */ _flow__WEBPACK_IMPORTED_MODULE_18__.Flow), +/* harmony export */ "Font": () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.Font), +/* harmony export */ "FontStyle": () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontStyle), +/* harmony export */ "FontWeight": () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontWeight), +/* harmony export */ "Formatter": () => (/* reexport safe */ _formatter__WEBPACK_IMPORTED_MODULE_20__.Formatter), +/* harmony export */ "Fraction": () => (/* reexport safe */ _fraction__WEBPACK_IMPORTED_MODULE_21__.Fraction), +/* harmony export */ "FretHandFinger": () => (/* reexport safe */ _frethandfinger__WEBPACK_IMPORTED_MODULE_22__.FretHandFinger), +/* harmony export */ "GhostNote": () => (/* reexport safe */ _ghostnote__WEBPACK_IMPORTED_MODULE_23__.GhostNote), +/* harmony export */ "Glyph": () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.Glyph), +/* harmony export */ "GlyphNote": () => (/* reexport safe */ _glyphnote__WEBPACK_IMPORTED_MODULE_25__.GlyphNote), +/* harmony export */ "GraceNote": () => (/* reexport safe */ _gracenote__WEBPACK_IMPORTED_MODULE_26__.GraceNote), +/* harmony export */ "GraceNoteGroup": () => (/* reexport safe */ _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__.GraceNoteGroup), +/* harmony export */ "GraceTabNote": () => (/* reexport safe */ _gracetabnote__WEBPACK_IMPORTED_MODULE_28__.GraceTabNote), +/* harmony export */ "KeyManager": () => (/* reexport safe */ _keymanager__WEBPACK_IMPORTED_MODULE_29__.KeyManager), +/* harmony export */ "KeySigNote": () => (/* reexport safe */ _keysignote__WEBPACK_IMPORTED_MODULE_31__.KeySigNote), +/* harmony export */ "KeySignature": () => (/* reexport safe */ _keysignature__WEBPACK_IMPORTED_MODULE_30__.KeySignature), +/* harmony export */ "Modifier": () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.Modifier), +/* harmony export */ "ModifierContext": () => (/* reexport safe */ _modifiercontext__WEBPACK_IMPORTED_MODULE_33__.ModifierContext), +/* harmony export */ "ModifierPosition": () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.ModifierPosition), +/* harmony export */ "MultiMeasureRest": () => (/* reexport safe */ _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__.MultiMeasureRest), +/* harmony export */ "Music": () => (/* reexport safe */ _music__WEBPACK_IMPORTED_MODULE_35__.Music), +/* harmony export */ "Note": () => (/* reexport safe */ _note__WEBPACK_IMPORTED_MODULE_36__.Note), +/* harmony export */ "NoteHead": () => (/* reexport safe */ _notehead__WEBPACK_IMPORTED_MODULE_37__.NoteHead), +/* harmony export */ "NoteSubGroup": () => (/* reexport safe */ _notesubgroup__WEBPACK_IMPORTED_MODULE_38__.NoteSubGroup), +/* harmony export */ "Ornament": () => (/* reexport safe */ _ornament__WEBPACK_IMPORTED_MODULE_39__.Ornament), +/* harmony export */ "OutlineCode": () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.OutlineCode), +/* harmony export */ "Parenthesis": () => (/* reexport safe */ _parenthesis__WEBPACK_IMPORTED_MODULE_40__.Parenthesis), +/* harmony export */ "Parser": () => (/* reexport safe */ _parser__WEBPACK_IMPORTED_MODULE_41__.Parser), +/* harmony export */ "PedalMarking": () => (/* reexport safe */ _pedalmarking__WEBPACK_IMPORTED_MODULE_42__.PedalMarking), +/* harmony export */ "Piece": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Piece), +/* harmony export */ "Registry": () => (/* reexport safe */ _registry__WEBPACK_IMPORTED_MODULE_43__.Registry), +/* harmony export */ "RenderContext": () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.RenderContext), +/* harmony export */ "Renderer": () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.Renderer), +/* harmony export */ "RendererBackends": () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererBackends), +/* harmony export */ "RendererLineEndType": () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererLineEndType), +/* harmony export */ "RepeatNote": () => (/* reexport safe */ _repeatnote__WEBPACK_IMPORTED_MODULE_46__.RepeatNote), +/* harmony export */ "Repetition": () => (/* reexport safe */ _staverepetition__WEBPACK_IMPORTED_MODULE_54__.Repetition), +/* harmony export */ "RuntimeError": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.RuntimeError), +/* harmony export */ "SVGContext": () => (/* reexport safe */ _svgcontext__WEBPACK_IMPORTED_MODULE_64__.SVGContext), +/* harmony export */ "Stave": () => (/* reexport safe */ _stave__WEBPACK_IMPORTED_MODULE_47__.Stave), +/* harmony export */ "StaveConnector": () => (/* reexport safe */ _staveconnector__WEBPACK_IMPORTED_MODULE_49__.StaveConnector), +/* harmony export */ "StaveHairpin": () => (/* reexport safe */ _stavehairpin__WEBPACK_IMPORTED_MODULE_50__.StaveHairpin), +/* harmony export */ "StaveLine": () => (/* reexport safe */ _staveline__WEBPACK_IMPORTED_MODULE_51__.StaveLine), +/* harmony export */ "StaveModifier": () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifier), +/* harmony export */ "StaveModifierPosition": () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifierPosition), +/* harmony export */ "StaveNote": () => (/* reexport safe */ _stavenote__WEBPACK_IMPORTED_MODULE_53__.StaveNote), +/* harmony export */ "StaveSection": () => (/* reexport safe */ _stavesection__WEBPACK_IMPORTED_MODULE_55__.StaveSection), +/* harmony export */ "StaveTempo": () => (/* reexport safe */ _stavetempo__WEBPACK_IMPORTED_MODULE_56__.StaveTempo), +/* harmony export */ "StaveText": () => (/* reexport safe */ _stavetext__WEBPACK_IMPORTED_MODULE_57__.StaveText), +/* harmony export */ "StaveTie": () => (/* reexport safe */ _stavetie__WEBPACK_IMPORTED_MODULE_58__.StaveTie), +/* harmony export */ "Stem": () => (/* reexport safe */ _stem__WEBPACK_IMPORTED_MODULE_60__.Stem), +/* harmony export */ "StemmableNote": () => (/* reexport safe */ _stemmablenote__WEBPACK_IMPORTED_MODULE_61__.StemmableNote), +/* harmony export */ "StringNumber": () => (/* reexport safe */ _stringnumber__WEBPACK_IMPORTED_MODULE_62__.StringNumber), +/* harmony export */ "Stroke": () => (/* reexport safe */ _strokes__WEBPACK_IMPORTED_MODULE_63__.Stroke), +/* harmony export */ "SymbolModifiers": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers), +/* harmony export */ "SymbolTypes": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes), +/* harmony export */ "System": () => (/* reexport safe */ _system__WEBPACK_IMPORTED_MODULE_65__.System), +/* harmony export */ "TabNote": () => (/* reexport safe */ _tabnote__WEBPACK_IMPORTED_MODULE_66__.TabNote), +/* harmony export */ "TabSlide": () => (/* reexport safe */ _tabslide__WEBPACK_IMPORTED_MODULE_67__.TabSlide), +/* harmony export */ "TabStave": () => (/* reexport safe */ _tabstave__WEBPACK_IMPORTED_MODULE_68__.TabStave), +/* harmony export */ "TabTie": () => (/* reexport safe */ _tabtie__WEBPACK_IMPORTED_MODULE_69__.TabTie), +/* harmony export */ "TextBracket": () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracket), +/* harmony export */ "TextBracketPosition": () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracketPosition), +/* harmony export */ "TextDynamics": () => (/* reexport safe */ _textdynamics__WEBPACK_IMPORTED_MODULE_71__.TextDynamics), +/* harmony export */ "TextFormatter": () => (/* reexport safe */ _textformatter__WEBPACK_IMPORTED_MODULE_72__.TextFormatter), +/* harmony export */ "TextJustification": () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextJustification), +/* harmony export */ "TextNote": () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextNote), +/* harmony export */ "TickContext": () => (/* reexport safe */ _tickcontext__WEBPACK_IMPORTED_MODULE_75__.TickContext), +/* harmony export */ "Tickable": () => (/* reexport safe */ _tickable__WEBPACK_IMPORTED_MODULE_74__.Tickable), +/* harmony export */ "TimeSigNote": () => (/* reexport safe */ _timesignote__WEBPACK_IMPORTED_MODULE_78__.TimeSigNote), +/* harmony export */ "TimeSignature": () => (/* reexport safe */ _timesignature__WEBPACK_IMPORTED_MODULE_77__.TimeSignature), +/* harmony export */ "TimeSignatureGlyph": () => (/* reexport safe */ _timesigglyph__WEBPACK_IMPORTED_MODULE_76__.TimeSignatureGlyph), +/* harmony export */ "Tremolo": () => (/* reexport safe */ _tremolo__WEBPACK_IMPORTED_MODULE_79__.Tremolo), +/* harmony export */ "Tuning": () => (/* reexport safe */ _tuning__WEBPACK_IMPORTED_MODULE_80__.Tuning), +/* harmony export */ "Tuplet": () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.Tuplet), +/* harmony export */ "TupletLocation": () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.TupletLocation), +/* harmony export */ "Vex": () => (/* reexport safe */ _vex__WEBPACK_IMPORTED_MODULE_84__.Vex), +/* harmony export */ "Vibrato": () => (/* reexport safe */ _vibrato__WEBPACK_IMPORTED_MODULE_85__.Vibrato), +/* harmony export */ "VibratoBracket": () => (/* reexport safe */ _vibratobracket__WEBPACK_IMPORTED_MODULE_86__.VibratoBracket), +/* harmony export */ "Voice": () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.Voice), +/* harmony export */ "VoiceMode": () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.VoiceMode), +/* harmony export */ "Volta": () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.Volta), +/* harmony export */ "VoltaType": () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.VoltaType), +/* harmony export */ "defined": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.defined), +/* harmony export */ "drawDot": () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.drawDot), +/* harmony export */ "globalObject": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.globalObject), +/* harmony export */ "isAccidental": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAccidental), +/* harmony export */ "isAnnotation": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAnnotation), +/* harmony export */ "isBarline": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isBarline), +/* harmony export */ "isCategory": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isCategory), +/* harmony export */ "isDot": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isDot), +/* harmony export */ "isGraceNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNote), +/* harmony export */ "isGraceNoteGroup": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNoteGroup), +/* harmony export */ "isHTMLCanvas": () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLCanvas), +/* harmony export */ "isHTMLDiv": () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLDiv), +/* harmony export */ "isNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isNote), +/* harmony export */ "isRenderContext": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isRenderContext), +/* harmony export */ "isStaveNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStaveNote), +/* harmony export */ "isStemmableNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStemmableNote), +/* harmony export */ "isTabNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isTabNote), +/* harmony export */ "log": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.log), +/* harmony export */ "midLine": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.midLine), +/* harmony export */ "normalizeAngle": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.normalizeAngle), +/* harmony export */ "prefix": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.prefix), +/* harmony export */ "sumArray": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.sumArray), +/* harmony export */ "warn": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.warn) +/* harmony export */ }); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ "./src/barnote.ts"); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); +/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.ts"); +/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ "./src/crescendo.ts"); +/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ "./src/curve.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ "./src/factory.ts"); +/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./flow */ "./src/flow.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./gracetabnote */ "./src/gracetabnote.ts"); +/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keymanager */ "./src/keymanager.ts"); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parenthesis */ "./src/parenthesis.ts"); +/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./parser */ "./src/parser.ts"); +/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); +/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./registry */ "./src/registry.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./stavehairpin */ "./src/stavehairpin.ts"); +/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./staveline */ "./src/staveline.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.ts"); +/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavesection */ "./src/stavesection.ts"); +/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.ts"); +/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./strokes */ "./src/strokes.ts"); +/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./svgcontext */ "./src/svgcontext.ts"); +/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./system */ "./src/system.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabslide */ "./src/tabslide.ts"); +/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.ts"); +/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./tickable */ "./src/tickable.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./timesigglyph */ "./src/timesigglyph.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.ts"); +/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./tremolo */ "./src/tremolo.ts"); +/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./tuning */ "./src/tuning.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(/*! ./vex */ "./src/vex.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); +/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(/*! ./web */ "./src/web.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + + + + + + + + + + + + + + +// Do not export './fonts/*' because they are used by the entry/* files. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Do not export './tables' because it is internal. Its public API is accessible via Vex.Flow.*. + + + + + + + + + + + + + + + + + + +// Do not export './version'. It is accessible via Vex.Flow.BUILD. + + + + + + + +/***/ }), + +/***/ "./src/keymanager.ts": +/*!***************************!*\ + !*** ./src/keymanager.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "KeyManager": () => (/* binding */ KeyManager) +/* harmony export */ }); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// This class implements diatonic key management. + + +class KeyManager { + constructor(key) { + this.music = new _music__WEBPACK_IMPORTED_MODULE_0__.Music(); + this.setKey(key); + } + setKey(key) { + this.key = key; + this.reset(); + return this; + } + getKey() { + return this.key; + } + reset() { + this.keyParts = this.music.getKeyParts(this.key); + this.keyString = this.keyParts.root; + if (this.keyParts.accidental) + this.keyString += this.keyParts.accidental; + const is_supported_type = _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type]; + if (!is_supported_type) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Unsupported key type: ${this.key}`); + } + this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type]); + this.scaleMap = {}; + this.scaleMapByValue = {}; + this.originalScaleMapByValue = {}; + const noteLocation = _music__WEBPACK_IMPORTED_MODULE_0__.Music.root_indices[this.keyParts.root]; + for (let i = 0; i < _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length; ++i) { + const index = (noteLocation + i) % _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length; + const rootName = _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots[index]; + const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]); + this.scaleMap[rootName] = noteName; + this.scaleMapByValue[this.scale[i]] = noteName; + this.originalScaleMapByValue[this.scale[i]] = noteName; + } + return this; + } + getAccidental(key) { + const root = this.music.getKeyParts(key).root; + const parts = this.music.getNoteParts(this.scaleMap[root]); + return { + note: this.scaleMap[root], + accidental: parts.accidental, + }; + } + selectNote(note) { + note = note.toLowerCase(); + const parts = this.music.getNoteParts(note); + // First look for matching note in our altered scale + const scaleNote = this.scaleMap[parts.root]; + const modparts = this.music.getNoteParts(scaleNote); + if (scaleNote === note) { + return { + note: scaleNote, + accidental: parts.accidental, + change: false, + }; + } + // Then search for a note of equivalent value in our altered scale + const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)]; + if (valueNote != null) { + return { + note: valueNote, + accidental: this.music.getNoteParts(valueNote).accidental, + change: false, + }; + } + // Then search for a note of equivalent value in the original scale + const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)]; + if (originalValueNote != null) { + this.scaleMap[modparts.root] = originalValueNote; + delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)]; + this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote; + return { + note: originalValueNote, + accidental: this.music.getNoteParts(originalValueNote).accidental, + change: true, + }; + } + // Then try to unmodify a currently modified note. + if (modparts.root === note) { + delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])]; + this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root; + this.scaleMap[modparts.root] = modparts.root; + return { + note: modparts.root, + accidental: undefined, + change: true, + }; + } + // Last resort -- shitshoot + delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])]; + this.scaleMapByValue[this.music.getNoteValue(note)] = note; + delete this.scaleMap[modparts.root]; + this.scaleMap[modparts.root] = note; + return { + note, + accidental: parts.accidental, + change: true, + }; + } +} + + +/***/ }), + +/***/ "./src/keysignature.ts": +/*!*****************************!*\ + !*** ./src/keysignature.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "KeySignature": () => (/* binding */ KeySignature) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Cyril Silverman +// +// ## Description +// +// This file implements key signatures. A key signature sits on a stave +// and indicates the notes with implicit accidentals. + + + + + +class KeySignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.KeySignature; + } + // Create a new Key Signature based on a `key_spec` + constructor(keySpec, cancelKeySpec, alterKeySpec) { + super(); + this.accList = []; + this.setKeySig(keySpec, cancelKeySpec, alterKeySpec); + this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN); + this.glyphFontScale = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE; + this.glyphs = []; + this.xPositions = []; // relative to this.x + this.paddingForced = false; + } + // Add an accidental glyph to the `KeySignature` instance which represents + // the provided `acc`. If `nextAcc` is also provided, the appropriate + // spacing will be included in the glyph's position + convertToGlyph(acc, nextAcc) { + const accGlyphData = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.accidentalCodes(acc.type); + const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(accGlyphData.code, this.glyphFontScale); + // Determine spacing between current accidental and the next accidental + let extraWidth = 1; + if (acc.type === 'n' && nextAcc) { + const spacing = KeySignature.accidentalSpacing[nextAcc.type]; + if (spacing) { + const isAbove = nextAcc.line >= acc.line; + extraWidth = isAbove ? spacing.above : spacing.below; + } + } + // Place the glyph on the stave + this.placeGlyphOnLine(glyph, this.checkStave(), acc.line); + this.glyphs.push(glyph); + const xPosition = this.xPositions[this.xPositions.length - 1]; + const glyphWidth = glyph.getMetrics().width + extraWidth; + // Store the next accidental's x position + this.xPositions.push(xPosition + glyphWidth); + // Expand size of key signature + this.width += glyphWidth; + } + // Cancel out a key signature provided in the `spec` parameter. This will + // place appropriate natural accidentals before the key signature. + cancelKey(spec) { + this.formatted = false; + this.cancelKeySpec = spec; + return this; + } + convertToCancelAccList(spec) { + // Get the accidental list for the cancelled key signature + const cancel_accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature(spec); + // If the cancelled key has a different accidental type, ie: # vs b + const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type; + // Determine how many naturals needed to add + const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length; + // Return if no naturals needed + if (naturals < 1) + return undefined; + // Get the line position for each natural + const cancelled = []; + for (let i = 0; i < naturals; i++) { + let index = i; + if (!different_types) { + index = cancel_accList.length - naturals + i; + } + const acc = cancel_accList[index]; + cancelled.push({ type: 'n', line: acc.line }); + } + // Combine naturals with main accidental list for the key signature + this.accList = cancelled.concat(this.accList); + return { + accList: cancelled, + type: cancel_accList[0].type, + }; + } + // Deprecated + addToStave(stave) { + this.paddingForced = true; + stave.addModifier(this); + return this; + } + // Apply the accidental staff line placement based on the `clef` and + // the accidental `type` for the key signature ('# or 'b'). + convertAccLines(clef, type, accList = this.accList) { + let offset = 0.0; // if clef === "treble" + let customLines; // when clef doesn't follow treble key sig shape + switch (clef) { + // Treble & Subbass both have offsets of 0, so are not included. + case 'soprano': + if (type === '#') + customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1]; + else + offset = -1; + break; + case 'mezzo-soprano': + if (type === 'b') + customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5]; + else + offset = 1.5; + break; + case 'alto': + offset = 0.5; + break; + case 'tenor': + if (type === '#') + customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5]; + else + offset = -0.5; + break; + case 'baritone-f': + case 'baritone-c': + if (type === 'b') + customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2]; + else + offset = 2; + break; + case 'bass': + case 'french': + offset = 1; + break; + default: + break; + } + // If there's a special case, assign those lines/spaces: + let i; + if (typeof customLines !== 'undefined') { + for (i = 0; i < accList.length; ++i) { + accList[i].line = customLines[i]; + } + } + else if (offset !== 0) { + for (i = 0; i < accList.length; ++i) { + accList[i].line += offset; + } + } + } + getPadding(index) { + if (!this.formatted) + this.format(); + return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding; + } + getWidth() { + if (!this.formatted) + this.format(); + return this.width; + } + setKeySig(keySpec, cancelKeySpec, alterKeySpec) { + this.formatted = false; + this.keySpec = keySpec; + this.cancelKeySpec = cancelKeySpec; + this.alterKeySpec = alterKeySpec; + return this; + } + // Alter the accidentals of a key spec one by one. + // Each alteration is a new accidental that replaces the + // original accidental (or the canceled one). + alterKey(alterKeySpec) { + this.formatted = false; + this.alterKeySpec = alterKeySpec; + return this; + } + convertToAlterAccList(alterKeySpec) { + const max = Math.min(alterKeySpec.length, this.accList.length); + for (let i = 0; i < max; ++i) { + if (alterKeySpec[i]) { + this.accList[i].type = alterKeySpec[i]; + } + } + } + format() { + const stave = this.checkStave(); + this.width = 0; + this.glyphs = []; + this.xPositions = [0]; // initialize with initial x position + this.accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature((0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.keySpec)); + const accList = this.accList; + const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined; + let cancelAccList; + if (this.cancelKeySpec) { + cancelAccList = this.convertToCancelAccList(this.cancelKeySpec); + } + if (this.alterKeySpec) { + this.convertToAlterAccList(this.alterKeySpec); + } + if (this.accList.length > 0) { + const clef = (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef(); + if (cancelAccList) { + this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList); + } + this.convertAccLines(clef, firstAccidentalType, accList); + for (let i = 0; i < this.accList.length; ++i) { + this.convertToGlyph(this.accList[i], this.accList[i + 1]); + } + } + this.formatted = true; + } + /** + * Return the Glyph objects making up this KeySignature. + */ + getGlyphs() { + if (!this.formatted) + this.format(); + return this.glyphs; + } + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + if (!this.formatted) + this.format(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('keysignature', this.getAttribute('id')); + for (let i = 0; i < this.glyphs.length; i++) { + const glyph = this.glyphs[i]; + const x = this.x + this.xPositions[i]; + glyph.setStave(stave); + glyph.setContext(ctx); + glyph.renderToStave(x); + } + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} +// Space between natural and following accidental depending +// on vertical position +KeySignature.accidentalSpacing = { + '#': { + above: 6, + below: 4, + }, + b: { + above: 4, + below: 7, + }, + n: { + above: 4, + below: 1, + }, + '##': { + above: 6, + below: 4, + }, + bb: { + above: 4, + below: 7, + }, + db: { + above: 4, + below: 7, + }, + d: { + above: 4, + below: 7, + }, + bbs: { + above: 4, + below: 7, + }, + '++': { + above: 6, + below: 4, + }, + '+': { + above: 6, + below: 4, + }, + '+-': { + above: 6, + below: 4, + }, + '++-': { + above: 6, + below: 4, + }, + bs: { + above: 4, + below: 10, + }, + bss: { + above: 4, + below: 10, + }, +}; + + + +/***/ }), + +/***/ "./src/keysignote.ts": +/*!***************************!*\ + !*** ./src/keysignote.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "KeySigNote": () => (/* binding */ KeySigNote) +/* harmony export */ }); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Mark Meeus 2019 + + + +class KeySigNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.KeySigNote; + } + constructor(keySpec, cancelKeySpec, alterKeySpec) { + super({ duration: 'b' }); + this.keySignature = new _keysignature__WEBPACK_IMPORTED_MODULE_0__.KeySignature(keySpec, cancelKeySpec, alterKeySpec); + // Note properties + this.ignore_ticks = true; + } + /* Overridden to ignore */ + // eslint-disable-next-line + addToModifierContext(mc) { + // DO NOTHING. + return this; + } + preFormat() { + this.preFormatted = true; + this.keySignature.setStave(this.checkStave()); + this.setWidth(this.keySignature.getWidth()); + return this; + } + draw() { + const ctx = this.checkStave().checkContext(); + this.setRendered(); + this.keySignature.setX(this.getAbsoluteX()); + this.keySignature.setContext(ctx); + this.keySignature.draw(); + } +} + + +/***/ }), + +/***/ "./src/modifier.ts": +/*!*************************!*\ + !*** ./src/modifier.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Modifier": () => (/* binding */ Modifier), +/* harmony export */ "ModifierPosition": () => (/* binding */ ModifierPosition) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +var ModifierPosition; +(function (ModifierPosition) { + ModifierPosition[ModifierPosition["CENTER"] = 0] = "CENTER"; + ModifierPosition[ModifierPosition["LEFT"] = 1] = "LEFT"; + ModifierPosition[ModifierPosition["RIGHT"] = 2] = "RIGHT"; + ModifierPosition[ModifierPosition["ABOVE"] = 3] = "ABOVE"; + ModifierPosition[ModifierPosition["BELOW"] = 4] = "BELOW"; +})(ModifierPosition || (ModifierPosition = {})); +// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`. +// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); } +/** + * `Modifier` is an abstract interface for notational elements that modify + * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc. + * + * For a `Modifier` instance to be positioned correctly, it must be part of + * a `ModifierContext`. All modifiers in the same context are rendered relative to + * one another. + * + * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also, + * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same + * `ModifierContext`. This ensures that multiple voices don't trample all over each other. + */ +class Modifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + /** + * Modifiers category string. Every modifier has a different category. + * The `ModifierContext` uses this to determine the type and order of the modifiers. + */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Modifier; + } + /** Modifiers can be positioned almost anywhere, relative to a note. */ + static get Position() { + return ModifierPosition; + } + static get PositionString() { + return { + center: ModifierPosition.CENTER, + above: ModifierPosition.ABOVE, + below: ModifierPosition.BELOW, + left: ModifierPosition.LEFT, + right: ModifierPosition.RIGHT, + }; + } + constructor() { + super(); + this.width = 0; + // The `text_line` is reserved space above or below a stave. + this.text_line = 0; + this.position = Modifier.Position.LEFT; + this.x_shift = 0; + this.y_shift = 0; + this.spacingFromNextModifier = 0; + } + /** Called when position changes. */ + reset() { + // DO NOTHING. + } + /** Get modifier widths. */ + getWidth() { + return this.width; + } + /** Set modifier widths. */ + setWidth(width) { + this.width = width; + return this; + } + /** Get attached note (`StaveNote`, `TabNote`, etc.) */ + getNote() { + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', 'Modifier has no note.'); + } + /** + * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.). + * Also verifies that the index is valid. + */ + checkAttachedNote() { + const category = this.getCategory(); + (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', `Can't draw ${category} without an index.`); + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', `Can't draw ${category} without a note.`); + } + /** + * Set attached note. + * @param note (`StaveNote`, `TabNote`, etc.) + */ + setNote(note) { + this.note = note; + return this; + } + /** Get note index, which is a specific note in a chord. */ + getIndex() { + return this.index; + } + /** Check and get note index, which is a specific note in a chord. */ + checkIndex() { + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', 'Modifier has an invalid index.'); + } + /** Set note index, which is a specific note in a chord. */ + setIndex(index) { + this.index = index; + return this; + } + /** Get `ModifierContext`. */ + getModifierContext() { + return this.modifierContext; + } + /** Check and get `ModifierContext`. */ + checkModifierContext() { + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.modifierContext, 'NoModifierContext', 'Modifier Context Required'); + } + /** Every modifier must be part of a `ModifierContext`. */ + setModifierContext(c) { + this.modifierContext = c; + return this; + } + /** Get position. */ + getPosition() { + return this.position; + } + /** + * Set position. + * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW + */ + setPosition(position) { + this.position = typeof position === 'string' ? Modifier.PositionString[position] : position; + this.reset(); + return this; + } + /** Set the `text_line` for the modifier. */ + setTextLine(line) { + this.text_line = line; + return this; + } + /** Shift modifier down `y` pixels. Negative values shift up. */ + setYShift(y) { + this.y_shift = y; + return this; + } + /** Set spacing from next modifier. */ + setSpacingFromNextModifier(x) { + this.spacingFromNextModifier = x; + } + /** Get spacing from next modifier. */ + getSpacingFromNextModifier() { + return this.spacingFromNextModifier; + } + /** + * Shift modifier `x` pixels in the direction of the modifier. Negative values + * shift reverse. + */ + setXShift(x) { + this.x_shift = 0; + if (this.position === Modifier.Position.LEFT) { + this.x_shift -= x; + } + else { + this.x_shift += x; + } + return this; + } + /** Get shift modifier `x` */ + getXShift() { + return this.x_shift; + } + /** Render the modifier onto the canvas. */ + draw() { + this.checkContext(); + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NotImplemented', 'draw() not implemented for this modifier.'); + } + // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset + alignSubNotesWithNote(subNotes, note) { + // Shift over the tick contexts of each note + const tickContext = note.getTickContext(); + const metrics = tickContext.getMetrics(); + const stave = note.getStave(); + const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier(); + subNotes.forEach((subNote) => { + const subTickContext = subNote.getTickContext(); + if (stave) + subNote.setStave(stave); + subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render + }); + } +} + + +/***/ }), + +/***/ "./src/modifiercontext.ts": +/*!********************************!*\ + !*** ./src/modifiercontext.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ModifierContext": () => (/* binding */ ModifierContext) +/* harmony export */ }); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./parenthesis */ "./src/parenthesis.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./strokes */ "./src/strokes.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// This class implements various types of members to notes (e.g. bends, +// fingering positions etc.). The ModifierContext works with tickables +// that are at the same tick to ensure that they and their modifiers +// all have proper alignment. (Note that the ModifierContext also +// runs the spacing of the tickable). +// +// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works + + + + + + + + + + + + + + + + + +// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (ModifierContext.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_15__.log)('Vex.Flow.ModifierContext', args); +} +class ModifierContext { + constructor() { + // Formatting data. + this.state = { + left_shift: 0, + right_shift: 0, + text_line: 0, + top_text_line: 0, + }; + // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers, + // StaveNotes, TabNotes, etc. + this.members = {}; + this.preFormatted = false; + this.postFormatted = false; + this.formatted = false; + this.width = 0; + this.spacing = 0; + } + addModifier(member) { + L('addModifier is deprecated, use addMember instead.'); + return this.addMember(member); + } + /** + * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote. + * Here we add a new member to this.members, and create a new array if needed. + * @param member + * @returns this + */ + addMember(member) { + const category = member.getCategory(); + if (!this.members[category]) { + this.members[category] = []; + } + this.members[category].push(member); + member.setModifierContext(this); + this.preFormatted = false; + return this; + } + /** + * @deprecated + */ + getModifiers(category) { + L('getModifiers is deprecated, use getMembers instead.'); + return this.getMembers(category); + } + getMembers(category) { + var _a; + return (_a = this.members[category]) !== null && _a !== void 0 ? _a : []; + } + /** + * Get the width of the entire + */ + getWidth() { + return this.width; + } + getLeftShift() { + return this.state.left_shift; + } + getRightShift() { + return this.state.right_shift; + } + getState() { + return this.state; + } + getMetrics() { + if (!this.formatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('UnformattedMember', 'Unformatted member has no metrics.'); + } + return { + width: this.state.left_shift + this.state.right_shift + this.spacing, + spacing: this.spacing, + }; + } + preFormat() { + if (this.preFormatted) + return; + L('Preformatting ModifierContext'); + const state = this.state; + const members = this.members; + // The ordering below determines when different members are formatted and rendered. + _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote], state); + _parenthesis__WEBPACK_IMPORTED_MODULE_10__.Parenthesis.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Parenthesis], state); + _dot__WEBPACK_IMPORTED_MODULE_5__.Dot.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Dot], state); + _frethandfinger__WEBPACK_IMPORTED_MODULE_6__.FretHandFinger.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.FretHandFinger], state); + _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Accidental], state); + _strokes__WEBPACK_IMPORTED_MODULE_13__.Stroke.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stroke], state); + _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__.GraceNoteGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.GraceNoteGroup], state); + _notesubgroup__WEBPACK_IMPORTED_MODULE_8__.NoteSubGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.NoteSubGroup], state); + _stringnumber__WEBPACK_IMPORTED_MODULE_12__.StringNumber.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StringNumber], state); + _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Articulation], state); + _ornament__WEBPACK_IMPORTED_MODULE_9__.Ornament.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Ornament], state); + _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Annotation], state); + _chordsymbol__WEBPACK_IMPORTED_MODULE_4__.ChordSymbol.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.ChordSymbol], state); + _bend__WEBPACK_IMPORTED_MODULE_3__.Bend.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Bend], state); + _vibrato__WEBPACK_IMPORTED_MODULE_16__.Vibrato.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Vibrato], state, this); + // Update width of this member context + this.width = state.left_shift + state.right_shift; + this.preFormatted = true; + } + postFormat() { + if (this.postFormatted) + return; + L('Postformatting ModifierContext'); + // If post-formatting is required for an element, add more lines below. + _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.postFormat(this.getMembers(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote)); + } +} +ModifierContext.DEBUG = false; + + + +/***/ }), + +/***/ "./src/multimeasurerest.ts": +/*!*********************************!*\ + !*** ./src/multimeasurerest.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "MultiMeasureRest": () => (/* binding */ MultiMeasureRest) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// VexFlow - Music Engraving for HTML5 +// Copyright Mohit Muthanna 2010 +// +// This class implements multiple measure rests. + + + + + + + + +let semibreve_rest; +function get_semibreve_rest() { + if (!semibreve_rest) { + const noteHead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({ duration: 'w', note_type: 'r' }); + semibreve_rest = { + glyph_font_scale: noteHead.render_options.glyph_font_scale, + glyph_code: noteHead.glyph_code, + width: noteHead.getWidth(), + }; + } + return semibreve_rest; +} +class MultiMeasureRest extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.MultiMeasureRest; + } + /** + * + * @param number_of_measures Number of measures. + * @param options The options object. + */ + constructor(number_of_measures, options) { + var _a; + super(); + this.xs = { left: NaN, right: NaN }; + this.hasPaddingLeft = false; + this.hasPaddingRight = false; + this.hasLineThickness = false; + this.hasSymbolSpacing = false; + this.number_of_measures = number_of_measures; + // Keep track of whether these four options were provided. + this.hasPaddingLeft = typeof options.padding_left === 'number'; + this.hasPaddingRight = typeof options.padding_right === 'number'; + this.hasLineThickness = typeof options.line_thickness === 'number'; + this.hasSymbolSpacing = typeof options.symbol_spacing === 'number'; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); + this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options); + const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0); + this.render_options.number_line += fontLineShift; + } + getXs() { + return this.xs; + } + setStave(stave) { + this.stave = stave; + return this; + } + getStave() { + return this.stave; + } + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + drawLine(stave, ctx, left, right, spacingBetweenLines) { + const options = this.render_options; + const y = stave.getYForLine(options.line); + const padding = (right - left) * 0.1; + left += padding; + right -= padding; + let lineThicknessHalf; + if (this.hasLineThickness) { + lineThicknessHalf = options.line_thickness * 0.5; + } + else { + lineThicknessHalf = spacingBetweenLines * 0.25; + } + const serifThickness = options.serif_thickness; + const top = y - spacingBetweenLines; + const bot = y + spacingBetweenLines; + const leftIndented = left + serifThickness; + const rightIndented = right - serifThickness; + const lineTop = y - lineThicknessHalf; + const lineBottom = y + lineThicknessHalf; + ctx.save(); + ctx.beginPath(); + ctx.moveTo(left, top); + ctx.lineTo(leftIndented, top); + ctx.lineTo(leftIndented, lineTop); + ctx.lineTo(rightIndented, lineTop); + ctx.lineTo(rightIndented, top); + ctx.lineTo(right, top); + ctx.lineTo(right, bot); + ctx.lineTo(rightIndented, bot); + ctx.lineTo(rightIndented, lineBottom); + ctx.lineTo(leftIndented, lineBottom); + ctx.lineTo(leftIndented, bot); + ctx.lineTo(left, bot); + ctx.closePath(); + ctx.fill(); + } + drawSymbols(stave, ctx, left, right, spacingBetweenLines) { + const n4 = Math.floor(this.number_of_measures / 4); + const n = this.number_of_measures % 4; + const n2 = Math.floor(n / 2); + const n1 = n % 2; + const options = this.render_options; + // FIXME: TODO: invalidate semibreve_rest at the appropriate time + // (e.g., if the system font settings are changed). + semibreve_rest = undefined; + const rest = get_semibreve_rest(); + const rest_scale = options.semibreve_rest_glyph_scale; + const rest_width = rest.width * (rest_scale / rest.glyph_font_scale); + const glyphs = { + 2: { + width: rest_width * 0.5, + height: spacingBetweenLines, + }, + 1: { + width: rest_width, + }, + }; + /* 10: normal spacingBetweenLines */ + const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10; + const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing; + let x = left + (right - left) * 0.5 - width * 0.5; + const line = options.line; + const yTop = stave.getYForLine(line - 1); + const yMiddle = stave.getYForLine(line); + const yBottom = stave.getYForLine(line + 1); + ctx.save(); + ctx.setStrokeStyle('none'); + ctx.setLineWidth(0); + for (let i = 0; i < n4; ++i) { + ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height); + ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height); + x += glyphs[2].width + spacing; + } + for (let i = 0; i < n2; ++i) { + ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height); + x += glyphs[2].width + spacing; + } + for (let i = 0; i < n1; ++i) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code); + x += glyphs[1].width + spacing; + } + ctx.restore(); + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const stave = this.checkStave(); + let left = stave.getNoteStartX(); + let right = stave.getNoteEndX(); + // FIXME: getNoteStartX() returns x + 5(barline width) + // getNoteEndX() returns x + width(no barline width) + // See Stave constructor. How do we fix this? + // Here, we subtract the barline width. + const begModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition.BEGIN); + if (begModifiers.length === 1 && (0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isBarline)(begModifiers[0])) { + left -= begModifiers[0].getWidth(); + } + const options = this.render_options; + if (this.hasPaddingLeft) { + left = stave.getX() + options.padding_left; + } + if (this.hasPaddingRight) { + right = stave.getX() + stave.getWidth() - options.padding_right; + } + this.xs.left = left; + this.xs.right = right; + const spacingBetweenLines = options.spacing_between_lines_px; + if (options.use_symbols) { + this.drawSymbols(stave, ctx, left, right, spacingBetweenLines); + } + else { + this.drawLine(stave, ctx, left, right, spacingBetweenLines); + } + if (options.show_number) { + const timeSpec = '/' + this.number_of_measures; + const timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_5__.TimeSignature(timeSpec, 0, false); + timeSig.point = options.number_glyph_point; + timeSig.setTimeSig(timeSpec); + timeSig.setStave(stave); + timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5); + timeSig.bottomLine = options.number_line; + timeSig.setContext(ctx).draw(); + } + } +} + + +/***/ }), + +/***/ "./src/music.ts": +/*!**********************!*\ + !*** ./src/music.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Music": () => (/* binding */ Music) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + +/** Music implements some standard music theory routines. */ +class Music { + /** Number of an canonical notes (12). */ + static get NUM_TONES() { + return this.canonical_notes.length; + } + /** Names of root notes ('c', 'd',...) */ + static get roots() { + return ['c', 'd', 'e', 'f', 'g', 'a', 'b']; + } + /** Values of the root notes.*/ + static get root_values() { + return [0, 2, 4, 5, 7, 9, 11]; + } + /** Indices of the root notes.*/ + static get root_indices() { + return { + c: 0, + d: 1, + e: 2, + f: 3, + g: 4, + a: 5, + b: 6, + }; + } + /** Names of canonical notes ('c', 'c#', 'd',...). */ + static get canonical_notes() { + return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b']; + } + /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */ + static get diatonic_intervals() { + return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave']; + } + /** NoteAccidental associated to diatonic intervals. */ + static get diatonic_accidentals() { + return { + unison: { note: 0, accidental: 0 }, + m2: { note: 1, accidental: -1 }, + M2: { note: 1, accidental: 0 }, + m3: { note: 2, accidental: -1 }, + M3: { note: 2, accidental: 0 }, + p4: { note: 3, accidental: 0 }, + dim5: { note: 4, accidental: -1 }, + p5: { note: 4, accidental: 0 }, + m6: { note: 5, accidental: -1 }, + M6: { note: 5, accidental: 0 }, + b7: { note: 6, accidental: -1 }, + M7: { note: 6, accidental: 0 }, + octave: { note: 7, accidental: 0 }, + }; + } + /** Semitones shift associated to intervals .*/ + static get intervals() { + return { + u: 0, + unison: 0, + m2: 1, + b2: 1, + min2: 1, + S: 1, + H: 1, + 2: 2, + M2: 2, + maj2: 2, + T: 2, + W: 2, + m3: 3, + b3: 3, + min3: 3, + M3: 4, + 3: 4, + maj3: 4, + 4: 5, + p4: 5, + '#4': 6, + b5: 6, + aug4: 6, + dim5: 6, + 5: 7, + p5: 7, + '#5': 8, + b6: 8, + aug5: 8, + 6: 9, + M6: 9, + maj6: 9, + b7: 10, + m7: 10, + min7: 10, + dom7: 10, + M7: 11, + maj7: 11, + 8: 12, + octave: 12, + }; + } + /** Semitones shifts associated with scales. */ + static get scales() { + return { + major: [2, 2, 1, 2, 2, 2, 1], + minor: [2, 1, 2, 2, 1, 2, 2], + ionian: [2, 2, 1, 2, 2, 2, 1], + dorian: [2, 1, 2, 2, 2, 1, 2], + phyrgian: [1, 2, 2, 2, 1, 2, 2], + lydian: [2, 2, 2, 1, 2, 2, 1], + mixolydian: [2, 2, 1, 2, 2, 1, 2], + aeolian: [2, 1, 2, 2, 1, 2, 2], + locrian: [1, 2, 2, 1, 2, 2, 2], + }; + } + /** Scales associated with m (minor) and M (major). */ + static get scaleTypes() { + return { + M: Music.scales.major, + m: Music.scales.minor, + }; + } + /** Accidentals abbreviations. */ + static get accidentals() { + return ['bb', 'b', 'n', '#', '##']; + } + /** Note values. */ + static get noteValues() { + return { + c: { root_index: 0, int_val: 0 }, + cn: { root_index: 0, int_val: 0 }, + 'c#': { root_index: 0, int_val: 1 }, + 'c##': { root_index: 0, int_val: 2 }, + cb: { root_index: 0, int_val: 11 }, + cbb: { root_index: 0, int_val: 10 }, + d: { root_index: 1, int_val: 2 }, + dn: { root_index: 1, int_val: 2 }, + 'd#': { root_index: 1, int_val: 3 }, + 'd##': { root_index: 1, int_val: 4 }, + db: { root_index: 1, int_val: 1 }, + dbb: { root_index: 1, int_val: 0 }, + e: { root_index: 2, int_val: 4 }, + en: { root_index: 2, int_val: 4 }, + 'e#': { root_index: 2, int_val: 5 }, + 'e##': { root_index: 2, int_val: 6 }, + eb: { root_index: 2, int_val: 3 }, + ebb: { root_index: 2, int_val: 2 }, + f: { root_index: 3, int_val: 5 }, + fn: { root_index: 3, int_val: 5 }, + 'f#': { root_index: 3, int_val: 6 }, + 'f##': { root_index: 3, int_val: 7 }, + fb: { root_index: 3, int_val: 4 }, + fbb: { root_index: 3, int_val: 3 }, + g: { root_index: 4, int_val: 7 }, + gn: { root_index: 4, int_val: 7 }, + 'g#': { root_index: 4, int_val: 8 }, + 'g##': { root_index: 4, int_val: 9 }, + gb: { root_index: 4, int_val: 6 }, + gbb: { root_index: 4, int_val: 5 }, + a: { root_index: 5, int_val: 9 }, + an: { root_index: 5, int_val: 9 }, + 'a#': { root_index: 5, int_val: 10 }, + 'a##': { root_index: 5, int_val: 11 }, + ab: { root_index: 5, int_val: 8 }, + abb: { root_index: 5, int_val: 7 }, + b: { root_index: 6, int_val: 11 }, + bn: { root_index: 6, int_val: 11 }, + 'b#': { root_index: 6, int_val: 0 }, + 'b##': { root_index: 6, int_val: 1 }, + bb: { root_index: 6, int_val: 10 }, + bbb: { root_index: 6, int_val: 9 }, + }; + } + isValidNoteValue(note) { + return note >= 0 && note < Music.canonical_notes.length; + } + isValidIntervalValue(interval) { + return interval >= 0 && interval < Music.diatonic_intervals.length; + } + /** Return root and accidental associated to a note. */ + getNoteParts(noteString) { + if (!noteString || noteString.length < 1) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString); + } + if (noteString.length > 3) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString); + } + const note = noteString.toLowerCase(); + const regex = /^([cdefgab])(b|bb|n|#|##)?$/; + const match = regex.exec(note); + if (match !== null) { + const root = match[1]; + const accidental = match[2]; + return { + root, + accidental, + }; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString); + } + } + /** Return root, accidental and type associated to a key. */ + getKeyParts(keyString) { + if (!keyString || keyString.length < 1) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid key: ' + keyString); + } + const key = keyString.toLowerCase(); + // Support Major, Minor, Melodic Minor, and Harmonic Minor key types. + const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/; + const match = regex.exec(key); + if (match !== null) { + const root = match[1]; + const accidental = match[2]; + let type = match[3]; + // Unspecified type implies major + if (!type) + type = 'M'; + return { + root, + accidental, + type, + }; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid key: ${keyString}`); + } + } + /** Note value associated to a note name. */ + getNoteValue(noteString) { + const value = Music.noteValues[noteString]; + if (value === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note name: ${noteString}`); + } + return value.int_val; + } + /** Interval value associated to an interval name. */ + getIntervalValue(intervalString) { + const value = Music.intervals[intervalString]; + if (value === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`); + } + return value; + } + /** Canonical note name associated to a value. */ + getCanonicalNoteName(noteValue) { + if (!this.isValidNoteValue(noteValue)) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note value: ${noteValue}`); + } + return Music.canonical_notes[noteValue]; + } + /** Interval name associated to a value. */ + getCanonicalIntervalName(intervalValue) { + if (!this.isValidIntervalValue(intervalValue)) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`); + } + return Music.diatonic_intervals[intervalValue]; + } + /** + * Given a note, interval, and interval direction, produce the relative note. + */ + getRelativeNoteValue(noteValue, intervalValue, direction = 1) { + if (direction !== 1 && direction !== -1) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`); + } + let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES; + if (sum < 0) + sum += Music.NUM_TONES; + return sum; + } + /** + * Given a root and note value, produce the relative note name. + */ + getRelativeNoteName(root, noteValue) { + const parts = this.getNoteParts(root); + const rootValue = this.getNoteValue(parts.root); + let interval = noteValue - rootValue; + if (Math.abs(interval) > Music.NUM_TONES - 3) { + let multiplier = 1; + if (interval > 0) + multiplier = -1; + // Possibly wrap around. (Add +1 for modulo operator) + const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier; + if (Math.abs(reverse_interval) > 2) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`); + } + else { + interval = reverse_interval; + } + } + if (Math.abs(interval) > 2) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`); + } + let relativeNoteName = parts.root; + if (interval > 0) { + for (let i = 1; i <= interval; ++i) { + relativeNoteName += '#'; + } + } + else if (interval < 0) { + for (let i = -1; i >= interval; --i) { + relativeNoteName += 'b'; + } + } + return relativeNoteName; + } + /** + * Return scale tones, given intervals. Each successive interval is + * relative to the previous one, e.g., Major Scale: + * + * TTSTTTS = [2,2,1,2,2,2,1] + * + * When used with key = 0, returns C scale (which is isomorphic to + * interval list). + */ + getScaleTones(key, intervals) { + const tones = [key]; + let nextNote = key; + for (let i = 0; i < intervals.length; i++) { + nextNote = this.getRelativeNoteValue(nextNote, intervals[i]); + if (nextNote !== key) + tones.push(nextNote); + } + return tones; + } + /** + * Return the interval of a note, given a diatonic scale. + * e.g., given the scale C, and the note E, returns M3. + */ + getIntervalBetween(note1, note2, direction = 1) { + if (direction !== 1 && direction !== -1) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`); + } + if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`); + } + let difference = direction === 1 ? note2 - note1 : note1 - note2; + if (difference < 0) + difference += Music.NUM_TONES; + return difference; + } + /** + * Create a scale map that represents the pitch state for a + * `keySignature`. For example, passing a `G` to `keySignature` would + * return a scale map with every note naturalized except for `F` which + * has an `F#` state. + */ + createScaleMap(keySignature) { + const keySigParts = this.getKeyParts(keySignature); + if (!keySigParts.type) + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: undefined'); + const scaleName = Music.scaleTypes[keySigParts.type]; + let keySigString = keySigParts.root; + if (keySigParts.accidental) + keySigString += keySigParts.accidental; + if (!scaleName) + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature); + const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName); + const noteLocation = Music.root_indices[keySigParts.root]; + const scaleMap = {}; + for (let i = 0; i < Music.roots.length; ++i) { + const index = (noteLocation + i) % Music.roots.length; + const rootName = Music.roots[index]; + let noteName = this.getRelativeNoteName(rootName, scale[i]); + if (noteName.length === 1) { + noteName += 'n'; + } + scaleMap[rootName] = noteName; + } + return scaleMap; + } +} + + +/***/ }), + +/***/ "./src/note.ts": +/*!*********************!*\ + !*** ./src/note.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Note": () => (/* binding */ Note) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tickable */ "./src/tickable.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +/** + * Note implements an abstract interface for notes and chords that + * are rendered on a stave. Notes have some common properties: All of them + * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.) + * + * Some notes have stems, heads, dots, etc. Most notational elements that + * surround a note are called *modifiers*, and every note has an associated + * array of them. All notes also have a rendering context and belong to a stave. + */ +class Note extends _tickable__WEBPACK_IMPORTED_MODULE_3__.Tickable { + ////////////////////////////////////////////////////////////////////////////////////////////////// + // STATIC MEMBERS + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Note; + } + /** Debug helper. Displays various note metrics for the given note. */ + static plotMetrics(ctx, note, yPos) { + const metrics = note.getMetrics(); + const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx; + const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx; + const xAbs = note.getAbsoluteX(); + const xPost1 = note.getAbsoluteX() + metrics.notePx; + const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx; + const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx; + const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0); + const xWidth = xEnd - xStart; + ctx.save(); + ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, 8); + ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos); + const y = yPos + 7; + function stroke(x1, x2, color, yy = y) { + ctx.beginPath(); + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + ctx.setLineWidth(3); + ctx.moveTo(x1 + note.getXShift(), yy); + ctx.lineTo(x2 + note.getXShift(), yy); + ctx.stroke(); + } + stroke(xStart, xPre1, 'red'); + stroke(xPre1, xAbs, '#999'); + stroke(xAbs, xPost1, 'green'); + stroke(xPost1, xPost2, '#999'); + stroke(xPost2, xEnd, 'red'); + stroke(xEnd, xFreedomRight, '#DD0'); + stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift + (0,_rendercontext__WEBPACK_IMPORTED_MODULE_1__.drawDot)(ctx, xAbs + note.getXShift(), y, 'blue'); + const formatterMetrics = note.getFormatterMetrics(); + if (formatterMetrics.iterations > 0) { + const spaceDeviation = formatterMetrics.space.deviation; + const prefix = spaceDeviation >= 0 ? '+' : ''; + ctx.setFillStyle('red'); + ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10); + } + ctx.restore(); + } + static parseDuration(durationString) { + if (!durationString) { + return undefined; + } + const regexp = /(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/; + const result = regexp.exec(durationString); + if (!result) { + return undefined; + } + const duration = result[1]; + const dots = result[2].length; + const type = result[3] || 'n'; + return { duration, dots, type }; + } + static parseNoteStruct(noteStruct) { + // Preserve backwards-compatibility + const durationProps = Note.parseDuration(noteStruct.duration); + if (!durationProps) { + return undefined; + } + // If specified type is invalid, return undefined. + let type = noteStruct.type; + if (type && !_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.validTypes[type]) { + return undefined; + } + // If no type specified, check duration or custom types + const customTypes = []; + if (!type) { + type = durationProps.type || 'n'; + // If we have keys, try and check if we've got a custom glyph + if (noteStruct.keys !== undefined) { + noteStruct.keys.forEach((k, i) => { + const result = k.split('/'); + // We have a custom glyph specified after the note eg. /X2 + customTypes[i] = (result && result.length === 3 ? result[2] : type); + }); + } + } + // Calculate the tick duration of the note + let ticks = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.durationToTicks(durationProps.duration); + if (!ticks) { + return undefined; + } + // Are there any dots? + const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots; + if (typeof dots !== 'number') { + return undefined; + } + // Add ticks as necessary depending on the numbr of dots + let currentTicks = ticks; + for (let i = 0; i < dots; i++) { + if (currentTicks <= 1) + return undefined; + currentTicks = currentTicks / 2; + ticks += currentTicks; + } + return { + duration: durationProps.duration, + type, + customTypes, + dots, + ticks, + }; + } + /** + * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for + * positioning and layout. + * + * @param noteStruct To create a new note you need to provide a `noteStruct`. + */ + constructor(noteStruct) { + super(); + if (!noteStruct) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.'); + } + /** Parses `noteStruct` and get note properties. */ + const parsedNoteStruct = Note.parseNoteStruct(noteStruct); + if (!parsedNoteStruct) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`); + } + // Set note properties from parameters. + this.keys = noteStruct.keys || []; + // per-pitch properties + this.keyProps = []; + this.duration = parsedNoteStruct.duration; + this.noteType = parsedNoteStruct.type; + this.customTypes = parsedNoteStruct.customTypes; + if (noteStruct.duration_override) { + // Custom duration + this.setDuration(noteStruct.duration_override); + } + else { + // Default duration + this.setIntrinsicTicks(parsedNoteStruct.ticks); + } + this.modifiers = []; + // Get the glyph code for this note from the font. + this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, this.noteType); + this.customGlyphs = this.customTypes.map((t) => _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, t)); + // Note to play for audio players. + this.playNote = undefined; + // Positioning contexts used by the Formatter. + this.ignore_ticks = false; + // Positioning variables + this.width = 0; // Width in pixels calculated after preFormat + this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head + this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head + this.x_shift = 0; // X shift from tick context X + this.ys = []; // list of y coordinates for each note + // we need to hold on to these for ties and beams. + if (noteStruct.align_center) { + this.setCenterAlignment(noteStruct.align_center); + } + // The render surface. + this.render_options = { + annotation_spacing: 5, + glyph_font_scale: 1, + stroke_px: 1, + scale: 1, + font: '', + y_shift: 0, + }; + } + /** + * Get the play note, which is arbitrary data that can be used by an + * audio player. + */ + getPlayNote() { + return this.playNote; + } + /** + * Set the play note, which is arbitrary data that can be used by an + * audio player. + */ + setPlayNote(note) { + this.playNote = note; + return this; + } + /** + * @returns true if this note is a type of rest. + * + * Rests don't have pitches, but take up space in the score. + * Subclasses should override this default implementation. + */ + isRest() { + return false; + } + /** Add stroke. */ + addStroke(index, stroke) { + stroke.setNote(this); + stroke.setIndex(index); + this.modifiers.push(stroke); + this.preFormatted = false; + return this; + } + /** Get the target stave. */ + getStave() { + return this.stave; + } + /** Check and get the target stave. */ + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + /** Set the target stave. */ + setStave(stave) { + this.stave = stave; + this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed. + this.setContext(this.stave.getContext()); + return this; + } + /** Get spacing to the left of the notes. */ + getLeftDisplacedHeadPx() { + return this.leftDisplacedHeadPx; + } + /** Get spacing to the right of the notes. */ + getRightDisplacedHeadPx() { + return this.rightDisplacedHeadPx; + } + /** Set spacing to the left of the notes. */ + setLeftDisplacedHeadPx(x) { + this.leftDisplacedHeadPx = x; + return this; + } + /** Set spacing to the right of the notes. */ + setRightDisplacedHeadPx(x) { + this.rightDisplacedHeadPx = x; + return this; + } + /** True if this note has no duration (e.g., bar notes, spacers, etc.). */ + shouldIgnoreTicks() { + return this.ignore_ticks; + } + /** Get the stave line number for the note. */ + // eslint-disable-next-line + getLineNumber(isTopNote) { + return 0; + } + /** Get the stave line number for rest. */ + getLineForRest() { + return 0; + } + /** + * @deprecated Use `getGlyphProps()` instead. + */ + // eslint-disable-next-line + getGlyph() { + return this.glyphProps; + } + /** Get the glyph associated with this note. */ + getGlyphProps() { + return this.glyphProps; + } + /** Get the glyph width. */ + getGlyphWidth() { + return this.glyphProps.getWidth(this.render_options.glyph_font_scale); + } + /** + * Set Y positions for this note. Each Y value is associated with + * an individual pitch/key within the note/chord. + */ + setYs(ys) { + this.ys = ys; + return this; + } + /** + * Get Y positions for this note. Each Y value is associated with + * an individual pitch/key within the note/chord. + */ + getYs() { + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoYValues', 'No Y-values calculated for this note.'); + } + return this.ys; + } + /** + * Get the Y position of the space above the stave onto which text can + * be rendered. + */ + getYForTopText(text_line) { + return this.checkStave().getYForTopText(text_line); + } + /** Return the voice that this note belongs in. */ + getVoice() { + if (!this.voice) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoVoice', 'Note has no voice.'); + return this.voice; + } + /** Attach this note to `voice`. */ + setVoice(voice) { + this.voice = voice; + this.preFormatted = false; + return this; + } + /** Get the `TickContext` for this note. */ + getTickContext() { + return this.checkTickContext(); + } + /** Set the `TickContext` for this note. */ + setTickContext(tc) { + this.tickContext = tc; + this.preFormatted = false; + return this; + } + /** Accessor to duration. */ + getDuration() { + return this.duration; + } + /** Accessor to isDotted. */ + isDotted() { + return this.getModifiersByType(_typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Dot).length > 0; + } + /** Accessor to hasStem. */ + hasStem() { + return false; + } + /** Accessor to note type. */ + getNoteType() { + return this.noteType; + } + /** Get the beam. */ + getBeam() { + return this.beam; + } + /** Check and get the beam. */ + checkBeam() { + return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.beam, 'NoBeam', 'No beam attached to instance'); + } + /** Check it has a beam. */ + hasBeam() { + return this.beam != undefined; + } + /** Set the beam. */ + setBeam(beam) { + this.beam = beam; + return this; + } + /** + * Attach a modifier to this note. + * @param modifier the Modifier to add. + * @param index of the key to modify. + * @returns this + */ + addModifier(modifier, index = 0) { + const signature = 'Note.addModifier(modifier: Modifier, index: number=0)'; + // Backwards compatibility with 3.0.9. + if (typeof index === 'string') { + index = parseInt(index); + // eslint-disable-next-line + console.warn(signature + ' expected a number for `index`, but received a string.'); + } + // Some versions of VexFlow had the two parameters reversed. + // Check here and throw an error if the argument types are not correct. + if (typeof modifier !== 'object' || typeof index !== 'number') { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.'); + } + modifier.setNote(this); + modifier.setIndex(index); + super.addModifier(modifier); + return this; + } + /** Get all modifiers of a specific type in `this.modifiers`. */ + getModifiersByType(type) { + return this.modifiers.filter((modifier) => modifier.getCategory() === type); + } + /** Get the coordinates for where modifiers begin. */ + // eslint-disable-next-line + getModifierStartXY(position, index, options) { + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); + } + return { + x: this.getAbsoluteX(), + y: this.ys[0], + }; + } + getRightParenthesisPx(index) { + const props = this.getKeyProps()[index]; + return props.displaced ? this.getRightDisplacedHeadPx() : 0; + } + getLeftParenthesisPx(index) { + const props = this.getKeyProps()[index]; + return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift; + } + getFirstDotPx() { + let px = this.getRightDisplacedHeadPx(); + if (this.checkModifierContext().getMembers('Parenthesis').length !== 0) + px += _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width'); + return px; + } + /** Get the metrics for this note. */ + getMetrics() { + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', "Can't call getMetrics on an unformatted note."); + } + const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0; + const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0; + const width = this.getWidth(); + const glyphWidth = this.getGlyphWidth(); + const notePx = width - + modLeftPx - // subtract left modifiers + modRightPx - // subtract right modifiers + this.leftDisplacedHeadPx - // subtract left displaced head + this.rightDisplacedHeadPx; // subtract right displaced head + // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory. + return { + width, + glyphWidth, + notePx, + // Modifier spacing. + modLeftPx, + modRightPx, + // Displaced note head on left or right. + leftDisplacedHeadPx: this.leftDisplacedHeadPx, + rightDisplacedHeadPx: this.rightDisplacedHeadPx, + glyphPx: 0, + }; + } + /** + * Get the absolute `X` position of this note's tick context. This + * excludes x_shift, so you'll need to factor it in if you're + * looking for the post-formatted x-position. + */ + getAbsoluteX() { + const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`); + // Position note to left edge of tick context. + let x = tickContext.getX(); + if (this.stave) { + x += this.stave.getNoteStartX() + _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('stave.padding'); + } + if (this.isCenterAligned()) { + x += this.getCenterXShift(); + } + return x; + } + /** Get point for notes. */ + static getPoint(size) { + // for sizes other than 'default', note is 2/3 of the default value + return size == 'default' ? _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE : (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE / 5) * 3; + } + /** Get the direction of the stem. */ + getStemDirection() { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); + } + /** Get the top and bottom `y` values of the stem. */ + getStemExtents() { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); + } + /** Get the `x` coordinate to the right of the note. */ + getTieRightX() { + let tieStartX = this.getAbsoluteX(); + const note_glyph_width = this.glyphProps.getWidth(); + tieStartX += note_glyph_width / 2; + tieStartX += -this.width / 2 + this.width + 2; + return tieStartX; + } + /** Get the `x` coordinate to the left of the note. */ + getTieLeftX() { + let tieEndX = this.getAbsoluteX(); + const note_glyph_width = this.glyphProps.getWidth(); + tieEndX += note_glyph_width / 2; + tieEndX -= this.width / 2 + 2; + return tieEndX; + } + // Get the pitches in the note + getKeys() { + return this.keys; + } + // Get the properties for all the keys in the note + getKeyProps() { + return this.keyProps; + } +} + + +/***/ }), + +/***/ "./src/notehead.ts": +/*!*************************!*\ + !*** ./src/notehead.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "NoteHead": () => (/* binding */ NoteHead) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +// eslint-disable-next-line +function L(...args) { + if (NoteHead.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.NoteHead', args); +} +/** + * Draw slashnote head manually. No glyph exists for this. + * @param ctx the Canvas context + * @param duration the duration of the note. ex: "4" + * @param x the x coordinate to draw at + * @param y the y coordinate to draw at + * @param stem_direction the direction of the stem + */ +function drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) { + const width = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.SLASH_NOTEHEAD_WIDTH; + ctx.save(); + ctx.setLineWidth(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH); + let fill = false; + if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToNumber(duration) > 2) { + fill = true; + } + if (!fill) + x -= (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH / 2) * stem_direction; + ctx.beginPath(); + ctx.moveTo(x, y + staveSpace); + ctx.lineTo(x, y + 1); + ctx.lineTo(x + width, y - staveSpace); + ctx.lineTo(x + width, y); + ctx.lineTo(x, y + staveSpace); + ctx.closePath(); + if (fill) { + ctx.fill(); + } + else { + ctx.stroke(); + } + if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToFraction(duration).equals(0.5)) { + const breve_lines = [-3, -1, width + 1, width + 3]; + for (let i = 0; i < breve_lines.length; i++) { + ctx.beginPath(); + ctx.moveTo(x + breve_lines[i], y - 10); + ctx.lineTo(x + breve_lines[i], y + 11); + ctx.stroke(); + } + } + ctx.restore(); +} +/** + * `NoteHeads` are typically not manipulated + * directly, but used internally in `StaveNote`. + * + * See `tests/notehead_tests.ts` for usage examples. + */ +class NoteHead extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.NoteHead; + } + constructor(noteStruct) { + super(noteStruct); + this.custom_glyph = false; + this.stem_up_x_offset = 0; + this.stem_down_x_offset = 0; + this.index = noteStruct.index; + this.x = noteStruct.x || 0; + this.y = noteStruct.y || 0; + if (noteStruct.note_type) + this.noteType = noteStruct.note_type; + this.displaced = noteStruct.displaced || false; + this.stem_direction = noteStruct.stem_direction || _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP; + this.line = noteStruct.line || 0; + // Get glyph code based on duration and note type. This could be + // regular notes, rests, or other custom codes. + this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.getGlyphProps(this.duration, this.noteType); + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); + // Swap out the glyph with ledger lines + if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) { + this.glyphProps.code_head = this.glyphProps.ledger_code_head; + } + this.glyph_code = this.glyphProps.code_head; + this.x_shift = noteStruct.x_shift || 0; + if (noteStruct.custom_glyph_code) { + this.custom_glyph = true; + this.glyph_code = noteStruct.custom_glyph_code; + this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0; + this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0; + } + this.setStyle(noteStruct.style); + this.slashed = noteStruct.slashed || false; + this.render_options = Object.assign(Object.assign({}, this.render_options), { + // font size for note heads + glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE }); + this.setWidth(this.custom_glyph && + !this.glyph_code.startsWith('noteheadSlashed') && + !this.glyph_code.startsWith('noteheadCircled') + ? _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale) + : this.glyphProps.getWidth(this.render_options.glyph_font_scale)); + } + /** Get the width of the notehead. */ + getWidth() { + return this.width; + } + /** Determine if the notehead is displaced. */ + isDisplaced() { + return this.displaced === true; + } + /** Set the X coordinate. */ + setX(x) { + this.x = x; + return this; + } + /** Get the Y coordinate. */ + getY() { + return this.y; + } + /** Set the Y coordinate. */ + setY(y) { + this.y = y; + return this; + } + /** Get the stave line the notehead is placed on. */ + getLine() { + return this.line; + } + /** Set the stave line the notehead is placed on. */ + setLine(line) { + this.line = line; + return this; + } + /** Get the canvas `x` coordinate position of the notehead. */ + getAbsoluteX() { + // If the note has not been preformatted, then get the static x value + // Otherwise, it's been formatted and we should use it's x value relative + // to its tick context + const x = !this.preFormatted ? this.x : super.getAbsoluteX(); + // For a more natural displaced notehead, we adjust the displacement amount + // by half the stem width in order to maintain a slight overlap with the stem + const displacementStemAdjustment = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); + const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction; + const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction; + return (x + + fontShift + + (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0)); + } + /** Get the `BoundingBox` for the `NoteHead`. */ + getBoundingBox() { + const spacing = this.checkStave().getSpacingBetweenLines(); + const half_spacing = spacing / 2; + const min_y = this.y - half_spacing; + return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing); + } + /** Set notehead to a provided `stave`. */ + setStave(stave) { + const line = this.getLine(); + this.stave = stave; + if (this.stave) { + this.setY(this.stave.getYForNote(line)); + this.setContext(this.stave.getContext()); + } + return this; + } + /** Pre-render formatting. */ + preFormat() { + if (this.preFormatted) + return this; + const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx; + this.setWidth(width); + this.preFormatted = true; + return this; + } + /** Draw the notehead. */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + let head_x = this.getAbsoluteX(); + if (this.custom_glyph) { + // head_x += this.x_shift; + head_x += + this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP + ? this.stem_up_x_offset + + (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0) + : this.stem_down_x_offset; + } + const y = this.y; + L("Drawing note head '", this.noteType, this.duration, "' at", head_x, y); + // Begin and end positions for head. + const stem_direction = this.stem_direction; + const glyph_font_scale = this.render_options.glyph_font_scale; + const categorySuffix = `${this.glyph_code}Stem${stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? 'Up' : 'Down'}`; + if (this.noteType === 's') { + const staveSpace = this.checkStave().getSpacingBetweenLines(); + drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace); + } + else { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, { + category: `noteHead.${categorySuffix}`, + }); + } + } +} +/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */ +NoteHead.DEBUG = false; + + + +/***/ }), + +/***/ "./src/notesubgroup.ts": +/*!*****************************!*\ + !*** ./src/notesubgroup.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "NoteSubGroup": () => (/* binding */ NoteSubGroup) +/* harmony export */ }); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Taehoon Moon 2016 +// +// ## Description +// +// This file implements `NoteSubGroup` which is used to format and +// render notes as a `Modifier` +// ex) ClefNote, TimeSigNote and BarNote. + + + + + +class NoteSubGroup extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.NoteSubGroup; + } + // Arrange groups inside a `ModifierContext` + static format(groups, state) { + if (!groups || groups.length === 0) + return false; + let width = 0; + for (let i = 0; i < groups.length; ++i) { + const group = groups[i]; + group.preFormat(); + width += group.getWidth(); + } + state.left_shift += width; + return true; + } + constructor(subNotes) { + super(); + this.preFormatted = false; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; + this.subNotes = subNotes; + this.subNotes.forEach((subNote) => { + subNote.setIgnoreTicks(false); + }); + this.width = 0; + this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_0__.Formatter(); + this.voice = new _voice__WEBPACK_IMPORTED_MODULE_4__.Voice({ + num_beats: 4, + beat_value: 4, + resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION, + }).setStrict(false); + this.voice.addTickables(this.subNotes); + } + preFormat() { + if (this.preFormatted) + return; + this.formatter.joinVoices([this.voice]).format([this.voice], 0); + this.setWidth(this.formatter.getMinTotalWidth()); + this.preFormatted = true; + } + setWidth(width) { + this.width = width; + return this; + } + getWidth() { + return this.width; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + this.alignSubNotesWithNote(this.subNotes, note); // Modifier function + this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle()); + } +} + + +/***/ }), + +/***/ "./src/ornament.ts": +/*!*************************!*\ + !*** ./src/ornament.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Ornament": () => (/* binding */ Ornament) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Cyril Silverman +// MIT License + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Ornament.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.Ornament', args); +} +/** + * Ornament implements ornaments as modifiers that can be + * attached to notes. The complete list of ornaments is available in + * `tables.ts` under `Vex.Flow.ornamentCodes`. + * + * See `tests/ornament_tests.ts` for usage examples. + */ +class Ornament extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + /** Ornaments category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Ornament; + } + static get minPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + /** Arrange ornaments inside `ModifierContext` */ + static format(ornaments, state) { + if (!ornaments || ornaments.length === 0) + return false; + let width = 0; // width is used by ornaments, which are always centered on the note head + let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately + let left_shift = state.left_shift; + let yOffset = 0; + for (let i = 0; i < ornaments.length; ++i) { + const ornament = ornaments[i]; + const increment = 2; + if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) { + ornament.x_shift += right_shift + 2; + } + if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) { + ornament.x_shift -= left_shift + 2; + } + if (ornament.reportedWidth && ornament.x_shift < 0) { + left_shift += ornament.reportedWidth; + } + else if (ornament.reportedWidth && ornament.x_shift >= 0) { + right_shift += ornament.reportedWidth + Ornament.minPadding; + } + else { + width = Math.max(ornament.getWidth(), width); + } + // articulations above/below the line can be stacked. + if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) { + // Unfortunately we don't know the stem direction. So we base it + // on the line number, but also allow it to be overridden. + const ornamentNote = (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(ornament.note, 'NoAttachedNote'); + if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) { + state.top_text_line += increment; + ornament.y_shift += yOffset; + yOffset -= ornament.glyph.bbox.getH(); + } + else { + state.text_line += increment; + ornament.y_shift += yOffset; + yOffset += ornament.glyph.bbox.getH(); + } + } + else { + if (ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) { + ornament.setTextLine(state.top_text_line); + state.top_text_line += increment; + } + else { + ornament.setTextLine(state.text_line); + state.text_line += increment; + } + } + } + // Note: 'legit' ornaments don't consider other modifiers when calculating their + // X position, but jazz ornaments sometimes need to. + state.left_shift = left_shift + width / 2; + state.right_shift = right_shift + width / 2; + return true; + } + /** + * ornamentNoteTransition means the jazz ornament represents an effect from one note to another, + * these are generally on the top of the staff. + */ + static get ornamentNoteTransition() { + return ['flip', 'jazzTurn', 'smear']; + } + /** + * ornamentAttack indicates something that happens in the attach, placed before the note and + * any accidentals + */ + static get ornamentAttack() { + return ['scoop']; + } + /** + * The ornament is aligned based on the note head, but without regard to whether the + * stem goes up or down. + */ + static get ornamentAlignWithNoteHead() { + return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop']; + } + /** + * An ornament that happens on the release of the note, generally placed after the + * note and overlapping the next beat/measure.. + */ + static get ornamentRelease() { + return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip']; + } + /** ornamentArticulation goes above/below the note based on space availablity */ + static get ornamentArticulation() { + return ['bend', 'plungerClosed', 'plungerOpen']; + } + /** + * Legacy ornaments have hard-coded metrics. If additional ornament types are + * added, get their metrics here. + */ + getMetrics() { + const ornamentMetrics = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().ornament; + if (!ornamentMetrics) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadMetrics', `ornament missing`); + return ornamentMetrics[this.ornament.code]; + } + /** + * Create a new ornament of type `type`, which is an entry in + * `Vex.Flow.ornamentCodes` in `tables.ts`. + */ + constructor(type) { + super(); + this.type = type; + this.delayed = false; + this.render_options = { + font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, + accidentalLowerPadding: 3, + accidentalUpperPadding: 3, + }; + this.ornament = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.ornamentCodes(this.type); + // new ornaments have their origin at the origin, and have more specific + // metrics. Legacy ornaments do some + // x scaling, and have hard-coded metrics + const metrics = this.getMetrics(); + // some jazz ornaments are above or below depending on stem direction. + this.adjustForStemDirection = false; + // some jazz ornaments like falls are supposed to overlap with future bars + // and so we report a different width than they actually take up. + this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0; + this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0; + this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0; + if (!this.ornament) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`); + } + this.x_shift = metrics ? metrics.xOffset : 0; + this.y_shift = metrics ? metrics.yOffset : 0; + this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.ornament.code, this.render_options.font_scale, { + category: `ornament.${this.ornament.code}`, + }); + // Is this a jazz ornament that goes between this note and the next note. + if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) { + this.delayed = true; + } + // Legacy ornaments need this. I don't know why, but horizontal spacing issues + // happen if I don't set it. + if (!metrics) { + this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift + } + } + /** Set whether the ornament is to be delayed. */ + setDelayed(delayed) { + this.delayed = delayed; + return this; + } + /** Set the upper accidental for the ornament. */ + setUpperAccidental(accid) { + const scale = this.render_options.font_scale / 1.3; + this.accidentalUpper = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale); + this.accidentalUpper.setOrigin(0.5, 1.0); + return this; + } + /** Set the lower accidental for the ornament. */ + setLowerAccidental(accid) { + const scale = this.render_options.font_scale / 1.3; + this.accidentalLower = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale); + this.accidentalLower.setOrigin(0.5, 1.0); + return this; + } + /** Render ornament in position next to note. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const stemDir = note.getStemDirection(); + const stave = note.checkStave(); + this.applyStyle(); + ctx.openGroup('ornament', this.getAttribute('id')); + // Get stem extents + const stemExtents = note.checkStem().getExtents(); + let y = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? stemExtents.baseY : stemExtents.topY; + // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) { + if (note.hasStem()) { + if (stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + y = stave.getYForTopText(this.text_line); + } + } + else { + // Without a stem + y = stave.getYForTopText(this.text_line); + } + } + const isPlacedOnNoteheadSide = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN; + const spacing = stave.getSpacingBetweenLines(); + let lineSpacing = 1; + // Beamed stems are longer than quarter note stems, adjust accordingly + if (!isPlacedOnNoteheadSide && note.hasBeam()) { + lineSpacing += 0.5; + } + const totalSpacing = spacing * (this.text_line + lineSpacing); + const glyphYBetweenLines = y - totalSpacing; + // Get initial coordinates for the modifier position + const start = note.getModifierStartXY(this.position, this.index); + let glyphX = start.x; + // If the ornament is aligned with the note head, don't consider the stave y + // but use the 'natural' modifier y + let glyphY = this.ornamentAlignWithNoteHead + ? start.y + : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines); + glyphY += this.y_shift; + // Ajdust x position if ornament is delayed + if (this.delayed) { + let delayXShift = 0; + const startX = glyphX - stave.getNoteStartX(); + if (this.delayXShift !== undefined) { + delayXShift = this.delayXShift; + } + else { + delayXShift += this.glyph.getMetrics().width / 2; + const tickables = note.getVoice().getTickables(); + const index = tickables.indexOf(note); + const nextContext = index + 1 < tickables.length ? tickables[index + 1].checkTickContext() : undefined; + if (nextContext) { + delayXShift += (nextContext.getX() - startX) * 0.5; + } + else { + delayXShift += (stave.getX() + stave.getWidth() - glyphX) * 0.5; + } + this.delayXShift = delayXShift; + } + glyphX += delayXShift; + } + L('Rendering ornament: ', this.ornament, glyphX, glyphY); + if (this.accidentalLower) { + this.accidentalLower.render(ctx, glyphX, glyphY); + glyphY -= this.accidentalLower.getMetrics().height; + glyphY -= this.render_options.accidentalLowerPadding; + } + if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) { + glyphY += this.stemUpYOffset; + } + if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) { + glyphY = note.checkStave().getBoundingBox().getY() + 40; + } + this.glyph.render(ctx, glyphX + this.x_shift, glyphY); + if (this.accidentalUpper) { + glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding; + this.accidentalUpper.render(ctx, glyphX, glyphY); + } + ctx.closeGroup(); + this.restoreStyle(); + } +} +/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */ +Ornament.DEBUG = false; + + + +/***/ }), + +/***/ "./src/parenthesis.ts": +/*!****************************!*\ + !*** ./src/parenthesis.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Parenthesis": () => (/* binding */ Parenthesis) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Rodrigo Vilar +// MIT License + + + + + +/** Parenthesis implements parenthesis modifiers for notes. */ +class Parenthesis extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Parenthesis; + } + /** Add parentheses to the notes. */ + static buildAndAttach(notes) { + for (const note of notes) { + for (let i = 0; i < note.keys.length; i++) { + note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT), i); + note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT), i); + } + } + } + /** Arrange parentheses inside a ModifierContext. */ + static format(parentheses, state) { + if (!parentheses || parentheses.length === 0) + return false; + let x_widthL = 0; + let x_widthR = 0; + for (let i = 0; i < parentheses.length; ++i) { + const parenthesis = parentheses[i]; + const note = parenthesis.getNote(); + const pos = parenthesis.getPosition(); + const index = parenthesis.checkIndex(); + let shift = 0; + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT) { + shift = note.getRightParenthesisPx(index); + x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width; + } + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT) { + shift = note.getLeftParenthesisPx(index); + x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width; + } + parenthesis.setXShift(shift); + } + state.left_shift += x_widthL; + state.right_shift += x_widthR; + return true; + } + /** + * Constructor + * + * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT + */ + constructor(position) { + var _a; + super(); + this.position = position !== null && position !== void 0 ? position : _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; + this.point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('default'); + this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width')); + } + /** Set the associated note. */ + setNote(note) { + var _a, _b; + this.note = note; + this.point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('default'); + this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width')); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isGraceNote)(note)) { + this.point = (_b = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('gracenote'); + this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width')); + } + return this; + } + /** Render the parenthesis. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true }); + const x = start.x + this.x_shift; + const y = start.y + this.y_shift; + if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) { + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', { + category: `noteHead.standard.noteheadParenthesisRight`, + }); + } + else if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', { + category: `noteHead.standard.noteheadParenthesisLeft`, + }); + } + } +} + + +/***/ }), + +/***/ "./src/parser.ts": +/*!***********************!*\ + !*** ./src/parser.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Parser": () => (/* binding */ Parser) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// A generic text parsing class for VexFlow. + +// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (Parser.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_0__.log)('Vex.Flow.Parser', args); +} +const NO_ERROR_POS = -1; +// Converts parser results into an easy to reference list that can be +// used in triggers. This function returns: +// - nested array in which the leaf elements are string or null +// - string (including empty strings) +// - null +function flattenMatches(r) { + if ('matchedString' in r) + return r.matchedString; // string + if ('results' in r) + return flattenMatches(r.results); + const results = r; + if (results.length === 1) + return flattenMatches(results[0]); + if (results.length === 0) + return null; + return results.map(flattenMatches); // nested array +} +// This is the base parser class. Given an arbitrary context-free grammar, it +// can parse any line and execute code when specific rules are met (e.g., +// when a string is terminated.) +class Parser { + // For an example of a simple grammar, take a look at tests/parser_tests.ts or + // the EasyScore grammar in easyscore.ts. + constructor(grammar) { + this.grammar = grammar; + this.line = ''; + this.pos = 0; + this.errorPos = NO_ERROR_POS; + } + // Parse `line` using current grammar. Returns `{success: true}` if the + // line parsed correctly, otherwise returns `{success: false, errorPos: N}` + // where `errorPos` is the location of the error in the string. + parse(line) { + this.line = line; + this.pos = 0; + this.errorPos = NO_ERROR_POS; + const result = this.expect(this.grammar.begin()); + result.errorPos = this.errorPos; + return result; + } + matchFail(returnPos) { + if (this.errorPos === NO_ERROR_POS) + this.errorPos = this.pos; + this.pos = returnPos; + } + matchSuccess() { + this.errorPos = NO_ERROR_POS; + } + // Look for `token` in this.line[this.pos], and return success + // if one is found. `token` is specified as a regular expression. + matchToken(token, noSpace = false) { + const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\s*)'); + const workingLine = this.line.slice(this.pos); + const result = workingLine.match(regexp); + if (result !== null) { + return { + success: true, + matchedString: result[2], + incrementPos: result[1].length, + pos: this.pos, + }; + } + else { + return { success: false, pos: this.pos }; + } + } + // Execute rule to match a sequence of tokens (or rules). If `maybe` is + // set, then return success even if the token is not found, but reset + // the position before exiting. + // TODO: expectOne(...) is never called with the `maybe` parameter. + expectOne(rule, maybe = false) { + const results = []; + const pos = this.pos; + let allMatches = true; + let oneMatch = false; + maybe = maybe === true || rule.maybe === true; + // Execute all sub rules in sequence. + if (rule.expect) { + for (const next of rule.expect) { + const localPos = this.pos; + const result = this.expect(next); + // If `rule.or` is set, then return success if any one + // of the subrules match, else all subrules must match. + if (result.success) { + results.push(result); + oneMatch = true; + if (rule.or) + break; + } + else { + allMatches = false; + if (!rule.or) { + this.pos = localPos; + break; + } + } + } + } + const gotOne = (rule.or && oneMatch) || allMatches; + const success = gotOne || maybe === true; + const numMatches = gotOne ? 1 : 0; + if (maybe && !gotOne) + this.pos = pos; + if (success) { + this.matchSuccess(); + } + else { + this.matchFail(pos); + } + return { success, results, numMatches }; + } + // Try to match multiple (one or more) instances of the rule. If `maybe` is set, + // then a failed match is also a success (but the position is reset). + expectOneOrMore(rule, maybe = false) { + const results = []; + const pos = this.pos; + let numMatches = 0; + let more = true; + do { + const result = this.expectOne(rule); + if (result.success && result.results) { + numMatches++; + results.push(result.results); + } + else { + more = false; + } + } while (more); + const success = numMatches > 0 || maybe === true; + if (maybe && !(numMatches > 0)) + this.pos = pos; + if (success) { + this.matchSuccess(); + } + else { + this.matchFail(pos); + } + return { success, results, numMatches }; + } + // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`. + expectZeroOrMore(rule) { + return this.expectOneOrMore(rule, true); + } + // Execute the rule produced by the provided `rules` function. This + // offloads to one of the above matchers and consolidates the results. It is also + // responsible for executing any code triggered by the rule (in `rule.run`.) + expect(ruleFunc) { + L('Evaluating rule function:', ruleFunc); + if (!ruleFunc) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Invalid rule function'); + } + let result; + // Get rule from Grammar class. + // expect(...) handles both lexing & parsing: + // - lexer rules produce tokens. + // - parser rules produce expressions which may trigger code via the + // { run: () => ... } trigger functions in easyscore.ts. + // These functions build the VexFlow objects that are displayed on screen. + const rule = ruleFunc.bind(this.grammar)(); + if (rule.token) { + // A lexer rule has a `token` property. + // Base case: parse the regex and throw an error if the + // line doesn't match. + result = this.matchToken(rule.token, rule.noSpace === true); + if (result.success) { + // Token match! Update position and throw away parsed portion + // of string. + this.pos += result.incrementPos; + } + } + else if (rule.expect) { + // A parser rule has an `expect` property. + if (rule.oneOrMore) { + result = this.expectOneOrMore(rule); + } + else if (rule.zeroOrMore) { + result = this.expectZeroOrMore(rule); + } + else { + result = this.expectOne(rule); + } + } + else { + L(rule); + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Bad grammar! No `token` or `expect` property ' + rule); + } + // If there's a trigger attached to this rule, then run it. + // Make the matches accessible through `state.matches` in the + // `run: (state) => ...` trigger. + const matches = []; + result.matches = matches; + if (result.results) { + result.results.forEach((r) => matches.push(flattenMatches(r))); + } + if (rule.run && result.success) { + rule.run({ matches }); + } + return result; + } +} +Parser.DEBUG = false; + + + +/***/ }), + +/***/ "./src/pedalmarking.ts": +/*!*****************************!*\ + !*** ./src/pedalmarking.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PedalMarking": () => (/* binding */ PedalMarking) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +// eslint-disable-next-line +function L(...args) { + if (PedalMarking.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.PedalMarking', args); +} +/** + * Draws a pedal glyph with the provided `name` on a rendering `context` + * at the coordinates `x` and `y. Takes into account the glyph data + * coordinate shifts. + */ +function drawPedalGlyph(name, context, x, y, point) { + const glyph_data = PedalMarking.GLYPHS[name]; + const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph(glyph_data.code, point, { category: 'pedalMarking' }); + // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2) + glyph.render(context, x - (glyph.getMetrics().width - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE) / 2, y); +} +/** + * PedalMarking implements different types of pedal markings. These notation + * elements indicate to the performer when to depress and release the a pedal. + * + * In order to create "Sostenuto", and "una corda" markings, you must set + * custom text for the release/depress pedal markings. + */ +class PedalMarking extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.PedalMarking; + } + /** + * Create a sustain pedal marking. Returns the defaults PedalMarking. + * Which uses the traditional "Ped" and "*"" markings. + */ + static createSustain(notes) { + const pedal = new PedalMarking(notes); + return pedal; + } + /** Create a sostenuto pedal marking */ + static createSostenuto(notes) { + const pedal = new PedalMarking(notes); + pedal.setType(PedalMarking.type.MIXED); + pedal.setCustomText('Sost. Ped.'); + return pedal; + } + /** Create an una corda pedal marking */ + static createUnaCorda(notes) { + const pedal = new PedalMarking(notes); + pedal.setType(PedalMarking.type.TEXT); + pedal.setCustomText('una corda', 'tre corda'); + return pedal; + } + constructor(notes) { + super(); + this.notes = notes; + this.type = PedalMarking.type.TEXT; + this.line = 0; + // Custom text for the release/depress markings + this.custom_depress_text = ''; + this.custom_release_text = ''; + this.resetFont(); + this.render_options = { + bracket_height: 10, + text_margin_right: 6, + bracket_line_width: 1, + color: 'black', + }; + } + /** Set pedal type. */ + setType(type) { + type = typeof type === 'string' ? PedalMarking.typeString[type] : type; + if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) { + this.type = type; + } + return this; + } + /** + * Set custom text for the `depress`/`release` pedal markings. No text is + * set if the parameter is falsy. + */ + setCustomText(depress, release) { + this.custom_depress_text = depress || ''; + this.custom_release_text = release || ''; + return this; + } + /** Set the staff line to render the markings on. */ + setLine(line) { + this.line = line; + return this; + } + /** Draw the bracket based pedal markings. */ + drawBracketed() { + const ctx = this.checkContext(); + let is_pedal_depressed = false; + let prev_x; + let prev_y; + // Iterate through each note + this.notes.forEach((note, index, notes) => { + var _a; + // Each note triggers the opposite pedal action + is_pedal_depressed = !is_pedal_depressed; + // Get the initial coordinates for the note + const x = note.getAbsoluteX(); + const y = note.checkStave().getYForBottomText(this.line + 3); + // Throw if current note is positioned before the previous note + if (x < prev_x) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions'); + } + // Determine if the previous or next note are the same + // as the current note. We need to keep track of this for + // when adjustments are made for the release+depress action + const next_is_same = notes[index + 1] === note; + const prev_is_same = notes[index - 1] === note; + let x_shift = 0; + const point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE; + if (is_pedal_depressed) { + // Adjustment for release+depress + x_shift = prev_is_same ? 5 : 0; + if (this.type === PedalMarking.type.MIXED && !prev_is_same) { + // For MIXED style, start with text instead of bracket + if (this.custom_depress_text) { + // If we have custom text, use instead of the default "Ped" glyph + const text_width = ctx.measureText(this.custom_depress_text).width; + ctx.fillText(this.custom_depress_text, x - text_width / 2, y); + x_shift = text_width / 2 + this.render_options.text_margin_right; + } + else { + // Render the Ped glyph in position + drawPedalGlyph('pedal_depress', ctx, x, y, point); + x_shift = 20 + this.render_options.text_margin_right; + } + } + else { + // Draw start bracket + ctx.beginPath(); + ctx.moveTo(x, y - this.render_options.bracket_height); + ctx.lineTo(x + x_shift, y); + ctx.stroke(); + ctx.closePath(); + } + } + else { + // Adjustment for release+depress + x_shift = next_is_same ? -5 : 0; + // Draw end bracket + ctx.beginPath(); + ctx.moveTo(prev_x, prev_y); + ctx.lineTo(x + x_shift, y); + ctx.lineTo(x, y - this.render_options.bracket_height); + ctx.stroke(); + ctx.closePath(); + } + // Store previous coordinates + prev_x = x + x_shift; + prev_y = y; + }); + } + /** + * Draw the text based pedal markings. This defaults to the traditional + * "Ped" and "*"" symbols if no custom text has been provided. + */ + drawText() { + const ctx = this.checkContext(); + let is_pedal_depressed = false; + // Iterate through each note, placing glyphs or custom text accordingly + this.notes.forEach((note) => { + var _a; + is_pedal_depressed = !is_pedal_depressed; + const stave = note.checkStave(); + const x = note.getAbsoluteX(); + const y = stave.getYForBottomText(this.line + 3); + const point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE; + let text_width = 0; + if (is_pedal_depressed) { + if (this.custom_depress_text) { + text_width = ctx.measureText(this.custom_depress_text).width; + ctx.fillText(this.custom_depress_text, x - text_width / 2, y); + } + else { + drawPedalGlyph('pedal_depress', ctx, x, y, point); + } + } + else { + if (this.custom_release_text) { + text_width = ctx.measureText(this.custom_release_text).width; + ctx.fillText(this.custom_release_text, x - text_width / 2, y); + } + else { + drawPedalGlyph('pedal_release', ctx, x, y, point); + } + } + }); + } + /** Render the pedal marking in position on the rendering context. */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + ctx.save(); + ctx.setStrokeStyle(this.render_options.color); + ctx.setFillStyle(this.render_options.color); + ctx.setFont(this.textFont); + L('Rendering Pedal Marking'); + if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) { + ctx.setLineWidth(this.render_options.bracket_line_width); + this.drawBracketed(); + } + else if (this.type === PedalMarking.type.TEXT) { + this.drawText(); + } + ctx.restore(); + } +} +/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */ +PedalMarking.DEBUG = false; +PedalMarking.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 12, + weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC, +}; +/** Glyph data */ +PedalMarking.GLYPHS = { + pedal_depress: { + code: 'keyboardPedalPed', + }, + pedal_release: { + code: 'keyboardPedalUp', + }, +}; +/** Pedal type as number. */ +PedalMarking.type = { + TEXT: 1, + BRACKET: 2, + MIXED: 3, +}; +/** Pedal type as string. */ +PedalMarking.typeString = { + text: PedalMarking.type.TEXT, + bracket: PedalMarking.type.BRACKET, + mixed: PedalMarking.type.MIXED, +}; + + + +/***/ }), + +/***/ "./src/registry.ts": +/*!*************************!*\ + !*** ./src/registry.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Registry": () => (/* binding */ Registry) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// @author Mohit Cheppudira +// +// ## Description +// +// This file implements a registry for VexFlow elements. It allows users +// to track, query, and manage some subset of generated elements, and +// dynamically get and set attributes. +// +// There are two ways to register with a registry: +// +// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or, +// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future +// elements will automatically register with it. +// +// Once an element is registered, selected attributes are tracked and indexed by +// the registry. This allows fast look up of elements by attributes like id, type, +// and class. + +// Indexes are represented as maps of maps of maps. This allows +// for both multi-labeling (e.g., an element can have multiple classes) +// and efficient lookup. +class Index { + constructor() { + this.id = {}; + this.type = {}; + this.class = {}; + } +} +class Registry { + static getDefaultRegistry() { + return Registry.defaultRegistry; + } + // If you call `enableDefaultRegistry`, any new elements will auto-register with + // the provided registry as soon as they're constructed. + static enableDefaultRegistry(registry) { + Registry.defaultRegistry = registry; + } + static disableDefaultRegistry() { + Registry.defaultRegistry = undefined; + } + constructor() { + this.index = new Index(); + } + clear() { + this.index = new Index(); + return this; + } + setIndexValue(name, value, id, elem) { + const index = this.index; + if (!index[name][value]) { + index[name][value] = {}; + } + index[name][value][id] = elem; + } + // Updates the indexes for element 'id'. If an element's attribute changes + // from A -> B, make sure to remove the element from A. + updateIndex({ id, name, value, oldValue }) { + const elem = this.getElementById(id); + if (oldValue !== undefined && this.index[name][oldValue]) { + delete this.index[name][oldValue][id]; + } + if (value && elem) { + this.setIndexValue(name, value, elem.getAttribute('id'), elem); + } + } + /** + * Register element `elem` with this registry. + * This adds the element to its index and watches it for attribute changes. + * @param elem + * @param id + * @returns this + */ + register(elem, id) { + id = id || elem.getAttribute('id'); + if (!id) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError("Can't add element without `id` attribute to registry"); + } + // Manually add id to index, then update other indexes. + elem.setAttribute('id', id); + this.setIndexValue('id', id, id, elem); + this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined }); + elem.onRegister(this); + return this; + } + getElementById(id) { + var _a, _b; + return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found. + } + getElementsByAttribute(attribute, value) { + const index_attr = this.index[attribute]; + if (index_attr) { + const index_attr_val = index_attr[value]; + if (index_attr_val) { + const keys = Object.keys(index_attr_val); + return keys.map((k) => index_attr_val[k]); + } + } + return []; + } + getElementsByType(type) { + return this.getElementsByAttribute('type', type); + } + getElementsByClass(className) { + return this.getElementsByAttribute('class', className); + } + // This is called by the element when an attribute value changes. If an indexed + // attribute changes, then update the local index. + onUpdate(info) { + const allowedNames = ['id', 'type', 'class']; + if (allowedNames.includes(info.name)) { + this.updateIndex(info); + } + return this; + } +} + + +/***/ }), + +/***/ "./src/rendercontext.ts": +/*!******************************!*\ + !*** ./src/rendercontext.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RenderContext": () => (/* binding */ RenderContext), +/* harmony export */ "drawDot": () => (/* binding */ drawDot) +/* harmony export */ }); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021. +// MIT License + +class RenderContext { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.RenderContext; + } + set font(f) { + this.setFont(f); + } + get font() { + return this.getFont(); + } + /** + * This is kept for backwards compatibility with 3.0.9. + * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand. + */ + setRawFont(f) { + this.setFont(f); + return this; + } +} +/** + * Draw a tiny dot marker on the specified context. A great debugging aid. + * @param ctx context + * @param x dot x coordinate + * @param y dot y coordinate + * @param color + */ +function drawDot(ctx, x, y, color = '#F55') { + ctx.save(); + ctx.setFillStyle(color); + // draw a circle + ctx.beginPath(); + ctx.arc(x, y, 3, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + ctx.restore(); +} + + +/***/ }), + +/***/ "./src/renderer.ts": +/*!*************************!*\ + !*** ./src/renderer.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Renderer": () => (/* binding */ Renderer), +/* harmony export */ "RendererBackends": () => (/* binding */ RendererBackends), +/* harmony export */ "RendererLineEndType": () => (/* binding */ RendererLineEndType) +/* harmony export */ }); +/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./svgcontext */ "./src/svgcontext.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./web */ "./src/web.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +var RendererBackends; +(function (RendererBackends) { + RendererBackends[RendererBackends["CANVAS"] = 1] = "CANVAS"; + RendererBackends[RendererBackends["SVG"] = 2] = "SVG"; +})(RendererBackends || (RendererBackends = {})); +// End of line types +var RendererLineEndType; +(function (RendererLineEndType) { + RendererLineEndType[RendererLineEndType["NONE"] = 1] = "NONE"; + RendererLineEndType[RendererLineEndType["UP"] = 2] = "UP"; + RendererLineEndType[RendererLineEndType["DOWN"] = 3] = "DOWN"; +})(RendererLineEndType || (RendererLineEndType = {})); +/** + * Support Canvas & SVG rendering contexts. + */ +class Renderer { + static buildContext(elementId, backend, width, height, background = '#FFF') { + const renderer = new Renderer(elementId, backend); + if (width && height) { + renderer.resize(width, height); + } + const ctx = renderer.getContext(); + ctx.setBackgroundFillStyle(background); + Renderer.lastContext = ctx; + return ctx; + } + static getCanvasContext(elementId, width, height, background) { + return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background); + } + static getSVGContext(elementId, width, height, background) { + return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background); + } + // Draw a dashed line (horizontal, vertical or diagonal + // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space. + // setting the second number to 0 draws a solid line. + static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) { + context.beginPath(); + const dx = toX - fromX; + const dy = toY - fromY; + const angle = Math.atan2(dy, dx); + let x = fromX; + let y = fromY; + context.moveTo(fromX, fromY); + let idx = 0; + let draw = true; + while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) { + const dashLength = dashPattern[idx++ % dashPattern.length]; + const nx = x + Math.cos(angle) * dashLength; + x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx); + const ny = y + Math.sin(angle) * dashLength; + y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny); + if (draw) { + context.lineTo(x, y); + } + else { + context.moveTo(x, y); + } + draw = !draw; + } + context.closePath(); + context.stroke(); + } + constructor(arg0, arg1) { + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_2__.isRenderContext)(arg0)) { + // The user has provided what looks like a RenderContext, let's just use it. + this.ctx = arg0; + } + else { + if (arg1 === undefined) { + // The backend must be specified if the render context isn't directly provided. + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidArgument', 'Missing backend argument'); + } + const backend = arg1; + let element; + if (typeof arg0 == 'string') { + const maybeElement = document.getElementById(arg0); + if (!maybeElement) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElementId', `Can't find element with ID "${maybeElement}"`); + } + element = maybeElement; + } + else { + element = arg0; + } + // Verify backend and create context + if (backend === Renderer.Backends.CANVAS) { + if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLCanvas)(element)) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.'); + } + const context = element.getContext('2d', { willReadFrequently: true }); + if (!context) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', "Can't get canvas context"); + } + this.ctx = new _canvascontext__WEBPACK_IMPORTED_MODULE_0__.CanvasContext(context); + } + else if (backend === Renderer.Backends.SVG) { + if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLDiv)(element)) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.'); + } + this.ctx = new _svgcontext__WEBPACK_IMPORTED_MODULE_1__.SVGContext(element); + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidBackend', `No support for backend: ${backend}`); + } + } + } + resize(width, height) { + this.ctx.resize(width, height); + return this; + } + getContext() { + return this.ctx; + } +} +Renderer.Backends = RendererBackends; +Renderer.LineEndType = RendererLineEndType; +// Used by vexflow_test_helpers.ts +// Should this be private? +// Can we do this in a cleaner way? +Renderer.lastContext = undefined; + + + +/***/ }), + +/***/ "./src/repeatnote.ts": +/*!***************************!*\ + !*** ./src/repeatnote.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RepeatNote": () => (/* binding */ RepeatNote) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. + + + + +// Map `type` to SMuFL glyph code. +const CODES = { + '1': 'repeat1Bar', + '2': 'repeat2Bars', + '4': 'repeat4Bars', + slash: 'repeatBarSlash', +}; +class RepeatNote extends _glyphnote__WEBPACK_IMPORTED_MODULE_1__.GlyphNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.RepeatNote; + } + constructor(type, noteStruct, options) { + const glyphCode = CODES[type] || 'repeat1Bar'; + const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyphCode, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), { + category: 'repeatNote', + }); + super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options); + } +} + + +/***/ }), + +/***/ "./src/stave.ts": +/*!**********************!*\ + !*** ./src/stave.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Stave": () => (/* binding */ Stave) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.ts"); +/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./stavesection */ "./src/stavesection.ts"); +/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.ts"); +/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.ts"); +/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + + + + + + + + + + +// Used by Stave.format() to sort the modifiers at the beginning and end of a stave. +// The keys (computed property names) match the CATEGORY property in the +// Barline, Clef, KeySignature, TimeSignature classes. +const SORT_ORDER_BEG_MODIFIERS = { + [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 0, + [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 1, + [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 2, + [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 3, +}; +const SORT_ORDER_END_MODIFIERS = { + [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 0, + [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 1, + [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 2, + [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 3, +}; +class Stave extends _element__WEBPACK_IMPORTED_MODULE_2__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stave; + } + // This is the sum of the padding that normally goes on left + right of a stave during + // drawing. Used to size staves correctly with content width. + static get defaultPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont(); + return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax'); + } + // Right padding, used by system if startX is already determined. + static get rightPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont(); + return musicFont.lookupMetric('stave.endPaddingMax'); + } + constructor(x, y, width, options) { + super(); + // Initialized by the constructor via this.resetLines(). + this.height = 0; + this.x = x; + this.y = y; + this.width = width; + this.formatted = false; + this.start_x = x + 5; + this.end_x = x + width; + this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.) + this.measure = 0; + this.clef = 'treble'; + this.endClef = undefined; + this.resetFont(); + this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options); + this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 }; + this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 }; + this.resetLines(); + // beg bar + this.addModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.left_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE)); + // end bar + this.addEndModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.right_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE)); + } + /** Set default style for ledger lines. */ + setDefaultLedgerLineStyle(style) { + this.defaultLedgerLineStyle = style; + } + /** Get default style for ledger lines. */ + getDefaultLedgerLineStyle() { + return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle); + } + space(spacing) { + return this.options.spacing_between_lines_px * spacing; + } + resetLines() { + this.options.line_config = []; + for (let i = 0; i < this.options.num_lines; i++) { + this.options.line_config.push({ visible: true }); + } + this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px; + this.options.bottom_text_position = this.options.num_lines; + } + setNoteStartX(x) { + if (!this.formatted) + this.format(); + this.start_x = x; + return this; + } + getNoteStartX() { + if (!this.formatted) + this.format(); + return this.start_x; + } + getNoteEndX() { + if (!this.formatted) + this.format(); + return this.end_x; + } + getTieStartX() { + return this.start_x; + } + getTieEndX() { + return this.end_x; + } + getX() { + return this.x; + } + getNumLines() { + return this.options.num_lines; + } + setNumLines(n) { + this.options.num_lines = n; + this.resetLines(); + return this; + } + setY(y) { + this.y = y; + return this; + } + getY() { + return this.y; + } + getTopLineTopY() { + return this.getYForLine(0) - _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2; + } + getBottomLineBottomY() { + return this.getYForLine(this.getNumLines() - 1) + _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2; + } + setX(x) { + const shift = x - this.x; + this.formatted = false; + this.x = x; + this.start_x += shift; + this.end_x += shift; + for (let i = 0; i < this.modifiers.length; i++) { + const mod = this.modifiers[i]; + mod.setX(mod.getX() + shift); + } + return this; + } + setWidth(width) { + this.formatted = false; + this.width = width; + this.end_x = this.x + width; + // reset the x position of the end barline (TODO(0xfe): This makes no sense) + // this.modifiers[1].setX(this.end_x); + return this; + } + getWidth() { + return this.width; + } + getStyle() { + return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS }, super.getStyle()); + } + /** + * Set the measure number of this Stave. + */ + setMeasure(measure) { + this.measure = measure; + return this; + } + /** + * Return the measure number of this Stave. + */ + getMeasure() { + return this.measure; + } + /** + * Gets the pixels to shift from the beginning of the stave + * following the modifier at the provided index + * @param {Number} index The index from which to determine the shift + * @return {Number} The amount of pixels shifted + */ + getModifierXShift(index = 0) { + if (typeof index !== 'number') { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('InvalidIndex', 'Must be of number type'); + } + if (!this.formatted) + this.format(); + if (this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN).length === 1) { + return 0; + } + // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test' + if (this.modifiers[index].getPosition() === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.RIGHT) { + return 0; + } + let start_x = this.start_x - this.x; + const begBarline = this.modifiers[0]; + if (begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) { + start_x -= begBarline.getWidth(); + } + return start_x; + } + /** Coda & Segno Symbol functions */ + setRepetitionType(type, yShift = 0) { + this.modifiers.push(new _staverepetition__WEBPACK_IMPORTED_MODULE_7__.Repetition(type, this.x, yShift)); + return this; + } + // Volta functions + setVoltaType(type, number_t, y) { + this.modifiers.push(new _stavevolta__WEBPACK_IMPORTED_MODULE_11__.Volta(type, number_t, this.x, y)); + return this; + } + // Section functions + setSection(section, y, xOffset = 0, fontSize, drawRect = true) { + const staveSection = new _stavesection__WEBPACK_IMPORTED_MODULE_8__.StaveSection(section, this.x + xOffset, y, drawRect); + if (fontSize) + staveSection.setFontSize(fontSize); + this.modifiers.push(staveSection); + return this; + } + // Tempo functions + setTempo(tempo, y) { + this.modifiers.push(new _stavetempo__WEBPACK_IMPORTED_MODULE_9__.StaveTempo(tempo, this.x, y)); + return this; + } + // Text functions + setText(text, position, options = {}) { + this.modifiers.push(new _stavetext__WEBPACK_IMPORTED_MODULE_10__.StaveText(text, position, options)); + return this; + } + getHeight() { + return this.height; + } + getSpacingBetweenLines() { + return this.options.spacing_between_lines_px; + } + getBoundingBox() { + return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y); + } + getBottomY() { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing; + return score_bottom; + } + getBottomLineY() { + return this.getYForLine(this.options.num_lines); + } + // This returns + /** @returns the y for the *center* of a staff line */ + getYForLine(line) { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const headroom = options.space_above_staff_ln; + const y = this.y + line * spacing + headroom * spacing; + return y; + } + getLineForY(y) { + // Does the reverse of getYForLine - somewhat dumb and just calls + // getYForLine until the right value is reaches + const options = this.options; + const spacing = options.spacing_between_lines_px; + const headroom = options.space_above_staff_ln; + return (y - this.y) / spacing - headroom; + } + getYForTopText(line = 0) { + return this.getYForLine(-line - this.options.top_text_position); + } + getYForBottomText(line = 0) { + return this.getYForLine(this.options.bottom_text_position + line); + } + getYForNote(line) { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const headroom = options.space_above_staff_ln; + return this.y + headroom * spacing + 5 * spacing - line * spacing; + } + getYForGlyphs() { + return this.getYForLine(3); + } + // This method adds a stave modifier to the stave. Note that the first two + // modifiers (BarLines) are automatically added upon construction. + addModifier(modifier, position) { + if (position !== undefined) { + modifier.setPosition(position); + } + modifier.setStave(this); + this.formatted = false; + this.modifiers.push(modifier); + return this; + } + addEndModifier(modifier) { + this.addModifier(modifier, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + // Bar Line functions + setBegBarType(type) { + // Only valid bar types at beginning of stave is none, single or begin repeat + const { SINGLE, REPEAT_BEGIN, NONE } = _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType; + if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) { + this.modifiers[0].setType(type); + this.formatted = false; + } + return this; + } + setEndBarType(type) { + // Repeat end not valid at end of stave + if (type !== _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) { + this.modifiers[1].setType(type); + this.formatted = false; + } + return this; + } + /** + * treat the stave as if the clef is clefSpec, but don't display the clef + */ + setClefLines(clefSpec) { + this.clef = clefSpec; + return this; + } + setClef(clefSpec, size, annotation, position) { + if (position === undefined) { + position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; + } + if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) { + this.endClef = clefSpec; + } + else { + this.clef = clefSpec; + } + const clefs = this.getModifiers(position, _clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY); + if (clefs.length === 0) { + this.addClef(clefSpec, size, annotation, position); + } + else { + clefs[0].setType(clefSpec, size, annotation); + } + return this; + } + getClef() { + return this.clef; + } + setEndClef(clefSpec, size, annotation) { + this.setClef(clefSpec, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + getEndClef() { + return this.endClef; + } + setKeySignature(keySpec, cancelKeySpec, position) { + if (position === undefined) { + position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; + } + const keySignatures = this.getModifiers(position, _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY); + if (keySignatures.length === 0) { + this.addKeySignature(keySpec, cancelKeySpec, position); + } + else { + keySignatures[0].setKeySig(keySpec, cancelKeySpec); + } + return this; + } + setEndKeySignature(keySpec, cancelKeySpec) { + this.setKeySignature(keySpec, cancelKeySpec, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + setTimeSignature(timeSpec, customPadding, position) { + if (position === undefined) { + position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; + } + const timeSignatures = this.getModifiers(position, _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY); + if (timeSignatures.length === 0) { + this.addTimeSignature(timeSpec, customPadding, position); + } + else { + timeSignatures[0].setTimeSig(timeSpec); + } + return this; + } + setEndTimeSignature(timeSpec, customPadding) { + this.setTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + /** + * Add a key signature to the stave. + * + * Example: + * `stave.addKeySignature('Db');` + * @param keySpec new key specification `[A-G][b|#]?` + * @param cancelKeySpec + * @param position + * @returns + */ + addKeySignature(keySpec, cancelKeySpec, position) { + if (position === undefined) { + position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; + } + this.addModifier(new _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature(keySpec, cancelKeySpec).setPosition(position), position); + return this; + } + /** + * Add a clef to the stave. + * + * Example: + * + * stave.addClef('treble') + * @param clef clef (treble|bass|...) see {@link Clef.types} + * @param size + * @param annotation + * @param position + * @returns + */ + addClef(clef, size, annotation, position) { + if (position === undefined || position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN) { + this.clef = clef; + } + else if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) { + this.endClef = clef; + } + this.addModifier(new _clef__WEBPACK_IMPORTED_MODULE_1__.Clef(clef, size, annotation), position); + return this; + } + addEndClef(clef, size, annotation) { + this.addClef(clef, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + /** + * Add a time signature to the stave + * + * Example: + * + * `stave.addTimeSignature('4/4');` + * @param timeSpec time signature specification `(C\||C|\d\/\d)` + * @param customPadding + * @param position + * @returns + */ + addTimeSignature(timeSpec, customPadding, position) { + this.addModifier(new _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature(timeSpec, customPadding), position); + return this; + } + addEndTimeSignature(timeSpec, customPadding) { + this.addTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + // Deprecated + addTrebleGlyph() { + this.addClef('treble'); + return this; + } + /** + * @param position + * @param category + * @returns array of StaveModifiers that match the provided position and category. + */ + getModifiers(position, category) { + const noPosition = position === undefined; + const noCategory = category === undefined; + if (noPosition && noCategory) { + return this.modifiers; + } + else if (noPosition) { + // A category was provided. + return this.modifiers.filter((m) => category === m.getCategory()); + } + else if (noCategory) { + // A position was provided. + return this.modifiers.filter((m) => position === m.getPosition()); + } + else { + // Both position and category were provided! + return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory()); + } + } + /** + * Use the modifier's `getCategory()` as a key for the `order` array. + * The retrieved value is used to sort modifiers from left to right (0 to to 3). + */ + sortByCategory(items, order) { + for (let i = items.length - 1; i >= 0; i--) { + for (let j = 0; j < i; j++) { + if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) { + const temp = items[j]; + items[j] = items[j + 1]; + items[j + 1] = temp; + } + } + } + } + format() { + const begBarline = this.modifiers[0]; + const endBarline = this.modifiers[1]; + const begModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN); + const endModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS); + this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS); + if (begModifiers.length > 1 && begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) { + begModifiers.push(begModifiers.splice(0, 1)[0]); + begModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE)); + } + if (endModifiers.indexOf(endBarline) > 0) { + endModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE)); + } + let width; + let padding; + let modifier; + let offset = 0; + let x = this.x; + for (let i = 0; i < begModifiers.length; i++) { + modifier = begModifiers[i]; + padding = modifier.getPadding(i + offset); + width = modifier.getWidth(); + x += padding; + modifier.setX(x); + x += width; + if (padding + width === 0) + offset--; + } + this.start_x = x; + x = this.x + this.width; + const widths = { + left: 0, + right: 0, + paddingRight: 0, + paddingLeft: 0, + }; + let lastBarlineIdx = 0; + for (let i = 0; i < endModifiers.length; i++) { + modifier = endModifiers[i]; + lastBarlineIdx = (0,_typeguard__WEBPACK_IMPORTED_MODULE_14__.isBarline)(modifier) ? i : lastBarlineIdx; + widths.right = 0; + widths.left = 0; + widths.paddingRight = 0; + widths.paddingLeft = 0; + const layoutMetrics = modifier.getLayoutMetrics(); + if (layoutMetrics) { + if (i !== 0) { + widths.right = layoutMetrics.xMax || 0; + widths.paddingRight = layoutMetrics.paddingRight || 0; + } + widths.left = -layoutMetrics.xMin || 0; + widths.paddingLeft = layoutMetrics.paddingLeft || 0; + if (i === endModifiers.length - 1) { + widths.paddingLeft = 0; + } + } + else { + widths.paddingRight = modifier.getPadding(i - lastBarlineIdx); + if (i !== 0) { + widths.right = modifier.getWidth(); + } + if (i === 0) { + widths.left = modifier.getWidth(); + } + } + x -= widths.paddingRight; + x -= widths.right; + modifier.setX(x); + x -= widths.left; + x -= widths.paddingLeft; + } + this.end_x = endModifiers.length === 1 ? this.x + this.width : x; + this.formatted = true; + } + /** + * All drawing functions below need the context to be set. + */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + this.applyStyle(); + ctx.openGroup('stave', this.getAttribute('id')); + if (!this.formatted) + this.format(); + const num_lines = this.options.num_lines; + const width = this.width; + const x = this.x; + let y; + // Render lines + for (let line = 0; line < num_lines; line++) { + y = this.getYForLine(line); + if (this.options.line_config[line].visible) { + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x + width, y); + ctx.stroke(); + } + } + ctx.closeGroup(); + this.restoreStyle(); + // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.) + for (let i = 0; i < this.modifiers.length; i++) { + const modifier = this.modifiers[i]; + // Only draw modifier if it has a draw function + if (typeof modifier.draw === 'function') { + modifier.applyStyle(ctx); + modifier.draw(this, this.getModifierXShift(i)); + modifier.restoreStyle(ctx); + } + } + // Render measure numbers + if (this.measure > 0) { + ctx.save(); + ctx.setFont(this.textFont); + const textWidth = ctx.measureText('' + this.measure).width; + y = this.getYForTopText(0) + 3; + ctx.fillText('' + this.measure, this.x - textWidth / 2, y); + ctx.restore(); + } + return this; + } + getVerticalBarWidth() { + return this.options.vertical_bar_width; + } + /** + * Get the current configuration for the Stave. + * @return {Array} An array of configuration objects. + */ + getConfigForLines() { + return this.options.line_config; + } + /** + * Configure properties of the lines in the Stave + * @param line_number The index of the line to configure. + * @param line_config An configuration object for the specified line. + * @throws RuntimeError "StaveConfigError" When the specified line number is out of + * range of the number of lines specified in the constructor. + */ + setConfigForLine(line_number, line_config) { + if (line_number >= this.options.num_lines || line_number < 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.'); + } + if (line_config.visible === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', "The line configuration object is missing the 'visible' property."); + } + if (typeof line_config.visible !== 'boolean') { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', "The line configuration objects 'visible' property must be true or false."); + } + this.options.line_config[line_number] = line_config; + return this; + } + /** + * Set the staff line configuration array for all of the lines at once. + * @param lines_configuration An array of line configuration objects. These objects + * are of the same format as the single one passed in to setLineConfiguration(). + * The caller can set null for any line config entry if it is desired that the default be used + * @throws RuntimeError "StaveConfigError" When the lines_configuration array does not have + * exactly the same number of elements as the num_lines configuration object set in + * the constructor. + */ + setConfigForLines(lines_configuration) { + if (lines_configuration.length !== this.options.num_lines) { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave'); + } + // Make sure the defaults are present in case an incomplete set of + // configuration options were supplied. + // eslint-disable-next-line + for (const line_config in lines_configuration) { + // Allow '{}' to be used if the caller just wants the default for a particular node. + if (lines_configuration[line_config].visible == undefined) { + lines_configuration[line_config] = this.options.line_config[line_config]; + } + this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]); + } + this.options.line_config = lines_configuration; + return this; + } + static formatBegModifiers(staves) { + const adjustCategoryStartX = (category) => { + let minStartX = 0; + // Calculate min start X for the category + staves.forEach((stave) => { + const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category); + // Consider only the first instance + if (modifiers.length > 0 && modifiers[0].getX() > minStartX) + minStartX = modifiers[0].getX(); + }); + let adjustX = 0; + staves.forEach((stave) => { + adjustX = 0; + const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category); + // Calculate adjustement required for the stave + modifiers.forEach((modifier) => { + if (minStartX - modifier.getX() > adjustX) + adjustX = minStartX - modifier.getX(); + }); + const allModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN); + let bAdjust = false; + // Apply adjustment to all the modifiers in and beyond the category + allModifiers.forEach((modifier) => { + if (modifier.getCategory() === category) + bAdjust = true; + if (bAdjust && adjustX > 0) + modifier.setX(modifier.getX() + adjustX); + }); + // Apply adjustment also to note start. + stave.setNoteStartX(stave.getNoteStartX() + adjustX); + }); + }; + // Make sure that staves are formatted + staves.forEach((stave) => { + if (!stave.formatted) + stave.format(); + }); + // Align Clefs + adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Clef); + // Align key signatures + adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.KeySignature); + // Align time signatures + adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.TimeSignature); + let maxX = 0; + // align note start + staves.forEach((stave) => { + if (stave.getNoteStartX() > maxX) + maxX = stave.getNoteStartX(); + }); + staves.forEach((stave) => { + stave.setNoteStartX(maxX); + }); + maxX = 0; + // align REPEAT_BEGIN + staves.forEach((stave) => { + const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline); + modifiers.forEach((modifier) => { + if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) + if (modifier.getX() > maxX) + maxX = modifier.getX(); + }); + }); + staves.forEach((stave) => { + const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline); + modifiers.forEach((modifier) => { + if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) + modifier.setX(maxX); + }); + }); + } +} +Stave.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_3__.Font.SANS_SERIF, + size: 8, + weight: _font__WEBPACK_IMPORTED_MODULE_3__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_3__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stavebarline.ts": +/*!*****************************!*\ + !*** ./src/stavebarline.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Barline": () => (/* binding */ Barline), +/* harmony export */ "BarlineType": () => (/* binding */ BarlineType) +/* harmony export */ }); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// Author Larry Kuhns 2011 + + + +var BarlineType; +(function (BarlineType) { + BarlineType[BarlineType["SINGLE"] = 1] = "SINGLE"; + BarlineType[BarlineType["DOUBLE"] = 2] = "DOUBLE"; + BarlineType[BarlineType["END"] = 3] = "END"; + BarlineType[BarlineType["REPEAT_BEGIN"] = 4] = "REPEAT_BEGIN"; + BarlineType[BarlineType["REPEAT_END"] = 5] = "REPEAT_END"; + BarlineType[BarlineType["REPEAT_BOTH"] = 6] = "REPEAT_BOTH"; + BarlineType[BarlineType["NONE"] = 7] = "NONE"; +})(BarlineType || (BarlineType = {})); +class Barline extends _stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Barline; + } + static get type() { + return BarlineType; + } + static get typeString() { + return { + single: BarlineType.SINGLE, + double: BarlineType.DOUBLE, + end: BarlineType.END, + repeatBegin: BarlineType.REPEAT_BEGIN, + repeatEnd: BarlineType.REPEAT_END, + repeatBoth: BarlineType.REPEAT_BOTH, + none: BarlineType.NONE, + }; + } + constructor(type) { + super(); + this.thickness = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STAVE_LINE_THICKNESS; + const TYPE = BarlineType; + this.widths = {}; + this.widths[TYPE.SINGLE] = 5; + this.widths[TYPE.DOUBLE] = 5; + this.widths[TYPE.END] = 5; + this.widths[TYPE.REPEAT_BEGIN] = 5; + this.widths[TYPE.REPEAT_END] = 5; + this.widths[TYPE.REPEAT_BOTH] = 5; + this.widths[TYPE.NONE] = 5; + this.paddings = {}; + this.paddings[TYPE.SINGLE] = 0; + this.paddings[TYPE.DOUBLE] = 0; + this.paddings[TYPE.END] = 0; + this.paddings[TYPE.REPEAT_BEGIN] = 15; + this.paddings[TYPE.REPEAT_END] = 15; + this.paddings[TYPE.REPEAT_BOTH] = 15; + this.paddings[TYPE.NONE] = 0; + this.layoutMetricsMap = {}; + this.layoutMetricsMap[TYPE.SINGLE] = { + xMin: 0, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.DOUBLE] = { + xMin: -3, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.END] = { + xMin: -5, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.REPEAT_END] = { + xMin: -10, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = { + xMin: -2, + xMax: 10, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.REPEAT_BOTH] = { + xMin: -10, + xMax: 10, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.NONE] = { + xMin: 0, + xMax: 0, + paddingLeft: 5, + paddingRight: 5, + }; + this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifierPosition.BEGIN); + this.setType(type); + } + getType() { + return this.type; + } + setType(type) { + this.type = typeof type === 'string' ? Barline.typeString[type] : type; + this.setWidth(this.widths[this.type]); + this.setPadding(this.paddings[this.type]); + this.setLayoutMetrics(this.layoutMetricsMap[this.type]); + return this; + } + // Draw barlines + draw(stave) { + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('stavebarline', this.getAttribute('id')); + switch (this.type) { + case BarlineType.SINGLE: + this.drawVerticalBar(stave, this.x, false); + break; + case BarlineType.DOUBLE: + this.drawVerticalBar(stave, this.x, true); + break; + case BarlineType.END: + this.drawVerticalEndBar(stave, this.x); + break; + case BarlineType.REPEAT_BEGIN: + // If the barline is shifted over (in front of clef/time/key) + // Draw vertical bar at the beginning. + this.drawRepeatBar(stave, this.x, true); + if (stave.getX() !== this.x) { + this.drawVerticalBar(stave, stave.getX()); + } + break; + case BarlineType.REPEAT_END: + this.drawRepeatBar(stave, this.x, false); + break; + case BarlineType.REPEAT_BOTH: + this.drawRepeatBar(stave, this.x, false); + this.drawRepeatBar(stave, this.x, true); + break; + default: + // Default is NONE, so nothing to draw + break; + } + ctx.closeGroup(); + this.restoreStyle(ctx); + } + drawVerticalBar(stave, x, double_bar) { + const staveCtx = stave.checkContext(); + const topY = stave.getTopLineTopY(); + const botY = stave.getBottomLineBottomY(); + if (double_bar) { + staveCtx.fillRect(x - 3, topY, 1, botY - topY); + } + staveCtx.fillRect(x, topY, 1, botY - topY); + } + drawVerticalEndBar(stave, x) { + const staveCtx = stave.checkContext(); + const topY = stave.getTopLineTopY(); + const botY = stave.getBottomLineBottomY(); + staveCtx.fillRect(x - 5, topY, 1, botY - topY); + staveCtx.fillRect(x - 2, topY, 3, botY - topY); + } + drawRepeatBar(stave, x, begin) { + const staveCtx = stave.checkContext(); + const topY = stave.getTopLineTopY(); + const botY = stave.getBottomLineBottomY(); + let x_shift = 3; + if (!begin) { + x_shift = -5; + } + staveCtx.fillRect(x + x_shift, topY, 1, botY - topY); + staveCtx.fillRect(x - 2, topY, 3, botY - topY); + const dot_radius = 2; + // Shift dots left or right + if (begin) { + x_shift += 4; + } + else { + x_shift -= 4; + } + const dot_x = x + x_shift + dot_radius / 2; + // calculate the y offset based on number of stave lines + let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines(); + y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2; + let dot_y = topY + y_offset + dot_radius / 2; + // draw the top repeat dot + staveCtx.beginPath(); + staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false); + staveCtx.fill(); + // draw the bottom repeat dot + dot_y += stave.getSpacingBetweenLines(); + staveCtx.beginPath(); + staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false); + staveCtx.fill(); + } +} + + +/***/ }), + +/***/ "./src/staveconnector.ts": +/*!*******************************!*\ + !*** ./src/staveconnector.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveConnector": () => (/* binding */ StaveConnector) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +function drawBoldDoubleLine(ctx, type, topX, topY, botY) { + if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.'); + } + let x_shift = 3; + let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues + const thickLineOffset = 2; // For aesthetics + if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) { + x_shift = -5; // Flips the side of the thin line + variableWidth = 3; + } + // Thin line + ctx.fillRect(topX + x_shift, topY, 1, botY - topY); + // Thick line + ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY); +} +/** StaveConnector implements the connector lines between staves of a system. */ +class StaveConnector extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StaveConnector; + } + constructor(top_stave, bottom_stave) { + super(); + this.thickness = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_THICKNESS; + this.width = 3; + this.top_stave = top_stave; + this.bottom_stave = bottom_stave; + this.type = StaveConnector.type.DOUBLE; + this.resetFont(); + // 1. Offset Bold Double Left to align with offset Repeat Begin bars + // 2. Offset BRACE type not to overlap with another StaveConnector + this.x_shift = 0; + this.texts = []; + } + /** + * Set type. + * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString} + */ + setType(type) { + const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type; + // Be certain that the type is a valid type: + if (Object.values(StaveConnector.type).includes(newType)) { + this.type = newType; + } + return this; + } + /** + * Get type. + * @returns number {@link StaveConnector.type} + */ + getType() { + return this.type; + } + /** Set optional associated Text. */ + setText(text, options = {}) { + this.texts.push({ + content: text, + options: Object.assign({ shift_x: 0, shift_y: 0 }, options), + }); + return this; + } + setXShift(x_shift) { + if (typeof x_shift !== 'number') { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', 'x_shift must be a Number'); + } + this.x_shift = x_shift; + return this; + } + getXShift() { + return this.x_shift; + } + /** Render connector and associated text. */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + let topY = this.top_stave.getYForLine(0); + let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness; + let width = this.width; + let topX = this.top_stave.getX(); + const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT || + this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT || + this.type === StaveConnector.type.THIN_DOUBLE; + if (isRightSidedConnector) { + topX = this.top_stave.getX() + this.top_stave.getWidth(); + } + let attachment_height = botY - topY; + switch (this.type) { + case StaveConnector.type.SINGLE: + width = 1; + break; + case StaveConnector.type.SINGLE_LEFT: + width = 1; + break; + case StaveConnector.type.SINGLE_RIGHT: + width = 1; + break; + case StaveConnector.type.DOUBLE: + topX -= this.width + 2; + topY -= this.thickness; + attachment_height += 0.5; + break; + case StaveConnector.type.BRACE: { + width = 12; + // May need additional code to draw brace + const x1 = this.top_stave.getX() - 2 + this.x_shift; + const y1 = topY; + const x3 = x1; + const y3 = botY; + const x2 = x1 - width; + const y2 = y1 + attachment_height / 2.0; + const cpx1 = x2 - 0.9 * width; + const cpy1 = y1 + 0.2 * attachment_height; + const cpx2 = x1 + 1.1 * width; + const cpy2 = y2 - 0.135 * attachment_height; + const cpx3 = cpx2; + const cpy3 = y2 + 0.135 * attachment_height; + const cpx4 = cpx1; + const cpy4 = y3 - 0.2 * attachment_height; + const cpx5 = x2 - width; + const cpy5 = cpy4; + const cpx6 = x1 + 0.4 * width; + const cpy6 = y2 + 0.135 * attachment_height; + const cpx7 = cpx6; + const cpy7 = y2 - 0.135 * attachment_height; + const cpx8 = cpx5; + const cpy8 = cpy1; + ctx.beginPath(); + ctx.moveTo(x1, y1); + ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2); + ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3); + ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2); + ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1); + ctx.fill(); + ctx.stroke(); + break; + } + case StaveConnector.type.BRACKET: + topY -= 6; + botY += 6; + attachment_height = botY - topY; + _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop'); + _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom'); + topX -= this.width + 2; + break; + case StaveConnector.type.BOLD_DOUBLE_LEFT: + drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness); + break; + case StaveConnector.type.BOLD_DOUBLE_RIGHT: + drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness); + break; + case StaveConnector.type.THIN_DOUBLE: + width = 1; + attachment_height -= this.thickness; + break; + case StaveConnector.type.NONE: + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`); + } + if (this.type !== StaveConnector.type.BRACE && + this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT && + this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT && + this.type !== StaveConnector.type.NONE) { + ctx.fillRect(topX, topY, width, attachment_height); + } + // If the connector is a thin double barline, draw the paralell line + if (this.type === StaveConnector.type.THIN_DOUBLE) { + ctx.fillRect(topX - 3, topY, width, attachment_height); + } + ctx.save(); + ctx.setLineWidth(2); + ctx.setFont(this.textFont); + // Add stave connector text + for (let i = 0; i < this.texts.length; i++) { + const text = this.texts[i]; + const text_width = ctx.measureText('' + text.content).width; + const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x; + const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y; + ctx.fillText('' + text.content, x, y + 4); + } + ctx.restore(); + } +} +StaveConnector.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 16, + weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, +}; +/** + * SINGLE_LEFT and SINGLE are the same value for compatibility + * with older versions of vexflow which didn't have right sided + * stave connectors. + */ +StaveConnector.type = { + SINGLE_RIGHT: 0, + SINGLE_LEFT: 1, + SINGLE: 1, + DOUBLE: 2, + BRACE: 3, + BRACKET: 4, + BOLD_DOUBLE_LEFT: 5, + BOLD_DOUBLE_RIGHT: 6, + THIN_DOUBLE: 7, + NONE: 8, +}; +/** + * Connector type: + * * "singleRight" + * * "singleLeft" + * * "single" + * * "double" + * * "brace" + * * "bracket" + * * "boldDoubleLeft" + * * "boldDoubleRight" + * * "thinDouble" + * * "none" + */ +StaveConnector.typeString = { + singleRight: StaveConnector.type.SINGLE_RIGHT, + singleLeft: StaveConnector.type.SINGLE_LEFT, + single: StaveConnector.type.SINGLE, + double: StaveConnector.type.DOUBLE, + brace: StaveConnector.type.BRACE, + bracket: StaveConnector.type.BRACKET, + boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT, + boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT, + thinDouble: StaveConnector.type.THIN_DOUBLE, + none: StaveConnector.type.NONE, +}; + + + +/***/ }), + +/***/ "./src/stavehairpin.ts": +/*!*****************************!*\ + !*** ./src/stavehairpin.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveHairpin": () => (/* binding */ StaveHairpin) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/ +// +// This class implements hairpins between notes. +// Hairpins can be either crescendo or decrescendo. + + + + +class StaveHairpin extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.StaveHairpin; + } + /* Helper function to convert ticks into pixels. + * Requires a Formatter with voices joined and formatted (to + * get pixels per tick) + * + * options is struct that has: + * + * { + * height: px, + * y_shift: px, // vertical offset + * left_shift_ticks: 0, // left horizontal offset expressed in ticks + * right_shift_ticks: 0 // right horizontal offset expressed in ticks + * } + * + **/ + static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) { + var _a, _b; + const ppt = formatter.pixelsPerTick; + if (ppt == null) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.'); + } + const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0); + const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0); + const hairpin_options = { + height: options.height, + y_shift: options.y_shift, + left_shift_px: l_shift_px, + right_shift_px: r_shift_px, + right_shift_ticks: 0, + left_shift_ticks: 0, + }; + new StaveHairpin({ + first_note: notes.first_note, + last_note: notes.last_note, + }, type) + .setContext(ctx) + .setRenderOptions(hairpin_options) + .setPosition(position) + .draw(); + } + /** + * Create a new hairpin from the specified notes. + * + * @param {!Object} notes The notes to tie up. + * Notes is a struct that has: + * + * { + * first_note: Note, + * last_note: Note, + * } + * @param {!Object} type The type of hairpin + */ + constructor(notes, type) { + super(); + this.setNotes(notes); + this.hairpin = type; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW; + this.render_options = { + height: 10, + y_shift: 0, + left_shift_px: 0, + right_shift_px: 0, + right_shift_ticks: 0, + left_shift_ticks: 0, + }; + } + setPosition(position) { + if (position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE || position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW) { + this.position = position; + } + return this; + } + setRenderOptions(options) { + if (options.height != null && + options.y_shift != null && + options.left_shift_px != null && + options.right_shift_px != null) { + this.render_options = options; + } + return this; + } + /** + * Set the notes to attach this hairpin to. + * + * @param {!Object} notes The start and end notes. + */ + setNotes(notes) { + if (!notes.first_note && !notes.last_note) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.'); + } + this.notes = notes; + this.first_note = notes.first_note; + this.last_note = notes.last_note; + return this; + } + renderHairpin(params) { + const ctx = this.checkContext(); + let dis = this.render_options.y_shift + 20; + let y_shift = params.first_y; + if (this.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) { + dis = -dis + 30; + y_shift = params.first_y - params.staff_height; + } + const l_shift = this.render_options.left_shift_px; + const r_shift = this.render_options.right_shift_px; + ctx.beginPath(); + switch (this.hairpin) { + case StaveHairpin.type.CRESC: + ctx.moveTo(params.last_x + r_shift, y_shift + dis); + ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis); + ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis); + break; + case StaveHairpin.type.DECRESC: + ctx.moveTo(params.first_x + l_shift, y_shift + dis); + ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis); + ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis); + break; + default: + // Default is NONE, so nothing to draw + break; + } + ctx.stroke(); + ctx.closePath(); + } + draw() { + this.checkContext(); + this.setRendered(); + const firstNote = this.first_note; + const lastNote = this.last_note; + if (!firstNote || !lastNote) + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NoNote', 'Notes required to draw'); + const start = firstNote.getModifierStartXY(this.position, 0); + const end = lastNote.getModifierStartXY(this.position, 0); + this.renderHairpin({ + first_x: start.x, + last_x: end.x, + first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(), + last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(), + staff_height: firstNote.checkStave().getHeight(), + }); + } +} +StaveHairpin.type = { + CRESC: 1, + DECRESC: 2, +}; + + + +/***/ }), + +/***/ "./src/staveline.ts": +/*!**************************!*\ + !*** ./src/staveline.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveLine": () => (/* binding */ StaveLine) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// This file implements `StaveLine` which are simply lines that connect +// two notes. This object is highly configurable, see the `render_options`. +// A simple line is often used for notating glissando articulations, but you +// can format a `StaveLine` with arrows or colors for more pedagogical +// purposes, such as diagrams. + + + + + +// Attribution: Arrow rendering implementations based off of +// Patrick Horgan's article, "Drawing lines and arcs with +// arrow heads on HTML5 Canvas" +// +// Draw an arrow head that connects between 3 coordinates. +function drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) { + // all cases do this. + ctx.beginPath(); + ctx.moveTo(x0, y0); + ctx.lineTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.lineTo(x0, y0); + ctx.closePath(); + ctx.fill(); +} +class StaveLine extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveLine; + } + // Initialize the StaveLine with the given `notes`. + // + // `notes` is a struct that has: + // + // ``` + // { + // first_note: Note, + // last_note: Note, + // first_indices: [n1, n2, n3], + // last_indices: [n1, n2, n3] + // } + // ``` + constructor(notes) { + super(); + this.setNotes(notes); + this.text = ''; + this.resetFont(); + this.render_options = { + // Space to add to the left or the right + padding_left: 4, + padding_right: 3, + // The width of the line in pixels + line_width: 1, + // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?). + line_dash: undefined, + // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?). + rounded_end: true, + // The color of the line and arrowheads + color: undefined, + // Flags to draw arrows on each end of the line + draw_start_arrow: false, + draw_end_arrow: false, + // The length of the arrowhead sides + arrowhead_length: 10, + // The angle of the arrowhead + arrowhead_angle: Math.PI / 8, + // The position of the text + text_position_vertical: StaveLine.TextVerticalPosition.TOP, + text_justification: StaveLine.TextJustification.CENTER, + }; + } + // The the annotation for the `StaveLine` + setText(text) { + this.text = text; + return this; + } + // Set the notes for the `StaveLine` + setNotes(notes) { + if (!notes.first_note && !notes.last_note) { + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.'); + } + if (!notes.first_indices) + notes.first_indices = [0]; + if (!notes.last_indices) + notes.last_indices = [0]; + if (notes.first_indices.length !== notes.last_indices.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Connected notes must have same number of indices.'); + } + this.notes = notes; + this.first_note = notes.first_note; + this.first_indices = notes.first_indices; + this.last_note = notes.last_note; + this.last_indices = notes.last_indices; + return this; + } + // Apply the style of the `StaveLine` to the context + applyLineStyle() { + const ctx = this.checkContext(); + const render_options = this.render_options; + if (render_options.line_dash) { + ctx.setLineDash(render_options.line_dash); + } + if (render_options.line_width) { + ctx.setLineWidth(render_options.line_width); + } + if (render_options.rounded_end) { + ctx.setLineCap('round'); + } + else { + ctx.setLineCap('square'); + } + } + // Apply the text styling to the context + applyFontStyle() { + const ctx = this.checkContext(); + ctx.setFont(this.textFont); + const render_options = this.render_options; + const color = render_options.color; + if (color) { + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + } + } + // Helper function to draw a line with arrow heads + drawArrowLine(ctx, pt1, pt2) { + const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow; + const x1 = pt1.x; + const y1 = pt1.y; + const x2 = pt2.x; + const y2 = pt2.y; + // For ends with arrow we actually want to stop before we get to the arrow + // so that wide lines won't put a flat end on the arrow. + const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + const ratio = (distance - this.render_options.arrowhead_length / 3) / distance; + let end_x; + let end_y; + let start_x; + let start_y; + if (this.render_options.draw_end_arrow || both_arrows) { + end_x = Math.round(x1 + (x2 - x1) * ratio); + end_y = Math.round(y1 + (y2 - y1) * ratio); + } + else { + end_x = x2; + end_y = y2; + } + if (this.render_options.draw_start_arrow || both_arrows) { + start_x = x1 + (x2 - x1) * (1 - ratio); + start_y = y1 + (y2 - y1) * (1 - ratio); + } + else { + start_x = x1; + start_y = y1; + } + if (this.render_options.color) { + ctx.setStrokeStyle(this.render_options.color); + ctx.setFillStyle(this.render_options.color); + } + // Draw the shaft of the arrow + ctx.beginPath(); + ctx.moveTo(start_x, start_y); + ctx.lineTo(end_x, end_y); + ctx.stroke(); + ctx.closePath(); + // calculate the angle of the line + const line_angle = Math.atan2(y2 - y1, x2 - x1); + // h is the line length of a side of the arrow head + const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle)); + let angle1; + let angle2; + let top_x; + let top_y; + let bottom_x; + let bottom_y; + if (this.render_options.draw_end_arrow || both_arrows) { + angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle; + top_x = x2 + Math.cos(angle1) * h; + top_y = y2 + Math.sin(angle1) * h; + angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle; + bottom_x = x2 + Math.cos(angle2) * h; + bottom_y = y2 + Math.sin(angle2) * h; + drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y); + } + if (this.render_options.draw_start_arrow || both_arrows) { + angle1 = line_angle + this.render_options.arrowhead_angle; + top_x = x1 + Math.cos(angle1) * h; + top_y = y1 + Math.sin(angle1) * h; + angle2 = line_angle - this.render_options.arrowhead_angle; + bottom_x = x1 + Math.cos(angle2) * h; + bottom_y = y1 + Math.sin(angle2) * h; + drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y); + } + } + // Renders the `StaveLine` on the context + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const first_note = this.first_note; + const last_note = this.last_note; + const render_options = this.render_options; + ctx.save(); + this.applyLineStyle(); + // Cycle through each set of indices and draw lines + let start_position = { x: 0, y: 0 }; + let end_position = { x: 0, y: 0 }; + this.first_indices.forEach((first_index, i) => { + const last_index = this.last_indices[i]; + // Get initial coordinates for the start/end of the line + start_position = first_note.getModifierStartXY(2, first_index); + end_position = last_note.getModifierStartXY(1, last_index); + const upwards_slope = start_position.y > end_position.y; + // Adjust `x` coordinates for modifiers + start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left; + end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right; + // Adjust first `x` coordinates for displacements + const notehead_width = first_note.getGlyphProps().getWidth(); + const first_displaced = first_note.getKeyProps()[first_index].displaced; + if (first_displaced && first_note.getStemDirection() === 1) { + start_position.x += notehead_width + render_options.padding_left; + } + // Adjust last `x` coordinates for displacements + const last_displaced = last_note.getKeyProps()[last_index].displaced; + if (last_displaced && last_note.getStemDirection() === -1) { + end_position.x -= notehead_width + render_options.padding_right; + } + // Adjust y position better if it's not coming from the center of the note + start_position.y += upwards_slope ? -3 : 1; + end_position.y += upwards_slope ? 2 : 0; + this.drawArrowLine(ctx, start_position, end_position); + }); + ctx.restore(); + // Determine the x coordinate where to start the text + const text_width = ctx.measureText(this.text).width; + const justification = render_options.text_justification; + let x = 0; + if (justification === StaveLine.TextJustification.LEFT) { + x = start_position.x; + } + else if (justification === StaveLine.TextJustification.CENTER) { + const delta_x = end_position.x - start_position.x; + const center_x = delta_x / 2 + start_position.x; + x = center_x - text_width / 2; + } + else if (justification === StaveLine.TextJustification.RIGHT) { + x = end_position.x - text_width; + } + // Determine the y value to start the text + let y = 0; + const vertical_position = render_options.text_position_vertical; + if (vertical_position === StaveLine.TextVerticalPosition.TOP) { + y = first_note.checkStave().getYForTopText(); + } + else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) { + y = first_note.checkStave().getYForBottomText(_tables__WEBPACK_IMPORTED_MODULE_1__.Tables.TEXT_HEIGHT_OFFSET_HACK); + } + // Draw the text + ctx.save(); + this.applyFontStyle(); + ctx.fillText(this.text, x, y); + ctx.restore(); + return this; + } +} +/** Default text font. */ +StaveLine.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); +// Text Positioning +StaveLine.TextVerticalPosition = { + TOP: 1, + BOTTOM: 2, +}; +StaveLine.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification; + + + +/***/ }), + +/***/ "./src/stavemodifier.ts": +/*!******************************!*\ + !*** ./src/stavemodifier.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveModifier": () => (/* binding */ StaveModifier), +/* harmony export */ "StaveModifierPosition": () => (/* binding */ StaveModifierPosition) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// A base class for stave modifiers (e.g. clefs, key signatures) + + + +var StaveModifierPosition; +(function (StaveModifierPosition) { + StaveModifierPosition[StaveModifierPosition["CENTER"] = 0] = "CENTER"; + StaveModifierPosition[StaveModifierPosition["LEFT"] = 1] = "LEFT"; + StaveModifierPosition[StaveModifierPosition["RIGHT"] = 2] = "RIGHT"; + StaveModifierPosition[StaveModifierPosition["ABOVE"] = 3] = "ABOVE"; + StaveModifierPosition[StaveModifierPosition["BELOW"] = 4] = "BELOW"; + StaveModifierPosition[StaveModifierPosition["BEGIN"] = 5] = "BEGIN"; + StaveModifierPosition[StaveModifierPosition["END"] = 6] = "END"; +})(StaveModifierPosition || (StaveModifierPosition = {})); +class StaveModifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveModifier; + } + static get Position() { + return StaveModifierPosition; + } + constructor() { + super(); + this.width = 0; + this.x = 0; + this.padding = 10; + this.position = StaveModifierPosition.ABOVE; + } + getPosition() { + return this.position; + } + setPosition(position) { + this.position = position; + return this; + } + getStave() { + return this.stave; + } + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + setStave(stave) { + this.stave = stave; + return this; + } + getWidth() { + return this.width; + } + setWidth(width) { + this.width = width; + return this; + } + getX() { + return this.x; + } + setX(x) { + this.x = x; + return this; + } + /** + * Runs setYShift() for the Glyph object so that it matches the position of line for + * the Stave provided. A `customShift` can also be given (measured in the same units + * as `setYShift` not in lines) and this will be added after all other positions are + * calculated from the Stave. + * + * Note that this routine only sets the yShift; it does not actually "place" (meaning + * draw) the Glyph on the Stave. Call .draw() afterwards to do that. + */ + placeGlyphOnLine(glyph, stave, line, customShift = 0) { + glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift); + } + getPadding(index) { + return index !== undefined && index < 2 ? 0 : this.padding; + } + setPadding(padding) { + this.padding = padding; + return this; + } + setLayoutMetrics(layoutMetrics) { + this.layoutMetrics = layoutMetrics; + return this; + } + getLayoutMetrics() { + return this.layoutMetrics; + } + // eslint-disable-next-line + draw(...args) { + // DO NOTHING. + } +} + + +/***/ }), + +/***/ "./src/stavenote.ts": +/*!**************************!*\ + !*** ./src/stavenote.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveNote": () => (/* binding */ StaveNote) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// This file implements notes for standard notation. This consists of one or +// more `NoteHeads`, an optional stem, and an optional flag. +// +// Throughout these comments, a "note" refers to the entire `StaveNote`, +// and a "key" refers to a specific pitch/notehead within a note. +// +// See `tests/stavenote_tests.ts` for usage examples. + + + + + + + + +function showDeprecationWarningForNoteHeads() { + // eslint-disable-next-line + console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.'); +} +// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (StaveNote.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_7__.log)('Vex.Flow.StaveNote', args); +} +const isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? note.keyProps.length - 1 : 0); +// Helper methods for rest positioning in ModifierContext. +function shiftRestVertical(rest, note, dir) { + const delta = dir; + rest.line += delta; + rest.maxLine += delta; + rest.minLine += delta; + rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta); +} +// Called from formatNotes :: center a rest between two notes +function centerRest(rest, noteU, noteL) { + const delta = rest.line - (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(noteU.minLine, noteL.maxLine); + rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta); + rest.line -= delta; + rest.maxLine -= delta; + rest.minLine -= delta; +} +class StaveNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.StaveNote; + } + /** + * @deprecated Use Stem.UP. + */ + static get STEM_UP() { + return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP; + } + /** + * @deprecated Use Stem.DOWN. + */ + static get STEM_DOWN() { + return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN; + } + static get LEDGER_LINE_OFFSET() { + return 3; + } + static get minNoteheadPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + /** Format notes inside a ModifierContext. */ + static format(notes, state) { + var _a, _b; + if (!notes || notes.length < 2) + return false; + const notesList = []; + for (let i = 0; i < notes.length; i++) { + // Formatting uses sortedKeyProps to calculate line and minL. + const props = notes[i].sortedKeyProps; + const line = props[0].keyProps.line; + let minL = props[props.length - 1].keyProps.line; + const stemDirection = notes[i].getStemDirection(); + const stemMax = notes[i].getStemLength() / 10; + const stemMin = notes[i].getStemMinimumLength() / 10; + let maxL; + if (notes[i].isRest()) { + maxL = line + notes[i].glyphProps.line_above; + minL = line - notes[i].glyphProps.line_below; + } + else { + maxL = + stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line; + minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax; + } + notesList.push({ + line: props[0].keyProps.line, + maxLine: maxL, + minLine: minL, + isrest: notes[i].isRest(), + stemDirection: stemDirection, + stemMax, + stemMin, + voice_shift: notes[i].getVoiceShiftWidth(), + is_displaced: notes[i].isDisplaced(), + note: notes[i], + }); + } + let voices = 0; + let noteU = undefined; + let noteM = undefined; + let noteL = undefined; + const draw = [false, false, false]; + for (let i = 0; i < notesList.length; i++) { + draw[i] = notesList[i].note.render_options.draw == false ? false : true; + } + if (draw[0] && draw[1] && draw[2]) { + // Three visible notes + voices = 3; + noteU = notesList[0]; + noteM = notesList[1]; + noteL = notesList[2]; + } + else if (draw[0] && draw[1]) { + // Two visible notes, 0 & 1 + voices = 2; + noteU = notesList[0]; + noteL = notesList[1]; + } + else if (draw[0] && draw[2]) { + // Two visible notes, 0 & 2 + voices = 2; + noteU = notesList[0]; + noteL = notesList[2]; + } + else if (draw[1] && draw[2]) { + // Two visible notes, 1 & 2 + voices = 2; + noteU = notesList[1]; + noteL = notesList[2]; + } + else { + // No shift required for less than 2 visible notes + return true; + } + // for two voice backward compatibility, ensure upper voice is stems up + // for three voices, the voices must be in order (upper, middle, lower) + if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) { + noteU = notesList[1]; + noteL = notesList[0]; + } + const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift); + let xShift = 0; + // Test for two voice note intersection + if (voices === 2) { + const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5; + if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) { + noteL.note.render_options.draw = false; + } + else if (noteU.minLine <= noteL.maxLine + lineSpacing) { + if (noteU.isrest) { + // shift rest up + shiftRestVertical(noteU, noteL, 1); + } + else if (noteL.isrest) { + // shift rest down + shiftRestVertical(noteL, noteU, -1); + } + else { + //Instead of shifting notes, remove the appropriate flag + //If we are sharing a line, switch one notes stem direction. + //If we are sharing a line and in the same voice, only then offset one note + const lineDiff = Math.abs(noteU.line - noteL.line); + if (noteU.note.hasStem() && noteL.note.hasStem()) { + const noteUHead = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration); + const noteLHead = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration); + if ( + // If unison is not configured, shift + !_tables__WEBPACK_IMPORTED_MODULE_5__.Tables.UNISON || + // If we have different noteheads, shift + noteUHead !== noteLHead || + // If we have different dot values, shift + noteU.note.getModifiers().filter((item) => item.getCategory() === _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot && item.getIndex() === 0) + .length !== + noteL.note.getModifiers().filter((item) => item.getCategory() === _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot && item.getIndex() === 0) + .length || + // If the notes are quite close but not on the same line, shift + (lineDiff < 1 && lineDiff > 0) || + // If styles are different, shift + JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) { + xShift = voiceXShift + 2; + if (noteU.stemDirection === noteL.stemDirection) { + // upper voice is middle voice, so shift it right + noteU.note.setXShift(xShift); + } + else { + // shift lower voice right + noteL.note.setXShift(xShift); + } + } + else if (noteU.note.voice !== noteL.note.voice) { + //If we are not in the same voice + if (noteU.stemDirection === noteL.stemDirection) { + if (noteU.line != noteL.line) { + xShift = voiceXShift + 2; + noteU.note.setXShift(xShift); + } + else { + //same line, swap stem direction for one note + if (noteL.stemDirection === 1) { + noteL.stemDirection = -1; + noteL.note.setStemDirection(-1); + } + } + } + } //Very close whole notes + } + else if (lineDiff < 1) { + xShift = voiceXShift + 2; + if (noteU.note.duration < noteL.note.duration) { + // upper voice is shorter, so shift it right + noteU.note.setXShift(xShift); + } + else { + // shift lower voice right + noteL.note.setXShift(xShift); + } + } + else if (noteU.note.hasStem()) { + noteU.stemDirection = -noteU.note.getStemDirection(); + noteU.note.setStemDirection(noteU.stemDirection); + } + else if (noteL.note.hasStem()) { + noteL.stemDirection = -noteL.note.getStemDirection(); + noteL.note.setStemDirection(noteL.stemDirection); + } + } + } + // format complete + state.right_shift += xShift; + return true; + } + if (!noteM) + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('InvalidState', 'noteM not defined.'); + // For three voices, test if rests can be repositioned + // + // Special case 1 :: middle voice rest between two notes + // + if (noteM.isrest && !noteU.isrest && !noteL.isrest) { + if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) { + const restHeight = noteM.maxLine - noteM.minLine; + const space = noteU.minLine - noteL.maxLine; + if (restHeight < space) { + // center middle voice rest between the upper and lower voices + centerRest(noteM, noteU, noteL); + } + else { + xShift = voiceXShift + 2; // shift middle rest right + noteM.note.setXShift(xShift); + if (noteL.note.hasBeam() === false) { + noteL.stemDirection = -1; + noteL.note.setStemDirection(-1); + } + if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) { + noteU.stemDirection = 1; + noteU.note.setStemDirection(1); + } + } + // format complete + state.right_shift += xShift; + return true; + } + } + // Special case 2 :: all voices are rests + if (noteU.isrest && noteM.isrest && noteL.isrest) { + // Hide upper voice rest + noteU.note.render_options.draw = false; + // Hide lower voice rest + noteL.note.render_options.draw = false; + // format complete + state.right_shift += xShift; + return true; + } + // Test if any other rests can be repositioned + if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) { + // Hide middle voice rest + noteM.note.render_options.draw = false; + } + if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) { + // Hide middle voice rest + noteM.note.render_options.draw = false; + } + if (noteU.isrest && noteU.minLine <= noteM.maxLine) { + // shift upper voice rest up; + shiftRestVertical(noteU, noteM, 1); + } + if (noteL.isrest && noteM.minLine <= noteL.maxLine) { + // shift lower voice rest down + shiftRestVertical(noteL, noteM, -1); + } + // If middle voice intersects upper or lower voice + if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) { + // shift middle note right + xShift = voiceXShift + 2; + noteM.note.setXShift(xShift); + if (noteL.note.hasBeam() === false) { + noteL.stemDirection = -1; + noteL.note.setStemDirection(-1); + } + if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) { + noteU.stemDirection = 1; + noteU.note.setStemDirection(1); + } + } + state.right_shift += xShift; + return true; + } + static postFormat(notes) { + if (!notes) + return false; + notes.forEach((note) => note.postFormat()); + return true; + } + constructor(noteStruct) { + var _a, _b, _c; + super(noteStruct); + ////////////////////////////////////////////////////////////////////////////////////////////////// + // INSTANCE MEMBERS + this.minLine = 0; + this.maxLine = 0; + // Sorted variant of keyProps used internally + this.sortedKeyProps = []; + this.ledgerLineStyle = {}; + this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble'; + this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0; + // Pull note rendering properties. + this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType); + (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); + // if true, displace note to right + this.displaced = false; + this.dot_shiftY = 0; + // for displaced ledger lines + this.use_default_head_x = false; + // Drawing + this._noteHeads = []; + this.modifiers = []; + this.render_options = Object.assign(Object.assign({}, this.render_options), { + // font size for note heads and rests + glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.NOTATION_FONT_SCALE, + // number of stroke px to the left and right of head + stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET }); + this.calculateKeyProps(); + this.buildStem(); + // Set the stem direction + if (noteStruct.auto_stem) { + this.autoStem(); + } + else { + this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP); + } + this.reset(); + this.buildFlag(); + } + reset() { + super.reset(); + // Save prior noteHead styles & reapply them after making new noteheads. + const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle()); + this.buildNoteHeads(); + this._noteHeads.forEach((noteHead, index) => { + const noteHeadStyle = noteHeadStyles[index]; + if (noteHeadStyle) + noteHead.setStyle(noteHeadStyle); + }); + const stave = this.stave; + if (stave) { + this.setStave(stave); + } + this.calcNoteDisplacements(); + return this; + } + setBeam(beam) { + this.beam = beam; + this.calcNoteDisplacements(); + // Update stem extension if a beam is assigned. + if (this.stem) { + this.stem.setExtension(this.getStemExtension()); + } + return this; + } + // Builds a `Stem` for the note + buildStem() { + this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem({ hide: !!this.isRest() })); + return this; + } + // Builds a `NoteHead` for each key in the note + buildNoteHeads() { + this._noteHeads = []; + const stemDirection = this.getStemDirection(); + const keys = this.getKeys(); + let lastLine = undefined; + let lineDiff = undefined; + let displaced = false; + // Draw notes from bottom to top. + // For down-stem notes, we draw from top to bottom. + let start; + let end; + let step; + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { + start = 0; + end = keys.length; + step = 1; + } + else { + start = keys.length - 1; + end = -1; + step = -1; + } + for (let i = start; i !== end; i += step) { + // Building noteheads rely on sortedKeNotes in order to calculate the displacements + const noteProps = this.sortedKeyProps[i].keyProps; + const line = noteProps.line; + // Keep track of last line with a note head, so that consecutive heads + // are correctly displaced. + if (lastLine === undefined) { + lastLine = line; + } + else { + lineDiff = Math.abs(lastLine - line); + if (lineDiff === 0 || lineDiff === 0.5) { + displaced = !displaced; + } + else { + displaced = false; + this.use_default_head_x = true; + } + } + lastLine = line; + const notehead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({ + duration: this.duration, + note_type: this.noteType, + displaced, + stem_direction: stemDirection, + custom_glyph_code: noteProps.code, + glyph_font_scale: this.render_options.glyph_font_scale, + x_shift: noteProps.shift_right, + stem_up_x_offset: noteProps.stem_up_x_offset, + stem_down_x_offset: noteProps.stem_down_x_offset, + line: noteProps.line, + }); + this.addChildElement(notehead); + this._noteHeads[this.sortedKeyProps[i].index] = notehead; + } + return this._noteHeads; + } + // Automatically sets the stem direction based on the keys in the note + autoStem() { + this.setStemDirection(this.calculateOptimalStemDirection()); + } + calculateOptimalStemDirection() { + // Figure out optimal stem direction based on given notes + // minLine & maxLine rely on sortedKeyProps + this.minLine = this.sortedKeyProps[0].keyProps.line; + this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line; + const MIDDLE_LINE = 3; + const decider = (this.minLine + this.maxLine) / 2; + const stemDirection = decider < MIDDLE_LINE ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN; + return stemDirection; + } + // Calculates and stores the properties for each key in the note + calculateKeyProps() { + let lastLine; + for (let i = 0; i < this.keys.length; ++i) { + const key = this.keys[i]; + // All rests use the same position on the line. + // if (this.glyph.rest) key = this.glyph.position; + if (this.glyphProps.rest) + this.glyphProps.position = key; + const options = { octave_shift: this.octave_shift || 0, duration: this.duration }; + const props = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.keyProperties(key, this.clef, options); + if (!props) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('BadArguments', `Invalid key for note properties: ${key}`); + } + // Override line placement for default rests + if (props.key === 'R') { + if (this.duration === '1' || this.duration === 'w') { + props.line = 4; + } + else { + props.line = 3; + } + } + // Calculate displacement of this note + const line = props.line; + if (lastLine == undefined) { + lastLine = line; + } + else { + if (Math.abs(lastLine - line) === 0.5) { + this.displaced = true; + props.displaced = true; + // Have to mark the previous note as + // displaced as well, for modifier placement + if (this.keyProps.length > 0) { + this.keyProps[i - 1].displaced = true; + } + } + } + lastLine = line; + this.keyProps.push(props); + } + // Sort the notes from lowest line to highest line in sortedKeyProps + // Warn no longer required as keyProps remains unsorted + this.keyProps.forEach((keyProps, index) => { + this.sortedKeyProps.push({ keyProps, index }); + }); + this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line); + } + // Get the `BoundingBox` for the entire note + getBoundingBox() { + var _a, _b; + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', "Can't call getBoundingBox on an unformatted note."); + } + const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics(); + const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx; + let minY = 0; + let maxY = 0; + const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2; + const lineSpacing = halfLineSpacing * 2; + if (this.isRest()) { + const y = this.ys[0]; + const frac = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.durationToFraction(this.duration); + if (frac.equals(1) || frac.equals(2)) { + minY = y - halfLineSpacing; + maxY = y + halfLineSpacing; + } + else { + minY = y - this.glyphProps.line_above * lineSpacing; + maxY = y + this.glyphProps.line_below * lineSpacing; + } + } + else if (this.glyphProps.stem) { + const ys = this.getStemExtents(); + ys.baseY += halfLineSpacing * this.getStemDirection(); + minY = Math.min(ys.topY, ys.baseY); + maxY = Math.max(ys.topY, ys.baseY); + } + else { + minY = 0; + maxY = 0; + for (let i = 0; i < this.ys.length; ++i) { + const yy = this.ys[i]; + if (i === 0) { + minY = yy; + maxY = yy; + } + else { + minY = Math.min(yy, minY); + maxY = Math.max(yy, maxY); + } + } + minY -= halfLineSpacing; + maxY += halfLineSpacing; + } + return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(x, minY, w, maxY - minY); + } + // Gets the line number of the bottom note in the chord. + // If `isTopNote` is `true` then get the top note's line number instead + getLineNumber(isTopNote) { + if (!this.keyProps.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoKeyProps', "Can't get bottom note line, because note is not initialized properly."); + } + let resultLine = this.keyProps[0].line; + // No precondition assumed for sortedness of keyProps array + for (let i = 0; i < this.keyProps.length; i++) { + const thisLine = this.keyProps[i].line; + if (isTopNote) { + if (thisLine > resultLine) + resultLine = thisLine; + } + else { + if (thisLine < resultLine) + resultLine = thisLine; + } + } + return resultLine; + } + /** + * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score. + */ + isRest() { + return this.glyphProps.rest; + } + // Determine if the current note is a chord + isChord() { + return !this.isRest() && this.keys.length > 1; + } + // Determine if the `StaveNote` has a stem + hasStem() { + return this.glyphProps.stem; + } + hasFlag() { + return super.hasFlag() && !this.isRest(); + } + getStemX() { + if (this.noteType === 'r') { + return this.getCenterGlyphX(); + } + else { + // We adjust the origin of the stem because we want the stem left-aligned + // with the notehead if stemmed-down, and right-aligned if stemmed-up + return super.getStemX() + (this.stem_direction ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / (2 * -this.stem_direction) : 0); + } + } + // Get the `y` coordinate for text placed on the top/bottom of a + // note at a desired `text_line` + getYForTopText(textLine) { + const extents = this.getStemExtents(); + return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1)); + } + getYForBottomText(textLine) { + const extents = this.getStemExtents(); + return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine); + } + // Sets the current note to the provided `stave`. This applies + // `y` values to the `NoteHeads`. + setStave(stave) { + super.setStave(stave); + const ys = this._noteHeads.map((notehead) => { + notehead.setStave(stave); + return notehead.getY(); + }); + this.setYs(ys); + if (this.stem) { + const { y_top, y_bottom } = this.getNoteHeadBounds(); + this.stem.setYBounds(y_top, y_bottom); + } + return this; + } + // Check if note is shifted to the right + isDisplaced() { + return this.displaced; + } + // Sets whether shift note to the right. `displaced` is a `boolean` + setNoteDisplaced(displaced) { + this.displaced = displaced; + return this; + } + // Get the starting `x` coordinate for a `StaveTie` + getTieRightX() { + let tieStartX = this.getAbsoluteX(); + tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx; + if (this.modifierContext) + tieStartX += this.modifierContext.getRightShift(); + return tieStartX; + } + // Get the ending `x` coordinate for a `StaveTie` + getTieLeftX() { + let tieEndX = this.getAbsoluteX(); + tieEndX += this.x_shift - this.leftDisplacedHeadPx; + return tieEndX; + } + // Get the stave line on which to place a rest + getLineForRest() { + let restLine = this.keyProps[0].line; + if (this.keyProps.length > 1) { + const lastLine = this.keyProps[this.keyProps.length - 1].line; + const top = Math.max(restLine, lastLine); + const bot = Math.min(restLine, lastLine); + restLine = (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(top, bot); + } + return restLine; + } + // Get the default `x` and `y` coordinates for the provided `position` + // and key `index` + getModifierStartXY(position, index, options = {}) { + var _a, _b; + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); + } + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.'); + } + const { ABOVE, BELOW, LEFT, RIGHT } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position; + let x = 0; + if (position === LEFT) { + // FIXME: Left modifier padding, move to font file + x = -1 * 2; + } + else if (position === RIGHT) { + // FIXME: Right modifier padding, move to font file + x = this.getGlyphWidth() + this.x_shift + 2; + if (this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP && + this.hasFlag() && + (options.forceFlagRight || isInnerNoteIndex(this, index))) { + x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0; + } + } + else if (position === BELOW || position === ABOVE) { + x = this.getGlyphWidth() / 2; + } + return { + x: this.getAbsoluteX() + x, + y: this.ys[index], + }; + } + // Sets the style of the complete StaveNote, including all keys + // and the stem. + setStyle(style) { + return super.setGroupStyle(style); + } + setStemStyle(style) { + const stem = this.getStem(); + if (stem) + stem.setStyle(style); + return this; + } + getStemStyle() { + var _a; + return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle(); + } + setLedgerLineStyle(style) { + this.ledgerLineStyle = style; + } + getLedgerLineStyle() { + return this.ledgerLineStyle; + } + setFlagStyle(style) { + var _a; + (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style); + } + getFlagStyle() { + var _a; + return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle(); + } + // Sets the notehead at `index` to the provided coloring `style`. + // + // `style` is an `object` with the following properties: `shadowColor`, + // `shadowBlur`, `fillStyle`, `strokeStyle` + setKeyStyle(index, style) { + this._noteHeads[index].setStyle(style); + return this; + } + setKeyLine(index, line) { + this.keyProps[index].line = line; + this.reset(); + return this; + } + getKeyLine(index) { + return this.keyProps[index].line; + } + // Get the width of the note if it is displaced. Used for `Voice` + // formatting + getVoiceShiftWidth() { + // TODO: may need to accommodate for dot here. + return this.getGlyphWidth() * (this.displaced ? 2 : 1); + } + // Calculates and sets the extra pixels to the left or right + // if the note is displaced. + calcNoteDisplacements() { + this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN ? this.getGlyphWidth() : 0); + // For upstems with flags, the extra space is unnecessary, since it's taken + // up by the flag. + this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? this.getGlyphWidth() : 0); + } + // Pre-render formatting + preFormat() { + if (this.preFormatted) + return; + let noteHeadPadding = 0; + if (this.modifierContext) { + this.modifierContext.preFormat(); + // If there are no modifiers on this note, make sure there is adequate padding + // between the notes. + if (this.modifierContext.getWidth() === 0) { + noteHeadPadding = StaveNote.minNoteheadPadding; + } + } + let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding; + // For upward flagged notes, the width of the flag needs to be added + if (this.shouldDrawFlag() && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { + width += this.getGlyphWidth(); + // TODO: Add flag width as a separate metric + } + this.setWidth(width); + this.preFormatted = true; + } + /** + * @typedef {Object} noteHeadBounds + * @property {number} y_top the highest notehead bound + * @property {number} y_bottom the lowest notehead bound + * @property {number|Null} displaced_x the starting x for displaced noteheads + * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads + * @property {number} highest_line the highest notehead line in traditional music line + * numbering (bottom line = 1, top line = 5) + * @property {number} lowest_line the lowest notehead line + * @property {number|false} highest_displaced_line the highest staff line number + * for a displaced notehead + * @property {number|false} lowest_displaced_line + * @property {number} highest_non_displaced_line + * @property {number} lowest_non_displaced_line + */ + /** + * Get the staff line and y value for the highest & lowest noteheads + * @returns {noteHeadBounds} + */ + getNoteHeadBounds() { + // Top and bottom Y values for stem. + let yTop = +Infinity; + let yBottom = -Infinity; + let nonDisplacedX; + let displacedX; + let highestLine = this.checkStave().getNumLines(); + let lowestLine = 1; + let highestDisplacedLine; + let lowestDisplacedLine; + let highestNonDisplacedLine = highestLine; + let lowestNonDisplacedLine = lowestLine; + this._noteHeads.forEach((notehead) => { + const line = notehead.getLine(); + const y = notehead.getY(); + yTop = Math.min(y, yTop); + yBottom = Math.max(y, yBottom); + if (displacedX === undefined && notehead.isDisplaced()) { + displacedX = notehead.getAbsoluteX(); + } + if (nonDisplacedX === undefined && !notehead.isDisplaced()) { + nonDisplacedX = notehead.getAbsoluteX(); + } + highestLine = Math.max(line, highestLine); + lowestLine = Math.min(line, lowestLine); + if (notehead.isDisplaced()) { + highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine); + lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine); + } + else { + highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine); + lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine); + } + }, this); + return { + y_top: yTop, + y_bottom: yBottom, + displaced_x: displacedX, + non_displaced_x: nonDisplacedX, + highest_line: highestLine, + lowest_line: lowestLine, + highest_displaced_line: highestDisplacedLine, + lowest_displaced_line: lowestDisplacedLine, + highest_non_displaced_line: highestNonDisplacedLine, + lowest_non_displaced_line: lowestNonDisplacedLine, + }; + } + // Get the starting `x` coordinate for the noteheads + getNoteHeadBeginX() { + return this.getAbsoluteX() + this.x_shift; + } + // Get the ending `x` coordinate for the noteheads + getNoteHeadEndX() { + const xBegin = this.getNoteHeadBeginX(); + return xBegin + this.getGlyphWidth(); + } + get noteHeads() { + return this._noteHeads.slice(); + } + /** @deprecated use StaveNote.noteHeads instead. */ + get note_heads() { + showDeprecationWarningForNoteHeads(); + return this.noteHeads; + } + // Draw the ledger lines between the stave and the highest/lowest keys + drawLedgerLines() { + const stave = this.checkStave(); + const { glyphProps, render_options: { stroke_px }, } = this; + const ctx = this.checkContext(); + const width = glyphProps.getWidth() + stroke_px * 2; + const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2; + if (this.isRest()) + return; + if (!ctx) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', "Can't draw without a canvas context."); + } + const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds(); + // Early out if there are no ledger lines to draw. + if (highest_line < 6 && lowest_line > 0) + return; + const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0); + const drawLedgerLine = (y, normal, displaced) => { + let x; + if (displaced && normal) + x = min_x - stroke_px; + else if (normal) + x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px; + else + x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px; + const ledgerWidth = normal && displaced ? doubleWidth : width; + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x + ledgerWidth, y); + ctx.stroke(); + }; + const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle()); + this.applyStyle(ctx, style); + // Draw ledger lines below the staff: + for (let line = 6; line <= highest_line; ++line) { + const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line; + const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line; + drawLedgerLine(stave.getYForNote(line), normal, displaced); + } + // Draw ledger lines above the staff: + for (let line = 0; line >= lowest_line; --line) { + const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line; + const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line; + drawLedgerLine(stave.getYForNote(line), normal, displaced); + } + this.restoreStyle(ctx, style); + } + // Draw all key modifiers + drawModifiers(noteheadParam) { + const ctx = this.checkContext(); + for (let i = 0; i < this.modifiers.length; i++) { + const modifier = this.modifiers[i]; + const index = modifier.checkIndex(); + const notehead = this._noteHeads[index]; + if (notehead == noteheadParam) { + const noteheadStyle = notehead.getStyle(); + notehead.applyStyle(ctx, noteheadStyle); + modifier.setContext(ctx); + modifier.drawWithStyle(); + notehead.restoreStyle(ctx, noteheadStyle); + } + } + } + shouldDrawFlag() { + const hasStem = this.stem !== undefined; + const hasFlag = this.glyphProps.flag == true; + const hasNoBeam = this.beam === undefined; + return hasStem && hasFlag && hasNoBeam; + } + // Draw the flag for the note + drawFlag() { + var _a, _b, _c, _d, _e; + const ctx = this.checkContext(); + if (!ctx) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', "Can't draw without a canvas context."); + } + if (this.shouldDrawFlag()) { + const { y_top, y_bottom } = this.getNoteHeadBounds(); + // eslint-disable-next-line + const noteStemHeight = this.stem.getHeight(); + const flagX = this.getStemX(); + // What's with the magic +/- 2 + // ANSWER: a corner of the note stem pokes out beyond the tip of the flag. + // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely. + // Alternatively, we could shorten the stem. + const flagY = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN + ? // Down stems are below the note head and have flags on the right. + y_top - + noteStemHeight + + 2 - + (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() - + ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale()) + : // Up stems are above the note head and have flags on the right. + y_bottom - + noteStemHeight - + 2 + + (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() - + ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale()); + // Draw the Flag + (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY); + } + } + // Draw the NoteHeads + drawNoteHeads() { + const ctx = this.checkContext(); + this._noteHeads.forEach((notehead) => { + notehead.applyStyle(ctx); + ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true }); + notehead.setContext(ctx).draw(); + this.drawModifiers(notehead); + ctx.closeGroup(); + notehead.restoreStyle(ctx); + }); + } + drawStem(stemOptions) { + // GCR TODO: I can't find any context in which this is called with the stemStruct + // argument in the codebase or tests. Nor can I find a case where super.drawStem + // is called at all. Perhaps these should be removed? + const ctx = this.checkContext(); + if (stemOptions) { + this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem(stemOptions)); + } + // If we will render a flag, we shorten the stem so that the tip + // does not poke through the flag. + if (this.shouldDrawFlag() && this.stem) { + this.stem.adjustHeightForFlag(); + } + if (this.stem) { + this.stem.setContext(ctx).draw(); + } + } + /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */ + getStaveNoteScale() { + return 1.0; + } + /** + * Override stemmablenote stem extension to adjust for distance from middle line. + */ + getStemExtension() { + const super_stem_extension = super.getStemExtension(); + if (!this.glyphProps.stem) { + return super_stem_extension; + } + const stem_direction = this.getStemDirection(); + if (stem_direction !== this.calculateOptimalStemDirection()) { + return super_stem_extension; // no adjustment for manually set stem direction. + } + let mid_line_distance; + const MIDDLE_LINE = 3; + if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { + // Note that the use of maxLine here instead of minLine might + // seem counterintuitive, but in the case of (say) treble clef + // chord(F2, E4) stem up, we do not want to extend the stem because + // of F2, when a normal octave-length stem above E4 is fine. + // + // maxLine and minLine are set in calculateOptimalStemDirection() so + // will be known. + mid_line_distance = MIDDLE_LINE - this.maxLine; + } + else { + mid_line_distance = this.minLine - MIDDLE_LINE; + } + // how many lines more than an octave is the relevant notehead? + const lines_over_octave_from_mid_line = mid_line_distance - 3.5; + if (lines_over_octave_from_mid_line <= 0) { + return super_stem_extension; + } + const stave = this.getStave(); + let spacing_between_lines = 10; + if (stave != undefined) { + spacing_between_lines = stave.getSpacingBetweenLines(); + } + return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines; + } + // Draws all the `StaveNote` parts. This is the main drawing method. + draw() { + if (this.render_options.draw === false) + return; + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', "Can't draw note without Y values."); + } + const ctx = this.checkContext(); + const xBegin = this.getNoteHeadBeginX(); + const shouldRenderStem = this.hasStem() && !this.beam; + // Format note head x positions + this._noteHeads.forEach((notehead) => notehead.setX(xBegin)); + if (this.stem) { + // Format stem x positions + const stemX = this.getStemX(); + this.stem.setNoteHeadXBounds(stemX, stemX); + } + L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys); + // Apply the overall style -- may be contradicted by local settings: + this.applyStyle(); + ctx.openGroup('stavenote', this.getAttribute('id')); + this.drawLedgerLines(); + if (shouldRenderStem) + this.drawStem(); + this.drawNoteHeads(); + this.drawFlag(); + ctx.closeGroup(); + this.restoreStyle(); + this.setRendered(); + } +} +StaveNote.DEBUG = false; + + + +/***/ }), + +/***/ "./src/staverepetition.ts": +/*!********************************!*\ + !*** ./src/staverepetition.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Repetition": () => (/* binding */ Repetition) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Larry Kuhns 2011 + + + + + +class Repetition extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Repetition; + } + constructor(type, x, y_shift) { + super(); + this.symbol_type = type; + this.x = x; + this.x_shift = 0; + this.y_shift = y_shift; + this.resetFont(); + } + setShiftX(x) { + this.x_shift = x; + return this; + } + setShiftY(y) { + this.y_shift = y; + return this; + } + draw(stave, x) { + this.setRendered(); + switch (this.symbol_type) { + case Repetition.type.CODA_RIGHT: + this.drawCodaFixed(stave, x + stave.getWidth()); + break; + case Repetition.type.CODA_LEFT: + this.drawSymbolText(stave, x, 'Coda', true); + break; + case Repetition.type.SEGNO_LEFT: + this.drawSignoFixed(stave, x); + break; + case Repetition.type.SEGNO_RIGHT: + this.drawSignoFixed(stave, x + stave.getWidth()); + break; + case Repetition.type.DC: + this.drawSymbolText(stave, x, 'D.C.', false); + break; + case Repetition.type.DC_AL_CODA: + this.drawSymbolText(stave, x, 'D.C. al', true); + break; + case Repetition.type.DC_AL_FINE: + this.drawSymbolText(stave, x, 'D.C. al Fine', false); + break; + case Repetition.type.DS: + this.drawSymbolText(stave, x, 'D.S.', false); + break; + case Repetition.type.DS_AL_CODA: + this.drawSymbolText(stave, x, 'D.S. al', true); + break; + case Repetition.type.DS_AL_FINE: + this.drawSymbolText(stave, x, 'D.S. al Fine', false); + break; + case Repetition.type.FINE: + this.drawSymbolText(stave, x, 'Fine', false); + break; + case Repetition.type.TO_CODA: + this.drawSymbolText(stave, x, 'To', true); + break; + default: + break; + } + return this; + } + drawCodaFixed(stave, x) { + const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' }); + return this; + } + drawSignoFixed(stave, x) { + const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' }); + return this; + } + drawSymbolText(stave, x, text, draw_coda) { + var _a; + const ctx = stave.checkContext(); + ctx.save(); + ctx.setFont(this.textFont); + let text_x = 0; + let symbol_x = 0; + const modifierWidth = stave.getNoteStartX() - this.x; + switch (this.symbol_type) { + // To the left with symbol + case Repetition.type.CODA_LEFT: + // Offset Coda text to right of stave beginning + text_x = this.x + stave.getVerticalBarWidth(); + symbol_x = + text_x + + ctx.measureText(text).width + + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); + break; + // To the right without symbol + case Repetition.type.DC: + case Repetition.type.DC_AL_FINE: + case Repetition.type.DS: + case Repetition.type.DS_AL_FINE: + case Repetition.type.FINE: + text_x = + this.x + + x + + this.x_shift + + stave.getWidth() - + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') - + modifierWidth - + ctx.measureText(text).width; + break; + // To the right with symbol + default: + text_x = + this.x + + x + + this.x_shift + + stave.getWidth() - + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') - + modifierWidth - + ctx.measureText(text).width - + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); + symbol_x = + text_x + + ctx.measureText(text).width + + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); + break; + } + const y = stave.getYForTopText(stave.getNumLines()) + + this.y_shift + + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY'); + if (draw_coda) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, symbol_x, y, _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', { + category: 'coda', + }); + } + ctx.fillText(text, text_x, y + 5); + ctx.restore(); + return this; + } +} +Repetition.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE / 3, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; +Repetition.type = { + NONE: 1, + CODA_LEFT: 2, + CODA_RIGHT: 3, + SEGNO_LEFT: 4, + SEGNO_RIGHT: 5, + DC: 6, + DC_AL_CODA: 7, + DC_AL_FINE: 8, + DS: 9, + DS_AL_CODA: 10, + DS_AL_FINE: 11, + FINE: 12, + TO_CODA: 13, // To Coda at end of stave +}; + + + +/***/ }), + +/***/ "./src/stavesection.ts": +/*!*****************************!*\ + !*** ./src/stavesection.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveSection": () => (/* binding */ StaveSection) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Larry Kuhns 2011 + + + + +class StaveSection extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveSection; + } + constructor(section, x, shift_y, drawRect = true) { + super(); + this.setWidth(16); + this.section = section; + this.x = x; + this.shift_x = 0; + this.shift_y = shift_y; + this.drawRect = drawRect; + this.resetFont(); + } + setStaveSection(section) { + this.section = section; + return this; + } + setShiftX(x) { + this.shift_x = x; + return this; + } + setShiftY(y) { + this.shift_y = y; + return this; + } + draw(stave, shift_x) { + const borderWidth = 2; + const padding = 2; + const ctx = stave.checkContext(); + this.setRendered(); + ctx.save(); + ctx.setLineWidth(borderWidth); + ctx.setFont(this.textFont); + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont); + const textWidth = textFormatter.getWidthForTextInPx(this.section); + const textY = textFormatter.getYForStringInPx(this.section); + const textHeight = textY.height; + const headroom = -1 * textY.yMin; + const width = textWidth + 2 * padding; // add left & right padding + const height = textHeight + 2 * padding; // add top & bottom padding + // Seems to be a good default y + const y = stave.getYForTopText(1.5) + this.shift_y; + const x = this.x + shift_x; + if (this.drawRect) { + ctx.beginPath(); + ctx.rect(x, y - height + headroom, width, height); + ctx.stroke(); + } + ctx.fillText(this.section, x + padding, y - padding); + ctx.restore(); + return this; + } +} +StaveSection.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: 10, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stavetempo.ts": +/*!***************************!*\ + !*** ./src/stavetempo.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveTempo": () => (/* binding */ StaveTempo) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Radosaw Eichler 2012 + + + + + + +class StaveTempo extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StaveTempo; + } + constructor(tempo, x, shift_y) { + super(); + /** Font size for note. */ + this.render_options = { glyph_font_scale: 30 }; + this.tempo = tempo; + this.position = _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifierPosition.ABOVE; + this.x = x; + this.shift_x = 10; + this.shift_y = shift_y; + this.resetFont(); + } + setTempo(tempo) { + this.tempo = tempo; + return this; + } + setShiftX(x) { + this.shift_x = x; + return this; + } + setShiftY(y) { + this.shift_y = y; + return this; + } + draw(stave, shift_x) { + const ctx = stave.checkContext(); + this.setRendered(); + const options = this.render_options; + const scale = options.glyph_font_scale / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE; + const name = this.tempo.name; + const duration = this.tempo.duration; + const dots = this.tempo.dots || 0; + const bpm = this.tempo.bpm; + let x = this.x + this.shift_x + shift_x; + const y = stave.getYForTopText(1) + this.shift_y; + ctx.save(); + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont); + if (name) { + ctx.setFont(this.textFont); + ctx.fillText(name, x, y); + x += textFormatter.getWidthForTextInPx(name); + } + if (duration && bpm) { + // Override the weight and style. + const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' }); + ctx.setFont(noteTextFont); + const noteTextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(noteTextFont); + if (name) { + x += noteTextFormatter.getWidthForTextInPx('|'); + ctx.fillText('(', x, y); + x += noteTextFormatter.getWidthForTextInPx('('); + } + const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(duration); + x += 3 * scale; + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head); + x += _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale); + // Draw stem and flags + if (glyphProps.stem) { + let stem_height = 30; + if (glyphProps.beam_count) + stem_height += 3 * (glyphProps.beam_count - 1); + stem_height *= scale; + const y_top = y - stem_height; + ctx.fillRect(x - scale, y_top, scale, stem_height); + if (glyphProps.code && glyphProps.code_flag_upstem) { + const flagMetrics = _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, { + category: 'flag.staveTempo', + }); + x += (flagMetrics.width * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution; + } + } + // Draw dot + for (let i = 0; i < dots; i++) { + x += 6 * scale; + ctx.beginPath(); + ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false); + ctx.fill(); + } + ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y); + } + ctx.restore(); + return this; + } +} +StaveTempo.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: 14, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stavetext.ts": +/*!**************************!*\ + !*** ./src/stavetext.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveText": () => (/* binding */ StaveText) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Taehoon Moon 2014 + + + + + +class StaveText extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveText; + } + constructor(text, position, options = {}) { + super(); + this.setWidth(16); + this.text = text; + this.position = position; + this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: _textnote__WEBPACK_IMPORTED_MODULE_2__.TextNote.Justification.CENTER }, options); + this.resetFont(); + } + setStaveText(text) { + this.text = text; + return this; + } + setShiftX(x) { + this.shift_x = x; + return this; + } + setShiftY(y) { + this.shift_y = y; + return this; + } + setText(text) { + this.text = text; + return this; + } + draw(stave) { + const ctx = stave.checkContext(); + this.setRendered(); + ctx.save(); + ctx.setLineWidth(2); + ctx.setFont(this.textFont); + const text_width = ctx.measureText('' + this.text).width; + let x; + let y; + switch (this.position) { + case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT: + case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.RIGHT: + y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y; + if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT) { + x = stave.getX() - text_width - 24 + this.options.shift_x; + } + else { + x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x; + } + break; + case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE: + case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BELOW: + x = stave.getX() + this.options.shift_x; + if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.CENTER) { + x += stave.getWidth() / 2 - text_width / 2; + } + else if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.RIGHT) { + x += stave.getWidth() - text_width; + } + if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE) { + y = stave.getYForTopText(2) + this.options.shift_y; + } + else { + y = stave.getYForBottomText(2) + this.options.shift_y; + } + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.'); + } + ctx.fillText('' + this.text, x, y + 4); + ctx.restore(); + return this; + } +} +StaveText.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: 16, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stavetie.ts": +/*!*************************!*\ + !*** ./src/stavetie.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveTie": () => (/* binding */ StaveTie) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// This class implements varies types of ties between contiguous notes. The +// ties include: regular ties, hammer ons, pull offs, and slides. + + + +class StaveTie extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveTie; + } + /** + * @param notes is a struct that has: + * + * { + * first_note: Note, + * last_note: Note, + * first_indices: [n1, n2, n3], + * last_indices: [n1, n2, n3] + * } + * + * @param text + */ + constructor(notes, text) { + super(); + this.setNotes(notes); + this.text = text; + this.render_options = { + cp1: 8, + cp2: 12, + text_shift_x: 0, + first_x_shift: 0, + last_x_shift: 0, + y_shift: 7, + tie_spacing: 0, + }; + this.resetFont(); + } + setDirection(direction) { + this.direction = direction; + return this; + } + /** + * Set the notes to attach this tie to. + * + * @param {!Object} notes The notes to tie up. + */ + setNotes(notes) { + if (!notes.first_note && !notes.last_note) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.'); + } + if (!notes.first_indices) { + notes.first_indices = [0]; + } + if (!notes.last_indices) { + notes.last_indices = [0]; + } + if (notes.first_indices.length !== notes.last_indices.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tied notes must have same number of indices.'); + } + this.notes = notes; + return this; + } + /** + * @return {boolean} Returns true if this is a partial bar. + */ + isPartial() { + return !this.notes.first_note || !this.notes.last_note; + } + renderTie(params) { + if (params.first_ys.length === 0 || params.last_ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'No Y-values to render'); + } + const ctx = this.checkContext(); + let cp1 = this.render_options.cp1; + let cp2 = this.render_options.cp2; + if (Math.abs(params.last_x_px - params.first_x_px) < 10) { + cp1 = 2; + cp2 = 8; + } + const first_x_shift = this.render_options.first_x_shift; + const last_x_shift = this.render_options.last_x_shift; + const y_shift = this.render_options.y_shift * params.direction; + // setNotes(...) verified that first_indices and last_indices are not undefined. + // As a result, we use the ! non-null assertion operator here. + // eslint-disable-next-line + const first_indices = this.notes.first_indices; + // eslint-disable-next-line + const last_indices = this.notes.last_indices; + this.applyStyle(); + ctx.openGroup('stavetie', this.getAttribute('id')); + for (let i = 0; i < first_indices.length; ++i) { + const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2; + const first_y_px = params.first_ys[first_indices[i]] + y_shift; + const last_y_px = params.last_ys[last_indices[i]] + y_shift; + if (isNaN(first_y_px) || isNaN(last_y_px)) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Bad indices for tie rendering.'); + } + const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction; + const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction; + ctx.beginPath(); + ctx.moveTo(params.first_x_px + first_x_shift, first_y_px); + ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px); + ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px); + ctx.closePath(); + ctx.fill(); + } + ctx.closeGroup(); + this.restoreStyle(); + } + renderText(first_x_px, last_x_px) { + var _a, _b, _c; + if (!this.text) + return; + const ctx = this.checkContext(); + let center_x = (first_x_px + last_x_px) / 2; + center_x -= ctx.measureText(this.text).width / 2; + const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave(); + if (stave) { + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1); + ctx.restore(); + } + } + /** + * Returns the TieNotes structure of the first and last note this tie connects. + */ + getNotes() { + return this.notes; + } + draw() { + this.checkContext(); + this.setRendered(); + const first_note = this.notes.first_note; + const last_note = this.notes.last_note; + // Provide some default values so the compiler doesn't complain. + let first_x_px = 0; + let last_x_px = 0; + let first_ys = [0]; + let last_ys = [0]; + let stem_direction = 0; + if (first_note) { + first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing; + stem_direction = first_note.getStemDirection(); + first_ys = first_note.getYs(); + } + else if (last_note) { + const stave = last_note.checkStave(); + first_x_px = stave.getTieStartX(); + first_ys = last_note.getYs(); + this.notes.first_indices = this.notes.last_indices; + } + if (last_note) { + last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing; + stem_direction = last_note.getStemDirection(); + last_ys = last_note.getYs(); + } + else if (first_note) { + const stave = first_note.checkStave(); + last_x_px = stave.getTieEndX(); + last_ys = first_note.getYs(); + this.notes.last_indices = this.notes.first_indices; + } + if (this.direction) { + stem_direction = this.direction; + } + this.renderTie({ + first_x_px, + last_x_px, + first_ys, + last_ys, + direction: stem_direction, + }); + this.renderText(first_x_px, last_x_px); + return true; + } +} +/** Default text font. */ +StaveTie.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); + + + +/***/ }), + +/***/ "./src/stavevolta.ts": +/*!***************************!*\ + !*** ./src/stavevolta.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Volta": () => (/* binding */ Volta), +/* harmony export */ "VoltaType": () => (/* binding */ VoltaType) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Larry Kuhns 2011 + + + +var VoltaType; +(function (VoltaType) { + VoltaType[VoltaType["NONE"] = 1] = "NONE"; + VoltaType[VoltaType["BEGIN"] = 2] = "BEGIN"; + VoltaType[VoltaType["MID"] = 3] = "MID"; + VoltaType[VoltaType["END"] = 4] = "END"; + VoltaType[VoltaType["BEGIN_END"] = 5] = "BEGIN_END"; +})(VoltaType || (VoltaType = {})); +class Volta extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Volta; + } + static get type() { + return VoltaType; + } + constructor(type, number, x, y_shift) { + super(); + this.volta = type; + this.x = x; + this.y_shift = y_shift; + this.number = number; + this.resetFont(); + } + setShiftY(y) { + this.y_shift = y; + return this; + } + draw(stave, x) { + const ctx = stave.checkContext(); + this.setRendered(); + let width = stave.getWidth() - x; // don't include x (offset) for width + const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; + const vert_height = 1.5 * stave.getSpacingBetweenLines(); + switch (this.volta) { + case VoltaType.BEGIN: + ctx.fillRect(this.x + x, top_y, 1, vert_height); + break; + case VoltaType.END: + width -= 5; + ctx.fillRect(this.x + x + width, top_y, 1, vert_height); + break; + case VoltaType.BEGIN_END: + width -= 3; + ctx.fillRect(this.x + x, top_y, 1, vert_height); + ctx.fillRect(this.x + x + width, top_y, 1, vert_height); + break; + default: + break; + } + // If the beginning of a volta, draw measure number + if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) { + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText(this.number, this.x + x + 5, top_y + 15); + ctx.restore(); + } + ctx.fillRect(this.x + x, top_y, width, 1); + return this; + } +} +Volta.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: 9, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stem.ts": +/*!*********************!*\ + !*** ./src/stem.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Stem": () => (/* binding */ Stem) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// This file implements the `Stem` object. Generally this object is handled +// by its parent `StemmableNote`. + + + + +// eslint-disable-next-line +function L(...args) { + if (Stem.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Stem', args); +} +class Stem extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Stem; + } + // Stem directions + static get UP() { + return 1; + } + static get DOWN() { + return -1; + } + // Theme + static get WIDTH() { + return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_WIDTH; + } + static get HEIGHT() { + return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_HEIGHT; + } + constructor(options) { + super(); + this.stem_up_y_offset = 0; + this.stem_down_y_offset = 0; + this.stem_up_y_base_offset = 0; + this.stem_down_y_base_offset = 0; + // Default notehead x bounds + this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0; + this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0; + // Y bounds for top/bottom most notehead + this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0; + this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0; + // Stem top extension + this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0; + // Direction of the stem + this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0; + // Flag to override all draw calls + this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false; + this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false; + this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0; + // Use to adjust the rendered height without affecting + // the results of `.getExtents()` + this.renderHeightAdjustment = 0; + this.setOptions(options); + } + setOptions(options) { + // Changing where the stem meets the head + this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0; + this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0; + this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0; + this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0; + } + // Set the x bounds for the default notehead + setNoteHeadXBounds(x_begin, x_end) { + this.x_begin = x_begin; + this.x_end = x_end; + return this; + } + // Set the direction of the stem in relation to the noteheads + setDirection(direction) { + this.stem_direction = direction; + } + // Set the extension for the stem, generally for flags or beams + setExtension(ext) { + this.stem_extension = ext; + } + getExtension() { + return this.stem_extension; + } + // The the y bounds for the top and bottom noteheads + setYBounds(y_top, y_bottom) { + this.y_top = y_top; + this.y_bottom = y_bottom; + } + // Gets the entire height for the stem + getHeight() { + const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset; + const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping. + return unsigned_height * this.stem_direction; + } + getBoundingBox() { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NotImplemented', 'getBoundingBox() not implemented.'); + } + // Get the y coordinates for the very base of the stem to the top of + // the extension + getExtents() { + const isStemUp = this.stem_direction === Stem.UP; + const ys = [this.y_top, this.y_bottom]; + const stemHeight = Stem.HEIGHT + this.stem_extension; + const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys); + const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys); + const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction; + return { topY: stemTipY, baseY: outerMostNoteheadY }; + } + setVisibility(isVisible) { + this.hide = !isVisible; + return this; + } + setStemlet(isStemlet, stemletHeight) { + this.isStemlet = isStemlet; + this.stemletHeight = stemletHeight; + return this; + } + adjustHeightForFlag() { + this.renderHeightAdjustment = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3); + } + adjustHeightForBeam() { + this.renderHeightAdjustment = -Stem.WIDTH / 2; + } + // Render the stem onto the canvas + draw() { + this.setRendered(); + if (this.hide) + return; + const ctx = this.checkContext(); + let stem_x; + let stem_y; + const stem_direction = this.stem_direction; + let y_base_offset = 0; + if (stem_direction === Stem.DOWN) { + // Down stems are rendered to the left of the head. + stem_x = this.x_begin; + stem_y = this.y_top + this.stem_down_y_offset; + y_base_offset = this.stem_down_y_base_offset; + } + else { + // Up stems are rendered to the right of the head. + stem_x = this.x_end; + stem_y = this.y_bottom - this.stem_up_y_offset; + y_base_offset = this.stem_up_y_base_offset; + } + const stemHeight = this.getHeight(); + L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom); + // The offset from the stem's base which is required fo satisfy the stemlet height + const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0; + // Draw the stem + ctx.save(); + this.applyStyle(); + ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true }); + ctx.beginPath(); + ctx.setLineWidth(Stem.WIDTH); + ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset); + ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction); + ctx.stroke(); + ctx.closeGroup(); + this.restoreStyle(); + ctx.restore(); + } +} +/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */ +Stem.DEBUG = false; + + + +/***/ }), + +/***/ "./src/stemmablenote.ts": +/*!******************************!*\ + !*** ./src/stemmablenote.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StemmableNote": () => (/* binding */ StemmableNote) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// `StemmableNote` is an abstract interface for notes with optional stems. +// Examples of stemmable notes are `StaveNote` and `TabNote` + + + + + + +class StemmableNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StemmableNote; + } + constructor(noteStruct) { + super(noteStruct); + } + // Get and set the note's `Stem` + getStem() { + return this.stem; + } + checkStem() { + if (!this.stem) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to instance'); + } + return this.stem; + } + setStem(stem) { + this.stem = stem; + this.addChildElement(stem); + return this; + } + // Builds and sets a new stem + buildStem() { + const stem = new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem(); + this.setStem(stem); + return this; + } + buildFlag(category = 'flag') { + const { glyphProps } = this; + if (this.hasFlag()) { + const flagCode = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem; + if (flagCode) + this.flag = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(flagCode, this.render_options.glyph_font_scale, { category }); + } + } + // Get the custom glyph associated with the outer note head on the base of the stem. + getBaseCustomNoteHeadGlyphProps() { + if (this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + return this.customGlyphs[this.customGlyphs.length - 1]; + } + else { + return this.customGlyphs[0]; + } + } + // Get the full length of stem + getStemLength() { + return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT + this.getStemExtension(); + } + // Get the number of beams for this duration + getBeamCount() { + const glyphProps = this.getGlyphProps(); + if (glyphProps) { + return glyphProps.beam_count; + } + else { + return 0; + } + } + // Get the minimum length of stem + getStemMinimumLength() { + const frac = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToFraction(this.duration); + let length = frac.value() <= 1 ? 0 : 20; + // if note is flagged, cannot shorten beam + switch (this.duration) { + case '8': + if (this.beam == undefined) + length = 35; + break; + case '16': + length = this.beam == undefined ? 35 : 25; + break; + case '32': + length = this.beam == undefined ? 45 : 35; + break; + case '64': + length = this.beam == undefined ? 50 : 40; + break; + case '128': + length = this.beam == undefined ? 55 : 45; + break; + default: + break; + } + return length; + } + // Get/set the direction of the stem + getStemDirection() { + if (!this.stem_direction) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); + return this.stem_direction; + } + setStemDirection(direction) { + if (!direction) + direction = _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + if (direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArgument', `Invalid stem direction: ${direction}`); + } + this.stem_direction = direction; + // Reset and reformat everything. Flag has to be built before calling getStemExtension. + this.reset(); + if (this.hasFlag()) { + this.buildFlag(); + } + this.beam = undefined; + if (this.stem) { + this.stem.setDirection(direction); + this.stem.setExtension(this.getStemExtension()); + // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten + // the stem appropriately. If there's no custom note head, lookup the standard notehead. + const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps(); + // Get the font-specific customizations for the note heads. + const offsets = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, { + offsetYBaseStemUp: 0, + offsetYTopStemUp: 0, + offsetYBaseStemDown: 0, + offsetYTopStemDown: 0, + }); + // Configure the stem to use these offsets. + this.stem.setOptions({ + stem_up_y_offset: offsets.offsetYTopStemUp, + stem_down_y_offset: offsets.offsetYTopStemDown, + stem_up_y_base_offset: offsets.offsetYBaseStemUp, + stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset, + }); + } + if (this.preFormatted) { + this.preFormat(); + } + return this; + } + // Get the `x` coordinate of the stem + getStemX() { + const x_begin = this.getAbsoluteX() + this.x_shift; + const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth(); + const stem_x = this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? x_begin : x_end; + return stem_x; + } + // Get the `x` coordinate for the center of the glyph. + // Used for `TabNote` stems and stemlets over rests + getCenterGlyphX() { + return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2; + } + // Get the stem extension for the current duration + getStemExtension() { + const glyphProps = this.getGlyphProps(); + if (this.stem_extension_override != undefined) { + return this.stem_extension_override; + } + // Use stem_beam_extension with beams + if (this.beam) { + return glyphProps.stem_beam_extension; + } + if (glyphProps) { + return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension; + } + return 0; + } + // Set the stem length to a specific. Will override the default length. + setStemLength(height) { + this.stem_extension_override = height - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT; + return this; + } + // Get the top and bottom `y` values of the stem. + getStemExtents() { + if (!this.stem) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); + return this.stem.getExtents(); + } + /** Gets the `y` value for the top modifiers at a specific `textLine`. */ + getYForTopText(textLine) { + const stave = this.checkStave(); + if (this.hasStem()) { + const extents = this.getStemExtents(); + if (!extents) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.'); + return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1)); + } + else { + return stave.getYForTopText(textLine); + } + } + /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */ + getYForBottomText(textLine) { + const stave = this.checkStave(); + if (this.hasStem()) { + const extents = this.getStemExtents(); + if (!extents) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.'); + return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine); + } + else { + return stave.getYForBottomText(textLine); + } + } + hasFlag() { + return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(this.duration).flag == true && !this.beam; + } + /** Post formats the note. */ + postFormat() { + var _a; + (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat(); + this.postFormatted = true; + return this; + } + /** Renders the stem onto the canvas. */ + drawStem(stemOptions) { + var _a; + this.checkContext(); + this.setRendered(); + this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem(stemOptions)); + (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw(); + } +} + + +/***/ }), + +/***/ "./src/stringnumber.ts": +/*!*****************************!*\ + !*** ./src/stringnumber.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StringNumber": () => (/* binding */ StringNumber) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Larry Kuhns +// +// This file implements the `StringNumber` class which renders string +// number annotations beside notes. + + + + + + + +class StringNumber extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StringNumber; + } + static get metrics() { + var _a; + return ((_a = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : { + verticalPadding: 0, + stemPadding: 0, + leftPadding: 0, + rightPadding: 0, + }); + } + // ## Static Methods + // Arrange string numbers inside a `ModifierContext` + static format(nums, state) { + /** + * The modifier context's left_shift state. + */ + const left_shift = state.left_shift; + /** + * The modifier context's right_shift state. + */ + const right_shift = state.right_shift; + const num_spacing = 1; + if (!nums || nums.length === 0) + return false; + const nums_list = []; + let prev_note = null; + let extraXSpaceForDisplacedNotehead = 0; + let shift_right = 0; + const modLines = 0; + for (let i = 0; i < nums.length; ++i) { + const num = nums[i]; + const note = num.getNote(); + const pos = num.getPosition(); + if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(note)) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoStaveNote'); + } + const index = num.checkIndex(); + const props = note.getKeyProps()[index]; + const mc = note.getModifierContext(); + const verticalSpaceNeeded = (num.radius * 2) / _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE + 0.5; + if (mc) { + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) { + num.text_line = mc.getState().top_text_line; + state.top_text_line += verticalSpaceNeeded; + } + else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) { + num.text_line = mc.getState().text_line; + state.text_line += verticalSpaceNeeded; + } + } + if (note !== prev_note) { + for (let n = 0; n < note.keys.length; ++n) { + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { + extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead); + } + if (right_shift === 0) { + shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right); + } + } + prev_note = note; + } + const glyphLine = modLines === 0 ? props.line : modLines; + nums_list.push({ + pos, + note, + num, + line: glyphLine, + shiftL: extraXSpaceForDisplacedNotehead, + shiftR: shift_right, + }); + } + // Sort string numbers by line number. + nums_list.sort((a, b) => b.line - a.line); + let num_shiftR = 0; + let x_widthL = 0; + let x_widthR = 0; + let last_line = null; + let last_note = null; + for (let i = 0; i < nums_list.length; ++i) { + const note = nums_list[i].note; + const pos = nums_list[i].pos; + const num = nums_list[i].num; + const line = nums_list[i].line; + const shiftR = nums_list[i].shiftR; + // Reset the position of the string number every line. + if (line !== last_line || note !== last_note) { + num_shiftR = right_shift + shiftR; + } + const num_width = num.getWidth() + num_spacing; + let num_x_shift = 0; + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { + num.setXShift(left_shift + extraXSpaceForDisplacedNotehead); + num_x_shift = num_width; // spacing + x_widthL = Math.max(num_x_shift, x_widthL); + } + else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) { + num.setXShift(num_shiftR); + num_x_shift += num_width; // spacing + x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR; + } + last_line = line; + last_note = note; + } + state.left_shift += x_widthL; + state.right_shift += x_widthR; + return true; + } + constructor(number) { + super(); + this.string_number = number; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE; // Default position above stem or note head + this.x_shift = 0; + this.y_shift = 0; + this.text_line = 0; + this.stem_offset = 0; + this.x_offset = 0; // Horizontal offset from default + this.y_offset = 0; // Vertical offset from default + this.dashed = true; // true - draw dashed extension false - no extension + this.leg = _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line + this.radius = 8; + this.drawCircle = true; + this.setWidth(this.radius * 2 + 4); + this.resetFont(); + } + setLineEndType(leg) { + if (leg >= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE && leg <= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN) { + this.leg = leg; + } + return this; + } + setStringNumber(number) { + this.string_number = number; + return this; + } + setOffsetX(x) { + this.x_offset = x; + return this; + } + setOffsetY(y) { + this.y_offset = y; + return this; + } + setLastNote(note) { + this.last_note = note; + return this; + } + setDashed(dashed) { + this.dashed = dashed; + return this; + } + setDrawCircle(drawCircle) { + this.drawCircle = drawCircle; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index); + const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP; + let dot_x = start.x + this.x_shift + this.x_offset; + let stem_ext = {}; + if (note.hasStem()) { + stem_ext = note.checkStem().getExtents(); + } + let dot_y = start.y + this.y_shift + this.y_offset; + switch (this.position) { + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE: + { + const ys = note.getYs(); + dot_y = ys.reduce((a, b) => (a < b ? a : b)); + if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { + dot_y = stem_ext.topY + StringNumber.metrics.stemPadding; + } + dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE; + } + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW: + { + const ys = note.getYs(); + dot_y = ys.reduce((a, b) => (a > b ? a : b)); + if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN) { + dot_y = stem_ext.topY - StringNumber.metrics.stemPadding; + } + dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE; + } + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT: + dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding; + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT: + dot_x += this.radius / 2 + StringNumber.metrics.rightPadding; + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid`); + } + ctx.save(); + if (this.drawCircle) { + ctx.beginPath(); + ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false); + ctx.setLineWidth(1.5); + ctx.stroke(); + } + ctx.setFont(this.textFont); + const x = dot_x - ctx.measureText(this.string_number).width / 2; + ctx.fillText('' + this.string_number, x, dot_y + 4.5); + const lastNote = this.last_note; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(lastNote)) { + // Only StemmableNote objects have getStemX(). + const end = lastNote.getStemX() - note.getX() + 5; + ctx.setStrokeStyle('#000000'); + ctx.setLineCap('round'); + ctx.setLineWidth(0.6); + if (this.dashed) { + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]); + } + else { + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]); + } + let len; + let pattern; + switch (this.leg) { + case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.UP: + len = -10; + pattern = this.dashed ? [3, 3] : [3, 0]; + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern); + break; + case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN: + len = 10; + pattern = this.dashed ? [3, 3] : [3, 0]; + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern); + break; + default: + break; + } + } + ctx.restore(); + } +} +StringNumber.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/strokes.ts": +/*!************************!*\ + !*** ./src/strokes.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Stroke": () => (/* binding */ Stroke) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Larry Kuhns +// +// This file implements the `Stroke` class which renders chord strokes +// that can be arpeggiated, brushed, rasquedo, etc. + + + + + + +class Stroke extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Stroke; + } + // Arrange strokes inside `ModifierContext` + static format(strokes, state) { + const left_shift = state.left_shift; + const stroke_spacing = 0; + if (!strokes || strokes.length === 0) + return false; + const strokeList = strokes.map((stroke) => { + const note = stroke.getNote(); + const index = stroke.checkIndex(); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) { + // Only StaveNote objects have getKeyProps(). + const { line } = note.getKeyProps()[index]; + const shift = note.getLeftDisplacedHeadPx(); + return { line, shift, stroke }; + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) { + // Only TabNote objects have getPositions(). + const { str: string } = note.getPositions()[index]; + return { line: string, shift: 0, stroke }; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('Internal', 'Unexpected instance.'); + } + }); + const strokeShift = left_shift; + // There can only be one stroke .. if more than one, they overlay each other + const xShift = strokeList.reduce((xShift, { stroke, shift }) => { + stroke.setXShift(strokeShift + shift); + return Math.max(stroke.getWidth() + stroke_spacing, xShift); + }, 0); + state.left_shift += xShift; + return true; + } + constructor(type, options) { + super(); + this.options = Object.assign({ all_voices: true }, options); + // multi voice - span stroke across all voices if true + this.all_voices = this.options.all_voices; + // multi voice - end note of stroke, set in draw() + this.type = type; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT; + this.render_options = { + font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, + }; + this.resetFont(); + this.setXShift(0); + this.setWidth(10); + } + getPosition() { + return this.position; + } + addEndNote(note) { + this.note_end = note; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index); + let ys = note.getYs(); + let topY = start.y; + let botY = start.y; + const x = start.x - 5; + const line_space = note.checkStave().getSpacingBetweenLines(); + const notes = this.checkModifierContext().getMembers(note.getCategory()); + for (let i = 0; i < notes.length; i++) { + const note = notes[i]; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isNote)(note)) { + // Only Note objects have getYs(). + // note is an instance of either StaveNote or TabNote. + ys = note.getYs(); + for (let n = 0; n < ys.length; n++) { + if (this.note === notes[i] || this.all_voices) { + topY = Math.min(topY, ys[n]); + botY = Math.max(botY, ys[n]); + } + } + } + } + let arrow = ''; + let arrow_shift_x = 0; + let arrow_y = 0; + let text_shift_x = 0; + let text_y = 0; + switch (this.type) { + case Stroke.Type.BRUSH_DOWN: + arrow = 'arrowheadBlackUp'; + arrow_shift_x = -3; + arrow_y = topY - line_space / 2 + 10; + botY += line_space / 2; + break; + case Stroke.Type.BRUSH_UP: + arrow = 'arrowheadBlackDown'; + arrow_shift_x = 0.5; + arrow_y = botY + line_space / 2; + topY -= line_space / 2; + break; + case Stroke.Type.ROLL_DOWN: + case Stroke.Type.RASQUEDO_DOWN: + arrow = 'arrowheadBlackUp'; + arrow_shift_x = -3; + text_shift_x = this.x_shift + arrow_shift_x - 2; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) { + topY += 1.5 * line_space; + if ((botY - topY) % 2 !== 0) { + botY += 0.5 * line_space; + } + else { + botY += line_space; + } + arrow_y = topY - line_space; + text_y = botY + line_space + 2; + } + else { + topY += 1.5 * line_space; + botY += line_space; + arrow_y = topY - 0.75 * line_space; + text_y = botY + 0.25 * line_space; + } + break; + case Stroke.Type.ROLL_UP: + case Stroke.Type.RASQUEDO_UP: + arrow = 'arrowheadBlackDown'; + arrow_shift_x = -4; + text_shift_x = this.x_shift + arrow_shift_x - 1; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) { + arrow_y = line_space / 2; + topY += 0.5 * line_space; + if ((botY - topY) % 2 === 0) { + botY += line_space / 2; + } + arrow_y = botY + 0.5 * line_space; + text_y = topY - 1.25 * line_space; + } + else { + topY += 0.25 * line_space; + botY += 0.5 * line_space; + arrow_y = botY + 0.25 * line_space; + text_y = topY - line_space; + } + break; + case Stroke.Type.ARPEGGIO_DIRECTIONLESS: + topY += 0.5 * line_space; + botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`); + } + let strokeLine = 'straight'; + // Draw the stroke + if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) { + ctx.fillRect(x + this.x_shift, topY, 1, botY - topY); + } + else { + strokeLine = 'wiggly'; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) { + for (let i = topY; i <= botY; i += line_space) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp'); + } + } + else { + let i; + for (i = topY; i <= botY; i += 10) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp'); + } + if (this.type === Stroke.Type.RASQUEDO_DOWN) { + text_y = i + 0.25 * line_space; + } + } + } + if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) { + return; // skip drawing arrow heads or text + } + // Draw the arrow head + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, { + category: `stroke_${strokeLine}.${arrow}`, + }); + // Draw the rasquedo "R" + if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) { + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText('R', x + text_shift_x, text_y); + ctx.restore(); + } + } +} +Stroke.Type = { + BRUSH_DOWN: 1, + BRUSH_UP: 2, + ROLL_DOWN: 3, + ROLL_UP: 4, + RASQUEDO_DOWN: 5, + RASQUEDO_UP: 6, + ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow +}; +Stroke.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC, +}; + + + +/***/ }), + +/***/ "./src/svgcontext.ts": +/*!***************************!*\ + !*** ./src/svgcontext.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SVGContext": () => (/* binding */ SVGContext) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// @author Gregory Ristow (2015) + + + + +/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */ +const ATTRIBUTES_TO_IGNORE = { + path: { + x: true, + y: true, + width: true, + height: true, + 'font-family': true, + 'font-weight': true, + 'font-style': true, + 'font-size': true, + }, + rect: { + 'font-family': true, + 'font-weight': true, + 'font-style': true, + 'font-size': true, + }, + text: { + width: true, + height: true, + }, +}; +/** Create the SVG in the SVG namespace. */ +const SVG_NS = 'http://www.w3.org/2000/svg'; +const TWO_PI = 2 * Math.PI; +class MeasureTextCache { + constructor() { + // The cache is keyed first by the text string, then by the font attributes + // joined together. + this.cache = {}; + } + lookup(text, svg, attributes) { + let entries = this.cache[text]; + if (entries === undefined) { + entries = {}; + this.cache[text] = entries; + } + const family = attributes['font-family']; + const size = attributes['font-size']; + const weight = attributes['font-weight']; + const style = attributes['font-style']; + const key = `${family}%${size}%${weight}%${style}`; + let entry = entries[key]; + if (entry === undefined) { + entry = this.measureImpl(text, svg, attributes); + entries[key] = entry; + } + return entry; + } + measureImpl(text, svg, attributes) { + let txt = this.txt; + if (!txt) { + // Create the SVG text element that will be used to measure text in the event + // of a cache miss. + txt = document.createElementNS(SVG_NS, 'text'); + this.txt = txt; + } + txt.textContent = text; + if (attributes['font-family']) + txt.setAttributeNS(null, 'font-family', attributes['font-family']); + if (attributes['font-size']) + txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`); + if (attributes['font-style']) + txt.setAttributeNS(null, 'font-style', attributes['font-style']); + if (attributes['font-weight']) + txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`); + svg.appendChild(txt); + const bbox = txt.getBBox(); + svg.removeChild(txt); + return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height }; + } +} +/** + * SVG rendering context with an API similar to CanvasRenderingContext2D. + */ +class SVGContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext { + constructor(element) { + super(); + this.width = 0; + this.height = 0; + this.precision = 1; + this.backgroundFillStyle = 'white'; + /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */ + this.fontCSSString = ''; + this.element = element; + this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RENDER_PRECISION_PLACES); + // Create a SVG element and add it to the container element. + const svg = this.create('svg'); + this.element.appendChild(svg); + this.svg = svg; + this.parent = this.svg; + this.groups = [this.svg]; + this.path = ''; + this.pen = { x: NaN, y: NaN }; + this.lineWidth = 1.0; + const defaultFontAttributes = { + 'font-family': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + 'font-size': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE + 'pt', + 'font-weight': _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + 'font-style': _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, + }; + this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes); + this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes); + this.groupAttributes = []; + this.applyAttributes(svg, this.attributes); + this.groupAttributes.push(Object.assign({}, this.attributes)); + this.shadow_attributes = { + width: 0, + color: 'black', + }; + this.state_stack = []; + } + round(n) { + return Math.round(n * this.precision) / this.precision; + } + create(svgElementType) { + return document.createElementNS(SVG_NS, svgElementType); + } + // Allow grouping elements in containers for interactivity. + openGroup(cls, id, attrs) { + const group = this.create('g'); + this.groups.push(group); + this.parent.appendChild(group); + this.parent = group; + if (cls) + group.setAttribute('class', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(cls)); + if (id) + group.setAttribute('id', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(id)); + if (attrs && attrs.pointerBBox) { + group.setAttribute('pointer-events', 'bounding-box'); + } + this.applyAttributes(group, this.attributes); + this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes)); + return group; + } + closeGroup() { + this.groups.pop(); + this.groupAttributes.pop(); + this.parent = this.groups[this.groups.length - 1]; + } + add(elem) { + this.parent.appendChild(elem); + } + setFillStyle(style) { + this.attributes.fill = style; + return this; + } + /** + * Used to set the fill color for `clearRect()`. This allows us to simulate + * cutting a "hole" into the SVG drawing. + */ + setBackgroundFillStyle(style) { + this.backgroundFillStyle = style; + return this; + } + setStrokeStyle(style) { + this.attributes.stroke = style; + return this; + } + setShadowColor(color) { + this.shadow_attributes.color = color; + return this; + } + /** + * @param blur A non-negative float specifying the level of shadow blur, where 0 + * represents no blur and larger numbers represent increasingly more blur. + * @returns this + */ + setShadowBlur(blur) { + this.shadow_attributes.width = blur; + return this; + } + /** + * @param width + * @returns this + */ + setLineWidth(width) { + this.attributes['stroke-width'] = width; + this.lineWidth = width; + return this; + } + /** + * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...] + * @returns this + * + * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray) + */ + setLineDash(lineDash) { + if (Object.prototype.toString.call(lineDash) === '[object Array]') { + this.attributes['stroke-dasharray'] = lineDash.join(','); + return this; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('ArgumentError', 'lineDash must be an array of integers.'); + } + } + /** + * @param capType + * @returns this + */ + setLineCap(capType) { + this.attributes['stroke-linecap'] = capType; + return this; + } + // ### Sizing & Scaling Methods: + // TODO (GCR): See note at scale() -- separate our internal + // conception of pixel-based width/height from the style.width + // and style.height properties eventually to allow users to + // apply responsive sizing attributes to the SVG. + resize(width, height) { + this.width = width; + this.height = height; + this.element.style.width = width.toString(); + this.svg.style.width = width.toString(); + this.svg.style.height = height.toString(); + const attributes = { + width, + height, + }; + this.applyAttributes(this.svg, attributes); + this.scale(this.state.scaleX, this.state.scaleY); + return this; + } + scale(x, y) { + // uses viewBox to scale + // TODO (GCR): we may at some point want to distinguish the + // style.width / style.height properties that are applied to + // the SVG object from our internal conception of the SVG + // width/height. This would allow us to create automatically + // scaling SVG's that filled their containers, for instance. + // + // As this isn't implemented in Canvas contexts, + // I've left as is for now, but in using the viewBox to + // handle internal scaling, am trying to make it possible + // for us to eventually move in that direction. + this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x; + this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y; + const visibleWidth = this.width / this.state.scaleX; + const visibleHeight = this.height / this.state.scaleY; + this.setViewBox(0, 0, visibleWidth, visibleHeight); + return this; + } + /** + * 1 arg: string in the "x y w h" format + * 4 args: x:number, y:number, w:number, h:number + */ + setViewBox(viewBox_or_minX, minY, width, height) { + if (typeof viewBox_or_minX === 'string') { + this.svg.setAttribute('viewBox', viewBox_or_minX); + } + else { + const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height; + this.svg.setAttribute('viewBox', viewBoxString); + } + } + // ### Drawing helper methods: + applyAttributes(element, attributes) { + const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName]; + for (const attrName in attributes) { + if (attrNamesToIgnore && attrNamesToIgnore[attrName]) { + continue; + } + if (attributes[attrName] && + (this.groupAttributes.length == 0 || + attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName])) + element.setAttributeNS(null, attrName, attributes[attrName]); + } + return element; + } + // ### Shape & Path Methods: + clear() { + // Clear the SVG by removing all inner children. + // (This approach is usually slightly more efficient + // than removing the old SVG & adding a new one to + // the container element, since it does not cause the + // container to resize twice. Also, the resize + // triggered by removing the entire SVG can trigger + // a touchcancel event when the element resizes away + // from a touch point.) + while (this.svg.lastChild) { + this.svg.removeChild(this.svg.lastChild); + } + // Replace the viewbox attribute we just removed. + this.scale(this.state.scaleX, this.state.scaleY); + } + // ## Rectangles: + rect(x, y, width, height, attributes) { + // Avoid invalid negative height attributes by flipping the rectangle on its head: + if (height < 0) { + y += height; + height *= -1; + } + const rectangle = this.create('rect'); + attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' }; + x = this.round(x); + y = this.round(y); + width = this.round(width); + height = this.round(height); + this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes)); + this.add(rectangle); + return this; + } + fillRect(x, y, width, height) { + const attributes = { fill: this.attributes.fill, stroke: 'none' }; + this.rect(x, y, width, height, attributes); + return this; + } + clearRect(x, y, width, height) { + // Currently this fills a rect with the backgroundFillStyle, rather + // than "cut a hole" into the existing shapes. + // + // Since tabNote seems to be the only module that makes use of this + // it may be worth creating a separate tabStave that would + // draw lines around locations of tablature fingering. + this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' }); + return this; + } + // ## Paths: + beginPath() { + this.path = ''; + this.pen.x = NaN; + this.pen.y = NaN; + return this; + } + moveTo(x, y) { + x = this.round(x); + y = this.round(y); + this.path += 'M' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + lineTo(x, y) { + x = this.round(x); + y = this.round(y); + this.path += 'L' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + bezierCurveTo(x1, y1, x2, y2, x, y) { + x = this.round(x); + y = this.round(y); + x1 = this.round(x1); + y1 = this.round(y1); + x2 = this.round(x2); + y2 = this.round(y2); + this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + quadraticCurveTo(x1, y1, x, y) { + x = this.round(x); + y = this.round(y); + x1 = this.round(x1); + y1 = this.round(y1); + this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + arc(x, y, radius, startAngle, endAngle, counterclockwise) { + let x0 = x + radius * Math.cos(startAngle); + let y0 = y + radius * Math.sin(startAngle); + x0 = this.round(x0); + y0 = this.round(y0); + // svg behavior different from canvas. Don't normalize angles if + // we are drawing a circle because they both normalize to 0 + const tmpStartTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(startAngle); + const tmpEndTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(endAngle); + if ((!counterclockwise && endAngle - startAngle >= TWO_PI) || + (counterclockwise && startAngle - endAngle >= TWO_PI) || + tmpStartTest === tmpEndTest) { + let x1 = x + radius * Math.cos(startAngle + Math.PI); + let y1 = y + radius * Math.sin(startAngle + Math.PI); + // There's no way to specify a completely circular arc in SVG so we have to + // use two semi-circular arcs. + x1 = this.round(x1); + y1 = this.round(y1); + radius = this.round(radius); + this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `; + this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`; + this.pen.x = x0; + this.pen.y = y0; + } + else { + let x1 = x + radius * Math.cos(endAngle); + let y1 = y + radius * Math.sin(endAngle); + startAngle = tmpStartTest; + endAngle = tmpEndTest; + let large; + if (Math.abs(endAngle - startAngle) < Math.PI) { + large = counterclockwise; + } + else { + large = !counterclockwise; + } + if (startAngle > endAngle) { + large = !large; + } + const sweep = !counterclockwise; + x1 = this.round(x1); + y1 = this.round(y1); + radius = this.round(radius); + this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`; + this.pen.x = x1; + this.pen.y = y1; + } + return this; + } + closePath() { + this.path += 'Z'; + return this; + } + getShadowStyle() { + const sa = this.shadow_attributes; + // A CSS drop-shadow filter blur looks different than a canvas shadowBlur + // of the same radius, so we scale the drop-shadow radius here to make it + // look close to the canvas shadow. + return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`; + } + fill(attributes) { + const path = this.create('path'); + if (typeof attributes === 'undefined') { + attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' }); + } + attributes.d = this.path; + if (this.shadow_attributes.width > 0) { + attributes.style = this.getShadowStyle(); + } + this.applyAttributes(path, attributes); + this.add(path); + return this; + } + stroke() { + const path = this.create('path'); + const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path }); + if (this.shadow_attributes.width > 0) { + attributes.style = this.getShadowStyle(); + } + this.applyAttributes(path, attributes); + this.add(path); + return this; + } + // ## Text Methods: + measureText(text) { + return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes); + } + fillText(text, x, y) { + if (!text || text.length <= 0) { + return this; + } + x = this.round(x); + y = this.round(y); + const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x, + y }); + const txt = this.create('text'); + txt.textContent = text; + this.applyAttributes(txt, attributes); + this.add(txt); + return this; + } + // TODO: State should be deep-copied. + save() { + this.state_stack.push({ + state: { + 'font-family': this.state['font-family'], + 'font-weight': this.state['font-weight'], + 'font-style': this.state['font-style'], + 'font-size': this.state['font-size'], + scale: this.state.scale, + }, + attributes: { + 'font-family': this.attributes['font-family'], + 'font-weight': this.attributes['font-weight'], + 'font-style': this.attributes['font-style'], + 'font-size': this.attributes['font-size'], + fill: this.attributes.fill, + stroke: this.attributes.stroke, + 'stroke-width': this.attributes['stroke-width'], + 'stroke-dasharray': this.attributes['stroke-dasharray'], + }, + shadow_attributes: { + width: this.shadow_attributes.width, + color: this.shadow_attributes.color, + }, + lineWidth: this.lineWidth, + }); + return this; + } + // TODO: State should be deep-restored. + restore() { + const savedState = this.state_stack.pop(); + if (savedState) { + const state = savedState; + this.state['font-family'] = state.state['font-family']; + this.state['font-weight'] = state.state['font-weight']; + this.state['font-style'] = state.state['font-style']; + this.state['font-size'] = state.state['font-size']; + this.state.scale = state.state.scale; + this.attributes['font-family'] = state.attributes['font-family']; + this.attributes['font-weight'] = state.attributes['font-weight']; + this.attributes['font-style'] = state.attributes['font-style']; + this.attributes['font-size'] = state.attributes['font-size']; + this.attributes.fill = state.attributes.fill; + this.attributes.stroke = state.attributes.stroke; + this.attributes['stroke-width'] = state.attributes['stroke-width']; + this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray']; + this.shadow_attributes.width = state.shadow_attributes.width; + this.shadow_attributes.color = state.shadow_attributes.color; + this.lineWidth = state.lineWidth; + } + return this; + } + set fillStyle(style) { + this.setFillStyle(style); + } + get fillStyle() { + return this.attributes.fill; + } + set strokeStyle(style) { + this.setStrokeStyle(style); + } + get strokeStyle() { + return this.attributes.stroke; + } + /** + * @param f is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted + * into the font-weight attribute (e.g., font-weight="bold") + * @param style is a string (e.g., 'italic', 'normal') that is inserted into the + * font-style attribute (e.g., font-style="italic") + */ + setFont(f, size, weight, style) { + const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style); + this.fontCSSString = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo); + const fontAttributes = { + 'font-family': fontInfo.family, + 'font-size': fontInfo.size, + 'font-weight': fontInfo.weight, + 'font-style': fontInfo.style, + }; + this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes); + this.state = Object.assign(Object.assign({}, this.state), fontAttributes); + return this; + } + /** Return a string of the form `'italic bold 15pt Arial'` */ + getFont() { + return this.fontCSSString; + } +} +SVGContext.measureTextCache = new MeasureTextCache(); + + + +/***/ }), + +/***/ "./src/system.ts": +/*!***********************!*\ + !*** ./src/system.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "System": () => (/* binding */ System) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +/** + * System implements a musical system, which is a collection of staves, + * each which can have one or more voices. All voices across all staves in + * the system are formatted together. + */ +class System extends _element__WEBPACK_IMPORTED_MODULE_1__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.System; + } + constructor(params = {}) { + super(); + this.setOptions(params); + this.partStaves = []; + this.partStaveInfos = []; + this.partVoices = []; + } + /** Set formatting options. */ + setOptions(options = {}) { + if (!options.factory) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.'); + } + this.factory = options.factory; + this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) }); + if (this.options.noJustification === false && typeof options.width === 'undefined') { + this.options.autoWidth = true; + } + } + /** Get origin X. */ + getX() { + return this.options.x; + } + /** Set origin X. */ + setX(x) { + this.options.x = x; + this.partStaves.forEach((s) => { + s.setX(x); + }); + } + /** Get origin y. */ + getY() { + return this.options.y; + } + /** Set origin y. */ + setY(y) { + this.options.y = y; + this.partStaves.forEach((s) => { + s.setY(y); + }); + } + /** Get associated staves. */ + getStaves() { + return this.partStaves; + } + /** Get associated voices. */ + getVoices() { + return this.partVoices; + } + /** Set associated context. */ + setContext(context) { + super.setContext(context); + this.factory.setContext(context); + return this; + } + /** + * Add connector between staves. + * @param type see {@link StaveConnector.typeString} + */ + addConnector(type = 'double') { + this.connector = this.factory.StaveConnector({ + top_stave: this.partStaves[0], + bottom_stave: this.partStaves[this.partStaves.length - 1], + type, + }); + return this.connector; + } + /** + * Add a stave to the system. + * + * Example (one voice): + * + * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});` + * + * Example (two voices): + * + * `system.addStave({voices: [` + * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),` + * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))` + * `]});` + */ + addStave(params) { + var _a; + const staveOptions = Object.assign({ left_bar: false }, params.options); + const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions }); + const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions }); + const ctx = this.getContext(); + p.voices.forEach((voice) => { + voice + .setContext(ctx) + .setStave(stave) + .getTickables() + .forEach((tickable) => tickable.setStave(stave)); + this.partVoices.push(voice); + }); + this.partStaves.push(stave); + this.partStaveInfos.push(p); + return stave; + } + /** + * Add voices to the system with stave already assigned. + */ + addVoices(voices) { + const ctx = this.getContext(); + voices.forEach((voice) => { + voice.setContext(ctx); + this.partVoices.push(voice); + }); + } + /** Format the system. */ + format() { + const options_details = this.options.details; + let justifyWidth = 0; + const formatter = new _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter(options_details); + this.formatter = formatter; + let y = this.options.y; + let startX = 0; + const debugNoteMetricsYs = []; + this.partStaves.forEach((part, index) => { + y = y + part.space(this.partStaveInfos[index].spaceAbove); + part.setY(y); + y = y + part.space(this.partStaveInfos[index].spaceBelow); + y = y + part.space(this.options.spaceBetweenStaves); + if (this.partStaveInfos[index].debugNoteMetrics) { + debugNoteMetricsYs.push({ y, stave: part }); + y += 15; + } + startX = Math.max(startX, part.getNoteStartX()); + }); + // Re-assign Stave to update y position + this.partVoices.forEach((voice) => { + voice.getTickables().forEach((tickable) => { + const stave = tickable.getStave(); + if (stave) + tickable.setStave(stave); + }); + }); + // Join the voices + formatter.joinVoices(this.partVoices); + // Update the start position of all staves. + this.partStaves.forEach((part) => part.setNoteStartX(startX)); + if (this.options.autoWidth && this.partVoices.length > 0) { + justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices); + this.options.width = justifyWidth + _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.rightPadding + (startX - this.options.x); + this.partStaves.forEach((part) => { + part.setWidth(this.options.width); + }); + } + else { + justifyWidth = this.options.noPadding + ? this.options.width - (startX - this.options.x) + : this.options.width - (startX - this.options.x) - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + } + if (this.partVoices.length > 0) { + formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions); + } + formatter.postFormat(); + for (let i = 0; i < this.options.formatIterations; i++) { + formatter.tune(options_details); + } + this.startX = startX; + this.debugNoteMetricsYs = debugNoteMetricsYs; + this.lastY = y; + this.boundingBox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y); + _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.formatBegModifiers(this.partStaves); + } + /** Render the system. */ + draw() { + // Render debugging information, if requested. + const ctx = this.checkContext(); + if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFormatter', 'format() must be called before draw()'); + } + this.setRendered(); + if (this.options.debugFormatter) { + _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY); + } + this.debugNoteMetricsYs.forEach((d) => { + this.partVoices.forEach((voice) => { + voice.getTickables().forEach((tickable) => { + if (tickable.getStave() === d.stave) + _note__WEBPACK_IMPORTED_MODULE_3__.Note.plotMetrics(ctx, tickable, d.y); + }); + }); + }); + } +} + + +/***/ }), + +/***/ "./src/tables.ts": +/*!***********************!*\ + !*** ./src/tables.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tables": () => (/* binding */ Tables) +/* harmony export */ }); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. + + + +const RESOLUTION = 16384; +/** + * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow. + * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks. + */ +const durations = { + '1/2': RESOLUTION * 2, + 1: RESOLUTION / 1, + 2: RESOLUTION / 2, + 4: RESOLUTION / 4, + 8: RESOLUTION / 8, + 16: RESOLUTION / 16, + 32: RESOLUTION / 32, + 64: RESOLUTION / 64, + 128: RESOLUTION / 128, + 256: RESOLUTION / 256, +}; +const durationAliases = { + w: '1', + h: '2', + q: '4', + // This is the default duration used to render bars (BarNote). Bars no longer + // consume ticks, so this should be a no-op. + // TODO(0xfe): This needs to be cleaned up. + b: '256', +}; +const keySignatures = { + C: { num: 0 }, + Am: { num: 0 }, + F: { acc: 'b', num: 1 }, + Dm: { acc: 'b', num: 1 }, + Bb: { acc: 'b', num: 2 }, + Gm: { acc: 'b', num: 2 }, + Eb: { acc: 'b', num: 3 }, + Cm: { acc: 'b', num: 3 }, + Ab: { acc: 'b', num: 4 }, + Fm: { acc: 'b', num: 4 }, + Db: { acc: 'b', num: 5 }, + Bbm: { acc: 'b', num: 5 }, + Gb: { acc: 'b', num: 6 }, + Ebm: { acc: 'b', num: 6 }, + Cb: { acc: 'b', num: 7 }, + Abm: { acc: 'b', num: 7 }, + G: { acc: '#', num: 1 }, + Em: { acc: '#', num: 1 }, + D: { acc: '#', num: 2 }, + Bm: { acc: '#', num: 2 }, + A: { acc: '#', num: 3 }, + 'F#m': { acc: '#', num: 3 }, + E: { acc: '#', num: 4 }, + 'C#m': { acc: '#', num: 4 }, + B: { acc: '#', num: 5 }, + 'G#m': { acc: '#', num: 5 }, + 'F#': { acc: '#', num: 6 }, + 'D#m': { acc: '#', num: 6 }, + 'C#': { acc: '#', num: 7 }, + 'A#m': { acc: '#', num: 7 }, +}; +const clefs = { + treble: { line_shift: 0 }, + bass: { line_shift: 6 }, + tenor: { line_shift: 4 }, + alto: { line_shift: 3 }, + soprano: { line_shift: 1 }, + percussion: { line_shift: 0 }, + 'mezzo-soprano': { line_shift: 2 }, + 'baritone-c': { line_shift: 5 }, + 'baritone-f': { line_shift: 5 }, + subbass: { line_shift: 7 }, + french: { line_shift: -1 }, +}; +const notesInfo = { + C: { index: 0, int_val: 0 }, + CN: { index: 0, int_val: 0, accidental: 'n' }, + 'C#': { index: 0, int_val: 1, accidental: '#' }, + 'C##': { index: 0, int_val: 2, accidental: '##' }, + CB: { index: 0, int_val: 11, accidental: 'b' }, + CBB: { index: 0, int_val: 10, accidental: 'bb' }, + D: { index: 1, int_val: 2 }, + DN: { index: 1, int_val: 2, accidental: 'n' }, + 'D#': { index: 1, int_val: 3, accidental: '#' }, + 'D##': { index: 1, int_val: 4, accidental: '##' }, + DB: { index: 1, int_val: 1, accidental: 'b' }, + DBB: { index: 1, int_val: 0, accidental: 'bb' }, + E: { index: 2, int_val: 4 }, + EN: { index: 2, int_val: 4, accidental: 'n' }, + 'E#': { index: 2, int_val: 5, accidental: '#' }, + 'E##': { index: 2, int_val: 6, accidental: '##' }, + EB: { index: 2, int_val: 3, accidental: 'b' }, + EBB: { index: 2, int_val: 2, accidental: 'bb' }, + F: { index: 3, int_val: 5 }, + FN: { index: 3, int_val: 5, accidental: 'n' }, + 'F#': { index: 3, int_val: 6, accidental: '#' }, + 'F##': { index: 3, int_val: 7, accidental: '##' }, + FB: { index: 3, int_val: 4, accidental: 'b' }, + FBB: { index: 3, int_val: 3, accidental: 'bb' }, + G: { index: 4, int_val: 7 }, + GN: { index: 4, int_val: 7, accidental: 'n' }, + 'G#': { index: 4, int_val: 8, accidental: '#' }, + 'G##': { index: 4, int_val: 9, accidental: '##' }, + GB: { index: 4, int_val: 6, accidental: 'b' }, + GBB: { index: 4, int_val: 5, accidental: 'bb' }, + A: { index: 5, int_val: 9 }, + AN: { index: 5, int_val: 9, accidental: 'n' }, + 'A#': { index: 5, int_val: 10, accidental: '#' }, + 'A##': { index: 5, int_val: 11, accidental: '##' }, + AB: { index: 5, int_val: 8, accidental: 'b' }, + ABB: { index: 5, int_val: 7, accidental: 'bb' }, + B: { index: 6, int_val: 11 }, + BN: { index: 6, int_val: 11, accidental: 'n' }, + 'B#': { index: 6, int_val: 12, accidental: '#' }, + 'B##': { index: 6, int_val: 13, accidental: '##' }, + BB: { index: 6, int_val: 10, accidental: 'b' }, + BBB: { index: 6, int_val: 9, accidental: 'bb' }, + R: { index: 6, rest: true }, + X: { + index: 6, + accidental: '', + octave: 4, + code: 'noteheadXBlack', + shift_right: 5.5, + }, +}; +const validNoteTypes = { + n: { name: 'note' }, + r: { name: 'rest' }, + h: { name: 'harmonic' }, + m: { name: 'muted' }, + s: { name: 'slash' }, + g: { name: 'ghost' }, + d: { name: 'diamond' }, + x: { name: 'x' }, + ci: { name: 'circled' }, + cx: { name: 'circle x' }, + sf: { name: 'slashed' }, + sb: { name: 'slashed backward' }, + sq: { name: 'square' }, + tu: { name: 'triangle up' }, + td: { name: 'triangle down' }, +}; +const accidentals = { + '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 }, + '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 }, + b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 }, + bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 }, + n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 }, + '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 }, + '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 }, + db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 }, + d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 }, + '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 }, + '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 }, + '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 }, + bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 }, + bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 }, + o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 }, + k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 }, + bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 }, + '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 }, + ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 }, + afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 }, + accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 }, + accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 }, + accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 }, + accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 }, + accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 }, + accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 }, + accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 }, + accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 }, + accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 }, + accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 }, + accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 }, + accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 }, + accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 }, + accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 }, + accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 }, + accidentalNarrowReversedFlatAndFlat: { + code: 'accidentalNarrowReversedFlatAndFlat', + parenRightPaddingAdjustment: -1, + }, + accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 }, + accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 }, +}; +// Helps determine the layout of accidentals. +const accidentalColumns = { + 1: { + a: [1], + b: [1], + }, + 2: { + a: [1, 2], + }, + 3: { + a: [1, 3, 2], + b: [1, 2, 1], + second_on_bottom: [1, 2, 3], + }, + 4: { + a: [1, 3, 4, 2], + b: [1, 2, 3, 1], + spaced_out_tetrachord: [1, 2, 1, 2], + }, + 5: { + a: [1, 3, 5, 4, 2], + b: [1, 2, 4, 3, 1], + spaced_out_pentachord: [1, 2, 3, 2, 1], + very_spaced_out_pentachord: [1, 2, 1, 2, 1], + }, + 6: { + a: [1, 3, 5, 6, 4, 2], + b: [1, 2, 4, 5, 3, 1], + spaced_out_hexachord: [1, 3, 2, 1, 3, 2], + very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2], + }, +}; +const articulations = { + 'a.': { code: 'augmentationDot', between_lines: true }, + av: { + aboveCode: 'articStaccatissimoAbove', + belowCode: 'articStaccatissimoBelow', + between_lines: true, + }, + 'a>': { + aboveCode: 'articAccentAbove', + belowCode: 'articAccentBelow', + between_lines: true, + }, + 'a-': { + aboveCode: 'articTenutoAbove', + belowCode: 'articTenutoBelow', + between_lines: true, + }, + 'a^': { + aboveCode: 'articMarcatoAbove', + belowCode: 'articMarcatoBelow', + between_lines: false, + }, + 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false }, + ao: { + aboveCode: 'pluckedSnapPizzicatoAbove', + belowCode: 'pluckedSnapPizzicatoBelow', + between_lines: false, + }, + ah: { code: 'stringsHarmonic', between_lines: false }, + 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false }, + 'a@a': { code: 'fermataAbove', between_lines: false }, + 'a@u': { code: 'fermataBelow', between_lines: false }, + 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false }, + 'a@as': { code: 'fermataShortAbove', between_lines: false }, + 'a@us': { code: 'fermataShortBelow', between_lines: false }, + 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false }, + 'a@al': { code: 'fermataLongAbove', between_lines: false }, + 'a@ul': { code: 'fermataLongBelow', between_lines: false }, + 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false }, + 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false }, + 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false }, + 'a|': { code: 'stringsUpBow', between_lines: false }, + am: { code: 'stringsDownBow', between_lines: false }, + 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked +}; +const ornaments = { + mordent: { code: 'ornamentShortTrill' }, + mordent_inverted: { code: 'ornamentMordent' }, + turn: { code: 'ornamentTurn' }, + turn_inverted: { code: 'ornamentTurnSlash' }, + tr: { code: 'ornamentTrill' }, + upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' }, + downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' }, + prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' }, + pralldown: { code: 'ornamentPrecompTrillLowerSuffix' }, + upmordent: { code: 'ornamentPrecompSlideTrillBach' }, + downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' }, + lineprall: { code: 'ornamentPrecompAppoggTrill' }, + prallprall: { code: 'ornamentTremblement' }, + scoop: { code: 'brassScoop' }, + doit: { code: 'brassDoitMedium' }, + fall: { code: 'brassFallLipShort' }, + doitLong: { code: 'brassLiftMedium' }, + fallLong: { code: 'brassFallRoughMedium' }, + bend: { code: 'brassBend' }, + plungerClosed: { code: 'brassMuteClosed' }, + plungerOpen: { code: 'brassMuteOpen' }, + flip: { code: 'brassFlip' }, + jazzTurn: { code: 'brassJazzTurn' }, + smear: { code: 'brassSmear' }, +}; +class Tables { + /** + * @returns the `Font` object at the head of the music font stack. + */ + static currentMusicFont() { + if (Tables.MUSIC_FONT_STACK.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).'); + } + else { + return Tables.MUSIC_FONT_STACK[0]; + } + } + static clefProperties(clef) { + if (!clef || !(clef in clefs)) + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArgument', 'Invalid clef: ' + clef); + return clefs[clef]; + } + /** + * @param keyOctaveGlyph a string in the format "key/octave" (e.g., "c/5") or "key/octave/custom-note-head-code" (e.g., "g/5/t3"). + * @param clef + * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.). + * @returns properties for the specified note. + */ + static keyProperties(keyOctaveGlyph, clef = 'treble', params) { + let options = { octave_shift: 0, duration: '4' }; + if (typeof params === 'object') { + options = Object.assign(Object.assign({}, options), params); + } + const duration = Tables.sanitizeDuration(options.duration); + const pieces = keyOctaveGlyph.split('/'); + if (pieces.length < 2) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`); + } + const key = pieces[0].toUpperCase(); + const value = notesInfo[key]; + if (!value) + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Invalid key name: ' + key); + if (value.octave) + pieces[1] = value.octave.toString(); + let octave = parseInt(pieces[1], 10); + // Octave_shift is the shift to compensate for clef 8va/8vb. + octave -= options.octave_shift; + const baseIndex = octave * 7 - 4 * 7; + let line = (baseIndex + value.index) / 2; + line += Tables.clefProperties(clef).line_shift; + let stroke = 0; + if (line <= 0 && (line * 2) % 2 === 0) + stroke = 1; // stroke up + if (line >= 6 && (line * 2) % 2 === 0) + stroke = -1; // stroke down + // Integer value for note arithmetic. + const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined; + // If the user specified a glyph, overwrite the glyph code. + const code = value.code; + const shift_right = value.shift_right; + let customNoteHeadProps = {}; + if (pieces.length > 2 && pieces[2]) { + const glyphName = pieces[2].toUpperCase(); + customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {}; + } + return Object.assign({ key, + octave, + line, + int_value, accidental: value.accidental, code, + stroke, + shift_right, displaced: false }, customNoteHeadProps); + } + static integerToNote(integer) { + if (typeof integer === 'undefined' || integer < 0 || integer > 11) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`); + } + const table = { + 0: 'C', + 1: 'C#', + 2: 'D', + 3: 'D#', + 4: 'E', + 5: 'F', + 6: 'F#', + 7: 'G', + 8: 'G#', + 9: 'A', + 10: 'A#', + 11: 'B', + }; + const noteValue = table[integer]; + if (!noteValue) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`); + } + return noteValue; + } + static tabToGlyphProps(fret, scale = 1.0) { + let glyph = undefined; + let width = 0; + let shift_y = 0; + if (fret.toUpperCase() === 'X') { + const glyphMetrics = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics(); + glyph = 'accidentalDoubleSharp'; + if (glyphMetrics.width == undefined || glyphMetrics.height == undefined) + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidMetrics', 'Width and height required'); + width = glyphMetrics.width; + shift_y = -glyphMetrics.height / 2; + } + else { + width = Tables.textWidth(fret); + } + return { + text: fret, + code: glyph, + getWidth: () => width * scale, + shift_y, + }; + } + // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size. + // TODO: The actual width depends on the font family, size, weight, style. + static textWidth(text) { + return 7 * text.toString().length; + } + static articulationCodes(artic) { + return articulations[artic]; + } + static accidentalCodes(acc) { + return accidentals[acc]; + } + static ornamentCodes(acc) { + return ornaments[acc]; + } + static keySignature(spec) { + const keySpec = keySignatures[spec]; + if (!keySpec) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`); + } + if (!keySpec.acc) { + return []; + } + const accidentalList = { + b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5], + '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2], + }; + const notes = accidentalList[keySpec.acc]; + const acc_list = []; + for (let i = 0; i < keySpec.num; ++i) { + const line = notes[i]; + acc_list.push({ type: keySpec.acc, line }); + } + return acc_list; + } + static getKeySignatures() { + return keySignatures; + } + static hasKeySignature(spec) { + return spec in keySignatures; + } + /** + * Convert duration aliases to the number based duration. + * If the input isn't an alias, simply return the input. + * @param duration + * @returns Example: 'q' -> '4', '8' -> '8' + */ + static sanitizeDuration(duration) { + const durationNumber = durationAliases[duration]; + if (durationNumber !== undefined) { + duration = durationNumber; + } + if (durations[duration] === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`); + } + return duration; + } + /** Convert the `duration` to a fraction. */ + static durationToFraction(duration) { + return new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction().parse(Tables.sanitizeDuration(duration)); + } + /** Convert the `duration` to a number. */ + static durationToNumber(duration) { + return Tables.durationToFraction(duration).value(); + } + /* Convert the `duration` to total ticks. */ + static durationToTicks(duration) { + duration = Tables.sanitizeDuration(duration); + const ticks = durations[duration]; + if (ticks === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidDuration'); + } + return ticks; + } + static codeNoteHead(type, duration) { + let code = ''; + switch (type) { + /* Diamond */ + case 'D0': + code = 'noteheadDiamondWhole'; + break; + case 'D1': + code = 'noteheadDiamondHalf'; + break; + case 'D2': + code = 'noteheadDiamondBlack'; + break; + case 'D3': + code = 'noteheadDiamondBlack'; + break; + /* Triangle */ + case 'T0': + code = 'noteheadTriangleUpWhole'; + break; + case 'T1': + code = 'noteheadTriangleUpHalf'; + break; + case 'T2': + code = 'noteheadTriangleUpBlack'; + break; + case 'T3': + code = 'noteheadTriangleUpBlack'; + break; + /* Cross */ + case 'X0': + code = 'noteheadXWhole'; + break; + case 'X1': + code = 'noteheadXHalf'; + break; + case 'X2': + code = 'noteheadXBlack'; + break; + case 'X3': + code = 'noteheadCircleX'; + break; + /* Square */ + case 'S1': + code = 'noteheadSquareWhite'; + break; + case 'S2': + code = 'noteheadSquareBlack'; + break; + /* Rectangle */ + case 'R1': + code = 'vexNoteHeadRectWhite'; // no smufl code + break; + case 'R2': + code = 'vexNoteHeadRectBlack'; // no smufl code + break; + case 'DO': + code = 'noteheadTriangleUpBlack'; + break; + case 'RE': + code = 'noteheadMoonBlack'; + break; + case 'MI': + code = 'noteheadDiamondBlack'; + break; + case 'FA': + code = 'noteheadTriangleLeftBlack'; + break; + case 'FAUP': + code = 'noteheadTriangleRightBlack'; + break; + case 'SO': + code = 'noteheadBlack'; + break; + case 'LA': + code = 'noteheadSquareBlack'; + break; + case 'TI': + code = 'noteheadTriangleRoundDownBlack'; + break; + case 'D': + case 'H': // left for backwards compatibility + switch (duration) { + case '1/2': + code = 'noteheadDiamondDoubleWhole'; + break; + case '1': + code = 'noteheadDiamondWhole'; + break; + case '2': + code = 'noteheadDiamondHalf'; + break; + default: + code = 'noteheadDiamondBlack'; + break; + } + break; + case 'N': + case 'G': + switch (duration) { + case '1/2': + code = 'noteheadDoubleWhole'; + break; + case '1': + code = 'noteheadWhole'; + break; + case '2': + code = 'noteheadHalf'; + break; + default: + code = 'noteheadBlack'; + break; + } + break; + case 'M': // left for backwards compatibility + case 'X': + switch (duration) { + case '1/2': + code = 'noteheadXDoubleWhole'; + break; + case '1': + code = 'noteheadXWhole'; + break; + case '2': + code = 'noteheadXHalf'; + break; + default: + code = 'noteheadXBlack'; + break; + } + break; + case 'CX': + switch (duration) { + case '1/2': + code = 'noteheadCircleXDoubleWhole'; + break; + case '1': + code = 'noteheadCircleXWhole'; + break; + case '2': + code = 'noteheadCircleXHalf'; + break; + default: + code = 'noteheadCircleX'; + break; + } + break; + case 'CI': + switch (duration) { + case '1/2': + code = 'noteheadCircledDoubleWhole'; + break; + case '1': + code = 'noteheadCircledWhole'; + break; + case '2': + code = 'noteheadCircledHalf'; + break; + default: + code = 'noteheadCircledBlack'; + break; + } + break; + case 'SQ': + switch (duration) { + case '1/2': + code = 'noteheadDoubleWholeSquare'; + break; + case '1': + code = 'noteheadSquareWhite'; + break; + case '2': + code = 'noteheadSquareWhite'; + break; + default: + code = 'noteheadSquareBlack'; + break; + } + break; + case 'TU': + switch (duration) { + case '1/2': + code = 'noteheadTriangleUpDoubleWhole'; + break; + case '1': + code = 'noteheadTriangleUpWhole'; + break; + case '2': + code = 'noteheadTriangleUpHalf'; + break; + default: + code = 'noteheadTriangleUpBlack'; + break; + } + break; + case 'TD': + switch (duration) { + case '1/2': + code = 'noteheadTriangleDownDoubleWhole'; + break; + case '1': + code = 'noteheadTriangleDownWhole'; + break; + case '2': + code = 'noteheadTriangleDownHalf'; + break; + default: + code = 'noteheadTriangleDownBlack'; + break; + } + break; + case 'SF': + switch (duration) { + case '1/2': + code = 'noteheadSlashedDoubleWhole1'; + break; + case '1': + code = 'noteheadSlashedWhole1'; + break; + case '2': + code = 'noteheadSlashedHalf1'; + break; + default: + code = 'noteheadSlashedBlack1'; + } + break; + case 'SB': + switch (duration) { + case '1/2': + code = 'noteheadSlashedDoubleWhole2'; + break; + case '1': + code = 'noteheadSlashedWhole2'; + break; + case '2': + code = 'noteheadSlashedHalf2'; + break; + default: + code = 'noteheadSlashedBlack2'; + } + break; + } + return code; + } + // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads. + // The default type is a regular note ('n'). + static getGlyphProps(duration, type = 'n') { + duration = Tables.sanitizeDuration(duration); + // Lookup duration for default glyph head code + let code = durationCodes[duration]; + if (code === undefined) { + code = durationCodes['4']; + } + // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash) + let glyphTypeProperties = code[type]; + // Try and get it from the custom list of note heads + const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration); + if (codeNoteHead != '') + glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead }); + const code_head = glyphTypeProperties.code_head; + // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale). + // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH). + const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(code_head, scale); + // Merge duration props for 'duration' with the note head properties. + return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties); + } +} +Tables.UNISON = true; +Tables.SOFTMAX_FACTOR = 10; +Tables.STEM_WIDTH = 1.5; +Tables.STEM_HEIGHT = 35; +Tables.STAVE_LINE_THICKNESS = 1; +Tables.RENDER_PRECISION_PLACES = 3; +Tables.RESOLUTION = RESOLUTION; +/** + * Customize this by calling Flow.setMusicFont(...fontNames); + */ +Tables.MUSIC_FONT_STACK = []; +Tables.NOTATION_FONT_SCALE = 39; +Tables.TABLATURE_FONT_SCALE = 39; +Tables.SLASH_NOTEHEAD_WIDTH = 15; +Tables.STAVE_LINE_DISTANCE = 10; +// HACK: +// Since text origins are positioned at the baseline, we must +// compensate for the ascender of the text. Of course, 1 staff space is +// a very poor approximation. +// +// This will be deprecated in the future. This is a temporary solution until +// we have more robust text metrics. +Tables.TEXT_HEIGHT_OFFSET_HACK = 1; +Tables.accidentalMap = accidentals; +Tables.accidentalColumnsTable = accidentalColumns; +Tables.unicode = { + // ♯ accidental sharp + sharp: String.fromCharCode(0x266f), + // ♭ accidental flat + flat: String.fromCharCode(0x266d), + // ♮ accidental natural + natural: String.fromCharCode(0x266e), + // △ major seventh + triangle: String.fromCharCode(0x25b3), + // ø half-diminished + 'o-with-slash': String.fromCharCode(0x00f8), + // ° diminished + degrees: String.fromCharCode(0x00b0), + // ○ diminished + circle: String.fromCharCode(0x25cb), +}; +/* The list of valid note types. Used by note.ts during parseNoteStruct(). */ +Tables.validTypes = validNoteTypes; +// Default time signature. +Tables.TIME4_4 = { + num_beats: 4, + beat_value: 4, + resolution: RESOLUTION, +}; + +// 1/2, 1, 2, 4, 8, 16, 32, 64, 128 +// NOTE: There is no 256 here! However, there are other mentions of 256 in this file. +// For example, in durations has a 256 key, and sanitizeDuration() can return 256. +// The sanitizeDuration() bit may need to be removed by 0xfe. +const durationCodes = { + '1/2': { + common: { + code_head: '', + stem: false, + flag: false, + stem_up_extension: -Tables.STEM_HEIGHT, + stem_down_extension: -Tables.STEM_HEIGHT, + tabnote_stem_up_extension: -Tables.STEM_HEIGHT, + tabnote_stem_down_extension: -Tables.STEM_HEIGHT, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Breve rest + code_head: 'restDoubleWhole', + rest: true, + position: 'B/5', + dot_shiftY: 0.5, + }, + s: { + // Breve note slash - + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 1: { + common: { + code_head: '', + stem: false, + flag: false, + stem_up_extension: -Tables.STEM_HEIGHT, + stem_down_extension: -Tables.STEM_HEIGHT, + tabnote_stem_up_extension: -Tables.STEM_HEIGHT, + tabnote_stem_down_extension: -Tables.STEM_HEIGHT, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Whole rest + code_head: 'restWhole', + ledger_code_head: 'restWholeLegerLine', + rest: true, + position: 'D/5', + dot_shiftY: 0.5, + }, + s: { + // Whole note slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 2: { + common: { + code_head: '', + stem: true, + flag: false, + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Half rest + code_head: 'restHalf', + ledger_code_head: 'restHalfLegerLine', + stem: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + }, + s: { + // Half note slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 4: { + common: { + code_head: '', + stem: true, + flag: false, + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Quarter rest + code_head: 'restQuarter', + stem: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + line_above: 1.5, + line_below: 1.5, + }, + s: { + // Quarter slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 8: { + common: { + code_head: '', + stem: true, + flag: true, + beam_count: 1, + stem_beam_extension: 0, + code_flag_upstem: 'flag8thUp', + code_flag_downstem: 'flag8thDown', + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Eighth rest + code_head: 'rest8th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + line_above: 1.0, + line_below: 1.0, + }, + s: { + // Eighth slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 16: { + common: { + code_head: '', + beam_count: 2, + stem_beam_extension: 0, + stem: true, + flag: true, + code_flag_upstem: 'flag16thUp', + code_flag_downstem: 'flag16thDown', + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Sixteenth rest + code_head: 'rest16th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + line_above: 1.0, + line_below: 2.0, + }, + s: { + // Sixteenth slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 32: { + common: { + code_head: '', + beam_count: 3, + stem_beam_extension: 7.5, + stem: true, + flag: true, + code_flag_upstem: 'flag32ndUp', + code_flag_downstem: 'flag32ndDown', + stem_up_extension: 9, + stem_down_extension: 9, + tabnote_stem_up_extension: 9, + tabnote_stem_down_extension: 9, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Thirty-second rest + code_head: 'rest32nd', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -1.5, + line_above: 2.0, + line_below: 2.0, + }, + s: { + // Thirty-second slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 64: { + common: { + code_head: '', + beam_count: 4, + stem_beam_extension: 15, + stem: true, + flag: true, + code_flag_upstem: 'flag64thUp', + code_flag_downstem: 'flag64thDown', + stem_up_extension: 13, + stem_down_extension: 13, + tabnote_stem_up_extension: 13, + tabnote_stem_down_extension: 13, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Sixty-fourth rest + code_head: 'rest64th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -1.5, + line_above: 2.0, + line_below: 3.0, + }, + s: { + // Sixty-fourth slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 128: { + common: { + code_head: '', + beam_count: 5, + stem_beam_extension: 22.5, + stem: true, + flag: true, + code_flag_upstem: 'flag128thUp', + code_flag_downstem: 'flag128thDown', + stem_up_extension: 22, + stem_down_extension: 22, + tabnote_stem_up_extension: 22, + tabnote_stem_down_extension: 22, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Hundred-twenty-eight rest + code_head: 'rest128th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -2.5, + line_above: 3.0, + line_below: 3.0, + }, + s: { + // Hundred-twenty-eight slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, +}; + + +/***/ }), + +/***/ "./src/tabnote.ts": +/*!************************!*\ + !*** ./src/tabnote.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabNote": () => (/* binding */ TabNote) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// The file implements notes for Tablature notation. This consists of one or +// more fret positions, and can either be drawn with or without stems. +// +// See `tests/tabnote_tests.ts` for usage examples. + + + + + + + + +// Gets the unused strings grouped together if consecutive. +// +// Parameters: +// * num_lines - The number of lines +// * strings_used - An array of numbers representing which strings have fret positions +function getUnusedStringGroups(num_lines, strings_used) { + const stem_through = []; + let group = []; + for (let string = 1; string <= num_lines; string++) { + const is_used = strings_used.indexOf(string) > -1; + if (!is_used) { + group.push(string); + } + else { + stem_through.push(group); + group = []; + } + } + if (group.length > 0) + stem_through.push(group); + return stem_through; +} +// Gets groups of points that outline the partial stem lines +// between fret positions +// +// Parameters: +// * stem_Y - The `y` coordinate the stem is located on +// * unused_strings - An array of groups of unused strings +// * stave - The stave to use for reference +// * stem_direction - The direction of the stem +function getPartialStemLines(stem_y, unused_strings, stave, stem_direction) { + const up_stem = stem_direction !== 1; + const down_stem = stem_direction !== -1; + const line_spacing = stave.getSpacingBetweenLines(); + const total_lines = stave.getNumLines(); + const stem_lines = []; + unused_strings.forEach((strings) => { + const containsLastString = strings.indexOf(total_lines) > -1; + const containsFirstString = strings.indexOf(1) > -1; + if ((up_stem && containsFirstString) || (down_stem && containsLastString)) { + return; + } + // If there's only one string in the group, push a duplicate value. + // We do this because we need 2 strings to convert into upper/lower y + // values. + if (strings.length === 1) { + strings.push(strings[0]); + } + const line_ys = []; + // Iterate through each group string and store it's y position + strings.forEach((string, index, strings) => { + const isTopBound = string === 1; + const isBottomBound = string === total_lines; + // Get the y value for the appropriate staff line, + // we adjust for a 0 index array, since string numbers are index 1 + let y = stave.getYForLine(string - 1); + // Unless the string is the first or last, add padding to each side + // of the line + if (index === 0 && !isTopBound) { + y -= line_spacing / 2 - 1; + } + else if (index === strings.length - 1 && !isBottomBound) { + y += line_spacing / 2 - 1; + } + // Store the y value + line_ys.push(y); + // Store a subsequent y value connecting this group to the main + // stem above/below the stave if it's the top/bottom string + if (stem_direction === 1 && isTopBound) { + line_ys.push(stem_y - 2); + } + else if (stem_direction === -1 && isBottomBound) { + line_ys.push(stem_y + 2); + } + }); + // Add the sorted y values to the + stem_lines.push(line_ys.sort((a, b) => a - b)); + }); + return stem_lines; +} +class TabNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.TabNote; + } + // Initialize the TabNote with a `noteStruct` full of properties + // and whether to `draw_stem` when rendering the note + constructor(noteStruct, draw_stem = false) { + super(noteStruct); + this.glyphPropsArr = []; + // Return the number of the greatest string, which is the string lowest on the display + this.greatestString = () => { + return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b)); + }; + // Return the number of the least string, which is the string highest on the display + this.leastString = () => { + return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b)); + }; + this.ghost = false; // Renders parenthesis around notes + // Note properties + // The fret positions in the note. An array of `{ str: X, fret: X }` + this.positions = noteStruct.positions || []; + // Render Options + this.render_options = Object.assign(Object.assign({}, this.render_options), { + // font size for note heads and rests + glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.TABLATURE_FONT_SCALE, + // Flag to draw a stem + draw_stem, + // Flag to draw dot modifiers + draw_dots: draw_stem, + // Flag to extend the main stem through the stave and fret positions + draw_stem_through_stave: false, + // vertical shift from stave line + y_shift: 0, + // normal glyph scale + scale: 1.0, + // default tablature font + font: `${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE}pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` }); + this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType); + (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); + this.buildStem(); + if (noteStruct.stem_direction) { + this.setStemDirection(noteStruct.stem_direction); + } + else { + this.setStemDirection(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP); + } + // Renders parenthesis around notes + this.ghost = false; + this.updateWidth(); + } + reset() { + super.reset(); + if (this.stave) + this.setStave(this.stave); + return this; + } + // Set as ghost `TabNote`, surrounds the fret positions with parenthesis. + // Often used for indicating frets that are being bent to + setGhost(ghost) { + this.ghost = ghost; + this.updateWidth(); + return this; + } + // Determine if the note has a stem + hasStem() { + if (this.render_options.draw_stem) + return true; + return false; + } + // Get the default stem extension for the note + getStemExtension() { + const glyphProps = this.getGlyphProps(); + if (this.stem_extension_override != null) { + return this.stem_extension_override; + } + if (glyphProps) { + return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP + ? glyphProps.tabnote_stem_up_extension + : glyphProps.tabnote_stem_down_extension; + } + return 0; + } + // Calculate and store the width of the note + updateWidth() { + this.glyphPropsArr = []; + this.width = 0; + for (let i = 0; i < this.positions.length; ++i) { + let fret = this.positions[i].fret; + if (this.ghost) + fret = '(' + fret + ')'; + const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.tabToGlyphProps(fret.toString(), this.render_options.scale); + this.glyphPropsArr.push(glyphProps); + this.width = Math.max(glyphProps.getWidth(), this.width); + } + // For some reason we associate a notehead glyph with a TabNote, and this + // glyph is used for certain width calculations. Of course, this is totally + // incorrect since a notehead is a poor approximation for the dimensions of + // a fret number which can have multiple digits. As a result, we must + // overwrite getWidth() to return the correct width + this.glyphProps.getWidth = () => this.width; + } + // Set the `stave` to the note + setStave(stave) { + super.setStave(stave); + const ctx = stave.getContext(); + this.setContext(ctx); + // Calculate the fret number width based on font used + if (ctx) { + this.width = 0; + for (let i = 0; i < this.glyphPropsArr.length; ++i) { + const glyphProps = this.glyphPropsArr[i]; + const text = '' + glyphProps.text; + if (text.toUpperCase() !== 'X') { + ctx.save(); + ctx.setFont(this.render_options.font); + glyphProps.width = ctx.measureText(text).width; + ctx.restore(); + glyphProps.getWidth = () => glyphProps.width; + } + this.width = Math.max(glyphProps.getWidth(), this.width); + } + this.glyphProps.getWidth = () => this.width; + } + // we subtract 1 from `line` because getYForLine expects a 0-based index, + // while the position.str is a 1-based index + const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1)); + this.setYs(ys); + if (this.stem) { + this.stem.setYBounds(this.getStemY(), this.getStemY()); + } + return this; + } + // Get the fret positions for the note + getPositions() { + return this.positions; + } + // Get the default `x` and `y` coordinates for a modifier at a specific + // `position` at a fret position `index` + getModifierStartXY(position, index) { + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); + } + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.'); + } + let x = 0; + if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT) { + x = -1 * 2; // FIXME: modifier padding, move to font file + } + else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.RIGHT) { + x = this.width + 2; // FIXME: modifier padding, move to font file + } + else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.BELOW || position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE) { + const note_glyph_width = this.glyphProps.getWidth(); + x = note_glyph_width / 2; + } + return { + x: this.getAbsoluteX() + x, + y: this.ys[index], + }; + } + // Get the default line for rest + getLineForRest() { + return Number(this.positions[0].str); + } + // Pre-render formatting + preFormat() { + if (this.preFormatted) + return; + if (this.modifierContext) + this.modifierContext.preFormat(); + // width is already set during init() + this.preFormatted = true; + } + // Get the x position for the stem + getStemX() { + return this.getCenterGlyphX(); + } + // Get the y position for the stem + getStemY() { + const num_lines = this.checkStave().getNumLines(); + // The decimal staff line amounts provide optimal spacing between the + // fret number and the stem + const stemUpLine = -0.5; + const stemDownLine = num_lines - 0.5; + const stemStartLine = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP === this.stem_direction ? stemUpLine : stemDownLine; + return this.checkStave().getYForLine(stemStartLine); + } + // Get the stem extents for the tabnote + getStemExtents() { + return this.checkStem().getExtents(); + } + // Draw the fal onto the context + drawFlag() { + var _a; + const { beam, glyphProps, render_options: { draw_stem }, } = this; + const context = this.checkContext(); + const shouldDrawFlag = beam == undefined && draw_stem; + // Now it's the flag's turn. + if (glyphProps.flag && shouldDrawFlag) { + const flag_x = this.getStemX(); + const flag_y = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN + ? // Down stems are below the note head and have flags on the right. + this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0) + : // Up stems are above the note head and have flags on the right. + this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0); + // Draw the Flag + //this.flag?.setOptions({ category: 'flag.tabStem' }); + (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y); + //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' }); + } + } + // Render the modifiers onto the context. + drawModifiers() { + this.modifiers.forEach((modifier) => { + // Only draw the dots if enabled. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isDot)(modifier) && !this.render_options.draw_dots) { + return; + } + modifier.setContext(this.getContext()); + modifier.drawWithStyle(); + }); + } + // Render the stem extension through the fret positions + drawStemThrough() { + const stemX = this.getStemX(); + const stemY = this.getStemY(); + const ctx = this.checkContext(); + const drawStem = this.render_options.draw_stem; + const stemThrough = this.render_options.draw_stem_through_stave; + if (drawStem && stemThrough) { + const numLines = this.checkStave().getNumLines(); + const stringsUsed = this.positions.map((position) => Number(position.str)); + const unusedStrings = getUnusedStringGroups(numLines, stringsUsed); + const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection()); + ctx.save(); + ctx.setLineWidth(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH); + stemLines.forEach((bounds) => { + if (bounds.length === 0) + return; + ctx.beginPath(); + ctx.moveTo(stemX, bounds[0]); + ctx.lineTo(stemX, bounds[bounds.length - 1]); + ctx.stroke(); + ctx.closePath(); + }); + ctx.restore(); + } + } + // Render the fret positions onto the context + drawPositions() { + var _a; + const ctx = this.checkContext(); + const x = this.getAbsoluteX(); + const ys = this.ys; + for (let i = 0; i < this.positions.length; ++i) { + const y = ys[i] + this.render_options.y_shift; + const glyphProps = this.glyphPropsArr[i]; + // Center the fret text beneath the notation note head + const note_glyph_width = this.glyphProps.getWidth(); + const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2; + // FIXME: Magic numbers. + ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6); + if (glyphProps.code) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code); + } + else { + ctx.save(); + ctx.setFont(this.render_options.font); + const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : ''; + ctx.fillText(text, tab_x, y + 5 * this.render_options.scale); + ctx.restore(); + } + } + } + // The main rendering function for the entire note. + draw() { + const ctx = this.checkContext(); + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', "Can't draw note without Y values."); + } + this.setRendered(); + const render_stem = this.beam == undefined && this.render_options.draw_stem; + this.applyStyle(); + ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true }); + this.drawPositions(); + this.drawStemThrough(); + if (this.stem && render_stem) { + const stem_x = this.getStemX(); + this.stem.setNoteHeadXBounds(stem_x, stem_x); + this.stem.setContext(ctx).draw(); + } + this.drawFlag(); + this.drawModifiers(); + ctx.closeGroup(); + this.restoreStyle(); + } +} + + +/***/ }), + +/***/ "./src/tabslide.ts": +/*!*************************!*\ + !*** ./src/tabslide.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabSlide": () => (/* binding */ TabSlide) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// This class implements varies types of ties between contiguous notes. The +// ties include: regular ties, hammer ons, pull offs, and slides. + + + + +class TabSlide extends _tabtie__WEBPACK_IMPORTED_MODULE_1__.TabTie { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TabSlide; + } + static get SLIDE_UP() { + return 1; + } + static get SLIDE_DOWN() { + return -1; + } + static createSlideUp(notes) { + return new TabSlide(notes, TabSlide.SLIDE_UP); + } + static createSlideDown(notes) { + return new TabSlide(notes, TabSlide.SLIDE_DOWN); + } + /** + * @param notes is a struct of the form: + * { + * first_note: Note, + * last_note: Note, + * first_indices: [n1, n2, n3], + * last_indices: [n1, n2, n3] + * } + * @param notes.first_note the starting note of the slide + * @param notes.last_note the ending note of the slide + * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed. + * @param notes.last_indices currently unused. we assume it's the same as first_indices. + * + * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN + */ + constructor(notes, direction) { + super(notes, 'sl.'); + // Determine the direction automatically if it is not provided. + if (!direction) { + let first_fret = notes.first_note.getPositions()[0].fret; + if (typeof first_fret === 'string') { + first_fret = parseInt(first_fret, 10); + } + let last_fret = notes.last_note.getPositions()[0].fret; + if (typeof last_fret === 'string') { + last_fret = parseInt(last_fret, 10); + } + // If either of the frets are 'X', parseInt() above will return NaN. + // Choose TabSlide.SLIDE_UP by default. + if (isNaN(first_fret) || isNaN(last_fret)) { + direction = TabSlide.SLIDE_UP; + } + else { + direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP; + } + } + this.direction = direction; + this.render_options.cp1 = 11; + this.render_options.cp2 = 14; + this.render_options.y_shift = 0.5; + this.resetFont(); + } + renderTie(params) { + if (params.first_ys.length === 0 || params.last_ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'No Y-values to render'); + } + const ctx = this.checkContext(); + const first_x_px = params.first_x_px; + const first_ys = params.first_ys; + const last_x_px = params.last_x_px; + const direction = params.direction; + if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadSlide', 'Invalid slide direction'); + } + // eslint-disable-next-line + const first_indices = this.notes.first_indices; + for (let i = 0; i < first_indices.length; ++i) { + const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift; + if (isNaN(slide_y)) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Bad indices for slide rendering.'); + } + ctx.beginPath(); + ctx.moveTo(first_x_px, slide_y + 3 * direction); + ctx.lineTo(last_x_px, slide_y - 3 * direction); + ctx.closePath(); + ctx.stroke(); + } + this.setRendered(); + } +} +TabSlide.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: 10, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC, +}; + + + +/***/ }), + +/***/ "./src/tabstave.ts": +/*!*************************!*\ + !*** ./src/tabstave.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabStave": () => (/* binding */ TabStave) +/* harmony export */ }); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. + + +class TabStave extends _stave__WEBPACK_IMPORTED_MODULE_0__.Stave { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabStave; + } + constructor(x, y, width, options) { + const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options); + super(x, y, width, tab_options); + } + getYForGlyphs() { + return this.getYForLine(2.5); + } + // Deprecated + addTabGlyph() { + this.addClef('tab'); + return this; + } +} + + +/***/ }), + +/***/ "./src/tabtie.ts": +/*!***********************!*\ + !*** ./src/tabtie.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabTie": () => (/* binding */ TabTie) +/* harmony export */ }); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// This class implements varies types of ties between contiguous notes. The +// ties include: regular ties, hammer ons, pull offs, and slides. + + +class TabTie extends _stavetie__WEBPACK_IMPORTED_MODULE_0__.StaveTie { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabTie; + } + static createHammeron(notes) { + return new TabTie(notes, 'H'); + } + static createPulloff(notes) { + return new TabTie(notes, 'P'); + } + /** + * @param notes is a struct that has: + * { + * first_note: Note, + * last_note: Note, + * first_indices: [n1, n2, n3], + * last_indices: [n1, n2, n3] + * } + * + * @param text + */ + constructor(notes, text) { + super(notes, text); + this.render_options.cp1 = 9; + this.render_options.cp2 = 11; + this.render_options.y_shift = 3; + this.direction = -1; // Tab tie's are always face up. + } +} + + +/***/ }), + +/***/ "./src/textbracket.ts": +/*!****************************!*\ + !*** ./src/textbracket.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextBracket": () => (/* binding */ TextBracket), +/* harmony export */ "TextBracketPosition": () => (/* binding */ TextBracketPosition) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Cyril Silverman +// +// This file implements `TextBrackets` which extend between two notes. +// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created +// using this class. + + + + + + +// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (TextBracket.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.TextBracket', args); +} +var TextBracketPosition; +(function (TextBracketPosition) { + TextBracketPosition[TextBracketPosition["TOP"] = 1] = "TOP"; + TextBracketPosition[TextBracketPosition["BOTTOM"] = -1] = "BOTTOM"; +})(TextBracketPosition || (TextBracketPosition = {})); +class TextBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TextBracket; + } + static get Position() { + return TextBracketPosition; + } + static get PositionString() { + return { + top: TextBracketPosition.TOP, + bottom: TextBracketPosition.BOTTOM, + }; + } + /** + * @deprecated Use `TextBracket.Position` instead. + */ + static get Positions() { + L('Positions is deprecated, use TextBracketPosition instead.'); + return TextBracketPosition; + } + /** + * @deprecated Use `TextBracket.PositionString` instead. + */ + static get PositionsString() { + L('PositionsString is deprecated, use PositionString instead.'); + return TextBracket.PositionString; + } + constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) { + super(); + this.start = start; + this.stop = stop; + this.text = text; + this.superscript = superscript; + this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position; + this.line = 1; + this.resetFont(); + this.render_options = { + dashed: true, + dash: [5], + color: 'black', + line_width: 1, + show_bracket: true, + bracket_height: 8, + // In the BOTTOM position, the bracket line can extend + // under the superscript. + underline_superscript: true, + }; + } + /** + * Apply the text backet styling to the provided context. + * @param ctx + * @returns this + */ + applyStyle(ctx) { + ctx.setFont(this.font); + const options = this.render_options; + ctx.setStrokeStyle(options.color); + ctx.setFillStyle(options.color); + ctx.setLineWidth(options.line_width); + return this; + } + // Set whether the bracket line should be `dashed`. You can also + // optionally set the `dash` pattern by passing in an array of numbers + setDashed(dashed, dash) { + this.render_options.dashed = dashed; + if (dash) + this.render_options.dash = dash; + return this; + } + // Set the rendering `context` for the octave bracket + setLine(line) { + this.line = line; + return this; + } + // Draw the octave bracket on the rendering context + draw() { + const ctx = this.checkContext(); + this.setRendered(); + let y = 0; + switch (this.position) { + case TextBracketPosition.TOP: + y = this.start.checkStave().getYForTopText(this.line); + break; + case TextBracketPosition.BOTTOM: + y = this.start.checkStave().getYForBottomText(this.line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK); + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`); + } + // Get the preliminary start and stop coordintates for the bracket + const start = { x: this.start.getAbsoluteX(), y }; + const stop = { x: this.stop.getAbsoluteX(), y }; + L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y); + const bracket_height = this.render_options.bracket_height * this.position; + ctx.save(); + this.applyStyle(ctx); + // Draw text + ctx.fillText(this.text, start.x, start.y); + // Get the width and height for the octave number + const main_measure = ctx.measureText(this.text); + const main_width = main_measure.width; + const main_height = main_measure.height; + // Calculate the y position for the super script + const super_y = start.y - main_height / 2.5; + // We called this.resetFont() in the constructor, so we know this.textFont is available. + // eslint-disable-next-line + const { family, size, weight, style } = this.textFont; + // To draw the superscript, we scale the font size by 1/1.4. + const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_1__.Font.scaleSize(size, 0.714286); + ctx.setFont(family, smallerFontSize, weight, style); + ctx.fillText(this.superscript, start.x + main_width + 1, super_y); + // Determine width and height of the superscript + const super_measure = ctx.measureText(this.superscript); + const super_width = super_measure.width; + const super_height = super_measure.height; + // Setup initial coordinates for the bracket line + let start_x = start.x; + let line_y = super_y; + const end_x = stop.x + this.stop.getGlyphProps().getWidth(); + // Adjust x and y coordinates based on position + if (this.position === TextBracketPosition.TOP) { + start_x += main_width + super_width + 5; + line_y -= super_height / 2.7; + } + else if (this.position === TextBracketPosition.BOTTOM) { + line_y += super_height / 2.7; + start_x += main_width + 2; + if (!this.render_options.underline_superscript) { + start_x += super_width; + } + } + if (this.render_options.dashed) { + // Main line + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash); + // Ending Bracket + if (this.render_options.show_bracket) { + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash); + } + } + else { + ctx.beginPath(); + ctx.moveTo(start_x, line_y); + // Main line + ctx.lineTo(end_x, line_y); + if (this.render_options.show_bracket) { + // Ending bracket + ctx.lineTo(end_x, line_y + bracket_height); + } + ctx.stroke(); + ctx.closePath(); + } + ctx.restore(); + } +} +TextBracket.DEBUG = false; +TextBracket.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 15, + weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC, +}; + + + +/***/ }), + +/***/ "./src/textdynamics.ts": +/*!*****************************!*\ + !*** ./src/textdynamics.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextDynamics": () => (/* binding */ TextDynamics) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +// eslint-disable-next-line +function L(...args) { + if (TextDynamics.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_4__.log)('Vex.Flow.TextDynamics', args); +} +/** + * `TextDynamics` renders traditional + * text dynamics markings, **ie: p, f, sfz, rfz, ppp** + * + * You can render any dynamics string that contains a combination of + * the following letters: P, M, F, Z, R, S + */ +class TextDynamics extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.TextDynamics; + } + /** The glyph data for each dynamics letter. */ + static get GLYPHS() { + return { + f: { + code: 'dynamicForte', + width: 12, + }, + p: { + code: 'dynamicPiano', + width: 14, + }, + m: { + code: 'dynamicMezzo', + width: 17, + }, + s: { + code: 'dynamicSforzando', + width: 10, + }, + z: { + code: 'dynamicZ', + width: 12, + }, + r: { + code: 'dynamicRinforzando', + width: 12, + }, + }; + } + /** + * Create the dynamics marking. + * + * A `TextDynamics` object inherits from `Note` so that it can be formatted + * within a `Voice`. + * + * @param noteStruct an object that contains a `duration` property and a + * `sequence` of letters that represents the letters to render. + */ + constructor(noteStruct) { + super(noteStruct); + this.sequence = (noteStruct.text || '').toLowerCase(); + this.line = noteStruct.line || 0; + this.glyphs = []; + this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE }); + L('New Dynamics Text: ', this.sequence); + } + /** Set the Stave line on which the note should be placed. */ + setLine(line) { + this.line = line; + return this; + } + /** Preformat the dynamics text. */ + preFormat() { + let total_width = 0; + // length of this.glyphs must be <= + // length of this.sequence, so if we're formatted before + // create new glyphs. + this.glyphs = []; + // Iterate through each letter + this.sequence.split('').forEach((letter) => { + // Get the glyph data for the letter + const glyph_data = TextDynamics.GLYPHS[letter]; + if (!glyph_data) + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('Invalid dynamics character: ' + letter); + const size = (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.render_options.glyph_font_size); + const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyph_data.code, size, { category: 'textNote' }); + // Add the glyph + this.glyphs.push(glyph); + total_width += glyph_data.width; + }); + // Store the width of the text + this.setWidth(total_width); + this.preFormatted = true; + return this; + } + /** Draw the dynamics text on the rendering context. */ + draw() { + this.setRendered(); + const x = this.getAbsoluteX(); + const y = this.checkStave().getYForLine(this.line + -3); + L('Rendering Dynamics: ', this.sequence); + let letter_x = x; + this.glyphs.forEach((glyph, index) => { + const current_letter = this.sequence[index]; + glyph.render(this.checkContext(), letter_x, y); + letter_x += TextDynamics.GLYPHS[current_letter].width; + }); + } +} +/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */ +TextDynamics.DEBUG = false; + + + +/***/ }), + +/***/ "./src/textformatter.ts": +/*!******************************!*\ + !*** ./src/textformatter.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextFormatter": () => (/* binding */ TextFormatter) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + +// eslint-disable-next-line +function L(...args) { + if (TextFormatter.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)('Vex.Flow.TextFormatter', args); +} +/** + * Text widths are stored in a cache, so we don't have to recompute widths + * for the same font + string combination. + * + * The cache is first keyed by the font information. The key is of the form: + * `${family}-${size}-${weight}-${style}` + * The second level key is the specific text to be measured. + * + * The stored value is the measured width in `em` units. + * textWidth == textWidthCache[cacheKey][textToMeasure] + */ +const textWidthCache = {}; +const textHeightCache = {}; +/** + * Applications may register additional fonts via `TextFormatter.registerInfo(info)`. + * The metrics for those fonts will be made available to the application. + */ +const registry = {}; +class TextFormatter { + /** + * Return all registered font families. + */ + static getFontFamilies() { + const registeredFonts = []; + for (const fontFamily in registry) { + const formatterInfo = registry[fontFamily]; + registeredFonts.push(Object.assign({}, formatterInfo)); + } + return registeredFonts; + } + /** + * Call `TextFormatter.registerInfo(info)` to register font information before using this method. + * + * This method creates a formatter for the font that most closely matches the requested font. + * We compare font family, bold, and italic attributes. + * This method will return a fallback formatter if there are no matches. + */ + static create(requestedFont = {}) { + L('create: ', requestedFont); + if (!requestedFont.family) { + requestedFont.family = _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF; + } + // TODO: One potential (small) optimization is to cache the TextFormatter object + // returned for each font info. We would probably want to clear the cache if + // the registry is ever updated. + const candidates = []; + // The incoming font family is a string of comma-separated font family names. + // (e.g., `PetalumaScript, Arial, sans-serif`). + const requestedFamilies = requestedFont.family.split(/\s*,\s*/); + for (const requestedFamily of requestedFamilies) { + for (const fontFamily in registry) { + // Support cases where the registry contains 'Roboto Slab Medium', + // but the requestedFont.family is 'Roboto Slab'. + if (fontFamily.startsWith(requestedFamily)) { + candidates.push(registry[fontFamily]); + } + } + if (candidates.length > 0) { + break; + } + } + let formatter; + if (candidates.length === 0) { + // No match, so return a fallback text formatter. + formatter = new TextFormatter(Object.values(registry)[0]); + } + else if (candidates.length === 1) { + formatter = new TextFormatter(candidates[0]); + } + else { + const bold = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isBold(requestedFont.weight); + const italic = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isItalic(requestedFont.style); + const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic); + if (perfectMatch) { + formatter = new TextFormatter(perfectMatch); + } + else { + const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold); + if (partialMatch) { + formatter = new TextFormatter(partialMatch); + } + else { + formatter = new TextFormatter(candidates[0]); + } + } + } + const fontSize = requestedFont.size; + if (typeof fontSize !== 'undefined') { + const fontSizeInPt = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(fontSize); + formatter.setFontSize(fontSizeInPt); + } + return formatter; + } + /** + * @param fontFamily used as a key to the font registry. + * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)` + */ + static getInfo(fontFamily) { + return registry[fontFamily]; + } + /** + * Apps may register their own fonts and metrics, and those metrics + * will be available to the app for formatting. + * + * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory. + * @param info + * @param overwrite + */ + static registerInfo(info, overwrite = false) { + L('registerInfo: ', info, overwrite); + const fontFamily = info.family; + const currFontInfo = registry[fontFamily]; + if (currFontInfo === undefined || overwrite) { + registry[fontFamily] = info; + } + } + /** + * Use `TextFormatter.create(...)` to build an instance from information previously + * registered via `TextFormatter.registerInfo(info)`. + */ + constructor(formatterInfo) { + /** Font family. */ + this.family = ''; + /** Specified in `pt` units. */ + this.size = 14; + /** Font metrics are extracted at 1000 upem (units per em). */ + this.resolution = 1000; + /** + * For text formatting, we do not require glyph outlines, but instead rely on glyph + * bounding box metrics such as: + * ``` + * { + * x_min: 48, + * x_max: 235, + * y_min: -17, + * y_max: 734, + * ha: 751, + * leftSideBearing: 48, + * advanceWidth: 286, + * } + * ``` + */ + this.glyphs = {}; + this.serifs = false; + this.monospaced = false; + this.italic = false; + this.bold = false; + this.superscriptOffset = 0; + this.subscriptOffset = 0; + this.maxSizeGlyph = '@'; + // This is an internal key used to index the `textWidthCache`. + this.cacheKey = ''; + this.updateParams(formatterInfo); + } + get localHeightCache() { + var _a; + if (textHeightCache[this.cacheKey] === undefined) { + textHeightCache[this.cacheKey] = {}; + } + return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {}; + } + updateParams(params) { + if (params.family) + this.family = params.family; + if (params.resolution) + this.resolution = params.resolution; + if (params.glyphs) + this.glyphs = params.glyphs; + if (params.serifs) + this.serifs = params.serifs; + if (params.monospaced) + this.monospaced = params.monospaced; + if (params.italic) + this.italic = params.italic; + if (params.bold) + this.bold = params.bold; + if (params.maxSizeGlyph) + this.maxSizeGlyph = params.maxSizeGlyph; + if (params.superscriptOffset) + this.superscriptOffset = params.superscriptOffset; + if (params.subscriptOffset) + this.subscriptOffset = params.subscriptOffset; + this.updateCacheKey(); + } + /** Create a hash with the current font data, so we can cache computed widths. */ + updateCacheKey() { + const family = this.family.replace(/\s+/g, '_'); + const size = this.size; + const weight = this.bold ? _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD : _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL; + const style = this.italic ? _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC : _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL; + // Use the same key format as SVGContext. + this.cacheKey = `${family}%${size}%${weight}%${style}`; + } + /** + * The glyphs table is indexed by the character (e.g., 'C', '@'). + * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts. + */ + getGlyphMetrics(character) { + if (this.glyphs[character]) { + return this.glyphs[character]; + } + else { + return this.glyphs[this.maxSizeGlyph]; + } + } + get maxHeight() { + const metrics = this.getGlyphMetrics(this.maxSizeGlyph); + return (metrics.ha / this.resolution) * this.fontSizeInPixels; + } + /** + * Retrieve the character's advanceWidth as a fraction of an `em` unit. + * For the space character ' ' as defined in the: + * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25. + * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485. + */ + getWidthForCharacterInEm(c) { + var _a; + const metrics = this.getGlyphMetrics(c); + if (!metrics) { + // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript. + return 0.65; + } + else { + const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0; + return advanceWidth / this.resolution; + } + } + /** + * Retrieve the character's y bounds (ymin, ymax) and height. + */ + getYForCharacterInPx(c) { + const metrics = this.getGlyphMetrics(c); + const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight }; + if (!metrics) { + return rv; + } + else { + if (typeof metrics.y_min === 'number') { + rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels; + } + if (typeof metrics.y_max === 'number') { + rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels; + } + rv.height = rv.yMax - rv.yMin; + return rv; + } + } + getYForStringInPx(str) { + const entry = this.localHeightCache; + const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight }; + const cache = entry[str]; + if (cache !== undefined) { + return cache; + } + for (let i = 0; i < str.length; ++i) { + const curY = this.getYForCharacterInPx(str[i]); + extent.yMin = Math.min(extent.yMin, curY.yMin); + extent.yMax = Math.max(extent.yMax, curY.yMax); + extent.height = extent.yMax - extent.yMin; + } + entry[str] = extent; + return extent; + } + /** + * Retrieve the total width of `text` in `em` units. + */ + getWidthForTextInEm(text) { + const key = this.cacheKey; + // Get the cache for this specific font family, size, weight, style combination. + // The cache contains previously computed widths for different `text` strings. + let cachedWidths = textWidthCache[key]; + if (cachedWidths === undefined) { + cachedWidths = {}; + textWidthCache[key] = cachedWidths; + } + let width = cachedWidths[text]; + if (width === undefined) { + width = 0; + for (let i = 0; i < text.length; ++i) { + width += this.getWidthForCharacterInEm(text[i]); + } + cachedWidths[text] = width; + } + return width; + } + /** The width of the text (in `em`) is scaled by the font size (in `px`). */ + getWidthForTextInPx(text) { + return this.getWidthForTextInEm(text) * this.fontSizeInPixels; + } + /** + * @param size in pt. + */ + setFontSize(size) { + this.size = size; + // The width cache key depends on the current font size. + this.updateCacheKey(); + return this; + } + /** `this.size` is specified in points. Convert to pixels. */ + get fontSizeInPixels() { + return this.size * _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleToPxFrom.pt; + } + getResolution() { + return this.resolution; + } +} +/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */ +TextFormatter.DEBUG = false; + + + +/***/ }), + +/***/ "./src/textnote.ts": +/*!*************************!*\ + !*** ./src/textnote.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextJustification": () => (/* binding */ TextJustification), +/* harmony export */ "TextNote": () => (/* binding */ TextNote) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +var TextJustification; +(function (TextJustification) { + TextJustification[TextJustification["LEFT"] = 1] = "LEFT"; + TextJustification[TextJustification["CENTER"] = 2] = "CENTER"; + TextJustification[TextJustification["RIGHT"] = 3] = "RIGHT"; +})(TextJustification || (TextJustification = {})); +/** + * `TextNote` is a notation element that is positioned in time. Generally + * meant for objects that sit above/below the staff and inline with each other. + * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`. + * Examples of this would be such as dynamics, lyrics, chord changes, etc. + */ +class TextNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TextNote; + } + /** Glyph data. */ + static get GLYPHS() { + return { + segno: { + code: 'segno', + }, + tr: { + code: 'ornamentTrill', + }, + mordent: { + code: 'ornamentMordent', + }, + mordent_upper: { + code: 'ornamentShortTrill', + }, + mordent_lower: { + code: 'ornamentMordent', + }, + f: { + code: 'dynamicForte', + }, + p: { + code: 'dynamicPiano', + }, + m: { + code: 'dynamicMezzo', + }, + s: { + code: 'dynamicSforzando', + }, + z: { + code: 'dynamicZ', + }, + coda: { + code: 'coda', + }, + pedal_open: { + code: 'keyboardPedalPed', + }, + pedal_close: { + code: 'keyboardPedalUp', + }, + caesura_straight: { + code: 'caesura', + }, + caesura_curved: { + code: 'caesuraCurved', + }, + breath: { + code: 'breathMarkComma', + }, + tick: { + code: 'breathMarkTick', + }, + turn: { + code: 'ornamentTurn', + }, + turn_inverted: { + code: 'ornamentTurnSlash', + }, + }; + } + constructor(noteStruct) { + super(noteStruct); + this.text = noteStruct.text || ''; + this.superscript = noteStruct.superscript; + this.subscript = noteStruct.subscript; + this.setFont(noteStruct.font); + this.line = noteStruct.line || 0; + this.smooth = noteStruct.smooth || false; + this.ignore_ticks = noteStruct.ignore_ticks || false; + this.justification = TextJustification.LEFT; + // Determine and set initial note width. Note that the text width is + // an approximation and isn't very accurate. The only way to accurately + // measure the length of text is with `CanvasRenderingContext2D.measureText()`. + if (noteStruct.glyph) { + const struct = TextNote.GLYPHS[noteStruct.glyph]; + if (!struct) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('Invalid glyph type: ' + noteStruct.glyph); + this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(struct.code, _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, { category: 'textNote' }); + this.setWidth(this.glyph.getMetrics().width); + } + else { + this.glyph = undefined; + } + } + /** Set the horizontal justification of the TextNote. */ + setJustification(just) { + this.justification = just; + return this; + } + /** Set the Stave line on which the note should be placed. */ + setLine(line) { + this.line = line; + return this; + } + /** Return the Stave line on which the TextNote is placed. */ + getLine() { + return this.line; + } + /** Return the unformatted text of this TextNote. */ + getText() { + return this.text; + } + /** Pre-render formatting. */ + preFormat() { + if (this.preFormatted) + return; + const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`); + if (this.smooth) { + this.setWidth(0); + } + else { + if (this.glyph) { + // Width already set. + } + else { + const ctx = this.checkContext(); + ctx.setFont(this.textFont); + this.setWidth(ctx.measureText(this.text).width); + } + } + if (this.justification === TextJustification.CENTER) { + this.leftDisplacedHeadPx = this.width / 2; + } + else if (this.justification === TextJustification.RIGHT) { + this.leftDisplacedHeadPx = this.width; + } + // We reposition to the center of the note head + this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2; + this.preFormatted = true; + } + /** + * Renders the TextNote. + * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`. + */ + draw() { + const ctx = this.checkContext(); + const stave = this.checkStave(); + const tickContext = this.checkTickContext(`Can't draw without a TickContext.`); + this.setRendered(); + // Reposition to center of note head + let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2; + // Align based on tick-context width. + const width = this.getWidth(); + if (this.justification === TextJustification.CENTER) { + x -= width / 2; + } + else if (this.justification === TextJustification.RIGHT) { + x -= width; + } + let y; + if (this.glyph) { + y = stave.getYForLine(this.line + -3); + this.glyph.render(ctx, x, y); + } + else { + y = stave.getYForLine(this.line + -3); + this.applyStyle(ctx); + ctx.setFont(this.textFont); + ctx.fillText(this.text, x, y); + const height = ctx.measureText(this.text).height; + // We called this.setFont(...) in the constructor, so we know this.textFont is available. + // eslint-disable-next-line + const { family, size, weight, style } = this.textFont; + // Scale the font size by 1/1.3. + const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, 0.769231); + if (this.superscript) { + ctx.setFont(family, smallerFontSize, weight, style); + ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2); + } + if (this.subscript) { + ctx.setFont(family, smallerFontSize, weight, style); + ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1); + } + this.restoreStyle(ctx); + } + } +} +TextNote.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: 12, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; +TextNote.Justification = TextJustification; + + + +/***/ }), + +/***/ "./src/tickable.ts": +/*!*************************!*\ + !*** ./src/tickable.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tickable": () => (/* binding */ Tickable) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +/** + * Tickable represents a element that sit on a score and + * has a duration, i.e., Tickables occupy space in the musical rendering dimension. + */ +class Tickable extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Tickable; + } + constructor() { + super(); + this._preFormatted = false; + this._postFormatted = false; + // These properties represent the duration of + // this tickable element. + this.ticks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); // Fractional value of ticks + this.intrinsicTicks = 0; // Floating point value of ticks + this.tickMultiplier = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 1); + // Formatter metrics + this.width = 0; + this.x_shift = 0; // Shift from tick context + this.modifiers = []; + this.tupletStack = []; + this.align_center = false; + this.center_x_shift = 0; // Shift from tick context if center aligned + // This flag tells the formatter to ignore this tickable during + // formatting and justification. It is set by tickables such as BarNote. + this.ignore_ticks = false; + // This is a space for an external formatting class or function to maintain + // metrics. + this.formatterMetrics = { + // The freedom of a tickable is the distance it can move without colliding + // with neighboring elements. A formatter can set these values during its + // formatting pass, which a different formatter can then use to fine tune. + freedom: { left: 0, right: 0 }, + // The simplified rational duration of this tick as a string. It can be + // used as an index to a map or hashtable. + duration: '', + // The number of formatting iterations undergone. + iterations: 0, + // The space in pixels allocated by this formatter, along with the mean space + // for tickables of this duration, and the deviation from the mean. + space: { + used: 0, + mean: 0, + deviation: 0, + }, + }; + } + /** Reset the Tickable, this function will be overloaded. */ + reset() { + return this; + } + /** Return the ticks. */ + getTicks() { + return this.ticks; + } + /** Check if it ignores the ticks. */ + shouldIgnoreTicks() { + return this.ignore_ticks; + } + /** Ignore the ticks. */ + setIgnoreTicks(flag) { + this.ignore_ticks = flag; + return this; + } + /** Set width of note. Used by the formatter for positioning. */ + setWidth(width) { + this.width = width; + } + /** Get width of note. Used by the formatter for positioning. */ + getWidth() { + if (!this._preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('UnformattedNote', "Can't call GetWidth on an unformatted note."); + } + return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0); + } + /** Displace note by `x` pixels. Used by the formatter. */ + setXShift(x) { + this.x_shift = x; + return this; + } + /** Get the `x` displaced pixels of the note. */ + getXShift() { + return this.x_shift; + } + /** Get `x` position of this tick context. */ + getX() { + const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`); + return tickContext.getX() + this.x_shift; + } + /** Return the formatterMetrics. */ + getFormatterMetrics() { + return this.formatterMetrics; + } + /** Return the center `x` shift. */ + getCenterXShift() { + if (this.isCenterAligned()) { + return this.center_x_shift; + } + return 0; + } + /** Set the center `x` shift. */ + setCenterXShift(centerXShift) { + this.center_x_shift = centerXShift; + return this; + } + // Check if tickable is center aligned. */ + isCenterAligned() { + return this.align_center; + } + // Set/unset center alignment. */ + setCenterAlignment(align_center) { + this.align_center = align_center; + return this; + } + /** + * Return the associated voice. Every tickable must be associated with a voice. + * This allows formatters and preFormatter to associate them with the right modifierContexts. + */ + getVoice() { + return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.voice, 'NoVoice', 'Tickable has no voice.'); + } + /** Set the associated voice. */ + setVoice(voice) { + this.voice = voice; + } + /** Get the tuplet. */ + getTuplet() { + return this.tuplet; + } + /** Return a list of Tuplets. */ + getTupletStack() { + return this.tupletStack; + } + /** + * Reset the specific Tuplet (if this is not provided, all tuplets are reset). + * Remove any prior tuplets from the tick calculation and + * reset the intrinsic tick value. + */ + resetTuplet(tuplet) { + let noteCount; + let notesOccupied; + if (tuplet) { + const i = this.tupletStack.indexOf(tuplet); + if (i !== -1) { + this.tupletStack.splice(i, 1); + noteCount = tuplet.getNoteCount(); + notesOccupied = tuplet.getNotesOccupied(); + // Revert old multiplier by inverting numerator & denom.: + this.applyTickMultiplier(noteCount, notesOccupied); + } + return this; + } + while (this.tupletStack.length) { + tuplet = this.tupletStack.pop(); + noteCount = tuplet.getNoteCount(); + notesOccupied = tuplet.getNotesOccupied(); + // Revert old multiplier by inverting numerator & denom.: + this.applyTickMultiplier(noteCount, notesOccupied); + } + return this; + } + /** Attach to new tuplet. */ + setTuplet(tuplet) { + if (tuplet) { + this.tupletStack.push(tuplet); + const noteCount = tuplet.getNoteCount(); + const notesOccupied = tuplet.getNotesOccupied(); + this.applyTickMultiplier(notesOccupied, noteCount); + } + this.tuplet = tuplet; + return this; + } + /** + * Add self to the provided ModifierContext `mc`. + * If this tickable has modifiers, set modifierContext. + * @returns this + */ + addToModifierContext(mc) { + this.modifierContext = mc; + for (let i = 0; i < this.modifiers.length; ++i) { + this.modifierContext.addMember(this.modifiers[i]); + } + this.modifierContext.addMember(this); + this._preFormatted = false; + return this; + } + /** + * Optional, if tickable has modifiers, associate a Modifier. + * @param mod the modifier + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + addModifier(modifier, index = 0) { + this.modifiers.push(modifier); + this._preFormatted = false; + return this; + } + /** Get the list of associated modifiers. */ + getModifiers() { + return this.modifiers; + } + /** Set the Tick Context. */ + setTickContext(tc) { + this.tickContext = tc; + this._preFormatted = false; + } + checkTickContext(message = 'Tickable has no tick context.') { + return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.tickContext, 'NoTickContext', message); + } + /** Preformat the Tickable. */ + preFormat() { + if (this._preFormatted) + return; + this.width = 0; + if (this.modifierContext) { + this.modifierContext.preFormat(); + this.width += this.modifierContext.getWidth(); + } + } + /** Set preformatted status. */ + set preFormatted(value) { + this._preFormatted = value; + } + get preFormatted() { + return this._preFormatted; + } + /** Postformat the Tickable. */ + postFormat() { + if (this._postFormatted) + return this; + this._postFormatted = true; + return this; + } + /** Set postformatted status. */ + set postFormatted(value) { + this._postFormatted = value; + } + get postFormatted() { + return this._postFormatted; + } + /** Return the intrinsic ticks. */ + getIntrinsicTicks() { + return this.intrinsicTicks; + } + /** Set the intrinsic ticks. */ + setIntrinsicTicks(intrinsicTicks) { + this.intrinsicTicks = intrinsicTicks; + this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks); + } + /** Get the tick multiplier. */ + getTickMultiplier() { + return this.tickMultiplier; + } + /** Apply a tick multiplier. */ + applyTickMultiplier(numerator, denominator) { + this.tickMultiplier.multiply(numerator, denominator); + this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks); + } + /** Set the duration. */ + setDuration(duration) { + const ticks = duration.numerator * (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION / duration.denominator); + this.ticks = this.tickMultiplier.clone().multiply(ticks); + this.intrinsicTicks = this.ticks.value(); + } + getAbsoluteX() { + const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`); + return tickContext.getX(); + } + /** Attach this note to a modifier context. */ + setModifierContext(mc) { + this.modifierContext = mc; + return this; + } + /** Get `ModifierContext`. */ + getModifierContext() { + return this.modifierContext; + } + /** Check and get `ModifierContext`. */ + checkModifierContext() { + return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.'); + } +} + + +/***/ }), + +/***/ "./src/tickcontext.ts": +/*!****************************!*\ + !*** ./src/tickcontext.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TickContext": () => (/* binding */ TickContext) +/* harmony export */ }); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// A formatter for abstract tickable objects, such as notes, chords, +// tabs, etc. + + +/** + * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc. + */ +class TickContext { + static getNextContext(tContext) { + const contexts = tContext.tContexts; + const index = contexts.indexOf(tContext); + if (index + 1 < contexts.length) + return contexts[index + 1]; + } + constructor(options) { + this.preFormatted = false; + this.postFormatted = false; + this.tickID = options && options.tickID ? options.tickID : 0; + this.currentTick = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1); + this.maxTicks = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1); + this.maxTickable = undefined; // Biggest tickable + this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks + this.minTickable = undefined; + this.padding = 1; // padding on each side (width += padding * 2) + this.x = 0; + this.xBase = 0; // base x position without xOffset + this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO) + this.tickables = []; // Notes, tabs, chords, lyrics. + this.tickablesByVoice = {}; // Tickables indexed by voice number + // Formatting metrics + this.notePx = 0; // width of widest note in this context + this.glyphPx = 0; // width of glyph (note head) + this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes + this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes + this.modLeftPx = 0; // Left modifier pixels + this.modRightPx = 0; // Right modifier pixels + this.totalLeftPx = 0; // Total left pixels + this.totalRightPx = 0; // Total right pixels + this.tContexts = []; // Parent array of tick contexts + this.width = 0; + this.formatterMetrics = { + // The freedom of a tickcontext is the distance it can move without colliding + // with neighboring elements. A formatter can set these values during its + // formatting pass, which a different formatter can then use to fine tune. + freedom: { left: 0, right: 0 }, + }; + } + getTickID() { + return this.tickID; + } + getX() { + return this.x; + } + setX(x) { + this.x = x; + this.xBase = x; + this.xOffset = 0; + return this; + } + getXBase() { + return this.xBase; + } // use of xBase and xOffset is optional, avoids offset creep + setXBase(xBase) { + this.xBase = xBase; + this.x = xBase + this.xOffset; + } + getXOffset() { + return this.xOffset; + } + setXOffset(xOffset) { + this.xOffset = xOffset; + this.x = this.xBase + xOffset; + } + getWidth() { + return this.width + this.padding * 2; + } + setPadding(padding) { + this.padding = padding; + return this; + } + getMaxTicks() { + return this.maxTicks; + } + getMinTicks() { + return this.minTicks; + } + getMaxTickable() { + return this.maxTickable; + } + getMinTickable() { + return this.minTickable; + } + getTickables() { + return this.tickables; + } + /** + * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex). + * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63 + * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable. + */ + getTickableForVoice(voiceIndex) { + return this.tickablesByVoice[voiceIndex]; + } + getTickablesByVoice() { + return this.tickablesByVoice; + } + getCenterAlignedTickables() { + return this.tickables.filter((tickable) => tickable.isCenterAligned()); + } + /** Gets widths context, note and left/right modifiers for formatting. */ + getMetrics() { + const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this; + return { + width, + glyphPx, + notePx, + leftDisplacedHeadPx, + rightDisplacedHeadPx, + modLeftPx, + modRightPx, + totalLeftPx, + totalRightPx, + }; + } + getCurrentTick() { + return this.currentTick; + } + setCurrentTick(tick) { + this.currentTick = tick; + this.preFormatted = false; + } + addTickable(tickable, voiceIndex) { + if (!tickable) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid tickable added.'); + } + if (!tickable.shouldIgnoreTicks()) { + const ticks = tickable.getTicks(); + if (ticks.greaterThan(this.maxTicks)) { + this.maxTicks = ticks.clone(); + this.maxTickable = tickable; + } + if (this.minTicks == null) { + this.minTicks = ticks.clone(); + this.minTickable = tickable; + } + else if (ticks.lessThan(this.minTicks)) { + this.minTicks = ticks.clone(); + this.minTickable = tickable; + } + } + tickable.setTickContext(this); + this.tickables.push(tickable); + this.tickablesByVoice[voiceIndex || 0] = tickable; + this.preFormatted = false; + return this; + } + preFormat() { + if (this.preFormatted) + return this; + for (let i = 0; i < this.tickables.length; ++i) { + const tickable = this.tickables[i]; + tickable.preFormat(); + const metrics = tickable.getMetrics(); + // Maintain max displaced head pixels from all tickables in the context + this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx); + this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx); + // Maintain the widest note for all tickables in the context + this.notePx = Math.max(this.notePx, metrics.notePx); + // Maintain the widest note head + this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0); + // Total modifier shift + this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx); + this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx); + // Total shift + this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx); + this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx); + // Recalculate the tick context total width + this.width = this.notePx + this.totalLeftPx + this.totalRightPx; + } + return this; + } + postFormat() { + if (this.postFormatted) + return this; + this.postFormatted = true; + return this; + } + getFormatterMetrics() { + return this.formatterMetrics; + } +} + + +/***/ }), + +/***/ "./src/timesigglyph.ts": +/*!*****************************!*\ + !*** ./src/timesigglyph.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TimeSignatureGlyph": () => (/* binding */ TimeSignatureGlyph) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// Renders time signatures glyphs for staffs +// This class is used by TimeSignature to render the associated glyphs + + +class TimeSignatureGlyph extends _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph { + constructor(timeSignature, topDigits, botDigits, code, point, options) { + var _a; + super(code, point, options); + this.timeSignature = timeSignature; + this.topGlyphs = []; + this.botGlyphs = []; + let topWidth = 0; + let height = 0; + for (let i = 0; i < topDigits.length; ++i) { + let timeSigType = topDigits[i]; + switch (topDigits[i]) { + case '-': + timeSigType = 'Minus'; + break; + case '+': + timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus'; + break; + case '(': + timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft'; + break; + case ')': + timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight'; + break; + } + const topGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point); + this.topGlyphs.push(topGlyph); + topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0; + height = Math.max(height, topGlyph.getMetrics().height); + } + let botWidth = 0; + for (let i = 0; i < botDigits.length; ++i) { + let timeSigType = botDigits[i]; + switch (botDigits[i]) { + case '+': + timeSigType = 'PlusSmall'; + break; + case '(': + timeSigType = 'ParensLeftSmall'; + break; + case ')': + timeSigType = 'ParensRightSmall'; + break; + } + const botGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point); + this.botGlyphs.push(botGlyph); + botWidth += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(botGlyph.getMetrics().width); + height = Math.max(height, botGlyph.getMetrics().height); + } + // If the height of the digits is more than two staff spaces (20), shift to the next line + // in order to center the digits on lines 1 and 5 rather than 2 and 4. + this.lineShift = height > 22 ? 1 : 0; + this.width = Math.max(topWidth, botWidth); + this.xMin = this.getMetrics().x_min; + this.topStartX = (this.width - topWidth) / 2.0; + this.botStartX = (this.width - botWidth) / 2.0; + this.reset(); + } + getMetrics() { + return { + x_min: this.xMin, + x_max: this.xMin + this.width, + width: this.width, + }; + } + renderToStave(x) { + const stave = this.checkStave(); + const ctx = this.checkContext(); + let start_x = x + this.topStartX; + let y = 0; + if (this.botGlyphs.length > 0) + y = stave.getYForLine(this.timeSignature.topLine - this.lineShift); + else + y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2; + for (let i = 0; i < this.topGlyphs.length; ++i) { + const glyph = this.topGlyphs[i]; + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y); + start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width); + } + start_x = x + this.botStartX; + y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift); + for (let i = 0; i < this.botGlyphs.length; ++i) { + const glyph = this.botGlyphs[i]; + this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine()); + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y); + start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width); + } + } +} + + +/***/ }), + +/***/ "./src/timesignature.ts": +/*!******************************!*\ + !*** ./src/timesignature.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TimeSignature": () => (/* binding */ TimeSignature) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./timesigglyph */ "./src/timesigglyph.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// Implements time signatures glyphs for staffs +// See tables.js for the internal time signatures +// representation + + + + + + +const assertIsValidTimeSig = (timeSpec) => { + const numbers = timeSpec.split('/'); + if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form "/"`); + } + numbers.forEach((number) => { + // Characters consisting in number 0..9, '+', '-', '(' or ')' + if (/^[0-9+\-()]+$/.test(number) == false) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`); + } + }); +}; +/** + * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from + * a provided "timeSpec" such as "4/4", "C|" (cut time), or even something more advanced + * such as "3/4(6/8)" or "2/4+5/8". + */ +class TimeSignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TimeSignature; + } + static get glyphs() { + return { + C: { + code: 'timeSigCommon', + line: 2, + }, + 'C|': { + code: 'timeSigCutCommon', + line: 2, + }, + }; + } + constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) { + super(); + this.timeSpec = '4/4'; + this.line = 0; + this.is_numeric = true; + this.validate_args = validate_args; + const padding = customPadding; + // point must be defined before parsing spec. + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont(); + this.point = musicFont.lookupMetric('digits.point') || _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE; + const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0); + this.topLine = 2 + fontLineShift; + this.bottomLine = 4 + fontLineShift; + this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN); + this.setTimeSig(timeSpec); + this.setPadding(padding); + } + /** + * Return TimeSignatureInfo given a string, consisting of line (number), + * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or + * TimeSignatureGlyph object). + */ + parseTimeSpec(timeSpec) { + var _a, _b; + if (timeSpec === 'C' || timeSpec === 'C|') { + const { line, code } = TimeSignature.glyphs[timeSpec]; + return { + line, + num: false, + glyph: new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE), + }; + } + if (this.validate_args) { + assertIsValidTimeSig(timeSpec); + } + const parts = timeSpec.split('/'); + return { + line: 0, + num: true, + glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''), + }; + } + /** + * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both + * top and bottom digits along with plus signs etc.) + */ + makeTimeSignatureGlyph(topDigits, botDigits) { + // note that 'code' is ignored by TimeSignatureGlyph when rendering. + return new _timesigglyph__WEBPACK_IMPORTED_MODULE_3__.TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point); + } + /** + * Returns {line, num (=getIsNumeric), glyph} -- + * but these can also be accessed directly w/ getters and setters. + */ + getInfo() { + const { line, is_numeric, glyph } = this; + return { line, num: is_numeric, glyph }; + } + /** + * Set a new time signature specification without changing customPadding, etc. + * + * The getter for this is `getTimeSpec` not `getTimeSig`. + */ + setTimeSig(timeSpec) { + this.timeSpec = timeSpec; + const info = this.parseTimeSpec(timeSpec); + this.setGlyph(info.glyph); + this.is_numeric = info.num; + this.line = info.line; + return this; + } + /** + * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature + */ + getTimeSpec() { + return this.timeSpec; + } + /** + * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/ + * denominator time signatures such as 3/4 and 2 for cut/common. + */ + getLine() { + return this.line; + } + /** + * Set the line number that the TimeSignature sits on. Half-values are acceptable + * for spaces, etc. Can be altered, for instance, for signatures that sit above the + * staff in large orchestral scores. + */ + setLine(line) { + this.line = line; + } + /** + * Get the Glyph object used to create the time signature. Numeric time signatures + * such as 3/8 have a composite Glyph stored as a single Glyph object. + */ + getGlyph() { + return this.glyph; + } + /** + * Set the Glyph object used to draw the time signature, and update the width of the + * TimeSignature to match. The Glyph must define width in its metrics. + */ + setGlyph(glyph) { + this.glyph = glyph; + this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width)); + } + /** + * Return a boolean on whether this TimeSignature is drawn with one or more numbers + * (such as 4/4) or not (as in cut time). + */ + getIsNumeric() { + return this.is_numeric; + } + /** + * Set whether this TimeSignature is drawn with one or more numbers. + */ + setIsNumeric(isNumeric) { + this.is_numeric = isNumeric; + } + /** + * Draw the time signature on a Stave using its RenderContext. Both setStave + * and setContext must already be run. + */ + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('timesignature', this.getAttribute('id')); + this.glyph.setStave(stave); + this.glyph.setContext(ctx); + this.placeGlyphOnLine(this.glyph, stave, this.line); + this.glyph.renderToStave(this.x); + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} + + +/***/ }), + +/***/ "./src/timesignote.ts": +/*!****************************!*\ + !*** ./src/timesignote.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TimeSigNote": () => (/* binding */ TimeSigNote) +/* harmony export */ }); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Taehoon Moon 2014 + + + +class TimeSigNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TimeSigNote; + } + constructor(timeSpec, customPadding) { + super({ duration: 'b' }); + this.timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_1__.TimeSignature(timeSpec, customPadding); + this.setWidth(this.timeSig.getGlyph().getMetrics().width); + // Note properties + this.ignore_ticks = true; + } + /* Overridden to ignore */ + // eslint-disable-next-line + addToModifierContext(mc) { + // DO NOTHING. + return this; + } + preFormat() { + this.preFormatted = true; + return this; + } + draw() { + const stave = this.checkStave(); + const ctx = this.checkContext(); + this.setRendered(); + const tsGlyph = this.timeSig.getGlyph(); + if (!tsGlyph.getContext()) { + tsGlyph.setContext(ctx); + } + tsGlyph.setStave(stave); + tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs()); + tsGlyph.renderToStave(this.getAbsoluteX()); + } +} + + +/***/ }), + +/***/ "./src/tremolo.ts": +/*!************************!*\ + !*** ./src/tremolo.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tremolo": () => (/* binding */ Tremolo) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Mike Corrigan +// MIT License + + + + + + + +/** Tremolo implements tremolo notation. */ +class Tremolo extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Tremolo; + } + /** + * @param num number of bars + */ + constructor(num) { + super(); + this.num = num; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.CENTER; + this.code = 'tremolo1'; + // big strokes scales initialised to 1 (no scale) + this.y_spacing_scale = 1; + this.extra_stroke_scale = 1; + } + /** Draw the tremolo on the rendering context. */ + draw() { + var _a; + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const stemDirection = note.getStemDirection(); + const start = note.getModifierStartXY(this.position, this.index); + let x = start.x; + const gn = (0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isGraceNote)(note); + const scale = gn ? _gracenote__WEBPACK_IMPORTED_MODULE_1__.GraceNote.SCALE : 1; + const category = `tremolo.${gn ? 'grace' : 'default'}`; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.currentMusicFont(); + let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection; + // add y_spacing_scale for big strokes (#1258) + y_spacing *= this.y_spacing_scale; + const height = this.num * y_spacing; + let y = note.getStemExtents().baseY - height; + if (stemDirection < 0) { + y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale; + } + else { + y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale; + } + const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_3__.Note.getPoint(gn ? 'grace' : 'default'); + x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === _stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP ? 'Up' : 'Down'}`); + for (let i = 0; i < this.num; ++i) { + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale }); + y += y_spacing; + } + } +} + + +/***/ }), + +/***/ "./src/tuning.ts": +/*!***********************!*\ + !*** ./src/tuning.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tuning": () => (/* binding */ Tuning) +/* harmony export */ }); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + +/** `Tuning` implements varies types of tunings for tablature. */ +class Tuning { + static get names() { + return { + standard: 'E/5,B/4,G/4,D/4,A/3,E/3', + dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3', + dropd: 'E/5,B/4,G/4,D/4,A/3,D/3', + eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3', + standardBanjo: 'D/5,B/4,G/4,D/4,G/5', + doubleCBanjo: 'D/5,C/5,G/4,C/4,G/5', + doubleDBanjo: 'E/5,D/5,A/4,D/4,A/5', + sawmillBanjo: 'D/5,C/5,G/4,D/4,G/5', + }; + } + /** + * Constructor. + * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings + */ + constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') { + this.tuningValues = []; + // Default to standard tuning. + this.setTuning(tuningString); + } + /** Return the note number associated to the note string. */ + noteToInteger(noteString) { + var _a; + return (_a = _tables__WEBPACK_IMPORTED_MODULE_0__.Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1; + } + /** + * Set tuning identified by tuning name (eg. 'dagdad') + * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings + */ + setTuning(tuningString) { + if (Tuning.names[tuningString]) { + tuningString = Tuning.names[tuningString]; + } + this.tuningValues = []; + const keys = tuningString.split(/\s*,\s*/); + if (keys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`); + } + for (let i = 0; i < keys.length; ++i) { + this.tuningValues[i] = this.noteToInteger(keys[i]); + } + } + /** Return the note number associated with a tablature string. */ + getValueForString(stringNum) { + const s = Number(stringNum); + if (s < 1 || s > this.tuningValues.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`); + } + return this.tuningValues[s - 1]; + } + /** Return the note number associated with a tablature string and fret. */ + getValueForFret(fretNum, stringNum) { + const stringValue = this.getValueForString(stringNum); + const f = Number(fretNum); + if (f < 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`); + } + return stringValue + f; + } + /** Return the note string associated with tablature string and fret. */ + getNoteForFret(fretNum, stringNum) { + const noteValue = this.getValueForFret(fretNum, stringNum); + const octave = Math.floor(noteValue / 12); + const value = noteValue % 12; + return `${_tables__WEBPACK_IMPORTED_MODULE_0__.Tables.integerToNote(value)}/${octave}`; + } +} + + +/***/ }), + +/***/ "./src/tuplet.ts": +/*!***********************!*\ + !*** ./src/tuplet.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tuplet": () => (/* binding */ Tuplet), +/* harmony export */ "TupletLocation": () => (/* binding */ TupletLocation) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +/** + * ## Description + * + * Create a new tuplet from the specified notes. The notes must + * be part of the same voice. If they are of different rhythmic + * values, then options.num_notes must be set. + * + * @constructor + * @param {Array.} A set of notes: staveNotes, + * notes, etc... any class that inherits stemmableNote at some + * point in its prototype chain. + * @param options: object { + * + * num_notes: fit this many notes into... + * notes_occupied: ...the space of this many notes + * + * Together, these two properties make up the tuplet ratio + * in the form of num_notes : notes_occupied. + * num_notes defaults to the number of notes passed in, so + * it is important that if you omit this property, all of + * the notes passed should be of the same note value. + * notes_occupied defaults to 2 -- so you should almost + * certainly pass this parameter for anything other than + * a basic triplet. + * + * location: + * default 1, which is above the notes: ┌─── 3 ───┐ + * -1 is below the notes └─── 3 ───┘ + * + * bracketed: boolean, draw a bracket around the tuplet number + * when true: ┌─── 3 ───┐ when false: 3 + * defaults to true if notes are not beamed, false otherwise + * + * ratioed: boolean + * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐ + * defaults to true if the difference between num_notes and + * notes_occupied is greater than 1. + * + * y_offset: int, default 0 + * manually offset a tuplet, for instance to avoid collisions + * with articulations, etc... + * } + */ + + + + + + + +var TupletLocation; +(function (TupletLocation) { + TupletLocation[TupletLocation["BOTTOM"] = -1] = "BOTTOM"; + TupletLocation[TupletLocation["TOP"] = 1] = "TOP"; +})(TupletLocation || (TupletLocation = {})); +class Tuplet extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Tuplet; + } + static get LOCATION_TOP() { + return TupletLocation.TOP; + } + static get LOCATION_BOTTOM() { + return TupletLocation.BOTTOM; + } + static get NESTING_OFFSET() { + return 15; + } + static get metrics() { + const tupletMetrics = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().tuplet; + if (!tupletMetrics) + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `tuplet missing`); + return tupletMetrics; + } + constructor(notes, options = {}) { + super(); + this.numerator_glyphs = []; + this.denom_glyphs = []; + if (!notes || !notes.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for tuplet.'); + } + this.options = options; + this.notes = notes; + this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length; + // We accept beats_occupied, but warn that it's deprecated: + // the preferred property name is now notes_occupied. + if (this.options.beats_occupied) { + this.beatsOccupiedDeprecationWarning(); + } + this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2; + if (this.options.bracketed != undefined) { + this.bracketed = this.options.bracketed; + } + else { + this.bracketed = notes.some((note) => !note.hasBeam()); + } + this.ratioed = + this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1; + this.point = (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE * 3) / 5; + this.y_pos = 16; + this.x_pos = 100; + this.width = 200; + this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP); + _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter.AlignRestsToNotes(notes, true, true); + this.resolveGlyphs(); + this.attach(); + } + attach() { + for (let i = 0; i < this.notes.length; i++) { + const note = this.notes[i]; + note.setTuplet(this); + } + } + detach() { + for (let i = 0; i < this.notes.length; i++) { + const note = this.notes[i]; + note.resetTuplet(this); + } + } + /** + * Set whether or not the bracket is drawn. + */ + setBracketed(bracketed) { + this.bracketed = !!bracketed; + return this; + } + /** + * Set whether or not the ratio is shown. + */ + setRatioed(ratioed) { + this.ratioed = !!ratioed; + return this; + } + /** + * Set the tuplet indicator to be displayed either on the top or bottom of the stave. + */ + setTupletLocation(location) { + if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) { + // eslint-disable-next-line + console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`); + location = Tuplet.LOCATION_TOP; + } + this.location = location; + return this; + } + getNotes() { + return this.notes; + } + getNoteCount() { + return this.num_notes; + } + beatsOccupiedDeprecationWarning() { + // eslint-disable-next-line + console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.'); + } + getBeatsOccupied() { + this.beatsOccupiedDeprecationWarning(); + return this.getNotesOccupied(); + } + setBeatsOccupied(beats) { + this.beatsOccupiedDeprecationWarning(); + return this.setNotesOccupied(beats); + } + getNotesOccupied() { + return this.notes_occupied; + } + setNotesOccupied(notes) { + this.detach(); + this.notes_occupied = notes; + this.resolveGlyphs(); + this.attach(); + } + resolveGlyphs() { + this.numerator_glyphs = []; + let n = this.num_notes; + while (n >= 1) { + this.numerator_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point)); + n = parseInt((n / 10).toString(), 10); + } + this.denom_glyphs = []; + n = this.notes_occupied; + while (n >= 1) { + this.denom_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point)); + n = parseInt((n / 10).toString(), 10); + } + } + // determine how many tuplets are nested within this tuplet + // on the same side (above/below), to calculate a y + // offset for this tuplet: + getNestedTupletCount() { + const location = this.location; + const first_note = this.notes[0]; + let maxTupletCount = countTuplets(first_note, location); + let minTupletCount = countTuplets(first_note, location); + // Count the tuplets that are on the same side (above/below) + // as this tuplet: + function countTuplets(note, location) { + return note.getTupletStack().filter((tuplet) => tuplet.location === location).length; + } + this.notes.forEach((note) => { + const tupletCount = countTuplets(note, location); + maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount; + minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount; + }); + return maxTupletCount - minTupletCount; + } + // determine the y position of the tuplet: + getYPosition() { + // offset the tuplet for any nested tuplets between + // it and the notes: + const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location; + // offset the tuplet for any manual y_offset: + const y_offset = this.options.y_offset || 0; + // now iterate through the notes and find our highest + // or lowest locations, to form a base y_pos + const first_note = this.notes[0]; + let y_pos; + if (this.location === Tuplet.LOCATION_TOP) { + y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset; + // check modifiers above note to see if they will collide with tuplet beam + for (let i = 0; i < this.notes.length; ++i) { + const note = this.notes[i]; + let modLines = 0; + const mc = note.getModifierContext(); + if (mc) { + modLines = Math.max(modLines, mc.getState().top_text_line); + } + const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset; + if (note.hasStem() || note.isRest()) { + const top_y = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP + ? note.getStemExtents().topY - Tuplet.metrics.stemOffset + : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset; + y_pos = Math.min(top_y, y_pos); + if (modLines > 0) { + y_pos = Math.min(modY, y_pos); + } + } + } + } + else { + let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4 + // check modifiers below note to see if they will collide with tuplet beam + this.notes.forEach((nn) => { + const mc = nn.getModifierContext(); + if (mc) { + lineCheck = Math.max(lineCheck, mc.getState().text_line + 1); + } + }); + y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset; + for (let i = 0; i < this.notes.length; ++i) { + if (this.notes[i].hasStem() || this.notes[i].isRest()) { + const bottom_y = this.notes[i].getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP + ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset + : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset; + if (bottom_y > y_pos) { + y_pos = bottom_y; + } + } + } + } + return y_pos + nested_tuplet_y_offset + y_offset; + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + // determine x value of left bound of tuplet + const first_note = this.notes[0]; + const last_note = this.notes[this.notes.length - 1]; + if (!this.bracketed) { + this.x_pos = first_note.getStemX(); + this.width = last_note.getStemX() - this.x_pos; + } + else { + this.x_pos = first_note.getTieLeftX() - 5; + this.width = last_note.getTieRightX() - this.x_pos + 5; + } + // determine y value for tuplet + this.y_pos = this.getYPosition(); + const addGlyphWidth = (width, glyph) => width + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width); + // calculate total width of tuplet notation + let width = this.numerator_glyphs.reduce(addGlyphWidth, 0); + if (this.ratioed) { + width = this.denom_glyphs.reduce(addGlyphWidth, width); + width += this.point * 0.32; + } + const notation_center_x = this.x_pos + this.width / 2; + const notation_start_x = notation_center_x - width / 2; + // draw bracket if the tuplet is not beamed + if (this.bracketed) { + const line_width = this.width / 2 - width / 2 - 5; + // only draw the bracket if it has positive length + if (line_width > 0) { + ctx.fillRect(this.x_pos, this.y_pos, line_width, 1); + ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1); + ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10); + ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10); + } + } + // draw numerator glyphs + const shiftY = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().lookupMetric('digits.shiftY', 0); + let x_offset = 0; + this.numerator_glyphs.forEach((glyph) => { + glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY); + x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width); + }); + // display colon and denominator if the ratio is to be shown + if (this.ratioed) { + const colon_x = notation_start_x + x_offset + this.point * 0.16; + const colon_radius = this.point * 0.06; + ctx.beginPath(); + ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + ctx.beginPath(); + ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + x_offset += this.point * 0.32; + this.denom_glyphs.forEach((glyph) => { + glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY); + x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width); + }); + } + } +} + + +/***/ }), + +/***/ "./src/typeguard.ts": +/*!**************************!*\ + !*** ./src/typeguard.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Category": () => (/* binding */ Category), +/* harmony export */ "isAccidental": () => (/* binding */ isAccidental), +/* harmony export */ "isAnnotation": () => (/* binding */ isAnnotation), +/* harmony export */ "isBarline": () => (/* binding */ isBarline), +/* harmony export */ "isCategory": () => (/* binding */ isCategory), +/* harmony export */ "isDot": () => (/* binding */ isDot), +/* harmony export */ "isGraceNote": () => (/* binding */ isGraceNote), +/* harmony export */ "isGraceNoteGroup": () => (/* binding */ isGraceNoteGroup), +/* harmony export */ "isNote": () => (/* binding */ isNote), +/* harmony export */ "isRenderContext": () => (/* binding */ isRenderContext), +/* harmony export */ "isStaveNote": () => (/* binding */ isStaveNote), +/* harmony export */ "isStemmableNote": () => (/* binding */ isStemmableNote), +/* harmony export */ "isTabNote": () => (/* binding */ isTabNote) +/* harmony export */ }); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Ron B. Yeh +// MIT License +/* eslint-disable @typescript-eslint/no-explicit-any */ +/** + * Use instead of `instanceof` as a more flexible type guard. + * @param obj check if this object's CATEGORY matches the provided category. + * @param category a string representing a category of VexFlow objects. + * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`. + * If `false`, we do not check the superclass or other ancestors. + * @returns true if `obj` has a static `CATEGORY` property that matches `category`. + */ +function isCategory(obj, category, checkAncestors = true) { + // obj is undefined, a number, a primitive string, or null. + if (typeof obj !== 'object' || obj === null) { + return false; + } + // `obj.constructor` is a reference to the constructor function that created the `obj` instance. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor + let constructorFcn = obj.constructor; + // Check if the object's static .CATEGORY matches the provided category. + if (checkAncestors) { + // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY. + while (obj !== null) { + constructorFcn = obj.constructor; + if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) { + return true; + } + obj = Object.getPrototypeOf(obj); + } + return false; + } + else { + // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string. + return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category; + } +} +const isAccidental = (obj) => isCategory(obj, Category.Accidental); +const isAnnotation = (obj) => isCategory(obj, Category.Annotation); +const isBarline = (obj) => isCategory(obj, Category.Barline); +const isDot = (obj) => isCategory(obj, Category.Dot); +const isGraceNote = (obj) => isCategory(obj, Category.GraceNote); +const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup); +const isNote = (obj) => isCategory(obj, Category.Note); +const isRenderContext = (obj) => isCategory(obj, Category.RenderContext); +const isStaveNote = (obj) => isCategory(obj, Category.StaveNote); +const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote); +const isTabNote = (obj) => isCategory(obj, Category.TabNote); +// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites. +// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums +var Category; +(function (Category) { + Category["Accidental"] = "Accidental"; + Category["Annotation"] = "Annotation"; + Category["Articulation"] = "Articulation"; + Category["Barline"] = "Barline"; + Category["BarNote"] = "BarNote"; + Category["Beam"] = "Beam"; + Category["Bend"] = "Bend"; + Category["ChordSymbol"] = "ChordSymbol"; + Category["Clef"] = "Clef"; + Category["ClefNote"] = "ClefNote"; + Category["Crescendo"] = "Crescendo"; + Category["Curve"] = "Curve"; + Category["Dot"] = "Dot"; + Category["Element"] = "Element"; + Category["Fraction"] = "Fraction"; + Category["FretHandFinger"] = "FretHandFinger"; + Category["GhostNote"] = "GhostNote"; + Category["Glyph"] = "Glyph"; + Category["GlyphNote"] = "GlyphNote"; + Category["GraceNote"] = "GraceNote"; + Category["GraceNoteGroup"] = "GraceNoteGroup"; + Category["GraceTabNote"] = "GraceTabNote"; + Category["KeySignature"] = "KeySignature"; + Category["KeySigNote"] = "KeySigNote"; + Category["Modifier"] = "Modifier"; + Category["MultiMeasureRest"] = "MultiMeasureRest"; + Category["Note"] = "Note"; + Category["NoteHead"] = "NoteHead"; + Category["NoteSubGroup"] = "NoteSubGroup"; + Category["Ornament"] = "Ornament"; + Category["Parenthesis"] = "Parenthesis"; + Category["PedalMarking"] = "PedalMarking"; + Category["RenderContext"] = "RenderContext"; + Category["RepeatNote"] = "RepeatNote"; + Category["Repetition"] = "Repetition"; + Category["Stave"] = "Stave"; + Category["StaveConnector"] = "StaveConnector"; + Category["StaveHairpin"] = "StaveHairpin"; + Category["StaveLine"] = "StaveLine"; + Category["StaveModifier"] = "StaveModifier"; + Category["StaveNote"] = "StaveNote"; + Category["StaveSection"] = "StaveSection"; + Category["StaveTempo"] = "StaveTempo"; + Category["StaveText"] = "StaveText"; + Category["StaveTie"] = "StaveTie"; + Category["Stem"] = "Stem"; + Category["StemmableNote"] = "StemmableNote"; + Category["StringNumber"] = "StringNumber"; + Category["Stroke"] = "Stroke"; + Category["System"] = "System"; + Category["TabNote"] = "TabNote"; + Category["TabSlide"] = "TabSlide"; + Category["TabStave"] = "TabStave"; + Category["TabTie"] = "TabTie"; + Category["TextBracket"] = "TextBracket"; + Category["TextDynamics"] = "TextDynamics"; + Category["TextNote"] = "TextNote"; + Category["Tickable"] = "Tickable"; + Category["TimeSignature"] = "TimeSignature"; + Category["TimeSigNote"] = "TimeSigNote"; + Category["Tremolo"] = "Tremolo"; + Category["Tuplet"] = "Tuplet"; + Category["Vibrato"] = "Vibrato"; + Category["VibratoBracket"] = "VibratoBracket"; + Category["Voice"] = "Voice"; + Category["Volta"] = "Volta"; +})(Category || (Category = {})); + + +/***/ }), + +/***/ "./src/util.ts": +/*!*********************!*\ + !*** ./src/util.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RuntimeError": () => (/* binding */ RuntimeError), +/* harmony export */ "defined": () => (/* binding */ defined), +/* harmony export */ "globalObject": () => (/* binding */ globalObject), +/* harmony export */ "log": () => (/* binding */ log), +/* harmony export */ "midLine": () => (/* binding */ midLine), +/* harmony export */ "normalizeAngle": () => (/* binding */ normalizeAngle), +/* harmony export */ "prefix": () => (/* binding */ prefix), +/* harmony export */ "sumArray": () => (/* binding */ sumArray), +/* harmony export */ "warn": () => (/* binding */ warn) +/* harmony export */ }); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// Note: Keep this module free of imports to reduce the chance of circular dependencies. +/** `RuntimeError` will be thrown by VexFlow classes in case of error. */ +class RuntimeError extends Error { + constructor(code, message = '') { + super('[RuntimeError] ' + code + ': ' + message); + this.code = code; + } +} +/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */ +// eslint-disable-next-line +function globalObject() { + if (typeof globalThis !== 'undefined') { + return globalThis; + } + if (typeof self !== 'undefined') { + return self; + } + if (typeof window !== 'undefined') { + return window; + } + if (typeof __webpack_require__.g !== 'undefined') { + return __webpack_require__.g; + } + return Function('return this')(); +} +/** + * Check that `x` is of type `T` and not `undefined`. + * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message. + */ +function defined(x, code = 'undefined', message = '') { + if (x === undefined) { + throw new RuntimeError(code, message); + } + return x; +} +/** Default log function sends all arguments to console. */ +// eslint-disable-next-line +function log(block, ...args) { + if (!args) + return; + const line = Array.prototype.slice.call(args).join(' '); + globalObject().console.log(block + ': ' + line); +} +/** Dump warning to console. */ +// eslint-disable-next-line +function warn(...args) { + const line = args.join(' '); + const err = new Error(); + globalObject().console.log('Warning: ', line, err.stack); +} +/** Round number to nearest fractional value (`.5`, `.25`, etc.) */ +function roundN(x, n) { + return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n; +} +/** Locate the mid point between stave lines. Returns a fractional line if a space. */ +function midLine(a, b) { + let mid_line = b + (a - b) / 2; + if (mid_line % 2 > 0) { + mid_line = roundN(mid_line * 10, 5) / 10; + } + return mid_line; +} +/** + * Used by various classes (e.g., SVGContext) to provide a + * unique prefix to element names (or other keys in shared namespaces). + */ +function prefix(text) { + return `vf-${text}`; +} +/** + * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi). + */ +function normalizeAngle(a) { + a = a % (2 * Math.PI); + if (a < 0) { + a += 2 * Math.PI; + } + return a; +} +/** + * Return the sum of an array of numbers. + */ +function sumArray(arr) { + return arr.reduce((a, b) => a + b, 0); +} + + +/***/ }), + +/***/ "./src/vex.ts": +/*!********************!*\ + !*** ./src/vex.ts ***! + \********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Vex": () => (/* binding */ Vex) +/* harmony export */ }); +/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./flow */ "./src/flow.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// Utility methods used by the rest of the VexFlow codebase. + + +class Vex { + // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead. + // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) { + // arr.forEach(callbackFn); + // } + /** + * Take `arr` and return a new list consisting of the sorted, unique, + * contents of arr. Does not modify `arr`. + */ + // eslint-disable-next-line + static sortAndUnique(arr, cmp, eq) { + if (arr.length > 1) { + const newArr = []; + let last; + arr.sort(cmp); + for (let i = 0; i < arr.length; ++i) { + if (i === 0 || !eq(arr[i], last)) { + newArr.push(arr[i]); + } + last = arr[i]; + } + return newArr; + } + else { + return arr; + } + } + /** Check if array `arr` contains `obj`. */ + // eslint-disable-next-line + static contains(arr, obj) { + let i = arr.length; + while (i--) { + if (arr[i] === obj) { + return true; + } + } + return false; + } + // Get the 2D Canvas context from DOM element `canvas_sel`. + static getCanvasContext(canvasSelector) { + if (!canvasSelector) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector); + } + const canvas = document.getElementById(canvasSelector); + if (!(canvas && canvas.getContext)) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas'); + } + return canvas.getContext('2d'); + } + /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */ + // eslint-disable-next-line + static benchmark(s, f) { + const start_time = new Date().getTime(); + f(); + const elapsed = new Date().getTime() - start_time; + (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)(s, elapsed + 'ms'); + } + // Get stack trace. + static stackTrace() { + const err = new Error(); + return err.stack; + } +} +Vex.Flow = _flow__WEBPACK_IMPORTED_MODULE_0__.Flow; + + + +/***/ }), + +/***/ "./src/vibrato.ts": +/*!************************!*\ + !*** ./src/vibrato.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Vibrato": () => (/* binding */ Vibrato) +/* harmony export */ }); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + +/** `Vibrato` implements diverse vibratos. */ +class Vibrato extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Vibrato; + } + /** Arrange vibratos inside a `ModifierContext`. */ + static format(vibratos, state, context) { + if (!vibratos || vibratos.length === 0) + return false; + // Vibratos are always on top. + let text_line = state.top_text_line; + let width = 0; + let shift = state.right_shift - 7; + // If there's a bend, drop the text line + const bends = context.getMembers(_bend__WEBPACK_IMPORTED_MODULE_0__.Bend.CATEGORY); + if (bends && bends.length > 0) { + const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE; + text_line = text_line - (bendHeight + 1); + } + else { + state.top_text_line += 1; + } + // Format Vibratos + for (let i = 0; i < vibratos.length; ++i) { + const vibrato = vibratos[i]; + vibrato.setXShift(shift); + vibrato.setTextLine(text_line); + width += vibrato.getWidth(); + shift += width; + } + state.right_shift += width; + return true; + } + constructor() { + super(); + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT; + this.render_options = { + harsh: false, + vibrato_width: 20, + wave_height: 6, + wave_width: 4, + wave_girth: 2, + }; + this.setVibratoWidth(this.render_options.vibrato_width); + } + /** Set harsh vibrato. */ + setHarsh(harsh) { + this.render_options.harsh = harsh; + return this; + } + /** Set vibrato width in pixels. */ + setVibratoWidth(width) { + this.render_options.vibrato_width = width; + this.setWidth(width); + return this; + } + /** Draw the vibrato on the rendering context. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index); + const vx = start.x + this.x_shift; + const vy = note.getYForTopText(this.text_line) + 2; + Vibrato.renderVibrato(ctx, vx, vy, this.render_options); + } + /** + * Static rendering method that can be called from + * other classes (e.g. VibratoBracket). + */ + static renderVibrato(ctx, x, y, opts) { + const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts; + const num_waves = vibrato_width / wave_width; + ctx.beginPath(); + let i; + if (harsh) { + ctx.moveTo(x, y + wave_girth + 1); + for (i = 0; i < num_waves / 2; ++i) { + ctx.lineTo(x + wave_width, y - wave_height / 2); + x += wave_width; + ctx.lineTo(x + wave_width, y + wave_height / 2); + x += wave_width; + } + for (i = 0; i < num_waves / 2; ++i) { + ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1); + x -= wave_width; + ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1); + x -= wave_width; + } + ctx.fill(); + } + else { + ctx.moveTo(x, y + wave_girth); + for (i = 0; i < num_waves / 2; ++i) { + ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y); + x += wave_width; + ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y); + x += wave_width; + } + for (i = 0; i < num_waves / 2; ++i) { + ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth); + x -= wave_width; + ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth); + x -= wave_width; + } + ctx.fill(); + } + } +} + + +/***/ }), + +/***/ "./src/vibratobracket.ts": +/*!*******************************!*\ + !*** ./src/vibratobracket.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "VibratoBracket": () => (/* binding */ VibratoBracket) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Balazs Forian-Szabo +// MIT License + + + + +// eslint-disable-next-line +function L(...args) { + if (VibratoBracket.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_2__.log)('Vex.Flow.VibratoBracket', args); +} +/** `VibratoBracket` renders vibrato effect between two notes. */ +class VibratoBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.VibratoBracket; + } + /** + * Either the stop or start note must be set, or both of them. + * An undefined value for the start or stop note indicates that the vibrato + * is drawn from the beginning or until the end of the stave accordingly. + */ + constructor(bracket_data) { + super(); + if (bracket_data.start) + this.start = bracket_data.start; + if (bracket_data.stop) + this.stop = bracket_data.stop; + this.line = 1; + this.render_options = { + harsh: false, + wave_height: 6, + wave_width: 4, + wave_girth: 2, + vibrato_width: 0, + }; + } + /** Set line position of the vibrato bracket. */ + setLine(line) { + this.line = line; + return this; + } + /** Set harsh vibrato bracket. */ + setHarsh(harsh) { + this.render_options.harsh = harsh; + return this; + } + /** Draw the vibrato bracket on the rendering context. */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const y = (this.start && this.start.checkStave().getYForTopText(this.line)) || + (this.stop && this.stop.checkStave().getYForTopText(this.line)) || + 0; + // If start note is not set then vibrato will be drawn + // from the beginning of the stave + const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0; + // If stop note is not set then vibrato will be drawn + // until the end of the stave + const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) || + (this.start && this.start.checkStave().getTieEndX() - 10) || + 0; + this.render_options.vibrato_width = stop_x - start_x; + L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y); + _vibrato__WEBPACK_IMPORTED_MODULE_3__.Vibrato.renderVibrato(ctx, start_x, y, this.render_options); + } +} +/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */ +VibratoBracket.DEBUG = false; + + + +/***/ }), + +/***/ "./src/voice.ts": +/*!**********************!*\ + !*** ./src/voice.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Voice": () => (/* binding */ Voice), +/* harmony export */ "VoiceMode": () => (/* binding */ VoiceMode) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +var VoiceMode; +(function (VoiceMode) { + VoiceMode[VoiceMode["STRICT"] = 1] = "STRICT"; + VoiceMode[VoiceMode["SOFT"] = 2] = "SOFT"; + VoiceMode[VoiceMode["FULL"] = 3] = "FULL"; +})(VoiceMode || (VoiceMode = {})); +/** + * `Voice` is mainly a container object to group `Tickables` for formatting. + */ +class Voice extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Voice; + } + /** + * Modes allow the addition of ticks in three different ways: + * - STRICT: This is the default. Ticks must fill the voice. + * - SOFT: Ticks can be added without restrictions. + * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length. + */ + static get Mode() { + return VoiceMode; + } + constructor(time) { + super(); + this.resolutionMultiplier = 1; + this.mode = VoiceMode.STRICT; + this.preFormatted = false; + this.ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); + this.largestTickWidth = 0; + this.tickables = []; + this.options = { + softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.SOFTMAX_FACTOR, + }; + // Convert the `time` string into a VoiceTime object if necessary. + let voiceTime; + if (typeof time === 'string') { + // Time signature shortcut: "4/4", "3/8", etc. + const match = time.match(/(\d+)\/(\d+)/); + if (match) { + voiceTime = { + num_beats: parseInt(match[1]), + beat_value: parseInt(match[2]), + }; + } + } + else { + voiceTime = time; + } + // Default time signature is 4/4. + this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION }, voiceTime); + // Recalculate total ticks. + this.totalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1); + // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration. + this.smallestTickCount = this.totalTicks.clone(); + } + /** Get the total ticks in the voice. */ + getTotalTicks() { + return this.totalTicks; + } + /** Get the total ticks used in the voice by all the tickables. */ + getTicksUsed() { + return this.ticksUsed; + } + /** Get the largest width of all the tickables. */ + getLargestTickWidth() { + return this.largestTickWidth; + } + /** Get the tick count for the shortest tickable */ + getSmallestTickCount() { + return this.smallestTickCount; + } + /** Get the tickables in the voice. */ + getTickables() { + return this.tickables; + } + /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */ + getMode() { + return this.mode; + } + /** + * Set the voice mode. + * @param mode value from `VoiceMode` or Voice.Mode + */ + setMode(mode) { + this.mode = mode; + return this; + } + /** Get the resolution multiplier for the voice. */ + getResolutionMultiplier() { + return this.resolutionMultiplier; + } + /** Get the actual tick resolution for the voice. */ + getActualResolution() { + return this.resolutionMultiplier * this.time.resolution; + } + /** Set the voice's stave. */ + setStave(stave) { + this.stave = stave; + // Reset the bounding box so we can reformat. + this.boundingBox = undefined; + return this; + } + getStave() { + return this.stave; + } + /** Get the bounding box for the voice. */ + getBoundingBox() { + if (!this.boundingBox) { + const stave = this.checkStave(); + let boundingBox = undefined; + for (let i = 0; i < this.tickables.length; ++i) { + const tickable = this.tickables[i]; + if (!tickable.getStave()) + tickable.setStave(stave); + const bb = tickable.getBoundingBox(); + if (bb) { + boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb; + } + } + this.boundingBox = boundingBox; + } + return this.boundingBox; + } + /** Set the voice mode to strict or soft. */ + setStrict(strict) { + this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT; + return this; + } + /** Determine if the voice is complete according to the voice mode. */ + isComplete() { + if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) { + return this.ticksUsed.equals(this.totalTicks); + } + else { + return true; + } + } + /** + * We use softmax to layout the tickables proportional to the exponent of + * their duration. The softmax factor is used to determine the 'linearness' of + * the layout. + * + * The softmax of all the tickables in this voice should sum to 1. + */ + setSoftmaxFactor(factor) { + this.options.softmaxFactor = factor; + this.expTicksUsed = 0; // reset + return this; + } + /** + * Calculate the sum of the exponents of all the ticks in this voice to use + * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables) + * + * Note that the "exp" of "expTicksUsed" stands for "expontential" ticks used, + * not "expected" ticks used. + */ + reCalculateExpTicksUsed() { + const totalTicks = this.ticksUsed.value(); + const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks); + this.expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_4__.sumArray)(this.tickables.map(exp)); + return this.expTicksUsed; + } + /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */ + softmax(tickValue) { + if (!this.expTicksUsed) { + this.expTicksUsed = this.reCalculateExpTicksUsed(); + } + const totalTicks = this.ticksUsed.value(); + const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks); + const sm = exp(tickValue) / this.expTicksUsed; + return sm; + } + /** Add a tickable to the voice. */ + addTickable(tickable) { + if (!tickable.shouldIgnoreTicks()) { + const ticks = tickable.getTicks(); + // Update the total ticks for this line. + this.ticksUsed.add(ticks); + this.expTicksUsed = 0; // reset + if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) && + this.ticksUsed.greaterThan(this.totalTicks)) { + this.ticksUsed.subtract(ticks); + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArgument', 'Too many ticks.'); + } + // Track the smallest tickable for formatting. + if (ticks.lessThan(this.smallestTickCount)) { + this.smallestTickCount = ticks.clone(); + } + this.resolutionMultiplier = this.ticksUsed.denominator; + // Expand total ticks using denominator from ticks used. + this.totalTicks.add(0, this.ticksUsed.denominator); + } + // Add the tickable to the line. + this.tickables.push(tickable); + tickable.setVoice(this); + return this; + } + /** Add an array of tickables to the voice. */ + addTickables(tickables) { + for (let i = 0; i < tickables.length; ++i) { + this.addTickable(tickables[i]); + } + return this; + } + /** Preformat the voice by applying the voice's stave to each note. */ + preFormat() { + if (this.preFormatted) + return this; + const stave = this.checkStave(); + this.tickables.forEach((tickable) => { + if (!tickable.getStave()) { + tickable.setStave(stave); + } + }); + this.preFormatted = true; + return this; + } + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + /** + * Render the voice onto the canvas `context` and an optional `stave`. + * If `stave` is omitted, it is expected that the notes have staves + * already set. + * + * This method also calculates the voice's boundingBox while drawing + * the notes. Note the similarities with this.getBoundingBox(). + */ + draw(context = this.checkContext(), stave) { + stave = stave !== null && stave !== void 0 ? stave : this.stave; + this.setRendered(); + let boundingBox = undefined; + for (let i = 0; i < this.tickables.length; ++i) { + const tickable = this.tickables[i]; + // Set the stave if provided. + if (stave) { + tickable.setStave(stave); + } + (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.'); + const bb = tickable.getBoundingBox(); + if (bb) { + boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb; + } + tickable.setContext(context); + tickable.drawWithStyle(); + } + this.boundingBox = boundingBox; + } +} + + +/***/ }), + +/***/ "./src/web.ts": +/*!********************!*\ + !*** ./src/web.ts ***! + \********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "isHTMLCanvas": () => (/* binding */ isHTMLCanvas), +/* harmony export */ "isHTMLDiv": () => (/* binding */ isHTMLDiv) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Ron B. Yeh +// MIT License +// +// Utilities for working with Web APIs. +// See: https://developer.mozilla.org/en-US/docs/Web/API + +// eslint-disable-next-line +function isHTMLCanvas(element) { + if (!element) + return false; + const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)(); + return ( + // It's either an instance of the HTMLCanvasElement class, + (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) || + // OR it's pretending to be a element. Good enough! + // Do not rely on .tagName, because node-canvas doesn't provide a tagName. + (typeof element.getContext === 'function' && typeof element.toDataURL === 'function')); +} +// eslint-disable-next-line +function isHTMLDiv(element) { + if (!element) + return false; + const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)(); + return ( + // It's either an instance of the HTMLDivElement class. + (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) || + // OR it's pretending to be a
. See: svgcontext.ts. + (typeof element.appendChild === 'function' && typeof element.style === 'object')); +} + + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +(() => { +/*!********************************!*\ + !*** ./entry/vexflow-debug.ts ***! + \********************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Accidental": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Accidental), +/* harmony export */ "Annotation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Annotation), +/* harmony export */ "AnnotationHorizontalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.AnnotationHorizontalJustify), +/* harmony export */ "AnnotationVerticalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.AnnotationVerticalJustify), +/* harmony export */ "Articulation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Articulation), +/* harmony export */ "BEAM_BOTH": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_BOTH), +/* harmony export */ "BEAM_LEFT": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_LEFT), +/* harmony export */ "BEAM_RIGHT": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_RIGHT), +/* harmony export */ "BarNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BarNote), +/* harmony export */ "Barline": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Barline), +/* harmony export */ "BarlineType": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BarlineType), +/* harmony export */ "Beam": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Beam), +/* harmony export */ "Bend": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Bend), +/* harmony export */ "BoundingBox": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BoundingBox), +/* harmony export */ "BoundingBoxComputation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BoundingBoxComputation), +/* harmony export */ "Builder": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Builder), +/* harmony export */ "CanvasContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.CanvasContext), +/* harmony export */ "Category": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Category), +/* harmony export */ "ChordSymbol": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbol), +/* harmony export */ "ChordSymbolHorizontalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbolHorizontalJustify), +/* harmony export */ "ChordSymbolVerticalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbolVerticalJustify), +/* harmony export */ "Clef": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Clef), +/* harmony export */ "ClefNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ClefNote), +/* harmony export */ "Crescendo": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Crescendo), +/* harmony export */ "Curve": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Curve), +/* harmony export */ "CurvePosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.CurvePosition), +/* harmony export */ "Dot": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Dot), +/* harmony export */ "EasyScore": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.EasyScore), +/* harmony export */ "EasyScoreGrammar": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.EasyScoreGrammar), +/* harmony export */ "Element": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Element), +/* harmony export */ "Factory": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Factory), +/* harmony export */ "Flow": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Flow), +/* harmony export */ "Font": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Font), +/* harmony export */ "FontStyle": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FontStyle), +/* harmony export */ "FontWeight": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FontWeight), +/* harmony export */ "Formatter": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Formatter), +/* harmony export */ "Fraction": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Fraction), +/* harmony export */ "FretHandFinger": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger), +/* harmony export */ "GhostNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GhostNote), +/* harmony export */ "Glyph": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Glyph), +/* harmony export */ "GlyphNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GlyphNote), +/* harmony export */ "GraceNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceNote), +/* harmony export */ "GraceNoteGroup": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup), +/* harmony export */ "GraceTabNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceTabNote), +/* harmony export */ "KeyManager": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeyManager), +/* harmony export */ "KeySigNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeySigNote), +/* harmony export */ "KeySignature": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeySignature), +/* harmony export */ "Modifier": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Modifier), +/* harmony export */ "ModifierContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ModifierContext), +/* harmony export */ "ModifierPosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ModifierPosition), +/* harmony export */ "MultiMeasureRest": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.MultiMeasureRest), +/* harmony export */ "Music": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Music), +/* harmony export */ "Note": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Note), +/* harmony export */ "NoteHead": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.NoteHead), +/* harmony export */ "NoteSubGroup": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.NoteSubGroup), +/* harmony export */ "Ornament": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Ornament), +/* harmony export */ "OutlineCode": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.OutlineCode), +/* harmony export */ "Parenthesis": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Parenthesis), +/* harmony export */ "Parser": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Parser), +/* harmony export */ "PedalMarking": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.PedalMarking), +/* harmony export */ "Piece": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Piece), +/* harmony export */ "Registry": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Registry), +/* harmony export */ "RenderContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RenderContext), +/* harmony export */ "Renderer": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Renderer), +/* harmony export */ "RendererBackends": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RendererBackends), +/* harmony export */ "RendererLineEndType": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RendererLineEndType), +/* harmony export */ "RepeatNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RepeatNote), +/* harmony export */ "Repetition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Repetition), +/* harmony export */ "RuntimeError": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RuntimeError), +/* harmony export */ "SVGContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SVGContext), +/* harmony export */ "Stave": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stave), +/* harmony export */ "StaveConnector": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveConnector), +/* harmony export */ "StaveHairpin": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveHairpin), +/* harmony export */ "StaveLine": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveLine), +/* harmony export */ "StaveModifier": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveModifier), +/* harmony export */ "StaveModifierPosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition), +/* harmony export */ "StaveNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveNote), +/* harmony export */ "StaveSection": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveSection), +/* harmony export */ "StaveTempo": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveTempo), +/* harmony export */ "StaveText": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveText), +/* harmony export */ "StaveTie": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveTie), +/* harmony export */ "Stem": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stem), +/* harmony export */ "StemmableNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StemmableNote), +/* harmony export */ "StringNumber": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StringNumber), +/* harmony export */ "Stroke": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stroke), +/* harmony export */ "SymbolModifiers": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SymbolModifiers), +/* harmony export */ "SymbolTypes": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SymbolTypes), +/* harmony export */ "System": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.System), +/* harmony export */ "TabNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabNote), +/* harmony export */ "TabSlide": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabSlide), +/* harmony export */ "TabStave": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabStave), +/* harmony export */ "TabTie": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabTie), +/* harmony export */ "TextBracket": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextBracket), +/* harmony export */ "TextBracketPosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextBracketPosition), +/* harmony export */ "TextDynamics": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextDynamics), +/* harmony export */ "TextFormatter": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextFormatter), +/* harmony export */ "TextJustification": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextJustification), +/* harmony export */ "TextNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextNote), +/* harmony export */ "TickContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TickContext), +/* harmony export */ "Tickable": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tickable), +/* harmony export */ "TimeSigNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSigNote), +/* harmony export */ "TimeSignature": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSignature), +/* harmony export */ "TimeSignatureGlyph": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSignatureGlyph), +/* harmony export */ "Tremolo": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tremolo), +/* harmony export */ "Tuning": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tuning), +/* harmony export */ "Tuplet": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tuplet), +/* harmony export */ "TupletLocation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TupletLocation), +/* harmony export */ "Vex": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Vex), +/* harmony export */ "Vibrato": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Vibrato), +/* harmony export */ "VibratoBracket": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VibratoBracket), +/* harmony export */ "Voice": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Voice), +/* harmony export */ "VoiceMode": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VoiceMode), +/* harmony export */ "Volta": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Volta), +/* harmony export */ "VoltaType": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VoltaType), +/* harmony export */ "default": () => (/* reexport module object */ _src_index__WEBPACK_IMPORTED_MODULE_3__), +/* harmony export */ "defined": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.defined), +/* harmony export */ "drawDot": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.drawDot), +/* harmony export */ "globalObject": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.globalObject), +/* harmony export */ "isAccidental": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isAccidental), +/* harmony export */ "isAnnotation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isAnnotation), +/* harmony export */ "isBarline": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isBarline), +/* harmony export */ "isCategory": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isCategory), +/* harmony export */ "isDot": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isDot), +/* harmony export */ "isGraceNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isGraceNote), +/* harmony export */ "isGraceNoteGroup": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isGraceNoteGroup), +/* harmony export */ "isHTMLCanvas": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isHTMLCanvas), +/* harmony export */ "isHTMLDiv": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isHTMLDiv), +/* harmony export */ "isNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isNote), +/* harmony export */ "isRenderContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isRenderContext), +/* harmony export */ "isStaveNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isStaveNote), +/* harmony export */ "isStemmableNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isStemmableNote), +/* harmony export */ "isTabNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isTabNote), +/* harmony export */ "log": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.log), +/* harmony export */ "midLine": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.midLine), +/* harmony export */ "normalizeAngle": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle), +/* harmony export */ "prefix": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.prefix), +/* harmony export */ "sumArray": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.sumArray), +/* harmony export */ "warn": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.warn) +/* harmony export */ }); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_fonts_load_all__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/fonts/load_all */ "./src/fonts/load_all.ts"); +/* harmony import */ var _src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/fonts/textfonts */ "./src/fonts/textfonts.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// vexflow-debug.ts is the entry point for the build output file vexflow-debug.js. +// It statically bundles all the music engraving fonts. +// Currently, it is identical to vexflow.ts, but the webpack config inside Gruntfile.js +// sets the webpack mode to 'development' to produce an unminified build. +// In the future, we could do something different with this entry file, such as turn on flags for logging. + + + +(0,_src_fonts_load_all__WEBPACK_IMPORTED_MODULE_1__.loadAllMusicFonts)(); +_src_flow__WEBPACK_IMPORTED_MODULE_0__.Flow.setMusicFont('Bravura', 'Gonville', 'Custom'); +(0,_src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_2__.loadTextFonts)(); +// Re-export all exports from index.ts. + +// Also collect all exports into a default export for CJS projects. + + +})(); + +__webpack_exports__ = __webpack_exports__["default"]; +/******/ return __webpack_exports__; +/******/ })() +; +}); +//# sourceMappingURL=vexflow-debug.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-debug.js.map b/build/cjs/vexflow-debug.js.map new file mode 100644 index 0000000000..40a7cc940a --- /dev/null +++ b/build/cjs/vexflow-debug.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vexflow-debug.js","mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;;;;;;;;;ACVO;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACFP;AACA;AACA;AACA;AACsC;AACN;AACM;AACN;AACE;AAC+D;AAC3D;AACtC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,+CAAQ;AACjC;AACA;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA,oFAAoF;AACpF;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iDAAiD;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAA6C;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,gEAAgE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D,6BAA6B,kEAA6B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,+CAAQ;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,0BAA0B,yCAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,wDAAY;AACxC;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,wBAAwB,4DAAgB;AACxC;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA,wBAAwB,+DAA0B;AAClD;AACA;AACA;AACA;AACA,0BAA0B,2DAAsB;AAChD,QAAQ,8CAAO,+DAA+D,KAAK;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B;AACA;AACA,iCAAiC,yCAAK,CAAC,2DAAsB,GAAG;AAChE,kCAAkC,yCAAK,CAAC,2DAAsB,GAAG;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8CAAO;AACrC,+BAA+B,8CAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8CAAO,2CAA2C,KAAK;AAC/D;AACA;AACA,YAAY,uDAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8EAA8E,qCAAqC,IAAI;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8CAAO;AACrC,+BAA+B,8CAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsB;;;;;;;;;;;;;;;;;;;;;;;;AC/etB;AACA;AACoC;AACoB;AAC1B;AACI;AACc;AACmB;AACtC;AAC7B;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,kEAAkE;AAC5D;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,8DAA8D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,+CAAQ;AACjC;AACA;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA,kCAAkC,gEAAoB;AACtD;AACA,8FAA8F,+DAA0B;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,0CAAO;AACpF;AACA;AACA,gBAAgB,qDAAS;AACzB;AACA;AACA;AACA,kEAAkE,+DAA0B;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,2DAAe;AACpC;AACA;AACA,8DAA8D,+DAA0B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qDAAS;AAC7B;AACA;AACA,sCAAsC,0CAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qDAAS;AAC7B;AACA;AACA,sCAAsC,4CAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAgB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,0CAAO;AAChF,8BAA8B,gEAAoB;AAClD,8CAA8C,6DAAsB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,+DAA0B;AAClE,8CAA8C,4CAAS;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,+DAA0B;AACxE,8CAA8C,0CAAO;AACrD;AACA;AACA,mEAAmE,+DAA0B;AAC7F;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,EAAE,uDAAiB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsB;;;;;;;;;;;;;;;;;;;;;AC5RtB;AACA;AACA;AACgC;AACM;AACR;AACI;AAC2D;AACzC;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA,QAAQ,eAAe,EAAE,wDAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uDAAW,UAAU,uDAAW;AACrE;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,qDAAS;AACtB;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,qDAAS;AACtB;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,0CAAO;AAClF,2DAA2D,4CAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,+CAAQ;AACnC;AACA;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uHAAuH,8CAAO;AAC9H;AACA;AACA;AACA;AACA,6EAA6E,0CAAO;AACpF;AACA;AACA,gBAAgB,2DAAe;AAC/B;AACA;AACA,8DAA8D,+DAA0B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0CAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,4CAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,iCAAiC,8DAAuB;AACxD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAA0B;AAClD;AACA;AACA;AACA;AACA,4BAA4B,6DAAwB;AACpD;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B,QAAQ,8CAAO,yDAAyD,UAAU;AAClF,sBAAsB,8CAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA,gBAAgB,IAAI;AACpB;AACA;AACA,wBAAwB,4DAAuB,gCAAgC,gBAAgB;AAC/F;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,EAAE,OAAO,EAAE;AACtD;AACA;AACA;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;;;;ACnVxB;AACA;AAC8B;AACwB;AACf;AACV;AAC7B;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uCAAI;AAC1B;AACA,eAAe,wDAAgB;AAC/B;AACA,uBAAuB,6DAAkB;AACzC,gBAAgB,eAAe;AAC/B;AACA,sBAAsB;AACtB;AACA,qBAAqB,sDAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kDAAO;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,6DAAkB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACmB;;;;;;;;;;;;;;;;;;;;;;;;;AChFnB;AACA;AACoC;AACE;AACR;AACI;AACQ;AACqB;AACzB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA,eAAe,4CAAS;AACxB;AACA,WAAW,0CAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACO,mBAAmB,6CAAO;AACjC;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA;AACA,6CAA6C,+CAAQ;AACrD;AACA,oBAAoB,+CAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,wBAAwB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA,iCAAiC,+CAAQ;AACzC;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA,0CAA0C,sDAAiB;AAC3D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0FAA0F,+CAAQ;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,+CAAQ;AACrD;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,mCAAmC,4DAAuB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,iDAAiD,+CAAQ;AACzD;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,2DAAsB;AAC9E;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,0CAAO;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,2DAAsB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,iEAAiE,4CAAS,GAAG,0DAAqB,GAAG,uDAAkB;AACvH;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,0BAA0B,2DAAsB;AAChD,sBAAsB,+CAAY;AAClC;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,yBAAyB,uDAAW;AACpC;AACA;AACA,8BAA8B,qDAAS;AACvC;AACA;AACA,gDAAgD,0CAAO,GAAG,4CAAS;AACnE;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wDAAwD,oDAAoD,IAAI;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yCAAyC,oDAAoD,IAAI;AACjH;AACA;AACA;AACA,0BAA0B;AAC1B,kCAAkC;AAClC;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4CAAS;AAC5C;AACA;AACA;AACA;AACA,wCAAwC,0CAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,4CAAS;AACxC;AACA;AACA,oCAAoC,0CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,4CAAS;AAC7C;AACA;AACA,oCAAoC,0CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAqD,8CAA8C,IAAI;AACvH;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA,kEAAkE,0CAAO;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4DAAuB,eAAe;AACzE,gDAAgD,2DAAsB;AACtE,gDAAgD,2DAAsB;AACtE,sCAAsC,2DAAsB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,2DAAsB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,6CAAU;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+CAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACvzBA;AACA;AACoC;AACE;AACU;AACE;AACZ;AACtC;AACA,mBAAmB,+CAAQ;AAC3B;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA,gBAAgB,qDAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gCAAgC;AAC7D;AACA,mCAAmC,2BAA2B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,+DAAwB;AAC7E;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,EAAE,uDAAiB;AACpC;;;;;;;;;;;;;;;ACxPhB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC/HA;AACA;AAC8B;AACkB;AACJ;AACP;AACrC;AACA;AACA;AACA;AACO,4BAA4B,yDAAa;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2CAAI;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wGAAwG,mDAAY;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gDAAa;AACtC,8BAA8B,mDAAgB;AAC9C,0BAA0B,+DAA4B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACrPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACqD;AACrB;AACM;AACJ;AACc;AACQ;AACb;AAC3C;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,oEAAoE;AAC9D;AACP;AACA;AACA;AACA,CAAC,gEAAgE;AAC1D;AACP;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AAC5B;AACP;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA,0BAA0B,+CAAQ;AAClC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,4DAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4DAAuB;AACnD;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+DAA4B;AACzD,4BAA4B,iDAAc;AAC1C;AACA;AACA;AACA;AACA;AACA,4BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,2DAAe;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4DAAuB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oDAAiB;AACrC,mBAAmB,mDAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,mBAAmB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;AACA;AACA,sCAAsC,qCAAqC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8BAA8B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,yCAAK,gCAAgC,yBAAyB;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,iEAAiE,iBAAiB,kBAAkB;AACpG;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAmC;AACxE;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gEAAoB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mEAA8B;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,8BAA8B;AAC9D,gDAAgD,iDAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACuB;;;;;;;;;;;;;;;;;;;;ACnsBvB;AACA;AACA;AACgC;AACuC;AACrC;AACK;AACD;AACtC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yDAAa;AAChC;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD;AACA,sBAAsB,kDAAc,mDAAmD,UAAU;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA,wDAAwD,UAAU,eAAe,WAAW,GAAG,UAAU;AACzG,2DAA2D,UAAU,eAAe,WAAW,GAAG,UAAU;AAC5G,gCAAgC;AAChC,kCAAkC,yCAAK;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8CAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,+DAA0B,IAAI,+DAA0B;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAiB;AACzB,8BAA8B,UAAU;AACxC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgB;;;;;;;;;;;;;;;;;;;ACnKhB;AACA;AACA;AAC8B;AACE;AACF;AACS;AACvC;AACO,uBAAuB,uCAAI;AAClC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;AACA,sBAAsB,kDAAc,iBAAiB,gDAAa,yBAAyB,UAAU;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA,sBAAsB,kDAAc,iBAAiB,gDAAa,yBAAyB,UAAU;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAiB,gDAAgD,gDAAa;AACtF,kCAAkC,UAAU;AAC5C,SAAS;AACT;AACA;AACA,mCAAmC,yCAAK;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACc;AACL;AACV;AAC7B;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uCAAI;AAC5B;AACA;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,oEAA0B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACqB;;;;;;;;;;;;;;;;;;;ACrGrB;AACA;AACA;AACA;AACoC;AACG;AACD;AAC/B;AACP;AACA;AACA;AACA,CAAC,sCAAsC;AAChC,oBAAoB,6CAAO;AAClC;AACA,eAAe,sDAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;;;;;;;;ACnIA;AACA;AACA;AACA;AACsC;AACsC;AACtC;AAC/B,kBAAkB,+CAAQ;AACjC;AACA,eAAe,oDAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B;AACA;AACA;AACA;AACA;AACA,qBAAqB,qDAAS;AAC9B,0BAA0B,aAAa;AACvC;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA,4BAA4B,sCAAsC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C,oBAAoB,2BAA2B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC1JA;AACA;AAC8C;AAClB;AACsB;AAClB;AACE;AACJ;AACsB;AACpD;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA,sDAAsD;AACtD;AACA;AACA,qBAAqB,8CAAO;AAC5B;AACA,qBAAqB,8CAAO;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA,iFAAiF,UAAU,WAAW,EAAE;AACxG;AACA,oCAAoC,qDAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,2CAA2C;AAC3C;AACA;AACA,kCAAkC,gBAAgB;AAClD,kCAAkC,6CAA6C;AAC/E;AACA,kDAAkD,0CAAO,GAAG,4CAAS;AACrE;AACA;AACA;AACA;AACA;AACA,wDAAwD,aAAa;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,wBAAwB,UAAU;AAClC,YAAY,oDAAkB,WAAW,WAAW;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,qDAAqD,+BAA+B,qEAA0B,EAAE,yEAA4B,wBAAwB,cAAc;AAClL,qBAAqB;AACrB;AACA;AACA;AACA,0BAA0B,2CAAM;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;AACA;AACA,4BAA4B;AAC5B,kCAAkC,oDAAoD;AACtF;AACA;AACA;AACA,6BAA6B;AAC7B,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACqB;;;;;;;;;;;;;;;;;;;ACjarB;AACA;AACA;AACqD;AACf;AACC;AACE;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA,sBAAsB,aAAa;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kEAA2B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,UAAU;AAC5C;AACA,kCAAkC,kBAAkB,EAAE,UAAU;AAChE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6CAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,kCAAkC;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,4BAA4B,qDAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gDAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA,eAAe,+DAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B,UAAU,4CAAS;AACnB,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrYnB;AACA;AACA;AAC0C;AACwD;AACpD;AACV;AACN;AACc;AACN;AACN;AACQ;AACJ;AACI;AACU;AACV;AACA;AACA;AACU;AACR;AACU;AACE;AACR;AACR;AACQ;AACR;AACI;AACV;AACkB;AACV;AACA;AACF;AACQ;AACZ;AACE;AACE;AACM;AACE;AACR;AACM;AACA;AACV;AACkB;AACF;AAClB;AACK;AACrC;AACA;AACA;AACA,QAAQ,2CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA,6BAA6B,YAAY,4BAA4B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,YAAY,6CAA6C,EAAE;AAC7G;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mDAAY;AAC5B,0BAA0B,gEAAwB;AAClD;AACA;AACA,0BAA0B,6DAAqB;AAC/C;AACA;AACA,uBAAuB,6DAAqB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J,0BAA0B,0CAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J,0BAA0B,gDAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oDAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,4BAA4B,6CAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,eAAe;AACf,6BAA6B,+CAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C,gCAAgC,sDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,oDAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAc;AACxC;AACA;AACA;AACA;AACA,0BAA0B,mDAAU;AACpC;AACA;AACA;AACA;AACA,kCAAkC,qBAAqB,2EAAkC,YAAY,yEAAgC,EAAE;AACvI,+BAA+B,mDAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uEAAuE;AACzG,gCAAgC,qDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mCAAmC;AAC3E,6BAA6B,gDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4CAA4C;AAC9E,yBAAyB,wDAAY;AACrC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+BAA+B;AACjE,8BAA8B,4DAAc;AAC5C;AACA;AACA;AACA;AACA;AACA,iCAAiC,wDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sDAAW;AAC9B;AACA;AACA,mBAAmB,8DAAe;AAClC;AACA;AACA,4BAA4B,+CAAO;AACnC,qCAAqC,gEAAgB;AACrD;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C,0BAA0B,0CAAK;AAC/B;AACA;AACA;AACA;AACA,8BAA8B,4DAAc;AAC5C;AACA;AACA;AACA;AACA;AACA,mBAAmB,kDAAS;AAC5B;AACA;AACA,kCAAkC,wBAAwB;AAC1D,2BAA2B,4CAAM;AACjC;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,0BAA0B,yCAAK;AAC/B;AACA;AACA;AACA;AACA;AACA,wBAAwB,gDAAQ;AAChC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4DAAc;AACjD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,2BAA2B,4CAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,YAAY,6CAA6C;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,mBAAmB,iDAAS;AAC5B;AACA;AACA,kCAAkC;AAClC;AACA,eAAe;AACf,0BAA0B,wDAAY;AACtC,sBAAsB,mEAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA,kCAAkC,WAAW;AAC7C,0BAA0B,wDAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,EAAE,uDAAiB;AACpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9fnB,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AAC0C;AACwD;AACpD;AACV;AACN;AACA;AACc;AACsB;AAClB;AACqF;AACvG;AACQ;AACE;AACO;AACnB;AACY;AACJ;AACA;AACiB;AACb;AACF;AACY;AACV;AACR;AACQ;AACA;AACU;AACJ;AACJ;AACI;AACJ;AACc;AACJ;AACE;AACtB;AACF;AACQ;AACQ;AACR;AACM;AACV;AACY;AACR;AACU;AAC6B;AACnC;AACV;AACsB;AACJ;AACJ;AACN;AAC+B;AAC/B;AACO;AACL;AACF;AACF;AACU;AAClB;AACgB;AACX;AACO;AACR;AACA;AACE;AACE;AACA;AACJ;AAC+B;AACnB;AACE;AACS;AACb;AACI;AACJ;AACR;AACF;AACA;AACY;AACV;AACc;AACP;AAC3C;AACA;AACA;AACA;AACA,qBAAqB,8CAAO;AAC5B;AACA,gBAAgB,yCAAE;AAClB;AACA,kBAAkB,2CAAI;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,6CAAS;AAC3D,QAAQ,6DAAuB;AAC/B,QAAQ,2DAAsB;AAC9B,QAAQ,4DAAuB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,sBAAsB,6DAAuB;AAC7C;AACA;AACA;AACA,eAAe,6DAAuB;AACtC;AACA;AACA,eAAe,oEAA8B;AAC7C;AACA;AACA,QAAQ,oEAA8B;AACtC;AACA;AACA,eAAe,2DAAqB;AACpC;AACA;AACA,QAAQ,2DAAqB;AAC7B;AACA;AACA,eAAe,gEAA0B;AACzC;AACA;AACA,QAAQ,gEAA0B;AAClC;AACA;AACA,eAAe,iEAA2B;AAC1C;AACA;AACA,QAAQ,iEAA2B;AACnC;AACA;AACA,eAAe,uDAAiB;AAChC;AACA;AACA,QAAQ,uDAAiB;AACzB;AACA;AACA,eAAe,iEAA2B;AAC1C;AACA;AACA,QAAQ,iEAA2B;AACnC;AACA;AACA,eAAe,gEAA0B;AACzC;AACA;AACA,QAAQ,gEAA0B;AAClC;AACA;AACA,eAAe,iEAA2B;AAC1C;AACA;AACA,QAAQ,iEAA2B;AACnC;AACA;AACA,eAAe,wDAAkB;AACjC;AACA;AACA,QAAQ,wDAAkB;AAC1B;AACA;AACA,eAAe,uDAAiB;AAChC;AACA;AACA,QAAQ,uDAAiB;AACzB;AACA;AACA,eAAe,oDAAc;AAC7B;AACA;AACA,eAAe,0DAAoB;AACnC;AACA;AACA,eAAe,oDAAc;AAC7B;AACA;AACA,eAAe,yDAAmB;AAClC;AACA;AACA,eAAe,4DAAsB;AACrC;AACA;AACA,eAAe,6DAAuB;AACtC;AACA;AACA,eAAe,2DAAqB;AACpC;AACA;AACA;AACA,eAAe,0DAAoB;AACnC;AACA;AACA,eAAe,4DAAsB;AACrC;AACA;AACA,kBAAkB,mDAAU;AAC5B,kBAAkB,mDAAU;AAC5B,oBAAoB,uDAAY;AAChC,eAAe,mDAAO;AACtB,eAAe,6CAAO;AACtB,YAAY,uCAAI;AAChB,YAAY,uCAAI;AAChB,mBAAmB,qDAAW;AAC9B,8BAA8B,2EAAsB;AACpD,qBAAqB,yDAAa;AAClC,mBAAmB,qDAAW;AAC9B,YAAY,wCAAI;AAChB,gBAAgB,gDAAQ;AACxB,iBAAiB,kDAAS;AAC1B,aAAa,0CAAK;AAClB,WAAW,sCAAG;AACd,iBAAiB,kDAAS;AAC1B,eAAe,8CAAO;AACtB,eAAe,8CAAO;AACtB,YAAY,wCAAI;AAChB,iBAAiB,kDAAS;AAC1B,gBAAgB,gDAAQ;AACxB,sBAAsB,4DAAc;AACpC,iBAAiB,kDAAS;AAC1B,aAAa,0CAAK;AAClB,iBAAiB,kDAAS;AAC1B,iBAAiB,kDAAS;AAC1B,sBAAsB,4DAAc;AACpC,oBAAoB,wDAAY;AAChC,kBAAkB,oDAAU;AAC5B,oBAAoB,wDAAY;AAChC,kBAAkB,oDAAU;AAC5B,gBAAgB,gDAAQ;AACxB,uBAAuB,8DAAe;AACtC,wBAAwB,gEAAgB;AACxC,aAAa,0CAAK;AAClB,YAAY,wCAAI;AAChB,gBAAgB,gDAAQ;AACxB,oBAAoB,wDAAY;AAChC,gBAAgB,gDAAQ;AACxB,mBAAmB,sDAAW;AAC9B,cAAc,4CAAM;AACpB,oBAAoB,wDAAY;AAChC,gBAAgB,gDAAQ;AACxB,qBAAqB,0DAAa;AAClC,gBAAgB,gDAAQ;AACxB,kBAAkB,oDAAU;AAC5B,kBAAkB,yDAAU;AAC5B,aAAa,0CAAK;AAClB,sBAAsB,4DAAc;AACpC,oBAAoB,wDAAY;AAChC,iBAAiB,kDAAS;AAC1B,qBAAqB,0DAAa;AAClC,iBAAiB,kDAAS;AAC1B,kBAAkB,oDAAU;AAC5B,iBAAiB,kDAAS;AAC1B,gBAAgB,gDAAQ;AACxB,YAAY,wCAAI;AAChB,oBAAoB,wDAAY;AAChC,cAAc,6CAAM;AACpB,kBAAkB,oDAAU;AAC5B,cAAc,4CAAM;AACpB,eAAe,8CAAO;AACtB,gBAAgB,gDAAQ;AACxB,gBAAgB,gDAAQ;AACxB,cAAc,4CAAM;AACpB,mBAAmB,sDAAW;AAC9B,oBAAoB,wDAAY;AAChC,qBAAqB,0DAAa;AAClC,gBAAgB,gDAAQ;AACxB,mBAAmB,sDAAW;AAC9B,qBAAqB,0DAAa;AAClC,mBAAmB,sDAAW;AAC9B,eAAe,8CAAO;AACtB,cAAc,4CAAM;AACpB,cAAc,4CAAM;AACpB,eAAe,8CAAO;AACtB,sBAAsB,4DAAc;AACpC,aAAa,0CAAK;AAClB,aAAa,+CAAK;AAClB;AACA;AACA,mCAAmC,oEAA2B;AAC9D,iCAAiC,kEAAyB;AAC1D,oCAAoC,sEAA4B;AAChE,kCAAkC,oEAA0B;AAC5D,mBAAmB,qDAAW;AAC9B,uBAAuB,yDAAe;AACtC,qBAAqB,kDAAa;AAClC,kBAAkB,8CAAU;AAC5B,iBAAiB,6CAAS;AAC1B,wBAAwB,wDAAgB;AACxC,wBAAwB,wDAAgB;AACxC,2BAA2B,2DAAmB;AAC9C,mBAAmB,uDAAW;AAC9B,6BAA6B,kEAAqB;AAClD,iBAAiB,mDAAS;AAC1B,2BAA2B,8DAAmB;AAC9C,yBAAyB,yDAAiB;AAC1C,iBAAiB,8CAAS;AACV;;;;;;;;;;;;;;;;;;ACtVhB,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACiC;AAC1B;AACP;AACA;AACA;AACA,CAAC,gCAAgC;AAC1B;AACP;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8CAA8C;AAC9D,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,sBAAsB,oBAAoB,EAAE,KAAK;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,QAAQ;AAC3D,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,0BAA0B,mBAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgB;;;;;;;;;;;;;;;AC/XT;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;ACt9GO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,wBAAwB;AACxB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,4BAA4B;AAC5B,0BAA0B;AAC1B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,+BAA+B;AAC/B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,4BAA4B;AAC5B,iCAAiC;AACjC;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,oBAAoB;AACpB;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;AC7YO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;ACzCO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC9lCO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACtqCA;AACA;AACA;AACA;AAC6C;AACF;AACI;AACJ;AACI;AAC/C;AACA,YAAY,UAAU;AACtB;AACO;AACP,IAAI,0DAAW;AACf,IAAI,4DAAY;AAChB,IAAI,4DAAY;AAChB,IAAI,wDAAU;AACd,IAAI,wDAAU;AACd;AACA;AACA;;;;;;;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC+B;AACgB;AACE;AAC1C;AACP,IAAI,4CAAS,YAAY,wDAAW,EAAE,0DAAa;AACnD;;;;;;;;;;;;;;;;;;ACfA;AACA;AAC+B;AACkB;AACJ;AACtC;AACP,IAAI,4CAAS,WAAW,sDAAU,EAAE,0DAAa;AACjD;;;;;;;;;;;;;;;;;;ACPA;AACA;AAC+B;AACkB;AACK;AAC/C;AACP,IAAI,4CAAS,aAAa,+DAAiB,EAAE,0DAAa;AAC1D;;;;;;;;;;;;;;;;;;ACPA;AACA;AAC+B;AACkB;AACJ;AACtC;AACP,IAAI,4CAAS,WAAW,sDAAU,EAAE,0DAAa;AACjD;;;;;;;;;;;;;;;;;;ACPA;AACA;AAC+B;AACkB;AACA;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACO;AACP,8CAA8C,0DAAa;AAC3D;AACA;AACA;AACA;AACA,IAAI,4CAAS,aAAa,0DAAY;AACtC;;;;;;;;;;;;;;;ACpFO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;ACtmDO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC91BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC91BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC71BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;ACr2BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACr2BA;AACA;AAC+B;AACkB;AACY;AACR;AACG;AACT;AACE;AAC1C;AACP;AACA;AACA,yBAAyB,iEAAY;AACrC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,wDAAQ;AACjC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,0DAAS;AAClC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,8DAAc;AACvC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,sEAAkB;AAC3C,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACxHA;AACA;AAC8B;AACA;AACQ;AACc;AACpB;AACkB;AAChB;AACU;AACM;AACqB;AACvC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+CAAQ;AACtC;AACA;AACA;AACA;AACA,iDAAiD,sBAAsB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,0BAA0B;AACtE;AACA,YAAY,kDAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sBAAsB,IAAI;AAClE;AACA,0CAA0C,6DAAe;AACzD,6BAA6B,qDAAW;AACxC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kCAAkC,cAAc,4DAAuB,kCAAkC;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAe;AACnC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8BAA8B,uCAAuC,SAAS,wCAAwC,OAAO,6BAA6B;AAC1J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD,+EAA+E,kBAAkB;AACjG;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA,0BAA0B,0CAAK,CAAC,mDAAc,UAAU,oDAAe;AACvE;AACA,0CAA0C,wDAAqB;AAC/D;AACA;AACA,wCAAwC,kCAAkC;AAC1E,6CAA6C,yCAAyC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAAK,CAAC,mDAAc,UAAU,oDAAe;AAC3E;AACA,6BAA6B,0CAAK,CAAC,mDAAc,UAAU,oDAAe;AAC1E;AACA,uCAAuC,wDAAqB;AAC5D;AACA;AACA,4CAA4C,+BAA+B;AAC3E;AACA,2DAA2D,+BAA+B;AAC1F;AACA;AACA;AACA;AACA;AACA,YAAY,2DAAc;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,gDAAgD,qCAAqC,0DAAqB,oBAAoB;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,4DAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,qBAAqB,+CAAQ;AAC7B;AACA;AACA,qBAAqB,+CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA,oCAAoC,sDAAiB;AACrD,0BAA0B,+CAAY;AACtC;AACA,yCAAyC,mDAAY;AACrD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+CAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA,2CAA2C,6DAAe;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,qDAAW;AACzE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,gBAAgB,8CAA8C;AAC9D;AACA,6BAA6B,+CAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,8CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yCAAyC;AAClF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAoB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,6BAA6B;AACrE;AACA,2EAA2E,wDAAoB;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACqB;;;;;;;;;;;;;;;;;ACp2BrB;AACA;AACA;AACA;AACA;AACuC;AACD;AACtC;AACA;AACA;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,oCAAoC,EAAE,IAAI,EAAE;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,eAAe,GAAG,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uBAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACpNA;AACA;AACA;AACA;AACqD;AACG;AACtB;AACc;AACT;AACD;AACtC,6BAA6B,+CAAQ;AACrC;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA,kCAAkC,gEAAoB;AACtD;AACA,iCAAiC,6DAAsB;AACvD,oDAAoD,+DAA0B;AAC9E;AACA,iCAAiC,6DAAsB;AACvD,gDAAgD,+DAA0B;AAC1E;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA,oBAAoB,uCAAuC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA,mDAAmD;AACnD;AACA;AACA,6BAA6B,8DAAuB;AACpD;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,aAAa,IAAI;AAC5C;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB,EAAE;AAChD;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,iBAAiB,6DAAsB;AACvC;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,0BAA0B,+CAAY,oCAAoC,eAAe;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AAC0B;;;;;;;;;;;;;;;;;;ACpK1B;AACA;AACA;AACgD;AACK;AACf;AACtC;AACO,wBAAwB,yDAAa;AAC5C;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA,gBAAgB,wDAAY;AAC5B;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC7DA;AACA;AAC4C;AACsB;AAC9B;AACF;AACK;AACQ;AACxC;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,KAAK,GAAG,SAAS;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mEAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAO;AAC3B;AACA;AACA;AACA,eAAe,sDAAc;AAC7B;AACA;AACA,uCAAuC,SAAS,EAAE,KAAK,EAAE,IAAI;AAC7D,wCAAwC,SAAS,EAAE,IAAI;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,SAAS,GAAG,KAAK,GAAG,IAAI;AACxE;AACA,sDAAsD,MAAM;AAC5D,gDAAgD,SAAS,GAAG,IAAI;AAChE;AACA;AACA;AACA;AACA,QAAQ,8CAAO;AACf;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA,yBAAyB;AACzB;AACA,kBAAkB,+CAAY,sBAAsB,MAAM;AAC1D;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA,sBAAsB,+CAAY,sBAAsB,MAAM;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2EAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qDAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qDAAW;AACnC;AACA;AACA,eAAe,8CAAO,oCAAoC,WAAW;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACiB;;;;;;;;;;;;;;;;;ACzYjB;AACA;AACA;AAC8B;AACS;AAChC,wBAAwB,uCAAI;AACnC;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA,uCAAuC,6BAA6B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC9DA;AACwC;AACV;AACI;AACK;AACD;AAC/B,wBAAwB,iDAAS;AACxC;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB,+DAA0B,6DAA6D;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAW,2BAA2B,8CAAW;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,+DAA0B;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,4CAAS;AACpD;AACA;AACA,gEAAgE,4CAAS;AACzE,qCAAqC,uDAAkB;AACvD;AACA;AACA;AACA,mDAAmD,0CAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC1IA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACU;AACF;AACE;AACF;AACJ;AACA;AACkB;AACvB;AACG;AAChC;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA,6BAA6B,+CAAQ;AACrC;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6BAA6B;AACrD;AACA;AACA,iCAAiC,uDAAW;AAC5C;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA,8BAA8B,yCAAyC;AACvE;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,0GAA0G,oEAA4B;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B;AACA;AACA,wBAAwB,sDAAiB;AACzC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iDAAS;AAC1C;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uCAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oEAA4B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uDAAW;AAC5C,4CAA4C,+CAAQ,GAAG,2CAAM;AAC7D;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AAC0B;;;;;;;;;;;;;;;;;;ACjJ1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACM;AACG;AAChC,2BAA2B,6CAAO;AACzC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA,2BAA2B,kDAAe,CAAC,GAAG;AAC9C;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3BA;AACA;AAC6B;AACA;AACE;AACL;AACH;AACA;AACO;AACW;AACT;AACF;AACP;AACI;AACC;AACJ;AACF;AACM;AACF;AACA;AACH;AACA;AACvB;AAC4B;AACD;AACM;AACL;AACJ;AACI;AACA;AACK;AACF;AACF;AACE;AACF;AACF;AACO;AACC;AACX;AACD;AACI;AACI;AACJ;AACG;AACL;AACM;AACJ;AACK;AACL;AACE;AACL;AACO;AACE;AACF;AACH;AACI;AACJ;AACM;AACH;AACF;AACD;AACD;AACE;AACN;AACS;AACD;AACL;AACG;AACJ;AACzB;AAC0B;AACC;AACA;AACF;AACK;AACC;AACC;AACL;AACA;AACG;AACC;AACC;AACF;AACJ;AACD;AACA;AACG;AACL;AACvB;AACsB;AACI;AACO;AACT;AACF;;;;;;;;;;;;;;;;;AC7FtB;AACA;AACA;AACA;AACA;AACgC;AACM;AAC/B;AACP;AACA,yBAAyB,yCAAK;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oDAAgB;AAClD;AACA,sBAAsB,+CAAY,0CAA0C,SAAS;AACrF;AACA,uFAAuF,oDAAgB;AACvG;AACA;AACA;AACA,6BAA6B,sDAAkB;AAC/C,wBAAwB,IAAI,sDAAkB,EAAE;AAChD,+CAA+C,sDAAkB;AACjE,6BAA6B,+CAAW;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACgC;AACuC;AACrC;AACK;AACN;AACjC,2BAA2B,yDAAa;AACxC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD,8BAA8B,+DAA0B;AACxD;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2DAAsB;AACnD,0BAA0B,yCAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAmB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA,6BAA6B,2BAA2B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,uBAAuB,wDAAmB,CAAC,8CAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,qEAAyB;AACrE;AACA;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACwB;;;;;;;;;;;;;;;;;;ACtSxB;AACA;AAC8C;AAChB;AACS;AAChC,yBAAyB,uCAAI;AACpC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA,gBAAgB,eAAe;AAC/B,gCAAgC,uDAAY;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AClCA;AACA;AACoC;AACG;AACQ;AACxC;AACP;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,uBAAuB,6CAAO;AACrC;AACA;AACA;AACA;AACA;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8CAAO,sCAAsC,UAAU;AAC/D,eAAe,8CAAO,oCAAoC,UAAU;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC0C;AACA;AACI;AAChB;AACc;AAChB;AACsB;AACA;AACJ;AACR;AACM;AACJ;AACM;AACX;AACI;AACI;AACP;AACpC;AACA;AACA;AACA;AACA,QAAQ,2CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yDAAgB,SAAS,2DAAkB;AACnD,QAAQ,6DAAkB,SAAS,6DAAoB;AACvD,QAAQ,4CAAU,SAAS,qDAAY;AACvC,QAAQ,kEAAqB,SAAS,gEAAuB;AAC7D,QAAQ,0DAAiB,SAAS,4DAAmB;AACrD,QAAQ,oDAAa,SAAS,wDAAe;AAC7C,QAAQ,kEAAqB,SAAS,gEAAuB;AAC7D,QAAQ,8DAAmB,SAAS,8DAAqB;AACzD,QAAQ,+DAAmB,SAAS,8DAAqB;AACzD,QAAQ,8DAAmB,SAAS,8DAAqB;AACzD,QAAQ,sDAAe,SAAS,0DAAiB;AACjD,QAAQ,0DAAiB,SAAS,4DAAmB;AACrD,QAAQ,4DAAkB,SAAS,6DAAoB;AACvD,QAAQ,8CAAW,SAAS,sDAAa;AACzC,QAAQ,qDAAc,SAAS,yDAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAoB,iBAAiB,2DAAkB;AAC/D;AACA;AACA;AAC2B;;;;;;;;;;;;;;;;;;;;;;;AC9I3B;AACA;AACA;AACA;AACoC;AACJ;AACM;AACkB;AACtB;AACc;AACE;AACjB;AACjC;AACA;AACA;AACA,6BAA6B,+CAAQ,GAAG,+BAA+B;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,+BAA+B,6CAAO;AAC7C;AACA,eAAe,iEAAyB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD,8CAA8C,6JAA6J,+DAA0B,qCAAqC,+DAA0B,kDAAkD,+DAA0B,2EAA2E;AAC3b;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC,YAAY,qDAAiB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,uEAA2B;AAC3E,yCAAyC,qDAAS;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yDAAa;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC9LA;AACA;AACsC;AACtC;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,wBAAwB;AAC1C,oBAAoB,yBAAyB;AAC7C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,4BAA4B;AAC/C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,4BAA4B;AAChD,qBAAqB,4BAA4B;AACjD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,4BAA4B;AAC7C,kBAAkB,4BAA4B;AAC9C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,iCAAiC,UAAU;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,WAAW;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2CAA2C,eAAe;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wCAAwC,UAAU;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,4CAA4C,cAAc;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,UAAU;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY,uCAAuC,KAAK,IAAI,UAAU;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,KAAK,IAAI,UAAU;AAC5F;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA,6BAA6B,eAAe;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,UAAU;AACnF;AACA;AACA,sBAAsB,+CAAY,mCAAmC,MAAM,IAAI,MAAM;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AClXA;AACA;AAC8B;AACY;AACR;AACI;AACC;AACQ;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,mBAAmB,+CAAQ;AAClC;AACA;AACA;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAe;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,QAAQ,uDAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,oBAAoB,2DAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wDAAwD,2BAA2B;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yDAAoB;AAC9C,wDAAwD,yDAAoB;AAC5E;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,sCAAsC;AACtC,uCAAuC;AACvC,0BAA0B;AAC1B,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,oDAAY;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4DAAuB;AACzC;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,4DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,+DAA0B,IAAI,+DAA0B;AAC3F;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC/eA;AACA;AAC4C;AACZ;AACF;AACA;AACI;AACK;AACD;AACtC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gEAA2B;AAC7C;AACA,qBAAqB,sDAAiB;AACtC;AACA,QAAQ,4DAAuB;AAC/B;AACA;AACA;AACA,cAAc,sDAAiB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8DAAyB;AACjC;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uCAAI;AAC3B;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,0CAAO;AAClE;AACA;AACA;AACA,0BAA0B,yDAAoB;AAC9C,QAAQ,8CAAO,kEAAkE,cAAc,cAAc,cAAc;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,6DAA6D,+DAA0B,EAAE;AACzF;AACA;AACA;AACA,cAAc,kDAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,6CAAU;AACrD,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0CAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gBAAgB,MAAM,mBAAmB,0CAAO,iBAAiB;AACnG;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAiB;AAC7B,sCAAsC,eAAe;AACrD,aAAa;AACb;AACA;AACA;AACA;AACA;AACoB;;;;;;;;;;;;;;;;;;;;ACnNpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACwC;AACF;AACJ;AACK;AACP;AACzB,2BAA2B,+CAAQ;AAC1C;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA,SAAS;AACT;AACA,6BAA6B,iDAAS;AACtC,yBAAyB,yCAAK;AAC9B;AACA;AACA,wBAAwB,sDAAiB;AACzC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACpEA;AACA;AACA;AACgC;AACM;AACR;AACI;AACgB;AACE;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAQ;AAC/B;AACA;AACA,eAAe,yDAAiB;AAChC;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,6CAA6C;AAC7C;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,8CAAO;AAC5C,oFAAoF,8DAAuB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,8DAAuB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,4DAAuB;AACvD;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAA0B;AAClD;AACA;AACA;AACA,wBAAwB,yDAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,0CAA0C,UAAU;AACtF;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B,kCAAkC,mBAAmB;AACrD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,yCAAK,CAAC,2DAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,yCAAK,CAAC,2DAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4CAAS;AACrC;AACA,YAAY,qDAAS;AACrB;AACA,gCAAgC,4CAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,4CAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoB;;;;;;;;;;;;;;;;;;;;ACxRpB;AACA;AACA;AACgC;AACwB;AAC1B;AACI;AACkB;AACpD;AACO,0BAA0B,+CAAQ;AACzC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD,iDAAiD,4DAAqB;AACtE,iDAAiD,6DAAsB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA,wBAAwB,4DAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,6DAAsB;AACpG,2BAA2B,4DAAuB,+EAA+E,gDAAa;AAC9I,sBAAsB,4DAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA,2BAA2B,4DAAuB,+EAA+E,gDAAa;AAC9I,sBAAsB,4DAAuB;AAC7C,YAAY,uDAAW;AACvB,+BAA+B,4DAAuB,iFAAiF,gDAAa;AACpJ,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA;AACA,6BAA6B,8DAAuB;AACpD,YAAY,qDAAiB;AAC7B;AACA,aAAa;AACb;AACA,kCAAkC,6DAAsB;AACxD,YAAY,qDAAiB;AAC7B;AACA,aAAa;AACb;AACA;AACA;;;;;;;;;;;;;;;;AC3FA;AACA;AACA;AAC2C;AAC3C;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,cAAc;AACnE,kDAAkD,4BAA4B;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;AACkB;;;;;;;;;;;;;;;;;;;;;ACpNlB;AACA;AACoC;AACiB;AACrB;AACE;AACK;AACI;AAC3C;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,yCAAK,2BAA2B,0BAA0B;AAChF;AACA,0DAA0D,+DAA0B;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,6CAAO;AAClC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,4DAAuB,gCAAgC,mCAAmC,2CAA2C,+DAA0B;AAC/L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,4DAAuB,gCAAgC,mCAAmC,2CAA2C,+DAA0B;AAC/L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;ACtPxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,2BAA2B,yEAAyE;AACpG;AACA;AACA;AACA;AACA;AACA,oIAAoI;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACnHA;AACA;AACuC;AAChC;AACP;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACgD;AACN;AACI;AACR;AACU;AACzC;AACP;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACO;AACP;AACA;AACA;AACA;AACA,CAAC,kDAAkD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2DAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+CAAY,gDAAgD,aAAa;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,kDAAY;AACjC,8BAA8B,+CAAY;AAC1C;AACA,2DAA2D,0BAA0B;AACrF;AACA,8BAA8B,+CAAY;AAC1C;AACA,+BAA+B,yDAAa;AAC5C;AACA;AACA,qBAAqB,+CAAS;AAC9B,8BAA8B,+CAAY;AAC1C;AACA,+BAA+B,mDAAU;AACzC;AACA;AACA,0BAA0B,+CAAY,8CAA8C,QAAQ;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoB;;;;;;;;;;;;;;;;;;;AC/HpB;AACgC;AACQ;AACN;AACK;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,iDAAS;AACzC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA,0BAA0B,yCAAK,YAAY,4DAAuB;AAClE;AACA,SAAS;AACT,qCAAqC,+CAA+C;AACpF;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AACA;AAC4C;AACd;AACM;AACiB;AACP;AACQ;AACE;AACT;AACD;AACJ;AACF;AACH;AACH;AACc;AACE;AACZ;AACtC;AACA;AACA;AACA;AACA,KAAK,2DAAgB;AACrB,KAAK,gDAAa;AAClB,KAAK,gEAAqB;AAC1B,KAAK,mEAAsB;AAC3B;AACA;AACA,KAAK,mEAAsB;AAC3B,KAAK,gEAAqB;AAC1B,KAAK,2DAAgB;AACrB,KAAK,gDAAa;AAClB;AACA,oBAAoB,6CAAO;AAC3B;AACA,eAAe,uDAAc;AAC7B;AACA;AACA;AACA;AACA,0BAA0B,6DAAuB;AACjD;AACA;AACA;AACA;AACA,0BAA0B,6DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,uCAAuC,wHAAwH,gEAA0B,oHAAoH;AAC7S,wBAAwB;AACxB,wCAAwC;AACxC;AACA;AACA,6BAA6B,kDAAO,yBAAyB,6DAAkB,GAAG,2DAAgB;AAClG;AACA,gCAAgC,kDAAO,0BAA0B,6DAAkB,GAAG,2DAAgB;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD,4CAA4C,eAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,iEAA2B;AAChE;AACA;AACA,0DAA0D,iEAA2B;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,qFAAqF,iEAA2B,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA,8BAA8B,uEAA2B;AACzD;AACA;AACA;AACA,oDAAoD,uEAA2B;AAC/E;AACA;AACA;AACA;AACA,qCAAqC,mEAAwB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,wDAAU;AAC1C;AACA;AACA;AACA;AACA,gCAAgC,+CAAK;AACrC;AACA;AACA;AACA;AACA,iCAAiC,uDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mDAAU;AAC1C;AACA;AACA;AACA,wCAAwC;AACxC,gCAAgC,kDAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qEAAyB;AAC5D;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B,EAAE,sDAAW;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mEAAwB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,yBAAyB,qEAAyB;AAClD;AACA;AACA;AACA;AACA;AACA,kDAAkD,gDAAa;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,qEAAyB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,0DAA0D,gEAAqB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,qEAAyB;AAC9E;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,2DAA2D,mEAAsB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,qEAAyB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,6BAA6B,uDAAY;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uEAA2B;AAC9E;AACA;AACA,8BAA8B,qEAAyB;AACvD;AACA;AACA,6BAA6B,uCAAI;AACjC;AACA;AACA;AACA,6CAA6C,qEAAyB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,0DAAa;AAC1C;AACA;AACA;AACA,uDAAuD,qEAAyB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,uEAA2B;AAC1E,+CAA+C,qEAAyB;AACxE;AACA;AACA,gEAAgE,mEAAwB;AACxF;AACA,0CAA0C,kDAAO,CAAC,6DAAkB;AACpE;AACA;AACA,0CAA0C,kDAAO,CAAC,2DAAgB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA,6BAA6B,sDAAS;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,uEAA2B;AAChF;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,qDAAqD,uEAA2B;AAChF;AACA;AACA;AACA;AACA,iBAAiB;AACjB,wDAAwD,uEAA2B;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,6BAA6B,sDAAa;AAC1C;AACA,6BAA6B,8DAAqB;AAClD;AACA,6BAA6B,+DAAsB;AACnD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,iDAAiD,uEAA2B,EAAE,yDAAgB;AAC9F;AACA,0CAA0C,mEAAwB;AAClE;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,iDAAiD,uEAA2B,EAAE,yDAAgB;AAC9F;AACA,0CAA0C,mEAAwB;AAClE;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACiB;;;;;;;;;;;;;;;;;;;ACxuBjB;AACA;AACA;AACuE;AACrC;AACK;AAChC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AAC5B,sBAAsB,yDAAa;AAC1C;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACrMA;AACA;AACoC;AACiB;AACrB;AACE;AACK;AACD;AACtC;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA,6BAA6B;AAC7B,+BAA+B;AAC/B;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAO;AACpC;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA,yBAAyB,gEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B,GAAG;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,qCAAqC,wBAAwB;AAC7D,SAAS;AACT;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAiB;AACjC,gBAAgB,qDAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY,qDAAqD,UAAU;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC0B;;;;;;;;;;;;;;;;;;;AC/O1B;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACE;AACC;AACD;AACtC,2BAA2B,6CAAO;AAClC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8DAAuB,iBAAiB,8DAAuB;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8DAAuB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;;;;;AChKxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACF;AACa;AACR;AACD;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAO;AAC/B;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,mEAA8B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,EAAE,uDAAiB;AACzD;AACA;AACA;AACA;AACA;AACA,8BAA8B,wDAAiB;AAC1B;;;;;;;;;;;;;;;;;;;AClRrB;AACA;AACA;AACA;AACoC;AACG;AACN;AAC1B;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sDAAsD;AAChD,4BAA4B,6CAAO;AAC1C;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC4C;AACN;AACA;AACR;AACkB;AACd;AACK;AACsB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA,iFAAiF,0CAAO;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8CAAO;AACrC;AACA;AACA;AACA;AACA;AACA,wBAAwB,yDAAa;AACrC;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA,eAAe,0CAAO;AACtB;AACA;AACA;AACA;AACA;AACA,eAAe,4CAAS;AACxB;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,wDAAmB;AAC7D,0CAA0C,wDAAmB;AAC7D;AACA;AACA,yBAAyB,kDAAa;AACtC;AACA;AACA;AACA,8FAA8F,oDAAY;AAC1G;AACA,kGAAkG,oDAAY;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yDAAoB;AAC9C,QAAQ,8CAAO,kEAAkE,cAAc,cAAc,cAAc;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,6DAA6D,+DAA0B;AACvF;AACA,6EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oGAAoG,0CAAO;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI,GAAG,uBAAuB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,+CAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,0CAAO,GAAG,4CAAS;AACzE;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,0BAA0B,yDAAoB;AAC9C;AACA,0BAA0B,+CAAY,qDAAqD,IAAI;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB;AACxD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,2CAA2C;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8DAAyB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,6CAAU;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAO;AAC9B;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,4BAA4B,EAAE,wDAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0CAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,4CAAS;AACvF;AACA;AACA,kGAAkG,0CAAO;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,0CAAO;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,kBAAkB,QAAQ;AAC1B;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,cAAc;AAChC;AACA,kBAAkB,cAAc;AAChC,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B,WAAW,IAAI;AAC7D;AACA;AACA,sEAAsE,6CAAU;AAChF;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,iKAAiK;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,2BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,4CAAS;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,mBAAmB;AACxF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uCAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA,+BAA+B,0CAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACqB;;;;;;;;;;;;;;;;;;;;AChjCrB;AACA;AACqD;AACrB;AACgB;AACd;AACK;AACvC,yBAAyB,yDAAa;AACtC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAiB,sDAAsD,4DAAuB,+DAA+D,kBAAkB;AACvL;AACA;AACA;AACA;AACA,QAAQ,qDAAiB,sDAAsD,4DAAuB,iEAAiE,mBAAmB;AAC1L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA;AACA,YAAY,4DAAuB;AACnC;AACA,YAAY,qDAAiB,mBAAmB,+DAA4B;AAC5E;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB,UAAU,+DAA0B;AACpC,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsB;;;;;;;;;;;;;;;;;;;ACrKtB;AACA;AACqD;AACL;AACA;AACT;AACvC,2BAA2B,yDAAa;AACxC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACwB;;;;;;;;;;;;;;;;;;;;;AClExB;AACA;AACqD;AACrB;AACuC;AACrC;AACc;AACT;AACvC,yBAAyB,yDAAa;AACtC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,wBAAwB,uEAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,+DAA0B;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oBAAoB,mCAAmC;AACtH;AACA,sCAAsC,gEAAoB;AAC1D;AACA;AACA;AACA;AACA;AACA,+BAA+B,yDAAoB;AACnD;AACA,YAAY,qDAAiB;AAC7B,iBAAiB,kDAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,qDAAiB;AACzD;AACA,qBAAqB;AACrB,8CAA8C,+DAA0B;AACxE;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACsB;;;;;;;;;;;;;;;;;;;;ACrGtB;AACA;AACqD;AACkB;AACd;AAClB;AACD;AACtC,wBAAwB,yDAAa;AACrC;AACA,eAAe,0DAAkB;AACjC;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA,uCAAuC,uCAAuC,oEAA6B,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sEAA0B;AAC3C,iBAAiB,uEAA2B;AAC5C;AACA,sCAAsC,sEAA0B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uEAA2B;AAC5C,iBAAiB,uEAA2B;AAC5C;AACA,mDAAmD,+DAAwB;AAC3E;AACA;AACA,wDAAwD,8DAAuB;AAC/E;AACA;AACA,sCAAsC,uEAA2B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACqB;;;;;;;;;;;;;;;;;;ACrFrB;AACA;AACA;AACA;AACoC;AACG;AACD;AACtC,uBAAuB,6CAAO;AAC9B;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,qCAAqC,EAAE,uDAAiB;AACpC;;;;;;;;;;;;;;;;;;;ACpLpB;AACA;AACqD;AACL;AACT;AAChC;AACP;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B,oBAAoB,yDAAa;AACjC;AACA,eAAe,sDAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACiB;;;;;;;;;;;;;;;;;;;ACvEjB;AACA;AACA;AACA;AACA;AACoC;AACF;AACK;AACI;AAC3C;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA,mBAAmB,6CAAO;AAC1B;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sDAAiB;AAChC;AACA;AACA,eAAe,uDAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G;AAC7G;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,4DAAuB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mBAAmB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgB;;;;;;;;;;;;;;;;;;;;;ACnKhB;AACA;AACA;AACA;AACA;AACgC;AACF;AACA;AACI;AACK;AACD;AAC/B,4BAA4B,uCAAI;AACvC;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA,yDAAyD,4CAAS;AAClE;AACA,gCAAgC,yCAAK,mDAAmD,UAAU;AAClG;AACA;AACA;AACA;AACA,wCAAwC,4CAAS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAyB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,wBAAwB,0CAAO;AAC/B,0BAA0B,0CAAO,kBAAkB,4CAAS;AAC5D,sBAAsB,+CAAY,2CAA2C,UAAU;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4DAAuB,iCAAiC,qBAAqB;AACzG;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,4CAAS;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,0CAAO;AACtD;AACA;AACA;AACA;AACA;AACA,gDAAgD,8CAAW;AAC3D;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yDAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AChOA;AACA;AACA;AACA;AACA;AACqD;AACG;AAClB;AACR;AACI;AACmC;AAC/B;AACtC,2BAA2B,+CAAQ;AACnC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA,sBAAsB,4DAAuB;AAC7C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA,iBAAiB,uDAAW;AAC5B,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA,2DAA2D,+DAA0B;AACrF;AACA,4BAA4B,6DAAsB;AAClD;AACA;AACA;AACA,iCAAiC,6DAAsB;AACvD;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD,gCAAgC,6DAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA,yCAAyC;AACzC;AACA;AACA,6BAA6B,8DAAuB;AACpD;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB,EAAE;AACjD;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B,4BAA4B;AAC5B,mBAAmB,gEAAyB,EAAE;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gEAAyB,WAAW,gEAAyB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,0CAAO;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,2DAA2D,0CAAO;AAClE;AACA;AACA,mGAAmG,+DAA0B;AAC7H;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,2DAA2D,4CAAS;AACpE;AACA;AACA,mGAAmG,+DAA0B;AAC7H;AACA;AACA,iBAAiB,6DAAsB;AACvC;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,0BAA0B,+CAAY,oCAAoC,eAAe;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2DAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8DAAuB;AACvC;AACA;AACA,gBAAgB,8DAAuB;AACvC;AACA;AACA;AACA;AACA,qBAAqB,8DAAuB;AAC5C;AACA;AACA,oBAAoB,8DAAuB;AAC3C;AACA,qBAAqB,gEAAyB;AAC9C;AACA;AACA,oBAAoB,8DAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B,UAAU,4CAAS;AACnB,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACwB;;;;;;;;;;;;;;;;;;;;;ACpQxB;AACA;AACA;AACA;AACA;AACqD;AACrB;AACM;AACJ;AACqC;AACjC;AACtC,qBAAqB,+CAAQ;AAC7B;AACA,eAAe,uDAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B;AACA,wBAAwB,OAAO;AAC/B;AACA,yBAAyB;AACzB;AACA,qBAAqB,qDAAS;AAC9B;AACA,wBAAwB,cAAc;AACtC,yBAAyB;AACzB;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA,SAAS;AACT;AACA;AACA,oDAAoD,eAAe;AACnE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB;AACzD;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA,wBAAwB,+DAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA,gBAAgB,kDAAM;AACtB;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,0BAA0B,+CAAY,mCAAmC,WAAW;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B,mCAAmC,WAAW;AAC9C,oBAAoB,qDAAiB;AACrC;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C,oBAAoB,qDAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA,QAAQ,qDAAiB;AACzB,gCAAgC,WAAW,GAAG,MAAM;AACpD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB,UAAU,4CAAS;AACnB,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACkB;;;;;;;;;;;;;;;;;;;ACzNlB;AACA;AACA;AACqD;AACL;AACd;AAC4B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,wBAAwB;AAC7E;AACA;AACA;AACA,uDAAuD,0BAA0B;AACjF;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAa;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mEAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,2BAA2B,kDAAe;AAC1C,yBAAyB,4CAAS;AAClC,2BAA2B,oDAAiB;AAC5C,0BAA0B,mDAAgB;AAC1C;AACA,qCAAqC,sBAAsB;AAC3D,0CAA0C,iFAAiF;AAC3H;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,6CAAM;AAC9C;AACA,qCAAqC,6CAAM;AAC3C;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA,wDAAwD,qBAAqB;AAC7E;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gDAAgD;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAc;AAC3C,2BAA2B,qDAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,IAAI;AAC9E,6BAA6B,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,GAAG;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,IAAI,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,eAAe,KAAK,SAAS;AACvE;AACA;AACA;AACA;AACA,uDAAuD,sBAAsB,gBAAgB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB,4DAA4D;AAC3I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB;AAC/E,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gDAAa;AACtC,6BAA6B,mDAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsB;;;;;;;;;;;;;;;;;;;;;;ACpjBtB;AACA;AAC4C;AACR;AACI;AACV;AACE;AACO;AACD;AACtC;AACA;AACA;AACA;AACA;AACO,qBAAqB,6CAAO;AACnC;AACA,eAAe,uDAAe;AAC9B;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,qDAAqD,iLAAiL,cAAc,yBAAyB,YAAY,mDAAmD,0BAA0B;AACtW;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAyD,EAAE;AACpF;AACA;AACA;AACA,yBAAyB;AACzB,yDAAyD,WAAW;AACpE,iDAAiD,aAAa;AAC9D,UAAU,EAAE;AACZ;AACA;AACA;AACA,6CAA6C,iBAAiB;AAC9D,gGAAgG,wFAAwF;AACxL,gDAAgD,+EAA+E,aAAa,uBAAuB;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8BAA8B,iDAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,sDAAkB;AAClE;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,mEAAmE,wDAAoB;AACvF;AACA;AACA;AACA;AACA;AACA,wBAAwB,mCAAmC;AAC3D;AACA;AACA;AACA;AACA;AACA,+BAA+B,qDAAW;AAC1C,QAAQ,4DAAwB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,YAAY,+DAAuB;AACnC;AACA;AACA;AACA;AACA;AACA,wBAAwB,mDAAgB;AACxC,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;AC3MA;AACsC;AACN;AACM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ;AACjB,UAAU,QAAQ;AAClB,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,YAAY,kBAAkB;AAC9B,aAAa,kBAAkB;AAC/B,YAAY,kBAAkB;AAC9B,aAAa,kBAAkB;AAC/B;AACA;AACA,cAAc,eAAe;AAC7B,YAAY,eAAe;AAC3B,aAAa,eAAe;AAC5B,YAAY,eAAe;AAC3B,eAAe,eAAe;AAC9B,kBAAkB,eAAe;AACjC,uBAAuB,eAAe;AACtC,oBAAoB,eAAe;AACnC,oBAAoB,eAAe;AACnC,eAAe,eAAe;AAC9B,cAAc,gBAAgB;AAC9B;AACA;AACA,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,wCAAwC;AAClD,WAAW,yCAAyC;AACpD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,wCAAwC;AACpD,aAAa,yCAAyC;AACtD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,uBAAuB;AAChC,UAAU,wCAAwC;AAClD,YAAY,wCAAwC;AACpD,aAAa,yCAAyC;AACtD,UAAU,wCAAwC;AAClD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,SAAS,cAAc;AACvB,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAC3B,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAC1B,SAAS,WAAW;AACpB,UAAU,iBAAiB;AAC3B,UAAU,kBAAkB;AAC5B,UAAU,iBAAiB;AAC3B,UAAU,0BAA0B;AACpC,UAAU,gBAAgB;AAC1B,UAAU,qBAAqB;AAC/B,UAAU,uBAAuB;AACjC;AACA;AACA,WAAW,0DAA0D;AACrE,YAAY,gEAAgE;AAC5E,SAAS,yDAAyD;AAClE,UAAU,+DAA+D;AACzE,SAAS,4DAA4D;AACrE,MAAM,KAAK,+DAA+D;AAC1E,MAAM,KAAK,gEAAgE;AAC3E,UAAU,oFAAoF;AAC9F,SAAS,wEAAwE;AACjF,YAAY,gFAAgF;AAC5F,WAAW,0EAA0E;AACrF,YAAY,uEAAuE;AACnF,UAAU,+DAA+D;AACzE,WAAW,sEAAsE;AACjF,SAAS,yDAAyD;AAClE,SAAS,0DAA0D;AACnE,WAAW,mEAAmE;AAC9E,aAAa,uEAAuE;AACpF,YAAY,mEAAmE;AAC/E,YAAY,mEAAmE;AAC/E,+BAA+B,kEAAkE;AACjG,iCAAiC,oEAAoE;AACrG,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,2BAA2B,8DAA8D;AACzF,8BAA8B,iEAAiE;AAC/F,2BAA2B,8DAA8D;AACzF,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,wBAAwB,2DAA2D;AACnF,uBAAuB,0DAA0D;AACjF,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,iCAAiC,oEAAoE;AACrG,oCAAoC,uEAAuE;AAC3G,iCAAiC,oEAAoE;AACrG,sCAAsC,yEAAyE;AAC/G,mCAAmC,sEAAsE;AACzG,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,gCAAgC,mEAAmE;AACnG,kCAAkC,qEAAqE;AACvG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,+BAA+B,kEAAkE;AACjG,+BAA+B,kEAAkE;AACjG,iCAAiC,oEAAoE;AACrG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,sCAAsC,yEAAyE;AAC/G,wCAAwC,2EAA2E;AACnH,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,kCAAkC,qEAAqE;AACvG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,wCAAwC,2EAA2E;AACnH,qCAAqC,wEAAwE;AAC7G,sCAAsC,yEAAyE;AAC/G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,wBAAwB,2DAA2D;AACnF,wBAAwB,2DAA2D;AACnF,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,oCAAoC,uEAAuE;AAC3G;AACA;AACA;AACA,KAAK;AACL,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,YAAY,8CAA8C;AAC1D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL,YAAY,wDAAwD;AACpE;AACA;AACA;AACA;AACA,KAAK;AACL,UAAU,+CAA+C;AACzD,YAAY,4EAA4E;AACxF,aAAa,4CAA4C;AACzD,aAAa,4CAA4C;AACzD,aAAa,sFAAsF;AACnG,cAAc,iDAAiD;AAC/D,cAAc,iDAAiD;AAC/D,aAAa,oFAAoF;AACjG,cAAc,gDAAgD;AAC9D,cAAc,gDAAgD;AAC9D,cAAc,4FAA4F;AAC1G,eAAe,oDAAoD;AACnE,eAAe,oDAAoD;AACnE,YAAY,4CAA4C;AACxD,UAAU,8CAA8C;AACxD,YAAY,+CAA+C;AAC3D;AACA;AACA,eAAe,4BAA4B;AAC3C,wBAAwB,yBAAyB;AACjD,YAAY,sBAAsB;AAClC,qBAAqB,2BAA2B;AAChD,UAAU,uBAAuB;AACjC,eAAe,6CAA6C;AAC5D,iBAAiB,iDAAiD;AAClE,eAAe,4CAA4C;AAC3D,iBAAiB,yCAAyC;AAC1D,iBAAiB,uCAAuC;AACxD,mBAAmB,qDAAqD;AACxE,iBAAiB,oCAAoC;AACrD,kBAAkB,6BAA6B;AAC/C,aAAa,oBAAoB;AACjC,YAAY,yBAAyB;AACrC,YAAY,2BAA2B;AACvC,gBAAgB,yBAAyB;AACzC,gBAAgB,8BAA8B;AAC9C,YAAY,mBAAmB;AAC/B,qBAAqB,yBAAyB;AAC9C,mBAAmB,uBAAuB;AAC1C,YAAY,mBAAmB;AAC/B,gBAAgB,uBAAuB;AACvC,aAAa,oBAAoB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2EAA2E;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,gGAAgG,SAAS;AACzG;AACA;AACA;AACA,wBAAwB;AACxB;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,kFAAkF,eAAe;AACnI;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,+CAA+C;AACnF;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,sBAAsB,+CAAY,8EAA8E,QAAQ;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,oDAAoD,QAAQ;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,yCAAK;AAC1C;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,gDAAgD,KAAK;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wDAAwD,SAAS;AACnG;AACA;AACA;AACA;AACA;AACA,mBAAmB,+CAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,0BAA0B,6CAA6C;AACvI;AACA;AACA;AACA,iEAAiE,kDAAc;AAC/E;AACA,2DAA2D,kBAAkB,oBAAoB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;;;;;;;;;AC7xCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACE;AACM;AACR;AACkB;AACd;AACY;AACC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACO,sBAAsB,yDAAa;AAC1C;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA,4DAA4D;AAC5D;AACA,8BAA8B,gEAA2B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,4CAAS,CAAC,KAAK,kDAAe,CAAC,GAAG;AACvD,0BAA0B,yDAAoB;AAC9C,QAAQ,8CAAO,kEAAkE,cAAc,cAAc,cAAc;AAC3H;AACA;AACA;AACA;AACA;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,0CAAO;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA,+BAA+B,2DAAsB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+BAA+B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,WAAW;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,yBAAyB,6DAAsB;AAC/C,wBAAwB;AACxB;AACA,8BAA8B,8DAAuB;AACrD,gCAAgC;AAChC;AACA,8BAA8B,8DAAuB,iBAAiB,8DAAuB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oCAAoC,WAAW,IAAI;AACnE;AACA;AACA;AACA;AACA;AACA,uDAAuD,4CAAS;AAChE;AACA;AACA;AACA;AACA;AACA,sCAAsC,0BAA0B;AAChE;AACA,wFAAwF,0BAA0B;AAClH;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iDAAK;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAU;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,4DAA4D,mBAAmB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACzYA;AACA;AACA;AACA;AACA;AACqD;AACnB;AACK;AACD;AACtC,uBAAuB,2CAAM;AAC7B;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACoB;;;;;;;;;;;;;;;;;ACrGpB;AACgC;AACO;AAChC,uBAAuB,yCAAK;AACnC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA,4CAA4C,kEAAkE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACsC;AACC;AAChC,qBAAqB,+CAAQ;AACpC;AACA,eAAe,uDAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;;;;;;;;;;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACoC;AACiB;AACf;AACJ;AACK;AACI;AAC3C;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA,CAAC,kDAAkD;AACnD,0BAA0B,6CAAO;AACjC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,8EAA8E;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,mEAA8B;AACxG;AACA;AACA,0BAA0B,+CAAY,oCAAoC,eAAe;AACzF;AACA;AACA,wBAAwB;AACxB,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA,gCAAgC,iDAAc;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8DAAuB;AACnC;AACA;AACA,gBAAgB,8DAAuB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACuB;;;;;;;;;;;;;;;;;;;;ACxLvB;AACA;AACgC;AACF;AACI;AACK;AACa;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uCAAI;AAC/B;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,0BAA0B,iBAAiB,+DAA0B,EAAE;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC,yBAAyB,8CAAO;AAChC,8BAA8B,yCAAK,0BAA0B,sBAAsB;AACnF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;;AClHxB;AACA;AACqD;AACxB;AAC7B;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,mCAAmC,kDAAe;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAW;AACpC,2BAA2B,gDAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,+DAA4B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kDAAe,GAAG,oDAAiB;AACtE,oCAAoC,mDAAgB,GAAG,mDAAgB;AACvE;AACA,2BAA2B,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,wDAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACyB;;;;;;;;;;;;;;;;;;;;;;AC7TzB;AACA;AACqD;AACrB;AACF;AACI;AACK;AACD;AAC/B;AACP;AACA;AACA;AACA;AACA,CAAC,8CAA8C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uCAAI;AAC3B;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC,6BAA6B,yCAAK,cAAc,+DAA0B,IAAI,sBAAsB;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAA8B;AAClD;AACA,oCAAoC,iDAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACA;AACoB;;;;;;;;;;;;;;;;;;;;AClNpB;AACA;AACoC;AACE;AACJ;AACK;AACQ;AAC/C;AACA;AACA;AACA;AACO,uBAAuB,6CAAO;AACrC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,+CAAQ,QAAQ;AACzC,iCAAiC;AACjC,kCAAkC,+CAAQ;AAC1C;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,sDAAiB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;;;;;;;;;;;;;;;;;AChSA;AACA;AACA;AACA;AACA;AACsC;AACA;AACtC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,+CAAQ;AACvC,4BAA4B,+CAAQ;AACpC,sCAAsC;AACtC,mCAAmC;AACnC;AACA,0BAA0B;AAC1B;AACA,wBAAwB;AACxB,0BAA0B;AAC1B,6BAA6B;AAC7B,oCAAoC;AACpC;AACA,yBAAyB;AACzB,0BAA0B;AAC1B,sCAAsC;AACtC,uCAAuC;AACvC,4BAA4B;AAC5B,6BAA6B;AAC7B,8BAA8B;AAC9B,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uHAAuH;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACjMA;AACA;AACA;AACA;AACA;AACgC;AACC;AAC1B,iCAAiC,yCAAK;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yCAAK;AACtC;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yCAAK;AACtC;AACA,wBAAwB,8CAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA,YAAY,uDAAmB;AAC/B,uBAAuB,8CAAO;AAC9B;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA,YAAY,uDAAmB;AAC/B,uBAAuB,8CAAO;AAC9B;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACgC;AACuC;AACrC;AACkB;AACb;AACQ;AAC/C;AACA;AACA;AACA,kBAAkB,+CAAY,2CAA2C,SAAS;AAClF;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2CAA2C,SAAS;AACtF;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACO,4BAA4B,yDAAa;AAChD;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD,+DAA+D,+DAA0B;AACzF;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA,2BAA2B,yCAAK,OAAO,+DAA0B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6DAAkB;AACrC;AACA;AACA,gBAAgB,kCAAkC;AAClD;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACtLA;AACA;AAC8B;AACkB;AACT;AAChC,0BAA0B,uCAAI;AACrC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA,gBAAgB,eAAe;AAC/B,2BAA2B,yDAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACgC;AACQ;AACF;AACR;AACA;AACI;AACkB;AACpD;AACO,sBAAsB,+CAAQ;AACrC;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAW;AAC9B,2BAA2B,uDAAe;AAC1C,oCAAoC,yBAAyB;AAC7D,0BAA0B,4DAAuB;AACjD,kDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA,2CAA2C,SAAS;AACpD;AACA;AACA,2CAA2C,SAAS;AACpD;AACA,0DAA0D,SAAS,2CAA2C,gDAAa;AAC3H,uCAAuC,SAAS,cAAc,kBAAkB,0CAAO,iBAAiB;AACxG,wBAAwB,cAAc;AACtC,YAAY,qDAAiB,oCAAoC,0CAA0C;AAC3G;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC1DA;AACA;AACkC;AACI;AACtC;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,yDAAoB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2CAA2C,aAAa;AAC1F;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wDAAwD,yBAAyB,GAAG,UAAU;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,qDAAqD,QAAQ;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yDAAoB,QAAQ,GAAG,OAAO;AACxD;AACA;;;;;;;;;;;;;;;;;;;;;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,4BAA4B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACI;AACR;AACF;AACI;AACK;AACQ;AACxC;AACP;AACA;AACA;AACA,CAAC,wCAAwC;AAClC,qBAAqB,6CAAO;AACnC;AACA,eAAe,uDAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,4DAAuB;AACrD;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+DAA0B;AAChD;AACA;AACA;AACA;AACA,QAAQ,mEAA2B;AACnC;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,SAAS;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,yCAAK;AACnD;AACA;AACA;AACA;AACA;AACA,0CAA0C,yCAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,0CAAO;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,4BAA4B,uBAAuB;AACnD;AACA,0EAA0E,0CAAO;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,8CAAO;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4DAAuB;AAC9C;AACA;AACA;AACA,wBAAwB,8CAAO;AAC/B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8CAAO;AACnC,aAAa;AACb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;ACtH7B;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAM;AACrB,eAAe,qBAAM;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,MAAM,6BAA6B,MAAM;AACjF;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,iBAAiB,KAAK;AACtB;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;;;;;;;;;;;;;;;;;ACtFA;AACA;AACA;AAC8B;AACa;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,uCAAI;AACA;;;;;;;;;;;;;;;;;;;ACrEf;AACA;AAC8B;AACQ;AACJ;AACK;AACvC;AACO,sBAAsB,+CAAQ;AACrC;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gDAAa;AACtD;AACA,yGAAyG,+DAA0B;AACnI;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4DAA4D;AAC5E;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AClHA;AACA;AACA;AACoC;AACG;AACV;AACO;AACpC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA,6BAA6B,6CAAO;AACpC;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,2DAAqB;AAC7B;AACA;AACA;AACA;AAC0B;;;;;;;;;;;;;;;;;;;;;ACrE1B;AACA;AACoC;AACE;AACJ;AACK;AACkB;AAClD;AACP;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACO,oBAAoB,6CAAO;AAClC;AACA,eAAe,sDAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+CAAQ;AACrC;AACA;AACA;AACA,2BAA2B,0DAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,yCAAyC,sDAAiB,EAAE;AAChG;AACA,8BAA8B,+CAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA,YAAY,8CAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC/PA;AACA;AACA;AACA;AACA;AACA;AACsC;AACtC;AACO;AACP;AACA;AACA,mBAAmB,mDAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,mBAAmB,mDAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;;;;;;;UC7BA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACmC;AACuB;AACH;AACvD,sEAAiB;AACjB,wDAAiB;AACjB,mEAAa;AACb;AAC6B;AAC7B;AACwC","sources":["webpack://Vex/webpack/universalModuleDefinition","webpack://Vex/./src/version.ts","webpack://Vex/./src/accidental.ts","webpack://Vex/./src/annotation.ts","webpack://Vex/./src/articulation.ts","webpack://Vex/./src/barnote.ts","webpack://Vex/./src/beam.ts","webpack://Vex/./src/bend.ts","webpack://Vex/./src/boundingbox.ts","webpack://Vex/./src/boundingboxcomputation.ts","webpack://Vex/./src/canvascontext.ts","webpack://Vex/./src/chordsymbol.ts","webpack://Vex/./src/clef.ts","webpack://Vex/./src/clefnote.ts","webpack://Vex/./src/crescendo.ts","webpack://Vex/./src/curve.ts","webpack://Vex/./src/dot.ts","webpack://Vex/./src/easyscore.ts","webpack://Vex/./src/element.ts","webpack://Vex/./src/factory.ts","webpack://Vex/./src/flow.ts","webpack://Vex/./src/font.ts","webpack://Vex/./src/fonts/bravura_glyphs.ts","webpack://Vex/./src/fonts/common_metrics.ts","webpack://Vex/./src/fonts/custom_glyphs.ts","webpack://Vex/./src/fonts/gonville_glyphs.ts","webpack://Vex/./src/fonts/leland_glyphs.ts","webpack://Vex/./src/fonts/load_all.ts","webpack://Vex/./src/fonts/load_bravura.ts","webpack://Vex/./src/fonts/load_custom.ts","webpack://Vex/./src/fonts/load_gonville.ts","webpack://Vex/./src/fonts/load_leland.ts","webpack://Vex/./src/fonts/load_petaluma.ts","webpack://Vex/./src/fonts/petaluma_glyphs.ts","webpack://Vex/./src/fonts/petalumascript_glyphs.ts","webpack://Vex/./src/fonts/robotoslab_glyphs.ts","webpack://Vex/./src/fonts/sans_bold_text_metrics.ts","webpack://Vex/./src/fonts/sans_text_metrics.ts","webpack://Vex/./src/fonts/serif_text_metrics.ts","webpack://Vex/./src/fonts/textfonts.ts","webpack://Vex/./src/formatter.ts","webpack://Vex/./src/fraction.ts","webpack://Vex/./src/frethandfinger.ts","webpack://Vex/./src/ghostnote.ts","webpack://Vex/./src/glyph.ts","webpack://Vex/./src/glyphnote.ts","webpack://Vex/./src/gracenote.ts","webpack://Vex/./src/gracenotegroup.ts","webpack://Vex/./src/gracetabnote.ts","webpack://Vex/./src/index.ts","webpack://Vex/./src/keymanager.ts","webpack://Vex/./src/keysignature.ts","webpack://Vex/./src/keysignote.ts","webpack://Vex/./src/modifier.ts","webpack://Vex/./src/modifiercontext.ts","webpack://Vex/./src/multimeasurerest.ts","webpack://Vex/./src/music.ts","webpack://Vex/./src/note.ts","webpack://Vex/./src/notehead.ts","webpack://Vex/./src/notesubgroup.ts","webpack://Vex/./src/ornament.ts","webpack://Vex/./src/parenthesis.ts","webpack://Vex/./src/parser.ts","webpack://Vex/./src/pedalmarking.ts","webpack://Vex/./src/registry.ts","webpack://Vex/./src/rendercontext.ts","webpack://Vex/./src/renderer.ts","webpack://Vex/./src/repeatnote.ts","webpack://Vex/./src/stave.ts","webpack://Vex/./src/stavebarline.ts","webpack://Vex/./src/staveconnector.ts","webpack://Vex/./src/stavehairpin.ts","webpack://Vex/./src/staveline.ts","webpack://Vex/./src/stavemodifier.ts","webpack://Vex/./src/stavenote.ts","webpack://Vex/./src/staverepetition.ts","webpack://Vex/./src/stavesection.ts","webpack://Vex/./src/stavetempo.ts","webpack://Vex/./src/stavetext.ts","webpack://Vex/./src/stavetie.ts","webpack://Vex/./src/stavevolta.ts","webpack://Vex/./src/stem.ts","webpack://Vex/./src/stemmablenote.ts","webpack://Vex/./src/stringnumber.ts","webpack://Vex/./src/strokes.ts","webpack://Vex/./src/svgcontext.ts","webpack://Vex/./src/system.ts","webpack://Vex/./src/tables.ts","webpack://Vex/./src/tabnote.ts","webpack://Vex/./src/tabslide.ts","webpack://Vex/./src/tabstave.ts","webpack://Vex/./src/tabtie.ts","webpack://Vex/./src/textbracket.ts","webpack://Vex/./src/textdynamics.ts","webpack://Vex/./src/textformatter.ts","webpack://Vex/./src/textnote.ts","webpack://Vex/./src/tickable.ts","webpack://Vex/./src/tickcontext.ts","webpack://Vex/./src/timesigglyph.ts","webpack://Vex/./src/timesignature.ts","webpack://Vex/./src/timesignote.ts","webpack://Vex/./src/tremolo.ts","webpack://Vex/./src/tuning.ts","webpack://Vex/./src/tuplet.ts","webpack://Vex/./src/typeguard.ts","webpack://Vex/./src/util.ts","webpack://Vex/./src/vex.ts","webpack://Vex/./src/vibrato.ts","webpack://Vex/./src/vibratobracket.ts","webpack://Vex/./src/voice.ts","webpack://Vex/./src/web.ts","webpack://Vex/webpack/bootstrap","webpack://Vex/webpack/runtime/define property getters","webpack://Vex/webpack/runtime/global","webpack://Vex/webpack/runtime/hasOwnProperty shorthand","webpack://Vex/webpack/runtime/make namespace object","webpack://Vex/./entry/vexflow-debug.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Vex\"] = factory();\n\telse\n\t\troot[\"Vex\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","export const VERSION = '4.2.6';\nexport const ID = '103aad2b14837418c5e96c9e078edd036fcddf60';\nexport const DATE = '2024-08-26T20:16:17.134Z';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accidentalLinePositionsAndSpaceNeeds = [];\n let prevNote = undefined;\n let extraXSpaceNeededForLeftDisplacedNotehead = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n // If the current extra left-space needed isn't as big as this note's,\n // then we need to use this note's.\n extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accidentalLinePositionsAndSpaceNeeds.push({\n y,\n line: accLine,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n spacingBetweenStaveLines: lineSpace,\n });\n }\n else {\n accidentalLinePositionsAndSpaceNeeds.push({\n line: props.line,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n });\n }\n }\n // Sort accidentals by line number.\n accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line);\n const staveLineAccidentalLayoutMetrics = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let maxExtraXSpaceNeeded = 0;\n // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics)\n // from accidentalLinePositionsAndSpaceNeeds\n for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) {\n const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i];\n const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1];\n let currentLineMetric;\n // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric\n if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) {\n currentLineMetric = {\n line: accidentalLinePositionAndSpaceNeeds.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n };\n staveLineAccidentalLayoutMetrics.push(currentLineMetric);\n }\n else {\n currentLineMetric = priorLineMetric;\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' &&\n accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') {\n currentLineMetric.flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') {\n currentLineMetric.dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n currentLineMetric.numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing;\n // if this extraXSpaceNeeded is the largest so far, use it as the starting point for\n // all accidental columns.\n maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded);\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd])\n ? 'a'\n : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) {\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = leftShift + maxExtraXSpaceNeeded;\n columnXOffsets[0] = leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded;\n accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift = totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\nexport { Accidental };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\nexport { Annotation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\nexport { Articulation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n this.barline = new Barline(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n ctx.openGroup('barnote', this.getAttribute('id'));\n this.barline.setType(this.type);\n this.barline.setX(this.getAbsoluteX());\n this.barline.draw(this.checkStave());\n ctx.closeGroup();\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\nexport { BarNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nclass Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Bend };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height, devicePixelRatio) {\n var _a;\n const canvas = this.context2D.canvas;\n const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : globalObject().devicePixelRatio) !== null && _a !== void 0 ? _a : 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / dpr) | 0;\n height = (height / dpr) | 0;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(dpr, dpr);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\nexport { ChordSymbol };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\nexport { Clef };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\nexport { Crescendo };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\nexport { EasyScore };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Element };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Factory };\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static getMusicFontStack() {\n return Tables.MUSIC_FONT_STACK;\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\nexport { Flow };\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\nexport { Font };\n","export const BravuraFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 469,\n y_min: 0,\n y_max: 295,\n ha: 295,\n o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 469,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 36,\n y_min: 868,\n y_max: 1120,\n ha: 252,\n o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 500,\n y_min: 0,\n y_max: 502,\n ha: 502,\n o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z',\n },\n segno: {\n x_min: 4,\n x_max: 550,\n y_min: -27,\n y_max: 759,\n ha: 786,\n o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z',\n },\n coda: {\n x_min: -4,\n x_max: 955,\n y_min: -158,\n y_max: 898,\n ha: 1056,\n o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z',\n },\n gClef: {\n x_min: 0,\n x_max: 671,\n y_min: -658,\n y_max: 1098,\n ha: 1756,\n o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z',\n },\n cClef: {\n x_min: 0,\n x_max: 699,\n y_min: -506,\n y_max: 506,\n ha: 1012,\n o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z',\n },\n fClef: {\n x_min: -5,\n x_max: 684,\n y_min: -635,\n y_max: 262,\n ha: 897,\n o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 382,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z',\n },\n '6stringTabClef': {\n x_min: -3,\n x_max: 408,\n y_min: -748,\n y_max: 764,\n ha: 1512,\n o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 314,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 426,\n y_min: -257,\n y_max: 254,\n ha: 511,\n o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 401,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 383,\n y_min: -251,\n y_max: 246,\n ha: 497,\n o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 421,\n y_min: -250,\n y_max: 249,\n ha: 499,\n o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 416,\n y_min: -259,\n y_max: 259,\n ha: 518,\n o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z',\n },\n timeSigCommon: {\n x_min: 5,\n x_max: 424,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 418,\n y_min: -359,\n y_max: 361,\n ha: 720,\n o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z',\n },\n timeSigPlus: {\n x_min: -1,\n x_max: 499,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z',\n },\n timeSigPlusSmall: {\n x_min: -1,\n x_max: 255,\n y_min: -133,\n y_max: 123,\n ha: 256,\n o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 448,\n y_min: -35,\n y_max: 40,\n ha: 75,\n o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z',\n },\n timeSigParensLeft: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 599,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 546,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 377,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 290,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 603,\n y_min: -218,\n y_max: 213,\n ha: 431,\n o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z',\n },\n noteheadCircledWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -225,\n y_max: 211,\n ha: 436,\n o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z',\n },\n noteheadCircledHalf: {\n x_min: -18,\n x_max: 311,\n y_min: -162,\n y_max: 167,\n ha: 329,\n o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z',\n },\n noteheadCircledBlack: {\n x_min: -21,\n x_max: 321,\n y_min: -171,\n y_max: 167,\n ha: 338,\n o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 416,\n y_min: -190,\n y_max: 198,\n ha: 388,\n o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 292,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 207 -180 l 420 180 l 0 180 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 293,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 422 -180 l 207 180 l 0 -180 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 596,\n y_min: -179,\n y_max: 168,\n ha: 347,\n o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z',\n },\n noteheadSlashedWhole1: {\n x_min: -22,\n x_max: 433,\n y_min: -157,\n y_max: 148,\n ha: 305,\n o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z',\n },\n noteheadSlashedHalf1: {\n x_min: -67,\n x_max: 386,\n y_min: -142,\n y_max: 160,\n ha: 302,\n o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z',\n },\n noteheadSlashedBlack1: {\n x_min: -80,\n x_max: 375,\n y_min: -165,\n y_max: 167,\n ha: 332,\n o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 596,\n y_min: -178,\n y_max: 169,\n ha: 347,\n o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z',\n },\n noteheadSlashedWhole2: {\n x_min: -18,\n x_max: 436,\n y_min: -154,\n y_max: 151,\n ha: 305,\n o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 380,\n y_min: -134,\n y_max: 168,\n ha: 302,\n o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z',\n },\n noteheadSlashedBlack2: {\n x_min: -79,\n x_max: 376,\n y_min: -164,\n y_max: 168,\n ha: 332,\n o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 432,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 270,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 251,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z',\n },\n noteheadParenthesis: {\n x_min: -73,\n x_max: 368,\n y_min: -180,\n y_max: 182,\n ha: 362,\n o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z',\n },\n noteheadParenthesisRight: {\n x_min: -36,\n x_max: 73,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 109,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 315,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 -180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 180 l 0 -180 l 488 -180 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 278,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z',\n },\n tremolo1: {\n x_min: -150,\n x_max: 150,\n y_min: -93,\n y_max: 94,\n ha: 187,\n o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 264,\n y_min: -810,\n y_max: 9,\n ha: 819,\n o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 306,\n y_min: -14,\n y_max: 808,\n ha: 822,\n o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -813,\n y_max: 2,\n ha: 815,\n o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 291,\n y_min: -9,\n y_max: 812,\n ha: 821,\n o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 149,\n ha: 961,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 273,\n y_min: -172,\n y_max: 812,\n ha: 984,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 347,\n ha: 1159,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -376,\n y_max: 812,\n ha: 1188,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 533,\n ha: 1345,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -580,\n y_max: 812,\n ha: 1392,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 226,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 168,\n y_min: -335,\n y_max: 341,\n ha: 676,\n o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 249,\n y_min: -348,\n y_max: 350,\n ha: 698,\n o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 247,\n y_min: -125,\n y_max: 127,\n ha: 252,\n o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 411,\n y_min: -175,\n y_max: 437,\n ha: 612,\n o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 1,\n x_max: 227,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 1,\n x_max: 466,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 179,\n y_min: -353,\n y_max: 307,\n ha: 660,\n o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 3,\n x_max: 317,\n y_min: -347,\n y_max: 369,\n ha: 716,\n o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 1,\n x_max: 287,\n y_min: -174,\n y_max: 438,\n ha: 612,\n o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 341,\n y_min: -350,\n y_max: 348,\n ha: 698,\n o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z',\n },\n accidentalBakiyeFlat: {\n x_min: -1,\n x_max: 286,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 229,\n y_min: -337,\n y_max: 322,\n ha: 659,\n o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1,\n x_max: 339,\n y_min: -338,\n y_max: 321,\n ha: 659,\n o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 300,\n y_min: -472,\n y_max: 157,\n ha: 629,\n o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 421,\n y_min: -318,\n y_max: 328,\n ha: 646,\n o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 339,\n y_min: 1,\n y_max: 245,\n ha: 244,\n o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 339,\n y_min: -244,\n y_max: 0,\n ha: 244,\n o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z',\n },\n articTenutoAbove: {\n x_min: -1,\n x_max: 338,\n y_min: 0,\n y_max: 48,\n ha: 48,\n o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z',\n },\n articTenutoBelow: {\n x_min: -1,\n x_max: 338,\n y_min: -48,\n y_max: 0,\n ha: 48,\n o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 84,\n y_min: 0,\n y_max: 84,\n ha: 84,\n o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 84,\n y_min: -84,\n y_max: 0,\n ha: 84,\n o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z',\n },\n articStaccatissimoAbove: {\n x_min: 1,\n x_max: 100,\n y_min: -2,\n y_max: 293,\n ha: 295,\n o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z',\n },\n articStaccatissimoBelow: {\n x_min: 1,\n x_max: 100,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z',\n },\n articMarcatoAbove: {\n x_min: -1,\n x_max: 235,\n y_min: -1,\n y_max: 253,\n ha: 254,\n o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z',\n },\n articMarcatoBelow: {\n x_min: -1,\n x_max: 235,\n y_min: -254,\n y_max: 0,\n ha: 254,\n o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z',\n },\n fermataAbove: {\n x_min: 3,\n x_max: 605,\n y_min: -3,\n y_max: 329,\n ha: 332,\n o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z',\n },\n fermataBelow: {\n x_min: 3,\n x_max: 605,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 603,\n y_min: -1,\n y_max: 333,\n ha: 334,\n o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 603,\n y_min: -333,\n y_max: 1,\n ha: 334,\n o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: 0,\n y_max: 408,\n ha: 408,\n o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 715,\n y_min: -408,\n y_max: 0,\n ha: 408,\n o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 726,\n y_min: 0,\n y_max: 449,\n ha: 449,\n o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 726,\n y_min: -449,\n y_max: 0,\n ha: 449,\n o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 604,\n y_min: 0,\n y_max: 341,\n ha: 341,\n o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 604,\n y_min: -341,\n y_max: 0,\n ha: 341,\n o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z',\n },\n breathMarkComma: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n breathMarkUpbow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n caesura: {\n x_min: 0,\n x_max: 384,\n y_min: -1,\n y_max: 532,\n ha: 533,\n o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 373,\n y_min: 0,\n y_max: 530,\n ha: 530,\n o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 381,\n y_min: -249,\n y_max: 250,\n ha: 499,\n o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 282,\n y_min: -135,\n y_max: 9,\n ha: 144,\n o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z',\n },\n restWholeLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -135,\n y_max: 20,\n ha: 155,\n o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -2,\n y_max: 142,\n ha: 144,\n o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z',\n },\n restHalfLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -13,\n y_max: 142,\n ha: 155,\n o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z',\n },\n restQuarter: {\n x_min: 1,\n x_max: 270,\n y_min: -375,\n y_max: 373,\n ha: 748,\n o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 247,\n y_min: -251,\n y_max: 174,\n ha: 425,\n o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 320,\n y_min: -500,\n y_max: 179,\n ha: 679,\n o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 363,\n y_min: -500,\n y_max: 426,\n ha: 926,\n o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -753,\n y_max: 430,\n ha: 1183,\n o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 485,\n y_min: -750,\n y_max: 689,\n ha: 1439,\n o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z',\n },\n dynamicPiano: {\n x_min: -89,\n x_max: 366,\n y_min: -142,\n y_max: 274,\n ha: 416,\n o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z',\n },\n dynamicMezzo: {\n x_min: -20,\n x_max: 446,\n y_min: -10,\n y_max: 274,\n ha: 284,\n o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z',\n },\n dynamicForte: {\n x_min: -141,\n x_max: 364,\n y_min: -152,\n y_max: 444,\n ha: 596,\n o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z',\n },\n dynamicRinforzando: {\n x_min: -20,\n x_max: 277,\n y_min: 0,\n y_max: 274,\n ha: 274,\n o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 229,\n y_min: -10,\n y_max: 273,\n ha: 283,\n o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z',\n },\n dynamicZ: {\n x_min: -30,\n x_max: 244,\n y_min: -10,\n y_max: 268,\n ha: 278,\n o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z',\n },\n ornamentTrill: {\n x_min: 0,\n x_max: 521,\n y_min: -10,\n y_max: 390,\n ha: 400,\n o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 460,\n y_min: 0,\n y_max: 218,\n ha: 218,\n o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 460,\n y_min: -90,\n y_max: 306,\n ha: 396,\n o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z',\n },\n ornamentMordent: {\n x_min: 1,\n x_max: 729,\n y_min: -73,\n y_max: 319,\n ha: 392,\n o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 725,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z',\n },\n ornamentTremblement: {\n x_min: 1,\n x_max: 985,\n y_min: 0,\n y_max: 244,\n ha: 244,\n o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1119,\n y_min: 0,\n y_max: 481,\n ha: 481,\n o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 2,\n x_max: 1150,\n y_min: -367,\n y_max: 245,\n ha: 612,\n o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1048,\n y_min: -367,\n y_max: 331,\n ha: 698,\n o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 949,\n y_min: 0,\n y_max: 381,\n ha: 381,\n o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1278,\n y_min: 0,\n y_max: 247,\n ha: 247,\n o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1277,\n y_min: -62,\n y_max: 333,\n ha: 395,\n o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 859,\n y_min: -222,\n y_max: 246,\n ha: 468,\n o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z',\n },\n brassScoop: {\n x_min: 1,\n x_max: 320,\n y_min: -373,\n y_max: 13,\n ha: 386,\n o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 489,\n y_min: -40,\n y_max: 346,\n ha: 386,\n o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z',\n },\n brassFallLipShort: {\n x_min: 1,\n x_max: 293,\n y_min: -345,\n y_max: 42,\n ha: 387,\n o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 392,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 304,\n y_min: 0,\n y_max: 304,\n ha: 304,\n o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 379,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 620,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z',\n },\n brassSmear: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 170,\n ha: 170,\n o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 318,\n ha: 318,\n o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z',\n },\n stringsUpBow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 200,\n ha: 200,\n o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 1019,\n y_min: -8,\n y_max: 555,\n ha: 563,\n o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 450,\n y_min: 0,\n y_max: 450,\n ha: 450,\n o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -33,\n x_max: 292,\n y_min: 0,\n y_max: 119,\n ha: 119,\n o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z',\n },\n arrowheadBlackUp: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z',\n },\n arrowheadBlackDown: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z',\n },\n arpeggiatoUp: {\n x_min: 1,\n x_max: 229,\n y_min: 7,\n y_max: 1511,\n ha: 1504,\n o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z',\n },\n arpeggiatoDown: {\n x_min: 1,\n x_max: 229,\n y_min: -4,\n y_max: 1500,\n ha: 1504,\n o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 762,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1232,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z',\n },\n csymHalfDiminished: {\n x_min: -16,\n x_max: 488,\n y_min: -15,\n y_max: 489,\n ha: 504,\n o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 395,\n y_min: 1,\n y_max: 396,\n ha: 395,\n o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 558,\n y_min: 1,\n y_max: 477,\n ha: 476,\n o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 325,\n y_min: 216,\n y_max: 260,\n ha: 44,\n o: 'm 468 374 l 0 374 l 0 311 l 468 311 z',\n },\n csymParensLeftTall: {\n x_min: 1,\n x_max: 185,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z',\n },\n csymParensRightTall: {\n x_min: -20,\n x_max: 164,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 155,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 156,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z',\n },\n csymParensRightVeryTall: {\n x_min: -15,\n x_max: 107,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 999,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z',\n },\n accSagittal5v7KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z',\n },\n accSagittal5v7KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z',\n },\n accSagittal5CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z',\n },\n accSagittal5CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z',\n },\n accSagittal7CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z',\n },\n accSagittal7CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal25SmallDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z',\n },\n accSagittal25SmallDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z',\n },\n accSagittal35MediumDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z',\n },\n accSagittal35MediumDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal11MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z',\n },\n accSagittal11MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z',\n },\n accSagittal11LargeDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal11LargeDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp25SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z',\n },\n accSagittalFlat25SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z',\n },\n accSagittalSharp7CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z',\n },\n accSagittalFlat7CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp5CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z',\n },\n accSagittalSharp5v7kDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z',\n },\n accSagittalFlat5v7kUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z',\n },\n accSagittalSharp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z',\n },\n accSagittalSharp5v7kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -361,\n y_max: 172,\n ha: 533,\n o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5v7kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 361,\n ha: 533,\n o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z',\n },\n accSagittalSharp5CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z',\n },\n accSagittalFlat5CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z',\n },\n accSagittalSharp7CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z',\n },\n accSagittalFlat7CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp25SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z',\n },\n accSagittalFlat25SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z',\n },\n accSagittalSharp35MUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z',\n },\n accSagittalFlat35MDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z',\n },\n accSagittalSharp11MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z',\n },\n accSagittalFlat11MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z',\n },\n accSagittalSharp11LUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11LDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp35LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat35LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp25SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z',\n },\n accSagittalDoubleFlat25SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z',\n },\n accSagittalDoubleSharp7CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z',\n },\n accSagittalDoubleFlat7CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z',\n },\n accSagittalDoubleSharp5CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z',\n },\n accSagittalDoubleFlat5CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z',\n },\n accSagittalDoubleSharp5v7kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z',\n },\n accSagittalDoubleFlat5v7kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z',\n },\n accSagittalDoubleSharp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z',\n },\n accSagittalDoubleFlat: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z',\n },\n accSagittal7v11KleismaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z',\n },\n accSagittal7v11KleismaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal55CommaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z',\n },\n accSagittal55CommaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal7v11CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal7v11CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal5v11SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z',\n },\n accSagittal5v11SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat5v11SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z',\n },\n accSagittalFlat7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z',\n },\n accSagittalSharp55CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z',\n },\n accSagittalFlat55CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z',\n },\n accSagittalSharp17CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z',\n },\n accSagittalFlat17CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z',\n },\n accSagittalSharp7v11kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z',\n },\n accSagittalFlat7v11kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z',\n },\n accSagittalSharp7v11kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z',\n },\n accSagittalFlat7v11kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z',\n },\n accSagittalSharp17CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp55CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat55CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z',\n },\n accSagittalSharp7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z',\n },\n accSagittalFlat7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z',\n },\n accSagittalFlat5v11SDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp5v11SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat5v11SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp7v11CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z',\n },\n accSagittalDoubleFlat7v11CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z',\n },\n accSagittalDoubleSharp55CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z',\n },\n accSagittalDoubleFlat55CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z',\n },\n accSagittalDoubleSharp17CDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z',\n },\n accSagittalDoubleFlat17CUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z',\n },\n accSagittalDoubleSharp7v11kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat7v11kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittal23CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z',\n },\n accSagittal23CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z',\n },\n accSagittal5v19CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z',\n },\n accSagittal5v19CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal5v23SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z',\n },\n accSagittal5v23SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittalSharp5v23SDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z',\n },\n accSagittalFlat5v23SUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z',\n },\n accSagittalFlat5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z',\n },\n accSagittalFlat23CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z',\n },\n accSagittalSharp23CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z',\n },\n accSagittalFlat23CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalFlat5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z',\n },\n accSagittalSharp5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z',\n },\n accSagittalDoubleSharp5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z',\n },\n accSagittalDoubleFlat5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z',\n },\n accSagittalDoubleSharp5v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z',\n },\n accSagittalDoubleFlat5v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z',\n },\n accSagittalDoubleSharp23CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalDoubleFlat23CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z',\n },\n accSagittal19SchismaUp: {\n x_min: 0,\n x_max: 125,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z',\n },\n accSagittal19SchismaDown: {\n x_min: 0,\n x_max: 125,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal143CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z',\n },\n accSagittal143CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal11v49CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z',\n },\n accSagittal11v49CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z',\n },\n accSagittal19CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal19CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal7v19CommaUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal7v19CommaDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal49SmallDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal49SmallDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal23SmallDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal23SmallDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal5v13MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z',\n },\n accSagittal5v13MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z',\n },\n accSagittal11v19MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z',\n },\n accSagittal11v19MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z',\n },\n accSagittal49MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z',\n },\n accSagittal49MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z',\n },\n accSagittal5v49MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z',\n },\n accSagittal5v49MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z',\n },\n accSagittal49LargeDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z',\n },\n accSagittal49LargeDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z',\n },\n accSagittal11v19LargeDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z',\n },\n accSagittal11v19LargeDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z',\n },\n accSagittal5v13LargeDiesisUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z',\n },\n accSagittal5v13LargeDiesisDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z',\n },\n accSagittalFlat23SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp49SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z',\n },\n accSagittalFlat49SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalSharp7v19CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z',\n },\n accSagittalFlat7v19CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z',\n },\n accSagittalSharp19CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z',\n },\n accSagittalFlat19CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z',\n },\n accSagittalSharp11v49CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat11v49CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z',\n },\n accSagittalSharp143CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat143CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z',\n },\n accSagittalFlat17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z',\n },\n accSagittalSharp19sDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z',\n },\n accSagittalFlat19sUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z',\n },\n accSagittalSharp19sUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z',\n },\n accSagittalFlat19sDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z',\n },\n accSagittalSharp17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp143CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalFlat143CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp11v49CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z',\n },\n accSagittalFlat11v49CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z',\n },\n accSagittalSharp19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp49SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat49SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp23SUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat23SDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp5v13MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z',\n },\n accSagittalFlat5v13MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z',\n },\n accSagittalSharp11v19MUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11v19MDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp49MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z',\n },\n accSagittalFlat49MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z',\n },\n accSagittalSharp5v49MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z',\n },\n accSagittalFlat5v49MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z',\n },\n accSagittalSharp49LUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z',\n },\n accSagittalFlat49LDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z',\n },\n accSagittalSharp11v19LUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z',\n },\n accSagittalFlat11v19LDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v13LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat5v13LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalDoubleSharp23SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalDoubleFlat23SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z',\n },\n accSagittalDoubleSharp49SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z',\n },\n accSagittalDoubleFlat49SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalDoubleSharp7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalDoubleFlat7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z',\n },\n accSagittalDoubleSharp19CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z',\n },\n accSagittalDoubleFlat19CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z',\n },\n accSagittalDoubleSharp11v49CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat11v49CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp143CDown: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat143CUp: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp17kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat17kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittalDoubleSharp19sDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalDoubleFlat19sUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalShaftUp: {\n x_min: 0,\n x_max: 31,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z',\n },\n accSagittalShaftDown: {\n x_min: 0,\n x_max: 31,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z',\n },\n accSagittalAcute: {\n x_min: 0,\n x_max: 125,\n y_min: -62,\n y_max: 125,\n ha: 187,\n o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z',\n },\n accSagittalGrave: {\n x_min: 0,\n x_max: 125,\n y_min: -125,\n y_max: 62,\n ha: 187,\n o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z',\n },\n accSagittal1MinaUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal1MinaDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal2MinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal2MinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal1TinaUp: {\n x_min: 0,\n x_max: 93,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z',\n },\n accSagittal1TinaDown: {\n x_min: 0,\n x_max: 93,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z',\n },\n accSagittal2TinasUp: {\n x_min: 0,\n x_max: 94,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal2TinasDown: {\n x_min: 0,\n x_max: 94,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z',\n },\n accSagittal3TinasUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal3TinasDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal4TinasUp: {\n x_min: 0,\n x_max: 187,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal4TinasDown: {\n x_min: 0,\n x_max: 187,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal5TinasUp: {\n x_min: 0,\n x_max: 218,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal5TinasDown: {\n x_min: 0,\n x_max: 218,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal6TinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal6TinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal7TinasUp: {\n x_min: 0,\n x_max: 281,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal7TinasDown: {\n x_min: 0,\n x_max: 281,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal8TinasUp: {\n x_min: 0,\n x_max: 312,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal8TinasDown: {\n x_min: 0,\n x_max: 312,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal9TinasUp: {\n x_min: -7,\n x_max: 312,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal9TinasDown: {\n x_min: -7,\n x_max: 312,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittalFractionalTinaUp: {\n x_min: -3,\n x_max: 35,\n y_min: 73,\n y_max: 111,\n ha: 38,\n o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z',\n },\n accSagittalFractionalTinaDown: {\n x_min: -3,\n x_max: 35,\n y_min: -111,\n y_max: -73,\n ha: 38,\n o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 164,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 414,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 281,\n y_min: -203,\n y_max: 203,\n ha: 406,\n o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 281,\n y_min: -186,\n y_max: 186,\n ha: 372,\n o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z',\n },\n },\n fontFamily: 'Bravura',\n resolution: 1000,\n generatedOn: '2022-12-18T09:06:51.407Z',\n};\n","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const GonvilleSmuflFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 412,\n y_min: -18,\n y_max: 223,\n ha: 241,\n o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 412,\n y_min: -223,\n y_max: 18,\n ha: 241,\n o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z',\n },\n barlineTick: {\n x_min: -59,\n x_max: 59,\n y_min: -139,\n y_max: 139,\n ha: 279,\n o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z',\n },\n breathMarkTick: {\n x_min: -151,\n x_max: 272,\n y_min: 0,\n y_max: 429,\n ha: 429,\n o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z',\n },\n segno: {\n x_min: 7,\n x_max: 493,\n y_min: -50,\n y_max: 650,\n ha: 699,\n o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z',\n },\n coda: {\n x_min: 22,\n x_max: 478,\n y_min: -31,\n y_max: 531,\n ha: 563,\n o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z',\n },\n gClef: {\n x_min: 0,\n x_max: 623,\n y_min: -632,\n y_max: 1082,\n ha: 1713,\n o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z',\n },\n cClef: {\n x_min: 0,\n x_max: 643,\n y_min: -508,\n y_max: 508,\n ha: 1016,\n o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z',\n },\n fClef: {\n x_min: 0,\n x_max: 661,\n y_min: -545,\n y_max: 254,\n ha: 798,\n o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z',\n },\n unpitchedPercussionClef1: {\n x_min: -4,\n x_max: 337,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 501,\n y_min: -735,\n y_max: 753,\n ha: 1487,\n o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z',\n },\n timeSig0: {\n x_min: 0,\n x_max: 380,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z',\n },\n timeSig1: {\n x_min: 0,\n x_max: 254,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z',\n },\n timeSig2: {\n x_min: 0,\n x_max: 337,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z',\n },\n timeSig3: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig4: {\n x_min: 0,\n x_max: 345,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z',\n },\n timeSig5: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig6: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSig7: {\n x_min: 0,\n x_max: 326,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z',\n },\n timeSig8: {\n x_min: 0,\n x_max: 360,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z',\n },\n timeSig9: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -233,\n y_max: 233,\n ha: 466,\n o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -394,\n y_max: 394,\n ha: 788,\n o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 235,\n y_min: -23,\n y_max: 23,\n ha: 46,\n o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z',\n },\n timeSigParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensRightSmall: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n timeSigParensLeftSmall: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 663,\n y_min: -174,\n y_max: 174,\n ha: 349,\n o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 455,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 440,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 357,\n y_min: -178,\n y_max: 178,\n ha: 357,\n o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 323,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z',\n },\n augmentationDot: {\n x_min: -63,\n x_max: 63,\n y_min: -63,\n y_max: 63,\n ha: 126,\n o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z',\n },\n tremolo1: {\n x_min: -252,\n x_max: 216,\n y_min: -185,\n y_max: 148,\n ha: 333,\n o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z',\n },\n flag8thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -745,\n y_max: -4,\n ha: 741,\n o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z',\n },\n flag8thDown: {\n x_min: -15,\n x_max: 271,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z',\n },\n flag16thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -847,\n y_max: -4,\n ha: 843,\n o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z',\n },\n flag16thDown: {\n x_min: -15,\n x_max: 267,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z',\n },\n flag32ndUp: {\n x_min: -17,\n x_max: 233,\n y_min: -1005,\n y_max: 96,\n ha: 1101,\n o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z',\n },\n flag32ndDown: {\n x_min: -15,\n x_max: 270,\n y_min: -96,\n y_max: 895,\n ha: 991,\n o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z',\n },\n flag64thUp: {\n x_min: -17,\n x_max: 233,\n y_min: -933,\n y_max: 296,\n ha: 1230,\n o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z',\n },\n flag64thDown: {\n x_min: -15,\n x_max: 271,\n y_min: -296,\n y_max: 820,\n ha: 1116,\n o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z',\n },\n flag128thUp: {\n x_min: -17,\n x_max: 231,\n y_min: -987,\n y_max: 496,\n ha: 1484,\n o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z',\n },\n flag128thDown: {\n x_min: -15,\n x_max: 270,\n y_min: -496,\n y_max: 870,\n ha: 1366,\n o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z',\n },\n accidentalFlat: {\n x_min: -15,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 176,\n y_min: -334,\n y_max: 334,\n ha: 667,\n o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 239,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 271,\n y_min: -135,\n y_max: 135,\n ha: 271,\n o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z',\n },\n accidentalDoubleFlat: {\n x_min: -15,\n x_max: 356,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z',\n },\n accidentalParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n accidentalParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 200,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 446,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 335,\n y_min: -391,\n y_max: 391,\n ha: 782,\n o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -125,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 284,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z',\n },\n accidentalBakiyeFlat: {\n x_min: -129,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 188,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z',\n },\n articAccentAbove: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articAccentBelow: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articTenutoAbove: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articTenutoBelow: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articStaccatoAbove: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatoBelow: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatissimoAbove: {\n x_min: -53,\n x_max: 53,\n y_min: 0,\n y_max: 184,\n ha: 184,\n o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z',\n },\n articStaccatissimoBelow: {\n x_min: -53,\n x_max: 53,\n y_min: -184,\n y_max: 0,\n ha: 184,\n o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z',\n },\n articMarcatoAbove: {\n x_min: -114,\n x_max: 114,\n y_min: -256,\n y_max: 19,\n ha: 275,\n o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z',\n },\n articMarcatoBelow: {\n x_min: -114,\n x_max: 114,\n y_min: -19,\n y_max: 256,\n ha: 275,\n o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z',\n },\n fermataAbove: {\n x_min: -324,\n x_max: 324,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataBelow: {\n x_min: -324,\n x_max: 324,\n y_min: -353,\n y_max: 0,\n ha: 353,\n o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 364,\n ha: 364,\n o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z',\n },\n fermataLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -364,\n y_max: 0,\n ha: 364,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 438,\n ha: 438,\n o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataVeryLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -438,\n y_max: 0,\n ha: 438,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryShortAbove: {\n x_min: -351,\n x_max: 351,\n y_min: 0,\n y_max: 571,\n ha: 571,\n o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z',\n },\n fermataVeryShortBelow: {\n x_min: -351,\n x_max: 351,\n y_min: -571,\n y_max: 0,\n ha: 571,\n o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z',\n },\n fermataShortAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 469,\n ha: 469,\n o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataShortBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -469,\n y_max: 0,\n ha: 469,\n o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n breathMarkUpbow: {\n x_min: -125,\n x_max: 125,\n y_min: 0,\n y_max: 409,\n ha: 409,\n o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z',\n },\n caesura: {\n x_min: 0,\n x_max: 457,\n y_min: -202,\n y_max: 303,\n ha: 504,\n o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 370,\n y_min: -207,\n y_max: 310,\n ha: 517,\n o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 853,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 330,\n y_min: -125,\n y_max: 0,\n ha: 125,\n o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z',\n },\n restWholeLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -125,\n y_max: 11,\n ha: 137,\n o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 330,\n y_min: 0,\n y_max: 125,\n ha: 125,\n o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z',\n },\n restHalfLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -11,\n y_max: 125,\n ha: 137,\n o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 221,\n y_min: -365,\n y_max: 365,\n ha: 730,\n o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 258,\n y_min: -197,\n y_max: 219,\n ha: 416,\n o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 331,\n y_min: -443,\n y_max: 219,\n ha: 662,\n o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 405,\n y_min: -443,\n y_max: 466,\n ha: 909,\n o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 479,\n y_min: -689,\n y_max: 466,\n ha: 1155,\n o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 553,\n y_min: -689,\n y_max: 712,\n ha: 1401,\n o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z',\n },\n dynamicPiano: {\n x_min: -39,\n x_max: 378,\n y_min: -178,\n y_max: 277,\n ha: 455,\n o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z',\n },\n dynamicMezzo: {\n x_min: 35,\n x_max: 493,\n y_min: -19,\n y_max: 272,\n ha: 291,\n o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z',\n },\n dynamicForte: {\n x_min: -87,\n x_max: 440,\n y_min: -182,\n y_max: 415,\n ha: 597,\n o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z',\n },\n dynamicRinforzando: {\n x_min: 58,\n x_max: 357,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z',\n },\n dynamicSforzando: {\n x_min: 52,\n x_max: 278,\n y_min: -22,\n y_max: 270,\n ha: 292,\n o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z',\n },\n dynamicZ: {\n x_min: 23,\n x_max: 309,\n y_min: 2,\n y_max: 250,\n ha: 248,\n o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z',\n },\n ornamentTrill: {\n x_min: -249,\n x_max: 249,\n y_min: 0,\n y_max: 376,\n ha: 376,\n o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z',\n },\n ornamentTurn: {\n x_min: -310,\n x_max: 310,\n y_min: -143,\n y_max: 143,\n ha: 286,\n o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z',\n },\n ornamentTurnSlash: {\n x_min: -310,\n x_max: 310,\n y_min: -201,\n y_max: 201,\n ha: 402,\n o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z',\n },\n ornamentMordent: {\n x_min: -296,\n x_max: 296,\n y_min: -215,\n y_max: 198,\n ha: 413,\n o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z',\n },\n ornamentShortTrill: {\n x_min: -296,\n x_max: 296,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z',\n },\n ornamentTremblement: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 255,\n ha: 381,\n o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 127,\n ha: 370,\n o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 198,\n ha: 442,\n o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: -433,\n x_max: 433,\n y_min: -127,\n y_max: 244,\n ha: 370,\n o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: -439,\n x_max: 439,\n y_min: -127,\n y_max: 236,\n ha: 363,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: -439,\n x_max: 439,\n y_min: -215,\n y_max: 236,\n ha: 451,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: -439,\n x_max: 439,\n y_min: -236,\n y_max: 127,\n ha: 362,\n o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z',\n },\n stringsDownBow: {\n x_min: -168,\n x_max: 168,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z',\n },\n stringsUpBow: {\n x_min: -110,\n x_max: 110,\n y_min: 0,\n y_max: 277,\n ha: 277,\n o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z',\n },\n stringsHarmonic: {\n x_min: -82,\n x_max: 82,\n y_min: -82,\n y_max: 82,\n ha: 163,\n o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: -110,\n x_max: 110,\n y_min: -110,\n y_max: 205,\n ha: 315,\n o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: -110,\n x_max: 110,\n y_min: -205,\n y_max: 110,\n ha: 315,\n o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: -155,\n x_max: 155,\n y_min: -157,\n y_max: 157,\n ha: 315,\n o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 782,\n y_min: -1,\n y_max: 500,\n ha: 501,\n o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 435,\n y_min: 65,\n y_max: 500,\n ha: 435,\n o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z',\n },\n pictChokeCymbal: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -8,\n x_max: 269,\n y_min: 0,\n y_max: 126,\n ha: 126,\n o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z',\n },\n arrowheadBlackUp: {\n x_min: 11,\n x_max: 239,\n y_min: -6,\n y_max: 269,\n ha: 275,\n o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z',\n },\n arrowheadBlackDown: {\n x_min: 11,\n x_max: 239,\n y_min: 6,\n y_max: 281,\n ha: 275,\n o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z',\n },\n },\n fontFamily: 'GonvilleSmufl',\n resolution: 1000,\n generatedOn: '2023-04-20T22:11:26.009Z',\n};\n","export const LelandFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 491,\n y_min: 0,\n y_max: 279,\n ha: 279,\n o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 491,\n y_min: -279,\n y_max: 0,\n ha: 279,\n o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z',\n },\n segno: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 869,\n ha: 869,\n o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z',\n },\n coda: {\n x_min: 0,\n x_max: 745,\n y_min: -113,\n y_max: 735,\n ha: 848,\n o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z',\n },\n gClef: {\n x_min: 0,\n x_max: 640,\n y_min: -666,\n y_max: 1112,\n ha: 1778,\n o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z',\n },\n cClef: {\n x_min: 0,\n x_max: 627,\n y_min: -480,\n y_max: 482,\n ha: 962,\n o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z',\n },\n fClef: {\n x_min: 0,\n x_max: 664,\n y_min: -617,\n y_max: 251,\n ha: 868,\n o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 352,\n y_min: -252,\n y_max: 252,\n ha: 504,\n o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 439,\n y_min: -743,\n y_max: 746,\n ha: 1489,\n o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z',\n },\n timeSig0: {\n x_min: 15,\n x_max: 389,\n y_min: -254,\n y_max: 255,\n ha: 509,\n o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z',\n },\n timeSig1: {\n x_min: 15,\n x_max: 336,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z',\n },\n timeSig2: {\n x_min: 15,\n x_max: 377,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z',\n },\n timeSig3: {\n x_min: 15,\n x_max: 364,\n y_min: -244,\n y_max: 244,\n ha: 488,\n o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z',\n },\n timeSig4: {\n x_min: 14,\n x_max: 442,\n y_min: -248,\n y_max: 249,\n ha: 497,\n o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z',\n },\n timeSig5: {\n x_min: 15,\n x_max: 362,\n y_min: -244,\n y_max: 246,\n ha: 490,\n o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z',\n },\n timeSig6: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z',\n },\n timeSig7: {\n x_min: 15,\n x_max: 366,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z',\n },\n timeSig8: {\n x_min: 15,\n x_max: 393,\n y_min: -248,\n y_max: 246,\n ha: 494,\n o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z',\n },\n timeSig9: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -256,\n y_max: 258,\n ha: 514,\n o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -376,\n y_max: 388,\n ha: 764,\n o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 408,\n y_min: -204,\n y_max: 204,\n ha: 408,\n o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 538,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 325,\n y_min: -162,\n y_max: 163,\n ha: 325,\n o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 432,\n y_min: -179,\n y_max: 177,\n ha: 356,\n o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 223 176 l 0 -196 l 446 -196 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z',\n },\n noteheadSlashedWhole1: {\n x_min: -75,\n x_max: 448,\n y_min: -211,\n y_max: 214,\n ha: 425,\n o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z',\n },\n noteheadSlashedHalf1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z',\n },\n noteheadSlashedBlack1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z',\n },\n noteheadSlashedWhole2: {\n x_min: -75,\n x_max: 448,\n y_min: -212,\n y_max: 214,\n ha: 426,\n o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z',\n },\n noteheadSlashedHalf2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z',\n },\n noteheadSlashedBlack2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z',\n },\n noteheadParenthesisRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 0 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 488 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z',\n },\n tremolo1: {\n x_min: 0,\n x_max: 290,\n y_min: -93,\n y_max: 96,\n ha: 189,\n o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 289,\n y_min: -817,\n y_max: 12,\n ha: 829,\n o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -12,\n y_max: 817,\n ha: 829,\n o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -820,\n y_max: 12,\n ha: 832,\n o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -26,\n y_max: 803,\n ha: 829,\n o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 186,\n ha: 1007,\n o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 309,\n y_min: -216,\n y_max: 803,\n ha: 1019,\n o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -822,\n y_max: 373,\n ha: 1195,\n o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -403,\n y_max: 804,\n ha: 1207,\n o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 573,\n ha: 1394,\n o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -591,\n y_max: 803,\n ha: 1394,\n o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 203,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 171,\n y_min: -323,\n y_max: 325,\n ha: 648,\n o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 244,\n y_min: -333,\n y_max: 334,\n ha: 667,\n o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 275,\n y_min: -137,\n y_max: 138,\n ha: 275,\n o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 371,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 193,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 180,\n y_min: -316,\n y_max: 320,\n ha: 636,\n o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 290,\n y_min: -328,\n y_max: 339,\n ha: 667,\n o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -332,\n y_max: 334,\n ha: 666,\n o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z',\n },\n accidentalBakiyeFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -316,\n y_max: 318,\n ha: 634,\n o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 361,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 361,\n y_min: -235,\n y_max: 0,\n ha: 235,\n o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 316,\n y_min: 0,\n y_max: 46,\n ha: 46,\n o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 316,\n y_min: -46,\n y_max: 0,\n ha: 46,\n o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 78,\n y_min: 0,\n y_max: 78,\n ha: 78,\n o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 78,\n y_min: -78,\n y_max: 0,\n ha: 78,\n o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 127,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 127,\n y_min: -248,\n y_max: 0,\n ha: 248,\n o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z',\n },\n articMarcatoAbove: {\n x_min: 1,\n x_max: 296,\n y_min: 0,\n y_max: 253,\n ha: 253,\n o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 295,\n y_min: -253,\n y_max: 0,\n ha: 253,\n o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 622,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 622,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 623,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 623,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 842,\n y_min: 0,\n y_max: 549,\n ha: 549,\n o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 842,\n y_min: -549,\n y_max: 0,\n ha: 549,\n o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 642,\n y_min: 0,\n y_max: 454,\n ha: 454,\n o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 642,\n y_min: -454,\n y_max: 0,\n ha: 454,\n o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 321,\n ha: 321,\n o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z',\n },\n caesura: {\n x_min: 0,\n x_max: 380,\n y_min: 0,\n y_max: 490,\n ha: 490,\n o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 368,\n y_min: 0,\n y_max: 491,\n ha: 491,\n o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 450,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: -11,\n y_max: 262,\n ha: 273,\n o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 325,\n y_min: -131,\n y_max: 5,\n ha: 136,\n o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z',\n },\n restWholeLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -122,\n y_max: 14,\n ha: 136,\n o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -4,\n y_max: 132,\n ha: 136,\n o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z',\n },\n restHalfLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -14,\n y_max: 122,\n ha: 136,\n o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 235,\n y_min: -331,\n y_max: 401,\n ha: 732,\n o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 276,\n y_min: -255,\n y_max: 204,\n ha: 459,\n o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z',\n },\n rest16th: {\n x_min: 1,\n x_max: 344,\n y_min: -507,\n y_max: 204,\n ha: 711,\n o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 391,\n y_min: -507,\n y_max: 460,\n ha: 967,\n o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -758,\n y_max: 464,\n ha: 1222,\n o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z',\n },\n rest128th: {\n x_min: -1,\n x_max: 475,\n y_min: -759,\n y_max: 717,\n ha: 1476,\n o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z',\n },\n dynamicPiano: {\n x_min: -95,\n x_max: 317,\n y_min: -163,\n y_max: 263,\n ha: 426,\n o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z',\n },\n dynamicMezzo: {\n x_min: -7,\n x_max: 374,\n y_min: -2,\n y_max: 251,\n ha: 253,\n o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z',\n },\n dynamicForte: {\n x_min: -137,\n x_max: 334,\n y_min: -193,\n y_max: 421,\n ha: 614,\n o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z',\n },\n dynamicRinforzando: {\n x_min: -12,\n x_max: 230,\n y_min: 0,\n y_max: 254,\n ha: 254,\n o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 208,\n y_min: -5,\n y_max: 263,\n ha: 268,\n o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z',\n },\n dynamicZ: {\n x_min: -42,\n x_max: 239,\n y_min: -1,\n y_max: 258,\n ha: 259,\n o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z',\n },\n ornamentTrill: {\n x_min: -12,\n x_max: 383,\n y_min: 0,\n y_max: 383,\n ha: 383,\n o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 456,\n y_min: 0,\n y_max: 232,\n ha: 232,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 456,\n y_min: -80,\n y_max: 313,\n ha: 393,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 473,\n y_min: -77,\n y_max: 316,\n ha: 393,\n o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 680,\n y_min: 0,\n y_max: 388,\n ha: 388,\n o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 248,\n ha: 406,\n o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 321,\n ha: 479,\n o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 662,\n y_min: 0,\n y_max: 406,\n ha: 406,\n o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 857,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 565,\n y_min: -171,\n y_max: 249,\n ha: 420,\n o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 280,\n y_min: 0,\n y_max: 280,\n ha: 280,\n o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 315,\n y_min: 0,\n y_max: 293,\n ha: 293,\n o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 343,\n ha: 343,\n o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 181,\n y_min: 0,\n y_max: 181,\n ha: 181,\n o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 981,\n y_min: -10,\n y_max: 545,\n ha: 555,\n o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 242,\n y_min: 0,\n y_max: 164,\n ha: 164,\n o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 735,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1243,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 501,\n y_min: 0,\n y_max: 501,\n ha: 501,\n o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z',\n },\n csymHalfDiminished: {\n x_min: -1,\n x_max: 502,\n y_min: -1,\n y_max: 502,\n ha: 503,\n o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z',\n },\n csymAugmented: {\n x_min: 1,\n x_max: 321,\n y_min: 90,\n y_max: 410,\n ha: 320,\n o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 500,\n y_min: 10,\n y_max: 490,\n ha: 480,\n o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 160,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 416,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n },\n fontFamily: 'Leland',\n resolution: 1000,\n generatedOn: '2022-12-19T23:52:37.756Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow.js statically bundles & preloads all of our music engraving fonts.\nimport { loadBravura } from './load_bravura';\nimport { loadCustom } from './load_custom';\nimport { loadGonville } from './load_gonville';\nimport { loadLeland } from './load_leland';\nimport { loadPetaluma } from './load_petaluma';\n// ADD_MUSIC_FONT\n// import { loadXXX } from './load_xxx';\n// Populate our font \"database\" with all our music fonts.\nexport function loadAllMusicFonts() {\n loadBravura();\n loadGonville();\n loadPetaluma();\n loadCustom();\n loadLeland();\n // ADD_MUSIC_FONT\n // loadXXX();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base.\n// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts\n// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js).\n// ADD_MUSIC_FONT\n// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts.\n// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts.\n// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js\n// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary.\nimport { Font } from '../font';\nimport { BravuraFont } from './bravura_glyphs';\nimport { CommonMetrics } from './common_metrics';\nexport function loadBravura() {\n Font.load('Bravura', BravuraFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { CustomFont } from './custom_glyphs';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { GonvilleSmuflFont } from './gonville_glyphs';\nexport function loadGonville() {\n Font.load('Gonville', GonvilleSmuflFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { LelandFont } from './leland_glyphs';\nexport function loadLeland() {\n Font.load('Leland', LelandFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { PetalumaFont } from './petaluma_glyphs';\nconst petalumaChordMetrics = {\n csymDiminished: {\n leftSideBearing: -95,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: -25,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 150,\n },\n csymParensRightTall: {\n leftSideBearing: 40,\n advanceWidth: 189,\n yOffset: 150,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 210,\n yOffset: 250,\n },\n csymParensRightVeryTall: {\n leftSideBearing: -100,\n advanceWidth: 111,\n yOffset: 250,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 100,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 0,\n advanceWidth: 425,\n yOffset: -422,\n },\n accidentalFlat: {\n leftSideBearing: -10,\n advanceWidth: 228,\n yOffset: -284,\n },\n};\nexport function loadPetaluma() {\n const metrics = JSON.parse(JSON.stringify(CommonMetrics));\n const chordMetrics = metrics.chordSymbol;\n if (chordMetrics) {\n chordMetrics.glyphs = petalumaChordMetrics;\n }\n Font.load('Petaluma', PetalumaFont, metrics);\n}\n","export const PetalumaFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 508,\n y_min: 0,\n y_max: 370,\n ha: 370,\n o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 496,\n y_min: -393,\n y_max: 0,\n ha: 393,\n o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 56,\n y_min: 877,\n y_max: 1122,\n ha: 245,\n o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 568,\n y_min: 0,\n y_max: 621,\n ha: 621,\n o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z',\n },\n segno: {\n x_min: 0,\n x_max: 798,\n y_min: -65,\n y_max: 806,\n ha: 871,\n o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z',\n },\n coda: {\n x_min: 0,\n x_max: 1380,\n y_min: -196,\n y_max: 1037,\n ha: 1233,\n o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z',\n },\n gClef: {\n x_min: 0,\n x_max: 664,\n y_min: -559,\n y_max: 1009,\n ha: 1568,\n o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z',\n },\n cClef: {\n x_min: 0,\n x_max: 731,\n y_min: -543,\n y_max: 543,\n ha: 1086,\n o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z',\n },\n fClef: {\n x_min: 0,\n x_max: 776,\n y_min: -496,\n y_max: 216,\n ha: 712,\n o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 379,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 438,\n y_min: -768,\n y_max: 767,\n ha: 1535,\n o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 513,\n y_min: -358,\n y_max: 359,\n ha: 717,\n o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 283,\n y_min: -364,\n y_max: 366,\n ha: 730,\n o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 660,\n y_min: -379,\n y_max: 382,\n ha: 761,\n o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 540,\n y_min: -392,\n y_max: 392,\n ha: 784,\n o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 633,\n y_min: -490,\n y_max: 491,\n ha: 981,\n o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 583,\n y_min: -389,\n y_max: 389,\n ha: 778,\n o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 565,\n y_min: -363,\n y_max: 363,\n ha: 726,\n o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 592,\n y_min: -345,\n y_max: 345,\n ha: 690,\n o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 504,\n y_min: -428,\n y_max: 428,\n ha: 856,\n o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 494,\n y_min: -421,\n y_max: 421,\n ha: 842,\n o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z',\n },\n timeSigCommon: {\n x_min: 20,\n x_max: 585,\n y_min: -298,\n y_max: 294,\n ha: 592,\n o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z',\n },\n timeSigCutCommon: {\n x_min: 20,\n x_max: 695,\n y_min: -687,\n y_max: 687,\n ha: 1374,\n o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 661,\n y_min: -358,\n y_max: 358,\n ha: 716,\n o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 418,\n y_min: -197,\n y_max: 199,\n ha: 396,\n o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 662,\n y_min: -54,\n y_max: 55,\n ha: 109,\n o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 274,\n y_min: -723,\n y_max: 725,\n ha: 1448,\n o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 154,\n y_min: -422,\n y_max: 422,\n ha: 844,\n o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z',\n },\n timeSigParensLeft: {\n x_min: 1,\n x_max: 400,\n y_min: -728,\n y_max: 728,\n ha: 1456,\n o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 173,\n y_min: -405,\n y_max: 404,\n ha: 809,\n o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 614,\n y_min: -223,\n y_max: 223,\n ha: 446,\n o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 380,\n y_min: -186,\n y_max: 165,\n ha: 351,\n o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -174,\n y_max: 175,\n ha: 349,\n o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 730,\n y_min: -266,\n y_max: 267,\n ha: 533,\n o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 506,\n y_min: -143,\n y_max: 144,\n ha: 287,\n o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 421,\n y_min: -146,\n y_max: 151,\n ha: 297,\n o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 289,\n y_min: -156,\n y_max: 157,\n ha: 313,\n o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -220,\n y_max: 219,\n ha: 439,\n o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 323,\n y_min: -190,\n y_max: 184,\n ha: 374,\n o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 309,\n y_min: -179,\n y_max: 179,\n ha: 358,\n o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 344,\n y_min: -179,\n y_max: 175,\n ha: 354,\n o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 672,\n y_min: -291,\n y_max: 291,\n ha: 582,\n o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z',\n },\n noteheadCircledWhole: {\n x_min: -50,\n x_max: 472,\n y_min: -231,\n y_max: 232,\n ha: 463,\n o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z',\n },\n noteheadCircledHalf: {\n x_min: -50,\n x_max: 393,\n y_min: -175,\n y_max: 175,\n ha: 350,\n o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z',\n },\n noteheadCircledBlack: {\n x_min: -70,\n x_max: 326,\n y_min: -168,\n y_max: 192,\n ha: 360,\n o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 474,\n y_min: -209,\n y_max: 211,\n ha: 420,\n o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 350,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 342,\n y_min: -130,\n y_max: 132,\n ha: 262,\n o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 697,\n y_min: -290,\n y_max: 290,\n ha: 580,\n o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z',\n },\n noteheadSlashedWhole1: {\n x_min: -76,\n x_max: 498,\n y_min: -168,\n y_max: 168,\n ha: 336,\n o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z',\n },\n noteheadSlashedHalf1: {\n x_min: -79,\n x_max: 471,\n y_min: -184,\n y_max: 184,\n ha: 368,\n o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z',\n },\n noteheadSlashedBlack1: {\n x_min: -110,\n x_max: 452,\n y_min: -190,\n y_max: 190,\n ha: 380,\n o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 697,\n y_min: -295,\n y_max: 295,\n ha: 590,\n o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z',\n },\n noteheadSlashedWhole2: {\n x_min: -83,\n x_max: 510,\n y_min: -201,\n y_max: 198,\n ha: 399,\n o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 454,\n y_min: -188,\n y_max: 188,\n ha: 376,\n o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z',\n },\n noteheadSlashedBlack2: {\n x_min: -84,\n x_max: 405,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 429,\n y_min: -221,\n y_max: 221,\n ha: 442,\n o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 271,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z',\n },\n noteheadParenthesis: {\n x_min: -70,\n x_max: 329,\n y_min: -196,\n y_max: 201,\n ha: 397,\n o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z',\n },\n noteheadParenthesisRight: {\n x_min: -30,\n x_max: 82,\n y_min: -199,\n y_max: 206,\n ha: 405,\n o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 106,\n y_min: -197,\n y_max: 197,\n ha: 394,\n o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 328,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 391,\n y_min: -142,\n y_max: 142,\n ha: 284,\n o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 398,\n y_min: -139,\n y_max: 140,\n ha: 279,\n o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 96,\n y_min: -57,\n y_max: 57,\n ha: 114,\n o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z',\n },\n tremolo1: {\n x_min: -158,\n x_max: 156,\n y_min: -88,\n y_max: 88,\n ha: 176,\n o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 261,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 327,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 327,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 268,\n y_min: -849,\n y_max: 149,\n ha: 999,\n o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z',\n },\n flag32ndDown: {\n x_min: -3,\n x_max: 268,\n y_min: -169,\n y_max: 829,\n ha: 999,\n o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z',\n },\n flag64thUp: {\n x_min: -4,\n x_max: 282,\n y_min: -824,\n y_max: 347,\n ha: 1171,\n o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z',\n },\n flag64thDown: {\n x_min: -5,\n x_max: 281,\n y_min: -375,\n y_max: 796,\n ha: 1171,\n o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 252,\n y_min: -804,\n y_max: 530,\n ha: 1334,\n o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z',\n },\n flag128thDown: {\n x_min: -1,\n x_max: 252,\n y_min: -580,\n y_max: 754,\n ha: 1334,\n o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z',\n },\n accidentalFlat: {\n x_min: 1,\n x_max: 209,\n y_min: -208,\n y_max: 472,\n ha: 680,\n o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 214,\n y_min: -456,\n y_max: 462,\n ha: 918,\n o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z',\n },\n accidentalSharp: {\n x_min: -22,\n x_max: 390,\n y_min: -384,\n y_max: 383,\n ha: 767,\n o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 287,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 359,\n y_min: -220,\n y_max: 446,\n ha: 666,\n o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 130,\n y_min: -270,\n y_max: 268,\n ha: 538,\n o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 139,\n y_min: -275,\n y_max: 277,\n ha: 552,\n o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 208,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: -23,\n x_max: 388,\n y_min: -373,\n y_max: 445,\n ha: 818,\n o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -248,\n y_max: 432,\n ha: 680,\n o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: -1,\n x_max: 467,\n y_min: -460,\n y_max: 350,\n ha: 810,\n o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z',\n },\n accidentalBakiyeFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -236,\n y_max: 444,\n ha: 680,\n o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 359,\n y_min: -420,\n y_max: 343,\n ha: 763,\n o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 303,\n y_min: -462,\n y_max: 180,\n ha: 642,\n o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 434,\n y_min: -295,\n y_max: 325,\n ha: 620,\n o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 425,\n y_min: 0,\n y_max: 326,\n ha: 326,\n o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 425,\n y_min: -326,\n y_max: 0,\n ha: 326,\n o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 471,\n y_min: 0,\n y_max: 56,\n ha: 56,\n o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 471,\n y_min: -59,\n y_max: -3,\n ha: 56,\n o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z',\n },\n articStaccatoAbove: {\n x_min: 1,\n x_max: 112,\n y_min: 0,\n y_max: 156,\n ha: 156,\n o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z',\n },\n articStaccatoBelow: {\n x_min: 1,\n x_max: 112,\n y_min: -156,\n y_max: 0,\n ha: 156,\n o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 139,\n y_min: 0,\n y_max: 411,\n ha: 411,\n o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 139,\n y_min: -411,\n y_max: 0,\n ha: 411,\n o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z',\n },\n articMarcatoAbove: {\n x_min: 0,\n x_max: 396,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 396,\n y_min: -328,\n y_max: 0,\n ha: 328,\n o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 472,\n y_min: 2,\n y_max: 454,\n ha: 452,\n o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 519,\n y_min: -430,\n y_max: -1,\n ha: 429,\n o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 591,\n y_min: -6,\n y_max: 337,\n ha: 343,\n o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 602,\n y_min: -335,\n y_max: 7,\n ha: 342,\n o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: -14,\n y_max: 437,\n ha: 451,\n o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 686,\n y_min: -427,\n y_max: 30,\n ha: 457,\n o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 711,\n y_min: -31,\n y_max: 496,\n ha: 527,\n o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 697,\n y_min: -475,\n y_max: 13,\n ha: 488,\n o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 545,\n y_min: -18,\n y_max: 348,\n ha: 366,\n o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 565,\n y_min: -335,\n y_max: 10,\n ha: 345,\n o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 148,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z',\n },\n breathMarkUpbow: {\n x_min: 0,\n x_max: 254,\n y_min: 0,\n y_max: 595,\n ha: 595,\n o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z',\n },\n caesura: {\n x_min: 0,\n x_max: 566,\n y_min: 0,\n y_max: 562,\n ha: 563,\n o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 386,\n y_min: -10,\n y_max: 584,\n ha: 594,\n o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 366,\n y_min: -255,\n y_max: 255,\n ha: 510,\n o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 249,\n ha: 249,\n o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z',\n },\n restWhole: {\n x_min: 1,\n x_max: 500,\n y_min: -120,\n y_max: 14,\n ha: 134,\n o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z',\n },\n restWholeLegerLine: {\n x_min: -197,\n x_max: 685,\n y_min: -157,\n y_max: 29,\n ha: 186,\n o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 518,\n y_min: 0,\n y_max: 162,\n ha: 162,\n o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z',\n },\n restHalfLegerLine: {\n x_min: -120,\n x_max: 448,\n y_min: -20,\n y_max: 143,\n ha: 163,\n o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 263,\n y_min: -415,\n y_max: 415,\n ha: 830,\n o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 289,\n y_min: -260,\n y_max: 261,\n ha: 521,\n o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 333,\n y_min: -328,\n y_max: 244,\n ha: 572,\n o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 347,\n y_min: -498,\n y_max: 483,\n ha: 981,\n o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 428,\n y_min: -720,\n y_max: 474,\n ha: 1194,\n o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z',\n },\n rest128th: {\n x_min: 1,\n x_max: 491,\n y_min: -711,\n y_max: 719,\n ha: 1430,\n o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z',\n },\n dynamicPiano: {\n x_min: -49,\n x_max: 327,\n y_min: -142,\n y_max: 515,\n ha: 657,\n o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z',\n },\n dynamicMezzo: {\n x_min: -18,\n x_max: 559,\n y_min: -50,\n y_max: 365,\n ha: 415,\n o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z',\n },\n dynamicForte: {\n x_min: -144,\n x_max: 311,\n y_min: -115,\n y_max: 504,\n ha: 619,\n o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z',\n },\n dynamicRinforzando: {\n x_min: -75,\n x_max: 322,\n y_min: -90,\n y_max: 325,\n ha: 415,\n o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 296,\n y_min: 0,\n y_max: 379,\n ha: 379,\n o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z',\n },\n dynamicZ: {\n x_min: -43,\n x_max: 331,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z',\n },\n ornamentTrill: {\n x_min: 1,\n x_max: 551,\n y_min: -18,\n y_max: 539,\n ha: 557,\n o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 574,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 574,\n y_min: -106,\n y_max: 405,\n ha: 511,\n o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 700,\n y_min: 0,\n y_max: 497,\n ha: 497,\n o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 747,\n y_min: 0,\n y_max: 243,\n ha: 243,\n o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 982,\n y_min: 0,\n y_max: 224,\n ha: 224,\n o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1066,\n y_min: -50,\n y_max: 533,\n ha: 583,\n o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 1088,\n y_min: -380,\n y_max: 252,\n ha: 632,\n o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1185,\n y_min: -380,\n y_max: 465,\n ha: 845,\n o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 1003,\n y_min: -20,\n y_max: 521,\n ha: 541,\n o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1246,\n y_min: -30,\n y_max: 296,\n ha: 326,\n o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1226,\n y_min: -237,\n y_max: 436,\n ha: 673,\n o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 833,\n y_min: -309,\n y_max: 319,\n ha: 628,\n o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z',\n },\n brassScoop: {\n x_min: 0,\n x_max: 312,\n y_min: -390,\n y_max: 28,\n ha: 418,\n o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 476,\n y_min: -50,\n y_max: 333,\n ha: 383,\n o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z',\n },\n brassFallLipShort: {\n x_min: 0,\n x_max: 298,\n y_min: -344,\n y_max: 65,\n ha: 409,\n o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 807,\n y_min: 0,\n y_max: 838,\n ha: 838,\n o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 791,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 381,\n y_min: 0,\n y_max: 367,\n ha: 367,\n o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 274,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z',\n },\n brassMuteOpen: {\n x_min: 1,\n x_max: 313,\n y_min: 0,\n y_max: 309,\n ha: 309,\n o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 402,\n y_min: 0,\n y_max: 361,\n ha: 361,\n o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 646,\n y_min: 0,\n y_max: 212,\n ha: 212,\n o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z',\n },\n brassSmear: {\n x_min: 0,\n x_max: 334,\n y_min: 0,\n y_max: 151,\n ha: 151,\n o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 366,\n ha: 366,\n o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 219,\n y_min: 0,\n y_max: 489,\n ha: 489,\n o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 202,\n ha: 202,\n o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 201,\n y_min: 0,\n y_max: 325,\n ha: 325,\n o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 211,\n y_min: 0,\n y_max: 307,\n ha: 307,\n o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 271,\n y_min: 0,\n y_max: 284,\n ha: 284,\n o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 944,\n y_min: -13,\n y_max: 550,\n ha: 563,\n o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 437,\n y_min: 0,\n y_max: 461,\n ha: 461,\n o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 147,\n y_min: 0,\n y_max: 242,\n ha: 242,\n o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 300,\n y_min: 0,\n y_max: 176,\n ha: 176,\n o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z',\n },\n arpeggiatoUp: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 1459,\n ha: 1459,\n o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z',\n },\n arpeggiatoDown: {\n x_min: 0,\n x_max: 218,\n y_min: 0,\n y_max: 1440,\n ha: 1440,\n o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 599,\n y_min: -250,\n y_max: 175,\n ha: 425,\n o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 775,\n y_min: -247,\n y_max: 363,\n ha: 610,\n o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1374,\n y_min: -304,\n y_max: 304,\n ha: 608,\n o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 630,\n y_min: -225,\n y_max: 265,\n ha: 490,\n o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 506,\n y_min: 0,\n y_max: 500,\n ha: 500,\n o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z',\n },\n csymHalfDiminished: {\n x_min: -32,\n x_max: 496,\n y_min: -33,\n y_max: 492,\n ha: 525,\n o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 530,\n y_min: 0,\n y_max: 539,\n ha: 539,\n o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 593,\n y_min: 0,\n y_max: 569,\n ha: 569,\n o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 482,\n y_min: 193,\n y_max: 265,\n ha: 72,\n o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z',\n },\n csymParensLeftTall: {\n x_min: 0,\n x_max: 185,\n y_min: 0,\n y_max: 1034,\n ha: 1034,\n o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z',\n },\n csymParensRightTall: {\n x_min: -40,\n x_max: 189,\n y_min: 0,\n y_max: 1058,\n ha: 1058,\n o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 328,\n y_min: 2,\n y_max: 807,\n ha: 805,\n o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 829,\n ha: 829,\n o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 116,\n y_min: 0,\n y_max: 934,\n ha: 934,\n o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z',\n },\n csymParensRightVeryTall: {\n x_min: -20,\n x_max: 111,\n y_min: 0,\n y_max: 1009,\n ha: 1009,\n o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 990,\n y_min: -27,\n y_max: 1028,\n ha: 1054,\n o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 208,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 335,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 298,\n y_min: -218,\n y_max: 218,\n ha: 436,\n o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 284,\n y_min: -163,\n y_max: 163,\n ha: 326,\n o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z',\n },\n },\n fontFamily: 'Petaluma',\n resolution: 1000,\n generatedOn: '2022-12-18T09:07:50.817Z',\n};\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\nexport { Formatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\nexport { Fraction };\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { FretHandFinger };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\nexport { Glyph };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\nexport { GraceNoteGroup };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport * from './accidental';\nexport * from './annotation';\nexport * from './articulation';\nexport * from './barnote';\nexport * from './beam';\nexport * from './bend';\nexport * from './boundingbox';\nexport * from './boundingboxcomputation';\nexport * from './canvascontext';\nexport * from './chordsymbol';\nexport * from './clef';\nexport * from './clefnote';\nexport * from './crescendo';\nexport * from './curve';\nexport * from './dot';\nexport * from './easyscore';\nexport * from './element';\nexport * from './factory';\nexport * from './flow';\nexport * from './font';\n// Do not export './fonts/*' because they are used by the entry/* files.\nexport * from './formatter';\nexport * from './fraction';\nexport * from './frethandfinger';\nexport * from './ghostnote';\nexport * from './glyph';\nexport * from './glyphnote';\nexport * from './gracenote';\nexport * from './gracenotegroup';\nexport * from './gracetabnote';\nexport * from './keymanager';\nexport * from './keysignature';\nexport * from './keysignote';\nexport * from './modifier';\nexport * from './modifiercontext';\nexport * from './multimeasurerest';\nexport * from './music';\nexport * from './note';\nexport * from './notehead';\nexport * from './notesubgroup';\nexport * from './ornament';\nexport * from './parenthesis';\nexport * from './parser';\nexport * from './pedalmarking';\nexport * from './registry';\nexport * from './rendercontext';\nexport * from './renderer';\nexport * from './repeatnote';\nexport * from './stave';\nexport * from './stavebarline';\nexport * from './staveconnector';\nexport * from './stavehairpin';\nexport * from './staveline';\nexport * from './stavemodifier';\nexport * from './stavenote';\nexport * from './staverepetition';\nexport * from './stavesection';\nexport * from './stavetempo';\nexport * from './stavetext';\nexport * from './stavetie';\nexport * from './stavevolta';\nexport * from './stem';\nexport * from './stemmablenote';\nexport * from './stringnumber';\nexport * from './strokes';\nexport * from './svgcontext';\nexport * from './system';\n// Do not export './tables' because it is internal. Its public API is accessible via Vex.Flow.*.\nexport * from './tabnote';\nexport * from './tabslide';\nexport * from './tabstave';\nexport * from './tabtie';\nexport * from './textbracket';\nexport * from './textdynamics';\nexport * from './textformatter';\nexport * from './textnote';\nexport * from './tickable';\nexport * from './tickcontext';\nexport * from './timesigglyph';\nexport * from './timesignature';\nexport * from './timesignote';\nexport * from './tremolo';\nexport * from './tuning';\nexport * from './tuplet';\nexport * from './typeguard';\nexport * from './util';\n// Do not export './version'. It is accessible via Vex.Flow.BUILD.\nexport * from './vex';\nexport * from './vibrato';\nexport * from './vibratobracket';\nexport * from './voice';\nexport * from './web';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nclass KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\nexport { KeySignature };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\nexport { ModifierContext };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\nexport { NoteHead };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - stave.getNoteStartX();\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const tickables = note.getVoice().getTickables();\n const index = tickables.indexOf(note);\n const nextContext = index + 1 < tickables.length ? tickables[index + 1].checkTickContext() : undefined;\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - glyphX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\nexport { Ornament };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = (_b = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : Note.getPoint('gracenote');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\nexport { Parser };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\nexport { PedalMarking };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\nexport { Renderer };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nclass Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n /**\n * treat the stave as if the clef is clefSpec, but don't display the clef\n */\n setClefLines(clefSpec) {\n this.clef = clefSpec;\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Stave };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\nexport { StaveConnector };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\nexport { StaveHairpin };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\nexport { StaveLine };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n return this._noteHeads;\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\nexport { StaveNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nclass Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n var _a;\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', {\n category: 'coda',\n });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: Tables.NOTATION_FONT_SCALE / 3,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\nexport { Repetition };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveSection };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveTempo };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { StaveText };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { StaveTie };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { Volta };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nclass Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\nexport { Stem };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n /**\n * The modifier context's left_shift state.\n */\n const left_shift = state.left_shift;\n /**\n * The modifier context's right_shift state.\n */\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let extraXSpaceForDisplacedNotehead = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (pos === Modifier.Position.LEFT) {\n extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: extraXSpaceForDisplacedNotehead,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n let num_x_shift = 0;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + extraXSpaceForDisplacedNotehead);\n num_x_shift = num_width; // spacing\n x_widthL = Math.max(num_x_shift, x_widthL);\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_x_shift += num_width; // spacing\n x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StringNumber };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { Stroke };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\nexport { SVGContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave -= options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\nexport { Tables };\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { TabSlide };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\nexport { TextBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\nexport { TextDynamics };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\nexport { TextFormatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\nexport { TextNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n doubleCBanjo: 'D/5,C/5,G/4,C/4,G/5',\n doubleDBanjo: 'E/5,D/5,A/4,D/4,A/5',\n sawmillBanjo: 'D/5,C/5,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\nexport { Vex };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\nexport { VibratoBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-debug.ts is the entry point for the build output file vexflow-debug.js.\n// It statically bundles all the music engraving fonts.\n// Currently, it is identical to vexflow.ts, but the webpack config inside Gruntfile.js\n// sets the webpack mode to 'development' to produce an unminified build.\n// In the future, we could do something different with this entry file, such as turn on flags for logging.\nimport { Flow } from '../src/flow';\nimport { loadAllMusicFonts } from '../src/fonts/load_all';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadAllMusicFonts();\nFlow.setMusicFont('Bravura', 'Gonville', 'Custom');\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-font-bravura.js b/build/cjs/vexflow-font-bravura.js new file mode 100644 index 0000000000..2bcdd016ff --- /dev/null +++ b/build/cjs/vexflow-font-bravura.js @@ -0,0 +1,2 @@ +!function(b,l){"object"==typeof exports&&"object"==typeof module?module.exports=l():"function"==typeof define&&define.amd?define([],l):"object"==typeof exports?exports.VexFlowFont=l():(b.VexFlowFont=b.VexFlowFont||{},b.VexFlowFont.Bravura=l())}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var b={d:(l,a)=>{for(var m in a)b.o(a,m)&&!b.o(l,m)&&Object.defineProperty(l,m,{enumerable:!0,get:a[m]})},o:(b,l)=>Object.prototype.hasOwnProperty.call(b,l)},l={};b.d(l,{default:()=>a});const a={data:{glyphs:{bracketTop:{x_min:0,x_max:469,y_min:0,y_max:295,ha:295,o:"m 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z"},bracketBottom:{x_min:0,x_max:469,y_min:-295,y_max:0,ha:295,o:"m 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z"},barlineTick:{x_min:0,x_max:36,y_min:868,y_max:1120,ha:252,o:"m 52 1250 l 52 1613 l 0 1613 l 0 1250 z"},breathMarkTick:{x_min:0,x_max:500,y_min:0,y_max:502,ha:502,o:"m 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z"},segno:{x_min:4,x_max:550,y_min:-27,y_max:759,ha:786,o:"m 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z"},coda:{x_min:-4,x_max:955,y_min:-158,y_max:898,ha:1056,o:"m 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z"},gClef:{x_min:0,x_max:671,y_min:-658,y_max:1098,ha:1756,o:"m 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z"},cClef:{x_min:0,x_max:699,y_min:-506,y_max:506,ha:1012,o:"m 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z"},fClef:{x_min:-5,x_max:684,y_min:-635,y_max:262,ha:897,o:"m 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z"},unpitchedPercussionClef1:{x_min:0,x_max:382,y_min:-250,y_max:250,ha:500,o:"m 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z"},"6stringTabClef":{x_min:-3,x_max:408,y_min:-748,y_max:764,ha:1512,o:"m 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z"},timeSig0:{x_min:20,x_max:450,y_min:-250,y_max:251,ha:501,o:"m 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z"},timeSig1:{x_min:20,x_max:314,y_min:-250,y_max:251,ha:501,o:"m 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z"},timeSig2:{x_min:20,x_max:426,y_min:-257,y_max:254,ha:511,o:"m 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z"},timeSig3:{x_min:20,x_max:401,y_min:-251,y_max:249,ha:500,o:"m 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z"},timeSig4:{x_min:20,x_max:450,y_min:-250,y_max:251,ha:501,o:"m 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z"},timeSig5:{x_min:20,x_max:383,y_min:-251,y_max:246,ha:497,o:"m 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z"},timeSig6:{x_min:20,x_max:414,y_min:-249,y_max:251,ha:500,o:"m 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z"},timeSig7:{x_min:20,x_max:421,y_min:-250,y_max:249,ha:499,o:"m 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z"},timeSig8:{x_min:20,x_max:416,y_min:-259,y_max:259,ha:518,o:"m 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z"},timeSig9:{x_min:20,x_max:414,y_min:-249,y_max:251,ha:500,o:"m 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z"},timeSigCommon:{x_min:5,x_max:424,y_min:-249,y_max:251,ha:500,o:"m 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z"},timeSigCutCommon:{x_min:0,x_max:418,y_min:-359,y_max:361,ha:720,o:"m 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z"},timeSigPlus:{x_min:-1,x_max:499,y_min:-250,y_max:250,ha:500,o:"m 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z"},timeSigPlusSmall:{x_min:-1,x_max:255,y_min:-133,y_max:123,ha:256,o:"m 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z"},timeSigMinus:{x_min:0,x_max:448,y_min:-35,y_max:40,ha:75,o:"m 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z"},timeSigParensRight:{x_min:0,x_max:184,y_min:-489,y_max:491,ha:980,o:"m 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z"},timeSigParensRightSmall:{x_min:0,x_max:110,y_min:-251,y_max:249,ha:500,o:"m 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z"},timeSigParensLeft:{x_min:0,x_max:184,y_min:-489,y_max:491,ha:980,o:"m 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z"},timeSigParensLeftSmall:{x_min:0,x_max:110,y_min:-251,y_max:249,ha:500,o:"m 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z"},noteheadDoubleWhole:{x_min:0,x_max:599,y_min:-155,y_max:155,ha:310,o:"m 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z"},noteheadWhole:{x_min:0,x_max:422,y_min:-125,y_max:125,ha:250,o:"m 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z"},noteheadHalf:{x_min:0,x_max:295,y_min:-125,y_max:125,ha:250,o:"m 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z"},noteheadBlack:{x_min:0,x_max:295,y_min:-125,y_max:125,ha:250,o:"m 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z"},noteheadXDoubleWhole:{x_min:0,x_max:546,y_min:-155,y_max:155,ha:310,o:"m 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z"},noteheadXWhole:{x_min:0,x_max:377,y_min:-125,y_max:125,ha:250,o:"m 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z"},noteheadXHalf:{x_min:0,x_max:334,y_min:-125,y_max:125,ha:250,o:"m 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z"},noteheadXBlack:{x_min:0,x_max:290,y_min:-125,y_max:125,ha:250,o:"m 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z"},noteheadCircleXDoubleWhole:{x_min:0,x_max:422,y_min:-155,y_max:155,ha:310,o:"m 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z"},noteheadCircleXWhole:{x_min:0,x_max:249,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z"},noteheadCircleXHalf:{x_min:0,x_max:250,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z"},noteheadCircleX:{x_min:0,x_max:249,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z"},noteheadCircledDoubleWhole:{x_min:0,x_max:603,y_min:-218,y_max:213,ha:431,o:"m 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z"},noteheadCircledWhole:{x_min:0,x_max:437,y_min:-225,y_max:211,ha:436,o:"m 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z"},noteheadCircledHalf:{x_min:-18,x_max:311,y_min:-162,y_max:167,ha:329,o:"m 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z"},noteheadCircledBlack:{x_min:-21,x_max:321,y_min:-171,y_max:167,ha:338,o:"m 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:416,y_min:-190,y_max:198,ha:388,o:"m 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z"},noteheadSquareWhite:{x_min:0,x_max:313,y_min:-125,y_max:125,ha:250,o:"m 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z"},noteheadSquareBlack:{x_min:0,x_max:313,y_min:-125,y_max:125,ha:250,o:"m 451 -180 l 451 180 l 0 180 l 0 -180 z"},noteheadTriangleDownDoubleWhole:{x_min:0,x_max:483,y_min:-155,y_max:155,ha:310,o:"m 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z"},noteheadTriangleDownWhole:{x_min:0,x_max:319,y_min:-125,y_max:125,ha:250,o:"m 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z"},noteheadTriangleDownHalf:{x_min:0,x_max:285,y_min:-125,y_max:125,ha:250,o:"m 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z"},noteheadTriangleDownBlack:{x_min:0,x_max:292,y_min:-125,y_max:125,ha:250,o:"m 207 -180 l 420 180 l 0 180 z"},noteheadTriangleUpDoubleWhole:{x_min:0,x_max:483,y_min:-155,y_max:155,ha:310,o:"m 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z"},noteheadTriangleUpWhole:{x_min:0,x_max:319,y_min:-125,y_max:125,ha:250,o:"m 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z"},noteheadTriangleUpHalf:{x_min:0,x_max:285,y_min:-125,y_max:125,ha:250,o:"m 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z"},noteheadTriangleUpBlack:{x_min:0,x_max:293,y_min:-125,y_max:125,ha:250,o:"m 422 -180 l 207 180 l 0 -180 z"},noteheadSlashedDoubleWhole1:{x_min:0,x_max:596,y_min:-179,y_max:168,ha:347,o:"m 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z"},noteheadSlashedWhole1:{x_min:-22,x_max:433,y_min:-157,y_max:148,ha:305,o:"m 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z"},noteheadSlashedHalf1:{x_min:-67,x_max:386,y_min:-142,y_max:160,ha:302,o:"m 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z"},noteheadSlashedBlack1:{x_min:-80,x_max:375,y_min:-165,y_max:167,ha:332,o:"m 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z"},noteheadSlashedDoubleWhole2:{x_min:0,x_max:596,y_min:-178,y_max:169,ha:347,o:"m 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z"},noteheadSlashedWhole2:{x_min:-18,x_max:436,y_min:-154,y_max:151,ha:305,o:"m 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z"},noteheadSlashedHalf2:{x_min:-73,x_max:380,y_min:-134,y_max:168,ha:302,o:"m 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z"},noteheadSlashedBlack2:{x_min:-79,x_max:376,y_min:-164,y_max:168,ha:332,o:"m 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:432,y_min:-155,y_max:155,ha:310,o:"m 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z"},noteheadDiamondWhole:{x_min:0,x_max:270,y_min:-125,y_max:125,ha:250,o:"m 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z"},noteheadDiamondHalf:{x_min:0,x_max:251,y_min:-125,y_max:125,ha:250,o:"m 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z"},noteheadDiamondBlack:{x_min:0,x_max:250,y_min:-125,y_max:125,ha:250,o:"m 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z"},noteheadParenthesis:{x_min:-73,x_max:368,y_min:-180,y_max:182,ha:362,o:"m 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z"},noteheadParenthesisRight:{x_min:-36,x_max:73,y_min:-181,y_max:181,ha:362,o:"m -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z"},noteheadParenthesisLeft:{x_min:0,x_max:109,y_min:-181,y_max:181,ha:362,o:"m 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z"},noteheadMoonBlack:{x_min:0,x_max:315,y_min:-125,y_max:125,ha:250,o:"m 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:339,y_min:-125,y_max:125,ha:250,o:"m 488 -180 l 0 180 l 0 -180 z"},noteheadTriangleRightBlack:{x_min:0,x_max:339,y_min:-125,y_max:125,ha:250,o:"m 488 180 l 0 -180 l 488 -180 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:278,y_min:-125,y_max:125,ha:250,o:"m 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z"},augmentationDot:{x_min:0,x_max:100,y_min:-50,y_max:50,ha:100,o:"m 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z"},tremolo1:{x_min:-150,x_max:150,y_min:-93,y_max:94,ha:187,o:"m 216 -45 l 216 135 l -216 46 l -216 -134 z"},flag8thUp:{x_min:0,x_max:264,y_min:-810,y_max:9,ha:819,o:"m 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z"},flag8thDown:{x_min:0,x_max:306,y_min:-14,y_max:808,ha:822,o:"m 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z"},flag16thUp:{x_min:0,x_max:279,y_min:-813,y_max:2,ha:815,o:"m 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z"},flag16thDown:{x_min:0,x_max:291,y_min:-9,y_max:812,ha:821,o:"m 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z"},flag32ndUp:{x_min:0,x_max:261,y_min:-812,y_max:149,ha:961,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag32ndDown:{x_min:0,x_max:273,y_min:-172,y_max:812,ha:984,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z"},flag64thUp:{x_min:0,x_max:261,y_min:-812,y_max:347,ha:1159,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag64thDown:{x_min:0,x_max:273,y_min:-376,y_max:812,ha:1188,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z"},flag128thUp:{x_min:0,x_max:261,y_min:-812,y_max:533,ha:1345,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag128thDown:{x_min:0,x_max:273,y_min:-580,y_max:812,ha:1392,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z"},accidentalFlat:{x_min:0,x_max:226,y_min:-175,y_max:439,ha:614,o:"m 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z"},accidentalNatural:{x_min:0,x_max:168,y_min:-335,y_max:341,ha:676,o:"m 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z"},accidentalSharp:{x_min:0,x_max:249,y_min:-348,y_max:350,ha:698,o:"m 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z"},accidentalDoubleSharp:{x_min:0,x_max:247,y_min:-125,y_max:127,ha:252,o:"m 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z"},accidentalDoubleFlat:{x_min:0,x_max:411,y_min:-175,y_max:437,ha:612,o:"m 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z"},accidentalParensLeft:{x_min:0,x_max:141,y_min:-248,y_max:247,ha:495,o:"m 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z"},accidentalParensRight:{x_min:0,x_max:141,y_min:-248,y_max:247,ha:495,o:"m 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z"},accidentalQuarterToneFlatStein:{x_min:1,x_max:227,y_min:-175,y_max:439,ha:614,o:"m 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:1,x_max:466,y_min:-175,y_max:439,ha:614,o:"m 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:179,y_min:-353,y_max:307,ha:660,o:"m 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z"},accidentalThreeQuarterTonesSharpStein:{x_min:3,x_max:317,y_min:-347,y_max:369,ha:716,o:"m 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z"},accidentalBuyukMucennebFlat:{x_min:1,x_max:287,y_min:-174,y_max:438,ha:612,o:"m 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z"},accidentalBuyukMucennebSharp:{x_min:0,x_max:341,y_min:-350,y_max:348,ha:698,o:"m 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z"},accidentalBakiyeFlat:{x_min:-1,x_max:286,y_min:-175,y_max:439,ha:614,o:"m 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z"},accidentalKomaSharp:{x_min:0,x_max:229,y_min:-337,y_max:322,ha:659,o:"m 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z"},accidentalKucukMucennebSharp:{x_min:-1,x_max:339,y_min:-338,y_max:321,ha:659,o:"m 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z"},accidentalKoron:{x_min:0,x_max:300,y_min:-472,y_max:157,ha:629,o:"m 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z"},accidentalSori:{x_min:0,x_max:421,y_min:-318,y_max:328,ha:646,o:"m 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z"},articAccentAbove:{x_min:0,x_max:339,y_min:1,y_max:245,ha:244,o:"m 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z"},articAccentBelow:{x_min:0,x_max:339,y_min:-244,y_max:0,ha:244,o:"m 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z"},articTenutoAbove:{x_min:-1,x_max:338,y_min:0,y_max:48,ha:48,o:"m 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z"},articTenutoBelow:{x_min:-1,x_max:338,y_min:-48,y_max:0,ha:48,o:"m 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z"},articStaccatoAbove:{x_min:0,x_max:84,y_min:0,y_max:84,ha:84,o:"m 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z"},articStaccatoBelow:{x_min:0,x_max:84,y_min:-84,y_max:0,ha:84,o:"m 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z"},articStaccatissimoAbove:{x_min:1,x_max:100,y_min:-2,y_max:293,ha:295,o:"m 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z"},articStaccatissimoBelow:{x_min:1,x_max:100,y_min:-295,y_max:0,ha:295,o:"m 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z"},articMarcatoAbove:{x_min:-1,x_max:235,y_min:-1,y_max:253,ha:254,o:"m 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z"},articMarcatoBelow:{x_min:-1,x_max:235,y_min:-254,y_max:0,ha:254,o:"m 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z"},fermataAbove:{x_min:3,x_max:605,y_min:-3,y_max:329,ha:332,o:"m 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z"},fermataBelow:{x_min:3,x_max:605,y_min:-332,y_max:0,ha:332,o:"m 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z"},fermataLongAbove:{x_min:0,x_max:603,y_min:-1,y_max:333,ha:334,o:"m 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z"},fermataLongBelow:{x_min:0,x_max:603,y_min:-333,y_max:1,ha:334,o:"m 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z"},fermataVeryLongAbove:{x_min:0,x_max:715,y_min:0,y_max:408,ha:408,o:"m 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z"},fermataVeryLongBelow:{x_min:0,x_max:715,y_min:-408,y_max:0,ha:408,o:"m 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z"},fermataVeryShortAbove:{x_min:0,x_max:726,y_min:0,y_max:449,ha:449,o:"m 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z"},fermataVeryShortBelow:{x_min:0,x_max:726,y_min:-449,y_max:0,ha:449,o:"m 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z"},fermataShortAbove:{x_min:0,x_max:604,y_min:0,y_max:341,ha:341,o:"m 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z"},fermataShortBelow:{x_min:0,x_max:604,y_min:-341,y_max:0,ha:341,o:"m 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z"},breathMarkComma:{x_min:1,x_max:152,y_min:2,y_max:251,ha:249,o:"m 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z"},breathMarkUpbow:{x_min:1,x_max:249,y_min:1,y_max:495,ha:494,o:"m 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z"},caesura:{x_min:0,x_max:384,y_min:-1,y_max:532,ha:533,o:"m 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z"},caesuraCurved:{x_min:0,x_max:373,y_min:0,y_max:530,ha:530,o:"m 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z"},restMaxima:{x_min:0,x_max:381,y_min:-249,y_max:250,ha:499,o:"m 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z"},restDoubleWhole:{x_min:0,x_max:125,y_min:0,y_max:250,ha:250,o:"m 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z"},restWhole:{x_min:0,x_max:282,y_min:-135,y_max:9,ha:144,o:"m 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z"},restWholeLegerLine:{x_min:-117,x_max:399,y_min:-135,y_max:20,ha:155,o:"m -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z"},restHalf:{x_min:0,x_max:282,y_min:-2,y_max:142,ha:144,o:"m 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z"},restHalfLegerLine:{x_min:-117,x_max:399,y_min:-13,y_max:142,ha:155,o:"m 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z"},restQuarter:{x_min:1,x_max:270,y_min:-375,y_max:373,ha:748,o:"m 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z"},rest8th:{x_min:0,x_max:247,y_min:-251,y_max:174,ha:425,o:"m 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z"},rest16th:{x_min:0,x_max:320,y_min:-500,y_max:179,ha:679,o:"m 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z"},rest32nd:{x_min:0,x_max:363,y_min:-500,y_max:426,ha:926,o:"m 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z"},rest64th:{x_min:0,x_max:423,y_min:-753,y_max:430,ha:1183,o:"m 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z"},rest128th:{x_min:0,x_max:485,y_min:-750,y_max:689,ha:1439,o:"m 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z"},dynamicPiano:{x_min:-89,x_max:366,y_min:-142,y_max:274,ha:416,o:"m 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z"},dynamicMezzo:{x_min:-20,x_max:446,y_min:-10,y_max:274,ha:284,o:"m 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z"},dynamicForte:{x_min:-141,x_max:364,y_min:-152,y_max:444,ha:596,o:"m 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z"},dynamicRinforzando:{x_min:-20,x_max:277,y_min:0,y_max:274,ha:274,o:"m 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z"},dynamicSforzando:{x_min:0,x_max:229,y_min:-10,y_max:273,ha:283,o:"m 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z"},dynamicZ:{x_min:-30,x_max:244,y_min:-10,y_max:268,ha:278,o:"m 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z"},ornamentTrill:{x_min:0,x_max:521,y_min:-10,y_max:390,ha:400,o:"m 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z"},ornamentTurn:{x_min:0,x_max:460,y_min:0,y_max:218,ha:218,o:"m 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z"},ornamentTurnSlash:{x_min:0,x_max:460,y_min:-90,y_max:306,ha:396,o:"m 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z"},ornamentMordent:{x_min:1,x_max:729,y_min:-73,y_max:319,ha:392,o:"m 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z"},ornamentShortTrill:{x_min:0,x_max:725,y_min:0,y_max:245,ha:245,o:"m 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z"},ornamentTremblement:{x_min:1,x_max:985,y_min:0,y_max:244,ha:244,o:"m 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:1119,y_min:0,y_max:481,ha:481,o:"m 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:2,x_max:1150,y_min:-367,y_max:245,ha:612,o:"m 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:1048,y_min:-367,y_max:331,ha:698,o:"m 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:949,y_min:0,y_max:381,ha:381,o:"m 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:1278,y_min:0,y_max:247,ha:247,o:"m 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:0,x_max:1277,y_min:-62,y_max:333,ha:395,o:"m 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:859,y_min:-222,y_max:246,ha:468,o:"m 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z"},brassScoop:{x_min:1,x_max:320,y_min:-373,y_max:13,ha:386,o:"m 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z"},brassDoitMedium:{x_min:0,x_max:489,y_min:-40,y_max:346,ha:386,o:"m 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z"},brassFallLipShort:{x_min:1,x_max:293,y_min:-345,y_max:42,ha:387,o:"m 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z"},brassLiftMedium:{x_min:0,x_max:811,y_min:0,y_max:852,ha:852,o:"m 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z"},brassFallRoughMedium:{x_min:0,x_max:811,y_min:0,y_max:852,ha:852,o:"m 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z"},brassBend:{x_min:0,x_max:392,y_min:0,y_max:282,ha:282,o:"m 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z"},brassMuteClosed:{x_min:0,x_max:272,y_min:0,y_max:272,ha:272,o:"m 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z"},brassMuteOpen:{x_min:0,x_max:304,y_min:0,y_max:304,ha:304,o:"m 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z"},brassFlip:{x_min:0,x_max:379,y_min:0,y_max:282,ha:282,o:"m 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z"},brassJazzTurn:{x_min:0,x_max:620,y_min:0,y_max:245,ha:245,o:"m 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z"},brassSmear:{x_min:1,x_max:306,y_min:0,y_max:170,ha:170,o:"m 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z"},stringsDownBow:{x_min:0,x_max:312,y_min:0,y_max:318,ha:318,o:"m 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z"},stringsUpBow:{x_min:1,x_max:249,y_min:1,y_max:495,ha:494,o:"m 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z"},stringsHarmonic:{x_min:0,x_max:200,y_min:0,y_max:200,ha:200,o:"m 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:200,y_min:0,y_max:300,ha:300,o:"m 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:200,y_min:0,y_max:300,ha:300,o:"m 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z"},pluckedLeftHandPizzicato:{x_min:0,x_max:272,y_min:0,y_max:272,ha:272,o:"m 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z"},keyboardPedalPed:{x_min:0,x_max:1019,y_min:-8,y_max:555,ha:563,o:"m 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z"},keyboardPedalUp:{x_min:0,x_max:450,y_min:0,y_max:450,ha:450,o:"m 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z"},pictChokeCymbal:{x_min:1,x_max:152,y_min:2,y_max:251,ha:249,o:"m 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z"},wiggleArpeggiatoUp:{x_min:-33,x_max:292,y_min:0,y_max:119,ha:119,o:"m 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z"},arrowheadBlackUp:{x_min:0,x_max:228,y_min:0,y_max:299,ha:299,o:"m 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z"},arrowheadBlackDown:{x_min:0,x_max:228,y_min:0,y_max:299,ha:299,o:"m 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z"},arpeggiatoUp:{x_min:1,x_max:229,y_min:7,y_max:1511,ha:1504,o:"m 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z"},arpeggiatoDown:{x_min:1,x_max:229,y_min:-4,y_max:1500,ha:1504,o:"m 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z"},repeat1Bar:{x_min:0,x_max:532,y_min:-250,y_max:279,ha:529,o:"m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z"},repeat2Bars:{x_min:0,x_max:762,y_min:-250,y_max:279,ha:529,o:"m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z"},repeat4Bars:{x_min:0,x_max:1232,y_min:-250,y_max:279,ha:529,o:"m 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z"},repeatBarSlash:{x_min:0,x_max:532,y_min:-250,y_max:279,ha:529,o:"m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z"},csymDiminished:{x_min:0,x_max:473,y_min:0,y_max:473,ha:473,o:"m 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z"},csymHalfDiminished:{x_min:-16,x_max:488,y_min:-15,y_max:489,ha:504,o:"m 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z"},csymAugmented:{x_min:0,x_max:395,y_min:1,y_max:396,ha:395,o:"m 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z"},csymMajorSeventh:{x_min:0,x_max:558,y_min:1,y_max:477,ha:476,o:"m 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z"},csymMinor:{x_min:0,x_max:325,y_min:216,y_max:260,ha:44,o:"m 468 374 l 0 374 l 0 311 l 468 311 z"},csymParensLeftTall:{x_min:1,x_max:185,y_min:0,y_max:997,ha:997,o:"m 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z"},csymParensRightTall:{x_min:-20,x_max:164,y_min:0,y_max:997,ha:997,o:"m -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z"},csymBracketLeftTall:{x_min:0,x_max:155,y_min:0,y_max:1e3,ha:1e3,o:"m 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z"},csymBracketRightTall:{x_min:1,x_max:156,y_min:0,y_max:1e3,ha:1e3,o:"m 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z"},csymParensLeftVeryTall:{x_min:0,x_max:122,y_min:0,y_max:993,ha:993,o:"m 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z"},csymParensRightVeryTall:{x_min:-15,x_max:107,y_min:0,y_max:993,ha:993,o:"m -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z"},csymDiagonalArrangementSlash:{x_min:0,x_max:999,y_min:0,y_max:1e3,ha:1e3,o:"m 1439 1380 l 1377 1440 l 0 60 l 62 0 z"},accSagittal5v7KleismaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z"},accSagittal5v7KleismaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z"},accSagittal5CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z"},accSagittal5CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z"},accSagittal7CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z"},accSagittal7CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z"},accSagittal25SmallDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z"},accSagittal25SmallDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z"},accSagittal35MediumDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z"},accSagittal35MediumDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittal11MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z"},accSagittal11MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z"},accSagittal11LargeDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z"},accSagittal11LargeDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal35LargeDiesisUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal35LargeDiesisDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittalSharp25SDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z"},accSagittalFlat25SUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z"},accSagittalSharp7CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z"},accSagittalFlat7CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z"},accSagittalSharp5CDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z"},accSagittalFlat5CUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z"},accSagittalSharp5v7kDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z"},accSagittalFlat5v7kUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z"},accSagittalSharp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z"},accSagittalFlat:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z"},accSagittalSharp5v7kUp:{x_min:0,x_max:312,y_min:-361,y_max:172,ha:533,o:"m 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z"},accSagittalFlat5v7kDown:{x_min:0,x_max:312,y_min:-172,y_max:361,ha:533,o:"m 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z"},accSagittalSharp5CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z"},accSagittalFlat5CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z"},accSagittalSharp7CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z"},accSagittalFlat7CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z"},accSagittalSharp25SUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z"},accSagittalFlat25SDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z"},accSagittalSharp35MUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z"},accSagittalFlat35MDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z"},accSagittalSharp11MUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z"},accSagittalFlat11MDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z"},accSagittalSharp11LUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat11LDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalSharp35LUp:{x_min:0,x_max:500,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat35LDown:{x_min:0,x_max:500,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalDoubleSharp25SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z"},accSagittalDoubleFlat25SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z"},accSagittalDoubleSharp7CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z"},accSagittalDoubleFlat7CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z"},accSagittalDoubleSharp5CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z"},accSagittalDoubleFlat5CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z"},accSagittalDoubleSharp5v7kDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z"},accSagittalDoubleFlat5v7kUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z"},accSagittalDoubleSharp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z"},accSagittalDoubleFlat:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z"},accSagittal7v11KleismaUp:{x_min:0,x_max:219,y_min:-359,y_max:172,ha:531,o:"m 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z"},accSagittal7v11KleismaDown:{x_min:0,x_max:219,y_min:-172,y_max:359,ha:531,o:"m 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z"},accSagittal17CommaUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal17CommaDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal55CommaUp:{x_min:0,x_max:219,y_min:-359,y_max:172,ha:531,o:"m 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z"},accSagittal55CommaDown:{x_min:0,x_max:219,y_min:-172,y_max:359,ha:531,o:"m 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z"},accSagittal7v11CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z"},accSagittal7v11CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal5v11SmallDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z"},accSagittal5v11SmallDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittalSharp5v11SDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat5v11SUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp7v11CDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z"},accSagittalFlat7v11CUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z"},accSagittalSharp55CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z"},accSagittalFlat55CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z"},accSagittalSharp17CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z"},accSagittalFlat17CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z"},accSagittalSharp7v11kDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z"},accSagittalFlat7v11kUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z"},accSagittalSharp7v11kUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z"},accSagittalFlat7v11kDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z"},accSagittalSharp17CUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat17CDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp55CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z"},accSagittalFlat55CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z"},accSagittalSharp7v11CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z"},accSagittalFlat7v11CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z"},accSagittalSharp5v11SUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z"},accSagittalFlat5v11SDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalDoubleSharp5v11SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat5v11SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp7v11CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z"},accSagittalDoubleFlat7v11CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z"},accSagittalDoubleSharp55CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z"},accSagittalDoubleFlat55CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z"},accSagittalDoubleSharp17CDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z"},accSagittalDoubleFlat17CUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z"},accSagittalDoubleSharp7v11kDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z"},accSagittalDoubleFlat7v11kUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z"},accSagittal23CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z"},accSagittal23CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z"},accSagittal5v19CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z"},accSagittal5v19CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittal5v23SmallDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z"},accSagittal5v23SmallDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittalSharp5v23SDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z"},accSagittalFlat5v23SUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z"},accSagittalSharp5v19CDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z"},accSagittalFlat5v19CUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z"},accSagittalSharp23CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z"},accSagittalFlat23CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z"},accSagittalSharp23CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z"},accSagittalFlat23CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z"},accSagittalSharp5v19CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z"},accSagittalFlat5v19CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z"},accSagittalSharp5v23SUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z"},accSagittalFlat5v23SDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z"},accSagittalDoubleSharp5v23SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z"},accSagittalDoubleFlat5v23SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z"},accSagittalDoubleSharp5v19CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z"},accSagittalDoubleFlat5v19CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z"},accSagittalDoubleSharp23CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z"},accSagittalDoubleFlat23CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z"},accSagittal19SchismaUp:{x_min:0,x_max:125,y_min:-359,y_max:172,ha:531,o:"m 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z"},accSagittal19SchismaDown:{x_min:0,x_max:125,y_min:-172,y_max:359,ha:531,o:"m 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z"},accSagittal17KleismaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal17KleismaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal143CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z"},accSagittal143CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal11v49CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z"},accSagittal11v49CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z"},accSagittal19CommaUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z"},accSagittal19CommaDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z"},accSagittal7v19CommaUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z"},accSagittal7v19CommaDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z"},accSagittal49SmallDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal49SmallDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal23SmallDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal23SmallDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal5v13MediumDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z"},accSagittal5v13MediumDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z"},accSagittal11v19MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z"},accSagittal11v19MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z"},accSagittal49MediumDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z"},accSagittal49MediumDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z"},accSagittal5v49MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z"},accSagittal5v49MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z"},accSagittal49LargeDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z"},accSagittal49LargeDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z"},accSagittal11v19LargeDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z"},accSagittal11v19LargeDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z"},accSagittal5v13LargeDiesisUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z"},accSagittal5v13LargeDiesisDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z"},accSagittalSharp23SDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z"},accSagittalFlat23SUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp49SDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z"},accSagittalFlat49SUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z"},accSagittalSharp7v19CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z"},accSagittalFlat7v19CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z"},accSagittalSharp19CDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z"},accSagittalFlat19CUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z"},accSagittalSharp11v49CDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat11v49CUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z"},accSagittalSharp143CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat143CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp17kDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z"},accSagittalFlat17kUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z"},accSagittalSharp19sDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z"},accSagittalFlat19sUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z"},accSagittalSharp19sUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z"},accSagittalFlat19sDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z"},accSagittalSharp17kUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat17kDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp143CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z"},accSagittalFlat143CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp11v49CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z"},accSagittalFlat11v49CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z"},accSagittalSharp19CUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat19CDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalSharp7v19CUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat7v19CDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalSharp49SUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat49SDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp23SUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat23SDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp5v13MUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z"},accSagittalFlat5v13MDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z"},accSagittalSharp11v19MUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat11v19MDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalSharp49MUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z"},accSagittalFlat49MDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z"},accSagittalSharp5v49MUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z"},accSagittalFlat5v49MDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z"},accSagittalSharp49LUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z"},accSagittalFlat49LDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z"},accSagittalSharp11v19LUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z"},accSagittalFlat11v19LDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z"},accSagittalSharp5v13LUp:{x_min:0,x_max:500,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat5v13LDown:{x_min:0,x_max:500,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalDoubleSharp23SDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z"},accSagittalDoubleFlat23SUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z"},accSagittalDoubleSharp49SDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z"},accSagittalDoubleFlat49SUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z"},accSagittalDoubleSharp7v19CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z"},accSagittalDoubleFlat7v19CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z"},accSagittalDoubleSharp19CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z"},accSagittalDoubleFlat19CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z"},accSagittalDoubleSharp11v49CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat11v49CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp143CDown:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat143CUp:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp17kDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z"},accSagittalDoubleFlat17kUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z"},accSagittalDoubleSharp19sDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z"},accSagittalDoubleFlat19sUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z"},accSagittalShaftUp:{x_min:0,x_max:31,y_min:-359,y_max:172,ha:531,o:"m 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z"},accSagittalShaftDown:{x_min:0,x_max:31,y_min:-172,y_max:359,ha:531,o:"m 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z"},accSagittalAcute:{x_min:0,x_max:125,y_min:-62,y_max:125,ha:187,o:"m 0 0 l 0 -89 l 180 89 l 180 180 z"},accSagittalGrave:{x_min:0,x_max:125,y_min:-125,y_max:62,ha:187,o:"m 180 -180 l 180 -89 l 0 89 l 0 0 z"},accSagittal1MinaUp:{x_min:-7,x_max:124,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal1MinaDown:{x_min:-7,x_max:124,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal2MinasUp:{x_min:-7,x_max:218,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal2MinasDown:{x_min:-7,x_max:218,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal1TinaUp:{x_min:0,x_max:93,y_min:16,y_max:107,ha:91,o:"m 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z"},accSagittal1TinaDown:{x_min:0,x_max:93,y_min:-107,y_max:-16,ha:91,o:"m 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z"},accSagittal2TinasUp:{x_min:0,x_max:94,y_min:16,y_max:107,ha:91,o:"m 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal2TinasDown:{x_min:0,x_max:94,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z"},accSagittal3TinasUp:{x_min:-7,x_max:124,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal3TinasDown:{x_min:-7,x_max:124,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal4TinasUp:{x_min:0,x_max:187,y_min:16,y_max:107,ha:91,o:"m 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z"},accSagittal4TinasDown:{x_min:0,x_max:187,y_min:-107,y_max:-16,ha:91,o:"m 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z"},accSagittal5TinasUp:{x_min:0,x_max:218,y_min:16,y_max:107,ha:91,o:"m 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal5TinasDown:{x_min:0,x_max:218,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z"},accSagittal6TinasUp:{x_min:-7,x_max:218,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal6TinasDown:{x_min:-7,x_max:218,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal7TinasUp:{x_min:0,x_max:281,y_min:16,y_max:107,ha:91,o:"m 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z"},accSagittal7TinasDown:{x_min:0,x_max:281,y_min:-107,y_max:-16,ha:91,o:"m 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z"},accSagittal8TinasUp:{x_min:0,x_max:312,y_min:16,y_max:107,ha:91,o:"m 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal8TinasDown:{x_min:0,x_max:312,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z"},accSagittal9TinasUp:{x_min:-7,x_max:312,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal9TinasDown:{x_min:-7,x_max:312,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittalFractionalTinaUp:{x_min:-3,x_max:35,y_min:73,y_max:111,ha:38,o:"m -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z"},accSagittalFractionalTinaDown:{x_min:-3,x_max:35,y_min:-111,y_max:-73,ha:38,o:"m -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:164,y_min:-194,y_max:421,ha:615,o:"m 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:414,y_min:-194,y_max:421,ha:615,o:"m 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z"},accidentalWilsonPlus:{x_min:0,x_max:281,y_min:-203,y_max:203,ha:406,o:"m 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z"},accidentalWilsonMinus:{x_min:0,x_max:281,y_min:-186,y_max:186,ha:372,o:"m 0 112 l 405 -268 l 405 -112 l 0 268 z"}},fontFamily:"Bravura",resolution:1e3,generatedOn:"2022-12-18T09:06:51.407Z"},metrics:{smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}}};return l=l.default})())); +//# sourceMappingURL=vexflow-font-bravura.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-font-bravura.js.map b/build/cjs/vexflow-font-bravura.js.map new file mode 100644 index 0000000000..c4025b8bed --- /dev/null +++ b/build/cjs/vexflow-font-bravura.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vexflow-font-bravura.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,KAEzBD,EAAkB,YAAIA,EAAkB,aAAK,CAAC,EAAGA,EAAkB,YAAW,QAAIC,IACnF,CATD,CASsB,oBAAXK,OAAyBA,OAA+B,oBAAfC,WAA6BA,WAAaC,MAAO,I,mBCRrG,IAAIC,EAAsB,CCA1BA,EAAwB,CAACP,EAASQ,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAEV,EAASS,IAC5EE,OAAOC,eAAeZ,EAASS,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDF,EAAwB,CAACQ,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,4BCA3E,MCaP,EAJoB,CAChBI,KDVuB,CACvBC,OAAQ,CACJC,WAAY,CACRC,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iLAEPkB,cAAe,CACXL,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,oMAEPmB,YAAa,CACTN,MAAO,EACPC,MAAO,GACPC,MAAO,IACPC,MAAO,KACPC,GAAI,IACJjB,EAAG,2CAEPoB,eAAgB,CACZP,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEPqB,MAAO,CACHR,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,svCAEPsB,KAAM,CACFT,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,4oBAEPuB,MAAO,CACHV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,k6CAEPwB,MAAO,CACHX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,yvCAEPyB,MAAO,CACHZ,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ymBAEP0B,yBAA0B,CACtBb,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oTAEP,iBAAkB,CACda,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,qkBAEP2B,SAAU,CACNd,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0OAEP4B,SAAU,CACNf,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6fAEP6B,SAAU,CACNhB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uqBAEP8B,SAAU,CACNjB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+4BAEP+B,SAAU,CACNlB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yqBAEPgC,SAAU,CACNnB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qsBAEPiC,SAAU,CACNpB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8mBAEPkC,SAAU,CACNrB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,imBAEPmC,SAAU,CACNtB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wcAEPoC,SAAU,CACNvB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,koBAEPqC,cAAe,CACXxB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qZAEPsC,iBAAkB,CACdzB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,y3BAEPuC,YAAa,CACT1B,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,maAEPwC,iBAAkB,CACd3B,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,maAEPyC,aAAc,CACV5B,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,GACJjB,EAAG,iIAEP0C,mBAAoB,CAChB7B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8PAEP2C,wBAAyB,CACrB9B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4MAEP4C,kBAAmB,CACf/B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6RAEP6C,uBAAwB,CACpBhC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oOAEP8C,oBAAqB,CACjBjC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,i1BAEP+C,cAAe,CACXlC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iTAEPgD,aAAc,CACVnC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+QAEPiD,cAAe,CACXpC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mHAEPkD,qBAAsB,CAClBrC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qkCAEPmD,eAAgB,CACZtC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uiBAEPoD,cAAe,CACXvC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wiBAEPqD,eAAgB,CACZxC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uYAEPsD,2BAA4B,CACxBzC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g+BAEPuD,qBAAsB,CAClB1C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qYAEPwD,oBAAqB,CACjB3C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uYAEPyD,gBAAiB,CACb5C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,saAEP0D,2BAA4B,CACxB7C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qsCAEP2D,qBAAsB,CAClB9C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wiBAEP4D,oBAAqB,CACjB/C,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ulBAEP6D,qBAAsB,CAClBhD,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+aAEP8D,0BAA2B,CACvBjD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2gBAEP+D,oBAAqB,CACjBlD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qFAEPgE,oBAAqB,CACjBnD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2CAEPiE,gCAAiC,CAC7BpD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s2BAEPkE,0BAA2B,CACvBrD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0SAEPmE,yBAA0B,CACtBtD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6OAEPoE,0BAA2B,CACvBvD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kCAEPqE,8BAA+B,CAC3BxD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,03BAEPsE,wBAAyB,CACrBzD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wTAEPuE,uBAAwB,CACpB1D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qPAEPwE,wBAAyB,CACrB3D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mCAEPyE,4BAA6B,CACzB5D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,i0CAEP0E,sBAAuB,CACnB7D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4pBAEP2E,qBAAsB,CAClB9D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,imBAEP4E,sBAAuB,CACnB/D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sZAEP6E,4BAA6B,CACzBhE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,myCAEP8E,sBAAuB,CACnBjE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4qBAEP+E,qBAAsB,CAClBlE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,srBAEPgF,sBAAuB,CACnBnE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gbAEPiF,2BAA4B,CACxBpE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,y/BAEPkF,qBAAsB,CAClBrE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,saAEPmF,oBAAqB,CACjBtE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kWAEPoF,qBAAsB,CAClBvE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gOAEPqF,oBAAqB,CACjBxE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wTAEPsF,yBAA0B,CACtBzE,OAAQ,GACRC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qJAEPuF,wBAAyB,CACrB1E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gJAEPwF,kBAAmB,CACf3E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6FAEPyF,0BAA2B,CACvB5E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iCAEP0F,2BAA4B,CACxB7E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mCAEP2F,+BAAgC,CAC5B9E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8FAEP4F,gBAAiB,CACb/E,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,kGAEP6F,SAAU,CACNhF,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,+CAEP8F,UAAW,CACPjF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,4UAEP+F,YAAa,CACTlF,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wRAEPgG,WAAY,CACRnF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,kyBAEPiG,aAAc,CACVpF,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kmBAEPkG,WAAY,CACRrF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mhCAEPmG,aAAc,CACVtF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,85BAEPoG,WAAY,CACRvF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,ivCAEPqG,aAAc,CACVxF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,qnCAEPsG,YAAa,CACTzF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,m+CAEPuG,cAAe,CACX1F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,80CAEPwG,eAAgB,CACZ3F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,igBAEPyG,kBAAmB,CACf5F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2hBAEP0G,gBAAiB,CACb7F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s5CAEP2G,sBAAuB,CACnB9F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w0BAEP4G,qBAAsB,CAClB/F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mmCAEP6G,qBAAsB,CAClBhG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gPAEP8G,sBAAuB,CACnBjG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+MAEP+G,+BAAgC,CAC5BlG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wiBAEPgH,0CAA2C,CACvCnG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oqCAEPiH,gCAAiC,CAC7BpG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g6BAEPkH,sCAAuC,CACnCrG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,03DAEPmH,4BAA6B,CACzBtG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uwCAEPoH,6BAA8B,CAC1BvG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mhEAEPqH,qBAAsB,CAClBxG,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,i9BAEPsH,oBAAqB,CACjBzG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+6BAEPuH,6BAA8B,CAC1B1G,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2yCAEPwH,gBAAiB,CACb3G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8MAEPyH,eAAgB,CACZ5G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2pBAEP0H,iBAAkB,CACd7G,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wUAEP2H,iBAAkB,CACd9G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,gXAEP4H,iBAAkB,CACd/G,OAAQ,EACRC,MAAO,IACPC,MAAO,EACPC,MAAO,GACPC,GAAI,GACJjB,EAAG,wGAEP6H,iBAAkB,CACdhH,OAAQ,EACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,EACPC,GAAI,GACJjB,EAAG,kHAEP8H,mBAAoB,CAChBjH,MAAO,EACPC,MAAO,GACPC,MAAO,EACPC,MAAO,GACPC,GAAI,GACJjB,EAAG,8FAEP+H,mBAAoB,CAChBlH,MAAO,EACPC,MAAO,GACPC,OAAQ,GACRC,MAAO,EACPC,GAAI,GACJjB,EAAG,wGAEPgI,wBAAyB,CACrBnH,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yGAEPiI,wBAAyB,CACrBpH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,gHAEPkI,kBAAmB,CACfrH,OAAQ,EACRC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4TAEPmI,kBAAmB,CACftH,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,2WAEPoI,aAAc,CACVvH,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+XAEPqI,aAAc,CACVxH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,kaAEPsI,iBAAkB,CACdzH,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0UAEPuI,iBAAkB,CACd1H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,wWAEPwI,qBAAsB,CAClB3H,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,gkBAEPyI,qBAAsB,CAClB5H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,ooBAEP0I,sBAAuB,CACnB7H,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6jBAEP2I,sBAAuB,CACnB9H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,0nBAEP4I,kBAAmB,CACf/H,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wUAEP6I,kBAAmB,CACfhI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,6WAEP8I,gBAAiB,CACbjI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4RAEP+I,gBAAiB,CACblI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+OAEPgJ,QAAS,CACLnI,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0XAEPiJ,cAAe,CACXpI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,kXAEPkJ,WAAY,CACRrI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iUAEPmJ,gBAAiB,CACbtI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,sIAEPoJ,UAAW,CACPvI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,sJAEPqJ,mBAAoB,CAChBxI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,0OAEPsJ,SAAU,CACNzI,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0IAEPuJ,kBAAmB,CACf1I,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4NAEPwJ,YAAa,CACT3I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,k6BAEPyJ,QAAS,CACL5I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ibAEP0J,SAAU,CACN7I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,grBAEP2J,SAAU,CACN9I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kgCAEP4J,SAAU,CACN/I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,m5CAEP6J,UAAW,CACPhJ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,yjDAEP8J,aAAc,CACVjJ,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+yBAEP+J,aAAc,CACVlJ,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,87BAEPgK,aAAc,CACVnJ,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2wBAEPiK,mBAAoB,CAChBpJ,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4gBAEPkK,iBAAkB,CACdrJ,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mfAEPmK,SAAU,CACNtJ,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,quBAEPoK,cAAe,CACXvJ,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,k2CAEPqK,aAAc,CACVxJ,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6bAEPsK,kBAAmB,CACfzJ,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2uBAEPuK,gBAAiB,CACb1J,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4zBAEPwK,mBAAoB,CAChB3J,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,ivBAEPyK,oBAAqB,CACjB5J,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mhCAEP0K,2BAA4B,CACxB7J,MAAO,EACPC,MAAO,KACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,szCAEP2K,oCAAqC,CACjC9J,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,suCAEP4K,8BAA+B,CAC3B/J,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,47CAEP6K,mCAAoC,CAChChK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4sCAEP8K,wCAAyC,CACrCjK,MAAO,EACPC,MAAO,KACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qxCAEP+K,4CAA6C,CACzClK,MAAO,EACPC,MAAO,KACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kxCAEPgL,gCAAiC,CAC7BnK,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kiCAEPiL,WAAY,CACRpK,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,4KAEPkL,gBAAiB,CACbrK,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iKAEPmL,kBAAmB,CACftK,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,8LAEPoL,gBAAiB,CACbvK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,09CAEPqL,qBAAsB,CAClBxK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,q8CAEPsL,UAAW,CACPzK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mRAEPuL,gBAAiB,CACb1K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qHAEPwL,cAAe,CACX3K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mNAEPyL,UAAW,CACP5K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,oNAEP0L,cAAe,CACX7K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6sBAEP2L,WAAY,CACR9K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8ZAEP4L,eAAgB,CACZ/K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4OAEP6L,aAAc,CACVhL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+OAEP8L,gBAAiB,CACbjL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iNAEP+L,0BAA2B,CACvBlL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2QAEPgM,0BAA2B,CACvBnL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,sRAEPiM,yBAA0B,CACtBpL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qHAEPkM,iBAAkB,CACdrL,MAAO,EACPC,MAAO,KACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gnEAEPmM,gBAAiB,CACbtL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,uxDAEPoM,gBAAiB,CACbvL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4RAEPqM,mBAAoB,CAChBxL,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,kWAEPsM,iBAAkB,CACdzL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6JAEPuM,mBAAoB,CAChB1L,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,gLAEPwM,aAAc,CACV3L,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,mrCAEPyM,eAAgB,CACZ5L,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,ssCAEP0M,WAAY,CACR7L,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6aAEP2M,YAAa,CACT9L,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6oBAEP4M,YAAa,CACT/L,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qlCAEP6M,eAAgB,CACZhM,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uMAEP8M,eAAgB,CACZjM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yNAEP+M,mBAAoB,CAChBlM,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6YAEPgN,cAAe,CACXnM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qHAEPiN,iBAAkB,CACdpM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2DAEPkN,UAAW,CACPrM,MAAO,EACPC,MAAO,IACPC,MAAO,IACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,yCAEPmN,mBAAoB,CAChBtM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+QAEPoN,oBAAqB,CACjBvM,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wRAEPqN,oBAAqB,CACjBxM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,uNAEPsN,qBAAsB,CAClBzM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yMAEPuN,uBAAwB,CACpB1M,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iPAEPwN,wBAAyB,CACrB3M,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,uPAEPyN,6BAA8B,CAC1B5M,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2CAEP0N,wBAAyB,CACrB7M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wKAEP2N,0BAA2B,CACvB9M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mKAEP4N,oBAAqB,CACjB/M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0EAEP6N,sBAAuB,CACnBhN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yEAEP8N,oBAAqB,CACjBjN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oIAEP+N,sBAAuB,CACnBlN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wIAEPgO,2BAA4B,CACxBnN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6GAEPiO,6BAA8B,CAC1BpN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4GAEPkO,4BAA6B,CACzBrN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sKAEPmO,8BAA+B,CAC3BtN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yKAEPoO,4BAA6B,CACzBvN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6FAEPqO,8BAA+B,CAC3BxN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0FAEPsO,2BAA4B,CACxBzN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mOAEPuO,6BAA8B,CAC1B1N,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oOAEPwO,2BAA4B,CACxB3N,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kKAEPyO,6BAA8B,CAC1B5N,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kKAEP0O,wBAAyB,CACrB7N,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kUAEP2O,qBAAsB,CAClB9N,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oTAEP4O,uBAAwB,CACpB/N,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2LAEP6O,oBAAqB,CACjBhO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iMAEP8O,uBAAwB,CACpBjO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iHAEP+O,oBAAqB,CACjBlO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4GAEPgP,yBAA0B,CACtBnO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gNAEPiP,sBAAuB,CACnBpO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+MAEPkP,iBAAkB,CACdrO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gJAEPmP,gBAAiB,CACbtO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wIAEPoP,uBAAwB,CACpBvO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4QAEPqP,wBAAyB,CACrBxO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2PAEPsP,qBAAsB,CAClBzO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8JAEPuP,sBAAuB,CACnB1O,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sJAEPwP,qBAAsB,CAClB3O,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2NAEPyP,sBAAuB,CACnB5O,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8NAEP0P,sBAAuB,CACnB7O,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qMAEP2P,uBAAwB,CACpB9O,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4LAEP4P,sBAAuB,CACnB/O,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yQAEP6P,uBAAwB,CACpBhP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0QAEP8P,sBAAuB,CACnBjP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mLAEP+P,uBAAwB,CACpBlP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wKAEPgQ,sBAAuB,CACnBnP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iSAEPiQ,uBAAwB,CACpBpP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gSAEPkQ,sBAAuB,CACnBrP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wOAEPmQ,uBAAwB,CACpBtP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sOAEPoQ,8BAA+B,CAC3BvP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0RAEPqQ,2BAA4B,CACxBxP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4QAEPsQ,6BAA8B,CAC1BzP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8NAEPuQ,0BAA2B,CACvB1P,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mOAEPwQ,6BAA8B,CAC1B3P,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2IAEPyQ,0BAA2B,CACvB5P,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yIAEP0Q,+BAAgC,CAC5B7P,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2MAEP2Q,4BAA6B,CACzB9P,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0MAEP4Q,uBAAwB,CACpB/P,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+IAEP6Q,sBAAuB,CACnBhQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yIAEP8Q,yBAA0B,CACtBjQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEP+Q,2BAA4B,CACxBlQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6RAEPgR,qBAAsB,CAClBnQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+SAEPiR,uBAAwB,CACpBpQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oSAEPkR,qBAAsB,CAClBrQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uEAEPmR,uBAAwB,CACpBtQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sEAEPoR,uBAAwB,CACpBvQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gIAEPqR,yBAA0B,CACtBxQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oIAEPsR,6BAA8B,CAC1BzQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wRAEPuR,+BAAgC,CAC5B1Q,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gRAEPwR,0BAA2B,CACvB3Q,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uTAEPyR,uBAAwB,CACpB5Q,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0SAEP0R,0BAA2B,CACvB7Q,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sUAEP2R,uBAAwB,CACpB9Q,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iTAEP4R,wBAAyB,CACrB/Q,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qHAEP6R,qBAAsB,CAClBhR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gHAEP8R,wBAAyB,CACrBjR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uRAEP+R,qBAAsB,CAClBlR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sRAEPgS,0BAA2B,CACvBnR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yJAEPiS,uBAAwB,CACpBpR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oJAEPkS,wBAAyB,CACrBrR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sUAEPmS,yBAA0B,CACtBtR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0SAEPoS,sBAAuB,CACnBvR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+UAEPqS,uBAAwB,CACpBxR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gUAEPsS,sBAAuB,CACnBzR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2JAEPuS,uBAAwB,CACpB1R,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oJAEPwS,wBAAyB,CACrB3R,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8NAEPyS,yBAA0B,CACtB5R,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4NAEP0S,wBAAyB,CACrB7R,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8SAEP2S,yBAA0B,CACtB9R,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEP4S,gCAAiC,CAC7B/R,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qTAEP6S,6BAA8B,CAC1BhS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEP8S,gCAAiC,CAC7BjS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kVAEP+S,6BAA8B,CAC1BlS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sUAEPgT,8BAA+B,CAC3BnS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qIAEPiT,2BAA4B,CACxBpS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iIAEPkT,8BAA+B,CAC3BrS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8QAEPmT,2BAA4B,CACxBtS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yQAEPoT,gCAAiC,CAC7BvS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iNAEPqT,6BAA8B,CAC1BxS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gNAEPsT,qBAAsB,CAClBzS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qKAEPuT,uBAAwB,CACpB1S,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gKAEPwT,uBAAwB,CACpB3S,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qJAEPyT,yBAA0B,CACtB5S,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8JAEP0T,6BAA8B,CAC1B7S,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mMAEP2T,+BAAgC,CAC5B9S,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4LAEP4T,0BAA2B,CACvB/S,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+MAEP6T,uBAAwB,CACpBhT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wMAEP8T,0BAA2B,CACvBjT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6RAEP+T,uBAAwB,CACpBlT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8RAEPgU,wBAAyB,CACrBnT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4OAEPiU,qBAAsB,CAClBpT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mOAEPkU,sBAAuB,CACnBrT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2PAEPmU,uBAAwB,CACpBtT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gPAEPoU,wBAAyB,CACrBvT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wOAEPqU,yBAA0B,CACtBxT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sOAEPsU,wBAAyB,CACrBzT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8QAEPuU,yBAA0B,CACtB1T,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kQAEPwU,gCAAiC,CAC7B3T,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qNAEPyU,6BAA8B,CAC1B5T,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iNAEP0U,gCAAiC,CAC7B7T,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iSAEP2U,6BAA8B,CAC1B9T,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6RAEP4U,8BAA+B,CAC3B/T,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iPAEP6U,2BAA4B,CACxBhU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yOAEP8U,uBAAwB,CACpBjU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8KAEP+U,yBAA0B,CACtBlU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yKAEPgV,uBAAwB,CACpBnU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wKAEPiV,yBAA0B,CACtBpU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mKAEPkV,sBAAuB,CACnBrU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iOAEPmV,wBAAyB,CACrBtU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wNAEPoV,wBAAyB,CACrBvU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mTAEPqV,0BAA2B,CACvBxU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8SAEPsV,qBAAsB,CAClBzU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6RAEPuV,uBAAwB,CACpB1U,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mRAEPwV,uBAAwB,CACpB3U,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gQAEPyV,yBAA0B,CACtB5U,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gQAEP0V,2BAA4B,CACxB7U,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6QAEP2V,6BAA8B,CAC1B9U,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mQAEP4V,2BAA4B,CACxB/U,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6LAEP6V,6BAA8B,CAC1BhV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sLAEP8V,8BAA+B,CAC3BjV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2LAEP+V,gCAAiC,CAC7BlV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oMAEPgW,+BAAgC,CAC5BnV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mQAEPiW,iCAAkC,CAC9BpV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kQAEPkW,4BAA6B,CACzBrV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yKAEPmW,8BAA+B,CAC3BtV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kKAEPoW,8BAA+B,CAC3BvV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oKAEPqW,gCAAiC,CAC7BxV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2KAEPsW,2BAA4B,CACxBzV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oKAEPuW,6BAA8B,CAC1B1V,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qKAEPwW,8BAA+B,CAC3B3V,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4GAEPyW,gCAAiC,CAC7B5V,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2GAEP0W,6BAA8B,CAC1B7V,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kOAEP2W,+BAAgC,CAC5B9V,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4NAEP4W,wBAAyB,CACrB/V,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gRAEP6W,qBAAsB,CAClBhW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uQAEP8W,wBAAyB,CACrBjW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0WAEP+W,qBAAsB,CAClBlW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wVAEPgX,0BAA2B,CACvBnW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+LAEPiX,uBAAwB,CACpBpW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gMAEPkX,wBAAyB,CACrBrW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wLAEPmX,qBAAsB,CAClBtW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8LAEPoX,2BAA4B,CACxBvW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oSAEPqX,wBAAyB,CACrBxW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oSAEPsX,yBAA0B,CACtBzW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uOAEPuX,sBAAuB,CACnB1W,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gOAEPwX,wBAAyB,CACrB3W,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wOAEPyX,qBAAsB,CAClB5W,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6OAEP0X,wBAAyB,CACrB7W,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kSAEP2X,qBAAsB,CAClB9W,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kSAEP4X,sBAAuB,CACnB/W,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEP6X,uBAAwB,CACpBhX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gRAEP8X,sBAAuB,CACnBjX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oPAEP+X,uBAAwB,CACpBlX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0OAEPgY,uBAAwB,CACpBnX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wSAEPiY,wBAAyB,CACrBpX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qSAEPkY,yBAA0B,CACtBrX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oYAEPmY,0BAA2B,CACvBtX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wXAEPoY,sBAAuB,CACnBvX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0WAEPqY,uBAAwB,CACpBxX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kVAEPsY,wBAAyB,CACrBzX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qWAEPuY,yBAA0B,CACtB1X,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0VAEPwY,sBAAuB,CACnB3X,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8VAEPyY,uBAAwB,CACpB5X,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8VAEP0Y,sBAAuB,CACnB7X,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yQAEP2Y,uBAAwB,CACpB9X,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6PAEP4Y,wBAAyB,CACrB/X,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mRAEP6Y,yBAA0B,CACtBhY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oRAEP8Y,yBAA0B,CACtBjY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yUAEP+Y,0BAA2B,CACvBlY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+TAEPgZ,sBAAuB,CACnBnY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0PAEPiZ,uBAAwB,CACpBpY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mPAEPkZ,wBAAyB,CACrBrY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4PAEPmZ,yBAA0B,CACtBtY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0PAEPoZ,sBAAuB,CACnBvY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4PAEPqZ,uBAAwB,CACpBxY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qPAEPsZ,yBAA0B,CACtBzY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oMAEPuZ,0BAA2B,CACvB1Y,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2LAEPwZ,wBAAyB,CACrB3Y,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yTAEPyZ,yBAA0B,CACtB5Y,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kSAEP0Z,8BAA+B,CAC3B7Y,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gRAEP2Z,2BAA4B,CACxB9Y,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2QAEP4Z,8BAA+B,CAC3B/Y,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oUAEP6Z,2BAA4B,CACxBhZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0TAEP8Z,gCAAiC,CAC7BjZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+MAEP+Z,6BAA8B,CAC1BlZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iNAEPga,8BAA+B,CAC3BnZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iOAEPia,2BAA4B,CACxBpZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+NAEPka,iCAAkC,CAC9BrZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0SAEPma,8BAA+B,CAC3BtZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uSAEPoa,+BAAgC,CAC5BvZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6OAEPqa,4BAA6B,CACzBxZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qOAEPsa,8BAA+B,CAC3BzZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gSAEPua,2BAA4B,CACxB1Z,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEPwa,8BAA+B,CAC3B3Z,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEPya,2BAA4B,CACxB5Z,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sSAEP0a,mBAAoB,CAChB7Z,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kDAEP2a,qBAAsB,CAClB9Z,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mDAEP4a,iBAAkB,CACd/Z,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sCAEP6a,iBAAkB,CACdha,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,uCAEP8a,mBAAoB,CAChBja,OAAQ,EACRC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,2KAEP+a,qBAAsB,CAClBla,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,sLAEPgb,oBAAqB,CACjBna,OAAQ,EACRC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,yUAEPib,sBAAuB,CACnBpa,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,uWAEPkb,mBAAoB,CAChBra,MAAO,EACPC,MAAO,GACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,+FAEPmb,qBAAsB,CAClBta,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,gGAEPob,oBAAqB,CACjBva,MAAO,EACPC,MAAO,GACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,uIAEPqb,sBAAuB,CACnBxa,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,yJAEPsb,oBAAqB,CACjBza,OAAQ,EACRC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,2KAEPub,sBAAuB,CACnB1a,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,sLAEPwb,oBAAqB,CACjB3a,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,oMAEPyb,sBAAuB,CACnB5a,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,oNAEP0b,oBAAqB,CACjB7a,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,2TAEP2b,sBAAuB,CACnB9a,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,mWAEP4b,oBAAqB,CACjB/a,OAAQ,EACRC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,yUAEP6b,sBAAuB,CACnBhb,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,uWAEP8b,oBAAqB,CACjBjb,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,kWAEP+b,sBAAuB,CACnBlb,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,qYAEPgc,oBAAqB,CACjBnb,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,ydAEPic,sBAAuB,CACnBpb,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,ohBAEPkc,oBAAqB,CACjBrb,OAAQ,EACRC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,ueAEPmc,sBAAuB,CACnBtb,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,whBAEPoc,4BAA6B,CACzBvb,OAAQ,EACRC,MAAO,GACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,wGAEPqc,8BAA+B,CAC3Bxb,OAAQ,EACRC,MAAO,GACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,qHAEPsc,6BAA8B,CAC1Bzb,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yNAEPuc,oCAAqC,CACjC1b,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+dAEPwc,qBAAsB,CAClB3b,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2HAEPyc,sBAAuB,CACnB5b,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4CAGX0c,WAAY,UACZC,WAAY,IACZC,YAAa,4BC18GbC,QCXyB,CACzBC,OAAO,EACPC,MAAO,CACHC,QAAS,GACTC,cAAe,GACfC,cAAe,EACfC,qBAAsB,IAE1BC,WAAY,CACRC,0BAA2B,EAC3BC,YAAa,EACbC,kBAAmB,GAEvBC,YAAa,CACTC,OAAQ,CACJC,mBAAoB,IACpBC,gBAAiB,IACjBC,eAAgB,IAChBC,iBAAkB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAC5CC,iBAAkB,CAAC,IAAK,KACxBC,QAAS,IACTC,cAAe,KAEnBrd,OAAQ,CACJmM,eAAgB,CACZmR,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbpR,mBAAoB,CAChBkR,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbnR,cAAe,CACXiR,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbhR,mBAAoB,CAChB8Q,iBAAkB,GAClBC,aAAc,IACdC,QAAS,KAEb/Q,oBAAqB,CACjB6Q,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEb9Q,oBAAqB,CACjB4Q,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEb7Q,qBAAsB,CAClB2Q,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEb5Q,uBAAwB,CACpB0Q,gBAAiB,GACjBC,aAAc,IACdC,QAAS,KAEb3Q,wBAAyB,CACrByQ,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEb1Q,6BAA8B,CAC1BwQ,gBAAiB,IACjBC,aAAc,IACdC,QAAS,KAEbjR,UAAW,CACP+Q,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEblR,iBAAkB,CACdgR,gBAAiB,IACjBE,QAAS,EACTD,aAAc,KAElBxX,gBAAiB,CACbuX,gBAAiB,GACjBC,aAAc,IACdC,SAAU,KAEd3X,eAAgB,CACZyX,iBAAkB,GAClBC,aAAc,IACdC,SAAU,OAItBC,aAAc,CACVC,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,EACPC,OAAQ,KAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,IAEZC,KAAM,CACFF,KAAM,EACNC,OAAQ,MAKxBE,WAAY,CACRN,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,GACPC,OAAQ,IAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,GAEZC,KAAM,CACFF,KAAM,IACNC,OAAQ,OAKxBG,SAAU,CACN3T,WAAY,CACR4T,SAAU,GACVV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnB7T,gBAAiB,CACb2T,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnB5T,kBAAmB,CACf0T,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnB3T,gBAAiB,CACbyT,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,GAEnB1T,qBAAsB,CAClBwT,QAAS,GACTV,QAAS,GACTW,cAAe,EACfC,cAAe,GAEnBzT,UAAW,CACPuT,QAAS,EACTV,SAAU,EACVW,cAAe,GACfC,cAAe,GAEnBxT,gBAAiB,CACbsT,QAAS,EACTV,SAAU,EACVW,cAAe,GACfC,cAAe,GAEnBvT,cAAe,CACXqT,QAAS,EACTV,SAAU,EACVW,cAAe,GACfC,cAAe,GAEnBtT,UAAW,CACPoT,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnBrT,cAAe,CACXmT,QAAS,EACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnBpT,WAAY,CACRkT,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAGvBC,YAAa,CACTC,QAAS,CACLZ,MAAO,GAEXa,UAAW,CACPb,MAAO,IAGfc,aAAc,CAAC,EAEfC,OAAQ,CAEJC,WAAY,EAEZC,QAAS,GAEbC,aAAc,CACVvX,wBAAyB,CACrBgV,QAAS,GAEb/U,wBAAyB,CACrB+U,QAAS,IAGjBwC,QAAS,CACLP,QAAS,CACLlB,QAAS,EACT0B,eAAgB,EAChBC,gBAAiB,EACjBC,cAAe,GACfC,gBAAiB,GAErBC,MAAO,CACH9B,QAAS,IACT0B,eAAe,IACfC,gBAAiB,IACjBC,cAAe,EACfC,gBAAiB,IAGzBE,gBAAiB,CACbC,WAAY,CACRC,QAAS,GACTC,QAAS,GACTlC,QAAS,GAEbzc,KAAM,CACF2e,QAAS,IAEb5e,MAAO,CACH4e,QAAS,KAGjBC,SAAU,CACNC,WAAY,GAEhBC,KAAM,CACFC,yBAA0B,EAG1BH,SAAU,CACN3b,uBAAwB,CACpB+b,kBAAmB,EACnBC,oBAAqB,GAEzB/b,wBAAyB,CACrB8b,kBAAmB,EACnBC,oBAAqB,GAEzBjc,wBAAyB,CACrBgc,kBAAmB,EACnBC,oBAAqB,GAEzBnd,cAAe,CACXkd,mBAAoB,EACpBC,oBAAqB,GAEzBld,eAAgB,CACZid,mBAAoB,EACpBC,oBAAqB,GAEzBpd,eAAgB,CACZmd,mBAAoB,EACpBC,oBAAqB,GAEzBvd,aAAc,CACVsd,mBAAoB,KACpBC,oBAAqB,MAEzBtd,cAAe,CACXqd,mBAAoB,EACpBC,oBAAqB,GAEzBxc,oBAAqB,CACjBwc,qBAAsB,EACtBD,kBAAmB,KAI/BE,aAAc,CACVC,gBAAiB,EACjBC,YAAa,EACbpD,YAAa,EACbqD,aAAc,GAElBC,OAAQ,CACJC,eAAgB,GAChBC,WAAY,GACZC,WAAY,EACZC,kBAAmB,IAWvBrgB,OAAQ,CACJW,KAAM,CACFmd,QAAS,EACTa,OAAQ,GAEZje,MAAO,CACHod,QAAS,GAEbwC,KAAM,CACFxC,QAAS,IACTyC,WAAY,CACRzC,QAAS,IAGjBL,aAAc,CAAC,EACfO,WAAY,CACRpd,MAAO,CACH+d,OAAQ,MAGhB6B,iBAAkB,CAAC,EACnBC,eAAgB,CAAC,EACjBC,gBAAiB,CACb9U,mBAAoB,CAChBkS,QAAS,KAEbnS,iBAAkB,CACdmS,QAAS,MAGjB6C,cAAe,CACX/U,mBAAoB,CAChBkS,QAAS,EACTa,OAAQ,GAEZhT,iBAAkB,CACdmS,QAAS,EACTa,OAAQ,IAGhBiC,SAAU,CACNngB,eAAgB,CACZke,OAAQ,GAEZxW,gBAAiB,CAAC,EAClBzH,MAAO,CACHod,QAAS,EACTa,OAAQ,GAEZhe,KAAM,CACFmd,QAAS,EACTa,OAAQ,GAEZlV,cAAe,CACXqU,QAAS,EACTa,OAAQ,GAEZjV,aAAc,CAAC,EACfC,kBAAmB,CAAC,EACpBC,gBAAiB,CACbkU,QAAS,GAEbjU,mBAAoB,CAChBiU,QAAS,IAGjByB,SAAU,CAAC,EACX1C,YAAa,CACTgE,MAAO,O","sources":["webpack://VexFlowFont.Bravura/webpack/universalModuleDefinition","webpack://VexFlowFont.Bravura/webpack/bootstrap","webpack://VexFlowFont.Bravura/webpack/runtime/define property getters","webpack://VexFlowFont.Bravura/webpack/runtime/hasOwnProperty shorthand","webpack://VexFlowFont.Bravura/./src/fonts/bravura_glyphs.ts","webpack://VexFlowFont.Bravura/./entry/vexflow-font-bravura.ts","webpack://VexFlowFont.Bravura/./src/fonts/common_metrics.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VexFlowFont\"] = factory();\n\telse\n\t\troot[\"VexFlowFont\"] = root[\"VexFlowFont\"] || {}, root[\"VexFlowFont\"][\"Bravura\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export const BravuraFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 469,\n y_min: 0,\n y_max: 295,\n ha: 295,\n o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 469,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 36,\n y_min: 868,\n y_max: 1120,\n ha: 252,\n o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 500,\n y_min: 0,\n y_max: 502,\n ha: 502,\n o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z',\n },\n segno: {\n x_min: 4,\n x_max: 550,\n y_min: -27,\n y_max: 759,\n ha: 786,\n o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z',\n },\n coda: {\n x_min: -4,\n x_max: 955,\n y_min: -158,\n y_max: 898,\n ha: 1056,\n o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z',\n },\n gClef: {\n x_min: 0,\n x_max: 671,\n y_min: -658,\n y_max: 1098,\n ha: 1756,\n o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z',\n },\n cClef: {\n x_min: 0,\n x_max: 699,\n y_min: -506,\n y_max: 506,\n ha: 1012,\n o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z',\n },\n fClef: {\n x_min: -5,\n x_max: 684,\n y_min: -635,\n y_max: 262,\n ha: 897,\n o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 382,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z',\n },\n '6stringTabClef': {\n x_min: -3,\n x_max: 408,\n y_min: -748,\n y_max: 764,\n ha: 1512,\n o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 314,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 426,\n y_min: -257,\n y_max: 254,\n ha: 511,\n o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 401,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 383,\n y_min: -251,\n y_max: 246,\n ha: 497,\n o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 421,\n y_min: -250,\n y_max: 249,\n ha: 499,\n o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 416,\n y_min: -259,\n y_max: 259,\n ha: 518,\n o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z',\n },\n timeSigCommon: {\n x_min: 5,\n x_max: 424,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 418,\n y_min: -359,\n y_max: 361,\n ha: 720,\n o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z',\n },\n timeSigPlus: {\n x_min: -1,\n x_max: 499,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z',\n },\n timeSigPlusSmall: {\n x_min: -1,\n x_max: 255,\n y_min: -133,\n y_max: 123,\n ha: 256,\n o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 448,\n y_min: -35,\n y_max: 40,\n ha: 75,\n o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z',\n },\n timeSigParensLeft: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 599,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 546,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 377,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 290,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 603,\n y_min: -218,\n y_max: 213,\n ha: 431,\n o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z',\n },\n noteheadCircledWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -225,\n y_max: 211,\n ha: 436,\n o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z',\n },\n noteheadCircledHalf: {\n x_min: -18,\n x_max: 311,\n y_min: -162,\n y_max: 167,\n ha: 329,\n o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z',\n },\n noteheadCircledBlack: {\n x_min: -21,\n x_max: 321,\n y_min: -171,\n y_max: 167,\n ha: 338,\n o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 416,\n y_min: -190,\n y_max: 198,\n ha: 388,\n o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 292,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 207 -180 l 420 180 l 0 180 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 293,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 422 -180 l 207 180 l 0 -180 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 596,\n y_min: -179,\n y_max: 168,\n ha: 347,\n o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z',\n },\n noteheadSlashedWhole1: {\n x_min: -22,\n x_max: 433,\n y_min: -157,\n y_max: 148,\n ha: 305,\n o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z',\n },\n noteheadSlashedHalf1: {\n x_min: -67,\n x_max: 386,\n y_min: -142,\n y_max: 160,\n ha: 302,\n o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z',\n },\n noteheadSlashedBlack1: {\n x_min: -80,\n x_max: 375,\n y_min: -165,\n y_max: 167,\n ha: 332,\n o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 596,\n y_min: -178,\n y_max: 169,\n ha: 347,\n o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z',\n },\n noteheadSlashedWhole2: {\n x_min: -18,\n x_max: 436,\n y_min: -154,\n y_max: 151,\n ha: 305,\n o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 380,\n y_min: -134,\n y_max: 168,\n ha: 302,\n o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z',\n },\n noteheadSlashedBlack2: {\n x_min: -79,\n x_max: 376,\n y_min: -164,\n y_max: 168,\n ha: 332,\n o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 432,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 270,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 251,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z',\n },\n noteheadParenthesis: {\n x_min: -73,\n x_max: 368,\n y_min: -180,\n y_max: 182,\n ha: 362,\n o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z',\n },\n noteheadParenthesisRight: {\n x_min: -36,\n x_max: 73,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 109,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 315,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 -180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 180 l 0 -180 l 488 -180 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 278,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z',\n },\n tremolo1: {\n x_min: -150,\n x_max: 150,\n y_min: -93,\n y_max: 94,\n ha: 187,\n o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 264,\n y_min: -810,\n y_max: 9,\n ha: 819,\n o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 306,\n y_min: -14,\n y_max: 808,\n ha: 822,\n o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -813,\n y_max: 2,\n ha: 815,\n o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 291,\n y_min: -9,\n y_max: 812,\n ha: 821,\n o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 149,\n ha: 961,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 273,\n y_min: -172,\n y_max: 812,\n ha: 984,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 347,\n ha: 1159,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -376,\n y_max: 812,\n ha: 1188,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 533,\n ha: 1345,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -580,\n y_max: 812,\n ha: 1392,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 226,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 168,\n y_min: -335,\n y_max: 341,\n ha: 676,\n o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 249,\n y_min: -348,\n y_max: 350,\n ha: 698,\n o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 247,\n y_min: -125,\n y_max: 127,\n ha: 252,\n o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 411,\n y_min: -175,\n y_max: 437,\n ha: 612,\n o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 1,\n x_max: 227,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 1,\n x_max: 466,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 179,\n y_min: -353,\n y_max: 307,\n ha: 660,\n o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 3,\n x_max: 317,\n y_min: -347,\n y_max: 369,\n ha: 716,\n o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 1,\n x_max: 287,\n y_min: -174,\n y_max: 438,\n ha: 612,\n o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 341,\n y_min: -350,\n y_max: 348,\n ha: 698,\n o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z',\n },\n accidentalBakiyeFlat: {\n x_min: -1,\n x_max: 286,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 229,\n y_min: -337,\n y_max: 322,\n ha: 659,\n o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1,\n x_max: 339,\n y_min: -338,\n y_max: 321,\n ha: 659,\n o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 300,\n y_min: -472,\n y_max: 157,\n ha: 629,\n o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 421,\n y_min: -318,\n y_max: 328,\n ha: 646,\n o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 339,\n y_min: 1,\n y_max: 245,\n ha: 244,\n o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 339,\n y_min: -244,\n y_max: 0,\n ha: 244,\n o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z',\n },\n articTenutoAbove: {\n x_min: -1,\n x_max: 338,\n y_min: 0,\n y_max: 48,\n ha: 48,\n o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z',\n },\n articTenutoBelow: {\n x_min: -1,\n x_max: 338,\n y_min: -48,\n y_max: 0,\n ha: 48,\n o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 84,\n y_min: 0,\n y_max: 84,\n ha: 84,\n o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 84,\n y_min: -84,\n y_max: 0,\n ha: 84,\n o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z',\n },\n articStaccatissimoAbove: {\n x_min: 1,\n x_max: 100,\n y_min: -2,\n y_max: 293,\n ha: 295,\n o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z',\n },\n articStaccatissimoBelow: {\n x_min: 1,\n x_max: 100,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z',\n },\n articMarcatoAbove: {\n x_min: -1,\n x_max: 235,\n y_min: -1,\n y_max: 253,\n ha: 254,\n o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z',\n },\n articMarcatoBelow: {\n x_min: -1,\n x_max: 235,\n y_min: -254,\n y_max: 0,\n ha: 254,\n o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z',\n },\n fermataAbove: {\n x_min: 3,\n x_max: 605,\n y_min: -3,\n y_max: 329,\n ha: 332,\n o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z',\n },\n fermataBelow: {\n x_min: 3,\n x_max: 605,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 603,\n y_min: -1,\n y_max: 333,\n ha: 334,\n o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 603,\n y_min: -333,\n y_max: 1,\n ha: 334,\n o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: 0,\n y_max: 408,\n ha: 408,\n o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 715,\n y_min: -408,\n y_max: 0,\n ha: 408,\n o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 726,\n y_min: 0,\n y_max: 449,\n ha: 449,\n o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 726,\n y_min: -449,\n y_max: 0,\n ha: 449,\n o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 604,\n y_min: 0,\n y_max: 341,\n ha: 341,\n o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 604,\n y_min: -341,\n y_max: 0,\n ha: 341,\n o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z',\n },\n breathMarkComma: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n breathMarkUpbow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n caesura: {\n x_min: 0,\n x_max: 384,\n y_min: -1,\n y_max: 532,\n ha: 533,\n o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 373,\n y_min: 0,\n y_max: 530,\n ha: 530,\n o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 381,\n y_min: -249,\n y_max: 250,\n ha: 499,\n o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 282,\n y_min: -135,\n y_max: 9,\n ha: 144,\n o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z',\n },\n restWholeLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -135,\n y_max: 20,\n ha: 155,\n o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -2,\n y_max: 142,\n ha: 144,\n o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z',\n },\n restHalfLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -13,\n y_max: 142,\n ha: 155,\n o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z',\n },\n restQuarter: {\n x_min: 1,\n x_max: 270,\n y_min: -375,\n y_max: 373,\n ha: 748,\n o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 247,\n y_min: -251,\n y_max: 174,\n ha: 425,\n o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 320,\n y_min: -500,\n y_max: 179,\n ha: 679,\n o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 363,\n y_min: -500,\n y_max: 426,\n ha: 926,\n o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -753,\n y_max: 430,\n ha: 1183,\n o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 485,\n y_min: -750,\n y_max: 689,\n ha: 1439,\n o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z',\n },\n dynamicPiano: {\n x_min: -89,\n x_max: 366,\n y_min: -142,\n y_max: 274,\n ha: 416,\n o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z',\n },\n dynamicMezzo: {\n x_min: -20,\n x_max: 446,\n y_min: -10,\n y_max: 274,\n ha: 284,\n o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z',\n },\n dynamicForte: {\n x_min: -141,\n x_max: 364,\n y_min: -152,\n y_max: 444,\n ha: 596,\n o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z',\n },\n dynamicRinforzando: {\n x_min: -20,\n x_max: 277,\n y_min: 0,\n y_max: 274,\n ha: 274,\n o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 229,\n y_min: -10,\n y_max: 273,\n ha: 283,\n o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z',\n },\n dynamicZ: {\n x_min: -30,\n x_max: 244,\n y_min: -10,\n y_max: 268,\n ha: 278,\n o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z',\n },\n ornamentTrill: {\n x_min: 0,\n x_max: 521,\n y_min: -10,\n y_max: 390,\n ha: 400,\n o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 460,\n y_min: 0,\n y_max: 218,\n ha: 218,\n o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 460,\n y_min: -90,\n y_max: 306,\n ha: 396,\n o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z',\n },\n ornamentMordent: {\n x_min: 1,\n x_max: 729,\n y_min: -73,\n y_max: 319,\n ha: 392,\n o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 725,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z',\n },\n ornamentTremblement: {\n x_min: 1,\n x_max: 985,\n y_min: 0,\n y_max: 244,\n ha: 244,\n o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1119,\n y_min: 0,\n y_max: 481,\n ha: 481,\n o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 2,\n x_max: 1150,\n y_min: -367,\n y_max: 245,\n ha: 612,\n o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1048,\n y_min: -367,\n y_max: 331,\n ha: 698,\n o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 949,\n y_min: 0,\n y_max: 381,\n ha: 381,\n o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1278,\n y_min: 0,\n y_max: 247,\n ha: 247,\n o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1277,\n y_min: -62,\n y_max: 333,\n ha: 395,\n o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 859,\n y_min: -222,\n y_max: 246,\n ha: 468,\n o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z',\n },\n brassScoop: {\n x_min: 1,\n x_max: 320,\n y_min: -373,\n y_max: 13,\n ha: 386,\n o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 489,\n y_min: -40,\n y_max: 346,\n ha: 386,\n o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z',\n },\n brassFallLipShort: {\n x_min: 1,\n x_max: 293,\n y_min: -345,\n y_max: 42,\n ha: 387,\n o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 392,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 304,\n y_min: 0,\n y_max: 304,\n ha: 304,\n o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 379,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 620,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z',\n },\n brassSmear: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 170,\n ha: 170,\n o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 318,\n ha: 318,\n o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z',\n },\n stringsUpBow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 200,\n ha: 200,\n o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 1019,\n y_min: -8,\n y_max: 555,\n ha: 563,\n o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 450,\n y_min: 0,\n y_max: 450,\n ha: 450,\n o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -33,\n x_max: 292,\n y_min: 0,\n y_max: 119,\n ha: 119,\n o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z',\n },\n arrowheadBlackUp: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z',\n },\n arrowheadBlackDown: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z',\n },\n arpeggiatoUp: {\n x_min: 1,\n x_max: 229,\n y_min: 7,\n y_max: 1511,\n ha: 1504,\n o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z',\n },\n arpeggiatoDown: {\n x_min: 1,\n x_max: 229,\n y_min: -4,\n y_max: 1500,\n ha: 1504,\n o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 762,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1232,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z',\n },\n csymHalfDiminished: {\n x_min: -16,\n x_max: 488,\n y_min: -15,\n y_max: 489,\n ha: 504,\n o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 395,\n y_min: 1,\n y_max: 396,\n ha: 395,\n o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 558,\n y_min: 1,\n y_max: 477,\n ha: 476,\n o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 325,\n y_min: 216,\n y_max: 260,\n ha: 44,\n o: 'm 468 374 l 0 374 l 0 311 l 468 311 z',\n },\n csymParensLeftTall: {\n x_min: 1,\n x_max: 185,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z',\n },\n csymParensRightTall: {\n x_min: -20,\n x_max: 164,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 155,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 156,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z',\n },\n csymParensRightVeryTall: {\n x_min: -15,\n x_max: 107,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 999,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z',\n },\n accSagittal5v7KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z',\n },\n accSagittal5v7KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z',\n },\n accSagittal5CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z',\n },\n accSagittal5CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z',\n },\n accSagittal7CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z',\n },\n accSagittal7CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal25SmallDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z',\n },\n accSagittal25SmallDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z',\n },\n accSagittal35MediumDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z',\n },\n accSagittal35MediumDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal11MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z',\n },\n accSagittal11MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z',\n },\n accSagittal11LargeDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal11LargeDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp25SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z',\n },\n accSagittalFlat25SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z',\n },\n accSagittalSharp7CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z',\n },\n accSagittalFlat7CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp5CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z',\n },\n accSagittalSharp5v7kDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z',\n },\n accSagittalFlat5v7kUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z',\n },\n accSagittalSharp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z',\n },\n accSagittalSharp5v7kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -361,\n y_max: 172,\n ha: 533,\n o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5v7kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 361,\n ha: 533,\n o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z',\n },\n accSagittalSharp5CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z',\n },\n accSagittalFlat5CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z',\n },\n accSagittalSharp7CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z',\n },\n accSagittalFlat7CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp25SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z',\n },\n accSagittalFlat25SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z',\n },\n accSagittalSharp35MUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z',\n },\n accSagittalFlat35MDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z',\n },\n accSagittalSharp11MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z',\n },\n accSagittalFlat11MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z',\n },\n accSagittalSharp11LUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11LDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp35LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat35LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp25SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z',\n },\n accSagittalDoubleFlat25SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z',\n },\n accSagittalDoubleSharp7CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z',\n },\n accSagittalDoubleFlat7CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z',\n },\n accSagittalDoubleSharp5CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z',\n },\n accSagittalDoubleFlat5CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z',\n },\n accSagittalDoubleSharp5v7kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z',\n },\n accSagittalDoubleFlat5v7kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z',\n },\n accSagittalDoubleSharp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z',\n },\n accSagittalDoubleFlat: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z',\n },\n accSagittal7v11KleismaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z',\n },\n accSagittal7v11KleismaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal55CommaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z',\n },\n accSagittal55CommaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal7v11CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal7v11CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal5v11SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z',\n },\n accSagittal5v11SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat5v11SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z',\n },\n accSagittalFlat7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z',\n },\n accSagittalSharp55CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z',\n },\n accSagittalFlat55CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z',\n },\n accSagittalSharp17CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z',\n },\n accSagittalFlat17CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z',\n },\n accSagittalSharp7v11kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z',\n },\n accSagittalFlat7v11kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z',\n },\n accSagittalSharp7v11kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z',\n },\n accSagittalFlat7v11kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z',\n },\n accSagittalSharp17CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp55CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat55CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z',\n },\n accSagittalSharp7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z',\n },\n accSagittalFlat7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z',\n },\n accSagittalFlat5v11SDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp5v11SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat5v11SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp7v11CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z',\n },\n accSagittalDoubleFlat7v11CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z',\n },\n accSagittalDoubleSharp55CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z',\n },\n accSagittalDoubleFlat55CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z',\n },\n accSagittalDoubleSharp17CDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z',\n },\n accSagittalDoubleFlat17CUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z',\n },\n accSagittalDoubleSharp7v11kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat7v11kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittal23CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z',\n },\n accSagittal23CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z',\n },\n accSagittal5v19CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z',\n },\n accSagittal5v19CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal5v23SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z',\n },\n accSagittal5v23SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittalSharp5v23SDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z',\n },\n accSagittalFlat5v23SUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z',\n },\n accSagittalFlat5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z',\n },\n accSagittalFlat23CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z',\n },\n accSagittalSharp23CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z',\n },\n accSagittalFlat23CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalFlat5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z',\n },\n accSagittalSharp5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z',\n },\n accSagittalDoubleSharp5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z',\n },\n accSagittalDoubleFlat5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z',\n },\n accSagittalDoubleSharp5v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z',\n },\n accSagittalDoubleFlat5v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z',\n },\n accSagittalDoubleSharp23CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalDoubleFlat23CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z',\n },\n accSagittal19SchismaUp: {\n x_min: 0,\n x_max: 125,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z',\n },\n accSagittal19SchismaDown: {\n x_min: 0,\n x_max: 125,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal143CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z',\n },\n accSagittal143CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal11v49CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z',\n },\n accSagittal11v49CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z',\n },\n accSagittal19CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal19CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal7v19CommaUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal7v19CommaDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal49SmallDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal49SmallDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal23SmallDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal23SmallDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal5v13MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z',\n },\n accSagittal5v13MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z',\n },\n accSagittal11v19MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z',\n },\n accSagittal11v19MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z',\n },\n accSagittal49MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z',\n },\n accSagittal49MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z',\n },\n accSagittal5v49MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z',\n },\n accSagittal5v49MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z',\n },\n accSagittal49LargeDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z',\n },\n accSagittal49LargeDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z',\n },\n accSagittal11v19LargeDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z',\n },\n accSagittal11v19LargeDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z',\n },\n accSagittal5v13LargeDiesisUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z',\n },\n accSagittal5v13LargeDiesisDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z',\n },\n accSagittalFlat23SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp49SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z',\n },\n accSagittalFlat49SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalSharp7v19CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z',\n },\n accSagittalFlat7v19CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z',\n },\n accSagittalSharp19CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z',\n },\n accSagittalFlat19CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z',\n },\n accSagittalSharp11v49CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat11v49CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z',\n },\n accSagittalSharp143CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat143CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z',\n },\n accSagittalFlat17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z',\n },\n accSagittalSharp19sDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z',\n },\n accSagittalFlat19sUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z',\n },\n accSagittalSharp19sUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z',\n },\n accSagittalFlat19sDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z',\n },\n accSagittalSharp17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp143CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalFlat143CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp11v49CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z',\n },\n accSagittalFlat11v49CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z',\n },\n accSagittalSharp19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp49SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat49SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp23SUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat23SDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp5v13MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z',\n },\n accSagittalFlat5v13MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z',\n },\n accSagittalSharp11v19MUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11v19MDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp49MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z',\n },\n accSagittalFlat49MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z',\n },\n accSagittalSharp5v49MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z',\n },\n accSagittalFlat5v49MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z',\n },\n accSagittalSharp49LUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z',\n },\n accSagittalFlat49LDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z',\n },\n accSagittalSharp11v19LUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z',\n },\n accSagittalFlat11v19LDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v13LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat5v13LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalDoubleSharp23SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalDoubleFlat23SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z',\n },\n accSagittalDoubleSharp49SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z',\n },\n accSagittalDoubleFlat49SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalDoubleSharp7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalDoubleFlat7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z',\n },\n accSagittalDoubleSharp19CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z',\n },\n accSagittalDoubleFlat19CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z',\n },\n accSagittalDoubleSharp11v49CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat11v49CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp143CDown: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat143CUp: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp17kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat17kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittalDoubleSharp19sDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalDoubleFlat19sUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalShaftUp: {\n x_min: 0,\n x_max: 31,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z',\n },\n accSagittalShaftDown: {\n x_min: 0,\n x_max: 31,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z',\n },\n accSagittalAcute: {\n x_min: 0,\n x_max: 125,\n y_min: -62,\n y_max: 125,\n ha: 187,\n o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z',\n },\n accSagittalGrave: {\n x_min: 0,\n x_max: 125,\n y_min: -125,\n y_max: 62,\n ha: 187,\n o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z',\n },\n accSagittal1MinaUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal1MinaDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal2MinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal2MinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal1TinaUp: {\n x_min: 0,\n x_max: 93,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z',\n },\n accSagittal1TinaDown: {\n x_min: 0,\n x_max: 93,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z',\n },\n accSagittal2TinasUp: {\n x_min: 0,\n x_max: 94,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal2TinasDown: {\n x_min: 0,\n x_max: 94,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z',\n },\n accSagittal3TinasUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal3TinasDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal4TinasUp: {\n x_min: 0,\n x_max: 187,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal4TinasDown: {\n x_min: 0,\n x_max: 187,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal5TinasUp: {\n x_min: 0,\n x_max: 218,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal5TinasDown: {\n x_min: 0,\n x_max: 218,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal6TinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal6TinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal7TinasUp: {\n x_min: 0,\n x_max: 281,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal7TinasDown: {\n x_min: 0,\n x_max: 281,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal8TinasUp: {\n x_min: 0,\n x_max: 312,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal8TinasDown: {\n x_min: 0,\n x_max: 312,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal9TinasUp: {\n x_min: -7,\n x_max: 312,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal9TinasDown: {\n x_min: -7,\n x_max: 312,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittalFractionalTinaUp: {\n x_min: -3,\n x_max: 35,\n y_min: 73,\n y_max: 111,\n ha: 38,\n o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z',\n },\n accSagittalFractionalTinaDown: {\n x_min: -3,\n x_max: 35,\n y_min: -111,\n y_max: -73,\n ha: 38,\n o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 164,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 414,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 281,\n y_min: -203,\n y_max: 203,\n ha: 406,\n o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 281,\n y_min: -186,\n y_max: 186,\n ha: 372,\n o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z',\n },\n },\n fontFamily: 'Bravura',\n resolution: 1000,\n generatedOn: '2022-12-18T09:06:51.407Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// This entry file will be exported as a font module that can be dynamically loaded by vexflow-core.js.\n// Search for 'vexflow-font-bravura' in Gruntfile.js.\n// ADD_MUSIC_FONT\n// To add a new music engraving font named XXX, make a copy of this file and name it vexflow-font-xxx.ts.\n// Then you will need to import the xxx_glyphs.ts and xxx_metrics.ts files.\nimport { BravuraFont } from '../src/fonts/bravura_glyphs';\nimport { CommonMetrics } from '../src/fonts/common_metrics';\nexport const Font = {\n data: BravuraFont,\n metrics: CommonMetrics,\n};\nexport default Font;\n","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","data","glyphs","bracketTop","x_min","x_max","y_min","y_max","ha","bracketBottom","barlineTick","breathMarkTick","segno","coda","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXDoubleWhole","noteheadXWhole","noteheadXHalf","noteheadXBlack","noteheadCircleXDoubleWhole","noteheadCircleXWhole","noteheadCircleXHalf","noteheadCircleX","noteheadCircledDoubleWhole","noteheadCircledWhole","noteheadCircledHalf","noteheadCircledBlack","noteheadDoubleWholeSquare","noteheadSquareWhite","noteheadSquareBlack","noteheadTriangleDownDoubleWhole","noteheadTriangleDownWhole","noteheadTriangleDownHalf","noteheadTriangleDownBlack","noteheadTriangleUpDoubleWhole","noteheadTriangleUpWhole","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesis","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBuyukMucennebSharp","accidentalBakiyeFlat","accidentalKomaSharp","accidentalKucukMucennebSharp","accidentalKoron","accidentalSori","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","wiggleArpeggiatoUp","arrowheadBlackUp","arrowheadBlackDown","arpeggiatoUp","arpeggiatoDown","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","csymDiminished","csymHalfDiminished","csymAugmented","csymMajorSeventh","csymMinor","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","fontFamily","resolution","generatedOn","metrics","smufl","stave","padding","endPaddingMax","endPaddingMin","unalignedNotePadding","accidental","noteheadAccidentalPadding","leftPadding","accidentalSpacing","chordSymbol","global","superscriptOffset","subscriptOffset","kerningOffset","lowerKerningText","upperKerningText","spacing","superSubRatio","leftSideBearing","advanceWidth","yOffset","clef_default","width","annotations","treble","line","shiftX","bass","clef_small","ornament","xOffset","stemUpYOffset","reportedWidth","parenthesis","default","gracenote","pedalMarking","digits","shiftLine","shiftY","articulation","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","noteHead","minPadding","stem","heightAdjustmentForFlag","offsetYBaseStemUp","offsetYBaseStemDown","stringNumber","verticalPadding","stemPadding","rightPadding","tuplet","noteHeadOffset","stemOffset","bottomLine","topModifierOffset","flag","staveTempo","clefNote_default","clefNote_small","stroke_straight","stroke_wiggly","textNote","scale"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-font-custom.js b/build/cjs/vexflow-font-custom.js new file mode 100644 index 0000000000..6ce6318618 --- /dev/null +++ b/build/cjs/vexflow-font-custom.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.VexFlowFont=t():(e.VexFlowFont=e.VexFlowFont||{},e.VexFlowFont.Custom=t())}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var e={d:(t,b)=>{for(var f in b)e.o(b,f)&&!e.o(t,f)&&Object.defineProperty(t,f,{enumerable:!0,get:b[f]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};e.d(t,{default:()=>b});const b={data:{resolution:1e3,fontFamily:"VexFlowCustom",glyphs:{vexAccidentalMicrotonal1:{x_min:-171.5,x_max:483.1875,ha:493,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 "},vexAccidentalMicrotonal3:{x_min:0,x_max:430.75,ha:360,o:"m -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z "},vexAccidentalMicrotonal4:{x_min:0,x_max:430.75,ha:360,o:"m 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z "},vexNoteHeadRectBlack:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 "},vexNoteHeadRectWhite:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100"},vexWiggleArpeggioUp:{x_min:58.53125,x_max:228.671875,ha:294,o:"m 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 "}}},metrics:{smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}}};return t=t.default})())); +//# sourceMappingURL=vexflow-font-custom.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-font-custom.js.map b/build/cjs/vexflow-font-custom.js.map new file mode 100644 index 0000000000..27478fd2b1 --- /dev/null +++ b/build/cjs/vexflow-font-custom.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vexflow-font-custom.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,KAEzBD,EAAkB,YAAIA,EAAkB,aAAK,CAAC,EAAGA,EAAkB,YAAU,OAAIC,IAClF,CATD,CASsB,oBAAXK,OAAyBA,OAA+B,oBAAfC,WAA6BA,WAAaC,MAAO,I,mBCRrG,IAAIC,EAAsB,CCA1BA,EAAwB,CAACP,EAASQ,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAEV,EAASS,IAC5EE,OAAOC,eAAeZ,EAASS,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDF,EAAwB,CAACQ,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,4BCA3E,MCQP,EAJoB,CAChBI,KCLsB,CACtBC,WAAY,IACZC,WAAY,gBACZC,OAAQ,CACJC,yBAA0B,CACtBC,OAAQ,MACRC,MAAO,SACPC,GAAI,IACJjB,EAAG,0lDAEPkB,yBAA0B,CACtBH,MAAO,EACPC,MAAO,OACPC,GAAI,IACJjB,EAAG,qoGAEPmB,yBAA0B,CACtBJ,MAAO,EACPC,MAAO,OACPC,GAAI,IACJjB,EAAG,4gDAEPoB,qBAAsB,CAClBL,MAAO,EACPC,MAAO,OACPC,GAAI,IACJjB,EAAG,kDAEPqB,qBAAsB,CAClBN,MAAO,EACPC,MAAO,OACPC,GAAI,IACJjB,EAAG,kGAEPsB,oBAAqB,CACjBP,MAAO,SACPC,MAAO,WACPC,GAAI,IACJjB,EAAG,ohBDhCXuB,QDNyB,CACzBC,OAAO,EACPC,MAAO,CACHC,QAAS,GACTC,cAAe,GACfC,cAAe,EACfC,qBAAsB,IAE1BC,WAAY,CACRC,0BAA2B,EAC3BC,YAAa,EACbC,kBAAmB,GAEvBC,YAAa,CACTC,OAAQ,CACJC,mBAAoB,IACpBC,gBAAiB,IACjBC,eAAgB,IAChBC,iBAAkB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAC5CC,iBAAkB,CAAC,IAAK,KACxBC,QAAS,IACTC,cAAe,KAEnB7B,OAAQ,CACJ8B,eAAgB,CACZC,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbC,mBAAoB,CAChBH,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbE,cAAe,CACXJ,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbG,mBAAoB,CAChBL,iBAAkB,GAClBC,aAAc,IACdC,QAAS,KAEbI,oBAAqB,CACjBN,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEbK,oBAAqB,CACjBP,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbM,qBAAsB,CAClBR,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbO,uBAAwB,CACpBT,gBAAiB,GACjBC,aAAc,IACdC,QAAS,KAEbQ,wBAAyB,CACrBV,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEbS,6BAA8B,CAC1BX,gBAAiB,IACjBC,aAAc,IACdC,QAAS,KAEbU,UAAW,CACPZ,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbW,iBAAkB,CACdb,gBAAiB,IACjBE,QAAS,EACTD,aAAc,KAElBa,gBAAiB,CACbd,gBAAiB,GACjBC,aAAc,IACdC,SAAU,KAEda,eAAgB,CACZf,iBAAkB,GAClBC,aAAc,IACdC,SAAU,OAItBc,aAAc,CACVC,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,EACPC,OAAQ,KAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,IAEZC,KAAM,CACFF,KAAM,EACNC,OAAQ,MAKxBE,WAAY,CACRN,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,GACPC,OAAQ,IAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,GAEZC,KAAM,CACFF,KAAM,IACNC,OAAQ,OAKxBG,SAAU,CACNC,WAAY,CACRC,SAAU,GACVxB,QAAS,EACTyB,cAAe,EACfC,cAAe,IAEnBC,gBAAiB,CACbH,QAAS,GACTxB,QAAS,EACTyB,cAAe,EACfC,cAAe,IAEnBE,kBAAmB,CACfJ,QAAS,GACTxB,QAAS,EACTyB,cAAe,EACfC,cAAe,IAEnBG,gBAAiB,CACbL,QAAS,GACTxB,QAAS,EACTyB,cAAe,EACfC,cAAe,GAEnBI,qBAAsB,CAClBN,QAAS,GACTxB,QAAS,GACTyB,cAAe,EACfC,cAAe,GAEnBK,UAAW,CACPP,QAAS,EACTxB,SAAU,EACVyB,cAAe,GACfC,cAAe,GAEnBM,gBAAiB,CACbR,QAAS,EACTxB,SAAU,EACVyB,cAAe,GACfC,cAAe,GAEnBO,cAAe,CACXT,QAAS,EACTxB,SAAU,EACVyB,cAAe,GACfC,cAAe,GAEnBQ,UAAW,CACPV,QAAS,GACTxB,QAAS,EACTyB,cAAe,EACfC,cAAe,IAEnBS,cAAe,CACXX,QAAS,EACTxB,QAAS,EACTyB,cAAe,EACfC,cAAe,IAEnBU,WAAY,CACRZ,QAAS,GACTxB,QAAS,EACTyB,cAAe,EACfC,cAAe,IAGvBW,YAAa,CACTC,QAAS,CACLvB,MAAO,GAEXwB,UAAW,CACPxB,MAAO,IAGfyB,aAAc,CAAC,EAEfC,OAAQ,CAEJC,WAAY,EAEZC,QAAS,GAEbC,aAAc,CACVC,wBAAyB,CACrBjE,QAAS,GAEbkE,wBAAyB,CACrBlE,QAAS,IAGjBmE,QAAS,CACLT,QAAS,CACL3C,QAAS,EACTqD,eAAgB,EAChBC,gBAAiB,EACjBC,cAAe,GACfC,gBAAiB,GAErBC,MAAO,CACHzD,QAAS,IACTqD,eAAe,IACfC,gBAAiB,IACjBC,cAAe,EACfC,gBAAiB,IAGzBE,gBAAiB,CACbC,WAAY,CACRC,QAAS,GACTC,QAAS,GACT7D,QAAS,GAEb8D,KAAM,CACFD,QAAS,IAEbE,MAAO,CACHF,QAAS,KAGjBG,SAAU,CACNC,WAAY,GAEhBC,KAAM,CACFC,yBAA0B,EAG1BH,SAAU,CACNI,uBAAwB,CACpBC,kBAAmB,EACnBC,oBAAqB,GAEzBC,wBAAyB,CACrBF,kBAAmB,EACnBC,oBAAqB,GAEzBE,wBAAyB,CACrBH,kBAAmB,EACnBC,oBAAqB,GAEzBG,cAAe,CACXJ,mBAAoB,EACpBC,oBAAqB,GAEzBI,eAAgB,CACZL,mBAAoB,EACpBC,oBAAqB,GAEzBK,eAAgB,CACZN,mBAAoB,EACpBC,oBAAqB,GAEzBM,aAAc,CACVP,mBAAoB,KACpBC,oBAAqB,MAEzBO,cAAe,CACXR,mBAAoB,EACpBC,oBAAqB,GAEzBQ,oBAAqB,CACjBR,qBAAsB,EACtBD,kBAAmB,KAI/BU,aAAc,CACVC,gBAAiB,EACjBC,YAAa,EACb1F,YAAa,EACb2F,aAAc,GAElBC,OAAQ,CACJC,eAAgB,GAChBC,WAAY,GACZC,WAAY,EACZC,kBAAmB,IAWvBnH,OAAQ,CACJ0F,KAAM,CACFtC,QAAS,EACTwB,OAAQ,GAEZe,MAAO,CACHvC,QAAS,GAEbgE,KAAM,CACFhE,QAAS,IACTiE,WAAY,CACRjE,QAAS,IAGjBL,aAAc,CAAC,EACfO,WAAY,CACRgE,MAAO,CACH1C,OAAQ,MAGhB2C,iBAAkB,CAAC,EACnBC,eAAgB,CAAC,EACjBC,gBAAiB,CACbC,mBAAoB,CAChBtE,QAAS,KAEbuE,iBAAkB,CACdvE,QAAS,MAGjBwE,cAAe,CACXF,mBAAoB,CAChBtE,QAAS,EACTwB,OAAQ,GAEZ+C,iBAAkB,CACdvE,QAAS,EACTwB,OAAQ,IAGhBiD,SAAU,CACNC,eAAgB,CACZlD,OAAQ,GAEZmD,gBAAiB,CAAC,EAClBpC,MAAO,CACHvC,QAAS,EACTwB,OAAQ,GAEZc,KAAM,CACFtC,QAAS,EACTwB,OAAQ,GAEZoD,cAAe,CACX5E,QAAS,EACTwB,OAAQ,GAEZqD,aAAc,CAAC,EACfC,kBAAmB,CAAC,EACpBC,gBAAiB,CACb/E,QAAS,GAEbgF,mBAAoB,CAChBhF,QAAS,IAGjBwC,SAAU,CAAC,EACXvE,YAAa,CACTgH,MAAO,O","sources":["webpack://VexFlowFont.Custom/webpack/universalModuleDefinition","webpack://VexFlowFont.Custom/webpack/bootstrap","webpack://VexFlowFont.Custom/webpack/runtime/define property getters","webpack://VexFlowFont.Custom/webpack/runtime/hasOwnProperty shorthand","webpack://VexFlowFont.Custom/./src/fonts/common_metrics.ts","webpack://VexFlowFont.Custom/./entry/vexflow-font-custom.ts","webpack://VexFlowFont.Custom/./src/fonts/custom_glyphs.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VexFlowFont\"] = factory();\n\telse\n\t\troot[\"VexFlowFont\"] = root[\"VexFlowFont\"] || {}, root[\"VexFlowFont\"][\"Custom\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CommonMetrics } from '../src/fonts/common_metrics';\nimport { CustomFont } from '../src/fonts/custom_glyphs';\nexport const Font = {\n data: CustomFont,\n metrics: CommonMetrics,\n};\nexport default Font;\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","data","resolution","fontFamily","glyphs","vexAccidentalMicrotonal1","x_min","x_max","ha","vexAccidentalMicrotonal3","vexAccidentalMicrotonal4","vexNoteHeadRectBlack","vexNoteHeadRectWhite","vexWiggleArpeggioUp","metrics","smufl","stave","padding","endPaddingMax","endPaddingMin","unalignedNotePadding","accidental","noteheadAccidentalPadding","leftPadding","accidentalSpacing","chordSymbol","global","superscriptOffset","subscriptOffset","kerningOffset","lowerKerningText","upperKerningText","spacing","superSubRatio","csymDiminished","leftSideBearing","advanceWidth","yOffset","csymHalfDiminished","csymAugmented","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","csymMinor","csymMajorSeventh","accidentalSharp","accidentalFlat","clef_default","width","annotations","treble","line","shiftX","bass","clef_small","ornament","brassScoop","xOffset","stemUpYOffset","reportedWidth","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","parenthesis","default","gracenote","pedalMarking","digits","shiftLine","shiftY","articulation","articStaccatissimoAbove","articStaccatissimoBelow","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","coda","segno","noteHead","minPadding","stem","heightAdjustmentForFlag","noteheadTriangleUpHalf","offsetYBaseStemUp","offsetYBaseStemDown","noteheadTriangleUpBlack","noteheadTriangleUpWhole","noteheadXHalf","noteheadXBlack","noteheadXWhole","noteheadHalf","noteheadBlack","noteheadSquareWhite","stringNumber","verticalPadding","stemPadding","rightPadding","tuplet","noteHeadOffset","stemOffset","bottomLine","topModifierOffset","flag","staveTempo","gClef","clefNote_default","clefNote_small","stroke_straight","arrowheadBlackDown","arrowheadBlackUp","stroke_wiggly","textNote","breathMarkTick","breathMarkComma","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","scale"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-font-gonville.js b/build/cjs/vexflow-font-gonville.js new file mode 100644 index 0000000000..9285195bcc --- /dev/null +++ b/build/cjs/vexflow-font-gonville.js @@ -0,0 +1,2 @@ +!function(b,l){"object"==typeof exports&&"object"==typeof module?module.exports=l():"function"==typeof define&&define.amd?define([],l):"object"==typeof exports?exports.VexFlowFont=l():(b.VexFlowFont=b.VexFlowFont||{},b.VexFlowFont.Gonville=l())}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var b={d:(l,m)=>{for(var a in m)b.o(m,a)&&!b.o(l,a)&&Object.defineProperty(l,a,{enumerable:!0,get:m[a]})},o:(b,l)=>Object.prototype.hasOwnProperty.call(b,l)},l={};b.d(l,{default:()=>m});const m={data:{glyphs:{bracketTop:{x_min:0,x_max:412,y_min:-18,y_max:223,ha:241,o:"m 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z"},bracketBottom:{x_min:0,x_max:412,y_min:-223,y_max:18,ha:241,o:"m 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z"},barlineTick:{x_min:-59,x_max:59,y_min:-139,y_max:139,ha:279,o:"m 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z"},breathMarkTick:{x_min:-151,x_max:272,y_min:0,y_max:429,ha:429,o:"m 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z"},segno:{x_min:7,x_max:493,y_min:-50,y_max:650,ha:699,o:"m 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z"},coda:{x_min:22,x_max:478,y_min:-31,y_max:531,ha:563,o:"m 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z"},gClef:{x_min:0,x_max:623,y_min:-632,y_max:1082,ha:1713,o:"m 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z"},cClef:{x_min:0,x_max:643,y_min:-508,y_max:508,ha:1016,o:"m 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z"},fClef:{x_min:0,x_max:661,y_min:-545,y_max:254,ha:798,o:"m 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z"},unpitchedPercussionClef1:{x_min:-4,x_max:337,y_min:-250,y_max:250,ha:500,o:"m -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z"},"6stringTabClef":{x_min:0,x_max:501,y_min:-735,y_max:753,ha:1487,o:"m 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z"},timeSig0:{x_min:0,x_max:380,y_min:-250,y_max:236,ha:486,o:"m 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z"},timeSig1:{x_min:0,x_max:254,y_min:-250,y_max:236,ha:486,o:"m 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z"},timeSig2:{x_min:0,x_max:337,y_min:-250,y_max:236,ha:486,o:"m 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z"},timeSig3:{x_min:0,x_max:302,y_min:-250,y_max:236,ha:486,o:"m 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z"},timeSig4:{x_min:0,x_max:345,y_min:-250,y_max:236,ha:486,o:"m 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z"},timeSig5:{x_min:0,x_max:302,y_min:-250,y_max:236,ha:486,o:"m 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z"},timeSig6:{x_min:0,x_max:349,y_min:-250,y_max:236,ha:486,o:"m 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z"},timeSig7:{x_min:0,x_max:326,y_min:-250,y_max:236,ha:486,o:"m 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z"},timeSig8:{x_min:0,x_max:360,y_min:-250,y_max:236,ha:486,o:"m 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z"},timeSig9:{x_min:0,x_max:349,y_min:-250,y_max:236,ha:486,o:"m 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z"},timeSigCommon:{x_min:0,x_max:409,y_min:-233,y_max:233,ha:466,o:"m 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z"},timeSigCutCommon:{x_min:0,x_max:409,y_min:-394,y_max:394,ha:788,o:"m 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z"},timeSigPlus:{x_min:0,x_max:235,y_min:-118,y_max:118,ha:235,o:"m 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z"},timeSigPlusSmall:{x_min:0,x_max:235,y_min:-118,y_max:118,ha:235,o:"m 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z"},timeSigMinus:{x_min:0,x_max:235,y_min:-23,y_max:23,ha:46,o:"m 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z"},timeSigParensRight:{x_min:19,x_max:122,y_min:-267,y_max:267,ha:535,o:"m 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z"},timeSigParensRightSmall:{x_min:19,x_max:122,y_min:-267,y_max:267,ha:535,o:"m 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z"},timeSigParensLeft:{x_min:-122,x_max:-19,y_min:-267,y_max:267,ha:534,o:"m -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z"},timeSigParensLeftSmall:{x_min:-122,x_max:-19,y_min:-267,y_max:267,ha:534,o:"m -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z"},noteheadDoubleWhole:{x_min:0,x_max:663,y_min:-174,y_max:174,ha:349,o:"m 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z"},noteheadWhole:{x_min:0,x_max:455,y_min:-135,y_max:135,ha:269,o:"m 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z"},noteheadHalf:{x_min:0,x_max:316,y_min:-135,y_max:135,ha:269,o:"m 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z"},noteheadBlack:{x_min:0,x_max:316,y_min:-135,y_max:135,ha:269,o:"m 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z"},noteheadXWhole:{x_min:0,x_max:440,y_min:-133,y_max:133,ha:265,o:"m 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z"},noteheadXHalf:{x_min:0,x_max:300,y_min:-133,y_max:133,ha:265,o:"m 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z"},noteheadXBlack:{x_min:0,x_max:300,y_min:-133,y_max:133,ha:265,o:"m 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z"},noteheadCircleX:{x_min:0,x_max:357,y_min:-178,y_max:178,ha:357,o:"m 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z"},noteheadTriangleUpWhole:{x_min:0,x_max:462,y_min:-149,y_max:149,ha:297,o:"m 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z"},noteheadTriangleUpHalf:{x_min:0,x_max:323,y_min:-149,y_max:149,ha:298,o:"m 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z"},noteheadTriangleUpBlack:{x_min:0,x_max:322,y_min:-149,y_max:149,ha:297,o:"m 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z"},noteheadDiamondWhole:{x_min:0,x_max:462,y_min:-138,y_max:138,ha:277,o:"m 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z"},noteheadDiamondHalf:{x_min:0,x_max:322,y_min:-138,y_max:138,ha:277,o:"m 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z"},noteheadDiamondBlack:{x_min:0,x_max:322,y_min:-138,y_max:138,ha:277,o:"m 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z"},augmentationDot:{x_min:-63,x_max:63,y_min:-63,y_max:63,ha:126,o:"m -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z"},tremolo1:{x_min:-252,x_max:216,y_min:-185,y_max:148,ha:333,o:"m 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z"},flag8thUp:{x_min:-17,x_max:234,y_min:-745,y_max:-4,ha:741,o:"m -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z"},flag8thDown:{x_min:-15,x_max:271,y_min:4,y_max:745,ha:741,o:"m 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z"},flag16thUp:{x_min:-17,x_max:234,y_min:-847,y_max:-4,ha:843,o:"m -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z"},flag16thDown:{x_min:-15,x_max:267,y_min:4,y_max:745,ha:741,o:"m 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z"},flag32ndUp:{x_min:-17,x_max:233,y_min:-1005,y_max:96,ha:1101,o:"m -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z"},flag32ndDown:{x_min:-15,x_max:270,y_min:-96,y_max:895,ha:991,o:"m 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z"},flag64thUp:{x_min:-17,x_max:233,y_min:-933,y_max:296,ha:1230,o:"m -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z"},flag64thDown:{x_min:-15,x_max:271,y_min:-296,y_max:820,ha:1116,o:"m 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z"},flag128thUp:{x_min:-17,x_max:231,y_min:-987,y_max:496,ha:1484,o:"m -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z"},flag128thDown:{x_min:-15,x_max:270,y_min:-496,y_max:870,ha:1366,o:"m 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z"},accidentalFlat:{x_min:-15,x_max:185,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z"},accidentalNatural:{x_min:0,x_max:176,y_min:-334,y_max:334,ha:667,o:"m 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z"},accidentalSharp:{x_min:0,x_max:239,y_min:-388,y_max:388,ha:775,o:"m 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z"},accidentalDoubleSharp:{x_min:0,x_max:271,y_min:-135,y_max:135,ha:271,o:"m 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z"},accidentalDoubleFlat:{x_min:-15,x_max:356,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z"},accidentalParensLeft:{x_min:-122,x_max:-19,y_min:-267,y_max:267,ha:534,o:"m -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z"},accidentalParensRight:{x_min:19,x_max:122,y_min:-267,y_max:267,ha:535,o:"m 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:200,y_min:-165,y_max:457,ha:622,o:"m 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:446,y_min:-165,y_max:457,ha:622,o:"m 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:142,y_min:-373,y_max:373,ha:747,o:"m 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z"},accidentalThreeQuarterTonesSharpStein:{x_min:0,x_max:335,y_min:-391,y_max:391,ha:782,o:"m 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z"},accidentalBuyukMucennebFlat:{x_min:-125,x_max:185,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z"},accidentalBuyukMucennebSharp:{x_min:0,x_max:284,y_min:-388,y_max:388,ha:775,o:"m 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z"},accidentalBakiyeFlat:{x_min:-129,x_max:185,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z"},accidentalKomaSharp:{x_min:0,x_max:142,y_min:-373,y_max:373,ha:747,o:"m 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:188,y_min:-373,y_max:373,ha:747,o:"m 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z"},articAccentAbove:{x_min:-256,x_max:19,y_min:-114,y_max:114,ha:227,o:"m -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z"},articAccentBelow:{x_min:-256,x_max:19,y_min:-114,y_max:114,ha:227,o:"m -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z"},articTenutoAbove:{x_min:-154,x_max:154,y_min:-15,y_max:15,ha:30,o:"m -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z"},articTenutoBelow:{x_min:-154,x_max:154,y_min:-15,y_max:15,ha:30,o:"m -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z"},articStaccatoAbove:{x_min:-49,x_max:49,y_min:-49,y_max:49,ha:99,o:"m -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z"},articStaccatoBelow:{x_min:-49,x_max:49,y_min:-49,y_max:49,ha:99,o:"m -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z"},articStaccatissimoAbove:{x_min:-53,x_max:53,y_min:0,y_max:184,ha:184,o:"m -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z"},articStaccatissimoBelow:{x_min:-53,x_max:53,y_min:-184,y_max:0,ha:184,o:"m -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z"},articMarcatoAbove:{x_min:-114,x_max:114,y_min:-256,y_max:19,ha:275,o:"m -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z"},articMarcatoBelow:{x_min:-114,x_max:114,y_min:-19,y_max:256,ha:275,o:"m -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z"},fermataAbove:{x_min:-324,x_max:324,y_min:0,y_max:353,ha:353,o:"m -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z"},fermataBelow:{x_min:-324,x_max:324,y_min:-353,y_max:0,ha:353,o:"m -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},fermataLongAbove:{x_min:-286,x_max:286,y_min:0,y_max:364,ha:364,o:"m -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z"},fermataLongBelow:{x_min:-286,x_max:286,y_min:-364,y_max:0,ha:364,o:"m -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},fermataVeryLongAbove:{x_min:-286,x_max:286,y_min:0,y_max:438,ha:438,o:"m -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z"},fermataVeryLongBelow:{x_min:-286,x_max:286,y_min:-438,y_max:0,ha:438,o:"m -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},fermataVeryShortAbove:{x_min:-351,x_max:351,y_min:0,y_max:571,ha:571,o:"m -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z"},fermataVeryShortBelow:{x_min:-351,x_max:351,y_min:-571,y_max:0,ha:571,o:"m 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z"},fermataShortAbove:{x_min:-286,x_max:286,y_min:0,y_max:469,ha:469,o:"m -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z"},fermataShortBelow:{x_min:-286,x_max:286,y_min:-469,y_max:0,ha:469,o:"m -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},breathMarkComma:{x_min:0,x_max:168,y_min:-155,y_max:155,ha:311,o:"m 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z"},breathMarkUpbow:{x_min:-125,x_max:125,y_min:0,y_max:409,ha:409,o:"m -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z"},caesura:{x_min:0,x_max:457,y_min:-202,y_max:303,ha:504,o:"m 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z"},caesuraCurved:{x_min:0,x_max:370,y_min:-207,y_max:310,ha:517,o:"m 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z"},restMaxima:{x_min:0,x_max:853,y_min:-250,y_max:250,ha:500,o:"m 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z"},restDoubleWhole:{x_min:0,x_max:284,y_min:0,y_max:250,ha:250,o:"m 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z"},restWhole:{x_min:0,x_max:330,y_min:-125,y_max:0,ha:125,o:"m 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z"},restWholeLegerLine:{x_min:0,x_max:542,y_min:-125,y_max:11,ha:137,o:"m 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z"},restHalf:{x_min:0,x_max:330,y_min:0,y_max:125,ha:125,o:"m 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z"},restHalfLegerLine:{x_min:0,x_max:542,y_min:-11,y_max:125,ha:137,o:"m 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z"},restQuarter:{x_min:0,x_max:221,y_min:-365,y_max:365,ha:730,o:"m 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z"},rest8th:{x_min:0,x_max:258,y_min:-197,y_max:219,ha:416,o:"m 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z"},rest16th:{x_min:0,x_max:331,y_min:-443,y_max:219,ha:662,o:"m 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z"},rest32nd:{x_min:0,x_max:405,y_min:-443,y_max:466,ha:909,o:"m 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z"},rest64th:{x_min:0,x_max:479,y_min:-689,y_max:466,ha:1155,o:"m 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z"},rest128th:{x_min:0,x_max:553,y_min:-689,y_max:712,ha:1401,o:"m 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z"},dynamicPiano:{x_min:-39,x_max:378,y_min:-178,y_max:277,ha:455,o:"m 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z"},dynamicMezzo:{x_min:35,x_max:493,y_min:-19,y_max:272,ha:291,o:"m 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z"},dynamicForte:{x_min:-87,x_max:440,y_min:-182,y_max:415,ha:597,o:"m 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z"},dynamicRinforzando:{x_min:58,x_max:357,y_min:0,y_max:275,ha:275,o:"m 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z"},dynamicSforzando:{x_min:52,x_max:278,y_min:-22,y_max:270,ha:292,o:"m 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z"},dynamicZ:{x_min:23,x_max:309,y_min:2,y_max:250,ha:248,o:"m 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z"},ornamentTrill:{x_min:-249,x_max:249,y_min:0,y_max:376,ha:376,o:"m -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z"},ornamentTurn:{x_min:-310,x_max:310,y_min:-143,y_max:143,ha:286,o:"m -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z"},ornamentTurnSlash:{x_min:-310,x_max:310,y_min:-201,y_max:201,ha:402,o:"m -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z"},ornamentMordent:{x_min:-296,x_max:296,y_min:-215,y_max:198,ha:413,o:"m -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z"},ornamentShortTrill:{x_min:-296,x_max:296,y_min:-127,y_max:127,ha:253,o:"m -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z"},ornamentTremblement:{x_min:-419,x_max:419,y_min:-127,y_max:127,ha:253,o:"m -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z"},ornamentPrecompAppoggTrill:{x_min:-419,x_max:419,y_min:-127,y_max:255,ha:381,o:"m -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:-433,x_max:433,y_min:-243,y_max:127,ha:370,o:"m -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z"},ornamentPrecompSlideTrillBach:{x_min:-433,x_max:433,y_min:-243,y_max:198,ha:442,o:"m 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:-433,x_max:433,y_min:-127,y_max:244,ha:370,o:"m 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:-439,x_max:439,y_min:-127,y_max:236,ha:363,o:"m -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:-439,x_max:439,y_min:-215,y_max:236,ha:451,o:"m -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z"},ornamentPrecompTrillLowerSuffix:{x_min:-439,x_max:439,y_min:-236,y_max:127,ha:362,o:"m -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z"},stringsDownBow:{x_min:-168,x_max:168,y_min:0,y_max:353,ha:353,o:"m -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z"},stringsUpBow:{x_min:-110,x_max:110,y_min:0,y_max:277,ha:277,o:"m -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z"},stringsHarmonic:{x_min:-82,x_max:82,y_min:-82,y_max:82,ha:163,o:"m -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z"},pluckedSnapPizzicatoAbove:{x_min:-110,x_max:110,y_min:-110,y_max:205,ha:315,o:"m -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z"},pluckedSnapPizzicatoBelow:{x_min:-110,x_max:110,y_min:-205,y_max:110,ha:315,o:"m 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z"},pluckedLeftHandPizzicato:{x_min:-155,x_max:155,y_min:-157,y_max:157,ha:315,o:"m -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z"},keyboardPedalPed:{x_min:0,x_max:782,y_min:-1,y_max:500,ha:501,o:"m 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z"},keyboardPedalUp:{x_min:0,x_max:435,y_min:65,y_max:500,ha:435,o:"m 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z"},pictChokeCymbal:{x_min:0,x_max:168,y_min:-155,y_max:155,ha:311,o:"m 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z"},wiggleArpeggiatoUp:{x_min:-8,x_max:269,y_min:0,y_max:126,ha:126,o:"m 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z"},arrowheadBlackUp:{x_min:11,x_max:239,y_min:-6,y_max:269,ha:275,o:"m 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z"},arrowheadBlackDown:{x_min:11,x_max:239,y_min:6,y_max:281,ha:275,o:"m 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z"}},fontFamily:"GonvilleSmufl",resolution:1e3,generatedOn:"2023-04-20T22:11:26.009Z"},metrics:{smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}}};return l=l.default})())); +//# sourceMappingURL=vexflow-font-gonville.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-font-gonville.js.map b/build/cjs/vexflow-font-gonville.js.map new file mode 100644 index 0000000000..52f9dcbe21 --- /dev/null +++ b/build/cjs/vexflow-font-gonville.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vexflow-font-gonville.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,KAEzBD,EAAkB,YAAIA,EAAkB,aAAK,CAAC,EAAGA,EAAkB,YAAY,SAAIC,IACpF,CATD,CASsB,oBAAXK,OAAyBA,OAA+B,oBAAfC,WAA6BA,WAAaC,MAAO,I,mBCRrG,IAAIC,EAAsB,CCA1BA,EAAwB,CAACP,EAASQ,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAEV,EAASS,IAC5EE,OAAOC,eAAeZ,EAASS,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDF,EAAwB,CAACQ,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,4BCA3E,MCQP,EAJoB,CAChBI,KCL6B,CAC7BC,OAAQ,CACJC,WAAY,CACRC,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iUAEPkB,cAAe,CACXL,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,oYAEPmB,YAAa,CACTN,OAAQ,GACRC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sVAEPoB,eAAgB,CACZP,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4aAEPqB,MAAO,CACHR,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mtDAEPsB,KAAM,CACFT,MAAO,GACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,61CAEPuB,MAAO,CACHV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,w/EAEPwB,MAAO,CACHX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,uuDAEPyB,MAAO,CACHZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4iCAEP0B,yBAA0B,CACtBb,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gKAEP,iBAAkB,CACda,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,66GAEP2B,SAAU,CACNd,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qmBAEP4B,SAAU,CACNf,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,osBAEP6B,SAAU,CACNhB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kkCAEP8B,SAAU,CACNjB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,q9BAEP+B,SAAU,CACNlB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wrCAEPgC,SAAU,CACNnB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,isCAEPiC,SAAU,CACNpB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6iCAEPkC,SAAU,CACNrB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,y9BAEPmC,SAAU,CACNtB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2/BAEPoC,SAAU,CACNvB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,unCAEPqC,cAAe,CACXxB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ytBAEPsC,iBAAkB,CACdzB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4pCAEPuC,YAAa,CACT1B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wkBAEPwC,iBAAkB,CACd3B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wkBAEPyC,aAAc,CACV5B,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,GACJjB,EAAG,+LAEP0C,mBAAoB,CAChB7B,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oTAEP2C,wBAAyB,CACrB9B,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oTAEP4C,kBAAmB,CACf/B,OAAQ,IACRC,OAAQ,GACRC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uYAEP6C,uBAAwB,CACpBhC,OAAQ,IACRC,OAAQ,GACRC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uYAEP8C,oBAAqB,CACjBjC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+qDAEP+C,cAAe,CACXlC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uWAEPgD,aAAc,CACVnC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8aAEPiD,cAAe,CACXpC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wNAEPkD,eAAgB,CACZrC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2xCAEPmD,cAAe,CACXtC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g8CAEPoD,eAAgB,CACZvC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+tBAEPqD,gBAAiB,CACbxC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yzBAEPsD,wBAAyB,CACrBzC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,u1BAEPuD,uBAAwB,CACpB1C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mvBAEPwD,wBAAyB,CACrB3C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wmBAEPyD,qBAAsB,CAClB5C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ytBAEP0D,oBAAqB,CACjB7C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,glBAEP2D,qBAAsB,CAClB9C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kVAEP4D,gBAAiB,CACb/C,OAAQ,GACRC,MAAO,GACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,4KAEP6D,SAAU,CACNhD,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mnBAEP8D,UAAW,CACPjD,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,EACRC,GAAI,IACJjB,EAAG,gWAEP+D,YAAa,CACTlD,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qYAEPgE,WAAY,CACRnD,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,EACRC,GAAI,IACJjB,EAAG,05BAEPiE,aAAc,CACVpD,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8oBAEPkE,WAAY,CACRrD,OAAQ,GACRC,MAAO,IACPC,OAAQ,KACRC,MAAO,GACPC,GAAI,KACJjB,EAAG,onCAEPmE,aAAc,CACVtD,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0jCAEPoE,WAAY,CACRvD,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,upDAEPqE,aAAc,CACVxD,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,05CAEPsE,YAAa,CACTzD,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,ozDAEPuE,cAAe,CACX1D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,+uDAEPwE,eAAgB,CACZ3D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mjBAEPyE,kBAAmB,CACf5D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gvBAEP0E,gBAAiB,CACb7D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2xDAEP2E,sBAAuB,CACnB9D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4cAEP4E,qBAAsB,CAClB/D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8nCAEP6E,qBAAsB,CAClBhE,OAAQ,IACRC,OAAQ,GACRC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uYAEP8E,sBAAuB,CACnBjE,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oTAEP+E,+BAAgC,CAC5BlE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wkBAEPgF,0CAA2C,CACvCnE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2pCAEPiF,gCAAiC,CAC7BpE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ynCAEPkF,sCAAuC,CACnCrE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s2EAEPmF,4BAA6B,CACzBtE,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g1CAEPoF,6BAA8B,CAC1BvE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ygFAEPqF,qBAAsB,CAClBxE,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,28BAEPsF,oBAAqB,CACjBzE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ynCAEPuF,6BAA8B,CAC1B1E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yqDAEPwF,iBAAkB,CACd3E,OAAQ,IACRC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+iBAEPyF,iBAAkB,CACd5E,OAAQ,IACRC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+iBAEP0F,iBAAkB,CACd7E,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,GACJjB,EAAG,sQAEP2F,iBAAkB,CACd9E,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,GACJjB,EAAG,sQAEP4F,mBAAoB,CAChB/E,OAAQ,GACRC,MAAO,GACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,GACJjB,EAAG,+LAEP6F,mBAAoB,CAChBhF,OAAQ,GACRC,MAAO,GACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,GACJjB,EAAG,+LAEP8F,wBAAyB,CACrBjF,OAAQ,GACRC,MAAO,GACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0FAEP+F,wBAAyB,CACrBlF,OAAQ,GACRC,MAAO,GACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,8HAEPgG,kBAAmB,CACfnF,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,2cAEPiG,kBAAmB,CACfpF,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,odAEPkG,aAAc,CACVrF,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yjBAEPmG,aAAc,CACVtF,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,koBAEPoG,iBAAkB,CACdvF,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,kmBAEPqG,iBAAkB,CACdxF,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,ynBAEPsG,qBAAsB,CAClBzF,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0/BAEPuG,qBAAsB,CAClB1F,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,wmCAEPwG,sBAAuB,CACnB3F,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,41DAEPyG,sBAAuB,CACnB5F,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,4gEAEP0G,kBAAmB,CACf7F,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,kyBAEP2G,kBAAmB,CACf9F,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,2+BAEP4G,gBAAiB,CACb/F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6VAEP6G,gBAAiB,CACbhG,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,waAEP8G,QAAS,CACLjG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qfAEP+G,cAAe,CACXlG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8lBAEPgH,WAAY,CACRnG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oKAEPiH,gBAAiB,CACbpG,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yEAEPkH,UAAW,CACPrG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,4EAEPmH,mBAAoB,CAChBtG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,2QAEPoH,SAAU,CACNvG,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,uEAEPqH,kBAAmB,CACfxG,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4QAEPsH,YAAa,CACTzG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,47BAEPuH,QAAS,CACL1G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6jBAEPwH,SAAU,CACN3G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,26BAEPyH,SAAU,CACN5G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uvCAEP0H,SAAU,CACN7G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,ymDAEP2H,UAAW,CACP9G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,+7DAEP4H,aAAc,CACV/G,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,80CAEP6H,aAAc,CACVhH,MAAO,GACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,y1DAEP8H,aAAc,CACVjH,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,isCAEP+H,mBAAoB,CAChBlH,MAAO,GACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,g3BAEPgI,iBAAkB,CACdnH,MAAO,GACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,42BAEPiI,SAAU,CACNpH,MAAO,GACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,khCAEPkI,cAAe,CACXrH,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,umDAEPmI,aAAc,CACVtH,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4/BAEPoI,kBAAmB,CACfvH,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gvCAEPqI,gBAAiB,CACbxH,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yjCAEPsI,mBAAoB,CAChBzH,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0xBAEPuI,oBAAqB,CACjB1H,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,unCAEPwI,2BAA4B,CACxB3H,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4wCAEPyI,oCAAqC,CACjC5H,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yyCAEP0I,8BAA+B,CAC3B7H,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,goDAEP2I,mCAAoC,CAChC9H,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6zCAEP4I,wCAAyC,CACrC/H,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,q3CAEP6I,4CAA6C,CACzChI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oqDAEP8I,gCAAiC,CAC7BjI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,85CAEP+I,eAAgB,CACZlI,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,ycAEPgJ,aAAc,CACVnI,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0XAEPiJ,gBAAiB,CACbpI,OAAQ,GACRC,MAAO,GACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,mXAEPkJ,0BAA2B,CACvBrI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,urBAEPmJ,0BAA2B,CACvBtI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0sBAEPoJ,yBAA0B,CACtBvI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+kBAEPqJ,iBAAkB,CACdxI,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,u5FAEPsJ,gBAAiB,CACbzI,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,u5EAEPuJ,gBAAiB,CACb1I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6VAEPwJ,mBAAoB,CAChB3I,OAAQ,EACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,odAEPyJ,iBAAkB,CACd5I,MAAO,GACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iYAEP0J,mBAAoB,CAChB7I,MAAO,GACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8YAGX2J,WAAY,gBACZC,WAAY,IACZC,YAAa,4BDvlCbC,QDNyB,CACzBC,OAAO,EACPC,MAAO,CACHC,QAAS,GACTC,cAAe,GACfC,cAAe,EACfC,qBAAsB,IAE1BC,WAAY,CACRC,0BAA2B,EAC3BC,YAAa,EACbC,kBAAmB,GAEvBC,YAAa,CACTC,OAAQ,CACJC,mBAAoB,IACpBC,gBAAiB,IACjBC,eAAgB,IAChBC,iBAAkB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAC5CC,iBAAkB,CAAC,IAAK,KACxBC,QAAS,IACTC,cAAe,KAEnBtK,OAAQ,CACJuK,eAAgB,CACZC,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbC,mBAAoB,CAChBH,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbE,cAAe,CACXJ,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbG,mBAAoB,CAChBL,iBAAkB,GAClBC,aAAc,IACdC,QAAS,KAEbI,oBAAqB,CACjBN,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEbK,oBAAqB,CACjBP,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbM,qBAAsB,CAClBR,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbO,uBAAwB,CACpBT,gBAAiB,GACjBC,aAAc,IACdC,QAAS,KAEbQ,wBAAyB,CACrBV,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEbS,6BAA8B,CAC1BX,gBAAiB,IACjBC,aAAc,IACdC,QAAS,KAEbU,UAAW,CACPZ,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbW,iBAAkB,CACdb,gBAAiB,IACjBE,QAAS,EACTD,aAAc,KAElB1G,gBAAiB,CACbyG,gBAAiB,GACjBC,aAAc,IACdC,SAAU,KAEd7G,eAAgB,CACZ2G,iBAAkB,GAClBC,aAAc,IACdC,SAAU,OAItBY,aAAc,CACVC,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,EACPC,OAAQ,KAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,IAEZC,KAAM,CACFF,KAAM,EACNC,OAAQ,MAKxBE,WAAY,CACRN,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,GACPC,OAAQ,IAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,GAEZC,KAAM,CACFF,KAAM,IACNC,OAAQ,OAKxBG,SAAU,CACNC,WAAY,CACRC,SAAU,GACVtB,QAAS,EACTuB,cAAe,EACfC,cAAe,IAEnBC,gBAAiB,CACbH,QAAS,GACTtB,QAAS,EACTuB,cAAe,EACfC,cAAe,IAEnBE,kBAAmB,CACfJ,QAAS,GACTtB,QAAS,EACTuB,cAAe,EACfC,cAAe,IAEnBG,gBAAiB,CACbL,QAAS,GACTtB,QAAS,EACTuB,cAAe,EACfC,cAAe,GAEnBI,qBAAsB,CAClBN,QAAS,GACTtB,QAAS,GACTuB,cAAe,EACfC,cAAe,GAEnBK,UAAW,CACPP,QAAS,EACTtB,SAAU,EACVuB,cAAe,GACfC,cAAe,GAEnBM,gBAAiB,CACbR,QAAS,EACTtB,SAAU,EACVuB,cAAe,GACfC,cAAe,GAEnBO,cAAe,CACXT,QAAS,EACTtB,SAAU,EACVuB,cAAe,GACfC,cAAe,GAEnBQ,UAAW,CACPV,QAAS,GACTtB,QAAS,EACTuB,cAAe,EACfC,cAAe,IAEnBS,cAAe,CACXX,QAAS,EACTtB,QAAS,EACTuB,cAAe,EACfC,cAAe,IAEnBU,WAAY,CACRZ,QAAS,GACTtB,QAAS,EACTuB,cAAe,EACfC,cAAe,IAGvBW,YAAa,CACTC,QAAS,CACLvB,MAAO,GAEXwB,UAAW,CACPxB,MAAO,IAGfyB,aAAc,CAAC,EAEfC,OAAQ,CAEJC,WAAY,EAEZC,QAAS,GAEbC,aAAc,CACVjI,wBAAyB,CACrBmE,QAAS,GAEblE,wBAAyB,CACrBkE,QAAS,IAGjB+D,QAAS,CACLP,QAAS,CACLzC,QAAS,EACTiD,eAAgB,EAChBC,gBAAiB,EACjBC,cAAe,GACfC,gBAAiB,GAErBC,MAAO,CACHrD,QAAS,IACTiD,eAAe,IACfC,gBAAiB,IACjBC,cAAe,EACfC,gBAAiB,IAGzBE,gBAAiB,CACbC,WAAY,CACRC,QAAS,GACTC,QAAS,GACTzD,QAAS,GAEb1J,KAAM,CACFmN,QAAS,IAEbpN,MAAO,CACHoN,QAAS,KAGjBC,SAAU,CACNC,WAAY,GAEhBC,KAAM,CACFC,yBAA0B,EAG1BH,SAAU,CACNnL,uBAAwB,CACpBuL,kBAAmB,EACnBC,oBAAqB,GAEzBvL,wBAAyB,CACrBsL,kBAAmB,EACnBC,oBAAqB,GAEzBzL,wBAAyB,CACrBwL,kBAAmB,EACnBC,oBAAqB,GAEzB5L,cAAe,CACX2L,mBAAoB,EACpBC,oBAAqB,GAEzB3L,eAAgB,CACZ0L,mBAAoB,EACpBC,oBAAqB,GAEzB7L,eAAgB,CACZ4L,mBAAoB,EACpBC,oBAAqB,GAEzB/L,aAAc,CACV8L,mBAAoB,KACpBC,oBAAqB,MAEzB9L,cAAe,CACX6L,mBAAoB,EACpBC,oBAAqB,GAEzBC,oBAAqB,CACjBD,qBAAsB,EACtBD,kBAAmB,KAI/BG,aAAc,CACVC,gBAAiB,EACjBC,YAAa,EACb5E,YAAa,EACb6E,aAAc,GAElBC,OAAQ,CACJC,eAAgB,GAChBC,WAAY,GACZC,WAAY,EACZC,kBAAmB,IAWvB9O,OAAQ,CACJW,KAAM,CACFgL,QAAS,EACTwB,OAAQ,GAEZzM,MAAO,CACHiL,QAAS,GAEboD,KAAM,CACFpD,QAAS,IACTqD,WAAY,CACRrD,QAAS,IAGjBL,aAAc,CAAC,EACfO,WAAY,CACRjL,MAAO,CACHuM,OAAQ,MAGhB8B,iBAAkB,CAAC,EACnBC,eAAgB,CAAC,EACjBC,gBAAiB,CACbpG,mBAAoB,CAChB4C,QAAS,KAEb7C,iBAAkB,CACd6C,QAAS,MAGjByD,cAAe,CACXrG,mBAAoB,CAChB4C,QAAS,EACTwB,OAAQ,GAEZrE,iBAAkB,CACd6C,QAAS,EACTwB,OAAQ,IAGhBkC,SAAU,CACN5O,eAAgB,CACZ0M,OAAQ,GAEZlH,gBAAiB,CAAC,EAClBvF,MAAO,CACHiL,QAAS,EACTwB,OAAQ,GAEZxM,KAAM,CACFgL,QAAS,EACTwB,OAAQ,GAEZ5F,cAAe,CACXoE,QAAS,EACTwB,OAAQ,GAEZ3F,aAAc,CAAC,EACfC,kBAAmB,CAAC,EACpBC,gBAAiB,CACbiE,QAAS,GAEbhE,mBAAoB,CAChBgE,QAAS,IAGjBoC,SAAU,CAAC,EACXjE,YAAa,CACTwF,MAAO,O","sources":["webpack://VexFlowFont.Gonville/webpack/universalModuleDefinition","webpack://VexFlowFont.Gonville/webpack/bootstrap","webpack://VexFlowFont.Gonville/webpack/runtime/define property getters","webpack://VexFlowFont.Gonville/webpack/runtime/hasOwnProperty shorthand","webpack://VexFlowFont.Gonville/./src/fonts/common_metrics.ts","webpack://VexFlowFont.Gonville/./entry/vexflow-font-gonville.ts","webpack://VexFlowFont.Gonville/./src/fonts/gonville_glyphs.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VexFlowFont\"] = factory();\n\telse\n\t\troot[\"VexFlowFont\"] = root[\"VexFlowFont\"] || {}, root[\"VexFlowFont\"][\"Gonville\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CommonMetrics } from '../src/fonts/common_metrics';\nimport { GonvilleSmuflFont } from '../src/fonts/gonville_glyphs';\nexport const Font = {\n data: GonvilleSmuflFont,\n metrics: CommonMetrics,\n};\nexport default Font;\n","export const GonvilleSmuflFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 412,\n y_min: -18,\n y_max: 223,\n ha: 241,\n o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 412,\n y_min: -223,\n y_max: 18,\n ha: 241,\n o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z',\n },\n barlineTick: {\n x_min: -59,\n x_max: 59,\n y_min: -139,\n y_max: 139,\n ha: 279,\n o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z',\n },\n breathMarkTick: {\n x_min: -151,\n x_max: 272,\n y_min: 0,\n y_max: 429,\n ha: 429,\n o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z',\n },\n segno: {\n x_min: 7,\n x_max: 493,\n y_min: -50,\n y_max: 650,\n ha: 699,\n o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z',\n },\n coda: {\n x_min: 22,\n x_max: 478,\n y_min: -31,\n y_max: 531,\n ha: 563,\n o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z',\n },\n gClef: {\n x_min: 0,\n x_max: 623,\n y_min: -632,\n y_max: 1082,\n ha: 1713,\n o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z',\n },\n cClef: {\n x_min: 0,\n x_max: 643,\n y_min: -508,\n y_max: 508,\n ha: 1016,\n o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z',\n },\n fClef: {\n x_min: 0,\n x_max: 661,\n y_min: -545,\n y_max: 254,\n ha: 798,\n o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z',\n },\n unpitchedPercussionClef1: {\n x_min: -4,\n x_max: 337,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 501,\n y_min: -735,\n y_max: 753,\n ha: 1487,\n o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z',\n },\n timeSig0: {\n x_min: 0,\n x_max: 380,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z',\n },\n timeSig1: {\n x_min: 0,\n x_max: 254,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z',\n },\n timeSig2: {\n x_min: 0,\n x_max: 337,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z',\n },\n timeSig3: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig4: {\n x_min: 0,\n x_max: 345,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z',\n },\n timeSig5: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig6: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSig7: {\n x_min: 0,\n x_max: 326,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z',\n },\n timeSig8: {\n x_min: 0,\n x_max: 360,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z',\n },\n timeSig9: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -233,\n y_max: 233,\n ha: 466,\n o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -394,\n y_max: 394,\n ha: 788,\n o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 235,\n y_min: -23,\n y_max: 23,\n ha: 46,\n o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z',\n },\n timeSigParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensRightSmall: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n timeSigParensLeftSmall: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 663,\n y_min: -174,\n y_max: 174,\n ha: 349,\n o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 455,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 440,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 357,\n y_min: -178,\n y_max: 178,\n ha: 357,\n o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 323,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z',\n },\n augmentationDot: {\n x_min: -63,\n x_max: 63,\n y_min: -63,\n y_max: 63,\n ha: 126,\n o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z',\n },\n tremolo1: {\n x_min: -252,\n x_max: 216,\n y_min: -185,\n y_max: 148,\n ha: 333,\n o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z',\n },\n flag8thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -745,\n y_max: -4,\n ha: 741,\n o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z',\n },\n flag8thDown: {\n x_min: -15,\n x_max: 271,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z',\n },\n flag16thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -847,\n y_max: -4,\n ha: 843,\n o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z',\n },\n flag16thDown: {\n x_min: -15,\n x_max: 267,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z',\n },\n flag32ndUp: {\n x_min: -17,\n x_max: 233,\n y_min: -1005,\n y_max: 96,\n ha: 1101,\n o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z',\n },\n flag32ndDown: {\n x_min: -15,\n x_max: 270,\n y_min: -96,\n y_max: 895,\n ha: 991,\n o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z',\n },\n flag64thUp: {\n x_min: -17,\n x_max: 233,\n y_min: -933,\n y_max: 296,\n ha: 1230,\n o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z',\n },\n flag64thDown: {\n x_min: -15,\n x_max: 271,\n y_min: -296,\n y_max: 820,\n ha: 1116,\n o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z',\n },\n flag128thUp: {\n x_min: -17,\n x_max: 231,\n y_min: -987,\n y_max: 496,\n ha: 1484,\n o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z',\n },\n flag128thDown: {\n x_min: -15,\n x_max: 270,\n y_min: -496,\n y_max: 870,\n ha: 1366,\n o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z',\n },\n accidentalFlat: {\n x_min: -15,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 176,\n y_min: -334,\n y_max: 334,\n ha: 667,\n o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 239,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 271,\n y_min: -135,\n y_max: 135,\n ha: 271,\n o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z',\n },\n accidentalDoubleFlat: {\n x_min: -15,\n x_max: 356,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z',\n },\n accidentalParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n accidentalParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 200,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 446,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 335,\n y_min: -391,\n y_max: 391,\n ha: 782,\n o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -125,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 284,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z',\n },\n accidentalBakiyeFlat: {\n x_min: -129,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 188,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z',\n },\n articAccentAbove: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articAccentBelow: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articTenutoAbove: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articTenutoBelow: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articStaccatoAbove: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatoBelow: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatissimoAbove: {\n x_min: -53,\n x_max: 53,\n y_min: 0,\n y_max: 184,\n ha: 184,\n o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z',\n },\n articStaccatissimoBelow: {\n x_min: -53,\n x_max: 53,\n y_min: -184,\n y_max: 0,\n ha: 184,\n o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z',\n },\n articMarcatoAbove: {\n x_min: -114,\n x_max: 114,\n y_min: -256,\n y_max: 19,\n ha: 275,\n o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z',\n },\n articMarcatoBelow: {\n x_min: -114,\n x_max: 114,\n y_min: -19,\n y_max: 256,\n ha: 275,\n o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z',\n },\n fermataAbove: {\n x_min: -324,\n x_max: 324,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataBelow: {\n x_min: -324,\n x_max: 324,\n y_min: -353,\n y_max: 0,\n ha: 353,\n o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 364,\n ha: 364,\n o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z',\n },\n fermataLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -364,\n y_max: 0,\n ha: 364,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 438,\n ha: 438,\n o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataVeryLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -438,\n y_max: 0,\n ha: 438,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryShortAbove: {\n x_min: -351,\n x_max: 351,\n y_min: 0,\n y_max: 571,\n ha: 571,\n o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z',\n },\n fermataVeryShortBelow: {\n x_min: -351,\n x_max: 351,\n y_min: -571,\n y_max: 0,\n ha: 571,\n o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z',\n },\n fermataShortAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 469,\n ha: 469,\n o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataShortBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -469,\n y_max: 0,\n ha: 469,\n o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n breathMarkUpbow: {\n x_min: -125,\n x_max: 125,\n y_min: 0,\n y_max: 409,\n ha: 409,\n o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z',\n },\n caesura: {\n x_min: 0,\n x_max: 457,\n y_min: -202,\n y_max: 303,\n ha: 504,\n o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 370,\n y_min: -207,\n y_max: 310,\n ha: 517,\n o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 853,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 330,\n y_min: -125,\n y_max: 0,\n ha: 125,\n o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z',\n },\n restWholeLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -125,\n y_max: 11,\n ha: 137,\n o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 330,\n y_min: 0,\n y_max: 125,\n ha: 125,\n o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z',\n },\n restHalfLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -11,\n y_max: 125,\n ha: 137,\n o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 221,\n y_min: -365,\n y_max: 365,\n ha: 730,\n o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 258,\n y_min: -197,\n y_max: 219,\n ha: 416,\n o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 331,\n y_min: -443,\n y_max: 219,\n ha: 662,\n o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 405,\n y_min: -443,\n y_max: 466,\n ha: 909,\n o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 479,\n y_min: -689,\n y_max: 466,\n ha: 1155,\n o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 553,\n y_min: -689,\n y_max: 712,\n ha: 1401,\n o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z',\n },\n dynamicPiano: {\n x_min: -39,\n x_max: 378,\n y_min: -178,\n y_max: 277,\n ha: 455,\n o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z',\n },\n dynamicMezzo: {\n x_min: 35,\n x_max: 493,\n y_min: -19,\n y_max: 272,\n ha: 291,\n o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z',\n },\n dynamicForte: {\n x_min: -87,\n x_max: 440,\n y_min: -182,\n y_max: 415,\n ha: 597,\n o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z',\n },\n dynamicRinforzando: {\n x_min: 58,\n x_max: 357,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z',\n },\n dynamicSforzando: {\n x_min: 52,\n x_max: 278,\n y_min: -22,\n y_max: 270,\n ha: 292,\n o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z',\n },\n dynamicZ: {\n x_min: 23,\n x_max: 309,\n y_min: 2,\n y_max: 250,\n ha: 248,\n o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z',\n },\n ornamentTrill: {\n x_min: -249,\n x_max: 249,\n y_min: 0,\n y_max: 376,\n ha: 376,\n o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z',\n },\n ornamentTurn: {\n x_min: -310,\n x_max: 310,\n y_min: -143,\n y_max: 143,\n ha: 286,\n o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z',\n },\n ornamentTurnSlash: {\n x_min: -310,\n x_max: 310,\n y_min: -201,\n y_max: 201,\n ha: 402,\n o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z',\n },\n ornamentMordent: {\n x_min: -296,\n x_max: 296,\n y_min: -215,\n y_max: 198,\n ha: 413,\n o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z',\n },\n ornamentShortTrill: {\n x_min: -296,\n x_max: 296,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z',\n },\n ornamentTremblement: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 255,\n ha: 381,\n o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 127,\n ha: 370,\n o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 198,\n ha: 442,\n o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: -433,\n x_max: 433,\n y_min: -127,\n y_max: 244,\n ha: 370,\n o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: -439,\n x_max: 439,\n y_min: -127,\n y_max: 236,\n ha: 363,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: -439,\n x_max: 439,\n y_min: -215,\n y_max: 236,\n ha: 451,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: -439,\n x_max: 439,\n y_min: -236,\n y_max: 127,\n ha: 362,\n o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z',\n },\n stringsDownBow: {\n x_min: -168,\n x_max: 168,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z',\n },\n stringsUpBow: {\n x_min: -110,\n x_max: 110,\n y_min: 0,\n y_max: 277,\n ha: 277,\n o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z',\n },\n stringsHarmonic: {\n x_min: -82,\n x_max: 82,\n y_min: -82,\n y_max: 82,\n ha: 163,\n o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: -110,\n x_max: 110,\n y_min: -110,\n y_max: 205,\n ha: 315,\n o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: -110,\n x_max: 110,\n y_min: -205,\n y_max: 110,\n ha: 315,\n o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: -155,\n x_max: 155,\n y_min: -157,\n y_max: 157,\n ha: 315,\n o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 782,\n y_min: -1,\n y_max: 500,\n ha: 501,\n o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 435,\n y_min: 65,\n y_max: 500,\n ha: 435,\n o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z',\n },\n pictChokeCymbal: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -8,\n x_max: 269,\n y_min: 0,\n y_max: 126,\n ha: 126,\n o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z',\n },\n arrowheadBlackUp: {\n x_min: 11,\n x_max: 239,\n y_min: -6,\n y_max: 269,\n ha: 275,\n o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z',\n },\n arrowheadBlackDown: {\n x_min: 11,\n x_max: 239,\n y_min: 6,\n y_max: 281,\n ha: 275,\n o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z',\n },\n },\n fontFamily: 'GonvilleSmufl',\n resolution: 1000,\n generatedOn: '2023-04-20T22:11:26.009Z',\n};\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","data","glyphs","bracketTop","x_min","x_max","y_min","y_max","ha","bracketBottom","barlineTick","breathMarkTick","segno","coda","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXWhole","noteheadXHalf","noteheadXBlack","noteheadCircleX","noteheadTriangleUpWhole","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBuyukMucennebSharp","accidentalBakiyeFlat","accidentalKomaSharp","accidentalKucukMucennebSharp","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","wiggleArpeggiatoUp","arrowheadBlackUp","arrowheadBlackDown","fontFamily","resolution","generatedOn","metrics","smufl","stave","padding","endPaddingMax","endPaddingMin","unalignedNotePadding","accidental","noteheadAccidentalPadding","leftPadding","accidentalSpacing","chordSymbol","global","superscriptOffset","subscriptOffset","kerningOffset","lowerKerningText","upperKerningText","spacing","superSubRatio","csymDiminished","leftSideBearing","advanceWidth","yOffset","csymHalfDiminished","csymAugmented","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","csymMinor","csymMajorSeventh","clef_default","width","annotations","treble","line","shiftX","bass","clef_small","ornament","brassScoop","xOffset","stemUpYOffset","reportedWidth","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","parenthesis","default","gracenote","pedalMarking","digits","shiftLine","shiftY","articulation","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","noteHead","minPadding","stem","heightAdjustmentForFlag","offsetYBaseStemUp","offsetYBaseStemDown","noteheadSquareWhite","stringNumber","verticalPadding","stemPadding","rightPadding","tuplet","noteHeadOffset","stemOffset","bottomLine","topModifierOffset","flag","staveTempo","clefNote_default","clefNote_small","stroke_straight","stroke_wiggly","textNote","scale"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-font-leland.js b/build/cjs/vexflow-font-leland.js new file mode 100644 index 0000000000..f116dc57d5 --- /dev/null +++ b/build/cjs/vexflow-font-leland.js @@ -0,0 +1,2 @@ +!function(b,l){"object"==typeof exports&&"object"==typeof module?module.exports=l():"function"==typeof define&&define.amd?define([],l):"object"==typeof exports?exports.VexFlowFont=l():(b.VexFlowFont=b.VexFlowFont||{},b.VexFlowFont.Leland=l())}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var b={d:(l,m)=>{for(var a in m)b.o(m,a)&&!b.o(l,a)&&Object.defineProperty(l,a,{enumerable:!0,get:m[a]})},o:(b,l)=>Object.prototype.hasOwnProperty.call(b,l)},l={};b.d(l,{default:()=>m});const m={data:{glyphs:{bracketTop:{x_min:0,x_max:491,y_min:0,y_max:279,ha:279,o:"m 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z"},bracketBottom:{x_min:0,x_max:491,y_min:-279,y_max:0,ha:279,o:"m 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z"},segno:{x_min:0,x_max:654,y_min:0,y_max:869,ha:869,o:"m 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z"},coda:{x_min:0,x_max:745,y_min:-113,y_max:735,ha:848,o:"m 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z"},gClef:{x_min:0,x_max:640,y_min:-666,y_max:1112,ha:1778,o:"m 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z"},cClef:{x_min:0,x_max:627,y_min:-480,y_max:482,ha:962,o:"m 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z"},fClef:{x_min:0,x_max:664,y_min:-617,y_max:251,ha:868,o:"m 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z"},unpitchedPercussionClef1:{x_min:0,x_max:352,y_min:-252,y_max:252,ha:504,o:"m 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z"},"6stringTabClef":{x_min:0,x_max:439,y_min:-743,y_max:746,ha:1489,o:"m 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z"},timeSig0:{x_min:15,x_max:389,y_min:-254,y_max:255,ha:509,o:"m 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z"},timeSig1:{x_min:15,x_max:336,y_min:-243,y_max:245,ha:488,o:"m 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z"},timeSig2:{x_min:15,x_max:377,y_min:-243,y_max:245,ha:488,o:"m 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z"},timeSig3:{x_min:15,x_max:364,y_min:-244,y_max:244,ha:488,o:"m 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z"},timeSig4:{x_min:14,x_max:442,y_min:-248,y_max:249,ha:497,o:"m 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z"},timeSig5:{x_min:15,x_max:362,y_min:-244,y_max:246,ha:490,o:"m 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z"},timeSig6:{x_min:15,x_max:387,y_min:-244,y_max:245,ha:489,o:"m 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z"},timeSig7:{x_min:15,x_max:366,y_min:-250,y_max:251,ha:501,o:"m 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z"},timeSig8:{x_min:15,x_max:393,y_min:-248,y_max:246,ha:494,o:"m 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z"},timeSig9:{x_min:15,x_max:387,y_min:-244,y_max:245,ha:489,o:"m 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z"},timeSigCommon:{x_min:0,x_max:463,y_min:-256,y_max:258,ha:514,o:"m 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z"},timeSigCutCommon:{x_min:0,x_max:463,y_min:-376,y_max:388,ha:764,o:"m 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z"},timeSigPlus:{x_min:0,x_max:408,y_min:-204,y_max:204,ha:408,o:"m 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z"},noteheadDoubleWhole:{x_min:0,x_max:538,y_min:-178,y_max:179,ha:357,o:"m 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z"},noteheadWhole:{x_min:0,x_max:373,y_min:-134,y_max:136,ha:270,o:"m 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z"},noteheadHalf:{x_min:0,x_max:325,y_min:-133,y_max:132,ha:265,o:"m 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z"},noteheadBlack:{x_min:0,x_max:325,y_min:-133,y_max:132,ha:265,o:"m 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z"},noteheadXBlack:{x_min:0,x_max:325,y_min:-132,y_max:132,ha:264,o:"m 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z"},noteheadCircleX:{x_min:0,x_max:325,y_min:-162,y_max:163,ha:325,o:"m 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:432,y_min:-179,y_max:177,ha:356,o:"m 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z"},noteheadSquareWhite:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z"},noteheadSquareBlack:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 446 180 l 0 180 l 0 -180 l 446 -180 z"},noteheadTriangleUpBlack:{x_min:0,x_max:310,y_min:-136,y_max:122,ha:258,o:"m 223 176 l 0 -196 l 446 -196 z"},noteheadSlashedDoubleWhole1:{x_min:-66,x_max:456,y_min:-213,y_max:212,ha:425,o:"m 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z"},noteheadSlashedWhole1:{x_min:-75,x_max:448,y_min:-211,y_max:214,ha:425,o:"m 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z"},noteheadSlashedHalf1:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z"},noteheadSlashedBlack1:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z"},noteheadSlashedDoubleWhole2:{x_min:-66,x_max:456,y_min:-213,y_max:212,ha:425,o:"m 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z"},noteheadSlashedWhole2:{x_min:-75,x_max:448,y_min:-212,y_max:214,ha:426,o:"m 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z"},noteheadSlashedHalf2:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z"},noteheadSlashedBlack2:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:373,y_min:-178,y_max:179,ha:357,o:"m 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z"},noteheadDiamondWhole:{x_min:0,x_max:373,y_min:-133,y_max:132,ha:265,o:"m 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z"},noteheadDiamondHalf:{x_min:0,x_max:335,y_min:-132,y_max:133,ha:265,o:"m 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z"},noteheadDiamondBlack:{x_min:0,x_max:335,y_min:-132,y_max:133,ha:265,o:"m 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z"},noteheadParenthesisRight:{x_min:0,x_max:75,y_min:-209,y_max:212,ha:421,o:"m 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z"},noteheadParenthesisLeft:{x_min:0,x_max:75,y_min:-212,y_max:209,ha:421,o:"m 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z"},noteheadMoonBlack:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:339,y_min:-136,y_max:122,ha:258,o:"m 0 176 l 0 -196 l 488 -196 z"},noteheadTriangleRightBlack:{x_min:0,x_max:339,y_min:-136,y_max:122,ha:258,o:"m 488 176 l 0 -196 l 488 -196 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:310,y_min:-136,y_max:122,ha:258,o:"m 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z"},augmentationDot:{x_min:0,x_max:100,y_min:-50,y_max:50,ha:100,o:"m 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z"},tremolo1:{x_min:0,x_max:290,y_min:-93,y_max:96,ha:189,o:"m 0 48 l 0 -134 l 418 -43 l 418 138 z"},flag8thUp:{x_min:0,x_max:289,y_min:-817,y_max:12,ha:829,o:"m 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z"},flag8thDown:{x_min:0,x_max:309,y_min:-12,y_max:817,ha:829,o:"m 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z"},flag16thUp:{x_min:0,x_max:279,y_min:-820,y_max:12,ha:832,o:"m 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z"},flag16thDown:{x_min:0,x_max:309,y_min:-26,y_max:803,ha:829,o:"m 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z"},flag32ndUp:{x_min:0,x_max:279,y_min:-821,y_max:186,ha:1007,o:"m 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z"},flag32ndDown:{x_min:0,x_max:309,y_min:-216,y_max:803,ha:1019,o:"m 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z"},flag64thUp:{x_min:0,x_max:279,y_min:-822,y_max:373,ha:1195,o:"m 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z"},flag64thDown:{x_min:0,x_max:309,y_min:-403,y_max:804,ha:1207,o:"m 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z"},flag128thUp:{x_min:0,x_max:279,y_min:-821,y_max:573,ha:1394,o:"m 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z"},flag128thDown:{x_min:0,x_max:309,y_min:-591,y_max:803,ha:1394,o:"m 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z"},accidentalFlat:{x_min:0,x_max:203,y_min:-176,y_max:453,ha:629,o:"m 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z"},accidentalNatural:{x_min:0,x_max:171,y_min:-323,y_max:325,ha:648,o:"m 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z"},accidentalSharp:{x_min:0,x_max:244,y_min:-333,y_max:334,ha:667,o:"m 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z"},accidentalDoubleSharp:{x_min:0,x_max:275,y_min:-137,y_max:138,ha:275,o:"m 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z"},accidentalDoubleFlat:{x_min:0,x_max:371,y_min:-176,y_max:453,ha:629,o:"m 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z"},accidentalParensLeft:{x_min:0,x_max:75,y_min:-212,y_max:209,ha:421,o:"m 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z"},accidentalParensRight:{x_min:0,x_max:75,y_min:-209,y_max:212,ha:421,o:"m 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:193,y_min:-176,y_max:452,ha:628,o:"m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:422,y_min:-176,y_max:452,ha:628,o:"m 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:180,y_min:-316,y_max:320,ha:636,o:"m 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z"},accidentalThreeQuarterTonesSharpStein:{x_min:0,x_max:290,y_min:-328,y_max:339,ha:667,o:"m 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z"},accidentalBuyukMucennebFlat:{x_min:0,x_max:277,y_min:-176,y_max:454,ha:630,o:"m 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z"},accidentalBuyukMucennebSharp:{x_min:0,x_max:348,y_min:-332,y_max:334,ha:666,o:"m 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z"},accidentalBakiyeFlat:{x_min:0,x_max:277,y_min:-176,y_max:454,ha:630,o:"m 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:348,y_min:-316,y_max:318,ha:634,o:"m 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z"},articAccentAbove:{x_min:0,x_max:361,y_min:0,y_max:235,ha:235,o:"m 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z"},articAccentBelow:{x_min:0,x_max:361,y_min:-235,y_max:0,ha:235,o:"m 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z"},articTenutoAbove:{x_min:0,x_max:316,y_min:0,y_max:46,ha:46,o:"m 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z"},articTenutoBelow:{x_min:0,x_max:316,y_min:-46,y_max:0,ha:46,o:"m 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z"},articStaccatoAbove:{x_min:0,x_max:78,y_min:0,y_max:78,ha:78,o:"m 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z"},articStaccatoBelow:{x_min:0,x_max:78,y_min:-78,y_max:0,ha:78,o:"m 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z"},articStaccatissimoAbove:{x_min:0,x_max:127,y_min:0,y_max:248,ha:248,o:"m 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z"},articStaccatissimoBelow:{x_min:0,x_max:127,y_min:-248,y_max:0,ha:248,o:"m 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z"},articMarcatoAbove:{x_min:1,x_max:296,y_min:0,y_max:253,ha:253,o:"m 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z"},articMarcatoBelow:{x_min:0,x_max:295,y_min:-253,y_max:0,ha:253,o:"m 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z"},fermataAbove:{x_min:0,x_max:622,y_min:0,y_max:368,ha:368,o:"m 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z"},fermataBelow:{x_min:0,x_max:622,y_min:-368,y_max:0,ha:368,o:"m 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z"},fermataLongAbove:{x_min:0,x_max:623,y_min:0,y_max:368,ha:368,o:"m 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z"},fermataLongBelow:{x_min:0,x_max:623,y_min:-368,y_max:0,ha:368,o:"m 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z"},fermataVeryLongAbove:{x_min:0,x_max:842,y_min:0,y_max:549,ha:549,o:"m 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z"},fermataVeryLongBelow:{x_min:0,x_max:842,y_min:-549,y_max:0,ha:549,o:"m 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z"},fermataShortAbove:{x_min:0,x_max:642,y_min:0,y_max:454,ha:454,o:"m 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z"},fermataShortBelow:{x_min:0,x_max:642,y_min:-454,y_max:0,ha:454,o:"m 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z"},breathMarkComma:{x_min:0,x_max:191,y_min:0,y_max:321,ha:321,o:"m 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z"},caesura:{x_min:0,x_max:380,y_min:0,y_max:490,ha:490,o:"m 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z"},caesuraCurved:{x_min:0,x_max:368,y_min:0,y_max:491,ha:491,o:"m 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z"},restMaxima:{x_min:0,x_max:450,y_min:-250,y_max:250,ha:500,o:"m 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z"},restDoubleWhole:{x_min:0,x_max:125,y_min:-11,y_max:262,ha:273,o:"m 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z"},restWhole:{x_min:0,x_max:325,y_min:-131,y_max:5,ha:136,o:"m 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z"},restWholeLegerLine:{x_min:-139,x_max:464,y_min:-122,y_max:14,ha:136,o:"m 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z"},restHalf:{x_min:0,x_max:325,y_min:-4,y_max:132,ha:136,o:"m 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z"},restHalfLegerLine:{x_min:-139,x_max:464,y_min:-14,y_max:122,ha:136,o:"m 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z"},restQuarter:{x_min:0,x_max:235,y_min:-331,y_max:401,ha:732,o:"m 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z"},rest8th:{x_min:0,x_max:276,y_min:-255,y_max:204,ha:459,o:"m 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z"},rest16th:{x_min:1,x_max:344,y_min:-507,y_max:204,ha:711,o:"m 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z"},rest32nd:{x_min:0,x_max:391,y_min:-507,y_max:460,ha:967,o:"m 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z"},rest64th:{x_min:0,x_max:423,y_min:-758,y_max:464,ha:1222,o:"m 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z"},rest128th:{x_min:-1,x_max:475,y_min:-759,y_max:717,ha:1476,o:"m 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z"},dynamicPiano:{x_min:-95,x_max:317,y_min:-163,y_max:263,ha:426,o:"m 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z"},dynamicMezzo:{x_min:-7,x_max:374,y_min:-2,y_max:251,ha:253,o:"m 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z"},dynamicForte:{x_min:-137,x_max:334,y_min:-193,y_max:421,ha:614,o:"m -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z"},dynamicRinforzando:{x_min:-12,x_max:230,y_min:0,y_max:254,ha:254,o:"m 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z"},dynamicSforzando:{x_min:0,x_max:208,y_min:-5,y_max:263,ha:268,o:"m 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z"},dynamicZ:{x_min:-42,x_max:239,y_min:-1,y_max:258,ha:259,o:"m 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z"},ornamentTrill:{x_min:-12,x_max:383,y_min:0,y_max:383,ha:383,o:"m 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z"},ornamentTurn:{x_min:0,x_max:456,y_min:0,y_max:232,ha:232,o:"m 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z"},ornamentTurnSlash:{x_min:0,x_max:456,y_min:-80,y_max:313,ha:393,o:"m 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z"},ornamentMordent:{x_min:0,x_max:473,y_min:-77,y_max:316,ha:393,o:"m 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z"},ornamentShortTrill:{x_min:0,x_max:473,y_min:0,y_max:248,ha:248,o:"m 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z"},ornamentTremblement:{x_min:0,x_max:654,y_min:0,y_max:248,ha:248,o:"m 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:680,y_min:0,y_max:388,ha:388,o:"m 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:0,x_max:662,y_min:-158,y_max:248,ha:406,o:"m 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:662,y_min:-158,y_max:321,ha:479,o:"m 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:662,y_min:0,y_max:406,ha:406,o:"m 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:857,y_min:0,y_max:248,ha:248,o:"m 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:565,y_min:-171,y_max:249,ha:420,o:"m 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z"},brassMuteClosed:{x_min:0,x_max:312,y_min:0,y_max:312,ha:312,o:"m 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z"},brassMuteOpen:{x_min:0,x_max:280,y_min:0,y_max:280,ha:280,o:"m 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z"},stringsDownBow:{x_min:0,x_max:315,y_min:0,y_max:293,ha:293,o:"m 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z"},stringsUpBow:{x_min:0,x_max:262,y_min:0,y_max:343,ha:343,o:"m 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z"},stringsHarmonic:{x_min:0,x_max:181,y_min:0,y_max:181,ha:181,o:"m 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:269,y_min:0,y_max:389,ha:389,o:"m 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:269,y_min:0,y_max:389,ha:389,o:"m 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z"},keyboardPedalPed:{x_min:0,x_max:981,y_min:-10,y_max:545,ha:555,o:"m 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z"},keyboardPedalUp:{x_min:0,x_max:473,y_min:0,y_max:473,ha:473,o:"m 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z"},wiggleArpeggiatoUp:{x_min:-22,x_max:242,y_min:0,y_max:164,ha:164,o:"m 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z"},repeat1Bar:{x_min:0,x_max:481,y_min:-250,y_max:250,ha:500,o:"m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z"},repeat2Bars:{x_min:0,x_max:735,y_min:-250,y_max:250,ha:500,o:"m 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z"},repeat4Bars:{x_min:0,x_max:1243,y_min:-250,y_max:250,ha:500,o:"m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z"},repeatBarSlash:{x_min:0,x_max:481,y_min:-250,y_max:250,ha:500,o:"m 693 360 l 511 360 l 0 -360 l 181 -360 z"},csymDiminished:{x_min:0,x_max:501,y_min:0,y_max:501,ha:501,o:"m 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z"},csymHalfDiminished:{x_min:-1,x_max:502,y_min:-1,y_max:502,ha:503,o:"m 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z"},csymAugmented:{x_min:1,x_max:321,y_min:90,y_max:410,ha:320,o:"m 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z"},csymMajorSeventh:{x_min:0,x_max:500,y_min:10,y_max:490,ha:480,o:"m 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:160,y_min:-176,y_max:452,ha:628,o:"m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:416,y_min:-176,y_max:452,ha:628,o:"m 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z"}},fontFamily:"Leland",resolution:1e3,generatedOn:"2022-12-19T23:52:37.756Z"},metrics:{smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}}};return l=l.default})())); +//# sourceMappingURL=vexflow-font-leland.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-font-leland.js.map b/build/cjs/vexflow-font-leland.js.map new file mode 100644 index 0000000000..81a10c01a6 --- /dev/null +++ b/build/cjs/vexflow-font-leland.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vexflow-font-leland.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,KAEzBD,EAAkB,YAAIA,EAAkB,aAAK,CAAC,EAAGA,EAAkB,YAAU,OAAIC,IAClF,CATD,CASsB,oBAAXK,OAAyBA,OAA+B,oBAAfC,WAA6BA,WAAaC,MAAO,I,mBCRrG,IAAIC,EAAsB,CCA1BA,EAAwB,CAACP,EAASQ,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAEV,EAASS,IAC5EE,OAAOC,eAAeZ,EAASS,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDF,EAAwB,CAACQ,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,4BCA3E,MCQP,EAJoB,CAChBI,KCLsB,CACtBC,OAAQ,CACJC,WAAY,CACRC,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2NAEPkB,cAAe,CACXL,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,kPAEPmB,MAAO,CACHN,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4vCAEPoB,KAAM,CACFP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qnBAEPqB,MAAO,CACHR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,qxCAEPsB,MAAO,CACHT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2mCAEPuB,MAAO,CACHV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s/BAEPwB,yBAA0B,CACtBX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEP,iBAAkB,CACda,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,g3BAEPyB,SAAU,CACNZ,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0PAEP0B,SAAU,CACNb,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+XAEP2B,SAAU,CACNd,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sxBAEP4B,SAAU,CACNf,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,msBAEP6B,SAAU,CACNhB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4xBAEP8B,SAAU,CACNjB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2gCAEP+B,SAAU,CACNlB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6jBAEPgC,SAAU,CACNnB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,suBAEPiC,SAAU,CACNpB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,scAEPkC,SAAU,CACNrB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6kBAEPmC,cAAe,CACXtB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mhBAEPoC,iBAAkB,CACdvB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uwBAEPqC,YAAa,CACTxB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6TAEPsC,oBAAqB,CACjBzB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qxCAEPuC,cAAe,CACX1B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8UAEPwC,aAAc,CACV3B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mRAEPyC,cAAe,CACX5B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gHAEP0C,eAAgB,CACZ7B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ohBAEP2C,gBAAiB,CACb9B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8YAEP4C,0BAA2B,CACvB/B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iXAEP6C,oBAAqB,CACjBhC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qFAEP8C,oBAAqB,CACjBjC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2CAEP+C,wBAAyB,CACrBlC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mCAEPgD,4BAA6B,CACzBnC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,msCAEPiD,sBAAuB,CACnBpC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8vBAEPkD,qBAAsB,CAClBrC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w7BAEPmD,sBAAuB,CACnBtC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ubAEPoD,4BAA6B,CACzBvC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kzCAEPqD,sBAAuB,CACnBxC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iwBAEPsD,qBAAsB,CAClBzC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,u6BAEPuD,sBAAuB,CACnB1C,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wcAEPwD,2BAA4B,CACxB3C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ghBAEPyD,qBAAsB,CAClB5C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6TAEP0D,oBAAqB,CACjB7C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iRAEP2D,qBAAsB,CAClB9C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yOAEP4D,yBAA0B,CACtB/C,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gSAEP6D,wBAAyB,CACrBhD,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+TAEP8D,kBAAmB,CACfjD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+EAEP+D,0BAA2B,CACvBlD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iCAEPgE,2BAA4B,CACxBnD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mCAEPiE,+BAAgC,CAC5BpD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qEAEPkE,gBAAiB,CACbrD,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,gGAEPmE,SAAU,CACNtD,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,yCAEPoE,UAAW,CACPvD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,kcAEPqE,YAAa,CACTxD,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qYAEPsE,WAAY,CACRzD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,0rBAEPuE,aAAc,CACV1D,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0lBAEPwE,WAAY,CACR3D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,68BAEPyE,aAAc,CACV5D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,s0BAEP0E,WAAY,CACR7D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,ktCAEP2E,aAAc,CACV9D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,6lCAEP4E,YAAa,CACT/D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,u5CAEP6E,cAAe,CACXhE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,q3CAEP8E,eAAgB,CACZjE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sZAEP+E,kBAAmB,CACflE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oRAEPgF,gBAAiB,CACbnE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2nBAEPiF,sBAAuB,CACnBpE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,spBAEPkF,qBAAsB,CAClBrE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6yBAEPmF,qBAAsB,CAClBtE,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+TAEPoF,sBAAuB,CACnBvE,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gSAEPqF,+BAAgC,CAC5BxE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,maAEPsF,0CAA2C,CACvCzE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,q1BAEPuF,gCAAiC,CAC7B1E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qfAEPwF,sCAAuC,CACnC3E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wuBAEPyF,4BAA6B,CACzB5E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0kBAEP0F,6BAA8B,CAC1B7E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g/BAEP2F,qBAAsB,CAClB9E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8fAEP4F,6BAA8B,CAC1B/E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,o3BAEP6F,iBAAkB,CACdhF,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8NAEP8F,iBAAkB,CACdjF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,yPAEP+F,iBAAkB,CACdlF,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,GACPC,GAAI,GACJjB,EAAG,iHAEPgG,iBAAkB,CACdnF,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,EACPC,GAAI,GACJjB,EAAG,6HAEPiG,mBAAoB,CAChBpF,MAAO,EACPC,MAAO,GACPC,MAAO,EACPC,MAAO,GACPC,GAAI,GACJjB,EAAG,iGAEPkG,mBAAoB,CAChBrF,MAAO,EACPC,MAAO,GACPC,OAAQ,GACRC,MAAO,EACPC,GAAI,GACJjB,EAAG,0GAEPmG,wBAAyB,CACrBtF,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,oQAEPoG,wBAAyB,CACrBvF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,iSAEPqG,kBAAmB,CACfxF,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6KAEPsG,kBAAmB,CACfzF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,oLAEPuG,aAAc,CACV1F,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0ZAEPwG,aAAc,CACV3F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,ycAEPyG,iBAAkB,CACd5F,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qOAEP0G,iBAAkB,CACd7F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,4PAEP2G,qBAAsB,CAClB9F,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0WAEP4G,qBAAsB,CAClB/F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,2YAEP6G,kBAAmB,CACfhG,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2UAEP8G,kBAAmB,CACfjG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,8WAEP+G,gBAAiB,CACblG,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2OAEPgH,QAAS,CACLnG,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,sXAEPiH,cAAe,CACXpG,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2YAEPkH,WAAY,CACRrG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEPmH,gBAAiB,CACbtG,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mIAEPoH,UAAW,CACPvG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,qIAEPqH,mBAAoB,CAChBxG,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,yJAEPsH,SAAU,CACNzG,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+HAEPuH,kBAAmB,CACf1G,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iJAEPwH,YAAa,CACT3G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,05BAEPyH,QAAS,CACL5G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iXAEP0H,SAAU,CACN7G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+gBAEP2H,SAAU,CACN9G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mrBAEP4H,SAAU,CACN/G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,i9BAEP6H,UAAW,CACPhH,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,irCAEP8H,aAAc,CACVjH,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yyBAEP+H,aAAc,CACVlH,OAAQ,EACRC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,urCAEPgI,aAAc,CACVnH,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,slCAEPiI,mBAAoB,CAChBpH,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wpBAEPkI,iBAAkB,CACdrH,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ogBAEPmI,SAAU,CACNtH,OAAQ,GACRC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ijCAEPoI,cAAe,CACXvH,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,42BAEPqI,aAAc,CACVxH,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0fAEPsI,kBAAmB,CACfzH,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oqBAEPuI,gBAAiB,CACb1H,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6eAEPwI,mBAAoB,CAChB3H,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+SAEPyI,oBAAqB,CACjB5H,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0dAEP0I,2BAA4B,CACxB7H,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wkBAEP2I,oCAAqC,CACjC9H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,45BAEP4I,8BAA+B,CAC3B/H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g7BAEP6I,mCAAoC,CAChChI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,orBAEP8I,wCAAyC,CACrCjI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,uxBAEP+I,gCAAiC,CAC7BlI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uqBAEPgJ,gBAAiB,CACbnI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6QAEPiJ,cAAe,CACXpI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,oNAEPkJ,eAAgB,CACZrI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,sHAEPmJ,aAAc,CACVtI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wRAEPoJ,gBAAiB,CACbvI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iNAEPqJ,0BAA2B,CACvBxI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yVAEPsJ,0BAA2B,CACvBzI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yVAEPuJ,iBAAkB,CACd1I,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ozEAEPwJ,gBAAiB,CACb3I,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iuFAEPyJ,mBAAoB,CAChB5I,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mjBAEP0J,WAAY,CACR7I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kRAEP2J,YAAa,CACT9I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qUAEP4J,YAAa,CACT/I,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0aAEP6J,eAAgB,CACZhJ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6CAEP8J,eAAgB,CACZjJ,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iUAEP+J,mBAAoB,CAChBlJ,OAAQ,EACRC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8bAEPgK,cAAe,CACXnJ,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yHAEPiK,iBAAkB,CACdpJ,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6DAEPkK,6BAA8B,CAC1BrJ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qXAEPmK,oCAAqC,CACjCtJ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8vBAGXoK,WAAY,SACZC,WAAY,IACZC,YAAa,4BD/pCbC,QDNyB,CACzBC,OAAO,EACPC,MAAO,CACHC,QAAS,GACTC,cAAe,GACfC,cAAe,EACfC,qBAAsB,IAE1BC,WAAY,CACRC,0BAA2B,EAC3BC,YAAa,EACbC,kBAAmB,GAEvBC,YAAa,CACTC,OAAQ,CACJC,mBAAoB,IACpBC,gBAAiB,IACjBC,eAAgB,IAChBC,iBAAkB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAC5CC,iBAAkB,CAAC,IAAK,KACxBC,QAAS,IACTC,cAAe,KAEnB/K,OAAQ,CACJmJ,eAAgB,CACZ6B,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEb9B,mBAAoB,CAChB4B,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEb7B,cAAe,CACX2B,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbC,mBAAoB,CAChBH,iBAAkB,GAClBC,aAAc,IACdC,QAAS,KAEbE,oBAAqB,CACjBJ,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEbG,oBAAqB,CACjBL,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbI,qBAAsB,CAClBN,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbK,uBAAwB,CACpBP,gBAAiB,GACjBC,aAAc,IACdC,QAAS,KAEbM,wBAAyB,CACrBR,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEbO,6BAA8B,CAC1BT,gBAAiB,IACjBC,aAAc,IACdC,QAAS,KAEbQ,UAAW,CACPV,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEb5B,iBAAkB,CACd0B,gBAAiB,IACjBE,QAAS,EACTD,aAAc,KAElB5G,gBAAiB,CACb2G,gBAAiB,GACjBC,aAAc,IACdC,SAAU,KAEd/G,eAAgB,CACZ6G,iBAAkB,GAClBC,aAAc,IACdC,SAAU,OAItBS,aAAc,CACVC,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,EACPC,OAAQ,KAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,IAEZC,KAAM,CACFF,KAAM,EACNC,OAAQ,MAKxBE,WAAY,CACRN,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,GACPC,OAAQ,IAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,GAEZC,KAAM,CACFF,KAAM,IACNC,OAAQ,OAKxBG,SAAU,CACNC,WAAY,CACRC,SAAU,GACVnB,QAAS,EACToB,cAAe,EACfC,cAAe,IAEnBC,gBAAiB,CACbH,QAAS,GACTnB,QAAS,EACToB,cAAe,EACfC,cAAe,IAEnBE,kBAAmB,CACfJ,QAAS,GACTnB,QAAS,EACToB,cAAe,EACfC,cAAe,IAEnBG,gBAAiB,CACbL,QAAS,GACTnB,QAAS,EACToB,cAAe,EACfC,cAAe,GAEnBI,qBAAsB,CAClBN,QAAS,GACTnB,QAAS,GACToB,cAAe,EACfC,cAAe,GAEnBK,UAAW,CACPP,QAAS,EACTnB,SAAU,EACVoB,cAAe,GACfC,cAAe,GAEnBlE,gBAAiB,CACbgE,QAAS,EACTnB,SAAU,EACVoB,cAAe,GACfC,cAAe,GAEnBjE,cAAe,CACX+D,QAAS,EACTnB,SAAU,EACVoB,cAAe,GACfC,cAAe,GAEnBM,UAAW,CACPR,QAAS,GACTnB,QAAS,EACToB,cAAe,EACfC,cAAe,IAEnBO,cAAe,CACXT,QAAS,EACTnB,QAAS,EACToB,cAAe,EACfC,cAAe,IAEnBQ,WAAY,CACRV,QAAS,GACTnB,QAAS,EACToB,cAAe,EACfC,cAAe,IAGvBS,YAAa,CACTC,QAAS,CACLrB,MAAO,GAEXsB,UAAW,CACPtB,MAAO,IAGfuB,aAAc,CAAC,EAEfC,OAAQ,CAEJC,WAAY,EAEZC,QAAS,GAEbC,aAAc,CACV/H,wBAAyB,CACrBuE,QAAS,GAEbtE,wBAAyB,CACrBsE,QAAS,IAGjByD,QAAS,CACLP,QAAS,CACLnC,QAAS,EACT2C,eAAgB,EAChBC,gBAAiB,EACjBC,cAAe,GACfC,gBAAiB,GAErBC,MAAO,CACH/C,QAAS,IACT2C,eAAe,IACfC,gBAAiB,IACjBC,cAAe,EACfC,gBAAiB,IAGzBE,gBAAiB,CACbC,WAAY,CACRC,QAAS,GACTC,QAAS,GACTnD,QAAS,GAEbrK,KAAM,CACFwN,QAAS,IAEbzN,MAAO,CACHyN,QAAS,KAGjBC,SAAU,CACNC,WAAY,GAEhBC,KAAM,CACFC,yBAA0B,EAG1BH,SAAU,CACNI,uBAAwB,CACpBC,kBAAmB,EACnBC,oBAAqB,GAEzBpM,wBAAyB,CACrBmM,kBAAmB,EACnBC,oBAAqB,GAEzBC,wBAAyB,CACrBF,kBAAmB,EACnBC,oBAAqB,GAEzBE,cAAe,CACXH,mBAAoB,EACpBC,oBAAqB,GAEzBzM,eAAgB,CACZwM,mBAAoB,EACpBC,oBAAqB,GAEzBG,eAAgB,CACZJ,mBAAoB,EACpBC,oBAAqB,GAEzB3M,aAAc,CACV0M,mBAAoB,KACpBC,oBAAqB,MAEzB1M,cAAe,CACXyM,mBAAoB,EACpBC,oBAAqB,GAEzBtM,oBAAqB,CACjBsM,qBAAsB,EACtBD,kBAAmB,KAI/BK,aAAc,CACVC,gBAAiB,EACjBC,YAAa,EACbzE,YAAa,EACb0E,aAAc,GAElBC,OAAQ,CACJC,eAAgB,GAChBC,WAAY,GACZC,WAAY,EACZC,kBAAmB,IAWvBpP,OAAQ,CACJS,KAAM,CACFuL,QAAS,EACTsB,OAAQ,GAEZ9M,MAAO,CACHwL,QAAS,GAEbqD,KAAM,CACFrD,QAAS,IACTsD,WAAY,CACRtD,QAAS,IAGjBL,aAAc,CAAC,EACfO,WAAY,CACRxL,MAAO,CACH4M,OAAQ,MAGhBiC,iBAAkB,CAAC,EACnBC,eAAgB,CAAC,EACjBC,gBAAiB,CACbC,mBAAoB,CAChB1D,QAAS,KAEb2D,iBAAkB,CACd3D,QAAS,MAGjB4D,cAAe,CACXF,mBAAoB,CAChB1D,QAAS,EACTsB,OAAQ,GAEZqC,iBAAkB,CACd3D,QAAS,EACTsB,OAAQ,IAGhBuC,SAAU,CACNC,eAAgB,CACZxC,OAAQ,GAEZlH,gBAAiB,CAAC,EAClB5F,MAAO,CACHwL,QAAS,EACTsB,OAAQ,GAEZ7M,KAAM,CACFuL,QAAS,EACTsB,OAAQ,GAEZ7F,cAAe,CACXuE,QAAS,EACTsB,OAAQ,GAEZ5F,aAAc,CAAC,EACfC,kBAAmB,CAAC,EACpBC,gBAAiB,CACboE,QAAS,GAEbnE,mBAAoB,CAChBmE,QAAS,IAGjBkC,SAAU,CAAC,EACX3D,YAAa,CACTwF,MAAO,O","sources":["webpack://VexFlowFont.Leland/webpack/universalModuleDefinition","webpack://VexFlowFont.Leland/webpack/bootstrap","webpack://VexFlowFont.Leland/webpack/runtime/define property getters","webpack://VexFlowFont.Leland/webpack/runtime/hasOwnProperty shorthand","webpack://VexFlowFont.Leland/./src/fonts/common_metrics.ts","webpack://VexFlowFont.Leland/./entry/vexflow-font-leland.ts","webpack://VexFlowFont.Leland/./src/fonts/leland_glyphs.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VexFlowFont\"] = factory();\n\telse\n\t\troot[\"VexFlowFont\"] = root[\"VexFlowFont\"] || {}, root[\"VexFlowFont\"][\"Leland\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CommonMetrics } from '../src/fonts/common_metrics';\nimport { LelandFont } from '../src/fonts/leland_glyphs';\nexport const Font = {\n data: LelandFont,\n metrics: CommonMetrics,\n};\nexport default Font;\n","export const LelandFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 491,\n y_min: 0,\n y_max: 279,\n ha: 279,\n o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 491,\n y_min: -279,\n y_max: 0,\n ha: 279,\n o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z',\n },\n segno: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 869,\n ha: 869,\n o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z',\n },\n coda: {\n x_min: 0,\n x_max: 745,\n y_min: -113,\n y_max: 735,\n ha: 848,\n o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z',\n },\n gClef: {\n x_min: 0,\n x_max: 640,\n y_min: -666,\n y_max: 1112,\n ha: 1778,\n o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z',\n },\n cClef: {\n x_min: 0,\n x_max: 627,\n y_min: -480,\n y_max: 482,\n ha: 962,\n o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z',\n },\n fClef: {\n x_min: 0,\n x_max: 664,\n y_min: -617,\n y_max: 251,\n ha: 868,\n o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 352,\n y_min: -252,\n y_max: 252,\n ha: 504,\n o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 439,\n y_min: -743,\n y_max: 746,\n ha: 1489,\n o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z',\n },\n timeSig0: {\n x_min: 15,\n x_max: 389,\n y_min: -254,\n y_max: 255,\n ha: 509,\n o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z',\n },\n timeSig1: {\n x_min: 15,\n x_max: 336,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z',\n },\n timeSig2: {\n x_min: 15,\n x_max: 377,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z',\n },\n timeSig3: {\n x_min: 15,\n x_max: 364,\n y_min: -244,\n y_max: 244,\n ha: 488,\n o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z',\n },\n timeSig4: {\n x_min: 14,\n x_max: 442,\n y_min: -248,\n y_max: 249,\n ha: 497,\n o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z',\n },\n timeSig5: {\n x_min: 15,\n x_max: 362,\n y_min: -244,\n y_max: 246,\n ha: 490,\n o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z',\n },\n timeSig6: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z',\n },\n timeSig7: {\n x_min: 15,\n x_max: 366,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z',\n },\n timeSig8: {\n x_min: 15,\n x_max: 393,\n y_min: -248,\n y_max: 246,\n ha: 494,\n o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z',\n },\n timeSig9: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -256,\n y_max: 258,\n ha: 514,\n o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -376,\n y_max: 388,\n ha: 764,\n o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 408,\n y_min: -204,\n y_max: 204,\n ha: 408,\n o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 538,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 325,\n y_min: -162,\n y_max: 163,\n ha: 325,\n o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 432,\n y_min: -179,\n y_max: 177,\n ha: 356,\n o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 223 176 l 0 -196 l 446 -196 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z',\n },\n noteheadSlashedWhole1: {\n x_min: -75,\n x_max: 448,\n y_min: -211,\n y_max: 214,\n ha: 425,\n o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z',\n },\n noteheadSlashedHalf1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z',\n },\n noteheadSlashedBlack1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z',\n },\n noteheadSlashedWhole2: {\n x_min: -75,\n x_max: 448,\n y_min: -212,\n y_max: 214,\n ha: 426,\n o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z',\n },\n noteheadSlashedHalf2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z',\n },\n noteheadSlashedBlack2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z',\n },\n noteheadParenthesisRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 0 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 488 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z',\n },\n tremolo1: {\n x_min: 0,\n x_max: 290,\n y_min: -93,\n y_max: 96,\n ha: 189,\n o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 289,\n y_min: -817,\n y_max: 12,\n ha: 829,\n o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -12,\n y_max: 817,\n ha: 829,\n o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -820,\n y_max: 12,\n ha: 832,\n o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -26,\n y_max: 803,\n ha: 829,\n o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 186,\n ha: 1007,\n o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 309,\n y_min: -216,\n y_max: 803,\n ha: 1019,\n o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -822,\n y_max: 373,\n ha: 1195,\n o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -403,\n y_max: 804,\n ha: 1207,\n o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 573,\n ha: 1394,\n o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -591,\n y_max: 803,\n ha: 1394,\n o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 203,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 171,\n y_min: -323,\n y_max: 325,\n ha: 648,\n o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 244,\n y_min: -333,\n y_max: 334,\n ha: 667,\n o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 275,\n y_min: -137,\n y_max: 138,\n ha: 275,\n o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 371,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 193,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 180,\n y_min: -316,\n y_max: 320,\n ha: 636,\n o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 290,\n y_min: -328,\n y_max: 339,\n ha: 667,\n o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -332,\n y_max: 334,\n ha: 666,\n o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z',\n },\n accidentalBakiyeFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -316,\n y_max: 318,\n ha: 634,\n o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 361,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 361,\n y_min: -235,\n y_max: 0,\n ha: 235,\n o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 316,\n y_min: 0,\n y_max: 46,\n ha: 46,\n o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 316,\n y_min: -46,\n y_max: 0,\n ha: 46,\n o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 78,\n y_min: 0,\n y_max: 78,\n ha: 78,\n o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 78,\n y_min: -78,\n y_max: 0,\n ha: 78,\n o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 127,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 127,\n y_min: -248,\n y_max: 0,\n ha: 248,\n o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z',\n },\n articMarcatoAbove: {\n x_min: 1,\n x_max: 296,\n y_min: 0,\n y_max: 253,\n ha: 253,\n o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 295,\n y_min: -253,\n y_max: 0,\n ha: 253,\n o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 622,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 622,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 623,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 623,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 842,\n y_min: 0,\n y_max: 549,\n ha: 549,\n o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 842,\n y_min: -549,\n y_max: 0,\n ha: 549,\n o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 642,\n y_min: 0,\n y_max: 454,\n ha: 454,\n o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 642,\n y_min: -454,\n y_max: 0,\n ha: 454,\n o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 321,\n ha: 321,\n o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z',\n },\n caesura: {\n x_min: 0,\n x_max: 380,\n y_min: 0,\n y_max: 490,\n ha: 490,\n o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 368,\n y_min: 0,\n y_max: 491,\n ha: 491,\n o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 450,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: -11,\n y_max: 262,\n ha: 273,\n o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 325,\n y_min: -131,\n y_max: 5,\n ha: 136,\n o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z',\n },\n restWholeLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -122,\n y_max: 14,\n ha: 136,\n o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -4,\n y_max: 132,\n ha: 136,\n o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z',\n },\n restHalfLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -14,\n y_max: 122,\n ha: 136,\n o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 235,\n y_min: -331,\n y_max: 401,\n ha: 732,\n o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 276,\n y_min: -255,\n y_max: 204,\n ha: 459,\n o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z',\n },\n rest16th: {\n x_min: 1,\n x_max: 344,\n y_min: -507,\n y_max: 204,\n ha: 711,\n o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 391,\n y_min: -507,\n y_max: 460,\n ha: 967,\n o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -758,\n y_max: 464,\n ha: 1222,\n o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z',\n },\n rest128th: {\n x_min: -1,\n x_max: 475,\n y_min: -759,\n y_max: 717,\n ha: 1476,\n o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z',\n },\n dynamicPiano: {\n x_min: -95,\n x_max: 317,\n y_min: -163,\n y_max: 263,\n ha: 426,\n o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z',\n },\n dynamicMezzo: {\n x_min: -7,\n x_max: 374,\n y_min: -2,\n y_max: 251,\n ha: 253,\n o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z',\n },\n dynamicForte: {\n x_min: -137,\n x_max: 334,\n y_min: -193,\n y_max: 421,\n ha: 614,\n o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z',\n },\n dynamicRinforzando: {\n x_min: -12,\n x_max: 230,\n y_min: 0,\n y_max: 254,\n ha: 254,\n o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 208,\n y_min: -5,\n y_max: 263,\n ha: 268,\n o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z',\n },\n dynamicZ: {\n x_min: -42,\n x_max: 239,\n y_min: -1,\n y_max: 258,\n ha: 259,\n o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z',\n },\n ornamentTrill: {\n x_min: -12,\n x_max: 383,\n y_min: 0,\n y_max: 383,\n ha: 383,\n o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 456,\n y_min: 0,\n y_max: 232,\n ha: 232,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 456,\n y_min: -80,\n y_max: 313,\n ha: 393,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 473,\n y_min: -77,\n y_max: 316,\n ha: 393,\n o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 680,\n y_min: 0,\n y_max: 388,\n ha: 388,\n o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 248,\n ha: 406,\n o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 321,\n ha: 479,\n o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 662,\n y_min: 0,\n y_max: 406,\n ha: 406,\n o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 857,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 565,\n y_min: -171,\n y_max: 249,\n ha: 420,\n o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 280,\n y_min: 0,\n y_max: 280,\n ha: 280,\n o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 315,\n y_min: 0,\n y_max: 293,\n ha: 293,\n o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 343,\n ha: 343,\n o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 181,\n y_min: 0,\n y_max: 181,\n ha: 181,\n o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 981,\n y_min: -10,\n y_max: 545,\n ha: 555,\n o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 242,\n y_min: 0,\n y_max: 164,\n ha: 164,\n o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 735,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1243,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 501,\n y_min: 0,\n y_max: 501,\n ha: 501,\n o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z',\n },\n csymHalfDiminished: {\n x_min: -1,\n x_max: 502,\n y_min: -1,\n y_max: 502,\n ha: 503,\n o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z',\n },\n csymAugmented: {\n x_min: 1,\n x_max: 321,\n y_min: 90,\n y_max: 410,\n ha: 320,\n o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 500,\n y_min: 10,\n y_max: 490,\n ha: 480,\n o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 160,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 416,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n },\n fontFamily: 'Leland',\n resolution: 1000,\n generatedOn: '2022-12-19T23:52:37.756Z',\n};\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","data","glyphs","bracketTop","x_min","x_max","y_min","y_max","ha","bracketBottom","segno","coda","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXBlack","noteheadCircleX","noteheadDoubleWholeSquare","noteheadSquareWhite","noteheadSquareBlack","noteheadTriangleUpBlack","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBuyukMucennebSharp","accidentalBakiyeFlat","accidentalKucukMucennebSharp","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompTrillLowerSuffix","brassMuteClosed","brassMuteOpen","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","keyboardPedalPed","keyboardPedalUp","wiggleArpeggiatoUp","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","csymDiminished","csymHalfDiminished","csymAugmented","csymMajorSeventh","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","fontFamily","resolution","generatedOn","metrics","smufl","stave","padding","endPaddingMax","endPaddingMin","unalignedNotePadding","accidental","noteheadAccidentalPadding","leftPadding","accidentalSpacing","chordSymbol","global","superscriptOffset","subscriptOffset","kerningOffset","lowerKerningText","upperKerningText","spacing","superSubRatio","leftSideBearing","advanceWidth","yOffset","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","csymMinor","clef_default","width","annotations","treble","line","shiftX","bass","clef_small","ornament","brassScoop","xOffset","stemUpYOffset","reportedWidth","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassFlip","brassJazzTurn","brassSmear","parenthesis","default","gracenote","pedalMarking","digits","shiftLine","shiftY","articulation","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","noteHead","minPadding","stem","heightAdjustmentForFlag","noteheadTriangleUpHalf","offsetYBaseStemUp","offsetYBaseStemDown","noteheadTriangleUpWhole","noteheadXHalf","noteheadXWhole","stringNumber","verticalPadding","stemPadding","rightPadding","tuplet","noteHeadOffset","stemOffset","bottomLine","topModifierOffset","flag","staveTempo","clefNote_default","clefNote_small","stroke_straight","arrowheadBlackDown","arrowheadBlackUp","stroke_wiggly","textNote","breathMarkTick","scale"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-font-petaluma.js b/build/cjs/vexflow-font-petaluma.js new file mode 100644 index 0000000000..ec73748806 --- /dev/null +++ b/build/cjs/vexflow-font-petaluma.js @@ -0,0 +1,2 @@ +!function(b,m){"object"==typeof exports&&"object"==typeof module?module.exports=m():"function"==typeof define&&define.amd?define([],m):"object"==typeof exports?exports.VexFlowFont=m():(b.VexFlowFont=b.VexFlowFont||{},b.VexFlowFont.Petaluma=m())}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var b={d:(m,a)=>{for(var l in a)b.o(a,l)&&!b.o(m,l)&&Object.defineProperty(m,l,{enumerable:!0,get:a[l]})},o:(b,m)=>Object.prototype.hasOwnProperty.call(b,m)},m={};b.d(m,{default:()=>a});const a={data:{glyphs:{bracketTop:{x_min:0,x_max:508,y_min:0,y_max:370,ha:370,o:"m 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z"},bracketBottom:{x_min:0,x_max:496,y_min:-393,y_max:0,ha:393,o:"m 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z"},barlineTick:{x_min:0,x_max:56,y_min:877,y_max:1122,ha:245,o:"m 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z"},breathMarkTick:{x_min:0,x_max:568,y_min:0,y_max:621,ha:621,o:"m 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z"},segno:{x_min:0,x_max:798,y_min:-65,y_max:806,ha:871,o:"m 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z"},coda:{x_min:0,x_max:1380,y_min:-196,y_max:1037,ha:1233,o:"m 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z"},gClef:{x_min:0,x_max:664,y_min:-559,y_max:1009,ha:1568,o:"m 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z"},cClef:{x_min:0,x_max:731,y_min:-543,y_max:543,ha:1086,o:"m 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z"},fClef:{x_min:0,x_max:776,y_min:-496,y_max:216,ha:712,o:"m 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z"},unpitchedPercussionClef1:{x_min:0,x_max:379,y_min:-250,y_max:250,ha:500,o:"m 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z"},"6stringTabClef":{x_min:0,x_max:438,y_min:-768,y_max:767,ha:1535,o:"m 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z"},timeSig0:{x_min:20,x_max:513,y_min:-358,y_max:359,ha:717,o:"m 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z"},timeSig1:{x_min:20,x_max:283,y_min:-364,y_max:366,ha:730,o:"m 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z"},timeSig2:{x_min:20,x_max:660,y_min:-379,y_max:382,ha:761,o:"m 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z"},timeSig3:{x_min:20,x_max:540,y_min:-392,y_max:392,ha:784,o:"m 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z"},timeSig4:{x_min:20,x_max:633,y_min:-490,y_max:491,ha:981,o:"m 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z"},timeSig5:{x_min:20,x_max:583,y_min:-389,y_max:389,ha:778,o:"m 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z"},timeSig6:{x_min:20,x_max:565,y_min:-363,y_max:363,ha:726,o:"m 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z"},timeSig7:{x_min:20,x_max:592,y_min:-345,y_max:345,ha:690,o:"m 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z"},timeSig8:{x_min:20,x_max:504,y_min:-428,y_max:428,ha:856,o:"m 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z"},timeSig9:{x_min:20,x_max:494,y_min:-421,y_max:421,ha:842,o:"m 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z"},timeSigCommon:{x_min:20,x_max:585,y_min:-298,y_max:294,ha:592,o:"m 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z"},timeSigCutCommon:{x_min:20,x_max:695,y_min:-687,y_max:687,ha:1374,o:"m 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z"},timeSigPlus:{x_min:0,x_max:661,y_min:-358,y_max:358,ha:716,o:"m 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z"},timeSigPlusSmall:{x_min:0,x_max:418,y_min:-197,y_max:199,ha:396,o:"m 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z"},timeSigMinus:{x_min:0,x_max:662,y_min:-54,y_max:55,ha:109,o:"m 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z"},timeSigParensRight:{x_min:0,x_max:274,y_min:-723,y_max:725,ha:1448,o:"m 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z"},timeSigParensRightSmall:{x_min:0,x_max:154,y_min:-422,y_max:422,ha:844,o:"m 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z"},timeSigParensLeft:{x_min:1,x_max:400,y_min:-728,y_max:728,ha:1456,o:"m 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z"},timeSigParensLeftSmall:{x_min:0,x_max:173,y_min:-405,y_max:404,ha:809,o:"m 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z"},noteheadDoubleWhole:{x_min:0,x_max:614,y_min:-223,y_max:223,ha:446,o:"m 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z"},noteheadWhole:{x_min:0,x_max:380,y_min:-186,y_max:165,ha:351,o:"m 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z"},noteheadHalf:{x_min:0,x_max:334,y_min:-174,y_max:175,ha:349,o:"m 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z"},noteheadBlack:{x_min:0,x_max:334,y_min:-164,y_max:164,ha:328,o:"m 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z"},noteheadXDoubleWhole:{x_min:0,x_max:730,y_min:-266,y_max:267,ha:533,o:"m 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z"},noteheadXWhole:{x_min:0,x_max:506,y_min:-143,y_max:144,ha:287,o:"m 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z"},noteheadXHalf:{x_min:0,x_max:421,y_min:-146,y_max:151,ha:297,o:"m 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z"},noteheadXBlack:{x_min:0,x_max:289,y_min:-156,y_max:157,ha:313,o:"m 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z"},noteheadCircleXDoubleWhole:{x_min:0,x_max:437,y_min:-220,y_max:219,ha:439,o:"m 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z"},noteheadCircleXWhole:{x_min:0,x_max:323,y_min:-190,y_max:184,ha:374,o:"m 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z"},noteheadCircleXHalf:{x_min:0,x_max:309,y_min:-179,y_max:179,ha:358,o:"m 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z"},noteheadCircleX:{x_min:0,x_max:344,y_min:-179,y_max:175,ha:354,o:"m 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z"},noteheadCircledDoubleWhole:{x_min:0,x_max:672,y_min:-291,y_max:291,ha:582,o:"m 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z"},noteheadCircledWhole:{x_min:-50,x_max:472,y_min:-231,y_max:232,ha:463,o:"m 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z"},noteheadCircledHalf:{x_min:-50,x_max:393,y_min:-175,y_max:175,ha:350,o:"m 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z"},noteheadCircledBlack:{x_min:-70,x_max:326,y_min:-168,y_max:192,ha:360,o:"m 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:474,y_min:-209,y_max:211,ha:420,o:"m 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z"},noteheadSquareWhite:{x_min:0,x_max:350,y_min:-131,y_max:131,ha:262,o:"m 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z"},noteheadSquareBlack:{x_min:0,x_max:342,y_min:-130,y_max:132,ha:262,o:"m 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z"},noteheadTriangleDownDoubleWhole:{x_min:0,x_max:510,y_min:-213,y_max:213,ha:426,o:"m 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z"},noteheadTriangleDownWhole:{x_min:0,x_max:366,y_min:-145,y_max:138,ha:283,o:"m 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z"},noteheadTriangleDownHalf:{x_min:0,x_max:341,y_min:-159,y_max:159,ha:318,o:"m 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z"},noteheadTriangleDownBlack:{x_min:0,x_max:346,y_min:-149,y_max:149,ha:298,o:"m 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z"},noteheadTriangleUpDoubleWhole:{x_min:0,x_max:510,y_min:-213,y_max:213,ha:426,o:"m 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z"},noteheadTriangleUpWhole:{x_min:0,x_max:366,y_min:-145,y_max:138,ha:283,o:"m 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z"},noteheadTriangleUpHalf:{x_min:0,x_max:341,y_min:-159,y_max:159,ha:318,o:"m 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z"},noteheadTriangleUpBlack:{x_min:0,x_max:346,y_min:-149,y_max:149,ha:298,o:"m 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z"},noteheadSlashedDoubleWhole1:{x_min:0,x_max:697,y_min:-290,y_max:290,ha:580,o:"m 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z"},noteheadSlashedWhole1:{x_min:-76,x_max:498,y_min:-168,y_max:168,ha:336,o:"m -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z"},noteheadSlashedHalf1:{x_min:-79,x_max:471,y_min:-184,y_max:184,ha:368,o:"m -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z"},noteheadSlashedBlack1:{x_min:-110,x_max:452,y_min:-190,y_max:190,ha:380,o:"m -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z"},noteheadSlashedDoubleWhole2:{x_min:0,x_max:697,y_min:-295,y_max:295,ha:590,o:"m 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z"},noteheadSlashedWhole2:{x_min:-83,x_max:510,y_min:-201,y_max:198,ha:399,o:"m 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z"},noteheadSlashedHalf2:{x_min:-73,x_max:454,y_min:-188,y_max:188,ha:376,o:"m 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z"},noteheadSlashedBlack2:{x_min:-84,x_max:405,y_min:-189,y_max:189,ha:378,o:"m 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:429,y_min:-221,y_max:221,ha:442,o:"m 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z"},noteheadDiamondWhole:{x_min:0,x_max:271,y_min:-132,y_max:132,ha:264,o:"m 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z"},noteheadDiamondHalf:{x_min:0,x_max:295,y_min:-148,y_max:148,ha:296,o:"m 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z"},noteheadDiamondBlack:{x_min:0,x_max:310,y_min:-146,y_max:146,ha:292,o:"m 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z"},noteheadParenthesis:{x_min:-70,x_max:329,y_min:-196,y_max:201,ha:397,o:"m 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z"},noteheadParenthesisRight:{x_min:-30,x_max:82,y_min:-199,y_max:206,ha:405,o:"m -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z"},noteheadParenthesisLeft:{x_min:0,x_max:106,y_min:-197,y_max:197,ha:394,o:"m 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z"},noteheadMoonBlack:{x_min:0,x_max:328,y_min:-125,y_max:125,ha:250,o:"m 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:391,y_min:-142,y_max:142,ha:284,o:"m 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z"},noteheadTriangleRightBlack:{x_min:0,x_max:398,y_min:-139,y_max:140,ha:279,o:"m 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:334,y_min:-134,y_max:136,ha:270,o:"m 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z"},augmentationDot:{x_min:0,x_max:96,y_min:-57,y_max:57,ha:114,o:"m 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z"},tremolo1:{x_min:-158,x_max:156,y_min:-88,y_max:88,ha:176,o:"m -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z"},flag8thUp:{x_min:0,x_max:261,y_min:-819,y_max:0,ha:819,o:"m 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z"},flag8thDown:{x_min:0,x_max:261,y_min:0,y_max:819,ha:819,o:"m 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z"},flag16thUp:{x_min:0,x_max:327,y_min:-819,y_max:0,ha:819,o:"m 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z"},flag16thDown:{x_min:0,x_max:327,y_min:0,y_max:819,ha:819,o:"m 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z"},flag32ndUp:{x_min:0,x_max:268,y_min:-849,y_max:149,ha:999,o:"m 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z"},flag32ndDown:{x_min:-3,x_max:268,y_min:-169,y_max:829,ha:999,o:"m 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z"},flag64thUp:{x_min:-4,x_max:282,y_min:-824,y_max:347,ha:1171,o:"m 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z"},flag64thDown:{x_min:-5,x_max:281,y_min:-375,y_max:796,ha:1171,o:"m 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z"},flag128thUp:{x_min:0,x_max:252,y_min:-804,y_max:530,ha:1334,o:"m 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z"},flag128thDown:{x_min:-1,x_max:252,y_min:-580,y_max:754,ha:1334,o:"m 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z"},accidentalFlat:{x_min:1,x_max:209,y_min:-208,y_max:472,ha:680,o:"m 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z"},accidentalNatural:{x_min:0,x_max:214,y_min:-456,y_max:462,ha:918,o:"m 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z"},accidentalSharp:{x_min:-22,x_max:390,y_min:-384,y_max:383,ha:767,o:"m 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z"},accidentalDoubleSharp:{x_min:0,x_max:287,y_min:-159,y_max:159,ha:318,o:"m 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z"},accidentalDoubleFlat:{x_min:0,x_max:359,y_min:-220,y_max:446,ha:666,o:"m 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z"},accidentalParensLeft:{x_min:0,x_max:130,y_min:-270,y_max:268,ha:538,o:"m 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z"},accidentalParensRight:{x_min:0,x_max:139,y_min:-275,y_max:277,ha:552,o:"m 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:208,y_min:-240,y_max:440,ha:680,o:"m 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:422,y_min:-240,y_max:440,ha:680,o:"m 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:300,y_min:-338,y_max:351,ha:689,o:"m 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z"},accidentalThreeQuarterTonesSharpStein:{x_min:-23,x_max:388,y_min:-373,y_max:445,ha:818,o:"m 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z"},accidentalBuyukMucennebFlat:{x_min:2,x_max:287,y_min:-248,y_max:432,ha:680,o:"m 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z"},accidentalBuyukMucennebSharp:{x_min:-1,x_max:467,y_min:-460,y_max:350,ha:810,o:"m 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z"},accidentalBakiyeFlat:{x_min:2,x_max:287,y_min:-236,y_max:444,ha:680,o:"m 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z"},accidentalKomaSharp:{x_min:0,x_max:300,y_min:-338,y_max:351,ha:689,o:"m 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:359,y_min:-420,y_max:343,ha:763,o:"m 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z"},accidentalKoron:{x_min:0,x_max:303,y_min:-462,y_max:180,ha:642,o:"m 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z"},accidentalSori:{x_min:0,x_max:434,y_min:-295,y_max:325,ha:620,o:"m 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z"},articAccentAbove:{x_min:0,x_max:425,y_min:0,y_max:326,ha:326,o:"m 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z"},articAccentBelow:{x_min:0,x_max:425,y_min:-326,y_max:0,ha:326,o:"m 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z"},articTenutoAbove:{x_min:0,x_max:471,y_min:0,y_max:56,ha:56,o:"m 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z"},articTenutoBelow:{x_min:0,x_max:471,y_min:-59,y_max:-3,ha:56,o:"m 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z"},articStaccatoAbove:{x_min:1,x_max:112,y_min:0,y_max:156,ha:156,o:"m 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z"},articStaccatoBelow:{x_min:1,x_max:112,y_min:-156,y_max:0,ha:156,o:"m 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z"},articStaccatissimoAbove:{x_min:0,x_max:139,y_min:0,y_max:411,ha:411,o:"m 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z"},articStaccatissimoBelow:{x_min:0,x_max:139,y_min:-411,y_max:0,ha:411,o:"m 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z"},articMarcatoAbove:{x_min:0,x_max:396,y_min:0,y_max:328,ha:328,o:"m 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z"},articMarcatoBelow:{x_min:0,x_max:396,y_min:-328,y_max:0,ha:328,o:"m 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z"},fermataAbove:{x_min:0,x_max:472,y_min:2,y_max:454,ha:452,o:"m 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z"},fermataBelow:{x_min:0,x_max:519,y_min:-430,y_max:-1,ha:429,o:"m 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z"},fermataLongAbove:{x_min:0,x_max:591,y_min:-6,y_max:337,ha:343,o:"m 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z"},fermataLongBelow:{x_min:0,x_max:602,y_min:-335,y_max:7,ha:342,o:"m 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z"},fermataVeryLongAbove:{x_min:0,x_max:715,y_min:-14,y_max:437,ha:451,o:"m 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z"},fermataVeryLongBelow:{x_min:0,x_max:686,y_min:-427,y_max:30,ha:457,o:"m 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z"},fermataVeryShortAbove:{x_min:0,x_max:711,y_min:-31,y_max:496,ha:527,o:"m 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z"},fermataVeryShortBelow:{x_min:0,x_max:697,y_min:-475,y_max:13,ha:488,o:"m 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z"},fermataShortAbove:{x_min:0,x_max:545,y_min:-18,y_max:348,ha:366,o:"m 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z"},fermataShortBelow:{x_min:0,x_max:565,y_min:-335,y_max:10,ha:345,o:"m 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z"},breathMarkComma:{x_min:0,x_max:148,y_min:0,y_max:275,ha:275,o:"m 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z"},breathMarkUpbow:{x_min:0,x_max:254,y_min:0,y_max:595,ha:595,o:"m 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z"},caesura:{x_min:0,x_max:566,y_min:0,y_max:562,ha:563,o:"m 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z"},caesuraCurved:{x_min:0,x_max:386,y_min:-10,y_max:584,ha:594,o:"m 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z"},restMaxima:{x_min:0,x_max:366,y_min:-255,y_max:255,ha:510,o:"m 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z"},restDoubleWhole:{x_min:0,x_max:122,y_min:0,y_max:249,ha:249,o:"m 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z"},restWhole:{x_min:1,x_max:500,y_min:-120,y_max:14,ha:134,o:"m 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z"},restWholeLegerLine:{x_min:-197,x_max:685,y_min:-157,y_max:29,ha:186,o:"m 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z"},restHalf:{x_min:0,x_max:518,y_min:0,y_max:162,ha:162,o:"m 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z"},restHalfLegerLine:{x_min:-120,x_max:448,y_min:-20,y_max:143,ha:163,o:"m 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z"},restQuarter:{x_min:0,x_max:263,y_min:-415,y_max:415,ha:830,o:"m 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z"},rest8th:{x_min:0,x_max:289,y_min:-260,y_max:261,ha:521,o:"m 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z"},rest16th:{x_min:0,x_max:333,y_min:-328,y_max:244,ha:572,o:"m 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z"},rest32nd:{x_min:0,x_max:347,y_min:-498,y_max:483,ha:981,o:"m 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z"},rest64th:{x_min:0,x_max:428,y_min:-720,y_max:474,ha:1194,o:"m 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z"},rest128th:{x_min:1,x_max:491,y_min:-711,y_max:719,ha:1430,o:"m 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z"},dynamicPiano:{x_min:-49,x_max:327,y_min:-142,y_max:515,ha:657,o:"m -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z"},dynamicMezzo:{x_min:-18,x_max:559,y_min:-50,y_max:365,ha:415,o:"m 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z"},dynamicForte:{x_min:-144,x_max:311,y_min:-115,y_max:504,ha:619,o:"m -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z"},dynamicRinforzando:{x_min:-75,x_max:322,y_min:-90,y_max:325,ha:415,o:"m 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z"},dynamicSforzando:{x_min:0,x_max:296,y_min:0,y_max:379,ha:379,o:"m 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z"},dynamicZ:{x_min:-43,x_max:331,y_min:0,y_max:328,ha:328,o:"m -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z"},ornamentTrill:{x_min:1,x_max:551,y_min:-18,y_max:539,ha:557,o:"m 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z"},ornamentTurn:{x_min:0,x_max:574,y_min:0,y_max:312,ha:312,o:"m 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z"},ornamentTurnSlash:{x_min:0,x_max:574,y_min:-106,y_max:405,ha:511,o:"m 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z"},ornamentMordent:{x_min:0,x_max:700,y_min:0,y_max:497,ha:497,o:"m 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z"},ornamentShortTrill:{x_min:0,x_max:747,y_min:0,y_max:243,ha:243,o:"m 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z"},ornamentTremblement:{x_min:0,x_max:982,y_min:0,y_max:224,ha:224,o:"m 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:1066,y_min:-50,y_max:533,ha:583,o:"m 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:0,x_max:1088,y_min:-380,y_max:252,ha:632,o:"m 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:1185,y_min:-380,y_max:465,ha:845,o:"m 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:1003,y_min:-20,y_max:521,ha:541,o:"m 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:1246,y_min:-30,y_max:296,ha:326,o:"m 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:0,x_max:1226,y_min:-237,y_max:436,ha:673,o:"m 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:833,y_min:-309,y_max:319,ha:628,o:"m 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z"},brassScoop:{x_min:0,x_max:312,y_min:-390,y_max:28,ha:418,o:"m 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z"},brassDoitMedium:{x_min:0,x_max:476,y_min:-50,y_max:333,ha:383,o:"m 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z"},brassFallLipShort:{x_min:0,x_max:298,y_min:-344,y_max:65,ha:409,o:"m 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z"},brassLiftMedium:{x_min:0,x_max:807,y_min:0,y_max:838,ha:838,o:"m 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z"},brassFallRoughMedium:{x_min:0,x_max:791,y_min:0,y_max:819,ha:819,o:"m 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z"},brassBend:{x_min:0,x_max:381,y_min:0,y_max:367,ha:367,o:"m 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z"},brassMuteClosed:{x_min:0,x_max:274,y_min:0,y_max:260,ha:260,o:"m 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z"},brassMuteOpen:{x_min:1,x_max:313,y_min:0,y_max:309,ha:309,o:"m 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z"},brassFlip:{x_min:0,x_max:402,y_min:0,y_max:361,ha:361,o:"m 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z"},brassJazzTurn:{x_min:0,x_max:646,y_min:0,y_max:212,ha:212,o:"m 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z"},brassSmear:{x_min:0,x_max:334,y_min:0,y_max:151,ha:151,o:"m 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z"},stringsDownBow:{x_min:0,x_max:306,y_min:0,y_max:366,ha:366,o:"m 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z"},stringsUpBow:{x_min:0,x_max:219,y_min:0,y_max:489,ha:489,o:"m 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z"},stringsHarmonic:{x_min:0,x_max:191,y_min:0,y_max:202,ha:202,o:"m 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:201,y_min:0,y_max:325,ha:325,o:"m 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:211,y_min:0,y_max:307,ha:307,o:"m 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z"},pluckedLeftHandPizzicato:{x_min:0,x_max:271,y_min:0,y_max:284,ha:284,o:"m 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z"},keyboardPedalPed:{x_min:0,x_max:944,y_min:-13,y_max:550,ha:563,o:"m 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z"},keyboardPedalUp:{x_min:0,x_max:437,y_min:0,y_max:461,ha:461,o:"m 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z"},pictChokeCymbal:{x_min:1,x_max:147,y_min:0,y_max:242,ha:242,o:"m 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z"},wiggleArpeggiatoUp:{x_min:-22,x_max:300,y_min:0,y_max:176,ha:176,o:"m 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z"},arpeggiatoUp:{x_min:0,x_max:262,y_min:0,y_max:1459,ha:1459,o:"m 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z"},arpeggiatoDown:{x_min:0,x_max:218,y_min:0,y_max:1440,ha:1440,o:"m 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z"},repeat1Bar:{x_min:0,x_max:599,y_min:-250,y_max:175,ha:425,o:"m 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z"},repeat2Bars:{x_min:0,x_max:775,y_min:-247,y_max:363,ha:610,o:"m 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z"},repeat4Bars:{x_min:0,x_max:1374,y_min:-304,y_max:304,ha:608,o:"m 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z"},repeatBarSlash:{x_min:0,x_max:630,y_min:-225,y_max:265,ha:490,o:"m 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z"},csymDiminished:{x_min:0,x_max:506,y_min:0,y_max:500,ha:500,o:"m 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z"},csymHalfDiminished:{x_min:-32,x_max:496,y_min:-33,y_max:492,ha:525,o:"m -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z"},csymAugmented:{x_min:0,x_max:530,y_min:0,y_max:539,ha:539,o:"m 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z"},csymMajorSeventh:{x_min:0,x_max:593,y_min:0,y_max:569,ha:569,o:"m 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z"},csymMinor:{x_min:0,x_max:482,y_min:193,y_max:265,ha:72,o:"m 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z"},csymParensLeftTall:{x_min:0,x_max:185,y_min:0,y_max:1034,ha:1034,o:"m 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z"},csymParensRightTall:{x_min:-40,x_max:189,y_min:0,y_max:1058,ha:1058,o:"m 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z"},csymBracketLeftTall:{x_min:0,x_max:328,y_min:2,y_max:807,ha:805,o:"m 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z"},csymBracketRightTall:{x_min:1,x_max:306,y_min:0,y_max:829,ha:829,o:"m 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z"},csymParensLeftVeryTall:{x_min:0,x_max:116,y_min:0,y_max:934,ha:934,o:"m 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z"},csymParensRightVeryTall:{x_min:-20,x_max:111,y_min:0,y_max:1009,ha:1009,o:"m -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z"},csymDiagonalArrangementSlash:{x_min:0,x_max:990,y_min:-27,y_max:1028,ha:1054,o:"m 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:208,y_min:-231,y_max:449,ha:680,o:"m 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:335,y_min:-231,y_max:449,ha:680,o:"m 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z"},accidentalWilsonPlus:{x_min:0,x_max:298,y_min:-218,y_max:218,ha:436,o:"m 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z"},accidentalWilsonMinus:{x_min:0,x_max:284,y_min:-163,y_max:163,ha:326,o:"m 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z"}},fontFamily:"Petaluma",resolution:1e3,generatedOn:"2022-12-18T09:07:50.817Z"},metrics:{smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}}};return m=m.default})())); +//# sourceMappingURL=vexflow-font-petaluma.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-font-petaluma.js.map b/build/cjs/vexflow-font-petaluma.js.map new file mode 100644 index 0000000000..27827495d6 --- /dev/null +++ b/build/cjs/vexflow-font-petaluma.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vexflow-font-petaluma.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,KAEzBD,EAAkB,YAAIA,EAAkB,aAAK,CAAC,EAAGA,EAAkB,YAAY,SAAIC,IACpF,CATD,CASsB,oBAAXK,OAAyBA,OAA+B,oBAAfC,WAA6BA,WAAaC,MAAO,I,mBCRrG,IAAIC,EAAsB,CCA1BA,EAAwB,CAACP,EAASQ,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAEV,EAASS,IAC5EE,OAAOC,eAAeZ,EAASS,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDF,EAAwB,CAACQ,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,4BCA3E,MCQP,EAJoB,CAChBI,KCLwB,CACxBC,OAAQ,CACJC,WAAY,CACRC,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6WAEPkB,cAAe,CACXL,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,scAEPmB,YAAa,CACTN,MAAO,EACPC,MAAO,GACPC,MAAO,IACPC,MAAO,KACPC,GAAI,IACJjB,EAAG,gLAEPoB,eAAgB,CACZP,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,smBAEPqB,MAAO,CACHR,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,u0DAEPsB,KAAM,CACFT,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,mrDAEPuB,MAAO,CACHV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,87DAEPwB,MAAO,CACHX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,soFAEPyB,MAAO,CACHZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qqCAEP0B,yBAA0B,CACtBb,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ytBAEP,iBAAkB,CACda,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,u3EAEP2B,SAAU,CACNd,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ooBAEP4B,SAAU,CACNf,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2gBAEP6B,SAAU,CACNhB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wnCAEP8B,SAAU,CACNjB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4iCAEP+B,SAAU,CACNlB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kkCAEPgC,SAAU,CACNnB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,46BAEPiC,SAAU,CACNpB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w7BAEPkC,SAAU,CACNrB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8mBAEPmC,SAAU,CACNtB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w/BAEPoC,SAAU,CACNvB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,k2BAEPqC,cAAe,CACXxB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g3BAEPsC,iBAAkB,CACdzB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,wwDAEPuC,YAAa,CACT1B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mwBAEPwC,iBAAkB,CACd3B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uuBAEPyC,aAAc,CACV5B,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,kRAEP0C,mBAAoB,CAChB7B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,gfAEP2C,wBAAyB,CACrB9B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+bAEP4C,kBAAmB,CACf/B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,qhBAEP6C,uBAAwB,CACpBhC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oZAEP8C,oBAAqB,CACjBjC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,u3DAEP+C,cAAe,CACXlC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,weAEPgD,aAAc,CACVnC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wbAEPiD,cAAe,CACXpC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gMAEPkD,qBAAsB,CAClBrC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mjFAEPmD,eAAgB,CACZtC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wpCAEPoD,cAAe,CACXvC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kjCAEPqD,eAAgB,CACZxC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8rBAEPsD,2BAA4B,CACxBzC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uxDAEPuD,qBAAsB,CAClB1C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0jCAEPwD,oBAAqB,CACjB3C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gwBAEPyD,gBAAiB,CACb5C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2sBAEP0D,2BAA4B,CACxB7C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wlEAEP2D,qBAAsB,CAClB9C,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+hCAEP4D,oBAAqB,CACjB/C,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,whCAEP6D,qBAAsB,CAClBhD,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2tBAEP8D,0BAA2B,CACvBjD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qiCAEP+D,oBAAqB,CACjBlD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qwBAEPgE,oBAAqB,CACjBnD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yUAEPiE,gCAAiC,CAC7BpD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mhDAEPkE,0BAA2B,CACvBrD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qeAEPmE,yBAA0B,CACtBtD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,idAEPoE,0BAA2B,CACvBvD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6RAEPqE,8BAA+B,CAC3BxD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,q/CAEPsE,wBAAyB,CACrBzD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ieAEPuE,uBAAwB,CACpB1D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oeAEPwE,wBAAyB,CACrB3D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEPyE,4BAA6B,CACzB5D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wjEAEP0E,sBAAuB,CACnB7D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s3BAEP2E,qBAAsB,CAClB9D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s1BAEP4E,sBAAuB,CACnB/D,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ysBAEP6E,4BAA6B,CACzBhE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kvDAEP8E,sBAAuB,CACnBjE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,o4BAEP+E,qBAAsB,CAClBlE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yyBAEPgF,sBAAuB,CACnBnE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wpBAEPiF,2BAA4B,CACxBpE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0/CAEPkF,qBAAsB,CAClBrE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ggBAEPmF,oBAAqB,CACjBtE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,glBAEPoF,qBAAsB,CAClBvE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2TAEPqF,oBAAqB,CACjBxE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ivBAEPsF,yBAA0B,CACtBzE,OAAQ,GACRC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wYAEPuF,wBAAyB,CACrB1E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sWAEPwF,kBAAmB,CACf3E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8QAEPyF,0BAA2B,CACvB5E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2VAEP0F,2BAA4B,CACxB7E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qPAEP2F,+BAAgC,CAC5B9E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yRAEP4F,gBAAiB,CACb/E,MAAO,EACPC,MAAO,GACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,8PAEP6F,SAAU,CACNhF,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,qUAEP8F,UAAW,CACPjF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,2lBAEP+F,YAAa,CACTlF,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8hBAEPgG,WAAY,CACRnF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,0vBAEPiG,aAAc,CACVpF,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+pBAEPkG,WAAY,CACRrF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0gCAEPmG,aAAc,CACVtF,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,m7BAEPoG,WAAY,CACRvF,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,q+CAEPqG,aAAc,CACVxF,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,q5CAEPsG,YAAa,CACTzF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,yhDAEPuG,cAAe,CACX1F,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,4+CAEPwG,eAAgB,CACZ3F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ipBAEPyG,kBAAmB,CACf5F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+xBAEP0G,gBAAiB,CACb7F,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sgDAEP2G,sBAAuB,CACnB9F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,msBAEP4G,qBAAsB,CAClB/F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4yCAEP6G,qBAAsB,CAClBhG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oYAEP8G,sBAAuB,CACnBjG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yYAEP+G,+BAAgC,CAC5BlG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0qBAEPgH,0CAA2C,CACvCnG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,q2CAEPiH,gCAAiC,CAC7BpG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w3BAEPkH,sCAAuC,CACnCrG,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,87DAEPmH,4BAA6B,CACzBtG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,glCAEPoH,6BAA8B,CAC1BvG,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0hEAEPqH,qBAAsB,CAClBxG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,47BAEPsH,oBAAqB,CACjBzG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w3BAEPuH,6BAA8B,CAC1B1G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4wCAEPwH,gBAAiB,CACb3G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,idAEPyH,eAAgB,CACZ5G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kpCAEP0H,iBAAkB,CACd7G,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qdAEP2H,iBAAkB,CACd9G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,+fAEP4H,iBAAkB,CACd/G,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,GACPC,GAAI,GACJjB,EAAG,yTAEP6H,iBAAkB,CACdhH,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,OAAQ,EACRC,GAAI,GACJjB,EAAG,6WAEP8H,mBAAoB,CAChBjH,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wOAEP+H,mBAAoB,CAChBlH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,4QAEPgI,wBAAyB,CACrBnH,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,gQAEPiI,wBAAyB,CACrBpH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,qSAEPkI,kBAAmB,CACfrH,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mbAEPmI,kBAAmB,CACftH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,8dAEPoI,aAAc,CACVvH,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qtBAEPqI,aAAc,CACVxH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,OAAQ,EACRC,GAAI,IACJjB,EAAG,gtBAEPsI,iBAAkB,CACdzH,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gpBAEPuI,iBAAkB,CACd1H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,47BAEPwI,qBAAsB,CAClB3H,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ypCAEPyI,qBAAsB,CAClB5H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,42CAEP0I,sBAAuB,CACnB7H,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wgCAEP2I,sBAAuB,CACnB9H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,skCAEP4I,kBAAmB,CACf/H,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2lBAEP6I,kBAAmB,CACfhI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,gqBAEP8I,gBAAiB,CACbjI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2YAEP+I,gBAAiB,CACblI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qeAEPgJ,QAAS,CACLnI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wgBAEPiJ,cAAe,CACXpI,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0rBAEPkJ,WAAY,CACRrI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qjBAEPmJ,gBAAiB,CACbtI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wRAEPoJ,UAAW,CACPvI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,0TAEPqJ,mBAAoB,CAChBxI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,mpBAEPsJ,SAAU,CACNzI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4PAEPuJ,kBAAmB,CACf1I,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iqBAEPwJ,YAAa,CACT3I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,y+BAEPyJ,QAAS,CACL5I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qkBAEP0J,SAAU,CACN7I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,26BAEP2J,SAAU,CACN9I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yxCAEP4J,SAAU,CACN/I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,uiDAEP6J,UAAW,CACPhJ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,upDAEP8J,aAAc,CACVjJ,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ijCAEP+J,aAAc,CACVlJ,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,woCAEPgK,aAAc,CACVnJ,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,i+BAEPiK,mBAAoB,CAChBpJ,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,omBAEPkK,iBAAkB,CACdrJ,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+3BAEPmK,SAAU,CACNtJ,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8uBAEPoK,cAAe,CACXvJ,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,21CAEPqK,aAAc,CACVxJ,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,q3BAEPsK,kBAAmB,CACfzJ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mrCAEPuK,gBAAiB,CACb1J,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4mCAEPwK,mBAAoB,CAChB3J,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,84BAEPyK,oBAAqB,CACjB5J,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,spCAEP0K,2BAA4B,CACxB7J,MAAO,EACPC,MAAO,KACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,45CAEP2K,oCAAqC,CACjC9J,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,m5CAEP4K,8BAA+B,CAC3B/J,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,snEAEP6K,mCAAoC,CAChChK,MAAO,EACPC,MAAO,KACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8lDAEP8K,wCAAyC,CACrCjK,MAAO,EACPC,MAAO,KACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s4CAEP+K,4CAA6C,CACzClK,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,suDAEPgL,gCAAiC,CAC7BnK,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0yCAEPiL,WAAY,CACRpK,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,oPAEPkL,gBAAiB,CACbrK,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kRAEPmL,kBAAmB,CACftK,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,iUAEPoL,gBAAiB,CACbvK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,ooCAEPqL,qBAAsB,CAClBxK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,ovDAEPsL,UAAW,CACPzK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4nBAEPuL,gBAAiB,CACb1K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4gBAEPwL,cAAe,CACX3K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0bAEPyL,UAAW,CACP5K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+MAEP0L,cAAe,CACX7K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,szBAEP2L,WAAY,CACR9K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,kXAEP4L,eAAgB,CACZ/K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mmBAEP6L,aAAc,CACVhL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,uVAEP8L,gBAAiB,CACbjL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iTAEP+L,0BAA2B,CACvBlL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,meAEPgM,0BAA2B,CACvBnL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,skBAEPiM,yBAA0B,CACtBpL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+aAEPkM,iBAAkB,CACdrL,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,q6EAEPmM,gBAAiB,CACbtL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mjCAEPoM,gBAAiB,CACbvL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8TAEPqM,mBAAoB,CAChBxL,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2eAEPsM,aAAc,CACVzL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,28DAEPuM,eAAgB,CACZ1L,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,qmEAEPwM,WAAY,CACR3L,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w2BAEPyM,YAAa,CACT5L,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g7BAEP0M,YAAa,CACT7L,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,koEAEP2M,eAAgB,CACZ9L,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sXAEP4M,eAAgB,CACZ/L,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0bAEP6M,mBAAoB,CAChBhM,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g+BAEP8M,cAAe,CACXjM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,umBAEP+M,iBAAkB,CACdlM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6jBAEPgN,UAAW,CACPnM,MAAO,EACPC,MAAO,IACPC,MAAO,IACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,iQAEPiN,mBAAoB,CAChBpM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,qfAEPkN,oBAAqB,CACjBrM,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,8eAEPmN,oBAAqB,CACjBtM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,kqBAEPoN,qBAAsB,CAClBvM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mrBAEPqN,uBAAwB,CACpBxM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,ocAEPsN,wBAAyB,CACrBzM,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,iaAEPuN,6BAA8B,CAC1B1M,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,6YAEPwN,6BAA8B,CAC1B3M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4qBAEPyN,oCAAqC,CACjC5M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uyCAEP0N,qBAAsB,CAClB7M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wmBAEP2N,sBAAuB,CACnB9M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yQAGX4N,WAAY,WACZC,WAAY,IACZC,YAAa,4BD/lDbC,QDNyB,CACzBC,OAAO,EACPC,MAAO,CACHC,QAAS,GACTC,cAAe,GACfC,cAAe,EACfC,qBAAsB,IAE1BC,WAAY,CACRC,0BAA2B,EAC3BC,YAAa,EACbC,kBAAmB,GAEvBC,YAAa,CACTC,OAAQ,CACJC,mBAAoB,IACpBC,gBAAiB,IACjBC,eAAgB,IAChBC,iBAAkB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAC5CC,iBAAkB,CAAC,IAAK,KACxBC,QAAS,IACTC,cAAe,KAEnBvO,OAAQ,CACJiM,eAAgB,CACZuC,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbxC,mBAAoB,CAChBsC,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbvC,cAAe,CACXqC,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbpC,mBAAoB,CAChBkC,iBAAkB,GAClBC,aAAc,IACdC,QAAS,KAEbnC,oBAAqB,CACjBiC,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEblC,oBAAqB,CACjBgC,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbjC,qBAAsB,CAClB+B,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbhC,uBAAwB,CACpB8B,gBAAiB,GACjBC,aAAc,IACdC,QAAS,KAEb/B,wBAAyB,CACrB6B,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEb9B,6BAA8B,CAC1B4B,gBAAiB,IACjBC,aAAc,IACdC,QAAS,KAEbrC,UAAW,CACPmC,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbtC,iBAAkB,CACdoC,gBAAiB,IACjBE,QAAS,EACTD,aAAc,KAElB1I,gBAAiB,CACbyI,gBAAiB,GACjBC,aAAc,IACdC,SAAU,KAEd7I,eAAgB,CACZ2I,iBAAkB,GAClBC,aAAc,IACdC,SAAU,OAItBC,aAAc,CACVC,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,EACPC,OAAQ,KAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,IAEZC,KAAM,CACFF,KAAM,EACNC,OAAQ,MAKxBE,WAAY,CACRN,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,GACPC,OAAQ,IAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,GAEZC,KAAM,CACFF,KAAM,IACNC,OAAQ,OAKxBG,SAAU,CACN7E,WAAY,CACR8E,SAAU,GACVV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnB/E,gBAAiB,CACb6E,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnB9E,kBAAmB,CACf4E,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnB7E,gBAAiB,CACb2E,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,GAEnB5E,qBAAsB,CAClB0E,QAAS,GACTV,QAAS,GACTW,cAAe,EACfC,cAAe,GAEnB3E,UAAW,CACPyE,QAAS,EACTV,SAAU,EACVW,cAAe,GACfC,cAAe,GAEnB1E,gBAAiB,CACbwE,QAAS,EACTV,SAAU,EACVW,cAAe,GACfC,cAAe,GAEnBzE,cAAe,CACXuE,QAAS,EACTV,SAAU,EACVW,cAAe,GACfC,cAAe,GAEnBxE,UAAW,CACPsE,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnBvE,cAAe,CACXqE,QAAS,EACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnBtE,WAAY,CACRoE,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAGvBC,YAAa,CACTC,QAAS,CACLZ,MAAO,GAEXa,UAAW,CACPb,MAAO,IAGfc,aAAc,CAAC,EAEfC,OAAQ,CAEJC,WAAY,EAEZC,QAAS,GAEbC,aAAc,CACVzI,wBAAyB,CACrBkG,QAAS,GAEbjG,wBAAyB,CACrBiG,QAAS,IAGjBwC,QAAS,CACLP,QAAS,CACLlB,QAAS,EACT0B,eAAgB,EAChBC,gBAAiB,EACjBC,cAAe,GACfC,gBAAiB,GAErBC,MAAO,CACH9B,QAAS,IACT0B,eAAe,IACfC,gBAAiB,IACjBC,cAAe,EACfC,gBAAiB,IAGzBE,gBAAiB,CACbC,WAAY,CACRC,QAAS,GACTC,QAAS,GACTlC,QAAS,GAEb3N,KAAM,CACF6P,QAAS,IAEb9P,MAAO,CACH8P,QAAS,KAGjBC,SAAU,CACNC,WAAY,GAEhBC,KAAM,CACFC,yBAA0B,EAG1BH,SAAU,CACN7M,uBAAwB,CACpBiN,kBAAmB,EACnBC,oBAAqB,GAEzBjN,wBAAyB,CACrBgN,kBAAmB,EACnBC,oBAAqB,GAEzBnN,wBAAyB,CACrBkN,kBAAmB,EACnBC,oBAAqB,GAEzBrO,cAAe,CACXoO,mBAAoB,EACpBC,oBAAqB,GAEzBpO,eAAgB,CACZmO,mBAAoB,EACpBC,oBAAqB,GAEzBtO,eAAgB,CACZqO,mBAAoB,EACpBC,oBAAqB,GAEzBzO,aAAc,CACVwO,mBAAoB,KACpBC,oBAAqB,MAEzBxO,cAAe,CACXuO,mBAAoB,EACpBC,oBAAqB,GAEzB1N,oBAAqB,CACjB0N,qBAAsB,EACtBD,kBAAmB,KAI/BE,aAAc,CACVC,gBAAiB,EACjBC,YAAa,EACbpD,YAAa,EACbqD,aAAc,GAElBC,OAAQ,CACJC,eAAgB,GAChBC,WAAY,GACZC,WAAY,EACZC,kBAAmB,IAWvBvR,OAAQ,CACJW,KAAM,CACFqO,QAAS,EACTa,OAAQ,GAEZnP,MAAO,CACHsO,QAAS,GAEbwC,KAAM,CACFxC,QAAS,IACTyC,WAAY,CACRzC,QAAS,IAGjBL,aAAc,CAAC,EACfO,WAAY,CACRtO,MAAO,CACHiP,OAAQ,MAGhB6B,iBAAkB,CAAC,EACnBC,eAAgB,CAAC,EACjBC,gBAAiB,CACbC,mBAAoB,CAChB7C,QAAS,KAEb8C,iBAAkB,CACd9C,QAAS,MAGjB+C,cAAe,CACXF,mBAAoB,CAChB7C,QAAS,EACTa,OAAQ,GAEZiC,iBAAkB,CACd9C,QAAS,EACTa,OAAQ,IAGhBmC,SAAU,CACNvR,eAAgB,CACZoP,OAAQ,GAEZ1H,gBAAiB,CAAC,EAClBzH,MAAO,CACHsO,QAAS,EACTa,OAAQ,GAEZlP,KAAM,CACFqO,QAAS,EACTa,OAAQ,GAEZpG,cAAe,CACXuF,QAAS,EACTa,OAAQ,GAEZnG,aAAc,CAAC,EACfC,kBAAmB,CAAC,EACpBC,gBAAiB,CACboF,QAAS,GAEbnF,mBAAoB,CAChBmF,QAAS,IAGjByB,SAAU,CAAC,EACX1C,YAAa,CACTkE,MAAO,O","sources":["webpack://VexFlowFont.Petaluma/webpack/universalModuleDefinition","webpack://VexFlowFont.Petaluma/webpack/bootstrap","webpack://VexFlowFont.Petaluma/webpack/runtime/define property getters","webpack://VexFlowFont.Petaluma/webpack/runtime/hasOwnProperty shorthand","webpack://VexFlowFont.Petaluma/./src/fonts/common_metrics.ts","webpack://VexFlowFont.Petaluma/./entry/vexflow-font-petaluma.ts","webpack://VexFlowFont.Petaluma/./src/fonts/petaluma_glyphs.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VexFlowFont\"] = factory();\n\telse\n\t\troot[\"VexFlowFont\"] = root[\"VexFlowFont\"] || {}, root[\"VexFlowFont\"][\"Petaluma\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CommonMetrics } from '../src/fonts/common_metrics';\nimport { PetalumaFont } from '../src/fonts/petaluma_glyphs';\nexport const Font = {\n data: PetalumaFont,\n metrics: CommonMetrics,\n};\nexport default Font;\n","export const PetalumaFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 508,\n y_min: 0,\n y_max: 370,\n ha: 370,\n o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 496,\n y_min: -393,\n y_max: 0,\n ha: 393,\n o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 56,\n y_min: 877,\n y_max: 1122,\n ha: 245,\n o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 568,\n y_min: 0,\n y_max: 621,\n ha: 621,\n o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z',\n },\n segno: {\n x_min: 0,\n x_max: 798,\n y_min: -65,\n y_max: 806,\n ha: 871,\n o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z',\n },\n coda: {\n x_min: 0,\n x_max: 1380,\n y_min: -196,\n y_max: 1037,\n ha: 1233,\n o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z',\n },\n gClef: {\n x_min: 0,\n x_max: 664,\n y_min: -559,\n y_max: 1009,\n ha: 1568,\n o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z',\n },\n cClef: {\n x_min: 0,\n x_max: 731,\n y_min: -543,\n y_max: 543,\n ha: 1086,\n o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z',\n },\n fClef: {\n x_min: 0,\n x_max: 776,\n y_min: -496,\n y_max: 216,\n ha: 712,\n o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 379,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 438,\n y_min: -768,\n y_max: 767,\n ha: 1535,\n o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 513,\n y_min: -358,\n y_max: 359,\n ha: 717,\n o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 283,\n y_min: -364,\n y_max: 366,\n ha: 730,\n o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 660,\n y_min: -379,\n y_max: 382,\n ha: 761,\n o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 540,\n y_min: -392,\n y_max: 392,\n ha: 784,\n o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 633,\n y_min: -490,\n y_max: 491,\n ha: 981,\n o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 583,\n y_min: -389,\n y_max: 389,\n ha: 778,\n o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 565,\n y_min: -363,\n y_max: 363,\n ha: 726,\n o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 592,\n y_min: -345,\n y_max: 345,\n ha: 690,\n o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 504,\n y_min: -428,\n y_max: 428,\n ha: 856,\n o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 494,\n y_min: -421,\n y_max: 421,\n ha: 842,\n o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z',\n },\n timeSigCommon: {\n x_min: 20,\n x_max: 585,\n y_min: -298,\n y_max: 294,\n ha: 592,\n o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z',\n },\n timeSigCutCommon: {\n x_min: 20,\n x_max: 695,\n y_min: -687,\n y_max: 687,\n ha: 1374,\n o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 661,\n y_min: -358,\n y_max: 358,\n ha: 716,\n o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 418,\n y_min: -197,\n y_max: 199,\n ha: 396,\n o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 662,\n y_min: -54,\n y_max: 55,\n ha: 109,\n o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 274,\n y_min: -723,\n y_max: 725,\n ha: 1448,\n o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 154,\n y_min: -422,\n y_max: 422,\n ha: 844,\n o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z',\n },\n timeSigParensLeft: {\n x_min: 1,\n x_max: 400,\n y_min: -728,\n y_max: 728,\n ha: 1456,\n o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 173,\n y_min: -405,\n y_max: 404,\n ha: 809,\n o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 614,\n y_min: -223,\n y_max: 223,\n ha: 446,\n o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 380,\n y_min: -186,\n y_max: 165,\n ha: 351,\n o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -174,\n y_max: 175,\n ha: 349,\n o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 730,\n y_min: -266,\n y_max: 267,\n ha: 533,\n o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 506,\n y_min: -143,\n y_max: 144,\n ha: 287,\n o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 421,\n y_min: -146,\n y_max: 151,\n ha: 297,\n o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 289,\n y_min: -156,\n y_max: 157,\n ha: 313,\n o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -220,\n y_max: 219,\n ha: 439,\n o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 323,\n y_min: -190,\n y_max: 184,\n ha: 374,\n o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 309,\n y_min: -179,\n y_max: 179,\n ha: 358,\n o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 344,\n y_min: -179,\n y_max: 175,\n ha: 354,\n o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 672,\n y_min: -291,\n y_max: 291,\n ha: 582,\n o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z',\n },\n noteheadCircledWhole: {\n x_min: -50,\n x_max: 472,\n y_min: -231,\n y_max: 232,\n ha: 463,\n o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z',\n },\n noteheadCircledHalf: {\n x_min: -50,\n x_max: 393,\n y_min: -175,\n y_max: 175,\n ha: 350,\n o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z',\n },\n noteheadCircledBlack: {\n x_min: -70,\n x_max: 326,\n y_min: -168,\n y_max: 192,\n ha: 360,\n o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 474,\n y_min: -209,\n y_max: 211,\n ha: 420,\n o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 350,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 342,\n y_min: -130,\n y_max: 132,\n ha: 262,\n o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 697,\n y_min: -290,\n y_max: 290,\n ha: 580,\n o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z',\n },\n noteheadSlashedWhole1: {\n x_min: -76,\n x_max: 498,\n y_min: -168,\n y_max: 168,\n ha: 336,\n o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z',\n },\n noteheadSlashedHalf1: {\n x_min: -79,\n x_max: 471,\n y_min: -184,\n y_max: 184,\n ha: 368,\n o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z',\n },\n noteheadSlashedBlack1: {\n x_min: -110,\n x_max: 452,\n y_min: -190,\n y_max: 190,\n ha: 380,\n o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 697,\n y_min: -295,\n y_max: 295,\n ha: 590,\n o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z',\n },\n noteheadSlashedWhole2: {\n x_min: -83,\n x_max: 510,\n y_min: -201,\n y_max: 198,\n ha: 399,\n o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 454,\n y_min: -188,\n y_max: 188,\n ha: 376,\n o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z',\n },\n noteheadSlashedBlack2: {\n x_min: -84,\n x_max: 405,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 429,\n y_min: -221,\n y_max: 221,\n ha: 442,\n o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 271,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z',\n },\n noteheadParenthesis: {\n x_min: -70,\n x_max: 329,\n y_min: -196,\n y_max: 201,\n ha: 397,\n o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z',\n },\n noteheadParenthesisRight: {\n x_min: -30,\n x_max: 82,\n y_min: -199,\n y_max: 206,\n ha: 405,\n o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 106,\n y_min: -197,\n y_max: 197,\n ha: 394,\n o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 328,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 391,\n y_min: -142,\n y_max: 142,\n ha: 284,\n o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 398,\n y_min: -139,\n y_max: 140,\n ha: 279,\n o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 96,\n y_min: -57,\n y_max: 57,\n ha: 114,\n o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z',\n },\n tremolo1: {\n x_min: -158,\n x_max: 156,\n y_min: -88,\n y_max: 88,\n ha: 176,\n o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 261,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 327,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 327,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 268,\n y_min: -849,\n y_max: 149,\n ha: 999,\n o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z',\n },\n flag32ndDown: {\n x_min: -3,\n x_max: 268,\n y_min: -169,\n y_max: 829,\n ha: 999,\n o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z',\n },\n flag64thUp: {\n x_min: -4,\n x_max: 282,\n y_min: -824,\n y_max: 347,\n ha: 1171,\n o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z',\n },\n flag64thDown: {\n x_min: -5,\n x_max: 281,\n y_min: -375,\n y_max: 796,\n ha: 1171,\n o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 252,\n y_min: -804,\n y_max: 530,\n ha: 1334,\n o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z',\n },\n flag128thDown: {\n x_min: -1,\n x_max: 252,\n y_min: -580,\n y_max: 754,\n ha: 1334,\n o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z',\n },\n accidentalFlat: {\n x_min: 1,\n x_max: 209,\n y_min: -208,\n y_max: 472,\n ha: 680,\n o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 214,\n y_min: -456,\n y_max: 462,\n ha: 918,\n o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z',\n },\n accidentalSharp: {\n x_min: -22,\n x_max: 390,\n y_min: -384,\n y_max: 383,\n ha: 767,\n o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 287,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 359,\n y_min: -220,\n y_max: 446,\n ha: 666,\n o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 130,\n y_min: -270,\n y_max: 268,\n ha: 538,\n o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 139,\n y_min: -275,\n y_max: 277,\n ha: 552,\n o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 208,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: -23,\n x_max: 388,\n y_min: -373,\n y_max: 445,\n ha: 818,\n o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -248,\n y_max: 432,\n ha: 680,\n o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: -1,\n x_max: 467,\n y_min: -460,\n y_max: 350,\n ha: 810,\n o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z',\n },\n accidentalBakiyeFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -236,\n y_max: 444,\n ha: 680,\n o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 359,\n y_min: -420,\n y_max: 343,\n ha: 763,\n o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 303,\n y_min: -462,\n y_max: 180,\n ha: 642,\n o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 434,\n y_min: -295,\n y_max: 325,\n ha: 620,\n o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 425,\n y_min: 0,\n y_max: 326,\n ha: 326,\n o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 425,\n y_min: -326,\n y_max: 0,\n ha: 326,\n o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 471,\n y_min: 0,\n y_max: 56,\n ha: 56,\n o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 471,\n y_min: -59,\n y_max: -3,\n ha: 56,\n o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z',\n },\n articStaccatoAbove: {\n x_min: 1,\n x_max: 112,\n y_min: 0,\n y_max: 156,\n ha: 156,\n o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z',\n },\n articStaccatoBelow: {\n x_min: 1,\n x_max: 112,\n y_min: -156,\n y_max: 0,\n ha: 156,\n o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 139,\n y_min: 0,\n y_max: 411,\n ha: 411,\n o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 139,\n y_min: -411,\n y_max: 0,\n ha: 411,\n o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z',\n },\n articMarcatoAbove: {\n x_min: 0,\n x_max: 396,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 396,\n y_min: -328,\n y_max: 0,\n ha: 328,\n o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 472,\n y_min: 2,\n y_max: 454,\n ha: 452,\n o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 519,\n y_min: -430,\n y_max: -1,\n ha: 429,\n o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 591,\n y_min: -6,\n y_max: 337,\n ha: 343,\n o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 602,\n y_min: -335,\n y_max: 7,\n ha: 342,\n o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: -14,\n y_max: 437,\n ha: 451,\n o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 686,\n y_min: -427,\n y_max: 30,\n ha: 457,\n o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 711,\n y_min: -31,\n y_max: 496,\n ha: 527,\n o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 697,\n y_min: -475,\n y_max: 13,\n ha: 488,\n o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 545,\n y_min: -18,\n y_max: 348,\n ha: 366,\n o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 565,\n y_min: -335,\n y_max: 10,\n ha: 345,\n o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 148,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z',\n },\n breathMarkUpbow: {\n x_min: 0,\n x_max: 254,\n y_min: 0,\n y_max: 595,\n ha: 595,\n o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z',\n },\n caesura: {\n x_min: 0,\n x_max: 566,\n y_min: 0,\n y_max: 562,\n ha: 563,\n o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 386,\n y_min: -10,\n y_max: 584,\n ha: 594,\n o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 366,\n y_min: -255,\n y_max: 255,\n ha: 510,\n o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 249,\n ha: 249,\n o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z',\n },\n restWhole: {\n x_min: 1,\n x_max: 500,\n y_min: -120,\n y_max: 14,\n ha: 134,\n o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z',\n },\n restWholeLegerLine: {\n x_min: -197,\n x_max: 685,\n y_min: -157,\n y_max: 29,\n ha: 186,\n o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 518,\n y_min: 0,\n y_max: 162,\n ha: 162,\n o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z',\n },\n restHalfLegerLine: {\n x_min: -120,\n x_max: 448,\n y_min: -20,\n y_max: 143,\n ha: 163,\n o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 263,\n y_min: -415,\n y_max: 415,\n ha: 830,\n o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 289,\n y_min: -260,\n y_max: 261,\n ha: 521,\n o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 333,\n y_min: -328,\n y_max: 244,\n ha: 572,\n o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 347,\n y_min: -498,\n y_max: 483,\n ha: 981,\n o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 428,\n y_min: -720,\n y_max: 474,\n ha: 1194,\n o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z',\n },\n rest128th: {\n x_min: 1,\n x_max: 491,\n y_min: -711,\n y_max: 719,\n ha: 1430,\n o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z',\n },\n dynamicPiano: {\n x_min: -49,\n x_max: 327,\n y_min: -142,\n y_max: 515,\n ha: 657,\n o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z',\n },\n dynamicMezzo: {\n x_min: -18,\n x_max: 559,\n y_min: -50,\n y_max: 365,\n ha: 415,\n o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z',\n },\n dynamicForte: {\n x_min: -144,\n x_max: 311,\n y_min: -115,\n y_max: 504,\n ha: 619,\n o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z',\n },\n dynamicRinforzando: {\n x_min: -75,\n x_max: 322,\n y_min: -90,\n y_max: 325,\n ha: 415,\n o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 296,\n y_min: 0,\n y_max: 379,\n ha: 379,\n o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z',\n },\n dynamicZ: {\n x_min: -43,\n x_max: 331,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z',\n },\n ornamentTrill: {\n x_min: 1,\n x_max: 551,\n y_min: -18,\n y_max: 539,\n ha: 557,\n o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 574,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 574,\n y_min: -106,\n y_max: 405,\n ha: 511,\n o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 700,\n y_min: 0,\n y_max: 497,\n ha: 497,\n o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 747,\n y_min: 0,\n y_max: 243,\n ha: 243,\n o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 982,\n y_min: 0,\n y_max: 224,\n ha: 224,\n o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1066,\n y_min: -50,\n y_max: 533,\n ha: 583,\n o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 1088,\n y_min: -380,\n y_max: 252,\n ha: 632,\n o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1185,\n y_min: -380,\n y_max: 465,\n ha: 845,\n o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 1003,\n y_min: -20,\n y_max: 521,\n ha: 541,\n o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1246,\n y_min: -30,\n y_max: 296,\n ha: 326,\n o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1226,\n y_min: -237,\n y_max: 436,\n ha: 673,\n o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 833,\n y_min: -309,\n y_max: 319,\n ha: 628,\n o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z',\n },\n brassScoop: {\n x_min: 0,\n x_max: 312,\n y_min: -390,\n y_max: 28,\n ha: 418,\n o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 476,\n y_min: -50,\n y_max: 333,\n ha: 383,\n o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z',\n },\n brassFallLipShort: {\n x_min: 0,\n x_max: 298,\n y_min: -344,\n y_max: 65,\n ha: 409,\n o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 807,\n y_min: 0,\n y_max: 838,\n ha: 838,\n o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 791,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 381,\n y_min: 0,\n y_max: 367,\n ha: 367,\n o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 274,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z',\n },\n brassMuteOpen: {\n x_min: 1,\n x_max: 313,\n y_min: 0,\n y_max: 309,\n ha: 309,\n o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 402,\n y_min: 0,\n y_max: 361,\n ha: 361,\n o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 646,\n y_min: 0,\n y_max: 212,\n ha: 212,\n o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z',\n },\n brassSmear: {\n x_min: 0,\n x_max: 334,\n y_min: 0,\n y_max: 151,\n ha: 151,\n o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 366,\n ha: 366,\n o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 219,\n y_min: 0,\n y_max: 489,\n ha: 489,\n o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 202,\n ha: 202,\n o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 201,\n y_min: 0,\n y_max: 325,\n ha: 325,\n o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 211,\n y_min: 0,\n y_max: 307,\n ha: 307,\n o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 271,\n y_min: 0,\n y_max: 284,\n ha: 284,\n o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 944,\n y_min: -13,\n y_max: 550,\n ha: 563,\n o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 437,\n y_min: 0,\n y_max: 461,\n ha: 461,\n o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 147,\n y_min: 0,\n y_max: 242,\n ha: 242,\n o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 300,\n y_min: 0,\n y_max: 176,\n ha: 176,\n o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z',\n },\n arpeggiatoUp: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 1459,\n ha: 1459,\n o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z',\n },\n arpeggiatoDown: {\n x_min: 0,\n x_max: 218,\n y_min: 0,\n y_max: 1440,\n ha: 1440,\n o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 599,\n y_min: -250,\n y_max: 175,\n ha: 425,\n o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 775,\n y_min: -247,\n y_max: 363,\n ha: 610,\n o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1374,\n y_min: -304,\n y_max: 304,\n ha: 608,\n o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 630,\n y_min: -225,\n y_max: 265,\n ha: 490,\n o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 506,\n y_min: 0,\n y_max: 500,\n ha: 500,\n o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z',\n },\n csymHalfDiminished: {\n x_min: -32,\n x_max: 496,\n y_min: -33,\n y_max: 492,\n ha: 525,\n o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 530,\n y_min: 0,\n y_max: 539,\n ha: 539,\n o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 593,\n y_min: 0,\n y_max: 569,\n ha: 569,\n o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 482,\n y_min: 193,\n y_max: 265,\n ha: 72,\n o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z',\n },\n csymParensLeftTall: {\n x_min: 0,\n x_max: 185,\n y_min: 0,\n y_max: 1034,\n ha: 1034,\n o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z',\n },\n csymParensRightTall: {\n x_min: -40,\n x_max: 189,\n y_min: 0,\n y_max: 1058,\n ha: 1058,\n o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 328,\n y_min: 2,\n y_max: 807,\n ha: 805,\n o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 829,\n ha: 829,\n o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 116,\n y_min: 0,\n y_max: 934,\n ha: 934,\n o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z',\n },\n csymParensRightVeryTall: {\n x_min: -20,\n x_max: 111,\n y_min: 0,\n y_max: 1009,\n ha: 1009,\n o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 990,\n y_min: -27,\n y_max: 1028,\n ha: 1054,\n o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 208,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 335,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 298,\n y_min: -218,\n y_max: 218,\n ha: 436,\n o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 284,\n y_min: -163,\n y_max: 163,\n ha: 326,\n o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z',\n },\n },\n fontFamily: 'Petaluma',\n resolution: 1000,\n generatedOn: '2022-12-18T09:07:50.817Z',\n};\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","data","glyphs","bracketTop","x_min","x_max","y_min","y_max","ha","bracketBottom","barlineTick","breathMarkTick","segno","coda","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXDoubleWhole","noteheadXWhole","noteheadXHalf","noteheadXBlack","noteheadCircleXDoubleWhole","noteheadCircleXWhole","noteheadCircleXHalf","noteheadCircleX","noteheadCircledDoubleWhole","noteheadCircledWhole","noteheadCircledHalf","noteheadCircledBlack","noteheadDoubleWholeSquare","noteheadSquareWhite","noteheadSquareBlack","noteheadTriangleDownDoubleWhole","noteheadTriangleDownWhole","noteheadTriangleDownHalf","noteheadTriangleDownBlack","noteheadTriangleUpDoubleWhole","noteheadTriangleUpWhole","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesis","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBuyukMucennebSharp","accidentalBakiyeFlat","accidentalKomaSharp","accidentalKucukMucennebSharp","accidentalKoron","accidentalSori","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","wiggleArpeggiatoUp","arpeggiatoUp","arpeggiatoDown","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","csymDiminished","csymHalfDiminished","csymAugmented","csymMajorSeventh","csymMinor","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","fontFamily","resolution","generatedOn","metrics","smufl","stave","padding","endPaddingMax","endPaddingMin","unalignedNotePadding","accidental","noteheadAccidentalPadding","leftPadding","accidentalSpacing","chordSymbol","global","superscriptOffset","subscriptOffset","kerningOffset","lowerKerningText","upperKerningText","spacing","superSubRatio","leftSideBearing","advanceWidth","yOffset","clef_default","width","annotations","treble","line","shiftX","bass","clef_small","ornament","xOffset","stemUpYOffset","reportedWidth","parenthesis","default","gracenote","pedalMarking","digits","shiftLine","shiftY","articulation","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","noteHead","minPadding","stem","heightAdjustmentForFlag","offsetYBaseStemUp","offsetYBaseStemDown","stringNumber","verticalPadding","stemPadding","rightPadding","tuplet","noteHeadOffset","stemOffset","bottomLine","topModifierOffset","flag","staveTempo","clefNote_default","clefNote_small","stroke_straight","arrowheadBlackDown","arrowheadBlackUp","stroke_wiggly","textNote","scale"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-gonville.js b/build/cjs/vexflow-gonville.js new file mode 100644 index 0000000000..577d05f943 --- /dev/null +++ b/build/cjs/vexflow-gonville.js @@ -0,0 +1,7 @@ +/*! + * VexFlow 4.2.6 2024-08-26T20:16:17.134Z 103aad2b14837418c5e96c9e078edd036fcddf60 + * Copyright (c) 2010 Mohit Muthanna Cheppudira + * https://www.vexflow.com https://github.com/0xfe/vexflow + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Vex=e():t.Vex=e()}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var s in i)t.o(i,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:i[s]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};t.d(e,{default:()=>i});var i={};function s(t,e,i=!0){if("object"!=typeof t||null===t)return!1;let s=t.constructor;if(i){for(;null!==t;){if(s=t.constructor,"CATEGORY"in s&&s.CATEGORY===e)return!0;t=Object.getPrototypeOf(t)}return!1}return"CATEGORY"in s&&s.CATEGORY===e}t.r(i),t.d(i,{Accidental:()=>st,Annotation:()=>bt,AnnotationHorizontalJustify:()=>ct,AnnotationVerticalJustify:()=>dt,Articulation:()=>ft,BEAM_BOTH:()=>Re,BEAM_LEFT:()=>Fe,BEAM_RIGHT:()=>Oe,BarNote:()=>Dt,Barline:()=>kt,BarlineType:()=>Et,Beam:()=>Le,Bend:()=>Mt,BoundingBox:()=>C,BoundingBoxComputation:()=>P,Builder:()=>Ke,CanvasContext:()=>Qt,Category:()=>_,ChordSymbol:()=>Ot,ChordSymbolHorizontalJustify:()=>Bt,ChordSymbolVerticalJustify:()=>Ct,Clef:()=>me,ClefNote:()=>We,Crescendo:()=>Ie,Curve:()=>Ue,CurvePosition:()=>Ge,Dot:()=>Rt,EasyScore:()=>Qe,EasyScoreGrammar:()=>Xe,Element:()=>L,Factory:()=>vi,Flow:()=>ki,Font:()=>F,FontStyle:()=>A,FontWeight:()=>N,Formatter:()=>Ae,Fraction:()=>E,FretHandFinger:()=>Lt,GhostNote:()=>ti,Glyph:()=>Z,GlyphNote:()=>ei,GraceNote:()=>ii,GraceNoteGroup:()=>Xt,GraceTabNote:()=>wi,KeyManager:()=>Ei,KeySigNote:()=>si,KeySignature:()=>ge,Modifier:()=>tt,ModifierContext:()=>be,ModifierPosition:()=>J,MultiMeasureRest:()=>ai,Music:()=>et,Note:()=>vt,NoteHead:()=>Wt,NoteSubGroup:()=>Vt,Ornament:()=>Kt,OutlineCode:()=>$,Parenthesis:()=>$t,Parser:()=>ze,PedalMarking:()=>ri,Piece:()=>Ve,Registry:()=>R,RenderContext:()=>yt,Renderer:()=>re,RendererBackends:()=>se,RendererLineEndType:()=>ne,RepeatNote:()=>li,Repetition:()=>_e,RuntimeError:()=>x,SVGContext:()=>ie,Stave:()=>Ee,StaveConnector:()=>Ce,StaveHairpin:()=>Bi,StaveLine:()=>di,StaveModifier:()=>At,StaveModifierPosition:()=>wt,StaveNote:()=>Ut,StaveSection:()=>xe,StaveTempo:()=>ue,StaveText:()=>fe,StaveTie:()=>Yt,Stem:()=>nt,StemmableNote:()=>It,StringNumber:()=>he,Stroke:()=>le,SymbolModifiers:()=>Nt,SymbolTypes:()=>Pt,System:()=>bi,TabNote:()=>mi,TabSlide:()=>Ci,TabStave:()=>gi,TabTie:()=>Ht,TextBracket:()=>ui,TextBracketPosition:()=>xi,TextDynamics:()=>fi,TextFormatter:()=>lt,TextJustification:()=>ae,TextNote:()=>pe,TickContext:()=>Pe,Tickable:()=>Tt,TimeSigNote:()=>yi,TimeSignature:()=>Te,TimeSignatureGlyph:()=>Se,Tremolo:()=>Pi,Tuning:()=>Ni,Tuplet:()=>De,TupletLocation:()=>ke,Vex:()=>Gi,Vibrato:()=>ce,VibratoBracket:()=>Si,Voice:()=>jt,VoiceMode:()=>zt,Volta:()=>ye,VoltaType:()=>oe,defined:()=>p,drawDot:()=>St,globalObject:()=>u,isAccidental:()=>n,isAnnotation:()=>a,isBarline:()=>o,isCategory:()=>s,isDot:()=>r,isGraceNote:()=>h,isGraceNoteGroup:()=>l,isHTMLCanvas:()=>Jt,isHTMLDiv:()=>qt,isNote:()=>c,isRenderContext:()=>d,isStaveNote:()=>b,isStemmableNote:()=>m,isTabNote:()=>g,log:()=>f,midLine:()=>S,normalizeAngle:()=>v,prefix:()=>T,sumArray:()=>w,warn:()=>y});const n=t=>s(t,_.Accidental),a=t=>s(t,_.Annotation),o=t=>s(t,_.Barline),r=t=>s(t,_.Dot),h=t=>s(t,_.GraceNote),l=t=>s(t,_.GraceNoteGroup),c=t=>s(t,_.Note),d=t=>s(t,_.RenderContext),b=t=>s(t,_.StaveNote),m=t=>s(t,_.StemmableNote),g=t=>s(t,_.TabNote);var _;!function(t){t.Accidental="Accidental",t.Annotation="Annotation",t.Articulation="Articulation",t.Barline="Barline",t.BarNote="BarNote",t.Beam="Beam",t.Bend="Bend",t.ChordSymbol="ChordSymbol",t.Clef="Clef",t.ClefNote="ClefNote",t.Crescendo="Crescendo",t.Curve="Curve",t.Dot="Dot",t.Element="Element",t.Fraction="Fraction",t.FretHandFinger="FretHandFinger",t.GhostNote="GhostNote",t.Glyph="Glyph",t.GlyphNote="GlyphNote",t.GraceNote="GraceNote",t.GraceNoteGroup="GraceNoteGroup",t.GraceTabNote="GraceTabNote",t.KeySignature="KeySignature",t.KeySigNote="KeySigNote",t.Modifier="Modifier",t.MultiMeasureRest="MultiMeasureRest",t.Note="Note",t.NoteHead="NoteHead",t.NoteSubGroup="NoteSubGroup",t.Ornament="Ornament",t.Parenthesis="Parenthesis",t.PedalMarking="PedalMarking",t.RenderContext="RenderContext",t.RepeatNote="RepeatNote",t.Repetition="Repetition",t.Stave="Stave",t.StaveConnector="StaveConnector",t.StaveHairpin="StaveHairpin",t.StaveLine="StaveLine",t.StaveModifier="StaveModifier",t.StaveNote="StaveNote",t.StaveSection="StaveSection",t.StaveTempo="StaveTempo",t.StaveText="StaveText",t.StaveTie="StaveTie",t.Stem="Stem",t.StemmableNote="StemmableNote",t.StringNumber="StringNumber",t.Stroke="Stroke",t.System="System",t.TabNote="TabNote",t.TabSlide="TabSlide",t.TabStave="TabStave",t.TabTie="TabTie",t.TextBracket="TextBracket",t.TextDynamics="TextDynamics",t.TextNote="TextNote",t.Tickable="Tickable",t.TimeSignature="TimeSignature",t.TimeSigNote="TimeSigNote",t.Tremolo="Tremolo",t.Tuplet="Tuplet",t.Vibrato="Vibrato",t.VibratoBracket="VibratoBracket",t.Voice="Voice",t.Volta="Volta"}(_||(_={}));class x extends Error{constructor(t,e=""){super("[RuntimeError] "+t+": "+e),this.code=t}}function u(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:Function("return this")()}function p(t,e="undefined",i=""){if(void 0===t)throw new x(e,i);return t}function f(t,...e){if(!e)return;const i=Array.prototype.slice.call(e).join(" ");u().console.log(t+": "+i)}function y(...t){const e=t.join(" "),i=new Error;u().console.log("Warning: ",e,i.stack)}function S(t,e){let i=e+(t-e)/2;var s,n;return i%2>0&&(i=((s=10*i)%(n=5)>=n/2?parseInt(""+s/n,10)*n+n:parseInt(""+s/n,10)*n)/10),i}function T(t){return`vf-${t}`}function v(t){return(t%=2*Math.PI)<0&&(t+=2*Math.PI),t}function w(t){return t.reduce(((t,e)=>t+e),0)}class E{static get CATEGORY(){return _.Fraction}static GCD(t,e){if("number"!=typeof t||Number.isNaN(t)||"number"!=typeof e||Number.isNaN(e))throw new x("BadArgument",`Invalid numbers: ${t}, ${e}`);let i;for(;0!==e;)i=e,e=t%e,t=i;return t}static LCM(t,e){return t*e/E.GCD(t,e)}static LCMM(t){return 0===t.length?0:1===t.length?t[0]:2===t.length?E.LCM(t[0],t[1]):E.LCM(t.shift(),E.LCMM(t))}constructor(t,e){this.numerator=1,this.denominator=1,this.set(t,e)}set(t=1,e=1){return this.numerator=t,this.denominator=e,this}value(){return this.numerator/this.denominator}simplify(){let t=this.numerator,e=this.denominator;const i=E.GCD(t,e);return t/=i,e/=i,e<0&&(e=-e,t=-t),this.set(t,e)}add(t=0,e=1){const[i,s]=B(t,e),n=E.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a+i*o;return this.set(r,n)}subtract(t=0,e=1){const[i,s]=B(t,e),n=E.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a-i*o;return this.set(r,n)}multiply(t=1,e=1){const[i,s]=B(t,e);return this.set(this.numerator*i,this.denominator*s)}divide(t=1,e=1){const[i,s]=B(t,e);return this.set(this.numerator*s,this.denominator*i)}equals(t){const e=E.__staticFractionA.copy(t).simplify(),i=E.__staticFractionB.copy(this).simplify();return e.numerator===i.numerator&&e.denominator===i.denominator}greaterThan(t){const e=E.__staticFractionB.copy(this);return e.subtract(t),e.numerator>0}greaterThanEquals(t){const e=E.__staticFractionB.copy(this);return e.subtract(t),e.numerator>=0}lessThan(t){return!this.greaterThanEquals(t)}lessThanEquals(t){return!this.greaterThan(t)}clone(){return new E(this.numerator,this.denominator)}copy(t){return"number"==typeof t?this.set(t,1):this.set(t.numerator,t.denominator)}quotient(){return Math.floor(this.numerator/this.denominator)}remainder(){return this.numerator%this.denominator}makeAbs(){return this.denominator=Math.abs(this.denominator),this.numerator=Math.abs(this.numerator),this}toString(){return`${this.numerator}/${this.denominator}`}toSimplifiedString(){return E.__staticFractionTmp.copy(this).simplify().toString()}toMixedString(){let t="";const e=this.quotient(),i=E.__staticFractionTmp.copy(this);return e<0&&i.makeAbs(),0!==e?(t+=e,0!==i.numerator&&(t+=` ${i.toSimplifiedString()}`)):t=0===i.numerator?"0":i.toSimplifiedString(),t}parse(t){const e=t.split("/"),i=parseInt(e[0],10),s=e[1]?parseInt(e[1],10):1;return this.set(i,s)}}function B(t,e=1){return"number"==typeof t?[t,e]:[t.numerator,t.denominator]}E.__staticFractionA=new E,E.__staticFractionB=new E,E.__staticFractionTmp=new E;class C{static copy(t){return new C(t.x,t.y,t.w,t.h)}constructor(t,e,i,s){this.x=t,this.y=e,this.w=i,this.h=s}getX(){return this.x}getY(){return this.y}getW(){return this.w}getH(){return this.h}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setW(t){return this.w=t,this}setH(t){return this.h=t,this}move(t,e){return this.x+=t,this.y+=e,this}clone(){return C.copy(this)}mergeWith(t){const e=t,i=this.xthis.x2)&&(this.x2=t),(isNaN(this.y1)||ethis.y2)&&(this.y2=e)}addX(t){this.addPoint(t,this.y1)}addY(t){this.addPoint(this.x1,t)}addQuadraticCurve(t,e,i,s,n,a){this.addPoint(t,e),this.addPoint(n,a);const o=i-t;let r=o-(n-i);if(0!=r){const e=o/r;if(e>0&&e<1){const s=1-e;this.addX(s*s*t+2*s*e*i+e*e*n)}}const h=s-e;if(r=h-(a-s),0!=r){const t=h/r;if(t>0&&t<1){const i=1-t;this.addY(i*i*e+2*i*t*s+t*t*a)}}}addBezierCurve(t,e,i,s,n,a,o,r){const h=[t,e],l=[i,s],c=[n,a],d=[o,r];let b;this.addPoint(h[0],h[1]),this.addPoint(d[0],d[1]);const m=(t,e)=>Math.pow(1-t,3)*h[e]+3*Math.pow(1-t,2)*t*l[e]+3*(1-t)*Math.pow(t,2)*c[e]+Math.pow(t,3)*d[e];for(b=0;b<=1;b++){const t=6*h[b]-12*l[b]+6*c[b],e=-3*h[b]+9*l[b]-9*c[b]+3*d[b],i=3*l[b]-3*h[b];if(0===e){if(0===t)continue;const e=-i/t;0=600;{const e=parseInt(t,10);return isNaN(e)?"bold"===t.toLowerCase():e>=600}}return!1}static isItalic(t){return!!t&&t.toLowerCase()===A.ITALIC}static loadWebFont(t,e,i=!0){return k(this,void 0,void 0,(function*(){const s=new FontFace(t,(i?`url(${e}2) format('woff2'), `:"")+`url(${e}) format('woff')`);return yield s.load(),document.fonts.add(s),s}))}static loadWebFonts(){return k(this,void 0,void 0,(function*(){const t=F.WEB_FONT_HOST,e=F.WEB_FONT_FILES;for(const i in e){const s=e[i];F.loadWebFont(i,t+s)}}))}static load(t,e,i){let s=M[t];return s||(s=new F(t),M[t]=s),e&&s.setData(e),i&&s.setMetrics(i),s}constructor(t){this.name=t}getName(){return this.name}getData(){return p(this.data,"FontError","Missing font data")}getMetrics(){return p(this.metrics,"FontError","Missing metrics")}setData(t){this.data=t}setMetrics(t){this.metrics=t}hasData(){return void 0!==this.data}getResolution(){return this.getData().resolution}getGlyphs(){return this.getData().glyphs}lookupMetric(t,e){const i=t.split(".");let s=this.getMetrics();for(let t=0;tt[e]))}}return[]}getElementsByType(t){return this.getElementsByAttribute("type",t)}getElementsByClass(t){return this.getElementsByAttribute("class",t)}onUpdate(t){return["id","type","class"].includes(t.name)&&this.updateIndex(t),this}}class L{static get CATEGORY(){return _.Element}static newID(){return"auto"+L.ID++}constructor(){var t;this.children=[],this.attrs={id:L.newID(),type:this.getCategory(),class:""},this.rendered=!1,null===(t=R.getDefaultRegistry())||void 0===t||t.register(this)}addChildElement(t){return this.children.push(t),this}getCategory(){return this.constructor.CATEGORY}setStyle(t){return this.style=t,this}setGroupStyle(t){return this.style=t,this.children.forEach((e=>e.setGroupStyle(t))),this}getStyle(){return this.style}applyStyle(t=this.context,e=this.getStyle()){return e&&t?(t.save(),e.shadowColor&&t.setShadowColor(e.shadowColor),e.shadowBlur&&t.setShadowBlur(e.shadowBlur),e.fillStyle&&t.setFillStyle(e.fillStyle),e.strokeStyle&&t.setStrokeStyle(e.strokeStyle),e.lineWidth&&t.setLineWidth(e.lineWidth),this):this}restoreStyle(t=this.context,e=this.getStyle()){return e&&t?(t.restore(),this):this}drawWithStyle(){this.checkContext(),this.applyStyle(),this.draw(),this.restoreStyle()}hasClass(t){var e;return!!this.attrs.class&&-1!=(null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ").indexOf(t))}addClass(t){var e;return this.hasClass(t)||(this.attrs.class?this.attrs.class=`${this.attrs.class} ${t}`:this.attrs.class=`${t}`,null===(e=this.registry)||void 0===e||e.onUpdate({id:this.attrs.id,name:"class",value:t,oldValue:void 0})),this}removeClass(t){var e,i;if(!this.hasClass(t))return this;const s=null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ");return s&&(s.splice(s.indexOf(t)),this.attrs.class=s.join(" ")),null===(i=this.registry)||void 0===i||i.onUpdate({id:this.attrs.id,name:"class",value:void 0,oldValue:t}),this}onRegister(t){return this.registry=t,this}isRendered(){return this.rendered}setRendered(t=!0){return this.rendered=t,this}getAttributes(){return this.attrs}getAttribute(t){return this.attrs[t]}getSVGElement(t=""){const e=T(this.attrs.id+t),i=document.getElementById(e);if(i)return i}setAttribute(t,e){var i;const s=this.attrs.id,n=this.attrs[t];return this.attrs[t]=e,null===(i=this.registry)||void 0===i||i.onUpdate({id:s,name:t,value:e,oldValue:n}),this}getBoundingBox(){return this.boundingBox}getContext(){return this.context}setContext(t){return this.context=t,this}checkContext(){return p(this.context,"NoContext","No rendering context attached to instance.")}set font(t){this.setFont(t)}get font(){return F.toCSSString(this.textFont)}setFont(t,e,i,s){const n=this.constructor.TEXT_FONT,a="object"==typeof t,o="string"==typeof t,r=void 0===t,h=void 0===e&&void 0===i&&void 0===s;return this.textFont=a?Object.assign(Object.assign({},n),t):o&&h?F.fromCSSString(t):r&&h?Object.assign({},n):F.validate(null!=t?t:n.family,null!=e?e:n.size,null!=i?i:n.weight,null!=s?s:n.style),this}getFont(){return this.textFont||this.resetFont(),F.toCSSString(this.textFont)}resetFont(){this.setFont()}get fontInfo(){return this.textFont||this.resetFont(),Object.assign({},this.textFont)}set fontInfo(t){this.setFont(t)}setFontSize(t){const e=this.fontInfo;return this.setFont(e.family,t,e.weight,e.style),this}getFontSize(){return this.fontSize}set fontSize(t){this.setFontSize(t)}get fontSize(){let t=this.fontInfo.size;return"number"==typeof t&&(t=`${t}pt`),t}get fontSizeInPoints(){return F.convertSizeToPointValue(this.fontSize)}get fontSizeInPixels(){return F.convertSizeToPixelValue(this.fontSize)}get fontStyle(){return this.fontInfo.style}set fontStyle(t){const e=this.fontInfo;this.setFont(e.family,e.size,e.weight,t)}get fontWeight(){return this.fontInfo.weight+""}set fontWeight(t){const e=this.fontInfo;this.setFont(e.family,e.size,t,e.style)}}L.ID=1e3,L.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:N.NORMAL,style:A.NORMAL};const W=16384,I={"1/2":32768,1:16384,2:8192,4:4096,8:2048,16:1024,32:512,64:256,128:128,256:64},G={w:"1",h:"2",q:"4",b:"256"},U={C:{num:0},Am:{num:0},F:{acc:"b",num:1},Dm:{acc:"b",num:1},Bb:{acc:"b",num:2},Gm:{acc:"b",num:2},Eb:{acc:"b",num:3},Cm:{acc:"b",num:3},Ab:{acc:"b",num:4},Fm:{acc:"b",num:4},Db:{acc:"b",num:5},Bbm:{acc:"b",num:5},Gb:{acc:"b",num:6},Ebm:{acc:"b",num:6},Cb:{acc:"b",num:7},Abm:{acc:"b",num:7},G:{acc:"#",num:1},Em:{acc:"#",num:1},D:{acc:"#",num:2},Bm:{acc:"#",num:2},A:{acc:"#",num:3},"F#m":{acc:"#",num:3},E:{acc:"#",num:4},"C#m":{acc:"#",num:4},B:{acc:"#",num:5},"G#m":{acc:"#",num:5},"F#":{acc:"#",num:6},"D#m":{acc:"#",num:6},"C#":{acc:"#",num:7},"A#m":{acc:"#",num:7}},Y={treble:{line_shift:0},bass:{line_shift:6},tenor:{line_shift:4},alto:{line_shift:3},soprano:{line_shift:1},percussion:{line_shift:0},"mezzo-soprano":{line_shift:2},"baritone-c":{line_shift:5},"baritone-f":{line_shift:5},subbass:{line_shift:7},french:{line_shift:-1}},H={C:{index:0,int_val:0},CN:{index:0,int_val:0,accidental:"n"},"C#":{index:0,int_val:1,accidental:"#"},"C##":{index:0,int_val:2,accidental:"##"},CB:{index:0,int_val:11,accidental:"b"},CBB:{index:0,int_val:10,accidental:"bb"},D:{index:1,int_val:2},DN:{index:1,int_val:2,accidental:"n"},"D#":{index:1,int_val:3,accidental:"#"},"D##":{index:1,int_val:4,accidental:"##"},DB:{index:1,int_val:1,accidental:"b"},DBB:{index:1,int_val:0,accidental:"bb"},E:{index:2,int_val:4},EN:{index:2,int_val:4,accidental:"n"},"E#":{index:2,int_val:5,accidental:"#"},"E##":{index:2,int_val:6,accidental:"##"},EB:{index:2,int_val:3,accidental:"b"},EBB:{index:2,int_val:2,accidental:"bb"},F:{index:3,int_val:5},FN:{index:3,int_val:5,accidental:"n"},"F#":{index:3,int_val:6,accidental:"#"},"F##":{index:3,int_val:7,accidental:"##"},FB:{index:3,int_val:4,accidental:"b"},FBB:{index:3,int_val:3,accidental:"bb"},G:{index:4,int_val:7},GN:{index:4,int_val:7,accidental:"n"},"G#":{index:4,int_val:8,accidental:"#"},"G##":{index:4,int_val:9,accidental:"##"},GB:{index:4,int_val:6,accidental:"b"},GBB:{index:4,int_val:5,accidental:"bb"},A:{index:5,int_val:9},AN:{index:5,int_val:9,accidental:"n"},"A#":{index:5,int_val:10,accidental:"#"},"A##":{index:5,int_val:11,accidental:"##"},AB:{index:5,int_val:8,accidental:"b"},ABB:{index:5,int_val:7,accidental:"bb"},B:{index:6,int_val:11},BN:{index:6,int_val:11,accidental:"n"},"B#":{index:6,int_val:12,accidental:"#"},"B##":{index:6,int_val:13,accidental:"##"},BB:{index:6,int_val:10,accidental:"b"},BBB:{index:6,int_val:9,accidental:"bb"},R:{index:6,rest:!0},X:{index:6,accidental:"",octave:4,code:"noteheadXBlack",shift_right:5.5}},z={"#":{code:"accidentalSharp",parenRightPaddingAdjustment:-1},"##":{code:"accidentalDoubleSharp",parenRightPaddingAdjustment:-1},b:{code:"accidentalFlat",parenRightPaddingAdjustment:-2},bb:{code:"accidentalDoubleFlat",parenRightPaddingAdjustment:-2},n:{code:"accidentalNatural",parenRightPaddingAdjustment:-1},"{":{code:"accidentalParensLeft",parenRightPaddingAdjustment:-1},"}":{code:"accidentalParensRight",parenRightPaddingAdjustment:-1},db:{code:"accidentalThreeQuarterTonesFlatZimmermann",parenRightPaddingAdjustment:-1},d:{code:"accidentalQuarterToneFlatStein",parenRightPaddingAdjustment:0},"++":{code:"accidentalThreeQuarterTonesSharpStein",parenRightPaddingAdjustment:-1},"+":{code:"accidentalQuarterToneSharpStein",parenRightPaddingAdjustment:-1},"+-":{code:"accidentalKucukMucennebSharp",parenRightPaddingAdjustment:-1},bs:{code:"accidentalBakiyeFlat",parenRightPaddingAdjustment:-1},bss:{code:"accidentalBuyukMucennebFlat",parenRightPaddingAdjustment:-1},o:{code:"accidentalSori",parenRightPaddingAdjustment:-1},k:{code:"accidentalKoron",parenRightPaddingAdjustment:-1},bbs:{code:"vexAccidentalMicrotonal1",parenRightPaddingAdjustment:-1},"++-":{code:"accidentalBuyukMucennebSharp",parenRightPaddingAdjustment:-1},ashs:{code:"vexAccidentalMicrotonal3",parenRightPaddingAdjustment:-1},afhf:{code:"vexAccidentalMicrotonal4",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaUp:{code:"accSagittal5v7KleismaUp",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaDown:{code:"accSagittal5v7KleismaDown",parenRightPaddingAdjustment:-1},accSagittal5CommaUp:{code:"accSagittal5CommaUp",parenRightPaddingAdjustment:-1},accSagittal5CommaDown:{code:"accSagittal5CommaDown",parenRightPaddingAdjustment:-1},accSagittal7CommaUp:{code:"accSagittal7CommaUp",parenRightPaddingAdjustment:-1},accSagittal7CommaDown:{code:"accSagittal7CommaDown",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisUp:{code:"accSagittal25SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisDown:{code:"accSagittal25SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisUp:{code:"accSagittal35MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisDown:{code:"accSagittal35MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisUp:{code:"accSagittal11MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisDown:{code:"accSagittal11MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisUp:{code:"accSagittal11LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisDown:{code:"accSagittal11LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisUp:{code:"accSagittal35LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisDown:{code:"accSagittal35LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SDown:{code:"accSagittalSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalFlat25SUp:{code:"accSagittalFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7CDown:{code:"accSagittalSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7CUp:{code:"accSagittalFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5CDown:{code:"accSagittalSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5CUp:{code:"accSagittalFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kDown:{code:"accSagittalSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kUp:{code:"accSagittalFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalSharp:{code:"accSagittalSharp",parenRightPaddingAdjustment:-1},accSagittalFlat:{code:"accSagittalFlat",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kUp:{code:"accSagittalSharp5v7kUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kDown:{code:"accSagittalFlat5v7kDown",parenRightPaddingAdjustment:-1},accSagittalSharp5CUp:{code:"accSagittalSharp5CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5CDown:{code:"accSagittalFlat5CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7CUp:{code:"accSagittalSharp7CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7CDown:{code:"accSagittalFlat7CDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SUp:{code:"accSagittalSharp25SUp",parenRightPaddingAdjustment:-1},accSagittalFlat25SDown:{code:"accSagittalFlat25SDown",parenRightPaddingAdjustment:-1},accSagittalSharp35MUp:{code:"accSagittalSharp35MUp",parenRightPaddingAdjustment:-1},accSagittalFlat35MDown:{code:"accSagittalFlat35MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11MUp:{code:"accSagittalSharp11MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11MDown:{code:"accSagittalFlat11MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11LUp:{code:"accSagittalSharp11LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11LDown:{code:"accSagittalFlat11LDown",parenRightPaddingAdjustment:-1},accSagittalSharp35LUp:{code:"accSagittalSharp35LUp",parenRightPaddingAdjustment:-1},accSagittalFlat35LDown:{code:"accSagittalFlat35LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp25SDown:{code:"accSagittalDoubleSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat25SUp:{code:"accSagittalDoubleFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7CDown:{code:"accSagittalDoubleSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7CUp:{code:"accSagittalDoubleFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5CDown:{code:"accSagittalDoubleSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5CUp:{code:"accSagittalDoubleFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v7kDown:{code:"accSagittalDoubleSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v7kUp:{code:"accSagittalDoubleFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp:{code:"accSagittalDoubleSharp",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat:{code:"accSagittalDoubleFlat",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaUp:{code:"accSagittal7v11KleismaUp",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaDown:{code:"accSagittal7v11KleismaDown",parenRightPaddingAdjustment:-1},accSagittal17CommaUp:{code:"accSagittal17CommaUp",parenRightPaddingAdjustment:-1},accSagittal17CommaDown:{code:"accSagittal17CommaDown",parenRightPaddingAdjustment:-1},accSagittal55CommaUp:{code:"accSagittal55CommaUp",parenRightPaddingAdjustment:-1},accSagittal55CommaDown:{code:"accSagittal55CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v11CommaUp:{code:"accSagittal7v11CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v11CommaDown:{code:"accSagittal7v11CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisUp:{code:"accSagittal5v11SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisDown:{code:"accSagittal5v11SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SDown:{code:"accSagittalSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SUp:{code:"accSagittalFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CDown:{code:"accSagittalSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CUp:{code:"accSagittalFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalSharp55CDown:{code:"accSagittalSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalFlat55CUp:{code:"accSagittalFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17CDown:{code:"accSagittalSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalFlat17CUp:{code:"accSagittalFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kDown:{code:"accSagittalSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kUp:{code:"accSagittalFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kUp:{code:"accSagittalSharp7v11kUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kDown:{code:"accSagittalFlat7v11kDown",parenRightPaddingAdjustment:-1},accSagittalSharp17CUp:{code:"accSagittalSharp17CUp",parenRightPaddingAdjustment:-1},accSagittalFlat17CDown:{code:"accSagittalFlat17CDown",parenRightPaddingAdjustment:-1},accSagittalSharp55CUp:{code:"accSagittalSharp55CUp",parenRightPaddingAdjustment:-1},accSagittalFlat55CDown:{code:"accSagittalFlat55CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CUp:{code:"accSagittalSharp7v11CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CDown:{code:"accSagittalFlat7v11CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SUp:{code:"accSagittalSharp5v11SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SDown:{code:"accSagittalFlat5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v11SDown:{code:"accSagittalDoubleSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v11SUp:{code:"accSagittalDoubleFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11CDown:{code:"accSagittalDoubleSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11CUp:{code:"accSagittalDoubleFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp55CDown:{code:"accSagittalDoubleSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat55CUp:{code:"accSagittalDoubleFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17CDown:{code:"accSagittalDoubleSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17CUp:{code:"accSagittalDoubleFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11kDown:{code:"accSagittalDoubleSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11kUp:{code:"accSagittalDoubleFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittal23CommaUp:{code:"accSagittal23CommaUp",parenRightPaddingAdjustment:-1},accSagittal23CommaDown:{code:"accSagittal23CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v19CommaUp:{code:"accSagittal5v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal5v19CommaDown:{code:"accSagittal5v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisUp:{code:"accSagittal5v23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisDown:{code:"accSagittal5v23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SDown:{code:"accSagittalSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SUp:{code:"accSagittalFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CDown:{code:"accSagittalSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CUp:{code:"accSagittalFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CDown:{code:"accSagittalSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalFlat23CUp:{code:"accSagittalFlat23CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CUp:{code:"accSagittalSharp23CUp",parenRightPaddingAdjustment:-1},accSagittalFlat23CDown:{code:"accSagittalFlat23CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CUp:{code:"accSagittalSharp5v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CDown:{code:"accSagittalFlat5v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SUp:{code:"accSagittalSharp5v23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SDown:{code:"accSagittalFlat5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v23SDown:{code:"accSagittalDoubleSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v23SUp:{code:"accSagittalDoubleFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v19CDown:{code:"accSagittalDoubleSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v19CUp:{code:"accSagittalDoubleFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23CDown:{code:"accSagittalDoubleSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23CUp:{code:"accSagittalDoubleFlat23CUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaUp:{code:"accSagittal19SchismaUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaDown:{code:"accSagittal19SchismaDown",parenRightPaddingAdjustment:-1},accSagittal17KleismaUp:{code:"accSagittal17KleismaUp",parenRightPaddingAdjustment:-1},accSagittal17KleismaDown:{code:"accSagittal17KleismaDown",parenRightPaddingAdjustment:-1},accSagittal143CommaUp:{code:"accSagittal143CommaUp",parenRightPaddingAdjustment:-1},accSagittal143CommaDown:{code:"accSagittal143CommaDown",parenRightPaddingAdjustment:-1},accSagittal11v49CommaUp:{code:"accSagittal11v49CommaUp",parenRightPaddingAdjustment:-1},accSagittal11v49CommaDown:{code:"accSagittal11v49CommaDown",parenRightPaddingAdjustment:-1},accSagittal19CommaUp:{code:"accSagittal19CommaUp",parenRightPaddingAdjustment:-1},accSagittal19CommaDown:{code:"accSagittal19CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v19CommaUp:{code:"accSagittal7v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v19CommaDown:{code:"accSagittal7v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisUp:{code:"accSagittal49SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisDown:{code:"accSagittal49SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisUp:{code:"accSagittal23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisDown:{code:"accSagittal23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisUp:{code:"accSagittal5v13MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisDown:{code:"accSagittal5v13MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisUp:{code:"accSagittal11v19MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisDown:{code:"accSagittal11v19MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisUp:{code:"accSagittal49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisDown:{code:"accSagittal49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisUp:{code:"accSagittal5v49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisDown:{code:"accSagittal5v49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisUp:{code:"accSagittal49LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisDown:{code:"accSagittal49LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisUp:{code:"accSagittal11v19LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisDown:{code:"accSagittal11v19LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisUp:{code:"accSagittal5v13LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisDown:{code:"accSagittal5v13LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SDown:{code:"accSagittalSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat23SUp:{code:"accSagittalFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp49SDown:{code:"accSagittalSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalFlat49SUp:{code:"accSagittalFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CDown:{code:"accSagittalSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CUp:{code:"accSagittalFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp19CDown:{code:"accSagittalSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat19CUp:{code:"accSagittalFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CDown:{code:"accSagittalSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CUp:{code:"accSagittalFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalSharp143CDown:{code:"accSagittalSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalFlat143CUp:{code:"accSagittalFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17kDown:{code:"accSagittalSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalFlat17kUp:{code:"accSagittalFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sDown:{code:"accSagittalSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalFlat19sUp:{code:"accSagittalFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sUp:{code:"accSagittalSharp19sUp",parenRightPaddingAdjustment:-1},accSagittalFlat19sDown:{code:"accSagittalFlat19sDown",parenRightPaddingAdjustment:-1},accSagittalSharp17kUp:{code:"accSagittalSharp17kUp",parenRightPaddingAdjustment:-1},accSagittalFlat17kDown:{code:"accSagittalFlat17kDown",parenRightPaddingAdjustment:-1},accSagittalSharp143CUp:{code:"accSagittalSharp143CUp",parenRightPaddingAdjustment:-1},accSagittalFlat143CDown:{code:"accSagittalFlat143CDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CUp:{code:"accSagittalSharp11v49CUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CDown:{code:"accSagittalFlat11v49CDown",parenRightPaddingAdjustment:-1},accSagittalSharp19CUp:{code:"accSagittalSharp19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat19CDown:{code:"accSagittalFlat19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CUp:{code:"accSagittalSharp7v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CDown:{code:"accSagittalFlat7v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp49SUp:{code:"accSagittalSharp49SUp",parenRightPaddingAdjustment:-1},accSagittalFlat49SDown:{code:"accSagittalFlat49SDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SUp:{code:"accSagittalSharp23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat23SDown:{code:"accSagittalFlat23SDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13MUp:{code:"accSagittalSharp5v13MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13MDown:{code:"accSagittalFlat5v13MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19MUp:{code:"accSagittalSharp11v19MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19MDown:{code:"accSagittalFlat11v19MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49MUp:{code:"accSagittalSharp49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat49MDown:{code:"accSagittalFlat49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v49MUp:{code:"accSagittalSharp5v49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v49MDown:{code:"accSagittalFlat5v49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49LUp:{code:"accSagittalSharp49LUp",parenRightPaddingAdjustment:-1},accSagittalFlat49LDown:{code:"accSagittalFlat49LDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19LUp:{code:"accSagittalSharp11v19LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19LDown:{code:"accSagittalFlat11v19LDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13LUp:{code:"accSagittalSharp5v13LUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13LDown:{code:"accSagittalFlat5v13LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23SDown:{code:"accSagittalDoubleSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23SUp:{code:"accSagittalDoubleFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp49SDown:{code:"accSagittalDoubleSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat49SUp:{code:"accSagittalDoubleFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v19CDown:{code:"accSagittalDoubleSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v19CUp:{code:"accSagittalDoubleFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19CDown:{code:"accSagittalDoubleSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19CUp:{code:"accSagittalDoubleFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp11v49CDown:{code:"accSagittalDoubleSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat11v49CUp:{code:"accSagittalDoubleFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp143CDown:{code:"accSagittalDoubleSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat143CUp:{code:"accSagittalDoubleFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17kDown:{code:"accSagittalDoubleSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17kUp:{code:"accSagittalDoubleFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19sDown:{code:"accSagittalDoubleSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19sUp:{code:"accSagittalDoubleFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalShaftUp:{code:"accSagittalShaftUp",parenRightPaddingAdjustment:-1},accSagittalShaftDown:{code:"accSagittalShaftDown",parenRightPaddingAdjustment:-1},accSagittalAcute:{code:"accSagittalAcute",parenRightPaddingAdjustment:-1},accSagittalGrave:{code:"accSagittalGrave",parenRightPaddingAdjustment:-1},accSagittal1MinaUp:{code:"accSagittal1MinaUp",parenRightPaddingAdjustment:-1},accSagittal1MinaDown:{code:"accSagittal1MinaDown",parenRightPaddingAdjustment:-1},accSagittal2MinasUp:{code:"accSagittal2MinasUp",parenRightPaddingAdjustment:-1},accSagittal2MinasDown:{code:"accSagittal2MinasDown",parenRightPaddingAdjustment:-1},accSagittal1TinaUp:{code:"accSagittal1TinaUp",parenRightPaddingAdjustment:-1},accSagittal1TinaDown:{code:"accSagittal1TinaDown",parenRightPaddingAdjustment:-1},accSagittal2TinasUp:{code:"accSagittal2TinasUp",parenRightPaddingAdjustment:-1},accSagittal2TinasDown:{code:"accSagittal2TinasDown",parenRightPaddingAdjustment:-1},accSagittal3TinasUp:{code:"accSagittal3TinasUp",parenRightPaddingAdjustment:-1},accSagittal3TinasDown:{code:"accSagittal3TinasDown",parenRightPaddingAdjustment:-1},accSagittal4TinasUp:{code:"accSagittal4TinasUp",parenRightPaddingAdjustment:-1},accSagittal4TinasDown:{code:"accSagittal4TinasDown",parenRightPaddingAdjustment:-1},accSagittal5TinasUp:{code:"accSagittal5TinasUp",parenRightPaddingAdjustment:-1},accSagittal5TinasDown:{code:"accSagittal5TinasDown",parenRightPaddingAdjustment:-1},accSagittal6TinasUp:{code:"accSagittal6TinasUp",parenRightPaddingAdjustment:-1},accSagittal6TinasDown:{code:"accSagittal6TinasDown",parenRightPaddingAdjustment:-1},accSagittal7TinasUp:{code:"accSagittal7TinasUp",parenRightPaddingAdjustment:-1},accSagittal7TinasDown:{code:"accSagittal7TinasDown",parenRightPaddingAdjustment:-1},accSagittal8TinasUp:{code:"accSagittal8TinasUp",parenRightPaddingAdjustment:-1},accSagittal8TinasDown:{code:"accSagittal8TinasDown",parenRightPaddingAdjustment:-1},accSagittal9TinasUp:{code:"accSagittal9TinasUp",parenRightPaddingAdjustment:-1},accSagittal9TinasDown:{code:"accSagittal9TinasDown",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaUp:{code:"accSagittalFractionalTinaUp",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaDown:{code:"accSagittalFractionalTinaDown",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlat:{code:"accidentalNarrowReversedFlat",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlatAndFlat:{code:"accidentalNarrowReversedFlatAndFlat",parenRightPaddingAdjustment:-1},accidentalWilsonPlus:{code:"accidentalWilsonPlus",parenRightPaddingAdjustment:-1},accidentalWilsonMinus:{code:"accidentalWilsonMinus",parenRightPaddingAdjustment:-1}},j={"a.":{code:"augmentationDot",between_lines:!0},av:{aboveCode:"articStaccatissimoAbove",belowCode:"articStaccatissimoBelow",between_lines:!0},"a>":{aboveCode:"articAccentAbove",belowCode:"articAccentBelow",between_lines:!0},"a-":{aboveCode:"articTenutoAbove",belowCode:"articTenutoBelow",between_lines:!0},"a^":{aboveCode:"articMarcatoAbove",belowCode:"articMarcatoBelow",between_lines:!1},"a+":{code:"pluckedLeftHandPizzicato",between_lines:!1},ao:{aboveCode:"pluckedSnapPizzicatoAbove",belowCode:"pluckedSnapPizzicatoBelow",between_lines:!1},ah:{code:"stringsHarmonic",between_lines:!1},"a@":{aboveCode:"fermataAbove",belowCode:"fermataBelow",between_lines:!1},"a@a":{code:"fermataAbove",between_lines:!1},"a@u":{code:"fermataBelow",between_lines:!1},"a@s":{aboveCode:"fermataShortAbove",belowCode:"fermataShortBelow",between_lines:!1},"a@as":{code:"fermataShortAbove",between_lines:!1},"a@us":{code:"fermataShortBelow",between_lines:!1},"a@l":{aboveCode:"fermataLongAbove",belowCode:"fermataLongBelow",between_lines:!1},"a@al":{code:"fermataLongAbove",between_lines:!1},"a@ul":{code:"fermataLongBelow",between_lines:!1},"a@vl":{aboveCode:"fermataVeryLongAbove",belowCode:"fermataVeryLongBelow",between_lines:!1},"a@avl":{code:"fermataVeryLongAbove",between_lines:!1},"a@uvl":{code:"fermataVeryLongBelow",between_lines:!1},"a|":{code:"stringsUpBow",between_lines:!1},am:{code:"stringsDownBow",between_lines:!1},"a,":{code:"pictChokeCymbal",between_lines:!1}},X={mordent:{code:"ornamentShortTrill"},mordent_inverted:{code:"ornamentMordent"},turn:{code:"ornamentTurn"},turn_inverted:{code:"ornamentTurnSlash"},tr:{code:"ornamentTrill"},upprall:{code:"ornamentPrecompSlideTrillDAnglebert"},downprall:{code:"ornamentPrecompDoubleCadenceUpperPrefix"},prallup:{code:"ornamentPrecompTrillSuffixDandrieu"},pralldown:{code:"ornamentPrecompTrillLowerSuffix"},upmordent:{code:"ornamentPrecompSlideTrillBach"},downmordent:{code:"ornamentPrecompDoubleCadenceUpperPrefixTurn"},lineprall:{code:"ornamentPrecompAppoggTrill"},prallprall:{code:"ornamentTremblement"},scoop:{code:"brassScoop"},doit:{code:"brassDoitMedium"},fall:{code:"brassFallLipShort"},doitLong:{code:"brassLiftMedium"},fallLong:{code:"brassFallRoughMedium"},bend:{code:"brassBend"},plungerClosed:{code:"brassMuteClosed"},plungerOpen:{code:"brassMuteOpen"},flip:{code:"brassFlip"},jazzTurn:{code:"brassJazzTurn"},smear:{code:"brassSmear"}};class V{static currentMusicFont(){if(0===V.MUSIC_FONT_STACK.length)throw new x("NoFonts","The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).");return V.MUSIC_FONT_STACK[0]}static clefProperties(t){if(!t||!(t in Y))throw new x("BadArgument","Invalid clef: "+t);return Y[t]}static keyProperties(t,e="treble",i){let s={octave_shift:0,duration:"4"};"object"==typeof i&&(s=Object.assign(Object.assign({},s),i));const n=V.sanitizeDuration(s.duration),a=t.split("/");if(a.length<2)throw new x("BadArguments",`First argument must be note/octave or note/octave/glyph-code: ${t}`);const o=a[0].toUpperCase(),r=H[o];if(!r)throw new x("BadArguments","Invalid key name: "+o);r.octave&&(a[1]=r.octave.toString());let h=parseInt(a[1],10);h-=s.octave_shift;let l=(7*h-28+r.index)/2;l+=V.clefProperties(e).line_shift;let c=0;l<=0&&2*l%2==0&&(c=1),l>=6&&2*l%2==0&&(c=-1);const d=void 0!==r.int_val?12*h+r.int_val:void 0,b=r.code,m=r.shift_right;let g={};if(a.length>2&&a[2]){const t=a[2].toUpperCase();g={code:this.codeNoteHead(t,n)}||{}}return Object.assign({key:o,octave:h,line:l,int_value:d,accidental:r.accidental,code:b,stroke:c,shift_right:m,displaced:!1},g)}static integerToNote(t){if(void 0===t||t<0||t>11)throw new x("BadArguments",`integerToNote() requires an integer in the range [0, 11]: ${t}`);const e={0:"C",1:"C#",2:"D",3:"D#",4:"E",5:"F",6:"F#",7:"G",8:"G#",9:"A",10:"A#",11:"B"}[t];if(!e)throw new x("BadArguments",`Unknown note value for integer: ${t}`);return e}static tabToGlyphProps(t,e=1){let i,s=0,n=0;if("X"===t.toUpperCase()){const t=new Z("accidentalDoubleSharp",V.TABLATURE_FONT_SCALE).getMetrics();if(i="accidentalDoubleSharp",null==t.width||null==t.height)throw new x("InvalidMetrics","Width and height required");s=t.width,n=-t.height/2}else s=V.textWidth(t);return{text:t,code:i,getWidth:()=>s*e,shift_y:n}}static textWidth(t){return 7*t.toString().length}static articulationCodes(t){return j[t]}static accidentalCodes(t){return z[t]}static ornamentCodes(t){return X[t]}static keySignature(t){const e=U[t];if(!e)throw new x("BadKeySignature",`Bad key signature spec: '${t}'`);if(!e.acc)return[];const i={b:[2,.5,2.5,1,3,1.5,3.5],"#":[0,1.5,-.5,1,2.5,.5,2]}[e.acc],s=[];for(let t=0;tZ.getWidth(a,t)}),s)}}V.UNISON=!0,V.SOFTMAX_FACTOR=10,V.STEM_WIDTH=1.5,V.STEM_HEIGHT=35,V.STAVE_LINE_THICKNESS=1,V.RENDER_PRECISION_PLACES=3,V.RESOLUTION=W,V.MUSIC_FONT_STACK=[],V.NOTATION_FONT_SCALE=39,V.TABLATURE_FONT_SCALE=39,V.SLASH_NOTEHEAD_WIDTH=15,V.STAVE_LINE_DISTANCE=10,V.TEXT_HEIGHT_OFFSET_HACK=1,V.accidentalMap=z,V.accidentalColumnsTable={1:{a:[1],b:[1]},2:{a:[1,2]},3:{a:[1,3,2],b:[1,2,1],second_on_bottom:[1,2,3]},4:{a:[1,3,4,2],b:[1,2,3,1],spaced_out_tetrachord:[1,2,1,2]},5:{a:[1,3,5,4,2],b:[1,2,4,3,1],spaced_out_pentachord:[1,2,3,2,1],very_spaced_out_pentachord:[1,2,1,2,1]},6:{a:[1,3,5,6,4,2],b:[1,2,4,5,3,1],spaced_out_hexachord:[1,3,2,1,3,2],very_spaced_out_hexachord:[1,2,1,2,1,2]}},V.unicode={sharp:String.fromCharCode(9839),flat:String.fromCharCode(9837),natural:String.fromCharCode(9838),triangle:String.fromCharCode(9651),"o-with-slash":String.fromCharCode(248),degrees:String.fromCharCode(176),circle:String.fromCharCode(9675)},V.validTypes={n:{name:"note"},r:{name:"rest"},h:{name:"harmonic"},m:{name:"muted"},s:{name:"slash"},g:{name:"ghost"},d:{name:"diamond"},x:{name:"x"},ci:{name:"circled"},cx:{name:"circle x"},sf:{name:"slashed"},sb:{name:"slashed backward"},sq:{name:"square"},tu:{name:"triangle up"},td:{name:"triangle down"}},V.TIME4_4={num_beats:4,beat_value:4,resolution:W};const K={"1/2":{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restDoubleWhole",rest:!0,position:"B/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},1:{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restWhole",ledger_code_head:"restWholeLegerLine",rest:!0,position:"D/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},2:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restHalf",ledger_code_head:"restHalfLegerLine",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},4:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restQuarter",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1.5,line_below:1.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},8:{common:{code_head:"",stem:!0,flag:!0,beam_count:1,stem_beam_extension:0,code_flag_upstem:"flag8thUp",code_flag_downstem:"flag8thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest8th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:1},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},16:{common:{code_head:"",beam_count:2,stem_beam_extension:0,stem:!0,flag:!0,code_flag_upstem:"flag16thUp",code_flag_downstem:"flag16thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest16th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},32:{common:{code_head:"",beam_count:3,stem_beam_extension:7.5,stem:!0,flag:!0,code_flag_upstem:"flag32ndUp",code_flag_downstem:"flag32ndDown",stem_up_extension:9,stem_down_extension:9,tabnote_stem_up_extension:9,tabnote_stem_down_extension:9,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest32nd",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},64:{common:{code_head:"",beam_count:4,stem_beam_extension:15,stem:!0,flag:!0,code_flag_upstem:"flag64thUp",code_flag_downstem:"flag64thDown",stem_up_extension:13,stem_down_extension:13,tabnote_stem_up_extension:13,tabnote_stem_down_extension:13,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest64th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},128:{common:{code_head:"",beam_count:5,stem_beam_extension:22.5,stem:!0,flag:!0,code_flag_upstem:"flag128thUp",code_flag_downstem:"flag128thDown",stem_up_extension:22,stem_down_extension:22,tabnote_stem_up_extension:22,tabnote_stem_down_extension:22,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest128th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-2.5,line_above:3,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}}};var $,J;!function(t){t[t.MOVE=0]="MOVE",t[t.LINE=1]="LINE",t[t.QUADRATIC=2]="QUADRATIC",t[t.BEZIER=3]="BEZIER"}($||($={}));class q{constructor(t,e,i){this.point=-1,this.metrics=Z.loadMetrics(t,e,i),this.bbox=Z.getOutlineBoundingBox(this.metrics.outline,this.metrics.scale,this.metrics.x_shift,this.metrics.y_shift),i&&(this.point=Z.lookupFontMetric(this.metrics.font,i,e,"point",-1))}}class Q{constructor(t,e,i,s){this.outline=t,this.originX=e,this.originY=i,this.scale=s,this.i=0,this.precision=1,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES)}done(){return this.i>=this.outline.length}next(){return Math.round(this.outline[this.i++]*this.precision/this.precision)}nextX(){return Math.round((this.originX+this.outline[this.i++]*this.scale)*this.precision)/this.precision}nextY(){return Math.round((this.originY-this.outline[this.i++]*this.scale)*this.precision)/this.precision}static parse(t){const e=[],i=t.split(" ");let s=0;for(;s{const e=t.getTickContext();n&&t.setStave(n),e.setXOffset(a)}))}}class et{static get NUM_TONES(){return this.canonical_notes.length}static get roots(){return["c","d","e","f","g","a","b"]}static get root_values(){return[0,2,4,5,7,9,11]}static get root_indices(){return{c:0,d:1,e:2,f:3,g:4,a:5,b:6}}static get canonical_notes(){return["c","c#","d","d#","e","f","f#","g","g#","a","a#","b"]}static get diatonic_intervals(){return["unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","octave"]}static get diatonic_accidentals(){return{unison:{note:0,accidental:0},m2:{note:1,accidental:-1},M2:{note:1,accidental:0},m3:{note:2,accidental:-1},M3:{note:2,accidental:0},p4:{note:3,accidental:0},dim5:{note:4,accidental:-1},p5:{note:4,accidental:0},m6:{note:5,accidental:-1},M6:{note:5,accidental:0},b7:{note:6,accidental:-1},M7:{note:6,accidental:0},octave:{note:7,accidental:0}}}static get intervals(){return{u:0,unison:0,m2:1,b2:1,min2:1,S:1,H:1,2:2,M2:2,maj2:2,T:2,W:2,m3:3,b3:3,min3:3,M3:4,3:4,maj3:4,4:5,p4:5,"#4":6,b5:6,aug4:6,dim5:6,5:7,p5:7,"#5":8,b6:8,aug5:8,6:9,M6:9,maj6:9,b7:10,m7:10,min7:10,dom7:10,M7:11,maj7:11,8:12,octave:12}}static get scales(){return{major:[2,2,1,2,2,2,1],minor:[2,1,2,2,1,2,2],ionian:[2,2,1,2,2,2,1],dorian:[2,1,2,2,2,1,2],phyrgian:[1,2,2,2,1,2,2],lydian:[2,2,2,1,2,2,1],mixolydian:[2,2,1,2,2,1,2],aeolian:[2,1,2,2,1,2,2],locrian:[1,2,2,1,2,2,2]}}static get scaleTypes(){return{M:et.scales.major,m:et.scales.minor}}static get accidentals(){return["bb","b","n","#","##"]}static get noteValues(){return{c:{root_index:0,int_val:0},cn:{root_index:0,int_val:0},"c#":{root_index:0,int_val:1},"c##":{root_index:0,int_val:2},cb:{root_index:0,int_val:11},cbb:{root_index:0,int_val:10},d:{root_index:1,int_val:2},dn:{root_index:1,int_val:2},"d#":{root_index:1,int_val:3},"d##":{root_index:1,int_val:4},db:{root_index:1,int_val:1},dbb:{root_index:1,int_val:0},e:{root_index:2,int_val:4},en:{root_index:2,int_val:4},"e#":{root_index:2,int_val:5},"e##":{root_index:2,int_val:6},eb:{root_index:2,int_val:3},ebb:{root_index:2,int_val:2},f:{root_index:3,int_val:5},fn:{root_index:3,int_val:5},"f#":{root_index:3,int_val:6},"f##":{root_index:3,int_val:7},fb:{root_index:3,int_val:4},fbb:{root_index:3,int_val:3},g:{root_index:4,int_val:7},gn:{root_index:4,int_val:7},"g#":{root_index:4,int_val:8},"g##":{root_index:4,int_val:9},gb:{root_index:4,int_val:6},gbb:{root_index:4,int_val:5},a:{root_index:5,int_val:9},an:{root_index:5,int_val:9},"a#":{root_index:5,int_val:10},"a##":{root_index:5,int_val:11},ab:{root_index:5,int_val:8},abb:{root_index:5,int_val:7},b:{root_index:6,int_val:11},bn:{root_index:6,int_val:11},"b#":{root_index:6,int_val:0},"b##":{root_index:6,int_val:1},bb:{root_index:6,int_val:10},bbb:{root_index:6,int_val:9}}}isValidNoteValue(t){return t>=0&&t=0&&t3)throw new x("BadArguments","Invalid note name: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|bb|n|#|##)?$/.exec(e);if(null!==i){return{root:i[1],accidental:i[2]}}throw new x("BadArguments","Invalid note name: "+t)}getKeyParts(t){if(!t||t.length<1)throw new x("BadArguments","Invalid key: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|#)?(mel|harm|m|M)?$/.exec(e);if(null!==i){const t=i[1],e=i[2];let s=i[3];return s||(s="M"),{root:t,accidental:e,type:s}}throw new x("BadArguments",`Invalid key: ${t}`)}getNoteValue(t){const e=et.noteValues[t];if(void 0===e)throw new x("BadArguments",`Invalid note name: ${t}`);return e.int_val}getIntervalValue(t){const e=et.intervals[t];if(void 0===e)throw new x("BadArguments",`Invalid interval name: ${t}`);return e}getCanonicalNoteName(t){if(!this.isValidNoteValue(t))throw new x("BadArguments",`Invalid note value: ${t}`);return et.canonical_notes[t]}getCanonicalIntervalName(t){if(!this.isValidIntervalValue(t))throw new x("BadArguments",`Invalid interval value: ${t}`);return et.diatonic_intervals[t]}getRelativeNoteValue(t,e,i=1){if(1!==i&&-1!==i)throw new x("BadArguments",`Invalid direction: ${i}`);let s=(t+i*e)%et.NUM_TONES;return s<0&&(s+=et.NUM_TONES),s}getRelativeNoteName(t,e){const i=this.getNoteParts(t),s=this.getNoteValue(i.root);let n=e-s;if(Math.abs(n)>et.NUM_TONES-3){let i=1;n>0&&(i=-1);const a=(e+1+(s+1))%et.NUM_TONES*i;if(Math.abs(a)>2)throw new x("BadArguments",`Notes not related: ${t}, ${e})`);n=a}if(Math.abs(n)>2)throw new x("BadArguments",`Notes not related: ${t}, ${e})`);let a=i.root;if(n>0)for(let t=1;t<=n;++t)a+="#";else if(n<0)for(let t=-1;t>=n;--t)a+="b";return a}getScaleTones(t,e){const i=[t];let s=t;for(let n=0;ne.line-t.line));const c=[];let d=0;for(let t=0;tc[i+t],a=t=>t.map(n),o=(t,e)=>{const[i,s]=a([t,e]).map((t=>t.line));return i-s},r=(...t)=>t.map(a).every((([t,e])=>!this.checkCollision(t,e))),h=s-i+1;let l,d,m=this.checkCollision(c[i],c[s])?"a":"b";switch(h){case 3:"a"===m&&.5===o(1,2)&&.5!==o(0,1)&&(m="second_on_bottom");break;case 4:r([0,2],[1,3])&&(m="spaced_out_tetrachord");break;case 5:"b"===m&&r([1,3])&&(m="spaced_out_pentachord",r([0,2],[2,4])&&(m="very_spaced_out_pentachord"));break;case 6:r([0,3],[1,4],[2,5])&&(m="spaced_out_hexachord"),r([0,2],[2,4],[1,3],[3,5])&&(m="very_spaced_out_hexachord")}if(h>=7){let e=2,i=!0;for(;!0===i;){i=!1;for(let t=0;t+ed?b:d}else for(l=t;l<=s;l++)d=V.accidentalColumnsTable[h][m][l-t],c[l].column=d,b=b>d?b:d;t=s}const m=[],g=[];for(let t=0;t<=b;t++)m[t]=0,g[t]=0;m[0]=n+d,g[0]=n,c.forEach((t=>{t.width>m[t.column]&&(m[t.column]=t.width)}));for(let t=1;t{let e=0;const i=x+t.numAcc;for(;x0?(s=e.flatLine||e.dblSharpLine?2.5:3,t.dblSharpLine&&(i-=.5)):(s=t.flatLine||t.dblSharpLine?2.5:3,e.dblSharpLine&&(i-=.5));const n=Math.abs(i){const e=new E(0,1);t.getTickables().forEach((t=>{if(t.shouldIgnoreTicks())return;const n=s[e.value()];n?n.push(t):(i.push(e.value()),s[e.value()]=[t]),e.add(t.getTicks())}))}));const a=new et;e||(e="C");const o=a.createScaleMap(e),r={};i.forEach((t=>{const e=s[t],i=[],h=t=>{if(!b(t)||t.isRest()||t.shouldIgnoreTicks())return;const e=t;e.keys.forEach(((t,s)=>{const h=a.getNoteParts(t.split("/")[0]),l=t.split("/")[1],c=h.accidental||"n",d=h.root+c;r[h.root+l]||(r[h.root+l]=o[h.root]);const b=r[h.root+l]===d,m=i.indexOf(t)>-1;if(e.getModifiers().forEach(((t,i)=>{n(t)&&t.type==c&&t.getIndex()==s&&e.getModifiers().splice(i,1)})),!b||b&&m){r[h.root+l]=d;const n=new st(c);e.addModifier(n,s),i.push(t)}})),e.getModifiers().forEach((t=>{l(t)&&t.getGraceNotes().forEach(h)}))};e.forEach(h)}))}constructor(t){super(),it("New accidental: ",t),this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE,parenLeftPadding:2,parenRightPadding:2},this.accidental=V.accidentalCodes(this.type),p(this.accidental,"ArgumentError",`Unknown accidental type: ${t}`),this.cautionary=!1,this.reset()}reset(){const t=this.render_options.font_scale;this.glyph=new Z(this.accidental.code,t),this.glyph.setOriginX(1),this.cautionary&&(this.parenLeft=new Z(V.accidentalCodes("{").code,t),this.parenRight=new Z(V.accidentalCodes("}").code,t),this.parenLeft.setOriginX(1),this.parenRight.setOriginX(1))}getWidth(){if(this.cautionary){const t=p(this.parenLeft),e=p(this.parenRight),i=t.getMetrics().width+e.getMetrics().width+this.render_options.parenLeftPadding+this.render_options.parenRightPadding;return this.glyph.getMetrics().width+i}return this.glyph.getMetrics().width}setNote(t){return p(t,"ArgumentError",`Bad note value: ${t}`),this.note=t,h(t)&&(this.render_options.font_scale=25,this.reset()),this}setAsCautionary(){return this.cautionary=!0,this.render_options.font_scale=28,this.reset(),this}draw(){const{type:t,position:e,index:i,cautionary:s,x_shift:n,y_shift:a,glyph:o,render_options:{parenLeftPadding:r,parenRightPadding:h}}=this,l=this.checkContext(),c=this.checkAttachedNote();this.setRendered();const d=c.getModifierStartXY(e,i);let b=d.x+n;const m=d.y+a;if(it("Rendering: ",t,b,m),s){const t=p(this.parenLeft),e=p(this.parenRight);e.render(l,b,m),b-=e.getMetrics().width,b-=h,b-=this.accidental.parenRightPaddingAdjustment,o.render(l,b,m),b-=o.getMetrics().width,b-=r,t.render(l,b,m)}else o.render(l,b,m)}}st.DEBUG=!1;class nt extends L{static get CATEGORY(){return _.Stem}static get UP(){return 1}static get DOWN(){return-1}static get WIDTH(){return V.STEM_WIDTH}static get HEIGHT(){return V.STEM_HEIGHT}constructor(t){super(),this.stem_up_y_offset=0,this.stem_down_y_offset=0,this.stem_up_y_base_offset=0,this.stem_down_y_base_offset=0,this.x_begin=(null==t?void 0:t.x_begin)||0,this.x_end=(null==t?void 0:t.x_end)||0,this.y_top=(null==t?void 0:t.y_top)||0,this.y_bottom=(null==t?void 0:t.y_bottom)||0,this.stem_extension=(null==t?void 0:t.stem_extension)||0,this.stem_direction=(null==t?void 0:t.stem_direction)||0,this.hide=(null==t?void 0:t.hide)||!1,this.isStemlet=(null==t?void 0:t.isStemlet)||!1,this.stemletHeight=(null==t?void 0:t.stemletHeight)||0,this.renderHeightAdjustment=0,this.setOptions(t)}setOptions(t){this.stem_up_y_offset=(null==t?void 0:t.stem_up_y_offset)||0,this.stem_down_y_offset=(null==t?void 0:t.stem_down_y_offset)||0,this.stem_up_y_base_offset=(null==t?void 0:t.stem_up_y_base_offset)||0,this.stem_down_y_base_offset=(null==t?void 0:t.stem_down_y_base_offset)||0}setNoteHeadXBounds(t,e){return this.x_begin=t,this.x_end=e,this}setDirection(t){this.stem_direction=t}setExtension(t){this.stem_extension=t}getExtension(){return this.stem_extension}setYBounds(t,e){this.y_top=t,this.y_bottom=e}getHeight(){const t=this.stem_direction===nt.UP?this.stem_up_y_offset:this.stem_down_y_offset;return(this.y_bottom-this.y_top+(nt.HEIGHT-t+this.stem_extension))*this.stem_direction}getBoundingBox(){throw new x("NotImplemented","getBoundingBox() not implemented.")}getExtents(){const t=this.stem_direction===nt.UP,e=[this.y_top,this.y_bottom],i=nt.HEIGHT+this.stem_extension,s=(t?Math.min:Math.max)(...e),n=(t?Math.max:Math.min)(...e);return{topY:s+i*-this.stem_direction,baseY:n}}setVisibility(t){return this.hide=!t,this}setStemlet(t,e){return this.isStemlet=t,this.stemletHeight=e,this}adjustHeightForFlag(){this.renderHeightAdjustment=V.currentMusicFont().lookupMetric("stem.heightAdjustmentForFlag",-3)}adjustHeightForBeam(){this.renderHeightAdjustment=-nt.WIDTH/2}draw(){if(this.setRendered(),this.hide)return;const t=this.checkContext();let e,i;const s=this.stem_direction;let n=0;s===nt.DOWN?(e=this.x_begin,i=this.y_top+this.stem_down_y_offset,n=this.stem_down_y_base_offset):(e=this.x_end,i=this.y_bottom-this.stem_up_y_offset,n=this.stem_up_y_base_offset);const a=this.getHeight();!function(...t){nt.DEBUG&&f("Vex.Flow.Stem",t)}("Rendering stem - ","Top Y: ",this.y_top,"Bottom Y: ",this.y_bottom);const o=this.isStemlet?a-this.stemletHeight*this.stem_direction:0;t.save(),this.applyStyle(),t.openGroup("stem",this.getAttribute("id"),{pointerBBox:!0}),t.beginPath(),t.setLineWidth(nt.WIDTH),t.moveTo(e,i-o+n),t.lineTo(e,i-a-this.renderHeightAdjustment*s),t.stroke(),t.closeGroup(),this.restoreStyle(),t.restore()}}function at(...t){lt.DEBUG&&f("Vex.Flow.TextFormatter",t)}nt.DEBUG=!1;const ot={},rt={},ht={};class lt{static getFontFamilies(){const t=[];for(const e in ht){const i=ht[e];t.push(Object.assign({},i))}return t}static create(t={}){at("create: ",t),t.family||(t.family=F.SANS_SERIF);const e=[],i=t.family.split(/\s*,\s*/);for(const t of i){for(const i in ht)i.startsWith(t)&&e.push(ht[i]);if(e.length>0)break}let s;if(0===e.length)s=new lt(Object.values(ht)[0]);else if(1===e.length)s=new lt(e[0]);else{const i=F.isBold(t.weight),n=F.isItalic(t.style),a=e.find((t=>t.bold===i&&t.italic===n));if(a)s=new lt(a);else{const t=e.find((t=>t.italic===n||t.bold===i));s=new lt(t||e[0])}}const n=t.size;if(void 0!==n){const t=F.convertSizeToPointValue(n);s.setFontSize(t)}return s}static getInfo(t){return ht[t]}static registerInfo(t,e=!1){at("registerInfo: ",t,e);const i=t.family;(void 0===ht[i]||e)&&(ht[i]=t)}constructor(t){this.family="",this.size=14,this.resolution=1e3,this.glyphs={},this.serifs=!1,this.monospaced=!1,this.italic=!1,this.bold=!1,this.superscriptOffset=0,this.subscriptOffset=0,this.maxSizeGlyph="@",this.cacheKey="",this.updateParams(t)}get localHeightCache(){var t;return void 0===rt[this.cacheKey]&&(rt[this.cacheKey]={}),null!==(t=rt[this.cacheKey])&&void 0!==t?t:{}}updateParams(t){t.family&&(this.family=t.family),t.resolution&&(this.resolution=t.resolution),t.glyphs&&(this.glyphs=t.glyphs),t.serifs&&(this.serifs=t.serifs),t.monospaced&&(this.monospaced=t.monospaced),t.italic&&(this.italic=t.italic),t.bold&&(this.bold=t.bold),t.maxSizeGlyph&&(this.maxSizeGlyph=t.maxSizeGlyph),t.superscriptOffset&&(this.superscriptOffset=t.superscriptOffset),t.subscriptOffset&&(this.subscriptOffset=t.subscriptOffset),this.updateCacheKey()}updateCacheKey(){const t=this.family.replace(/\s+/g,"_"),e=this.size,i=this.bold?N.BOLD:N.NORMAL,s=this.italic?A.ITALIC:A.NORMAL;this.cacheKey=`${t}%${e}%${i}%${s}`}getGlyphMetrics(t){return this.glyphs[t]?this.glyphs[t]:this.glyphs[this.maxSizeGlyph]}get maxHeight(){return this.getGlyphMetrics(this.maxSizeGlyph).ha/this.resolution*this.fontSizeInPixels}getWidthForCharacterInEm(t){var e;const i=this.getGlyphMetrics(t);if(i){return(null!==(e=i.advanceWidth)&&void 0!==e?e:0)/this.resolution}return.65}getYForCharacterInPx(t){const e=this.getGlyphMetrics(t),i={yMin:0,yMax:this.maxHeight,height:this.maxHeight};return e?("number"==typeof e.y_min&&(i.yMin=e.y_min/this.resolution*this.fontSizeInPixels),"number"==typeof e.y_max&&(i.yMax=e.y_max/this.resolution*this.fontSizeInPixels),i.height=i.yMax-i.yMin,i):i}getYForStringInPx(t){const e=this.localHeightCache,i={yMin:0,yMax:this.maxHeight,height:this.maxHeight},s=e[t];if(void 0!==s)return s;for(let e=0;et>e?t:e)),h+=(this.text_line+1)*V.STAVE_LINE_DISTANCE+o,d&&i===nt.DOWN&&(h=Math.max(h,l.topY+o+c*this.text_line))}else if(this.verticalJustification===dt.CENTER){const t=e.getYForTopText(this.text_line)-1;h=t+(b.getYForBottomText(this.text_line)-t)/2+o/2}else if(this.verticalJustification===dt.TOP){h=Math.min(...e.getYs())-(this.text_line+1)*V.STAVE_LINE_DISTANCE,d&&i===nt.UP&&(c=l.topY=1}function ut(t,e){return xt(t,e)?e===mt?Math.ceil:Math.floor:Math.round}const pt=t=>b(t)||h(t);class ft extends tt{static get CATEGORY(){return _.Articulation}static format(t,e){if(!t||0===t.length)return!1;let i=0;const s=(t,e,i)=>_t(ut(e,i),p(t.glyph.getMetrics().height)/10+.5);t.forEach((t=>{const n=t.checkAttachedNote();i=Math.max(n.getGlyphProps().getWidth(),i);let a=5;const o=n.hasStem()?n.getStemDirection():nt.UP;let r=0;if(m(n)){const t=n.getStem();t&&(r=Math.abs(t.getHeight())/V.STAVE_LINE_DISTANCE)}const h=n.getStave();if(h&&(a=h.getNumLines()),t.getPosition()===mt){let i=n.getLineNumber(!0);o===nt.UP&&(i+=r);let h=s(t,e.top_text_line,mt);const l=i+e.top_text_line+.5;!t.articulation.between_lines&&lt.getWidth())).reduce(((t,e)=>Math.max(e,t))),a=Math.min(Math.max(n-i,0),Math.max(n-(e.left_shift+e.right_shift),0));return e.left_shift+=a/2,e.right_shift+=a/2,!0}static easyScoreHook({articulations:t},e,i){if(!t)return;const s={staccato:"a.",tenuto:"a-",accent:"a>"};t.split(",").map((t=>t.trim().split("."))).map((([t,e])=>{const n={type:s[t]};return e&&(n.position=tt.PositionString[e]),i.getFactory().Articulation(n)})).map((t=>e.addModifier(t,0)))}constructor(t){super(),this.type=t,this.position=mt,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.reset()}reset(){this.articulation=V.articulationCodes(this.type),this.articulation||(this.articulation={code:this.type,between_lines:!1},this.type.endsWith("Above")&&(this.position=mt),this.type.endsWith("Below")&&(this.position=gt));const t=(this.position===mt?this.articulation.aboveCode:this.articulation.belowCode)||this.articulation.code;this.glyph=new Z(null!=t?t:"",this.render_options.font_scale),p(this.glyph,"ArgumentError",`Articulation not found: ${this.type}`),this.setWidth(p(this.glyph.getMetrics().width))}setBetweenLines(t=!0){return this.articulation.between_lines=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=this.checkIndex(),{position:s,glyph:n,text_line:a}=this,o=this.articulation.between_lines,r=e.checkStave(),h=r.getSpacingBetweenLines(),l=g(e),{x:c}=e.getModifierStartXY(s,i),d=!o||l,b=function(t,e){const i=e===mt&&t.getStemDirection()===nt.UP||e===gt&&t.getStemDirection()===nt.DOWN;return pt(t)?t.hasStem()&&i?.5:1:t.hasStem()&&i?1:0}(e,s),m=V.currentMusicFont().lookupMetric(`articulation.${n.getCode()}.padding`,0);let _={[mt]:()=>{n.setOrigin(.5,1);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(pt(t))return t.hasStem()?i===nt.UP?s:n:Math.min(...t.getYs());if(g(t))return t.hasStem()&&i===nt.UP?s:t.checkStave().getYForTopText(e);throw new x("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)-(a+b)*h;return d?Math.min(r.getYForTopText(ft.INITIAL_OFFSET),t):t},[gt]:()=>{n.setOrigin(.5,0);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(pt(t))return t.hasStem()?i===nt.UP?n:s:Math.max(...t.getYs());if(g(t))return t.hasStem()?i===nt.UP?t.checkStave().getYForBottomText(e):s:t.checkStave().getYForBottomText(e);throw new x("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)+(a+b)*h;return d?Math.max(r.getYForBottomText(ft.INITIAL_OFFSET),t):t}}[s]();if(!l){const t=s===mt?-1:1,a=e.getKeyProps()[i].line,r=(e.getYs()[i]-_)/h+Number(a),l=function(t,e,i,s){const n=_t(ut(e,i),e);if(t&&xt(n,i)&&n%1==0)return n+.5*-s;return n}(o,r,s,t);xt(l,s)&&n.setOrigin(.5,.5),_+=Math.abs(l-r)*h*t+m*t}!function(...t){ft.DEBUG&&f("Vex.Flow.Articulation",t)}(`Rendering articulation at (x: ${c}, y: ${_})`),n.render(t,c,_)}}ft.DEBUG=!1,ft.INITIAL_OFFSET=-.5;class yt{static get CATEGORY(){return _.RenderContext}set font(t){this.setFont(t)}get font(){return this.getFont()}setRawFont(t){return this.setFont(t),this}}function St(t,e,i,s="#F55"){t.save(),t.setFillStyle(s),t.beginPath(),t.arc(e,i,3,0,2*Math.PI,!1),t.closePath(),t.fill(),t.restore()}class Tt extends L{static get CATEGORY(){return _.Tickable}constructor(){super(),this._preFormatted=!1,this._postFormatted=!1,this.ticks=new E(0,1),this.intrinsicTicks=0,this.tickMultiplier=new E(1,1),this.width=0,this.x_shift=0,this.modifiers=[],this.tupletStack=[],this.align_center=!1,this.center_x_shift=0,this.ignore_ticks=!1,this.formatterMetrics={freedom:{left:0,right:0},duration:"",iterations:0,space:{used:0,mean:0,deviation:0}}}reset(){return this}getTicks(){return this.ticks}shouldIgnoreTicks(){return this.ignore_ticks}setIgnoreTicks(t){return this.ignore_ticks=t,this}setWidth(t){this.width=t}getWidth(){if(!this._preFormatted)throw new x("UnformattedNote","Can't call GetWidth on an unformatted note.");return this.width+(this.modifierContext?this.modifierContext.getWidth():0)}setXShift(t){return this.x_shift=t,this}getXShift(){return this.x_shift}getX(){return this.checkTickContext("Can't getX() without a TickContext.").getX()+this.x_shift}getFormatterMetrics(){return this.formatterMetrics}getCenterXShift(){return this.isCenterAligned()?this.center_x_shift:0}setCenterXShift(t){return this.center_x_shift=t,this}isCenterAligned(){return this.align_center}setCenterAlignment(t){return this.align_center=t,this}getVoice(){return p(this.voice,"NoVoice","Tickable has no voice.")}setVoice(t){this.voice=t}getTuplet(){return this.tuplet}getTupletStack(){return this.tupletStack}resetTuplet(t){let e,i;if(t){const s=this.tupletStack.indexOf(t);return-1!==s&&(this.tupletStack.splice(s,1),e=t.getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i)),this}for(;this.tupletStack.length;)e=(t=this.tupletStack.pop()).getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i);return this}setTuplet(t){if(t){this.tupletStack.push(t);const e=t.getNoteCount(),i=t.getNotesOccupied();this.applyTickMultiplier(i,e)}return this.tuplet=t,this}addToModifierContext(t){this.modifierContext=t;for(let t=0;t0){const s=g.space.deviation,n=s>=0?"+":"";t.setFillStyle("red"),t.fillText(n+Math.round(s),o+e.getXShift(),i-10)}t.restore()}static parseDuration(t){if(!t)return;const e=/(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/.exec(t);if(!e)return;return{duration:e[1],dots:e[2].length,type:e[3]||"n"}}static parseNoteStruct(t){const e=vt.parseDuration(t.duration);if(!e)return;let i=t.type;if(i&&!V.validTypes[i])return;const s=[];i||(i=e.type||"n",void 0!==t.keys&&t.keys.forEach(((t,e)=>{const n=t.split("/");s[e]=n&&3===n.length?n[2]:i})));let n=V.durationToTicks(e.duration);if(!n)return;const a=t.dots?t.dots:e.dots;if("number"!=typeof a)return;let o=n;for(let t=0;tV.getGlyphProps(this.duration,t))),this.playNote=void 0,this.ignore_ticks=!1,this.width=0,this.leftDisplacedHeadPx=0,this.rightDisplacedHeadPx=0,this.x_shift=0,this.ys=[],t.align_center&&this.setCenterAlignment(t.align_center),this.render_options={annotation_spacing:5,glyph_font_scale:1,stroke_px:1,scale:1,font:"",y_shift:0}}getPlayNote(){return this.playNote}setPlayNote(t){return this.playNote=t,this}isRest(){return!1}addStroke(t,e){return e.setNote(this),e.setIndex(t),this.modifiers.push(e),this.preFormatted=!1,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this.setYs([t.getYForLine(0)]),this.setContext(this.stave.getContext()),this}getLeftDisplacedHeadPx(){return this.leftDisplacedHeadPx}getRightDisplacedHeadPx(){return this.rightDisplacedHeadPx}setLeftDisplacedHeadPx(t){return this.leftDisplacedHeadPx=t,this}setRightDisplacedHeadPx(t){return this.rightDisplacedHeadPx=t,this}shouldIgnoreTicks(){return this.ignore_ticks}getLineNumber(t){return 0}getLineForRest(){return 0}getGlyph(){return this.glyphProps}getGlyphProps(){return this.glyphProps}getGlyphWidth(){return this.glyphProps.getWidth(this.render_options.glyph_font_scale)}setYs(t){return this.ys=t,this}getYs(){if(0===this.ys.length)throw new x("NoYValues","No Y-values calculated for this note.");return this.ys}getYForTopText(t){return this.checkStave().getYForTopText(t)}getVoice(){if(!this.voice)throw new x("NoVoice","Note has no voice.");return this.voice}setVoice(t){return this.voice=t,this.preFormatted=!1,this}getTickContext(){return this.checkTickContext()}setTickContext(t){return this.tickContext=t,this.preFormatted=!1,this}getDuration(){return this.duration}isDotted(){return this.getModifiersByType(_.Dot).length>0}hasStem(){return!1}getNoteType(){return this.noteType}getBeam(){return this.beam}checkBeam(){return p(this.beam,"NoBeam","No beam attached to instance")}hasBeam(){return null!=this.beam}setBeam(t){return this.beam=t,this}addModifier(t,e=0){const i="Note.addModifier(modifier: Modifier, index: number=0)";if("string"==typeof e&&(e=parseInt(e),console.warn(i+" expected a number for `index`, but received a string.")),"object"!=typeof t||"number"!=typeof e)throw new x("WrongParams","Incorrect call signature. Use "+i+" instead.");return t.setNote(this),t.setIndex(e),super.addModifier(t),this}getModifiersByType(t){return this.modifiers.filter((e=>e.getCategory()===t))}getModifierStartXY(t,e,i){if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");return{x:this.getAbsoluteX(),y:this.ys[0]}}getRightParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getRightDisplacedHeadPx():0}getLeftParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getLeftDisplacedHeadPx()-this.x_shift:-this.x_shift}getFirstDotPx(){let t=this.getRightDisplacedHeadPx();return 0!==this.checkModifierContext().getMembers("Parenthesis").length&&(t+=V.currentMusicFont().lookupMetric("parenthesis.default.width")),t}getMetrics(){if(!this.preFormatted)throw new x("UnformattedNote","Can't call getMetrics on an unformatted note.");const t=this.modifierContext?this.modifierContext.getState().left_shift:0,e=this.modifierContext?this.modifierContext.getState().right_shift:0,i=this.getWidth();return{width:i,glyphWidth:this.getGlyphWidth(),notePx:i-t-e-this.leftDisplacedHeadPx-this.rightDisplacedHeadPx,modLeftPx:t,modRightPx:e,leftDisplacedHeadPx:this.leftDisplacedHeadPx,rightDisplacedHeadPx:this.rightDisplacedHeadPx,glyphPx:0}}getAbsoluteX(){let t=this.checkTickContext("Can't getAbsoluteX() without a TickContext.").getX();return this.stave&&(t+=this.stave.getNoteStartX()+V.currentMusicFont().lookupMetric("stave.padding")),this.isCenterAligned()&&(t+=this.getCenterXShift()),t}static getPoint(t){return"default"==t?V.NOTATION_FONT_SCALE:V.NOTATION_FONT_SCALE/5*3}getStemDirection(){throw new x("NoStem","No stem attached to this note.")}getStemExtents(){throw new x("NoStem","No stem attached to this note.")}getTieRightX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t+=-this.width/2+this.width+2,t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t-=this.width/2+2,t}getKeys(){return this.keys}getKeyProps(){return this.keyProps}}var wt,Et,Bt,Ct,Pt,Nt;!function(t){t[t.CENTER=0]="CENTER",t[t.LEFT=1]="LEFT",t[t.RIGHT=2]="RIGHT",t[t.ABOVE=3]="ABOVE",t[t.BELOW=4]="BELOW",t[t.BEGIN=5]="BEGIN",t[t.END=6]="END"}(wt||(wt={}));class At extends L{static get CATEGORY(){return _.StaveModifier}static get Position(){return wt}constructor(){super(),this.width=0,this.x=0,this.padding=10,this.position=wt.ABOVE}getPosition(){return this.position}setPosition(t){return this.position=t,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this}getWidth(){return this.width}setWidth(t){return this.width=t,this}getX(){return this.x}setX(t){return this.x=t,this}placeGlyphOnLine(t,e,i,s=0){t.setYShift(e.getYForLine(null!=i?i:0)-e.getYForGlyphs()+s)}getPadding(t){return void 0!==t&&t<2?0:this.padding}setPadding(t){return this.padding=t,this}setLayoutMetrics(t){return this.layoutMetrics=t,this}getLayoutMetrics(){return this.layoutMetrics}draw(...t){}}!function(t){t[t.SINGLE=1]="SINGLE",t[t.DOUBLE=2]="DOUBLE",t[t.END=3]="END",t[t.REPEAT_BEGIN=4]="REPEAT_BEGIN",t[t.REPEAT_END=5]="REPEAT_END",t[t.REPEAT_BOTH=6]="REPEAT_BOTH",t[t.NONE=7]="NONE"}(Et||(Et={}));class kt extends At{static get CATEGORY(){return _.Barline}static get type(){return Et}static get typeString(){return{single:Et.SINGLE,double:Et.DOUBLE,end:Et.END,repeatBegin:Et.REPEAT_BEGIN,repeatEnd:Et.REPEAT_END,repeatBoth:Et.REPEAT_BOTH,none:Et.NONE}}constructor(t){super(),this.thickness=V.STAVE_LINE_THICKNESS;const e=Et;this.widths={},this.widths[e.SINGLE]=5,this.widths[e.DOUBLE]=5,this.widths[e.END]=5,this.widths[e.REPEAT_BEGIN]=5,this.widths[e.REPEAT_END]=5,this.widths[e.REPEAT_BOTH]=5,this.widths[e.NONE]=5,this.paddings={},this.paddings[e.SINGLE]=0,this.paddings[e.DOUBLE]=0,this.paddings[e.END]=0,this.paddings[e.REPEAT_BEGIN]=15,this.paddings[e.REPEAT_END]=15,this.paddings[e.REPEAT_BOTH]=15,this.paddings[e.NONE]=0,this.layoutMetricsMap={},this.layoutMetricsMap[e.SINGLE]={xMin:0,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.DOUBLE]={xMin:-3,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.END]={xMin:-5,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_END]={xMin:-10,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BEGIN]={xMin:-2,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BOTH]={xMin:-10,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.NONE]={xMin:0,xMax:0,paddingLeft:5,paddingRight:5},this.setPosition(wt.BEGIN),this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?kt.typeString[t]:t,this.setWidth(this.widths[this.type]),this.setPadding(this.paddings[this.type]),this.setLayoutMetrics(this.layoutMetricsMap[this.type]),this}draw(t){const e=t.checkContext();switch(this.setRendered(),this.applyStyle(e),e.openGroup("stavebarline",this.getAttribute("id")),this.type){case Et.SINGLE:this.drawVerticalBar(t,this.x,!1);break;case Et.DOUBLE:this.drawVerticalBar(t,this.x,!0);break;case Et.END:this.drawVerticalEndBar(t,this.x);break;case Et.REPEAT_BEGIN:this.drawRepeatBar(t,this.x,!0),t.getX()!==this.x&&this.drawVerticalBar(t,t.getX());break;case Et.REPEAT_END:this.drawRepeatBar(t,this.x,!1);break;case Et.REPEAT_BOTH:this.drawRepeatBar(t,this.x,!1),this.drawRepeatBar(t,this.x,!0)}e.closeGroup(),this.restoreStyle(e)}drawVerticalBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();i&&s.fillRect(e-3,n,1,a-n),s.fillRect(e,n,1,a-n)}drawVerticalEndBar(t,e){const i=t.checkContext(),s=t.getTopLineTopY(),n=t.getBottomLineBottomY();i.fillRect(e-5,s,1,n-s),i.fillRect(e-2,s,3,n-s)}drawRepeatBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();let o=3;i||(o=-5),s.fillRect(e+o,n,1,a-n),s.fillRect(e-2,n,3,a-n);i?o+=4:o-=4;const r=e+o+1;let h=(t.getNumLines()-1)*t.getSpacingBetweenLines();h=h/2-t.getSpacingBetweenLines()/2;let l=n+h+1;s.beginPath(),s.arc(r,l,2,0,2*Math.PI,!1),s.fill(),l+=t.getSpacingBetweenLines(),s.beginPath(),s.arc(r,l,2,0,2*Math.PI,!1),s.fill()}}class Dt extends vt{static get CATEGORY(){return _.BarNote}constructor(t=Et.SINGLE){super({duration:"b"}),this.metrics={widths:{}};const e=Et;this.metrics.widths={[e.SINGLE]:8,[e.DOUBLE]:12,[e.END]:15,[e.REPEAT_BEGIN]:14,[e.REPEAT_END]:14,[e.REPEAT_BOTH]:18,[e.NONE]:0},this.ignore_ticks=!0,this.setType(t),this.barline=new kt(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?kt.typeString[t]:t,this.setWidth(this.metrics.widths[this.type]),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkContext();!function(...t){Dt.DEBUG&&f("Vex.Flow.BarNote",t)}("Rendering bar line at: ",this.getAbsoluteX()),this.applyStyle(t),t.openGroup("barnote",this.getAttribute("id")),this.barline.setType(this.type),this.barline.setX(this.getAbsoluteX()),this.barline.draw(this.checkStave()),t.closeGroup(),this.restoreStyle(t),this.setRendered()}}Dt.DEBUG=!1;class Mt extends tt{static get CATEGORY(){return _.Bend}static get UP(){return 0}static get DOWN(){return 1}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let s=0;st{const a=t+s,o=i;e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,i),e.quadraticCurveTo(a,o,t+s,n),e.stroke(),e.restore()},c=(t,i,s,n)=>{e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,n),e.quadraticCurveTo(t+s,n,t+s,i),e.stroke(),e.restore()},d=(t,i,s)=>{const n=i+4*s;e.beginPath(),e.moveTo(t,i),e.lineTo(t-4,n),e.lineTo(t+4,n),e.closePath(),e.fill()},b=(t,i)=>{e.save(),e.setFont(this.textFont);const s=t-e.measureText(i).width/2;e.fillText(i,s,h),e.restore()};let m,g=0,_=0;if(null===(t=this.tap)||void 0===t?void 0:t.length){b(i.getModifierStartXY(tt.Position.CENTER,this.index).x,this.tap)}for(let t=0;t0){const e=l.symbolBlocks[t-1];Ot.isSuperscript(e)||(n=s)}a&&n>0&&(x=!0,e.xShift=e.xShift+(n-s),s=n,n=0,l.setEnableKerning(!1)),i||a||(n=0),e.vAlign=x,s+=e.width,g=s}if(l.updateKerningAdjustments(),l.updateOverBarAdjustments(),l.getVertical()===Ct.TOP?(l.setTextLine(e.top_text_line),e.top_text_line+=_):(l.setTextLine(e.text_line+1),e.text_line+=_+1),l.getReportWidth()&&m(b)){const t=b.getGlyphProps().getWidth();l.getHorizontal()===Bt.LEFT?(r=Math.max(t,r),a=Math.max(a,g)+Ot.minPadding):l.getHorizontal()===Bt.RIGHT?(h=Math.max(t,h),o=Math.max(o,g)):(a=Math.max(a,g/2)+Ot.minPadding,o=Math.max(o,g/2),r=Math.max(t/2,r),h=Math.max(t/2,h))}s=0}const l=Math.min(Math.max(o-h,0),Math.max(o-e.right_shift,0)),c=Math.min(Math.max(a-r,0),Math.max(a-e.left_shift,0));return e.left_shift+=c,e.right_shift+=l,!0}constructor(){super(),this.symbolBlocks=[],this.horizontal=Bt.LEFT,this.vertical=Ct.TOP,this.useKerning=!0,this.reportWidth=!0,this.resetFont()}static get TEXT_FONT(){let t="Roboto Slab, Times, serif";return"Petaluma"===V.currentMusicFont().getName()&&(t="PetalumaScript, Arial, sans-serif"),{family:t,size:12,weight:N.NORMAL,style:A.NORMAL}}get superscriptOffset(){return Ot.superscriptOffset*this.textFormatter.fontSizeInPixels}get subscriptOffset(){return Ot.subscriptOffset*this.textFormatter.fontSizeInPixels}setReportWidth(t){return this.reportWidth=t,this}getReportWidth(){return this.reportWidth}updateOverBarAdjustments(){const t=this.symbolBlocks.findIndex((({symbolType:t,glyph:e})=>t===Pt.GLYPH&&void 0!==e&&"csymDiagonalArrangementSlash"===e.code));if(t<0)return;const e=this.symbolBlocks[t].width/4,i=.25*this.textFormatter.fontSizeInPixels;let s=0;for(;s0?this.symbolBlocks[t-1]:void 0;let s=0;e.symbolType===Pt.GLYPH&&void 0!==e.glyph&&e.glyph.code===Ot.glyphs.over.code&&(s+=e.glyph.metrics.x_shift),void 0!==i&&i.symbolType===Pt.GLYPH&&void 0!==i.glyph&&i.glyph.code===Ot.glyphs.over.code&&(s+=i.glyph.metrics.x_shift);let n=!1,a=!1;void 0!==i&&i.symbolType===Pt.TEXT&&(n=Ot.upperKerningText.some((t=>t===i.text[i.text.length-1])),a=Ot.lowerKerningText.some((t=>t===i.text[i.text.length-1])));const o=Ot.kerningOffset*this.textFormatter.fontSizeInPixels;return n&&e.symbolModifier===Nt.SUPERSCRIPT&&(s+=o),a&&e.symbolType===Pt.TEXT&&(e.text[0]>="a"&&e.text[0]<="z"&&(s+=o/2),Ot.upperKerningText.some((t=>t===(null==i?void 0:i.text[i.text.length-1])))&&(s+=o/2)),s}getSymbolBlock(t={}){var e,i,s;const n=null!==(e=t.symbolType)&&void 0!==e?e:Pt.TEXT,a={text:null!==(i=t.text)&&void 0!==i?i:"",symbolType:n,symbolModifier:null!==(s=t.symbolModifier)&&void 0!==s?s:Nt.NONE,xShift:0,yShift:0,vAlign:!1,width:0};if(n===Pt.GLYPH&&"string"==typeof t.glyph){const e=Ot.glyphs[t.glyph],i=20;a.glyph=new Z(e.code,i,{category:"chordSymbol"})}else n===Pt.TEXT?a.width=this.textFormatter.getWidthForTextInEm(a.text):n===Pt.LINE&&(a.width=t.width);return a}addSymbolBlock(t){return this.symbolBlocks.push(this.getSymbolBlock(t)),this}addText(t,e={}){const i=Pt.TEXT;return this.addSymbolBlock(Object.assign(Object.assign({},e),{text:t,symbolType:i}))}addTextSuperscript(t){const e=Pt.TEXT,i=Nt.SUPERSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addTextSubscript(t){const e=Pt.TEXT,i=Nt.SUBSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addGlyphSuperscript(t){const e=Pt.GLYPH,i=Nt.SUPERSCRIPT;return this.addSymbolBlock({glyph:t,symbolType:e,symbolModifier:i})}addGlyph(t,e={}){const i=Pt.GLYPH;return this.addSymbolBlock(Object.assign(Object.assign({},e),{glyph:t,symbolType:i}))}addGlyphOrText(t,e={}){let i="";for(let s=0;s0&&(this.addText(i,e),i=""),this.addGlyph(n,e)):i+=n}return i.length>0&&this.addText(i,e),this}addLine(t,e={}){const i=Pt.LINE;return this.addSymbolBlock(Object.assign(Object.assign({},e),{symbolType:i,width:t}))}setFont(t,e,i,s){return super.setFont(t,e,i,s),this.textFormatter=lt.create(this.textFont),this}setEnableKerning(t){return this.useKerning=t,this}setVertical(t){return this.vertical="string"==typeof t?Ot.VerticalJustifyString[t]:t,this}getVertical(){return this.vertical}setHorizontal(t){return this.horizontal="string"==typeof t?Ot.HorizontalJustifyString[t]:t,this}getHorizontal(){return this.horizontal}getWidth(){let t=0;return this.symbolBlocks.forEach((e=>{t+=e.vAlign?0:e.width})),t}getYOffsetForText(t){var e;let i=0,s=0;for(s=0;s0?i/n*-1:0}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),t.save(),this.applyStyle(),t.openGroup("chordsymbol",this.getAttribute("id"));const i=e.getModifierStartXY(tt.Position.ABOVE,this.index);let s;t.setFont(this.textFont);const n=e.hasStem(),a=e.checkStave();if(this.vertical===Ct.BOTTOM){if(s=a.getYForBottomText(this.text_line+V.TEXT_HEIGHT_OFFSET_HACK),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines(),n=1===e.getStemDirection()?t.baseY:t.topY;s=Math.max(s,n+i*(this.text_line+2))}}else{const t=Math.min(...e.getYs());if(s=Math.min(a.getYForTopText(this.text_line),t-10),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines();s=Math.min(s,t.topY-5-i*this.text_line)}}let o=i.x;o=this.horizontal===Bt.LEFT?i.x:this.horizontal===Bt.RIGHT?i.x+this.getWidth():this.horizontal===Bt.CENTER?i.x-this.getWidth()/2:e.getStemX()-this.getWidth()/2,Ft("Rendering ChordSymbol: ",this.textFormatter,o,s),this.symbolBlocks.forEach((e=>{const i=Ot.isSuperscript(e),n=Ot.isSubscript(e);let a=s;if(Ft("shift was ",e.xShift,e.yShift),Ft("curY pre sub ",a),i&&(a+=this.superscriptOffset),n&&(a+=this.subscriptOffset),Ft("curY sup/sub ",a),e.symbolType===Pt.TEXT){if((i||n)&&(t.save(),this.textFont)){const{family:e,size:i,weight:s,style:n}=this.textFont,a=F.scaleSize(i,Ot.superSubRatio);t.setFont(e,a,s,n)}Ft("Rendering Text: ",e.text,o+e.xShift,a+e.yShift),t.fillText(e.text,o+e.xShift,a+e.yShift),(i||n)&&t.restore()}else e.symbolType===Pt.GLYPH&&e.glyph?(a+=e.yShift,Ft("Rendering Glyph: ",e.glyph.code,o+e.xShift,a),e.glyph.render(t,o+e.xShift,a)):e.symbolType===Pt.LINE&&(Ft("Rendering Line : ",e.width,o,a),t.beginPath(),t.setLineWidth(1),t.moveTo(o,s),t.lineTo(o+e.width,a),t.stroke());o+=e.width,e.vAlign&&(o+=e.xShift)})),t.closeGroup(),this.restoreStyle(),t.restore()}}Ot.DEBUG=!1,Ot.HorizontalJustify=Bt,Ot.HorizontalJustifyString={left:Bt.LEFT,right:Bt.RIGHT,center:Bt.CENTER,centerStem:Bt.CENTER_STEM},Ot.VerticalJustify=Ct,Ot.VerticalJustifyString={top:Ct.TOP,above:Ct.TOP,below:Ct.BOTTOM,bottom:Ct.BOTTOM},Ot.glyphs={diminished:{code:"csymDiminished"},dim:{code:"csymDiminished"},halfDiminished:{code:"csymHalfDiminished"},"+":{code:"csymAugmented"},augmented:{code:"csymAugmented"},majorSeventh:{code:"csymMajorSeventh"},minor:{code:"csymMinor"},"-":{code:"csymMinor"},"(":{code:"csymParensLeftTall"},leftParen:{code:"csymParensLeftTall"},")":{code:"csymParensRightTall"},rightParen:{code:"csymParensRightTall"},leftBracket:{code:"csymBracketLeftTall"},rightBracket:{code:"csymBracketRightTall"},leftParenTall:{code:"csymParensLeftVeryTall"},rightParenTall:{code:"csymParensRightVeryTall"},"/":{code:"csymDiagonalArrangementSlash"},over:{code:"csymDiagonalArrangementSlash"},"#":{code:"accidentalSharp"},b:{code:"accidentalFlat"}},Ot.symbolTypes=Pt,Ot.symbolModifiers=Nt,Ot.noFormat=!1;class Rt extends tt{static get CATEGORY(){return _.Dot}static getDots(t){return t.getModifiersByType(Rt.CATEGORY)}static buildAndAttach(t,e){for(const i of t)if(null==e?void 0:e.all)for(let t=0;te.line-t.line));let a=i,o=0,r=null,h=null,l=null,c=0;for(let t=0;to?a:o,r=b,h=i}return e.right_shift+=o,!0}constructor(){super(),this.position=tt.Position.RIGHT,this.radius=2,this.setWidth(5),this.dot_shiftY=0}setNote(t){return this.note=t,h(t)&&(this.radius*=.5,this.setWidth(3)),this}setDotShiftY(t){return this.dot_shiftY=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.checkStave().getSpacingBetweenLines(),s=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0});g(e)&&(s.y=e.getStemExtents().baseY);const n=s.x+this.x_shift+this.width-this.radius,a=s.y+this.y_shift+this.dot_shiftY*i;t.beginPath(),t.arc(n,a,this.radius,0,2*Math.PI,!1),t.fill()}}class Lt extends tt{static get CATEGORY(){return _.FretHandFinger}static format(t,e){const{left_shift:i,right_shift:s}=e;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let h=0;he.line-t.line));let h=0,l=0,c=0,d=0,b=null,m=null;for(let t=0;tc?e:c):o===tt.Position.RIGHT&&(g.setXShift(l),e=r+p,d=e>d?e:d),b=_,m=a}return e.left_shift+=c,e.right_shift+=d,!0}static easyScoreHook({fingerings:t}={},e,i){null==t||t.split(",").map((t=>{const e=t.trim().split("."),s={number:e[0]};return e[1]&&(s.position=e[1]),i.getFactory().Fingering(s)})).map(((t,i)=>e.addModifier(t,i)))}constructor(t){super(),this.finger=t,this.width=7,this.position=tt.Position.LEFT,this.x_shift=0,this.y_shift=0,this.x_offset=0,this.y_offset=0,this.resetFont()}setFretHandFinger(t){return this.finger=t,this}getFretHandFinger(){return this.finger}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=i.x+this.x_shift+this.x_offset,n=i.y+this.y_shift+this.y_offset+5;switch(this.position){case tt.Position.ABOVE:s-=4,n-=12;break;case tt.Position.BELOW:s-=2,n+=10;break;case tt.Position.LEFT:s-=this.width;break;case tt.Position.RIGHT:s+=1;break;default:throw new x("InvalidPosition",`The position ${this.position} does not exist`)}t.save(),t.setFont(this.textFont),t.fillText(""+this.finger,s,n),t.restore()}}Lt.TEXT_FONT={family:F.SANS_SERIF,size:9,weight:N.BOLD,style:A.NORMAL};class Wt extends vt{static get CATEGORY(){return _.NoteHead}constructor(t){super(t),this.custom_glyph=!1,this.stem_up_x_offset=0,this.stem_down_x_offset=0,this.index=t.index,this.x=t.x||0,this.y=t.y||0,t.note_type&&(this.noteType=t.note_type),this.displaced=t.displaced||!1,this.stem_direction=t.stem_direction||nt.UP,this.line=t.line||0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),(this.line>5||this.line<0)&&this.glyphProps.ledger_code_head&&(this.glyphProps.code_head=this.glyphProps.ledger_code_head),this.glyph_code=this.glyphProps.code_head,this.x_shift=t.x_shift||0,t.custom_glyph_code&&(this.custom_glyph=!0,this.glyph_code=t.custom_glyph_code,this.stem_up_x_offset=t.stem_up_x_offset||0,this.stem_down_x_offset=t.stem_down_x_offset||0),this.setStyle(t.style),this.slashed=t.slashed||!1,this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE}),this.setWidth(!this.custom_glyph||this.glyph_code.startsWith("noteheadSlashed")||this.glyph_code.startsWith("noteheadCircled")?this.glyphProps.getWidth(this.render_options.glyph_font_scale):Z.getWidth(this.glyph_code,this.render_options.glyph_font_scale))}getWidth(){return this.width}isDisplaced(){return!0===this.displaced}setX(t){return this.x=t,this}getY(){return this.y}setY(t){return this.y=t,this}getLine(){return this.line}setLine(t){return this.line=t,this}getAbsoluteX(){const t=this.preFormatted?super.getAbsoluteX():this.x,e=nt.WIDTH/2,i=V.currentMusicFont(),s=i.lookupMetric("notehead.shiftX",0)*this.stem_direction,n=i.lookupMetric("noteHead.displacedShiftX",0)*this.stem_direction;return t+s+(this.displaced?(this.width-e)*this.stem_direction+n:0)}getBoundingBox(){const t=this.checkStave().getSpacingBetweenLines(),e=t/2,i=this.y-e;return new C(this.getAbsoluteX(),i,this.width,t)}setStave(t){const e=this.getLine();return this.stave=t,this.stave&&(this.setY(this.stave.getYForNote(e)),this.setContext(this.stave.getContext())),this}preFormat(){if(this.preFormatted)return this;const t=this.getWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx;return this.setWidth(t),this.preFormatted=!0,this}draw(){const t=this.checkContext();this.setRendered();let e=this.getAbsoluteX();this.custom_glyph&&(e+=this.stem_direction===nt.UP?this.stem_up_x_offset+(this.glyphProps.stem?this.glyphProps.getWidth(this.render_options.glyph_font_scale)-this.width:0):this.stem_down_x_offset);const i=this.y;!function(...t){Wt.DEBUG&&f("Vex.Flow.NoteHead",t)}("Drawing note head '",this.noteType,this.duration,"' at",e,i);const s=this.stem_direction,n=this.render_options.glyph_font_scale,a=`${this.glyph_code}Stem${s===nt.UP?"Up":"Down"}`;if("s"===this.noteType){const n=this.checkStave().getSpacingBetweenLines();!function(t,e,i,s,n,a){const o=V.SLASH_NOTEHEAD_WIDTH;t.save(),t.setLineWidth(V.STEM_WIDTH);let r=!1;if(V.durationToNumber(e)>2&&(r=!0),r||(i-=V.STEM_WIDTH/2*n),t.beginPath(),t.moveTo(i,s+a),t.lineTo(i,s+1),t.lineTo(i+o,s-a),t.lineTo(i+o,s),t.lineTo(i,s+a),t.closePath(),r?t.fill():t.stroke(),V.durationToFraction(e).equals(.5)){const e=[-3,-1,o+1,o+3];for(let n=0;nt.getCategory()===_.Dot&&0===t.getIndex())).length!==r.note.getModifiers().filter((t=>t.getCategory()===_.Dot&&0===t.getIndex())).length||t<1&&t>0||JSON.stringify(a.note.getStyle())!==JSON.stringify(r.note.getStyle())?(d=c+2,a.stemDirection===r.stemDirection?a.note.setXShift(d):r.note.setXShift(d)):a.note.voice!==r.note.voice&&a.stemDirection===r.stemDirection&&(a.line!=r.line?(d=c+2,a.note.setXShift(d)):1===r.stemDirection&&(r.stemDirection=-1,r.note.setStemDirection(-1)))}else t<1?(d=c+2,a.note.durationt.postFormat())),!0)}constructor(t){var e,i,s;super(t),this.minLine=0,this.maxLine=0,this.sortedKeyProps=[],this.ledgerLineStyle={},this.clef=null!==(e=t.clef)&&void 0!==e?e:"treble",this.octave_shift=null!==(i=t.octave_shift)&&void 0!==i?i:0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),this.displaced=!1,this.dot_shiftY=0,this.use_default_head_x=!1,this._noteHeads=[],this.modifiers=[],this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE,stroke_px:t.stroke_px||Ut.LEDGER_LINE_OFFSET}),this.calculateKeyProps(),this.buildStem(),t.auto_stem?this.autoStem():this.setStemDirection(null!==(s=t.stem_direction)&&void 0!==s?s:nt.UP),this.reset(),this.buildFlag()}reset(){super.reset();const t=this._noteHeads.map((t=>t.getStyle()));this.buildNoteHeads(),this._noteHeads.forEach(((e,i)=>{const s=t[i];s&&e.setStyle(s)}));const e=this.stave;return e&&this.setStave(e),this.calcNoteDisplacements(),this}setBeam(t){return this.beam=t,this.calcNoteDisplacements(),this.stem&&this.stem.setExtension(this.getStemExtension()),this}buildStem(){return this.setStem(new nt({hide:!!this.isRest()})),this}buildNoteHeads(){this._noteHeads=[];const t=this.getStemDirection(),e=this.getKeys();let i,s,n,a,o,r=!1;t===nt.UP?(n=0,a=e.length,o=1):(n=e.length-1,a=-1,o=-1);for(let e=n;e!==a;e+=o){const n=this.sortedKeyProps[e].keyProps,a=n.line;void 0===i?i=a:(s=Math.abs(i-a),0===s||.5===s?r=!r:(r=!1,this.use_default_head_x=!0)),i=a;const o=new Wt({duration:this.duration,note_type:this.noteType,displaced:r,stem_direction:t,custom_glyph_code:n.code,glyph_font_scale:this.render_options.glyph_font_scale,x_shift:n.shift_right,stem_up_x_offset:n.stem_up_x_offset,stem_down_x_offset:n.stem_down_x_offset,line:n.line});this.addChildElement(o),this._noteHeads[this.sortedKeyProps[e].index]=o}return this._noteHeads}autoStem(){this.setStemDirection(this.calculateOptimalStemDirection())}calculateOptimalStemDirection(){this.minLine=this.sortedKeyProps[0].keyProps.line,this.maxLine=this.sortedKeyProps[this.keyProps.length-1].keyProps.line;return(this.minLine+this.maxLine)/2<3?nt.UP:nt.DOWN}calculateKeyProps(){let t;for(let e=0;e0&&(this.keyProps[e-1].displaced=!0)),t=a,this.keyProps.push(n)}this.keyProps.forEach(((t,e)=>{this.sortedKeyProps.push({keyProps:t,index:e})})),this.sortedKeyProps.sort(((t,e)=>t.keyProps.line-e.keyProps.line))}getBoundingBox(){var t,e;if(!this.preFormatted)throw new x("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const{width:i,modLeftPx:s,leftDisplacedHeadPx:n}=this.getMetrics(),a=this.getAbsoluteX()-s-n;let o=0,r=0;const h=(null!==(e=null===(t=this.getStave())||void 0===t?void 0:t.getSpacingBetweenLines())&&void 0!==e?e:0)/2,l=2*h;if(this.isRest()){const t=this.ys[0],e=V.durationToFraction(this.duration);e.equals(1)||e.equals(2)?(o=t-h,r=t+h):(o=t-this.glyphProps.line_above*l,r=t+this.glyphProps.line_below*l)}else if(this.glyphProps.stem){const t=this.getStemExtents();t.baseY+=h*this.getStemDirection(),o=Math.min(t.topY,t.baseY),r=Math.max(t.topY,t.baseY)}else{o=0,r=0;for(let t=0;te&&(e=s):s1}hasStem(){return this.glyphProps.stem}hasFlag(){return super.hasFlag()&&!this.isRest()}getStemX(){return"r"===this.noteType?this.getCenterGlyphX():super.getStemX()+(this.stem_direction?nt.WIDTH/(2*-this.stem_direction):0)}getYForTopText(t){const e=this.getStemExtents();return Math.min(this.checkStave().getYForTopText(t),e.topY-this.render_options.annotation_spacing*(t+1))}getYForBottomText(t){const e=this.getStemExtents();return Math.max(this.checkStave().getYForTopText(t),e.baseY+this.render_options.annotation_spacing*t)}setStave(t){super.setStave(t);const e=this._noteHeads.map((e=>(e.setStave(t),e.getY())));if(this.setYs(e),this.stem){const{y_top:t,y_bottom:e}=this.getNoteHeadBounds();this.stem.setYBounds(t,e)}return this}isDisplaced(){return this.displaced}setNoteDisplaced(t){return this.displaced=t,this}getTieRightX(){let t=this.getAbsoluteX();return t+=this.getGlyphWidth()+this.x_shift+this.rightDisplacedHeadPx,this.modifierContext&&(t+=this.modifierContext.getRightShift()),t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.x_shift-this.leftDisplacedHeadPx,t}getLineForRest(){let t=this.keyProps[0].line;if(this.keyProps.length>1){const e=this.keyProps[this.keyProps.length-1].line;t=S(Math.max(t,e),Math.min(t,e))}return t}getModifierStartXY(t,e,i={}){var s,n;if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new x("NoYValues","No Y-Values calculated for this note.");const{ABOVE:a,BELOW:o,LEFT:r,RIGHT:h}=tt.Position;let l=0;return t===r?l=-2:t===h?(l=this.getGlyphWidth()+this.x_shift+2,this.stem_direction===nt.UP&&this.hasFlag()&&(i.forceFlagRight||((t,e)=>e===(t.getStemDirection()===nt.UP?t.keyProps.length-1:0))(this,e))&&(l+=null!==(n=null===(s=null==this?void 0:this.flag)||void 0===s?void 0:s.getMetrics().width)&&void 0!==n?n:0)):t!==o&&t!==a||(l=this.getGlyphWidth()/2),{x:this.getAbsoluteX()+l,y:this.ys[e]}}setStyle(t){return super.setGroupStyle(t)}setStemStyle(t){const e=this.getStem();return e&&e.setStyle(t),this}getStemStyle(){var t;return null===(t=this.stem)||void 0===t?void 0:t.getStyle()}setLedgerLineStyle(t){this.ledgerLineStyle=t}getLedgerLineStyle(){return this.ledgerLineStyle}setFlagStyle(t){var e;null===(e=this.flag)||void 0===e||e.setStyle(t)}getFlagStyle(){var t;return null===(t=this.flag)||void 0===t?void 0:t.getStyle()}setKeyStyle(t,e){return this._noteHeads[t].setStyle(e),this}setKeyLine(t,e){return this.keyProps[t].line=e,this.reset(),this}getKeyLine(t){return this.keyProps[t].line}getVoiceShiftWidth(){return this.getGlyphWidth()*(this.displaced?2:1)}calcNoteDisplacements(){this.setLeftDisplacedHeadPx(this.displaced&&this.stem_direction===nt.DOWN?this.getGlyphWidth():0),this.setRightDisplacedHeadPx(!this.hasFlag()&&this.displaced&&this.stem_direction===nt.UP?this.getGlyphWidth():0)}preFormat(){if(this.preFormatted)return;let t=0;this.modifierContext&&(this.modifierContext.preFormat(),0===this.modifierContext.getWidth()&&(t=Ut.minNoteheadPadding));let e=this.getGlyphWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx+t;this.shouldDrawFlag()&&this.stem_direction===nt.UP&&(e+=this.getGlyphWidth()),this.setWidth(e),this.preFormatted=!0}getNoteHeadBounds(){let t,e,i,s,n=1/0,a=-1/0,o=this.checkStave().getNumLines(),r=1,h=o,l=r;return this._noteHeads.forEach((c=>{const d=c.getLine(),b=c.getY();n=Math.min(b,n),a=Math.max(b,a),void 0===e&&c.isDisplaced()&&(e=c.getAbsoluteX()),void 0!==t||c.isDisplaced()||(t=c.getAbsoluteX()),o=Math.max(d,o),r=Math.min(d,r),c.isDisplaced()?(i=void 0===i?d:Math.max(d,i),s=void 0===s?d:Math.min(d,s)):(h=Math.max(d,h),l=Math.min(d,l))}),this),{y_top:n,y_bottom:a,displaced_x:e,non_displaced_x:t,highest_line:o,lowest_line:r,highest_displaced_line:i,lowest_displaced_line:s,highest_non_displaced_line:h,lowest_non_displaced_line:l}}getNoteHeadBeginX(){return this.getAbsoluteX()+this.x_shift}getNoteHeadEndX(){return this.getNoteHeadBeginX()+this.getGlyphWidth()}get noteHeads(){return this._noteHeads.slice()}get note_heads(){return console.warn("StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.","This accessor will be removed in VexFlow 5.0."),this.noteHeads}drawLedgerLines(){const t=this.checkStave(),{glyphProps:e,render_options:{stroke_px:i}}=this,s=this.checkContext(),n=e.getWidth()+2*i,a=2*(e.getWidth()+i)-nt.WIDTH/2;if(this.isRest())return;if(!s)throw new x("NoCanvasContext","Can't draw without a canvas context.");const{highest_line:o,lowest_line:r,highest_displaced_line:h,highest_non_displaced_line:l,lowest_displaced_line:c,lowest_non_displaced_line:d,displaced_x:b,non_displaced_x:m}=this.getNoteHeadBounds();if(o<6&&r>0)return;const g=Math.min(null!=b?b:0,null!=m?m:0),_=(t,e,o)=>{let r;r=o&&e?g-i:e?(null!=m?m:0)-i:(null!=b?b:0)-i;const h=e&&o?a:n;s.beginPath(),s.moveTo(r,t),s.lineTo(r+h,t),s.stroke()},u=Object.assign(Object.assign({},t.getDefaultLedgerLineStyle()),this.getLedgerLineStyle());this.applyStyle(s,u);for(let e=6;e<=o;++e){const i=void 0!==m&&e<=l,s=void 0!==h&&e<=h;_(t.getYForNote(e),i,s)}for(let e=0;e>=r;--e){const i=void 0!==m&&e>=d,s=void 0!==c&&e>=c;_(t.getYForNote(e),i,s)}this.restoreStyle(s,u)}drawModifiers(t){const e=this.checkContext();for(let i=0;i{e.applyStyle(t),t.openGroup("notehead",e.getAttribute("id"),{pointerBBox:!0}),e.setContext(t).draw(),this.drawModifiers(e),t.closeGroup(),e.restoreStyle(t)}))}drawStem(t){const e=this.checkContext();t&&this.setStem(new nt(t)),this.shouldDrawFlag()&&this.stem&&this.stem.adjustHeightForFlag(),this.stem&&this.stem.setContext(e).draw()}getStaveNoteScale(){return 1}getStemExtension(){const t=super.getStemExtension();if(!this.glyphProps.stem)return t;const e=this.getStemDirection();if(e!==this.calculateOptimalStemDirection())return t;let i;i=e===nt.UP?3-this.maxLine:this.minLine-3;const s=i-3.5;if(s<=0)return t;const n=this.getStave();let a=10;return null!=n&&(a=n.getSpacingBetweenLines()),t+s*a}draw(){if(!1===this.render_options.draw)return;if(0===this.ys.length)throw new x("NoYValues","Can't draw note without Y values.");const t=this.checkContext(),e=this.getNoteHeadBeginX(),i=this.hasStem()&&!this.beam;if(this._noteHeads.forEach((t=>t.setX(e))),this.stem){const t=this.getStemX();this.stem.setNoteHeadXBounds(t,t)}!function(...t){Ut.DEBUG&&f("Vex.Flow.StaveNote",t)}("Rendering ",this.isChord()?"chord :":"note :",this.keys),this.applyStyle(),t.openGroup("stavenote",this.getAttribute("id")),this.drawLedgerLines(),i&&this.drawStem(),this.drawNoteHeads(),this.drawFlag(),t.closeGroup(),this.restoreStyle(),this.setRendered()}}Ut.DEBUG=!1;class Yt extends L{static get CATEGORY(){return _.StaveTie}constructor(t,e){super(),this.setNotes(t),this.text=e,this.render_options={cp1:8,cp2:12,text_shift_x:0,first_x_shift:0,last_x_shift:0,y_shift:7,tie_spacing:0},this.resetFont()}setDirection(t){return this.direction=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new x("BadArguments","Tie needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new x("BadArguments","Tied notes must have same number of indices.");return this.notes=t,this}isPartial(){return!this.notes.first_note||!this.notes.last_note}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new x("BadArguments","No Y-values to render");const e=this.checkContext();let i=this.render_options.cp1,s=this.render_options.cp2;Math.abs(t.last_x_px-t.first_x_px)<10&&(i=2,s=8);const n=this.render_options.first_x_shift,a=this.render_options.last_x_shift,o=this.render_options.y_shift*t.direction,r=this.notes.first_indices,h=this.notes.last_indices;this.applyStyle(),e.openGroup("stavetie",this.getAttribute("id"));for(let l=0;lMath.pow(this.options.softmaxFactor,e.getTicks().value()/t)))),this.expTicksUsed}softmax(t){this.expTicksUsed||(this.expTicksUsed=this.reCalculateExpTicksUsed());const e=this.ticksUsed.value();return(t=>Math.pow(this.options.softmaxFactor,t/e))(t)/this.expTicksUsed}addTickable(t){if(!t.shouldIgnoreTicks()){const e=t.getTicks();if(this.ticksUsed.add(e),this.expTicksUsed=0,(this.mode===zt.STRICT||this.mode===zt.FULL)&&this.ticksUsed.greaterThan(this.totalTicks))throw this.ticksUsed.subtract(e),new x("BadArgument","Too many ticks.");e.lessThan(this.smallestTickCount)&&(this.smallestTickCount=e.clone()),this.resolutionMultiplier=this.ticksUsed.denominator,this.totalTicks.add(0,this.ticksUsed.denominator)}return this.tickables.push(t),t.setVoice(this),this}addTickables(t){for(let e=0;e{e.getStave()||e.setStave(t)})),this.preFormatted=!0,this}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}draw(t=this.checkContext(),e){let i;e=null!=e?e:this.stave,this.setRendered();for(let s=0;s1){const e=new Le(t);e.render_options.beam_width=3,e.render_options.partial_beam_length=4,this.beams.push(e)}return this}setWidth(t){return this.width=t,this}getWidth(){return this.width+Ut.minNoteheadPadding}getGraceNotes(){return this.grace_notes}draw(){const t=this.checkContext(),e=this.checkAttachedNote();if(this.setRendered(),function(...t){Xt.DEBUG&&f("Vex.Flow.GraceNoteGroup",t)}("Drawing grace note group for:",e),this.alignSubNotesWithNote(this.getGraceNotes(),e),this.grace_notes.forEach((e=>e.setContext(t).draw())),this.beams.forEach((e=>e.setContext(t).draw())),this.show_slur){const i=b(e),s=i?Yt:Ht;this.slur=new s({last_note:this.grace_notes[0],first_note:e,first_indices:[0],last_indices:[0]}),this.slur.render_options.cp2=12,this.slur.render_options.y_shift=(i?7:5)+this.render_options.slur_y_shift,this.slur.setContext(t).draw()}}}Xt.DEBUG=!1;class Vt extends tt{static get CATEGORY(){return _.NoteSubGroup}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let e=0;e{t.setIgnoreTicks(!1)})),this.width=0,this.formatter=new Ae,this.voice=new jt({num_beats:4,beat_value:4,resolution:V.RESOLUTION}).setStrict(!1),this.voice.addTickables(this.subNotes)}preFormat(){this.preFormatted||(this.formatter.joinVoices([this.voice]).format([this.voice],0),this.setWidth(this.formatter.getMinTotalWidth()),this.preFormatted=!0)}setWidth(t){return this.width=t,this}getWidth(){return this.width}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),this.alignSubNotesWithNote(this.subNotes,e),this.subNotes.forEach((e=>e.setContext(t).drawWithStyle()))}}class Kt extends tt{static get CATEGORY(){return _.Ornament}static get minPadding(){return V.currentMusicFont().lookupMetric("noteHead.minPadding")}static format(t,e){if(!t||0===t.length)return!1;let i=0,s=e.right_shift,n=e.left_shift,a=0;for(let o=0;o=0&&(r.x_shift+=s+2),Kt.ornamentAttack.indexOf(r.type)>=0&&(r.x_shift-=n+2),r.reportedWidth&&r.x_shift<0?n+=r.reportedWidth:r.reportedWidth&&r.x_shift>=0?s+=r.reportedWidth+Kt.minPadding:i=Math.max(r.getWidth(),i),Kt.ornamentArticulation.indexOf(r.type)>=0){p(r.note,"NoAttachedNote").getLineNumber()>=3||r.getPosition()===tt.Position.ABOVE?(e.top_text_line+=h,r.y_shift+=a,a-=r.glyph.bbox.getH()):(e.text_line+=h,r.y_shift+=a,a+=r.glyph.bbox.getH())}else r.getPosition()===tt.Position.ABOVE?(r.setTextLine(e.top_text_line),e.top_text_line+=h):(r.setTextLine(e.text_line),e.text_line+=h)}return e.left_shift=n+i/2,e.right_shift=s+i/2,!0}static get ornamentNoteTransition(){return["flip","jazzTurn","smear"]}static get ornamentAttack(){return["scoop"]}static get ornamentAlignWithNoteHead(){return["doit","fall","fallLong","doitLong","bend","plungerClosed","plungerOpen","scoop"]}static get ornamentRelease(){return["doit","fall","fallLong","doitLong","jazzTurn","smear","flip"]}static get ornamentArticulation(){return["bend","plungerClosed","plungerOpen"]}getMetrics(){const t=V.currentMusicFont().getMetrics().ornament;if(!t)throw new x("BadMetrics","ornament missing");return t[this.ornament.code]}constructor(t){super(),this.type=t,this.delayed=!1,this.render_options={font_scale:V.NOTATION_FONT_SCALE,accidentalLowerPadding:3,accidentalUpperPadding:3},this.ornament=V.ornamentCodes(this.type);const e=this.getMetrics();if(this.adjustForStemDirection=!1,this.reportedWidth=e&&e.reportedWidth?e.reportedWidth:0,this.stemUpYOffset=e&&e.stemUpYOffset?e.stemUpYOffset:0,this.ornamentAlignWithNoteHead=Kt.ornamentAlignWithNoteHead.indexOf(this.type)>=0,!this.ornament)throw new x("ArgumentError",`Ornament not found: '${this.type}'`);this.x_shift=e?e.xOffset:0,this.y_shift=e?e.yOffset:0,this.glyph=new Z(this.ornament.code,this.render_options.font_scale,{category:`ornament.${this.ornament.code}`}),Kt.ornamentNoteTransition.indexOf(this.type)>=0&&(this.delayed=!0),e||this.glyph.setOrigin(.5,1)}setDelayed(t){return this.delayed=t,this}setUpperAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalUpper=new Z(V.accidentalCodes(t).code,e),this.accidentalUpper.setOrigin(.5,1),this}setLowerAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalLower=new Z(V.accidentalCodes(t).code,e),this.accidentalLower.setOrigin(.5,1),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getStemDirection(),s=e.checkStave();this.applyStyle(),t.openGroup("ornament",this.getAttribute("id"));const n=e.checkStem().getExtents();let a=i===nt.DOWN?n.baseY:n.topY;g(e)&&(e.hasStem()?i===nt.DOWN&&(a=s.getYForTopText(this.text_line)):a=s.getYForTopText(this.text_line));const o=i===nt.DOWN,r=s.getSpacingBetweenLines();let h=1;!o&&e.hasBeam()&&(h+=.5);const l=a-r*(this.text_line+h),c=e.getModifierStartXY(this.position,this.index);let d=c.x,b=this.ornamentAlignWithNoteHead?c.y:Math.min(s.getYForTopText(this.text_line),l);if(b+=this.y_shift,this.delayed){let t=0;const i=d-s.getNoteStartX();if(void 0!==this.delayXShift)t=this.delayXShift;else{t+=this.glyph.getMetrics().width/2;const n=e.getVoice().getTickables(),a=n.indexOf(e),o=a+1=0&&(b=e.checkStave().getBoundingBox().getY()+40),this.glyph.render(t,d+this.x_shift,b),this.accidentalUpper&&(b-=this.glyph.getMetrics().height+this.render_options.accidentalUpperPadding,this.accidentalUpper.render(t,d,b)),t.closeGroup(),this.restoreStyle()}}Kt.DEBUG=!1;class $t extends tt{static get CATEGORY(){return _.Parenthesis}static buildAndAttach(t){for(const e of t)for(let t=0;th+n.width?s:h+n.width),o===J.LEFT&&(h=a.getLeftParenthesisPx(r),i=i>h+n.width?i:h+n.width),n.setXShift(h)}return e.left_shift+=i,e.right_shift+=s,!0}constructor(t){var e;super(),this.position=null!=t?t:tt.Position.LEFT,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width"))}setNote(t){var e,i;return this.note=t,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width")),h(t)&&(this.point=null!==(i=V.currentMusicFont().lookupMetric("parenthesis.gracenote.point"))&&void 0!==i?i:vt.getPoint("gracenote"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.gracenote.width"))),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0}),s=i.x+this.x_shift,n=i.y+this.y_shift;this.position==tt.Position.RIGHT?Z.renderGlyph(t,s+1,n,this.point,"noteheadParenthesisRight",{category:"noteHead.standard.noteheadParenthesisRight"}):this.position==tt.Position.LEFT&&Z.renderGlyph(t,s-2,n,this.point,"noteheadParenthesisLeft",{category:"noteHead.standard.noteheadParenthesisLeft"})}}function Jt(t){if(!t)return!1;const e=u();return"function"==typeof e.HTMLCanvasElement&&t instanceof e.HTMLCanvasElement||"function"==typeof t.getContext&&"function"==typeof t.toDataURL}function qt(t){if(!t)return!1;const e=u();return"function"==typeof e.HTMLDivElement&&t instanceof e.HTMLDivElement||"function"==typeof t.appendChild&&"object"==typeof t.style}class Qt extends yt{static get WIDTH(){return 600}static get HEIGHT(){return 400}static get CANVAS_BROWSER_SIZE_LIMIT(){return 32767}static sanitizeCanvasDims(t,e){const i=this.CANVAS_BROWSER_SIZE_LIMIT;return Math.max(t,e)>i&&(y("Canvas dimensions exceed browser limit. Cropping to "+i),t>i&&(t=i),e>i&&(e=i)),[t,e]}constructor(t){super(),this.textHeight=0,this.context2D=t,t.canvas?this.canvas=t.canvas:this.canvas={width:Qt.WIDTH,height:Qt.HEIGHT}}clear(){this.context2D.clearRect(0,0,this.canvas.width,this.canvas.height)}openGroup(t,e,i){}closeGroup(){}add(t){}setFillStyle(t){return this.context2D.fillStyle=t,this}setBackgroundFillStyle(t){return this}setStrokeStyle(t){return this.context2D.strokeStyle=t,this}setShadowColor(t){return this.context2D.shadowColor=t,this}setShadowBlur(t){const e=this.context2D.getTransform(),i=Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c+e.d*e.d);return this.context2D.shadowBlur=i*t,this}setLineWidth(t){return this.context2D.lineWidth=t,this}setLineCap(t){return this.context2D.lineCap=t,this}setLineDash(t){return this.context2D.setLineDash(t),this}scale(t,e){return this.context2D.scale(t,e),this}resize(t,e,i){var s;const n=this.context2D.canvas,a=null!==(s=null!=i?i:u().devicePixelRatio)&&void 0!==s?s:1;return[t,e]=Qt.sanitizeCanvasDims(t*a,e*a),t=t/a|0,e=e/a|0,n.width=t*a,n.height=e*a,Jt(n)&&(n.style.width=t+"px",n.style.height=e+"px"),this.scale(a,a)}rect(t,e,i,s){return this.context2D.rect(t,e,i,s),this}fillRect(t,e,i,s){return this.context2D.fillRect(t,e,i,s),this}clearRect(t,e,i,s){return this.context2D.clearRect(t,e,i,s),this}beginPath(){return this.context2D.beginPath(),this}moveTo(t,e){return this.context2D.moveTo(t,e),this}lineTo(t,e){return this.context2D.lineTo(t,e),this}bezierCurveTo(t,e,i,s,n,a){return this.context2D.bezierCurveTo(t,e,i,s,n,a),this}quadraticCurveTo(t,e,i,s){return this.context2D.quadraticCurveTo(t,e,i,s),this}arc(t,e,i,s,n,a){return this.context2D.arc(t,e,i,s,n,a),this}fill(){return this.context2D.fill(),this}stroke(){return this.context2D.stroke(),this}closePath(){return this.context2D.closePath(),this}measureText(t){const e=this.context2D.measureText(t);let i=0,s=0;return e.fontBoundingBoxAscent?(i=-e.fontBoundingBoxAscent,s=e.fontBoundingBoxDescent+e.fontBoundingBoxAscent):(i=-e.actualBoundingBoxAscent,s=e.actualBoundingBoxDescent+e.actualBoundingBoxAscent),{x:0,y:i,width:e.width,height:s}}fillText(t,e,i){return this.context2D.fillText(t,e,i),this}save(){return this.context2D.save(),this}restore(){return this.context2D.restore(),this}set fillStyle(t){this.context2D.fillStyle=t}get fillStyle(){return this.context2D.fillStyle}set strokeStyle(t){this.context2D.strokeStyle=t}get strokeStyle(){return this.context2D.strokeStyle}setFont(t,e,i,s){const n=F.validate(t,e,i,s);return this.context2D.font=F.toCSSString(n),this.textHeight=F.convertSizeToPixelValue(n.size),this}getFont(){return this.context2D.font}}const Zt={path:{x:!0,y:!0,width:!0,height:!0,"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},rect:{"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},text:{width:!0,height:!0}},te="http://www.w3.org/2000/svg",ee=2*Math.PI;class ie extends yt{constructor(t){super(),this.width=0,this.height=0,this.precision=1,this.backgroundFillStyle="white",this.fontCSSString="",this.element=t,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES);const e=this.create("svg");this.element.appendChild(e),this.svg=e,this.parent=this.svg,this.groups=[this.svg],this.path="",this.pen={x:NaN,y:NaN},this.lineWidth=1;const i={"font-family":F.SANS_SERIF,"font-size":F.SIZE+"pt","font-weight":N.NORMAL,"font-style":A.NORMAL};this.state=Object.assign({scaleX:1,scaleY:1},i),this.attributes=Object.assign({"stroke-width":.3,"stroke-dasharray":"none",fill:"black",stroke:"black"},i),this.groupAttributes=[],this.applyAttributes(e,this.attributes),this.groupAttributes.push(Object.assign({},this.attributes)),this.shadow_attributes={width:0,color:"black"},this.state_stack=[]}round(t){return Math.round(t*this.precision)/this.precision}create(t){return document.createElementNS(te,t)}openGroup(t,e,i){const s=this.create("g");return this.groups.push(s),this.parent.appendChild(s),this.parent=s,t&&s.setAttribute("class",T(t)),e&&s.setAttribute("id",T(e)),i&&i.pointerBBox&&s.setAttribute("pointer-events","bounding-box"),this.applyAttributes(s,this.attributes),this.groupAttributes.push(Object.assign(Object.assign({},this.groupAttributes[this.groupAttributes.length-1]),this.attributes)),s}closeGroup(){this.groups.pop(),this.groupAttributes.pop(),this.parent=this.groups[this.groups.length-1]}add(t){this.parent.appendChild(t)}setFillStyle(t){return this.attributes.fill=t,this}setBackgroundFillStyle(t){return this.backgroundFillStyle=t,this}setStrokeStyle(t){return this.attributes.stroke=t,this}setShadowColor(t){return this.shadow_attributes.color=t,this}setShadowBlur(t){return this.shadow_attributes.width=t,this}setLineWidth(t){return this.attributes["stroke-width"]=t,this.lineWidth=t,this}setLineDash(t){if("[object Array]"===Object.prototype.toString.call(t))return this.attributes["stroke-dasharray"]=t.join(","),this;throw new x("ArgumentError","lineDash must be an array of integers.")}setLineCap(t){return this.attributes["stroke-linecap"]=t,this}resize(t,e){this.width=t,this.height=e,this.element.style.width=t.toString(),this.svg.style.width=t.toString(),this.svg.style.height=e.toString();const i={width:t,height:e};return this.applyAttributes(this.svg,i),this.scale(this.state.scaleX,this.state.scaleY),this}scale(t,e){this.state.scaleX=this.state.scaleX?this.state.scaleX*t:t,this.state.scaleY=this.state.scaleY?this.state.scaleY*e:e;const i=this.width/this.state.scaleX,s=this.height/this.state.scaleY;return this.setViewBox(0,0,i,s),this}setViewBox(t,e,i,s){if("string"==typeof t)this.svg.setAttribute("viewBox",t);else{const n=t+" "+e+" "+i+" "+s;this.svg.setAttribute("viewBox",n)}}applyAttributes(t,e){const i=Zt[t.nodeName];for(const s in e)i&&i[s]||!e[s]||0!=this.groupAttributes.length&&e[s]==this.groupAttributes[this.groupAttributes.length-1][s]||t.setAttributeNS(null,s,e[s]);return t}clear(){for(;this.svg.lastChild;)this.svg.removeChild(this.svg.lastChild);this.scale(this.state.scaleX,this.state.scaleY)}rect(t,e,i,s,n){s<0&&(e+=s,s*=-1);const a=this.create("rect");return n=null!=n?n:{fill:"none","stroke-width":this.lineWidth,stroke:"black"},t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.applyAttributes(a,Object.assign({x:t,y:e,width:i,height:s},n)),this.add(a),this}fillRect(t,e,i,s){const n={fill:this.attributes.fill,stroke:"none"};return this.rect(t,e,i,s,n),this}clearRect(t,e,i,s){return this.rect(t,e,i,s,{fill:this.backgroundFillStyle,stroke:"none"}),this}beginPath(){return this.path="",this.pen.x=NaN,this.pen.y=NaN,this}moveTo(t,e){return t=this.round(t),e=this.round(e),this.path+="M"+t+" "+e,this.pen.x=t,this.pen.y=e,this}lineTo(t,e){return t=this.round(t),e=this.round(e),this.path+="L"+t+" "+e,this.pen.x=t,this.pen.y=e,this}bezierCurveTo(t,e,i,s,n,a){return n=this.round(n),a=this.round(a),t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.path+="C"+t+" "+e+","+i+" "+s+","+n+" "+a,this.pen.x=n,this.pen.y=a,this}quadraticCurveTo(t,e,i,s){return i=this.round(i),s=this.round(s),t=this.round(t),e=this.round(e),this.path+="Q"+t+" "+e+","+i+" "+s,this.pen.x=i,this.pen.y=s,this}arc(t,e,i,s,n,a){let o=t+i*Math.cos(s),r=e+i*Math.sin(s);o=this.round(o),r=this.round(r);const h=v(s),l=v(n);if(!a&&n-s>=ee||a&&s-n>=ee||h===l){let n=t+i*Math.cos(s+Math.PI),a=e+i*Math.sin(s+Math.PI);n=this.round(n),a=this.round(a),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 0 0 ${n} ${a} `,this.path+=`A${i} ${i} 0 0 0 ${o} ${r}`,this.pen.x=o,this.pen.y=r}else{let c,d=t+i*Math.cos(n),b=e+i*Math.sin(n);s=h,n=l,c=Math.abs(n-s)n&&(c=!c);const m=!a;d=this.round(d),b=this.round(b),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 ${+c} ${+m} ${d} ${b}`,this.pen.x=d,this.pen.y=b}return this}closePath(){return this.path+="Z",this}getShadowStyle(){const t=this.shadow_attributes;return`filter: drop-shadow(0 0 ${t.width/1.5}px ${t.color})`}fill(t){const e=this.create("path");return void 0===t&&(t=Object.assign(Object.assign({},this.attributes),{stroke:"none"})),t.d=this.path,this.shadow_attributes.width>0&&(t.style=this.getShadowStyle()),this.applyAttributes(e,t),this.add(e),this}stroke(){const t=this.create("path"),e=Object.assign(Object.assign({},this.attributes),{fill:"none","stroke-width":this.lineWidth,d:this.path});return this.shadow_attributes.width>0&&(e.style=this.getShadowStyle()),this.applyAttributes(t,e),this.add(t),this}measureText(t){return ie.measureTextCache.lookup(t,this.svg,this.attributes)}fillText(t,e,i){if(!t||t.length<=0)return this;e=this.round(e),i=this.round(i);const s=Object.assign(Object.assign({},this.attributes),{stroke:"none",x:e,y:i}),n=this.create("text");return n.textContent=t,this.applyAttributes(n,s),this.add(n),this}save(){return this.state_stack.push({state:{"font-family":this.state["font-family"],"font-weight":this.state["font-weight"],"font-style":this.state["font-style"],"font-size":this.state["font-size"],scale:this.state.scale},attributes:{"font-family":this.attributes["font-family"],"font-weight":this.attributes["font-weight"],"font-style":this.attributes["font-style"],"font-size":this.attributes["font-size"],fill:this.attributes.fill,stroke:this.attributes.stroke,"stroke-width":this.attributes["stroke-width"],"stroke-dasharray":this.attributes["stroke-dasharray"]},shadow_attributes:{width:this.shadow_attributes.width,color:this.shadow_attributes.color},lineWidth:this.lineWidth}),this}restore(){const t=this.state_stack.pop();if(t){const e=t;this.state["font-family"]=e.state["font-family"],this.state["font-weight"]=e.state["font-weight"],this.state["font-style"]=e.state["font-style"],this.state["font-size"]=e.state["font-size"],this.state.scale=e.state.scale,this.attributes["font-family"]=e.attributes["font-family"],this.attributes["font-weight"]=e.attributes["font-weight"],this.attributes["font-style"]=e.attributes["font-style"],this.attributes["font-size"]=e.attributes["font-size"],this.attributes.fill=e.attributes.fill,this.attributes.stroke=e.attributes.stroke,this.attributes["stroke-width"]=e.attributes["stroke-width"],this.attributes["stroke-dasharray"]=e.attributes["stroke-dasharray"],this.shadow_attributes.width=e.shadow_attributes.width,this.shadow_attributes.color=e.shadow_attributes.color,this.lineWidth=e.lineWidth}return this}set fillStyle(t){this.setFillStyle(t)}get fillStyle(){return this.attributes.fill}set strokeStyle(t){this.setStrokeStyle(t)}get strokeStyle(){return this.attributes.stroke}setFont(t,e,i,s){const n=F.validate(t,e,i,s);this.fontCSSString=F.toCSSString(n);const a={"font-family":n.family,"font-size":n.size,"font-weight":n.weight,"font-style":n.style};return this.attributes=Object.assign(Object.assign({},this.attributes),a),this.state=Object.assign(Object.assign({},this.state),a),this}getFont(){return this.fontCSSString}}var se,ne,ae,oe;ie.measureTextCache=new class{constructor(){this.cache={}}lookup(t,e,i){let s=this.cache[t];void 0===s&&(s={},this.cache[t]=s);const n=`${i["font-family"]}%${i["font-size"]}%${i["font-weight"]}%${i["font-style"]}`;let a=s[n];return void 0===a&&(a=this.measureImpl(t,e,i),s[n]=a),a}measureImpl(t,e,i){let s=this.txt;s||(s=document.createElementNS(te,"text"),this.txt=s),s.textContent=t,i["font-family"]&&s.setAttributeNS(null,"font-family",i["font-family"]),i["font-size"]&&s.setAttributeNS(null,"font-size",`${i["font-size"]}`),i["font-style"]&&s.setAttributeNS(null,"font-style",i["font-style"]),i["font-weight"]&&s.setAttributeNS(null,"font-weight",`${i["font-weight"]}`),e.appendChild(s);const n=s.getBBox();return e.removeChild(s),{x:n.x,y:n.y,width:n.width,height:n.height}}},function(t){t[t.CANVAS=1]="CANVAS",t[t.SVG=2]="SVG"}(se||(se={})),function(t){t[t.NONE=1]="NONE",t[t.UP=2]="UP",t[t.DOWN=3]="DOWN"}(ne||(ne={}));class re{static buildContext(t,e,i,s,n="#FFF"){const a=new re(t,e);i&&s&&a.resize(i,s);const o=a.getContext();return o.setBackgroundFillStyle(n),re.lastContext=o,o}static getCanvasContext(t,e,i,s){return re.buildContext(t,re.Backends.CANVAS,e,i,s)}static getSVGContext(t,e,i,s){return re.buildContext(t,re.Backends.SVG,e,i,s)}static drawDashedLine(t,e,i,s,n,a){t.beginPath();const o=s-e,r=n-i,h=Math.atan2(r,o);let l=e,c=i;t.moveTo(e,i);let d=0,b=!0;for(;!(o<0?l<=s:l>=s)||!(r<0?c<=n:c>=n);){const e=a[d++%a.length],i=l+Math.cos(h)*e;l=o<0?Math.max(s,i):Math.min(s,i);const m=c+Math.sin(h)*e;c=r<0?Math.max(n,m):Math.min(n,m),b?t.lineTo(l,c):t.moveTo(l,c),b=!b}t.closePath(),t.stroke()}constructor(t,e){if(d(t))this.ctx=t;else{if(void 0===e)throw new x("InvalidArgument","Missing backend argument");const i=e;let s;if("string"==typeof t){const e=document.getElementById(t);if(!e)throw new x("BadElementId",`Can't find element with ID "${e}"`);s=e}else s=t;if(i===re.Backends.CANVAS){if(!Jt(s))throw new x("BadElement","CANVAS context requires an HTMLCanvasElement.");const t=s.getContext("2d",{willReadFrequently:!0});if(!t)throw new x("BadElement","Can't get canvas context");this.ctx=new Qt(t)}else{if(i!==re.Backends.SVG)throw new x("InvalidBackend",`No support for backend: ${i}`);if(!qt(s))throw new x("BadElement","SVG context requires an HTMLDivElement.");this.ctx=new ie(s)}}}resize(t,e){return this.ctx.resize(t,e),this}getContext(){return this.ctx}}re.Backends=se,re.LineEndType=ne,re.lastContext=void 0;class he extends tt{static get CATEGORY(){return _.StringNumber}static get metrics(){var t;return null!==(t=V.currentMusicFont().getMetrics().stringNumber)&&void 0!==t?t:{verticalPadding:0,stemPadding:0,leftPadding:0,rightPadding:0}}static format(t,e){const i=e.left_shift,s=e.right_shift;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let i=0;ie.line-t.line));let h=0,l=0,c=0,d=null,m=null;for(let t=0;tc?x:c),d=b,m=e}return e.left_shift+=l,e.right_shift+=c,!0}constructor(t){super(),this.string_number=t,this.position=tt.Position.ABOVE,this.x_shift=0,this.y_shift=0,this.text_line=0,this.stem_offset=0,this.x_offset=0,this.y_offset=0,this.dashed=!0,this.leg=re.LineEndType.NONE,this.radius=8,this.drawCircle=!0,this.setWidth(2*this.radius+4),this.resetFont()}setLineEndType(t){return t>=re.LineEndType.NONE&&t<=re.LineEndType.DOWN&&(this.leg=t),this}setStringNumber(t){return this.string_number=t,this}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}setLastNote(t){return this.last_note=t,this}setDashed(t){return this.dashed=t,this}setDrawCircle(t){return this.drawCircle=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index),s=e.hasStem()?e.getStemDirection():nt.UP;let n=i.x+this.x_shift+this.x_offset,a={};e.hasStem()&&(a=e.checkStem().getExtents());let o=i.y+this.y_shift+this.y_offset;switch(this.position){case tt.Position.ABOVE:o=e.getYs().reduce(((t,e)=>tt>e?t:e)),e.hasStem()&&s==nt.DOWN&&(o=a.topY-he.metrics.stemPadding),o+=this.radius+he.metrics.verticalPadding+this.text_line*V.STAVE_LINE_DISTANCE;break;case tt.Position.LEFT:n-=this.radius/2+he.metrics.leftPadding;break;case tt.Position.RIGHT:n+=this.radius/2+he.metrics.rightPadding;break;default:throw new x("InvalidPosition",`The position ${this.position} is invalid`)}t.save(),this.drawCircle&&(t.beginPath(),t.arc(n,o,this.radius,0,2*Math.PI,!1),t.setLineWidth(1.5),t.stroke()),t.setFont(this.textFont);const r=n-t.measureText(this.string_number).width/2;t.fillText(""+this.string_number,r,o+4.5);const h=this.last_note;if(m(h)){const i=h.getStemX()-e.getX()+5;let s,a;switch(t.setStrokeStyle("#000000"),t.setLineCap("round"),t.setLineWidth(.6),this.dashed?re.drawDashedLine(t,n+10,o,n+i,o,[3,3]):re.drawDashedLine(t,n+10,o,n+i,o,[3,0]),this.leg){case re.LineEndType.UP:s=-10,a=this.dashed?[3,3]:[3,0],re.drawDashedLine(t,n+i,o,n+i,o+s,a);break;case re.LineEndType.DOWN:s=10,a=this.dashed?[3,3]:[3,0],re.drawDashedLine(t,n+i,o,n+i,o+s,a)}}t.restore()}}he.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:N.BOLD,style:A.NORMAL};class le extends tt{static get CATEGORY(){return _.Stroke}static format(t,e){const i=e.left_shift;if(!t||0===t.length)return!1;const s=t.map((t=>{const e=t.getNote(),i=t.checkIndex();if(b(e)){const{line:s}=e.getKeyProps()[i];return{line:s,shift:e.getLeftDisplacedHeadPx(),stroke:t}}if(g(e)){const{str:s}=e.getPositions()[i];return{line:s,shift:0,stroke:t}}throw new x("Internal","Unexpected instance.")})),n=i,a=s.reduce(((t,{stroke:e,shift:i})=>(e.setXShift(n+i),Math.max(e.getWidth()+0,t))),0);return e.left_shift+=a,!0}constructor(t,e){super(),this.options=Object.assign({all_voices:!0},e),this.all_voices=this.options.all_voices,this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.resetFont(),this.setXShift(0),this.setWidth(10)}getPosition(){return this.position}addEndNote(t){return this.note_end=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=e.getYs(),n=i.y,a=i.y;const o=i.x-5,r=e.checkStave().getSpacingBetweenLines(),h=this.checkModifierContext().getMembers(e.getCategory());for(let t=0;t0){s-=o.map((t=>t.getTextHeight())).reduce(((t,e)=>t>e?t:e))/V.STAVE_LINE_DISTANCE+1}else e.top_text_line+=1;for(let e=0;e=t.line?i.above:i.below}}this.placeGlyphOnLine(s,this.checkStave(),t.line),this.glyphs.push(s);const a=this.xPositions[this.xPositions.length-1],o=s.getMetrics().width+n;this.xPositions.push(a+o),this.width+=o}cancelKey(t){return this.formatted=!1,this.cancelKeySpec=t,this}convertToCancelAccList(t){const e=V.keySignature(t),i=this.accList.length>0&&e.length>0&&e[0].type!==this.accList[0].type,s=i?e.length:e.length-this.accList.length;if(s<1)return;const n=[];for(let t=0;t0?e[0].type:void 0;let s;if(this.cancelKeySpec&&(s=this.convertToCancelAccList(this.cancelKeySpec)),this.alterKeySpec&&this.convertToAlterAccList(this.alterKeySpec),this.accList.length>0){const n=(this.position===wt.END?t.getEndClef():t.getClef())||t.getClef();s&&this.convertAccLines(n,s.type,s.accList),this.convertAccLines(n,i,e);for(let t=0;t0?"PlusSmall":"Plus";break;case"(":s=i.length>0?"ParensLeftSmall":"ParensLeft";break;case")":s=i.length>0?"ParensRightSmall":"ParensRight"}const n=new Z("timeSig"+s,this.timeSignature.point);this.topGlyphs.push(n),r+=null!==(o=n.getMetrics().width)&&void 0!==o?o:0,h=Math.max(h,n.getMetrics().height)}let l=0;for(let t=0;t22?1:0,this.width=Math.max(r,l),this.xMin=this.getMetrics().x_min,this.topStartX=(this.width-r)/2,this.botStartX=(this.width-l)/2,this.reset()}getMetrics(){return{x_min:this.xMin,x_max:this.xMin+this.width,width:this.width}}renderToStave(t){const e=this.checkStave(),i=this.checkContext();let s=t+this.topStartX,n=0;n=this.botGlyphs.length>0?e.getYForLine(this.timeSignature.topLine-this.lineShift):(e.getYForLine(this.timeSignature.topLine)+e.getYForLine(this.timeSignature.bottomLine))/2;for(let t=0;t{const e=t.split("/");if(2!==e.length&&"+"!==e[0]&&"-"!==e[0])throw new x("BadTimeSignature",`Invalid time spec: ${t}. Must be in the form "/"`);e.forEach((e=>{if(0==/^[0-9+\-()]+$/.test(e))throw new x("BadTimeSignature",`Invalid time spec: ${t}. Must contain valid signatures.`)}))})(t);const s=t.split("/");return{line:0,num:!0,glyph:this.makeTimeSignatureGlyph(null!==(e=s[0])&&void 0!==e?e:"",null!==(i=s[1])&&void 0!==i?i:"")}}makeTimeSignatureGlyph(t,e){return new Se(this,t,e,"timeSig0",this.point)}getInfo(){const{line:t,is_numeric:e,glyph:i}=this;return{line:t,num:e,glyph:i}}setTimeSig(t){this.timeSpec=t;const e=this.parseTimeSpec(t);return this.setGlyph(e.glyph),this.is_numeric=e.num,this.line=e.line,this}getTimeSpec(){return this.timeSpec}getLine(){return this.line}setLine(t){this.line=t}getGlyph(){return this.glyph}setGlyph(t){this.glyph=t,this.setWidth(p(this.glyph.getMetrics().width))}getIsNumeric(){return this.is_numeric}setIsNumeric(t){this.is_numeric=t}draw(){const t=this.checkStave(),e=t.checkContext();this.setRendered(),this.applyStyle(e),e.openGroup("timesignature",this.getAttribute("id")),this.glyph.setStave(t),this.glyph.setContext(e),this.placeGlyphOnLine(this.glyph,t,this.line),this.glyph.renderToStave(this.x),e.closeGroup(),this.restoreStyle(e)}}const ve={[kt.CATEGORY]:0,[me.CATEGORY]:1,[ge.CATEGORY]:2,[Te.CATEGORY]:3},we={[Te.CATEGORY]:0,[ge.CATEGORY]:1,[kt.CATEGORY]:2,[me.CATEGORY]:3};class Ee extends L{static get CATEGORY(){return _.Stave}static get defaultPadding(){const t=V.currentMusicFont();return t.lookupMetric("stave.padding")+t.lookupMetric("stave.endPaddingMax")}static get rightPadding(){return V.currentMusicFont().lookupMetric("stave.endPaddingMax")}constructor(t,e,i,s){super(),this.height=0,this.x=t,this.y=e,this.width=i,this.formatted=!1,this.start_x=t+5,this.end_x=t+i,this.modifiers=[],this.measure=0,this.clef="treble",this.endClef=void 0,this.resetFont(),this.options=Object.assign({vertical_bar_width:10,num_lines:5,fill_style:"#999999",left_bar:!0,right_bar:!0,spacing_between_lines_px:V.STAVE_LINE_DISTANCE,space_above_staff_ln:4,space_below_staff_ln:4,top_text_position:1,bottom_text_position:4,line_config:[]},s),this.bounds={x:this.x,y:this.y,w:this.width,h:0},this.defaultLedgerLineStyle={strokeStyle:"#444",lineWidth:1.4},this.resetLines(),this.addModifier(new kt(this.options.left_bar?Et.SINGLE:Et.NONE)),this.addEndModifier(new kt(this.options.right_bar?Et.SINGLE:Et.NONE))}setDefaultLedgerLineStyle(t){this.defaultLedgerLineStyle=t}getDefaultLedgerLineStyle(){return Object.assign(Object.assign({},this.getStyle()),this.defaultLedgerLineStyle)}space(t){return this.options.spacing_between_lines_px*t}resetLines(){this.options.line_config=[];for(let t=0;ti.getWidth()&&(e-=i.getWidth()),e}setRepetitionType(t,e=0){return this.modifiers.push(new _e(t,this.x,e)),this}setVoltaType(t,e,i){return this.modifiers.push(new ye(t,e,this.x,i)),this}setSection(t,e,i=0,s,n=!0){const a=new xe(t,this.x+i,e,n);return s&&a.setFontSize(s),this.modifiers.push(a),this}setTempo(t,e){return this.modifiers.push(new ue(t,this.x,e)),this}setText(t,e,i={}){return this.modifiers.push(new fe(t,e,i)),this}getHeight(){return this.height}getSpacingBetweenLines(){return this.options.spacing_between_lines_px}getBoundingBox(){return new C(this.x,this.y,this.width,this.getBottomY()-this.y)}getBottomY(){const t=this.options,e=t.spacing_between_lines_px;return this.getYForLine(t.num_lines)+t.space_below_staff_ln*e}getBottomLineY(){return this.getYForLine(this.options.num_lines)}getYForLine(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+t*i+s*i}getLineForY(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return(t-this.y)/i-s}getYForTopText(t=0){return this.getYForLine(-t-this.options.top_text_position)}getYForBottomText(t=0){return this.getYForLine(this.options.bottom_text_position+t)}getYForNote(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+s*i+5*i-t*i}getYForGlyphs(){return this.getYForLine(3)}addModifier(t,e){return void 0!==e&&t.setPosition(e),t.setStave(this),this.formatted=!1,this.modifiers.push(t),this}addEndModifier(t){return this.addModifier(t,wt.END),this}setBegBarType(t){const{SINGLE:e,REPEAT_BEGIN:i,NONE:s}=Et;return t!==e&&t!==i&&t!==s||(this.modifiers[0].setType(t),this.formatted=!1),this}setEndBarType(t){return t!==Et.REPEAT_BEGIN&&(this.modifiers[1].setType(t),this.formatted=!1),this}setClefLines(t){return this.clef=t,this}setClef(t,e,i,s){void 0===s&&(s=wt.BEGIN),s===wt.END?this.endClef=t:this.clef=t;const n=this.getModifiers(s,me.CATEGORY);return 0===n.length?this.addClef(t,e,i,s):n[0].setType(t,e,i),this}getClef(){return this.clef}setEndClef(t,e,i){return this.setClef(t,e,i,wt.END),this}getEndClef(){return this.endClef}setKeySignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,ge.CATEGORY);return 0===s.length?this.addKeySignature(t,e,i):s[0].setKeySig(t,e),this}setEndKeySignature(t,e){return this.setKeySignature(t,e,wt.END),this}setTimeSignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,Te.CATEGORY);return 0===s.length?this.addTimeSignature(t,e,i):s[0].setTimeSig(t),this}setEndTimeSignature(t,e){return this.setTimeSignature(t,e,wt.END),this}addKeySignature(t,e,i){return void 0===i&&(i=wt.BEGIN),this.addModifier(new ge(t,e).setPosition(i),i),this}addClef(t,e,i,s){return void 0===s||s===wt.BEGIN?this.clef=t:s===wt.END&&(this.endClef=t),this.addModifier(new me(t,e,i),s),this}addEndClef(t,e,i){return this.addClef(t,e,i,wt.END),this}addTimeSignature(t,e,i){return this.addModifier(new Te(t,e),i),this}addEndTimeSignature(t,e){return this.addTimeSignature(t,e,wt.END),this}addTrebleGlyph(){return this.addClef("treble"),this}getModifiers(t,e){const i=void 0===t,s=void 0===e;return i&&s?this.modifiers:i?this.modifiers.filter((t=>e===t.getCategory())):s?this.modifiers.filter((e=>t===e.getPosition())):this.modifiers.filter((i=>t===i.getPosition()&&e===i.getCategory()))}sortByCategory(t,e){for(let i=t.length-1;i>=0;i--)for(let s=0;se[t[s+1].getCategory()]){const e=t[s];t[s]=t[s+1],t[s+1]=e}}format(){const t=this.modifiers[0],e=this.modifiers[1],i=this.getModifiers(wt.BEGIN),s=this.getModifiers(wt.END);let n,a,r;this.sortByCategory(i,ve),this.sortByCategory(s,we),i.length>1&&t.getType()===Et.REPEAT_BEGIN&&(i.push(i.splice(0,1)[0]),i.splice(0,0,new kt(Et.SINGLE))),s.indexOf(e)>0&&s.splice(0,0,new kt(Et.NONE));let h=0,l=this.x;for(let t=0;t0){t.save(),t.setFont(this.textFont);const e=t.measureText(""+this.measure).width;n=this.getYForTopText(0)+3,t.fillText(""+this.measure,this.x-e/2,n),t.restore()}return this}getVerticalBarWidth(){return this.options.vertical_bar_width}getConfigForLines(){return this.options.line_config}setConfigForLine(t,e){if(t>=this.options.num_lines||t<0)throw new x("StaveConfigError","The line number must be within the range of the number of lines in the Stave.");if(void 0===e.visible)throw new x("StaveConfigError","The line configuration object is missing the 'visible' property.");if("boolean"!=typeof e.visible)throw new x("StaveConfigError","The line configuration objects 'visible' property must be true or false.");return this.options.line_config[t]=e,this}setConfigForLines(t){if(t.length!==this.options.num_lines)throw new x("StaveConfigError","The length of the lines configuration array must match the number of lines in the Stave");for(const e in t)null==t[e].visible&&(t[e]=this.options.line_config[e]),this.options.line_config[e]=Object.assign(Object.assign({},this.options.line_config[e]),t[e]);return this.options.line_config=t,this}static formatBegModifiers(t){const e=e=>{let i=0;t.forEach((t=>{const s=t.getModifiers(wt.BEGIN,e);s.length>0&&s[0].getX()>i&&(i=s[0].getX())}));let s=0;t.forEach((t=>{s=0;t.getModifiers(wt.BEGIN,e).forEach((t=>{i-t.getX()>s&&(s=i-t.getX())}));const n=t.getModifiers(wt.BEGIN);let a=!1;n.forEach((t=>{t.getCategory()===e&&(a=!0),a&&s>0&&t.setX(t.getX()+s)})),t.setNoteStartX(t.getNoteStartX()+s)}))};t.forEach((t=>{t.formatted||t.format()})),e(_.Clef),e(_.KeySignature),e(_.TimeSignature);let i=0;t.forEach((t=>{t.getNoteStartX()>i&&(i=t.getNoteStartX())})),t.forEach((t=>{t.setNoteStartX(i)})),i=0,t.forEach((t=>{t.getModifiers(wt.BEGIN,_.Barline).forEach((t=>{t.getType()==Et.REPEAT_BEGIN&&t.getX()>i&&(i=t.getX())}))})),t.forEach((t=>{t.getModifiers(wt.BEGIN,_.Barline).forEach((t=>{t.getType()==Et.REPEAT_BEGIN&&t.setX(i)}))}))}}function Be(t,e,i,s,n){if(e!==Ce.type.BOLD_DOUBLE_LEFT&&e!==Ce.type.BOLD_DOUBLE_RIGHT)throw new x("InvalidConnector","A REPEAT_BEGIN or REPEAT_END type must be provided.");let a=3,o=3.5;e===Ce.type.BOLD_DOUBLE_RIGHT&&(a=-5,o=3),t.fillRect(i+a,s,1,n-s),t.fillRect(i-2,s,o,n-s)}Ee.TEXT_FONT={family:F.SANS_SERIF,size:8,weight:N.NORMAL,style:A.NORMAL};class Ce extends L{static get CATEGORY(){return _.StaveConnector}constructor(t,e){super(),this.thickness=V.STAVE_LINE_THICKNESS,this.width=3,this.top_stave=t,this.bottom_stave=e,this.type=Ce.type.DOUBLE,this.resetFont(),this.x_shift=0,this.texts=[]}setType(t){const e="string"==typeof t?Ce.typeString[t]:t;return Object.values(Ce.type).includes(e)&&(this.type=e),this}getType(){return this.type}setText(t,e={}){return this.texts.push({content:t,options:Object.assign({shift_x:0,shift_y:0},e)}),this}setXShift(t){if("number"!=typeof t)throw new x("InvalidType","x_shift must be a Number");return this.x_shift=t,this}getXShift(){return this.x_shift}draw(){const t=this.checkContext();this.setRendered();let e=this.top_stave.getYForLine(0),i=this.bottom_stave.getYForLine(this.bottom_stave.getNumLines()-1)+this.thickness,s=this.width,n=this.top_stave.getX();(this.type===Ce.type.SINGLE_RIGHT||this.type===Ce.type.BOLD_DOUBLE_RIGHT||this.type===Ce.type.THIN_DOUBLE)&&(n=this.top_stave.getX()+this.top_stave.getWidth());let a=i-e;switch(this.type){case Ce.type.SINGLE:case Ce.type.SINGLE_LEFT:case Ce.type.SINGLE_RIGHT:s=1;break;case Ce.type.DOUBLE:n-=this.width+2,e-=this.thickness,a+=.5;break;case Ce.type.BRACE:{s=12;const n=this.top_stave.getX()-2+this.x_shift,o=e,r=n,h=i,l=n-s,c=o+a/2,d=l-.9*s,b=o+.2*a,m=n+1.1*s,g=c-.135*a,_=m,x=c+.135*a,u=d,p=h-.2*a,f=l-s,y=p,S=n+.4*s,T=c+.135*a,v=S,w=c-.135*a,E=f,B=b;t.beginPath(),t.moveTo(n,o),t.bezierCurveTo(d,b,m,g,l,c),t.bezierCurveTo(_,x,u,p,r,h),t.bezierCurveTo(f,y,S,T,l,c),t.bezierCurveTo(v,w,E,B,n,o),t.fill(),t.stroke();break}case Ce.type.BRACKET:e-=6,i+=6,a=i-e,Z.renderGlyph(t,n-5,e,40,"bracketTop"),Z.renderGlyph(t,n-5,i,40,"bracketBottom"),n-=this.width+2;break;case Ce.type.BOLD_DOUBLE_LEFT:Be(t,this.type,n+this.x_shift,e,i-this.thickness);break;case Ce.type.BOLD_DOUBLE_RIGHT:Be(t,this.type,n,e,i-this.thickness);break;case Ce.type.THIN_DOUBLE:s=1,a-=this.thickness;break;case Ce.type.NONE:break;default:throw new x("InvalidType",`The provided StaveConnector.type (${this.type}) is invalid.`)}this.type!==Ce.type.BRACE&&this.type!==Ce.type.BOLD_DOUBLE_LEFT&&this.type!==Ce.type.BOLD_DOUBLE_RIGHT&&this.type!==Ce.type.NONE&&t.fillRect(n,e,s,a),this.type===Ce.type.THIN_DOUBLE&&t.fillRect(n-3,e,s,a),t.save(),t.setLineWidth(2),t.setFont(this.textFont);for(let e=0;et.isCenterAligned()))}getMetrics(){const{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}=this;return{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}}getCurrentTick(){return this.currentTick}setCurrentTick(t){this.currentTick=t,this.preFormatted=!1}addTickable(t,e){if(!t)throw new x("BadArgument","Invalid tickable added.");if(!t.shouldIgnoreTicks()){const e=t.getTicks();e.greaterThan(this.maxTicks)&&(this.maxTicks=e.clone(),this.maxTickable=t),(null==this.minTicks||e.lessThan(this.minTicks))&&(this.minTicks=e.clone(),this.minTickable=t)}return t.setTickContext(this),this.tickables.push(t),this.tickablesByVoice[e||0]=t,this.preFormatted=!1,this}preFormat(){if(this.preFormatted)return this;for(let t=0;t{e.addToModifierContext(new be);const s=(new Pe).addTickable(e).preFormat(),n=s.getMetrics();return s.setX(t+n.totalLeftPx),t+s.getWidth()+n.totalRightPx+i}),e)}static plotDebugging(t,e,i,s,n,a){const o=i+(a=Object.assign({stavePadding:V.currentMusicFont().lookupMetric("stave.padding")},a)).stavePadding,r=e.contextGaps;t.save(),t.setFont(F.SANS_SERIF,8),r.gaps.forEach((e=>{var i,a,r;i=o+e.x1,a=o+e.x2,r="rgba(100,200,100,0.4)",t.beginPath(),t.setStrokeStyle(r),t.setFillStyle(r),t.setLineWidth(1),t.fillRect(i,s,Math.max(a-i,0),n-s),t.setFillStyle("green"),t.fillText(Math.round(e.x2-e.x1).toString(),o+e.x1,n+12)})),t.setFillStyle("red"),t.fillText(`Loss: ${(e.totalCost||0).toFixed(2)} Shift: ${(e.totalShift||0).toFixed(2)} Gap: ${r.total.toFixed(2)}`,o-20,n+27),t.restore()}static FormatAndDraw(t,e,i,s){let n={auto_beam:!1,align_rests:!1};"object"==typeof s?n=Object.assign(Object.assign({},n),s):"boolean"==typeof s&&(n.auto_beam=s);const a=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(i),o=n.auto_beam?Le.applyAndGetBeams(a):[];return(new Ae).joinVoices([a]).formatToStave([a],e,{align_rests:n.align_rests,stave:e}),a.setStave(e).draw(t,e),o.forEach((e=>e.setContext(t).draw())),a.getBoundingBox()}static FormatAndDrawTab(t,e,i,s,n,a,o){let r={auto_beam:a,align_rests:!1};"object"==typeof o?r=Object.assign(Object.assign({},r),o):"boolean"==typeof o&&(r.auto_beam=o);const h=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(n),l=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(s),c=r.auto_beam?Le.applyAndGetBeams(h):[];(new Ae).joinVoices([h]).joinVoices([l]).formatToStave([h,l],i,{align_rests:r.align_rests}),h.draw(t,i),l.draw(t,e),c.forEach((e=>e.setContext(t).draw())),new Ce(i,e).setContext(t).draw()}static AlignRestsToNotes(t,e,i){t.forEach(((s,n)=>{if(b(s)&&s.isRest()){if(s.getTuplet()&&!i)return;const a=s.getGlyphProps().position.toUpperCase();if("R/4"!==a&&"B/4"!==a)return;if(e||s.getBeam()){const e=s.getKeyProps()[0];if(0===n)e.line=Ne(t,e.line,n,!1);else if(n>0&&nAe.AlignRestsToNotes(t.getTickables(),e)))}preCalculateMinTotalWidth(t){const e=V.currentMusicFont().lookupMetric("stave.unalignedNotePadding");let i=0,s=0,n=0;const a=[],o=[];if(this.hasMinTotalWidth)return this.minTotalWidth;if(!t)throw new x("BadArgument","'voices' required to run preCalculateMinTotalWidth");this.createTickContexts(t);const{list:r,map:h}=this.tickContexts;this.minTotalWidth=0,r.forEach((e=>{const r=h[e];r.preFormat(),r.getTickables().length{s+=t.getMetrics().width,n+=t.getTicks().value(),a.push(t.getMetrics().width),o.push(t.getTicks().value())}));const l=r.getWidth();this.minTotalWidth+=l})),this.hasMinTotalWidth=!0;const l=s>0?s/a.length:1/a.length,c=w(a.map((t=>Math.pow(t-l,2)))),d=Math.pow(c/a.length,.5)/l,b=n/o.length,m=w(o.map((t=>Math.pow(t-b,2)))),g=Math.pow(m/o.length,.5)/b,_=Math.max(g,d)*r.length*e,u=e*i;return this.minTotalWidth+Math.max(u,_)}getMinTotalWidth(){if(!this.hasMinTotalWidth)throw new x("NoMinTotalWidth","Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'");return this.minTotalWidth}static getResolutionMultiplier(t){if(!t||!t.length)throw new x("BadArgument","No voices to format");const e=t[0].getTotalTicks();return t.reduce(((t,i)=>{if(!i.getTotalTicks().equals(e))throw new x("TickMismatch","Voices should have same total note duration in ticks.");if(i.getMode()===jt.Mode.STRICT&&!i.isComplete())throw new x("IncompleteVoice","Voice does not have enough notes.");return Math.max(t,E.LCM(t,i.getResolutionMultiplier()))}),1)}createModifierContexts(t){if(0==t.length)return;const e=Ae.getResolutionMultiplier(t),i=new Map,s=[];t.forEach((t=>{const n=new E(0,e);t.getTickables().forEach((t=>{const e=n.numerator;let a=i.get(t.getStave());if(a||(i.set(t.getStave(),{}),a=i.get(t.getStave())),!(a?a[e]:void 0)){const t=new be;s.push(t),a[e]=t}t.addToModifierContext(a[e]),n.add(t.getTicks())}))})),this.modifierContexts.push({map:i,array:s,resolutionMultiplier:e})}createTickContexts(t){const e=function(t,e,i){if(0==t.length)return{map:{},array:[],list:[],resolutionMultiplier:0};const s={},n=[],a=[],o=Ae.getResolutionMultiplier(t);return t.forEach(((t,r)=>{const h=new E(0,o);t.getTickables().forEach((t=>{const o=h.numerator;if(!s[o]){const t=e({tickID:o});a.push(t),s[o]=t,n.push(o)}i(t,s[o],r),h.add(t.getTicks())}))})),{map:s,array:a,list:n.sort(((t,e)=>t-e)),resolutionMultiplier:o}}(t,(t=>new Pe(t)),((t,e,i)=>e.addTickable(t,i)));this.tickContexts=e;const i=this.tickContexts.array;return i.forEach((t=>{t.tContexts=i})),e}getTickContexts(){return this.tickContexts}preFormat(t=0,e,i,s){const n=this.tickContexts;if(!n)throw new x("NoTickContexts","preFormat requires TickContexts");const{list:a,map:o}=n;this.lossHistory=[],i&&s&&i.forEach((t=>t.setStave(s).preFormat()));let r=0,h=0;this.minTotalWidth=0;let l=0;a.forEach((t=>{const e=o[t];e.preFormat();const i=e.getWidth();this.minTotalWidth+=i;const s=e.getMaxTicks().value();l+=s;const n=e.getMetrics();r=r+h+n.totalLeftPx,e.setX(r),h=i-n.totalLeftPx}));const{globalSoftmax:c,softmaxFactor:d,maxIterations:b}=this.formatterOptions,m=w(a.map((t=>Math.pow(d,o[t].getMaxTicks().value()/l))));if(this.minTotalWidth=r+h,this.hasMinTotalWidth=!0,t<=0)return this.evaluate();const g=o[a[0]],_=o[a[a.length-1]];function u(t){return a.map(((e,i)=>{const s=o[e],n=s.getTickablesByVoice();let r;if(i>0){const e=o[a[i-1]];for(let h=i-1;h>=0;h--){const i=o[a[h]].getTickablesByVoice(),b=[];if(Object.keys(n).forEach((t=>{i[t]&&b.push(t)})),b.length>0){let a=0,o=1/0,h=0;if(b.forEach((t=>{const e=i[t].getTicks().value();e>a&&(r=i[t],a=e);const s=n[t],h=s.getX()-(s.getMetrics().modLeftPx+s.getMetrics().leftDisplacedHeadPx),l=i[t].getMetrics(),c=i[t].getX()+l.notePx+l.modRightPx+l.rightDisplacedHeadPx;o=Math.min(o,h-c)})),o=Math.min(o,s.getX()-(e.getX()+.05*t)),c){const e=l;h=Math.pow(d,a/e)/m*t}else void 0!==r&&(h=r.getVoice().softmax(a)*t);return{expectedDistance:h,maxNegativeShiftPx:o,fromTickable:r}}}}return{expectedDistance:0,fromTickablePx:0,maxNegativeShiftPx:0}}))}function f(t){const e=y/2;let i=0;return a.forEach(((s,n)=>{const a=o[s];if(n>0){const e=a.getX(),s=t[n],o=p(s.fromTickable).getX()+s.expectedDistance-(e+i);let r=0;o>0?i+=o:o<0&&(r=Math.min(s.maxNegativeShiftPx,Math.abs(o)),i+=-r),a.setX(e+i)}a.getCenterAlignedTickables().forEach((t=>{t.setCenterXShift(e-a.getX())}))})),_.getX()-g.getX()}const y=t-_.getMetrics().notePx-_.getMetrics().totalRightPx-g.getMetrics().totalLeftPx,S=V.currentMusicFont(),T=S.lookupMetric("stave.endPaddingMin"),v=S.lookupMetric("stave.endPaddingMax"),E=S.lookupMetric("stave.padding");let B=y;const C=u(B);let P=f(C);if(1===a.length)return 0;const N=((t,e)=>{let i=t/2;if(e.length>1)for(let t=1;t{let e=0;const i=_&&_.getMaxTickable();if(i){const s=i.getVoice();if(s.getTicksUsed().value()>s.getTotalTicks().value())return 2*vM&&F>0||P+k1;)B-=P-M,k=A(B),D=k-(v-T),P=f(u(B)),F--;return this.justifyWidth=t,this.evaluate()}evaluate(){const t=this.tickContexts,e=this.justifyWidth;this.contextGaps={total:0,gaps:[]},t.list.forEach(((e,i)=>{if(0===i)return;const s=t.list[i-1],n=t.map[s],a=t.map[e],o=n.getMetrics(),r=a.getMetrics(),h=n.getX()+o.notePx+o.totalRightPx,l=a.getX()-r.totalLeftPx,c=l-h;this.contextGaps.total+=c,this.contextGaps.gaps.push({x1:h,x2:l}),a.getFormatterMetrics().freedom.left=c,n.getFormatterMetrics().freedom.right=c})),this.durationStats={};const i=this.durationStats;this.voices.forEach((t=>{t.getTickables().forEach(((t,s,n)=>{const a=t.getTicks().clone().simplify().toString(),o=t.getMetrics(),r=t.getFormatterMetrics(),h=t.getX()+o.notePx+o.modRightPx+o.rightDisplacedHeadPx;let l=0;if(s{t.getTickables().forEach((t=>{const e=t.getTicks().clone().simplify().toString(),n=t.getFormatterMetrics();n.space.mean=i[e].mean,n.duration=e,n.iterations+=1,n.space.deviation=n.space.used-n.space.mean,s+=Math.pow(n.space.deviation,2)}))})),this.totalCost=Math.sqrt(s),this.lossHistory.push(this.totalCost),this.totalCost}tune(t){var e;const i=this.tickContexts;if(!i)return 0;const s=null!==(e=null==t?void 0:t.alpha)&&void 0!==e?e:.5;let n=0;return this.totalShift=0,i.list.forEach(((t,e,a)=>{const o=i.map[t],r=e>0?i.map[a[e-1]]:void 0,h=et.getFormatterMetrics().space.deviation)));l>0?n=-Math.min(o.getFormatterMetrics().freedom.right,Math.abs(l)):l<0&&(n=h?Math.min(h.getFormatterMetrics().freedom.right,Math.abs(l)):0),n*=s,this.totalShift+=n})),this.evaluate()}postFormat(){return this.modifierContexts.forEach((t=>{t.array.forEach((t=>t.postFormat()))})),this.tickContexts.list.forEach((t=>{this.tickContexts.map[t].postFormat()})),this}joinVoices(t){return this.createModifierContexts(t),this.hasMinTotalWidth=!1,this}format(t,e,i){const s=Object.assign({align_rests:!1},i);this.voices=t;const n=this.formatterOptions.softmaxFactor;return n&&this.voices.forEach((t=>t.setSoftmaxFactor(n))),this.alignRests(t,s.align_rests),this.createTickContexts(t),this.preFormat(e,s.context,t,s.stave),s.stave&&this.postFormat(),this}formatToStave(t,e,i){const s=Object.assign({context:e.getContext()},i),n=e.getNoteEndX()-e.getNoteStartX()-Ee.defaultPadding;return function(...t){Ae.DEBUG&&f("Vex.Flow.Formatter",t)}("Formatting voices to width: ",n),this.format(t,n,s)}getTickContext(t){var e;return null===(e=this.tickContexts)||void 0===e?void 0:e.map[t]}}var ke;Ae.DEBUG=!1,function(t){t[t.BOTTOM=-1]="BOTTOM",t[t.TOP=1]="TOP"}(ke||(ke={}));class De extends L{static get CATEGORY(){return _.Tuplet}static get LOCATION_TOP(){return ke.TOP}static get LOCATION_BOTTOM(){return ke.BOTTOM}static get NESTING_OFFSET(){return 15}static get metrics(){const t=V.currentMusicFont().getMetrics().tuplet;if(!t)throw new x("BadMetrics","tuplet missing");return t}constructor(t,e={}){if(super(),this.numerator_glyphs=[],this.denom_glyphs=[],!t||!t.length)throw new x("BadArguments","No notes provided for tuplet.");this.options=e,this.notes=t,this.num_notes=null!=this.options.num_notes?this.options.num_notes:t.length,this.options.beats_occupied&&this.beatsOccupiedDeprecationWarning(),this.notes_occupied=this.options.notes_occupied||this.options.beats_occupied||2,null!=this.options.bracketed?this.bracketed=this.options.bracketed:this.bracketed=t.some((t=>!t.hasBeam())),this.ratioed=null!=this.options.ratioed?this.options.ratioed:Math.abs(this.notes_occupied-this.num_notes)>1,this.point=3*V.NOTATION_FONT_SCALE/5,this.y_pos=16,this.x_pos=100,this.width=200,this.setTupletLocation(this.options.location||De.LOCATION_TOP),Ae.AlignRestsToNotes(t,!0,!0),this.resolveGlyphs(),this.attach()}attach(){for(let t=0;t=1;)this.numerator_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10);for(this.denom_glyphs=[],t=this.notes_occupied;t>=1;)this.denom_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10)}getNestedTupletCount(){const t=this.location,e=this.notes[0];let i=n(e,t),s=n(e,t);function n(t,e){return t.getTupletStack().filter((t=>t.location===e)).length}return this.notes.forEach((e=>{const a=n(e,t);i=a>i?a:i,s=a0&&(s=Math.min(a,s))}}}else{let t=De.metrics.bottomLine;this.notes.forEach((e=>{const i=e.getModifierContext();i&&(t=Math.max(t,i.getState().text_line+1))})),s=i.checkStave().getYForLine(t)+De.metrics.noteHeadOffset;for(let t=0;ts&&(s=e)}}return s+t+e}draw(){const t=this.checkContext();this.setRendered();const e=this.notes[0],i=this.notes[this.notes.length-1];this.bracketed?(this.x_pos=e.getTieLeftX()-5,this.width=i.getTieRightX()-this.x_pos+5):(this.x_pos=e.getStemX(),this.width=i.getStemX()-this.x_pos),this.y_pos=this.getYPosition();const s=(t,e)=>t+p(e.getMetrics().width);let n=this.numerator_glyphs.reduce(s,0);this.ratioed&&(n=this.denom_glyphs.reduce(s,n),n+=.32*this.point);const a=this.x_pos+this.width/2-n/2;if(this.bracketed){const e=this.width/2-n/2-5;e>0&&(t.fillRect(this.x_pos,this.y_pos,e,1),t.fillRect(this.x_pos+this.width/2+n/2+5,this.y_pos,e,1),t.fillRect(this.x_pos,this.y_pos+(this.location===De.LOCATION_BOTTOM?1:0),1,10*this.location),t.fillRect(this.x_pos+this.width,this.y_pos+(this.location===De.LOCATION_BOTTOM?1:0),1,10*this.location))}const o=V.currentMusicFont().lookupMetric("digits.shiftY",0);let r=0;if(this.numerator_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=p(e.getMetrics().width)})),this.ratioed){const e=a+r+.16*this.point,i=.06*this.point;t.beginPath(),t.arc(e,this.y_pos-.08*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),t.beginPath(),t.arc(e,this.y_pos+.12*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),r+=.32*this.point,this.denom_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=p(e.getMetrics().width)}))}}}function Me(t){let e=0;return t.forEach((t=>{t.keyProps&&t.keyProps.forEach((t=>{e+=t.line-3}))})),e>=0?nt.DOWN:nt.UP}const Fe="L",Oe="R",Re="B";class Le extends L{static get CATEGORY(){return _.Beam}getStemDirection(){return this.stem_direction}static getDefaultBeamGroups(t){t&&"c"!==t||(t="4/4");const e={"1/2":["1/2"],"2/2":["1/2"],"3/2":["1/2"],"4/2":["1/2"],"1/4":["1/4"],"2/4":["1/4"],"3/4":["1/4"],"4/4":["1/4"],"1/8":["1/8"],"2/8":["2/8"],"3/8":["3/8"],"4/8":["2/8"],"1/16":["1/16"],"2/16":["2/16"],"3/16":["3/16"],"4/16":["2/16"]}[t];if(void 0!==e)return e.map((t=>(new E).parse(t)));{const e=parseInt(t.split("/")[0],10),i=parseInt(t.split("/")[1],10);if(e%3==0)return[new E(3,i)];if(i>4)return[new E(2,i)];if(i<=4)return[new E(1,i)]}return[new E(1,4)]}static applyAndGetBeams(t,e,i){return Le.generateBeams(t.getTickables(),{groups:i,stem_direction:e})}static generateBeams(t,e={}){e.groups&&e.groups.length||(e.groups=[new E(2,8)]);const i=e.groups.map((t=>{if(!t.multiply)throw new x("InvalidBeamGroups","The beam groups must be an array of Vex.Flow.Fractions");return t.clone().multiply(V.RESOLUTION,1)})),s=t;let n=0,a=[],o=[];function r(){i.length-1>n?n+=1:n=0}!function(){let t=[],e=new E(0,1);s.forEach((s=>{if(t=[],s.shouldIgnoreTicks())return a.push(o),void(o=t);o.push(s);const h=i[n].clone(),l=(c=o,c.reduce(((t,e)=>e.getTicks().clone().add(t)),new E(0,1))).add(e);var c;const d=V.durationToNumber(s.getDuration())<8;if(d&&s.getTuplet()&&(h.numerator*=2),l.greaterThan(h)){if(!d){const e=o.pop();e&&t.push(e)}a.push(o);do{e=l.subtract(i[n]),r()}while(e.greaterThanEquals(i[n]));o=t}else l.equals(h)&&(a.push(o),e=new E(0,1),o=t,r())})),o.length>0&&a.push(o)}(),function(){const t=[];a.forEach((i=>{let s=[];i.forEach(((i,n,a)=>{const o=0===n||n===a.length-1,r=a[n-1],h=!e.beam_rests&&i.isRest(),l=e.beam_rests&&e.beam_middle_only&&i.isRest()&&o;let c=!1;if(e.maintain_stem_directions&&r&&!i.isRest()&&!r.isRest()){const t=r.getStemDirection();c=i.getStemDirection()!==t}const d=parseInt(i.getDuration(),10)<8;h||l||c||d?(s.length>0&&t.push(s),s=c?[i]:[]):s.push(i)})),s.length>0&&t.push(s)})),a=t}(),a.forEach((t=>{let i;if(e.maintain_stem_directions){const e=function(t){for(let e=0;e{t.setStemDirection(e)}))}(t,i)}));const h=a.filter((t=>{if(t.length>1){let e=!0;return t.forEach((t=>{t.getIntrinsicTicks()>=V.durationToTicks("4")&&(e=!1)})),e}return!1})),l=function(){const t=[];return a.forEach((e=>{let i;e.forEach((e=>{const s=e.getTuplet();s&&i!==s&&(i=s,t.push(i))}))})),t}(),c=[];return h.forEach((t=>{const i=new Le(t);e.show_stemlets&&(i.render_options.show_stemlets=!0),e.secondary_breaks&&(i.render_options.secondary_break_ticks=V.durationToTicks(e.secondary_breaks)),!0===e.flat_beams&&(i.render_options.flat_beams=!0,i.render_options.flat_beam_offset=e.flat_beam_offset),c.push(i)})),l.forEach((t=>{const e=t.notes[0].stem_direction===nt.DOWN?ke.BOTTOM:ke.TOP;t.setTupletLocation(e);let i=!1;for(let e=0;e=V.durationToTicks("4"))throw new x("BadArguments","Beams can only be applied to notes shorter than a quarter note.");let i,s;this.stem_direction=t[0].getStemDirection();let n=this.stem_direction;if(e&&b(t[0]))n=Me(t);else if(e&&g(t[0])){const e=t.reduce(((t,e)=>t+e.getStemDirection()),0);n=e>-1?nt.UP:nt.DOWN}for(i=0;it.getGlyphProps().beam_count)).reduce(((t,e)=>e>t?e:t))}breakSecondaryAt(t){return this.break_on_indices=t,this}setPartialBeamSideAt(t,e){return this.forcedPartialDirections[t]=e,this}unsetPartialBeamSideAt(t){return delete this.forcedPartialDirections[t],this}getSlopeY(t,e,i,s){return i+(t-e)*s}calculateSlope(){const{notes:t,stem_direction:e,render_options:{max_slope:i,min_slope:s,slope_iterations:n,slope_cost:a}}=this,o=t[0],r=function(t,e){const i=t.getStemExtents().topY,s=t.getStemX();return(e.getStemExtents().topY-i)/(e.getStemX()-s)}(o,t[t.length-1]),h=(i-s)/n;let l=Number.MAX_VALUE,c=0,d=0;for(let n=s;n<=i;n+=h){let i=0,s=0;for(let a=1;an)&&(h=n,o=Math.min(...s.getYs()),r=s.getBeamCount())}let l=a/t.length;const c=s+r*(1.5*i),d=o+c*-e;e===nt.DOWN&&ld&&(l=o-c),n?(e===nt.DOWN&&l>n||e===nt.UP&&l=8&&(c=-1!==this.break_on_indices.indexOf(h),this.render_options.secondary_break_ticks&&r>=this.render_options.secondary_break_ticks&&(r=0,c=!0));const d=l.getIntrinsicTicks(){const i=e.getStem();if(i){const s=e.getStemX();i.setNoteHeadXBounds(s,s),i.setContext(t).draw()}}),this)}drawBeamLines(t){const e=["4","8","16","32","64"],i=this.notes[0];let s=this.getBeamYToDraw();const n=i.getStemX(),a=this.render_options.beam_width*this.stem_direction;for(let i=0;i0||!0===e;return!e||n>0||(this.pos=s),o?this.matchSuccess():this.matchFail(s),{success:o,results:i,numMatches:n}}expectZeroOrMore(t){return this.expectOneOrMore(t,!0)}expect(t){if(Ye("Evaluating rule function:",t),!t)throw new x("Invalid rule function");let e;const i=t.bind(this.grammar)();if(i.token)e=this.matchToken(i.token,!0===i.noSpace),e.success&&(this.pos+=e.incrementPos);else{if(!i.expect)throw Ye(i),new x("Bad grammar! No `token` or `expect` property "+i);e=i.oneOrMore?this.expectOneOrMore(i):i.zeroOrMore?this.expectZeroOrMore(i):this.expectOne(i)}const s=[];return e.matches=s,e.results&&e.results.forEach((t=>s.push(He(t)))),i.run&&e.success&&i.run({matches:s}),e}}function je(...t){Qe.DEBUG&&f("Vex.Flow.EasyScore",t)}ze.DEBUG=!1;class Xe{constructor(t){this.builder=t}begin(){return this.LINE}LINE(){return{expect:[this.PIECE,this.PIECES,this.EOL]}}PIECE(){return{expect:[this.CHORDORNOTE,this.PARAMS],run:()=>this.builder.commitPiece()}}PIECES(){return{expect:[this.COMMA,this.PIECE],zeroOrMore:!0}}PARAMS(){return{expect:[this.DURATION,this.TYPE,this.DOTS,this.OPTS]}}CHORDORNOTE(){return{expect:[this.CHORD,this.SINGLENOTE],or:!0}}CHORD(){return{expect:[this.LPAREN,this.NOTES,this.RPAREN],run:t=>this.builder.addChord(t.matches[1])}}NOTES(){return{expect:[this.NOTE],oneOrMore:!0}}NOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE]}}SINGLENOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE],run:t=>{const e=t;this.builder.addSingleNote(e.matches[0],e.matches[1],e.matches[2])}}}ACCIDENTAL(){return{expect:[this.MICROTONES,this.ACCIDENTALS],maybe:!0,or:!0}}DOTS(){return{expect:[this.DOT],zeroOrMore:!0,run:t=>this.builder.setNoteDots(t.matches)}}TYPE(){return{expect:[this.SLASH,this.MAYBESLASH,this.TYPES],maybe:!0,run:t=>this.builder.setNoteType(t.matches[2])}}DURATION(){return{expect:[this.SLASH,this.DURATIONS],maybe:!0,run:t=>this.builder.setNoteDuration(t.matches[1])}}OPTS(){return{expect:[this.LBRACKET,this.KEYVAL,this.KEYVALS,this.RBRACKET],maybe:!0}}KEYVALS(){return{expect:[this.COMMA,this.KEYVAL],zeroOrMore:!0}}KEYVAL(){return{expect:[this.KEY,this.EQUALS,this.VAL],run:t=>this.builder.addNoteOption(t.matches[0],t.matches[2].slice(1,-1))}}VAL(){return{expect:[this.SVAL,this.DVAL],or:!0}}KEY(){return{token:"[a-zA-Z][a-zA-Z0-9]*"}}DVAL(){return{token:'["][^"]*["]'}}SVAL(){return{token:"['][^']*[']"}}NOTENAME(){return{token:"[a-gA-G]"}}OCTAVE(){return{token:"[0-9]+"}}ACCIDENTALS(){return{token:"bb|b|##|#|n"}}MICROTONES(){return{token:"bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o"}}DURATIONS(){return{token:"[0-9whq]+"}}TYPES(){return{token:"[rRsSmMhHgG]"}}LPAREN(){return{token:"[(]"}}RPAREN(){return{token:"[)]"}}COMMA(){return{token:"[,]"}}DOT(){return{token:"[.]"}}SLASH(){return{token:"[/]"}}MAYBESLASH(){return{token:"[/]?"}}EQUALS(){return{token:"[=]"}}LBRACKET(){return{token:"\\["}}RBRACKET(){return{token:"\\]"}}EOL(){return{token:"$"}}}class Ve{constructor(t){this.chord=[],this.dots=0,this.options={},this.duration=t}}class Ke{constructor(t){this.commitHooks=[],this.factory=t,this.reset()}reset(t){this.options=Object.assign({stem:"auto",clef:"treble"},t),this.elements={notes:[],accidentals:[]},this.rollingDuration="8",this.resetPiece()}getFactory(){return this.factory}getElements(){return this.elements}addCommitHook(t){this.commitHooks.push(t)}resetPiece(){je("resetPiece"),this.piece=new Ve(this.rollingDuration)}setNoteDots(t){je("setNoteDots:",t),t&&(this.piece.dots=t.length)}setNoteDuration(t){je("setNoteDuration:",t),this.rollingDuration=this.piece.duration=t||this.rollingDuration}setNoteType(t){je("setNoteType:",t),t&&(this.piece.type=t)}addNoteOption(t,e){je("addNoteOption: key:",t,"value:",e),this.piece.options[t]=e}addNote(t,e,i){je("addNote:",t,e,i),this.piece.chord.push({key:t,accid:e,octave:i})}addSingleNote(t,e,i){je("addSingleNote:",t,e,i),this.addNote(t,e,i)}addChord(t){je("startChord"),"object"!=typeof t[0]?this.addSingleNote(t[0]):t.forEach((t=>{t&&this.addNote(...t)})),je("endChord")}commitPiece(){je("commitPiece");const{factory:t}=this;if(!t)return;const e=Object.assign(Object.assign({},this.options),this.piece.options),i=p(e.stem,"BadArguments","options.stem is not defined").toLowerCase(),s=p(e.clef,"BadArguments","options.clef is not defined").toLowerCase(),{chord:n,duration:a,dots:o,type:r}=this.piece,h=et.accidentals,l=n.map((t=>{var e;return t.key+(h.includes(null!==(e=t.accid)&&void 0!==e?e:"")?t.accid:"")+"/"+t.octave})),c="auto"===i,d="g"==(null==r?void 0:r.toLowerCase())?t.GhostNote({duration:a,dots:o}):t.StaveNote({keys:l,duration:a,dots:o,type:r,clef:s,auto_stem:c});c||d.setStemDirection("up"===i?nt.UP:nt.DOWN);const b=[];n.forEach(((e,i)=>{const s=e.accid;if("string"==typeof s){const e=t.Accidental({type:s});d.addModifier(e,i),b.push(e)}else b.push(void 0)}));for(let t=0;tt(e,d,this))),this.elements.notes.push(d),this.elements.accidentals.push(b),this.resetPiece()}}function $e(t,e){void 0!==t.id&&e.setAttribute("id",t.id)}const Je=/\s*,\s*/;function qe(t,e){void 0!==t.class&&t.class.split(Je).forEach((t=>e.addClass(t)))}class Qe{constructor(t={}){this.defaults={clef:"treble",time:"4/4",stem:"auto"},this.setOptions(t)}set(t){return this.defaults=Object.assign(Object.assign({},this.defaults),t),this}setOptions(t){var e,i;const s=t.factory,n=null!==(e=t.builder)&&void 0!==e?e:new Ke(s);return this.options=Object.assign(Object.assign({commitHooks:[$e,qe,ft.easyScoreHook,Lt.easyScoreHook],throwOnError:!1},t),{factory:s,builder:n}),this.factory=s,this.builder=n,this.grammar=new Xe(this.builder),this.parser=new ze(this.grammar),null===(i=this.options.commitHooks)||void 0===i||i.forEach((t=>this.addCommitHook(t))),this}setContext(t){return this.factory.setContext(t),this}parse(t,e={}){this.builder.reset(e);const i=this.parser.parse(t);if(!i.success&&this.options.throwOnError)throw je(i),new x("Error parsing line: "+t);return i}beam(t,e){return this.factory.Beam({notes:t,options:e}),t}tuplet(t,e){return this.factory.Tuplet({notes:t,options:e}),t}notes(t,e={}){return e=Object.assign({clef:this.defaults.clef,stem:this.defaults.stem},e),this.parse(t,e),this.builder.getElements().notes}voice(t,e={}){return e=Object.assign({time:this.defaults.time},e),this.factory.Voice(e).addTickables(t)}addCommitHook(t){this.builder.addCommitHook(t)}}Qe.DEBUG=!1;const Ze="Ghost note must have valid initialization data to identify duration.";class ti extends It{static get CATEGORY(){return _.GhostNote}constructor(t){if(!t)throw new x("BadArguments",Ze);let e;if("string"==typeof t)e={duration:t};else{if("object"!=typeof t)throw new x("BadArguments",Ze);e=t}super(e),this.setWidth(0)}isRest(){return!0}setStave(t){return super.setStave(t),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){this.setRendered();for(let t=0;t=ri.type.TEXT&&t<=ri.type.MIXED&&(this.type=t),this}setCustomText(t,e){return this.custom_depress_text=t||"",this.custom_release_text=e||"",this}setLine(t){return this.line=t,this}drawBracketed(){const t=this.checkContext();let e,i,s=!1;this.notes.forEach(((n,a,o)=>{var r;s=!s;const h=n.getAbsoluteX(),l=n.checkStave().getYForBottomText(this.line+3);if(h{var s;e=!e;const n=i.checkStave(),a=i.getAbsoluteX(),o=n.getYForBottomText(this.line+3),r=null!==(s=V.currentMusicFont().lookupMetric(`pedalMarking.${e?"down":"up"}.point`))&&void 0!==s?s:V.NOTATION_FONT_SCALE;let h=0;e?this.custom_depress_text?(h=t.measureText(this.custom_depress_text).width,t.fillText(this.custom_depress_text,a-h/2,o)):oi("pedal_depress",t,a,o,r):this.custom_release_text?(h=t.measureText(this.custom_release_text).width,t.fillText(this.custom_release_text,a-h/2,o)):oi("pedal_release",t,a,o,r)}))}draw(){const t=this.checkContext();this.setRendered(),t.save(),t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color),t.setFont(this.textFont),function(...t){ri.DEBUG&&f("Vex.Flow.PedalMarking",t)}("Rendering Pedal Marking"),this.type===ri.type.BRACKET||this.type===ri.type.MIXED?(t.setLineWidth(this.render_options.bracket_line_width),this.drawBracketed()):this.type===ri.type.TEXT&&this.drawText(),t.restore()}}ri.DEBUG=!1,ri.TEXT_FONT={family:F.SERIF,size:12,weight:N.BOLD,style:A.ITALIC},ri.GLYPHS={pedal_depress:{code:"keyboardPedalPed"},pedal_release:{code:"keyboardPedalUp"}},ri.type={TEXT:1,BRACKET:2,MIXED:3},ri.typeString={text:ri.type.TEXT,bracket:ri.type.BRACKET,mixed:ri.type.MIXED};const hi={1:"repeat1Bar",2:"repeat2Bars",4:"repeat4Bars",slash:"repeatBarSlash"};class li extends ei{static get CATEGORY(){return _.RepeatNote}constructor(t,e,i){super(new Z(hi[t]||"repeat1Bar",V.currentMusicFont().lookupMetric("repeatNote.point",40),{category:"repeatNote"}),Object.assign({duration:"q",align_center:"slash"!==t},e),i)}}function ci(t,e,i,s,n,a,o){t.beginPath(),t.moveTo(e,i),t.lineTo(s,n),t.lineTo(a,o),t.lineTo(e,i),t.closePath(),t.fill()}class di extends L{static get CATEGORY(){return _.StaveLine}constructor(t){super(),this.setNotes(t),this.text="",this.resetFont(),this.render_options={padding_left:4,padding_right:3,line_width:1,line_dash:void 0,rounded_end:!0,color:void 0,draw_start_arrow:!1,draw_end_arrow:!1,arrowhead_length:10,arrowhead_angle:Math.PI/8,text_position_vertical:di.TextVerticalPosition.TOP,text_justification:di.TextJustification.CENTER}}setText(t){return this.text=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new x("BadArguments","Notes needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new x("BadArguments","Connected notes must have same number of indices.");return this.notes=t,this.first_note=t.first_note,this.first_indices=t.first_indices,this.last_note=t.last_note,this.last_indices=t.last_indices,this}applyLineStyle(){const t=this.checkContext(),e=this.render_options;e.line_dash&&t.setLineDash(e.line_dash),e.line_width&&t.setLineWidth(e.line_width),e.rounded_end?t.setLineCap("round"):t.setLineCap("square")}applyFontStyle(){const t=this.checkContext();t.setFont(this.textFont);const e=this.render_options.color;e&&(t.setStrokeStyle(e),t.setFillStyle(e))}drawArrowLine(t,e,i){const s=this.render_options.draw_start_arrow&&this.render_options.draw_end_arrow,n=e.x,a=e.y,o=i.x,r=i.y,h=Math.sqrt((o-n)*(o-n)+(r-a)*(r-a)),l=(h-this.render_options.arrowhead_length/3)/h;let c,d,b,m;this.render_options.draw_end_arrow||s?(c=Math.round(n+(o-n)*l),d=Math.round(a+(r-a)*l)):(c=o,d=r),this.render_options.draw_start_arrow||s?(b=n+(o-n)*(1-l),m=a+(r-a)*(1-l)):(b=n,m=a),this.render_options.color&&(t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color)),t.beginPath(),t.moveTo(b,m),t.lineTo(c,d),t.stroke(),t.closePath();const g=Math.atan2(r-a,o-n),_=Math.abs(this.render_options.arrowhead_length/Math.cos(this.render_options.arrowhead_angle));let x,u,p,f,y,S;(this.render_options.draw_end_arrow||s)&&(x=g+Math.PI+this.render_options.arrowhead_angle,p=o+Math.cos(x)*_,f=r+Math.sin(x)*_,u=g+Math.PI-this.render_options.arrowhead_angle,y=o+Math.cos(u)*_,S=r+Math.sin(u)*_,ci(t,p,f,o,r,y,S)),(this.render_options.draw_start_arrow||s)&&(x=g+this.render_options.arrowhead_angle,p=n+Math.cos(x)*_,f=a+Math.sin(x)*_,u=g-this.render_options.arrowhead_angle,y=n+Math.cos(u)*_,S=a+Math.sin(u)*_,ci(t,p,f,n,a,y,S))}draw(){const t=this.checkContext();this.setRendered();const e=this.first_note,i=this.last_note,s=this.render_options;t.save(),this.applyLineStyle();let n={x:0,y:0},a={x:0,y:0};this.first_indices.forEach(((o,r)=>{const h=this.last_indices[r];n=e.getModifierStartXY(2,o),a=i.getModifierStartXY(1,h);const l=n.y>a.y;n.x+=e.getMetrics().modRightPx+s.padding_left,a.x-=i.getMetrics().modLeftPx+s.padding_right;const c=e.getGlyphProps().getWidth();e.getKeyProps()[o].displaced&&1===e.getStemDirection()&&(n.x+=c+s.padding_left);i.getKeyProps()[h].displaced&&-1===i.getStemDirection()&&(a.x-=c+s.padding_right),n.y+=l?-3:1,a.y+=l?2:0,this.drawArrowLine(t,n,a)})),t.restore();const o=t.measureText(this.text).width,r=s.text_justification;let h=0;if(r===di.TextJustification.LEFT)h=n.x;else if(r===di.TextJustification.CENTER){h=(a.x-n.x)/2+n.x-o/2}else r===di.TextJustification.RIGHT&&(h=a.x-o);let l=0;const c=s.text_position_vertical;return c===di.TextVerticalPosition.TOP?l=e.checkStave().getYForTopText():c===di.TextVerticalPosition.BOTTOM&&(l=e.checkStave().getYForBottomText(V.TEXT_HEIGHT_OFFSET_HACK)),t.save(),this.applyFontStyle(),t.fillText(this.text,h,l),t.restore(),this}}di.TEXT_FONT=Object.assign({},L.TEXT_FONT),di.TextVerticalPosition={TOP:1,BOTTOM:2},di.TextJustification=ae;class bi extends L{static get CATEGORY(){return _.System}constructor(t={}){super(),this.setOptions(t),this.partStaves=[],this.partStaveInfos=[],this.partVoices=[]}setOptions(t={}){if(!t.factory)throw new x("NoFactory","System.setOptions(options) requires a factory.");this.factory=t.factory,this.options=Object.assign(Object.assign({factory:this.factory,x:10,y:10,width:500,spaceBetweenStaves:12,autoWidth:!1,noJustification:!1,debugFormatter:!1,formatIterations:0,noPadding:!1},t),{details:Object.assign({alpha:.5},t.details),formatOptions:Object.assign({},t.formatOptions)}),!1===this.options.noJustification&&void 0===t.width&&(this.options.autoWidth=!0)}getX(){return this.options.x}setX(t){this.options.x=t,this.partStaves.forEach((e=>{e.setX(t)}))}getY(){return this.options.y}setY(t){this.options.y=t,this.partStaves.forEach((e=>{e.setY(t)}))}getStaves(){return this.partStaves}getVoices(){return this.partVoices}setContext(t){return super.setContext(t),this.factory.setContext(t),this}addConnector(t="double"){return this.connector=this.factory.StaveConnector({top_stave:this.partStaves[0],bottom_stave:this.partStaves[this.partStaves.length-1],type:t}),this.connector}addStave(t){var e;const i=Object.assign({left_bar:!1},t.options),s=null!==(e=t.stave)&&void 0!==e?e:this.factory.Stave({x:this.options.x,y:this.options.y,width:this.options.width,options:i}),n=Object.assign(Object.assign({spaceAbove:0,spaceBelow:0,debugNoteMetrics:!1,noJustification:!1},t),{options:i}),a=this.getContext();return n.voices.forEach((t=>{t.setContext(a).setStave(s).getTickables().forEach((t=>t.setStave(s))),this.partVoices.push(t)})),this.partStaves.push(s),this.partStaveInfos.push(n),s}addVoices(t){const e=this.getContext();t.forEach((t=>{t.setContext(e),this.partVoices.push(t)}))}format(){const t=this.options.details;let e=0;const i=new Ae(t);this.formatter=i;let s=this.options.y,n=0;const a=[];this.partStaves.forEach(((t,e)=>{s+=t.space(this.partStaveInfos[e].spaceAbove),t.setY(s),s+=t.space(this.partStaveInfos[e].spaceBelow),s+=t.space(this.options.spaceBetweenStaves),this.partStaveInfos[e].debugNoteMetrics&&(a.push({y:s,stave:t}),s+=15),n=Math.max(n,t.getNoteStartX())})),this.partVoices.forEach((t=>{t.getTickables().forEach((t=>{const e=t.getStave();e&&t.setStave(e)}))})),i.joinVoices(this.partVoices),this.partStaves.forEach((t=>t.setNoteStartX(n))),this.options.autoWidth&&this.partVoices.length>0?(e=i.preCalculateMinTotalWidth(this.partVoices),this.options.width=e+Ee.rightPadding+(n-this.options.x),this.partStaves.forEach((t=>{t.setWidth(this.options.width)}))):e=this.options.noPadding?this.options.width-(n-this.options.x):this.options.width-(n-this.options.x)-Ee.defaultPadding,this.partVoices.length>0&&i.format(this.partVoices,this.options.noJustification?0:e,this.options.formatOptions),i.postFormat();for(let e=0;e{this.partVoices.forEach((i=>{i.getTickables().forEach((i=>{i.getStave()===e.stave&&vt.plotMetrics(t,i,e.y)}))}))}))}}class mi extends It{static get CATEGORY(){return _.TabNote}constructor(t,e=!1){super(t),this.glyphPropsArr=[],this.greatestString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>t>e?t:e)),this.leastString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>tthis.width}setStave(t){super.setStave(t);const e=t.getContext();if(this.setContext(e),e){this.width=0;for(let t=0;ti.width),this.width=Math.max(i.getWidth(),this.width)}this.glyphProps.getWidth=()=>this.width}const i=this.positions.map((({str:e})=>t.getYForLine(Number(e)-1)));return this.setYs(i),this.stem&&this.stem.setYBounds(this.getStemY(),this.getStemY()),this}getPositions(){return this.positions}getModifierStartXY(t,e){if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new x("NoYValues","No Y-Values calculated for this note.");let i=0;if(t===tt.Position.LEFT)i=-2;else if(t===tt.Position.RIGHT)i=this.width+2;else if(t===tt.Position.BELOW||t===tt.Position.ABOVE){i=this.glyphProps.getWidth()/2}return{x:this.getAbsoluteX()+i,y:this.ys[e]}}getLineForRest(){return Number(this.positions[0].str)}preFormat(){this.preFormatted||(this.modifierContext&&this.modifierContext.preFormat(),this.preFormatted=!0)}getStemX(){return this.getCenterGlyphX()}getStemY(){const t=this.checkStave().getNumLines()-.5,e=nt.UP===this.stem_direction?-.5:t;return this.checkStave().getYForLine(e)}getStemExtents(){return this.checkStem().getExtents()}drawFlag(){var t;const{beam:e,glyphProps:i,render_options:{draw_stem:s}}=this,n=this.checkContext(),a=null==e&&s;if(i.flag&&a){const e=this.getStemX(),i=this.getStemDirection()===nt.DOWN?this.getStemY()-this.checkStem().getHeight()-(this.glyphProps?this.glyphProps.stem_down_extension:0):this.getStemY()-this.checkStem().getHeight()+(this.glyphProps?this.glyphProps.stem_up_extension:0);null===(t=this.flag)||void 0===t||t.render(n,e,i)}}drawModifiers(){this.modifiers.forEach((t=>{r(t)&&!this.render_options.draw_dots||(t.setContext(this.getContext()),t.drawWithStyle())}))}drawStemThrough(){const t=this.getStemX(),e=this.getStemY(),i=this.checkContext(),s=this.render_options.draw_stem,n=this.render_options.draw_stem_through_stave;if(s&&n){const s=function(t,e,i,s){const n=1!==s,a=-1!==s,o=i.getSpacingBetweenLines(),r=i.getNumLines(),h=[];return e.forEach((e=>{const l=e.indexOf(r)>-1,c=e.indexOf(1)>-1;if(n&&c||a&&l)return;1===e.length&&e.push(e[0]);const d=[];e.forEach(((e,n,a)=>{const h=1===e,l=e===r;let c=i.getYForLine(e-1);0!==n||h?n!==a.length-1||l||(c+=o/2-1):c-=o/2-1,d.push(c),1===s&&h?d.push(t-2):-1===s&&l&&d.push(t+2)})),h.push(d.sort(((t,e)=>t-e)))})),h}(e,function(t,e){const i=[];let s=[];for(let n=1;n<=t;n++)e.indexOf(n)>-1?(i.push(s),s=[]):s.push(n);return s.length>0&&i.push(s),i}(this.checkStave().getNumLines(),this.positions.map((t=>Number(t.str)))),this.checkStave(),this.getStemDirection());i.save(),i.setLineWidth(nt.WIDTH),s.forEach((e=>{0!==e.length&&(i.beginPath(),i.moveTo(t,e[0]),i.lineTo(t,e[e.length-1]),i.stroke(),i.closePath())})),i.restore()}}drawPositions(){var t;const e=this.checkContext(),i=this.getAbsoluteX(),s=this.ys;for(let n=0;n{const i=fi.GLYPHS[e];if(!i)throw new x("Invalid dynamics character: "+e);const s=p(this.render_options.glyph_font_size),n=new Z(i.code,s,{category:"textNote"});this.glyphs.push(n),t+=i.width})),this.setWidth(t),this.preFormatted=!0,this}draw(){this.setRendered();const t=this.getAbsoluteX(),e=this.checkStave().getYForLine(this.line+-3);pi("Rendering Dynamics: ",this.sequence);let i=t;this.glyphs.forEach(((t,s)=>{const n=this.sequence[s];t.render(this.checkContext(),i,e),i+=fi.GLYPHS[n].width}))}}fi.DEBUG=!1;class yi extends vt{static get CATEGORY(){return _.TimeSigNote}constructor(t,e){super({duration:"b"}),this.timeSig=new Te(t,e),this.setWidth(this.timeSig.getGlyph().getMetrics().width),this.ignore_ticks=!0}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkStave(),e=this.checkContext();this.setRendered();const i=this.timeSig.getGlyph();i.getContext()||i.setContext(e),i.setStave(t),i.setYShift(t.getYForLine(2)-t.getYForGlyphs()),i.renderToStave(this.getAbsoluteX())}}class Si extends L{static get CATEGORY(){return _.VibratoBracket}constructor(t){super(),t.start&&(this.start=t.start),t.stop&&(this.stop=t.stop),this.line=1,this.render_options={harsh:!1,wave_height:6,wave_width:4,wave_girth:2,vibrato_width:0}}setLine(t){return this.line=t,this}setHarsh(t){return this.render_options.harsh=t,this}draw(){const t=this.checkContext();this.setRendered();const e=this.start&&this.start.checkStave().getYForTopText(this.line)||this.stop&&this.stop.checkStave().getYForTopText(this.line)||0,i=this.start&&this.start.getAbsoluteX()||this.stop&&this.stop.checkStave().getTieStartX()||0,s=this.stop&&this.stop.getAbsoluteX()-this.stop.getWidth()-5||this.start&&this.start.checkStave().getTieEndX()-10||0;this.render_options.vibrato_width=s-i,function(...t){Si.DEBUG&&f("Vex.Flow.VibratoBracket",t)}("Rendering VibratoBracket: start_x:",i,"stop_x:",s,"y:",e),ce.renderVibrato(t,i,e,this.render_options)}}function Ti(...t){vi.DEBUG&&f("Vex.Flow.Factory",t)}Si.DEBUG=!1;class vi{static newFromElementId(t,e=500,i=200){return new vi({renderer:{elementId:t,width:e,height:i}})}constructor(t={}){Ti("New factory: ",t),this.options={stave:{space:10},renderer:{elementId:"",width:500,height:200,background:"#FFF"},font:vi.TEXT_FONT},this.setOptions(t)}reset(){this.renderQ=[],this.systems=[],this.staves=[],this.voices=[],this.stave=void 0}setOptions(t){this.options=Object.assign(Object.assign({},this.options),t),this.initRenderer(),this.reset()}initRenderer(){const{elementId:t,width:e,height:i,background:s}=this.options.renderer;if(null==t)return;if(""==t)throw Ti(this),new x("renderer.elementId not set in FactoryOptions");let n=this.options.renderer.backend;if(void 0===n){n=Jt(document.getElementById(t))?re.Backends.CANVAS:re.Backends.SVG}this.context=re.buildContext(t,n,e,i,s)}getContext(){return this.context}setContext(t){return this.context=t,this}getStave(){return this.stave}getVoices(){return this.voices}Stave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1*e}},t),s=new Ee(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}TabStave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1.3*e}},t),s=new gi(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}StaveNote(t){const e=new Ut(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GlyphNote(t,e,i){const s=new ei(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}RepeatNote(t,e,i){const s=new li(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}GhostNote(t){const e=new ti(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TextNote(t){const e=new pe(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}BarNote(t={}){const e=new Dt(t.type);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}ClefNote(t){const e=Object.assign({type:"treble",options:{size:"default",annotation:void 0}},t),i=new We(e.type,e.options.size,e.options.annotation);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}TimeSigNote(t){const e=Object.assign({time:"4/4"},t),i=new yi(e.time);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}KeySigNote(t){const e=new si(t.key,t.cancelKey,t.alterKey);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TabNote(t){const e=new mi(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GraceNote(t){const e=new ii(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),e}GraceNoteGroup(t){const e=new Xt(t.notes,t.slur);return e.setContext(this.context),e}Accidental(t){const e=new st(t.type);return e.setContext(this.context),e}Annotation(t){const e=Object.assign({text:"p",hJustify:ct.CENTER,vJustify:dt.BOTTOM},t),i=new bt(e.text);return i.setJustification(e.hJustify),i.setVerticalJustification(e.vJustify),i.setFont(e.font),i.setContext(this.context),i}ChordSymbol(t){const e=Object.assign({vJustify:"top",hJustify:"center",kerning:!0,reportWidth:!0},t),i=new Ot;return i.setHorizontal(e.hJustify),i.setVertical(e.vJustify),i.setEnableKerning(e.kerning),i.setReportWidth(e.reportWidth),"string"==typeof e.fontFamily&&"number"==typeof e.fontSize?"string"==typeof e.fontWeight?i.setFont(e.fontFamily,e.fontSize,e.fontWeight):i.setFont(e.fontFamily,e.fontSize,""):"number"==typeof e.fontSize&&i.setFontSize(e.fontSize),i.setContext(this.context),i}Articulation(t){var e;const i=new ft(null!==(e=null==t?void 0:t.type)&&void 0!==e?e:"a.");return null!=(null==t?void 0:t.position)&&i.setPosition(t.position),null!=(null==t?void 0:t.betweenLines)&&i.setBetweenLines(t.betweenLines),i.setContext(this.context),i}Ornament(t,e){const i=Object.assign({type:t,position:0,accidental:""},e),s=new Kt(t);return s.setPosition(i.position),i.upperAccidental&&s.setUpperAccidental(i.upperAccidental),i.lowerAccidental&&s.setLowerAccidental(i.lowerAccidental),void 0!==i.delayed&&s.setDelayed(i.delayed),s.setContext(this.context),s}TextDynamics(t){const e=Object.assign({text:"p",duration:"q",dots:0,line:0},t),i=new fi({text:e.text,line:e.line,duration:e.duration,dots:e.dots});return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}Fingering(t){const e=Object.assign({number:"0",position:"left"},t),i=new Lt(e.number);return i.setPosition(e.position),i.setContext(this.context),i}StringNumber(t,e=!0){const i=new he(t.number);return i.setPosition(t.position),i.setContext(this.context),i.setDrawCircle(e),i}TickContext(){return new Pe}ModifierContext(){return new be}MultiMeasureRest(t){const e=p(t.number_of_measures,"NoNumberOfMeasures"),i=new ai(e,t);return i.setContext(this.context),this.renderQ.push(i),i}Voice(t){const e=Object.assign({time:"4/4"},t),i=new jt(e.time);return this.voices.push(i),i}StaveConnector(t){const e=new Ce(t.top_stave,t.bottom_stave);return e.setType(t.type).setContext(this.context),this.renderQ.push(e),e}Formatter(t){return new Ae(t)}Tuplet(t){const e=Object.assign({notes:[],options:{}},t),i=new De(e.notes,e.options).setContext(this.context);return this.renderQ.push(i),i}Beam(t){var e,i,s,n,a;const o=new Le(t.notes,null===(e=t.options)||void 0===e?void 0:e.autoStem).setContext(this.context);return o.breakSecondaryAt(null!==(s=null===(i=t.options)||void 0===i?void 0:i.secondaryBeamBreaks)&&void 0!==s?s:[]),(null===(n=t.options)||void 0===n?void 0:n.partialBeamDirections)&&Object.entries(null===(a=t.options)||void 0===a?void 0:a.partialBeamDirections).forEach((([t,e])=>{o.setPartialBeamSideAt(Number(t),e)})),this.renderQ.push(o),o}Curve(t){const e=new Ue(t.from,t.to,t.options).setContext(this.context);return this.renderQ.push(e),e}StaveTie(t){var e;const i=new Yt({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices},t.text);return(null===(e=t.options)||void 0===e?void 0:e.direction)&&i.setDirection(t.options.direction),i.setContext(this.context),this.renderQ.push(i),i}StaveLine(t){var e,i;const s=new di({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices});return(null===(e=t.options)||void 0===e?void 0:e.text)&&s.setText(t.options.text),(null===(i=t.options)||void 0===i?void 0:i.font)&&s.setFont(t.options.font),s.setContext(this.context),this.renderQ.push(s),s}VibratoBracket(t){const e=new Si({start:t.from,stop:t.to});return t.options.line&&e.setLine(t.options.line),t.options.harsh&&e.setHarsh(t.options.harsh),e.setContext(this.context),this.renderQ.push(e),e}TextBracket(t){const e=new ui({start:t.from,stop:t.to,text:t.text,superscript:t.options.superscript,position:t.options.position});return t.options.line&&e.setLine(t.options.line),t.options.font&&e.setFont(t.options.font),e.setContext(this.context),this.renderQ.push(e),e}System(t={}){t.factory=this;const e=new bi(t).setContext(this.context);return this.systems.push(e),e}EasyScore(t={}){return t.factory=this,new Qe(t)}PedalMarking(t){const e=Object.assign({notes:[],options:{style:"mixed"}},t),i=new ri(e.notes);return i.setType(ri.typeString[e.options.style]),i.setContext(this.context),this.renderQ.push(i),i}NoteSubGroup(t){const e=Object.assign({notes:[]},t),i=new Vt(e.notes);return i.setContext(this.context),i}draw(){const t=this.context;this.systems.forEach((e=>e.setContext(t).format())),this.staves.forEach((e=>e.setContext(t).draw())),this.voices.forEach((e=>e.setContext(t).draw())),this.renderQ.forEach((e=>{e.isRendered()||e.setContext(t).draw()})),this.systems.forEach((e=>e.setContext(t).draw())),this.reset()}}vi.DEBUG=!1,vi.TEXT_FONT=Object.assign({},L.TEXT_FONT);class wi extends mi{static get CATEGORY(){return _.GraceTabNote}constructor(t){super(t,!1),this.render_options=Object.assign(Object.assign({},this.render_options),{y_shift:.3,scale:.6,font:`7.5pt ${F.SANS_SERIF}`}),this.updateWidth()}}class Ei{constructor(t){this.music=new et,this.setKey(t)}setKey(t){return this.key=t,this.reset(),this}getKey(){return this.key}reset(){this.keyParts=this.music.getKeyParts(this.key),this.keyString=this.keyParts.root,this.keyParts.accidental&&(this.keyString+=this.keyParts.accidental);if(!et.scaleTypes[this.keyParts.type])throw new x("BadArguments",`Unsupported key type: ${this.key}`);this.scale=this.music.getScaleTones(this.music.getNoteValue(this.keyString),et.scaleTypes[this.keyParts.type]),this.scaleMap={},this.scaleMapByValue={},this.originalScaleMapByValue={};const t=et.root_indices[this.keyParts.root];for(let e=0;es?Ci.SLIDE_DOWN:Ci.SLIDE_UP}this.direction=e,this.render_options.cp1=11,this.render_options.cp2=14,this.render_options.y_shift=.5,this.resetFont()}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new x("BadArguments","No Y-values to render");const e=this.checkContext(),i=t.first_x_px,s=t.first_ys,n=t.last_x_px,a=t.direction;if(a!==Ci.SLIDE_UP&&a!==Ci.SLIDE_DOWN)throw new x("BadSlide","Invalid slide direction");const o=this.notes.first_indices;for(let t=0;tthis.tuningValues.length)throw new x("BadArguments",`String number must be between 1 and ${this.tuningValues.length}:${t}`);return this.tuningValues[e-1]}getValueForFret(t,e){const i=this.getValueForString(e),s=Number(t);if(s<0)throw new x("BadArguments",`Fret number must be 0 or higher: ${t}`);return i+s}getNoteForFret(t,e){const i=this.getValueForFret(t,e),s=Math.floor(i/12),n=i%12;return`${V.integerToNote(n)}/${s}`}}var Ai=function(t,e,i,s){return new(i||(i=Promise))((function(n,a){function o(t){try{h(s.next(t))}catch(t){a(t)}}function r(t){try{h(s.throw(t))}catch(t){a(t)}}function h(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,r)}h((s=s.apply(t,e||[])).next())}))};class ki{static get BUILD(){return{VERSION:"4.2.6",ID:"103aad2b14837418c5e96c9e078edd036fcddf60",DATE:"2024-08-26T20:16:17.134Z"}}static setMusicFont(...t){const e=t.map((t=>F.load(t)));return V.MUSIC_FONT_STACK=e,Z.MUSIC_FONT_STACK=e.slice(),Z.CURRENT_CACHE_KEY=t.join(","),e}static fetchMusicFont(t,e){return Ai(this,void 0,void 0,(function*(){}))}static getMusicFont(){return V.MUSIC_FONT_STACK.map((t=>t.getName()))}static getMusicFontStack(){return V.MUSIC_FONT_STACK}static get RENDER_PRECISION_PLACES(){return V.RENDER_PRECISION_PLACES}static set RENDER_PRECISION_PLACES(t){V.RENDER_PRECISION_PLACES=t}static get SOFTMAX_FACTOR(){return V.SOFTMAX_FACTOR}static set SOFTMAX_FACTOR(t){V.SOFTMAX_FACTOR=t}static get NOTATION_FONT_SCALE(){return V.NOTATION_FONT_SCALE}static set NOTATION_FONT_SCALE(t){V.NOTATION_FONT_SCALE=t}static get TABLATURE_FONT_SCALE(){return V.TABLATURE_FONT_SCALE}static set TABLATURE_FONT_SCALE(t){V.TABLATURE_FONT_SCALE=t}static get RESOLUTION(){return V.RESOLUTION}static set RESOLUTION(t){V.RESOLUTION=t}static get SLASH_NOTEHEAD_WIDTH(){return V.SLASH_NOTEHEAD_WIDTH}static set SLASH_NOTEHEAD_WIDTH(t){V.SLASH_NOTEHEAD_WIDTH=t}static get STAVE_LINE_DISTANCE(){return V.STAVE_LINE_DISTANCE}static set STAVE_LINE_DISTANCE(t){V.STAVE_LINE_DISTANCE=t}static get STAVE_LINE_THICKNESS(){return V.STAVE_LINE_THICKNESS}static set STAVE_LINE_THICKNESS(t){V.STAVE_LINE_THICKNESS=t}static get STEM_HEIGHT(){return V.STEM_HEIGHT}static set STEM_HEIGHT(t){V.STEM_HEIGHT=t}static get STEM_WIDTH(){return V.STEM_WIDTH}static set STEM_WIDTH(t){V.STEM_WIDTH=t}static get TIME4_4(){return V.TIME4_4}static get accidentalMap(){return V.accidentalMap}static get unicode(){return V.unicode}static keySignature(t){return V.keySignature(t)}static hasKeySignature(t){return V.hasKeySignature(t)}static getKeySignatures(){return V.getKeySignatures()}static clefProperties(t){return V.clefProperties(t)}static keyProperties(t,e,i){return V.keyProperties(t,e,i)}static durationToTicks(t){return V.durationToTicks(t)}}ki.Accidental=st,ki.Annotation=bt,ki.Articulation=ft,ki.Barline=kt,ki.BarNote=Dt,ki.Beam=Le,ki.Bend=Mt,ki.BoundingBox=C,ki.BoundingBoxComputation=P,ki.CanvasContext=Qt,ki.ChordSymbol=Ot,ki.Clef=me,ki.ClefNote=We,ki.Crescendo=Ie,ki.Curve=Ue,ki.Dot=Rt,ki.EasyScore=Qe,ki.Element=L,ki.Factory=vi,ki.Font=F,ki.Formatter=Ae,ki.Fraction=E,ki.FretHandFinger=Lt,ki.GhostNote=ti,ki.Glyph=Z,ki.GlyphNote=ei,ki.GraceNote=ii,ki.GraceNoteGroup=Xt,ki.GraceTabNote=wi,ki.KeyManager=Ei,ki.KeySignature=ge,ki.KeySigNote=si,ki.Modifier=tt,ki.ModifierContext=be,ki.MultiMeasureRest=ai,ki.Music=et,ki.Note=vt,ki.NoteHead=Wt,ki.NoteSubGroup=Vt,ki.Ornament=Kt,ki.Parenthesis=$t,ki.Parser=ze,ki.PedalMarking=ri,ki.Registry=R,ki.RenderContext=yt,ki.Renderer=re,ki.RepeatNote=li,ki.Repetition=_e,ki.Stave=Ee,ki.StaveConnector=Ce,ki.StaveHairpin=Bi,ki.StaveLine=di,ki.StaveModifier=At,ki.StaveNote=Ut,ki.StaveTempo=ue,ki.StaveText=fe,ki.StaveTie=Yt,ki.Stem=nt,ki.StringNumber=he,ki.Stroke=le,ki.SVGContext=ie,ki.System=bi,ki.TabNote=mi,ki.TabSlide=Ci,ki.TabStave=gi,ki.TabTie=Ht,ki.TextBracket=ui,ki.TextDynamics=fi,ki.TextFormatter=lt,ki.TextNote=pe,ki.TickContext=Pe,ki.TimeSignature=Te,ki.TimeSigNote=yi,ki.Tremolo=Pi,ki.Tuning=Ni,ki.Tuplet=De,ki.Vibrato=ce,ki.VibratoBracket=Si,ki.Voice=jt,ki.Volta=ye,ki.AnnotationHorizontalJustify=ct,ki.AnnotationVerticalJustify=dt,ki.ChordSymbolHorizontalJustify=Bt,ki.ChordSymbolVerticalJustify=Ct,ki.SymbolTypes=Pt,ki.SymbolModifiers=Nt,ki.CurvePosition=Ge,ki.FontWeight=N,ki.FontStyle=A,ki.ModifierPosition=J,ki.RendererBackends=se,ki.RendererLineEndType=ne,ki.BarlineType=Et,ki.StaveModifierPosition=wt,ki.VoltaType=oe,ki.TextBracketPosition=xi,ki.TextJustification=ae,ki.VoiceMode=zt;const Di={smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}},Mi={resolution:1e3,fontFamily:"VexFlowCustom",glyphs:{vexAccidentalMicrotonal1:{x_min:-171.5,x_max:483.1875,ha:493,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 "},vexAccidentalMicrotonal3:{x_min:0,x_max:430.75,ha:360,o:"m -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z "},vexAccidentalMicrotonal4:{x_min:0,x_max:430.75,ha:360,o:"m 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z "},vexNoteHeadRectBlack:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 "},vexNoteHeadRectWhite:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100"},vexWiggleArpeggioUp:{x_min:58.53125,x_max:228.671875,ha:294,o:"m 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 "}}};const Fi={glyphs:{bracketTop:{x_min:0,x_max:412,y_min:-18,y_max:223,ha:241,o:"m 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z"},bracketBottom:{x_min:0,x_max:412,y_min:-223,y_max:18,ha:241,o:"m 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z"},barlineTick:{x_min:-59,x_max:59,y_min:-139,y_max:139,ha:279,o:"m 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z"},breathMarkTick:{x_min:-151,x_max:272,y_min:0,y_max:429,ha:429,o:"m 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z"},segno:{x_min:7,x_max:493,y_min:-50,y_max:650,ha:699,o:"m 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z"},coda:{x_min:22,x_max:478,y_min:-31,y_max:531,ha:563,o:"m 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z"},gClef:{x_min:0,x_max:623,y_min:-632,y_max:1082,ha:1713,o:"m 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z"},cClef:{x_min:0,x_max:643,y_min:-508,y_max:508,ha:1016,o:"m 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z"},fClef:{x_min:0,x_max:661,y_min:-545,y_max:254,ha:798,o:"m 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z"},unpitchedPercussionClef1:{x_min:-4,x_max:337,y_min:-250,y_max:250,ha:500,o:"m -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z"},"6stringTabClef":{x_min:0,x_max:501,y_min:-735,y_max:753,ha:1487,o:"m 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z"},timeSig0:{x_min:0,x_max:380,y_min:-250,y_max:236,ha:486,o:"m 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z"},timeSig1:{x_min:0,x_max:254,y_min:-250,y_max:236,ha:486,o:"m 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z"},timeSig2:{x_min:0,x_max:337,y_min:-250,y_max:236,ha:486,o:"m 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z"},timeSig3:{x_min:0,x_max:302,y_min:-250,y_max:236,ha:486,o:"m 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z"},timeSig4:{x_min:0,x_max:345,y_min:-250,y_max:236,ha:486,o:"m 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z"},timeSig5:{x_min:0,x_max:302,y_min:-250,y_max:236,ha:486,o:"m 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z"},timeSig6:{x_min:0,x_max:349,y_min:-250,y_max:236,ha:486,o:"m 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z"},timeSig7:{x_min:0,x_max:326,y_min:-250,y_max:236,ha:486,o:"m 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z"},timeSig8:{x_min:0,x_max:360,y_min:-250,y_max:236,ha:486,o:"m 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z"},timeSig9:{x_min:0,x_max:349,y_min:-250,y_max:236,ha:486,o:"m 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z"},timeSigCommon:{x_min:0,x_max:409,y_min:-233,y_max:233,ha:466,o:"m 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z"},timeSigCutCommon:{x_min:0,x_max:409,y_min:-394,y_max:394,ha:788,o:"m 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z"},timeSigPlus:{x_min:0,x_max:235,y_min:-118,y_max:118,ha:235,o:"m 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z"},timeSigPlusSmall:{x_min:0,x_max:235,y_min:-118,y_max:118,ha:235,o:"m 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z"},timeSigMinus:{x_min:0,x_max:235,y_min:-23,y_max:23,ha:46,o:"m 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z"},timeSigParensRight:{x_min:19,x_max:122,y_min:-267,y_max:267,ha:535,o:"m 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z"},timeSigParensRightSmall:{x_min:19,x_max:122,y_min:-267,y_max:267,ha:535,o:"m 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z"},timeSigParensLeft:{x_min:-122,x_max:-19,y_min:-267,y_max:267,ha:534,o:"m -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z"},timeSigParensLeftSmall:{x_min:-122,x_max:-19,y_min:-267,y_max:267,ha:534,o:"m -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z"},noteheadDoubleWhole:{x_min:0,x_max:663,y_min:-174,y_max:174,ha:349,o:"m 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z"},noteheadWhole:{x_min:0,x_max:455,y_min:-135,y_max:135,ha:269,o:"m 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z"},noteheadHalf:{x_min:0,x_max:316,y_min:-135,y_max:135,ha:269,o:"m 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z"},noteheadBlack:{x_min:0,x_max:316,y_min:-135,y_max:135,ha:269,o:"m 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z"},noteheadXWhole:{x_min:0,x_max:440,y_min:-133,y_max:133,ha:265,o:"m 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z"},noteheadXHalf:{x_min:0,x_max:300,y_min:-133,y_max:133,ha:265,o:"m 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z"},noteheadXBlack:{x_min:0,x_max:300,y_min:-133,y_max:133,ha:265,o:"m 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z"},noteheadCircleX:{x_min:0,x_max:357,y_min:-178,y_max:178,ha:357,o:"m 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z"},noteheadTriangleUpWhole:{x_min:0,x_max:462,y_min:-149,y_max:149,ha:297,o:"m 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z"},noteheadTriangleUpHalf:{x_min:0,x_max:323,y_min:-149,y_max:149,ha:298,o:"m 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z"},noteheadTriangleUpBlack:{x_min:0,x_max:322,y_min:-149,y_max:149,ha:297,o:"m 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z"},noteheadDiamondWhole:{x_min:0,x_max:462,y_min:-138,y_max:138,ha:277,o:"m 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z"},noteheadDiamondHalf:{x_min:0,x_max:322,y_min:-138,y_max:138,ha:277,o:"m 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z"},noteheadDiamondBlack:{x_min:0,x_max:322,y_min:-138,y_max:138,ha:277,o:"m 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z"},augmentationDot:{x_min:-63,x_max:63,y_min:-63,y_max:63,ha:126,o:"m -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z"},tremolo1:{x_min:-252,x_max:216,y_min:-185,y_max:148,ha:333,o:"m 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z"},flag8thUp:{x_min:-17,x_max:234,y_min:-745,y_max:-4,ha:741,o:"m -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z"},flag8thDown:{x_min:-15,x_max:271,y_min:4,y_max:745,ha:741,o:"m 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z"},flag16thUp:{x_min:-17,x_max:234,y_min:-847,y_max:-4,ha:843,o:"m -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z"},flag16thDown:{x_min:-15,x_max:267,y_min:4,y_max:745,ha:741,o:"m 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z"},flag32ndUp:{x_min:-17,x_max:233,y_min:-1005,y_max:96,ha:1101,o:"m -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z"},flag32ndDown:{x_min:-15,x_max:270,y_min:-96,y_max:895,ha:991,o:"m 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z"},flag64thUp:{x_min:-17,x_max:233,y_min:-933,y_max:296,ha:1230,o:"m -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z"},flag64thDown:{x_min:-15,x_max:271,y_min:-296,y_max:820,ha:1116,o:"m 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z"},flag128thUp:{x_min:-17,x_max:231,y_min:-987,y_max:496,ha:1484,o:"m -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z"},flag128thDown:{x_min:-15,x_max:270,y_min:-496,y_max:870,ha:1366,o:"m 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z"},accidentalFlat:{x_min:-15,x_max:185,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z"},accidentalNatural:{x_min:0,x_max:176,y_min:-334,y_max:334,ha:667,o:"m 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z"},accidentalSharp:{x_min:0,x_max:239,y_min:-388,y_max:388,ha:775,o:"m 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z"},accidentalDoubleSharp:{x_min:0,x_max:271,y_min:-135,y_max:135,ha:271,o:"m 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z"},accidentalDoubleFlat:{x_min:-15,x_max:356,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z"},accidentalParensLeft:{x_min:-122,x_max:-19,y_min:-267,y_max:267,ha:534,o:"m -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z"},accidentalParensRight:{x_min:19,x_max:122,y_min:-267,y_max:267,ha:535,o:"m 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:200,y_min:-165,y_max:457,ha:622,o:"m 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:446,y_min:-165,y_max:457,ha:622,o:"m 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:142,y_min:-373,y_max:373,ha:747,o:"m 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z"},accidentalThreeQuarterTonesSharpStein:{x_min:0,x_max:335,y_min:-391,y_max:391,ha:782,o:"m 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z"},accidentalBuyukMucennebFlat:{x_min:-125,x_max:185,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z"},accidentalBuyukMucennebSharp:{x_min:0,x_max:284,y_min:-388,y_max:388,ha:775,o:"m 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z"},accidentalBakiyeFlat:{x_min:-129,x_max:185,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z"},accidentalKomaSharp:{x_min:0,x_max:142,y_min:-373,y_max:373,ha:747,o:"m 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:188,y_min:-373,y_max:373,ha:747,o:"m 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z"},articAccentAbove:{x_min:-256,x_max:19,y_min:-114,y_max:114,ha:227,o:"m -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z"},articAccentBelow:{x_min:-256,x_max:19,y_min:-114,y_max:114,ha:227,o:"m -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z"},articTenutoAbove:{x_min:-154,x_max:154,y_min:-15,y_max:15,ha:30,o:"m -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z"},articTenutoBelow:{x_min:-154,x_max:154,y_min:-15,y_max:15,ha:30,o:"m -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z"},articStaccatoAbove:{x_min:-49,x_max:49,y_min:-49,y_max:49,ha:99,o:"m -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z"},articStaccatoBelow:{x_min:-49,x_max:49,y_min:-49,y_max:49,ha:99,o:"m -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z"},articStaccatissimoAbove:{x_min:-53,x_max:53,y_min:0,y_max:184,ha:184,o:"m -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z"},articStaccatissimoBelow:{x_min:-53,x_max:53,y_min:-184,y_max:0,ha:184,o:"m -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z"},articMarcatoAbove:{x_min:-114,x_max:114,y_min:-256,y_max:19,ha:275,o:"m -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z"},articMarcatoBelow:{x_min:-114,x_max:114,y_min:-19,y_max:256,ha:275,o:"m -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z"},fermataAbove:{x_min:-324,x_max:324,y_min:0,y_max:353,ha:353,o:"m -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z"},fermataBelow:{x_min:-324,x_max:324,y_min:-353,y_max:0,ha:353,o:"m -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},fermataLongAbove:{x_min:-286,x_max:286,y_min:0,y_max:364,ha:364,o:"m -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z"},fermataLongBelow:{x_min:-286,x_max:286,y_min:-364,y_max:0,ha:364,o:"m -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},fermataVeryLongAbove:{x_min:-286,x_max:286,y_min:0,y_max:438,ha:438,o:"m -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z"},fermataVeryLongBelow:{x_min:-286,x_max:286,y_min:-438,y_max:0,ha:438,o:"m -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},fermataVeryShortAbove:{x_min:-351,x_max:351,y_min:0,y_max:571,ha:571,o:"m -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z"},fermataVeryShortBelow:{x_min:-351,x_max:351,y_min:-571,y_max:0,ha:571,o:"m 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z"},fermataShortAbove:{x_min:-286,x_max:286,y_min:0,y_max:469,ha:469,o:"m -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z"},fermataShortBelow:{x_min:-286,x_max:286,y_min:-469,y_max:0,ha:469,o:"m -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},breathMarkComma:{x_min:0,x_max:168,y_min:-155,y_max:155,ha:311,o:"m 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z"},breathMarkUpbow:{x_min:-125,x_max:125,y_min:0,y_max:409,ha:409,o:"m -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z"},caesura:{x_min:0,x_max:457,y_min:-202,y_max:303,ha:504,o:"m 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z"},caesuraCurved:{x_min:0,x_max:370,y_min:-207,y_max:310,ha:517,o:"m 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z"},restMaxima:{x_min:0,x_max:853,y_min:-250,y_max:250,ha:500,o:"m 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z"},restDoubleWhole:{x_min:0,x_max:284,y_min:0,y_max:250,ha:250,o:"m 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z"},restWhole:{x_min:0,x_max:330,y_min:-125,y_max:0,ha:125,o:"m 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z"},restWholeLegerLine:{x_min:0,x_max:542,y_min:-125,y_max:11,ha:137,o:"m 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z"},restHalf:{x_min:0,x_max:330,y_min:0,y_max:125,ha:125,o:"m 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z"},restHalfLegerLine:{x_min:0,x_max:542,y_min:-11,y_max:125,ha:137,o:"m 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z"},restQuarter:{x_min:0,x_max:221,y_min:-365,y_max:365,ha:730,o:"m 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z"},rest8th:{x_min:0,x_max:258,y_min:-197,y_max:219,ha:416,o:"m 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z"},rest16th:{x_min:0,x_max:331,y_min:-443,y_max:219,ha:662,o:"m 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z"},rest32nd:{x_min:0,x_max:405,y_min:-443,y_max:466,ha:909,o:"m 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z"},rest64th:{x_min:0,x_max:479,y_min:-689,y_max:466,ha:1155,o:"m 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z"},rest128th:{x_min:0,x_max:553,y_min:-689,y_max:712,ha:1401,o:"m 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z"},dynamicPiano:{x_min:-39,x_max:378,y_min:-178,y_max:277,ha:455,o:"m 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z"},dynamicMezzo:{x_min:35,x_max:493,y_min:-19,y_max:272,ha:291,o:"m 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z"},dynamicForte:{x_min:-87,x_max:440,y_min:-182,y_max:415,ha:597,o:"m 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z"},dynamicRinforzando:{x_min:58,x_max:357,y_min:0,y_max:275,ha:275,o:"m 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z"},dynamicSforzando:{x_min:52,x_max:278,y_min:-22,y_max:270,ha:292,o:"m 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z"},dynamicZ:{x_min:23,x_max:309,y_min:2,y_max:250,ha:248,o:"m 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z"},ornamentTrill:{x_min:-249,x_max:249,y_min:0,y_max:376,ha:376,o:"m -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z"},ornamentTurn:{x_min:-310,x_max:310,y_min:-143,y_max:143,ha:286,o:"m -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z"},ornamentTurnSlash:{x_min:-310,x_max:310,y_min:-201,y_max:201,ha:402,o:"m -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z"},ornamentMordent:{x_min:-296,x_max:296,y_min:-215,y_max:198,ha:413,o:"m -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z"},ornamentShortTrill:{x_min:-296,x_max:296,y_min:-127,y_max:127,ha:253,o:"m -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z"},ornamentTremblement:{x_min:-419,x_max:419,y_min:-127,y_max:127,ha:253,o:"m -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z"},ornamentPrecompAppoggTrill:{x_min:-419,x_max:419,y_min:-127,y_max:255,ha:381,o:"m -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:-433,x_max:433,y_min:-243,y_max:127,ha:370,o:"m -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z"},ornamentPrecompSlideTrillBach:{x_min:-433,x_max:433,y_min:-243,y_max:198,ha:442,o:"m 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:-433,x_max:433,y_min:-127,y_max:244,ha:370,o:"m 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:-439,x_max:439,y_min:-127,y_max:236,ha:363,o:"m -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:-439,x_max:439,y_min:-215,y_max:236,ha:451,o:"m -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z"},ornamentPrecompTrillLowerSuffix:{x_min:-439,x_max:439,y_min:-236,y_max:127,ha:362,o:"m -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z"},stringsDownBow:{x_min:-168,x_max:168,y_min:0,y_max:353,ha:353,o:"m -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z"},stringsUpBow:{x_min:-110,x_max:110,y_min:0,y_max:277,ha:277,o:"m -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z"},stringsHarmonic:{x_min:-82,x_max:82,y_min:-82,y_max:82,ha:163,o:"m -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z"},pluckedSnapPizzicatoAbove:{x_min:-110,x_max:110,y_min:-110,y_max:205,ha:315,o:"m -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z"},pluckedSnapPizzicatoBelow:{x_min:-110,x_max:110,y_min:-205,y_max:110,ha:315,o:"m 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z"},pluckedLeftHandPizzicato:{x_min:-155,x_max:155,y_min:-157,y_max:157,ha:315,o:"m -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z"},keyboardPedalPed:{x_min:0,x_max:782,y_min:-1,y_max:500,ha:501,o:"m 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z"},keyboardPedalUp:{x_min:0,x_max:435,y_min:65,y_max:500,ha:435,o:"m 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z"},pictChokeCymbal:{x_min:0,x_max:168,y_min:-155,y_max:155,ha:311,o:"m 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z"},wiggleArpeggiatoUp:{x_min:-8,x_max:269,y_min:0,y_max:126,ha:126,o:"m 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z"},arrowheadBlackUp:{x_min:11,x_max:239,y_min:-6,y_max:269,ha:275,o:"m 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z"},arrowheadBlackDown:{x_min:11,x_max:239,y_min:6,y_max:281,ha:275,o:"m 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z"}},fontFamily:"GonvilleSmufl",resolution:1e3,generatedOn:"2023-04-20T22:11:26.009Z"};const Oi={spacing:50,glyphs:{" ":{x_min:0,x_max:250,y_min:0,y_max:500,ha:500,leftSideBearing:0,advanceWidth:250},0:{x_min:33,x_max:534,y_min:-13,y_max:751,ha:764,leftSideBearing:33,advanceWidth:570},1:{x_min:48,x_max:235,y_min:-17,y_max:734,ha:751,leftSideBearing:48,advanceWidth:286},2:{x_min:56,x_max:571,y_min:-19,y_max:741,ha:760,leftSideBearing:56,advanceWidth:626},3:{x_min:50,x_max:528,y_min:-7,y_max:731,ha:738,leftSideBearing:50,advanceWidth:589},4:{x_min:38,x_max:564,y_min:-13,y_max:743,ha:756,leftSideBearing:38,advanceWidth:614},5:{x_min:42,x_max:601,y_min:-34,y_max:743,ha:777,leftSideBearing:42,advanceWidth:648},6:{x_min:47,x_max:606,y_min:-16,y_max:743,ha:759,leftSideBearing:47,advanceWidth:667},7:{x_min:47,x_max:567,y_min:5,y_max:739,ha:734,leftSideBearing:0,advanceWidth:615},8:{x_min:40,x_max:541,y_min:-15,y_max:752,ha:767,leftSideBearing:40,advanceWidth:585},9:{x_min:40,x_max:537,y_min:-52,y_max:736,ha:788,leftSideBearing:40,advanceWidth:592},"!":{x_min:49,x_max:180,y_min:-7,y_max:761,ha:768,leftSideBearing:49,advanceWidth:230},'"':{x_min:39,x_max:304,y_min:596,y_max:804,ha:208,leftSideBearing:39,advanceWidth:353},"#":{x_min:33,x_max:599,y_min:-8,y_max:765,ha:773,leftSideBearing:33,advanceWidth:648},$:{x_min:53,x_max:495,y_min:-111,y_max:823,ha:934,leftSideBearing:53,advanceWidth:560},"%":{x_min:35,x_max:656,y_min:-128,y_max:808,ha:936,leftSideBearing:35,advanceWidth:711},"&":{x_min:53,x_max:441,y_min:-3,y_max:753,ha:756,leftSideBearing:53,advanceWidth:500},"'":{x_min:43,x_max:161,y_min:590,y_max:811,ha:221,leftSideBearing:43,advanceWidth:217},"(":{x_min:41,x_max:311,y_min:-36,y_max:845,ha:881,leftSideBearing:41,advanceWidth:308},")":{x_min:-8,x_max:257,y_min:-21,y_max:852,ha:873,leftSideBearing:-8,advanceWidth:280},"*":{x_min:59,x_max:539,y_min:175,y_max:589,ha:414,leftSideBearing:59,advanceWidth:601},"+":{x_min:33,x_max:361,y_min:180,y_max:587,ha:407,leftSideBearing:33,advanceWidth:400},",":{x_min:15,x_max:176,y_min:-129,y_max:92,ha:221,leftSideBearing:15,advanceWidth:205},"-":{x_min:40,x_max:380,y_min:317,y_max:452,ha:135,leftSideBearing:40,advanceWidth:422},".":{x_min:48,x_max:185,y_min:-56,y_max:84,ha:140,leftSideBearing:48,advanceWidth:227},"/":{x_min:-58,x_max:654,y_min:-122,y_max:844,ha:966,leftSideBearing:-58,advanceWidth:626},":":{x_min:65,x_max:225,y_min:97,y_max:536,ha:439,leftSideBearing:65,advanceWidth:302},";":{x_min:13,x_max:295,y_min:-139,y_max:536,ha:675,leftSideBearing:13,advanceWidth:334},"<":{x_min:28,x_max:438,y_min:-1,y_max:607,ha:608,leftSideBearing:28,advanceWidth:475},"=":{x_min:40,x_max:383,y_min:199.9598640852289,y_max:541,ha:341.0401359147711,leftSideBearing:40,advanceWidth:422},">":{x_min:35,x_max:421,y_min:28,y_max:632,ha:604,leftSideBearing:35,advanceWidth:466},"?":{x_min:45,x_max:548,y_min:-17,y_max:767,ha:784,leftSideBearing:45,advanceWidth:592},"@":{x_min:51,x_max:730,y_min:-78,y_max:753,ha:831,leftSideBearing:51,advanceWidth:781},A:{x_min:37,x_max:554,y_min:-4,y_max:746,ha:750,leftSideBearing:37,advanceWidth:617},B:{x_min:37,x_max:532,y_min:3,y_max:783,ha:780,leftSideBearing:37,advanceWidth:579},C:{x_min:37,x_max:583,y_min:-3,y_max:775,ha:778,leftSideBearing:37,advanceWidth:623},D:{x_min:50,x_max:530,y_min:-15,y_max:749,ha:764,leftSideBearing:50,advanceWidth:579},E:{x_min:45,x_max:531,y_min:-1,y_max:743,ha:744,leftSideBearing:45,advanceWidth:585},F:{x_min:45,x_max:459,y_min:23,y_max:727,ha:704,leftSideBearing:45,advanceWidth:510},G:{x_min:31,x_max:577,y_min:-8,y_max:733,ha:741,leftSideBearing:31,advanceWidth:611},H:{x_min:37,x_max:493,y_min:-22,y_max:758,ha:780,leftSideBearing:37,advanceWidth:535},I:{x_min:47,x_max:501,y_min:-3,y_max:731,ha:734,leftSideBearing:47,advanceWidth:541},J:{x_min:33,x_max:531,y_min:-23,y_max:725,ha:748,leftSideBearing:33,advanceWidth:573},K:{x_min:43,x_max:505,y_min:-10,y_max:740,ha:750,leftSideBearing:43,advanceWidth:560},L:{x_min:49,x_max:457,y_min:-2,y_max:746,ha:748,leftSideBearing:49,advanceWidth:510},M:{x_min:35,x_max:699,y_min:1,y_max:744,ha:743,leftSideBearing:35,advanceWidth:743},N:{x_min:34,x_max:533,y_min:-17,y_max:761,ha:778,leftSideBearing:34,advanceWidth:579},O:{x_min:41,x_max:608,y_min:-5,y_max:735,ha:740,leftSideBearing:41,advanceWidth:667},P:{x_min:53,x_max:451,y_min:-18,y_max:735,ha:753,leftSideBearing:53,advanceWidth:497},Q:{x_min:40,x_max:599,y_min:-67,y_max:744,ha:811,leftSideBearing:40,advanceWidth:648},R:{x_min:39,x_max:487,y_min:16,y_max:735,ha:719,leftSideBearing:39,advanceWidth:535},S:{x_min:35,x_max:552,y_min:-47,y_max:708,ha:755,leftSideBearing:35,advanceWidth:604},T:{x_min:26,x_max:656,y_min:-13,y_max:718,ha:731,leftSideBearing:26,advanceWidth:705},U:{x_min:41,x_max:518,y_min:-20,y_max:748,ha:768,leftSideBearing:41,advanceWidth:567},V:{x_min:47,x_max:509,y_min:-26,y_max:744,ha:770,leftSideBearing:47,advanceWidth:567},W:{x_min:44,x_max:789,y_min:-35,y_max:720,ha:755,leftSideBearing:44,advanceWidth:833},X:{x_min:63,x_max:635,y_min:-10,y_max:745,ha:755,leftSideBearing:63,advanceWidth:680},Y:{x_min:43,x_max:503,y_min:-21,y_max:734,ha:755,leftSideBearing:43,advanceWidth:541},Z:{x_min:42,x_max:584,y_min:-10,y_max:739,ha:749,leftSideBearing:42,advanceWidth:629},"[":{x_min:46,x_max:346,y_min:-150,y_max:884,ha:1034,leftSideBearing:46,advanceWidth:291},"\\":{x_min:20,x_max:616,y_min:-100,y_max:797,ha:897,leftSideBearing:20,advanceWidth:645},"]":{x_min:-76,x_max:226,y_min:-150,y_max:881,ha:1031,leftSideBearing:-76,advanceWidth:297},"^":{x_min:43,x_max:437,y_min:517,y_max:812,ha:295,leftSideBearing:43,advanceWidth:478},_:{x_min:29,x_max:563,y_min:-110,y_max:-1,ha:109,leftSideBearing:29,advanceWidth:598},"`":{x_min:54,x_max:321,y_min:540,y_max:747,ha:207,leftSideBearing:54,advanceWidth:368},a:{x_min:20,x_max:447,y_min:-17,y_max:495,ha:512,leftSideBearing:20,advanceWidth:494},b:{x_min:37,x_max:466,y_min:-27,y_max:770,ha:797,leftSideBearing:37,advanceWidth:510},c:{x_min:35,x_max:456,y_min:-9,y_max:507,ha:516,leftSideBearing:35,advanceWidth:460},d:{x_min:45,x_max:520,y_min:-15,y_max:764,ha:779,leftSideBearing:45,advanceWidth:560},e:{x_min:33,x_max:370,y_min:-5,y_max:501,ha:506,leftSideBearing:33,advanceWidth:397},f:{x_min:35,x_max:411,y_min:-13,y_max:695,ha:708,leftSideBearing:35,advanceWidth:453},g:{x_min:33,x_max:551,y_min:-257,y_max:505,ha:762,leftSideBearing:33,advanceWidth:611},h:{x_min:32,x_max:458,y_min:-29,y_max:743,ha:772,leftSideBearing:32,advanceWidth:491},i:{x_min:45,x_max:167,y_min:-13,y_max:631,ha:644,leftSideBearing:45,advanceWidth:220},j:{x_min:-127,x_max:261,y_min:-231,y_max:601,ha:832,leftSideBearing:-127,advanceWidth:308},k:{x_min:39,x_max:443,y_min:-3,y_max:700,ha:703,leftSideBearing:39,advanceWidth:497},l:{x_min:58,x_max:168,y_min:-8,y_max:686,ha:694,leftSideBearing:58,advanceWidth:227},m:{x_min:39,x_max:688,y_min:-14,y_max:501,ha:515,leftSideBearing:39,advanceWidth:718},n:{x_min:45,x_max:491,y_min:-32,y_max:512,ha:544,leftSideBearing:45,advanceWidth:541},o:{x_min:41,x_max:424,y_min:-12,y_max:493,ha:505,leftSideBearing:41,advanceWidth:447},p:{x_min:25,x_max:529,y_min:-260,y_max:500,ha:760,leftSideBearing:25,advanceWidth:573},q:{x_min:53,x_max:603,y_min:-235,y_max:514,ha:749,leftSideBearing:53,advanceWidth:623},r:{x_min:32,x_max:407,y_min:-7,y_max:492,ha:499,leftSideBearing:32,advanceWidth:460},s:{x_min:49,x_max:416,y_min:-12,y_max:519,ha:531,leftSideBearing:49,advanceWidth:460},t:{x_min:32,x_max:442,y_min:-5,y_max:684,ha:689,leftSideBearing:32,advanceWidth:469},u:{x_min:41,x_max:487,y_min:-5,y_max:507,ha:512,leftSideBearing:41,advanceWidth:510},v:{x_min:16,x_max:441,y_min:-20,y_max:542,ha:562,leftSideBearing:16,advanceWidth:456},w:{x_min:39,x_max:639,y_min:-22,y_max:505,ha:527,leftSideBearing:39,advanceWidth:661},x:{x_min:15,x_max:505,y_min:-39,y_max:539,ha:578,leftSideBearing:15,advanceWidth:541},y:{x_min:-98,x_max:501,y_min:-242,y_max:511,ha:753,leftSideBearing:-98,advanceWidth:548},z:{x_min:27,x_max:479,y_min:-3,y_max:494,ha:497,leftSideBearing:27,advanceWidth:494},"{":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"|":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"}":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"~":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308}},fontFamily:"PetalumaScript",resolution:1e3,generatedOn:"2020-06-14T18:33:25.407Z"},Ri={spacing:50,glyphs:{" ":{x_min:0,x_max:509,y_min:0,y_max:2e3,ha:2e3,leftSideBearing:0,advanceWidth:509},0:{x_min:121,x_max:1048,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1168},1:{x_min:117,x_max:767,y_min:0,y_max:1456,ha:1456,leftSideBearing:117,advanceWidth:844},2:{x_min:75.8474576645637,x_max:1040,y_min:0,y_max:1477,ha:1477,leftSideBearing:75,advanceWidth:1131},3:{x_min:74.85365853658536,x_max:994,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1106},4:{x_min:63,x_max:1114,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1187},5:{x_min:96.8448275474953,x_max:982,y_min:-21,y_max:1456,ha:1477,leftSideBearing:96,advanceWidth:1081},6:{x_min:121,x_max:1067,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1144},7:{x_min:76,x_max:1060,y_min:0,y_max:1456,ha:1456,leftSideBearing:-30,advanceWidth:1128},8:{x_min:92,x_max:1039,y_min:-21,y_max:1477,ha:1498,leftSideBearing:92,advanceWidth:1131},9:{x_min:84,x_max:1026,y_min:-21,y_max:1477,ha:1498,leftSideBearing:84,advanceWidth:1154},"!":{x_min:143,x_max:340,y_min:0,y_max:1456,ha:1456,leftSideBearing:143,advanceWidth:483},'"':{x_min:166,x_max:634,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:770},"#":{x_min:63,x_max:1179,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1246},$:{x_min:81.92156915727656,x_max:1012,y_min:-208,y_max:1693,ha:1901,leftSideBearing:81,advanceWidth:1110},"%":{x_min:77,x_max:1384,y_min:-21,y_max:1477,ha:1498,leftSideBearing:77,advanceWidth:1460},"&":{x_min:74,x_max:1242,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1289},"'":{x_min:166,x_max:324,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:460},"(":{x_min:114,x_max:650,y_min:-463,y_max:1636,ha:2099,leftSideBearing:114,advanceWidth:662},")":{x_min:11,x_max:547,y_min:-463,y_max:1636,ha:2099,leftSideBearing:11,advanceWidth:654},"*":{x_min:66,x_max:893,y_min:607,y_max:1456,ha:849,leftSideBearing:66,advanceWidth:958},"+":{x_min:73,x_max:1071,y_min:146,y_max:1206,ha:1060,leftSideBearing:73,advanceWidth:1145},",":{x_min:23,x_max:315,y_min:-311,y_max:221,ha:532,leftSideBearing:23,advanceWidth:404},"-":{x_min:154,x_max:643,y_min:538,y_max:692,ha:154,leftSideBearing:154,advanceWidth:797},".":{x_min:145,x_max:342,y_min:0,y_max:202,ha:202,leftSideBearing:145,advanceWidth:493},"/":{x_min:0,x_max:774,y_min:-125,y_max:1456,ha:1581,leftSideBearing:0,advanceWidth:824},":":{x_min:145,x_max:342,y_min:0,y_max:1082,ha:1082,leftSideBearing:145,advanceWidth:419},";":{x_min:53,x_max:345,y_min:-311,y_max:1082,ha:1393,leftSideBearing:53,advanceWidth:424},"<":{x_min:76,x_max:892,y_min:107,y_max:1013,ha:906,leftSideBearing:76,advanceWidth:1017},"=":{x_min:147,x_max:981,y_min:407,y_max:987,ha:580,leftSideBearing:147,advanceWidth:1127},">":{x_min:125,x_max:980,y_min:87,y_max:993,ha:906,leftSideBearing:125,advanceWidth:1060},"?":{x_min:65.92660602419838,x_max:890,y_min:0,y_max:1477,ha:1477,leftSideBearing:65,advanceWidth:953},"@":{x_min:84.3592218305664,x_max:1705.2346925277395,y_min:-453,y_max:1431,ha:1884,leftSideBearing:84,advanceWidth:1821},A:{x_min:70,x_max:1463,y_min:0,y_max:1456,ha:1456,leftSideBearing:70,advanceWidth:1533},B:{x_min:81,x_max:1253,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1322},C:{x_min:80,x_max:1174,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1290},D:{x_min:81,x_max:1291,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1356},E:{x_min:81,x_max:1190,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1306},F:{x_min:81,x_max:1176,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1256},G:{x_min:80,x_max:1226,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1346},H:{x_min:81,x_max:1497,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1578},I:{x_min:81,x_max:604,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:685},J:{x_min:60,x_max:1100,y_min:-21,y_max:1456,ha:1477,leftSideBearing:60,advanceWidth:1169},K:{x_min:81,x_max:1427,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1501},L:{x_min:81,x_max:1130,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1210},M:{x_min:94,x_max:1888,y_min:0,y_max:1456,ha:1456,leftSideBearing:94,advanceWidth:1982},N:{x_min:83,x_max:1509,y_min:0,y_max:1456,ha:1456,leftSideBearing:83,advanceWidth:1592},O:{x_min:70,x_max:1281,y_min:-21,y_max:1477,ha:1498,leftSideBearing:70,advanceWidth:1351},P:{x_min:81,x_max:1242,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1297},Q:{x_min:70,x_max:1348,y_min:-245,y_max:1477,ha:1722,leftSideBearing:70,advanceWidth:1376},R:{x_min:81,x_max:1285,y_min:0,y_max:1455,ha:1455,leftSideBearing:81,advanceWidth:1385},S:{x_min:115,x_max:1116,y_min:-21,y_max:1477,ha:1498,leftSideBearing:115,advanceWidth:1206},T:{x_min:96,x_max:1306,y_min:0,y_max:1456,ha:1456,leftSideBearing:96,advanceWidth:1406},U:{x_min:70,x_max:1452,y_min:-21,y_max:1456,ha:1477,leftSideBearing:70,advanceWidth:1522},V:{x_min:65,x_max:1443,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1508},W:{x_min:72,x_max:2057,y_min:0,y_max:1456,ha:1456,leftSideBearing:72,advanceWidth:2129},X:{x_min:80,x_max:1449,y_min:0,y_max:1456,ha:1456,leftSideBearing:80,advanceWidth:1529},Y:{x_min:65,x_max:1396,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1461},Z:{x_min:90,x_max:1107,y_min:0,y_max:1456,ha:1456,leftSideBearing:90,advanceWidth:1197},"[":{x_min:157,x_max:541,y_min:-312,y_max:1664,ha:1976,leftSideBearing:157,advanceWidth:573},"\\":{x_min:36,x_max:830,y_min:-125,y_max:1456,ha:1581,leftSideBearing:36,advanceWidth:841},"]":{x_min:23,x_max:408,y_min:-312,y_max:1664,ha:1976,leftSideBearing:23,advanceWidth:552},"^":{x_min:71,x_max:802,y_min:729,y_max:1456,ha:727,leftSideBearing:71,advanceWidth:864},_:{x_min:119,x_max:1041,y_min:-154,y_max:0,ha:154,leftSideBearing:119,advanceWidth:1168},"`":{x_min:40,x_max:456,y_min:1288,y_max:1560,ha:272,leftSideBearing:40,advanceWidth:496},a:{x_min:79,x_max:1053,y_min:-21,y_max:1102,ha:1123,leftSideBearing:79,advanceWidth:1132},b:{x_min:-16,x_max:1071,y_min:-21,y_max:1560,ha:1581,leftSideBearing:-16,advanceWidth:1145},c:{x_min:78,x_max:988,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1067},d:{x_min:78,x_max:1156,y_min:-21,y_max:1560,ha:1581,leftSideBearing:78,advanceWidth:1218},e:{x_min:74,x_max:980,y_min:-21,y_max:1102,ha:1123,leftSideBearing:74,advanceWidth:1059},f:{x_min:64,x_max:731,y_min:0,y_max:1581,ha:1581,leftSideBearing:64,advanceWidth:725},g:{x_min:78,x_max:1133,y_min:-437,y_max:1102,ha:1539,leftSideBearing:78,advanceWidth:1157},h:{x_min:49,x_max:1255,y_min:0,y_max:1560,ha:1560,leftSideBearing:49,advanceWidth:1315},i:{x_min:67,x_max:590,y_min:0,y_max:1560,ha:1560,leftSideBearing:67,advanceWidth:652},j:{x_min:-56,x_max:381,y_min:-437,y_max:1560,ha:1997,leftSideBearing:-56,advanceWidth:525},k:{x_min:64,x_max:1248,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:1287},l:{x_min:64,x_max:587,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:653},m:{x_min:74,x_max:1905,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1977},n:{x_min:74,x_max:1278,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1343},o:{x_min:78,x_max:1046,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1124},p:{x_min:34,x_max:1119,y_min:-416,y_max:1102,ha:1518,leftSideBearing:34,advanceWidth:1197},q:{x_min:78,x_max:1135,y_min:-416,y_max:1102,ha:1518,leftSideBearing:78,advanceWidth:1139},r:{x_min:72,x_max:808,y_min:0,y_max:1102,ha:1102,leftSideBearing:72,advanceWidth:854},s:{x_min:104,x_max:933,y_min:-21,y_max:1102,ha:1123,leftSideBearing:104,advanceWidth:1022},t:{x_min:24,x_max:678,y_min:-17,y_max:1343,ha:1360,leftSideBearing:24,advanceWidth:730},u:{x_min:52,x_max:1181,y_min:-21,y_max:1082,ha:1103,leftSideBearing:52,advanceWidth:1245},v:{x_min:26,x_max:1176,y_min:0,y_max:1082,ha:1082,leftSideBearing:26,advanceWidth:1206},w:{x_min:52,x_max:1777,y_min:0,y_max:1082,ha:1082,leftSideBearing:52,advanceWidth:1823},x:{x_min:42,x_max:1163,y_min:0,y_max:1082,ha:1082,leftSideBearing:42,advanceWidth:1203},y:{x_min:24,x_max:1172,y_min:-437,y_max:1082,ha:1519,leftSideBearing:24,advanceWidth:1192},z:{x_min:88,x_max:960,y_min:0,y_max:1082,ha:1082,leftSideBearing:88,advanceWidth:1032},"{":{x_min:63,x_max:671,y_min:-364,y_max:1597,ha:1961,leftSideBearing:63,advanceWidth:701},"|":{x_min:150,x_max:307,y_min:-270,y_max:1456,ha:1726,leftSideBearing:150,advanceWidth:451},"}":{x_min:27,x_max:635,y_min:-364,y_max:1597,ha:1961,leftSideBearing:27,advanceWidth:701},"~":{x_min:121,x_max:1257,y_min:401,y_max:803,ha:402,leftSideBearing:121,advanceWidth:1386}},fontFamily:"Roboto Slab",resolution:2048,generatedOn:"2020-06-15T19:12:58.120Z"},Li={glyphs:{0:{x_min:86,x_max:1038,y_min:-25,y_max:1472,ha:1497,leftSideBearing:86,advanceWidth:1139},1:{x_min:162,x_max:806,y_min:0,y_max:1472,ha:1472,leftSideBearing:162,advanceWidth:1139},2:{x_min:51,x_max:1036,y_min:0,y_max:1472,ha:1472,leftSideBearing:51,advanceWidth:1139},3:{x_min:77,x_max:1051,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},4:{x_min:38,x_max:1092,y_min:0,y_max:1472,ha:1472,leftSideBearing:38,advanceWidth:1139},5:{x_min:91,x_max:1077,y_min:-25,y_max:1446,ha:1471,leftSideBearing:91,advanceWidth:1139},6:{x_min:87,x_max:1066,y_min:-25,y_max:1472,ha:1497,leftSideBearing:87,advanceWidth:1139},7:{x_min:87,x_max:1048,y_min:0,y_max:1446,ha:1446,leftSideBearing:87,advanceWidth:1139},8:{x_min:83,x_max:1047,y_min:-26,y_max:1472,ha:1498,leftSideBearing:83,advanceWidth:1139},9:{x_min:65,x_max:1044,y_min:-26,y_max:1472,ha:1498,leftSideBearing:65,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:184,x_max:488,y_min:0,y_max:1466,ha:1466,leftSideBearing:184,advanceWidth:682},'"':{x_min:112,x_max:869,y_min:945,y_max:1466,ha:521,leftSideBearing:112,advanceWidth:971},"#":{x_min:18,x_max:1115,y_min:-25,y_max:1491,ha:1516,leftSideBearing:18,advanceWidth:1139},$:{x_min:70,x_max:1048,y_min:-205,y_max:1584,ha:1789,leftSideBearing:70,advanceWidth:1139},"%":{x_min:89,x_max:1725,y_min:-59,y_max:1491,ha:1550,leftSideBearing:89,advanceWidth:1821},"&":{x_min:90,x_max:1446,y_min:-38,y_max:1491,ha:1529,leftSideBearing:90,advanceWidth:1479},"'":{x_min:92,x_max:398,y_min:945,y_max:1466,ha:521,leftSideBearing:92,advanceWidth:487},"(":{x_min:107,x_max:616,y_min:-431,y_max:1491,ha:1922,leftSideBearing:107,advanceWidth:682},")":{x_min:67,x_max:576,y_min:-431,y_max:1491,ha:1922,leftSideBearing:67,advanceWidth:682},"*":{x_min:28,x_max:753,y_min:792,y_max:1491,ha:699,leftSideBearing:28,advanceWidth:797},"+":{x_min:85,x_max:1110,y_min:211,y_max:1236,ha:1025,leftSideBearing:85,advanceWidth:1196},",":{x_min:117,x_max:421,y_min:-327,y_max:281,ha:608,leftSideBearing:117,advanceWidth:569},"-":{x_min:115,x_max:667,y_min:391,y_max:672,ha:281,leftSideBearing:115,advanceWidth:682},".":{x_min:147,x_max:428,y_min:0,y_max:281,ha:281,leftSideBearing:147,advanceWidth:569},"/":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},":":{x_min:201,x_max:482,y_min:0,y_max:1062,ha:1062,leftSideBearing:201,advanceWidth:682},";":{x_min:170,x_max:474,y_min:-327,y_max:1062,ha:1389,leftSideBearing:170,advanceWidth:682},"<":{x_min:95,x_max:1100,y_min:167,y_max:1281,ha:1114,leftSideBearing:95,advanceWidth:1196},"=":{x_min:85,x_max:1110,y_min:372,y_max:1074,ha:702,leftSideBearing:85,advanceWidth:1196},">":{x_min:95,x_max:1101,y_min:166,y_max:1279,ha:1113,leftSideBearing:95,advanceWidth:1196},"?":{x_min:106,x_max:1158,y_min:0,y_max:1481,ha:1481,leftSideBearing:106,advanceWidth:1251},"@":{x_min:61,x_max:1990,y_min:-431,y_max:1492,ha:1923,leftSideBearing:61,advanceWidth:1997},A:{x_min:0,x_max:1471,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1479},B:{x_min:150,x_max:1378,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},C:{x_min:97,x_max:1374,y_min:-25,y_max:1491,ha:1516,leftSideBearing:97,advanceWidth:1479},D:{x_min:148,x_max:1377,y_min:0,y_max:1466,ha:1466,leftSideBearing:148,advanceWidth:1479},E:{x_min:149,x_max:1264,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},F:{x_min:151,x_max:1156,y_min:0,y_max:1466,ha:1466,leftSideBearing:151,advanceWidth:1251},G:{x_min:98,x_max:1469,y_min:-25,y_max:1491,ha:1516,leftSideBearing:98,advanceWidth:1593},H:{x_min:150,x_max:1322,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},I:{x_min:140,x_max:436,y_min:0,y_max:1466,ha:1466,leftSideBearing:140,advanceWidth:569},J:{x_min:35,x_max:973,y_min:-25,y_max:1466,ha:1491,leftSideBearing:35,advanceWidth:1139},K:{x_min:153,x_max:1475,y_min:0,y_max:1466,ha:1466,leftSideBearing:153,advanceWidth:1479},L:{x_min:157,x_max:1189,y_min:0,y_max:1454,ha:1454,leftSideBearing:157,advanceWidth:1251},M:{x_min:145,x_max:1561,y_min:0,y_max:1466,ha:1466,leftSideBearing:145,advanceWidth:1706},N:{x_min:152,x_max:1315,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1479},O:{x_min:89,x_max:1511,y_min:-25,y_max:1491,ha:1516,leftSideBearing:89,advanceWidth:1593},P:{x_min:149,x_max:1272,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},Q:{x_min:89,x_max:1566,y_min:-147,y_max:1491,ha:1638,leftSideBearing:89,advanceWidth:1593},R:{x_min:150,x_max:1468,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},S:{x_min:74,x_max:1266,y_min:-26,y_max:1491,ha:1517,leftSideBearing:74,advanceWidth:1366},T:{x_min:44,x_max:1209,y_min:0,y_max:1466,ha:1466,leftSideBearing:44,advanceWidth:1251},U:{x_min:147,x_max:1316,y_min:-25,y_max:1466,ha:1491,leftSideBearing:147,advanceWidth:1479},V:{x_min:-1,x_max:1364,y_min:0,y_max:1466,ha:1466,leftSideBearing:-1,advanceWidth:1366},W:{x_min:7,x_max:1931,y_min:0,y_max:1466,ha:1466,leftSideBearing:7,advanceWidth:1933},X:{x_min:0,x_max:1363,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1366},Y:{x_min:-3,x_max:1368,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},Z:{x_min:22,x_max:1213,y_min:0,y_max:1466,ha:1466,leftSideBearing:22,advanceWidth:1251},"[":{x_min:146,x_max:644,y_min:-413,y_max:1466,ha:1879,leftSideBearing:146,advanceWidth:682},"\\":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},"]":{x_min:38,x_max:536,y_min:-413,y_max:1466,ha:1879,leftSideBearing:38,advanceWidth:682},"^":{x_min:115,x_max:1080,y_min:692,y_max:1491,ha:799,leftSideBearing:115,advanceWidth:1196},_:{x_min:-19,x_max:1149,y_min:-405,y_max:-223,ha:182,leftSideBearing:-19,advanceWidth:1139},"`":{x_min:42,x_max:495,y_min:1192,y_max:1491,ha:299,leftSideBearing:42,advanceWidth:682},a:{x_min:73,x_max:1070,y_min:-24,y_max:1086,ha:1110,leftSideBearing:73,advanceWidth:1139},b:{x_min:135,x_max:1172,y_min:-24,y_max:1466,ha:1490,leftSideBearing:135,advanceWidth:1251},c:{x_min:85,x_max:1087,y_min:-24,y_max:1086,ha:1110,leftSideBearing:85,advanceWidth:1139},d:{x_min:84,x_max:1121,y_min:-24,y_max:1466,ha:1490,leftSideBearing:84,advanceWidth:1251},e:{x_min:65,x_max:1057.2517482517483,y_min:-24,y_max:1086,ha:1110,leftSideBearing:65,advanceWidth:1139},f:{x_min:24,x_max:742,y_min:0,y_max:1491,ha:1491,leftSideBearing:24,advanceWidth:682},g:{x_min:84,x_max:1120,y_min:-431,y_max:1086,ha:1517,leftSideBearing:84,advanceWidth:1251},h:{x_min:146,x_max:1113,y_min:0,y_max:1466,ha:1466,leftSideBearing:146,advanceWidth:1251},i:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},j:{x_min:-94,x_max:422,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:569},k:{x_min:137,x_max:1119,y_min:0,y_max:1466,ha:1466,leftSideBearing:137,advanceWidth:1139},l:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},m:{x_min:126,x_max:1688,y_min:0,y_max:1086,ha:1086,leftSideBearing:126,advanceWidth:1821},n:{x_min:145,x_max:1113,y_min:0,y_max:1086,ha:1086,leftSideBearing:145,advanceWidth:1251},o:{x_min:82,x_max:1178,y_min:-24,y_max:1086,ha:1110,leftSideBearing:82,advanceWidth:1251},p:{x_min:139,x_max:1175,y_min:-404,y_max:1086,ha:1490,leftSideBearing:139,advanceWidth:1251},q:{x_min:91,x_max:1122,y_min:-404,y_max:1086,ha:1490,leftSideBearing:91,advanceWidth:1251},r:{x_min:135,x_max:823,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:797},s:{x_min:48,x_max:1040,y_min:-24,y_max:1086,ha:1110,leftSideBearing:48,advanceWidth:1139},t:{x_min:31,x_max:657,y_min:-24,y_max:1437,ha:1461,leftSideBearing:31,advanceWidth:682},u:{x_min:141,x_max:1107,y_min:-24,y_max:1062,ha:1086,leftSideBearing:141,advanceWidth:1251},v:{x_min:11,x_max:1114,y_min:0,y_max:1062,ha:1062,leftSideBearing:11,advanceWidth:1139},w:{x_min:9,x_max:1592,y_min:0,y_max:1062,ha:1062,leftSideBearing:9,advanceWidth:1593},x:{x_min:12,x_max:1120,y_min:0,y_max:1062,ha:1062,leftSideBearing:12,advanceWidth:1139},y:{x_min:14,x_max:1106,y_min:-431,y_max:1062,ha:1493,leftSideBearing:14,advanceWidth:1139},z:{x_min:34,x_max:982,y_min:0,y_max:1062,ha:1062,leftSideBearing:34,advanceWidth:1024},"{":{x_min:60,x_max:744,y_min:-431,y_max:1491,ha:1922,leftSideBearing:60,advanceWidth:797},"|":{x_min:176,x_max:399,y_min:-431,y_max:1491,ha:1922,leftSideBearing:176,advanceWidth:573},"}":{x_min:45,x_max:729,y_min:-431,y_max:1491,ha:1922,leftSideBearing:45,advanceWidth:797},"~":{x_min:67,x_max:1129,y_min:519,y_max:924,ha:405,leftSideBearing:67,advanceWidth:1196}},fontFamily:"Arial",resolution:2048,generatedOn:"2022-11-04T20:05:21.000Z"},Wi={smufl:!1,name:"SANS",spacing:50,Description:"Built-in sans-serif font",bold:!0,italic:!0,monospaced:!1,serifs:!1,glyphs:{0:{x_min:85,x_max:1041,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139},1:{x_min:223,x_max:763,y_min:0,y_max:1472,ha:1472,leftSideBearing:223,advanceWidth:1139},2:{x_min:61.840001123045234,x_max:1031,y_min:0,y_max:1472,ha:1472,leftSideBearing:61,advanceWidth:1139},3:{x_min:86,x_max:1046,y_min:-26,y_max:1472,ha:1498,leftSideBearing:86,advanceWidth:1139},4:{x_min:26,x_max:1040,y_min:0,y_max:1466,ha:1466,leftSideBearing:26,advanceWidth:1139},5:{x_min:85,x_max:1057,y_min:-25,y_max:1446,ha:1471,leftSideBearing:85,advanceWidth:1139},6:{x_min:77,x_max:1045,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},7:{x_min:97,x_max:1046,y_min:0,y_max:1447,ha:1447,leftSideBearing:97,advanceWidth:1139},8:{x_min:83,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:83,advanceWidth:1139},9:{x_min:85,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:176,x_max:399,y_min:0,y_max:1466,ha:1466,leftSideBearing:176,advanceWidth:569},'"':{x_min:94,x_max:631,y_min:947,y_max:1466,ha:519,leftSideBearing:94,advanceWidth:727},"#":{x_min:21,x_max:1113,y_min:-25,y_max:1491,ha:1516,leftSideBearing:21,advanceWidth:1139},$:{x_min:73,x_max:1043,y_min:-211,y_max:1601,ha:1812,leftSideBearing:73,advanceWidth:1139},"%":{x_min:119,x_max:1695,y_min:-54,y_max:1491,ha:1545,leftSideBearing:119,advanceWidth:1821},"&":{x_min:88,x_max:1319,y_min:-34,y_max:1491,ha:1525,leftSideBearing:88,advanceWidth:1366},"'":{x_min:90,x_max:295,y_min:947,y_max:1466,ha:519,leftSideBearing:90,advanceWidth:391},"(":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},")":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},"*":{x_min:64,x_max:725,y_min:867,y_max:1491,ha:624,leftSideBearing:64,advanceWidth:797},"+":{x_min:114,x_max:1082,y_min:237,y_max:1206,ha:969,leftSideBearing:114,advanceWidth:1196},",":{x_min:170,x_max:387,y_min:-290,y_max:205,ha:495,leftSideBearing:170,advanceWidth:569},"-":{x_min:65,x_max:618,y_min:440,y_max:621,ha:181,leftSideBearing:65,advanceWidth:682},".":{x_min:186,x_max:391,y_min:0,y_max:205,ha:205,leftSideBearing:186,advanceWidth:569},"/":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},":":{x_min:185,x_max:390,y_min:0,y_max:1062,ha:1062,leftSideBearing:185,advanceWidth:569},";":{x_min:170,x_max:387,y_min:-290,y_max:1062,ha:1352,leftSideBearing:170,advanceWidth:569},"<":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"=":{x_min:114,x_max:1082,y_min:417,y_max:1030,ha:613,leftSideBearing:114,advanceWidth:1196},">":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"?":{x_min:90,x_max:1036,y_min:0,y_max:1491,ha:1491,leftSideBearing:90,advanceWidth:1139},"@":{x_min:111,x_max:2005,y_min:-431,y_max:1493,ha:1924,leftSideBearing:111,advanceWidth:2079},A:{x_min:-3,x_max:1369,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},B:{x_min:150,x_max:1257,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},C:{x_min:102,x_max:1398,y_min:-25,y_max:1491,ha:1516,leftSideBearing:102,advanceWidth:1479},D:{x_min:158,x_max:1370,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1479},E:{x_min:162,x_max:1256,y_min:0,y_max:1466,ha:1466,leftSideBearing:162,advanceWidth:1366},F:{x_min:168,x_max:1157,y_min:0,y_max:1466,ha:1466,leftSideBearing:168,advanceWidth:1251},G:{x_min:109,x_max:1465,y_min:-25,y_max:1491,ha:1516,leftSideBearing:109,advanceWidth:1593},H:{x_min:164,x_max:1314,y_min:0,y_max:1466,ha:1466,leftSideBearing:164,advanceWidth:1479},I:{x_min:191,x_max:385,y_min:0,y_max:1466,ha:1466,leftSideBearing:191,advanceWidth:569},J:{x_min:58.84976474807333,x_max:865,y_min:-25,y_max:1466,ha:1491,leftSideBearing:58,advanceWidth:1024},K:{x_min:150,x_max:1362,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},L:{x_min:150,x_max:1066,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1139},M:{x_min:152,x_max:1551,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1706},N:{x_min:156,x_max:1311,y_min:0,y_max:1466,ha:1466,leftSideBearing:156,advanceWidth:1479},O:{x_min:99,x_max:1501,y_min:-25,y_max:1492,ha:1517,leftSideBearing:99,advanceWidth:1593},P:{x_min:158,x_max:1277,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1366},Q:{x_min:88,x_max:1518,y_min:-114,y_max:1492,ha:1606,leftSideBearing:88,advanceWidth:1593},R:{x_min:161,x_max:1453,y_min:0,y_max:1466,ha:1466,leftSideBearing:161,advanceWidth:1479},S:{x_min:92,x_max:1259,y_min:-25,y_max:1491,ha:1516,leftSideBearing:92,advanceWidth:1366},T:{x_min:48,x_max:1210,y_min:0,y_max:1466,ha:1466,leftSideBearing:48,advanceWidth:1251},U:{x_min:161,x_max:1314,y_min:-25,y_max:1466,ha:1491,leftSideBearing:161,advanceWidth:1479},V:{x_min:9,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},W:{x_min:25,x_max:1910,y_min:0,y_max:1466,ha:1466,leftSideBearing:25,advanceWidth:1933},X:{x_min:9,x_max:1353,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},Y:{x_min:6,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:6,advanceWidth:1366},Z:{x_min:41,x_max:1200,y_min:0,y_max:1466,ha:1466,leftSideBearing:41,advanceWidth:1251},"[":{x_min:139,x_max:536,y_min:-407,y_max:1466,ha:1873,leftSideBearing:139,advanceWidth:569},"\\":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},"]":{x_min:39,x_max:436,y_min:-407,y_max:1466,ha:1873,leftSideBearing:39,advanceWidth:569},"^":{x_min:54,x_max:907,y_min:690,y_max:1491,ha:801,leftSideBearing:54,advanceWidth:961},_:{x_min:-31,x_max:1162,y_min:-407,y_max:-277,ha:130,leftSideBearing:-31,advanceWidth:1139},"`":{x_min:89,x_max:465,y_min:1194,y_max:1474,ha:280,leftSideBearing:89,advanceWidth:682},a:{x_min:74,x_max:1052,y_min:-24,y_max:1086,ha:1110,leftSideBearing:74,advanceWidth:1139},b:{x_min:134,x_max:1055,y_min:-24,y_max:1466,ha:1490,leftSideBearing:134,advanceWidth:1139},c:{x_min:80,x_max:1005,y_min:-24,y_max:1086,ha:1110,leftSideBearing:80,advanceWidth:1024},d:{x_min:70,x_max:991,y_min:-24,y_max:1466,ha:1490,leftSideBearing:70,advanceWidth:1139},e:{x_min:75,x_max:1054,y_min:-24,y_max:1086,ha:1110,leftSideBearing:75,advanceWidth:1139},f:{x_min:19,x_max:640,y_min:0,y_max:1491,ha:1491,leftSideBearing:19,advanceWidth:569},g:{x_min:66,x_max:1002,y_min:-431,y_max:1086,ha:1517,leftSideBearing:66,advanceWidth:1139},h:{x_min:135,x_max:1e3,y_min:0,y_max:1466,ha:1466,leftSideBearing:135,advanceWidth:1139},i:{x_min:136,x_max:316,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:455},j:{x_min:-94,x_max:314,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:455},k:{x_min:136,x_max:1016,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:1024},l:{x_min:131,x_max:311,y_min:0,y_max:1466,ha:1466,leftSideBearing:131,advanceWidth:455},m:{x_min:135,x_max:1574,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1706},n:{x_min:135,x_max:998,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1139},o:{x_min:68,x_max:1063,y_min:-24,y_max:1086,ha:1110,leftSideBearing:68,advanceWidth:1139},p:{x_min:135,x_max:1057,y_min:-407,y_max:1086,ha:1493,leftSideBearing:135,advanceWidth:1139},q:{x_min:72,x_max:992,y_min:-407,y_max:1086,ha:1493,leftSideBearing:72,advanceWidth:1139},r:{x_min:133,x_max:710,y_min:0,y_max:1086,ha:1086,leftSideBearing:133,advanceWidth:682},s:{x_min:63,x_max:945,y_min:-24,y_max:1086,ha:1110,leftSideBearing:63,advanceWidth:1024},t:{x_min:36,x_max:554,y_min:-14,y_max:1433,ha:1447,leftSideBearing:36,advanceWidth:569},u:{x_min:131,x_max:992,y_min:-24,y_max:1062,ha:1086,leftSideBearing:131,advanceWidth:1139},v:{x_min:26,x_max:1e3,y_min:0,y_max:1062,ha:1062,leftSideBearing:26,advanceWidth:1024},w:{x_min:6,x_max:1463,y_min:0,y_max:1062,ha:1062,leftSideBearing:6,advanceWidth:1479},x:{x_min:15,x_max:1009,y_min:0,y_max:1062,ha:1062,leftSideBearing:15,advanceWidth:1024},y:{x_min:33,x_max:1006,y_min:-431,y_max:1062,ha:1493,leftSideBearing:33,advanceWidth:1024},z:{x_min:40,x_max:980,y_min:0,y_max:1062,ha:1062,leftSideBearing:40,advanceWidth:1024},"{":{x_min:57,x_max:636,y_min:-431,y_max:1491,ha:1922,leftSideBearing:57,advanceWidth:684},"|":{x_min:188,x_max:345,y_min:-431,y_max:1491,ha:1922,leftSideBearing:188,advanceWidth:532},"}":{x_min:47,x_max:626,y_min:-431,y_max:1491,ha:1922,leftSideBearing:47,advanceWidth:684},"~":{x_min:87,x_max:1110,y_min:557,y_max:885,ha:328,leftSideBearing:87,advanceWidth:1196}},fontFamily:"sans-serif",resolution:2048,generatedOn:"2020-10-18T18:48:11.823Z"},Ii={smufl:!1,name:"SERIF",spacing:50,Description:"Built-in serif font",bold:!0,italic:!0,monospaced:!1,serifs:!0,glyphs:{0:{x_min:49,x_max:975,y_min:-27,y_max:1383,ha:1410,leftSideBearing:49,advanceWidth:1024},1:{x_min:227,x_max:811,y_min:0,y_max:1383,ha:1383,leftSideBearing:227,advanceWidth:1024},2:{x_min:61,x_max:965,y_min:0,y_max:1383,ha:1383,leftSideBearing:61,advanceWidth:1024},3:{x_min:88,x_max:883,y_min:-27,y_max:1383,ha:1410,leftSideBearing:88,advanceWidth:1024},4:{x_min:25,x_max:967,y_min:0,y_max:1384,ha:1384,leftSideBearing:25,advanceWidth:1024},5:{x_min:66,x_max:898,y_min:-27,y_max:1409,ha:1436,leftSideBearing:66,advanceWidth:1024},6:{x_min:70,x_max:958,y_min:-27,y_max:1401,ha:1428,leftSideBearing:70,advanceWidth:1024},7:{x_min:41,x_max:920,y_min:-16,y_max:1356,ha:1372,leftSideBearing:41,advanceWidth:1024},8:{x_min:115,x_max:911,y_min:-27,y_max:1383,ha:1410,leftSideBearing:115,advanceWidth:1024},9:{x_min:61,x_max:940,y_min:-41,y_max:1383,ha:1424,leftSideBearing:61,advanceWidth:1024}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:512},"!":{x_min:266,x_max:488,y_min:-22,y_max:1383,ha:1405,leftSideBearing:266,advanceWidth:682},'"':{x_min:157.2000021972655,x_max:678.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:157,advanceWidth:836},"#":{x_min:10,x_max:1016,y_min:-1,y_max:1356,ha:1357,leftSideBearing:10,advanceWidth:1024},$:{x_min:90,x_max:936,y_min:-180,y_max:1492,ha:1672,leftSideBearing:90,advanceWidth:1024},"%":{x_min:125,x_max:1581,y_min:-30,y_max:1388,ha:1418,leftSideBearing:125,advanceWidth:1706},"&":{x_min:86,x_max:1536,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1593},"'":{x_min:97.20000219726548,x_max:273.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:97,advanceWidth:369},"(":{x_min:98,x_max:623,y_min:-363,y_max:1383,ha:1746,leftSideBearing:98,advanceWidth:682},")":{x_min:59,x_max:584,y_min:-363,y_max:1383,ha:1746,leftSideBearing:59,advanceWidth:682},"*":{x_min:137.96078522291893,x_max:886.039214777081,y_min:543,y_max:1383,ha:840,leftSideBearing:137,advanceWidth:1024},"+":{x_min:61,x_max:1093,y_min:2,y_max:1034,ha:1032,leftSideBearing:61,advanceWidth:1155},",":{x_min:115,x_max:399,y_min:-291,y_max:208,ha:499,leftSideBearing:115,advanceWidth:512},"-":{x_min:80,x_max:584,y_min:396,y_max:525,ha:129,leftSideBearing:80,advanceWidth:682},".":{x_min:143,x_max:371,y_min:-22,y_max:205,ha:227,leftSideBearing:143,advanceWidth:512},"/":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},":":{x_min:166,x_max:394,y_min:-22,y_max:943,ha:965,leftSideBearing:166,advanceWidth:569},";":{x_min:164,x_max:448,y_min:-290,y_max:943,ha:1233,leftSideBearing:164,advanceWidth:569},"<":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"=":{x_min:61,x_max:1093,y_min:246,y_max:791,ha:545,leftSideBearing:61,advanceWidth:1155},">":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"?":{x_min:139,x_max:848,y_min:-15,y_max:1383,ha:1398,leftSideBearing:139,advanceWidth:909},"@":{x_min:238,x_max:1657,y_min:-29,y_max:1386,ha:1415,leftSideBearing:238,advanceWidth:1886},A:{x_min:31,x_max:1445,y_min:0,y_max:1380,ha:1380,leftSideBearing:31,advanceWidth:1479},B:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},C:{x_min:57,x_max:1296,y_min:-28,y_max:1383,ha:1411,leftSideBearing:57,advanceWidth:1366},D:{x_min:33,x_max:1403,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1479},E:{x_min:25,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},F:{x_min:25,x_max:1119,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1139},G:{x_min:66,x_max:1452,y_min:-28,y_max:1383,ha:1411,leftSideBearing:66,advanceWidth:1479},H:{x_min:39,x_max:1438,y_min:0,y_max:1356,ha:1356,leftSideBearing:39,advanceWidth:1479},I:{x_min:37,x_max:642,y_min:0,y_max:1356,ha:1356,leftSideBearing:37,advanceWidth:682},J:{x_min:20,x_max:758,y_min:-28,y_max:1356,ha:1384,leftSideBearing:20,advanceWidth:797},K:{x_min:70,x_max:1479,y_min:0,y_max:1356,ha:1356,leftSideBearing:70,advanceWidth:1479},L:{x_min:25,x_max:1224,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},M:{x_min:25,x_max:1768,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1821},N:{x_min:25,x_max:1450,y_min:-22,y_max:1356,ha:1378,leftSideBearing:25,advanceWidth:1479},O:{x_min:70,x_max:1409,y_min:-28,y_max:1383,ha:1411,leftSideBearing:70,advanceWidth:1479},P:{x_min:33,x_max:1110,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1139},Q:{x_min:70,x_max:1435,y_min:-364.28571588721996,y_max:1383,ha:1747.28571588722,leftSideBearing:70,advanceWidth:1479},R:{x_min:35,x_max:1347,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},S:{x_min:86,x_max:1006,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1139},T:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1251},U:{x_min:29,x_max:1444,y_min:-28,y_max:1356,ha:1384,leftSideBearing:29,advanceWidth:1479},V:{x_min:33,x_max:1428,y_min:-22,y_max:1356,ha:1378,leftSideBearing:33,advanceWidth:1479},W:{x_min:10,x_max:1906,y_min:-22,y_max:1356,ha:1378,leftSideBearing:10,advanceWidth:1933},X:{x_min:20,x_max:1449,y_min:0,y_max:1356,ha:1356,leftSideBearing:20,advanceWidth:1479},Y:{x_min:45,x_max:1441,y_min:0,y_max:1356,ha:1356,leftSideBearing:45,advanceWidth:1479},Z:{x_min:18,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:18,advanceWidth:1251},"[":{x_min:180,x_max:612,y_min:-319,y_max:1355,ha:1674,leftSideBearing:180,advanceWidth:682},"\\":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},"]":{x_min:70,x_max:502,y_min:-319,y_max:1355,ha:1674,leftSideBearing:70,advanceWidth:682},"^":{x_min:49,x_max:914,y_min:608,y_max:1355,ha:747,leftSideBearing:49,advanceWidth:961},_:{x_min:0,x_max:1024,y_min:-255,y_max:-153,ha:102,leftSideBearing:0,advanceWidth:1024},"`":{x_min:39,x_max:499,y_min:1037,y_max:1392.509803639748,ha:355.50980363974804,leftSideBearing:39,advanceWidth:682},a:{x_min:76,x_max:905,y_min:-20,y_max:942,ha:962,leftSideBearing:76,advanceWidth:909},b:{x_min:6,x_max:958,y_min:-20,y_max:1399,ha:1419,leftSideBearing:6,advanceWidth:1024},c:{x_min:51,x_max:843,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},d:{x_min:55,x_max:1006,y_min:-20,y_max:1399,ha:1419,leftSideBearing:55,advanceWidth:1024},e:{x_min:51,x_max:868,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},f:{x_min:41,x_max:783,y_min:0,y_max:1399,ha:1399,leftSideBearing:41,advanceWidth:682},g:{x_min:57,x_max:963,y_min:-446,y_max:942,ha:1388,leftSideBearing:57,advanceWidth:1024},h:{x_min:18,x_max:997,y_min:0,y_max:1399,ha:1399,leftSideBearing:18,advanceWidth:1024},i:{x_min:33,x_max:516,y_min:0,y_max:1399,ha:1399,leftSideBearing:33,advanceWidth:569},j:{x_min:-142,x_max:397,y_min:-446,y_max:1399,ha:1845,leftSideBearing:-142,advanceWidth:569},k:{x_min:14,x_max:1029,y_min:0,y_max:1399,ha:1399,leftSideBearing:14,advanceWidth:1024},l:{x_min:39,x_max:523,y_min:0,y_max:1399,ha:1399,leftSideBearing:39,advanceWidth:569},m:{x_min:33,x_max:1587,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1593},n:{x_min:33,x_max:993,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1024},o:{x_min:59,x_max:963,y_min:-20,y_max:942,ha:962,leftSideBearing:59,advanceWidth:1024},p:{x_min:10,x_max:964,y_min:-443,y_max:944,ha:1387,leftSideBearing:10,advanceWidth:1024},q:{x_min:49,x_max:999,y_min:-443,y_max:942.0135137169275,ha:1385.0135137169275,leftSideBearing:49,advanceWidth:1024},r:{x_min:10,x_max:685,y_min:0,y_max:944,ha:944,leftSideBearing:10,advanceWidth:682},s:{x_min:104,x_max:713,y_min:-20,y_max:942.0263161804552,ha:962.0263161804552,leftSideBearing:104,advanceWidth:797},t:{x_min:27,x_max:572,y_min:-18,y_max:1186,ha:1204,leftSideBearing:27,advanceWidth:569},u:{x_min:18,x_max:981,y_min:-21,y_max:921,ha:942,leftSideBearing:18,advanceWidth:1024},v:{x_min:39,x_max:976,y_min:-28,y_max:921,ha:949,leftSideBearing:39,advanceWidth:1024},w:{x_min:43,x_max:1423,y_min:-28,y_max:921,ha:949,leftSideBearing:43,advanceWidth:1479},x:{x_min:35,x_max:989,y_min:0,y_max:921,ha:921,leftSideBearing:35,advanceWidth:1024},y:{x_min:29,x_max:976,y_min:-445,y_max:921,ha:1366,leftSideBearing:29,advanceWidth:1024},z:{x_min:55,x_max:855,y_min:0,y_max:921,ha:921,leftSideBearing:55,advanceWidth:909},"{":{x_min:205,x_max:717,y_min:-377,y_max:1397,ha:1774,leftSideBearing:205,advanceWidth:983},"|":{x_min:137,x_max:273,y_min:-512,y_max:1535,ha:2047,leftSideBearing:137,advanceWidth:410},"}":{x_min:266,x_max:778,y_min:-377,y_max:1397,ha:1774,leftSideBearing:266,advanceWidth:983},"~":{x_min:82,x_max:1028,y_min:380,y_max:666,ha:286,leftSideBearing:82,advanceWidth:1108}},fontFamily:"serif",resolution:2048,generatedOn:"2020-10-18T19:03:12.514Z"};class Gi{static sortAndUnique(t,e,i){if(t.length>1){const s=[];let n;t.sort(e);for(let e=0;e {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\nexport { Fraction };\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\nexport { Font };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Element };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave -= options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\nexport { Tables };\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\nexport { Glyph };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accidentalLinePositionsAndSpaceNeeds = [];\n let prevNote = undefined;\n let extraXSpaceNeededForLeftDisplacedNotehead = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n // If the current extra left-space needed isn't as big as this note's,\n // then we need to use this note's.\n extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accidentalLinePositionsAndSpaceNeeds.push({\n y,\n line: accLine,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n spacingBetweenStaveLines: lineSpace,\n });\n }\n else {\n accidentalLinePositionsAndSpaceNeeds.push({\n line: props.line,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n });\n }\n }\n // Sort accidentals by line number.\n accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line);\n const staveLineAccidentalLayoutMetrics = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let maxExtraXSpaceNeeded = 0;\n // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics)\n // from accidentalLinePositionsAndSpaceNeeds\n for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) {\n const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i];\n const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1];\n let currentLineMetric;\n // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric\n if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) {\n currentLineMetric = {\n line: accidentalLinePositionAndSpaceNeeds.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n };\n staveLineAccidentalLayoutMetrics.push(currentLineMetric);\n }\n else {\n currentLineMetric = priorLineMetric;\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' &&\n accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') {\n currentLineMetric.flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') {\n currentLineMetric.dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n currentLineMetric.numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing;\n // if this extraXSpaceNeeded is the largest so far, use it as the starting point for\n // all accidental columns.\n maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded);\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd])\n ? 'a'\n : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) {\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = leftShift + maxExtraXSpaceNeeded;\n columnXOffsets[0] = leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded;\n accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift = totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\nexport { Accidental };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nclass Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\nexport { Stem };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\nexport { TextFormatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\nexport { Annotation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\nexport { Articulation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\nexport { ChordSymbol };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n this.barline = new Barline(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n ctx.openGroup('barnote', this.getAttribute('id'));\n this.barline.setType(this.type);\n this.barline.setX(this.getAbsoluteX());\n this.barline.draw(this.checkStave());\n ctx.closeGroup();\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\nexport { BarNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nclass Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Bend };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { FretHandFinger };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\nexport { NoteHead };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n return this._noteHeads;\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\nexport { StaveNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { StaveTie };\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\nexport { GraceNoteGroup };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - stave.getNoteStartX();\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const tickables = note.getVoice().getTickables();\n const index = tickables.indexOf(note);\n const nextContext = index + 1 < tickables.length ? tickables[index + 1].checkTickContext() : undefined;\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - glyphX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\nexport { Ornament };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = (_b = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : Note.getPoint('gracenote');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height, devicePixelRatio) {\n var _a;\n const canvas = this.context2D.canvas;\n const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : globalObject().devicePixelRatio) !== null && _a !== void 0 ? _a : 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / dpr) | 0;\n height = (height / dpr) | 0;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(dpr, dpr);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\nexport { SVGContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\nexport { Renderer };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\nexport { TextNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { Volta };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n /**\n * The modifier context's left_shift state.\n */\n const left_shift = state.left_shift;\n /**\n * The modifier context's right_shift state.\n */\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let extraXSpaceForDisplacedNotehead = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (pos === Modifier.Position.LEFT) {\n extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: extraXSpaceForDisplacedNotehead,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n let num_x_shift = 0;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + extraXSpaceForDisplacedNotehead);\n num_x_shift = num_width; // spacing\n x_widthL = Math.max(num_x_shift, x_widthL);\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_x_shift += num_width; // spacing\n x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StringNumber };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { Stroke };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\nexport { ModifierContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\nexport { Clef };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nclass KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\nexport { KeySignature };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nclass Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n var _a;\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', {\n category: 'coda',\n });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: Tables.NOTATION_FONT_SCALE / 3,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\nexport { Repetition };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveSection };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveTempo };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { StaveText };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nclass Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n /**\n * treat the stave as if the clef is clefSpec, but don't display the clef\n */\n setClefLines(clefSpec) {\n this.clef = clefSpec;\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Stave };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\nexport { StaveConnector };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\nexport { Formatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\nexport { Crescendo };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\nexport { Parser };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\nexport { EasyScore };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\nexport { PedalMarking };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\nexport { StaveLine };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\nexport { TextBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\nexport { TextDynamics };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\nexport { VibratoBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Factory };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\nexport { StaveHairpin };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { TabSlide };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n doubleCBanjo: 'D/5,C/5,G/4,C/4,G/5',\n doubleDBanjo: 'E/5,D/5,A/4,D/4,A/5',\n sawmillBanjo: 'D/5,C/5,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static getMusicFontStack() {\n return Tables.MUSIC_FONT_STACK;\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\nexport { Flow };\n","export const VERSION = '4.2.6';\nexport const ID = '103aad2b14837418c5e96c9e078edd036fcddf60';\nexport const DATE = '2024-08-26T20:16:17.134Z';\n","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const GonvilleSmuflFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 412,\n y_min: -18,\n y_max: 223,\n ha: 241,\n o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 412,\n y_min: -223,\n y_max: 18,\n ha: 241,\n o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z',\n },\n barlineTick: {\n x_min: -59,\n x_max: 59,\n y_min: -139,\n y_max: 139,\n ha: 279,\n o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z',\n },\n breathMarkTick: {\n x_min: -151,\n x_max: 272,\n y_min: 0,\n y_max: 429,\n ha: 429,\n o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z',\n },\n segno: {\n x_min: 7,\n x_max: 493,\n y_min: -50,\n y_max: 650,\n ha: 699,\n o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z',\n },\n coda: {\n x_min: 22,\n x_max: 478,\n y_min: -31,\n y_max: 531,\n ha: 563,\n o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z',\n },\n gClef: {\n x_min: 0,\n x_max: 623,\n y_min: -632,\n y_max: 1082,\n ha: 1713,\n o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z',\n },\n cClef: {\n x_min: 0,\n x_max: 643,\n y_min: -508,\n y_max: 508,\n ha: 1016,\n o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z',\n },\n fClef: {\n x_min: 0,\n x_max: 661,\n y_min: -545,\n y_max: 254,\n ha: 798,\n o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z',\n },\n unpitchedPercussionClef1: {\n x_min: -4,\n x_max: 337,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 501,\n y_min: -735,\n y_max: 753,\n ha: 1487,\n o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z',\n },\n timeSig0: {\n x_min: 0,\n x_max: 380,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z',\n },\n timeSig1: {\n x_min: 0,\n x_max: 254,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z',\n },\n timeSig2: {\n x_min: 0,\n x_max: 337,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z',\n },\n timeSig3: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig4: {\n x_min: 0,\n x_max: 345,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z',\n },\n timeSig5: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig6: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSig7: {\n x_min: 0,\n x_max: 326,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z',\n },\n timeSig8: {\n x_min: 0,\n x_max: 360,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z',\n },\n timeSig9: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -233,\n y_max: 233,\n ha: 466,\n o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -394,\n y_max: 394,\n ha: 788,\n o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 235,\n y_min: -23,\n y_max: 23,\n ha: 46,\n o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z',\n },\n timeSigParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensRightSmall: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n timeSigParensLeftSmall: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 663,\n y_min: -174,\n y_max: 174,\n ha: 349,\n o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 455,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 440,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 357,\n y_min: -178,\n y_max: 178,\n ha: 357,\n o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 323,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z',\n },\n augmentationDot: {\n x_min: -63,\n x_max: 63,\n y_min: -63,\n y_max: 63,\n ha: 126,\n o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z',\n },\n tremolo1: {\n x_min: -252,\n x_max: 216,\n y_min: -185,\n y_max: 148,\n ha: 333,\n o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z',\n },\n flag8thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -745,\n y_max: -4,\n ha: 741,\n o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z',\n },\n flag8thDown: {\n x_min: -15,\n x_max: 271,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z',\n },\n flag16thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -847,\n y_max: -4,\n ha: 843,\n o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z',\n },\n flag16thDown: {\n x_min: -15,\n x_max: 267,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z',\n },\n flag32ndUp: {\n x_min: -17,\n x_max: 233,\n y_min: -1005,\n y_max: 96,\n ha: 1101,\n o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z',\n },\n flag32ndDown: {\n x_min: -15,\n x_max: 270,\n y_min: -96,\n y_max: 895,\n ha: 991,\n o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z',\n },\n flag64thUp: {\n x_min: -17,\n x_max: 233,\n y_min: -933,\n y_max: 296,\n ha: 1230,\n o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z',\n },\n flag64thDown: {\n x_min: -15,\n x_max: 271,\n y_min: -296,\n y_max: 820,\n ha: 1116,\n o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z',\n },\n flag128thUp: {\n x_min: -17,\n x_max: 231,\n y_min: -987,\n y_max: 496,\n ha: 1484,\n o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z',\n },\n flag128thDown: {\n x_min: -15,\n x_max: 270,\n y_min: -496,\n y_max: 870,\n ha: 1366,\n o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z',\n },\n accidentalFlat: {\n x_min: -15,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 176,\n y_min: -334,\n y_max: 334,\n ha: 667,\n o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 239,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 271,\n y_min: -135,\n y_max: 135,\n ha: 271,\n o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z',\n },\n accidentalDoubleFlat: {\n x_min: -15,\n x_max: 356,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z',\n },\n accidentalParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n accidentalParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 200,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 446,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 335,\n y_min: -391,\n y_max: 391,\n ha: 782,\n o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -125,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 284,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z',\n },\n accidentalBakiyeFlat: {\n x_min: -129,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 188,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z',\n },\n articAccentAbove: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articAccentBelow: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articTenutoAbove: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articTenutoBelow: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articStaccatoAbove: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatoBelow: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatissimoAbove: {\n x_min: -53,\n x_max: 53,\n y_min: 0,\n y_max: 184,\n ha: 184,\n o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z',\n },\n articStaccatissimoBelow: {\n x_min: -53,\n x_max: 53,\n y_min: -184,\n y_max: 0,\n ha: 184,\n o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z',\n },\n articMarcatoAbove: {\n x_min: -114,\n x_max: 114,\n y_min: -256,\n y_max: 19,\n ha: 275,\n o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z',\n },\n articMarcatoBelow: {\n x_min: -114,\n x_max: 114,\n y_min: -19,\n y_max: 256,\n ha: 275,\n o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z',\n },\n fermataAbove: {\n x_min: -324,\n x_max: 324,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataBelow: {\n x_min: -324,\n x_max: 324,\n y_min: -353,\n y_max: 0,\n ha: 353,\n o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 364,\n ha: 364,\n o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z',\n },\n fermataLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -364,\n y_max: 0,\n ha: 364,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 438,\n ha: 438,\n o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataVeryLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -438,\n y_max: 0,\n ha: 438,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryShortAbove: {\n x_min: -351,\n x_max: 351,\n y_min: 0,\n y_max: 571,\n ha: 571,\n o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z',\n },\n fermataVeryShortBelow: {\n x_min: -351,\n x_max: 351,\n y_min: -571,\n y_max: 0,\n ha: 571,\n o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z',\n },\n fermataShortAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 469,\n ha: 469,\n o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataShortBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -469,\n y_max: 0,\n ha: 469,\n o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n breathMarkUpbow: {\n x_min: -125,\n x_max: 125,\n y_min: 0,\n y_max: 409,\n ha: 409,\n o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z',\n },\n caesura: {\n x_min: 0,\n x_max: 457,\n y_min: -202,\n y_max: 303,\n ha: 504,\n o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 370,\n y_min: -207,\n y_max: 310,\n ha: 517,\n o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 853,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 330,\n y_min: -125,\n y_max: 0,\n ha: 125,\n o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z',\n },\n restWholeLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -125,\n y_max: 11,\n ha: 137,\n o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 330,\n y_min: 0,\n y_max: 125,\n ha: 125,\n o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z',\n },\n restHalfLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -11,\n y_max: 125,\n ha: 137,\n o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 221,\n y_min: -365,\n y_max: 365,\n ha: 730,\n o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 258,\n y_min: -197,\n y_max: 219,\n ha: 416,\n o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 331,\n y_min: -443,\n y_max: 219,\n ha: 662,\n o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 405,\n y_min: -443,\n y_max: 466,\n ha: 909,\n o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 479,\n y_min: -689,\n y_max: 466,\n ha: 1155,\n o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 553,\n y_min: -689,\n y_max: 712,\n ha: 1401,\n o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z',\n },\n dynamicPiano: {\n x_min: -39,\n x_max: 378,\n y_min: -178,\n y_max: 277,\n ha: 455,\n o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z',\n },\n dynamicMezzo: {\n x_min: 35,\n x_max: 493,\n y_min: -19,\n y_max: 272,\n ha: 291,\n o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z',\n },\n dynamicForte: {\n x_min: -87,\n x_max: 440,\n y_min: -182,\n y_max: 415,\n ha: 597,\n o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z',\n },\n dynamicRinforzando: {\n x_min: 58,\n x_max: 357,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z',\n },\n dynamicSforzando: {\n x_min: 52,\n x_max: 278,\n y_min: -22,\n y_max: 270,\n ha: 292,\n o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z',\n },\n dynamicZ: {\n x_min: 23,\n x_max: 309,\n y_min: 2,\n y_max: 250,\n ha: 248,\n o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z',\n },\n ornamentTrill: {\n x_min: -249,\n x_max: 249,\n y_min: 0,\n y_max: 376,\n ha: 376,\n o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z',\n },\n ornamentTurn: {\n x_min: -310,\n x_max: 310,\n y_min: -143,\n y_max: 143,\n ha: 286,\n o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z',\n },\n ornamentTurnSlash: {\n x_min: -310,\n x_max: 310,\n y_min: -201,\n y_max: 201,\n ha: 402,\n o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z',\n },\n ornamentMordent: {\n x_min: -296,\n x_max: 296,\n y_min: -215,\n y_max: 198,\n ha: 413,\n o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z',\n },\n ornamentShortTrill: {\n x_min: -296,\n x_max: 296,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z',\n },\n ornamentTremblement: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 255,\n ha: 381,\n o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 127,\n ha: 370,\n o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 198,\n ha: 442,\n o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: -433,\n x_max: 433,\n y_min: -127,\n y_max: 244,\n ha: 370,\n o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: -439,\n x_max: 439,\n y_min: -127,\n y_max: 236,\n ha: 363,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: -439,\n x_max: 439,\n y_min: -215,\n y_max: 236,\n ha: 451,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: -439,\n x_max: 439,\n y_min: -236,\n y_max: 127,\n ha: 362,\n o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z',\n },\n stringsDownBow: {\n x_min: -168,\n x_max: 168,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z',\n },\n stringsUpBow: {\n x_min: -110,\n x_max: 110,\n y_min: 0,\n y_max: 277,\n ha: 277,\n o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z',\n },\n stringsHarmonic: {\n x_min: -82,\n x_max: 82,\n y_min: -82,\n y_max: 82,\n ha: 163,\n o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: -110,\n x_max: 110,\n y_min: -110,\n y_max: 205,\n ha: 315,\n o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: -110,\n x_max: 110,\n y_min: -205,\n y_max: 110,\n ha: 315,\n o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: -155,\n x_max: 155,\n y_min: -157,\n y_max: 157,\n ha: 315,\n o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 782,\n y_min: -1,\n y_max: 500,\n ha: 501,\n o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 435,\n y_min: 65,\n y_max: 500,\n ha: 435,\n o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z',\n },\n pictChokeCymbal: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -8,\n x_max: 269,\n y_min: 0,\n y_max: 126,\n ha: 126,\n o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z',\n },\n arrowheadBlackUp: {\n x_min: 11,\n x_max: 239,\n y_min: -6,\n y_max: 269,\n ha: 275,\n o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z',\n },\n arrowheadBlackDown: {\n x_min: 11,\n x_max: 239,\n y_min: 6,\n y_max: 281,\n ha: 275,\n o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z',\n },\n },\n fontFamily: 'GonvilleSmufl',\n resolution: 1000,\n generatedOn: '2023-04-20T22:11:26.009Z',\n};\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\nexport { Vex };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { GonvilleSmuflFont } from './gonville_glyphs';\nexport function loadGonville() {\n Font.load('Gonville', GonvilleSmuflFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { CustomFont } from './custom_glyphs';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-gonville.ts is the entry point for vexflow-gonville.js.\n// This version bundles the Gonville music engraving font.\nimport { Flow } from '../src/flow';\nimport { loadCustom } from '../src/fonts/load_custom';\nimport { loadGonville } from '../src/fonts/load_gonville';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadGonville();\nloadCustom();\nFlow.setMusicFont('Gonville', 'Custom');\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","Function","e","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","isCategory","category","checkAncestors","constructorFcn","constructor","CATEGORY","getPrototypeOf","isAccidental","Category","Accidental","isAnnotation","Annotation","isBarline","Barline","isDot","Dot","isGraceNote","GraceNote","isGraceNoteGroup","GraceNoteGroup","isNote","Note","isRenderContext","RenderContext","isStaveNote","StaveNote","isStemmableNote","StemmableNote","isTabNote","TabNote","RuntimeError","Error","code","message","super","globalObject","self","defined","x","undefined","log","block","args","line","Array","slice","join","console","warn","err","stack","midLine","a","b","mid_line","n","parseInt","prefix","text","normalizeAngle","Math","PI","sumArray","arr","reduce","Fraction","GCD","Number","isNaN","t","LCM","LCMM","length","shift","numerator","denominator","set","simplify","u","d","gcd","add","param1","param2","otherNumerator","otherDenominator","getNumeratorAndDenominator","lcm","subtract","multiply","divide","equals","compare","__staticFractionA","copy","__staticFractionB","greaterThan","greaterThanEquals","lessThan","lessThanEquals","clone","other","quotient","floor","remainder","makeAbs","abs","toString","toSimplifiedString","__staticFractionTmp","toMixedString","s","q","f","parse","str","i","split","BoundingBox","that","y","w","h","getX","getY","getW","getH","setX","setY","setW","setH","move","mergeWith","boundingBox","new_x","new_y","new_w","max","new_h","BoundingBoxComputation","x1","NaN","y1","x2","y2","getX1","getY1","width","height","addPoint","addX","addY","addQuadraticCurve","p0x","p0y","p1x","p1y","p2x","p2y","p01x","denom","it","p01y","addBezierCurve","p3x","p3y","p0","p1","p2","p3","pow","c","b2ac","t1","sqrt","t2","FontWeight","FontStyle","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","fontParser","Fonts","Font","convertSizeToPixelValue","fontSize","SIZE","_a","scaleToPxFrom","pt","parseFloat","unit","replace","toLowerCase","convertSizeToPointValue","validate","size","weight","style","fromCSSString","family","SANS_SERIF","NORMAL","cssFontShorthand","document","createElement","font","fontFamily","fontWeight","fontStyle","toCSSString","fontInfo","st","trim","wt","sz","scaleSize","scaleFactor","isBold","parsedWeight","isItalic","ITALIC","loadWebFont","fontName","woffURL","includeWoff2","fontFace","FontFace","load","fonts","loadWebFonts","host","WEB_FONT_HOST","files","WEB_FONT_FILES","fontPath","data","metrics","setData","setMetrics","name","getName","getData","getMetrics","hasData","getResolution","resolution","getGlyphs","glyphs","lookupMetric","defaultValue","keyParts","currObj","SERIF","px","em","in","mm","cm","PetalumaScript","Index","id","type","class","Registry","getDefaultRegistry","defaultRegistry","enableDefaultRegistry","registry","disableDefaultRegistry","index","clear","setIndexValue","elem","updateIndex","oldValue","getElementById","getAttribute","register","setAttribute","onRegister","_b","getElementsByAttribute","attribute","index_attr","index_attr_val","keys","map","k","getElementsByType","getElementsByClass","className","onUpdate","info","includes","Element","newID","ID","children","attrs","getCategory","rendered","addChildElement","child","push","setStyle","setGroupStyle","forEach","getStyle","applyStyle","context","save","shadowColor","setShadowColor","shadowBlur","setShadowBlur","fillStyle","setFillStyle","strokeStyle","setStrokeStyle","lineWidth","setLineWidth","restoreStyle","restore","drawWithStyle","checkContext","draw","hasClass","indexOf","addClass","removeClass","splice","isRendered","setRendered","getAttributes","getSVGElement","suffix","element","oldID","getBoundingBox","getContext","setContext","setFont","textFont","defaultTextFont","TEXT_FONT","fontIsObject","fontIsString","fontIsUndefined","sizeWeightStyleAreUndefined","assign","getFont","resetFont","setFontSize","getFontSize","fontSizeInPoints","fontSizeInPixels","RESOLUTION","durations","durationAliases","keySignatures","C","num","Am","F","acc","Dm","Bb","Gm","Eb","Cm","Ab","Fm","Db","Bbm","Gb","Ebm","Cb","Abm","G","Em","D","Bm","A","E","B","clefs","treble","line_shift","bass","tenor","alto","soprano","percussion","subbass","french","notesInfo","int_val","CN","accidental","CB","CBB","DN","DB","DBB","EN","EB","EBB","FN","FB","FBB","GN","GB","GBB","AN","AB","ABB","BN","BB","BBB","R","rest","X","octave","shift_right","accidentals","parenRightPaddingAdjustment","bb","db","bs","bss","bbs","ashs","afhf","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","articulations","between_lines","av","aboveCode","belowCode","ao","ah","am","ornaments","mordent","mordent_inverted","turn","turn_inverted","tr","upprall","downprall","prallup","pralldown","upmordent","downmordent","lineprall","prallprall","scoop","doit","fall","doitLong","fallLong","bend","plungerClosed","plungerOpen","flip","jazzTurn","smear","Tables","currentMusicFont","MUSIC_FONT_STACK","clefProperties","clef","keyProperties","keyOctaveGlyph","params","options","octave_shift","duration","sanitizeDuration","pieces","toUpperCase","stroke","int_value","customNoteHeadProps","glyphName","codeNoteHead","displaced","integerToNote","integer","noteValue","tabToGlyphProps","fret","scale","glyph","shift_y","glyphMetrics","Glyph","TABLATURE_FONT_SCALE","textWidth","getWidth","articulationCodes","artic","accidentalCodes","ornamentCodes","keySignature","spec","keySpec","notes","acc_list","getKeySignatures","hasKeySignature","durationNumber","durationToFraction","durationToNumber","durationToTicks","ticks","getGlyphProps","durationCodes","glyphTypeProperties","code_head","common","NOTATION_FONT_SCALE","UNISON","SOFTMAX_FACTOR","STEM_WIDTH","STEM_HEIGHT","STAVE_LINE_THICKNESS","RENDER_PRECISION_PLACES","SLASH_NOTEHEAD_WIDTH","STAVE_LINE_DISTANCE","TEXT_HEIGHT_OFFSET_HACK","accidentalMap","accidentalColumnsTable","second_on_bottom","spaced_out_tetrachord","spaced_out_pentachord","very_spaced_out_pentachord","spaced_out_hexachord","very_spaced_out_hexachord","unicode","sharp","String","fromCharCode","flat","natural","triangle","degrees","circle","validTypes","m","ci","cx","sf","sb","sq","tu","td","TIME4_4","num_beats","beat_value","stem","flag","stem_up_extension","stem_down_extension","tabnote_stem_up_extension","tabnote_stem_down_extension","dot_shiftY","line_above","line_below","position","ledger_code_head","beam_count","stem_beam_extension","code_flag_upstem","code_flag_downstem","OutlineCode","ModifierPosition","GlyphCacheEntry","fontStack","point","loadMetrics","bbox","getOutlineBoundingBox","outline","x_shift","y_shift","lookupFontMetric","GlyphOutline","originX","originY","precision","round","nextX","nextY","parts","MOVE","LINE","QUADRATIC","BEZIER","lookupGlyph","x_min","x_max","ha","cached_outline","renderGlyph","ctx","x_pos","y_pos","cache","lookup","customScale","renderOutline","go","beginPath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","fill","bboxComp","penX","penY","topGlyphs","botGlyphs","originShift","setOptions","reset","getCode","setPoint","setStave","stave","getXShift","setXShift","getYshift","setYShift","checkMetrics","metricsScale","setOriginX","xShift","setOriginY","yShift","setOrigin","render","xPos","yPos","checkStave","renderToStave","getYForGlyphs","Map","entries","CURRENT_CACHE_KEY","entry","Modifier","Position","PositionString","center","CENTER","above","ABOVE","below","BELOW","left","LEFT","right","RIGHT","text_line","spacingFromNextModifier","setWidth","getNote","note","checkAttachedNote","setNote","getIndex","checkIndex","setIndex","getModifierContext","modifierContext","checkModifierContext","setModifierContext","getPosition","setPosition","setTextLine","setSpacingFromNextModifier","getSpacingFromNextModifier","alignSubNotesWithNote","subNotes","tickContext","getTickContext","getStave","subNoteXOffset","modLeftPx","modRightPx","subNote","subTickContext","setXOffset","Music","NUM_TONES","canonical_notes","roots","root_values","root_indices","diatonic_intervals","diatonic_accidentals","unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","intervals","b2","min2","S","H","maj2","T","W","b3","min3","maj3","b5","aug4","b6","aug5","maj6","m7","min7","dom7","maj7","scales","major","minor","ionian","dorian","phyrgian","lydian","mixolydian","aeolian","locrian","scaleTypes","M","noteValues","root_index","cn","cb","cbb","dn","dbb","en","eb","ebb","fn","fb","fbb","gn","gb","gbb","an","ab","abb","bn","bbb","isValidNoteValue","isValidIntervalValue","interval","getNoteParts","noteString","match","exec","getKeyParts","keyString","getNoteValue","getIntervalValue","intervalString","getCanonicalNoteName","getCanonicalIntervalName","intervalValue","getRelativeNoteValue","direction","sum","getRelativeNoteName","rootValue","multiplier","reverse_interval","relativeNoteName","getScaleTones","tones","nextNote","getIntervalBetween","note1","note2","difference","createScaleMap","keySigParts","scaleName","keySigString","noteLocation","scaleMap","rootName","noteName","L","DEBUG","format","state","musicFont","noteheadAccidentalPadding","leftShift","left_shift","accidentalSpacing","additionalPadding","accidentalLinePositionsAndSpaceNeeds","prevNote","extraXSpaceNeededForLeftDisplacedNotehead","props","getKeyProps","getLeftDisplacedHeadPx","lineSpace","getSpacingBetweenLines","getYForLine","accLine","extraXSpaceNeeded","spacingBetweenStaveLines","sort","staveLineAccidentalLayoutMetrics","maxExtraXSpaceNeeded","accidentalLinePositionAndSpaceNeeds","priorLineMetric","currentLineMetric","flatLine","dblSharpLine","numAcc","column","totalColumns","noFurtherConflicts","groupStart","groupEnd","checkCollision","getGroupLine","getGroupLines","indexes","lineDifference","indexA","indexB","item","notColliding","indexPairs","every","line1","line2","groupLength","groupMember","endCase","patternLength","collisionDetected","columnWidths","columnXOffsets","totalShift","accCount","lastAccOnLine","clearance","clearanceRequired","collision","applyAccidentals","voices","tickPositions","tickNoteMap","voice","tickPosition","getTickables","shouldIgnoreTicks","notesAtPosition","getTicks","music","scaleMapKey","tickPos","tickables","modifiedPitches","processNote","isRest","staveNote","keyIndex","accidentalString","pitch","sameAccidental","previouslyModified","getModifiers","modifier","addModifier","getGraceNotes","render_options","font_scale","parenLeftPadding","parenRightPadding","cautionary","fontScale","parenLeft","parenRight","parenWidth","setAsCautionary","start","getModifierStartXY","accX","accY","Stem","UP","DOWN","WIDTH","HEIGHT","stem_up_y_offset","stem_down_y_offset","stem_up_y_base_offset","stem_down_y_base_offset","x_begin","x_end","y_top","y_bottom","stem_extension","stem_direction","hide","isStemlet","stemletHeight","renderHeightAdjustment","setNoteHeadXBounds","setDirection","setExtension","ext","getExtension","setYBounds","getHeight","y_offset","getExtents","isStemUp","ys","stemHeight","innerMostNoteheadY","min","outerMostNoteheadY","topY","baseY","setVisibility","isVisible","setStemlet","adjustHeightForFlag","adjustHeightForBeam","stem_x","stem_y","y_base_offset","stemletYOffset","openGroup","pointerBBox","closeGroup","TextFormatter","textWidthCache","textHeightCache","getFontFamilies","registeredFonts","formatterInfo","create","requestedFont","candidates","requestedFamilies","requestedFamily","startsWith","formatter","values","bold","italic","perfectMatch","find","partialMatch","fontSizeInPt","getInfo","registerInfo","overwrite","serifs","monospaced","superscriptOffset","subscriptOffset","maxSizeGlyph","cacheKey","updateParams","localHeightCache","updateCacheKey","BOLD","getGlyphMetrics","character","maxHeight","getWidthForCharacterInEm","advanceWidth","getYForCharacterInPx","rv","yMin","yMax","y_min","y_max","getYForStringInPx","extent","curY","getWidthForTextInEm","cachedWidths","getWidthForTextInPx","AnnotationHorizontalJustify","AnnotationVerticalJustify","minAnnotationPadding","annotations","leftWidth","rightWidth","maxLeftGlyphWidth","maxRightGlyphWidth","annotation","textFormatter","verticalSpaceNeeded","glyphWidth","horizontalJustification","stemDirection","hasStem","getStemDirection","lines","draw_stem","getStem","getNoteType","getNumLines","verticalJustification","VerticalJustify","TOP","noteLine","getLineNumber","leastString","top_text_line","BOTTOM","greatestString","curBottom","rightOverlap","right_shift","leftOverlap","setVerticalJustification","just","VerticalJustifyString","getJustification","setJustification","HorizontalJustifyString","text_width","text_height","getStemX","stem_ext","spacing","has_stem","checkStem","getYs","yt","getYForTopText","getYForBottomText","getTopLineTopY","extents","getStemExtents","fillText","HorizontalJustify","centerStem","CENTER_STEM","top","bottom","roundToNearestHalf","mathFn","isWithinLines","getRoundingFunction","ceil","isStaveOrGraceNote","Articulation","maxGlyphWidth","getIncrement","articulation","increment","curTop","maxWidth","articWidth","overlap","easyScoreHook","builder","articNameToCode","staccato","tenuto","accent","articString","getFactory","endsWith","setBetweenLines","betweenLines","textLine","canSitBetweenLines","staffSpace","isTab","shouldSitOutsideStaff","initialOffset","isOnStemTip","getInitialOffset","padding","stemTipY","stemBaseY","getTopY","INITIAL_OFFSET","getBottomY","offsetDirection","articLine","snappedLine","snapLineToStaff","setRawFont","drawDot","color","arc","closePath","Tickable","_preFormatted","_postFormatted","intrinsicTicks","tickMultiplier","modifiers","tupletStack","align_center","center_x_shift","ignore_ticks","formatterMetrics","freedom","iterations","space","used","mean","deviation","setIgnoreTicks","checkTickContext","getFormatterMetrics","getCenterXShift","isCenterAligned","setCenterXShift","centerXShift","setCenterAlignment","getVoice","setVoice","getTuplet","tuplet","getTupletStack","resetTuplet","noteCount","notesOccupied","getNoteCount","getNotesOccupied","applyTickMultiplier","pop","setTuplet","addToModifierContext","mc","addMember","setTickContext","tc","preFormat","preFormatted","postFormat","postFormatted","getIntrinsicTicks","setIntrinsicTicks","getTickMultiplier","setDuration","getAbsoluteX","plotMetrics","xStart","leftDisplacedHeadPx","xPre1","xAbs","xPost1","notePx","xPost2","rightDisplacedHeadPx","xEnd","xFreedomRight","xWidth","yy","spaceDeviation","parseDuration","durationString","dots","parseNoteStruct","noteStruct","durationProps","customTypes","currentTicks","parsedNoteStruct","JSON","stringify","keyProps","noteType","duration_override","glyphProps","customGlyphs","playNote","annotation_spacing","glyph_font_scale","stroke_px","getPlayNote","setPlayNote","addStroke","setYs","getRightDisplacedHeadPx","setLeftDisplacedHeadPx","setRightDisplacedHeadPx","isTopNote","getLineForRest","getGlyph","getGlyphWidth","getDuration","isDotted","getModifiersByType","getBeam","beam","checkBeam","hasBeam","setBeam","signature","filter","getRightParenthesisPx","getLeftParenthesisPx","getFirstDotPx","getMembers","getState","glyphPx","getNoteStartX","getPoint","getTieRightX","tieStartX","getTieLeftX","tieEndX","getKeys","StaveModifierPosition","BarlineType","ChordSymbolHorizontalJustify","ChordSymbolVerticalJustify","SymbolTypes","SymbolModifiers","StaveModifier","placeGlyphOnLine","customShift","getPadding","setPadding","setLayoutMetrics","layoutMetrics","getLayoutMetrics","typeString","single","SINGLE","double","DOUBLE","end","END","repeatBegin","REPEAT_BEGIN","repeatEnd","REPEAT_END","repeatBoth","REPEAT_BOTH","none","NONE","thickness","TYPE","widths","paddings","layoutMetricsMap","xMin","xMax","paddingLeft","paddingRight","BEGIN","setType","getType","drawVerticalBar","drawVerticalEndBar","drawRepeatBar","double_bar","staveCtx","botY","getBottomLineBottomY","fillRect","begin","dot_x","dot_radius","dot_y","BarNote","barline","Bend","bends","last_width","stringPos","release","phrase","tap","line_width","line_style","bend_width","release_width","updateWidth","setTap","getText","getTextHeight","totalWidth","additional_width","draw_width","lowestY","bend_height","annotation_y","renderBend","cp_x","cp_y","renderRelease","renderArrowHead","yBase","renderText","render_x","measureText","last_bend","last_bend_draw_width","last_drawn_width","ChordSymbol","superSubRatio","global","NO_TEXT_FORMAT","val","noFormat","getMetricForGlyph","glyphCode","engravingFontResolution","spacingBetweenBlocks","getWidthForGlyph","metric","getYShiftForGlyph","yOffset","getXShiftForGlyph","leftSideBearing","kerningOffset","chordSymbol","lowerKerningText","upperKerningText","isSuperscript","symbolModifier","SUPERSCRIPT","isSubscript","SUBSCRIPT","minPadding","symbols","nonSuperWidth","symbol","fontAdj","glyphAdj","symbolWidth","lineSpaces","vAlign","j","symbolBlocks","sup","sub","superSubScale","adj","symbolType","GLYPH","superSubFontSize","TEXT","getYOffsetForText","over","prev","setEnableKerning","updateKerningAdjustments","updateOverBarAdjustments","getVertical","getReportWidth","getHorizontal","horizontal","vertical","useKerning","reportWidth","setReportWidth","barIndex","findIndex","xoff","yoff","symIndex","accum","getKerningAdjustment","currSymbol","prevSymbol","adjustment","preKernUpper","preKernLower","some","xx","kerningOffsetPixels","getSymbolBlock","_c","symbolBlock","glyphArgs","glyphPoints","addSymbolBlock","parameters","addText","addTextSuperscript","addTextSubscript","addGlyphSuperscript","addGlyph","addGlyphOrText","char","addLine","setVertical","vj","setHorizontal","hj","stem_base","isSuper","isSub","smallerFontSize","diminished","dim","halfDiminished","augmented","majorSeventh","leftParen","rightParen","leftBracket","rightBracket","leftParenTall","rightParenTall","symbolTypes","symbolModifiers","getDots","buildAndAttach","all","dot","setDotShiftY","dot_list","max_shift_map","note_id","dot_shift","x_width","last_line","last_note","prev_dotted_space","half_shiftY","radius","forceFlagRight","FretHandFinger","nums","nums_list","prev_note","shiftLeft","shiftRight","pos","textHeight","shiftL","shiftR","numShiftL","numShiftR","xWidthL","xWidthR","lastLine","lastNote","num_shift","numWidth","fingerings","fingeringString","number","Fingering","fingering","finger","x_offset","setFretHandFinger","getFretHandFinger","setOffsetX","setOffsetY","NoteHead","custom_glyph","stem_up_x_offset","stem_down_x_offset","note_type","glyph_code","custom_glyph_code","slashed","isDisplaced","getLine","setLine","displacementStemAdjustment","fontShift","displacedFontShift","half_spacing","min_y","getYForNote","head_x","categorySuffix","staveSpace","breve_lines","drawSlashNoteHead","setStem","buildStem","buildFlag","hasFlag","flagCode","getBaseCustomNoteHeadGlyphProps","getStemLength","getStemExtension","getBeamCount","getStemMinimumLength","setStemDirection","offsets","offsetYBaseStemUp","offsetYTopStemUp","offsetYBaseStemDown","offsetYTopStemDown","getCenterGlyphX","stem_extension_override","setStemLength","drawStem","stemOptions","shiftRestVertical","dir","delta","maxLine","minLine","setKeyLine","getKeyLine","STEM_UP","STEM_DOWN","LEDGER_LINE_OFFSET","minNoteheadPadding","notesList","sortedKeyProps","minL","stemMax","stemMin","maxL","isrest","voice_shift","getVoiceShiftWidth","is_displaced","noteU","noteM","noteL","voiceXShift","lineSpacing","lineDiff","noteUHead","noteLHead","centerRest","ledgerLineStyle","use_default_head_x","_noteHeads","calculateKeyProps","auto_stem","autoStem","noteHeadStyles","noteHead","buildNoteHeads","noteHeadStyle","calcNoteDisplacements","noteProps","notehead","calculateOptimalStemDirection","minY","maxY","halfLineSpacing","frac","resultLine","thisLine","isChord","getNoteHeadBounds","setNoteDisplaced","getRightShift","restLine","isInnerNoteIndex","setStemStyle","getStemStyle","setLedgerLineStyle","getLedgerLineStyle","setFlagStyle","getFlagStyle","setKeyStyle","noteHeadPadding","shouldDrawFlag","nonDisplacedX","displacedX","highestDisplacedLine","lowestDisplacedLine","yTop","Infinity","yBottom","highestLine","lowestLine","highestNonDisplacedLine","lowestNonDisplacedLine","displaced_x","non_displaced_x","highest_line","lowest_line","highest_displaced_line","lowest_displaced_line","highest_non_displaced_line","lowest_non_displaced_line","getNoteHeadBeginX","getNoteHeadEndX","noteHeads","note_heads","drawLedgerLines","doubleWidth","min_x","drawLedgerLine","normal","ledgerWidth","getDefaultLedgerLineStyle","drawModifiers","noteheadParam","noteheadStyle","hasNoBeam","drawFlag","_d","_e","noteStemHeight","flagX","flagY","getStaveNoteScale","drawNoteHeads","super_stem_extension","mid_line_distance","lines_over_octave_from_mid_line","spacing_between_lines","xBegin","shouldRenderStem","stemX","StaveTie","setNotes","cp1","cp2","text_shift_x","first_x_shift","last_x_shift","tie_spacing","first_note","first_indices","last_indices","isPartial","renderTie","first_ys","last_ys","last_x_px","first_x_px","first_y_px","last_y_px","top_cp_y","bottom_cp_y","center_x","getNotes","getTieStartX","getTieEndX","TabTie","createHammeron","createPulloff","VoiceMode","Voice","Mode","time","voiceTime","resolutionMultiplier","mode","STRICT","ticksUsed","largestTickWidth","softmaxFactor","totalTicks","smallestTickCount","getTotalTicks","getTicksUsed","getLargestTickWidth","getSmallestTickCount","getMode","setMode","getResolutionMultiplier","getActualResolution","tickable","setStrict","strict","SOFT","isComplete","FULL","setSoftmaxFactor","factor","expTicksUsed","reCalculateExpTicksUsed","softmax","tickValue","v","exp","addTickable","addTickables","gracenote_groups","group_list","gracenote_group","is_stavenote","formatWidth","group_shift","grace_notes","show_slur","slur","slur_y_shift","beams","Formatter","joinVoices","getMinTotalWidth","beamNotes","Beam","beam_width","partial_beam_length","graceNote","TieClass","NoteSubGroup","groups","group","Ornament","ornament","ornamentRelease","ornamentAttack","reportedWidth","ornamentArticulation","ornamentNoteTransition","ornamentAlignWithNoteHead","ornamentMetrics","delayed","accidentalLowerPadding","accidentalUpperPadding","adjustForStemDirection","stemUpYOffset","xOffset","setDelayed","setUpperAccidental","accid","accidentalUpper","setLowerAccidental","accidentalLower","stemDir","stemExtents","isPlacedOnNoteheadSide","glyphYBetweenLines","glyphX","glyphY","delayXShift","startX","nextContext","Parenthesis","parentheses","x_widthL","x_widthR","parenthesis","isHTMLCanvas","HTMLCanvasElement","toDataURL","isHTMLDiv","HTMLDivElement","appendChild","CanvasContext","CANVAS_BROWSER_SIZE_LIMIT","sanitizeCanvasDims","limit","context2D","canvas","clearRect","cls","setBackgroundFillStyle","blur","getTransform","setLineCap","capType","lineCap","setLineDash","dash","resize","devicePixelRatio","dpr","rect","cp1x","cp1y","cp2x","cp2y","cpx","cpy","startAngle","endAngle","counterclockwise","fontBoundingBoxAscent","fontBoundingBoxDescent","actualBoundingBoxAscent","actualBoundingBoxDescent","ATTRIBUTES_TO_IGNORE","path","SVG_NS","TWO_PI","SVGContext","backgroundFillStyle","fontCSSString","svg","parent","pen","defaultFontAttributes","scaleX","scaleY","attributes","groupAttributes","applyAttributes","shadow_attributes","state_stack","svgElementType","createElementNS","lineDash","visibleWidth","visibleHeight","setViewBox","viewBox_or_minX","viewBoxString","attrNamesToIgnore","nodeName","attrName","setAttributeNS","lastChild","removeChild","rectangle","x0","cos","y0","sin","tmpStartTest","tmpEndTest","large","sweep","getShadowStyle","sa","measureTextCache","txt","textContent","savedState","fontAttributes","RendererBackends","RendererLineEndType","TextJustification","VoltaType","measureImpl","getBBox","Renderer","buildContext","elementId","backend","background","renderer","lastContext","getCanvasContext","Backends","CANVAS","getSVGContext","SVG","drawDashedLine","fromX","fromY","toX","toY","dashPattern","dx","dy","angle","atan2","idx","dashLength","nx","ny","arg0","arg1","maybeElement","willReadFrequently","LineEndType","StringNumber","stringNumber","verticalPadding","stemPadding","leftPadding","rightPadding","extraXSpaceForDisplacedNotehead","glyphLine","num_shiftR","num_width","num_x_shift","string_number","stem_offset","dashed","leg","drawCircle","setLineEndType","setStringNumber","setLastNote","setDashed","setDrawCircle","len","pattern","Stroke","strokes","strokeList","string","getPositions","strokeShift","all_voices","addEndNote","note_end","line_space","arrow","arrow_shift_x","arrow_y","text_y","Type","BRUSH_DOWN","BRUSH_UP","ROLL_DOWN","RASQUEDO_DOWN","ROLL_UP","RASQUEDO_UP","ARPEGGIO_DIRECTIONLESS","strokeLine","Vibrato","vibratos","vibrato","harsh","vibrato_width","wave_height","wave_width","wave_girth","setVibratoWidth","setHarsh","vx","vy","renderVibrato","opts","num_waves","ModifierContext","members","formatted","member","getLeftShift","Clef","types","tab","annotationSmufl","attachment","KeySignature","cancelKeySpec","alterKeySpec","accList","setKeySig","glyphFontScale","xPositions","paddingForced","convertToGlyph","nextAcc","accGlyphData","extraWidth","xPosition","cancelKey","convertToCancelAccList","cancel_accList","different_types","naturals","cancelled","concat","addToStave","convertAccLines","customLines","offset","alterKey","convertToAlterAccList","firstAccidentalType","cancelAccList","getEndClef","getClef","Repetition","symbol_type","setShiftX","setShiftY","CODA_RIGHT","drawCodaFixed","CODA_LEFT","drawSymbolText","SEGNO_LEFT","drawSignoFixed","SEGNO_RIGHT","DC","DC_AL_CODA","DC_AL_FINE","DS","DS_AL_CODA","DS_AL_FINE","FINE","TO_CODA","draw_coda","text_x","symbol_x","modifierWidth","getVerticalBarWidth","StaveSection","section","drawRect","shift_x","setStaveSection","textY","headroom","StaveTempo","tempo","setTempo","bpm","noteTextFont","noteTextFormatter","stem_height","flagMetrics","TextNote","GLYPHS","segno","mordent_upper","mordent_lower","p","z","coda","pedal_open","pedal_close","caesura_straight","caesura_curved","breath","tick","superscript","subscript","smooth","justification","struct","Justification","StaveText","setStaveText","setText","getBottomLineY","Volta","volta","top_y","vert_height","BEGIN_END","TimeSignatureGlyph","timeSignature","topDigits","botDigits","topWidth","timeSigType","topGlyph","botWidth","botGlyph","lineShift","topStartX","botStartX","start_x","topLine","bottomLine","TimeSignature","timeSpec","customPadding","validate_args","is_numeric","fontLineShift","setTimeSig","parseTimeSpec","numbers","test","assertIsValidTimeSig","makeTimeSignatureGlyph","setGlyph","getTimeSpec","getIsNumeric","setIsNumeric","isNumeric","SORT_ORDER_BEG_MODIFIERS","SORT_ORDER_END_MODIFIERS","Stave","defaultPadding","end_x","measure","endClef","vertical_bar_width","num_lines","fill_style","left_bar","right_bar","spacing_between_lines_px","space_above_staff_ln","space_below_staff_ln","top_text_position","bottom_text_position","line_config","bounds","defaultLedgerLineStyle","resetLines","addEndModifier","setDefaultLedgerLineStyle","visible","setNoteStartX","getNoteEndX","setNumLines","mod","setMeasure","getMeasure","getModifierXShift","begBarline","setRepetitionType","setVoltaType","number_t","setSection","staveSection","getLineForY","setBegBarType","setEndBarType","setClefLines","clefSpec","setClef","addClef","setEndClef","setKeySignature","addKeySignature","setEndKeySignature","setTimeSignature","timeSignatures","addTimeSignature","setEndTimeSignature","addEndClef","addEndTimeSignature","addTrebleGlyph","noPosition","noCategory","sortByCategory","items","order","temp","endBarline","begModifiers","endModifiers","lastBarlineIdx","getConfigForLines","setConfigForLine","line_number","setConfigForLines","lines_configuration","formatBegModifiers","staves","adjustCategoryStartX","minStartX","adjustX","allModifiers","bAdjust","maxX","drawBoldDoubleLine","topX","StaveConnector","BOLD_DOUBLE_LEFT","BOLD_DOUBLE_RIGHT","variableWidth","top_stave","bottom_stave","texts","newType","content","SINGLE_RIGHT","THIN_DOUBLE","attachment_height","SINGLE_LEFT","BRACE","x3","y3","cpx1","cpy1","cpx2","cpy2","cpx3","cpy3","cpx4","cpy4","cpx5","cpy5","cpx6","cpy6","cpx7","cpy7","cpx8","cpy8","BRACKET","singleRight","singleLeft","brace","bracket","boldDoubleLeft","boldDoubleRight","thinDouble","TickContext","getNextContext","tContext","contexts","tContexts","tickID","currentTick","maxTicks","maxTickable","minTicks","minTickable","xBase","tickablesByVoice","totalLeftPx","totalRightPx","getTickID","getXBase","setXBase","getXOffset","getMaxTicks","getMinTicks","getMaxTickable","getMinTickable","getTickableForVoice","voiceIndex","getTickablesByVoice","getCenterAlignedTickables","getCurrentTick","setCurrentTick","getRestLineForNextNoteGroup","currRestLine","currNoteIndex","nextRestLine","noteIndex","SimpleFormat","paddingBetween","accumulator","plotDebugging","stavePadding","contextGaps","gaps","gap","totalCost","toFixed","total","FormatAndDraw","auto_beam","align_rests","applyAndGetBeams","formatToStave","FormatAndDrawTab","tabstave","tabnotes","autobeam","notevoice","tabvoice","AlignRestsToNotes","alignAllNotes","alignTuplets","currTickable","prevTickable","formatterOptions","globalSoftmax","maxIterations","justifyWidth","durationStats","minTotalWidth","hasMinTotalWidth","tickContexts","array","list","modifierContexts","lossHistory","alignRests","preCalculateMinTotalWidth","unalignedPadding","unalignedCtxCount","wsum","dsum","createTickContexts","contextList","contextMap","wavg","wvar","ll","wpads","davg","dvar","dpads","padmax","unalignedPad","createModifierContexts","tickToContextMap","integerTicks","staveTickToContextMap","newContext","makeContext","addToContext","tickList","createContexts","contextArray","getTickContexts","renderingContext","voicesParam","evaluate","firstContext","calculateIdealDistances","adjustedJustifyWidth","backTickable","prevContext","backVoices","matchingVoices","maxNegativeShiftPx","expectedDistance","thisTickable","insideLeftEdge","backMetrics","insideRightEdge","fromTickable","fromTickablePx","shiftToIdealDistances","idealDistances","centerX","spaceAccum","contextX","ideal","errorPx","negativeShiftPx","configMinPadding","configMaxPadding","targetWidth","distances","actualWidth","minDistance","mdCalc","di","calcMinDistance","paddingMaxCalc","curTargetWidth","lastTickablePadding","lastTickable","tickWidth","paddingMax","paddingMin","prevTick","prevMetrics","currMetrics","leftNoteEdge","rightNote","rightMetrics","stats","count","updateStats","totalDeviation","tune","alpha","current","cost","optionsParam","TupletLocation","Tuplet","LOCATION_TOP","LOCATION_BOTTOM","NESTING_OFFSET","tupletMetrics","numerator_glyphs","denom_glyphs","num_notes","beats_occupied","beatsOccupiedDeprecationWarning","notes_occupied","bracketed","ratioed","setTupletLocation","location","resolveGlyphs","attach","detach","setBracketed","setRatioed","getBeatsOccupied","setBeatsOccupied","beats","setNotesOccupied","unshift","getNestedTupletCount","maxTupletCount","countTuplets","minTupletCount","tupletCount","getYPosition","nested_tuplet_y_offset","topModifierOffset","modLines","modY","noteHeadOffset","stemOffset","lineCheck","nn","bottom_y","addGlyphWidth","notation_start_x","shiftY","colon_x","colon_radius","calculateStemDirection","lineSum","keyProp","BEAM_LEFT","BEAM_RIGHT","BEAM_BOTH","getDefaultBeamGroups","time_sig","beatTotal","beatValue","generateBeams","config","tickGroups","unprocessedNotes","currentTickGroup","noteGroups","currentGroup","nextTickGroup","nextGroup","currentGroupTotalTicks","unprocessedNote","ticksPerGroup","vf_notes","memo","unbeamable","createGroups","sanitizedGroups","tempGroup","isFirstOrLast","breaksOnEachRest","beam_rests","breaksOnFirstOrLastRest","beam_middle_only","breakOnStemChange","maintain_stem_directions","prevDirection","isUnbeamableDuration","sanitizeGroups","findFirstNote","applyStemDirection","beamedNoteGroups","beamable","allTuplets","uniqueTuplets","noteTuplet","getTuplets","show_stemlets","secondary_breaks","secondary_break_ticks","flat_beams","flat_beam_offset","slope","forcedPartialDirections","stem_weight","break_on_indices","max_slope","min_slope","slope_iterations","slope_cost","stemlet_extension","min_flat_beam_offset","beamCount","breakSecondaryAt","indices","setPartialBeamSideAt","side","unsetPartialBeamSideAt","getSlopeY","calculateSlope","firstNote","initialSlope","firstStemTipY","firstStemX","getStemSlope","minCost","MAX_VALUE","bestSlope","totalStemExtension","yShiftTemp","adjustedStemTipY","diff","idealSlope","calculateFlatSlope","extremeY","extremeBeamCount","currentExtreme","extremeTest","newOffset","getBeamYToDraw","beamY","applyStemExtensions","beamedStemTipY","preBeamExtension","beamExtension","crossStemExtension","totalBeamWidth","lookupBeamDirection","prev_tick","next_tick","forcedBeamDirection","lookup_duration","prev_note_gets_beam","next_note_gets_beam","note_gets_beam","getBeamLines","tick_of_duration","beam_started","beam_lines","current_beam","previous_should_break","tick_tally","should_break","next_note","beam_alone","beam_direction","last_beam","drawStems","drawBeamLines","valid_beam_durations","beamThickness","beamLines","beam_line","startBeamX","startBeamY","lastBeamX","lastBeamY","ClefNote","abs_x","Crescendo","extend_left","extend_right","decrescendo","setHeight","setDecrescendo","decresc","tick_context","next_context","begin_x","half_height","reverse","renderHairpin","CurvePosition","Curve","nearHead","NEAR_HEAD","nearTop","NEAR_TOP","from","to","position_end","invert","cps","renderCurve","first_x","first_y","last_x","last_y","cp0x","cp0y","cp_spacing","end_metric","Parser","flattenMatches","matchedString","results","grammar","errorPos","expect","matchFail","returnPos","matchSuccess","matchToken","token","noSpace","regexp","RegExp","success","incrementPos","expectOne","rule","maybe","allMatches","oneMatch","localPos","or","gotOne","numMatches","expectOneOrMore","more","expectZeroOrMore","ruleFunc","bind","oneOrMore","zeroOrMore","matches","run","EasyScore","EasyScoreGrammar","PIECE","PIECES","EOL","CHORDORNOTE","PARAMS","commitPiece","COMMA","DURATION","DOTS","OPTS","CHORD","SINGLENOTE","LPAREN","NOTES","RPAREN","addChord","NOTE","NOTENAME","ACCIDENTAL","OCTAVE","addSingleNote","MICROTONES","ACCIDENTALS","DOT","setNoteDots","SLASH","MAYBESLASH","TYPES","setNoteType","DURATIONS","setNoteDuration","LBRACKET","KEYVAL","KEYVALS","RBRACKET","KEY","EQUALS","VAL","addNoteOption","SVAL","DVAL","Piece","chord","Builder","commitHooks","elements","rollingDuration","resetPiece","getElements","addCommitHook","commitHook","piece","addNote","standardAccidentals","notePiece","GhostNote","setId","commaSeparatedRegex","setClass","defaults","throwOnError","parser","ERROR_MSG","parameter","GlyphNote","ignoreTicks","SCALE","slash","ret","staveNoteScale","offsetScale","slashBBox","calcBeamedNotesSlashBBox","noteHeadBounds","defaultStemExtention","defaultOffsetY","slashStemOffset","slashBeamOffset","protrusions","beam_slope","beam_angle","atan","iPointOnBeam","slash_angle","protrusion_stem_dx","protrusion_stem_dy","protrusion_beam_dx","protrusion_beam_dy","stem0X","stemY","KeySigNote","semibreve_rest","MultiMeasureRest","number_of_measures","xs","hasPaddingLeft","hasPaddingRight","hasLineThickness","hasSymbolSpacing","padding_left","padding_right","line_thickness","symbol_spacing","use_symbols","show_number","number_line","number_glyph_point","serif_thickness","semibreve_rest_glyph_scale","getXs","drawLine","spacingBetweenLines","lineThicknessHalf","serifThickness","bot","leftIndented","rightIndented","lineTop","lineBottom","drawSymbols","n4","n2","n1","get_semibreve_rest","rest_scale","rest_width","yMiddle","timeSig","drawPedalGlyph","glyph_data","PedalMarking","createSustain","createSostenuto","pedal","MIXED","setCustomText","createUnaCorda","custom_depress_text","custom_release_text","bracket_height","text_margin_right","bracket_line_width","depress","drawBracketed","prev_x","prev_y","is_pedal_depressed","next_is_same","prev_is_same","drawText","pedal_depress","pedal_release","mixed","CODES","RepeatNote","drawArrowHead","StaveLine","line_dash","rounded_end","draw_start_arrow","draw_end_arrow","arrowhead_length","arrowhead_angle","text_position_vertical","TextVerticalPosition","text_justification","applyLineStyle","applyFontStyle","drawArrowLine","pt1","pt2","both_arrows","distance","ratio","end_y","start_y","line_angle","angle1","angle2","top_x","bottom_x","start_position","end_position","first_index","last_index","upwards_slope","notehead_width","vertical_position","System","partStaves","partStaveInfos","partVoices","spaceBetweenStaves","autoWidth","noJustification","debugFormatter","formatIterations","noPadding","details","formatOptions","getStaves","getVoices","addConnector","connector","addStave","staveOptions","spaceAbove","spaceBelow","debugNoteMetrics","addVoices","options_details","debugNoteMetricsYs","part","lastY","glyphPropsArr","positions","ghost","draw_dots","draw_stem_through_stave","setGhost","getStemY","stemDownLine","stemStartLine","flag_x","flag_y","drawStemThrough","stemThrough","stemLines","unused_strings","up_stem","down_stem","line_spacing","total_lines","stem_lines","strings","containsLastString","containsFirstString","line_ys","isTopBound","isBottomBound","getPartialStemLines","strings_used","stem_through","getUnusedStringGroups","drawPositions","tab_x","render_stem","TabStave","addTabGlyph","TextBracket","TextBracketPosition","Positions","PositionsString","stop","show_bracket","underline_superscript","main_measure","main_width","main_height","super_y","super_measure","super_width","super_height","line_y","TextDynamics","sequence","glyph_font_size","total_width","letter","letter_x","current_letter","TimeSigNote","tsGlyph","VibratoBracket","bracket_data","stop_x","Factory","newFromElementId","renderQ","systems","initRenderer","ghostNote","textNote","barNote","clefNote","timeSigNote","keySigNote","hJustify","vJustify","kerning","upperAccidental","lowerAccidental","numMeasures","multiMeasureRest","secondaryBeamBreaks","partialBeamDirections","curve","tie","vibratoBracket","textBracket","system","GraceTabNote","KeyManager","setKey","getKey","scaleMapByValue","originalScaleMapByValue","getAccidental","selectNote","scaleNote","modparts","change","valueNote","originalValueNote","StaveHairpin","FormatByTicksAndDraw","ppt","pixelsPerTick","l_shift_px","left_shift_ticks","r_shift_px","right_shift_ticks","hairpin_options","left_shift_px","right_shift_px","setRenderOptions","hairpin","dis","staff_height","l_shift","r_shift","CRESC","DECRESC","TabSlide","SLIDE_UP","SLIDE_DOWN","createSlideUp","createSlideDown","first_fret","last_fret","slide_y","Tremolo","y_spacing_scale","extra_stroke_scale","y_spacing","Tuning","names","standard","dagdad","dropd","standardBanjo","doubleCBanjo","doubleDBanjo","sawmillBanjo","tuningString","tuningValues","setTuning","noteToInteger","getValueForString","stringNum","getValueForFret","fretNum","stringValue","getNoteForFret","Flow","BUILD","VERSION","DATE","setMusicFont","fontNames","fetchMusicFont","fontModuleOrPath","getMusicFont","getMusicFontStack","CommonMetrics","smufl","endPaddingMax","endPaddingMin","unalignedNotePadding","csymDiminished","csymHalfDiminished","csymAugmented","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","csymMinor","csymMajorSeventh","accidentalSharp","accidentalFlat","clef_default","shiftX","clef_small","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","default","gracenote","pedalMarking","digits","shiftLine","articStaccatissimoAbove","articStaccatissimoBelow","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","heightAdjustmentForFlag","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadTriangleUpWhole","noteheadXHalf","noteheadXBlack","noteheadXWhole","noteheadHalf","noteheadBlack","noteheadSquareWhite","staveTempo","gClef","clefNote_default","clefNote_small","stroke_straight","arrowheadBlackDown","arrowheadBlackUp","stroke_wiggly","breathMarkTick","breathMarkComma","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","CustomFont","vexAccidentalMicrotonal1","vexAccidentalMicrotonal3","vexAccidentalMicrotonal4","vexNoteHeadRectBlack","vexNoteHeadRectWhite","vexWiggleArpeggioUp","GonvilleSmuflFont","bracketTop","bracketBottom","barlineTick","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadCircleX","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalNatural","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBuyukMucennebSharp","accidentalBakiyeFlat","accidentalKomaSharp","accidentalKucukMucennebSharp","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","wiggleArpeggiatoUp","generatedOn","PetalumaScriptFont","$","I","J","K","N","O","Q","U","V","Y","Z","_","l","RobotoSlabFont","SansFontBold","SansFont","Description","SerifFont","Vex","sortAndUnique","cmp","eq","newArr","last","contains","canvasSelector","benchmark","start_time","Date","getTime","stackTrace","fontData","description","loadTextFonts"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-leland.js b/build/cjs/vexflow-leland.js new file mode 100644 index 0000000000..318c1d15df --- /dev/null +++ b/build/cjs/vexflow-leland.js @@ -0,0 +1,7 @@ +/*! + * VexFlow 4.2.6 2024-08-26T20:16:17.134Z 103aad2b14837418c5e96c9e078edd036fcddf60 + * Copyright (c) 2010 Mohit Muthanna Cheppudira + * https://www.vexflow.com https://github.com/0xfe/vexflow + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Vex=e():t.Vex=e()}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var s in i)t.o(i,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:i[s]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};t.d(e,{default:()=>i});var i={};function s(t,e,i=!0){if("object"!=typeof t||null===t)return!1;let s=t.constructor;if(i){for(;null!==t;){if(s=t.constructor,"CATEGORY"in s&&s.CATEGORY===e)return!0;t=Object.getPrototypeOf(t)}return!1}return"CATEGORY"in s&&s.CATEGORY===e}t.r(i),t.d(i,{Accidental:()=>st,Annotation:()=>mt,AnnotationHorizontalJustify:()=>ct,AnnotationVerticalJustify:()=>dt,Articulation:()=>ft,BEAM_BOTH:()=>Re,BEAM_LEFT:()=>Fe,BEAM_RIGHT:()=>Oe,BarNote:()=>Dt,Barline:()=>kt,BarlineType:()=>Et,Beam:()=>Le,Bend:()=>Mt,BoundingBox:()=>C,BoundingBoxComputation:()=>P,Builder:()=>Ke,CanvasContext:()=>Qt,Category:()=>x,ChordSymbol:()=>Ot,ChordSymbolHorizontalJustify:()=>Bt,ChordSymbolVerticalJustify:()=>Ct,Clef:()=>ge,ClefNote:()=>We,Crescendo:()=>Ie,Curve:()=>Ue,CurvePosition:()=>Ge,Dot:()=>Rt,EasyScore:()=>Qe,EasyScoreGrammar:()=>Xe,Element:()=>L,Factory:()=>vi,Flow:()=>ki,Font:()=>F,FontStyle:()=>A,FontWeight:()=>N,Formatter:()=>Ae,Fraction:()=>E,FretHandFinger:()=>Lt,GhostNote:()=>ti,Glyph:()=>Z,GlyphNote:()=>ei,GraceNote:()=>ii,GraceNoteGroup:()=>Xt,GraceTabNote:()=>wi,KeyManager:()=>Ei,KeySigNote:()=>si,KeySignature:()=>_e,Modifier:()=>tt,ModifierContext:()=>me,ModifierPosition:()=>J,MultiMeasureRest:()=>ai,Music:()=>et,Note:()=>vt,NoteHead:()=>Wt,NoteSubGroup:()=>Vt,Ornament:()=>Kt,OutlineCode:()=>$,Parenthesis:()=>$t,Parser:()=>ze,PedalMarking:()=>ri,Piece:()=>Ve,Registry:()=>R,RenderContext:()=>yt,Renderer:()=>re,RendererBackends:()=>se,RendererLineEndType:()=>ne,RepeatNote:()=>li,Repetition:()=>xe,RuntimeError:()=>b,SVGContext:()=>ie,Stave:()=>Ee,StaveConnector:()=>Ce,StaveHairpin:()=>Bi,StaveLine:()=>di,StaveModifier:()=>At,StaveModifierPosition:()=>wt,StaveNote:()=>Ut,StaveSection:()=>be,StaveTempo:()=>ue,StaveText:()=>fe,StaveTie:()=>Yt,Stem:()=>nt,StemmableNote:()=>It,StringNumber:()=>he,Stroke:()=>le,SymbolModifiers:()=>Nt,SymbolTypes:()=>Pt,System:()=>mi,TabNote:()=>gi,TabSlide:()=>Ci,TabStave:()=>_i,TabTie:()=>Ht,TextBracket:()=>ui,TextBracketPosition:()=>bi,TextDynamics:()=>fi,TextFormatter:()=>lt,TextJustification:()=>ae,TextNote:()=>pe,TickContext:()=>Pe,Tickable:()=>Tt,TimeSigNote:()=>yi,TimeSignature:()=>Te,TimeSignatureGlyph:()=>Se,Tremolo:()=>Pi,Tuning:()=>Ni,Tuplet:()=>De,TupletLocation:()=>ke,Vex:()=>Gi,Vibrato:()=>ce,VibratoBracket:()=>Si,Voice:()=>jt,VoiceMode:()=>zt,Volta:()=>ye,VoltaType:()=>oe,defined:()=>p,drawDot:()=>St,globalObject:()=>u,isAccidental:()=>n,isAnnotation:()=>a,isBarline:()=>o,isCategory:()=>s,isDot:()=>r,isGraceNote:()=>h,isGraceNoteGroup:()=>l,isHTMLCanvas:()=>Jt,isHTMLDiv:()=>qt,isNote:()=>c,isRenderContext:()=>d,isStaveNote:()=>m,isStemmableNote:()=>g,isTabNote:()=>_,log:()=>f,midLine:()=>S,normalizeAngle:()=>v,prefix:()=>T,sumArray:()=>w,warn:()=>y});const n=t=>s(t,x.Accidental),a=t=>s(t,x.Annotation),o=t=>s(t,x.Barline),r=t=>s(t,x.Dot),h=t=>s(t,x.GraceNote),l=t=>s(t,x.GraceNoteGroup),c=t=>s(t,x.Note),d=t=>s(t,x.RenderContext),m=t=>s(t,x.StaveNote),g=t=>s(t,x.StemmableNote),_=t=>s(t,x.TabNote);var x;!function(t){t.Accidental="Accidental",t.Annotation="Annotation",t.Articulation="Articulation",t.Barline="Barline",t.BarNote="BarNote",t.Beam="Beam",t.Bend="Bend",t.ChordSymbol="ChordSymbol",t.Clef="Clef",t.ClefNote="ClefNote",t.Crescendo="Crescendo",t.Curve="Curve",t.Dot="Dot",t.Element="Element",t.Fraction="Fraction",t.FretHandFinger="FretHandFinger",t.GhostNote="GhostNote",t.Glyph="Glyph",t.GlyphNote="GlyphNote",t.GraceNote="GraceNote",t.GraceNoteGroup="GraceNoteGroup",t.GraceTabNote="GraceTabNote",t.KeySignature="KeySignature",t.KeySigNote="KeySigNote",t.Modifier="Modifier",t.MultiMeasureRest="MultiMeasureRest",t.Note="Note",t.NoteHead="NoteHead",t.NoteSubGroup="NoteSubGroup",t.Ornament="Ornament",t.Parenthesis="Parenthesis",t.PedalMarking="PedalMarking",t.RenderContext="RenderContext",t.RepeatNote="RepeatNote",t.Repetition="Repetition",t.Stave="Stave",t.StaveConnector="StaveConnector",t.StaveHairpin="StaveHairpin",t.StaveLine="StaveLine",t.StaveModifier="StaveModifier",t.StaveNote="StaveNote",t.StaveSection="StaveSection",t.StaveTempo="StaveTempo",t.StaveText="StaveText",t.StaveTie="StaveTie",t.Stem="Stem",t.StemmableNote="StemmableNote",t.StringNumber="StringNumber",t.Stroke="Stroke",t.System="System",t.TabNote="TabNote",t.TabSlide="TabSlide",t.TabStave="TabStave",t.TabTie="TabTie",t.TextBracket="TextBracket",t.TextDynamics="TextDynamics",t.TextNote="TextNote",t.Tickable="Tickable",t.TimeSignature="TimeSignature",t.TimeSigNote="TimeSigNote",t.Tremolo="Tremolo",t.Tuplet="Tuplet",t.Vibrato="Vibrato",t.VibratoBracket="VibratoBracket",t.Voice="Voice",t.Volta="Volta"}(x||(x={}));class b extends Error{constructor(t,e=""){super("[RuntimeError] "+t+": "+e),this.code=t}}function u(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:Function("return this")()}function p(t,e="undefined",i=""){if(void 0===t)throw new b(e,i);return t}function f(t,...e){if(!e)return;const i=Array.prototype.slice.call(e).join(" ");u().console.log(t+": "+i)}function y(...t){const e=t.join(" "),i=new Error;u().console.log("Warning: ",e,i.stack)}function S(t,e){let i=e+(t-e)/2;var s,n;return i%2>0&&(i=((s=10*i)%(n=5)>=n/2?parseInt(""+s/n,10)*n+n:parseInt(""+s/n,10)*n)/10),i}function T(t){return`vf-${t}`}function v(t){return(t%=2*Math.PI)<0&&(t+=2*Math.PI),t}function w(t){return t.reduce(((t,e)=>t+e),0)}class E{static get CATEGORY(){return x.Fraction}static GCD(t,e){if("number"!=typeof t||Number.isNaN(t)||"number"!=typeof e||Number.isNaN(e))throw new b("BadArgument",`Invalid numbers: ${t}, ${e}`);let i;for(;0!==e;)i=e,e=t%e,t=i;return t}static LCM(t,e){return t*e/E.GCD(t,e)}static LCMM(t){return 0===t.length?0:1===t.length?t[0]:2===t.length?E.LCM(t[0],t[1]):E.LCM(t.shift(),E.LCMM(t))}constructor(t,e){this.numerator=1,this.denominator=1,this.set(t,e)}set(t=1,e=1){return this.numerator=t,this.denominator=e,this}value(){return this.numerator/this.denominator}simplify(){let t=this.numerator,e=this.denominator;const i=E.GCD(t,e);return t/=i,e/=i,e<0&&(e=-e,t=-t),this.set(t,e)}add(t=0,e=1){const[i,s]=B(t,e),n=E.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a+i*o;return this.set(r,n)}subtract(t=0,e=1){const[i,s]=B(t,e),n=E.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a-i*o;return this.set(r,n)}multiply(t=1,e=1){const[i,s]=B(t,e);return this.set(this.numerator*i,this.denominator*s)}divide(t=1,e=1){const[i,s]=B(t,e);return this.set(this.numerator*s,this.denominator*i)}equals(t){const e=E.__staticFractionA.copy(t).simplify(),i=E.__staticFractionB.copy(this).simplify();return e.numerator===i.numerator&&e.denominator===i.denominator}greaterThan(t){const e=E.__staticFractionB.copy(this);return e.subtract(t),e.numerator>0}greaterThanEquals(t){const e=E.__staticFractionB.copy(this);return e.subtract(t),e.numerator>=0}lessThan(t){return!this.greaterThanEquals(t)}lessThanEquals(t){return!this.greaterThan(t)}clone(){return new E(this.numerator,this.denominator)}copy(t){return"number"==typeof t?this.set(t,1):this.set(t.numerator,t.denominator)}quotient(){return Math.floor(this.numerator/this.denominator)}remainder(){return this.numerator%this.denominator}makeAbs(){return this.denominator=Math.abs(this.denominator),this.numerator=Math.abs(this.numerator),this}toString(){return`${this.numerator}/${this.denominator}`}toSimplifiedString(){return E.__staticFractionTmp.copy(this).simplify().toString()}toMixedString(){let t="";const e=this.quotient(),i=E.__staticFractionTmp.copy(this);return e<0&&i.makeAbs(),0!==e?(t+=e,0!==i.numerator&&(t+=` ${i.toSimplifiedString()}`)):t=0===i.numerator?"0":i.toSimplifiedString(),t}parse(t){const e=t.split("/"),i=parseInt(e[0],10),s=e[1]?parseInt(e[1],10):1;return this.set(i,s)}}function B(t,e=1){return"number"==typeof t?[t,e]:[t.numerator,t.denominator]}E.__staticFractionA=new E,E.__staticFractionB=new E,E.__staticFractionTmp=new E;class C{static copy(t){return new C(t.x,t.y,t.w,t.h)}constructor(t,e,i,s){this.x=t,this.y=e,this.w=i,this.h=s}getX(){return this.x}getY(){return this.y}getW(){return this.w}getH(){return this.h}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setW(t){return this.w=t,this}setH(t){return this.h=t,this}move(t,e){return this.x+=t,this.y+=e,this}clone(){return C.copy(this)}mergeWith(t){const e=t,i=this.xthis.x2)&&(this.x2=t),(isNaN(this.y1)||ethis.y2)&&(this.y2=e)}addX(t){this.addPoint(t,this.y1)}addY(t){this.addPoint(this.x1,t)}addQuadraticCurve(t,e,i,s,n,a){this.addPoint(t,e),this.addPoint(n,a);const o=i-t;let r=o-(n-i);if(0!=r){const e=o/r;if(e>0&&e<1){const s=1-e;this.addX(s*s*t+2*s*e*i+e*e*n)}}const h=s-e;if(r=h-(a-s),0!=r){const t=h/r;if(t>0&&t<1){const i=1-t;this.addY(i*i*e+2*i*t*s+t*t*a)}}}addBezierCurve(t,e,i,s,n,a,o,r){const h=[t,e],l=[i,s],c=[n,a],d=[o,r];let m;this.addPoint(h[0],h[1]),this.addPoint(d[0],d[1]);const g=(t,e)=>Math.pow(1-t,3)*h[e]+3*Math.pow(1-t,2)*t*l[e]+3*(1-t)*Math.pow(t,2)*c[e]+Math.pow(t,3)*d[e];for(m=0;m<=1;m++){const t=6*h[m]-12*l[m]+6*c[m],e=-3*h[m]+9*l[m]-9*c[m]+3*d[m],i=3*l[m]-3*h[m];if(0===e){if(0===t)continue;const e=-i/t;0=600;{const e=parseInt(t,10);return isNaN(e)?"bold"===t.toLowerCase():e>=600}}return!1}static isItalic(t){return!!t&&t.toLowerCase()===A.ITALIC}static loadWebFont(t,e,i=!0){return k(this,void 0,void 0,(function*(){const s=new FontFace(t,(i?`url(${e}2) format('woff2'), `:"")+`url(${e}) format('woff')`);return yield s.load(),document.fonts.add(s),s}))}static loadWebFonts(){return k(this,void 0,void 0,(function*(){const t=F.WEB_FONT_HOST,e=F.WEB_FONT_FILES;for(const i in e){const s=e[i];F.loadWebFont(i,t+s)}}))}static load(t,e,i){let s=M[t];return s||(s=new F(t),M[t]=s),e&&s.setData(e),i&&s.setMetrics(i),s}constructor(t){this.name=t}getName(){return this.name}getData(){return p(this.data,"FontError","Missing font data")}getMetrics(){return p(this.metrics,"FontError","Missing metrics")}setData(t){this.data=t}setMetrics(t){this.metrics=t}hasData(){return void 0!==this.data}getResolution(){return this.getData().resolution}getGlyphs(){return this.getData().glyphs}lookupMetric(t,e){const i=t.split(".");let s=this.getMetrics();for(let t=0;tt[e]))}}return[]}getElementsByType(t){return this.getElementsByAttribute("type",t)}getElementsByClass(t){return this.getElementsByAttribute("class",t)}onUpdate(t){return["id","type","class"].includes(t.name)&&this.updateIndex(t),this}}class L{static get CATEGORY(){return x.Element}static newID(){return"auto"+L.ID++}constructor(){var t;this.children=[],this.attrs={id:L.newID(),type:this.getCategory(),class:""},this.rendered=!1,null===(t=R.getDefaultRegistry())||void 0===t||t.register(this)}addChildElement(t){return this.children.push(t),this}getCategory(){return this.constructor.CATEGORY}setStyle(t){return this.style=t,this}setGroupStyle(t){return this.style=t,this.children.forEach((e=>e.setGroupStyle(t))),this}getStyle(){return this.style}applyStyle(t=this.context,e=this.getStyle()){return e&&t?(t.save(),e.shadowColor&&t.setShadowColor(e.shadowColor),e.shadowBlur&&t.setShadowBlur(e.shadowBlur),e.fillStyle&&t.setFillStyle(e.fillStyle),e.strokeStyle&&t.setStrokeStyle(e.strokeStyle),e.lineWidth&&t.setLineWidth(e.lineWidth),this):this}restoreStyle(t=this.context,e=this.getStyle()){return e&&t?(t.restore(),this):this}drawWithStyle(){this.checkContext(),this.applyStyle(),this.draw(),this.restoreStyle()}hasClass(t){var e;return!!this.attrs.class&&-1!=(null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ").indexOf(t))}addClass(t){var e;return this.hasClass(t)||(this.attrs.class?this.attrs.class=`${this.attrs.class} ${t}`:this.attrs.class=`${t}`,null===(e=this.registry)||void 0===e||e.onUpdate({id:this.attrs.id,name:"class",value:t,oldValue:void 0})),this}removeClass(t){var e,i;if(!this.hasClass(t))return this;const s=null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ");return s&&(s.splice(s.indexOf(t)),this.attrs.class=s.join(" ")),null===(i=this.registry)||void 0===i||i.onUpdate({id:this.attrs.id,name:"class",value:void 0,oldValue:t}),this}onRegister(t){return this.registry=t,this}isRendered(){return this.rendered}setRendered(t=!0){return this.rendered=t,this}getAttributes(){return this.attrs}getAttribute(t){return this.attrs[t]}getSVGElement(t=""){const e=T(this.attrs.id+t),i=document.getElementById(e);if(i)return i}setAttribute(t,e){var i;const s=this.attrs.id,n=this.attrs[t];return this.attrs[t]=e,null===(i=this.registry)||void 0===i||i.onUpdate({id:s,name:t,value:e,oldValue:n}),this}getBoundingBox(){return this.boundingBox}getContext(){return this.context}setContext(t){return this.context=t,this}checkContext(){return p(this.context,"NoContext","No rendering context attached to instance.")}set font(t){this.setFont(t)}get font(){return F.toCSSString(this.textFont)}setFont(t,e,i,s){const n=this.constructor.TEXT_FONT,a="object"==typeof t,o="string"==typeof t,r=void 0===t,h=void 0===e&&void 0===i&&void 0===s;return this.textFont=a?Object.assign(Object.assign({},n),t):o&&h?F.fromCSSString(t):r&&h?Object.assign({},n):F.validate(null!=t?t:n.family,null!=e?e:n.size,null!=i?i:n.weight,null!=s?s:n.style),this}getFont(){return this.textFont||this.resetFont(),F.toCSSString(this.textFont)}resetFont(){this.setFont()}get fontInfo(){return this.textFont||this.resetFont(),Object.assign({},this.textFont)}set fontInfo(t){this.setFont(t)}setFontSize(t){const e=this.fontInfo;return this.setFont(e.family,t,e.weight,e.style),this}getFontSize(){return this.fontSize}set fontSize(t){this.setFontSize(t)}get fontSize(){let t=this.fontInfo.size;return"number"==typeof t&&(t=`${t}pt`),t}get fontSizeInPoints(){return F.convertSizeToPointValue(this.fontSize)}get fontSizeInPixels(){return F.convertSizeToPixelValue(this.fontSize)}get fontStyle(){return this.fontInfo.style}set fontStyle(t){const e=this.fontInfo;this.setFont(e.family,e.size,e.weight,t)}get fontWeight(){return this.fontInfo.weight+""}set fontWeight(t){const e=this.fontInfo;this.setFont(e.family,e.size,t,e.style)}}L.ID=1e3,L.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:N.NORMAL,style:A.NORMAL};const W=16384,I={"1/2":32768,1:16384,2:8192,4:4096,8:2048,16:1024,32:512,64:256,128:128,256:64},G={w:"1",h:"2",q:"4",b:"256"},U={C:{num:0},Am:{num:0},F:{acc:"b",num:1},Dm:{acc:"b",num:1},Bb:{acc:"b",num:2},Gm:{acc:"b",num:2},Eb:{acc:"b",num:3},Cm:{acc:"b",num:3},Ab:{acc:"b",num:4},Fm:{acc:"b",num:4},Db:{acc:"b",num:5},Bbm:{acc:"b",num:5},Gb:{acc:"b",num:6},Ebm:{acc:"b",num:6},Cb:{acc:"b",num:7},Abm:{acc:"b",num:7},G:{acc:"#",num:1},Em:{acc:"#",num:1},D:{acc:"#",num:2},Bm:{acc:"#",num:2},A:{acc:"#",num:3},"F#m":{acc:"#",num:3},E:{acc:"#",num:4},"C#m":{acc:"#",num:4},B:{acc:"#",num:5},"G#m":{acc:"#",num:5},"F#":{acc:"#",num:6},"D#m":{acc:"#",num:6},"C#":{acc:"#",num:7},"A#m":{acc:"#",num:7}},Y={treble:{line_shift:0},bass:{line_shift:6},tenor:{line_shift:4},alto:{line_shift:3},soprano:{line_shift:1},percussion:{line_shift:0},"mezzo-soprano":{line_shift:2},"baritone-c":{line_shift:5},"baritone-f":{line_shift:5},subbass:{line_shift:7},french:{line_shift:-1}},H={C:{index:0,int_val:0},CN:{index:0,int_val:0,accidental:"n"},"C#":{index:0,int_val:1,accidental:"#"},"C##":{index:0,int_val:2,accidental:"##"},CB:{index:0,int_val:11,accidental:"b"},CBB:{index:0,int_val:10,accidental:"bb"},D:{index:1,int_val:2},DN:{index:1,int_val:2,accidental:"n"},"D#":{index:1,int_val:3,accidental:"#"},"D##":{index:1,int_val:4,accidental:"##"},DB:{index:1,int_val:1,accidental:"b"},DBB:{index:1,int_val:0,accidental:"bb"},E:{index:2,int_val:4},EN:{index:2,int_val:4,accidental:"n"},"E#":{index:2,int_val:5,accidental:"#"},"E##":{index:2,int_val:6,accidental:"##"},EB:{index:2,int_val:3,accidental:"b"},EBB:{index:2,int_val:2,accidental:"bb"},F:{index:3,int_val:5},FN:{index:3,int_val:5,accidental:"n"},"F#":{index:3,int_val:6,accidental:"#"},"F##":{index:3,int_val:7,accidental:"##"},FB:{index:3,int_val:4,accidental:"b"},FBB:{index:3,int_val:3,accidental:"bb"},G:{index:4,int_val:7},GN:{index:4,int_val:7,accidental:"n"},"G#":{index:4,int_val:8,accidental:"#"},"G##":{index:4,int_val:9,accidental:"##"},GB:{index:4,int_val:6,accidental:"b"},GBB:{index:4,int_val:5,accidental:"bb"},A:{index:5,int_val:9},AN:{index:5,int_val:9,accidental:"n"},"A#":{index:5,int_val:10,accidental:"#"},"A##":{index:5,int_val:11,accidental:"##"},AB:{index:5,int_val:8,accidental:"b"},ABB:{index:5,int_val:7,accidental:"bb"},B:{index:6,int_val:11},BN:{index:6,int_val:11,accidental:"n"},"B#":{index:6,int_val:12,accidental:"#"},"B##":{index:6,int_val:13,accidental:"##"},BB:{index:6,int_val:10,accidental:"b"},BBB:{index:6,int_val:9,accidental:"bb"},R:{index:6,rest:!0},X:{index:6,accidental:"",octave:4,code:"noteheadXBlack",shift_right:5.5}},z={"#":{code:"accidentalSharp",parenRightPaddingAdjustment:-1},"##":{code:"accidentalDoubleSharp",parenRightPaddingAdjustment:-1},b:{code:"accidentalFlat",parenRightPaddingAdjustment:-2},bb:{code:"accidentalDoubleFlat",parenRightPaddingAdjustment:-2},n:{code:"accidentalNatural",parenRightPaddingAdjustment:-1},"{":{code:"accidentalParensLeft",parenRightPaddingAdjustment:-1},"}":{code:"accidentalParensRight",parenRightPaddingAdjustment:-1},db:{code:"accidentalThreeQuarterTonesFlatZimmermann",parenRightPaddingAdjustment:-1},d:{code:"accidentalQuarterToneFlatStein",parenRightPaddingAdjustment:0},"++":{code:"accidentalThreeQuarterTonesSharpStein",parenRightPaddingAdjustment:-1},"+":{code:"accidentalQuarterToneSharpStein",parenRightPaddingAdjustment:-1},"+-":{code:"accidentalKucukMucennebSharp",parenRightPaddingAdjustment:-1},bs:{code:"accidentalBakiyeFlat",parenRightPaddingAdjustment:-1},bss:{code:"accidentalBuyukMucennebFlat",parenRightPaddingAdjustment:-1},o:{code:"accidentalSori",parenRightPaddingAdjustment:-1},k:{code:"accidentalKoron",parenRightPaddingAdjustment:-1},bbs:{code:"vexAccidentalMicrotonal1",parenRightPaddingAdjustment:-1},"++-":{code:"accidentalBuyukMucennebSharp",parenRightPaddingAdjustment:-1},ashs:{code:"vexAccidentalMicrotonal3",parenRightPaddingAdjustment:-1},afhf:{code:"vexAccidentalMicrotonal4",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaUp:{code:"accSagittal5v7KleismaUp",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaDown:{code:"accSagittal5v7KleismaDown",parenRightPaddingAdjustment:-1},accSagittal5CommaUp:{code:"accSagittal5CommaUp",parenRightPaddingAdjustment:-1},accSagittal5CommaDown:{code:"accSagittal5CommaDown",parenRightPaddingAdjustment:-1},accSagittal7CommaUp:{code:"accSagittal7CommaUp",parenRightPaddingAdjustment:-1},accSagittal7CommaDown:{code:"accSagittal7CommaDown",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisUp:{code:"accSagittal25SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisDown:{code:"accSagittal25SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisUp:{code:"accSagittal35MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisDown:{code:"accSagittal35MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisUp:{code:"accSagittal11MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisDown:{code:"accSagittal11MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisUp:{code:"accSagittal11LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisDown:{code:"accSagittal11LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisUp:{code:"accSagittal35LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisDown:{code:"accSagittal35LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SDown:{code:"accSagittalSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalFlat25SUp:{code:"accSagittalFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7CDown:{code:"accSagittalSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7CUp:{code:"accSagittalFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5CDown:{code:"accSagittalSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5CUp:{code:"accSagittalFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kDown:{code:"accSagittalSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kUp:{code:"accSagittalFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalSharp:{code:"accSagittalSharp",parenRightPaddingAdjustment:-1},accSagittalFlat:{code:"accSagittalFlat",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kUp:{code:"accSagittalSharp5v7kUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kDown:{code:"accSagittalFlat5v7kDown",parenRightPaddingAdjustment:-1},accSagittalSharp5CUp:{code:"accSagittalSharp5CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5CDown:{code:"accSagittalFlat5CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7CUp:{code:"accSagittalSharp7CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7CDown:{code:"accSagittalFlat7CDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SUp:{code:"accSagittalSharp25SUp",parenRightPaddingAdjustment:-1},accSagittalFlat25SDown:{code:"accSagittalFlat25SDown",parenRightPaddingAdjustment:-1},accSagittalSharp35MUp:{code:"accSagittalSharp35MUp",parenRightPaddingAdjustment:-1},accSagittalFlat35MDown:{code:"accSagittalFlat35MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11MUp:{code:"accSagittalSharp11MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11MDown:{code:"accSagittalFlat11MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11LUp:{code:"accSagittalSharp11LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11LDown:{code:"accSagittalFlat11LDown",parenRightPaddingAdjustment:-1},accSagittalSharp35LUp:{code:"accSagittalSharp35LUp",parenRightPaddingAdjustment:-1},accSagittalFlat35LDown:{code:"accSagittalFlat35LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp25SDown:{code:"accSagittalDoubleSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat25SUp:{code:"accSagittalDoubleFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7CDown:{code:"accSagittalDoubleSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7CUp:{code:"accSagittalDoubleFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5CDown:{code:"accSagittalDoubleSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5CUp:{code:"accSagittalDoubleFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v7kDown:{code:"accSagittalDoubleSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v7kUp:{code:"accSagittalDoubleFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp:{code:"accSagittalDoubleSharp",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat:{code:"accSagittalDoubleFlat",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaUp:{code:"accSagittal7v11KleismaUp",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaDown:{code:"accSagittal7v11KleismaDown",parenRightPaddingAdjustment:-1},accSagittal17CommaUp:{code:"accSagittal17CommaUp",parenRightPaddingAdjustment:-1},accSagittal17CommaDown:{code:"accSagittal17CommaDown",parenRightPaddingAdjustment:-1},accSagittal55CommaUp:{code:"accSagittal55CommaUp",parenRightPaddingAdjustment:-1},accSagittal55CommaDown:{code:"accSagittal55CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v11CommaUp:{code:"accSagittal7v11CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v11CommaDown:{code:"accSagittal7v11CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisUp:{code:"accSagittal5v11SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisDown:{code:"accSagittal5v11SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SDown:{code:"accSagittalSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SUp:{code:"accSagittalFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CDown:{code:"accSagittalSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CUp:{code:"accSagittalFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalSharp55CDown:{code:"accSagittalSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalFlat55CUp:{code:"accSagittalFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17CDown:{code:"accSagittalSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalFlat17CUp:{code:"accSagittalFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kDown:{code:"accSagittalSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kUp:{code:"accSagittalFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kUp:{code:"accSagittalSharp7v11kUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kDown:{code:"accSagittalFlat7v11kDown",parenRightPaddingAdjustment:-1},accSagittalSharp17CUp:{code:"accSagittalSharp17CUp",parenRightPaddingAdjustment:-1},accSagittalFlat17CDown:{code:"accSagittalFlat17CDown",parenRightPaddingAdjustment:-1},accSagittalSharp55CUp:{code:"accSagittalSharp55CUp",parenRightPaddingAdjustment:-1},accSagittalFlat55CDown:{code:"accSagittalFlat55CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CUp:{code:"accSagittalSharp7v11CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CDown:{code:"accSagittalFlat7v11CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SUp:{code:"accSagittalSharp5v11SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SDown:{code:"accSagittalFlat5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v11SDown:{code:"accSagittalDoubleSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v11SUp:{code:"accSagittalDoubleFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11CDown:{code:"accSagittalDoubleSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11CUp:{code:"accSagittalDoubleFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp55CDown:{code:"accSagittalDoubleSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat55CUp:{code:"accSagittalDoubleFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17CDown:{code:"accSagittalDoubleSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17CUp:{code:"accSagittalDoubleFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11kDown:{code:"accSagittalDoubleSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11kUp:{code:"accSagittalDoubleFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittal23CommaUp:{code:"accSagittal23CommaUp",parenRightPaddingAdjustment:-1},accSagittal23CommaDown:{code:"accSagittal23CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v19CommaUp:{code:"accSagittal5v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal5v19CommaDown:{code:"accSagittal5v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisUp:{code:"accSagittal5v23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisDown:{code:"accSagittal5v23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SDown:{code:"accSagittalSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SUp:{code:"accSagittalFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CDown:{code:"accSagittalSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CUp:{code:"accSagittalFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CDown:{code:"accSagittalSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalFlat23CUp:{code:"accSagittalFlat23CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CUp:{code:"accSagittalSharp23CUp",parenRightPaddingAdjustment:-1},accSagittalFlat23CDown:{code:"accSagittalFlat23CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CUp:{code:"accSagittalSharp5v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CDown:{code:"accSagittalFlat5v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SUp:{code:"accSagittalSharp5v23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SDown:{code:"accSagittalFlat5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v23SDown:{code:"accSagittalDoubleSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v23SUp:{code:"accSagittalDoubleFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v19CDown:{code:"accSagittalDoubleSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v19CUp:{code:"accSagittalDoubleFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23CDown:{code:"accSagittalDoubleSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23CUp:{code:"accSagittalDoubleFlat23CUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaUp:{code:"accSagittal19SchismaUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaDown:{code:"accSagittal19SchismaDown",parenRightPaddingAdjustment:-1},accSagittal17KleismaUp:{code:"accSagittal17KleismaUp",parenRightPaddingAdjustment:-1},accSagittal17KleismaDown:{code:"accSagittal17KleismaDown",parenRightPaddingAdjustment:-1},accSagittal143CommaUp:{code:"accSagittal143CommaUp",parenRightPaddingAdjustment:-1},accSagittal143CommaDown:{code:"accSagittal143CommaDown",parenRightPaddingAdjustment:-1},accSagittal11v49CommaUp:{code:"accSagittal11v49CommaUp",parenRightPaddingAdjustment:-1},accSagittal11v49CommaDown:{code:"accSagittal11v49CommaDown",parenRightPaddingAdjustment:-1},accSagittal19CommaUp:{code:"accSagittal19CommaUp",parenRightPaddingAdjustment:-1},accSagittal19CommaDown:{code:"accSagittal19CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v19CommaUp:{code:"accSagittal7v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v19CommaDown:{code:"accSagittal7v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisUp:{code:"accSagittal49SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisDown:{code:"accSagittal49SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisUp:{code:"accSagittal23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisDown:{code:"accSagittal23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisUp:{code:"accSagittal5v13MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisDown:{code:"accSagittal5v13MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisUp:{code:"accSagittal11v19MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisDown:{code:"accSagittal11v19MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisUp:{code:"accSagittal49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisDown:{code:"accSagittal49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisUp:{code:"accSagittal5v49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisDown:{code:"accSagittal5v49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisUp:{code:"accSagittal49LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisDown:{code:"accSagittal49LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisUp:{code:"accSagittal11v19LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisDown:{code:"accSagittal11v19LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisUp:{code:"accSagittal5v13LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisDown:{code:"accSagittal5v13LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SDown:{code:"accSagittalSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat23SUp:{code:"accSagittalFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp49SDown:{code:"accSagittalSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalFlat49SUp:{code:"accSagittalFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CDown:{code:"accSagittalSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CUp:{code:"accSagittalFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp19CDown:{code:"accSagittalSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat19CUp:{code:"accSagittalFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CDown:{code:"accSagittalSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CUp:{code:"accSagittalFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalSharp143CDown:{code:"accSagittalSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalFlat143CUp:{code:"accSagittalFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17kDown:{code:"accSagittalSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalFlat17kUp:{code:"accSagittalFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sDown:{code:"accSagittalSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalFlat19sUp:{code:"accSagittalFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sUp:{code:"accSagittalSharp19sUp",parenRightPaddingAdjustment:-1},accSagittalFlat19sDown:{code:"accSagittalFlat19sDown",parenRightPaddingAdjustment:-1},accSagittalSharp17kUp:{code:"accSagittalSharp17kUp",parenRightPaddingAdjustment:-1},accSagittalFlat17kDown:{code:"accSagittalFlat17kDown",parenRightPaddingAdjustment:-1},accSagittalSharp143CUp:{code:"accSagittalSharp143CUp",parenRightPaddingAdjustment:-1},accSagittalFlat143CDown:{code:"accSagittalFlat143CDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CUp:{code:"accSagittalSharp11v49CUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CDown:{code:"accSagittalFlat11v49CDown",parenRightPaddingAdjustment:-1},accSagittalSharp19CUp:{code:"accSagittalSharp19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat19CDown:{code:"accSagittalFlat19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CUp:{code:"accSagittalSharp7v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CDown:{code:"accSagittalFlat7v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp49SUp:{code:"accSagittalSharp49SUp",parenRightPaddingAdjustment:-1},accSagittalFlat49SDown:{code:"accSagittalFlat49SDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SUp:{code:"accSagittalSharp23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat23SDown:{code:"accSagittalFlat23SDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13MUp:{code:"accSagittalSharp5v13MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13MDown:{code:"accSagittalFlat5v13MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19MUp:{code:"accSagittalSharp11v19MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19MDown:{code:"accSagittalFlat11v19MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49MUp:{code:"accSagittalSharp49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat49MDown:{code:"accSagittalFlat49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v49MUp:{code:"accSagittalSharp5v49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v49MDown:{code:"accSagittalFlat5v49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49LUp:{code:"accSagittalSharp49LUp",parenRightPaddingAdjustment:-1},accSagittalFlat49LDown:{code:"accSagittalFlat49LDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19LUp:{code:"accSagittalSharp11v19LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19LDown:{code:"accSagittalFlat11v19LDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13LUp:{code:"accSagittalSharp5v13LUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13LDown:{code:"accSagittalFlat5v13LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23SDown:{code:"accSagittalDoubleSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23SUp:{code:"accSagittalDoubleFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp49SDown:{code:"accSagittalDoubleSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat49SUp:{code:"accSagittalDoubleFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v19CDown:{code:"accSagittalDoubleSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v19CUp:{code:"accSagittalDoubleFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19CDown:{code:"accSagittalDoubleSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19CUp:{code:"accSagittalDoubleFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp11v49CDown:{code:"accSagittalDoubleSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat11v49CUp:{code:"accSagittalDoubleFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp143CDown:{code:"accSagittalDoubleSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat143CUp:{code:"accSagittalDoubleFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17kDown:{code:"accSagittalDoubleSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17kUp:{code:"accSagittalDoubleFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19sDown:{code:"accSagittalDoubleSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19sUp:{code:"accSagittalDoubleFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalShaftUp:{code:"accSagittalShaftUp",parenRightPaddingAdjustment:-1},accSagittalShaftDown:{code:"accSagittalShaftDown",parenRightPaddingAdjustment:-1},accSagittalAcute:{code:"accSagittalAcute",parenRightPaddingAdjustment:-1},accSagittalGrave:{code:"accSagittalGrave",parenRightPaddingAdjustment:-1},accSagittal1MinaUp:{code:"accSagittal1MinaUp",parenRightPaddingAdjustment:-1},accSagittal1MinaDown:{code:"accSagittal1MinaDown",parenRightPaddingAdjustment:-1},accSagittal2MinasUp:{code:"accSagittal2MinasUp",parenRightPaddingAdjustment:-1},accSagittal2MinasDown:{code:"accSagittal2MinasDown",parenRightPaddingAdjustment:-1},accSagittal1TinaUp:{code:"accSagittal1TinaUp",parenRightPaddingAdjustment:-1},accSagittal1TinaDown:{code:"accSagittal1TinaDown",parenRightPaddingAdjustment:-1},accSagittal2TinasUp:{code:"accSagittal2TinasUp",parenRightPaddingAdjustment:-1},accSagittal2TinasDown:{code:"accSagittal2TinasDown",parenRightPaddingAdjustment:-1},accSagittal3TinasUp:{code:"accSagittal3TinasUp",parenRightPaddingAdjustment:-1},accSagittal3TinasDown:{code:"accSagittal3TinasDown",parenRightPaddingAdjustment:-1},accSagittal4TinasUp:{code:"accSagittal4TinasUp",parenRightPaddingAdjustment:-1},accSagittal4TinasDown:{code:"accSagittal4TinasDown",parenRightPaddingAdjustment:-1},accSagittal5TinasUp:{code:"accSagittal5TinasUp",parenRightPaddingAdjustment:-1},accSagittal5TinasDown:{code:"accSagittal5TinasDown",parenRightPaddingAdjustment:-1},accSagittal6TinasUp:{code:"accSagittal6TinasUp",parenRightPaddingAdjustment:-1},accSagittal6TinasDown:{code:"accSagittal6TinasDown",parenRightPaddingAdjustment:-1},accSagittal7TinasUp:{code:"accSagittal7TinasUp",parenRightPaddingAdjustment:-1},accSagittal7TinasDown:{code:"accSagittal7TinasDown",parenRightPaddingAdjustment:-1},accSagittal8TinasUp:{code:"accSagittal8TinasUp",parenRightPaddingAdjustment:-1},accSagittal8TinasDown:{code:"accSagittal8TinasDown",parenRightPaddingAdjustment:-1},accSagittal9TinasUp:{code:"accSagittal9TinasUp",parenRightPaddingAdjustment:-1},accSagittal9TinasDown:{code:"accSagittal9TinasDown",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaUp:{code:"accSagittalFractionalTinaUp",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaDown:{code:"accSagittalFractionalTinaDown",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlat:{code:"accidentalNarrowReversedFlat",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlatAndFlat:{code:"accidentalNarrowReversedFlatAndFlat",parenRightPaddingAdjustment:-1},accidentalWilsonPlus:{code:"accidentalWilsonPlus",parenRightPaddingAdjustment:-1},accidentalWilsonMinus:{code:"accidentalWilsonMinus",parenRightPaddingAdjustment:-1}},j={"a.":{code:"augmentationDot",between_lines:!0},av:{aboveCode:"articStaccatissimoAbove",belowCode:"articStaccatissimoBelow",between_lines:!0},"a>":{aboveCode:"articAccentAbove",belowCode:"articAccentBelow",between_lines:!0},"a-":{aboveCode:"articTenutoAbove",belowCode:"articTenutoBelow",between_lines:!0},"a^":{aboveCode:"articMarcatoAbove",belowCode:"articMarcatoBelow",between_lines:!1},"a+":{code:"pluckedLeftHandPizzicato",between_lines:!1},ao:{aboveCode:"pluckedSnapPizzicatoAbove",belowCode:"pluckedSnapPizzicatoBelow",between_lines:!1},ah:{code:"stringsHarmonic",between_lines:!1},"a@":{aboveCode:"fermataAbove",belowCode:"fermataBelow",between_lines:!1},"a@a":{code:"fermataAbove",between_lines:!1},"a@u":{code:"fermataBelow",between_lines:!1},"a@s":{aboveCode:"fermataShortAbove",belowCode:"fermataShortBelow",between_lines:!1},"a@as":{code:"fermataShortAbove",between_lines:!1},"a@us":{code:"fermataShortBelow",between_lines:!1},"a@l":{aboveCode:"fermataLongAbove",belowCode:"fermataLongBelow",between_lines:!1},"a@al":{code:"fermataLongAbove",between_lines:!1},"a@ul":{code:"fermataLongBelow",between_lines:!1},"a@vl":{aboveCode:"fermataVeryLongAbove",belowCode:"fermataVeryLongBelow",between_lines:!1},"a@avl":{code:"fermataVeryLongAbove",between_lines:!1},"a@uvl":{code:"fermataVeryLongBelow",between_lines:!1},"a|":{code:"stringsUpBow",between_lines:!1},am:{code:"stringsDownBow",between_lines:!1},"a,":{code:"pictChokeCymbal",between_lines:!1}},X={mordent:{code:"ornamentShortTrill"},mordent_inverted:{code:"ornamentMordent"},turn:{code:"ornamentTurn"},turn_inverted:{code:"ornamentTurnSlash"},tr:{code:"ornamentTrill"},upprall:{code:"ornamentPrecompSlideTrillDAnglebert"},downprall:{code:"ornamentPrecompDoubleCadenceUpperPrefix"},prallup:{code:"ornamentPrecompTrillSuffixDandrieu"},pralldown:{code:"ornamentPrecompTrillLowerSuffix"},upmordent:{code:"ornamentPrecompSlideTrillBach"},downmordent:{code:"ornamentPrecompDoubleCadenceUpperPrefixTurn"},lineprall:{code:"ornamentPrecompAppoggTrill"},prallprall:{code:"ornamentTremblement"},scoop:{code:"brassScoop"},doit:{code:"brassDoitMedium"},fall:{code:"brassFallLipShort"},doitLong:{code:"brassLiftMedium"},fallLong:{code:"brassFallRoughMedium"},bend:{code:"brassBend"},plungerClosed:{code:"brassMuteClosed"},plungerOpen:{code:"brassMuteOpen"},flip:{code:"brassFlip"},jazzTurn:{code:"brassJazzTurn"},smear:{code:"brassSmear"}};class V{static currentMusicFont(){if(0===V.MUSIC_FONT_STACK.length)throw new b("NoFonts","The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).");return V.MUSIC_FONT_STACK[0]}static clefProperties(t){if(!t||!(t in Y))throw new b("BadArgument","Invalid clef: "+t);return Y[t]}static keyProperties(t,e="treble",i){let s={octave_shift:0,duration:"4"};"object"==typeof i&&(s=Object.assign(Object.assign({},s),i));const n=V.sanitizeDuration(s.duration),a=t.split("/");if(a.length<2)throw new b("BadArguments",`First argument must be note/octave or note/octave/glyph-code: ${t}`);const o=a[0].toUpperCase(),r=H[o];if(!r)throw new b("BadArguments","Invalid key name: "+o);r.octave&&(a[1]=r.octave.toString());let h=parseInt(a[1],10);h-=s.octave_shift;let l=(7*h-28+r.index)/2;l+=V.clefProperties(e).line_shift;let c=0;l<=0&&2*l%2==0&&(c=1),l>=6&&2*l%2==0&&(c=-1);const d=void 0!==r.int_val?12*h+r.int_val:void 0,m=r.code,g=r.shift_right;let _={};if(a.length>2&&a[2]){const t=a[2].toUpperCase();_={code:this.codeNoteHead(t,n)}||{}}return Object.assign({key:o,octave:h,line:l,int_value:d,accidental:r.accidental,code:m,stroke:c,shift_right:g,displaced:!1},_)}static integerToNote(t){if(void 0===t||t<0||t>11)throw new b("BadArguments",`integerToNote() requires an integer in the range [0, 11]: ${t}`);const e={0:"C",1:"C#",2:"D",3:"D#",4:"E",5:"F",6:"F#",7:"G",8:"G#",9:"A",10:"A#",11:"B"}[t];if(!e)throw new b("BadArguments",`Unknown note value for integer: ${t}`);return e}static tabToGlyphProps(t,e=1){let i,s=0,n=0;if("X"===t.toUpperCase()){const t=new Z("accidentalDoubleSharp",V.TABLATURE_FONT_SCALE).getMetrics();if(i="accidentalDoubleSharp",null==t.width||null==t.height)throw new b("InvalidMetrics","Width and height required");s=t.width,n=-t.height/2}else s=V.textWidth(t);return{text:t,code:i,getWidth:()=>s*e,shift_y:n}}static textWidth(t){return 7*t.toString().length}static articulationCodes(t){return j[t]}static accidentalCodes(t){return z[t]}static ornamentCodes(t){return X[t]}static keySignature(t){const e=U[t];if(!e)throw new b("BadKeySignature",`Bad key signature spec: '${t}'`);if(!e.acc)return[];const i={b:[2,.5,2.5,1,3,1.5,3.5],"#":[0,1.5,-.5,1,2.5,.5,2]}[e.acc],s=[];for(let t=0;tZ.getWidth(a,t)}),s)}}V.UNISON=!0,V.SOFTMAX_FACTOR=10,V.STEM_WIDTH=1.5,V.STEM_HEIGHT=35,V.STAVE_LINE_THICKNESS=1,V.RENDER_PRECISION_PLACES=3,V.RESOLUTION=W,V.MUSIC_FONT_STACK=[],V.NOTATION_FONT_SCALE=39,V.TABLATURE_FONT_SCALE=39,V.SLASH_NOTEHEAD_WIDTH=15,V.STAVE_LINE_DISTANCE=10,V.TEXT_HEIGHT_OFFSET_HACK=1,V.accidentalMap=z,V.accidentalColumnsTable={1:{a:[1],b:[1]},2:{a:[1,2]},3:{a:[1,3,2],b:[1,2,1],second_on_bottom:[1,2,3]},4:{a:[1,3,4,2],b:[1,2,3,1],spaced_out_tetrachord:[1,2,1,2]},5:{a:[1,3,5,4,2],b:[1,2,4,3,1],spaced_out_pentachord:[1,2,3,2,1],very_spaced_out_pentachord:[1,2,1,2,1]},6:{a:[1,3,5,6,4,2],b:[1,2,4,5,3,1],spaced_out_hexachord:[1,3,2,1,3,2],very_spaced_out_hexachord:[1,2,1,2,1,2]}},V.unicode={sharp:String.fromCharCode(9839),flat:String.fromCharCode(9837),natural:String.fromCharCode(9838),triangle:String.fromCharCode(9651),"o-with-slash":String.fromCharCode(248),degrees:String.fromCharCode(176),circle:String.fromCharCode(9675)},V.validTypes={n:{name:"note"},r:{name:"rest"},h:{name:"harmonic"},m:{name:"muted"},s:{name:"slash"},g:{name:"ghost"},d:{name:"diamond"},x:{name:"x"},ci:{name:"circled"},cx:{name:"circle x"},sf:{name:"slashed"},sb:{name:"slashed backward"},sq:{name:"square"},tu:{name:"triangle up"},td:{name:"triangle down"}},V.TIME4_4={num_beats:4,beat_value:4,resolution:W};const K={"1/2":{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restDoubleWhole",rest:!0,position:"B/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},1:{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restWhole",ledger_code_head:"restWholeLegerLine",rest:!0,position:"D/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},2:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restHalf",ledger_code_head:"restHalfLegerLine",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},4:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restQuarter",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1.5,line_below:1.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},8:{common:{code_head:"",stem:!0,flag:!0,beam_count:1,stem_beam_extension:0,code_flag_upstem:"flag8thUp",code_flag_downstem:"flag8thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest8th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:1},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},16:{common:{code_head:"",beam_count:2,stem_beam_extension:0,stem:!0,flag:!0,code_flag_upstem:"flag16thUp",code_flag_downstem:"flag16thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest16th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},32:{common:{code_head:"",beam_count:3,stem_beam_extension:7.5,stem:!0,flag:!0,code_flag_upstem:"flag32ndUp",code_flag_downstem:"flag32ndDown",stem_up_extension:9,stem_down_extension:9,tabnote_stem_up_extension:9,tabnote_stem_down_extension:9,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest32nd",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},64:{common:{code_head:"",beam_count:4,stem_beam_extension:15,stem:!0,flag:!0,code_flag_upstem:"flag64thUp",code_flag_downstem:"flag64thDown",stem_up_extension:13,stem_down_extension:13,tabnote_stem_up_extension:13,tabnote_stem_down_extension:13,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest64th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},128:{common:{code_head:"",beam_count:5,stem_beam_extension:22.5,stem:!0,flag:!0,code_flag_upstem:"flag128thUp",code_flag_downstem:"flag128thDown",stem_up_extension:22,stem_down_extension:22,tabnote_stem_up_extension:22,tabnote_stem_down_extension:22,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest128th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-2.5,line_above:3,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}}};var $,J;!function(t){t[t.MOVE=0]="MOVE",t[t.LINE=1]="LINE",t[t.QUADRATIC=2]="QUADRATIC",t[t.BEZIER=3]="BEZIER"}($||($={}));class q{constructor(t,e,i){this.point=-1,this.metrics=Z.loadMetrics(t,e,i),this.bbox=Z.getOutlineBoundingBox(this.metrics.outline,this.metrics.scale,this.metrics.x_shift,this.metrics.y_shift),i&&(this.point=Z.lookupFontMetric(this.metrics.font,i,e,"point",-1))}}class Q{constructor(t,e,i,s){this.outline=t,this.originX=e,this.originY=i,this.scale=s,this.i=0,this.precision=1,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES)}done(){return this.i>=this.outline.length}next(){return Math.round(this.outline[this.i++]*this.precision/this.precision)}nextX(){return Math.round((this.originX+this.outline[this.i++]*this.scale)*this.precision)/this.precision}nextY(){return Math.round((this.originY-this.outline[this.i++]*this.scale)*this.precision)/this.precision}static parse(t){const e=[],i=t.split(" ");let s=0;for(;s{const e=t.getTickContext();n&&t.setStave(n),e.setXOffset(a)}))}}class et{static get NUM_TONES(){return this.canonical_notes.length}static get roots(){return["c","d","e","f","g","a","b"]}static get root_values(){return[0,2,4,5,7,9,11]}static get root_indices(){return{c:0,d:1,e:2,f:3,g:4,a:5,b:6}}static get canonical_notes(){return["c","c#","d","d#","e","f","f#","g","g#","a","a#","b"]}static get diatonic_intervals(){return["unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","octave"]}static get diatonic_accidentals(){return{unison:{note:0,accidental:0},m2:{note:1,accidental:-1},M2:{note:1,accidental:0},m3:{note:2,accidental:-1},M3:{note:2,accidental:0},p4:{note:3,accidental:0},dim5:{note:4,accidental:-1},p5:{note:4,accidental:0},m6:{note:5,accidental:-1},M6:{note:5,accidental:0},b7:{note:6,accidental:-1},M7:{note:6,accidental:0},octave:{note:7,accidental:0}}}static get intervals(){return{u:0,unison:0,m2:1,b2:1,min2:1,S:1,H:1,2:2,M2:2,maj2:2,T:2,W:2,m3:3,b3:3,min3:3,M3:4,3:4,maj3:4,4:5,p4:5,"#4":6,b5:6,aug4:6,dim5:6,5:7,p5:7,"#5":8,b6:8,aug5:8,6:9,M6:9,maj6:9,b7:10,m7:10,min7:10,dom7:10,M7:11,maj7:11,8:12,octave:12}}static get scales(){return{major:[2,2,1,2,2,2,1],minor:[2,1,2,2,1,2,2],ionian:[2,2,1,2,2,2,1],dorian:[2,1,2,2,2,1,2],phyrgian:[1,2,2,2,1,2,2],lydian:[2,2,2,1,2,2,1],mixolydian:[2,2,1,2,2,1,2],aeolian:[2,1,2,2,1,2,2],locrian:[1,2,2,1,2,2,2]}}static get scaleTypes(){return{M:et.scales.major,m:et.scales.minor}}static get accidentals(){return["bb","b","n","#","##"]}static get noteValues(){return{c:{root_index:0,int_val:0},cn:{root_index:0,int_val:0},"c#":{root_index:0,int_val:1},"c##":{root_index:0,int_val:2},cb:{root_index:0,int_val:11},cbb:{root_index:0,int_val:10},d:{root_index:1,int_val:2},dn:{root_index:1,int_val:2},"d#":{root_index:1,int_val:3},"d##":{root_index:1,int_val:4},db:{root_index:1,int_val:1},dbb:{root_index:1,int_val:0},e:{root_index:2,int_val:4},en:{root_index:2,int_val:4},"e#":{root_index:2,int_val:5},"e##":{root_index:2,int_val:6},eb:{root_index:2,int_val:3},ebb:{root_index:2,int_val:2},f:{root_index:3,int_val:5},fn:{root_index:3,int_val:5},"f#":{root_index:3,int_val:6},"f##":{root_index:3,int_val:7},fb:{root_index:3,int_val:4},fbb:{root_index:3,int_val:3},g:{root_index:4,int_val:7},gn:{root_index:4,int_val:7},"g#":{root_index:4,int_val:8},"g##":{root_index:4,int_val:9},gb:{root_index:4,int_val:6},gbb:{root_index:4,int_val:5},a:{root_index:5,int_val:9},an:{root_index:5,int_val:9},"a#":{root_index:5,int_val:10},"a##":{root_index:5,int_val:11},ab:{root_index:5,int_val:8},abb:{root_index:5,int_val:7},b:{root_index:6,int_val:11},bn:{root_index:6,int_val:11},"b#":{root_index:6,int_val:0},"b##":{root_index:6,int_val:1},bb:{root_index:6,int_val:10},bbb:{root_index:6,int_val:9}}}isValidNoteValue(t){return t>=0&&t=0&&t3)throw new b("BadArguments","Invalid note name: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|bb|n|#|##)?$/.exec(e);if(null!==i){return{root:i[1],accidental:i[2]}}throw new b("BadArguments","Invalid note name: "+t)}getKeyParts(t){if(!t||t.length<1)throw new b("BadArguments","Invalid key: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|#)?(mel|harm|m|M)?$/.exec(e);if(null!==i){const t=i[1],e=i[2];let s=i[3];return s||(s="M"),{root:t,accidental:e,type:s}}throw new b("BadArguments",`Invalid key: ${t}`)}getNoteValue(t){const e=et.noteValues[t];if(void 0===e)throw new b("BadArguments",`Invalid note name: ${t}`);return e.int_val}getIntervalValue(t){const e=et.intervals[t];if(void 0===e)throw new b("BadArguments",`Invalid interval name: ${t}`);return e}getCanonicalNoteName(t){if(!this.isValidNoteValue(t))throw new b("BadArguments",`Invalid note value: ${t}`);return et.canonical_notes[t]}getCanonicalIntervalName(t){if(!this.isValidIntervalValue(t))throw new b("BadArguments",`Invalid interval value: ${t}`);return et.diatonic_intervals[t]}getRelativeNoteValue(t,e,i=1){if(1!==i&&-1!==i)throw new b("BadArguments",`Invalid direction: ${i}`);let s=(t+i*e)%et.NUM_TONES;return s<0&&(s+=et.NUM_TONES),s}getRelativeNoteName(t,e){const i=this.getNoteParts(t),s=this.getNoteValue(i.root);let n=e-s;if(Math.abs(n)>et.NUM_TONES-3){let i=1;n>0&&(i=-1);const a=(e+1+(s+1))%et.NUM_TONES*i;if(Math.abs(a)>2)throw new b("BadArguments",`Notes not related: ${t}, ${e})`);n=a}if(Math.abs(n)>2)throw new b("BadArguments",`Notes not related: ${t}, ${e})`);let a=i.root;if(n>0)for(let t=1;t<=n;++t)a+="#";else if(n<0)for(let t=-1;t>=n;--t)a+="b";return a}getScaleTones(t,e){const i=[t];let s=t;for(let n=0;ne.line-t.line));const c=[];let d=0;for(let t=0;tc[i+t],a=t=>t.map(n),o=(t,e)=>{const[i,s]=a([t,e]).map((t=>t.line));return i-s},r=(...t)=>t.map(a).every((([t,e])=>!this.checkCollision(t,e))),h=s-i+1;let l,d,g=this.checkCollision(c[i],c[s])?"a":"b";switch(h){case 3:"a"===g&&.5===o(1,2)&&.5!==o(0,1)&&(g="second_on_bottom");break;case 4:r([0,2],[1,3])&&(g="spaced_out_tetrachord");break;case 5:"b"===g&&r([1,3])&&(g="spaced_out_pentachord",r([0,2],[2,4])&&(g="very_spaced_out_pentachord"));break;case 6:r([0,3],[1,4],[2,5])&&(g="spaced_out_hexachord"),r([0,2],[2,4],[1,3],[3,5])&&(g="very_spaced_out_hexachord")}if(h>=7){let e=2,i=!0;for(;!0===i;){i=!1;for(let t=0;t+ed?m:d}else for(l=t;l<=s;l++)d=V.accidentalColumnsTable[h][g][l-t],c[l].column=d,m=m>d?m:d;t=s}const g=[],_=[];for(let t=0;t<=m;t++)g[t]=0,_[t]=0;g[0]=n+d,_[0]=n,c.forEach((t=>{t.width>g[t.column]&&(g[t.column]=t.width)}));for(let t=1;t{let e=0;const i=b+t.numAcc;for(;b0?(s=e.flatLine||e.dblSharpLine?2.5:3,t.dblSharpLine&&(i-=.5)):(s=t.flatLine||t.dblSharpLine?2.5:3,e.dblSharpLine&&(i-=.5));const n=Math.abs(i){const e=new E(0,1);t.getTickables().forEach((t=>{if(t.shouldIgnoreTicks())return;const n=s[e.value()];n?n.push(t):(i.push(e.value()),s[e.value()]=[t]),e.add(t.getTicks())}))}));const a=new et;e||(e="C");const o=a.createScaleMap(e),r={};i.forEach((t=>{const e=s[t],i=[],h=t=>{if(!m(t)||t.isRest()||t.shouldIgnoreTicks())return;const e=t;e.keys.forEach(((t,s)=>{const h=a.getNoteParts(t.split("/")[0]),l=t.split("/")[1],c=h.accidental||"n",d=h.root+c;r[h.root+l]||(r[h.root+l]=o[h.root]);const m=r[h.root+l]===d,g=i.indexOf(t)>-1;if(e.getModifiers().forEach(((t,i)=>{n(t)&&t.type==c&&t.getIndex()==s&&e.getModifiers().splice(i,1)})),!m||m&&g){r[h.root+l]=d;const n=new st(c);e.addModifier(n,s),i.push(t)}})),e.getModifiers().forEach((t=>{l(t)&&t.getGraceNotes().forEach(h)}))};e.forEach(h)}))}constructor(t){super(),it("New accidental: ",t),this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE,parenLeftPadding:2,parenRightPadding:2},this.accidental=V.accidentalCodes(this.type),p(this.accidental,"ArgumentError",`Unknown accidental type: ${t}`),this.cautionary=!1,this.reset()}reset(){const t=this.render_options.font_scale;this.glyph=new Z(this.accidental.code,t),this.glyph.setOriginX(1),this.cautionary&&(this.parenLeft=new Z(V.accidentalCodes("{").code,t),this.parenRight=new Z(V.accidentalCodes("}").code,t),this.parenLeft.setOriginX(1),this.parenRight.setOriginX(1))}getWidth(){if(this.cautionary){const t=p(this.parenLeft),e=p(this.parenRight),i=t.getMetrics().width+e.getMetrics().width+this.render_options.parenLeftPadding+this.render_options.parenRightPadding;return this.glyph.getMetrics().width+i}return this.glyph.getMetrics().width}setNote(t){return p(t,"ArgumentError",`Bad note value: ${t}`),this.note=t,h(t)&&(this.render_options.font_scale=25,this.reset()),this}setAsCautionary(){return this.cautionary=!0,this.render_options.font_scale=28,this.reset(),this}draw(){const{type:t,position:e,index:i,cautionary:s,x_shift:n,y_shift:a,glyph:o,render_options:{parenLeftPadding:r,parenRightPadding:h}}=this,l=this.checkContext(),c=this.checkAttachedNote();this.setRendered();const d=c.getModifierStartXY(e,i);let m=d.x+n;const g=d.y+a;if(it("Rendering: ",t,m,g),s){const t=p(this.parenLeft),e=p(this.parenRight);e.render(l,m,g),m-=e.getMetrics().width,m-=h,m-=this.accidental.parenRightPaddingAdjustment,o.render(l,m,g),m-=o.getMetrics().width,m-=r,t.render(l,m,g)}else o.render(l,m,g)}}st.DEBUG=!1;class nt extends L{static get CATEGORY(){return x.Stem}static get UP(){return 1}static get DOWN(){return-1}static get WIDTH(){return V.STEM_WIDTH}static get HEIGHT(){return V.STEM_HEIGHT}constructor(t){super(),this.stem_up_y_offset=0,this.stem_down_y_offset=0,this.stem_up_y_base_offset=0,this.stem_down_y_base_offset=0,this.x_begin=(null==t?void 0:t.x_begin)||0,this.x_end=(null==t?void 0:t.x_end)||0,this.y_top=(null==t?void 0:t.y_top)||0,this.y_bottom=(null==t?void 0:t.y_bottom)||0,this.stem_extension=(null==t?void 0:t.stem_extension)||0,this.stem_direction=(null==t?void 0:t.stem_direction)||0,this.hide=(null==t?void 0:t.hide)||!1,this.isStemlet=(null==t?void 0:t.isStemlet)||!1,this.stemletHeight=(null==t?void 0:t.stemletHeight)||0,this.renderHeightAdjustment=0,this.setOptions(t)}setOptions(t){this.stem_up_y_offset=(null==t?void 0:t.stem_up_y_offset)||0,this.stem_down_y_offset=(null==t?void 0:t.stem_down_y_offset)||0,this.stem_up_y_base_offset=(null==t?void 0:t.stem_up_y_base_offset)||0,this.stem_down_y_base_offset=(null==t?void 0:t.stem_down_y_base_offset)||0}setNoteHeadXBounds(t,e){return this.x_begin=t,this.x_end=e,this}setDirection(t){this.stem_direction=t}setExtension(t){this.stem_extension=t}getExtension(){return this.stem_extension}setYBounds(t,e){this.y_top=t,this.y_bottom=e}getHeight(){const t=this.stem_direction===nt.UP?this.stem_up_y_offset:this.stem_down_y_offset;return(this.y_bottom-this.y_top+(nt.HEIGHT-t+this.stem_extension))*this.stem_direction}getBoundingBox(){throw new b("NotImplemented","getBoundingBox() not implemented.")}getExtents(){const t=this.stem_direction===nt.UP,e=[this.y_top,this.y_bottom],i=nt.HEIGHT+this.stem_extension,s=(t?Math.min:Math.max)(...e),n=(t?Math.max:Math.min)(...e);return{topY:s+i*-this.stem_direction,baseY:n}}setVisibility(t){return this.hide=!t,this}setStemlet(t,e){return this.isStemlet=t,this.stemletHeight=e,this}adjustHeightForFlag(){this.renderHeightAdjustment=V.currentMusicFont().lookupMetric("stem.heightAdjustmentForFlag",-3)}adjustHeightForBeam(){this.renderHeightAdjustment=-nt.WIDTH/2}draw(){if(this.setRendered(),this.hide)return;const t=this.checkContext();let e,i;const s=this.stem_direction;let n=0;s===nt.DOWN?(e=this.x_begin,i=this.y_top+this.stem_down_y_offset,n=this.stem_down_y_base_offset):(e=this.x_end,i=this.y_bottom-this.stem_up_y_offset,n=this.stem_up_y_base_offset);const a=this.getHeight();!function(...t){nt.DEBUG&&f("Vex.Flow.Stem",t)}("Rendering stem - ","Top Y: ",this.y_top,"Bottom Y: ",this.y_bottom);const o=this.isStemlet?a-this.stemletHeight*this.stem_direction:0;t.save(),this.applyStyle(),t.openGroup("stem",this.getAttribute("id"),{pointerBBox:!0}),t.beginPath(),t.setLineWidth(nt.WIDTH),t.moveTo(e,i-o+n),t.lineTo(e,i-a-this.renderHeightAdjustment*s),t.stroke(),t.closeGroup(),this.restoreStyle(),t.restore()}}function at(...t){lt.DEBUG&&f("Vex.Flow.TextFormatter",t)}nt.DEBUG=!1;const ot={},rt={},ht={};class lt{static getFontFamilies(){const t=[];for(const e in ht){const i=ht[e];t.push(Object.assign({},i))}return t}static create(t={}){at("create: ",t),t.family||(t.family=F.SANS_SERIF);const e=[],i=t.family.split(/\s*,\s*/);for(const t of i){for(const i in ht)i.startsWith(t)&&e.push(ht[i]);if(e.length>0)break}let s;if(0===e.length)s=new lt(Object.values(ht)[0]);else if(1===e.length)s=new lt(e[0]);else{const i=F.isBold(t.weight),n=F.isItalic(t.style),a=e.find((t=>t.bold===i&&t.italic===n));if(a)s=new lt(a);else{const t=e.find((t=>t.italic===n||t.bold===i));s=new lt(t||e[0])}}const n=t.size;if(void 0!==n){const t=F.convertSizeToPointValue(n);s.setFontSize(t)}return s}static getInfo(t){return ht[t]}static registerInfo(t,e=!1){at("registerInfo: ",t,e);const i=t.family;(void 0===ht[i]||e)&&(ht[i]=t)}constructor(t){this.family="",this.size=14,this.resolution=1e3,this.glyphs={},this.serifs=!1,this.monospaced=!1,this.italic=!1,this.bold=!1,this.superscriptOffset=0,this.subscriptOffset=0,this.maxSizeGlyph="@",this.cacheKey="",this.updateParams(t)}get localHeightCache(){var t;return void 0===rt[this.cacheKey]&&(rt[this.cacheKey]={}),null!==(t=rt[this.cacheKey])&&void 0!==t?t:{}}updateParams(t){t.family&&(this.family=t.family),t.resolution&&(this.resolution=t.resolution),t.glyphs&&(this.glyphs=t.glyphs),t.serifs&&(this.serifs=t.serifs),t.monospaced&&(this.monospaced=t.monospaced),t.italic&&(this.italic=t.italic),t.bold&&(this.bold=t.bold),t.maxSizeGlyph&&(this.maxSizeGlyph=t.maxSizeGlyph),t.superscriptOffset&&(this.superscriptOffset=t.superscriptOffset),t.subscriptOffset&&(this.subscriptOffset=t.subscriptOffset),this.updateCacheKey()}updateCacheKey(){const t=this.family.replace(/\s+/g,"_"),e=this.size,i=this.bold?N.BOLD:N.NORMAL,s=this.italic?A.ITALIC:A.NORMAL;this.cacheKey=`${t}%${e}%${i}%${s}`}getGlyphMetrics(t){return this.glyphs[t]?this.glyphs[t]:this.glyphs[this.maxSizeGlyph]}get maxHeight(){return this.getGlyphMetrics(this.maxSizeGlyph).ha/this.resolution*this.fontSizeInPixels}getWidthForCharacterInEm(t){var e;const i=this.getGlyphMetrics(t);if(i){return(null!==(e=i.advanceWidth)&&void 0!==e?e:0)/this.resolution}return.65}getYForCharacterInPx(t){const e=this.getGlyphMetrics(t),i={yMin:0,yMax:this.maxHeight,height:this.maxHeight};return e?("number"==typeof e.y_min&&(i.yMin=e.y_min/this.resolution*this.fontSizeInPixels),"number"==typeof e.y_max&&(i.yMax=e.y_max/this.resolution*this.fontSizeInPixels),i.height=i.yMax-i.yMin,i):i}getYForStringInPx(t){const e=this.localHeightCache,i={yMin:0,yMax:this.maxHeight,height:this.maxHeight},s=e[t];if(void 0!==s)return s;for(let e=0;et>e?t:e)),h+=(this.text_line+1)*V.STAVE_LINE_DISTANCE+o,d&&i===nt.DOWN&&(h=Math.max(h,l.topY+o+c*this.text_line))}else if(this.verticalJustification===dt.CENTER){const t=e.getYForTopText(this.text_line)-1;h=t+(m.getYForBottomText(this.text_line)-t)/2+o/2}else if(this.verticalJustification===dt.TOP){h=Math.min(...e.getYs())-(this.text_line+1)*V.STAVE_LINE_DISTANCE,d&&i===nt.UP&&(c=l.topY=1}function ut(t,e){return bt(t,e)?e===gt?Math.ceil:Math.floor:Math.round}const pt=t=>m(t)||h(t);class ft extends tt{static get CATEGORY(){return x.Articulation}static format(t,e){if(!t||0===t.length)return!1;let i=0;const s=(t,e,i)=>xt(ut(e,i),p(t.glyph.getMetrics().height)/10+.5);t.forEach((t=>{const n=t.checkAttachedNote();i=Math.max(n.getGlyphProps().getWidth(),i);let a=5;const o=n.hasStem()?n.getStemDirection():nt.UP;let r=0;if(g(n)){const t=n.getStem();t&&(r=Math.abs(t.getHeight())/V.STAVE_LINE_DISTANCE)}const h=n.getStave();if(h&&(a=h.getNumLines()),t.getPosition()===gt){let i=n.getLineNumber(!0);o===nt.UP&&(i+=r);let h=s(t,e.top_text_line,gt);const l=i+e.top_text_line+.5;!t.articulation.between_lines&&lt.getWidth())).reduce(((t,e)=>Math.max(e,t))),a=Math.min(Math.max(n-i,0),Math.max(n-(e.left_shift+e.right_shift),0));return e.left_shift+=a/2,e.right_shift+=a/2,!0}static easyScoreHook({articulations:t},e,i){if(!t)return;const s={staccato:"a.",tenuto:"a-",accent:"a>"};t.split(",").map((t=>t.trim().split("."))).map((([t,e])=>{const n={type:s[t]};return e&&(n.position=tt.PositionString[e]),i.getFactory().Articulation(n)})).map((t=>e.addModifier(t,0)))}constructor(t){super(),this.type=t,this.position=gt,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.reset()}reset(){this.articulation=V.articulationCodes(this.type),this.articulation||(this.articulation={code:this.type,between_lines:!1},this.type.endsWith("Above")&&(this.position=gt),this.type.endsWith("Below")&&(this.position=_t));const t=(this.position===gt?this.articulation.aboveCode:this.articulation.belowCode)||this.articulation.code;this.glyph=new Z(null!=t?t:"",this.render_options.font_scale),p(this.glyph,"ArgumentError",`Articulation not found: ${this.type}`),this.setWidth(p(this.glyph.getMetrics().width))}setBetweenLines(t=!0){return this.articulation.between_lines=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=this.checkIndex(),{position:s,glyph:n,text_line:a}=this,o=this.articulation.between_lines,r=e.checkStave(),h=r.getSpacingBetweenLines(),l=_(e),{x:c}=e.getModifierStartXY(s,i),d=!o||l,m=function(t,e){const i=e===gt&&t.getStemDirection()===nt.UP||e===_t&&t.getStemDirection()===nt.DOWN;return pt(t)?t.hasStem()&&i?.5:1:t.hasStem()&&i?1:0}(e,s),g=V.currentMusicFont().lookupMetric(`articulation.${n.getCode()}.padding`,0);let x={[gt]:()=>{n.setOrigin(.5,1);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(pt(t))return t.hasStem()?i===nt.UP?s:n:Math.min(...t.getYs());if(_(t))return t.hasStem()&&i===nt.UP?s:t.checkStave().getYForTopText(e);throw new b("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)-(a+m)*h;return d?Math.min(r.getYForTopText(ft.INITIAL_OFFSET),t):t},[_t]:()=>{n.setOrigin(.5,0);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(pt(t))return t.hasStem()?i===nt.UP?n:s:Math.max(...t.getYs());if(_(t))return t.hasStem()?i===nt.UP?t.checkStave().getYForBottomText(e):s:t.checkStave().getYForBottomText(e);throw new b("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)+(a+m)*h;return d?Math.max(r.getYForBottomText(ft.INITIAL_OFFSET),t):t}}[s]();if(!l){const t=s===gt?-1:1,a=e.getKeyProps()[i].line,r=(e.getYs()[i]-x)/h+Number(a),l=function(t,e,i,s){const n=xt(ut(e,i),e);if(t&&bt(n,i)&&n%1==0)return n+.5*-s;return n}(o,r,s,t);bt(l,s)&&n.setOrigin(.5,.5),x+=Math.abs(l-r)*h*t+g*t}!function(...t){ft.DEBUG&&f("Vex.Flow.Articulation",t)}(`Rendering articulation at (x: ${c}, y: ${x})`),n.render(t,c,x)}}ft.DEBUG=!1,ft.INITIAL_OFFSET=-.5;class yt{static get CATEGORY(){return x.RenderContext}set font(t){this.setFont(t)}get font(){return this.getFont()}setRawFont(t){return this.setFont(t),this}}function St(t,e,i,s="#F55"){t.save(),t.setFillStyle(s),t.beginPath(),t.arc(e,i,3,0,2*Math.PI,!1),t.closePath(),t.fill(),t.restore()}class Tt extends L{static get CATEGORY(){return x.Tickable}constructor(){super(),this._preFormatted=!1,this._postFormatted=!1,this.ticks=new E(0,1),this.intrinsicTicks=0,this.tickMultiplier=new E(1,1),this.width=0,this.x_shift=0,this.modifiers=[],this.tupletStack=[],this.align_center=!1,this.center_x_shift=0,this.ignore_ticks=!1,this.formatterMetrics={freedom:{left:0,right:0},duration:"",iterations:0,space:{used:0,mean:0,deviation:0}}}reset(){return this}getTicks(){return this.ticks}shouldIgnoreTicks(){return this.ignore_ticks}setIgnoreTicks(t){return this.ignore_ticks=t,this}setWidth(t){this.width=t}getWidth(){if(!this._preFormatted)throw new b("UnformattedNote","Can't call GetWidth on an unformatted note.");return this.width+(this.modifierContext?this.modifierContext.getWidth():0)}setXShift(t){return this.x_shift=t,this}getXShift(){return this.x_shift}getX(){return this.checkTickContext("Can't getX() without a TickContext.").getX()+this.x_shift}getFormatterMetrics(){return this.formatterMetrics}getCenterXShift(){return this.isCenterAligned()?this.center_x_shift:0}setCenterXShift(t){return this.center_x_shift=t,this}isCenterAligned(){return this.align_center}setCenterAlignment(t){return this.align_center=t,this}getVoice(){return p(this.voice,"NoVoice","Tickable has no voice.")}setVoice(t){this.voice=t}getTuplet(){return this.tuplet}getTupletStack(){return this.tupletStack}resetTuplet(t){let e,i;if(t){const s=this.tupletStack.indexOf(t);return-1!==s&&(this.tupletStack.splice(s,1),e=t.getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i)),this}for(;this.tupletStack.length;)e=(t=this.tupletStack.pop()).getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i);return this}setTuplet(t){if(t){this.tupletStack.push(t);const e=t.getNoteCount(),i=t.getNotesOccupied();this.applyTickMultiplier(i,e)}return this.tuplet=t,this}addToModifierContext(t){this.modifierContext=t;for(let t=0;t0){const s=_.space.deviation,n=s>=0?"+":"";t.setFillStyle("red"),t.fillText(n+Math.round(s),o+e.getXShift(),i-10)}t.restore()}static parseDuration(t){if(!t)return;const e=/(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/.exec(t);if(!e)return;return{duration:e[1],dots:e[2].length,type:e[3]||"n"}}static parseNoteStruct(t){const e=vt.parseDuration(t.duration);if(!e)return;let i=t.type;if(i&&!V.validTypes[i])return;const s=[];i||(i=e.type||"n",void 0!==t.keys&&t.keys.forEach(((t,e)=>{const n=t.split("/");s[e]=n&&3===n.length?n[2]:i})));let n=V.durationToTicks(e.duration);if(!n)return;const a=t.dots?t.dots:e.dots;if("number"!=typeof a)return;let o=n;for(let t=0;tV.getGlyphProps(this.duration,t))),this.playNote=void 0,this.ignore_ticks=!1,this.width=0,this.leftDisplacedHeadPx=0,this.rightDisplacedHeadPx=0,this.x_shift=0,this.ys=[],t.align_center&&this.setCenterAlignment(t.align_center),this.render_options={annotation_spacing:5,glyph_font_scale:1,stroke_px:1,scale:1,font:"",y_shift:0}}getPlayNote(){return this.playNote}setPlayNote(t){return this.playNote=t,this}isRest(){return!1}addStroke(t,e){return e.setNote(this),e.setIndex(t),this.modifiers.push(e),this.preFormatted=!1,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this.setYs([t.getYForLine(0)]),this.setContext(this.stave.getContext()),this}getLeftDisplacedHeadPx(){return this.leftDisplacedHeadPx}getRightDisplacedHeadPx(){return this.rightDisplacedHeadPx}setLeftDisplacedHeadPx(t){return this.leftDisplacedHeadPx=t,this}setRightDisplacedHeadPx(t){return this.rightDisplacedHeadPx=t,this}shouldIgnoreTicks(){return this.ignore_ticks}getLineNumber(t){return 0}getLineForRest(){return 0}getGlyph(){return this.glyphProps}getGlyphProps(){return this.glyphProps}getGlyphWidth(){return this.glyphProps.getWidth(this.render_options.glyph_font_scale)}setYs(t){return this.ys=t,this}getYs(){if(0===this.ys.length)throw new b("NoYValues","No Y-values calculated for this note.");return this.ys}getYForTopText(t){return this.checkStave().getYForTopText(t)}getVoice(){if(!this.voice)throw new b("NoVoice","Note has no voice.");return this.voice}setVoice(t){return this.voice=t,this.preFormatted=!1,this}getTickContext(){return this.checkTickContext()}setTickContext(t){return this.tickContext=t,this.preFormatted=!1,this}getDuration(){return this.duration}isDotted(){return this.getModifiersByType(x.Dot).length>0}hasStem(){return!1}getNoteType(){return this.noteType}getBeam(){return this.beam}checkBeam(){return p(this.beam,"NoBeam","No beam attached to instance")}hasBeam(){return null!=this.beam}setBeam(t){return this.beam=t,this}addModifier(t,e=0){const i="Note.addModifier(modifier: Modifier, index: number=0)";if("string"==typeof e&&(e=parseInt(e),console.warn(i+" expected a number for `index`, but received a string.")),"object"!=typeof t||"number"!=typeof e)throw new b("WrongParams","Incorrect call signature. Use "+i+" instead.");return t.setNote(this),t.setIndex(e),super.addModifier(t),this}getModifiersByType(t){return this.modifiers.filter((e=>e.getCategory()===t))}getModifierStartXY(t,e,i){if(!this.preFormatted)throw new b("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");return{x:this.getAbsoluteX(),y:this.ys[0]}}getRightParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getRightDisplacedHeadPx():0}getLeftParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getLeftDisplacedHeadPx()-this.x_shift:-this.x_shift}getFirstDotPx(){let t=this.getRightDisplacedHeadPx();return 0!==this.checkModifierContext().getMembers("Parenthesis").length&&(t+=V.currentMusicFont().lookupMetric("parenthesis.default.width")),t}getMetrics(){if(!this.preFormatted)throw new b("UnformattedNote","Can't call getMetrics on an unformatted note.");const t=this.modifierContext?this.modifierContext.getState().left_shift:0,e=this.modifierContext?this.modifierContext.getState().right_shift:0,i=this.getWidth();return{width:i,glyphWidth:this.getGlyphWidth(),notePx:i-t-e-this.leftDisplacedHeadPx-this.rightDisplacedHeadPx,modLeftPx:t,modRightPx:e,leftDisplacedHeadPx:this.leftDisplacedHeadPx,rightDisplacedHeadPx:this.rightDisplacedHeadPx,glyphPx:0}}getAbsoluteX(){let t=this.checkTickContext("Can't getAbsoluteX() without a TickContext.").getX();return this.stave&&(t+=this.stave.getNoteStartX()+V.currentMusicFont().lookupMetric("stave.padding")),this.isCenterAligned()&&(t+=this.getCenterXShift()),t}static getPoint(t){return"default"==t?V.NOTATION_FONT_SCALE:V.NOTATION_FONT_SCALE/5*3}getStemDirection(){throw new b("NoStem","No stem attached to this note.")}getStemExtents(){throw new b("NoStem","No stem attached to this note.")}getTieRightX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t+=-this.width/2+this.width+2,t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t-=this.width/2+2,t}getKeys(){return this.keys}getKeyProps(){return this.keyProps}}var wt,Et,Bt,Ct,Pt,Nt;!function(t){t[t.CENTER=0]="CENTER",t[t.LEFT=1]="LEFT",t[t.RIGHT=2]="RIGHT",t[t.ABOVE=3]="ABOVE",t[t.BELOW=4]="BELOW",t[t.BEGIN=5]="BEGIN",t[t.END=6]="END"}(wt||(wt={}));class At extends L{static get CATEGORY(){return x.StaveModifier}static get Position(){return wt}constructor(){super(),this.width=0,this.x=0,this.padding=10,this.position=wt.ABOVE}getPosition(){return this.position}setPosition(t){return this.position=t,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this}getWidth(){return this.width}setWidth(t){return this.width=t,this}getX(){return this.x}setX(t){return this.x=t,this}placeGlyphOnLine(t,e,i,s=0){t.setYShift(e.getYForLine(null!=i?i:0)-e.getYForGlyphs()+s)}getPadding(t){return void 0!==t&&t<2?0:this.padding}setPadding(t){return this.padding=t,this}setLayoutMetrics(t){return this.layoutMetrics=t,this}getLayoutMetrics(){return this.layoutMetrics}draw(...t){}}!function(t){t[t.SINGLE=1]="SINGLE",t[t.DOUBLE=2]="DOUBLE",t[t.END=3]="END",t[t.REPEAT_BEGIN=4]="REPEAT_BEGIN",t[t.REPEAT_END=5]="REPEAT_END",t[t.REPEAT_BOTH=6]="REPEAT_BOTH",t[t.NONE=7]="NONE"}(Et||(Et={}));class kt extends At{static get CATEGORY(){return x.Barline}static get type(){return Et}static get typeString(){return{single:Et.SINGLE,double:Et.DOUBLE,end:Et.END,repeatBegin:Et.REPEAT_BEGIN,repeatEnd:Et.REPEAT_END,repeatBoth:Et.REPEAT_BOTH,none:Et.NONE}}constructor(t){super(),this.thickness=V.STAVE_LINE_THICKNESS;const e=Et;this.widths={},this.widths[e.SINGLE]=5,this.widths[e.DOUBLE]=5,this.widths[e.END]=5,this.widths[e.REPEAT_BEGIN]=5,this.widths[e.REPEAT_END]=5,this.widths[e.REPEAT_BOTH]=5,this.widths[e.NONE]=5,this.paddings={},this.paddings[e.SINGLE]=0,this.paddings[e.DOUBLE]=0,this.paddings[e.END]=0,this.paddings[e.REPEAT_BEGIN]=15,this.paddings[e.REPEAT_END]=15,this.paddings[e.REPEAT_BOTH]=15,this.paddings[e.NONE]=0,this.layoutMetricsMap={},this.layoutMetricsMap[e.SINGLE]={xMin:0,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.DOUBLE]={xMin:-3,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.END]={xMin:-5,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_END]={xMin:-10,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BEGIN]={xMin:-2,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BOTH]={xMin:-10,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.NONE]={xMin:0,xMax:0,paddingLeft:5,paddingRight:5},this.setPosition(wt.BEGIN),this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?kt.typeString[t]:t,this.setWidth(this.widths[this.type]),this.setPadding(this.paddings[this.type]),this.setLayoutMetrics(this.layoutMetricsMap[this.type]),this}draw(t){const e=t.checkContext();switch(this.setRendered(),this.applyStyle(e),e.openGroup("stavebarline",this.getAttribute("id")),this.type){case Et.SINGLE:this.drawVerticalBar(t,this.x,!1);break;case Et.DOUBLE:this.drawVerticalBar(t,this.x,!0);break;case Et.END:this.drawVerticalEndBar(t,this.x);break;case Et.REPEAT_BEGIN:this.drawRepeatBar(t,this.x,!0),t.getX()!==this.x&&this.drawVerticalBar(t,t.getX());break;case Et.REPEAT_END:this.drawRepeatBar(t,this.x,!1);break;case Et.REPEAT_BOTH:this.drawRepeatBar(t,this.x,!1),this.drawRepeatBar(t,this.x,!0)}e.closeGroup(),this.restoreStyle(e)}drawVerticalBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();i&&s.fillRect(e-3,n,1,a-n),s.fillRect(e,n,1,a-n)}drawVerticalEndBar(t,e){const i=t.checkContext(),s=t.getTopLineTopY(),n=t.getBottomLineBottomY();i.fillRect(e-5,s,1,n-s),i.fillRect(e-2,s,3,n-s)}drawRepeatBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();let o=3;i||(o=-5),s.fillRect(e+o,n,1,a-n),s.fillRect(e-2,n,3,a-n);i?o+=4:o-=4;const r=e+o+1;let h=(t.getNumLines()-1)*t.getSpacingBetweenLines();h=h/2-t.getSpacingBetweenLines()/2;let l=n+h+1;s.beginPath(),s.arc(r,l,2,0,2*Math.PI,!1),s.fill(),l+=t.getSpacingBetweenLines(),s.beginPath(),s.arc(r,l,2,0,2*Math.PI,!1),s.fill()}}class Dt extends vt{static get CATEGORY(){return x.BarNote}constructor(t=Et.SINGLE){super({duration:"b"}),this.metrics={widths:{}};const e=Et;this.metrics.widths={[e.SINGLE]:8,[e.DOUBLE]:12,[e.END]:15,[e.REPEAT_BEGIN]:14,[e.REPEAT_END]:14,[e.REPEAT_BOTH]:18,[e.NONE]:0},this.ignore_ticks=!0,this.setType(t),this.barline=new kt(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?kt.typeString[t]:t,this.setWidth(this.metrics.widths[this.type]),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkContext();!function(...t){Dt.DEBUG&&f("Vex.Flow.BarNote",t)}("Rendering bar line at: ",this.getAbsoluteX()),this.applyStyle(t),t.openGroup("barnote",this.getAttribute("id")),this.barline.setType(this.type),this.barline.setX(this.getAbsoluteX()),this.barline.draw(this.checkStave()),t.closeGroup(),this.restoreStyle(t),this.setRendered()}}Dt.DEBUG=!1;class Mt extends tt{static get CATEGORY(){return x.Bend}static get UP(){return 0}static get DOWN(){return 1}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let s=0;st{const a=t+s,o=i;e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,i),e.quadraticCurveTo(a,o,t+s,n),e.stroke(),e.restore()},c=(t,i,s,n)=>{e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,n),e.quadraticCurveTo(t+s,n,t+s,i),e.stroke(),e.restore()},d=(t,i,s)=>{const n=i+4*s;e.beginPath(),e.moveTo(t,i),e.lineTo(t-4,n),e.lineTo(t+4,n),e.closePath(),e.fill()},m=(t,i)=>{e.save(),e.setFont(this.textFont);const s=t-e.measureText(i).width/2;e.fillText(i,s,h),e.restore()};let g,_=0,x=0;if(null===(t=this.tap)||void 0===t?void 0:t.length){m(i.getModifierStartXY(tt.Position.CENTER,this.index).x,this.tap)}for(let t=0;t0){const e=l.symbolBlocks[t-1];Ot.isSuperscript(e)||(n=s)}a&&n>0&&(b=!0,e.xShift=e.xShift+(n-s),s=n,n=0,l.setEnableKerning(!1)),i||a||(n=0),e.vAlign=b,s+=e.width,_=s}if(l.updateKerningAdjustments(),l.updateOverBarAdjustments(),l.getVertical()===Ct.TOP?(l.setTextLine(e.top_text_line),e.top_text_line+=x):(l.setTextLine(e.text_line+1),e.text_line+=x+1),l.getReportWidth()&&g(m)){const t=m.getGlyphProps().getWidth();l.getHorizontal()===Bt.LEFT?(r=Math.max(t,r),a=Math.max(a,_)+Ot.minPadding):l.getHorizontal()===Bt.RIGHT?(h=Math.max(t,h),o=Math.max(o,_)):(a=Math.max(a,_/2)+Ot.minPadding,o=Math.max(o,_/2),r=Math.max(t/2,r),h=Math.max(t/2,h))}s=0}const l=Math.min(Math.max(o-h,0),Math.max(o-e.right_shift,0)),c=Math.min(Math.max(a-r,0),Math.max(a-e.left_shift,0));return e.left_shift+=c,e.right_shift+=l,!0}constructor(){super(),this.symbolBlocks=[],this.horizontal=Bt.LEFT,this.vertical=Ct.TOP,this.useKerning=!0,this.reportWidth=!0,this.resetFont()}static get TEXT_FONT(){let t="Roboto Slab, Times, serif";return"Petaluma"===V.currentMusicFont().getName()&&(t="PetalumaScript, Arial, sans-serif"),{family:t,size:12,weight:N.NORMAL,style:A.NORMAL}}get superscriptOffset(){return Ot.superscriptOffset*this.textFormatter.fontSizeInPixels}get subscriptOffset(){return Ot.subscriptOffset*this.textFormatter.fontSizeInPixels}setReportWidth(t){return this.reportWidth=t,this}getReportWidth(){return this.reportWidth}updateOverBarAdjustments(){const t=this.symbolBlocks.findIndex((({symbolType:t,glyph:e})=>t===Pt.GLYPH&&void 0!==e&&"csymDiagonalArrangementSlash"===e.code));if(t<0)return;const e=this.symbolBlocks[t].width/4,i=.25*this.textFormatter.fontSizeInPixels;let s=0;for(;s0?this.symbolBlocks[t-1]:void 0;let s=0;e.symbolType===Pt.GLYPH&&void 0!==e.glyph&&e.glyph.code===Ot.glyphs.over.code&&(s+=e.glyph.metrics.x_shift),void 0!==i&&i.symbolType===Pt.GLYPH&&void 0!==i.glyph&&i.glyph.code===Ot.glyphs.over.code&&(s+=i.glyph.metrics.x_shift);let n=!1,a=!1;void 0!==i&&i.symbolType===Pt.TEXT&&(n=Ot.upperKerningText.some((t=>t===i.text[i.text.length-1])),a=Ot.lowerKerningText.some((t=>t===i.text[i.text.length-1])));const o=Ot.kerningOffset*this.textFormatter.fontSizeInPixels;return n&&e.symbolModifier===Nt.SUPERSCRIPT&&(s+=o),a&&e.symbolType===Pt.TEXT&&(e.text[0]>="a"&&e.text[0]<="z"&&(s+=o/2),Ot.upperKerningText.some((t=>t===(null==i?void 0:i.text[i.text.length-1])))&&(s+=o/2)),s}getSymbolBlock(t={}){var e,i,s;const n=null!==(e=t.symbolType)&&void 0!==e?e:Pt.TEXT,a={text:null!==(i=t.text)&&void 0!==i?i:"",symbolType:n,symbolModifier:null!==(s=t.symbolModifier)&&void 0!==s?s:Nt.NONE,xShift:0,yShift:0,vAlign:!1,width:0};if(n===Pt.GLYPH&&"string"==typeof t.glyph){const e=Ot.glyphs[t.glyph],i=20;a.glyph=new Z(e.code,i,{category:"chordSymbol"})}else n===Pt.TEXT?a.width=this.textFormatter.getWidthForTextInEm(a.text):n===Pt.LINE&&(a.width=t.width);return a}addSymbolBlock(t){return this.symbolBlocks.push(this.getSymbolBlock(t)),this}addText(t,e={}){const i=Pt.TEXT;return this.addSymbolBlock(Object.assign(Object.assign({},e),{text:t,symbolType:i}))}addTextSuperscript(t){const e=Pt.TEXT,i=Nt.SUPERSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addTextSubscript(t){const e=Pt.TEXT,i=Nt.SUBSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addGlyphSuperscript(t){const e=Pt.GLYPH,i=Nt.SUPERSCRIPT;return this.addSymbolBlock({glyph:t,symbolType:e,symbolModifier:i})}addGlyph(t,e={}){const i=Pt.GLYPH;return this.addSymbolBlock(Object.assign(Object.assign({},e),{glyph:t,symbolType:i}))}addGlyphOrText(t,e={}){let i="";for(let s=0;s0&&(this.addText(i,e),i=""),this.addGlyph(n,e)):i+=n}return i.length>0&&this.addText(i,e),this}addLine(t,e={}){const i=Pt.LINE;return this.addSymbolBlock(Object.assign(Object.assign({},e),{symbolType:i,width:t}))}setFont(t,e,i,s){return super.setFont(t,e,i,s),this.textFormatter=lt.create(this.textFont),this}setEnableKerning(t){return this.useKerning=t,this}setVertical(t){return this.vertical="string"==typeof t?Ot.VerticalJustifyString[t]:t,this}getVertical(){return this.vertical}setHorizontal(t){return this.horizontal="string"==typeof t?Ot.HorizontalJustifyString[t]:t,this}getHorizontal(){return this.horizontal}getWidth(){let t=0;return this.symbolBlocks.forEach((e=>{t+=e.vAlign?0:e.width})),t}getYOffsetForText(t){var e;let i=0,s=0;for(s=0;s0?i/n*-1:0}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),t.save(),this.applyStyle(),t.openGroup("chordsymbol",this.getAttribute("id"));const i=e.getModifierStartXY(tt.Position.ABOVE,this.index);let s;t.setFont(this.textFont);const n=e.hasStem(),a=e.checkStave();if(this.vertical===Ct.BOTTOM){if(s=a.getYForBottomText(this.text_line+V.TEXT_HEIGHT_OFFSET_HACK),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines(),n=1===e.getStemDirection()?t.baseY:t.topY;s=Math.max(s,n+i*(this.text_line+2))}}else{const t=Math.min(...e.getYs());if(s=Math.min(a.getYForTopText(this.text_line),t-10),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines();s=Math.min(s,t.topY-5-i*this.text_line)}}let o=i.x;o=this.horizontal===Bt.LEFT?i.x:this.horizontal===Bt.RIGHT?i.x+this.getWidth():this.horizontal===Bt.CENTER?i.x-this.getWidth()/2:e.getStemX()-this.getWidth()/2,Ft("Rendering ChordSymbol: ",this.textFormatter,o,s),this.symbolBlocks.forEach((e=>{const i=Ot.isSuperscript(e),n=Ot.isSubscript(e);let a=s;if(Ft("shift was ",e.xShift,e.yShift),Ft("curY pre sub ",a),i&&(a+=this.superscriptOffset),n&&(a+=this.subscriptOffset),Ft("curY sup/sub ",a),e.symbolType===Pt.TEXT){if((i||n)&&(t.save(),this.textFont)){const{family:e,size:i,weight:s,style:n}=this.textFont,a=F.scaleSize(i,Ot.superSubRatio);t.setFont(e,a,s,n)}Ft("Rendering Text: ",e.text,o+e.xShift,a+e.yShift),t.fillText(e.text,o+e.xShift,a+e.yShift),(i||n)&&t.restore()}else e.symbolType===Pt.GLYPH&&e.glyph?(a+=e.yShift,Ft("Rendering Glyph: ",e.glyph.code,o+e.xShift,a),e.glyph.render(t,o+e.xShift,a)):e.symbolType===Pt.LINE&&(Ft("Rendering Line : ",e.width,o,a),t.beginPath(),t.setLineWidth(1),t.moveTo(o,s),t.lineTo(o+e.width,a),t.stroke());o+=e.width,e.vAlign&&(o+=e.xShift)})),t.closeGroup(),this.restoreStyle(),t.restore()}}Ot.DEBUG=!1,Ot.HorizontalJustify=Bt,Ot.HorizontalJustifyString={left:Bt.LEFT,right:Bt.RIGHT,center:Bt.CENTER,centerStem:Bt.CENTER_STEM},Ot.VerticalJustify=Ct,Ot.VerticalJustifyString={top:Ct.TOP,above:Ct.TOP,below:Ct.BOTTOM,bottom:Ct.BOTTOM},Ot.glyphs={diminished:{code:"csymDiminished"},dim:{code:"csymDiminished"},halfDiminished:{code:"csymHalfDiminished"},"+":{code:"csymAugmented"},augmented:{code:"csymAugmented"},majorSeventh:{code:"csymMajorSeventh"},minor:{code:"csymMinor"},"-":{code:"csymMinor"},"(":{code:"csymParensLeftTall"},leftParen:{code:"csymParensLeftTall"},")":{code:"csymParensRightTall"},rightParen:{code:"csymParensRightTall"},leftBracket:{code:"csymBracketLeftTall"},rightBracket:{code:"csymBracketRightTall"},leftParenTall:{code:"csymParensLeftVeryTall"},rightParenTall:{code:"csymParensRightVeryTall"},"/":{code:"csymDiagonalArrangementSlash"},over:{code:"csymDiagonalArrangementSlash"},"#":{code:"accidentalSharp"},b:{code:"accidentalFlat"}},Ot.symbolTypes=Pt,Ot.symbolModifiers=Nt,Ot.noFormat=!1;class Rt extends tt{static get CATEGORY(){return x.Dot}static getDots(t){return t.getModifiersByType(Rt.CATEGORY)}static buildAndAttach(t,e){for(const i of t)if(null==e?void 0:e.all)for(let t=0;te.line-t.line));let a=i,o=0,r=null,h=null,l=null,c=0;for(let t=0;to?a:o,r=m,h=i}return e.right_shift+=o,!0}constructor(){super(),this.position=tt.Position.RIGHT,this.radius=2,this.setWidth(5),this.dot_shiftY=0}setNote(t){return this.note=t,h(t)&&(this.radius*=.5,this.setWidth(3)),this}setDotShiftY(t){return this.dot_shiftY=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.checkStave().getSpacingBetweenLines(),s=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0});_(e)&&(s.y=e.getStemExtents().baseY);const n=s.x+this.x_shift+this.width-this.radius,a=s.y+this.y_shift+this.dot_shiftY*i;t.beginPath(),t.arc(n,a,this.radius,0,2*Math.PI,!1),t.fill()}}class Lt extends tt{static get CATEGORY(){return x.FretHandFinger}static format(t,e){const{left_shift:i,right_shift:s}=e;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let h=0;he.line-t.line));let h=0,l=0,c=0,d=0,m=null,g=null;for(let t=0;tc?e:c):o===tt.Position.RIGHT&&(_.setXShift(l),e=r+p,d=e>d?e:d),m=x,g=a}return e.left_shift+=c,e.right_shift+=d,!0}static easyScoreHook({fingerings:t}={},e,i){null==t||t.split(",").map((t=>{const e=t.trim().split("."),s={number:e[0]};return e[1]&&(s.position=e[1]),i.getFactory().Fingering(s)})).map(((t,i)=>e.addModifier(t,i)))}constructor(t){super(),this.finger=t,this.width=7,this.position=tt.Position.LEFT,this.x_shift=0,this.y_shift=0,this.x_offset=0,this.y_offset=0,this.resetFont()}setFretHandFinger(t){return this.finger=t,this}getFretHandFinger(){return this.finger}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=i.x+this.x_shift+this.x_offset,n=i.y+this.y_shift+this.y_offset+5;switch(this.position){case tt.Position.ABOVE:s-=4,n-=12;break;case tt.Position.BELOW:s-=2,n+=10;break;case tt.Position.LEFT:s-=this.width;break;case tt.Position.RIGHT:s+=1;break;default:throw new b("InvalidPosition",`The position ${this.position} does not exist`)}t.save(),t.setFont(this.textFont),t.fillText(""+this.finger,s,n),t.restore()}}Lt.TEXT_FONT={family:F.SANS_SERIF,size:9,weight:N.BOLD,style:A.NORMAL};class Wt extends vt{static get CATEGORY(){return x.NoteHead}constructor(t){super(t),this.custom_glyph=!1,this.stem_up_x_offset=0,this.stem_down_x_offset=0,this.index=t.index,this.x=t.x||0,this.y=t.y||0,t.note_type&&(this.noteType=t.note_type),this.displaced=t.displaced||!1,this.stem_direction=t.stem_direction||nt.UP,this.line=t.line||0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),(this.line>5||this.line<0)&&this.glyphProps.ledger_code_head&&(this.glyphProps.code_head=this.glyphProps.ledger_code_head),this.glyph_code=this.glyphProps.code_head,this.x_shift=t.x_shift||0,t.custom_glyph_code&&(this.custom_glyph=!0,this.glyph_code=t.custom_glyph_code,this.stem_up_x_offset=t.stem_up_x_offset||0,this.stem_down_x_offset=t.stem_down_x_offset||0),this.setStyle(t.style),this.slashed=t.slashed||!1,this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE}),this.setWidth(!this.custom_glyph||this.glyph_code.startsWith("noteheadSlashed")||this.glyph_code.startsWith("noteheadCircled")?this.glyphProps.getWidth(this.render_options.glyph_font_scale):Z.getWidth(this.glyph_code,this.render_options.glyph_font_scale))}getWidth(){return this.width}isDisplaced(){return!0===this.displaced}setX(t){return this.x=t,this}getY(){return this.y}setY(t){return this.y=t,this}getLine(){return this.line}setLine(t){return this.line=t,this}getAbsoluteX(){const t=this.preFormatted?super.getAbsoluteX():this.x,e=nt.WIDTH/2,i=V.currentMusicFont(),s=i.lookupMetric("notehead.shiftX",0)*this.stem_direction,n=i.lookupMetric("noteHead.displacedShiftX",0)*this.stem_direction;return t+s+(this.displaced?(this.width-e)*this.stem_direction+n:0)}getBoundingBox(){const t=this.checkStave().getSpacingBetweenLines(),e=t/2,i=this.y-e;return new C(this.getAbsoluteX(),i,this.width,t)}setStave(t){const e=this.getLine();return this.stave=t,this.stave&&(this.setY(this.stave.getYForNote(e)),this.setContext(this.stave.getContext())),this}preFormat(){if(this.preFormatted)return this;const t=this.getWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx;return this.setWidth(t),this.preFormatted=!0,this}draw(){const t=this.checkContext();this.setRendered();let e=this.getAbsoluteX();this.custom_glyph&&(e+=this.stem_direction===nt.UP?this.stem_up_x_offset+(this.glyphProps.stem?this.glyphProps.getWidth(this.render_options.glyph_font_scale)-this.width:0):this.stem_down_x_offset);const i=this.y;!function(...t){Wt.DEBUG&&f("Vex.Flow.NoteHead",t)}("Drawing note head '",this.noteType,this.duration,"' at",e,i);const s=this.stem_direction,n=this.render_options.glyph_font_scale,a=`${this.glyph_code}Stem${s===nt.UP?"Up":"Down"}`;if("s"===this.noteType){const n=this.checkStave().getSpacingBetweenLines();!function(t,e,i,s,n,a){const o=V.SLASH_NOTEHEAD_WIDTH;t.save(),t.setLineWidth(V.STEM_WIDTH);let r=!1;if(V.durationToNumber(e)>2&&(r=!0),r||(i-=V.STEM_WIDTH/2*n),t.beginPath(),t.moveTo(i,s+a),t.lineTo(i,s+1),t.lineTo(i+o,s-a),t.lineTo(i+o,s),t.lineTo(i,s+a),t.closePath(),r?t.fill():t.stroke(),V.durationToFraction(e).equals(.5)){const e=[-3,-1,o+1,o+3];for(let n=0;nt.getCategory()===x.Dot&&0===t.getIndex())).length!==r.note.getModifiers().filter((t=>t.getCategory()===x.Dot&&0===t.getIndex())).length||t<1&&t>0||JSON.stringify(a.note.getStyle())!==JSON.stringify(r.note.getStyle())?(d=c+2,a.stemDirection===r.stemDirection?a.note.setXShift(d):r.note.setXShift(d)):a.note.voice!==r.note.voice&&a.stemDirection===r.stemDirection&&(a.line!=r.line?(d=c+2,a.note.setXShift(d)):1===r.stemDirection&&(r.stemDirection=-1,r.note.setStemDirection(-1)))}else t<1?(d=c+2,a.note.durationt.postFormat())),!0)}constructor(t){var e,i,s;super(t),this.minLine=0,this.maxLine=0,this.sortedKeyProps=[],this.ledgerLineStyle={},this.clef=null!==(e=t.clef)&&void 0!==e?e:"treble",this.octave_shift=null!==(i=t.octave_shift)&&void 0!==i?i:0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),this.displaced=!1,this.dot_shiftY=0,this.use_default_head_x=!1,this._noteHeads=[],this.modifiers=[],this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE,stroke_px:t.stroke_px||Ut.LEDGER_LINE_OFFSET}),this.calculateKeyProps(),this.buildStem(),t.auto_stem?this.autoStem():this.setStemDirection(null!==(s=t.stem_direction)&&void 0!==s?s:nt.UP),this.reset(),this.buildFlag()}reset(){super.reset();const t=this._noteHeads.map((t=>t.getStyle()));this.buildNoteHeads(),this._noteHeads.forEach(((e,i)=>{const s=t[i];s&&e.setStyle(s)}));const e=this.stave;return e&&this.setStave(e),this.calcNoteDisplacements(),this}setBeam(t){return this.beam=t,this.calcNoteDisplacements(),this.stem&&this.stem.setExtension(this.getStemExtension()),this}buildStem(){return this.setStem(new nt({hide:!!this.isRest()})),this}buildNoteHeads(){this._noteHeads=[];const t=this.getStemDirection(),e=this.getKeys();let i,s,n,a,o,r=!1;t===nt.UP?(n=0,a=e.length,o=1):(n=e.length-1,a=-1,o=-1);for(let e=n;e!==a;e+=o){const n=this.sortedKeyProps[e].keyProps,a=n.line;void 0===i?i=a:(s=Math.abs(i-a),0===s||.5===s?r=!r:(r=!1,this.use_default_head_x=!0)),i=a;const o=new Wt({duration:this.duration,note_type:this.noteType,displaced:r,stem_direction:t,custom_glyph_code:n.code,glyph_font_scale:this.render_options.glyph_font_scale,x_shift:n.shift_right,stem_up_x_offset:n.stem_up_x_offset,stem_down_x_offset:n.stem_down_x_offset,line:n.line});this.addChildElement(o),this._noteHeads[this.sortedKeyProps[e].index]=o}return this._noteHeads}autoStem(){this.setStemDirection(this.calculateOptimalStemDirection())}calculateOptimalStemDirection(){this.minLine=this.sortedKeyProps[0].keyProps.line,this.maxLine=this.sortedKeyProps[this.keyProps.length-1].keyProps.line;return(this.minLine+this.maxLine)/2<3?nt.UP:nt.DOWN}calculateKeyProps(){let t;for(let e=0;e0&&(this.keyProps[e-1].displaced=!0)),t=a,this.keyProps.push(n)}this.keyProps.forEach(((t,e)=>{this.sortedKeyProps.push({keyProps:t,index:e})})),this.sortedKeyProps.sort(((t,e)=>t.keyProps.line-e.keyProps.line))}getBoundingBox(){var t,e;if(!this.preFormatted)throw new b("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const{width:i,modLeftPx:s,leftDisplacedHeadPx:n}=this.getMetrics(),a=this.getAbsoluteX()-s-n;let o=0,r=0;const h=(null!==(e=null===(t=this.getStave())||void 0===t?void 0:t.getSpacingBetweenLines())&&void 0!==e?e:0)/2,l=2*h;if(this.isRest()){const t=this.ys[0],e=V.durationToFraction(this.duration);e.equals(1)||e.equals(2)?(o=t-h,r=t+h):(o=t-this.glyphProps.line_above*l,r=t+this.glyphProps.line_below*l)}else if(this.glyphProps.stem){const t=this.getStemExtents();t.baseY+=h*this.getStemDirection(),o=Math.min(t.topY,t.baseY),r=Math.max(t.topY,t.baseY)}else{o=0,r=0;for(let t=0;te&&(e=s):s1}hasStem(){return this.glyphProps.stem}hasFlag(){return super.hasFlag()&&!this.isRest()}getStemX(){return"r"===this.noteType?this.getCenterGlyphX():super.getStemX()+(this.stem_direction?nt.WIDTH/(2*-this.stem_direction):0)}getYForTopText(t){const e=this.getStemExtents();return Math.min(this.checkStave().getYForTopText(t),e.topY-this.render_options.annotation_spacing*(t+1))}getYForBottomText(t){const e=this.getStemExtents();return Math.max(this.checkStave().getYForTopText(t),e.baseY+this.render_options.annotation_spacing*t)}setStave(t){super.setStave(t);const e=this._noteHeads.map((e=>(e.setStave(t),e.getY())));if(this.setYs(e),this.stem){const{y_top:t,y_bottom:e}=this.getNoteHeadBounds();this.stem.setYBounds(t,e)}return this}isDisplaced(){return this.displaced}setNoteDisplaced(t){return this.displaced=t,this}getTieRightX(){let t=this.getAbsoluteX();return t+=this.getGlyphWidth()+this.x_shift+this.rightDisplacedHeadPx,this.modifierContext&&(t+=this.modifierContext.getRightShift()),t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.x_shift-this.leftDisplacedHeadPx,t}getLineForRest(){let t=this.keyProps[0].line;if(this.keyProps.length>1){const e=this.keyProps[this.keyProps.length-1].line;t=S(Math.max(t,e),Math.min(t,e))}return t}getModifierStartXY(t,e,i={}){var s,n;if(!this.preFormatted)throw new b("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new b("NoYValues","No Y-Values calculated for this note.");const{ABOVE:a,BELOW:o,LEFT:r,RIGHT:h}=tt.Position;let l=0;return t===r?l=-2:t===h?(l=this.getGlyphWidth()+this.x_shift+2,this.stem_direction===nt.UP&&this.hasFlag()&&(i.forceFlagRight||((t,e)=>e===(t.getStemDirection()===nt.UP?t.keyProps.length-1:0))(this,e))&&(l+=null!==(n=null===(s=null==this?void 0:this.flag)||void 0===s?void 0:s.getMetrics().width)&&void 0!==n?n:0)):t!==o&&t!==a||(l=this.getGlyphWidth()/2),{x:this.getAbsoluteX()+l,y:this.ys[e]}}setStyle(t){return super.setGroupStyle(t)}setStemStyle(t){const e=this.getStem();return e&&e.setStyle(t),this}getStemStyle(){var t;return null===(t=this.stem)||void 0===t?void 0:t.getStyle()}setLedgerLineStyle(t){this.ledgerLineStyle=t}getLedgerLineStyle(){return this.ledgerLineStyle}setFlagStyle(t){var e;null===(e=this.flag)||void 0===e||e.setStyle(t)}getFlagStyle(){var t;return null===(t=this.flag)||void 0===t?void 0:t.getStyle()}setKeyStyle(t,e){return this._noteHeads[t].setStyle(e),this}setKeyLine(t,e){return this.keyProps[t].line=e,this.reset(),this}getKeyLine(t){return this.keyProps[t].line}getVoiceShiftWidth(){return this.getGlyphWidth()*(this.displaced?2:1)}calcNoteDisplacements(){this.setLeftDisplacedHeadPx(this.displaced&&this.stem_direction===nt.DOWN?this.getGlyphWidth():0),this.setRightDisplacedHeadPx(!this.hasFlag()&&this.displaced&&this.stem_direction===nt.UP?this.getGlyphWidth():0)}preFormat(){if(this.preFormatted)return;let t=0;this.modifierContext&&(this.modifierContext.preFormat(),0===this.modifierContext.getWidth()&&(t=Ut.minNoteheadPadding));let e=this.getGlyphWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx+t;this.shouldDrawFlag()&&this.stem_direction===nt.UP&&(e+=this.getGlyphWidth()),this.setWidth(e),this.preFormatted=!0}getNoteHeadBounds(){let t,e,i,s,n=1/0,a=-1/0,o=this.checkStave().getNumLines(),r=1,h=o,l=r;return this._noteHeads.forEach((c=>{const d=c.getLine(),m=c.getY();n=Math.min(m,n),a=Math.max(m,a),void 0===e&&c.isDisplaced()&&(e=c.getAbsoluteX()),void 0!==t||c.isDisplaced()||(t=c.getAbsoluteX()),o=Math.max(d,o),r=Math.min(d,r),c.isDisplaced()?(i=void 0===i?d:Math.max(d,i),s=void 0===s?d:Math.min(d,s)):(h=Math.max(d,h),l=Math.min(d,l))}),this),{y_top:n,y_bottom:a,displaced_x:e,non_displaced_x:t,highest_line:o,lowest_line:r,highest_displaced_line:i,lowest_displaced_line:s,highest_non_displaced_line:h,lowest_non_displaced_line:l}}getNoteHeadBeginX(){return this.getAbsoluteX()+this.x_shift}getNoteHeadEndX(){return this.getNoteHeadBeginX()+this.getGlyphWidth()}get noteHeads(){return this._noteHeads.slice()}get note_heads(){return console.warn("StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.","This accessor will be removed in VexFlow 5.0."),this.noteHeads}drawLedgerLines(){const t=this.checkStave(),{glyphProps:e,render_options:{stroke_px:i}}=this,s=this.checkContext(),n=e.getWidth()+2*i,a=2*(e.getWidth()+i)-nt.WIDTH/2;if(this.isRest())return;if(!s)throw new b("NoCanvasContext","Can't draw without a canvas context.");const{highest_line:o,lowest_line:r,highest_displaced_line:h,highest_non_displaced_line:l,lowest_displaced_line:c,lowest_non_displaced_line:d,displaced_x:m,non_displaced_x:g}=this.getNoteHeadBounds();if(o<6&&r>0)return;const _=Math.min(null!=m?m:0,null!=g?g:0),x=(t,e,o)=>{let r;r=o&&e?_-i:e?(null!=g?g:0)-i:(null!=m?m:0)-i;const h=e&&o?a:n;s.beginPath(),s.moveTo(r,t),s.lineTo(r+h,t),s.stroke()},u=Object.assign(Object.assign({},t.getDefaultLedgerLineStyle()),this.getLedgerLineStyle());this.applyStyle(s,u);for(let e=6;e<=o;++e){const i=void 0!==g&&e<=l,s=void 0!==h&&e<=h;x(t.getYForNote(e),i,s)}for(let e=0;e>=r;--e){const i=void 0!==g&&e>=d,s=void 0!==c&&e>=c;x(t.getYForNote(e),i,s)}this.restoreStyle(s,u)}drawModifiers(t){const e=this.checkContext();for(let i=0;i{e.applyStyle(t),t.openGroup("notehead",e.getAttribute("id"),{pointerBBox:!0}),e.setContext(t).draw(),this.drawModifiers(e),t.closeGroup(),e.restoreStyle(t)}))}drawStem(t){const e=this.checkContext();t&&this.setStem(new nt(t)),this.shouldDrawFlag()&&this.stem&&this.stem.adjustHeightForFlag(),this.stem&&this.stem.setContext(e).draw()}getStaveNoteScale(){return 1}getStemExtension(){const t=super.getStemExtension();if(!this.glyphProps.stem)return t;const e=this.getStemDirection();if(e!==this.calculateOptimalStemDirection())return t;let i;i=e===nt.UP?3-this.maxLine:this.minLine-3;const s=i-3.5;if(s<=0)return t;const n=this.getStave();let a=10;return null!=n&&(a=n.getSpacingBetweenLines()),t+s*a}draw(){if(!1===this.render_options.draw)return;if(0===this.ys.length)throw new b("NoYValues","Can't draw note without Y values.");const t=this.checkContext(),e=this.getNoteHeadBeginX(),i=this.hasStem()&&!this.beam;if(this._noteHeads.forEach((t=>t.setX(e))),this.stem){const t=this.getStemX();this.stem.setNoteHeadXBounds(t,t)}!function(...t){Ut.DEBUG&&f("Vex.Flow.StaveNote",t)}("Rendering ",this.isChord()?"chord :":"note :",this.keys),this.applyStyle(),t.openGroup("stavenote",this.getAttribute("id")),this.drawLedgerLines(),i&&this.drawStem(),this.drawNoteHeads(),this.drawFlag(),t.closeGroup(),this.restoreStyle(),this.setRendered()}}Ut.DEBUG=!1;class Yt extends L{static get CATEGORY(){return x.StaveTie}constructor(t,e){super(),this.setNotes(t),this.text=e,this.render_options={cp1:8,cp2:12,text_shift_x:0,first_x_shift:0,last_x_shift:0,y_shift:7,tie_spacing:0},this.resetFont()}setDirection(t){return this.direction=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new b("BadArguments","Tie needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new b("BadArguments","Tied notes must have same number of indices.");return this.notes=t,this}isPartial(){return!this.notes.first_note||!this.notes.last_note}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new b("BadArguments","No Y-values to render");const e=this.checkContext();let i=this.render_options.cp1,s=this.render_options.cp2;Math.abs(t.last_x_px-t.first_x_px)<10&&(i=2,s=8);const n=this.render_options.first_x_shift,a=this.render_options.last_x_shift,o=this.render_options.y_shift*t.direction,r=this.notes.first_indices,h=this.notes.last_indices;this.applyStyle(),e.openGroup("stavetie",this.getAttribute("id"));for(let l=0;lMath.pow(this.options.softmaxFactor,e.getTicks().value()/t)))),this.expTicksUsed}softmax(t){this.expTicksUsed||(this.expTicksUsed=this.reCalculateExpTicksUsed());const e=this.ticksUsed.value();return(t=>Math.pow(this.options.softmaxFactor,t/e))(t)/this.expTicksUsed}addTickable(t){if(!t.shouldIgnoreTicks()){const e=t.getTicks();if(this.ticksUsed.add(e),this.expTicksUsed=0,(this.mode===zt.STRICT||this.mode===zt.FULL)&&this.ticksUsed.greaterThan(this.totalTicks))throw this.ticksUsed.subtract(e),new b("BadArgument","Too many ticks.");e.lessThan(this.smallestTickCount)&&(this.smallestTickCount=e.clone()),this.resolutionMultiplier=this.ticksUsed.denominator,this.totalTicks.add(0,this.ticksUsed.denominator)}return this.tickables.push(t),t.setVoice(this),this}addTickables(t){for(let e=0;e{e.getStave()||e.setStave(t)})),this.preFormatted=!0,this}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}draw(t=this.checkContext(),e){let i;e=null!=e?e:this.stave,this.setRendered();for(let s=0;s1){const e=new Le(t);e.render_options.beam_width=3,e.render_options.partial_beam_length=4,this.beams.push(e)}return this}setWidth(t){return this.width=t,this}getWidth(){return this.width+Ut.minNoteheadPadding}getGraceNotes(){return this.grace_notes}draw(){const t=this.checkContext(),e=this.checkAttachedNote();if(this.setRendered(),function(...t){Xt.DEBUG&&f("Vex.Flow.GraceNoteGroup",t)}("Drawing grace note group for:",e),this.alignSubNotesWithNote(this.getGraceNotes(),e),this.grace_notes.forEach((e=>e.setContext(t).draw())),this.beams.forEach((e=>e.setContext(t).draw())),this.show_slur){const i=m(e),s=i?Yt:Ht;this.slur=new s({last_note:this.grace_notes[0],first_note:e,first_indices:[0],last_indices:[0]}),this.slur.render_options.cp2=12,this.slur.render_options.y_shift=(i?7:5)+this.render_options.slur_y_shift,this.slur.setContext(t).draw()}}}Xt.DEBUG=!1;class Vt extends tt{static get CATEGORY(){return x.NoteSubGroup}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let e=0;e{t.setIgnoreTicks(!1)})),this.width=0,this.formatter=new Ae,this.voice=new jt({num_beats:4,beat_value:4,resolution:V.RESOLUTION}).setStrict(!1),this.voice.addTickables(this.subNotes)}preFormat(){this.preFormatted||(this.formatter.joinVoices([this.voice]).format([this.voice],0),this.setWidth(this.formatter.getMinTotalWidth()),this.preFormatted=!0)}setWidth(t){return this.width=t,this}getWidth(){return this.width}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),this.alignSubNotesWithNote(this.subNotes,e),this.subNotes.forEach((e=>e.setContext(t).drawWithStyle()))}}class Kt extends tt{static get CATEGORY(){return x.Ornament}static get minPadding(){return V.currentMusicFont().lookupMetric("noteHead.minPadding")}static format(t,e){if(!t||0===t.length)return!1;let i=0,s=e.right_shift,n=e.left_shift,a=0;for(let o=0;o=0&&(r.x_shift+=s+2),Kt.ornamentAttack.indexOf(r.type)>=0&&(r.x_shift-=n+2),r.reportedWidth&&r.x_shift<0?n+=r.reportedWidth:r.reportedWidth&&r.x_shift>=0?s+=r.reportedWidth+Kt.minPadding:i=Math.max(r.getWidth(),i),Kt.ornamentArticulation.indexOf(r.type)>=0){p(r.note,"NoAttachedNote").getLineNumber()>=3||r.getPosition()===tt.Position.ABOVE?(e.top_text_line+=h,r.y_shift+=a,a-=r.glyph.bbox.getH()):(e.text_line+=h,r.y_shift+=a,a+=r.glyph.bbox.getH())}else r.getPosition()===tt.Position.ABOVE?(r.setTextLine(e.top_text_line),e.top_text_line+=h):(r.setTextLine(e.text_line),e.text_line+=h)}return e.left_shift=n+i/2,e.right_shift=s+i/2,!0}static get ornamentNoteTransition(){return["flip","jazzTurn","smear"]}static get ornamentAttack(){return["scoop"]}static get ornamentAlignWithNoteHead(){return["doit","fall","fallLong","doitLong","bend","plungerClosed","plungerOpen","scoop"]}static get ornamentRelease(){return["doit","fall","fallLong","doitLong","jazzTurn","smear","flip"]}static get ornamentArticulation(){return["bend","plungerClosed","plungerOpen"]}getMetrics(){const t=V.currentMusicFont().getMetrics().ornament;if(!t)throw new b("BadMetrics","ornament missing");return t[this.ornament.code]}constructor(t){super(),this.type=t,this.delayed=!1,this.render_options={font_scale:V.NOTATION_FONT_SCALE,accidentalLowerPadding:3,accidentalUpperPadding:3},this.ornament=V.ornamentCodes(this.type);const e=this.getMetrics();if(this.adjustForStemDirection=!1,this.reportedWidth=e&&e.reportedWidth?e.reportedWidth:0,this.stemUpYOffset=e&&e.stemUpYOffset?e.stemUpYOffset:0,this.ornamentAlignWithNoteHead=Kt.ornamentAlignWithNoteHead.indexOf(this.type)>=0,!this.ornament)throw new b("ArgumentError",`Ornament not found: '${this.type}'`);this.x_shift=e?e.xOffset:0,this.y_shift=e?e.yOffset:0,this.glyph=new Z(this.ornament.code,this.render_options.font_scale,{category:`ornament.${this.ornament.code}`}),Kt.ornamentNoteTransition.indexOf(this.type)>=0&&(this.delayed=!0),e||this.glyph.setOrigin(.5,1)}setDelayed(t){return this.delayed=t,this}setUpperAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalUpper=new Z(V.accidentalCodes(t).code,e),this.accidentalUpper.setOrigin(.5,1),this}setLowerAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalLower=new Z(V.accidentalCodes(t).code,e),this.accidentalLower.setOrigin(.5,1),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getStemDirection(),s=e.checkStave();this.applyStyle(),t.openGroup("ornament",this.getAttribute("id"));const n=e.checkStem().getExtents();let a=i===nt.DOWN?n.baseY:n.topY;_(e)&&(e.hasStem()?i===nt.DOWN&&(a=s.getYForTopText(this.text_line)):a=s.getYForTopText(this.text_line));const o=i===nt.DOWN,r=s.getSpacingBetweenLines();let h=1;!o&&e.hasBeam()&&(h+=.5);const l=a-r*(this.text_line+h),c=e.getModifierStartXY(this.position,this.index);let d=c.x,m=this.ornamentAlignWithNoteHead?c.y:Math.min(s.getYForTopText(this.text_line),l);if(m+=this.y_shift,this.delayed){let t=0;const i=d-s.getNoteStartX();if(void 0!==this.delayXShift)t=this.delayXShift;else{t+=this.glyph.getMetrics().width/2;const n=e.getVoice().getTickables(),a=n.indexOf(e),o=a+1=0&&(m=e.checkStave().getBoundingBox().getY()+40),this.glyph.render(t,d+this.x_shift,m),this.accidentalUpper&&(m-=this.glyph.getMetrics().height+this.render_options.accidentalUpperPadding,this.accidentalUpper.render(t,d,m)),t.closeGroup(),this.restoreStyle()}}Kt.DEBUG=!1;class $t extends tt{static get CATEGORY(){return x.Parenthesis}static buildAndAttach(t){for(const e of t)for(let t=0;th+n.width?s:h+n.width),o===J.LEFT&&(h=a.getLeftParenthesisPx(r),i=i>h+n.width?i:h+n.width),n.setXShift(h)}return e.left_shift+=i,e.right_shift+=s,!0}constructor(t){var e;super(),this.position=null!=t?t:tt.Position.LEFT,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width"))}setNote(t){var e,i;return this.note=t,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width")),h(t)&&(this.point=null!==(i=V.currentMusicFont().lookupMetric("parenthesis.gracenote.point"))&&void 0!==i?i:vt.getPoint("gracenote"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.gracenote.width"))),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0}),s=i.x+this.x_shift,n=i.y+this.y_shift;this.position==tt.Position.RIGHT?Z.renderGlyph(t,s+1,n,this.point,"noteheadParenthesisRight",{category:"noteHead.standard.noteheadParenthesisRight"}):this.position==tt.Position.LEFT&&Z.renderGlyph(t,s-2,n,this.point,"noteheadParenthesisLeft",{category:"noteHead.standard.noteheadParenthesisLeft"})}}function Jt(t){if(!t)return!1;const e=u();return"function"==typeof e.HTMLCanvasElement&&t instanceof e.HTMLCanvasElement||"function"==typeof t.getContext&&"function"==typeof t.toDataURL}function qt(t){if(!t)return!1;const e=u();return"function"==typeof e.HTMLDivElement&&t instanceof e.HTMLDivElement||"function"==typeof t.appendChild&&"object"==typeof t.style}class Qt extends yt{static get WIDTH(){return 600}static get HEIGHT(){return 400}static get CANVAS_BROWSER_SIZE_LIMIT(){return 32767}static sanitizeCanvasDims(t,e){const i=this.CANVAS_BROWSER_SIZE_LIMIT;return Math.max(t,e)>i&&(y("Canvas dimensions exceed browser limit. Cropping to "+i),t>i&&(t=i),e>i&&(e=i)),[t,e]}constructor(t){super(),this.textHeight=0,this.context2D=t,t.canvas?this.canvas=t.canvas:this.canvas={width:Qt.WIDTH,height:Qt.HEIGHT}}clear(){this.context2D.clearRect(0,0,this.canvas.width,this.canvas.height)}openGroup(t,e,i){}closeGroup(){}add(t){}setFillStyle(t){return this.context2D.fillStyle=t,this}setBackgroundFillStyle(t){return this}setStrokeStyle(t){return this.context2D.strokeStyle=t,this}setShadowColor(t){return this.context2D.shadowColor=t,this}setShadowBlur(t){const e=this.context2D.getTransform(),i=Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c+e.d*e.d);return this.context2D.shadowBlur=i*t,this}setLineWidth(t){return this.context2D.lineWidth=t,this}setLineCap(t){return this.context2D.lineCap=t,this}setLineDash(t){return this.context2D.setLineDash(t),this}scale(t,e){return this.context2D.scale(t,e),this}resize(t,e,i){var s;const n=this.context2D.canvas,a=null!==(s=null!=i?i:u().devicePixelRatio)&&void 0!==s?s:1;return[t,e]=Qt.sanitizeCanvasDims(t*a,e*a),t=t/a|0,e=e/a|0,n.width=t*a,n.height=e*a,Jt(n)&&(n.style.width=t+"px",n.style.height=e+"px"),this.scale(a,a)}rect(t,e,i,s){return this.context2D.rect(t,e,i,s),this}fillRect(t,e,i,s){return this.context2D.fillRect(t,e,i,s),this}clearRect(t,e,i,s){return this.context2D.clearRect(t,e,i,s),this}beginPath(){return this.context2D.beginPath(),this}moveTo(t,e){return this.context2D.moveTo(t,e),this}lineTo(t,e){return this.context2D.lineTo(t,e),this}bezierCurveTo(t,e,i,s,n,a){return this.context2D.bezierCurveTo(t,e,i,s,n,a),this}quadraticCurveTo(t,e,i,s){return this.context2D.quadraticCurveTo(t,e,i,s),this}arc(t,e,i,s,n,a){return this.context2D.arc(t,e,i,s,n,a),this}fill(){return this.context2D.fill(),this}stroke(){return this.context2D.stroke(),this}closePath(){return this.context2D.closePath(),this}measureText(t){const e=this.context2D.measureText(t);let i=0,s=0;return e.fontBoundingBoxAscent?(i=-e.fontBoundingBoxAscent,s=e.fontBoundingBoxDescent+e.fontBoundingBoxAscent):(i=-e.actualBoundingBoxAscent,s=e.actualBoundingBoxDescent+e.actualBoundingBoxAscent),{x:0,y:i,width:e.width,height:s}}fillText(t,e,i){return this.context2D.fillText(t,e,i),this}save(){return this.context2D.save(),this}restore(){return this.context2D.restore(),this}set fillStyle(t){this.context2D.fillStyle=t}get fillStyle(){return this.context2D.fillStyle}set strokeStyle(t){this.context2D.strokeStyle=t}get strokeStyle(){return this.context2D.strokeStyle}setFont(t,e,i,s){const n=F.validate(t,e,i,s);return this.context2D.font=F.toCSSString(n),this.textHeight=F.convertSizeToPixelValue(n.size),this}getFont(){return this.context2D.font}}const Zt={path:{x:!0,y:!0,width:!0,height:!0,"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},rect:{"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},text:{width:!0,height:!0}},te="http://www.w3.org/2000/svg",ee=2*Math.PI;class ie extends yt{constructor(t){super(),this.width=0,this.height=0,this.precision=1,this.backgroundFillStyle="white",this.fontCSSString="",this.element=t,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES);const e=this.create("svg");this.element.appendChild(e),this.svg=e,this.parent=this.svg,this.groups=[this.svg],this.path="",this.pen={x:NaN,y:NaN},this.lineWidth=1;const i={"font-family":F.SANS_SERIF,"font-size":F.SIZE+"pt","font-weight":N.NORMAL,"font-style":A.NORMAL};this.state=Object.assign({scaleX:1,scaleY:1},i),this.attributes=Object.assign({"stroke-width":.3,"stroke-dasharray":"none",fill:"black",stroke:"black"},i),this.groupAttributes=[],this.applyAttributes(e,this.attributes),this.groupAttributes.push(Object.assign({},this.attributes)),this.shadow_attributes={width:0,color:"black"},this.state_stack=[]}round(t){return Math.round(t*this.precision)/this.precision}create(t){return document.createElementNS(te,t)}openGroup(t,e,i){const s=this.create("g");return this.groups.push(s),this.parent.appendChild(s),this.parent=s,t&&s.setAttribute("class",T(t)),e&&s.setAttribute("id",T(e)),i&&i.pointerBBox&&s.setAttribute("pointer-events","bounding-box"),this.applyAttributes(s,this.attributes),this.groupAttributes.push(Object.assign(Object.assign({},this.groupAttributes[this.groupAttributes.length-1]),this.attributes)),s}closeGroup(){this.groups.pop(),this.groupAttributes.pop(),this.parent=this.groups[this.groups.length-1]}add(t){this.parent.appendChild(t)}setFillStyle(t){return this.attributes.fill=t,this}setBackgroundFillStyle(t){return this.backgroundFillStyle=t,this}setStrokeStyle(t){return this.attributes.stroke=t,this}setShadowColor(t){return this.shadow_attributes.color=t,this}setShadowBlur(t){return this.shadow_attributes.width=t,this}setLineWidth(t){return this.attributes["stroke-width"]=t,this.lineWidth=t,this}setLineDash(t){if("[object Array]"===Object.prototype.toString.call(t))return this.attributes["stroke-dasharray"]=t.join(","),this;throw new b("ArgumentError","lineDash must be an array of integers.")}setLineCap(t){return this.attributes["stroke-linecap"]=t,this}resize(t,e){this.width=t,this.height=e,this.element.style.width=t.toString(),this.svg.style.width=t.toString(),this.svg.style.height=e.toString();const i={width:t,height:e};return this.applyAttributes(this.svg,i),this.scale(this.state.scaleX,this.state.scaleY),this}scale(t,e){this.state.scaleX=this.state.scaleX?this.state.scaleX*t:t,this.state.scaleY=this.state.scaleY?this.state.scaleY*e:e;const i=this.width/this.state.scaleX,s=this.height/this.state.scaleY;return this.setViewBox(0,0,i,s),this}setViewBox(t,e,i,s){if("string"==typeof t)this.svg.setAttribute("viewBox",t);else{const n=t+" "+e+" "+i+" "+s;this.svg.setAttribute("viewBox",n)}}applyAttributes(t,e){const i=Zt[t.nodeName];for(const s in e)i&&i[s]||!e[s]||0!=this.groupAttributes.length&&e[s]==this.groupAttributes[this.groupAttributes.length-1][s]||t.setAttributeNS(null,s,e[s]);return t}clear(){for(;this.svg.lastChild;)this.svg.removeChild(this.svg.lastChild);this.scale(this.state.scaleX,this.state.scaleY)}rect(t,e,i,s,n){s<0&&(e+=s,s*=-1);const a=this.create("rect");return n=null!=n?n:{fill:"none","stroke-width":this.lineWidth,stroke:"black"},t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.applyAttributes(a,Object.assign({x:t,y:e,width:i,height:s},n)),this.add(a),this}fillRect(t,e,i,s){const n={fill:this.attributes.fill,stroke:"none"};return this.rect(t,e,i,s,n),this}clearRect(t,e,i,s){return this.rect(t,e,i,s,{fill:this.backgroundFillStyle,stroke:"none"}),this}beginPath(){return this.path="",this.pen.x=NaN,this.pen.y=NaN,this}moveTo(t,e){return t=this.round(t),e=this.round(e),this.path+="M"+t+" "+e,this.pen.x=t,this.pen.y=e,this}lineTo(t,e){return t=this.round(t),e=this.round(e),this.path+="L"+t+" "+e,this.pen.x=t,this.pen.y=e,this}bezierCurveTo(t,e,i,s,n,a){return n=this.round(n),a=this.round(a),t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.path+="C"+t+" "+e+","+i+" "+s+","+n+" "+a,this.pen.x=n,this.pen.y=a,this}quadraticCurveTo(t,e,i,s){return i=this.round(i),s=this.round(s),t=this.round(t),e=this.round(e),this.path+="Q"+t+" "+e+","+i+" "+s,this.pen.x=i,this.pen.y=s,this}arc(t,e,i,s,n,a){let o=t+i*Math.cos(s),r=e+i*Math.sin(s);o=this.round(o),r=this.round(r);const h=v(s),l=v(n);if(!a&&n-s>=ee||a&&s-n>=ee||h===l){let n=t+i*Math.cos(s+Math.PI),a=e+i*Math.sin(s+Math.PI);n=this.round(n),a=this.round(a),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 0 0 ${n} ${a} `,this.path+=`A${i} ${i} 0 0 0 ${o} ${r}`,this.pen.x=o,this.pen.y=r}else{let c,d=t+i*Math.cos(n),m=e+i*Math.sin(n);s=h,n=l,c=Math.abs(n-s)n&&(c=!c);const g=!a;d=this.round(d),m=this.round(m),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 ${+c} ${+g} ${d} ${m}`,this.pen.x=d,this.pen.y=m}return this}closePath(){return this.path+="Z",this}getShadowStyle(){const t=this.shadow_attributes;return`filter: drop-shadow(0 0 ${t.width/1.5}px ${t.color})`}fill(t){const e=this.create("path");return void 0===t&&(t=Object.assign(Object.assign({},this.attributes),{stroke:"none"})),t.d=this.path,this.shadow_attributes.width>0&&(t.style=this.getShadowStyle()),this.applyAttributes(e,t),this.add(e),this}stroke(){const t=this.create("path"),e=Object.assign(Object.assign({},this.attributes),{fill:"none","stroke-width":this.lineWidth,d:this.path});return this.shadow_attributes.width>0&&(e.style=this.getShadowStyle()),this.applyAttributes(t,e),this.add(t),this}measureText(t){return ie.measureTextCache.lookup(t,this.svg,this.attributes)}fillText(t,e,i){if(!t||t.length<=0)return this;e=this.round(e),i=this.round(i);const s=Object.assign(Object.assign({},this.attributes),{stroke:"none",x:e,y:i}),n=this.create("text");return n.textContent=t,this.applyAttributes(n,s),this.add(n),this}save(){return this.state_stack.push({state:{"font-family":this.state["font-family"],"font-weight":this.state["font-weight"],"font-style":this.state["font-style"],"font-size":this.state["font-size"],scale:this.state.scale},attributes:{"font-family":this.attributes["font-family"],"font-weight":this.attributes["font-weight"],"font-style":this.attributes["font-style"],"font-size":this.attributes["font-size"],fill:this.attributes.fill,stroke:this.attributes.stroke,"stroke-width":this.attributes["stroke-width"],"stroke-dasharray":this.attributes["stroke-dasharray"]},shadow_attributes:{width:this.shadow_attributes.width,color:this.shadow_attributes.color},lineWidth:this.lineWidth}),this}restore(){const t=this.state_stack.pop();if(t){const e=t;this.state["font-family"]=e.state["font-family"],this.state["font-weight"]=e.state["font-weight"],this.state["font-style"]=e.state["font-style"],this.state["font-size"]=e.state["font-size"],this.state.scale=e.state.scale,this.attributes["font-family"]=e.attributes["font-family"],this.attributes["font-weight"]=e.attributes["font-weight"],this.attributes["font-style"]=e.attributes["font-style"],this.attributes["font-size"]=e.attributes["font-size"],this.attributes.fill=e.attributes.fill,this.attributes.stroke=e.attributes.stroke,this.attributes["stroke-width"]=e.attributes["stroke-width"],this.attributes["stroke-dasharray"]=e.attributes["stroke-dasharray"],this.shadow_attributes.width=e.shadow_attributes.width,this.shadow_attributes.color=e.shadow_attributes.color,this.lineWidth=e.lineWidth}return this}set fillStyle(t){this.setFillStyle(t)}get fillStyle(){return this.attributes.fill}set strokeStyle(t){this.setStrokeStyle(t)}get strokeStyle(){return this.attributes.stroke}setFont(t,e,i,s){const n=F.validate(t,e,i,s);this.fontCSSString=F.toCSSString(n);const a={"font-family":n.family,"font-size":n.size,"font-weight":n.weight,"font-style":n.style};return this.attributes=Object.assign(Object.assign({},this.attributes),a),this.state=Object.assign(Object.assign({},this.state),a),this}getFont(){return this.fontCSSString}}var se,ne,ae,oe;ie.measureTextCache=new class{constructor(){this.cache={}}lookup(t,e,i){let s=this.cache[t];void 0===s&&(s={},this.cache[t]=s);const n=`${i["font-family"]}%${i["font-size"]}%${i["font-weight"]}%${i["font-style"]}`;let a=s[n];return void 0===a&&(a=this.measureImpl(t,e,i),s[n]=a),a}measureImpl(t,e,i){let s=this.txt;s||(s=document.createElementNS(te,"text"),this.txt=s),s.textContent=t,i["font-family"]&&s.setAttributeNS(null,"font-family",i["font-family"]),i["font-size"]&&s.setAttributeNS(null,"font-size",`${i["font-size"]}`),i["font-style"]&&s.setAttributeNS(null,"font-style",i["font-style"]),i["font-weight"]&&s.setAttributeNS(null,"font-weight",`${i["font-weight"]}`),e.appendChild(s);const n=s.getBBox();return e.removeChild(s),{x:n.x,y:n.y,width:n.width,height:n.height}}},function(t){t[t.CANVAS=1]="CANVAS",t[t.SVG=2]="SVG"}(se||(se={})),function(t){t[t.NONE=1]="NONE",t[t.UP=2]="UP",t[t.DOWN=3]="DOWN"}(ne||(ne={}));class re{static buildContext(t,e,i,s,n="#FFF"){const a=new re(t,e);i&&s&&a.resize(i,s);const o=a.getContext();return o.setBackgroundFillStyle(n),re.lastContext=o,o}static getCanvasContext(t,e,i,s){return re.buildContext(t,re.Backends.CANVAS,e,i,s)}static getSVGContext(t,e,i,s){return re.buildContext(t,re.Backends.SVG,e,i,s)}static drawDashedLine(t,e,i,s,n,a){t.beginPath();const o=s-e,r=n-i,h=Math.atan2(r,o);let l=e,c=i;t.moveTo(e,i);let d=0,m=!0;for(;!(o<0?l<=s:l>=s)||!(r<0?c<=n:c>=n);){const e=a[d++%a.length],i=l+Math.cos(h)*e;l=o<0?Math.max(s,i):Math.min(s,i);const g=c+Math.sin(h)*e;c=r<0?Math.max(n,g):Math.min(n,g),m?t.lineTo(l,c):t.moveTo(l,c),m=!m}t.closePath(),t.stroke()}constructor(t,e){if(d(t))this.ctx=t;else{if(void 0===e)throw new b("InvalidArgument","Missing backend argument");const i=e;let s;if("string"==typeof t){const e=document.getElementById(t);if(!e)throw new b("BadElementId",`Can't find element with ID "${e}"`);s=e}else s=t;if(i===re.Backends.CANVAS){if(!Jt(s))throw new b("BadElement","CANVAS context requires an HTMLCanvasElement.");const t=s.getContext("2d",{willReadFrequently:!0});if(!t)throw new b("BadElement","Can't get canvas context");this.ctx=new Qt(t)}else{if(i!==re.Backends.SVG)throw new b("InvalidBackend",`No support for backend: ${i}`);if(!qt(s))throw new b("BadElement","SVG context requires an HTMLDivElement.");this.ctx=new ie(s)}}}resize(t,e){return this.ctx.resize(t,e),this}getContext(){return this.ctx}}re.Backends=se,re.LineEndType=ne,re.lastContext=void 0;class he extends tt{static get CATEGORY(){return x.StringNumber}static get metrics(){var t;return null!==(t=V.currentMusicFont().getMetrics().stringNumber)&&void 0!==t?t:{verticalPadding:0,stemPadding:0,leftPadding:0,rightPadding:0}}static format(t,e){const i=e.left_shift,s=e.right_shift;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let i=0;ie.line-t.line));let h=0,l=0,c=0,d=null,g=null;for(let t=0;tc?b:c),d=m,g=e}return e.left_shift+=l,e.right_shift+=c,!0}constructor(t){super(),this.string_number=t,this.position=tt.Position.ABOVE,this.x_shift=0,this.y_shift=0,this.text_line=0,this.stem_offset=0,this.x_offset=0,this.y_offset=0,this.dashed=!0,this.leg=re.LineEndType.NONE,this.radius=8,this.drawCircle=!0,this.setWidth(2*this.radius+4),this.resetFont()}setLineEndType(t){return t>=re.LineEndType.NONE&&t<=re.LineEndType.DOWN&&(this.leg=t),this}setStringNumber(t){return this.string_number=t,this}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}setLastNote(t){return this.last_note=t,this}setDashed(t){return this.dashed=t,this}setDrawCircle(t){return this.drawCircle=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index),s=e.hasStem()?e.getStemDirection():nt.UP;let n=i.x+this.x_shift+this.x_offset,a={};e.hasStem()&&(a=e.checkStem().getExtents());let o=i.y+this.y_shift+this.y_offset;switch(this.position){case tt.Position.ABOVE:o=e.getYs().reduce(((t,e)=>tt>e?t:e)),e.hasStem()&&s==nt.DOWN&&(o=a.topY-he.metrics.stemPadding),o+=this.radius+he.metrics.verticalPadding+this.text_line*V.STAVE_LINE_DISTANCE;break;case tt.Position.LEFT:n-=this.radius/2+he.metrics.leftPadding;break;case tt.Position.RIGHT:n+=this.radius/2+he.metrics.rightPadding;break;default:throw new b("InvalidPosition",`The position ${this.position} is invalid`)}t.save(),this.drawCircle&&(t.beginPath(),t.arc(n,o,this.radius,0,2*Math.PI,!1),t.setLineWidth(1.5),t.stroke()),t.setFont(this.textFont);const r=n-t.measureText(this.string_number).width/2;t.fillText(""+this.string_number,r,o+4.5);const h=this.last_note;if(g(h)){const i=h.getStemX()-e.getX()+5;let s,a;switch(t.setStrokeStyle("#000000"),t.setLineCap("round"),t.setLineWidth(.6),this.dashed?re.drawDashedLine(t,n+10,o,n+i,o,[3,3]):re.drawDashedLine(t,n+10,o,n+i,o,[3,0]),this.leg){case re.LineEndType.UP:s=-10,a=this.dashed?[3,3]:[3,0],re.drawDashedLine(t,n+i,o,n+i,o+s,a);break;case re.LineEndType.DOWN:s=10,a=this.dashed?[3,3]:[3,0],re.drawDashedLine(t,n+i,o,n+i,o+s,a)}}t.restore()}}he.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:N.BOLD,style:A.NORMAL};class le extends tt{static get CATEGORY(){return x.Stroke}static format(t,e){const i=e.left_shift;if(!t||0===t.length)return!1;const s=t.map((t=>{const e=t.getNote(),i=t.checkIndex();if(m(e)){const{line:s}=e.getKeyProps()[i];return{line:s,shift:e.getLeftDisplacedHeadPx(),stroke:t}}if(_(e)){const{str:s}=e.getPositions()[i];return{line:s,shift:0,stroke:t}}throw new b("Internal","Unexpected instance.")})),n=i,a=s.reduce(((t,{stroke:e,shift:i})=>(e.setXShift(n+i),Math.max(e.getWidth()+0,t))),0);return e.left_shift+=a,!0}constructor(t,e){super(),this.options=Object.assign({all_voices:!0},e),this.all_voices=this.options.all_voices,this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.resetFont(),this.setXShift(0),this.setWidth(10)}getPosition(){return this.position}addEndNote(t){return this.note_end=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=e.getYs(),n=i.y,a=i.y;const o=i.x-5,r=e.checkStave().getSpacingBetweenLines(),h=this.checkModifierContext().getMembers(e.getCategory());for(let t=0;t0){s-=o.map((t=>t.getTextHeight())).reduce(((t,e)=>t>e?t:e))/V.STAVE_LINE_DISTANCE+1}else e.top_text_line+=1;for(let e=0;e=t.line?i.above:i.below}}this.placeGlyphOnLine(s,this.checkStave(),t.line),this.glyphs.push(s);const a=this.xPositions[this.xPositions.length-1],o=s.getMetrics().width+n;this.xPositions.push(a+o),this.width+=o}cancelKey(t){return this.formatted=!1,this.cancelKeySpec=t,this}convertToCancelAccList(t){const e=V.keySignature(t),i=this.accList.length>0&&e.length>0&&e[0].type!==this.accList[0].type,s=i?e.length:e.length-this.accList.length;if(s<1)return;const n=[];for(let t=0;t0?e[0].type:void 0;let s;if(this.cancelKeySpec&&(s=this.convertToCancelAccList(this.cancelKeySpec)),this.alterKeySpec&&this.convertToAlterAccList(this.alterKeySpec),this.accList.length>0){const n=(this.position===wt.END?t.getEndClef():t.getClef())||t.getClef();s&&this.convertAccLines(n,s.type,s.accList),this.convertAccLines(n,i,e);for(let t=0;t0?"PlusSmall":"Plus";break;case"(":s=i.length>0?"ParensLeftSmall":"ParensLeft";break;case")":s=i.length>0?"ParensRightSmall":"ParensRight"}const n=new Z("timeSig"+s,this.timeSignature.point);this.topGlyphs.push(n),r+=null!==(o=n.getMetrics().width)&&void 0!==o?o:0,h=Math.max(h,n.getMetrics().height)}let l=0;for(let t=0;t22?1:0,this.width=Math.max(r,l),this.xMin=this.getMetrics().x_min,this.topStartX=(this.width-r)/2,this.botStartX=(this.width-l)/2,this.reset()}getMetrics(){return{x_min:this.xMin,x_max:this.xMin+this.width,width:this.width}}renderToStave(t){const e=this.checkStave(),i=this.checkContext();let s=t+this.topStartX,n=0;n=this.botGlyphs.length>0?e.getYForLine(this.timeSignature.topLine-this.lineShift):(e.getYForLine(this.timeSignature.topLine)+e.getYForLine(this.timeSignature.bottomLine))/2;for(let t=0;t{const e=t.split("/");if(2!==e.length&&"+"!==e[0]&&"-"!==e[0])throw new b("BadTimeSignature",`Invalid time spec: ${t}. Must be in the form "/"`);e.forEach((e=>{if(0==/^[0-9+\-()]+$/.test(e))throw new b("BadTimeSignature",`Invalid time spec: ${t}. Must contain valid signatures.`)}))})(t);const s=t.split("/");return{line:0,num:!0,glyph:this.makeTimeSignatureGlyph(null!==(e=s[0])&&void 0!==e?e:"",null!==(i=s[1])&&void 0!==i?i:"")}}makeTimeSignatureGlyph(t,e){return new Se(this,t,e,"timeSig0",this.point)}getInfo(){const{line:t,is_numeric:e,glyph:i}=this;return{line:t,num:e,glyph:i}}setTimeSig(t){this.timeSpec=t;const e=this.parseTimeSpec(t);return this.setGlyph(e.glyph),this.is_numeric=e.num,this.line=e.line,this}getTimeSpec(){return this.timeSpec}getLine(){return this.line}setLine(t){this.line=t}getGlyph(){return this.glyph}setGlyph(t){this.glyph=t,this.setWidth(p(this.glyph.getMetrics().width))}getIsNumeric(){return this.is_numeric}setIsNumeric(t){this.is_numeric=t}draw(){const t=this.checkStave(),e=t.checkContext();this.setRendered(),this.applyStyle(e),e.openGroup("timesignature",this.getAttribute("id")),this.glyph.setStave(t),this.glyph.setContext(e),this.placeGlyphOnLine(this.glyph,t,this.line),this.glyph.renderToStave(this.x),e.closeGroup(),this.restoreStyle(e)}}const ve={[kt.CATEGORY]:0,[ge.CATEGORY]:1,[_e.CATEGORY]:2,[Te.CATEGORY]:3},we={[Te.CATEGORY]:0,[_e.CATEGORY]:1,[kt.CATEGORY]:2,[ge.CATEGORY]:3};class Ee extends L{static get CATEGORY(){return x.Stave}static get defaultPadding(){const t=V.currentMusicFont();return t.lookupMetric("stave.padding")+t.lookupMetric("stave.endPaddingMax")}static get rightPadding(){return V.currentMusicFont().lookupMetric("stave.endPaddingMax")}constructor(t,e,i,s){super(),this.height=0,this.x=t,this.y=e,this.width=i,this.formatted=!1,this.start_x=t+5,this.end_x=t+i,this.modifiers=[],this.measure=0,this.clef="treble",this.endClef=void 0,this.resetFont(),this.options=Object.assign({vertical_bar_width:10,num_lines:5,fill_style:"#999999",left_bar:!0,right_bar:!0,spacing_between_lines_px:V.STAVE_LINE_DISTANCE,space_above_staff_ln:4,space_below_staff_ln:4,top_text_position:1,bottom_text_position:4,line_config:[]},s),this.bounds={x:this.x,y:this.y,w:this.width,h:0},this.defaultLedgerLineStyle={strokeStyle:"#444",lineWidth:1.4},this.resetLines(),this.addModifier(new kt(this.options.left_bar?Et.SINGLE:Et.NONE)),this.addEndModifier(new kt(this.options.right_bar?Et.SINGLE:Et.NONE))}setDefaultLedgerLineStyle(t){this.defaultLedgerLineStyle=t}getDefaultLedgerLineStyle(){return Object.assign(Object.assign({},this.getStyle()),this.defaultLedgerLineStyle)}space(t){return this.options.spacing_between_lines_px*t}resetLines(){this.options.line_config=[];for(let t=0;ti.getWidth()&&(e-=i.getWidth()),e}setRepetitionType(t,e=0){return this.modifiers.push(new xe(t,this.x,e)),this}setVoltaType(t,e,i){return this.modifiers.push(new ye(t,e,this.x,i)),this}setSection(t,e,i=0,s,n=!0){const a=new be(t,this.x+i,e,n);return s&&a.setFontSize(s),this.modifiers.push(a),this}setTempo(t,e){return this.modifiers.push(new ue(t,this.x,e)),this}setText(t,e,i={}){return this.modifiers.push(new fe(t,e,i)),this}getHeight(){return this.height}getSpacingBetweenLines(){return this.options.spacing_between_lines_px}getBoundingBox(){return new C(this.x,this.y,this.width,this.getBottomY()-this.y)}getBottomY(){const t=this.options,e=t.spacing_between_lines_px;return this.getYForLine(t.num_lines)+t.space_below_staff_ln*e}getBottomLineY(){return this.getYForLine(this.options.num_lines)}getYForLine(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+t*i+s*i}getLineForY(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return(t-this.y)/i-s}getYForTopText(t=0){return this.getYForLine(-t-this.options.top_text_position)}getYForBottomText(t=0){return this.getYForLine(this.options.bottom_text_position+t)}getYForNote(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+s*i+5*i-t*i}getYForGlyphs(){return this.getYForLine(3)}addModifier(t,e){return void 0!==e&&t.setPosition(e),t.setStave(this),this.formatted=!1,this.modifiers.push(t),this}addEndModifier(t){return this.addModifier(t,wt.END),this}setBegBarType(t){const{SINGLE:e,REPEAT_BEGIN:i,NONE:s}=Et;return t!==e&&t!==i&&t!==s||(this.modifiers[0].setType(t),this.formatted=!1),this}setEndBarType(t){return t!==Et.REPEAT_BEGIN&&(this.modifiers[1].setType(t),this.formatted=!1),this}setClefLines(t){return this.clef=t,this}setClef(t,e,i,s){void 0===s&&(s=wt.BEGIN),s===wt.END?this.endClef=t:this.clef=t;const n=this.getModifiers(s,ge.CATEGORY);return 0===n.length?this.addClef(t,e,i,s):n[0].setType(t,e,i),this}getClef(){return this.clef}setEndClef(t,e,i){return this.setClef(t,e,i,wt.END),this}getEndClef(){return this.endClef}setKeySignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,_e.CATEGORY);return 0===s.length?this.addKeySignature(t,e,i):s[0].setKeySig(t,e),this}setEndKeySignature(t,e){return this.setKeySignature(t,e,wt.END),this}setTimeSignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,Te.CATEGORY);return 0===s.length?this.addTimeSignature(t,e,i):s[0].setTimeSig(t),this}setEndTimeSignature(t,e){return this.setTimeSignature(t,e,wt.END),this}addKeySignature(t,e,i){return void 0===i&&(i=wt.BEGIN),this.addModifier(new _e(t,e).setPosition(i),i),this}addClef(t,e,i,s){return void 0===s||s===wt.BEGIN?this.clef=t:s===wt.END&&(this.endClef=t),this.addModifier(new ge(t,e,i),s),this}addEndClef(t,e,i){return this.addClef(t,e,i,wt.END),this}addTimeSignature(t,e,i){return this.addModifier(new Te(t,e),i),this}addEndTimeSignature(t,e){return this.addTimeSignature(t,e,wt.END),this}addTrebleGlyph(){return this.addClef("treble"),this}getModifiers(t,e){const i=void 0===t,s=void 0===e;return i&&s?this.modifiers:i?this.modifiers.filter((t=>e===t.getCategory())):s?this.modifiers.filter((e=>t===e.getPosition())):this.modifiers.filter((i=>t===i.getPosition()&&e===i.getCategory()))}sortByCategory(t,e){for(let i=t.length-1;i>=0;i--)for(let s=0;se[t[s+1].getCategory()]){const e=t[s];t[s]=t[s+1],t[s+1]=e}}format(){const t=this.modifiers[0],e=this.modifiers[1],i=this.getModifiers(wt.BEGIN),s=this.getModifiers(wt.END);let n,a,r;this.sortByCategory(i,ve),this.sortByCategory(s,we),i.length>1&&t.getType()===Et.REPEAT_BEGIN&&(i.push(i.splice(0,1)[0]),i.splice(0,0,new kt(Et.SINGLE))),s.indexOf(e)>0&&s.splice(0,0,new kt(Et.NONE));let h=0,l=this.x;for(let t=0;t0){t.save(),t.setFont(this.textFont);const e=t.measureText(""+this.measure).width;n=this.getYForTopText(0)+3,t.fillText(""+this.measure,this.x-e/2,n),t.restore()}return this}getVerticalBarWidth(){return this.options.vertical_bar_width}getConfigForLines(){return this.options.line_config}setConfigForLine(t,e){if(t>=this.options.num_lines||t<0)throw new b("StaveConfigError","The line number must be within the range of the number of lines in the Stave.");if(void 0===e.visible)throw new b("StaveConfigError","The line configuration object is missing the 'visible' property.");if("boolean"!=typeof e.visible)throw new b("StaveConfigError","The line configuration objects 'visible' property must be true or false.");return this.options.line_config[t]=e,this}setConfigForLines(t){if(t.length!==this.options.num_lines)throw new b("StaveConfigError","The length of the lines configuration array must match the number of lines in the Stave");for(const e in t)null==t[e].visible&&(t[e]=this.options.line_config[e]),this.options.line_config[e]=Object.assign(Object.assign({},this.options.line_config[e]),t[e]);return this.options.line_config=t,this}static formatBegModifiers(t){const e=e=>{let i=0;t.forEach((t=>{const s=t.getModifiers(wt.BEGIN,e);s.length>0&&s[0].getX()>i&&(i=s[0].getX())}));let s=0;t.forEach((t=>{s=0;t.getModifiers(wt.BEGIN,e).forEach((t=>{i-t.getX()>s&&(s=i-t.getX())}));const n=t.getModifiers(wt.BEGIN);let a=!1;n.forEach((t=>{t.getCategory()===e&&(a=!0),a&&s>0&&t.setX(t.getX()+s)})),t.setNoteStartX(t.getNoteStartX()+s)}))};t.forEach((t=>{t.formatted||t.format()})),e(x.Clef),e(x.KeySignature),e(x.TimeSignature);let i=0;t.forEach((t=>{t.getNoteStartX()>i&&(i=t.getNoteStartX())})),t.forEach((t=>{t.setNoteStartX(i)})),i=0,t.forEach((t=>{t.getModifiers(wt.BEGIN,x.Barline).forEach((t=>{t.getType()==Et.REPEAT_BEGIN&&t.getX()>i&&(i=t.getX())}))})),t.forEach((t=>{t.getModifiers(wt.BEGIN,x.Barline).forEach((t=>{t.getType()==Et.REPEAT_BEGIN&&t.setX(i)}))}))}}function Be(t,e,i,s,n){if(e!==Ce.type.BOLD_DOUBLE_LEFT&&e!==Ce.type.BOLD_DOUBLE_RIGHT)throw new b("InvalidConnector","A REPEAT_BEGIN or REPEAT_END type must be provided.");let a=3,o=3.5;e===Ce.type.BOLD_DOUBLE_RIGHT&&(a=-5,o=3),t.fillRect(i+a,s,1,n-s),t.fillRect(i-2,s,o,n-s)}Ee.TEXT_FONT={family:F.SANS_SERIF,size:8,weight:N.NORMAL,style:A.NORMAL};class Ce extends L{static get CATEGORY(){return x.StaveConnector}constructor(t,e){super(),this.thickness=V.STAVE_LINE_THICKNESS,this.width=3,this.top_stave=t,this.bottom_stave=e,this.type=Ce.type.DOUBLE,this.resetFont(),this.x_shift=0,this.texts=[]}setType(t){const e="string"==typeof t?Ce.typeString[t]:t;return Object.values(Ce.type).includes(e)&&(this.type=e),this}getType(){return this.type}setText(t,e={}){return this.texts.push({content:t,options:Object.assign({shift_x:0,shift_y:0},e)}),this}setXShift(t){if("number"!=typeof t)throw new b("InvalidType","x_shift must be a Number");return this.x_shift=t,this}getXShift(){return this.x_shift}draw(){const t=this.checkContext();this.setRendered();let e=this.top_stave.getYForLine(0),i=this.bottom_stave.getYForLine(this.bottom_stave.getNumLines()-1)+this.thickness,s=this.width,n=this.top_stave.getX();(this.type===Ce.type.SINGLE_RIGHT||this.type===Ce.type.BOLD_DOUBLE_RIGHT||this.type===Ce.type.THIN_DOUBLE)&&(n=this.top_stave.getX()+this.top_stave.getWidth());let a=i-e;switch(this.type){case Ce.type.SINGLE:case Ce.type.SINGLE_LEFT:case Ce.type.SINGLE_RIGHT:s=1;break;case Ce.type.DOUBLE:n-=this.width+2,e-=this.thickness,a+=.5;break;case Ce.type.BRACE:{s=12;const n=this.top_stave.getX()-2+this.x_shift,o=e,r=n,h=i,l=n-s,c=o+a/2,d=l-.9*s,m=o+.2*a,g=n+1.1*s,_=c-.135*a,x=g,b=c+.135*a,u=d,p=h-.2*a,f=l-s,y=p,S=n+.4*s,T=c+.135*a,v=S,w=c-.135*a,E=f,B=m;t.beginPath(),t.moveTo(n,o),t.bezierCurveTo(d,m,g,_,l,c),t.bezierCurveTo(x,b,u,p,r,h),t.bezierCurveTo(f,y,S,T,l,c),t.bezierCurveTo(v,w,E,B,n,o),t.fill(),t.stroke();break}case Ce.type.BRACKET:e-=6,i+=6,a=i-e,Z.renderGlyph(t,n-5,e,40,"bracketTop"),Z.renderGlyph(t,n-5,i,40,"bracketBottom"),n-=this.width+2;break;case Ce.type.BOLD_DOUBLE_LEFT:Be(t,this.type,n+this.x_shift,e,i-this.thickness);break;case Ce.type.BOLD_DOUBLE_RIGHT:Be(t,this.type,n,e,i-this.thickness);break;case Ce.type.THIN_DOUBLE:s=1,a-=this.thickness;break;case Ce.type.NONE:break;default:throw new b("InvalidType",`The provided StaveConnector.type (${this.type}) is invalid.`)}this.type!==Ce.type.BRACE&&this.type!==Ce.type.BOLD_DOUBLE_LEFT&&this.type!==Ce.type.BOLD_DOUBLE_RIGHT&&this.type!==Ce.type.NONE&&t.fillRect(n,e,s,a),this.type===Ce.type.THIN_DOUBLE&&t.fillRect(n-3,e,s,a),t.save(),t.setLineWidth(2),t.setFont(this.textFont);for(let e=0;et.isCenterAligned()))}getMetrics(){const{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}=this;return{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}}getCurrentTick(){return this.currentTick}setCurrentTick(t){this.currentTick=t,this.preFormatted=!1}addTickable(t,e){if(!t)throw new b("BadArgument","Invalid tickable added.");if(!t.shouldIgnoreTicks()){const e=t.getTicks();e.greaterThan(this.maxTicks)&&(this.maxTicks=e.clone(),this.maxTickable=t),(null==this.minTicks||e.lessThan(this.minTicks))&&(this.minTicks=e.clone(),this.minTickable=t)}return t.setTickContext(this),this.tickables.push(t),this.tickablesByVoice[e||0]=t,this.preFormatted=!1,this}preFormat(){if(this.preFormatted)return this;for(let t=0;t{e.addToModifierContext(new me);const s=(new Pe).addTickable(e).preFormat(),n=s.getMetrics();return s.setX(t+n.totalLeftPx),t+s.getWidth()+n.totalRightPx+i}),e)}static plotDebugging(t,e,i,s,n,a){const o=i+(a=Object.assign({stavePadding:V.currentMusicFont().lookupMetric("stave.padding")},a)).stavePadding,r=e.contextGaps;t.save(),t.setFont(F.SANS_SERIF,8),r.gaps.forEach((e=>{var i,a,r;i=o+e.x1,a=o+e.x2,r="rgba(100,200,100,0.4)",t.beginPath(),t.setStrokeStyle(r),t.setFillStyle(r),t.setLineWidth(1),t.fillRect(i,s,Math.max(a-i,0),n-s),t.setFillStyle("green"),t.fillText(Math.round(e.x2-e.x1).toString(),o+e.x1,n+12)})),t.setFillStyle("red"),t.fillText(`Loss: ${(e.totalCost||0).toFixed(2)} Shift: ${(e.totalShift||0).toFixed(2)} Gap: ${r.total.toFixed(2)}`,o-20,n+27),t.restore()}static FormatAndDraw(t,e,i,s){let n={auto_beam:!1,align_rests:!1};"object"==typeof s?n=Object.assign(Object.assign({},n),s):"boolean"==typeof s&&(n.auto_beam=s);const a=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(i),o=n.auto_beam?Le.applyAndGetBeams(a):[];return(new Ae).joinVoices([a]).formatToStave([a],e,{align_rests:n.align_rests,stave:e}),a.setStave(e).draw(t,e),o.forEach((e=>e.setContext(t).draw())),a.getBoundingBox()}static FormatAndDrawTab(t,e,i,s,n,a,o){let r={auto_beam:a,align_rests:!1};"object"==typeof o?r=Object.assign(Object.assign({},r),o):"boolean"==typeof o&&(r.auto_beam=o);const h=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(n),l=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(s),c=r.auto_beam?Le.applyAndGetBeams(h):[];(new Ae).joinVoices([h]).joinVoices([l]).formatToStave([h,l],i,{align_rests:r.align_rests}),h.draw(t,i),l.draw(t,e),c.forEach((e=>e.setContext(t).draw())),new Ce(i,e).setContext(t).draw()}static AlignRestsToNotes(t,e,i){t.forEach(((s,n)=>{if(m(s)&&s.isRest()){if(s.getTuplet()&&!i)return;const a=s.getGlyphProps().position.toUpperCase();if("R/4"!==a&&"B/4"!==a)return;if(e||s.getBeam()){const e=s.getKeyProps()[0];if(0===n)e.line=Ne(t,e.line,n,!1);else if(n>0&&nAe.AlignRestsToNotes(t.getTickables(),e)))}preCalculateMinTotalWidth(t){const e=V.currentMusicFont().lookupMetric("stave.unalignedNotePadding");let i=0,s=0,n=0;const a=[],o=[];if(this.hasMinTotalWidth)return this.minTotalWidth;if(!t)throw new b("BadArgument","'voices' required to run preCalculateMinTotalWidth");this.createTickContexts(t);const{list:r,map:h}=this.tickContexts;this.minTotalWidth=0,r.forEach((e=>{const r=h[e];r.preFormat(),r.getTickables().length{s+=t.getMetrics().width,n+=t.getTicks().value(),a.push(t.getMetrics().width),o.push(t.getTicks().value())}));const l=r.getWidth();this.minTotalWidth+=l})),this.hasMinTotalWidth=!0;const l=s>0?s/a.length:1/a.length,c=w(a.map((t=>Math.pow(t-l,2)))),d=Math.pow(c/a.length,.5)/l,m=n/o.length,g=w(o.map((t=>Math.pow(t-m,2)))),_=Math.pow(g/o.length,.5)/m,x=Math.max(_,d)*r.length*e,u=e*i;return this.minTotalWidth+Math.max(u,x)}getMinTotalWidth(){if(!this.hasMinTotalWidth)throw new b("NoMinTotalWidth","Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'");return this.minTotalWidth}static getResolutionMultiplier(t){if(!t||!t.length)throw new b("BadArgument","No voices to format");const e=t[0].getTotalTicks();return t.reduce(((t,i)=>{if(!i.getTotalTicks().equals(e))throw new b("TickMismatch","Voices should have same total note duration in ticks.");if(i.getMode()===jt.Mode.STRICT&&!i.isComplete())throw new b("IncompleteVoice","Voice does not have enough notes.");return Math.max(t,E.LCM(t,i.getResolutionMultiplier()))}),1)}createModifierContexts(t){if(0==t.length)return;const e=Ae.getResolutionMultiplier(t),i=new Map,s=[];t.forEach((t=>{const n=new E(0,e);t.getTickables().forEach((t=>{const e=n.numerator;let a=i.get(t.getStave());if(a||(i.set(t.getStave(),{}),a=i.get(t.getStave())),!(a?a[e]:void 0)){const t=new me;s.push(t),a[e]=t}t.addToModifierContext(a[e]),n.add(t.getTicks())}))})),this.modifierContexts.push({map:i,array:s,resolutionMultiplier:e})}createTickContexts(t){const e=function(t,e,i){if(0==t.length)return{map:{},array:[],list:[],resolutionMultiplier:0};const s={},n=[],a=[],o=Ae.getResolutionMultiplier(t);return t.forEach(((t,r)=>{const h=new E(0,o);t.getTickables().forEach((t=>{const o=h.numerator;if(!s[o]){const t=e({tickID:o});a.push(t),s[o]=t,n.push(o)}i(t,s[o],r),h.add(t.getTicks())}))})),{map:s,array:a,list:n.sort(((t,e)=>t-e)),resolutionMultiplier:o}}(t,(t=>new Pe(t)),((t,e,i)=>e.addTickable(t,i)));this.tickContexts=e;const i=this.tickContexts.array;return i.forEach((t=>{t.tContexts=i})),e}getTickContexts(){return this.tickContexts}preFormat(t=0,e,i,s){const n=this.tickContexts;if(!n)throw new b("NoTickContexts","preFormat requires TickContexts");const{list:a,map:o}=n;this.lossHistory=[],i&&s&&i.forEach((t=>t.setStave(s).preFormat()));let r=0,h=0;this.minTotalWidth=0;let l=0;a.forEach((t=>{const e=o[t];e.preFormat();const i=e.getWidth();this.minTotalWidth+=i;const s=e.getMaxTicks().value();l+=s;const n=e.getMetrics();r=r+h+n.totalLeftPx,e.setX(r),h=i-n.totalLeftPx}));const{globalSoftmax:c,softmaxFactor:d,maxIterations:m}=this.formatterOptions,g=w(a.map((t=>Math.pow(d,o[t].getMaxTicks().value()/l))));if(this.minTotalWidth=r+h,this.hasMinTotalWidth=!0,t<=0)return this.evaluate();const _=o[a[0]],x=o[a[a.length-1]];function u(t){return a.map(((e,i)=>{const s=o[e],n=s.getTickablesByVoice();let r;if(i>0){const e=o[a[i-1]];for(let h=i-1;h>=0;h--){const i=o[a[h]].getTickablesByVoice(),m=[];if(Object.keys(n).forEach((t=>{i[t]&&m.push(t)})),m.length>0){let a=0,o=1/0,h=0;if(m.forEach((t=>{const e=i[t].getTicks().value();e>a&&(r=i[t],a=e);const s=n[t],h=s.getX()-(s.getMetrics().modLeftPx+s.getMetrics().leftDisplacedHeadPx),l=i[t].getMetrics(),c=i[t].getX()+l.notePx+l.modRightPx+l.rightDisplacedHeadPx;o=Math.min(o,h-c)})),o=Math.min(o,s.getX()-(e.getX()+.05*t)),c){const e=l;h=Math.pow(d,a/e)/g*t}else void 0!==r&&(h=r.getVoice().softmax(a)*t);return{expectedDistance:h,maxNegativeShiftPx:o,fromTickable:r}}}}return{expectedDistance:0,fromTickablePx:0,maxNegativeShiftPx:0}}))}function f(t){const e=y/2;let i=0;return a.forEach(((s,n)=>{const a=o[s];if(n>0){const e=a.getX(),s=t[n],o=p(s.fromTickable).getX()+s.expectedDistance-(e+i);let r=0;o>0?i+=o:o<0&&(r=Math.min(s.maxNegativeShiftPx,Math.abs(o)),i+=-r),a.setX(e+i)}a.getCenterAlignedTickables().forEach((t=>{t.setCenterXShift(e-a.getX())}))})),x.getX()-_.getX()}const y=t-x.getMetrics().notePx-x.getMetrics().totalRightPx-_.getMetrics().totalLeftPx,S=V.currentMusicFont(),T=S.lookupMetric("stave.endPaddingMin"),v=S.lookupMetric("stave.endPaddingMax"),E=S.lookupMetric("stave.padding");let B=y;const C=u(B);let P=f(C);if(1===a.length)return 0;const N=((t,e)=>{let i=t/2;if(e.length>1)for(let t=1;t{let e=0;const i=x&&x.getMaxTickable();if(i){const s=i.getVoice();if(s.getTicksUsed().value()>s.getTotalTicks().value())return 2*vM&&F>0||P+k1;)B-=P-M,k=A(B),D=k-(v-T),P=f(u(B)),F--;return this.justifyWidth=t,this.evaluate()}evaluate(){const t=this.tickContexts,e=this.justifyWidth;this.contextGaps={total:0,gaps:[]},t.list.forEach(((e,i)=>{if(0===i)return;const s=t.list[i-1],n=t.map[s],a=t.map[e],o=n.getMetrics(),r=a.getMetrics(),h=n.getX()+o.notePx+o.totalRightPx,l=a.getX()-r.totalLeftPx,c=l-h;this.contextGaps.total+=c,this.contextGaps.gaps.push({x1:h,x2:l}),a.getFormatterMetrics().freedom.left=c,n.getFormatterMetrics().freedom.right=c})),this.durationStats={};const i=this.durationStats;this.voices.forEach((t=>{t.getTickables().forEach(((t,s,n)=>{const a=t.getTicks().clone().simplify().toString(),o=t.getMetrics(),r=t.getFormatterMetrics(),h=t.getX()+o.notePx+o.modRightPx+o.rightDisplacedHeadPx;let l=0;if(s{t.getTickables().forEach((t=>{const e=t.getTicks().clone().simplify().toString(),n=t.getFormatterMetrics();n.space.mean=i[e].mean,n.duration=e,n.iterations+=1,n.space.deviation=n.space.used-n.space.mean,s+=Math.pow(n.space.deviation,2)}))})),this.totalCost=Math.sqrt(s),this.lossHistory.push(this.totalCost),this.totalCost}tune(t){var e;const i=this.tickContexts;if(!i)return 0;const s=null!==(e=null==t?void 0:t.alpha)&&void 0!==e?e:.5;let n=0;return this.totalShift=0,i.list.forEach(((t,e,a)=>{const o=i.map[t],r=e>0?i.map[a[e-1]]:void 0,h=et.getFormatterMetrics().space.deviation)));l>0?n=-Math.min(o.getFormatterMetrics().freedom.right,Math.abs(l)):l<0&&(n=h?Math.min(h.getFormatterMetrics().freedom.right,Math.abs(l)):0),n*=s,this.totalShift+=n})),this.evaluate()}postFormat(){return this.modifierContexts.forEach((t=>{t.array.forEach((t=>t.postFormat()))})),this.tickContexts.list.forEach((t=>{this.tickContexts.map[t].postFormat()})),this}joinVoices(t){return this.createModifierContexts(t),this.hasMinTotalWidth=!1,this}format(t,e,i){const s=Object.assign({align_rests:!1},i);this.voices=t;const n=this.formatterOptions.softmaxFactor;return n&&this.voices.forEach((t=>t.setSoftmaxFactor(n))),this.alignRests(t,s.align_rests),this.createTickContexts(t),this.preFormat(e,s.context,t,s.stave),s.stave&&this.postFormat(),this}formatToStave(t,e,i){const s=Object.assign({context:e.getContext()},i),n=e.getNoteEndX()-e.getNoteStartX()-Ee.defaultPadding;return function(...t){Ae.DEBUG&&f("Vex.Flow.Formatter",t)}("Formatting voices to width: ",n),this.format(t,n,s)}getTickContext(t){var e;return null===(e=this.tickContexts)||void 0===e?void 0:e.map[t]}}var ke;Ae.DEBUG=!1,function(t){t[t.BOTTOM=-1]="BOTTOM",t[t.TOP=1]="TOP"}(ke||(ke={}));class De extends L{static get CATEGORY(){return x.Tuplet}static get LOCATION_TOP(){return ke.TOP}static get LOCATION_BOTTOM(){return ke.BOTTOM}static get NESTING_OFFSET(){return 15}static get metrics(){const t=V.currentMusicFont().getMetrics().tuplet;if(!t)throw new b("BadMetrics","tuplet missing");return t}constructor(t,e={}){if(super(),this.numerator_glyphs=[],this.denom_glyphs=[],!t||!t.length)throw new b("BadArguments","No notes provided for tuplet.");this.options=e,this.notes=t,this.num_notes=null!=this.options.num_notes?this.options.num_notes:t.length,this.options.beats_occupied&&this.beatsOccupiedDeprecationWarning(),this.notes_occupied=this.options.notes_occupied||this.options.beats_occupied||2,null!=this.options.bracketed?this.bracketed=this.options.bracketed:this.bracketed=t.some((t=>!t.hasBeam())),this.ratioed=null!=this.options.ratioed?this.options.ratioed:Math.abs(this.notes_occupied-this.num_notes)>1,this.point=3*V.NOTATION_FONT_SCALE/5,this.y_pos=16,this.x_pos=100,this.width=200,this.setTupletLocation(this.options.location||De.LOCATION_TOP),Ae.AlignRestsToNotes(t,!0,!0),this.resolveGlyphs(),this.attach()}attach(){for(let t=0;t=1;)this.numerator_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10);for(this.denom_glyphs=[],t=this.notes_occupied;t>=1;)this.denom_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10)}getNestedTupletCount(){const t=this.location,e=this.notes[0];let i=n(e,t),s=n(e,t);function n(t,e){return t.getTupletStack().filter((t=>t.location===e)).length}return this.notes.forEach((e=>{const a=n(e,t);i=a>i?a:i,s=a0&&(s=Math.min(a,s))}}}else{let t=De.metrics.bottomLine;this.notes.forEach((e=>{const i=e.getModifierContext();i&&(t=Math.max(t,i.getState().text_line+1))})),s=i.checkStave().getYForLine(t)+De.metrics.noteHeadOffset;for(let t=0;ts&&(s=e)}}return s+t+e}draw(){const t=this.checkContext();this.setRendered();const e=this.notes[0],i=this.notes[this.notes.length-1];this.bracketed?(this.x_pos=e.getTieLeftX()-5,this.width=i.getTieRightX()-this.x_pos+5):(this.x_pos=e.getStemX(),this.width=i.getStemX()-this.x_pos),this.y_pos=this.getYPosition();const s=(t,e)=>t+p(e.getMetrics().width);let n=this.numerator_glyphs.reduce(s,0);this.ratioed&&(n=this.denom_glyphs.reduce(s,n),n+=.32*this.point);const a=this.x_pos+this.width/2-n/2;if(this.bracketed){const e=this.width/2-n/2-5;e>0&&(t.fillRect(this.x_pos,this.y_pos,e,1),t.fillRect(this.x_pos+this.width/2+n/2+5,this.y_pos,e,1),t.fillRect(this.x_pos,this.y_pos+(this.location===De.LOCATION_BOTTOM?1:0),1,10*this.location),t.fillRect(this.x_pos+this.width,this.y_pos+(this.location===De.LOCATION_BOTTOM?1:0),1,10*this.location))}const o=V.currentMusicFont().lookupMetric("digits.shiftY",0);let r=0;if(this.numerator_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=p(e.getMetrics().width)})),this.ratioed){const e=a+r+.16*this.point,i=.06*this.point;t.beginPath(),t.arc(e,this.y_pos-.08*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),t.beginPath(),t.arc(e,this.y_pos+.12*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),r+=.32*this.point,this.denom_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=p(e.getMetrics().width)}))}}}function Me(t){let e=0;return t.forEach((t=>{t.keyProps&&t.keyProps.forEach((t=>{e+=t.line-3}))})),e>=0?nt.DOWN:nt.UP}const Fe="L",Oe="R",Re="B";class Le extends L{static get CATEGORY(){return x.Beam}getStemDirection(){return this.stem_direction}static getDefaultBeamGroups(t){t&&"c"!==t||(t="4/4");const e={"1/2":["1/2"],"2/2":["1/2"],"3/2":["1/2"],"4/2":["1/2"],"1/4":["1/4"],"2/4":["1/4"],"3/4":["1/4"],"4/4":["1/4"],"1/8":["1/8"],"2/8":["2/8"],"3/8":["3/8"],"4/8":["2/8"],"1/16":["1/16"],"2/16":["2/16"],"3/16":["3/16"],"4/16":["2/16"]}[t];if(void 0!==e)return e.map((t=>(new E).parse(t)));{const e=parseInt(t.split("/")[0],10),i=parseInt(t.split("/")[1],10);if(e%3==0)return[new E(3,i)];if(i>4)return[new E(2,i)];if(i<=4)return[new E(1,i)]}return[new E(1,4)]}static applyAndGetBeams(t,e,i){return Le.generateBeams(t.getTickables(),{groups:i,stem_direction:e})}static generateBeams(t,e={}){e.groups&&e.groups.length||(e.groups=[new E(2,8)]);const i=e.groups.map((t=>{if(!t.multiply)throw new b("InvalidBeamGroups","The beam groups must be an array of Vex.Flow.Fractions");return t.clone().multiply(V.RESOLUTION,1)})),s=t;let n=0,a=[],o=[];function r(){i.length-1>n?n+=1:n=0}!function(){let t=[],e=new E(0,1);s.forEach((s=>{if(t=[],s.shouldIgnoreTicks())return a.push(o),void(o=t);o.push(s);const h=i[n].clone(),l=(c=o,c.reduce(((t,e)=>e.getTicks().clone().add(t)),new E(0,1))).add(e);var c;const d=V.durationToNumber(s.getDuration())<8;if(d&&s.getTuplet()&&(h.numerator*=2),l.greaterThan(h)){if(!d){const e=o.pop();e&&t.push(e)}a.push(o);do{e=l.subtract(i[n]),r()}while(e.greaterThanEquals(i[n]));o=t}else l.equals(h)&&(a.push(o),e=new E(0,1),o=t,r())})),o.length>0&&a.push(o)}(),function(){const t=[];a.forEach((i=>{let s=[];i.forEach(((i,n,a)=>{const o=0===n||n===a.length-1,r=a[n-1],h=!e.beam_rests&&i.isRest(),l=e.beam_rests&&e.beam_middle_only&&i.isRest()&&o;let c=!1;if(e.maintain_stem_directions&&r&&!i.isRest()&&!r.isRest()){const t=r.getStemDirection();c=i.getStemDirection()!==t}const d=parseInt(i.getDuration(),10)<8;h||l||c||d?(s.length>0&&t.push(s),s=c?[i]:[]):s.push(i)})),s.length>0&&t.push(s)})),a=t}(),a.forEach((t=>{let i;if(e.maintain_stem_directions){const e=function(t){for(let e=0;e{t.setStemDirection(e)}))}(t,i)}));const h=a.filter((t=>{if(t.length>1){let e=!0;return t.forEach((t=>{t.getIntrinsicTicks()>=V.durationToTicks("4")&&(e=!1)})),e}return!1})),l=function(){const t=[];return a.forEach((e=>{let i;e.forEach((e=>{const s=e.getTuplet();s&&i!==s&&(i=s,t.push(i))}))})),t}(),c=[];return h.forEach((t=>{const i=new Le(t);e.show_stemlets&&(i.render_options.show_stemlets=!0),e.secondary_breaks&&(i.render_options.secondary_break_ticks=V.durationToTicks(e.secondary_breaks)),!0===e.flat_beams&&(i.render_options.flat_beams=!0,i.render_options.flat_beam_offset=e.flat_beam_offset),c.push(i)})),l.forEach((t=>{const e=t.notes[0].stem_direction===nt.DOWN?ke.BOTTOM:ke.TOP;t.setTupletLocation(e);let i=!1;for(let e=0;e=V.durationToTicks("4"))throw new b("BadArguments","Beams can only be applied to notes shorter than a quarter note.");let i,s;this.stem_direction=t[0].getStemDirection();let n=this.stem_direction;if(e&&m(t[0]))n=Me(t);else if(e&&_(t[0])){const e=t.reduce(((t,e)=>t+e.getStemDirection()),0);n=e>-1?nt.UP:nt.DOWN}for(i=0;it.getGlyphProps().beam_count)).reduce(((t,e)=>e>t?e:t))}breakSecondaryAt(t){return this.break_on_indices=t,this}setPartialBeamSideAt(t,e){return this.forcedPartialDirections[t]=e,this}unsetPartialBeamSideAt(t){return delete this.forcedPartialDirections[t],this}getSlopeY(t,e,i,s){return i+(t-e)*s}calculateSlope(){const{notes:t,stem_direction:e,render_options:{max_slope:i,min_slope:s,slope_iterations:n,slope_cost:a}}=this,o=t[0],r=function(t,e){const i=t.getStemExtents().topY,s=t.getStemX();return(e.getStemExtents().topY-i)/(e.getStemX()-s)}(o,t[t.length-1]),h=(i-s)/n;let l=Number.MAX_VALUE,c=0,d=0;for(let n=s;n<=i;n+=h){let i=0,s=0;for(let a=1;an)&&(h=n,o=Math.min(...s.getYs()),r=s.getBeamCount())}let l=a/t.length;const c=s+r*(1.5*i),d=o+c*-e;e===nt.DOWN&&ld&&(l=o-c),n?(e===nt.DOWN&&l>n||e===nt.UP&&l=8&&(c=-1!==this.break_on_indices.indexOf(h),this.render_options.secondary_break_ticks&&r>=this.render_options.secondary_break_ticks&&(r=0,c=!0));const d=l.getIntrinsicTicks(){const i=e.getStem();if(i){const s=e.getStemX();i.setNoteHeadXBounds(s,s),i.setContext(t).draw()}}),this)}drawBeamLines(t){const e=["4","8","16","32","64"],i=this.notes[0];let s=this.getBeamYToDraw();const n=i.getStemX(),a=this.render_options.beam_width*this.stem_direction;for(let i=0;i0||!0===e;return!e||n>0||(this.pos=s),o?this.matchSuccess():this.matchFail(s),{success:o,results:i,numMatches:n}}expectZeroOrMore(t){return this.expectOneOrMore(t,!0)}expect(t){if(Ye("Evaluating rule function:",t),!t)throw new b("Invalid rule function");let e;const i=t.bind(this.grammar)();if(i.token)e=this.matchToken(i.token,!0===i.noSpace),e.success&&(this.pos+=e.incrementPos);else{if(!i.expect)throw Ye(i),new b("Bad grammar! No `token` or `expect` property "+i);e=i.oneOrMore?this.expectOneOrMore(i):i.zeroOrMore?this.expectZeroOrMore(i):this.expectOne(i)}const s=[];return e.matches=s,e.results&&e.results.forEach((t=>s.push(He(t)))),i.run&&e.success&&i.run({matches:s}),e}}function je(...t){Qe.DEBUG&&f("Vex.Flow.EasyScore",t)}ze.DEBUG=!1;class Xe{constructor(t){this.builder=t}begin(){return this.LINE}LINE(){return{expect:[this.PIECE,this.PIECES,this.EOL]}}PIECE(){return{expect:[this.CHORDORNOTE,this.PARAMS],run:()=>this.builder.commitPiece()}}PIECES(){return{expect:[this.COMMA,this.PIECE],zeroOrMore:!0}}PARAMS(){return{expect:[this.DURATION,this.TYPE,this.DOTS,this.OPTS]}}CHORDORNOTE(){return{expect:[this.CHORD,this.SINGLENOTE],or:!0}}CHORD(){return{expect:[this.LPAREN,this.NOTES,this.RPAREN],run:t=>this.builder.addChord(t.matches[1])}}NOTES(){return{expect:[this.NOTE],oneOrMore:!0}}NOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE]}}SINGLENOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE],run:t=>{const e=t;this.builder.addSingleNote(e.matches[0],e.matches[1],e.matches[2])}}}ACCIDENTAL(){return{expect:[this.MICROTONES,this.ACCIDENTALS],maybe:!0,or:!0}}DOTS(){return{expect:[this.DOT],zeroOrMore:!0,run:t=>this.builder.setNoteDots(t.matches)}}TYPE(){return{expect:[this.SLASH,this.MAYBESLASH,this.TYPES],maybe:!0,run:t=>this.builder.setNoteType(t.matches[2])}}DURATION(){return{expect:[this.SLASH,this.DURATIONS],maybe:!0,run:t=>this.builder.setNoteDuration(t.matches[1])}}OPTS(){return{expect:[this.LBRACKET,this.KEYVAL,this.KEYVALS,this.RBRACKET],maybe:!0}}KEYVALS(){return{expect:[this.COMMA,this.KEYVAL],zeroOrMore:!0}}KEYVAL(){return{expect:[this.KEY,this.EQUALS,this.VAL],run:t=>this.builder.addNoteOption(t.matches[0],t.matches[2].slice(1,-1))}}VAL(){return{expect:[this.SVAL,this.DVAL],or:!0}}KEY(){return{token:"[a-zA-Z][a-zA-Z0-9]*"}}DVAL(){return{token:'["][^"]*["]'}}SVAL(){return{token:"['][^']*[']"}}NOTENAME(){return{token:"[a-gA-G]"}}OCTAVE(){return{token:"[0-9]+"}}ACCIDENTALS(){return{token:"bb|b|##|#|n"}}MICROTONES(){return{token:"bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o"}}DURATIONS(){return{token:"[0-9whq]+"}}TYPES(){return{token:"[rRsSmMhHgG]"}}LPAREN(){return{token:"[(]"}}RPAREN(){return{token:"[)]"}}COMMA(){return{token:"[,]"}}DOT(){return{token:"[.]"}}SLASH(){return{token:"[/]"}}MAYBESLASH(){return{token:"[/]?"}}EQUALS(){return{token:"[=]"}}LBRACKET(){return{token:"\\["}}RBRACKET(){return{token:"\\]"}}EOL(){return{token:"$"}}}class Ve{constructor(t){this.chord=[],this.dots=0,this.options={},this.duration=t}}class Ke{constructor(t){this.commitHooks=[],this.factory=t,this.reset()}reset(t){this.options=Object.assign({stem:"auto",clef:"treble"},t),this.elements={notes:[],accidentals:[]},this.rollingDuration="8",this.resetPiece()}getFactory(){return this.factory}getElements(){return this.elements}addCommitHook(t){this.commitHooks.push(t)}resetPiece(){je("resetPiece"),this.piece=new Ve(this.rollingDuration)}setNoteDots(t){je("setNoteDots:",t),t&&(this.piece.dots=t.length)}setNoteDuration(t){je("setNoteDuration:",t),this.rollingDuration=this.piece.duration=t||this.rollingDuration}setNoteType(t){je("setNoteType:",t),t&&(this.piece.type=t)}addNoteOption(t,e){je("addNoteOption: key:",t,"value:",e),this.piece.options[t]=e}addNote(t,e,i){je("addNote:",t,e,i),this.piece.chord.push({key:t,accid:e,octave:i})}addSingleNote(t,e,i){je("addSingleNote:",t,e,i),this.addNote(t,e,i)}addChord(t){je("startChord"),"object"!=typeof t[0]?this.addSingleNote(t[0]):t.forEach((t=>{t&&this.addNote(...t)})),je("endChord")}commitPiece(){je("commitPiece");const{factory:t}=this;if(!t)return;const e=Object.assign(Object.assign({},this.options),this.piece.options),i=p(e.stem,"BadArguments","options.stem is not defined").toLowerCase(),s=p(e.clef,"BadArguments","options.clef is not defined").toLowerCase(),{chord:n,duration:a,dots:o,type:r}=this.piece,h=et.accidentals,l=n.map((t=>{var e;return t.key+(h.includes(null!==(e=t.accid)&&void 0!==e?e:"")?t.accid:"")+"/"+t.octave})),c="auto"===i,d="g"==(null==r?void 0:r.toLowerCase())?t.GhostNote({duration:a,dots:o}):t.StaveNote({keys:l,duration:a,dots:o,type:r,clef:s,auto_stem:c});c||d.setStemDirection("up"===i?nt.UP:nt.DOWN);const m=[];n.forEach(((e,i)=>{const s=e.accid;if("string"==typeof s){const e=t.Accidental({type:s});d.addModifier(e,i),m.push(e)}else m.push(void 0)}));for(let t=0;tt(e,d,this))),this.elements.notes.push(d),this.elements.accidentals.push(m),this.resetPiece()}}function $e(t,e){void 0!==t.id&&e.setAttribute("id",t.id)}const Je=/\s*,\s*/;function qe(t,e){void 0!==t.class&&t.class.split(Je).forEach((t=>e.addClass(t)))}class Qe{constructor(t={}){this.defaults={clef:"treble",time:"4/4",stem:"auto"},this.setOptions(t)}set(t){return this.defaults=Object.assign(Object.assign({},this.defaults),t),this}setOptions(t){var e,i;const s=t.factory,n=null!==(e=t.builder)&&void 0!==e?e:new Ke(s);return this.options=Object.assign(Object.assign({commitHooks:[$e,qe,ft.easyScoreHook,Lt.easyScoreHook],throwOnError:!1},t),{factory:s,builder:n}),this.factory=s,this.builder=n,this.grammar=new Xe(this.builder),this.parser=new ze(this.grammar),null===(i=this.options.commitHooks)||void 0===i||i.forEach((t=>this.addCommitHook(t))),this}setContext(t){return this.factory.setContext(t),this}parse(t,e={}){this.builder.reset(e);const i=this.parser.parse(t);if(!i.success&&this.options.throwOnError)throw je(i),new b("Error parsing line: "+t);return i}beam(t,e){return this.factory.Beam({notes:t,options:e}),t}tuplet(t,e){return this.factory.Tuplet({notes:t,options:e}),t}notes(t,e={}){return e=Object.assign({clef:this.defaults.clef,stem:this.defaults.stem},e),this.parse(t,e),this.builder.getElements().notes}voice(t,e={}){return e=Object.assign({time:this.defaults.time},e),this.factory.Voice(e).addTickables(t)}addCommitHook(t){this.builder.addCommitHook(t)}}Qe.DEBUG=!1;const Ze="Ghost note must have valid initialization data to identify duration.";class ti extends It{static get CATEGORY(){return x.GhostNote}constructor(t){if(!t)throw new b("BadArguments",Ze);let e;if("string"==typeof t)e={duration:t};else{if("object"!=typeof t)throw new b("BadArguments",Ze);e=t}super(e),this.setWidth(0)}isRest(){return!0}setStave(t){return super.setStave(t),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){this.setRendered();for(let t=0;t=ri.type.TEXT&&t<=ri.type.MIXED&&(this.type=t),this}setCustomText(t,e){return this.custom_depress_text=t||"",this.custom_release_text=e||"",this}setLine(t){return this.line=t,this}drawBracketed(){const t=this.checkContext();let e,i,s=!1;this.notes.forEach(((n,a,o)=>{var r;s=!s;const h=n.getAbsoluteX(),l=n.checkStave().getYForBottomText(this.line+3);if(h{var s;e=!e;const n=i.checkStave(),a=i.getAbsoluteX(),o=n.getYForBottomText(this.line+3),r=null!==(s=V.currentMusicFont().lookupMetric(`pedalMarking.${e?"down":"up"}.point`))&&void 0!==s?s:V.NOTATION_FONT_SCALE;let h=0;e?this.custom_depress_text?(h=t.measureText(this.custom_depress_text).width,t.fillText(this.custom_depress_text,a-h/2,o)):oi("pedal_depress",t,a,o,r):this.custom_release_text?(h=t.measureText(this.custom_release_text).width,t.fillText(this.custom_release_text,a-h/2,o)):oi("pedal_release",t,a,o,r)}))}draw(){const t=this.checkContext();this.setRendered(),t.save(),t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color),t.setFont(this.textFont),function(...t){ri.DEBUG&&f("Vex.Flow.PedalMarking",t)}("Rendering Pedal Marking"),this.type===ri.type.BRACKET||this.type===ri.type.MIXED?(t.setLineWidth(this.render_options.bracket_line_width),this.drawBracketed()):this.type===ri.type.TEXT&&this.drawText(),t.restore()}}ri.DEBUG=!1,ri.TEXT_FONT={family:F.SERIF,size:12,weight:N.BOLD,style:A.ITALIC},ri.GLYPHS={pedal_depress:{code:"keyboardPedalPed"},pedal_release:{code:"keyboardPedalUp"}},ri.type={TEXT:1,BRACKET:2,MIXED:3},ri.typeString={text:ri.type.TEXT,bracket:ri.type.BRACKET,mixed:ri.type.MIXED};const hi={1:"repeat1Bar",2:"repeat2Bars",4:"repeat4Bars",slash:"repeatBarSlash"};class li extends ei{static get CATEGORY(){return x.RepeatNote}constructor(t,e,i){super(new Z(hi[t]||"repeat1Bar",V.currentMusicFont().lookupMetric("repeatNote.point",40),{category:"repeatNote"}),Object.assign({duration:"q",align_center:"slash"!==t},e),i)}}function ci(t,e,i,s,n,a,o){t.beginPath(),t.moveTo(e,i),t.lineTo(s,n),t.lineTo(a,o),t.lineTo(e,i),t.closePath(),t.fill()}class di extends L{static get CATEGORY(){return x.StaveLine}constructor(t){super(),this.setNotes(t),this.text="",this.resetFont(),this.render_options={padding_left:4,padding_right:3,line_width:1,line_dash:void 0,rounded_end:!0,color:void 0,draw_start_arrow:!1,draw_end_arrow:!1,arrowhead_length:10,arrowhead_angle:Math.PI/8,text_position_vertical:di.TextVerticalPosition.TOP,text_justification:di.TextJustification.CENTER}}setText(t){return this.text=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new b("BadArguments","Notes needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new b("BadArguments","Connected notes must have same number of indices.");return this.notes=t,this.first_note=t.first_note,this.first_indices=t.first_indices,this.last_note=t.last_note,this.last_indices=t.last_indices,this}applyLineStyle(){const t=this.checkContext(),e=this.render_options;e.line_dash&&t.setLineDash(e.line_dash),e.line_width&&t.setLineWidth(e.line_width),e.rounded_end?t.setLineCap("round"):t.setLineCap("square")}applyFontStyle(){const t=this.checkContext();t.setFont(this.textFont);const e=this.render_options.color;e&&(t.setStrokeStyle(e),t.setFillStyle(e))}drawArrowLine(t,e,i){const s=this.render_options.draw_start_arrow&&this.render_options.draw_end_arrow,n=e.x,a=e.y,o=i.x,r=i.y,h=Math.sqrt((o-n)*(o-n)+(r-a)*(r-a)),l=(h-this.render_options.arrowhead_length/3)/h;let c,d,m,g;this.render_options.draw_end_arrow||s?(c=Math.round(n+(o-n)*l),d=Math.round(a+(r-a)*l)):(c=o,d=r),this.render_options.draw_start_arrow||s?(m=n+(o-n)*(1-l),g=a+(r-a)*(1-l)):(m=n,g=a),this.render_options.color&&(t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color)),t.beginPath(),t.moveTo(m,g),t.lineTo(c,d),t.stroke(),t.closePath();const _=Math.atan2(r-a,o-n),x=Math.abs(this.render_options.arrowhead_length/Math.cos(this.render_options.arrowhead_angle));let b,u,p,f,y,S;(this.render_options.draw_end_arrow||s)&&(b=_+Math.PI+this.render_options.arrowhead_angle,p=o+Math.cos(b)*x,f=r+Math.sin(b)*x,u=_+Math.PI-this.render_options.arrowhead_angle,y=o+Math.cos(u)*x,S=r+Math.sin(u)*x,ci(t,p,f,o,r,y,S)),(this.render_options.draw_start_arrow||s)&&(b=_+this.render_options.arrowhead_angle,p=n+Math.cos(b)*x,f=a+Math.sin(b)*x,u=_-this.render_options.arrowhead_angle,y=n+Math.cos(u)*x,S=a+Math.sin(u)*x,ci(t,p,f,n,a,y,S))}draw(){const t=this.checkContext();this.setRendered();const e=this.first_note,i=this.last_note,s=this.render_options;t.save(),this.applyLineStyle();let n={x:0,y:0},a={x:0,y:0};this.first_indices.forEach(((o,r)=>{const h=this.last_indices[r];n=e.getModifierStartXY(2,o),a=i.getModifierStartXY(1,h);const l=n.y>a.y;n.x+=e.getMetrics().modRightPx+s.padding_left,a.x-=i.getMetrics().modLeftPx+s.padding_right;const c=e.getGlyphProps().getWidth();e.getKeyProps()[o].displaced&&1===e.getStemDirection()&&(n.x+=c+s.padding_left);i.getKeyProps()[h].displaced&&-1===i.getStemDirection()&&(a.x-=c+s.padding_right),n.y+=l?-3:1,a.y+=l?2:0,this.drawArrowLine(t,n,a)})),t.restore();const o=t.measureText(this.text).width,r=s.text_justification;let h=0;if(r===di.TextJustification.LEFT)h=n.x;else if(r===di.TextJustification.CENTER){h=(a.x-n.x)/2+n.x-o/2}else r===di.TextJustification.RIGHT&&(h=a.x-o);let l=0;const c=s.text_position_vertical;return c===di.TextVerticalPosition.TOP?l=e.checkStave().getYForTopText():c===di.TextVerticalPosition.BOTTOM&&(l=e.checkStave().getYForBottomText(V.TEXT_HEIGHT_OFFSET_HACK)),t.save(),this.applyFontStyle(),t.fillText(this.text,h,l),t.restore(),this}}di.TEXT_FONT=Object.assign({},L.TEXT_FONT),di.TextVerticalPosition={TOP:1,BOTTOM:2},di.TextJustification=ae;class mi extends L{static get CATEGORY(){return x.System}constructor(t={}){super(),this.setOptions(t),this.partStaves=[],this.partStaveInfos=[],this.partVoices=[]}setOptions(t={}){if(!t.factory)throw new b("NoFactory","System.setOptions(options) requires a factory.");this.factory=t.factory,this.options=Object.assign(Object.assign({factory:this.factory,x:10,y:10,width:500,spaceBetweenStaves:12,autoWidth:!1,noJustification:!1,debugFormatter:!1,formatIterations:0,noPadding:!1},t),{details:Object.assign({alpha:.5},t.details),formatOptions:Object.assign({},t.formatOptions)}),!1===this.options.noJustification&&void 0===t.width&&(this.options.autoWidth=!0)}getX(){return this.options.x}setX(t){this.options.x=t,this.partStaves.forEach((e=>{e.setX(t)}))}getY(){return this.options.y}setY(t){this.options.y=t,this.partStaves.forEach((e=>{e.setY(t)}))}getStaves(){return this.partStaves}getVoices(){return this.partVoices}setContext(t){return super.setContext(t),this.factory.setContext(t),this}addConnector(t="double"){return this.connector=this.factory.StaveConnector({top_stave:this.partStaves[0],bottom_stave:this.partStaves[this.partStaves.length-1],type:t}),this.connector}addStave(t){var e;const i=Object.assign({left_bar:!1},t.options),s=null!==(e=t.stave)&&void 0!==e?e:this.factory.Stave({x:this.options.x,y:this.options.y,width:this.options.width,options:i}),n=Object.assign(Object.assign({spaceAbove:0,spaceBelow:0,debugNoteMetrics:!1,noJustification:!1},t),{options:i}),a=this.getContext();return n.voices.forEach((t=>{t.setContext(a).setStave(s).getTickables().forEach((t=>t.setStave(s))),this.partVoices.push(t)})),this.partStaves.push(s),this.partStaveInfos.push(n),s}addVoices(t){const e=this.getContext();t.forEach((t=>{t.setContext(e),this.partVoices.push(t)}))}format(){const t=this.options.details;let e=0;const i=new Ae(t);this.formatter=i;let s=this.options.y,n=0;const a=[];this.partStaves.forEach(((t,e)=>{s+=t.space(this.partStaveInfos[e].spaceAbove),t.setY(s),s+=t.space(this.partStaveInfos[e].spaceBelow),s+=t.space(this.options.spaceBetweenStaves),this.partStaveInfos[e].debugNoteMetrics&&(a.push({y:s,stave:t}),s+=15),n=Math.max(n,t.getNoteStartX())})),this.partVoices.forEach((t=>{t.getTickables().forEach((t=>{const e=t.getStave();e&&t.setStave(e)}))})),i.joinVoices(this.partVoices),this.partStaves.forEach((t=>t.setNoteStartX(n))),this.options.autoWidth&&this.partVoices.length>0?(e=i.preCalculateMinTotalWidth(this.partVoices),this.options.width=e+Ee.rightPadding+(n-this.options.x),this.partStaves.forEach((t=>{t.setWidth(this.options.width)}))):e=this.options.noPadding?this.options.width-(n-this.options.x):this.options.width-(n-this.options.x)-Ee.defaultPadding,this.partVoices.length>0&&i.format(this.partVoices,this.options.noJustification?0:e,this.options.formatOptions),i.postFormat();for(let e=0;e{this.partVoices.forEach((i=>{i.getTickables().forEach((i=>{i.getStave()===e.stave&&vt.plotMetrics(t,i,e.y)}))}))}))}}class gi extends It{static get CATEGORY(){return x.TabNote}constructor(t,e=!1){super(t),this.glyphPropsArr=[],this.greatestString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>t>e?t:e)),this.leastString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>tthis.width}setStave(t){super.setStave(t);const e=t.getContext();if(this.setContext(e),e){this.width=0;for(let t=0;ti.width),this.width=Math.max(i.getWidth(),this.width)}this.glyphProps.getWidth=()=>this.width}const i=this.positions.map((({str:e})=>t.getYForLine(Number(e)-1)));return this.setYs(i),this.stem&&this.stem.setYBounds(this.getStemY(),this.getStemY()),this}getPositions(){return this.positions}getModifierStartXY(t,e){if(!this.preFormatted)throw new b("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new b("NoYValues","No Y-Values calculated for this note.");let i=0;if(t===tt.Position.LEFT)i=-2;else if(t===tt.Position.RIGHT)i=this.width+2;else if(t===tt.Position.BELOW||t===tt.Position.ABOVE){i=this.glyphProps.getWidth()/2}return{x:this.getAbsoluteX()+i,y:this.ys[e]}}getLineForRest(){return Number(this.positions[0].str)}preFormat(){this.preFormatted||(this.modifierContext&&this.modifierContext.preFormat(),this.preFormatted=!0)}getStemX(){return this.getCenterGlyphX()}getStemY(){const t=this.checkStave().getNumLines()-.5,e=nt.UP===this.stem_direction?-.5:t;return this.checkStave().getYForLine(e)}getStemExtents(){return this.checkStem().getExtents()}drawFlag(){var t;const{beam:e,glyphProps:i,render_options:{draw_stem:s}}=this,n=this.checkContext(),a=null==e&&s;if(i.flag&&a){const e=this.getStemX(),i=this.getStemDirection()===nt.DOWN?this.getStemY()-this.checkStem().getHeight()-(this.glyphProps?this.glyphProps.stem_down_extension:0):this.getStemY()-this.checkStem().getHeight()+(this.glyphProps?this.glyphProps.stem_up_extension:0);null===(t=this.flag)||void 0===t||t.render(n,e,i)}}drawModifiers(){this.modifiers.forEach((t=>{r(t)&&!this.render_options.draw_dots||(t.setContext(this.getContext()),t.drawWithStyle())}))}drawStemThrough(){const t=this.getStemX(),e=this.getStemY(),i=this.checkContext(),s=this.render_options.draw_stem,n=this.render_options.draw_stem_through_stave;if(s&&n){const s=function(t,e,i,s){const n=1!==s,a=-1!==s,o=i.getSpacingBetweenLines(),r=i.getNumLines(),h=[];return e.forEach((e=>{const l=e.indexOf(r)>-1,c=e.indexOf(1)>-1;if(n&&c||a&&l)return;1===e.length&&e.push(e[0]);const d=[];e.forEach(((e,n,a)=>{const h=1===e,l=e===r;let c=i.getYForLine(e-1);0!==n||h?n!==a.length-1||l||(c+=o/2-1):c-=o/2-1,d.push(c),1===s&&h?d.push(t-2):-1===s&&l&&d.push(t+2)})),h.push(d.sort(((t,e)=>t-e)))})),h}(e,function(t,e){const i=[];let s=[];for(let n=1;n<=t;n++)e.indexOf(n)>-1?(i.push(s),s=[]):s.push(n);return s.length>0&&i.push(s),i}(this.checkStave().getNumLines(),this.positions.map((t=>Number(t.str)))),this.checkStave(),this.getStemDirection());i.save(),i.setLineWidth(nt.WIDTH),s.forEach((e=>{0!==e.length&&(i.beginPath(),i.moveTo(t,e[0]),i.lineTo(t,e[e.length-1]),i.stroke(),i.closePath())})),i.restore()}}drawPositions(){var t;const e=this.checkContext(),i=this.getAbsoluteX(),s=this.ys;for(let n=0;n{const i=fi.GLYPHS[e];if(!i)throw new b("Invalid dynamics character: "+e);const s=p(this.render_options.glyph_font_size),n=new Z(i.code,s,{category:"textNote"});this.glyphs.push(n),t+=i.width})),this.setWidth(t),this.preFormatted=!0,this}draw(){this.setRendered();const t=this.getAbsoluteX(),e=this.checkStave().getYForLine(this.line+-3);pi("Rendering Dynamics: ",this.sequence);let i=t;this.glyphs.forEach(((t,s)=>{const n=this.sequence[s];t.render(this.checkContext(),i,e),i+=fi.GLYPHS[n].width}))}}fi.DEBUG=!1;class yi extends vt{static get CATEGORY(){return x.TimeSigNote}constructor(t,e){super({duration:"b"}),this.timeSig=new Te(t,e),this.setWidth(this.timeSig.getGlyph().getMetrics().width),this.ignore_ticks=!0}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkStave(),e=this.checkContext();this.setRendered();const i=this.timeSig.getGlyph();i.getContext()||i.setContext(e),i.setStave(t),i.setYShift(t.getYForLine(2)-t.getYForGlyphs()),i.renderToStave(this.getAbsoluteX())}}class Si extends L{static get CATEGORY(){return x.VibratoBracket}constructor(t){super(),t.start&&(this.start=t.start),t.stop&&(this.stop=t.stop),this.line=1,this.render_options={harsh:!1,wave_height:6,wave_width:4,wave_girth:2,vibrato_width:0}}setLine(t){return this.line=t,this}setHarsh(t){return this.render_options.harsh=t,this}draw(){const t=this.checkContext();this.setRendered();const e=this.start&&this.start.checkStave().getYForTopText(this.line)||this.stop&&this.stop.checkStave().getYForTopText(this.line)||0,i=this.start&&this.start.getAbsoluteX()||this.stop&&this.stop.checkStave().getTieStartX()||0,s=this.stop&&this.stop.getAbsoluteX()-this.stop.getWidth()-5||this.start&&this.start.checkStave().getTieEndX()-10||0;this.render_options.vibrato_width=s-i,function(...t){Si.DEBUG&&f("Vex.Flow.VibratoBracket",t)}("Rendering VibratoBracket: start_x:",i,"stop_x:",s,"y:",e),ce.renderVibrato(t,i,e,this.render_options)}}function Ti(...t){vi.DEBUG&&f("Vex.Flow.Factory",t)}Si.DEBUG=!1;class vi{static newFromElementId(t,e=500,i=200){return new vi({renderer:{elementId:t,width:e,height:i}})}constructor(t={}){Ti("New factory: ",t),this.options={stave:{space:10},renderer:{elementId:"",width:500,height:200,background:"#FFF"},font:vi.TEXT_FONT},this.setOptions(t)}reset(){this.renderQ=[],this.systems=[],this.staves=[],this.voices=[],this.stave=void 0}setOptions(t){this.options=Object.assign(Object.assign({},this.options),t),this.initRenderer(),this.reset()}initRenderer(){const{elementId:t,width:e,height:i,background:s}=this.options.renderer;if(null==t)return;if(""==t)throw Ti(this),new b("renderer.elementId not set in FactoryOptions");let n=this.options.renderer.backend;if(void 0===n){n=Jt(document.getElementById(t))?re.Backends.CANVAS:re.Backends.SVG}this.context=re.buildContext(t,n,e,i,s)}getContext(){return this.context}setContext(t){return this.context=t,this}getStave(){return this.stave}getVoices(){return this.voices}Stave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1*e}},t),s=new Ee(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}TabStave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1.3*e}},t),s=new _i(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}StaveNote(t){const e=new Ut(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GlyphNote(t,e,i){const s=new ei(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}RepeatNote(t,e,i){const s=new li(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}GhostNote(t){const e=new ti(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TextNote(t){const e=new pe(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}BarNote(t={}){const e=new Dt(t.type);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}ClefNote(t){const e=Object.assign({type:"treble",options:{size:"default",annotation:void 0}},t),i=new We(e.type,e.options.size,e.options.annotation);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}TimeSigNote(t){const e=Object.assign({time:"4/4"},t),i=new yi(e.time);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}KeySigNote(t){const e=new si(t.key,t.cancelKey,t.alterKey);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TabNote(t){const e=new gi(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GraceNote(t){const e=new ii(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),e}GraceNoteGroup(t){const e=new Xt(t.notes,t.slur);return e.setContext(this.context),e}Accidental(t){const e=new st(t.type);return e.setContext(this.context),e}Annotation(t){const e=Object.assign({text:"p",hJustify:ct.CENTER,vJustify:dt.BOTTOM},t),i=new mt(e.text);return i.setJustification(e.hJustify),i.setVerticalJustification(e.vJustify),i.setFont(e.font),i.setContext(this.context),i}ChordSymbol(t){const e=Object.assign({vJustify:"top",hJustify:"center",kerning:!0,reportWidth:!0},t),i=new Ot;return i.setHorizontal(e.hJustify),i.setVertical(e.vJustify),i.setEnableKerning(e.kerning),i.setReportWidth(e.reportWidth),"string"==typeof e.fontFamily&&"number"==typeof e.fontSize?"string"==typeof e.fontWeight?i.setFont(e.fontFamily,e.fontSize,e.fontWeight):i.setFont(e.fontFamily,e.fontSize,""):"number"==typeof e.fontSize&&i.setFontSize(e.fontSize),i.setContext(this.context),i}Articulation(t){var e;const i=new ft(null!==(e=null==t?void 0:t.type)&&void 0!==e?e:"a.");return null!=(null==t?void 0:t.position)&&i.setPosition(t.position),null!=(null==t?void 0:t.betweenLines)&&i.setBetweenLines(t.betweenLines),i.setContext(this.context),i}Ornament(t,e){const i=Object.assign({type:t,position:0,accidental:""},e),s=new Kt(t);return s.setPosition(i.position),i.upperAccidental&&s.setUpperAccidental(i.upperAccidental),i.lowerAccidental&&s.setLowerAccidental(i.lowerAccidental),void 0!==i.delayed&&s.setDelayed(i.delayed),s.setContext(this.context),s}TextDynamics(t){const e=Object.assign({text:"p",duration:"q",dots:0,line:0},t),i=new fi({text:e.text,line:e.line,duration:e.duration,dots:e.dots});return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}Fingering(t){const e=Object.assign({number:"0",position:"left"},t),i=new Lt(e.number);return i.setPosition(e.position),i.setContext(this.context),i}StringNumber(t,e=!0){const i=new he(t.number);return i.setPosition(t.position),i.setContext(this.context),i.setDrawCircle(e),i}TickContext(){return new Pe}ModifierContext(){return new me}MultiMeasureRest(t){const e=p(t.number_of_measures,"NoNumberOfMeasures"),i=new ai(e,t);return i.setContext(this.context),this.renderQ.push(i),i}Voice(t){const e=Object.assign({time:"4/4"},t),i=new jt(e.time);return this.voices.push(i),i}StaveConnector(t){const e=new Ce(t.top_stave,t.bottom_stave);return e.setType(t.type).setContext(this.context),this.renderQ.push(e),e}Formatter(t){return new Ae(t)}Tuplet(t){const e=Object.assign({notes:[],options:{}},t),i=new De(e.notes,e.options).setContext(this.context);return this.renderQ.push(i),i}Beam(t){var e,i,s,n,a;const o=new Le(t.notes,null===(e=t.options)||void 0===e?void 0:e.autoStem).setContext(this.context);return o.breakSecondaryAt(null!==(s=null===(i=t.options)||void 0===i?void 0:i.secondaryBeamBreaks)&&void 0!==s?s:[]),(null===(n=t.options)||void 0===n?void 0:n.partialBeamDirections)&&Object.entries(null===(a=t.options)||void 0===a?void 0:a.partialBeamDirections).forEach((([t,e])=>{o.setPartialBeamSideAt(Number(t),e)})),this.renderQ.push(o),o}Curve(t){const e=new Ue(t.from,t.to,t.options).setContext(this.context);return this.renderQ.push(e),e}StaveTie(t){var e;const i=new Yt({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices},t.text);return(null===(e=t.options)||void 0===e?void 0:e.direction)&&i.setDirection(t.options.direction),i.setContext(this.context),this.renderQ.push(i),i}StaveLine(t){var e,i;const s=new di({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices});return(null===(e=t.options)||void 0===e?void 0:e.text)&&s.setText(t.options.text),(null===(i=t.options)||void 0===i?void 0:i.font)&&s.setFont(t.options.font),s.setContext(this.context),this.renderQ.push(s),s}VibratoBracket(t){const e=new Si({start:t.from,stop:t.to});return t.options.line&&e.setLine(t.options.line),t.options.harsh&&e.setHarsh(t.options.harsh),e.setContext(this.context),this.renderQ.push(e),e}TextBracket(t){const e=new ui({start:t.from,stop:t.to,text:t.text,superscript:t.options.superscript,position:t.options.position});return t.options.line&&e.setLine(t.options.line),t.options.font&&e.setFont(t.options.font),e.setContext(this.context),this.renderQ.push(e),e}System(t={}){t.factory=this;const e=new mi(t).setContext(this.context);return this.systems.push(e),e}EasyScore(t={}){return t.factory=this,new Qe(t)}PedalMarking(t){const e=Object.assign({notes:[],options:{style:"mixed"}},t),i=new ri(e.notes);return i.setType(ri.typeString[e.options.style]),i.setContext(this.context),this.renderQ.push(i),i}NoteSubGroup(t){const e=Object.assign({notes:[]},t),i=new Vt(e.notes);return i.setContext(this.context),i}draw(){const t=this.context;this.systems.forEach((e=>e.setContext(t).format())),this.staves.forEach((e=>e.setContext(t).draw())),this.voices.forEach((e=>e.setContext(t).draw())),this.renderQ.forEach((e=>{e.isRendered()||e.setContext(t).draw()})),this.systems.forEach((e=>e.setContext(t).draw())),this.reset()}}vi.DEBUG=!1,vi.TEXT_FONT=Object.assign({},L.TEXT_FONT);class wi extends gi{static get CATEGORY(){return x.GraceTabNote}constructor(t){super(t,!1),this.render_options=Object.assign(Object.assign({},this.render_options),{y_shift:.3,scale:.6,font:`7.5pt ${F.SANS_SERIF}`}),this.updateWidth()}}class Ei{constructor(t){this.music=new et,this.setKey(t)}setKey(t){return this.key=t,this.reset(),this}getKey(){return this.key}reset(){this.keyParts=this.music.getKeyParts(this.key),this.keyString=this.keyParts.root,this.keyParts.accidental&&(this.keyString+=this.keyParts.accidental);if(!et.scaleTypes[this.keyParts.type])throw new b("BadArguments",`Unsupported key type: ${this.key}`);this.scale=this.music.getScaleTones(this.music.getNoteValue(this.keyString),et.scaleTypes[this.keyParts.type]),this.scaleMap={},this.scaleMapByValue={},this.originalScaleMapByValue={};const t=et.root_indices[this.keyParts.root];for(let e=0;es?Ci.SLIDE_DOWN:Ci.SLIDE_UP}this.direction=e,this.render_options.cp1=11,this.render_options.cp2=14,this.render_options.y_shift=.5,this.resetFont()}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new b("BadArguments","No Y-values to render");const e=this.checkContext(),i=t.first_x_px,s=t.first_ys,n=t.last_x_px,a=t.direction;if(a!==Ci.SLIDE_UP&&a!==Ci.SLIDE_DOWN)throw new b("BadSlide","Invalid slide direction");const o=this.notes.first_indices;for(let t=0;tthis.tuningValues.length)throw new b("BadArguments",`String number must be between 1 and ${this.tuningValues.length}:${t}`);return this.tuningValues[e-1]}getValueForFret(t,e){const i=this.getValueForString(e),s=Number(t);if(s<0)throw new b("BadArguments",`Fret number must be 0 or higher: ${t}`);return i+s}getNoteForFret(t,e){const i=this.getValueForFret(t,e),s=Math.floor(i/12),n=i%12;return`${V.integerToNote(n)}/${s}`}}var Ai=function(t,e,i,s){return new(i||(i=Promise))((function(n,a){function o(t){try{h(s.next(t))}catch(t){a(t)}}function r(t){try{h(s.throw(t))}catch(t){a(t)}}function h(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,r)}h((s=s.apply(t,e||[])).next())}))};class ki{static get BUILD(){return{VERSION:"4.2.6",ID:"103aad2b14837418c5e96c9e078edd036fcddf60",DATE:"2024-08-26T20:16:17.134Z"}}static setMusicFont(...t){const e=t.map((t=>F.load(t)));return V.MUSIC_FONT_STACK=e,Z.MUSIC_FONT_STACK=e.slice(),Z.CURRENT_CACHE_KEY=t.join(","),e}static fetchMusicFont(t,e){return Ai(this,void 0,void 0,(function*(){}))}static getMusicFont(){return V.MUSIC_FONT_STACK.map((t=>t.getName()))}static getMusicFontStack(){return V.MUSIC_FONT_STACK}static get RENDER_PRECISION_PLACES(){return V.RENDER_PRECISION_PLACES}static set RENDER_PRECISION_PLACES(t){V.RENDER_PRECISION_PLACES=t}static get SOFTMAX_FACTOR(){return V.SOFTMAX_FACTOR}static set SOFTMAX_FACTOR(t){V.SOFTMAX_FACTOR=t}static get NOTATION_FONT_SCALE(){return V.NOTATION_FONT_SCALE}static set NOTATION_FONT_SCALE(t){V.NOTATION_FONT_SCALE=t}static get TABLATURE_FONT_SCALE(){return V.TABLATURE_FONT_SCALE}static set TABLATURE_FONT_SCALE(t){V.TABLATURE_FONT_SCALE=t}static get RESOLUTION(){return V.RESOLUTION}static set RESOLUTION(t){V.RESOLUTION=t}static get SLASH_NOTEHEAD_WIDTH(){return V.SLASH_NOTEHEAD_WIDTH}static set SLASH_NOTEHEAD_WIDTH(t){V.SLASH_NOTEHEAD_WIDTH=t}static get STAVE_LINE_DISTANCE(){return V.STAVE_LINE_DISTANCE}static set STAVE_LINE_DISTANCE(t){V.STAVE_LINE_DISTANCE=t}static get STAVE_LINE_THICKNESS(){return V.STAVE_LINE_THICKNESS}static set STAVE_LINE_THICKNESS(t){V.STAVE_LINE_THICKNESS=t}static get STEM_HEIGHT(){return V.STEM_HEIGHT}static set STEM_HEIGHT(t){V.STEM_HEIGHT=t}static get STEM_WIDTH(){return V.STEM_WIDTH}static set STEM_WIDTH(t){V.STEM_WIDTH=t}static get TIME4_4(){return V.TIME4_4}static get accidentalMap(){return V.accidentalMap}static get unicode(){return V.unicode}static keySignature(t){return V.keySignature(t)}static hasKeySignature(t){return V.hasKeySignature(t)}static getKeySignatures(){return V.getKeySignatures()}static clefProperties(t){return V.clefProperties(t)}static keyProperties(t,e,i){return V.keyProperties(t,e,i)}static durationToTicks(t){return V.durationToTicks(t)}}ki.Accidental=st,ki.Annotation=mt,ki.Articulation=ft,ki.Barline=kt,ki.BarNote=Dt,ki.Beam=Le,ki.Bend=Mt,ki.BoundingBox=C,ki.BoundingBoxComputation=P,ki.CanvasContext=Qt,ki.ChordSymbol=Ot,ki.Clef=ge,ki.ClefNote=We,ki.Crescendo=Ie,ki.Curve=Ue,ki.Dot=Rt,ki.EasyScore=Qe,ki.Element=L,ki.Factory=vi,ki.Font=F,ki.Formatter=Ae,ki.Fraction=E,ki.FretHandFinger=Lt,ki.GhostNote=ti,ki.Glyph=Z,ki.GlyphNote=ei,ki.GraceNote=ii,ki.GraceNoteGroup=Xt,ki.GraceTabNote=wi,ki.KeyManager=Ei,ki.KeySignature=_e,ki.KeySigNote=si,ki.Modifier=tt,ki.ModifierContext=me,ki.MultiMeasureRest=ai,ki.Music=et,ki.Note=vt,ki.NoteHead=Wt,ki.NoteSubGroup=Vt,ki.Ornament=Kt,ki.Parenthesis=$t,ki.Parser=ze,ki.PedalMarking=ri,ki.Registry=R,ki.RenderContext=yt,ki.Renderer=re,ki.RepeatNote=li,ki.Repetition=xe,ki.Stave=Ee,ki.StaveConnector=Ce,ki.StaveHairpin=Bi,ki.StaveLine=di,ki.StaveModifier=At,ki.StaveNote=Ut,ki.StaveTempo=ue,ki.StaveText=fe,ki.StaveTie=Yt,ki.Stem=nt,ki.StringNumber=he,ki.Stroke=le,ki.SVGContext=ie,ki.System=mi,ki.TabNote=gi,ki.TabSlide=Ci,ki.TabStave=_i,ki.TabTie=Ht,ki.TextBracket=ui,ki.TextDynamics=fi,ki.TextFormatter=lt,ki.TextNote=pe,ki.TickContext=Pe,ki.TimeSignature=Te,ki.TimeSigNote=yi,ki.Tremolo=Pi,ki.Tuning=Ni,ki.Tuplet=De,ki.Vibrato=ce,ki.VibratoBracket=Si,ki.Voice=jt,ki.Volta=ye,ki.AnnotationHorizontalJustify=ct,ki.AnnotationVerticalJustify=dt,ki.ChordSymbolHorizontalJustify=Bt,ki.ChordSymbolVerticalJustify=Ct,ki.SymbolTypes=Pt,ki.SymbolModifiers=Nt,ki.CurvePosition=Ge,ki.FontWeight=N,ki.FontStyle=A,ki.ModifierPosition=J,ki.RendererBackends=se,ki.RendererLineEndType=ne,ki.BarlineType=Et,ki.StaveModifierPosition=wt,ki.VoltaType=oe,ki.TextBracketPosition=bi,ki.TextJustification=ae,ki.VoiceMode=zt;const Di={smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}},Mi={resolution:1e3,fontFamily:"VexFlowCustom",glyphs:{vexAccidentalMicrotonal1:{x_min:-171.5,x_max:483.1875,ha:493,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 "},vexAccidentalMicrotonal3:{x_min:0,x_max:430.75,ha:360,o:"m -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z "},vexAccidentalMicrotonal4:{x_min:0,x_max:430.75,ha:360,o:"m 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z "},vexNoteHeadRectBlack:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 "},vexNoteHeadRectWhite:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100"},vexWiggleArpeggioUp:{x_min:58.53125,x_max:228.671875,ha:294,o:"m 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 "}}};const Fi={glyphs:{bracketTop:{x_min:0,x_max:491,y_min:0,y_max:279,ha:279,o:"m 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z"},bracketBottom:{x_min:0,x_max:491,y_min:-279,y_max:0,ha:279,o:"m 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z"},segno:{x_min:0,x_max:654,y_min:0,y_max:869,ha:869,o:"m 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z"},coda:{x_min:0,x_max:745,y_min:-113,y_max:735,ha:848,o:"m 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z"},gClef:{x_min:0,x_max:640,y_min:-666,y_max:1112,ha:1778,o:"m 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z"},cClef:{x_min:0,x_max:627,y_min:-480,y_max:482,ha:962,o:"m 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z"},fClef:{x_min:0,x_max:664,y_min:-617,y_max:251,ha:868,o:"m 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z"},unpitchedPercussionClef1:{x_min:0,x_max:352,y_min:-252,y_max:252,ha:504,o:"m 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z"},"6stringTabClef":{x_min:0,x_max:439,y_min:-743,y_max:746,ha:1489,o:"m 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z"},timeSig0:{x_min:15,x_max:389,y_min:-254,y_max:255,ha:509,o:"m 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z"},timeSig1:{x_min:15,x_max:336,y_min:-243,y_max:245,ha:488,o:"m 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z"},timeSig2:{x_min:15,x_max:377,y_min:-243,y_max:245,ha:488,o:"m 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z"},timeSig3:{x_min:15,x_max:364,y_min:-244,y_max:244,ha:488,o:"m 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z"},timeSig4:{x_min:14,x_max:442,y_min:-248,y_max:249,ha:497,o:"m 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z"},timeSig5:{x_min:15,x_max:362,y_min:-244,y_max:246,ha:490,o:"m 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z"},timeSig6:{x_min:15,x_max:387,y_min:-244,y_max:245,ha:489,o:"m 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z"},timeSig7:{x_min:15,x_max:366,y_min:-250,y_max:251,ha:501,o:"m 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z"},timeSig8:{x_min:15,x_max:393,y_min:-248,y_max:246,ha:494,o:"m 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z"},timeSig9:{x_min:15,x_max:387,y_min:-244,y_max:245,ha:489,o:"m 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z"},timeSigCommon:{x_min:0,x_max:463,y_min:-256,y_max:258,ha:514,o:"m 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z"},timeSigCutCommon:{x_min:0,x_max:463,y_min:-376,y_max:388,ha:764,o:"m 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z"},timeSigPlus:{x_min:0,x_max:408,y_min:-204,y_max:204,ha:408,o:"m 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z"},noteheadDoubleWhole:{x_min:0,x_max:538,y_min:-178,y_max:179,ha:357,o:"m 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z"},noteheadWhole:{x_min:0,x_max:373,y_min:-134,y_max:136,ha:270,o:"m 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z"},noteheadHalf:{x_min:0,x_max:325,y_min:-133,y_max:132,ha:265,o:"m 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z"},noteheadBlack:{x_min:0,x_max:325,y_min:-133,y_max:132,ha:265,o:"m 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z"},noteheadXBlack:{x_min:0,x_max:325,y_min:-132,y_max:132,ha:264,o:"m 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z"},noteheadCircleX:{x_min:0,x_max:325,y_min:-162,y_max:163,ha:325,o:"m 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:432,y_min:-179,y_max:177,ha:356,o:"m 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z"},noteheadSquareWhite:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z"},noteheadSquareBlack:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 446 180 l 0 180 l 0 -180 l 446 -180 z"},noteheadTriangleUpBlack:{x_min:0,x_max:310,y_min:-136,y_max:122,ha:258,o:"m 223 176 l 0 -196 l 446 -196 z"},noteheadSlashedDoubleWhole1:{x_min:-66,x_max:456,y_min:-213,y_max:212,ha:425,o:"m 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z"},noteheadSlashedWhole1:{x_min:-75,x_max:448,y_min:-211,y_max:214,ha:425,o:"m 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z"},noteheadSlashedHalf1:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z"},noteheadSlashedBlack1:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z"},noteheadSlashedDoubleWhole2:{x_min:-66,x_max:456,y_min:-213,y_max:212,ha:425,o:"m 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z"},noteheadSlashedWhole2:{x_min:-75,x_max:448,y_min:-212,y_max:214,ha:426,o:"m 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z"},noteheadSlashedHalf2:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z"},noteheadSlashedBlack2:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:373,y_min:-178,y_max:179,ha:357,o:"m 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z"},noteheadDiamondWhole:{x_min:0,x_max:373,y_min:-133,y_max:132,ha:265,o:"m 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z"},noteheadDiamondHalf:{x_min:0,x_max:335,y_min:-132,y_max:133,ha:265,o:"m 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z"},noteheadDiamondBlack:{x_min:0,x_max:335,y_min:-132,y_max:133,ha:265,o:"m 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z"},noteheadParenthesisRight:{x_min:0,x_max:75,y_min:-209,y_max:212,ha:421,o:"m 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z"},noteheadParenthesisLeft:{x_min:0,x_max:75,y_min:-212,y_max:209,ha:421,o:"m 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z"},noteheadMoonBlack:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:339,y_min:-136,y_max:122,ha:258,o:"m 0 176 l 0 -196 l 488 -196 z"},noteheadTriangleRightBlack:{x_min:0,x_max:339,y_min:-136,y_max:122,ha:258,o:"m 488 176 l 0 -196 l 488 -196 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:310,y_min:-136,y_max:122,ha:258,o:"m 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z"},augmentationDot:{x_min:0,x_max:100,y_min:-50,y_max:50,ha:100,o:"m 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z"},tremolo1:{x_min:0,x_max:290,y_min:-93,y_max:96,ha:189,o:"m 0 48 l 0 -134 l 418 -43 l 418 138 z"},flag8thUp:{x_min:0,x_max:289,y_min:-817,y_max:12,ha:829,o:"m 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z"},flag8thDown:{x_min:0,x_max:309,y_min:-12,y_max:817,ha:829,o:"m 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z"},flag16thUp:{x_min:0,x_max:279,y_min:-820,y_max:12,ha:832,o:"m 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z"},flag16thDown:{x_min:0,x_max:309,y_min:-26,y_max:803,ha:829,o:"m 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z"},flag32ndUp:{x_min:0,x_max:279,y_min:-821,y_max:186,ha:1007,o:"m 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z"},flag32ndDown:{x_min:0,x_max:309,y_min:-216,y_max:803,ha:1019,o:"m 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z"},flag64thUp:{x_min:0,x_max:279,y_min:-822,y_max:373,ha:1195,o:"m 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z"},flag64thDown:{x_min:0,x_max:309,y_min:-403,y_max:804,ha:1207,o:"m 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z"},flag128thUp:{x_min:0,x_max:279,y_min:-821,y_max:573,ha:1394,o:"m 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z"},flag128thDown:{x_min:0,x_max:309,y_min:-591,y_max:803,ha:1394,o:"m 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z"},accidentalFlat:{x_min:0,x_max:203,y_min:-176,y_max:453,ha:629,o:"m 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z"},accidentalNatural:{x_min:0,x_max:171,y_min:-323,y_max:325,ha:648,o:"m 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z"},accidentalSharp:{x_min:0,x_max:244,y_min:-333,y_max:334,ha:667,o:"m 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z"},accidentalDoubleSharp:{x_min:0,x_max:275,y_min:-137,y_max:138,ha:275,o:"m 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z"},accidentalDoubleFlat:{x_min:0,x_max:371,y_min:-176,y_max:453,ha:629,o:"m 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z"},accidentalParensLeft:{x_min:0,x_max:75,y_min:-212,y_max:209,ha:421,o:"m 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z"},accidentalParensRight:{x_min:0,x_max:75,y_min:-209,y_max:212,ha:421,o:"m 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:193,y_min:-176,y_max:452,ha:628,o:"m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:422,y_min:-176,y_max:452,ha:628,o:"m 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:180,y_min:-316,y_max:320,ha:636,o:"m 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z"},accidentalThreeQuarterTonesSharpStein:{x_min:0,x_max:290,y_min:-328,y_max:339,ha:667,o:"m 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z"},accidentalBuyukMucennebFlat:{x_min:0,x_max:277,y_min:-176,y_max:454,ha:630,o:"m 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z"},accidentalBuyukMucennebSharp:{x_min:0,x_max:348,y_min:-332,y_max:334,ha:666,o:"m 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z"},accidentalBakiyeFlat:{x_min:0,x_max:277,y_min:-176,y_max:454,ha:630,o:"m 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:348,y_min:-316,y_max:318,ha:634,o:"m 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z"},articAccentAbove:{x_min:0,x_max:361,y_min:0,y_max:235,ha:235,o:"m 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z"},articAccentBelow:{x_min:0,x_max:361,y_min:-235,y_max:0,ha:235,o:"m 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z"},articTenutoAbove:{x_min:0,x_max:316,y_min:0,y_max:46,ha:46,o:"m 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z"},articTenutoBelow:{x_min:0,x_max:316,y_min:-46,y_max:0,ha:46,o:"m 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z"},articStaccatoAbove:{x_min:0,x_max:78,y_min:0,y_max:78,ha:78,o:"m 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z"},articStaccatoBelow:{x_min:0,x_max:78,y_min:-78,y_max:0,ha:78,o:"m 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z"},articStaccatissimoAbove:{x_min:0,x_max:127,y_min:0,y_max:248,ha:248,o:"m 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z"},articStaccatissimoBelow:{x_min:0,x_max:127,y_min:-248,y_max:0,ha:248,o:"m 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z"},articMarcatoAbove:{x_min:1,x_max:296,y_min:0,y_max:253,ha:253,o:"m 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z"},articMarcatoBelow:{x_min:0,x_max:295,y_min:-253,y_max:0,ha:253,o:"m 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z"},fermataAbove:{x_min:0,x_max:622,y_min:0,y_max:368,ha:368,o:"m 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z"},fermataBelow:{x_min:0,x_max:622,y_min:-368,y_max:0,ha:368,o:"m 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z"},fermataLongAbove:{x_min:0,x_max:623,y_min:0,y_max:368,ha:368,o:"m 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z"},fermataLongBelow:{x_min:0,x_max:623,y_min:-368,y_max:0,ha:368,o:"m 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z"},fermataVeryLongAbove:{x_min:0,x_max:842,y_min:0,y_max:549,ha:549,o:"m 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z"},fermataVeryLongBelow:{x_min:0,x_max:842,y_min:-549,y_max:0,ha:549,o:"m 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z"},fermataShortAbove:{x_min:0,x_max:642,y_min:0,y_max:454,ha:454,o:"m 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z"},fermataShortBelow:{x_min:0,x_max:642,y_min:-454,y_max:0,ha:454,o:"m 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z"},breathMarkComma:{x_min:0,x_max:191,y_min:0,y_max:321,ha:321,o:"m 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z"},caesura:{x_min:0,x_max:380,y_min:0,y_max:490,ha:490,o:"m 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z"},caesuraCurved:{x_min:0,x_max:368,y_min:0,y_max:491,ha:491,o:"m 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z"},restMaxima:{x_min:0,x_max:450,y_min:-250,y_max:250,ha:500,o:"m 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z"},restDoubleWhole:{x_min:0,x_max:125,y_min:-11,y_max:262,ha:273,o:"m 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z"},restWhole:{x_min:0,x_max:325,y_min:-131,y_max:5,ha:136,o:"m 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z"},restWholeLegerLine:{x_min:-139,x_max:464,y_min:-122,y_max:14,ha:136,o:"m 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z"},restHalf:{x_min:0,x_max:325,y_min:-4,y_max:132,ha:136,o:"m 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z"},restHalfLegerLine:{x_min:-139,x_max:464,y_min:-14,y_max:122,ha:136,o:"m 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z"},restQuarter:{x_min:0,x_max:235,y_min:-331,y_max:401,ha:732,o:"m 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z"},rest8th:{x_min:0,x_max:276,y_min:-255,y_max:204,ha:459,o:"m 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z"},rest16th:{x_min:1,x_max:344,y_min:-507,y_max:204,ha:711,o:"m 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z"},rest32nd:{x_min:0,x_max:391,y_min:-507,y_max:460,ha:967,o:"m 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z"},rest64th:{x_min:0,x_max:423,y_min:-758,y_max:464,ha:1222,o:"m 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z"},rest128th:{x_min:-1,x_max:475,y_min:-759,y_max:717,ha:1476,o:"m 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z"},dynamicPiano:{x_min:-95,x_max:317,y_min:-163,y_max:263,ha:426,o:"m 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z"},dynamicMezzo:{x_min:-7,x_max:374,y_min:-2,y_max:251,ha:253,o:"m 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z"},dynamicForte:{x_min:-137,x_max:334,y_min:-193,y_max:421,ha:614,o:"m -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z"},dynamicRinforzando:{x_min:-12,x_max:230,y_min:0,y_max:254,ha:254,o:"m 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z"},dynamicSforzando:{x_min:0,x_max:208,y_min:-5,y_max:263,ha:268,o:"m 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z"},dynamicZ:{x_min:-42,x_max:239,y_min:-1,y_max:258,ha:259,o:"m 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z"},ornamentTrill:{x_min:-12,x_max:383,y_min:0,y_max:383,ha:383,o:"m 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z"},ornamentTurn:{x_min:0,x_max:456,y_min:0,y_max:232,ha:232,o:"m 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z"},ornamentTurnSlash:{x_min:0,x_max:456,y_min:-80,y_max:313,ha:393,o:"m 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z"},ornamentMordent:{x_min:0,x_max:473,y_min:-77,y_max:316,ha:393,o:"m 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z"},ornamentShortTrill:{x_min:0,x_max:473,y_min:0,y_max:248,ha:248,o:"m 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z"},ornamentTremblement:{x_min:0,x_max:654,y_min:0,y_max:248,ha:248,o:"m 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:680,y_min:0,y_max:388,ha:388,o:"m 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:0,x_max:662,y_min:-158,y_max:248,ha:406,o:"m 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:662,y_min:-158,y_max:321,ha:479,o:"m 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:662,y_min:0,y_max:406,ha:406,o:"m 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:857,y_min:0,y_max:248,ha:248,o:"m 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:565,y_min:-171,y_max:249,ha:420,o:"m 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z"},brassMuteClosed:{x_min:0,x_max:312,y_min:0,y_max:312,ha:312,o:"m 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z"},brassMuteOpen:{x_min:0,x_max:280,y_min:0,y_max:280,ha:280,o:"m 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z"},stringsDownBow:{x_min:0,x_max:315,y_min:0,y_max:293,ha:293,o:"m 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z"},stringsUpBow:{x_min:0,x_max:262,y_min:0,y_max:343,ha:343,o:"m 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z"},stringsHarmonic:{x_min:0,x_max:181,y_min:0,y_max:181,ha:181,o:"m 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:269,y_min:0,y_max:389,ha:389,o:"m 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:269,y_min:0,y_max:389,ha:389,o:"m 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z"},keyboardPedalPed:{x_min:0,x_max:981,y_min:-10,y_max:545,ha:555,o:"m 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z"},keyboardPedalUp:{x_min:0,x_max:473,y_min:0,y_max:473,ha:473,o:"m 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z"},wiggleArpeggiatoUp:{x_min:-22,x_max:242,y_min:0,y_max:164,ha:164,o:"m 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z"},repeat1Bar:{x_min:0,x_max:481,y_min:-250,y_max:250,ha:500,o:"m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z"},repeat2Bars:{x_min:0,x_max:735,y_min:-250,y_max:250,ha:500,o:"m 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z"},repeat4Bars:{x_min:0,x_max:1243,y_min:-250,y_max:250,ha:500,o:"m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z"},repeatBarSlash:{x_min:0,x_max:481,y_min:-250,y_max:250,ha:500,o:"m 693 360 l 511 360 l 0 -360 l 181 -360 z"},csymDiminished:{x_min:0,x_max:501,y_min:0,y_max:501,ha:501,o:"m 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z"},csymHalfDiminished:{x_min:-1,x_max:502,y_min:-1,y_max:502,ha:503,o:"m 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z"},csymAugmented:{x_min:1,x_max:321,y_min:90,y_max:410,ha:320,o:"m 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z"},csymMajorSeventh:{x_min:0,x_max:500,y_min:10,y_max:490,ha:480,o:"m 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:160,y_min:-176,y_max:452,ha:628,o:"m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:416,y_min:-176,y_max:452,ha:628,o:"m 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z"}},fontFamily:"Leland",resolution:1e3,generatedOn:"2022-12-19T23:52:37.756Z"};const Oi={spacing:50,glyphs:{" ":{x_min:0,x_max:250,y_min:0,y_max:500,ha:500,leftSideBearing:0,advanceWidth:250},0:{x_min:33,x_max:534,y_min:-13,y_max:751,ha:764,leftSideBearing:33,advanceWidth:570},1:{x_min:48,x_max:235,y_min:-17,y_max:734,ha:751,leftSideBearing:48,advanceWidth:286},2:{x_min:56,x_max:571,y_min:-19,y_max:741,ha:760,leftSideBearing:56,advanceWidth:626},3:{x_min:50,x_max:528,y_min:-7,y_max:731,ha:738,leftSideBearing:50,advanceWidth:589},4:{x_min:38,x_max:564,y_min:-13,y_max:743,ha:756,leftSideBearing:38,advanceWidth:614},5:{x_min:42,x_max:601,y_min:-34,y_max:743,ha:777,leftSideBearing:42,advanceWidth:648},6:{x_min:47,x_max:606,y_min:-16,y_max:743,ha:759,leftSideBearing:47,advanceWidth:667},7:{x_min:47,x_max:567,y_min:5,y_max:739,ha:734,leftSideBearing:0,advanceWidth:615},8:{x_min:40,x_max:541,y_min:-15,y_max:752,ha:767,leftSideBearing:40,advanceWidth:585},9:{x_min:40,x_max:537,y_min:-52,y_max:736,ha:788,leftSideBearing:40,advanceWidth:592},"!":{x_min:49,x_max:180,y_min:-7,y_max:761,ha:768,leftSideBearing:49,advanceWidth:230},'"':{x_min:39,x_max:304,y_min:596,y_max:804,ha:208,leftSideBearing:39,advanceWidth:353},"#":{x_min:33,x_max:599,y_min:-8,y_max:765,ha:773,leftSideBearing:33,advanceWidth:648},$:{x_min:53,x_max:495,y_min:-111,y_max:823,ha:934,leftSideBearing:53,advanceWidth:560},"%":{x_min:35,x_max:656,y_min:-128,y_max:808,ha:936,leftSideBearing:35,advanceWidth:711},"&":{x_min:53,x_max:441,y_min:-3,y_max:753,ha:756,leftSideBearing:53,advanceWidth:500},"'":{x_min:43,x_max:161,y_min:590,y_max:811,ha:221,leftSideBearing:43,advanceWidth:217},"(":{x_min:41,x_max:311,y_min:-36,y_max:845,ha:881,leftSideBearing:41,advanceWidth:308},")":{x_min:-8,x_max:257,y_min:-21,y_max:852,ha:873,leftSideBearing:-8,advanceWidth:280},"*":{x_min:59,x_max:539,y_min:175,y_max:589,ha:414,leftSideBearing:59,advanceWidth:601},"+":{x_min:33,x_max:361,y_min:180,y_max:587,ha:407,leftSideBearing:33,advanceWidth:400},",":{x_min:15,x_max:176,y_min:-129,y_max:92,ha:221,leftSideBearing:15,advanceWidth:205},"-":{x_min:40,x_max:380,y_min:317,y_max:452,ha:135,leftSideBearing:40,advanceWidth:422},".":{x_min:48,x_max:185,y_min:-56,y_max:84,ha:140,leftSideBearing:48,advanceWidth:227},"/":{x_min:-58,x_max:654,y_min:-122,y_max:844,ha:966,leftSideBearing:-58,advanceWidth:626},":":{x_min:65,x_max:225,y_min:97,y_max:536,ha:439,leftSideBearing:65,advanceWidth:302},";":{x_min:13,x_max:295,y_min:-139,y_max:536,ha:675,leftSideBearing:13,advanceWidth:334},"<":{x_min:28,x_max:438,y_min:-1,y_max:607,ha:608,leftSideBearing:28,advanceWidth:475},"=":{x_min:40,x_max:383,y_min:199.9598640852289,y_max:541,ha:341.0401359147711,leftSideBearing:40,advanceWidth:422},">":{x_min:35,x_max:421,y_min:28,y_max:632,ha:604,leftSideBearing:35,advanceWidth:466},"?":{x_min:45,x_max:548,y_min:-17,y_max:767,ha:784,leftSideBearing:45,advanceWidth:592},"@":{x_min:51,x_max:730,y_min:-78,y_max:753,ha:831,leftSideBearing:51,advanceWidth:781},A:{x_min:37,x_max:554,y_min:-4,y_max:746,ha:750,leftSideBearing:37,advanceWidth:617},B:{x_min:37,x_max:532,y_min:3,y_max:783,ha:780,leftSideBearing:37,advanceWidth:579},C:{x_min:37,x_max:583,y_min:-3,y_max:775,ha:778,leftSideBearing:37,advanceWidth:623},D:{x_min:50,x_max:530,y_min:-15,y_max:749,ha:764,leftSideBearing:50,advanceWidth:579},E:{x_min:45,x_max:531,y_min:-1,y_max:743,ha:744,leftSideBearing:45,advanceWidth:585},F:{x_min:45,x_max:459,y_min:23,y_max:727,ha:704,leftSideBearing:45,advanceWidth:510},G:{x_min:31,x_max:577,y_min:-8,y_max:733,ha:741,leftSideBearing:31,advanceWidth:611},H:{x_min:37,x_max:493,y_min:-22,y_max:758,ha:780,leftSideBearing:37,advanceWidth:535},I:{x_min:47,x_max:501,y_min:-3,y_max:731,ha:734,leftSideBearing:47,advanceWidth:541},J:{x_min:33,x_max:531,y_min:-23,y_max:725,ha:748,leftSideBearing:33,advanceWidth:573},K:{x_min:43,x_max:505,y_min:-10,y_max:740,ha:750,leftSideBearing:43,advanceWidth:560},L:{x_min:49,x_max:457,y_min:-2,y_max:746,ha:748,leftSideBearing:49,advanceWidth:510},M:{x_min:35,x_max:699,y_min:1,y_max:744,ha:743,leftSideBearing:35,advanceWidth:743},N:{x_min:34,x_max:533,y_min:-17,y_max:761,ha:778,leftSideBearing:34,advanceWidth:579},O:{x_min:41,x_max:608,y_min:-5,y_max:735,ha:740,leftSideBearing:41,advanceWidth:667},P:{x_min:53,x_max:451,y_min:-18,y_max:735,ha:753,leftSideBearing:53,advanceWidth:497},Q:{x_min:40,x_max:599,y_min:-67,y_max:744,ha:811,leftSideBearing:40,advanceWidth:648},R:{x_min:39,x_max:487,y_min:16,y_max:735,ha:719,leftSideBearing:39,advanceWidth:535},S:{x_min:35,x_max:552,y_min:-47,y_max:708,ha:755,leftSideBearing:35,advanceWidth:604},T:{x_min:26,x_max:656,y_min:-13,y_max:718,ha:731,leftSideBearing:26,advanceWidth:705},U:{x_min:41,x_max:518,y_min:-20,y_max:748,ha:768,leftSideBearing:41,advanceWidth:567},V:{x_min:47,x_max:509,y_min:-26,y_max:744,ha:770,leftSideBearing:47,advanceWidth:567},W:{x_min:44,x_max:789,y_min:-35,y_max:720,ha:755,leftSideBearing:44,advanceWidth:833},X:{x_min:63,x_max:635,y_min:-10,y_max:745,ha:755,leftSideBearing:63,advanceWidth:680},Y:{x_min:43,x_max:503,y_min:-21,y_max:734,ha:755,leftSideBearing:43,advanceWidth:541},Z:{x_min:42,x_max:584,y_min:-10,y_max:739,ha:749,leftSideBearing:42,advanceWidth:629},"[":{x_min:46,x_max:346,y_min:-150,y_max:884,ha:1034,leftSideBearing:46,advanceWidth:291},"\\":{x_min:20,x_max:616,y_min:-100,y_max:797,ha:897,leftSideBearing:20,advanceWidth:645},"]":{x_min:-76,x_max:226,y_min:-150,y_max:881,ha:1031,leftSideBearing:-76,advanceWidth:297},"^":{x_min:43,x_max:437,y_min:517,y_max:812,ha:295,leftSideBearing:43,advanceWidth:478},_:{x_min:29,x_max:563,y_min:-110,y_max:-1,ha:109,leftSideBearing:29,advanceWidth:598},"`":{x_min:54,x_max:321,y_min:540,y_max:747,ha:207,leftSideBearing:54,advanceWidth:368},a:{x_min:20,x_max:447,y_min:-17,y_max:495,ha:512,leftSideBearing:20,advanceWidth:494},b:{x_min:37,x_max:466,y_min:-27,y_max:770,ha:797,leftSideBearing:37,advanceWidth:510},c:{x_min:35,x_max:456,y_min:-9,y_max:507,ha:516,leftSideBearing:35,advanceWidth:460},d:{x_min:45,x_max:520,y_min:-15,y_max:764,ha:779,leftSideBearing:45,advanceWidth:560},e:{x_min:33,x_max:370,y_min:-5,y_max:501,ha:506,leftSideBearing:33,advanceWidth:397},f:{x_min:35,x_max:411,y_min:-13,y_max:695,ha:708,leftSideBearing:35,advanceWidth:453},g:{x_min:33,x_max:551,y_min:-257,y_max:505,ha:762,leftSideBearing:33,advanceWidth:611},h:{x_min:32,x_max:458,y_min:-29,y_max:743,ha:772,leftSideBearing:32,advanceWidth:491},i:{x_min:45,x_max:167,y_min:-13,y_max:631,ha:644,leftSideBearing:45,advanceWidth:220},j:{x_min:-127,x_max:261,y_min:-231,y_max:601,ha:832,leftSideBearing:-127,advanceWidth:308},k:{x_min:39,x_max:443,y_min:-3,y_max:700,ha:703,leftSideBearing:39,advanceWidth:497},l:{x_min:58,x_max:168,y_min:-8,y_max:686,ha:694,leftSideBearing:58,advanceWidth:227},m:{x_min:39,x_max:688,y_min:-14,y_max:501,ha:515,leftSideBearing:39,advanceWidth:718},n:{x_min:45,x_max:491,y_min:-32,y_max:512,ha:544,leftSideBearing:45,advanceWidth:541},o:{x_min:41,x_max:424,y_min:-12,y_max:493,ha:505,leftSideBearing:41,advanceWidth:447},p:{x_min:25,x_max:529,y_min:-260,y_max:500,ha:760,leftSideBearing:25,advanceWidth:573},q:{x_min:53,x_max:603,y_min:-235,y_max:514,ha:749,leftSideBearing:53,advanceWidth:623},r:{x_min:32,x_max:407,y_min:-7,y_max:492,ha:499,leftSideBearing:32,advanceWidth:460},s:{x_min:49,x_max:416,y_min:-12,y_max:519,ha:531,leftSideBearing:49,advanceWidth:460},t:{x_min:32,x_max:442,y_min:-5,y_max:684,ha:689,leftSideBearing:32,advanceWidth:469},u:{x_min:41,x_max:487,y_min:-5,y_max:507,ha:512,leftSideBearing:41,advanceWidth:510},v:{x_min:16,x_max:441,y_min:-20,y_max:542,ha:562,leftSideBearing:16,advanceWidth:456},w:{x_min:39,x_max:639,y_min:-22,y_max:505,ha:527,leftSideBearing:39,advanceWidth:661},x:{x_min:15,x_max:505,y_min:-39,y_max:539,ha:578,leftSideBearing:15,advanceWidth:541},y:{x_min:-98,x_max:501,y_min:-242,y_max:511,ha:753,leftSideBearing:-98,advanceWidth:548},z:{x_min:27,x_max:479,y_min:-3,y_max:494,ha:497,leftSideBearing:27,advanceWidth:494},"{":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"|":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"}":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"~":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308}},fontFamily:"PetalumaScript",resolution:1e3,generatedOn:"2020-06-14T18:33:25.407Z"},Ri={spacing:50,glyphs:{" ":{x_min:0,x_max:509,y_min:0,y_max:2e3,ha:2e3,leftSideBearing:0,advanceWidth:509},0:{x_min:121,x_max:1048,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1168},1:{x_min:117,x_max:767,y_min:0,y_max:1456,ha:1456,leftSideBearing:117,advanceWidth:844},2:{x_min:75.8474576645637,x_max:1040,y_min:0,y_max:1477,ha:1477,leftSideBearing:75,advanceWidth:1131},3:{x_min:74.85365853658536,x_max:994,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1106},4:{x_min:63,x_max:1114,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1187},5:{x_min:96.8448275474953,x_max:982,y_min:-21,y_max:1456,ha:1477,leftSideBearing:96,advanceWidth:1081},6:{x_min:121,x_max:1067,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1144},7:{x_min:76,x_max:1060,y_min:0,y_max:1456,ha:1456,leftSideBearing:-30,advanceWidth:1128},8:{x_min:92,x_max:1039,y_min:-21,y_max:1477,ha:1498,leftSideBearing:92,advanceWidth:1131},9:{x_min:84,x_max:1026,y_min:-21,y_max:1477,ha:1498,leftSideBearing:84,advanceWidth:1154},"!":{x_min:143,x_max:340,y_min:0,y_max:1456,ha:1456,leftSideBearing:143,advanceWidth:483},'"':{x_min:166,x_max:634,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:770},"#":{x_min:63,x_max:1179,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1246},$:{x_min:81.92156915727656,x_max:1012,y_min:-208,y_max:1693,ha:1901,leftSideBearing:81,advanceWidth:1110},"%":{x_min:77,x_max:1384,y_min:-21,y_max:1477,ha:1498,leftSideBearing:77,advanceWidth:1460},"&":{x_min:74,x_max:1242,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1289},"'":{x_min:166,x_max:324,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:460},"(":{x_min:114,x_max:650,y_min:-463,y_max:1636,ha:2099,leftSideBearing:114,advanceWidth:662},")":{x_min:11,x_max:547,y_min:-463,y_max:1636,ha:2099,leftSideBearing:11,advanceWidth:654},"*":{x_min:66,x_max:893,y_min:607,y_max:1456,ha:849,leftSideBearing:66,advanceWidth:958},"+":{x_min:73,x_max:1071,y_min:146,y_max:1206,ha:1060,leftSideBearing:73,advanceWidth:1145},",":{x_min:23,x_max:315,y_min:-311,y_max:221,ha:532,leftSideBearing:23,advanceWidth:404},"-":{x_min:154,x_max:643,y_min:538,y_max:692,ha:154,leftSideBearing:154,advanceWidth:797},".":{x_min:145,x_max:342,y_min:0,y_max:202,ha:202,leftSideBearing:145,advanceWidth:493},"/":{x_min:0,x_max:774,y_min:-125,y_max:1456,ha:1581,leftSideBearing:0,advanceWidth:824},":":{x_min:145,x_max:342,y_min:0,y_max:1082,ha:1082,leftSideBearing:145,advanceWidth:419},";":{x_min:53,x_max:345,y_min:-311,y_max:1082,ha:1393,leftSideBearing:53,advanceWidth:424},"<":{x_min:76,x_max:892,y_min:107,y_max:1013,ha:906,leftSideBearing:76,advanceWidth:1017},"=":{x_min:147,x_max:981,y_min:407,y_max:987,ha:580,leftSideBearing:147,advanceWidth:1127},">":{x_min:125,x_max:980,y_min:87,y_max:993,ha:906,leftSideBearing:125,advanceWidth:1060},"?":{x_min:65.92660602419838,x_max:890,y_min:0,y_max:1477,ha:1477,leftSideBearing:65,advanceWidth:953},"@":{x_min:84.3592218305664,x_max:1705.2346925277395,y_min:-453,y_max:1431,ha:1884,leftSideBearing:84,advanceWidth:1821},A:{x_min:70,x_max:1463,y_min:0,y_max:1456,ha:1456,leftSideBearing:70,advanceWidth:1533},B:{x_min:81,x_max:1253,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1322},C:{x_min:80,x_max:1174,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1290},D:{x_min:81,x_max:1291,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1356},E:{x_min:81,x_max:1190,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1306},F:{x_min:81,x_max:1176,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1256},G:{x_min:80,x_max:1226,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1346},H:{x_min:81,x_max:1497,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1578},I:{x_min:81,x_max:604,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:685},J:{x_min:60,x_max:1100,y_min:-21,y_max:1456,ha:1477,leftSideBearing:60,advanceWidth:1169},K:{x_min:81,x_max:1427,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1501},L:{x_min:81,x_max:1130,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1210},M:{x_min:94,x_max:1888,y_min:0,y_max:1456,ha:1456,leftSideBearing:94,advanceWidth:1982},N:{x_min:83,x_max:1509,y_min:0,y_max:1456,ha:1456,leftSideBearing:83,advanceWidth:1592},O:{x_min:70,x_max:1281,y_min:-21,y_max:1477,ha:1498,leftSideBearing:70,advanceWidth:1351},P:{x_min:81,x_max:1242,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1297},Q:{x_min:70,x_max:1348,y_min:-245,y_max:1477,ha:1722,leftSideBearing:70,advanceWidth:1376},R:{x_min:81,x_max:1285,y_min:0,y_max:1455,ha:1455,leftSideBearing:81,advanceWidth:1385},S:{x_min:115,x_max:1116,y_min:-21,y_max:1477,ha:1498,leftSideBearing:115,advanceWidth:1206},T:{x_min:96,x_max:1306,y_min:0,y_max:1456,ha:1456,leftSideBearing:96,advanceWidth:1406},U:{x_min:70,x_max:1452,y_min:-21,y_max:1456,ha:1477,leftSideBearing:70,advanceWidth:1522},V:{x_min:65,x_max:1443,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1508},W:{x_min:72,x_max:2057,y_min:0,y_max:1456,ha:1456,leftSideBearing:72,advanceWidth:2129},X:{x_min:80,x_max:1449,y_min:0,y_max:1456,ha:1456,leftSideBearing:80,advanceWidth:1529},Y:{x_min:65,x_max:1396,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1461},Z:{x_min:90,x_max:1107,y_min:0,y_max:1456,ha:1456,leftSideBearing:90,advanceWidth:1197},"[":{x_min:157,x_max:541,y_min:-312,y_max:1664,ha:1976,leftSideBearing:157,advanceWidth:573},"\\":{x_min:36,x_max:830,y_min:-125,y_max:1456,ha:1581,leftSideBearing:36,advanceWidth:841},"]":{x_min:23,x_max:408,y_min:-312,y_max:1664,ha:1976,leftSideBearing:23,advanceWidth:552},"^":{x_min:71,x_max:802,y_min:729,y_max:1456,ha:727,leftSideBearing:71,advanceWidth:864},_:{x_min:119,x_max:1041,y_min:-154,y_max:0,ha:154,leftSideBearing:119,advanceWidth:1168},"`":{x_min:40,x_max:456,y_min:1288,y_max:1560,ha:272,leftSideBearing:40,advanceWidth:496},a:{x_min:79,x_max:1053,y_min:-21,y_max:1102,ha:1123,leftSideBearing:79,advanceWidth:1132},b:{x_min:-16,x_max:1071,y_min:-21,y_max:1560,ha:1581,leftSideBearing:-16,advanceWidth:1145},c:{x_min:78,x_max:988,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1067},d:{x_min:78,x_max:1156,y_min:-21,y_max:1560,ha:1581,leftSideBearing:78,advanceWidth:1218},e:{x_min:74,x_max:980,y_min:-21,y_max:1102,ha:1123,leftSideBearing:74,advanceWidth:1059},f:{x_min:64,x_max:731,y_min:0,y_max:1581,ha:1581,leftSideBearing:64,advanceWidth:725},g:{x_min:78,x_max:1133,y_min:-437,y_max:1102,ha:1539,leftSideBearing:78,advanceWidth:1157},h:{x_min:49,x_max:1255,y_min:0,y_max:1560,ha:1560,leftSideBearing:49,advanceWidth:1315},i:{x_min:67,x_max:590,y_min:0,y_max:1560,ha:1560,leftSideBearing:67,advanceWidth:652},j:{x_min:-56,x_max:381,y_min:-437,y_max:1560,ha:1997,leftSideBearing:-56,advanceWidth:525},k:{x_min:64,x_max:1248,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:1287},l:{x_min:64,x_max:587,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:653},m:{x_min:74,x_max:1905,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1977},n:{x_min:74,x_max:1278,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1343},o:{x_min:78,x_max:1046,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1124},p:{x_min:34,x_max:1119,y_min:-416,y_max:1102,ha:1518,leftSideBearing:34,advanceWidth:1197},q:{x_min:78,x_max:1135,y_min:-416,y_max:1102,ha:1518,leftSideBearing:78,advanceWidth:1139},r:{x_min:72,x_max:808,y_min:0,y_max:1102,ha:1102,leftSideBearing:72,advanceWidth:854},s:{x_min:104,x_max:933,y_min:-21,y_max:1102,ha:1123,leftSideBearing:104,advanceWidth:1022},t:{x_min:24,x_max:678,y_min:-17,y_max:1343,ha:1360,leftSideBearing:24,advanceWidth:730},u:{x_min:52,x_max:1181,y_min:-21,y_max:1082,ha:1103,leftSideBearing:52,advanceWidth:1245},v:{x_min:26,x_max:1176,y_min:0,y_max:1082,ha:1082,leftSideBearing:26,advanceWidth:1206},w:{x_min:52,x_max:1777,y_min:0,y_max:1082,ha:1082,leftSideBearing:52,advanceWidth:1823},x:{x_min:42,x_max:1163,y_min:0,y_max:1082,ha:1082,leftSideBearing:42,advanceWidth:1203},y:{x_min:24,x_max:1172,y_min:-437,y_max:1082,ha:1519,leftSideBearing:24,advanceWidth:1192},z:{x_min:88,x_max:960,y_min:0,y_max:1082,ha:1082,leftSideBearing:88,advanceWidth:1032},"{":{x_min:63,x_max:671,y_min:-364,y_max:1597,ha:1961,leftSideBearing:63,advanceWidth:701},"|":{x_min:150,x_max:307,y_min:-270,y_max:1456,ha:1726,leftSideBearing:150,advanceWidth:451},"}":{x_min:27,x_max:635,y_min:-364,y_max:1597,ha:1961,leftSideBearing:27,advanceWidth:701},"~":{x_min:121,x_max:1257,y_min:401,y_max:803,ha:402,leftSideBearing:121,advanceWidth:1386}},fontFamily:"Roboto Slab",resolution:2048,generatedOn:"2020-06-15T19:12:58.120Z"},Li={glyphs:{0:{x_min:86,x_max:1038,y_min:-25,y_max:1472,ha:1497,leftSideBearing:86,advanceWidth:1139},1:{x_min:162,x_max:806,y_min:0,y_max:1472,ha:1472,leftSideBearing:162,advanceWidth:1139},2:{x_min:51,x_max:1036,y_min:0,y_max:1472,ha:1472,leftSideBearing:51,advanceWidth:1139},3:{x_min:77,x_max:1051,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},4:{x_min:38,x_max:1092,y_min:0,y_max:1472,ha:1472,leftSideBearing:38,advanceWidth:1139},5:{x_min:91,x_max:1077,y_min:-25,y_max:1446,ha:1471,leftSideBearing:91,advanceWidth:1139},6:{x_min:87,x_max:1066,y_min:-25,y_max:1472,ha:1497,leftSideBearing:87,advanceWidth:1139},7:{x_min:87,x_max:1048,y_min:0,y_max:1446,ha:1446,leftSideBearing:87,advanceWidth:1139},8:{x_min:83,x_max:1047,y_min:-26,y_max:1472,ha:1498,leftSideBearing:83,advanceWidth:1139},9:{x_min:65,x_max:1044,y_min:-26,y_max:1472,ha:1498,leftSideBearing:65,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:184,x_max:488,y_min:0,y_max:1466,ha:1466,leftSideBearing:184,advanceWidth:682},'"':{x_min:112,x_max:869,y_min:945,y_max:1466,ha:521,leftSideBearing:112,advanceWidth:971},"#":{x_min:18,x_max:1115,y_min:-25,y_max:1491,ha:1516,leftSideBearing:18,advanceWidth:1139},$:{x_min:70,x_max:1048,y_min:-205,y_max:1584,ha:1789,leftSideBearing:70,advanceWidth:1139},"%":{x_min:89,x_max:1725,y_min:-59,y_max:1491,ha:1550,leftSideBearing:89,advanceWidth:1821},"&":{x_min:90,x_max:1446,y_min:-38,y_max:1491,ha:1529,leftSideBearing:90,advanceWidth:1479},"'":{x_min:92,x_max:398,y_min:945,y_max:1466,ha:521,leftSideBearing:92,advanceWidth:487},"(":{x_min:107,x_max:616,y_min:-431,y_max:1491,ha:1922,leftSideBearing:107,advanceWidth:682},")":{x_min:67,x_max:576,y_min:-431,y_max:1491,ha:1922,leftSideBearing:67,advanceWidth:682},"*":{x_min:28,x_max:753,y_min:792,y_max:1491,ha:699,leftSideBearing:28,advanceWidth:797},"+":{x_min:85,x_max:1110,y_min:211,y_max:1236,ha:1025,leftSideBearing:85,advanceWidth:1196},",":{x_min:117,x_max:421,y_min:-327,y_max:281,ha:608,leftSideBearing:117,advanceWidth:569},"-":{x_min:115,x_max:667,y_min:391,y_max:672,ha:281,leftSideBearing:115,advanceWidth:682},".":{x_min:147,x_max:428,y_min:0,y_max:281,ha:281,leftSideBearing:147,advanceWidth:569},"/":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},":":{x_min:201,x_max:482,y_min:0,y_max:1062,ha:1062,leftSideBearing:201,advanceWidth:682},";":{x_min:170,x_max:474,y_min:-327,y_max:1062,ha:1389,leftSideBearing:170,advanceWidth:682},"<":{x_min:95,x_max:1100,y_min:167,y_max:1281,ha:1114,leftSideBearing:95,advanceWidth:1196},"=":{x_min:85,x_max:1110,y_min:372,y_max:1074,ha:702,leftSideBearing:85,advanceWidth:1196},">":{x_min:95,x_max:1101,y_min:166,y_max:1279,ha:1113,leftSideBearing:95,advanceWidth:1196},"?":{x_min:106,x_max:1158,y_min:0,y_max:1481,ha:1481,leftSideBearing:106,advanceWidth:1251},"@":{x_min:61,x_max:1990,y_min:-431,y_max:1492,ha:1923,leftSideBearing:61,advanceWidth:1997},A:{x_min:0,x_max:1471,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1479},B:{x_min:150,x_max:1378,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},C:{x_min:97,x_max:1374,y_min:-25,y_max:1491,ha:1516,leftSideBearing:97,advanceWidth:1479},D:{x_min:148,x_max:1377,y_min:0,y_max:1466,ha:1466,leftSideBearing:148,advanceWidth:1479},E:{x_min:149,x_max:1264,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},F:{x_min:151,x_max:1156,y_min:0,y_max:1466,ha:1466,leftSideBearing:151,advanceWidth:1251},G:{x_min:98,x_max:1469,y_min:-25,y_max:1491,ha:1516,leftSideBearing:98,advanceWidth:1593},H:{x_min:150,x_max:1322,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},I:{x_min:140,x_max:436,y_min:0,y_max:1466,ha:1466,leftSideBearing:140,advanceWidth:569},J:{x_min:35,x_max:973,y_min:-25,y_max:1466,ha:1491,leftSideBearing:35,advanceWidth:1139},K:{x_min:153,x_max:1475,y_min:0,y_max:1466,ha:1466,leftSideBearing:153,advanceWidth:1479},L:{x_min:157,x_max:1189,y_min:0,y_max:1454,ha:1454,leftSideBearing:157,advanceWidth:1251},M:{x_min:145,x_max:1561,y_min:0,y_max:1466,ha:1466,leftSideBearing:145,advanceWidth:1706},N:{x_min:152,x_max:1315,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1479},O:{x_min:89,x_max:1511,y_min:-25,y_max:1491,ha:1516,leftSideBearing:89,advanceWidth:1593},P:{x_min:149,x_max:1272,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},Q:{x_min:89,x_max:1566,y_min:-147,y_max:1491,ha:1638,leftSideBearing:89,advanceWidth:1593},R:{x_min:150,x_max:1468,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},S:{x_min:74,x_max:1266,y_min:-26,y_max:1491,ha:1517,leftSideBearing:74,advanceWidth:1366},T:{x_min:44,x_max:1209,y_min:0,y_max:1466,ha:1466,leftSideBearing:44,advanceWidth:1251},U:{x_min:147,x_max:1316,y_min:-25,y_max:1466,ha:1491,leftSideBearing:147,advanceWidth:1479},V:{x_min:-1,x_max:1364,y_min:0,y_max:1466,ha:1466,leftSideBearing:-1,advanceWidth:1366},W:{x_min:7,x_max:1931,y_min:0,y_max:1466,ha:1466,leftSideBearing:7,advanceWidth:1933},X:{x_min:0,x_max:1363,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1366},Y:{x_min:-3,x_max:1368,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},Z:{x_min:22,x_max:1213,y_min:0,y_max:1466,ha:1466,leftSideBearing:22,advanceWidth:1251},"[":{x_min:146,x_max:644,y_min:-413,y_max:1466,ha:1879,leftSideBearing:146,advanceWidth:682},"\\":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},"]":{x_min:38,x_max:536,y_min:-413,y_max:1466,ha:1879,leftSideBearing:38,advanceWidth:682},"^":{x_min:115,x_max:1080,y_min:692,y_max:1491,ha:799,leftSideBearing:115,advanceWidth:1196},_:{x_min:-19,x_max:1149,y_min:-405,y_max:-223,ha:182,leftSideBearing:-19,advanceWidth:1139},"`":{x_min:42,x_max:495,y_min:1192,y_max:1491,ha:299,leftSideBearing:42,advanceWidth:682},a:{x_min:73,x_max:1070,y_min:-24,y_max:1086,ha:1110,leftSideBearing:73,advanceWidth:1139},b:{x_min:135,x_max:1172,y_min:-24,y_max:1466,ha:1490,leftSideBearing:135,advanceWidth:1251},c:{x_min:85,x_max:1087,y_min:-24,y_max:1086,ha:1110,leftSideBearing:85,advanceWidth:1139},d:{x_min:84,x_max:1121,y_min:-24,y_max:1466,ha:1490,leftSideBearing:84,advanceWidth:1251},e:{x_min:65,x_max:1057.2517482517483,y_min:-24,y_max:1086,ha:1110,leftSideBearing:65,advanceWidth:1139},f:{x_min:24,x_max:742,y_min:0,y_max:1491,ha:1491,leftSideBearing:24,advanceWidth:682},g:{x_min:84,x_max:1120,y_min:-431,y_max:1086,ha:1517,leftSideBearing:84,advanceWidth:1251},h:{x_min:146,x_max:1113,y_min:0,y_max:1466,ha:1466,leftSideBearing:146,advanceWidth:1251},i:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},j:{x_min:-94,x_max:422,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:569},k:{x_min:137,x_max:1119,y_min:0,y_max:1466,ha:1466,leftSideBearing:137,advanceWidth:1139},l:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},m:{x_min:126,x_max:1688,y_min:0,y_max:1086,ha:1086,leftSideBearing:126,advanceWidth:1821},n:{x_min:145,x_max:1113,y_min:0,y_max:1086,ha:1086,leftSideBearing:145,advanceWidth:1251},o:{x_min:82,x_max:1178,y_min:-24,y_max:1086,ha:1110,leftSideBearing:82,advanceWidth:1251},p:{x_min:139,x_max:1175,y_min:-404,y_max:1086,ha:1490,leftSideBearing:139,advanceWidth:1251},q:{x_min:91,x_max:1122,y_min:-404,y_max:1086,ha:1490,leftSideBearing:91,advanceWidth:1251},r:{x_min:135,x_max:823,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:797},s:{x_min:48,x_max:1040,y_min:-24,y_max:1086,ha:1110,leftSideBearing:48,advanceWidth:1139},t:{x_min:31,x_max:657,y_min:-24,y_max:1437,ha:1461,leftSideBearing:31,advanceWidth:682},u:{x_min:141,x_max:1107,y_min:-24,y_max:1062,ha:1086,leftSideBearing:141,advanceWidth:1251},v:{x_min:11,x_max:1114,y_min:0,y_max:1062,ha:1062,leftSideBearing:11,advanceWidth:1139},w:{x_min:9,x_max:1592,y_min:0,y_max:1062,ha:1062,leftSideBearing:9,advanceWidth:1593},x:{x_min:12,x_max:1120,y_min:0,y_max:1062,ha:1062,leftSideBearing:12,advanceWidth:1139},y:{x_min:14,x_max:1106,y_min:-431,y_max:1062,ha:1493,leftSideBearing:14,advanceWidth:1139},z:{x_min:34,x_max:982,y_min:0,y_max:1062,ha:1062,leftSideBearing:34,advanceWidth:1024},"{":{x_min:60,x_max:744,y_min:-431,y_max:1491,ha:1922,leftSideBearing:60,advanceWidth:797},"|":{x_min:176,x_max:399,y_min:-431,y_max:1491,ha:1922,leftSideBearing:176,advanceWidth:573},"}":{x_min:45,x_max:729,y_min:-431,y_max:1491,ha:1922,leftSideBearing:45,advanceWidth:797},"~":{x_min:67,x_max:1129,y_min:519,y_max:924,ha:405,leftSideBearing:67,advanceWidth:1196}},fontFamily:"Arial",resolution:2048,generatedOn:"2022-11-04T20:05:21.000Z"},Wi={smufl:!1,name:"SANS",spacing:50,Description:"Built-in sans-serif font",bold:!0,italic:!0,monospaced:!1,serifs:!1,glyphs:{0:{x_min:85,x_max:1041,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139},1:{x_min:223,x_max:763,y_min:0,y_max:1472,ha:1472,leftSideBearing:223,advanceWidth:1139},2:{x_min:61.840001123045234,x_max:1031,y_min:0,y_max:1472,ha:1472,leftSideBearing:61,advanceWidth:1139},3:{x_min:86,x_max:1046,y_min:-26,y_max:1472,ha:1498,leftSideBearing:86,advanceWidth:1139},4:{x_min:26,x_max:1040,y_min:0,y_max:1466,ha:1466,leftSideBearing:26,advanceWidth:1139},5:{x_min:85,x_max:1057,y_min:-25,y_max:1446,ha:1471,leftSideBearing:85,advanceWidth:1139},6:{x_min:77,x_max:1045,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},7:{x_min:97,x_max:1046,y_min:0,y_max:1447,ha:1447,leftSideBearing:97,advanceWidth:1139},8:{x_min:83,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:83,advanceWidth:1139},9:{x_min:85,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:176,x_max:399,y_min:0,y_max:1466,ha:1466,leftSideBearing:176,advanceWidth:569},'"':{x_min:94,x_max:631,y_min:947,y_max:1466,ha:519,leftSideBearing:94,advanceWidth:727},"#":{x_min:21,x_max:1113,y_min:-25,y_max:1491,ha:1516,leftSideBearing:21,advanceWidth:1139},$:{x_min:73,x_max:1043,y_min:-211,y_max:1601,ha:1812,leftSideBearing:73,advanceWidth:1139},"%":{x_min:119,x_max:1695,y_min:-54,y_max:1491,ha:1545,leftSideBearing:119,advanceWidth:1821},"&":{x_min:88,x_max:1319,y_min:-34,y_max:1491,ha:1525,leftSideBearing:88,advanceWidth:1366},"'":{x_min:90,x_max:295,y_min:947,y_max:1466,ha:519,leftSideBearing:90,advanceWidth:391},"(":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},")":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},"*":{x_min:64,x_max:725,y_min:867,y_max:1491,ha:624,leftSideBearing:64,advanceWidth:797},"+":{x_min:114,x_max:1082,y_min:237,y_max:1206,ha:969,leftSideBearing:114,advanceWidth:1196},",":{x_min:170,x_max:387,y_min:-290,y_max:205,ha:495,leftSideBearing:170,advanceWidth:569},"-":{x_min:65,x_max:618,y_min:440,y_max:621,ha:181,leftSideBearing:65,advanceWidth:682},".":{x_min:186,x_max:391,y_min:0,y_max:205,ha:205,leftSideBearing:186,advanceWidth:569},"/":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},":":{x_min:185,x_max:390,y_min:0,y_max:1062,ha:1062,leftSideBearing:185,advanceWidth:569},";":{x_min:170,x_max:387,y_min:-290,y_max:1062,ha:1352,leftSideBearing:170,advanceWidth:569},"<":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"=":{x_min:114,x_max:1082,y_min:417,y_max:1030,ha:613,leftSideBearing:114,advanceWidth:1196},">":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"?":{x_min:90,x_max:1036,y_min:0,y_max:1491,ha:1491,leftSideBearing:90,advanceWidth:1139},"@":{x_min:111,x_max:2005,y_min:-431,y_max:1493,ha:1924,leftSideBearing:111,advanceWidth:2079},A:{x_min:-3,x_max:1369,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},B:{x_min:150,x_max:1257,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},C:{x_min:102,x_max:1398,y_min:-25,y_max:1491,ha:1516,leftSideBearing:102,advanceWidth:1479},D:{x_min:158,x_max:1370,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1479},E:{x_min:162,x_max:1256,y_min:0,y_max:1466,ha:1466,leftSideBearing:162,advanceWidth:1366},F:{x_min:168,x_max:1157,y_min:0,y_max:1466,ha:1466,leftSideBearing:168,advanceWidth:1251},G:{x_min:109,x_max:1465,y_min:-25,y_max:1491,ha:1516,leftSideBearing:109,advanceWidth:1593},H:{x_min:164,x_max:1314,y_min:0,y_max:1466,ha:1466,leftSideBearing:164,advanceWidth:1479},I:{x_min:191,x_max:385,y_min:0,y_max:1466,ha:1466,leftSideBearing:191,advanceWidth:569},J:{x_min:58.84976474807333,x_max:865,y_min:-25,y_max:1466,ha:1491,leftSideBearing:58,advanceWidth:1024},K:{x_min:150,x_max:1362,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},L:{x_min:150,x_max:1066,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1139},M:{x_min:152,x_max:1551,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1706},N:{x_min:156,x_max:1311,y_min:0,y_max:1466,ha:1466,leftSideBearing:156,advanceWidth:1479},O:{x_min:99,x_max:1501,y_min:-25,y_max:1492,ha:1517,leftSideBearing:99,advanceWidth:1593},P:{x_min:158,x_max:1277,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1366},Q:{x_min:88,x_max:1518,y_min:-114,y_max:1492,ha:1606,leftSideBearing:88,advanceWidth:1593},R:{x_min:161,x_max:1453,y_min:0,y_max:1466,ha:1466,leftSideBearing:161,advanceWidth:1479},S:{x_min:92,x_max:1259,y_min:-25,y_max:1491,ha:1516,leftSideBearing:92,advanceWidth:1366},T:{x_min:48,x_max:1210,y_min:0,y_max:1466,ha:1466,leftSideBearing:48,advanceWidth:1251},U:{x_min:161,x_max:1314,y_min:-25,y_max:1466,ha:1491,leftSideBearing:161,advanceWidth:1479},V:{x_min:9,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},W:{x_min:25,x_max:1910,y_min:0,y_max:1466,ha:1466,leftSideBearing:25,advanceWidth:1933},X:{x_min:9,x_max:1353,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},Y:{x_min:6,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:6,advanceWidth:1366},Z:{x_min:41,x_max:1200,y_min:0,y_max:1466,ha:1466,leftSideBearing:41,advanceWidth:1251},"[":{x_min:139,x_max:536,y_min:-407,y_max:1466,ha:1873,leftSideBearing:139,advanceWidth:569},"\\":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},"]":{x_min:39,x_max:436,y_min:-407,y_max:1466,ha:1873,leftSideBearing:39,advanceWidth:569},"^":{x_min:54,x_max:907,y_min:690,y_max:1491,ha:801,leftSideBearing:54,advanceWidth:961},_:{x_min:-31,x_max:1162,y_min:-407,y_max:-277,ha:130,leftSideBearing:-31,advanceWidth:1139},"`":{x_min:89,x_max:465,y_min:1194,y_max:1474,ha:280,leftSideBearing:89,advanceWidth:682},a:{x_min:74,x_max:1052,y_min:-24,y_max:1086,ha:1110,leftSideBearing:74,advanceWidth:1139},b:{x_min:134,x_max:1055,y_min:-24,y_max:1466,ha:1490,leftSideBearing:134,advanceWidth:1139},c:{x_min:80,x_max:1005,y_min:-24,y_max:1086,ha:1110,leftSideBearing:80,advanceWidth:1024},d:{x_min:70,x_max:991,y_min:-24,y_max:1466,ha:1490,leftSideBearing:70,advanceWidth:1139},e:{x_min:75,x_max:1054,y_min:-24,y_max:1086,ha:1110,leftSideBearing:75,advanceWidth:1139},f:{x_min:19,x_max:640,y_min:0,y_max:1491,ha:1491,leftSideBearing:19,advanceWidth:569},g:{x_min:66,x_max:1002,y_min:-431,y_max:1086,ha:1517,leftSideBearing:66,advanceWidth:1139},h:{x_min:135,x_max:1e3,y_min:0,y_max:1466,ha:1466,leftSideBearing:135,advanceWidth:1139},i:{x_min:136,x_max:316,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:455},j:{x_min:-94,x_max:314,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:455},k:{x_min:136,x_max:1016,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:1024},l:{x_min:131,x_max:311,y_min:0,y_max:1466,ha:1466,leftSideBearing:131,advanceWidth:455},m:{x_min:135,x_max:1574,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1706},n:{x_min:135,x_max:998,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1139},o:{x_min:68,x_max:1063,y_min:-24,y_max:1086,ha:1110,leftSideBearing:68,advanceWidth:1139},p:{x_min:135,x_max:1057,y_min:-407,y_max:1086,ha:1493,leftSideBearing:135,advanceWidth:1139},q:{x_min:72,x_max:992,y_min:-407,y_max:1086,ha:1493,leftSideBearing:72,advanceWidth:1139},r:{x_min:133,x_max:710,y_min:0,y_max:1086,ha:1086,leftSideBearing:133,advanceWidth:682},s:{x_min:63,x_max:945,y_min:-24,y_max:1086,ha:1110,leftSideBearing:63,advanceWidth:1024},t:{x_min:36,x_max:554,y_min:-14,y_max:1433,ha:1447,leftSideBearing:36,advanceWidth:569},u:{x_min:131,x_max:992,y_min:-24,y_max:1062,ha:1086,leftSideBearing:131,advanceWidth:1139},v:{x_min:26,x_max:1e3,y_min:0,y_max:1062,ha:1062,leftSideBearing:26,advanceWidth:1024},w:{x_min:6,x_max:1463,y_min:0,y_max:1062,ha:1062,leftSideBearing:6,advanceWidth:1479},x:{x_min:15,x_max:1009,y_min:0,y_max:1062,ha:1062,leftSideBearing:15,advanceWidth:1024},y:{x_min:33,x_max:1006,y_min:-431,y_max:1062,ha:1493,leftSideBearing:33,advanceWidth:1024},z:{x_min:40,x_max:980,y_min:0,y_max:1062,ha:1062,leftSideBearing:40,advanceWidth:1024},"{":{x_min:57,x_max:636,y_min:-431,y_max:1491,ha:1922,leftSideBearing:57,advanceWidth:684},"|":{x_min:188,x_max:345,y_min:-431,y_max:1491,ha:1922,leftSideBearing:188,advanceWidth:532},"}":{x_min:47,x_max:626,y_min:-431,y_max:1491,ha:1922,leftSideBearing:47,advanceWidth:684},"~":{x_min:87,x_max:1110,y_min:557,y_max:885,ha:328,leftSideBearing:87,advanceWidth:1196}},fontFamily:"sans-serif",resolution:2048,generatedOn:"2020-10-18T18:48:11.823Z"},Ii={smufl:!1,name:"SERIF",spacing:50,Description:"Built-in serif font",bold:!0,italic:!0,monospaced:!1,serifs:!0,glyphs:{0:{x_min:49,x_max:975,y_min:-27,y_max:1383,ha:1410,leftSideBearing:49,advanceWidth:1024},1:{x_min:227,x_max:811,y_min:0,y_max:1383,ha:1383,leftSideBearing:227,advanceWidth:1024},2:{x_min:61,x_max:965,y_min:0,y_max:1383,ha:1383,leftSideBearing:61,advanceWidth:1024},3:{x_min:88,x_max:883,y_min:-27,y_max:1383,ha:1410,leftSideBearing:88,advanceWidth:1024},4:{x_min:25,x_max:967,y_min:0,y_max:1384,ha:1384,leftSideBearing:25,advanceWidth:1024},5:{x_min:66,x_max:898,y_min:-27,y_max:1409,ha:1436,leftSideBearing:66,advanceWidth:1024},6:{x_min:70,x_max:958,y_min:-27,y_max:1401,ha:1428,leftSideBearing:70,advanceWidth:1024},7:{x_min:41,x_max:920,y_min:-16,y_max:1356,ha:1372,leftSideBearing:41,advanceWidth:1024},8:{x_min:115,x_max:911,y_min:-27,y_max:1383,ha:1410,leftSideBearing:115,advanceWidth:1024},9:{x_min:61,x_max:940,y_min:-41,y_max:1383,ha:1424,leftSideBearing:61,advanceWidth:1024}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:512},"!":{x_min:266,x_max:488,y_min:-22,y_max:1383,ha:1405,leftSideBearing:266,advanceWidth:682},'"':{x_min:157.2000021972655,x_max:678.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:157,advanceWidth:836},"#":{x_min:10,x_max:1016,y_min:-1,y_max:1356,ha:1357,leftSideBearing:10,advanceWidth:1024},$:{x_min:90,x_max:936,y_min:-180,y_max:1492,ha:1672,leftSideBearing:90,advanceWidth:1024},"%":{x_min:125,x_max:1581,y_min:-30,y_max:1388,ha:1418,leftSideBearing:125,advanceWidth:1706},"&":{x_min:86,x_max:1536,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1593},"'":{x_min:97.20000219726548,x_max:273.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:97,advanceWidth:369},"(":{x_min:98,x_max:623,y_min:-363,y_max:1383,ha:1746,leftSideBearing:98,advanceWidth:682},")":{x_min:59,x_max:584,y_min:-363,y_max:1383,ha:1746,leftSideBearing:59,advanceWidth:682},"*":{x_min:137.96078522291893,x_max:886.039214777081,y_min:543,y_max:1383,ha:840,leftSideBearing:137,advanceWidth:1024},"+":{x_min:61,x_max:1093,y_min:2,y_max:1034,ha:1032,leftSideBearing:61,advanceWidth:1155},",":{x_min:115,x_max:399,y_min:-291,y_max:208,ha:499,leftSideBearing:115,advanceWidth:512},"-":{x_min:80,x_max:584,y_min:396,y_max:525,ha:129,leftSideBearing:80,advanceWidth:682},".":{x_min:143,x_max:371,y_min:-22,y_max:205,ha:227,leftSideBearing:143,advanceWidth:512},"/":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},":":{x_min:166,x_max:394,y_min:-22,y_max:943,ha:965,leftSideBearing:166,advanceWidth:569},";":{x_min:164,x_max:448,y_min:-290,y_max:943,ha:1233,leftSideBearing:164,advanceWidth:569},"<":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"=":{x_min:61,x_max:1093,y_min:246,y_max:791,ha:545,leftSideBearing:61,advanceWidth:1155},">":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"?":{x_min:139,x_max:848,y_min:-15,y_max:1383,ha:1398,leftSideBearing:139,advanceWidth:909},"@":{x_min:238,x_max:1657,y_min:-29,y_max:1386,ha:1415,leftSideBearing:238,advanceWidth:1886},A:{x_min:31,x_max:1445,y_min:0,y_max:1380,ha:1380,leftSideBearing:31,advanceWidth:1479},B:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},C:{x_min:57,x_max:1296,y_min:-28,y_max:1383,ha:1411,leftSideBearing:57,advanceWidth:1366},D:{x_min:33,x_max:1403,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1479},E:{x_min:25,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},F:{x_min:25,x_max:1119,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1139},G:{x_min:66,x_max:1452,y_min:-28,y_max:1383,ha:1411,leftSideBearing:66,advanceWidth:1479},H:{x_min:39,x_max:1438,y_min:0,y_max:1356,ha:1356,leftSideBearing:39,advanceWidth:1479},I:{x_min:37,x_max:642,y_min:0,y_max:1356,ha:1356,leftSideBearing:37,advanceWidth:682},J:{x_min:20,x_max:758,y_min:-28,y_max:1356,ha:1384,leftSideBearing:20,advanceWidth:797},K:{x_min:70,x_max:1479,y_min:0,y_max:1356,ha:1356,leftSideBearing:70,advanceWidth:1479},L:{x_min:25,x_max:1224,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},M:{x_min:25,x_max:1768,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1821},N:{x_min:25,x_max:1450,y_min:-22,y_max:1356,ha:1378,leftSideBearing:25,advanceWidth:1479},O:{x_min:70,x_max:1409,y_min:-28,y_max:1383,ha:1411,leftSideBearing:70,advanceWidth:1479},P:{x_min:33,x_max:1110,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1139},Q:{x_min:70,x_max:1435,y_min:-364.28571588721996,y_max:1383,ha:1747.28571588722,leftSideBearing:70,advanceWidth:1479},R:{x_min:35,x_max:1347,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},S:{x_min:86,x_max:1006,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1139},T:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1251},U:{x_min:29,x_max:1444,y_min:-28,y_max:1356,ha:1384,leftSideBearing:29,advanceWidth:1479},V:{x_min:33,x_max:1428,y_min:-22,y_max:1356,ha:1378,leftSideBearing:33,advanceWidth:1479},W:{x_min:10,x_max:1906,y_min:-22,y_max:1356,ha:1378,leftSideBearing:10,advanceWidth:1933},X:{x_min:20,x_max:1449,y_min:0,y_max:1356,ha:1356,leftSideBearing:20,advanceWidth:1479},Y:{x_min:45,x_max:1441,y_min:0,y_max:1356,ha:1356,leftSideBearing:45,advanceWidth:1479},Z:{x_min:18,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:18,advanceWidth:1251},"[":{x_min:180,x_max:612,y_min:-319,y_max:1355,ha:1674,leftSideBearing:180,advanceWidth:682},"\\":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},"]":{x_min:70,x_max:502,y_min:-319,y_max:1355,ha:1674,leftSideBearing:70,advanceWidth:682},"^":{x_min:49,x_max:914,y_min:608,y_max:1355,ha:747,leftSideBearing:49,advanceWidth:961},_:{x_min:0,x_max:1024,y_min:-255,y_max:-153,ha:102,leftSideBearing:0,advanceWidth:1024},"`":{x_min:39,x_max:499,y_min:1037,y_max:1392.509803639748,ha:355.50980363974804,leftSideBearing:39,advanceWidth:682},a:{x_min:76,x_max:905,y_min:-20,y_max:942,ha:962,leftSideBearing:76,advanceWidth:909},b:{x_min:6,x_max:958,y_min:-20,y_max:1399,ha:1419,leftSideBearing:6,advanceWidth:1024},c:{x_min:51,x_max:843,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},d:{x_min:55,x_max:1006,y_min:-20,y_max:1399,ha:1419,leftSideBearing:55,advanceWidth:1024},e:{x_min:51,x_max:868,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},f:{x_min:41,x_max:783,y_min:0,y_max:1399,ha:1399,leftSideBearing:41,advanceWidth:682},g:{x_min:57,x_max:963,y_min:-446,y_max:942,ha:1388,leftSideBearing:57,advanceWidth:1024},h:{x_min:18,x_max:997,y_min:0,y_max:1399,ha:1399,leftSideBearing:18,advanceWidth:1024},i:{x_min:33,x_max:516,y_min:0,y_max:1399,ha:1399,leftSideBearing:33,advanceWidth:569},j:{x_min:-142,x_max:397,y_min:-446,y_max:1399,ha:1845,leftSideBearing:-142,advanceWidth:569},k:{x_min:14,x_max:1029,y_min:0,y_max:1399,ha:1399,leftSideBearing:14,advanceWidth:1024},l:{x_min:39,x_max:523,y_min:0,y_max:1399,ha:1399,leftSideBearing:39,advanceWidth:569},m:{x_min:33,x_max:1587,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1593},n:{x_min:33,x_max:993,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1024},o:{x_min:59,x_max:963,y_min:-20,y_max:942,ha:962,leftSideBearing:59,advanceWidth:1024},p:{x_min:10,x_max:964,y_min:-443,y_max:944,ha:1387,leftSideBearing:10,advanceWidth:1024},q:{x_min:49,x_max:999,y_min:-443,y_max:942.0135137169275,ha:1385.0135137169275,leftSideBearing:49,advanceWidth:1024},r:{x_min:10,x_max:685,y_min:0,y_max:944,ha:944,leftSideBearing:10,advanceWidth:682},s:{x_min:104,x_max:713,y_min:-20,y_max:942.0263161804552,ha:962.0263161804552,leftSideBearing:104,advanceWidth:797},t:{x_min:27,x_max:572,y_min:-18,y_max:1186,ha:1204,leftSideBearing:27,advanceWidth:569},u:{x_min:18,x_max:981,y_min:-21,y_max:921,ha:942,leftSideBearing:18,advanceWidth:1024},v:{x_min:39,x_max:976,y_min:-28,y_max:921,ha:949,leftSideBearing:39,advanceWidth:1024},w:{x_min:43,x_max:1423,y_min:-28,y_max:921,ha:949,leftSideBearing:43,advanceWidth:1479},x:{x_min:35,x_max:989,y_min:0,y_max:921,ha:921,leftSideBearing:35,advanceWidth:1024},y:{x_min:29,x_max:976,y_min:-445,y_max:921,ha:1366,leftSideBearing:29,advanceWidth:1024},z:{x_min:55,x_max:855,y_min:0,y_max:921,ha:921,leftSideBearing:55,advanceWidth:909},"{":{x_min:205,x_max:717,y_min:-377,y_max:1397,ha:1774,leftSideBearing:205,advanceWidth:983},"|":{x_min:137,x_max:273,y_min:-512,y_max:1535,ha:2047,leftSideBearing:137,advanceWidth:410},"}":{x_min:266,x_max:778,y_min:-377,y_max:1397,ha:1774,leftSideBearing:266,advanceWidth:983},"~":{x_min:82,x_max:1028,y_min:380,y_max:666,ha:286,leftSideBearing:82,advanceWidth:1108}},fontFamily:"serif",resolution:2048,generatedOn:"2020-10-18T19:03:12.514Z"};class Gi{static sortAndUnique(t,e,i){if(t.length>1){const s=[];let n;t.sort(e);for(let e=0;e {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\nexport { Fraction };\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\nexport { Font };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Element };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave -= options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\nexport { Tables };\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\nexport { Glyph };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accidentalLinePositionsAndSpaceNeeds = [];\n let prevNote = undefined;\n let extraXSpaceNeededForLeftDisplacedNotehead = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n // If the current extra left-space needed isn't as big as this note's,\n // then we need to use this note's.\n extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accidentalLinePositionsAndSpaceNeeds.push({\n y,\n line: accLine,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n spacingBetweenStaveLines: lineSpace,\n });\n }\n else {\n accidentalLinePositionsAndSpaceNeeds.push({\n line: props.line,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n });\n }\n }\n // Sort accidentals by line number.\n accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line);\n const staveLineAccidentalLayoutMetrics = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let maxExtraXSpaceNeeded = 0;\n // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics)\n // from accidentalLinePositionsAndSpaceNeeds\n for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) {\n const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i];\n const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1];\n let currentLineMetric;\n // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric\n if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) {\n currentLineMetric = {\n line: accidentalLinePositionAndSpaceNeeds.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n };\n staveLineAccidentalLayoutMetrics.push(currentLineMetric);\n }\n else {\n currentLineMetric = priorLineMetric;\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' &&\n accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') {\n currentLineMetric.flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') {\n currentLineMetric.dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n currentLineMetric.numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing;\n // if this extraXSpaceNeeded is the largest so far, use it as the starting point for\n // all accidental columns.\n maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded);\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd])\n ? 'a'\n : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) {\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = leftShift + maxExtraXSpaceNeeded;\n columnXOffsets[0] = leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded;\n accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift = totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\nexport { Accidental };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nclass Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\nexport { Stem };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\nexport { TextFormatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\nexport { Annotation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\nexport { Articulation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\nexport { ChordSymbol };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n this.barline = new Barline(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n ctx.openGroup('barnote', this.getAttribute('id'));\n this.barline.setType(this.type);\n this.barline.setX(this.getAbsoluteX());\n this.barline.draw(this.checkStave());\n ctx.closeGroup();\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\nexport { BarNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nclass Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Bend };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { FretHandFinger };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\nexport { NoteHead };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n return this._noteHeads;\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\nexport { StaveNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { StaveTie };\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\nexport { GraceNoteGroup };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - stave.getNoteStartX();\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const tickables = note.getVoice().getTickables();\n const index = tickables.indexOf(note);\n const nextContext = index + 1 < tickables.length ? tickables[index + 1].checkTickContext() : undefined;\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - glyphX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\nexport { Ornament };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = (_b = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : Note.getPoint('gracenote');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height, devicePixelRatio) {\n var _a;\n const canvas = this.context2D.canvas;\n const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : globalObject().devicePixelRatio) !== null && _a !== void 0 ? _a : 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / dpr) | 0;\n height = (height / dpr) | 0;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(dpr, dpr);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\nexport { SVGContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\nexport { Renderer };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\nexport { TextNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { Volta };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n /**\n * The modifier context's left_shift state.\n */\n const left_shift = state.left_shift;\n /**\n * The modifier context's right_shift state.\n */\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let extraXSpaceForDisplacedNotehead = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (pos === Modifier.Position.LEFT) {\n extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: extraXSpaceForDisplacedNotehead,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n let num_x_shift = 0;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + extraXSpaceForDisplacedNotehead);\n num_x_shift = num_width; // spacing\n x_widthL = Math.max(num_x_shift, x_widthL);\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_x_shift += num_width; // spacing\n x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StringNumber };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { Stroke };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\nexport { ModifierContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\nexport { Clef };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nclass KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\nexport { KeySignature };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nclass Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n var _a;\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', {\n category: 'coda',\n });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: Tables.NOTATION_FONT_SCALE / 3,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\nexport { Repetition };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveSection };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveTempo };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { StaveText };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nclass Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n /**\n * treat the stave as if the clef is clefSpec, but don't display the clef\n */\n setClefLines(clefSpec) {\n this.clef = clefSpec;\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Stave };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\nexport { StaveConnector };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\nexport { Formatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\nexport { Crescendo };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\nexport { Parser };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\nexport { EasyScore };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\nexport { PedalMarking };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\nexport { StaveLine };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\nexport { TextBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\nexport { TextDynamics };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\nexport { VibratoBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Factory };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\nexport { StaveHairpin };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { TabSlide };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n doubleCBanjo: 'D/5,C/5,G/4,C/4,G/5',\n doubleDBanjo: 'E/5,D/5,A/4,D/4,A/5',\n sawmillBanjo: 'D/5,C/5,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static getMusicFontStack() {\n return Tables.MUSIC_FONT_STACK;\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\nexport { Flow };\n","export const VERSION = '4.2.6';\nexport const ID = '103aad2b14837418c5e96c9e078edd036fcddf60';\nexport const DATE = '2024-08-26T20:16:17.134Z';\n","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const LelandFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 491,\n y_min: 0,\n y_max: 279,\n ha: 279,\n o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 491,\n y_min: -279,\n y_max: 0,\n ha: 279,\n o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z',\n },\n segno: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 869,\n ha: 869,\n o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z',\n },\n coda: {\n x_min: 0,\n x_max: 745,\n y_min: -113,\n y_max: 735,\n ha: 848,\n o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z',\n },\n gClef: {\n x_min: 0,\n x_max: 640,\n y_min: -666,\n y_max: 1112,\n ha: 1778,\n o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z',\n },\n cClef: {\n x_min: 0,\n x_max: 627,\n y_min: -480,\n y_max: 482,\n ha: 962,\n o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z',\n },\n fClef: {\n x_min: 0,\n x_max: 664,\n y_min: -617,\n y_max: 251,\n ha: 868,\n o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 352,\n y_min: -252,\n y_max: 252,\n ha: 504,\n o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 439,\n y_min: -743,\n y_max: 746,\n ha: 1489,\n o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z',\n },\n timeSig0: {\n x_min: 15,\n x_max: 389,\n y_min: -254,\n y_max: 255,\n ha: 509,\n o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z',\n },\n timeSig1: {\n x_min: 15,\n x_max: 336,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z',\n },\n timeSig2: {\n x_min: 15,\n x_max: 377,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z',\n },\n timeSig3: {\n x_min: 15,\n x_max: 364,\n y_min: -244,\n y_max: 244,\n ha: 488,\n o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z',\n },\n timeSig4: {\n x_min: 14,\n x_max: 442,\n y_min: -248,\n y_max: 249,\n ha: 497,\n o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z',\n },\n timeSig5: {\n x_min: 15,\n x_max: 362,\n y_min: -244,\n y_max: 246,\n ha: 490,\n o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z',\n },\n timeSig6: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z',\n },\n timeSig7: {\n x_min: 15,\n x_max: 366,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z',\n },\n timeSig8: {\n x_min: 15,\n x_max: 393,\n y_min: -248,\n y_max: 246,\n ha: 494,\n o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z',\n },\n timeSig9: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -256,\n y_max: 258,\n ha: 514,\n o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -376,\n y_max: 388,\n ha: 764,\n o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 408,\n y_min: -204,\n y_max: 204,\n ha: 408,\n o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 538,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 325,\n y_min: -162,\n y_max: 163,\n ha: 325,\n o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 432,\n y_min: -179,\n y_max: 177,\n ha: 356,\n o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 223 176 l 0 -196 l 446 -196 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z',\n },\n noteheadSlashedWhole1: {\n x_min: -75,\n x_max: 448,\n y_min: -211,\n y_max: 214,\n ha: 425,\n o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z',\n },\n noteheadSlashedHalf1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z',\n },\n noteheadSlashedBlack1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z',\n },\n noteheadSlashedWhole2: {\n x_min: -75,\n x_max: 448,\n y_min: -212,\n y_max: 214,\n ha: 426,\n o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z',\n },\n noteheadSlashedHalf2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z',\n },\n noteheadSlashedBlack2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z',\n },\n noteheadParenthesisRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 0 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 488 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z',\n },\n tremolo1: {\n x_min: 0,\n x_max: 290,\n y_min: -93,\n y_max: 96,\n ha: 189,\n o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 289,\n y_min: -817,\n y_max: 12,\n ha: 829,\n o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -12,\n y_max: 817,\n ha: 829,\n o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -820,\n y_max: 12,\n ha: 832,\n o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -26,\n y_max: 803,\n ha: 829,\n o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 186,\n ha: 1007,\n o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 309,\n y_min: -216,\n y_max: 803,\n ha: 1019,\n o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -822,\n y_max: 373,\n ha: 1195,\n o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -403,\n y_max: 804,\n ha: 1207,\n o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 573,\n ha: 1394,\n o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -591,\n y_max: 803,\n ha: 1394,\n o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 203,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 171,\n y_min: -323,\n y_max: 325,\n ha: 648,\n o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 244,\n y_min: -333,\n y_max: 334,\n ha: 667,\n o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 275,\n y_min: -137,\n y_max: 138,\n ha: 275,\n o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 371,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 193,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 180,\n y_min: -316,\n y_max: 320,\n ha: 636,\n o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 290,\n y_min: -328,\n y_max: 339,\n ha: 667,\n o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -332,\n y_max: 334,\n ha: 666,\n o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z',\n },\n accidentalBakiyeFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -316,\n y_max: 318,\n ha: 634,\n o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 361,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 361,\n y_min: -235,\n y_max: 0,\n ha: 235,\n o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 316,\n y_min: 0,\n y_max: 46,\n ha: 46,\n o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 316,\n y_min: -46,\n y_max: 0,\n ha: 46,\n o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 78,\n y_min: 0,\n y_max: 78,\n ha: 78,\n o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 78,\n y_min: -78,\n y_max: 0,\n ha: 78,\n o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 127,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 127,\n y_min: -248,\n y_max: 0,\n ha: 248,\n o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z',\n },\n articMarcatoAbove: {\n x_min: 1,\n x_max: 296,\n y_min: 0,\n y_max: 253,\n ha: 253,\n o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 295,\n y_min: -253,\n y_max: 0,\n ha: 253,\n o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 622,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 622,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 623,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 623,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 842,\n y_min: 0,\n y_max: 549,\n ha: 549,\n o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 842,\n y_min: -549,\n y_max: 0,\n ha: 549,\n o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 642,\n y_min: 0,\n y_max: 454,\n ha: 454,\n o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 642,\n y_min: -454,\n y_max: 0,\n ha: 454,\n o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 321,\n ha: 321,\n o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z',\n },\n caesura: {\n x_min: 0,\n x_max: 380,\n y_min: 0,\n y_max: 490,\n ha: 490,\n o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 368,\n y_min: 0,\n y_max: 491,\n ha: 491,\n o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 450,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: -11,\n y_max: 262,\n ha: 273,\n o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 325,\n y_min: -131,\n y_max: 5,\n ha: 136,\n o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z',\n },\n restWholeLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -122,\n y_max: 14,\n ha: 136,\n o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -4,\n y_max: 132,\n ha: 136,\n o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z',\n },\n restHalfLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -14,\n y_max: 122,\n ha: 136,\n o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 235,\n y_min: -331,\n y_max: 401,\n ha: 732,\n o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 276,\n y_min: -255,\n y_max: 204,\n ha: 459,\n o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z',\n },\n rest16th: {\n x_min: 1,\n x_max: 344,\n y_min: -507,\n y_max: 204,\n ha: 711,\n o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 391,\n y_min: -507,\n y_max: 460,\n ha: 967,\n o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -758,\n y_max: 464,\n ha: 1222,\n o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z',\n },\n rest128th: {\n x_min: -1,\n x_max: 475,\n y_min: -759,\n y_max: 717,\n ha: 1476,\n o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z',\n },\n dynamicPiano: {\n x_min: -95,\n x_max: 317,\n y_min: -163,\n y_max: 263,\n ha: 426,\n o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z',\n },\n dynamicMezzo: {\n x_min: -7,\n x_max: 374,\n y_min: -2,\n y_max: 251,\n ha: 253,\n o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z',\n },\n dynamicForte: {\n x_min: -137,\n x_max: 334,\n y_min: -193,\n y_max: 421,\n ha: 614,\n o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z',\n },\n dynamicRinforzando: {\n x_min: -12,\n x_max: 230,\n y_min: 0,\n y_max: 254,\n ha: 254,\n o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 208,\n y_min: -5,\n y_max: 263,\n ha: 268,\n o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z',\n },\n dynamicZ: {\n x_min: -42,\n x_max: 239,\n y_min: -1,\n y_max: 258,\n ha: 259,\n o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z',\n },\n ornamentTrill: {\n x_min: -12,\n x_max: 383,\n y_min: 0,\n y_max: 383,\n ha: 383,\n o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 456,\n y_min: 0,\n y_max: 232,\n ha: 232,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 456,\n y_min: -80,\n y_max: 313,\n ha: 393,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 473,\n y_min: -77,\n y_max: 316,\n ha: 393,\n o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 680,\n y_min: 0,\n y_max: 388,\n ha: 388,\n o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 248,\n ha: 406,\n o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 321,\n ha: 479,\n o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 662,\n y_min: 0,\n y_max: 406,\n ha: 406,\n o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 857,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 565,\n y_min: -171,\n y_max: 249,\n ha: 420,\n o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 280,\n y_min: 0,\n y_max: 280,\n ha: 280,\n o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 315,\n y_min: 0,\n y_max: 293,\n ha: 293,\n o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 343,\n ha: 343,\n o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 181,\n y_min: 0,\n y_max: 181,\n ha: 181,\n o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 981,\n y_min: -10,\n y_max: 545,\n ha: 555,\n o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 242,\n y_min: 0,\n y_max: 164,\n ha: 164,\n o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 735,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1243,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 501,\n y_min: 0,\n y_max: 501,\n ha: 501,\n o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z',\n },\n csymHalfDiminished: {\n x_min: -1,\n x_max: 502,\n y_min: -1,\n y_max: 502,\n ha: 503,\n o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z',\n },\n csymAugmented: {\n x_min: 1,\n x_max: 321,\n y_min: 90,\n y_max: 410,\n ha: 320,\n o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 500,\n y_min: 10,\n y_max: 490,\n ha: 480,\n o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 160,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 416,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n },\n fontFamily: 'Leland',\n resolution: 1000,\n generatedOn: '2022-12-19T23:52:37.756Z',\n};\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\nexport { Vex };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { LelandFont } from './leland_glyphs';\nexport function loadLeland() {\n Font.load('Leland', LelandFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { CustomFont } from './custom_glyphs';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-gonville.ts is the entry point for vexflow-gonville.js.\n// This version bundles the Gonville music engraving font.\nimport { Flow } from '../src/flow';\nimport { loadCustom } from '../src/fonts/load_custom';\nimport { loadLeland } from '../src/fonts/load_leland';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadLeland();\nloadCustom();\nFlow.setMusicFont('Leland', 'Custom');\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","Function","e","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","isCategory","category","checkAncestors","constructorFcn","constructor","CATEGORY","getPrototypeOf","isAccidental","Category","Accidental","isAnnotation","Annotation","isBarline","Barline","isDot","Dot","isGraceNote","GraceNote","isGraceNoteGroup","GraceNoteGroup","isNote","Note","isRenderContext","RenderContext","isStaveNote","StaveNote","isStemmableNote","StemmableNote","isTabNote","TabNote","RuntimeError","Error","code","message","super","globalObject","self","defined","x","undefined","log","block","args","line","Array","slice","join","console","warn","err","stack","midLine","a","b","mid_line","n","parseInt","prefix","text","normalizeAngle","Math","PI","sumArray","arr","reduce","Fraction","GCD","Number","isNaN","t","LCM","LCMM","length","shift","numerator","denominator","set","simplify","u","d","gcd","add","param1","param2","otherNumerator","otherDenominator","getNumeratorAndDenominator","lcm","subtract","multiply","divide","equals","compare","__staticFractionA","copy","__staticFractionB","greaterThan","greaterThanEquals","lessThan","lessThanEquals","clone","other","quotient","floor","remainder","makeAbs","abs","toString","toSimplifiedString","__staticFractionTmp","toMixedString","s","q","f","parse","str","i","split","BoundingBox","that","y","w","h","getX","getY","getW","getH","setX","setY","setW","setH","move","mergeWith","boundingBox","new_x","new_y","new_w","max","new_h","BoundingBoxComputation","x1","NaN","y1","x2","y2","getX1","getY1","width","height","addPoint","addX","addY","addQuadraticCurve","p0x","p0y","p1x","p1y","p2x","p2y","p01x","denom","it","p01y","addBezierCurve","p3x","p3y","p0","p1","p2","p3","pow","c","b2ac","t1","sqrt","t2","FontWeight","FontStyle","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","fontParser","Fonts","Font","convertSizeToPixelValue","fontSize","SIZE","_a","scaleToPxFrom","pt","parseFloat","unit","replace","toLowerCase","convertSizeToPointValue","validate","size","weight","style","fromCSSString","family","SANS_SERIF","NORMAL","cssFontShorthand","document","createElement","font","fontFamily","fontWeight","fontStyle","toCSSString","fontInfo","st","trim","wt","sz","scaleSize","scaleFactor","isBold","parsedWeight","isItalic","ITALIC","loadWebFont","fontName","woffURL","includeWoff2","fontFace","FontFace","load","fonts","loadWebFonts","host","WEB_FONT_HOST","files","WEB_FONT_FILES","fontPath","data","metrics","setData","setMetrics","name","getName","getData","getMetrics","hasData","getResolution","resolution","getGlyphs","glyphs","lookupMetric","defaultValue","keyParts","currObj","SERIF","px","em","in","mm","cm","PetalumaScript","Index","id","type","class","Registry","getDefaultRegistry","defaultRegistry","enableDefaultRegistry","registry","disableDefaultRegistry","index","clear","setIndexValue","elem","updateIndex","oldValue","getElementById","getAttribute","register","setAttribute","onRegister","_b","getElementsByAttribute","attribute","index_attr","index_attr_val","keys","map","k","getElementsByType","getElementsByClass","className","onUpdate","info","includes","Element","newID","ID","children","attrs","getCategory","rendered","addChildElement","child","push","setStyle","setGroupStyle","forEach","getStyle","applyStyle","context","save","shadowColor","setShadowColor","shadowBlur","setShadowBlur","fillStyle","setFillStyle","strokeStyle","setStrokeStyle","lineWidth","setLineWidth","restoreStyle","restore","drawWithStyle","checkContext","draw","hasClass","indexOf","addClass","removeClass","splice","isRendered","setRendered","getAttributes","getSVGElement","suffix","element","oldID","getBoundingBox","getContext","setContext","setFont","textFont","defaultTextFont","TEXT_FONT","fontIsObject","fontIsString","fontIsUndefined","sizeWeightStyleAreUndefined","assign","getFont","resetFont","setFontSize","getFontSize","fontSizeInPoints","fontSizeInPixels","RESOLUTION","durations","durationAliases","keySignatures","C","num","Am","F","acc","Dm","Bb","Gm","Eb","Cm","Ab","Fm","Db","Bbm","Gb","Ebm","Cb","Abm","G","Em","D","Bm","A","E","B","clefs","treble","line_shift","bass","tenor","alto","soprano","percussion","subbass","french","notesInfo","int_val","CN","accidental","CB","CBB","DN","DB","DBB","EN","EB","EBB","FN","FB","FBB","GN","GB","GBB","AN","AB","ABB","BN","BB","BBB","R","rest","X","octave","shift_right","accidentals","parenRightPaddingAdjustment","bb","db","bs","bss","bbs","ashs","afhf","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","articulations","between_lines","av","aboveCode","belowCode","ao","ah","am","ornaments","mordent","mordent_inverted","turn","turn_inverted","tr","upprall","downprall","prallup","pralldown","upmordent","downmordent","lineprall","prallprall","scoop","doit","fall","doitLong","fallLong","bend","plungerClosed","plungerOpen","flip","jazzTurn","smear","Tables","currentMusicFont","MUSIC_FONT_STACK","clefProperties","clef","keyProperties","keyOctaveGlyph","params","options","octave_shift","duration","sanitizeDuration","pieces","toUpperCase","stroke","int_value","customNoteHeadProps","glyphName","codeNoteHead","displaced","integerToNote","integer","noteValue","tabToGlyphProps","fret","scale","glyph","shift_y","glyphMetrics","Glyph","TABLATURE_FONT_SCALE","textWidth","getWidth","articulationCodes","artic","accidentalCodes","ornamentCodes","keySignature","spec","keySpec","notes","acc_list","getKeySignatures","hasKeySignature","durationNumber","durationToFraction","durationToNumber","durationToTicks","ticks","getGlyphProps","durationCodes","glyphTypeProperties","code_head","common","NOTATION_FONT_SCALE","UNISON","SOFTMAX_FACTOR","STEM_WIDTH","STEM_HEIGHT","STAVE_LINE_THICKNESS","RENDER_PRECISION_PLACES","SLASH_NOTEHEAD_WIDTH","STAVE_LINE_DISTANCE","TEXT_HEIGHT_OFFSET_HACK","accidentalMap","accidentalColumnsTable","second_on_bottom","spaced_out_tetrachord","spaced_out_pentachord","very_spaced_out_pentachord","spaced_out_hexachord","very_spaced_out_hexachord","unicode","sharp","String","fromCharCode","flat","natural","triangle","degrees","circle","validTypes","m","ci","cx","sf","sb","sq","tu","td","TIME4_4","num_beats","beat_value","stem","flag","stem_up_extension","stem_down_extension","tabnote_stem_up_extension","tabnote_stem_down_extension","dot_shiftY","line_above","line_below","position","ledger_code_head","beam_count","stem_beam_extension","code_flag_upstem","code_flag_downstem","OutlineCode","ModifierPosition","GlyphCacheEntry","fontStack","point","loadMetrics","bbox","getOutlineBoundingBox","outline","x_shift","y_shift","lookupFontMetric","GlyphOutline","originX","originY","precision","round","nextX","nextY","parts","MOVE","LINE","QUADRATIC","BEZIER","lookupGlyph","x_min","x_max","ha","cached_outline","renderGlyph","ctx","x_pos","y_pos","cache","lookup","customScale","renderOutline","go","beginPath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","fill","bboxComp","penX","penY","topGlyphs","botGlyphs","originShift","setOptions","reset","getCode","setPoint","setStave","stave","getXShift","setXShift","getYshift","setYShift","checkMetrics","metricsScale","setOriginX","xShift","setOriginY","yShift","setOrigin","render","xPos","yPos","checkStave","renderToStave","getYForGlyphs","Map","entries","CURRENT_CACHE_KEY","entry","Modifier","Position","PositionString","center","CENTER","above","ABOVE","below","BELOW","left","LEFT","right","RIGHT","text_line","spacingFromNextModifier","setWidth","getNote","note","checkAttachedNote","setNote","getIndex","checkIndex","setIndex","getModifierContext","modifierContext","checkModifierContext","setModifierContext","getPosition","setPosition","setTextLine","setSpacingFromNextModifier","getSpacingFromNextModifier","alignSubNotesWithNote","subNotes","tickContext","getTickContext","getStave","subNoteXOffset","modLeftPx","modRightPx","subNote","subTickContext","setXOffset","Music","NUM_TONES","canonical_notes","roots","root_values","root_indices","diatonic_intervals","diatonic_accidentals","unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","intervals","b2","min2","S","H","maj2","T","W","b3","min3","maj3","b5","aug4","b6","aug5","maj6","m7","min7","dom7","maj7","scales","major","minor","ionian","dorian","phyrgian","lydian","mixolydian","aeolian","locrian","scaleTypes","M","noteValues","root_index","cn","cb","cbb","dn","dbb","en","eb","ebb","fn","fb","fbb","gn","gb","gbb","an","ab","abb","bn","bbb","isValidNoteValue","isValidIntervalValue","interval","getNoteParts","noteString","match","exec","getKeyParts","keyString","getNoteValue","getIntervalValue","intervalString","getCanonicalNoteName","getCanonicalIntervalName","intervalValue","getRelativeNoteValue","direction","sum","getRelativeNoteName","rootValue","multiplier","reverse_interval","relativeNoteName","getScaleTones","tones","nextNote","getIntervalBetween","note1","note2","difference","createScaleMap","keySigParts","scaleName","keySigString","noteLocation","scaleMap","rootName","noteName","L","DEBUG","format","state","musicFont","noteheadAccidentalPadding","leftShift","left_shift","accidentalSpacing","additionalPadding","accidentalLinePositionsAndSpaceNeeds","prevNote","extraXSpaceNeededForLeftDisplacedNotehead","props","getKeyProps","getLeftDisplacedHeadPx","lineSpace","getSpacingBetweenLines","getYForLine","accLine","extraXSpaceNeeded","spacingBetweenStaveLines","sort","staveLineAccidentalLayoutMetrics","maxExtraXSpaceNeeded","accidentalLinePositionAndSpaceNeeds","priorLineMetric","currentLineMetric","flatLine","dblSharpLine","numAcc","column","totalColumns","noFurtherConflicts","groupStart","groupEnd","checkCollision","getGroupLine","getGroupLines","indexes","lineDifference","indexA","indexB","item","notColliding","indexPairs","every","line1","line2","groupLength","groupMember","endCase","patternLength","collisionDetected","columnWidths","columnXOffsets","totalShift","accCount","lastAccOnLine","clearance","clearanceRequired","collision","applyAccidentals","voices","tickPositions","tickNoteMap","voice","tickPosition","getTickables","shouldIgnoreTicks","notesAtPosition","getTicks","music","scaleMapKey","tickPos","tickables","modifiedPitches","processNote","isRest","staveNote","keyIndex","accidentalString","pitch","sameAccidental","previouslyModified","getModifiers","modifier","addModifier","getGraceNotes","render_options","font_scale","parenLeftPadding","parenRightPadding","cautionary","fontScale","parenLeft","parenRight","parenWidth","setAsCautionary","start","getModifierStartXY","accX","accY","Stem","UP","DOWN","WIDTH","HEIGHT","stem_up_y_offset","stem_down_y_offset","stem_up_y_base_offset","stem_down_y_base_offset","x_begin","x_end","y_top","y_bottom","stem_extension","stem_direction","hide","isStemlet","stemletHeight","renderHeightAdjustment","setNoteHeadXBounds","setDirection","setExtension","ext","getExtension","setYBounds","getHeight","y_offset","getExtents","isStemUp","ys","stemHeight","innerMostNoteheadY","min","outerMostNoteheadY","topY","baseY","setVisibility","isVisible","setStemlet","adjustHeightForFlag","adjustHeightForBeam","stem_x","stem_y","y_base_offset","stemletYOffset","openGroup","pointerBBox","closeGroup","TextFormatter","textWidthCache","textHeightCache","getFontFamilies","registeredFonts","formatterInfo","create","requestedFont","candidates","requestedFamilies","requestedFamily","startsWith","formatter","values","bold","italic","perfectMatch","find","partialMatch","fontSizeInPt","getInfo","registerInfo","overwrite","serifs","monospaced","superscriptOffset","subscriptOffset","maxSizeGlyph","cacheKey","updateParams","localHeightCache","updateCacheKey","BOLD","getGlyphMetrics","character","maxHeight","getWidthForCharacterInEm","advanceWidth","getYForCharacterInPx","rv","yMin","yMax","y_min","y_max","getYForStringInPx","extent","curY","getWidthForTextInEm","cachedWidths","getWidthForTextInPx","AnnotationHorizontalJustify","AnnotationVerticalJustify","minAnnotationPadding","annotations","leftWidth","rightWidth","maxLeftGlyphWidth","maxRightGlyphWidth","annotation","textFormatter","verticalSpaceNeeded","glyphWidth","horizontalJustification","stemDirection","hasStem","getStemDirection","lines","draw_stem","getStem","getNoteType","getNumLines","verticalJustification","VerticalJustify","TOP","noteLine","getLineNumber","leastString","top_text_line","BOTTOM","greatestString","curBottom","rightOverlap","right_shift","leftOverlap","setVerticalJustification","just","VerticalJustifyString","getJustification","setJustification","HorizontalJustifyString","text_width","text_height","getStemX","stem_ext","spacing","has_stem","checkStem","getYs","yt","getYForTopText","getYForBottomText","getTopLineTopY","extents","getStemExtents","fillText","HorizontalJustify","centerStem","CENTER_STEM","top","bottom","roundToNearestHalf","mathFn","isWithinLines","getRoundingFunction","ceil","isStaveOrGraceNote","Articulation","maxGlyphWidth","getIncrement","articulation","increment","curTop","maxWidth","articWidth","overlap","easyScoreHook","builder","articNameToCode","staccato","tenuto","accent","articString","getFactory","endsWith","setBetweenLines","betweenLines","textLine","canSitBetweenLines","staffSpace","isTab","shouldSitOutsideStaff","initialOffset","isOnStemTip","getInitialOffset","padding","stemTipY","stemBaseY","getTopY","INITIAL_OFFSET","getBottomY","offsetDirection","articLine","snappedLine","snapLineToStaff","setRawFont","drawDot","color","arc","closePath","Tickable","_preFormatted","_postFormatted","intrinsicTicks","tickMultiplier","modifiers","tupletStack","align_center","center_x_shift","ignore_ticks","formatterMetrics","freedom","iterations","space","used","mean","deviation","setIgnoreTicks","checkTickContext","getFormatterMetrics","getCenterXShift","isCenterAligned","setCenterXShift","centerXShift","setCenterAlignment","getVoice","setVoice","getTuplet","tuplet","getTupletStack","resetTuplet","noteCount","notesOccupied","getNoteCount","getNotesOccupied","applyTickMultiplier","pop","setTuplet","addToModifierContext","mc","addMember","setTickContext","tc","preFormat","preFormatted","postFormat","postFormatted","getIntrinsicTicks","setIntrinsicTicks","getTickMultiplier","setDuration","getAbsoluteX","plotMetrics","xStart","leftDisplacedHeadPx","xPre1","xAbs","xPost1","notePx","xPost2","rightDisplacedHeadPx","xEnd","xFreedomRight","xWidth","yy","spaceDeviation","parseDuration","durationString","dots","parseNoteStruct","noteStruct","durationProps","customTypes","currentTicks","parsedNoteStruct","JSON","stringify","keyProps","noteType","duration_override","glyphProps","customGlyphs","playNote","annotation_spacing","glyph_font_scale","stroke_px","getPlayNote","setPlayNote","addStroke","setYs","getRightDisplacedHeadPx","setLeftDisplacedHeadPx","setRightDisplacedHeadPx","isTopNote","getLineForRest","getGlyph","getGlyphWidth","getDuration","isDotted","getModifiersByType","getBeam","beam","checkBeam","hasBeam","setBeam","signature","filter","getRightParenthesisPx","getLeftParenthesisPx","getFirstDotPx","getMembers","getState","glyphPx","getNoteStartX","getPoint","getTieRightX","tieStartX","getTieLeftX","tieEndX","getKeys","StaveModifierPosition","BarlineType","ChordSymbolHorizontalJustify","ChordSymbolVerticalJustify","SymbolTypes","SymbolModifiers","StaveModifier","placeGlyphOnLine","customShift","getPadding","setPadding","setLayoutMetrics","layoutMetrics","getLayoutMetrics","typeString","single","SINGLE","double","DOUBLE","end","END","repeatBegin","REPEAT_BEGIN","repeatEnd","REPEAT_END","repeatBoth","REPEAT_BOTH","none","NONE","thickness","TYPE","widths","paddings","layoutMetricsMap","xMin","xMax","paddingLeft","paddingRight","BEGIN","setType","getType","drawVerticalBar","drawVerticalEndBar","drawRepeatBar","double_bar","staveCtx","botY","getBottomLineBottomY","fillRect","begin","dot_x","dot_radius","dot_y","BarNote","barline","Bend","bends","last_width","stringPos","release","phrase","tap","line_width","line_style","bend_width","release_width","updateWidth","setTap","getText","getTextHeight","totalWidth","additional_width","draw_width","lowestY","bend_height","annotation_y","renderBend","cp_x","cp_y","renderRelease","renderArrowHead","yBase","renderText","render_x","measureText","last_bend","last_bend_draw_width","last_drawn_width","ChordSymbol","superSubRatio","global","NO_TEXT_FORMAT","val","noFormat","getMetricForGlyph","glyphCode","engravingFontResolution","spacingBetweenBlocks","getWidthForGlyph","metric","getYShiftForGlyph","yOffset","getXShiftForGlyph","leftSideBearing","kerningOffset","chordSymbol","lowerKerningText","upperKerningText","isSuperscript","symbolModifier","SUPERSCRIPT","isSubscript","SUBSCRIPT","minPadding","symbols","nonSuperWidth","symbol","fontAdj","glyphAdj","symbolWidth","lineSpaces","vAlign","j","symbolBlocks","sup","sub","superSubScale","adj","symbolType","GLYPH","superSubFontSize","TEXT","getYOffsetForText","over","prev","setEnableKerning","updateKerningAdjustments","updateOverBarAdjustments","getVertical","getReportWidth","getHorizontal","horizontal","vertical","useKerning","reportWidth","setReportWidth","barIndex","findIndex","xoff","yoff","symIndex","accum","getKerningAdjustment","currSymbol","prevSymbol","adjustment","preKernUpper","preKernLower","some","xx","kerningOffsetPixels","getSymbolBlock","_c","symbolBlock","glyphArgs","glyphPoints","addSymbolBlock","parameters","addText","addTextSuperscript","addTextSubscript","addGlyphSuperscript","addGlyph","addGlyphOrText","char","addLine","setVertical","vj","setHorizontal","hj","stem_base","isSuper","isSub","smallerFontSize","diminished","dim","halfDiminished","augmented","majorSeventh","leftParen","rightParen","leftBracket","rightBracket","leftParenTall","rightParenTall","symbolTypes","symbolModifiers","getDots","buildAndAttach","all","dot","setDotShiftY","dot_list","max_shift_map","note_id","dot_shift","x_width","last_line","last_note","prev_dotted_space","half_shiftY","radius","forceFlagRight","FretHandFinger","nums","nums_list","prev_note","shiftLeft","shiftRight","pos","textHeight","shiftL","shiftR","numShiftL","numShiftR","xWidthL","xWidthR","lastLine","lastNote","num_shift","numWidth","fingerings","fingeringString","number","Fingering","fingering","finger","x_offset","setFretHandFinger","getFretHandFinger","setOffsetX","setOffsetY","NoteHead","custom_glyph","stem_up_x_offset","stem_down_x_offset","note_type","glyph_code","custom_glyph_code","slashed","isDisplaced","getLine","setLine","displacementStemAdjustment","fontShift","displacedFontShift","half_spacing","min_y","getYForNote","head_x","categorySuffix","staveSpace","breve_lines","drawSlashNoteHead","setStem","buildStem","buildFlag","hasFlag","flagCode","getBaseCustomNoteHeadGlyphProps","getStemLength","getStemExtension","getBeamCount","getStemMinimumLength","setStemDirection","offsets","offsetYBaseStemUp","offsetYTopStemUp","offsetYBaseStemDown","offsetYTopStemDown","getCenterGlyphX","stem_extension_override","setStemLength","drawStem","stemOptions","shiftRestVertical","dir","delta","maxLine","minLine","setKeyLine","getKeyLine","STEM_UP","STEM_DOWN","LEDGER_LINE_OFFSET","minNoteheadPadding","notesList","sortedKeyProps","minL","stemMax","stemMin","maxL","isrest","voice_shift","getVoiceShiftWidth","is_displaced","noteU","noteM","noteL","voiceXShift","lineSpacing","lineDiff","noteUHead","noteLHead","centerRest","ledgerLineStyle","use_default_head_x","_noteHeads","calculateKeyProps","auto_stem","autoStem","noteHeadStyles","noteHead","buildNoteHeads","noteHeadStyle","calcNoteDisplacements","noteProps","notehead","calculateOptimalStemDirection","minY","maxY","halfLineSpacing","frac","resultLine","thisLine","isChord","getNoteHeadBounds","setNoteDisplaced","getRightShift","restLine","isInnerNoteIndex","setStemStyle","getStemStyle","setLedgerLineStyle","getLedgerLineStyle","setFlagStyle","getFlagStyle","setKeyStyle","noteHeadPadding","shouldDrawFlag","nonDisplacedX","displacedX","highestDisplacedLine","lowestDisplacedLine","yTop","Infinity","yBottom","highestLine","lowestLine","highestNonDisplacedLine","lowestNonDisplacedLine","displaced_x","non_displaced_x","highest_line","lowest_line","highest_displaced_line","lowest_displaced_line","highest_non_displaced_line","lowest_non_displaced_line","getNoteHeadBeginX","getNoteHeadEndX","noteHeads","note_heads","drawLedgerLines","doubleWidth","min_x","drawLedgerLine","normal","ledgerWidth","getDefaultLedgerLineStyle","drawModifiers","noteheadParam","noteheadStyle","hasNoBeam","drawFlag","_d","_e","noteStemHeight","flagX","flagY","getStaveNoteScale","drawNoteHeads","super_stem_extension","mid_line_distance","lines_over_octave_from_mid_line","spacing_between_lines","xBegin","shouldRenderStem","stemX","StaveTie","setNotes","cp1","cp2","text_shift_x","first_x_shift","last_x_shift","tie_spacing","first_note","first_indices","last_indices","isPartial","renderTie","first_ys","last_ys","last_x_px","first_x_px","first_y_px","last_y_px","top_cp_y","bottom_cp_y","center_x","getNotes","getTieStartX","getTieEndX","TabTie","createHammeron","createPulloff","VoiceMode","Voice","Mode","time","voiceTime","resolutionMultiplier","mode","STRICT","ticksUsed","largestTickWidth","softmaxFactor","totalTicks","smallestTickCount","getTotalTicks","getTicksUsed","getLargestTickWidth","getSmallestTickCount","getMode","setMode","getResolutionMultiplier","getActualResolution","tickable","setStrict","strict","SOFT","isComplete","FULL","setSoftmaxFactor","factor","expTicksUsed","reCalculateExpTicksUsed","softmax","tickValue","v","exp","addTickable","addTickables","gracenote_groups","group_list","gracenote_group","is_stavenote","formatWidth","group_shift","grace_notes","show_slur","slur","slur_y_shift","beams","Formatter","joinVoices","getMinTotalWidth","beamNotes","Beam","beam_width","partial_beam_length","graceNote","TieClass","NoteSubGroup","groups","group","Ornament","ornament","ornamentRelease","ornamentAttack","reportedWidth","ornamentArticulation","ornamentNoteTransition","ornamentAlignWithNoteHead","ornamentMetrics","delayed","accidentalLowerPadding","accidentalUpperPadding","adjustForStemDirection","stemUpYOffset","xOffset","setDelayed","setUpperAccidental","accid","accidentalUpper","setLowerAccidental","accidentalLower","stemDir","stemExtents","isPlacedOnNoteheadSide","glyphYBetweenLines","glyphX","glyphY","delayXShift","startX","nextContext","Parenthesis","parentheses","x_widthL","x_widthR","parenthesis","isHTMLCanvas","HTMLCanvasElement","toDataURL","isHTMLDiv","HTMLDivElement","appendChild","CanvasContext","CANVAS_BROWSER_SIZE_LIMIT","sanitizeCanvasDims","limit","context2D","canvas","clearRect","cls","setBackgroundFillStyle","blur","getTransform","setLineCap","capType","lineCap","setLineDash","dash","resize","devicePixelRatio","dpr","rect","cp1x","cp1y","cp2x","cp2y","cpx","cpy","startAngle","endAngle","counterclockwise","fontBoundingBoxAscent","fontBoundingBoxDescent","actualBoundingBoxAscent","actualBoundingBoxDescent","ATTRIBUTES_TO_IGNORE","path","SVG_NS","TWO_PI","SVGContext","backgroundFillStyle","fontCSSString","svg","parent","pen","defaultFontAttributes","scaleX","scaleY","attributes","groupAttributes","applyAttributes","shadow_attributes","state_stack","svgElementType","createElementNS","lineDash","visibleWidth","visibleHeight","setViewBox","viewBox_or_minX","viewBoxString","attrNamesToIgnore","nodeName","attrName","setAttributeNS","lastChild","removeChild","rectangle","x0","cos","y0","sin","tmpStartTest","tmpEndTest","large","sweep","getShadowStyle","sa","measureTextCache","txt","textContent","savedState","fontAttributes","RendererBackends","RendererLineEndType","TextJustification","VoltaType","measureImpl","getBBox","Renderer","buildContext","elementId","backend","background","renderer","lastContext","getCanvasContext","Backends","CANVAS","getSVGContext","SVG","drawDashedLine","fromX","fromY","toX","toY","dashPattern","dx","dy","angle","atan2","idx","dashLength","nx","ny","arg0","arg1","maybeElement","willReadFrequently","LineEndType","StringNumber","stringNumber","verticalPadding","stemPadding","leftPadding","rightPadding","extraXSpaceForDisplacedNotehead","glyphLine","num_shiftR","num_width","num_x_shift","string_number","stem_offset","dashed","leg","drawCircle","setLineEndType","setStringNumber","setLastNote","setDashed","setDrawCircle","len","pattern","Stroke","strokes","strokeList","string","getPositions","strokeShift","all_voices","addEndNote","note_end","line_space","arrow","arrow_shift_x","arrow_y","text_y","Type","BRUSH_DOWN","BRUSH_UP","ROLL_DOWN","RASQUEDO_DOWN","ROLL_UP","RASQUEDO_UP","ARPEGGIO_DIRECTIONLESS","strokeLine","Vibrato","vibratos","vibrato","harsh","vibrato_width","wave_height","wave_width","wave_girth","setVibratoWidth","setHarsh","vx","vy","renderVibrato","opts","num_waves","ModifierContext","members","formatted","member","getLeftShift","Clef","types","tab","annotationSmufl","attachment","KeySignature","cancelKeySpec","alterKeySpec","accList","setKeySig","glyphFontScale","xPositions","paddingForced","convertToGlyph","nextAcc","accGlyphData","extraWidth","xPosition","cancelKey","convertToCancelAccList","cancel_accList","different_types","naturals","cancelled","concat","addToStave","convertAccLines","customLines","offset","alterKey","convertToAlterAccList","firstAccidentalType","cancelAccList","getEndClef","getClef","Repetition","symbol_type","setShiftX","setShiftY","CODA_RIGHT","drawCodaFixed","CODA_LEFT","drawSymbolText","SEGNO_LEFT","drawSignoFixed","SEGNO_RIGHT","DC","DC_AL_CODA","DC_AL_FINE","DS","DS_AL_CODA","DS_AL_FINE","FINE","TO_CODA","draw_coda","text_x","symbol_x","modifierWidth","getVerticalBarWidth","StaveSection","section","drawRect","shift_x","setStaveSection","textY","headroom","StaveTempo","tempo","setTempo","bpm","noteTextFont","noteTextFormatter","stem_height","flagMetrics","TextNote","GLYPHS","segno","mordent_upper","mordent_lower","p","z","coda","pedal_open","pedal_close","caesura_straight","caesura_curved","breath","tick","superscript","subscript","smooth","justification","struct","Justification","StaveText","setStaveText","setText","getBottomLineY","Volta","volta","top_y","vert_height","BEGIN_END","TimeSignatureGlyph","timeSignature","topDigits","botDigits","topWidth","timeSigType","topGlyph","botWidth","botGlyph","lineShift","topStartX","botStartX","start_x","topLine","bottomLine","TimeSignature","timeSpec","customPadding","validate_args","is_numeric","fontLineShift","setTimeSig","parseTimeSpec","numbers","test","assertIsValidTimeSig","makeTimeSignatureGlyph","setGlyph","getTimeSpec","getIsNumeric","setIsNumeric","isNumeric","SORT_ORDER_BEG_MODIFIERS","SORT_ORDER_END_MODIFIERS","Stave","defaultPadding","end_x","measure","endClef","vertical_bar_width","num_lines","fill_style","left_bar","right_bar","spacing_between_lines_px","space_above_staff_ln","space_below_staff_ln","top_text_position","bottom_text_position","line_config","bounds","defaultLedgerLineStyle","resetLines","addEndModifier","setDefaultLedgerLineStyle","visible","setNoteStartX","getNoteEndX","setNumLines","mod","setMeasure","getMeasure","getModifierXShift","begBarline","setRepetitionType","setVoltaType","number_t","setSection","staveSection","getLineForY","setBegBarType","setEndBarType","setClefLines","clefSpec","setClef","addClef","setEndClef","setKeySignature","addKeySignature","setEndKeySignature","setTimeSignature","timeSignatures","addTimeSignature","setEndTimeSignature","addEndClef","addEndTimeSignature","addTrebleGlyph","noPosition","noCategory","sortByCategory","items","order","temp","endBarline","begModifiers","endModifiers","lastBarlineIdx","getConfigForLines","setConfigForLine","line_number","setConfigForLines","lines_configuration","formatBegModifiers","staves","adjustCategoryStartX","minStartX","adjustX","allModifiers","bAdjust","maxX","drawBoldDoubleLine","topX","StaveConnector","BOLD_DOUBLE_LEFT","BOLD_DOUBLE_RIGHT","variableWidth","top_stave","bottom_stave","texts","newType","content","SINGLE_RIGHT","THIN_DOUBLE","attachment_height","SINGLE_LEFT","BRACE","x3","y3","cpx1","cpy1","cpx2","cpy2","cpx3","cpy3","cpx4","cpy4","cpx5","cpy5","cpx6","cpy6","cpx7","cpy7","cpx8","cpy8","BRACKET","singleRight","singleLeft","brace","bracket","boldDoubleLeft","boldDoubleRight","thinDouble","TickContext","getNextContext","tContext","contexts","tContexts","tickID","currentTick","maxTicks","maxTickable","minTicks","minTickable","xBase","tickablesByVoice","totalLeftPx","totalRightPx","getTickID","getXBase","setXBase","getXOffset","getMaxTicks","getMinTicks","getMaxTickable","getMinTickable","getTickableForVoice","voiceIndex","getTickablesByVoice","getCenterAlignedTickables","getCurrentTick","setCurrentTick","getRestLineForNextNoteGroup","currRestLine","currNoteIndex","nextRestLine","noteIndex","SimpleFormat","paddingBetween","accumulator","plotDebugging","stavePadding","contextGaps","gaps","gap","totalCost","toFixed","total","FormatAndDraw","auto_beam","align_rests","applyAndGetBeams","formatToStave","FormatAndDrawTab","tabstave","tabnotes","autobeam","notevoice","tabvoice","AlignRestsToNotes","alignAllNotes","alignTuplets","currTickable","prevTickable","formatterOptions","globalSoftmax","maxIterations","justifyWidth","durationStats","minTotalWidth","hasMinTotalWidth","tickContexts","array","list","modifierContexts","lossHistory","alignRests","preCalculateMinTotalWidth","unalignedPadding","unalignedCtxCount","wsum","dsum","createTickContexts","contextList","contextMap","wavg","wvar","ll","wpads","davg","dvar","dpads","padmax","unalignedPad","createModifierContexts","tickToContextMap","integerTicks","staveTickToContextMap","newContext","makeContext","addToContext","tickList","createContexts","contextArray","getTickContexts","renderingContext","voicesParam","evaluate","firstContext","calculateIdealDistances","adjustedJustifyWidth","backTickable","prevContext","backVoices","matchingVoices","maxNegativeShiftPx","expectedDistance","thisTickable","insideLeftEdge","backMetrics","insideRightEdge","fromTickable","fromTickablePx","shiftToIdealDistances","idealDistances","centerX","spaceAccum","contextX","ideal","errorPx","negativeShiftPx","configMinPadding","configMaxPadding","targetWidth","distances","actualWidth","minDistance","mdCalc","di","calcMinDistance","paddingMaxCalc","curTargetWidth","lastTickablePadding","lastTickable","tickWidth","paddingMax","paddingMin","prevTick","prevMetrics","currMetrics","leftNoteEdge","rightNote","rightMetrics","stats","count","updateStats","totalDeviation","tune","alpha","current","cost","optionsParam","TupletLocation","Tuplet","LOCATION_TOP","LOCATION_BOTTOM","NESTING_OFFSET","tupletMetrics","numerator_glyphs","denom_glyphs","num_notes","beats_occupied","beatsOccupiedDeprecationWarning","notes_occupied","bracketed","ratioed","setTupletLocation","location","resolveGlyphs","attach","detach","setBracketed","setRatioed","getBeatsOccupied","setBeatsOccupied","beats","setNotesOccupied","unshift","getNestedTupletCount","maxTupletCount","countTuplets","minTupletCount","tupletCount","getYPosition","nested_tuplet_y_offset","topModifierOffset","modLines","modY","noteHeadOffset","stemOffset","lineCheck","nn","bottom_y","addGlyphWidth","notation_start_x","shiftY","colon_x","colon_radius","calculateStemDirection","lineSum","keyProp","BEAM_LEFT","BEAM_RIGHT","BEAM_BOTH","getDefaultBeamGroups","time_sig","beatTotal","beatValue","generateBeams","config","tickGroups","unprocessedNotes","currentTickGroup","noteGroups","currentGroup","nextTickGroup","nextGroup","currentGroupTotalTicks","unprocessedNote","ticksPerGroup","vf_notes","memo","unbeamable","createGroups","sanitizedGroups","tempGroup","isFirstOrLast","breaksOnEachRest","beam_rests","breaksOnFirstOrLastRest","beam_middle_only","breakOnStemChange","maintain_stem_directions","prevDirection","isUnbeamableDuration","sanitizeGroups","findFirstNote","applyStemDirection","beamedNoteGroups","beamable","allTuplets","uniqueTuplets","noteTuplet","getTuplets","show_stemlets","secondary_breaks","secondary_break_ticks","flat_beams","flat_beam_offset","slope","forcedPartialDirections","stem_weight","break_on_indices","max_slope","min_slope","slope_iterations","slope_cost","stemlet_extension","min_flat_beam_offset","beamCount","breakSecondaryAt","indices","setPartialBeamSideAt","side","unsetPartialBeamSideAt","getSlopeY","calculateSlope","firstNote","initialSlope","firstStemTipY","firstStemX","getStemSlope","minCost","MAX_VALUE","bestSlope","totalStemExtension","yShiftTemp","adjustedStemTipY","diff","idealSlope","calculateFlatSlope","extremeY","extremeBeamCount","currentExtreme","extremeTest","newOffset","getBeamYToDraw","beamY","applyStemExtensions","beamedStemTipY","preBeamExtension","beamExtension","crossStemExtension","totalBeamWidth","lookupBeamDirection","prev_tick","next_tick","forcedBeamDirection","lookup_duration","prev_note_gets_beam","next_note_gets_beam","note_gets_beam","getBeamLines","tick_of_duration","beam_started","beam_lines","current_beam","previous_should_break","tick_tally","should_break","next_note","beam_alone","beam_direction","last_beam","drawStems","drawBeamLines","valid_beam_durations","beamThickness","beamLines","beam_line","startBeamX","startBeamY","lastBeamX","lastBeamY","ClefNote","abs_x","Crescendo","extend_left","extend_right","decrescendo","setHeight","setDecrescendo","decresc","tick_context","next_context","begin_x","half_height","reverse","renderHairpin","CurvePosition","Curve","nearHead","NEAR_HEAD","nearTop","NEAR_TOP","from","to","position_end","invert","cps","renderCurve","first_x","first_y","last_x","last_y","cp0x","cp0y","cp_spacing","end_metric","Parser","flattenMatches","matchedString","results","grammar","errorPos","expect","matchFail","returnPos","matchSuccess","matchToken","token","noSpace","regexp","RegExp","success","incrementPos","expectOne","rule","maybe","allMatches","oneMatch","localPos","or","gotOne","numMatches","expectOneOrMore","more","expectZeroOrMore","ruleFunc","bind","oneOrMore","zeroOrMore","matches","run","EasyScore","EasyScoreGrammar","PIECE","PIECES","EOL","CHORDORNOTE","PARAMS","commitPiece","COMMA","DURATION","DOTS","OPTS","CHORD","SINGLENOTE","LPAREN","NOTES","RPAREN","addChord","NOTE","NOTENAME","ACCIDENTAL","OCTAVE","addSingleNote","MICROTONES","ACCIDENTALS","DOT","setNoteDots","SLASH","MAYBESLASH","TYPES","setNoteType","DURATIONS","setNoteDuration","LBRACKET","KEYVAL","KEYVALS","RBRACKET","KEY","EQUALS","VAL","addNoteOption","SVAL","DVAL","Piece","chord","Builder","commitHooks","elements","rollingDuration","resetPiece","getElements","addCommitHook","commitHook","piece","addNote","standardAccidentals","notePiece","GhostNote","setId","commaSeparatedRegex","setClass","defaults","throwOnError","parser","ERROR_MSG","parameter","GlyphNote","ignoreTicks","SCALE","slash","ret","staveNoteScale","offsetScale","slashBBox","calcBeamedNotesSlashBBox","noteHeadBounds","defaultStemExtention","defaultOffsetY","slashStemOffset","slashBeamOffset","protrusions","beam_slope","beam_angle","atan","iPointOnBeam","slash_angle","protrusion_stem_dx","protrusion_stem_dy","protrusion_beam_dx","protrusion_beam_dy","stem0X","stemY","KeySigNote","semibreve_rest","MultiMeasureRest","number_of_measures","xs","hasPaddingLeft","hasPaddingRight","hasLineThickness","hasSymbolSpacing","padding_left","padding_right","line_thickness","symbol_spacing","use_symbols","show_number","number_line","number_glyph_point","serif_thickness","semibreve_rest_glyph_scale","getXs","drawLine","spacingBetweenLines","lineThicknessHalf","serifThickness","bot","leftIndented","rightIndented","lineTop","lineBottom","drawSymbols","n4","n2","n1","get_semibreve_rest","rest_scale","rest_width","yMiddle","timeSig","drawPedalGlyph","glyph_data","PedalMarking","createSustain","createSostenuto","pedal","MIXED","setCustomText","createUnaCorda","custom_depress_text","custom_release_text","bracket_height","text_margin_right","bracket_line_width","depress","drawBracketed","prev_x","prev_y","is_pedal_depressed","next_is_same","prev_is_same","drawText","pedal_depress","pedal_release","mixed","CODES","RepeatNote","drawArrowHead","StaveLine","line_dash","rounded_end","draw_start_arrow","draw_end_arrow","arrowhead_length","arrowhead_angle","text_position_vertical","TextVerticalPosition","text_justification","applyLineStyle","applyFontStyle","drawArrowLine","pt1","pt2","both_arrows","distance","ratio","end_y","start_y","line_angle","angle1","angle2","top_x","bottom_x","start_position","end_position","first_index","last_index","upwards_slope","notehead_width","vertical_position","System","partStaves","partStaveInfos","partVoices","spaceBetweenStaves","autoWidth","noJustification","debugFormatter","formatIterations","noPadding","details","formatOptions","getStaves","getVoices","addConnector","connector","addStave","staveOptions","spaceAbove","spaceBelow","debugNoteMetrics","addVoices","options_details","debugNoteMetricsYs","part","lastY","glyphPropsArr","positions","ghost","draw_dots","draw_stem_through_stave","setGhost","getStemY","stemDownLine","stemStartLine","flag_x","flag_y","drawStemThrough","stemThrough","stemLines","unused_strings","up_stem","down_stem","line_spacing","total_lines","stem_lines","strings","containsLastString","containsFirstString","line_ys","isTopBound","isBottomBound","getPartialStemLines","strings_used","stem_through","getUnusedStringGroups","drawPositions","tab_x","render_stem","TabStave","addTabGlyph","TextBracket","TextBracketPosition","Positions","PositionsString","stop","show_bracket","underline_superscript","main_measure","main_width","main_height","super_y","super_measure","super_width","super_height","line_y","TextDynamics","sequence","glyph_font_size","total_width","letter","letter_x","current_letter","TimeSigNote","tsGlyph","VibratoBracket","bracket_data","stop_x","Factory","newFromElementId","renderQ","systems","initRenderer","ghostNote","textNote","barNote","clefNote","timeSigNote","keySigNote","hJustify","vJustify","kerning","upperAccidental","lowerAccidental","numMeasures","multiMeasureRest","secondaryBeamBreaks","partialBeamDirections","curve","tie","vibratoBracket","textBracket","system","GraceTabNote","KeyManager","setKey","getKey","scaleMapByValue","originalScaleMapByValue","getAccidental","selectNote","scaleNote","modparts","change","valueNote","originalValueNote","StaveHairpin","FormatByTicksAndDraw","ppt","pixelsPerTick","l_shift_px","left_shift_ticks","r_shift_px","right_shift_ticks","hairpin_options","left_shift_px","right_shift_px","setRenderOptions","hairpin","dis","staff_height","l_shift","r_shift","CRESC","DECRESC","TabSlide","SLIDE_UP","SLIDE_DOWN","createSlideUp","createSlideDown","first_fret","last_fret","slide_y","Tremolo","y_spacing_scale","extra_stroke_scale","y_spacing","Tuning","names","standard","dagdad","dropd","standardBanjo","doubleCBanjo","doubleDBanjo","sawmillBanjo","tuningString","tuningValues","setTuning","noteToInteger","getValueForString","stringNum","getValueForFret","fretNum","stringValue","getNoteForFret","Flow","BUILD","VERSION","DATE","setMusicFont","fontNames","fetchMusicFont","fontModuleOrPath","getMusicFont","getMusicFontStack","CommonMetrics","smufl","endPaddingMax","endPaddingMin","unalignedNotePadding","csymDiminished","csymHalfDiminished","csymAugmented","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","csymMinor","csymMajorSeventh","accidentalSharp","accidentalFlat","clef_default","shiftX","clef_small","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","default","gracenote","pedalMarking","digits","shiftLine","articStaccatissimoAbove","articStaccatissimoBelow","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","heightAdjustmentForFlag","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadTriangleUpWhole","noteheadXHalf","noteheadXBlack","noteheadXWhole","noteheadHalf","noteheadBlack","noteheadSquareWhite","staveTempo","gClef","clefNote_default","clefNote_small","stroke_straight","arrowheadBlackDown","arrowheadBlackUp","stroke_wiggly","breathMarkTick","breathMarkComma","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","CustomFont","vexAccidentalMicrotonal1","vexAccidentalMicrotonal3","vexAccidentalMicrotonal4","vexNoteHeadRectBlack","vexNoteHeadRectWhite","vexWiggleArpeggioUp","LelandFont","bracketTop","bracketBottom","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","noteheadDoubleWhole","noteheadWhole","noteheadCircleX","noteheadDoubleWholeSquare","noteheadSquareBlack","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalNatural","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBuyukMucennebSharp","accidentalBakiyeFlat","accidentalKucukMucennebSharp","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataShortAbove","fermataShortBelow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompTrillLowerSuffix","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","keyboardPedalPed","keyboardPedalUp","wiggleArpeggiatoUp","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","generatedOn","PetalumaScriptFont","$","I","J","K","N","O","Q","U","V","Y","Z","_","l","RobotoSlabFont","SansFontBold","SansFont","Description","SerifFont","Vex","sortAndUnique","cmp","eq","newArr","last","contains","canvasSelector","benchmark","start_time","Date","getTime","stackTrace","fontData","description","loadTextFonts"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-petaluma.js b/build/cjs/vexflow-petaluma.js new file mode 100644 index 0000000000..aed2febbb6 --- /dev/null +++ b/build/cjs/vexflow-petaluma.js @@ -0,0 +1,7 @@ +/*! + * VexFlow 4.2.6 2024-08-26T20:16:17.134Z 103aad2b14837418c5e96c9e078edd036fcddf60 + * Copyright (c) 2010 Mohit Muthanna Cheppudira + * https://www.vexflow.com https://github.com/0xfe/vexflow + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Vex=e():t.Vex=e()}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};t.d(e,{default:()=>i});var i={};function n(t,e,i=!0){if("object"!=typeof t||null===t)return!1;let n=t.constructor;if(i){for(;null!==t;){if(n=t.constructor,"CATEGORY"in n&&n.CATEGORY===e)return!0;t=Object.getPrototypeOf(t)}return!1}return"CATEGORY"in n&&n.CATEGORY===e}t.r(i),t.d(i,{Accidental:()=>nt,Annotation:()=>dt,AnnotationHorizontalJustify:()=>ct,AnnotationVerticalJustify:()=>lt,Articulation:()=>ft,BEAM_BOTH:()=>Re,BEAM_LEFT:()=>Fe,BEAM_RIGHT:()=>Oe,BarNote:()=>Dt,Barline:()=>At,BarlineType:()=>Bt,Beam:()=>We,Bend:()=>Mt,BoundingBox:()=>C,BoundingBoxComputation:()=>P,Builder:()=>Ke,CanvasContext:()=>Qt,Category:()=>_,ChordSymbol:()=>Ot,ChordSymbolHorizontalJustify:()=>Et,ChordSymbolVerticalJustify:()=>Ct,Clef:()=>me,ClefNote:()=>Le,Crescendo:()=>Ie,Curve:()=>Ge,CurvePosition:()=>ze,Dot:()=>Rt,EasyScore:()=>Qe,EasyScoreGrammar:()=>Xe,Element:()=>W,Factory:()=>vi,Flow:()=>Ai,Font:()=>F,FontStyle:()=>k,FontWeight:()=>N,Formatter:()=>ke,Fraction:()=>B,FretHandFinger:()=>Wt,GhostNote:()=>ti,Glyph:()=>Z,GlyphNote:()=>ei,GraceNote:()=>ii,GraceNoteGroup:()=>Xt,GraceTabNote:()=>wi,KeyManager:()=>Bi,KeySigNote:()=>ni,KeySignature:()=>ge,Modifier:()=>tt,ModifierContext:()=>de,ModifierPosition:()=>J,MultiMeasureRest:()=>ai,Music:()=>et,Note:()=>vt,NoteHead:()=>Lt,NoteSubGroup:()=>Vt,Ornament:()=>Kt,OutlineCode:()=>$,Parenthesis:()=>$t,Parser:()=>He,PedalMarking:()=>ri,Piece:()=>Ve,Registry:()=>R,RenderContext:()=>yt,Renderer:()=>re,RendererBackends:()=>ne,RendererLineEndType:()=>se,RepeatNote:()=>bi,Repetition:()=>_e,RuntimeError:()=>x,SVGContext:()=>ie,Stave:()=>Be,StaveConnector:()=>Ce,StaveHairpin:()=>Ei,StaveLine:()=>li,StaveModifier:()=>kt,StaveModifierPosition:()=>wt,StaveNote:()=>Gt,StaveSection:()=>xe,StaveTempo:()=>ue,StaveText:()=>fe,StaveTie:()=>Ut,Stem:()=>st,StemmableNote:()=>It,StringNumber:()=>he,Stroke:()=>be,SymbolModifiers:()=>Nt,SymbolTypes:()=>Pt,System:()=>di,TabNote:()=>mi,TabSlide:()=>Ci,TabStave:()=>gi,TabTie:()=>Yt,TextBracket:()=>ui,TextBracketPosition:()=>xi,TextDynamics:()=>fi,TextFormatter:()=>bt,TextJustification:()=>ae,TextNote:()=>pe,TickContext:()=>Pe,Tickable:()=>Tt,TimeSigNote:()=>yi,TimeSignature:()=>Te,TimeSignatureGlyph:()=>Se,Tremolo:()=>Pi,Tuning:()=>Ni,Tuplet:()=>De,TupletLocation:()=>Ae,Vex:()=>Gi,Vibrato:()=>ce,VibratoBracket:()=>Si,Voice:()=>jt,VoiceMode:()=>Ht,Volta:()=>ye,VoltaType:()=>oe,defined:()=>p,drawDot:()=>St,globalObject:()=>u,isAccidental:()=>s,isAnnotation:()=>a,isBarline:()=>o,isCategory:()=>n,isDot:()=>r,isGraceNote:()=>h,isGraceNoteGroup:()=>b,isHTMLCanvas:()=>Jt,isHTMLDiv:()=>qt,isNote:()=>c,isRenderContext:()=>l,isStaveNote:()=>d,isStemmableNote:()=>m,isTabNote:()=>g,log:()=>f,midLine:()=>S,normalizeAngle:()=>v,prefix:()=>T,sumArray:()=>w,warn:()=>y});const s=t=>n(t,_.Accidental),a=t=>n(t,_.Annotation),o=t=>n(t,_.Barline),r=t=>n(t,_.Dot),h=t=>n(t,_.GraceNote),b=t=>n(t,_.GraceNoteGroup),c=t=>n(t,_.Note),l=t=>n(t,_.RenderContext),d=t=>n(t,_.StaveNote),m=t=>n(t,_.StemmableNote),g=t=>n(t,_.TabNote);var _;!function(t){t.Accidental="Accidental",t.Annotation="Annotation",t.Articulation="Articulation",t.Barline="Barline",t.BarNote="BarNote",t.Beam="Beam",t.Bend="Bend",t.ChordSymbol="ChordSymbol",t.Clef="Clef",t.ClefNote="ClefNote",t.Crescendo="Crescendo",t.Curve="Curve",t.Dot="Dot",t.Element="Element",t.Fraction="Fraction",t.FretHandFinger="FretHandFinger",t.GhostNote="GhostNote",t.Glyph="Glyph",t.GlyphNote="GlyphNote",t.GraceNote="GraceNote",t.GraceNoteGroup="GraceNoteGroup",t.GraceTabNote="GraceTabNote",t.KeySignature="KeySignature",t.KeySigNote="KeySigNote",t.Modifier="Modifier",t.MultiMeasureRest="MultiMeasureRest",t.Note="Note",t.NoteHead="NoteHead",t.NoteSubGroup="NoteSubGroup",t.Ornament="Ornament",t.Parenthesis="Parenthesis",t.PedalMarking="PedalMarking",t.RenderContext="RenderContext",t.RepeatNote="RepeatNote",t.Repetition="Repetition",t.Stave="Stave",t.StaveConnector="StaveConnector",t.StaveHairpin="StaveHairpin",t.StaveLine="StaveLine",t.StaveModifier="StaveModifier",t.StaveNote="StaveNote",t.StaveSection="StaveSection",t.StaveTempo="StaveTempo",t.StaveText="StaveText",t.StaveTie="StaveTie",t.Stem="Stem",t.StemmableNote="StemmableNote",t.StringNumber="StringNumber",t.Stroke="Stroke",t.System="System",t.TabNote="TabNote",t.TabSlide="TabSlide",t.TabStave="TabStave",t.TabTie="TabTie",t.TextBracket="TextBracket",t.TextDynamics="TextDynamics",t.TextNote="TextNote",t.Tickable="Tickable",t.TimeSignature="TimeSignature",t.TimeSigNote="TimeSigNote",t.Tremolo="Tremolo",t.Tuplet="Tuplet",t.Vibrato="Vibrato",t.VibratoBracket="VibratoBracket",t.Voice="Voice",t.Volta="Volta"}(_||(_={}));class x extends Error{constructor(t,e=""){super("[RuntimeError] "+t+": "+e),this.code=t}}function u(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:Function("return this")()}function p(t,e="undefined",i=""){if(void 0===t)throw new x(e,i);return t}function f(t,...e){if(!e)return;const i=Array.prototype.slice.call(e).join(" ");u().console.log(t+": "+i)}function y(...t){const e=t.join(" "),i=new Error;u().console.log("Warning: ",e,i.stack)}function S(t,e){let i=e+(t-e)/2;var n,s;return i%2>0&&(i=((n=10*i)%(s=5)>=s/2?parseInt(""+n/s,10)*s+s:parseInt(""+n/s,10)*s)/10),i}function T(t){return`vf-${t}`}function v(t){return(t%=2*Math.PI)<0&&(t+=2*Math.PI),t}function w(t){return t.reduce(((t,e)=>t+e),0)}class B{static get CATEGORY(){return _.Fraction}static GCD(t,e){if("number"!=typeof t||Number.isNaN(t)||"number"!=typeof e||Number.isNaN(e))throw new x("BadArgument",`Invalid numbers: ${t}, ${e}`);let i;for(;0!==e;)i=e,e=t%e,t=i;return t}static LCM(t,e){return t*e/B.GCD(t,e)}static LCMM(t){return 0===t.length?0:1===t.length?t[0]:2===t.length?B.LCM(t[0],t[1]):B.LCM(t.shift(),B.LCMM(t))}constructor(t,e){this.numerator=1,this.denominator=1,this.set(t,e)}set(t=1,e=1){return this.numerator=t,this.denominator=e,this}value(){return this.numerator/this.denominator}simplify(){let t=this.numerator,e=this.denominator;const i=B.GCD(t,e);return t/=i,e/=i,e<0&&(e=-e,t=-t),this.set(t,e)}add(t=0,e=1){const[i,n]=E(t,e),s=B.LCM(this.denominator,n),a=s/this.denominator,o=s/n,r=this.numerator*a+i*o;return this.set(r,s)}subtract(t=0,e=1){const[i,n]=E(t,e),s=B.LCM(this.denominator,n),a=s/this.denominator,o=s/n,r=this.numerator*a-i*o;return this.set(r,s)}multiply(t=1,e=1){const[i,n]=E(t,e);return this.set(this.numerator*i,this.denominator*n)}divide(t=1,e=1){const[i,n]=E(t,e);return this.set(this.numerator*n,this.denominator*i)}equals(t){const e=B.__staticFractionA.copy(t).simplify(),i=B.__staticFractionB.copy(this).simplify();return e.numerator===i.numerator&&e.denominator===i.denominator}greaterThan(t){const e=B.__staticFractionB.copy(this);return e.subtract(t),e.numerator>0}greaterThanEquals(t){const e=B.__staticFractionB.copy(this);return e.subtract(t),e.numerator>=0}lessThan(t){return!this.greaterThanEquals(t)}lessThanEquals(t){return!this.greaterThan(t)}clone(){return new B(this.numerator,this.denominator)}copy(t){return"number"==typeof t?this.set(t,1):this.set(t.numerator,t.denominator)}quotient(){return Math.floor(this.numerator/this.denominator)}remainder(){return this.numerator%this.denominator}makeAbs(){return this.denominator=Math.abs(this.denominator),this.numerator=Math.abs(this.numerator),this}toString(){return`${this.numerator}/${this.denominator}`}toSimplifiedString(){return B.__staticFractionTmp.copy(this).simplify().toString()}toMixedString(){let t="";const e=this.quotient(),i=B.__staticFractionTmp.copy(this);return e<0&&i.makeAbs(),0!==e?(t+=e,0!==i.numerator&&(t+=` ${i.toSimplifiedString()}`)):t=0===i.numerator?"0":i.toSimplifiedString(),t}parse(t){const e=t.split("/"),i=parseInt(e[0],10),n=e[1]?parseInt(e[1],10):1;return this.set(i,n)}}function E(t,e=1){return"number"==typeof t?[t,e]:[t.numerator,t.denominator]}B.__staticFractionA=new B,B.__staticFractionB=new B,B.__staticFractionTmp=new B;class C{static copy(t){return new C(t.x,t.y,t.w,t.h)}constructor(t,e,i,n){this.x=t,this.y=e,this.w=i,this.h=n}getX(){return this.x}getY(){return this.y}getW(){return this.w}getH(){return this.h}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setW(t){return this.w=t,this}setH(t){return this.h=t,this}move(t,e){return this.x+=t,this.y+=e,this}clone(){return C.copy(this)}mergeWith(t){const e=t,i=this.xthis.x2)&&(this.x2=t),(isNaN(this.y1)||ethis.y2)&&(this.y2=e)}addX(t){this.addPoint(t,this.y1)}addY(t){this.addPoint(this.x1,t)}addQuadraticCurve(t,e,i,n,s,a){this.addPoint(t,e),this.addPoint(s,a);const o=i-t;let r=o-(s-i);if(0!=r){const e=o/r;if(e>0&&e<1){const n=1-e;this.addX(n*n*t+2*n*e*i+e*e*s)}}const h=n-e;if(r=h-(a-n),0!=r){const t=h/r;if(t>0&&t<1){const i=1-t;this.addY(i*i*e+2*i*t*n+t*t*a)}}}addBezierCurve(t,e,i,n,s,a,o,r){const h=[t,e],b=[i,n],c=[s,a],l=[o,r];let d;this.addPoint(h[0],h[1]),this.addPoint(l[0],l[1]);const m=(t,e)=>Math.pow(1-t,3)*h[e]+3*Math.pow(1-t,2)*t*b[e]+3*(1-t)*Math.pow(t,2)*c[e]+Math.pow(t,3)*l[e];for(d=0;d<=1;d++){const t=6*h[d]-12*b[d]+6*c[d],e=-3*h[d]+9*b[d]-9*c[d]+3*l[d],i=3*b[d]-3*h[d];if(0===e){if(0===t)continue;const e=-i/t;0=600;{const e=parseInt(t,10);return isNaN(e)?"bold"===t.toLowerCase():e>=600}}return!1}static isItalic(t){return!!t&&t.toLowerCase()===k.ITALIC}static loadWebFont(t,e,i=!0){return A(this,void 0,void 0,(function*(){const n=new FontFace(t,(i?`url(${e}2) format('woff2'), `:"")+`url(${e}) format('woff')`);return yield n.load(),document.fonts.add(n),n}))}static loadWebFonts(){return A(this,void 0,void 0,(function*(){const t=F.WEB_FONT_HOST,e=F.WEB_FONT_FILES;for(const i in e){const n=e[i];F.loadWebFont(i,t+n)}}))}static load(t,e,i){let n=M[t];return n||(n=new F(t),M[t]=n),e&&n.setData(e),i&&n.setMetrics(i),n}constructor(t){this.name=t}getName(){return this.name}getData(){return p(this.data,"FontError","Missing font data")}getMetrics(){return p(this.metrics,"FontError","Missing metrics")}setData(t){this.data=t}setMetrics(t){this.metrics=t}hasData(){return void 0!==this.data}getResolution(){return this.getData().resolution}getGlyphs(){return this.getData().glyphs}lookupMetric(t,e){const i=t.split(".");let n=this.getMetrics();for(let t=0;tt[e]))}}return[]}getElementsByType(t){return this.getElementsByAttribute("type",t)}getElementsByClass(t){return this.getElementsByAttribute("class",t)}onUpdate(t){return["id","type","class"].includes(t.name)&&this.updateIndex(t),this}}class W{static get CATEGORY(){return _.Element}static newID(){return"auto"+W.ID++}constructor(){var t;this.children=[],this.attrs={id:W.newID(),type:this.getCategory(),class:""},this.rendered=!1,null===(t=R.getDefaultRegistry())||void 0===t||t.register(this)}addChildElement(t){return this.children.push(t),this}getCategory(){return this.constructor.CATEGORY}setStyle(t){return this.style=t,this}setGroupStyle(t){return this.style=t,this.children.forEach((e=>e.setGroupStyle(t))),this}getStyle(){return this.style}applyStyle(t=this.context,e=this.getStyle()){return e&&t?(t.save(),e.shadowColor&&t.setShadowColor(e.shadowColor),e.shadowBlur&&t.setShadowBlur(e.shadowBlur),e.fillStyle&&t.setFillStyle(e.fillStyle),e.strokeStyle&&t.setStrokeStyle(e.strokeStyle),e.lineWidth&&t.setLineWidth(e.lineWidth),this):this}restoreStyle(t=this.context,e=this.getStyle()){return e&&t?(t.restore(),this):this}drawWithStyle(){this.checkContext(),this.applyStyle(),this.draw(),this.restoreStyle()}hasClass(t){var e;return!!this.attrs.class&&-1!=(null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ").indexOf(t))}addClass(t){var e;return this.hasClass(t)||(this.attrs.class?this.attrs.class=`${this.attrs.class} ${t}`:this.attrs.class=`${t}`,null===(e=this.registry)||void 0===e||e.onUpdate({id:this.attrs.id,name:"class",value:t,oldValue:void 0})),this}removeClass(t){var e,i;if(!this.hasClass(t))return this;const n=null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ");return n&&(n.splice(n.indexOf(t)),this.attrs.class=n.join(" ")),null===(i=this.registry)||void 0===i||i.onUpdate({id:this.attrs.id,name:"class",value:void 0,oldValue:t}),this}onRegister(t){return this.registry=t,this}isRendered(){return this.rendered}setRendered(t=!0){return this.rendered=t,this}getAttributes(){return this.attrs}getAttribute(t){return this.attrs[t]}getSVGElement(t=""){const e=T(this.attrs.id+t),i=document.getElementById(e);if(i)return i}setAttribute(t,e){var i;const n=this.attrs.id,s=this.attrs[t];return this.attrs[t]=e,null===(i=this.registry)||void 0===i||i.onUpdate({id:n,name:t,value:e,oldValue:s}),this}getBoundingBox(){return this.boundingBox}getContext(){return this.context}setContext(t){return this.context=t,this}checkContext(){return p(this.context,"NoContext","No rendering context attached to instance.")}set font(t){this.setFont(t)}get font(){return F.toCSSString(this.textFont)}setFont(t,e,i,n){const s=this.constructor.TEXT_FONT,a="object"==typeof t,o="string"==typeof t,r=void 0===t,h=void 0===e&&void 0===i&&void 0===n;return this.textFont=a?Object.assign(Object.assign({},s),t):o&&h?F.fromCSSString(t):r&&h?Object.assign({},s):F.validate(null!=t?t:s.family,null!=e?e:s.size,null!=i?i:s.weight,null!=n?n:s.style),this}getFont(){return this.textFont||this.resetFont(),F.toCSSString(this.textFont)}resetFont(){this.setFont()}get fontInfo(){return this.textFont||this.resetFont(),Object.assign({},this.textFont)}set fontInfo(t){this.setFont(t)}setFontSize(t){const e=this.fontInfo;return this.setFont(e.family,t,e.weight,e.style),this}getFontSize(){return this.fontSize}set fontSize(t){this.setFontSize(t)}get fontSize(){let t=this.fontInfo.size;return"number"==typeof t&&(t=`${t}pt`),t}get fontSizeInPoints(){return F.convertSizeToPointValue(this.fontSize)}get fontSizeInPixels(){return F.convertSizeToPixelValue(this.fontSize)}get fontStyle(){return this.fontInfo.style}set fontStyle(t){const e=this.fontInfo;this.setFont(e.family,e.size,e.weight,t)}get fontWeight(){return this.fontInfo.weight+""}set fontWeight(t){const e=this.fontInfo;this.setFont(e.family,e.size,t,e.style)}}W.ID=1e3,W.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:N.NORMAL,style:k.NORMAL};const L=16384,I={"1/2":32768,1:16384,2:8192,4:4096,8:2048,16:1024,32:512,64:256,128:128,256:64},z={w:"1",h:"2",q:"4",b:"256"},G={C:{num:0},Am:{num:0},F:{acc:"b",num:1},Dm:{acc:"b",num:1},Bb:{acc:"b",num:2},Gm:{acc:"b",num:2},Eb:{acc:"b",num:3},Cm:{acc:"b",num:3},Ab:{acc:"b",num:4},Fm:{acc:"b",num:4},Db:{acc:"b",num:5},Bbm:{acc:"b",num:5},Gb:{acc:"b",num:6},Ebm:{acc:"b",num:6},Cb:{acc:"b",num:7},Abm:{acc:"b",num:7},G:{acc:"#",num:1},Em:{acc:"#",num:1},D:{acc:"#",num:2},Bm:{acc:"#",num:2},A:{acc:"#",num:3},"F#m":{acc:"#",num:3},E:{acc:"#",num:4},"C#m":{acc:"#",num:4},B:{acc:"#",num:5},"G#m":{acc:"#",num:5},"F#":{acc:"#",num:6},"D#m":{acc:"#",num:6},"C#":{acc:"#",num:7},"A#m":{acc:"#",num:7}},U={treble:{line_shift:0},bass:{line_shift:6},tenor:{line_shift:4},alto:{line_shift:3},soprano:{line_shift:1},percussion:{line_shift:0},"mezzo-soprano":{line_shift:2},"baritone-c":{line_shift:5},"baritone-f":{line_shift:5},subbass:{line_shift:7},french:{line_shift:-1}},Y={C:{index:0,int_val:0},CN:{index:0,int_val:0,accidental:"n"},"C#":{index:0,int_val:1,accidental:"#"},"C##":{index:0,int_val:2,accidental:"##"},CB:{index:0,int_val:11,accidental:"b"},CBB:{index:0,int_val:10,accidental:"bb"},D:{index:1,int_val:2},DN:{index:1,int_val:2,accidental:"n"},"D#":{index:1,int_val:3,accidental:"#"},"D##":{index:1,int_val:4,accidental:"##"},DB:{index:1,int_val:1,accidental:"b"},DBB:{index:1,int_val:0,accidental:"bb"},E:{index:2,int_val:4},EN:{index:2,int_val:4,accidental:"n"},"E#":{index:2,int_val:5,accidental:"#"},"E##":{index:2,int_val:6,accidental:"##"},EB:{index:2,int_val:3,accidental:"b"},EBB:{index:2,int_val:2,accidental:"bb"},F:{index:3,int_val:5},FN:{index:3,int_val:5,accidental:"n"},"F#":{index:3,int_val:6,accidental:"#"},"F##":{index:3,int_val:7,accidental:"##"},FB:{index:3,int_val:4,accidental:"b"},FBB:{index:3,int_val:3,accidental:"bb"},G:{index:4,int_val:7},GN:{index:4,int_val:7,accidental:"n"},"G#":{index:4,int_val:8,accidental:"#"},"G##":{index:4,int_val:9,accidental:"##"},GB:{index:4,int_val:6,accidental:"b"},GBB:{index:4,int_val:5,accidental:"bb"},A:{index:5,int_val:9},AN:{index:5,int_val:9,accidental:"n"},"A#":{index:5,int_val:10,accidental:"#"},"A##":{index:5,int_val:11,accidental:"##"},AB:{index:5,int_val:8,accidental:"b"},ABB:{index:5,int_val:7,accidental:"bb"},B:{index:6,int_val:11},BN:{index:6,int_val:11,accidental:"n"},"B#":{index:6,int_val:12,accidental:"#"},"B##":{index:6,int_val:13,accidental:"##"},BB:{index:6,int_val:10,accidental:"b"},BBB:{index:6,int_val:9,accidental:"bb"},R:{index:6,rest:!0},X:{index:6,accidental:"",octave:4,code:"noteheadXBlack",shift_right:5.5}},H={"#":{code:"accidentalSharp",parenRightPaddingAdjustment:-1},"##":{code:"accidentalDoubleSharp",parenRightPaddingAdjustment:-1},b:{code:"accidentalFlat",parenRightPaddingAdjustment:-2},bb:{code:"accidentalDoubleFlat",parenRightPaddingAdjustment:-2},n:{code:"accidentalNatural",parenRightPaddingAdjustment:-1},"{":{code:"accidentalParensLeft",parenRightPaddingAdjustment:-1},"}":{code:"accidentalParensRight",parenRightPaddingAdjustment:-1},db:{code:"accidentalThreeQuarterTonesFlatZimmermann",parenRightPaddingAdjustment:-1},d:{code:"accidentalQuarterToneFlatStein",parenRightPaddingAdjustment:0},"++":{code:"accidentalThreeQuarterTonesSharpStein",parenRightPaddingAdjustment:-1},"+":{code:"accidentalQuarterToneSharpStein",parenRightPaddingAdjustment:-1},"+-":{code:"accidentalKucukMucennebSharp",parenRightPaddingAdjustment:-1},bs:{code:"accidentalBakiyeFlat",parenRightPaddingAdjustment:-1},bss:{code:"accidentalBuyukMucennebFlat",parenRightPaddingAdjustment:-1},o:{code:"accidentalSori",parenRightPaddingAdjustment:-1},k:{code:"accidentalKoron",parenRightPaddingAdjustment:-1},bbs:{code:"vexAccidentalMicrotonal1",parenRightPaddingAdjustment:-1},"++-":{code:"accidentalBuyukMucennebSharp",parenRightPaddingAdjustment:-1},ashs:{code:"vexAccidentalMicrotonal3",parenRightPaddingAdjustment:-1},afhf:{code:"vexAccidentalMicrotonal4",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaUp:{code:"accSagittal5v7KleismaUp",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaDown:{code:"accSagittal5v7KleismaDown",parenRightPaddingAdjustment:-1},accSagittal5CommaUp:{code:"accSagittal5CommaUp",parenRightPaddingAdjustment:-1},accSagittal5CommaDown:{code:"accSagittal5CommaDown",parenRightPaddingAdjustment:-1},accSagittal7CommaUp:{code:"accSagittal7CommaUp",parenRightPaddingAdjustment:-1},accSagittal7CommaDown:{code:"accSagittal7CommaDown",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisUp:{code:"accSagittal25SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisDown:{code:"accSagittal25SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisUp:{code:"accSagittal35MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisDown:{code:"accSagittal35MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisUp:{code:"accSagittal11MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisDown:{code:"accSagittal11MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisUp:{code:"accSagittal11LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisDown:{code:"accSagittal11LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisUp:{code:"accSagittal35LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisDown:{code:"accSagittal35LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SDown:{code:"accSagittalSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalFlat25SUp:{code:"accSagittalFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7CDown:{code:"accSagittalSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7CUp:{code:"accSagittalFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5CDown:{code:"accSagittalSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5CUp:{code:"accSagittalFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kDown:{code:"accSagittalSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kUp:{code:"accSagittalFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalSharp:{code:"accSagittalSharp",parenRightPaddingAdjustment:-1},accSagittalFlat:{code:"accSagittalFlat",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kUp:{code:"accSagittalSharp5v7kUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kDown:{code:"accSagittalFlat5v7kDown",parenRightPaddingAdjustment:-1},accSagittalSharp5CUp:{code:"accSagittalSharp5CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5CDown:{code:"accSagittalFlat5CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7CUp:{code:"accSagittalSharp7CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7CDown:{code:"accSagittalFlat7CDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SUp:{code:"accSagittalSharp25SUp",parenRightPaddingAdjustment:-1},accSagittalFlat25SDown:{code:"accSagittalFlat25SDown",parenRightPaddingAdjustment:-1},accSagittalSharp35MUp:{code:"accSagittalSharp35MUp",parenRightPaddingAdjustment:-1},accSagittalFlat35MDown:{code:"accSagittalFlat35MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11MUp:{code:"accSagittalSharp11MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11MDown:{code:"accSagittalFlat11MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11LUp:{code:"accSagittalSharp11LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11LDown:{code:"accSagittalFlat11LDown",parenRightPaddingAdjustment:-1},accSagittalSharp35LUp:{code:"accSagittalSharp35LUp",parenRightPaddingAdjustment:-1},accSagittalFlat35LDown:{code:"accSagittalFlat35LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp25SDown:{code:"accSagittalDoubleSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat25SUp:{code:"accSagittalDoubleFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7CDown:{code:"accSagittalDoubleSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7CUp:{code:"accSagittalDoubleFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5CDown:{code:"accSagittalDoubleSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5CUp:{code:"accSagittalDoubleFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v7kDown:{code:"accSagittalDoubleSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v7kUp:{code:"accSagittalDoubleFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp:{code:"accSagittalDoubleSharp",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat:{code:"accSagittalDoubleFlat",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaUp:{code:"accSagittal7v11KleismaUp",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaDown:{code:"accSagittal7v11KleismaDown",parenRightPaddingAdjustment:-1},accSagittal17CommaUp:{code:"accSagittal17CommaUp",parenRightPaddingAdjustment:-1},accSagittal17CommaDown:{code:"accSagittal17CommaDown",parenRightPaddingAdjustment:-1},accSagittal55CommaUp:{code:"accSagittal55CommaUp",parenRightPaddingAdjustment:-1},accSagittal55CommaDown:{code:"accSagittal55CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v11CommaUp:{code:"accSagittal7v11CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v11CommaDown:{code:"accSagittal7v11CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisUp:{code:"accSagittal5v11SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisDown:{code:"accSagittal5v11SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SDown:{code:"accSagittalSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SUp:{code:"accSagittalFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CDown:{code:"accSagittalSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CUp:{code:"accSagittalFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalSharp55CDown:{code:"accSagittalSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalFlat55CUp:{code:"accSagittalFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17CDown:{code:"accSagittalSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalFlat17CUp:{code:"accSagittalFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kDown:{code:"accSagittalSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kUp:{code:"accSagittalFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kUp:{code:"accSagittalSharp7v11kUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kDown:{code:"accSagittalFlat7v11kDown",parenRightPaddingAdjustment:-1},accSagittalSharp17CUp:{code:"accSagittalSharp17CUp",parenRightPaddingAdjustment:-1},accSagittalFlat17CDown:{code:"accSagittalFlat17CDown",parenRightPaddingAdjustment:-1},accSagittalSharp55CUp:{code:"accSagittalSharp55CUp",parenRightPaddingAdjustment:-1},accSagittalFlat55CDown:{code:"accSagittalFlat55CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CUp:{code:"accSagittalSharp7v11CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CDown:{code:"accSagittalFlat7v11CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SUp:{code:"accSagittalSharp5v11SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SDown:{code:"accSagittalFlat5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v11SDown:{code:"accSagittalDoubleSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v11SUp:{code:"accSagittalDoubleFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11CDown:{code:"accSagittalDoubleSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11CUp:{code:"accSagittalDoubleFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp55CDown:{code:"accSagittalDoubleSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat55CUp:{code:"accSagittalDoubleFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17CDown:{code:"accSagittalDoubleSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17CUp:{code:"accSagittalDoubleFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11kDown:{code:"accSagittalDoubleSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11kUp:{code:"accSagittalDoubleFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittal23CommaUp:{code:"accSagittal23CommaUp",parenRightPaddingAdjustment:-1},accSagittal23CommaDown:{code:"accSagittal23CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v19CommaUp:{code:"accSagittal5v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal5v19CommaDown:{code:"accSagittal5v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisUp:{code:"accSagittal5v23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisDown:{code:"accSagittal5v23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SDown:{code:"accSagittalSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SUp:{code:"accSagittalFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CDown:{code:"accSagittalSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CUp:{code:"accSagittalFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CDown:{code:"accSagittalSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalFlat23CUp:{code:"accSagittalFlat23CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CUp:{code:"accSagittalSharp23CUp",parenRightPaddingAdjustment:-1},accSagittalFlat23CDown:{code:"accSagittalFlat23CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CUp:{code:"accSagittalSharp5v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CDown:{code:"accSagittalFlat5v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SUp:{code:"accSagittalSharp5v23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SDown:{code:"accSagittalFlat5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v23SDown:{code:"accSagittalDoubleSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v23SUp:{code:"accSagittalDoubleFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v19CDown:{code:"accSagittalDoubleSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v19CUp:{code:"accSagittalDoubleFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23CDown:{code:"accSagittalDoubleSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23CUp:{code:"accSagittalDoubleFlat23CUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaUp:{code:"accSagittal19SchismaUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaDown:{code:"accSagittal19SchismaDown",parenRightPaddingAdjustment:-1},accSagittal17KleismaUp:{code:"accSagittal17KleismaUp",parenRightPaddingAdjustment:-1},accSagittal17KleismaDown:{code:"accSagittal17KleismaDown",parenRightPaddingAdjustment:-1},accSagittal143CommaUp:{code:"accSagittal143CommaUp",parenRightPaddingAdjustment:-1},accSagittal143CommaDown:{code:"accSagittal143CommaDown",parenRightPaddingAdjustment:-1},accSagittal11v49CommaUp:{code:"accSagittal11v49CommaUp",parenRightPaddingAdjustment:-1},accSagittal11v49CommaDown:{code:"accSagittal11v49CommaDown",parenRightPaddingAdjustment:-1},accSagittal19CommaUp:{code:"accSagittal19CommaUp",parenRightPaddingAdjustment:-1},accSagittal19CommaDown:{code:"accSagittal19CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v19CommaUp:{code:"accSagittal7v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v19CommaDown:{code:"accSagittal7v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisUp:{code:"accSagittal49SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisDown:{code:"accSagittal49SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisUp:{code:"accSagittal23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisDown:{code:"accSagittal23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisUp:{code:"accSagittal5v13MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisDown:{code:"accSagittal5v13MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisUp:{code:"accSagittal11v19MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisDown:{code:"accSagittal11v19MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisUp:{code:"accSagittal49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisDown:{code:"accSagittal49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisUp:{code:"accSagittal5v49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisDown:{code:"accSagittal5v49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisUp:{code:"accSagittal49LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisDown:{code:"accSagittal49LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisUp:{code:"accSagittal11v19LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisDown:{code:"accSagittal11v19LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisUp:{code:"accSagittal5v13LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisDown:{code:"accSagittal5v13LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SDown:{code:"accSagittalSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat23SUp:{code:"accSagittalFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp49SDown:{code:"accSagittalSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalFlat49SUp:{code:"accSagittalFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CDown:{code:"accSagittalSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CUp:{code:"accSagittalFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp19CDown:{code:"accSagittalSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat19CUp:{code:"accSagittalFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CDown:{code:"accSagittalSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CUp:{code:"accSagittalFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalSharp143CDown:{code:"accSagittalSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalFlat143CUp:{code:"accSagittalFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17kDown:{code:"accSagittalSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalFlat17kUp:{code:"accSagittalFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sDown:{code:"accSagittalSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalFlat19sUp:{code:"accSagittalFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sUp:{code:"accSagittalSharp19sUp",parenRightPaddingAdjustment:-1},accSagittalFlat19sDown:{code:"accSagittalFlat19sDown",parenRightPaddingAdjustment:-1},accSagittalSharp17kUp:{code:"accSagittalSharp17kUp",parenRightPaddingAdjustment:-1},accSagittalFlat17kDown:{code:"accSagittalFlat17kDown",parenRightPaddingAdjustment:-1},accSagittalSharp143CUp:{code:"accSagittalSharp143CUp",parenRightPaddingAdjustment:-1},accSagittalFlat143CDown:{code:"accSagittalFlat143CDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CUp:{code:"accSagittalSharp11v49CUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CDown:{code:"accSagittalFlat11v49CDown",parenRightPaddingAdjustment:-1},accSagittalSharp19CUp:{code:"accSagittalSharp19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat19CDown:{code:"accSagittalFlat19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CUp:{code:"accSagittalSharp7v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CDown:{code:"accSagittalFlat7v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp49SUp:{code:"accSagittalSharp49SUp",parenRightPaddingAdjustment:-1},accSagittalFlat49SDown:{code:"accSagittalFlat49SDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SUp:{code:"accSagittalSharp23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat23SDown:{code:"accSagittalFlat23SDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13MUp:{code:"accSagittalSharp5v13MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13MDown:{code:"accSagittalFlat5v13MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19MUp:{code:"accSagittalSharp11v19MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19MDown:{code:"accSagittalFlat11v19MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49MUp:{code:"accSagittalSharp49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat49MDown:{code:"accSagittalFlat49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v49MUp:{code:"accSagittalSharp5v49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v49MDown:{code:"accSagittalFlat5v49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49LUp:{code:"accSagittalSharp49LUp",parenRightPaddingAdjustment:-1},accSagittalFlat49LDown:{code:"accSagittalFlat49LDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19LUp:{code:"accSagittalSharp11v19LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19LDown:{code:"accSagittalFlat11v19LDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13LUp:{code:"accSagittalSharp5v13LUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13LDown:{code:"accSagittalFlat5v13LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23SDown:{code:"accSagittalDoubleSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23SUp:{code:"accSagittalDoubleFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp49SDown:{code:"accSagittalDoubleSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat49SUp:{code:"accSagittalDoubleFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v19CDown:{code:"accSagittalDoubleSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v19CUp:{code:"accSagittalDoubleFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19CDown:{code:"accSagittalDoubleSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19CUp:{code:"accSagittalDoubleFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp11v49CDown:{code:"accSagittalDoubleSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat11v49CUp:{code:"accSagittalDoubleFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp143CDown:{code:"accSagittalDoubleSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat143CUp:{code:"accSagittalDoubleFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17kDown:{code:"accSagittalDoubleSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17kUp:{code:"accSagittalDoubleFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19sDown:{code:"accSagittalDoubleSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19sUp:{code:"accSagittalDoubleFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalShaftUp:{code:"accSagittalShaftUp",parenRightPaddingAdjustment:-1},accSagittalShaftDown:{code:"accSagittalShaftDown",parenRightPaddingAdjustment:-1},accSagittalAcute:{code:"accSagittalAcute",parenRightPaddingAdjustment:-1},accSagittalGrave:{code:"accSagittalGrave",parenRightPaddingAdjustment:-1},accSagittal1MinaUp:{code:"accSagittal1MinaUp",parenRightPaddingAdjustment:-1},accSagittal1MinaDown:{code:"accSagittal1MinaDown",parenRightPaddingAdjustment:-1},accSagittal2MinasUp:{code:"accSagittal2MinasUp",parenRightPaddingAdjustment:-1},accSagittal2MinasDown:{code:"accSagittal2MinasDown",parenRightPaddingAdjustment:-1},accSagittal1TinaUp:{code:"accSagittal1TinaUp",parenRightPaddingAdjustment:-1},accSagittal1TinaDown:{code:"accSagittal1TinaDown",parenRightPaddingAdjustment:-1},accSagittal2TinasUp:{code:"accSagittal2TinasUp",parenRightPaddingAdjustment:-1},accSagittal2TinasDown:{code:"accSagittal2TinasDown",parenRightPaddingAdjustment:-1},accSagittal3TinasUp:{code:"accSagittal3TinasUp",parenRightPaddingAdjustment:-1},accSagittal3TinasDown:{code:"accSagittal3TinasDown",parenRightPaddingAdjustment:-1},accSagittal4TinasUp:{code:"accSagittal4TinasUp",parenRightPaddingAdjustment:-1},accSagittal4TinasDown:{code:"accSagittal4TinasDown",parenRightPaddingAdjustment:-1},accSagittal5TinasUp:{code:"accSagittal5TinasUp",parenRightPaddingAdjustment:-1},accSagittal5TinasDown:{code:"accSagittal5TinasDown",parenRightPaddingAdjustment:-1},accSagittal6TinasUp:{code:"accSagittal6TinasUp",parenRightPaddingAdjustment:-1},accSagittal6TinasDown:{code:"accSagittal6TinasDown",parenRightPaddingAdjustment:-1},accSagittal7TinasUp:{code:"accSagittal7TinasUp",parenRightPaddingAdjustment:-1},accSagittal7TinasDown:{code:"accSagittal7TinasDown",parenRightPaddingAdjustment:-1},accSagittal8TinasUp:{code:"accSagittal8TinasUp",parenRightPaddingAdjustment:-1},accSagittal8TinasDown:{code:"accSagittal8TinasDown",parenRightPaddingAdjustment:-1},accSagittal9TinasUp:{code:"accSagittal9TinasUp",parenRightPaddingAdjustment:-1},accSagittal9TinasDown:{code:"accSagittal9TinasDown",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaUp:{code:"accSagittalFractionalTinaUp",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaDown:{code:"accSagittalFractionalTinaDown",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlat:{code:"accidentalNarrowReversedFlat",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlatAndFlat:{code:"accidentalNarrowReversedFlatAndFlat",parenRightPaddingAdjustment:-1},accidentalWilsonPlus:{code:"accidentalWilsonPlus",parenRightPaddingAdjustment:-1},accidentalWilsonMinus:{code:"accidentalWilsonMinus",parenRightPaddingAdjustment:-1}},j={"a.":{code:"augmentationDot",between_lines:!0},av:{aboveCode:"articStaccatissimoAbove",belowCode:"articStaccatissimoBelow",between_lines:!0},"a>":{aboveCode:"articAccentAbove",belowCode:"articAccentBelow",between_lines:!0},"a-":{aboveCode:"articTenutoAbove",belowCode:"articTenutoBelow",between_lines:!0},"a^":{aboveCode:"articMarcatoAbove",belowCode:"articMarcatoBelow",between_lines:!1},"a+":{code:"pluckedLeftHandPizzicato",between_lines:!1},ao:{aboveCode:"pluckedSnapPizzicatoAbove",belowCode:"pluckedSnapPizzicatoBelow",between_lines:!1},ah:{code:"stringsHarmonic",between_lines:!1},"a@":{aboveCode:"fermataAbove",belowCode:"fermataBelow",between_lines:!1},"a@a":{code:"fermataAbove",between_lines:!1},"a@u":{code:"fermataBelow",between_lines:!1},"a@s":{aboveCode:"fermataShortAbove",belowCode:"fermataShortBelow",between_lines:!1},"a@as":{code:"fermataShortAbove",between_lines:!1},"a@us":{code:"fermataShortBelow",between_lines:!1},"a@l":{aboveCode:"fermataLongAbove",belowCode:"fermataLongBelow",between_lines:!1},"a@al":{code:"fermataLongAbove",between_lines:!1},"a@ul":{code:"fermataLongBelow",between_lines:!1},"a@vl":{aboveCode:"fermataVeryLongAbove",belowCode:"fermataVeryLongBelow",between_lines:!1},"a@avl":{code:"fermataVeryLongAbove",between_lines:!1},"a@uvl":{code:"fermataVeryLongBelow",between_lines:!1},"a|":{code:"stringsUpBow",between_lines:!1},am:{code:"stringsDownBow",between_lines:!1},"a,":{code:"pictChokeCymbal",between_lines:!1}},X={mordent:{code:"ornamentShortTrill"},mordent_inverted:{code:"ornamentMordent"},turn:{code:"ornamentTurn"},turn_inverted:{code:"ornamentTurnSlash"},tr:{code:"ornamentTrill"},upprall:{code:"ornamentPrecompSlideTrillDAnglebert"},downprall:{code:"ornamentPrecompDoubleCadenceUpperPrefix"},prallup:{code:"ornamentPrecompTrillSuffixDandrieu"},pralldown:{code:"ornamentPrecompTrillLowerSuffix"},upmordent:{code:"ornamentPrecompSlideTrillBach"},downmordent:{code:"ornamentPrecompDoubleCadenceUpperPrefixTurn"},lineprall:{code:"ornamentPrecompAppoggTrill"},prallprall:{code:"ornamentTremblement"},scoop:{code:"brassScoop"},doit:{code:"brassDoitMedium"},fall:{code:"brassFallLipShort"},doitLong:{code:"brassLiftMedium"},fallLong:{code:"brassFallRoughMedium"},bend:{code:"brassBend"},plungerClosed:{code:"brassMuteClosed"},plungerOpen:{code:"brassMuteOpen"},flip:{code:"brassFlip"},jazzTurn:{code:"brassJazzTurn"},smear:{code:"brassSmear"}};class V{static currentMusicFont(){if(0===V.MUSIC_FONT_STACK.length)throw new x("NoFonts","The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).");return V.MUSIC_FONT_STACK[0]}static clefProperties(t){if(!t||!(t in U))throw new x("BadArgument","Invalid clef: "+t);return U[t]}static keyProperties(t,e="treble",i){let n={octave_shift:0,duration:"4"};"object"==typeof i&&(n=Object.assign(Object.assign({},n),i));const s=V.sanitizeDuration(n.duration),a=t.split("/");if(a.length<2)throw new x("BadArguments",`First argument must be note/octave or note/octave/glyph-code: ${t}`);const o=a[0].toUpperCase(),r=Y[o];if(!r)throw new x("BadArguments","Invalid key name: "+o);r.octave&&(a[1]=r.octave.toString());let h=parseInt(a[1],10);h-=n.octave_shift;let b=(7*h-28+r.index)/2;b+=V.clefProperties(e).line_shift;let c=0;b<=0&&2*b%2==0&&(c=1),b>=6&&2*b%2==0&&(c=-1);const l=void 0!==r.int_val?12*h+r.int_val:void 0,d=r.code,m=r.shift_right;let g={};if(a.length>2&&a[2]){const t=a[2].toUpperCase();g={code:this.codeNoteHead(t,s)}||{}}return Object.assign({key:o,octave:h,line:b,int_value:l,accidental:r.accidental,code:d,stroke:c,shift_right:m,displaced:!1},g)}static integerToNote(t){if(void 0===t||t<0||t>11)throw new x("BadArguments",`integerToNote() requires an integer in the range [0, 11]: ${t}`);const e={0:"C",1:"C#",2:"D",3:"D#",4:"E",5:"F",6:"F#",7:"G",8:"G#",9:"A",10:"A#",11:"B"}[t];if(!e)throw new x("BadArguments",`Unknown note value for integer: ${t}`);return e}static tabToGlyphProps(t,e=1){let i,n=0,s=0;if("X"===t.toUpperCase()){const t=new Z("accidentalDoubleSharp",V.TABLATURE_FONT_SCALE).getMetrics();if(i="accidentalDoubleSharp",null==t.width||null==t.height)throw new x("InvalidMetrics","Width and height required");n=t.width,s=-t.height/2}else n=V.textWidth(t);return{text:t,code:i,getWidth:()=>n*e,shift_y:s}}static textWidth(t){return 7*t.toString().length}static articulationCodes(t){return j[t]}static accidentalCodes(t){return H[t]}static ornamentCodes(t){return X[t]}static keySignature(t){const e=G[t];if(!e)throw new x("BadKeySignature",`Bad key signature spec: '${t}'`);if(!e.acc)return[];const i={b:[2,.5,2.5,1,3,1.5,3.5],"#":[0,1.5,-.5,1,2.5,.5,2]}[e.acc],n=[];for(let t=0;tZ.getWidth(a,t)}),n)}}V.UNISON=!0,V.SOFTMAX_FACTOR=10,V.STEM_WIDTH=1.5,V.STEM_HEIGHT=35,V.STAVE_LINE_THICKNESS=1,V.RENDER_PRECISION_PLACES=3,V.RESOLUTION=L,V.MUSIC_FONT_STACK=[],V.NOTATION_FONT_SCALE=39,V.TABLATURE_FONT_SCALE=39,V.SLASH_NOTEHEAD_WIDTH=15,V.STAVE_LINE_DISTANCE=10,V.TEXT_HEIGHT_OFFSET_HACK=1,V.accidentalMap=H,V.accidentalColumnsTable={1:{a:[1],b:[1]},2:{a:[1,2]},3:{a:[1,3,2],b:[1,2,1],second_on_bottom:[1,2,3]},4:{a:[1,3,4,2],b:[1,2,3,1],spaced_out_tetrachord:[1,2,1,2]},5:{a:[1,3,5,4,2],b:[1,2,4,3,1],spaced_out_pentachord:[1,2,3,2,1],very_spaced_out_pentachord:[1,2,1,2,1]},6:{a:[1,3,5,6,4,2],b:[1,2,4,5,3,1],spaced_out_hexachord:[1,3,2,1,3,2],very_spaced_out_hexachord:[1,2,1,2,1,2]}},V.unicode={sharp:String.fromCharCode(9839),flat:String.fromCharCode(9837),natural:String.fromCharCode(9838),triangle:String.fromCharCode(9651),"o-with-slash":String.fromCharCode(248),degrees:String.fromCharCode(176),circle:String.fromCharCode(9675)},V.validTypes={n:{name:"note"},r:{name:"rest"},h:{name:"harmonic"},m:{name:"muted"},s:{name:"slash"},g:{name:"ghost"},d:{name:"diamond"},x:{name:"x"},ci:{name:"circled"},cx:{name:"circle x"},sf:{name:"slashed"},sb:{name:"slashed backward"},sq:{name:"square"},tu:{name:"triangle up"},td:{name:"triangle down"}},V.TIME4_4={num_beats:4,beat_value:4,resolution:L};const K={"1/2":{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restDoubleWhole",rest:!0,position:"B/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},1:{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restWhole",ledger_code_head:"restWholeLegerLine",rest:!0,position:"D/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},2:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restHalf",ledger_code_head:"restHalfLegerLine",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},4:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restQuarter",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1.5,line_below:1.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},8:{common:{code_head:"",stem:!0,flag:!0,beam_count:1,stem_beam_extension:0,code_flag_upstem:"flag8thUp",code_flag_downstem:"flag8thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest8th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:1},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},16:{common:{code_head:"",beam_count:2,stem_beam_extension:0,stem:!0,flag:!0,code_flag_upstem:"flag16thUp",code_flag_downstem:"flag16thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest16th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},32:{common:{code_head:"",beam_count:3,stem_beam_extension:7.5,stem:!0,flag:!0,code_flag_upstem:"flag32ndUp",code_flag_downstem:"flag32ndDown",stem_up_extension:9,stem_down_extension:9,tabnote_stem_up_extension:9,tabnote_stem_down_extension:9,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest32nd",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},64:{common:{code_head:"",beam_count:4,stem_beam_extension:15,stem:!0,flag:!0,code_flag_upstem:"flag64thUp",code_flag_downstem:"flag64thDown",stem_up_extension:13,stem_down_extension:13,tabnote_stem_up_extension:13,tabnote_stem_down_extension:13,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest64th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},128:{common:{code_head:"",beam_count:5,stem_beam_extension:22.5,stem:!0,flag:!0,code_flag_upstem:"flag128thUp",code_flag_downstem:"flag128thDown",stem_up_extension:22,stem_down_extension:22,tabnote_stem_up_extension:22,tabnote_stem_down_extension:22,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest128th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-2.5,line_above:3,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}}};var $,J;!function(t){t[t.MOVE=0]="MOVE",t[t.LINE=1]="LINE",t[t.QUADRATIC=2]="QUADRATIC",t[t.BEZIER=3]="BEZIER"}($||($={}));class q{constructor(t,e,i){this.point=-1,this.metrics=Z.loadMetrics(t,e,i),this.bbox=Z.getOutlineBoundingBox(this.metrics.outline,this.metrics.scale,this.metrics.x_shift,this.metrics.y_shift),i&&(this.point=Z.lookupFontMetric(this.metrics.font,i,e,"point",-1))}}class Q{constructor(t,e,i,n){this.outline=t,this.originX=e,this.originY=i,this.scale=n,this.i=0,this.precision=1,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES)}done(){return this.i>=this.outline.length}next(){return Math.round(this.outline[this.i++]*this.precision/this.precision)}nextX(){return Math.round((this.originX+this.outline[this.i++]*this.scale)*this.precision)/this.precision}nextY(){return Math.round((this.originY-this.outline[this.i++]*this.scale)*this.precision)/this.precision}static parse(t){const e=[],i=t.split(" ");let n=0;for(;n{const e=t.getTickContext();s&&t.setStave(s),e.setXOffset(a)}))}}class et{static get NUM_TONES(){return this.canonical_notes.length}static get roots(){return["c","d","e","f","g","a","b"]}static get root_values(){return[0,2,4,5,7,9,11]}static get root_indices(){return{c:0,d:1,e:2,f:3,g:4,a:5,b:6}}static get canonical_notes(){return["c","c#","d","d#","e","f","f#","g","g#","a","a#","b"]}static get diatonic_intervals(){return["unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","octave"]}static get diatonic_accidentals(){return{unison:{note:0,accidental:0},m2:{note:1,accidental:-1},M2:{note:1,accidental:0},m3:{note:2,accidental:-1},M3:{note:2,accidental:0},p4:{note:3,accidental:0},dim5:{note:4,accidental:-1},p5:{note:4,accidental:0},m6:{note:5,accidental:-1},M6:{note:5,accidental:0},b7:{note:6,accidental:-1},M7:{note:6,accidental:0},octave:{note:7,accidental:0}}}static get intervals(){return{u:0,unison:0,m2:1,b2:1,min2:1,S:1,H:1,2:2,M2:2,maj2:2,T:2,W:2,m3:3,b3:3,min3:3,M3:4,3:4,maj3:4,4:5,p4:5,"#4":6,b5:6,aug4:6,dim5:6,5:7,p5:7,"#5":8,b6:8,aug5:8,6:9,M6:9,maj6:9,b7:10,m7:10,min7:10,dom7:10,M7:11,maj7:11,8:12,octave:12}}static get scales(){return{major:[2,2,1,2,2,2,1],minor:[2,1,2,2,1,2,2],ionian:[2,2,1,2,2,2,1],dorian:[2,1,2,2,2,1,2],phyrgian:[1,2,2,2,1,2,2],lydian:[2,2,2,1,2,2,1],mixolydian:[2,2,1,2,2,1,2],aeolian:[2,1,2,2,1,2,2],locrian:[1,2,2,1,2,2,2]}}static get scaleTypes(){return{M:et.scales.major,m:et.scales.minor}}static get accidentals(){return["bb","b","n","#","##"]}static get noteValues(){return{c:{root_index:0,int_val:0},cn:{root_index:0,int_val:0},"c#":{root_index:0,int_val:1},"c##":{root_index:0,int_val:2},cb:{root_index:0,int_val:11},cbb:{root_index:0,int_val:10},d:{root_index:1,int_val:2},dn:{root_index:1,int_val:2},"d#":{root_index:1,int_val:3},"d##":{root_index:1,int_val:4},db:{root_index:1,int_val:1},dbb:{root_index:1,int_val:0},e:{root_index:2,int_val:4},en:{root_index:2,int_val:4},"e#":{root_index:2,int_val:5},"e##":{root_index:2,int_val:6},eb:{root_index:2,int_val:3},ebb:{root_index:2,int_val:2},f:{root_index:3,int_val:5},fn:{root_index:3,int_val:5},"f#":{root_index:3,int_val:6},"f##":{root_index:3,int_val:7},fb:{root_index:3,int_val:4},fbb:{root_index:3,int_val:3},g:{root_index:4,int_val:7},gn:{root_index:4,int_val:7},"g#":{root_index:4,int_val:8},"g##":{root_index:4,int_val:9},gb:{root_index:4,int_val:6},gbb:{root_index:4,int_val:5},a:{root_index:5,int_val:9},an:{root_index:5,int_val:9},"a#":{root_index:5,int_val:10},"a##":{root_index:5,int_val:11},ab:{root_index:5,int_val:8},abb:{root_index:5,int_val:7},b:{root_index:6,int_val:11},bn:{root_index:6,int_val:11},"b#":{root_index:6,int_val:0},"b##":{root_index:6,int_val:1},bb:{root_index:6,int_val:10},bbb:{root_index:6,int_val:9}}}isValidNoteValue(t){return t>=0&&t=0&&t3)throw new x("BadArguments","Invalid note name: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|bb|n|#|##)?$/.exec(e);if(null!==i){return{root:i[1],accidental:i[2]}}throw new x("BadArguments","Invalid note name: "+t)}getKeyParts(t){if(!t||t.length<1)throw new x("BadArguments","Invalid key: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|#)?(mel|harm|m|M)?$/.exec(e);if(null!==i){const t=i[1],e=i[2];let n=i[3];return n||(n="M"),{root:t,accidental:e,type:n}}throw new x("BadArguments",`Invalid key: ${t}`)}getNoteValue(t){const e=et.noteValues[t];if(void 0===e)throw new x("BadArguments",`Invalid note name: ${t}`);return e.int_val}getIntervalValue(t){const e=et.intervals[t];if(void 0===e)throw new x("BadArguments",`Invalid interval name: ${t}`);return e}getCanonicalNoteName(t){if(!this.isValidNoteValue(t))throw new x("BadArguments",`Invalid note value: ${t}`);return et.canonical_notes[t]}getCanonicalIntervalName(t){if(!this.isValidIntervalValue(t))throw new x("BadArguments",`Invalid interval value: ${t}`);return et.diatonic_intervals[t]}getRelativeNoteValue(t,e,i=1){if(1!==i&&-1!==i)throw new x("BadArguments",`Invalid direction: ${i}`);let n=(t+i*e)%et.NUM_TONES;return n<0&&(n+=et.NUM_TONES),n}getRelativeNoteName(t,e){const i=this.getNoteParts(t),n=this.getNoteValue(i.root);let s=e-n;if(Math.abs(s)>et.NUM_TONES-3){let i=1;s>0&&(i=-1);const a=(e+1+(n+1))%et.NUM_TONES*i;if(Math.abs(a)>2)throw new x("BadArguments",`Notes not related: ${t}, ${e})`);s=a}if(Math.abs(s)>2)throw new x("BadArguments",`Notes not related: ${t}, ${e})`);let a=i.root;if(s>0)for(let t=1;t<=s;++t)a+="#";else if(s<0)for(let t=-1;t>=s;--t)a+="b";return a}getScaleTones(t,e){const i=[t];let n=t;for(let s=0;se.line-t.line));const c=[];let l=0;for(let t=0;tc[i+t],a=t=>t.map(s),o=(t,e)=>{const[i,n]=a([t,e]).map((t=>t.line));return i-n},r=(...t)=>t.map(a).every((([t,e])=>!this.checkCollision(t,e))),h=n-i+1;let b,l,m=this.checkCollision(c[i],c[n])?"a":"b";switch(h){case 3:"a"===m&&.5===o(1,2)&&.5!==o(0,1)&&(m="second_on_bottom");break;case 4:r([0,2],[1,3])&&(m="spaced_out_tetrachord");break;case 5:"b"===m&&r([1,3])&&(m="spaced_out_pentachord",r([0,2],[2,4])&&(m="very_spaced_out_pentachord"));break;case 6:r([0,3],[1,4],[2,5])&&(m="spaced_out_hexachord"),r([0,2],[2,4],[1,3],[3,5])&&(m="very_spaced_out_hexachord")}if(h>=7){let e=2,i=!0;for(;!0===i;){i=!1;for(let t=0;t+el?d:l}else for(b=t;b<=n;b++)l=V.accidentalColumnsTable[h][m][b-t],c[b].column=l,d=d>l?d:l;t=n}const m=[],g=[];for(let t=0;t<=d;t++)m[t]=0,g[t]=0;m[0]=s+l,g[0]=s,c.forEach((t=>{t.width>m[t.column]&&(m[t.column]=t.width)}));for(let t=1;t{let e=0;const i=x+t.numAcc;for(;x0?(n=e.flatLine||e.dblSharpLine?2.5:3,t.dblSharpLine&&(i-=.5)):(n=t.flatLine||t.dblSharpLine?2.5:3,e.dblSharpLine&&(i-=.5));const s=Math.abs(i){const e=new B(0,1);t.getTickables().forEach((t=>{if(t.shouldIgnoreTicks())return;const s=n[e.value()];s?s.push(t):(i.push(e.value()),n[e.value()]=[t]),e.add(t.getTicks())}))}));const a=new et;e||(e="C");const o=a.createScaleMap(e),r={};i.forEach((t=>{const e=n[t],i=[],h=t=>{if(!d(t)||t.isRest()||t.shouldIgnoreTicks())return;const e=t;e.keys.forEach(((t,n)=>{const h=a.getNoteParts(t.split("/")[0]),b=t.split("/")[1],c=h.accidental||"n",l=h.root+c;r[h.root+b]||(r[h.root+b]=o[h.root]);const d=r[h.root+b]===l,m=i.indexOf(t)>-1;if(e.getModifiers().forEach(((t,i)=>{s(t)&&t.type==c&&t.getIndex()==n&&e.getModifiers().splice(i,1)})),!d||d&&m){r[h.root+b]=l;const s=new nt(c);e.addModifier(s,n),i.push(t)}})),e.getModifiers().forEach((t=>{b(t)&&t.getGraceNotes().forEach(h)}))};e.forEach(h)}))}constructor(t){super(),it("New accidental: ",t),this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE,parenLeftPadding:2,parenRightPadding:2},this.accidental=V.accidentalCodes(this.type),p(this.accidental,"ArgumentError",`Unknown accidental type: ${t}`),this.cautionary=!1,this.reset()}reset(){const t=this.render_options.font_scale;this.glyph=new Z(this.accidental.code,t),this.glyph.setOriginX(1),this.cautionary&&(this.parenLeft=new Z(V.accidentalCodes("{").code,t),this.parenRight=new Z(V.accidentalCodes("}").code,t),this.parenLeft.setOriginX(1),this.parenRight.setOriginX(1))}getWidth(){if(this.cautionary){const t=p(this.parenLeft),e=p(this.parenRight),i=t.getMetrics().width+e.getMetrics().width+this.render_options.parenLeftPadding+this.render_options.parenRightPadding;return this.glyph.getMetrics().width+i}return this.glyph.getMetrics().width}setNote(t){return p(t,"ArgumentError",`Bad note value: ${t}`),this.note=t,h(t)&&(this.render_options.font_scale=25,this.reset()),this}setAsCautionary(){return this.cautionary=!0,this.render_options.font_scale=28,this.reset(),this}draw(){const{type:t,position:e,index:i,cautionary:n,x_shift:s,y_shift:a,glyph:o,render_options:{parenLeftPadding:r,parenRightPadding:h}}=this,b=this.checkContext(),c=this.checkAttachedNote();this.setRendered();const l=c.getModifierStartXY(e,i);let d=l.x+s;const m=l.y+a;if(it("Rendering: ",t,d,m),n){const t=p(this.parenLeft),e=p(this.parenRight);e.render(b,d,m),d-=e.getMetrics().width,d-=h,d-=this.accidental.parenRightPaddingAdjustment,o.render(b,d,m),d-=o.getMetrics().width,d-=r,t.render(b,d,m)}else o.render(b,d,m)}}nt.DEBUG=!1;class st extends W{static get CATEGORY(){return _.Stem}static get UP(){return 1}static get DOWN(){return-1}static get WIDTH(){return V.STEM_WIDTH}static get HEIGHT(){return V.STEM_HEIGHT}constructor(t){super(),this.stem_up_y_offset=0,this.stem_down_y_offset=0,this.stem_up_y_base_offset=0,this.stem_down_y_base_offset=0,this.x_begin=(null==t?void 0:t.x_begin)||0,this.x_end=(null==t?void 0:t.x_end)||0,this.y_top=(null==t?void 0:t.y_top)||0,this.y_bottom=(null==t?void 0:t.y_bottom)||0,this.stem_extension=(null==t?void 0:t.stem_extension)||0,this.stem_direction=(null==t?void 0:t.stem_direction)||0,this.hide=(null==t?void 0:t.hide)||!1,this.isStemlet=(null==t?void 0:t.isStemlet)||!1,this.stemletHeight=(null==t?void 0:t.stemletHeight)||0,this.renderHeightAdjustment=0,this.setOptions(t)}setOptions(t){this.stem_up_y_offset=(null==t?void 0:t.stem_up_y_offset)||0,this.stem_down_y_offset=(null==t?void 0:t.stem_down_y_offset)||0,this.stem_up_y_base_offset=(null==t?void 0:t.stem_up_y_base_offset)||0,this.stem_down_y_base_offset=(null==t?void 0:t.stem_down_y_base_offset)||0}setNoteHeadXBounds(t,e){return this.x_begin=t,this.x_end=e,this}setDirection(t){this.stem_direction=t}setExtension(t){this.stem_extension=t}getExtension(){return this.stem_extension}setYBounds(t,e){this.y_top=t,this.y_bottom=e}getHeight(){const t=this.stem_direction===st.UP?this.stem_up_y_offset:this.stem_down_y_offset;return(this.y_bottom-this.y_top+(st.HEIGHT-t+this.stem_extension))*this.stem_direction}getBoundingBox(){throw new x("NotImplemented","getBoundingBox() not implemented.")}getExtents(){const t=this.stem_direction===st.UP,e=[this.y_top,this.y_bottom],i=st.HEIGHT+this.stem_extension,n=(t?Math.min:Math.max)(...e),s=(t?Math.max:Math.min)(...e);return{topY:n+i*-this.stem_direction,baseY:s}}setVisibility(t){return this.hide=!t,this}setStemlet(t,e){return this.isStemlet=t,this.stemletHeight=e,this}adjustHeightForFlag(){this.renderHeightAdjustment=V.currentMusicFont().lookupMetric("stem.heightAdjustmentForFlag",-3)}adjustHeightForBeam(){this.renderHeightAdjustment=-st.WIDTH/2}draw(){if(this.setRendered(),this.hide)return;const t=this.checkContext();let e,i;const n=this.stem_direction;let s=0;n===st.DOWN?(e=this.x_begin,i=this.y_top+this.stem_down_y_offset,s=this.stem_down_y_base_offset):(e=this.x_end,i=this.y_bottom-this.stem_up_y_offset,s=this.stem_up_y_base_offset);const a=this.getHeight();!function(...t){st.DEBUG&&f("Vex.Flow.Stem",t)}("Rendering stem - ","Top Y: ",this.y_top,"Bottom Y: ",this.y_bottom);const o=this.isStemlet?a-this.stemletHeight*this.stem_direction:0;t.save(),this.applyStyle(),t.openGroup("stem",this.getAttribute("id"),{pointerBBox:!0}),t.beginPath(),t.setLineWidth(st.WIDTH),t.moveTo(e,i-o+s),t.lineTo(e,i-a-this.renderHeightAdjustment*n),t.stroke(),t.closeGroup(),this.restoreStyle(),t.restore()}}function at(...t){bt.DEBUG&&f("Vex.Flow.TextFormatter",t)}st.DEBUG=!1;const ot={},rt={},ht={};class bt{static getFontFamilies(){const t=[];for(const e in ht){const i=ht[e];t.push(Object.assign({},i))}return t}static create(t={}){at("create: ",t),t.family||(t.family=F.SANS_SERIF);const e=[],i=t.family.split(/\s*,\s*/);for(const t of i){for(const i in ht)i.startsWith(t)&&e.push(ht[i]);if(e.length>0)break}let n;if(0===e.length)n=new bt(Object.values(ht)[0]);else if(1===e.length)n=new bt(e[0]);else{const i=F.isBold(t.weight),s=F.isItalic(t.style),a=e.find((t=>t.bold===i&&t.italic===s));if(a)n=new bt(a);else{const t=e.find((t=>t.italic===s||t.bold===i));n=new bt(t||e[0])}}const s=t.size;if(void 0!==s){const t=F.convertSizeToPointValue(s);n.setFontSize(t)}return n}static getInfo(t){return ht[t]}static registerInfo(t,e=!1){at("registerInfo: ",t,e);const i=t.family;(void 0===ht[i]||e)&&(ht[i]=t)}constructor(t){this.family="",this.size=14,this.resolution=1e3,this.glyphs={},this.serifs=!1,this.monospaced=!1,this.italic=!1,this.bold=!1,this.superscriptOffset=0,this.subscriptOffset=0,this.maxSizeGlyph="@",this.cacheKey="",this.updateParams(t)}get localHeightCache(){var t;return void 0===rt[this.cacheKey]&&(rt[this.cacheKey]={}),null!==(t=rt[this.cacheKey])&&void 0!==t?t:{}}updateParams(t){t.family&&(this.family=t.family),t.resolution&&(this.resolution=t.resolution),t.glyphs&&(this.glyphs=t.glyphs),t.serifs&&(this.serifs=t.serifs),t.monospaced&&(this.monospaced=t.monospaced),t.italic&&(this.italic=t.italic),t.bold&&(this.bold=t.bold),t.maxSizeGlyph&&(this.maxSizeGlyph=t.maxSizeGlyph),t.superscriptOffset&&(this.superscriptOffset=t.superscriptOffset),t.subscriptOffset&&(this.subscriptOffset=t.subscriptOffset),this.updateCacheKey()}updateCacheKey(){const t=this.family.replace(/\s+/g,"_"),e=this.size,i=this.bold?N.BOLD:N.NORMAL,n=this.italic?k.ITALIC:k.NORMAL;this.cacheKey=`${t}%${e}%${i}%${n}`}getGlyphMetrics(t){return this.glyphs[t]?this.glyphs[t]:this.glyphs[this.maxSizeGlyph]}get maxHeight(){return this.getGlyphMetrics(this.maxSizeGlyph).ha/this.resolution*this.fontSizeInPixels}getWidthForCharacterInEm(t){var e;const i=this.getGlyphMetrics(t);if(i){return(null!==(e=i.advanceWidth)&&void 0!==e?e:0)/this.resolution}return.65}getYForCharacterInPx(t){const e=this.getGlyphMetrics(t),i={yMin:0,yMax:this.maxHeight,height:this.maxHeight};return e?("number"==typeof e.y_min&&(i.yMin=e.y_min/this.resolution*this.fontSizeInPixels),"number"==typeof e.y_max&&(i.yMax=e.y_max/this.resolution*this.fontSizeInPixels),i.height=i.yMax-i.yMin,i):i}getYForStringInPx(t){const e=this.localHeightCache,i={yMin:0,yMax:this.maxHeight,height:this.maxHeight},n=e[t];if(void 0!==n)return n;for(let e=0;et>e?t:e)),h+=(this.text_line+1)*V.STAVE_LINE_DISTANCE+o,l&&i===st.DOWN&&(h=Math.max(h,b.topY+o+c*this.text_line))}else if(this.verticalJustification===lt.CENTER){const t=e.getYForTopText(this.text_line)-1;h=t+(d.getYForBottomText(this.text_line)-t)/2+o/2}else if(this.verticalJustification===lt.TOP){h=Math.min(...e.getYs())-(this.text_line+1)*V.STAVE_LINE_DISTANCE,l&&i===st.UP&&(c=b.topY=1}function ut(t,e){return xt(t,e)?e===mt?Math.ceil:Math.floor:Math.round}const pt=t=>d(t)||h(t);class ft extends tt{static get CATEGORY(){return _.Articulation}static format(t,e){if(!t||0===t.length)return!1;let i=0;const n=(t,e,i)=>_t(ut(e,i),p(t.glyph.getMetrics().height)/10+.5);t.forEach((t=>{const s=t.checkAttachedNote();i=Math.max(s.getGlyphProps().getWidth(),i);let a=5;const o=s.hasStem()?s.getStemDirection():st.UP;let r=0;if(m(s)){const t=s.getStem();t&&(r=Math.abs(t.getHeight())/V.STAVE_LINE_DISTANCE)}const h=s.getStave();if(h&&(a=h.getNumLines()),t.getPosition()===mt){let i=s.getLineNumber(!0);o===st.UP&&(i+=r);let h=n(t,e.top_text_line,mt);const b=i+e.top_text_line+.5;!t.articulation.between_lines&&bt.getWidth())).reduce(((t,e)=>Math.max(e,t))),a=Math.min(Math.max(s-i,0),Math.max(s-(e.left_shift+e.right_shift),0));return e.left_shift+=a/2,e.right_shift+=a/2,!0}static easyScoreHook({articulations:t},e,i){if(!t)return;const n={staccato:"a.",tenuto:"a-",accent:"a>"};t.split(",").map((t=>t.trim().split("."))).map((([t,e])=>{const s={type:n[t]};return e&&(s.position=tt.PositionString[e]),i.getFactory().Articulation(s)})).map((t=>e.addModifier(t,0)))}constructor(t){super(),this.type=t,this.position=mt,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.reset()}reset(){this.articulation=V.articulationCodes(this.type),this.articulation||(this.articulation={code:this.type,between_lines:!1},this.type.endsWith("Above")&&(this.position=mt),this.type.endsWith("Below")&&(this.position=gt));const t=(this.position===mt?this.articulation.aboveCode:this.articulation.belowCode)||this.articulation.code;this.glyph=new Z(null!=t?t:"",this.render_options.font_scale),p(this.glyph,"ArgumentError",`Articulation not found: ${this.type}`),this.setWidth(p(this.glyph.getMetrics().width))}setBetweenLines(t=!0){return this.articulation.between_lines=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=this.checkIndex(),{position:n,glyph:s,text_line:a}=this,o=this.articulation.between_lines,r=e.checkStave(),h=r.getSpacingBetweenLines(),b=g(e),{x:c}=e.getModifierStartXY(n,i),l=!o||b,d=function(t,e){const i=e===mt&&t.getStemDirection()===st.UP||e===gt&&t.getStemDirection()===st.DOWN;return pt(t)?t.hasStem()&&i?.5:1:t.hasStem()&&i?1:0}(e,n),m=V.currentMusicFont().lookupMetric(`articulation.${s.getCode()}.padding`,0);let _={[mt]:()=>{s.setOrigin(.5,1);const t=function(t,e){const i=t.getStemDirection(),{topY:n,baseY:s}=t.getStemExtents();if(pt(t))return t.hasStem()?i===st.UP?n:s:Math.min(...t.getYs());if(g(t))return t.hasStem()&&i===st.UP?n:t.checkStave().getYForTopText(e);throw new x("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)-(a+d)*h;return l?Math.min(r.getYForTopText(ft.INITIAL_OFFSET),t):t},[gt]:()=>{s.setOrigin(.5,0);const t=function(t,e){const i=t.getStemDirection(),{topY:n,baseY:s}=t.getStemExtents();if(pt(t))return t.hasStem()?i===st.UP?s:n:Math.max(...t.getYs());if(g(t))return t.hasStem()?i===st.UP?t.checkStave().getYForBottomText(e):n:t.checkStave().getYForBottomText(e);throw new x("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)+(a+d)*h;return l?Math.max(r.getYForBottomText(ft.INITIAL_OFFSET),t):t}}[n]();if(!b){const t=n===mt?-1:1,a=e.getKeyProps()[i].line,r=(e.getYs()[i]-_)/h+Number(a),b=function(t,e,i,n){const s=_t(ut(e,i),e);if(t&&xt(s,i)&&s%1==0)return s+.5*-n;return s}(o,r,n,t);xt(b,n)&&s.setOrigin(.5,.5),_+=Math.abs(b-r)*h*t+m*t}!function(...t){ft.DEBUG&&f("Vex.Flow.Articulation",t)}(`Rendering articulation at (x: ${c}, y: ${_})`),s.render(t,c,_)}}ft.DEBUG=!1,ft.INITIAL_OFFSET=-.5;class yt{static get CATEGORY(){return _.RenderContext}set font(t){this.setFont(t)}get font(){return this.getFont()}setRawFont(t){return this.setFont(t),this}}function St(t,e,i,n="#F55"){t.save(),t.setFillStyle(n),t.beginPath(),t.arc(e,i,3,0,2*Math.PI,!1),t.closePath(),t.fill(),t.restore()}class Tt extends W{static get CATEGORY(){return _.Tickable}constructor(){super(),this._preFormatted=!1,this._postFormatted=!1,this.ticks=new B(0,1),this.intrinsicTicks=0,this.tickMultiplier=new B(1,1),this.width=0,this.x_shift=0,this.modifiers=[],this.tupletStack=[],this.align_center=!1,this.center_x_shift=0,this.ignore_ticks=!1,this.formatterMetrics={freedom:{left:0,right:0},duration:"",iterations:0,space:{used:0,mean:0,deviation:0}}}reset(){return this}getTicks(){return this.ticks}shouldIgnoreTicks(){return this.ignore_ticks}setIgnoreTicks(t){return this.ignore_ticks=t,this}setWidth(t){this.width=t}getWidth(){if(!this._preFormatted)throw new x("UnformattedNote","Can't call GetWidth on an unformatted note.");return this.width+(this.modifierContext?this.modifierContext.getWidth():0)}setXShift(t){return this.x_shift=t,this}getXShift(){return this.x_shift}getX(){return this.checkTickContext("Can't getX() without a TickContext.").getX()+this.x_shift}getFormatterMetrics(){return this.formatterMetrics}getCenterXShift(){return this.isCenterAligned()?this.center_x_shift:0}setCenterXShift(t){return this.center_x_shift=t,this}isCenterAligned(){return this.align_center}setCenterAlignment(t){return this.align_center=t,this}getVoice(){return p(this.voice,"NoVoice","Tickable has no voice.")}setVoice(t){this.voice=t}getTuplet(){return this.tuplet}getTupletStack(){return this.tupletStack}resetTuplet(t){let e,i;if(t){const n=this.tupletStack.indexOf(t);return-1!==n&&(this.tupletStack.splice(n,1),e=t.getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i)),this}for(;this.tupletStack.length;)e=(t=this.tupletStack.pop()).getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i);return this}setTuplet(t){if(t){this.tupletStack.push(t);const e=t.getNoteCount(),i=t.getNotesOccupied();this.applyTickMultiplier(i,e)}return this.tuplet=t,this}addToModifierContext(t){this.modifierContext=t;for(let t=0;t0){const n=g.space.deviation,s=n>=0?"+":"";t.setFillStyle("red"),t.fillText(s+Math.round(n),o+e.getXShift(),i-10)}t.restore()}static parseDuration(t){if(!t)return;const e=/(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/.exec(t);if(!e)return;return{duration:e[1],dots:e[2].length,type:e[3]||"n"}}static parseNoteStruct(t){const e=vt.parseDuration(t.duration);if(!e)return;let i=t.type;if(i&&!V.validTypes[i])return;const n=[];i||(i=e.type||"n",void 0!==t.keys&&t.keys.forEach(((t,e)=>{const s=t.split("/");n[e]=s&&3===s.length?s[2]:i})));let s=V.durationToTicks(e.duration);if(!s)return;const a=t.dots?t.dots:e.dots;if("number"!=typeof a)return;let o=s;for(let t=0;tV.getGlyphProps(this.duration,t))),this.playNote=void 0,this.ignore_ticks=!1,this.width=0,this.leftDisplacedHeadPx=0,this.rightDisplacedHeadPx=0,this.x_shift=0,this.ys=[],t.align_center&&this.setCenterAlignment(t.align_center),this.render_options={annotation_spacing:5,glyph_font_scale:1,stroke_px:1,scale:1,font:"",y_shift:0}}getPlayNote(){return this.playNote}setPlayNote(t){return this.playNote=t,this}isRest(){return!1}addStroke(t,e){return e.setNote(this),e.setIndex(t),this.modifiers.push(e),this.preFormatted=!1,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this.setYs([t.getYForLine(0)]),this.setContext(this.stave.getContext()),this}getLeftDisplacedHeadPx(){return this.leftDisplacedHeadPx}getRightDisplacedHeadPx(){return this.rightDisplacedHeadPx}setLeftDisplacedHeadPx(t){return this.leftDisplacedHeadPx=t,this}setRightDisplacedHeadPx(t){return this.rightDisplacedHeadPx=t,this}shouldIgnoreTicks(){return this.ignore_ticks}getLineNumber(t){return 0}getLineForRest(){return 0}getGlyph(){return this.glyphProps}getGlyphProps(){return this.glyphProps}getGlyphWidth(){return this.glyphProps.getWidth(this.render_options.glyph_font_scale)}setYs(t){return this.ys=t,this}getYs(){if(0===this.ys.length)throw new x("NoYValues","No Y-values calculated for this note.");return this.ys}getYForTopText(t){return this.checkStave().getYForTopText(t)}getVoice(){if(!this.voice)throw new x("NoVoice","Note has no voice.");return this.voice}setVoice(t){return this.voice=t,this.preFormatted=!1,this}getTickContext(){return this.checkTickContext()}setTickContext(t){return this.tickContext=t,this.preFormatted=!1,this}getDuration(){return this.duration}isDotted(){return this.getModifiersByType(_.Dot).length>0}hasStem(){return!1}getNoteType(){return this.noteType}getBeam(){return this.beam}checkBeam(){return p(this.beam,"NoBeam","No beam attached to instance")}hasBeam(){return null!=this.beam}setBeam(t){return this.beam=t,this}addModifier(t,e=0){const i="Note.addModifier(modifier: Modifier, index: number=0)";if("string"==typeof e&&(e=parseInt(e),console.warn(i+" expected a number for `index`, but received a string.")),"object"!=typeof t||"number"!=typeof e)throw new x("WrongParams","Incorrect call signature. Use "+i+" instead.");return t.setNote(this),t.setIndex(e),super.addModifier(t),this}getModifiersByType(t){return this.modifiers.filter((e=>e.getCategory()===t))}getModifierStartXY(t,e,i){if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");return{x:this.getAbsoluteX(),y:this.ys[0]}}getRightParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getRightDisplacedHeadPx():0}getLeftParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getLeftDisplacedHeadPx()-this.x_shift:-this.x_shift}getFirstDotPx(){let t=this.getRightDisplacedHeadPx();return 0!==this.checkModifierContext().getMembers("Parenthesis").length&&(t+=V.currentMusicFont().lookupMetric("parenthesis.default.width")),t}getMetrics(){if(!this.preFormatted)throw new x("UnformattedNote","Can't call getMetrics on an unformatted note.");const t=this.modifierContext?this.modifierContext.getState().left_shift:0,e=this.modifierContext?this.modifierContext.getState().right_shift:0,i=this.getWidth();return{width:i,glyphWidth:this.getGlyphWidth(),notePx:i-t-e-this.leftDisplacedHeadPx-this.rightDisplacedHeadPx,modLeftPx:t,modRightPx:e,leftDisplacedHeadPx:this.leftDisplacedHeadPx,rightDisplacedHeadPx:this.rightDisplacedHeadPx,glyphPx:0}}getAbsoluteX(){let t=this.checkTickContext("Can't getAbsoluteX() without a TickContext.").getX();return this.stave&&(t+=this.stave.getNoteStartX()+V.currentMusicFont().lookupMetric("stave.padding")),this.isCenterAligned()&&(t+=this.getCenterXShift()),t}static getPoint(t){return"default"==t?V.NOTATION_FONT_SCALE:V.NOTATION_FONT_SCALE/5*3}getStemDirection(){throw new x("NoStem","No stem attached to this note.")}getStemExtents(){throw new x("NoStem","No stem attached to this note.")}getTieRightX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t+=-this.width/2+this.width+2,t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t-=this.width/2+2,t}getKeys(){return this.keys}getKeyProps(){return this.keyProps}}var wt,Bt,Et,Ct,Pt,Nt;!function(t){t[t.CENTER=0]="CENTER",t[t.LEFT=1]="LEFT",t[t.RIGHT=2]="RIGHT",t[t.ABOVE=3]="ABOVE",t[t.BELOW=4]="BELOW",t[t.BEGIN=5]="BEGIN",t[t.END=6]="END"}(wt||(wt={}));class kt extends W{static get CATEGORY(){return _.StaveModifier}static get Position(){return wt}constructor(){super(),this.width=0,this.x=0,this.padding=10,this.position=wt.ABOVE}getPosition(){return this.position}setPosition(t){return this.position=t,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this}getWidth(){return this.width}setWidth(t){return this.width=t,this}getX(){return this.x}setX(t){return this.x=t,this}placeGlyphOnLine(t,e,i,n=0){t.setYShift(e.getYForLine(null!=i?i:0)-e.getYForGlyphs()+n)}getPadding(t){return void 0!==t&&t<2?0:this.padding}setPadding(t){return this.padding=t,this}setLayoutMetrics(t){return this.layoutMetrics=t,this}getLayoutMetrics(){return this.layoutMetrics}draw(...t){}}!function(t){t[t.SINGLE=1]="SINGLE",t[t.DOUBLE=2]="DOUBLE",t[t.END=3]="END",t[t.REPEAT_BEGIN=4]="REPEAT_BEGIN",t[t.REPEAT_END=5]="REPEAT_END",t[t.REPEAT_BOTH=6]="REPEAT_BOTH",t[t.NONE=7]="NONE"}(Bt||(Bt={}));class At extends kt{static get CATEGORY(){return _.Barline}static get type(){return Bt}static get typeString(){return{single:Bt.SINGLE,double:Bt.DOUBLE,end:Bt.END,repeatBegin:Bt.REPEAT_BEGIN,repeatEnd:Bt.REPEAT_END,repeatBoth:Bt.REPEAT_BOTH,none:Bt.NONE}}constructor(t){super(),this.thickness=V.STAVE_LINE_THICKNESS;const e=Bt;this.widths={},this.widths[e.SINGLE]=5,this.widths[e.DOUBLE]=5,this.widths[e.END]=5,this.widths[e.REPEAT_BEGIN]=5,this.widths[e.REPEAT_END]=5,this.widths[e.REPEAT_BOTH]=5,this.widths[e.NONE]=5,this.paddings={},this.paddings[e.SINGLE]=0,this.paddings[e.DOUBLE]=0,this.paddings[e.END]=0,this.paddings[e.REPEAT_BEGIN]=15,this.paddings[e.REPEAT_END]=15,this.paddings[e.REPEAT_BOTH]=15,this.paddings[e.NONE]=0,this.layoutMetricsMap={},this.layoutMetricsMap[e.SINGLE]={xMin:0,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.DOUBLE]={xMin:-3,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.END]={xMin:-5,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_END]={xMin:-10,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BEGIN]={xMin:-2,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BOTH]={xMin:-10,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.NONE]={xMin:0,xMax:0,paddingLeft:5,paddingRight:5},this.setPosition(wt.BEGIN),this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?At.typeString[t]:t,this.setWidth(this.widths[this.type]),this.setPadding(this.paddings[this.type]),this.setLayoutMetrics(this.layoutMetricsMap[this.type]),this}draw(t){const e=t.checkContext();switch(this.setRendered(),this.applyStyle(e),e.openGroup("stavebarline",this.getAttribute("id")),this.type){case Bt.SINGLE:this.drawVerticalBar(t,this.x,!1);break;case Bt.DOUBLE:this.drawVerticalBar(t,this.x,!0);break;case Bt.END:this.drawVerticalEndBar(t,this.x);break;case Bt.REPEAT_BEGIN:this.drawRepeatBar(t,this.x,!0),t.getX()!==this.x&&this.drawVerticalBar(t,t.getX());break;case Bt.REPEAT_END:this.drawRepeatBar(t,this.x,!1);break;case Bt.REPEAT_BOTH:this.drawRepeatBar(t,this.x,!1),this.drawRepeatBar(t,this.x,!0)}e.closeGroup(),this.restoreStyle(e)}drawVerticalBar(t,e,i){const n=t.checkContext(),s=t.getTopLineTopY(),a=t.getBottomLineBottomY();i&&n.fillRect(e-3,s,1,a-s),n.fillRect(e,s,1,a-s)}drawVerticalEndBar(t,e){const i=t.checkContext(),n=t.getTopLineTopY(),s=t.getBottomLineBottomY();i.fillRect(e-5,n,1,s-n),i.fillRect(e-2,n,3,s-n)}drawRepeatBar(t,e,i){const n=t.checkContext(),s=t.getTopLineTopY(),a=t.getBottomLineBottomY();let o=3;i||(o=-5),n.fillRect(e+o,s,1,a-s),n.fillRect(e-2,s,3,a-s);i?o+=4:o-=4;const r=e+o+1;let h=(t.getNumLines()-1)*t.getSpacingBetweenLines();h=h/2-t.getSpacingBetweenLines()/2;let b=s+h+1;n.beginPath(),n.arc(r,b,2,0,2*Math.PI,!1),n.fill(),b+=t.getSpacingBetweenLines(),n.beginPath(),n.arc(r,b,2,0,2*Math.PI,!1),n.fill()}}class Dt extends vt{static get CATEGORY(){return _.BarNote}constructor(t=Bt.SINGLE){super({duration:"b"}),this.metrics={widths:{}};const e=Bt;this.metrics.widths={[e.SINGLE]:8,[e.DOUBLE]:12,[e.END]:15,[e.REPEAT_BEGIN]:14,[e.REPEAT_END]:14,[e.REPEAT_BOTH]:18,[e.NONE]:0},this.ignore_ticks=!0,this.setType(t),this.barline=new At(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?At.typeString[t]:t,this.setWidth(this.metrics.widths[this.type]),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkContext();!function(...t){Dt.DEBUG&&f("Vex.Flow.BarNote",t)}("Rendering bar line at: ",this.getAbsoluteX()),this.applyStyle(t),t.openGroup("barnote",this.getAttribute("id")),this.barline.setType(this.type),this.barline.setX(this.getAbsoluteX()),this.barline.draw(this.checkStave()),t.closeGroup(),this.restoreStyle(t),this.setRendered()}}Dt.DEBUG=!1;class Mt extends tt{static get CATEGORY(){return _.Bend}static get UP(){return 0}static get DOWN(){return 1}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let n=0;nt{const a=t+n,o=i;e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,i),e.quadraticCurveTo(a,o,t+n,s),e.stroke(),e.restore()},c=(t,i,n,s)=>{e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,s),e.quadraticCurveTo(t+n,s,t+n,i),e.stroke(),e.restore()},l=(t,i,n)=>{const s=i+4*n;e.beginPath(),e.moveTo(t,i),e.lineTo(t-4,s),e.lineTo(t+4,s),e.closePath(),e.fill()},d=(t,i)=>{e.save(),e.setFont(this.textFont);const n=t-e.measureText(i).width/2;e.fillText(i,n,h),e.restore()};let m,g=0,_=0;if(null===(t=this.tap)||void 0===t?void 0:t.length){d(i.getModifierStartXY(tt.Position.CENTER,this.index).x,this.tap)}for(let t=0;t0){const e=b.symbolBlocks[t-1];Ot.isSuperscript(e)||(s=n)}a&&s>0&&(x=!0,e.xShift=e.xShift+(s-n),n=s,s=0,b.setEnableKerning(!1)),i||a||(s=0),e.vAlign=x,n+=e.width,g=n}if(b.updateKerningAdjustments(),b.updateOverBarAdjustments(),b.getVertical()===Ct.TOP?(b.setTextLine(e.top_text_line),e.top_text_line+=_):(b.setTextLine(e.text_line+1),e.text_line+=_+1),b.getReportWidth()&&m(d)){const t=d.getGlyphProps().getWidth();b.getHorizontal()===Et.LEFT?(r=Math.max(t,r),a=Math.max(a,g)+Ot.minPadding):b.getHorizontal()===Et.RIGHT?(h=Math.max(t,h),o=Math.max(o,g)):(a=Math.max(a,g/2)+Ot.minPadding,o=Math.max(o,g/2),r=Math.max(t/2,r),h=Math.max(t/2,h))}n=0}const b=Math.min(Math.max(o-h,0),Math.max(o-e.right_shift,0)),c=Math.min(Math.max(a-r,0),Math.max(a-e.left_shift,0));return e.left_shift+=c,e.right_shift+=b,!0}constructor(){super(),this.symbolBlocks=[],this.horizontal=Et.LEFT,this.vertical=Ct.TOP,this.useKerning=!0,this.reportWidth=!0,this.resetFont()}static get TEXT_FONT(){let t="Roboto Slab, Times, serif";return"Petaluma"===V.currentMusicFont().getName()&&(t="PetalumaScript, Arial, sans-serif"),{family:t,size:12,weight:N.NORMAL,style:k.NORMAL}}get superscriptOffset(){return Ot.superscriptOffset*this.textFormatter.fontSizeInPixels}get subscriptOffset(){return Ot.subscriptOffset*this.textFormatter.fontSizeInPixels}setReportWidth(t){return this.reportWidth=t,this}getReportWidth(){return this.reportWidth}updateOverBarAdjustments(){const t=this.symbolBlocks.findIndex((({symbolType:t,glyph:e})=>t===Pt.GLYPH&&void 0!==e&&"csymDiagonalArrangementSlash"===e.code));if(t<0)return;const e=this.symbolBlocks[t].width/4,i=.25*this.textFormatter.fontSizeInPixels;let n=0;for(;n0?this.symbolBlocks[t-1]:void 0;let n=0;e.symbolType===Pt.GLYPH&&void 0!==e.glyph&&e.glyph.code===Ot.glyphs.over.code&&(n+=e.glyph.metrics.x_shift),void 0!==i&&i.symbolType===Pt.GLYPH&&void 0!==i.glyph&&i.glyph.code===Ot.glyphs.over.code&&(n+=i.glyph.metrics.x_shift);let s=!1,a=!1;void 0!==i&&i.symbolType===Pt.TEXT&&(s=Ot.upperKerningText.some((t=>t===i.text[i.text.length-1])),a=Ot.lowerKerningText.some((t=>t===i.text[i.text.length-1])));const o=Ot.kerningOffset*this.textFormatter.fontSizeInPixels;return s&&e.symbolModifier===Nt.SUPERSCRIPT&&(n+=o),a&&e.symbolType===Pt.TEXT&&(e.text[0]>="a"&&e.text[0]<="z"&&(n+=o/2),Ot.upperKerningText.some((t=>t===(null==i?void 0:i.text[i.text.length-1])))&&(n+=o/2)),n}getSymbolBlock(t={}){var e,i,n;const s=null!==(e=t.symbolType)&&void 0!==e?e:Pt.TEXT,a={text:null!==(i=t.text)&&void 0!==i?i:"",symbolType:s,symbolModifier:null!==(n=t.symbolModifier)&&void 0!==n?n:Nt.NONE,xShift:0,yShift:0,vAlign:!1,width:0};if(s===Pt.GLYPH&&"string"==typeof t.glyph){const e=Ot.glyphs[t.glyph],i=20;a.glyph=new Z(e.code,i,{category:"chordSymbol"})}else s===Pt.TEXT?a.width=this.textFormatter.getWidthForTextInEm(a.text):s===Pt.LINE&&(a.width=t.width);return a}addSymbolBlock(t){return this.symbolBlocks.push(this.getSymbolBlock(t)),this}addText(t,e={}){const i=Pt.TEXT;return this.addSymbolBlock(Object.assign(Object.assign({},e),{text:t,symbolType:i}))}addTextSuperscript(t){const e=Pt.TEXT,i=Nt.SUPERSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addTextSubscript(t){const e=Pt.TEXT,i=Nt.SUBSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addGlyphSuperscript(t){const e=Pt.GLYPH,i=Nt.SUPERSCRIPT;return this.addSymbolBlock({glyph:t,symbolType:e,symbolModifier:i})}addGlyph(t,e={}){const i=Pt.GLYPH;return this.addSymbolBlock(Object.assign(Object.assign({},e),{glyph:t,symbolType:i}))}addGlyphOrText(t,e={}){let i="";for(let n=0;n0&&(this.addText(i,e),i=""),this.addGlyph(s,e)):i+=s}return i.length>0&&this.addText(i,e),this}addLine(t,e={}){const i=Pt.LINE;return this.addSymbolBlock(Object.assign(Object.assign({},e),{symbolType:i,width:t}))}setFont(t,e,i,n){return super.setFont(t,e,i,n),this.textFormatter=bt.create(this.textFont),this}setEnableKerning(t){return this.useKerning=t,this}setVertical(t){return this.vertical="string"==typeof t?Ot.VerticalJustifyString[t]:t,this}getVertical(){return this.vertical}setHorizontal(t){return this.horizontal="string"==typeof t?Ot.HorizontalJustifyString[t]:t,this}getHorizontal(){return this.horizontal}getWidth(){let t=0;return this.symbolBlocks.forEach((e=>{t+=e.vAlign?0:e.width})),t}getYOffsetForText(t){var e;let i=0,n=0;for(n=0;n0?i/s*-1:0}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),t.save(),this.applyStyle(),t.openGroup("chordsymbol",this.getAttribute("id"));const i=e.getModifierStartXY(tt.Position.ABOVE,this.index);let n;t.setFont(this.textFont);const s=e.hasStem(),a=e.checkStave();if(this.vertical===Ct.BOTTOM){if(n=a.getYForBottomText(this.text_line+V.TEXT_HEIGHT_OFFSET_HACK),s){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines(),s=1===e.getStemDirection()?t.baseY:t.topY;n=Math.max(n,s+i*(this.text_line+2))}}else{const t=Math.min(...e.getYs());if(n=Math.min(a.getYForTopText(this.text_line),t-10),s){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines();n=Math.min(n,t.topY-5-i*this.text_line)}}let o=i.x;o=this.horizontal===Et.LEFT?i.x:this.horizontal===Et.RIGHT?i.x+this.getWidth():this.horizontal===Et.CENTER?i.x-this.getWidth()/2:e.getStemX()-this.getWidth()/2,Ft("Rendering ChordSymbol: ",this.textFormatter,o,n),this.symbolBlocks.forEach((e=>{const i=Ot.isSuperscript(e),s=Ot.isSubscript(e);let a=n;if(Ft("shift was ",e.xShift,e.yShift),Ft("curY pre sub ",a),i&&(a+=this.superscriptOffset),s&&(a+=this.subscriptOffset),Ft("curY sup/sub ",a),e.symbolType===Pt.TEXT){if((i||s)&&(t.save(),this.textFont)){const{family:e,size:i,weight:n,style:s}=this.textFont,a=F.scaleSize(i,Ot.superSubRatio);t.setFont(e,a,n,s)}Ft("Rendering Text: ",e.text,o+e.xShift,a+e.yShift),t.fillText(e.text,o+e.xShift,a+e.yShift),(i||s)&&t.restore()}else e.symbolType===Pt.GLYPH&&e.glyph?(a+=e.yShift,Ft("Rendering Glyph: ",e.glyph.code,o+e.xShift,a),e.glyph.render(t,o+e.xShift,a)):e.symbolType===Pt.LINE&&(Ft("Rendering Line : ",e.width,o,a),t.beginPath(),t.setLineWidth(1),t.moveTo(o,n),t.lineTo(o+e.width,a),t.stroke());o+=e.width,e.vAlign&&(o+=e.xShift)})),t.closeGroup(),this.restoreStyle(),t.restore()}}Ot.DEBUG=!1,Ot.HorizontalJustify=Et,Ot.HorizontalJustifyString={left:Et.LEFT,right:Et.RIGHT,center:Et.CENTER,centerStem:Et.CENTER_STEM},Ot.VerticalJustify=Ct,Ot.VerticalJustifyString={top:Ct.TOP,above:Ct.TOP,below:Ct.BOTTOM,bottom:Ct.BOTTOM},Ot.glyphs={diminished:{code:"csymDiminished"},dim:{code:"csymDiminished"},halfDiminished:{code:"csymHalfDiminished"},"+":{code:"csymAugmented"},augmented:{code:"csymAugmented"},majorSeventh:{code:"csymMajorSeventh"},minor:{code:"csymMinor"},"-":{code:"csymMinor"},"(":{code:"csymParensLeftTall"},leftParen:{code:"csymParensLeftTall"},")":{code:"csymParensRightTall"},rightParen:{code:"csymParensRightTall"},leftBracket:{code:"csymBracketLeftTall"},rightBracket:{code:"csymBracketRightTall"},leftParenTall:{code:"csymParensLeftVeryTall"},rightParenTall:{code:"csymParensRightVeryTall"},"/":{code:"csymDiagonalArrangementSlash"},over:{code:"csymDiagonalArrangementSlash"},"#":{code:"accidentalSharp"},b:{code:"accidentalFlat"}},Ot.symbolTypes=Pt,Ot.symbolModifiers=Nt,Ot.noFormat=!1;class Rt extends tt{static get CATEGORY(){return _.Dot}static getDots(t){return t.getModifiersByType(Rt.CATEGORY)}static buildAndAttach(t,e){for(const i of t)if(null==e?void 0:e.all)for(let t=0;te.line-t.line));let a=i,o=0,r=null,h=null,b=null,c=0;for(let t=0;to?a:o,r=d,h=i}return e.right_shift+=o,!0}constructor(){super(),this.position=tt.Position.RIGHT,this.radius=2,this.setWidth(5),this.dot_shiftY=0}setNote(t){return this.note=t,h(t)&&(this.radius*=.5,this.setWidth(3)),this}setDotShiftY(t){return this.dot_shiftY=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.checkStave().getSpacingBetweenLines(),n=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0});g(e)&&(n.y=e.getStemExtents().baseY);const s=n.x+this.x_shift+this.width-this.radius,a=n.y+this.y_shift+this.dot_shiftY*i;t.beginPath(),t.arc(s,a,this.radius,0,2*Math.PI,!1),t.fill()}}class Wt extends tt{static get CATEGORY(){return _.FretHandFinger}static format(t,e){const{left_shift:i,right_shift:n}=e;if(!t||0===t.length)return!1;const s=[];let a=null,o=0,r=0;for(let h=0;he.line-t.line));let h=0,b=0,c=0,l=0,d=null,m=null;for(let t=0;tc?e:c):o===tt.Position.RIGHT&&(g.setXShift(b),e=r+p,l=e>l?e:l),d=_,m=a}return e.left_shift+=c,e.right_shift+=l,!0}static easyScoreHook({fingerings:t}={},e,i){null==t||t.split(",").map((t=>{const e=t.trim().split("."),n={number:e[0]};return e[1]&&(n.position=e[1]),i.getFactory().Fingering(n)})).map(((t,i)=>e.addModifier(t,i)))}constructor(t){super(),this.finger=t,this.width=7,this.position=tt.Position.LEFT,this.x_shift=0,this.y_shift=0,this.x_offset=0,this.y_offset=0,this.resetFont()}setFretHandFinger(t){return this.finger=t,this}getFretHandFinger(){return this.finger}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let n=i.x+this.x_shift+this.x_offset,s=i.y+this.y_shift+this.y_offset+5;switch(this.position){case tt.Position.ABOVE:n-=4,s-=12;break;case tt.Position.BELOW:n-=2,s+=10;break;case tt.Position.LEFT:n-=this.width;break;case tt.Position.RIGHT:n+=1;break;default:throw new x("InvalidPosition",`The position ${this.position} does not exist`)}t.save(),t.setFont(this.textFont),t.fillText(""+this.finger,n,s),t.restore()}}Wt.TEXT_FONT={family:F.SANS_SERIF,size:9,weight:N.BOLD,style:k.NORMAL};class Lt extends vt{static get CATEGORY(){return _.NoteHead}constructor(t){super(t),this.custom_glyph=!1,this.stem_up_x_offset=0,this.stem_down_x_offset=0,this.index=t.index,this.x=t.x||0,this.y=t.y||0,t.note_type&&(this.noteType=t.note_type),this.displaced=t.displaced||!1,this.stem_direction=t.stem_direction||st.UP,this.line=t.line||0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),(this.line>5||this.line<0)&&this.glyphProps.ledger_code_head&&(this.glyphProps.code_head=this.glyphProps.ledger_code_head),this.glyph_code=this.glyphProps.code_head,this.x_shift=t.x_shift||0,t.custom_glyph_code&&(this.custom_glyph=!0,this.glyph_code=t.custom_glyph_code,this.stem_up_x_offset=t.stem_up_x_offset||0,this.stem_down_x_offset=t.stem_down_x_offset||0),this.setStyle(t.style),this.slashed=t.slashed||!1,this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE}),this.setWidth(!this.custom_glyph||this.glyph_code.startsWith("noteheadSlashed")||this.glyph_code.startsWith("noteheadCircled")?this.glyphProps.getWidth(this.render_options.glyph_font_scale):Z.getWidth(this.glyph_code,this.render_options.glyph_font_scale))}getWidth(){return this.width}isDisplaced(){return!0===this.displaced}setX(t){return this.x=t,this}getY(){return this.y}setY(t){return this.y=t,this}getLine(){return this.line}setLine(t){return this.line=t,this}getAbsoluteX(){const t=this.preFormatted?super.getAbsoluteX():this.x,e=st.WIDTH/2,i=V.currentMusicFont(),n=i.lookupMetric("notehead.shiftX",0)*this.stem_direction,s=i.lookupMetric("noteHead.displacedShiftX",0)*this.stem_direction;return t+n+(this.displaced?(this.width-e)*this.stem_direction+s:0)}getBoundingBox(){const t=this.checkStave().getSpacingBetweenLines(),e=t/2,i=this.y-e;return new C(this.getAbsoluteX(),i,this.width,t)}setStave(t){const e=this.getLine();return this.stave=t,this.stave&&(this.setY(this.stave.getYForNote(e)),this.setContext(this.stave.getContext())),this}preFormat(){if(this.preFormatted)return this;const t=this.getWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx;return this.setWidth(t),this.preFormatted=!0,this}draw(){const t=this.checkContext();this.setRendered();let e=this.getAbsoluteX();this.custom_glyph&&(e+=this.stem_direction===st.UP?this.stem_up_x_offset+(this.glyphProps.stem?this.glyphProps.getWidth(this.render_options.glyph_font_scale)-this.width:0):this.stem_down_x_offset);const i=this.y;!function(...t){Lt.DEBUG&&f("Vex.Flow.NoteHead",t)}("Drawing note head '",this.noteType,this.duration,"' at",e,i);const n=this.stem_direction,s=this.render_options.glyph_font_scale,a=`${this.glyph_code}Stem${n===st.UP?"Up":"Down"}`;if("s"===this.noteType){const s=this.checkStave().getSpacingBetweenLines();!function(t,e,i,n,s,a){const o=V.SLASH_NOTEHEAD_WIDTH;t.save(),t.setLineWidth(V.STEM_WIDTH);let r=!1;if(V.durationToNumber(e)>2&&(r=!0),r||(i-=V.STEM_WIDTH/2*s),t.beginPath(),t.moveTo(i,n+a),t.lineTo(i,n+1),t.lineTo(i+o,n-a),t.lineTo(i+o,n),t.lineTo(i,n+a),t.closePath(),r?t.fill():t.stroke(),V.durationToFraction(e).equals(.5)){const e=[-3,-1,o+1,o+3];for(let s=0;st.getCategory()===_.Dot&&0===t.getIndex())).length!==r.note.getModifiers().filter((t=>t.getCategory()===_.Dot&&0===t.getIndex())).length||t<1&&t>0||JSON.stringify(a.note.getStyle())!==JSON.stringify(r.note.getStyle())?(l=c+2,a.stemDirection===r.stemDirection?a.note.setXShift(l):r.note.setXShift(l)):a.note.voice!==r.note.voice&&a.stemDirection===r.stemDirection&&(a.line!=r.line?(l=c+2,a.note.setXShift(l)):1===r.stemDirection&&(r.stemDirection=-1,r.note.setStemDirection(-1)))}else t<1?(l=c+2,a.note.durationt.postFormat())),!0)}constructor(t){var e,i,n;super(t),this.minLine=0,this.maxLine=0,this.sortedKeyProps=[],this.ledgerLineStyle={},this.clef=null!==(e=t.clef)&&void 0!==e?e:"treble",this.octave_shift=null!==(i=t.octave_shift)&&void 0!==i?i:0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),this.displaced=!1,this.dot_shiftY=0,this.use_default_head_x=!1,this._noteHeads=[],this.modifiers=[],this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE,stroke_px:t.stroke_px||Gt.LEDGER_LINE_OFFSET}),this.calculateKeyProps(),this.buildStem(),t.auto_stem?this.autoStem():this.setStemDirection(null!==(n=t.stem_direction)&&void 0!==n?n:st.UP),this.reset(),this.buildFlag()}reset(){super.reset();const t=this._noteHeads.map((t=>t.getStyle()));this.buildNoteHeads(),this._noteHeads.forEach(((e,i)=>{const n=t[i];n&&e.setStyle(n)}));const e=this.stave;return e&&this.setStave(e),this.calcNoteDisplacements(),this}setBeam(t){return this.beam=t,this.calcNoteDisplacements(),this.stem&&this.stem.setExtension(this.getStemExtension()),this}buildStem(){return this.setStem(new st({hide:!!this.isRest()})),this}buildNoteHeads(){this._noteHeads=[];const t=this.getStemDirection(),e=this.getKeys();let i,n,s,a,o,r=!1;t===st.UP?(s=0,a=e.length,o=1):(s=e.length-1,a=-1,o=-1);for(let e=s;e!==a;e+=o){const s=this.sortedKeyProps[e].keyProps,a=s.line;void 0===i?i=a:(n=Math.abs(i-a),0===n||.5===n?r=!r:(r=!1,this.use_default_head_x=!0)),i=a;const o=new Lt({duration:this.duration,note_type:this.noteType,displaced:r,stem_direction:t,custom_glyph_code:s.code,glyph_font_scale:this.render_options.glyph_font_scale,x_shift:s.shift_right,stem_up_x_offset:s.stem_up_x_offset,stem_down_x_offset:s.stem_down_x_offset,line:s.line});this.addChildElement(o),this._noteHeads[this.sortedKeyProps[e].index]=o}return this._noteHeads}autoStem(){this.setStemDirection(this.calculateOptimalStemDirection())}calculateOptimalStemDirection(){this.minLine=this.sortedKeyProps[0].keyProps.line,this.maxLine=this.sortedKeyProps[this.keyProps.length-1].keyProps.line;return(this.minLine+this.maxLine)/2<3?st.UP:st.DOWN}calculateKeyProps(){let t;for(let e=0;e0&&(this.keyProps[e-1].displaced=!0)),t=a,this.keyProps.push(s)}this.keyProps.forEach(((t,e)=>{this.sortedKeyProps.push({keyProps:t,index:e})})),this.sortedKeyProps.sort(((t,e)=>t.keyProps.line-e.keyProps.line))}getBoundingBox(){var t,e;if(!this.preFormatted)throw new x("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const{width:i,modLeftPx:n,leftDisplacedHeadPx:s}=this.getMetrics(),a=this.getAbsoluteX()-n-s;let o=0,r=0;const h=(null!==(e=null===(t=this.getStave())||void 0===t?void 0:t.getSpacingBetweenLines())&&void 0!==e?e:0)/2,b=2*h;if(this.isRest()){const t=this.ys[0],e=V.durationToFraction(this.duration);e.equals(1)||e.equals(2)?(o=t-h,r=t+h):(o=t-this.glyphProps.line_above*b,r=t+this.glyphProps.line_below*b)}else if(this.glyphProps.stem){const t=this.getStemExtents();t.baseY+=h*this.getStemDirection(),o=Math.min(t.topY,t.baseY),r=Math.max(t.topY,t.baseY)}else{o=0,r=0;for(let t=0;te&&(e=n):n1}hasStem(){return this.glyphProps.stem}hasFlag(){return super.hasFlag()&&!this.isRest()}getStemX(){return"r"===this.noteType?this.getCenterGlyphX():super.getStemX()+(this.stem_direction?st.WIDTH/(2*-this.stem_direction):0)}getYForTopText(t){const e=this.getStemExtents();return Math.min(this.checkStave().getYForTopText(t),e.topY-this.render_options.annotation_spacing*(t+1))}getYForBottomText(t){const e=this.getStemExtents();return Math.max(this.checkStave().getYForTopText(t),e.baseY+this.render_options.annotation_spacing*t)}setStave(t){super.setStave(t);const e=this._noteHeads.map((e=>(e.setStave(t),e.getY())));if(this.setYs(e),this.stem){const{y_top:t,y_bottom:e}=this.getNoteHeadBounds();this.stem.setYBounds(t,e)}return this}isDisplaced(){return this.displaced}setNoteDisplaced(t){return this.displaced=t,this}getTieRightX(){let t=this.getAbsoluteX();return t+=this.getGlyphWidth()+this.x_shift+this.rightDisplacedHeadPx,this.modifierContext&&(t+=this.modifierContext.getRightShift()),t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.x_shift-this.leftDisplacedHeadPx,t}getLineForRest(){let t=this.keyProps[0].line;if(this.keyProps.length>1){const e=this.keyProps[this.keyProps.length-1].line;t=S(Math.max(t,e),Math.min(t,e))}return t}getModifierStartXY(t,e,i={}){var n,s;if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new x("NoYValues","No Y-Values calculated for this note.");const{ABOVE:a,BELOW:o,LEFT:r,RIGHT:h}=tt.Position;let b=0;return t===r?b=-2:t===h?(b=this.getGlyphWidth()+this.x_shift+2,this.stem_direction===st.UP&&this.hasFlag()&&(i.forceFlagRight||((t,e)=>e===(t.getStemDirection()===st.UP?t.keyProps.length-1:0))(this,e))&&(b+=null!==(s=null===(n=null==this?void 0:this.flag)||void 0===n?void 0:n.getMetrics().width)&&void 0!==s?s:0)):t!==o&&t!==a||(b=this.getGlyphWidth()/2),{x:this.getAbsoluteX()+b,y:this.ys[e]}}setStyle(t){return super.setGroupStyle(t)}setStemStyle(t){const e=this.getStem();return e&&e.setStyle(t),this}getStemStyle(){var t;return null===(t=this.stem)||void 0===t?void 0:t.getStyle()}setLedgerLineStyle(t){this.ledgerLineStyle=t}getLedgerLineStyle(){return this.ledgerLineStyle}setFlagStyle(t){var e;null===(e=this.flag)||void 0===e||e.setStyle(t)}getFlagStyle(){var t;return null===(t=this.flag)||void 0===t?void 0:t.getStyle()}setKeyStyle(t,e){return this._noteHeads[t].setStyle(e),this}setKeyLine(t,e){return this.keyProps[t].line=e,this.reset(),this}getKeyLine(t){return this.keyProps[t].line}getVoiceShiftWidth(){return this.getGlyphWidth()*(this.displaced?2:1)}calcNoteDisplacements(){this.setLeftDisplacedHeadPx(this.displaced&&this.stem_direction===st.DOWN?this.getGlyphWidth():0),this.setRightDisplacedHeadPx(!this.hasFlag()&&this.displaced&&this.stem_direction===st.UP?this.getGlyphWidth():0)}preFormat(){if(this.preFormatted)return;let t=0;this.modifierContext&&(this.modifierContext.preFormat(),0===this.modifierContext.getWidth()&&(t=Gt.minNoteheadPadding));let e=this.getGlyphWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx+t;this.shouldDrawFlag()&&this.stem_direction===st.UP&&(e+=this.getGlyphWidth()),this.setWidth(e),this.preFormatted=!0}getNoteHeadBounds(){let t,e,i,n,s=1/0,a=-1/0,o=this.checkStave().getNumLines(),r=1,h=o,b=r;return this._noteHeads.forEach((c=>{const l=c.getLine(),d=c.getY();s=Math.min(d,s),a=Math.max(d,a),void 0===e&&c.isDisplaced()&&(e=c.getAbsoluteX()),void 0!==t||c.isDisplaced()||(t=c.getAbsoluteX()),o=Math.max(l,o),r=Math.min(l,r),c.isDisplaced()?(i=void 0===i?l:Math.max(l,i),n=void 0===n?l:Math.min(l,n)):(h=Math.max(l,h),b=Math.min(l,b))}),this),{y_top:s,y_bottom:a,displaced_x:e,non_displaced_x:t,highest_line:o,lowest_line:r,highest_displaced_line:i,lowest_displaced_line:n,highest_non_displaced_line:h,lowest_non_displaced_line:b}}getNoteHeadBeginX(){return this.getAbsoluteX()+this.x_shift}getNoteHeadEndX(){return this.getNoteHeadBeginX()+this.getGlyphWidth()}get noteHeads(){return this._noteHeads.slice()}get note_heads(){return console.warn("StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.","This accessor will be removed in VexFlow 5.0."),this.noteHeads}drawLedgerLines(){const t=this.checkStave(),{glyphProps:e,render_options:{stroke_px:i}}=this,n=this.checkContext(),s=e.getWidth()+2*i,a=2*(e.getWidth()+i)-st.WIDTH/2;if(this.isRest())return;if(!n)throw new x("NoCanvasContext","Can't draw without a canvas context.");const{highest_line:o,lowest_line:r,highest_displaced_line:h,highest_non_displaced_line:b,lowest_displaced_line:c,lowest_non_displaced_line:l,displaced_x:d,non_displaced_x:m}=this.getNoteHeadBounds();if(o<6&&r>0)return;const g=Math.min(null!=d?d:0,null!=m?m:0),_=(t,e,o)=>{let r;r=o&&e?g-i:e?(null!=m?m:0)-i:(null!=d?d:0)-i;const h=e&&o?a:s;n.beginPath(),n.moveTo(r,t),n.lineTo(r+h,t),n.stroke()},u=Object.assign(Object.assign({},t.getDefaultLedgerLineStyle()),this.getLedgerLineStyle());this.applyStyle(n,u);for(let e=6;e<=o;++e){const i=void 0!==m&&e<=b,n=void 0!==h&&e<=h;_(t.getYForNote(e),i,n)}for(let e=0;e>=r;--e){const i=void 0!==m&&e>=l,n=void 0!==c&&e>=c;_(t.getYForNote(e),i,n)}this.restoreStyle(n,u)}drawModifiers(t){const e=this.checkContext();for(let i=0;i{e.applyStyle(t),t.openGroup("notehead",e.getAttribute("id"),{pointerBBox:!0}),e.setContext(t).draw(),this.drawModifiers(e),t.closeGroup(),e.restoreStyle(t)}))}drawStem(t){const e=this.checkContext();t&&this.setStem(new st(t)),this.shouldDrawFlag()&&this.stem&&this.stem.adjustHeightForFlag(),this.stem&&this.stem.setContext(e).draw()}getStaveNoteScale(){return 1}getStemExtension(){const t=super.getStemExtension();if(!this.glyphProps.stem)return t;const e=this.getStemDirection();if(e!==this.calculateOptimalStemDirection())return t;let i;i=e===st.UP?3-this.maxLine:this.minLine-3;const n=i-3.5;if(n<=0)return t;const s=this.getStave();let a=10;return null!=s&&(a=s.getSpacingBetweenLines()),t+n*a}draw(){if(!1===this.render_options.draw)return;if(0===this.ys.length)throw new x("NoYValues","Can't draw note without Y values.");const t=this.checkContext(),e=this.getNoteHeadBeginX(),i=this.hasStem()&&!this.beam;if(this._noteHeads.forEach((t=>t.setX(e))),this.stem){const t=this.getStemX();this.stem.setNoteHeadXBounds(t,t)}!function(...t){Gt.DEBUG&&f("Vex.Flow.StaveNote",t)}("Rendering ",this.isChord()?"chord :":"note :",this.keys),this.applyStyle(),t.openGroup("stavenote",this.getAttribute("id")),this.drawLedgerLines(),i&&this.drawStem(),this.drawNoteHeads(),this.drawFlag(),t.closeGroup(),this.restoreStyle(),this.setRendered()}}Gt.DEBUG=!1;class Ut extends W{static get CATEGORY(){return _.StaveTie}constructor(t,e){super(),this.setNotes(t),this.text=e,this.render_options={cp1:8,cp2:12,text_shift_x:0,first_x_shift:0,last_x_shift:0,y_shift:7,tie_spacing:0},this.resetFont()}setDirection(t){return this.direction=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new x("BadArguments","Tie needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new x("BadArguments","Tied notes must have same number of indices.");return this.notes=t,this}isPartial(){return!this.notes.first_note||!this.notes.last_note}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new x("BadArguments","No Y-values to render");const e=this.checkContext();let i=this.render_options.cp1,n=this.render_options.cp2;Math.abs(t.last_x_px-t.first_x_px)<10&&(i=2,n=8);const s=this.render_options.first_x_shift,a=this.render_options.last_x_shift,o=this.render_options.y_shift*t.direction,r=this.notes.first_indices,h=this.notes.last_indices;this.applyStyle(),e.openGroup("stavetie",this.getAttribute("id"));for(let b=0;bMath.pow(this.options.softmaxFactor,e.getTicks().value()/t)))),this.expTicksUsed}softmax(t){this.expTicksUsed||(this.expTicksUsed=this.reCalculateExpTicksUsed());const e=this.ticksUsed.value();return(t=>Math.pow(this.options.softmaxFactor,t/e))(t)/this.expTicksUsed}addTickable(t){if(!t.shouldIgnoreTicks()){const e=t.getTicks();if(this.ticksUsed.add(e),this.expTicksUsed=0,(this.mode===Ht.STRICT||this.mode===Ht.FULL)&&this.ticksUsed.greaterThan(this.totalTicks))throw this.ticksUsed.subtract(e),new x("BadArgument","Too many ticks.");e.lessThan(this.smallestTickCount)&&(this.smallestTickCount=e.clone()),this.resolutionMultiplier=this.ticksUsed.denominator,this.totalTicks.add(0,this.ticksUsed.denominator)}return this.tickables.push(t),t.setVoice(this),this}addTickables(t){for(let e=0;e{e.getStave()||e.setStave(t)})),this.preFormatted=!0,this}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}draw(t=this.checkContext(),e){let i;e=null!=e?e:this.stave,this.setRendered();for(let n=0;n1){const e=new We(t);e.render_options.beam_width=3,e.render_options.partial_beam_length=4,this.beams.push(e)}return this}setWidth(t){return this.width=t,this}getWidth(){return this.width+Gt.minNoteheadPadding}getGraceNotes(){return this.grace_notes}draw(){const t=this.checkContext(),e=this.checkAttachedNote();if(this.setRendered(),function(...t){Xt.DEBUG&&f("Vex.Flow.GraceNoteGroup",t)}("Drawing grace note group for:",e),this.alignSubNotesWithNote(this.getGraceNotes(),e),this.grace_notes.forEach((e=>e.setContext(t).draw())),this.beams.forEach((e=>e.setContext(t).draw())),this.show_slur){const i=d(e),n=i?Ut:Yt;this.slur=new n({last_note:this.grace_notes[0],first_note:e,first_indices:[0],last_indices:[0]}),this.slur.render_options.cp2=12,this.slur.render_options.y_shift=(i?7:5)+this.render_options.slur_y_shift,this.slur.setContext(t).draw()}}}Xt.DEBUG=!1;class Vt extends tt{static get CATEGORY(){return _.NoteSubGroup}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let e=0;e{t.setIgnoreTicks(!1)})),this.width=0,this.formatter=new ke,this.voice=new jt({num_beats:4,beat_value:4,resolution:V.RESOLUTION}).setStrict(!1),this.voice.addTickables(this.subNotes)}preFormat(){this.preFormatted||(this.formatter.joinVoices([this.voice]).format([this.voice],0),this.setWidth(this.formatter.getMinTotalWidth()),this.preFormatted=!0)}setWidth(t){return this.width=t,this}getWidth(){return this.width}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),this.alignSubNotesWithNote(this.subNotes,e),this.subNotes.forEach((e=>e.setContext(t).drawWithStyle()))}}class Kt extends tt{static get CATEGORY(){return _.Ornament}static get minPadding(){return V.currentMusicFont().lookupMetric("noteHead.minPadding")}static format(t,e){if(!t||0===t.length)return!1;let i=0,n=e.right_shift,s=e.left_shift,a=0;for(let o=0;o=0&&(r.x_shift+=n+2),Kt.ornamentAttack.indexOf(r.type)>=0&&(r.x_shift-=s+2),r.reportedWidth&&r.x_shift<0?s+=r.reportedWidth:r.reportedWidth&&r.x_shift>=0?n+=r.reportedWidth+Kt.minPadding:i=Math.max(r.getWidth(),i),Kt.ornamentArticulation.indexOf(r.type)>=0){p(r.note,"NoAttachedNote").getLineNumber()>=3||r.getPosition()===tt.Position.ABOVE?(e.top_text_line+=h,r.y_shift+=a,a-=r.glyph.bbox.getH()):(e.text_line+=h,r.y_shift+=a,a+=r.glyph.bbox.getH())}else r.getPosition()===tt.Position.ABOVE?(r.setTextLine(e.top_text_line),e.top_text_line+=h):(r.setTextLine(e.text_line),e.text_line+=h)}return e.left_shift=s+i/2,e.right_shift=n+i/2,!0}static get ornamentNoteTransition(){return["flip","jazzTurn","smear"]}static get ornamentAttack(){return["scoop"]}static get ornamentAlignWithNoteHead(){return["doit","fall","fallLong","doitLong","bend","plungerClosed","plungerOpen","scoop"]}static get ornamentRelease(){return["doit","fall","fallLong","doitLong","jazzTurn","smear","flip"]}static get ornamentArticulation(){return["bend","plungerClosed","plungerOpen"]}getMetrics(){const t=V.currentMusicFont().getMetrics().ornament;if(!t)throw new x("BadMetrics","ornament missing");return t[this.ornament.code]}constructor(t){super(),this.type=t,this.delayed=!1,this.render_options={font_scale:V.NOTATION_FONT_SCALE,accidentalLowerPadding:3,accidentalUpperPadding:3},this.ornament=V.ornamentCodes(this.type);const e=this.getMetrics();if(this.adjustForStemDirection=!1,this.reportedWidth=e&&e.reportedWidth?e.reportedWidth:0,this.stemUpYOffset=e&&e.stemUpYOffset?e.stemUpYOffset:0,this.ornamentAlignWithNoteHead=Kt.ornamentAlignWithNoteHead.indexOf(this.type)>=0,!this.ornament)throw new x("ArgumentError",`Ornament not found: '${this.type}'`);this.x_shift=e?e.xOffset:0,this.y_shift=e?e.yOffset:0,this.glyph=new Z(this.ornament.code,this.render_options.font_scale,{category:`ornament.${this.ornament.code}`}),Kt.ornamentNoteTransition.indexOf(this.type)>=0&&(this.delayed=!0),e||this.glyph.setOrigin(.5,1)}setDelayed(t){return this.delayed=t,this}setUpperAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalUpper=new Z(V.accidentalCodes(t).code,e),this.accidentalUpper.setOrigin(.5,1),this}setLowerAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalLower=new Z(V.accidentalCodes(t).code,e),this.accidentalLower.setOrigin(.5,1),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getStemDirection(),n=e.checkStave();this.applyStyle(),t.openGroup("ornament",this.getAttribute("id"));const s=e.checkStem().getExtents();let a=i===st.DOWN?s.baseY:s.topY;g(e)&&(e.hasStem()?i===st.DOWN&&(a=n.getYForTopText(this.text_line)):a=n.getYForTopText(this.text_line));const o=i===st.DOWN,r=n.getSpacingBetweenLines();let h=1;!o&&e.hasBeam()&&(h+=.5);const b=a-r*(this.text_line+h),c=e.getModifierStartXY(this.position,this.index);let l=c.x,d=this.ornamentAlignWithNoteHead?c.y:Math.min(n.getYForTopText(this.text_line),b);if(d+=this.y_shift,this.delayed){let t=0;const i=l-n.getNoteStartX();if(void 0!==this.delayXShift)t=this.delayXShift;else{t+=this.glyph.getMetrics().width/2;const s=e.getVoice().getTickables(),a=s.indexOf(e),o=a+1=0&&(d=e.checkStave().getBoundingBox().getY()+40),this.glyph.render(t,l+this.x_shift,d),this.accidentalUpper&&(d-=this.glyph.getMetrics().height+this.render_options.accidentalUpperPadding,this.accidentalUpper.render(t,l,d)),t.closeGroup(),this.restoreStyle()}}Kt.DEBUG=!1;class $t extends tt{static get CATEGORY(){return _.Parenthesis}static buildAndAttach(t){for(const e of t)for(let t=0;th+s.width?n:h+s.width),o===J.LEFT&&(h=a.getLeftParenthesisPx(r),i=i>h+s.width?i:h+s.width),s.setXShift(h)}return e.left_shift+=i,e.right_shift+=n,!0}constructor(t){var e;super(),this.position=null!=t?t:tt.Position.LEFT,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width"))}setNote(t){var e,i;return this.note=t,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width")),h(t)&&(this.point=null!==(i=V.currentMusicFont().lookupMetric("parenthesis.gracenote.point"))&&void 0!==i?i:vt.getPoint("gracenote"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.gracenote.width"))),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0}),n=i.x+this.x_shift,s=i.y+this.y_shift;this.position==tt.Position.RIGHT?Z.renderGlyph(t,n+1,s,this.point,"noteheadParenthesisRight",{category:"noteHead.standard.noteheadParenthesisRight"}):this.position==tt.Position.LEFT&&Z.renderGlyph(t,n-2,s,this.point,"noteheadParenthesisLeft",{category:"noteHead.standard.noteheadParenthesisLeft"})}}function Jt(t){if(!t)return!1;const e=u();return"function"==typeof e.HTMLCanvasElement&&t instanceof e.HTMLCanvasElement||"function"==typeof t.getContext&&"function"==typeof t.toDataURL}function qt(t){if(!t)return!1;const e=u();return"function"==typeof e.HTMLDivElement&&t instanceof e.HTMLDivElement||"function"==typeof t.appendChild&&"object"==typeof t.style}class Qt extends yt{static get WIDTH(){return 600}static get HEIGHT(){return 400}static get CANVAS_BROWSER_SIZE_LIMIT(){return 32767}static sanitizeCanvasDims(t,e){const i=this.CANVAS_BROWSER_SIZE_LIMIT;return Math.max(t,e)>i&&(y("Canvas dimensions exceed browser limit. Cropping to "+i),t>i&&(t=i),e>i&&(e=i)),[t,e]}constructor(t){super(),this.textHeight=0,this.context2D=t,t.canvas?this.canvas=t.canvas:this.canvas={width:Qt.WIDTH,height:Qt.HEIGHT}}clear(){this.context2D.clearRect(0,0,this.canvas.width,this.canvas.height)}openGroup(t,e,i){}closeGroup(){}add(t){}setFillStyle(t){return this.context2D.fillStyle=t,this}setBackgroundFillStyle(t){return this}setStrokeStyle(t){return this.context2D.strokeStyle=t,this}setShadowColor(t){return this.context2D.shadowColor=t,this}setShadowBlur(t){const e=this.context2D.getTransform(),i=Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c+e.d*e.d);return this.context2D.shadowBlur=i*t,this}setLineWidth(t){return this.context2D.lineWidth=t,this}setLineCap(t){return this.context2D.lineCap=t,this}setLineDash(t){return this.context2D.setLineDash(t),this}scale(t,e){return this.context2D.scale(t,e),this}resize(t,e,i){var n;const s=this.context2D.canvas,a=null!==(n=null!=i?i:u().devicePixelRatio)&&void 0!==n?n:1;return[t,e]=Qt.sanitizeCanvasDims(t*a,e*a),t=t/a|0,e=e/a|0,s.width=t*a,s.height=e*a,Jt(s)&&(s.style.width=t+"px",s.style.height=e+"px"),this.scale(a,a)}rect(t,e,i,n){return this.context2D.rect(t,e,i,n),this}fillRect(t,e,i,n){return this.context2D.fillRect(t,e,i,n),this}clearRect(t,e,i,n){return this.context2D.clearRect(t,e,i,n),this}beginPath(){return this.context2D.beginPath(),this}moveTo(t,e){return this.context2D.moveTo(t,e),this}lineTo(t,e){return this.context2D.lineTo(t,e),this}bezierCurveTo(t,e,i,n,s,a){return this.context2D.bezierCurveTo(t,e,i,n,s,a),this}quadraticCurveTo(t,e,i,n){return this.context2D.quadraticCurveTo(t,e,i,n),this}arc(t,e,i,n,s,a){return this.context2D.arc(t,e,i,n,s,a),this}fill(){return this.context2D.fill(),this}stroke(){return this.context2D.stroke(),this}closePath(){return this.context2D.closePath(),this}measureText(t){const e=this.context2D.measureText(t);let i=0,n=0;return e.fontBoundingBoxAscent?(i=-e.fontBoundingBoxAscent,n=e.fontBoundingBoxDescent+e.fontBoundingBoxAscent):(i=-e.actualBoundingBoxAscent,n=e.actualBoundingBoxDescent+e.actualBoundingBoxAscent),{x:0,y:i,width:e.width,height:n}}fillText(t,e,i){return this.context2D.fillText(t,e,i),this}save(){return this.context2D.save(),this}restore(){return this.context2D.restore(),this}set fillStyle(t){this.context2D.fillStyle=t}get fillStyle(){return this.context2D.fillStyle}set strokeStyle(t){this.context2D.strokeStyle=t}get strokeStyle(){return this.context2D.strokeStyle}setFont(t,e,i,n){const s=F.validate(t,e,i,n);return this.context2D.font=F.toCSSString(s),this.textHeight=F.convertSizeToPixelValue(s.size),this}getFont(){return this.context2D.font}}const Zt={path:{x:!0,y:!0,width:!0,height:!0,"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},rect:{"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},text:{width:!0,height:!0}},te="http://www.w3.org/2000/svg",ee=2*Math.PI;class ie extends yt{constructor(t){super(),this.width=0,this.height=0,this.precision=1,this.backgroundFillStyle="white",this.fontCSSString="",this.element=t,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES);const e=this.create("svg");this.element.appendChild(e),this.svg=e,this.parent=this.svg,this.groups=[this.svg],this.path="",this.pen={x:NaN,y:NaN},this.lineWidth=1;const i={"font-family":F.SANS_SERIF,"font-size":F.SIZE+"pt","font-weight":N.NORMAL,"font-style":k.NORMAL};this.state=Object.assign({scaleX:1,scaleY:1},i),this.attributes=Object.assign({"stroke-width":.3,"stroke-dasharray":"none",fill:"black",stroke:"black"},i),this.groupAttributes=[],this.applyAttributes(e,this.attributes),this.groupAttributes.push(Object.assign({},this.attributes)),this.shadow_attributes={width:0,color:"black"},this.state_stack=[]}round(t){return Math.round(t*this.precision)/this.precision}create(t){return document.createElementNS(te,t)}openGroup(t,e,i){const n=this.create("g");return this.groups.push(n),this.parent.appendChild(n),this.parent=n,t&&n.setAttribute("class",T(t)),e&&n.setAttribute("id",T(e)),i&&i.pointerBBox&&n.setAttribute("pointer-events","bounding-box"),this.applyAttributes(n,this.attributes),this.groupAttributes.push(Object.assign(Object.assign({},this.groupAttributes[this.groupAttributes.length-1]),this.attributes)),n}closeGroup(){this.groups.pop(),this.groupAttributes.pop(),this.parent=this.groups[this.groups.length-1]}add(t){this.parent.appendChild(t)}setFillStyle(t){return this.attributes.fill=t,this}setBackgroundFillStyle(t){return this.backgroundFillStyle=t,this}setStrokeStyle(t){return this.attributes.stroke=t,this}setShadowColor(t){return this.shadow_attributes.color=t,this}setShadowBlur(t){return this.shadow_attributes.width=t,this}setLineWidth(t){return this.attributes["stroke-width"]=t,this.lineWidth=t,this}setLineDash(t){if("[object Array]"===Object.prototype.toString.call(t))return this.attributes["stroke-dasharray"]=t.join(","),this;throw new x("ArgumentError","lineDash must be an array of integers.")}setLineCap(t){return this.attributes["stroke-linecap"]=t,this}resize(t,e){this.width=t,this.height=e,this.element.style.width=t.toString(),this.svg.style.width=t.toString(),this.svg.style.height=e.toString();const i={width:t,height:e};return this.applyAttributes(this.svg,i),this.scale(this.state.scaleX,this.state.scaleY),this}scale(t,e){this.state.scaleX=this.state.scaleX?this.state.scaleX*t:t,this.state.scaleY=this.state.scaleY?this.state.scaleY*e:e;const i=this.width/this.state.scaleX,n=this.height/this.state.scaleY;return this.setViewBox(0,0,i,n),this}setViewBox(t,e,i,n){if("string"==typeof t)this.svg.setAttribute("viewBox",t);else{const s=t+" "+e+" "+i+" "+n;this.svg.setAttribute("viewBox",s)}}applyAttributes(t,e){const i=Zt[t.nodeName];for(const n in e)i&&i[n]||!e[n]||0!=this.groupAttributes.length&&e[n]==this.groupAttributes[this.groupAttributes.length-1][n]||t.setAttributeNS(null,n,e[n]);return t}clear(){for(;this.svg.lastChild;)this.svg.removeChild(this.svg.lastChild);this.scale(this.state.scaleX,this.state.scaleY)}rect(t,e,i,n,s){n<0&&(e+=n,n*=-1);const a=this.create("rect");return s=null!=s?s:{fill:"none","stroke-width":this.lineWidth,stroke:"black"},t=this.round(t),e=this.round(e),i=this.round(i),n=this.round(n),this.applyAttributes(a,Object.assign({x:t,y:e,width:i,height:n},s)),this.add(a),this}fillRect(t,e,i,n){const s={fill:this.attributes.fill,stroke:"none"};return this.rect(t,e,i,n,s),this}clearRect(t,e,i,n){return this.rect(t,e,i,n,{fill:this.backgroundFillStyle,stroke:"none"}),this}beginPath(){return this.path="",this.pen.x=NaN,this.pen.y=NaN,this}moveTo(t,e){return t=this.round(t),e=this.round(e),this.path+="M"+t+" "+e,this.pen.x=t,this.pen.y=e,this}lineTo(t,e){return t=this.round(t),e=this.round(e),this.path+="L"+t+" "+e,this.pen.x=t,this.pen.y=e,this}bezierCurveTo(t,e,i,n,s,a){return s=this.round(s),a=this.round(a),t=this.round(t),e=this.round(e),i=this.round(i),n=this.round(n),this.path+="C"+t+" "+e+","+i+" "+n+","+s+" "+a,this.pen.x=s,this.pen.y=a,this}quadraticCurveTo(t,e,i,n){return i=this.round(i),n=this.round(n),t=this.round(t),e=this.round(e),this.path+="Q"+t+" "+e+","+i+" "+n,this.pen.x=i,this.pen.y=n,this}arc(t,e,i,n,s,a){let o=t+i*Math.cos(n),r=e+i*Math.sin(n);o=this.round(o),r=this.round(r);const h=v(n),b=v(s);if(!a&&s-n>=ee||a&&n-s>=ee||h===b){let s=t+i*Math.cos(n+Math.PI),a=e+i*Math.sin(n+Math.PI);s=this.round(s),a=this.round(a),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 0 0 ${s} ${a} `,this.path+=`A${i} ${i} 0 0 0 ${o} ${r}`,this.pen.x=o,this.pen.y=r}else{let c,l=t+i*Math.cos(s),d=e+i*Math.sin(s);n=h,s=b,c=Math.abs(s-n)s&&(c=!c);const m=!a;l=this.round(l),d=this.round(d),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 ${+c} ${+m} ${l} ${d}`,this.pen.x=l,this.pen.y=d}return this}closePath(){return this.path+="Z",this}getShadowStyle(){const t=this.shadow_attributes;return`filter: drop-shadow(0 0 ${t.width/1.5}px ${t.color})`}fill(t){const e=this.create("path");return void 0===t&&(t=Object.assign(Object.assign({},this.attributes),{stroke:"none"})),t.d=this.path,this.shadow_attributes.width>0&&(t.style=this.getShadowStyle()),this.applyAttributes(e,t),this.add(e),this}stroke(){const t=this.create("path"),e=Object.assign(Object.assign({},this.attributes),{fill:"none","stroke-width":this.lineWidth,d:this.path});return this.shadow_attributes.width>0&&(e.style=this.getShadowStyle()),this.applyAttributes(t,e),this.add(t),this}measureText(t){return ie.measureTextCache.lookup(t,this.svg,this.attributes)}fillText(t,e,i){if(!t||t.length<=0)return this;e=this.round(e),i=this.round(i);const n=Object.assign(Object.assign({},this.attributes),{stroke:"none",x:e,y:i}),s=this.create("text");return s.textContent=t,this.applyAttributes(s,n),this.add(s),this}save(){return this.state_stack.push({state:{"font-family":this.state["font-family"],"font-weight":this.state["font-weight"],"font-style":this.state["font-style"],"font-size":this.state["font-size"],scale:this.state.scale},attributes:{"font-family":this.attributes["font-family"],"font-weight":this.attributes["font-weight"],"font-style":this.attributes["font-style"],"font-size":this.attributes["font-size"],fill:this.attributes.fill,stroke:this.attributes.stroke,"stroke-width":this.attributes["stroke-width"],"stroke-dasharray":this.attributes["stroke-dasharray"]},shadow_attributes:{width:this.shadow_attributes.width,color:this.shadow_attributes.color},lineWidth:this.lineWidth}),this}restore(){const t=this.state_stack.pop();if(t){const e=t;this.state["font-family"]=e.state["font-family"],this.state["font-weight"]=e.state["font-weight"],this.state["font-style"]=e.state["font-style"],this.state["font-size"]=e.state["font-size"],this.state.scale=e.state.scale,this.attributes["font-family"]=e.attributes["font-family"],this.attributes["font-weight"]=e.attributes["font-weight"],this.attributes["font-style"]=e.attributes["font-style"],this.attributes["font-size"]=e.attributes["font-size"],this.attributes.fill=e.attributes.fill,this.attributes.stroke=e.attributes.stroke,this.attributes["stroke-width"]=e.attributes["stroke-width"],this.attributes["stroke-dasharray"]=e.attributes["stroke-dasharray"],this.shadow_attributes.width=e.shadow_attributes.width,this.shadow_attributes.color=e.shadow_attributes.color,this.lineWidth=e.lineWidth}return this}set fillStyle(t){this.setFillStyle(t)}get fillStyle(){return this.attributes.fill}set strokeStyle(t){this.setStrokeStyle(t)}get strokeStyle(){return this.attributes.stroke}setFont(t,e,i,n){const s=F.validate(t,e,i,n);this.fontCSSString=F.toCSSString(s);const a={"font-family":s.family,"font-size":s.size,"font-weight":s.weight,"font-style":s.style};return this.attributes=Object.assign(Object.assign({},this.attributes),a),this.state=Object.assign(Object.assign({},this.state),a),this}getFont(){return this.fontCSSString}}var ne,se,ae,oe;ie.measureTextCache=new class{constructor(){this.cache={}}lookup(t,e,i){let n=this.cache[t];void 0===n&&(n={},this.cache[t]=n);const s=`${i["font-family"]}%${i["font-size"]}%${i["font-weight"]}%${i["font-style"]}`;let a=n[s];return void 0===a&&(a=this.measureImpl(t,e,i),n[s]=a),a}measureImpl(t,e,i){let n=this.txt;n||(n=document.createElementNS(te,"text"),this.txt=n),n.textContent=t,i["font-family"]&&n.setAttributeNS(null,"font-family",i["font-family"]),i["font-size"]&&n.setAttributeNS(null,"font-size",`${i["font-size"]}`),i["font-style"]&&n.setAttributeNS(null,"font-style",i["font-style"]),i["font-weight"]&&n.setAttributeNS(null,"font-weight",`${i["font-weight"]}`),e.appendChild(n);const s=n.getBBox();return e.removeChild(n),{x:s.x,y:s.y,width:s.width,height:s.height}}},function(t){t[t.CANVAS=1]="CANVAS",t[t.SVG=2]="SVG"}(ne||(ne={})),function(t){t[t.NONE=1]="NONE",t[t.UP=2]="UP",t[t.DOWN=3]="DOWN"}(se||(se={}));class re{static buildContext(t,e,i,n,s="#FFF"){const a=new re(t,e);i&&n&&a.resize(i,n);const o=a.getContext();return o.setBackgroundFillStyle(s),re.lastContext=o,o}static getCanvasContext(t,e,i,n){return re.buildContext(t,re.Backends.CANVAS,e,i,n)}static getSVGContext(t,e,i,n){return re.buildContext(t,re.Backends.SVG,e,i,n)}static drawDashedLine(t,e,i,n,s,a){t.beginPath();const o=n-e,r=s-i,h=Math.atan2(r,o);let b=e,c=i;t.moveTo(e,i);let l=0,d=!0;for(;!(o<0?b<=n:b>=n)||!(r<0?c<=s:c>=s);){const e=a[l++%a.length],i=b+Math.cos(h)*e;b=o<0?Math.max(n,i):Math.min(n,i);const m=c+Math.sin(h)*e;c=r<0?Math.max(s,m):Math.min(s,m),d?t.lineTo(b,c):t.moveTo(b,c),d=!d}t.closePath(),t.stroke()}constructor(t,e){if(l(t))this.ctx=t;else{if(void 0===e)throw new x("InvalidArgument","Missing backend argument");const i=e;let n;if("string"==typeof t){const e=document.getElementById(t);if(!e)throw new x("BadElementId",`Can't find element with ID "${e}"`);n=e}else n=t;if(i===re.Backends.CANVAS){if(!Jt(n))throw new x("BadElement","CANVAS context requires an HTMLCanvasElement.");const t=n.getContext("2d",{willReadFrequently:!0});if(!t)throw new x("BadElement","Can't get canvas context");this.ctx=new Qt(t)}else{if(i!==re.Backends.SVG)throw new x("InvalidBackend",`No support for backend: ${i}`);if(!qt(n))throw new x("BadElement","SVG context requires an HTMLDivElement.");this.ctx=new ie(n)}}}resize(t,e){return this.ctx.resize(t,e),this}getContext(){return this.ctx}}re.Backends=ne,re.LineEndType=se,re.lastContext=void 0;class he extends tt{static get CATEGORY(){return _.StringNumber}static get metrics(){var t;return null!==(t=V.currentMusicFont().getMetrics().stringNumber)&&void 0!==t?t:{verticalPadding:0,stemPadding:0,leftPadding:0,rightPadding:0}}static format(t,e){const i=e.left_shift,n=e.right_shift;if(!t||0===t.length)return!1;const s=[];let a=null,o=0,r=0;for(let i=0;ie.line-t.line));let h=0,b=0,c=0,l=null,m=null;for(let t=0;tc?x:c),l=d,m=e}return e.left_shift+=b,e.right_shift+=c,!0}constructor(t){super(),this.string_number=t,this.position=tt.Position.ABOVE,this.x_shift=0,this.y_shift=0,this.text_line=0,this.stem_offset=0,this.x_offset=0,this.y_offset=0,this.dashed=!0,this.leg=re.LineEndType.NONE,this.radius=8,this.drawCircle=!0,this.setWidth(2*this.radius+4),this.resetFont()}setLineEndType(t){return t>=re.LineEndType.NONE&&t<=re.LineEndType.DOWN&&(this.leg=t),this}setStringNumber(t){return this.string_number=t,this}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}setLastNote(t){return this.last_note=t,this}setDashed(t){return this.dashed=t,this}setDrawCircle(t){return this.drawCircle=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index),n=e.hasStem()?e.getStemDirection():st.UP;let s=i.x+this.x_shift+this.x_offset,a={};e.hasStem()&&(a=e.checkStem().getExtents());let o=i.y+this.y_shift+this.y_offset;switch(this.position){case tt.Position.ABOVE:o=e.getYs().reduce(((t,e)=>tt>e?t:e)),e.hasStem()&&n==st.DOWN&&(o=a.topY-he.metrics.stemPadding),o+=this.radius+he.metrics.verticalPadding+this.text_line*V.STAVE_LINE_DISTANCE;break;case tt.Position.LEFT:s-=this.radius/2+he.metrics.leftPadding;break;case tt.Position.RIGHT:s+=this.radius/2+he.metrics.rightPadding;break;default:throw new x("InvalidPosition",`The position ${this.position} is invalid`)}t.save(),this.drawCircle&&(t.beginPath(),t.arc(s,o,this.radius,0,2*Math.PI,!1),t.setLineWidth(1.5),t.stroke()),t.setFont(this.textFont);const r=s-t.measureText(this.string_number).width/2;t.fillText(""+this.string_number,r,o+4.5);const h=this.last_note;if(m(h)){const i=h.getStemX()-e.getX()+5;let n,a;switch(t.setStrokeStyle("#000000"),t.setLineCap("round"),t.setLineWidth(.6),this.dashed?re.drawDashedLine(t,s+10,o,s+i,o,[3,3]):re.drawDashedLine(t,s+10,o,s+i,o,[3,0]),this.leg){case re.LineEndType.UP:n=-10,a=this.dashed?[3,3]:[3,0],re.drawDashedLine(t,s+i,o,s+i,o+n,a);break;case re.LineEndType.DOWN:n=10,a=this.dashed?[3,3]:[3,0],re.drawDashedLine(t,s+i,o,s+i,o+n,a)}}t.restore()}}he.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:N.BOLD,style:k.NORMAL};class be extends tt{static get CATEGORY(){return _.Stroke}static format(t,e){const i=e.left_shift;if(!t||0===t.length)return!1;const n=t.map((t=>{const e=t.getNote(),i=t.checkIndex();if(d(e)){const{line:n}=e.getKeyProps()[i];return{line:n,shift:e.getLeftDisplacedHeadPx(),stroke:t}}if(g(e)){const{str:n}=e.getPositions()[i];return{line:n,shift:0,stroke:t}}throw new x("Internal","Unexpected instance.")})),s=i,a=n.reduce(((t,{stroke:e,shift:i})=>(e.setXShift(s+i),Math.max(e.getWidth()+0,t))),0);return e.left_shift+=a,!0}constructor(t,e){super(),this.options=Object.assign({all_voices:!0},e),this.all_voices=this.options.all_voices,this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.resetFont(),this.setXShift(0),this.setWidth(10)}getPosition(){return this.position}addEndNote(t){return this.note_end=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let n=e.getYs(),s=i.y,a=i.y;const o=i.x-5,r=e.checkStave().getSpacingBetweenLines(),h=this.checkModifierContext().getMembers(e.getCategory());for(let t=0;t0){n-=o.map((t=>t.getTextHeight())).reduce(((t,e)=>t>e?t:e))/V.STAVE_LINE_DISTANCE+1}else e.top_text_line+=1;for(let e=0;e=t.line?i.above:i.below}}this.placeGlyphOnLine(n,this.checkStave(),t.line),this.glyphs.push(n);const a=this.xPositions[this.xPositions.length-1],o=n.getMetrics().width+s;this.xPositions.push(a+o),this.width+=o}cancelKey(t){return this.formatted=!1,this.cancelKeySpec=t,this}convertToCancelAccList(t){const e=V.keySignature(t),i=this.accList.length>0&&e.length>0&&e[0].type!==this.accList[0].type,n=i?e.length:e.length-this.accList.length;if(n<1)return;const s=[];for(let t=0;t0?e[0].type:void 0;let n;if(this.cancelKeySpec&&(n=this.convertToCancelAccList(this.cancelKeySpec)),this.alterKeySpec&&this.convertToAlterAccList(this.alterKeySpec),this.accList.length>0){const s=(this.position===wt.END?t.getEndClef():t.getClef())||t.getClef();n&&this.convertAccLines(s,n.type,n.accList),this.convertAccLines(s,i,e);for(let t=0;t0?"PlusSmall":"Plus";break;case"(":n=i.length>0?"ParensLeftSmall":"ParensLeft";break;case")":n=i.length>0?"ParensRightSmall":"ParensRight"}const s=new Z("timeSig"+n,this.timeSignature.point);this.topGlyphs.push(s),r+=null!==(o=s.getMetrics().width)&&void 0!==o?o:0,h=Math.max(h,s.getMetrics().height)}let b=0;for(let t=0;t22?1:0,this.width=Math.max(r,b),this.xMin=this.getMetrics().x_min,this.topStartX=(this.width-r)/2,this.botStartX=(this.width-b)/2,this.reset()}getMetrics(){return{x_min:this.xMin,x_max:this.xMin+this.width,width:this.width}}renderToStave(t){const e=this.checkStave(),i=this.checkContext();let n=t+this.topStartX,s=0;s=this.botGlyphs.length>0?e.getYForLine(this.timeSignature.topLine-this.lineShift):(e.getYForLine(this.timeSignature.topLine)+e.getYForLine(this.timeSignature.bottomLine))/2;for(let t=0;t{const e=t.split("/");if(2!==e.length&&"+"!==e[0]&&"-"!==e[0])throw new x("BadTimeSignature",`Invalid time spec: ${t}. Must be in the form "/"`);e.forEach((e=>{if(0==/^[0-9+\-()]+$/.test(e))throw new x("BadTimeSignature",`Invalid time spec: ${t}. Must contain valid signatures.`)}))})(t);const n=t.split("/");return{line:0,num:!0,glyph:this.makeTimeSignatureGlyph(null!==(e=n[0])&&void 0!==e?e:"",null!==(i=n[1])&&void 0!==i?i:"")}}makeTimeSignatureGlyph(t,e){return new Se(this,t,e,"timeSig0",this.point)}getInfo(){const{line:t,is_numeric:e,glyph:i}=this;return{line:t,num:e,glyph:i}}setTimeSig(t){this.timeSpec=t;const e=this.parseTimeSpec(t);return this.setGlyph(e.glyph),this.is_numeric=e.num,this.line=e.line,this}getTimeSpec(){return this.timeSpec}getLine(){return this.line}setLine(t){this.line=t}getGlyph(){return this.glyph}setGlyph(t){this.glyph=t,this.setWidth(p(this.glyph.getMetrics().width))}getIsNumeric(){return this.is_numeric}setIsNumeric(t){this.is_numeric=t}draw(){const t=this.checkStave(),e=t.checkContext();this.setRendered(),this.applyStyle(e),e.openGroup("timesignature",this.getAttribute("id")),this.glyph.setStave(t),this.glyph.setContext(e),this.placeGlyphOnLine(this.glyph,t,this.line),this.glyph.renderToStave(this.x),e.closeGroup(),this.restoreStyle(e)}}const ve={[At.CATEGORY]:0,[me.CATEGORY]:1,[ge.CATEGORY]:2,[Te.CATEGORY]:3},we={[Te.CATEGORY]:0,[ge.CATEGORY]:1,[At.CATEGORY]:2,[me.CATEGORY]:3};class Be extends W{static get CATEGORY(){return _.Stave}static get defaultPadding(){const t=V.currentMusicFont();return t.lookupMetric("stave.padding")+t.lookupMetric("stave.endPaddingMax")}static get rightPadding(){return V.currentMusicFont().lookupMetric("stave.endPaddingMax")}constructor(t,e,i,n){super(),this.height=0,this.x=t,this.y=e,this.width=i,this.formatted=!1,this.start_x=t+5,this.end_x=t+i,this.modifiers=[],this.measure=0,this.clef="treble",this.endClef=void 0,this.resetFont(),this.options=Object.assign({vertical_bar_width:10,num_lines:5,fill_style:"#999999",left_bar:!0,right_bar:!0,spacing_between_lines_px:V.STAVE_LINE_DISTANCE,space_above_staff_ln:4,space_below_staff_ln:4,top_text_position:1,bottom_text_position:4,line_config:[]},n),this.bounds={x:this.x,y:this.y,w:this.width,h:0},this.defaultLedgerLineStyle={strokeStyle:"#444",lineWidth:1.4},this.resetLines(),this.addModifier(new At(this.options.left_bar?Bt.SINGLE:Bt.NONE)),this.addEndModifier(new At(this.options.right_bar?Bt.SINGLE:Bt.NONE))}setDefaultLedgerLineStyle(t){this.defaultLedgerLineStyle=t}getDefaultLedgerLineStyle(){return Object.assign(Object.assign({},this.getStyle()),this.defaultLedgerLineStyle)}space(t){return this.options.spacing_between_lines_px*t}resetLines(){this.options.line_config=[];for(let t=0;ti.getWidth()&&(e-=i.getWidth()),e}setRepetitionType(t,e=0){return this.modifiers.push(new _e(t,this.x,e)),this}setVoltaType(t,e,i){return this.modifiers.push(new ye(t,e,this.x,i)),this}setSection(t,e,i=0,n,s=!0){const a=new xe(t,this.x+i,e,s);return n&&a.setFontSize(n),this.modifiers.push(a),this}setTempo(t,e){return this.modifiers.push(new ue(t,this.x,e)),this}setText(t,e,i={}){return this.modifiers.push(new fe(t,e,i)),this}getHeight(){return this.height}getSpacingBetweenLines(){return this.options.spacing_between_lines_px}getBoundingBox(){return new C(this.x,this.y,this.width,this.getBottomY()-this.y)}getBottomY(){const t=this.options,e=t.spacing_between_lines_px;return this.getYForLine(t.num_lines)+t.space_below_staff_ln*e}getBottomLineY(){return this.getYForLine(this.options.num_lines)}getYForLine(t){const e=this.options,i=e.spacing_between_lines_px,n=e.space_above_staff_ln;return this.y+t*i+n*i}getLineForY(t){const e=this.options,i=e.spacing_between_lines_px,n=e.space_above_staff_ln;return(t-this.y)/i-n}getYForTopText(t=0){return this.getYForLine(-t-this.options.top_text_position)}getYForBottomText(t=0){return this.getYForLine(this.options.bottom_text_position+t)}getYForNote(t){const e=this.options,i=e.spacing_between_lines_px,n=e.space_above_staff_ln;return this.y+n*i+5*i-t*i}getYForGlyphs(){return this.getYForLine(3)}addModifier(t,e){return void 0!==e&&t.setPosition(e),t.setStave(this),this.formatted=!1,this.modifiers.push(t),this}addEndModifier(t){return this.addModifier(t,wt.END),this}setBegBarType(t){const{SINGLE:e,REPEAT_BEGIN:i,NONE:n}=Bt;return t!==e&&t!==i&&t!==n||(this.modifiers[0].setType(t),this.formatted=!1),this}setEndBarType(t){return t!==Bt.REPEAT_BEGIN&&(this.modifiers[1].setType(t),this.formatted=!1),this}setClefLines(t){return this.clef=t,this}setClef(t,e,i,n){void 0===n&&(n=wt.BEGIN),n===wt.END?this.endClef=t:this.clef=t;const s=this.getModifiers(n,me.CATEGORY);return 0===s.length?this.addClef(t,e,i,n):s[0].setType(t,e,i),this}getClef(){return this.clef}setEndClef(t,e,i){return this.setClef(t,e,i,wt.END),this}getEndClef(){return this.endClef}setKeySignature(t,e,i){void 0===i&&(i=wt.BEGIN);const n=this.getModifiers(i,ge.CATEGORY);return 0===n.length?this.addKeySignature(t,e,i):n[0].setKeySig(t,e),this}setEndKeySignature(t,e){return this.setKeySignature(t,e,wt.END),this}setTimeSignature(t,e,i){void 0===i&&(i=wt.BEGIN);const n=this.getModifiers(i,Te.CATEGORY);return 0===n.length?this.addTimeSignature(t,e,i):n[0].setTimeSig(t),this}setEndTimeSignature(t,e){return this.setTimeSignature(t,e,wt.END),this}addKeySignature(t,e,i){return void 0===i&&(i=wt.BEGIN),this.addModifier(new ge(t,e).setPosition(i),i),this}addClef(t,e,i,n){return void 0===n||n===wt.BEGIN?this.clef=t:n===wt.END&&(this.endClef=t),this.addModifier(new me(t,e,i),n),this}addEndClef(t,e,i){return this.addClef(t,e,i,wt.END),this}addTimeSignature(t,e,i){return this.addModifier(new Te(t,e),i),this}addEndTimeSignature(t,e){return this.addTimeSignature(t,e,wt.END),this}addTrebleGlyph(){return this.addClef("treble"),this}getModifiers(t,e){const i=void 0===t,n=void 0===e;return i&&n?this.modifiers:i?this.modifiers.filter((t=>e===t.getCategory())):n?this.modifiers.filter((e=>t===e.getPosition())):this.modifiers.filter((i=>t===i.getPosition()&&e===i.getCategory()))}sortByCategory(t,e){for(let i=t.length-1;i>=0;i--)for(let n=0;ne[t[n+1].getCategory()]){const e=t[n];t[n]=t[n+1],t[n+1]=e}}format(){const t=this.modifiers[0],e=this.modifiers[1],i=this.getModifiers(wt.BEGIN),n=this.getModifiers(wt.END);let s,a,r;this.sortByCategory(i,ve),this.sortByCategory(n,we),i.length>1&&t.getType()===Bt.REPEAT_BEGIN&&(i.push(i.splice(0,1)[0]),i.splice(0,0,new At(Bt.SINGLE))),n.indexOf(e)>0&&n.splice(0,0,new At(Bt.NONE));let h=0,b=this.x;for(let t=0;t0){t.save(),t.setFont(this.textFont);const e=t.measureText(""+this.measure).width;s=this.getYForTopText(0)+3,t.fillText(""+this.measure,this.x-e/2,s),t.restore()}return this}getVerticalBarWidth(){return this.options.vertical_bar_width}getConfigForLines(){return this.options.line_config}setConfigForLine(t,e){if(t>=this.options.num_lines||t<0)throw new x("StaveConfigError","The line number must be within the range of the number of lines in the Stave.");if(void 0===e.visible)throw new x("StaveConfigError","The line configuration object is missing the 'visible' property.");if("boolean"!=typeof e.visible)throw new x("StaveConfigError","The line configuration objects 'visible' property must be true or false.");return this.options.line_config[t]=e,this}setConfigForLines(t){if(t.length!==this.options.num_lines)throw new x("StaveConfigError","The length of the lines configuration array must match the number of lines in the Stave");for(const e in t)null==t[e].visible&&(t[e]=this.options.line_config[e]),this.options.line_config[e]=Object.assign(Object.assign({},this.options.line_config[e]),t[e]);return this.options.line_config=t,this}static formatBegModifiers(t){const e=e=>{let i=0;t.forEach((t=>{const n=t.getModifiers(wt.BEGIN,e);n.length>0&&n[0].getX()>i&&(i=n[0].getX())}));let n=0;t.forEach((t=>{n=0;t.getModifiers(wt.BEGIN,e).forEach((t=>{i-t.getX()>n&&(n=i-t.getX())}));const s=t.getModifiers(wt.BEGIN);let a=!1;s.forEach((t=>{t.getCategory()===e&&(a=!0),a&&n>0&&t.setX(t.getX()+n)})),t.setNoteStartX(t.getNoteStartX()+n)}))};t.forEach((t=>{t.formatted||t.format()})),e(_.Clef),e(_.KeySignature),e(_.TimeSignature);let i=0;t.forEach((t=>{t.getNoteStartX()>i&&(i=t.getNoteStartX())})),t.forEach((t=>{t.setNoteStartX(i)})),i=0,t.forEach((t=>{t.getModifiers(wt.BEGIN,_.Barline).forEach((t=>{t.getType()==Bt.REPEAT_BEGIN&&t.getX()>i&&(i=t.getX())}))})),t.forEach((t=>{t.getModifiers(wt.BEGIN,_.Barline).forEach((t=>{t.getType()==Bt.REPEAT_BEGIN&&t.setX(i)}))}))}}function Ee(t,e,i,n,s){if(e!==Ce.type.BOLD_DOUBLE_LEFT&&e!==Ce.type.BOLD_DOUBLE_RIGHT)throw new x("InvalidConnector","A REPEAT_BEGIN or REPEAT_END type must be provided.");let a=3,o=3.5;e===Ce.type.BOLD_DOUBLE_RIGHT&&(a=-5,o=3),t.fillRect(i+a,n,1,s-n),t.fillRect(i-2,n,o,s-n)}Be.TEXT_FONT={family:F.SANS_SERIF,size:8,weight:N.NORMAL,style:k.NORMAL};class Ce extends W{static get CATEGORY(){return _.StaveConnector}constructor(t,e){super(),this.thickness=V.STAVE_LINE_THICKNESS,this.width=3,this.top_stave=t,this.bottom_stave=e,this.type=Ce.type.DOUBLE,this.resetFont(),this.x_shift=0,this.texts=[]}setType(t){const e="string"==typeof t?Ce.typeString[t]:t;return Object.values(Ce.type).includes(e)&&(this.type=e),this}getType(){return this.type}setText(t,e={}){return this.texts.push({content:t,options:Object.assign({shift_x:0,shift_y:0},e)}),this}setXShift(t){if("number"!=typeof t)throw new x("InvalidType","x_shift must be a Number");return this.x_shift=t,this}getXShift(){return this.x_shift}draw(){const t=this.checkContext();this.setRendered();let e=this.top_stave.getYForLine(0),i=this.bottom_stave.getYForLine(this.bottom_stave.getNumLines()-1)+this.thickness,n=this.width,s=this.top_stave.getX();(this.type===Ce.type.SINGLE_RIGHT||this.type===Ce.type.BOLD_DOUBLE_RIGHT||this.type===Ce.type.THIN_DOUBLE)&&(s=this.top_stave.getX()+this.top_stave.getWidth());let a=i-e;switch(this.type){case Ce.type.SINGLE:case Ce.type.SINGLE_LEFT:case Ce.type.SINGLE_RIGHT:n=1;break;case Ce.type.DOUBLE:s-=this.width+2,e-=this.thickness,a+=.5;break;case Ce.type.BRACE:{n=12;const s=this.top_stave.getX()-2+this.x_shift,o=e,r=s,h=i,b=s-n,c=o+a/2,l=b-.9*n,d=o+.2*a,m=s+1.1*n,g=c-.135*a,_=m,x=c+.135*a,u=l,p=h-.2*a,f=b-n,y=p,S=s+.4*n,T=c+.135*a,v=S,w=c-.135*a,B=f,E=d;t.beginPath(),t.moveTo(s,o),t.bezierCurveTo(l,d,m,g,b,c),t.bezierCurveTo(_,x,u,p,r,h),t.bezierCurveTo(f,y,S,T,b,c),t.bezierCurveTo(v,w,B,E,s,o),t.fill(),t.stroke();break}case Ce.type.BRACKET:e-=6,i+=6,a=i-e,Z.renderGlyph(t,s-5,e,40,"bracketTop"),Z.renderGlyph(t,s-5,i,40,"bracketBottom"),s-=this.width+2;break;case Ce.type.BOLD_DOUBLE_LEFT:Ee(t,this.type,s+this.x_shift,e,i-this.thickness);break;case Ce.type.BOLD_DOUBLE_RIGHT:Ee(t,this.type,s,e,i-this.thickness);break;case Ce.type.THIN_DOUBLE:n=1,a-=this.thickness;break;case Ce.type.NONE:break;default:throw new x("InvalidType",`The provided StaveConnector.type (${this.type}) is invalid.`)}this.type!==Ce.type.BRACE&&this.type!==Ce.type.BOLD_DOUBLE_LEFT&&this.type!==Ce.type.BOLD_DOUBLE_RIGHT&&this.type!==Ce.type.NONE&&t.fillRect(s,e,n,a),this.type===Ce.type.THIN_DOUBLE&&t.fillRect(s-3,e,n,a),t.save(),t.setLineWidth(2),t.setFont(this.textFont);for(let e=0;et.isCenterAligned()))}getMetrics(){const{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:n,rightDisplacedHeadPx:s,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}=this;return{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:n,rightDisplacedHeadPx:s,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}}getCurrentTick(){return this.currentTick}setCurrentTick(t){this.currentTick=t,this.preFormatted=!1}addTickable(t,e){if(!t)throw new x("BadArgument","Invalid tickable added.");if(!t.shouldIgnoreTicks()){const e=t.getTicks();e.greaterThan(this.maxTicks)&&(this.maxTicks=e.clone(),this.maxTickable=t),(null==this.minTicks||e.lessThan(this.minTicks))&&(this.minTicks=e.clone(),this.minTickable=t)}return t.setTickContext(this),this.tickables.push(t),this.tickablesByVoice[e||0]=t,this.preFormatted=!1,this}preFormat(){if(this.preFormatted)return this;for(let t=0;t{e.addToModifierContext(new de);const n=(new Pe).addTickable(e).preFormat(),s=n.getMetrics();return n.setX(t+s.totalLeftPx),t+n.getWidth()+s.totalRightPx+i}),e)}static plotDebugging(t,e,i,n,s,a){const o=i+(a=Object.assign({stavePadding:V.currentMusicFont().lookupMetric("stave.padding")},a)).stavePadding,r=e.contextGaps;t.save(),t.setFont(F.SANS_SERIF,8),r.gaps.forEach((e=>{var i,a,r;i=o+e.x1,a=o+e.x2,r="rgba(100,200,100,0.4)",t.beginPath(),t.setStrokeStyle(r),t.setFillStyle(r),t.setLineWidth(1),t.fillRect(i,n,Math.max(a-i,0),s-n),t.setFillStyle("green"),t.fillText(Math.round(e.x2-e.x1).toString(),o+e.x1,s+12)})),t.setFillStyle("red"),t.fillText(`Loss: ${(e.totalCost||0).toFixed(2)} Shift: ${(e.totalShift||0).toFixed(2)} Gap: ${r.total.toFixed(2)}`,o-20,s+27),t.restore()}static FormatAndDraw(t,e,i,n){let s={auto_beam:!1,align_rests:!1};"object"==typeof n?s=Object.assign(Object.assign({},s),n):"boolean"==typeof n&&(s.auto_beam=n);const a=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(i),o=s.auto_beam?We.applyAndGetBeams(a):[];return(new ke).joinVoices([a]).formatToStave([a],e,{align_rests:s.align_rests,stave:e}),a.setStave(e).draw(t,e),o.forEach((e=>e.setContext(t).draw())),a.getBoundingBox()}static FormatAndDrawTab(t,e,i,n,s,a,o){let r={auto_beam:a,align_rests:!1};"object"==typeof o?r=Object.assign(Object.assign({},r),o):"boolean"==typeof o&&(r.auto_beam=o);const h=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(s),b=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(n),c=r.auto_beam?We.applyAndGetBeams(h):[];(new ke).joinVoices([h]).joinVoices([b]).formatToStave([h,b],i,{align_rests:r.align_rests}),h.draw(t,i),b.draw(t,e),c.forEach((e=>e.setContext(t).draw())),new Ce(i,e).setContext(t).draw()}static AlignRestsToNotes(t,e,i){t.forEach(((n,s)=>{if(d(n)&&n.isRest()){if(n.getTuplet()&&!i)return;const a=n.getGlyphProps().position.toUpperCase();if("R/4"!==a&&"B/4"!==a)return;if(e||n.getBeam()){const e=n.getKeyProps()[0];if(0===s)e.line=Ne(t,e.line,s,!1);else if(s>0&&ske.AlignRestsToNotes(t.getTickables(),e)))}preCalculateMinTotalWidth(t){const e=V.currentMusicFont().lookupMetric("stave.unalignedNotePadding");let i=0,n=0,s=0;const a=[],o=[];if(this.hasMinTotalWidth)return this.minTotalWidth;if(!t)throw new x("BadArgument","'voices' required to run preCalculateMinTotalWidth");this.createTickContexts(t);const{list:r,map:h}=this.tickContexts;this.minTotalWidth=0,r.forEach((e=>{const r=h[e];r.preFormat(),r.getTickables().length{n+=t.getMetrics().width,s+=t.getTicks().value(),a.push(t.getMetrics().width),o.push(t.getTicks().value())}));const b=r.getWidth();this.minTotalWidth+=b})),this.hasMinTotalWidth=!0;const b=n>0?n/a.length:1/a.length,c=w(a.map((t=>Math.pow(t-b,2)))),l=Math.pow(c/a.length,.5)/b,d=s/o.length,m=w(o.map((t=>Math.pow(t-d,2)))),g=Math.pow(m/o.length,.5)/d,_=Math.max(g,l)*r.length*e,u=e*i;return this.minTotalWidth+Math.max(u,_)}getMinTotalWidth(){if(!this.hasMinTotalWidth)throw new x("NoMinTotalWidth","Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'");return this.minTotalWidth}static getResolutionMultiplier(t){if(!t||!t.length)throw new x("BadArgument","No voices to format");const e=t[0].getTotalTicks();return t.reduce(((t,i)=>{if(!i.getTotalTicks().equals(e))throw new x("TickMismatch","Voices should have same total note duration in ticks.");if(i.getMode()===jt.Mode.STRICT&&!i.isComplete())throw new x("IncompleteVoice","Voice does not have enough notes.");return Math.max(t,B.LCM(t,i.getResolutionMultiplier()))}),1)}createModifierContexts(t){if(0==t.length)return;const e=ke.getResolutionMultiplier(t),i=new Map,n=[];t.forEach((t=>{const s=new B(0,e);t.getTickables().forEach((t=>{const e=s.numerator;let a=i.get(t.getStave());if(a||(i.set(t.getStave(),{}),a=i.get(t.getStave())),!(a?a[e]:void 0)){const t=new de;n.push(t),a[e]=t}t.addToModifierContext(a[e]),s.add(t.getTicks())}))})),this.modifierContexts.push({map:i,array:n,resolutionMultiplier:e})}createTickContexts(t){const e=function(t,e,i){if(0==t.length)return{map:{},array:[],list:[],resolutionMultiplier:0};const n={},s=[],a=[],o=ke.getResolutionMultiplier(t);return t.forEach(((t,r)=>{const h=new B(0,o);t.getTickables().forEach((t=>{const o=h.numerator;if(!n[o]){const t=e({tickID:o});a.push(t),n[o]=t,s.push(o)}i(t,n[o],r),h.add(t.getTicks())}))})),{map:n,array:a,list:s.sort(((t,e)=>t-e)),resolutionMultiplier:o}}(t,(t=>new Pe(t)),((t,e,i)=>e.addTickable(t,i)));this.tickContexts=e;const i=this.tickContexts.array;return i.forEach((t=>{t.tContexts=i})),e}getTickContexts(){return this.tickContexts}preFormat(t=0,e,i,n){const s=this.tickContexts;if(!s)throw new x("NoTickContexts","preFormat requires TickContexts");const{list:a,map:o}=s;this.lossHistory=[],i&&n&&i.forEach((t=>t.setStave(n).preFormat()));let r=0,h=0;this.minTotalWidth=0;let b=0;a.forEach((t=>{const e=o[t];e.preFormat();const i=e.getWidth();this.minTotalWidth+=i;const n=e.getMaxTicks().value();b+=n;const s=e.getMetrics();r=r+h+s.totalLeftPx,e.setX(r),h=i-s.totalLeftPx}));const{globalSoftmax:c,softmaxFactor:l,maxIterations:d}=this.formatterOptions,m=w(a.map((t=>Math.pow(l,o[t].getMaxTicks().value()/b))));if(this.minTotalWidth=r+h,this.hasMinTotalWidth=!0,t<=0)return this.evaluate();const g=o[a[0]],_=o[a[a.length-1]];function u(t){return a.map(((e,i)=>{const n=o[e],s=n.getTickablesByVoice();let r;if(i>0){const e=o[a[i-1]];for(let h=i-1;h>=0;h--){const i=o[a[h]].getTickablesByVoice(),d=[];if(Object.keys(s).forEach((t=>{i[t]&&d.push(t)})),d.length>0){let a=0,o=1/0,h=0;if(d.forEach((t=>{const e=i[t].getTicks().value();e>a&&(r=i[t],a=e);const n=s[t],h=n.getX()-(n.getMetrics().modLeftPx+n.getMetrics().leftDisplacedHeadPx),b=i[t].getMetrics(),c=i[t].getX()+b.notePx+b.modRightPx+b.rightDisplacedHeadPx;o=Math.min(o,h-c)})),o=Math.min(o,n.getX()-(e.getX()+.05*t)),c){const e=b;h=Math.pow(l,a/e)/m*t}else void 0!==r&&(h=r.getVoice().softmax(a)*t);return{expectedDistance:h,maxNegativeShiftPx:o,fromTickable:r}}}}return{expectedDistance:0,fromTickablePx:0,maxNegativeShiftPx:0}}))}function f(t){const e=y/2;let i=0;return a.forEach(((n,s)=>{const a=o[n];if(s>0){const e=a.getX(),n=t[s],o=p(n.fromTickable).getX()+n.expectedDistance-(e+i);let r=0;o>0?i+=o:o<0&&(r=Math.min(n.maxNegativeShiftPx,Math.abs(o)),i+=-r),a.setX(e+i)}a.getCenterAlignedTickables().forEach((t=>{t.setCenterXShift(e-a.getX())}))})),_.getX()-g.getX()}const y=t-_.getMetrics().notePx-_.getMetrics().totalRightPx-g.getMetrics().totalLeftPx,S=V.currentMusicFont(),T=S.lookupMetric("stave.endPaddingMin"),v=S.lookupMetric("stave.endPaddingMax"),B=S.lookupMetric("stave.padding");let E=y;const C=u(E);let P=f(C);if(1===a.length)return 0;const N=((t,e)=>{let i=t/2;if(e.length>1)for(let t=1;t{let e=0;const i=_&&_.getMaxTickable();if(i){const n=i.getVoice();if(n.getTicksUsed().value()>n.getTotalTicks().value())return 2*vM&&F>0||P+A1;)E-=P-M,A=k(E),D=A-(v-T),P=f(u(E)),F--;return this.justifyWidth=t,this.evaluate()}evaluate(){const t=this.tickContexts,e=this.justifyWidth;this.contextGaps={total:0,gaps:[]},t.list.forEach(((e,i)=>{if(0===i)return;const n=t.list[i-1],s=t.map[n],a=t.map[e],o=s.getMetrics(),r=a.getMetrics(),h=s.getX()+o.notePx+o.totalRightPx,b=a.getX()-r.totalLeftPx,c=b-h;this.contextGaps.total+=c,this.contextGaps.gaps.push({x1:h,x2:b}),a.getFormatterMetrics().freedom.left=c,s.getFormatterMetrics().freedom.right=c})),this.durationStats={};const i=this.durationStats;this.voices.forEach((t=>{t.getTickables().forEach(((t,n,s)=>{const a=t.getTicks().clone().simplify().toString(),o=t.getMetrics(),r=t.getFormatterMetrics(),h=t.getX()+o.notePx+o.modRightPx+o.rightDisplacedHeadPx;let b=0;if(n{t.getTickables().forEach((t=>{const e=t.getTicks().clone().simplify().toString(),s=t.getFormatterMetrics();s.space.mean=i[e].mean,s.duration=e,s.iterations+=1,s.space.deviation=s.space.used-s.space.mean,n+=Math.pow(s.space.deviation,2)}))})),this.totalCost=Math.sqrt(n),this.lossHistory.push(this.totalCost),this.totalCost}tune(t){var e;const i=this.tickContexts;if(!i)return 0;const n=null!==(e=null==t?void 0:t.alpha)&&void 0!==e?e:.5;let s=0;return this.totalShift=0,i.list.forEach(((t,e,a)=>{const o=i.map[t],r=e>0?i.map[a[e-1]]:void 0,h=et.getFormatterMetrics().space.deviation)));b>0?s=-Math.min(o.getFormatterMetrics().freedom.right,Math.abs(b)):b<0&&(s=h?Math.min(h.getFormatterMetrics().freedom.right,Math.abs(b)):0),s*=n,this.totalShift+=s})),this.evaluate()}postFormat(){return this.modifierContexts.forEach((t=>{t.array.forEach((t=>t.postFormat()))})),this.tickContexts.list.forEach((t=>{this.tickContexts.map[t].postFormat()})),this}joinVoices(t){return this.createModifierContexts(t),this.hasMinTotalWidth=!1,this}format(t,e,i){const n=Object.assign({align_rests:!1},i);this.voices=t;const s=this.formatterOptions.softmaxFactor;return s&&this.voices.forEach((t=>t.setSoftmaxFactor(s))),this.alignRests(t,n.align_rests),this.createTickContexts(t),this.preFormat(e,n.context,t,n.stave),n.stave&&this.postFormat(),this}formatToStave(t,e,i){const n=Object.assign({context:e.getContext()},i),s=e.getNoteEndX()-e.getNoteStartX()-Be.defaultPadding;return function(...t){ke.DEBUG&&f("Vex.Flow.Formatter",t)}("Formatting voices to width: ",s),this.format(t,s,n)}getTickContext(t){var e;return null===(e=this.tickContexts)||void 0===e?void 0:e.map[t]}}var Ae;ke.DEBUG=!1,function(t){t[t.BOTTOM=-1]="BOTTOM",t[t.TOP=1]="TOP"}(Ae||(Ae={}));class De extends W{static get CATEGORY(){return _.Tuplet}static get LOCATION_TOP(){return Ae.TOP}static get LOCATION_BOTTOM(){return Ae.BOTTOM}static get NESTING_OFFSET(){return 15}static get metrics(){const t=V.currentMusicFont().getMetrics().tuplet;if(!t)throw new x("BadMetrics","tuplet missing");return t}constructor(t,e={}){if(super(),this.numerator_glyphs=[],this.denom_glyphs=[],!t||!t.length)throw new x("BadArguments","No notes provided for tuplet.");this.options=e,this.notes=t,this.num_notes=null!=this.options.num_notes?this.options.num_notes:t.length,this.options.beats_occupied&&this.beatsOccupiedDeprecationWarning(),this.notes_occupied=this.options.notes_occupied||this.options.beats_occupied||2,null!=this.options.bracketed?this.bracketed=this.options.bracketed:this.bracketed=t.some((t=>!t.hasBeam())),this.ratioed=null!=this.options.ratioed?this.options.ratioed:Math.abs(this.notes_occupied-this.num_notes)>1,this.point=3*V.NOTATION_FONT_SCALE/5,this.y_pos=16,this.x_pos=100,this.width=200,this.setTupletLocation(this.options.location||De.LOCATION_TOP),ke.AlignRestsToNotes(t,!0,!0),this.resolveGlyphs(),this.attach()}attach(){for(let t=0;t=1;)this.numerator_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10);for(this.denom_glyphs=[],t=this.notes_occupied;t>=1;)this.denom_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10)}getNestedTupletCount(){const t=this.location,e=this.notes[0];let i=s(e,t),n=s(e,t);function s(t,e){return t.getTupletStack().filter((t=>t.location===e)).length}return this.notes.forEach((e=>{const a=s(e,t);i=a>i?a:i,n=a0&&(n=Math.min(a,n))}}}else{let t=De.metrics.bottomLine;this.notes.forEach((e=>{const i=e.getModifierContext();i&&(t=Math.max(t,i.getState().text_line+1))})),n=i.checkStave().getYForLine(t)+De.metrics.noteHeadOffset;for(let t=0;tn&&(n=e)}}return n+t+e}draw(){const t=this.checkContext();this.setRendered();const e=this.notes[0],i=this.notes[this.notes.length-1];this.bracketed?(this.x_pos=e.getTieLeftX()-5,this.width=i.getTieRightX()-this.x_pos+5):(this.x_pos=e.getStemX(),this.width=i.getStemX()-this.x_pos),this.y_pos=this.getYPosition();const n=(t,e)=>t+p(e.getMetrics().width);let s=this.numerator_glyphs.reduce(n,0);this.ratioed&&(s=this.denom_glyphs.reduce(n,s),s+=.32*this.point);const a=this.x_pos+this.width/2-s/2;if(this.bracketed){const e=this.width/2-s/2-5;e>0&&(t.fillRect(this.x_pos,this.y_pos,e,1),t.fillRect(this.x_pos+this.width/2+s/2+5,this.y_pos,e,1),t.fillRect(this.x_pos,this.y_pos+(this.location===De.LOCATION_BOTTOM?1:0),1,10*this.location),t.fillRect(this.x_pos+this.width,this.y_pos+(this.location===De.LOCATION_BOTTOM?1:0),1,10*this.location))}const o=V.currentMusicFont().lookupMetric("digits.shiftY",0);let r=0;if(this.numerator_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=p(e.getMetrics().width)})),this.ratioed){const e=a+r+.16*this.point,i=.06*this.point;t.beginPath(),t.arc(e,this.y_pos-.08*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),t.beginPath(),t.arc(e,this.y_pos+.12*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),r+=.32*this.point,this.denom_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=p(e.getMetrics().width)}))}}}function Me(t){let e=0;return t.forEach((t=>{t.keyProps&&t.keyProps.forEach((t=>{e+=t.line-3}))})),e>=0?st.DOWN:st.UP}const Fe="L",Oe="R",Re="B";class We extends W{static get CATEGORY(){return _.Beam}getStemDirection(){return this.stem_direction}static getDefaultBeamGroups(t){t&&"c"!==t||(t="4/4");const e={"1/2":["1/2"],"2/2":["1/2"],"3/2":["1/2"],"4/2":["1/2"],"1/4":["1/4"],"2/4":["1/4"],"3/4":["1/4"],"4/4":["1/4"],"1/8":["1/8"],"2/8":["2/8"],"3/8":["3/8"],"4/8":["2/8"],"1/16":["1/16"],"2/16":["2/16"],"3/16":["3/16"],"4/16":["2/16"]}[t];if(void 0!==e)return e.map((t=>(new B).parse(t)));{const e=parseInt(t.split("/")[0],10),i=parseInt(t.split("/")[1],10);if(e%3==0)return[new B(3,i)];if(i>4)return[new B(2,i)];if(i<=4)return[new B(1,i)]}return[new B(1,4)]}static applyAndGetBeams(t,e,i){return We.generateBeams(t.getTickables(),{groups:i,stem_direction:e})}static generateBeams(t,e={}){e.groups&&e.groups.length||(e.groups=[new B(2,8)]);const i=e.groups.map((t=>{if(!t.multiply)throw new x("InvalidBeamGroups","The beam groups must be an array of Vex.Flow.Fractions");return t.clone().multiply(V.RESOLUTION,1)})),n=t;let s=0,a=[],o=[];function r(){i.length-1>s?s+=1:s=0}!function(){let t=[],e=new B(0,1);n.forEach((n=>{if(t=[],n.shouldIgnoreTicks())return a.push(o),void(o=t);o.push(n);const h=i[s].clone(),b=(c=o,c.reduce(((t,e)=>e.getTicks().clone().add(t)),new B(0,1))).add(e);var c;const l=V.durationToNumber(n.getDuration())<8;if(l&&n.getTuplet()&&(h.numerator*=2),b.greaterThan(h)){if(!l){const e=o.pop();e&&t.push(e)}a.push(o);do{e=b.subtract(i[s]),r()}while(e.greaterThanEquals(i[s]));o=t}else b.equals(h)&&(a.push(o),e=new B(0,1),o=t,r())})),o.length>0&&a.push(o)}(),function(){const t=[];a.forEach((i=>{let n=[];i.forEach(((i,s,a)=>{const o=0===s||s===a.length-1,r=a[s-1],h=!e.beam_rests&&i.isRest(),b=e.beam_rests&&e.beam_middle_only&&i.isRest()&&o;let c=!1;if(e.maintain_stem_directions&&r&&!i.isRest()&&!r.isRest()){const t=r.getStemDirection();c=i.getStemDirection()!==t}const l=parseInt(i.getDuration(),10)<8;h||b||c||l?(n.length>0&&t.push(n),n=c?[i]:[]):n.push(i)})),n.length>0&&t.push(n)})),a=t}(),a.forEach((t=>{let i;if(e.maintain_stem_directions){const e=function(t){for(let e=0;e{t.setStemDirection(e)}))}(t,i)}));const h=a.filter((t=>{if(t.length>1){let e=!0;return t.forEach((t=>{t.getIntrinsicTicks()>=V.durationToTicks("4")&&(e=!1)})),e}return!1})),b=function(){const t=[];return a.forEach((e=>{let i;e.forEach((e=>{const n=e.getTuplet();n&&i!==n&&(i=n,t.push(i))}))})),t}(),c=[];return h.forEach((t=>{const i=new We(t);e.show_stemlets&&(i.render_options.show_stemlets=!0),e.secondary_breaks&&(i.render_options.secondary_break_ticks=V.durationToTicks(e.secondary_breaks)),!0===e.flat_beams&&(i.render_options.flat_beams=!0,i.render_options.flat_beam_offset=e.flat_beam_offset),c.push(i)})),b.forEach((t=>{const e=t.notes[0].stem_direction===st.DOWN?Ae.BOTTOM:Ae.TOP;t.setTupletLocation(e);let i=!1;for(let e=0;e=V.durationToTicks("4"))throw new x("BadArguments","Beams can only be applied to notes shorter than a quarter note.");let i,n;this.stem_direction=t[0].getStemDirection();let s=this.stem_direction;if(e&&d(t[0]))s=Me(t);else if(e&&g(t[0])){const e=t.reduce(((t,e)=>t+e.getStemDirection()),0);s=e>-1?st.UP:st.DOWN}for(i=0;it.getGlyphProps().beam_count)).reduce(((t,e)=>e>t?e:t))}breakSecondaryAt(t){return this.break_on_indices=t,this}setPartialBeamSideAt(t,e){return this.forcedPartialDirections[t]=e,this}unsetPartialBeamSideAt(t){return delete this.forcedPartialDirections[t],this}getSlopeY(t,e,i,n){return i+(t-e)*n}calculateSlope(){const{notes:t,stem_direction:e,render_options:{max_slope:i,min_slope:n,slope_iterations:s,slope_cost:a}}=this,o=t[0],r=function(t,e){const i=t.getStemExtents().topY,n=t.getStemX();return(e.getStemExtents().topY-i)/(e.getStemX()-n)}(o,t[t.length-1]),h=(i-n)/s;let b=Number.MAX_VALUE,c=0,l=0;for(let s=n;s<=i;s+=h){let i=0,n=0;for(let a=1;as)&&(h=s,o=Math.min(...n.getYs()),r=n.getBeamCount())}let b=a/t.length;const c=n+r*(1.5*i),l=o+c*-e;e===st.DOWN&&bl&&(b=o-c),s?(e===st.DOWN&&b>s||e===st.UP&&b=8&&(c=-1!==this.break_on_indices.indexOf(h),this.render_options.secondary_break_ticks&&r>=this.render_options.secondary_break_ticks&&(r=0,c=!0));const l=b.getIntrinsicTicks(){const i=e.getStem();if(i){const n=e.getStemX();i.setNoteHeadXBounds(n,n),i.setContext(t).draw()}}),this)}drawBeamLines(t){const e=["4","8","16","32","64"],i=this.notes[0];let n=this.getBeamYToDraw();const s=i.getStemX(),a=this.render_options.beam_width*this.stem_direction;for(let i=0;i0||!0===e;return!e||s>0||(this.pos=n),o?this.matchSuccess():this.matchFail(n),{success:o,results:i,numMatches:s}}expectZeroOrMore(t){return this.expectOneOrMore(t,!0)}expect(t){if(Ue("Evaluating rule function:",t),!t)throw new x("Invalid rule function");let e;const i=t.bind(this.grammar)();if(i.token)e=this.matchToken(i.token,!0===i.noSpace),e.success&&(this.pos+=e.incrementPos);else{if(!i.expect)throw Ue(i),new x("Bad grammar! No `token` or `expect` property "+i);e=i.oneOrMore?this.expectOneOrMore(i):i.zeroOrMore?this.expectZeroOrMore(i):this.expectOne(i)}const n=[];return e.matches=n,e.results&&e.results.forEach((t=>n.push(Ye(t)))),i.run&&e.success&&i.run({matches:n}),e}}function je(...t){Qe.DEBUG&&f("Vex.Flow.EasyScore",t)}He.DEBUG=!1;class Xe{constructor(t){this.builder=t}begin(){return this.LINE}LINE(){return{expect:[this.PIECE,this.PIECES,this.EOL]}}PIECE(){return{expect:[this.CHORDORNOTE,this.PARAMS],run:()=>this.builder.commitPiece()}}PIECES(){return{expect:[this.COMMA,this.PIECE],zeroOrMore:!0}}PARAMS(){return{expect:[this.DURATION,this.TYPE,this.DOTS,this.OPTS]}}CHORDORNOTE(){return{expect:[this.CHORD,this.SINGLENOTE],or:!0}}CHORD(){return{expect:[this.LPAREN,this.NOTES,this.RPAREN],run:t=>this.builder.addChord(t.matches[1])}}NOTES(){return{expect:[this.NOTE],oneOrMore:!0}}NOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE]}}SINGLENOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE],run:t=>{const e=t;this.builder.addSingleNote(e.matches[0],e.matches[1],e.matches[2])}}}ACCIDENTAL(){return{expect:[this.MICROTONES,this.ACCIDENTALS],maybe:!0,or:!0}}DOTS(){return{expect:[this.DOT],zeroOrMore:!0,run:t=>this.builder.setNoteDots(t.matches)}}TYPE(){return{expect:[this.SLASH,this.MAYBESLASH,this.TYPES],maybe:!0,run:t=>this.builder.setNoteType(t.matches[2])}}DURATION(){return{expect:[this.SLASH,this.DURATIONS],maybe:!0,run:t=>this.builder.setNoteDuration(t.matches[1])}}OPTS(){return{expect:[this.LBRACKET,this.KEYVAL,this.KEYVALS,this.RBRACKET],maybe:!0}}KEYVALS(){return{expect:[this.COMMA,this.KEYVAL],zeroOrMore:!0}}KEYVAL(){return{expect:[this.KEY,this.EQUALS,this.VAL],run:t=>this.builder.addNoteOption(t.matches[0],t.matches[2].slice(1,-1))}}VAL(){return{expect:[this.SVAL,this.DVAL],or:!0}}KEY(){return{token:"[a-zA-Z][a-zA-Z0-9]*"}}DVAL(){return{token:'["][^"]*["]'}}SVAL(){return{token:"['][^']*[']"}}NOTENAME(){return{token:"[a-gA-G]"}}OCTAVE(){return{token:"[0-9]+"}}ACCIDENTALS(){return{token:"bb|b|##|#|n"}}MICROTONES(){return{token:"bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o"}}DURATIONS(){return{token:"[0-9whq]+"}}TYPES(){return{token:"[rRsSmMhHgG]"}}LPAREN(){return{token:"[(]"}}RPAREN(){return{token:"[)]"}}COMMA(){return{token:"[,]"}}DOT(){return{token:"[.]"}}SLASH(){return{token:"[/]"}}MAYBESLASH(){return{token:"[/]?"}}EQUALS(){return{token:"[=]"}}LBRACKET(){return{token:"\\["}}RBRACKET(){return{token:"\\]"}}EOL(){return{token:"$"}}}class Ve{constructor(t){this.chord=[],this.dots=0,this.options={},this.duration=t}}class Ke{constructor(t){this.commitHooks=[],this.factory=t,this.reset()}reset(t){this.options=Object.assign({stem:"auto",clef:"treble"},t),this.elements={notes:[],accidentals:[]},this.rollingDuration="8",this.resetPiece()}getFactory(){return this.factory}getElements(){return this.elements}addCommitHook(t){this.commitHooks.push(t)}resetPiece(){je("resetPiece"),this.piece=new Ve(this.rollingDuration)}setNoteDots(t){je("setNoteDots:",t),t&&(this.piece.dots=t.length)}setNoteDuration(t){je("setNoteDuration:",t),this.rollingDuration=this.piece.duration=t||this.rollingDuration}setNoteType(t){je("setNoteType:",t),t&&(this.piece.type=t)}addNoteOption(t,e){je("addNoteOption: key:",t,"value:",e),this.piece.options[t]=e}addNote(t,e,i){je("addNote:",t,e,i),this.piece.chord.push({key:t,accid:e,octave:i})}addSingleNote(t,e,i){je("addSingleNote:",t,e,i),this.addNote(t,e,i)}addChord(t){je("startChord"),"object"!=typeof t[0]?this.addSingleNote(t[0]):t.forEach((t=>{t&&this.addNote(...t)})),je("endChord")}commitPiece(){je("commitPiece");const{factory:t}=this;if(!t)return;const e=Object.assign(Object.assign({},this.options),this.piece.options),i=p(e.stem,"BadArguments","options.stem is not defined").toLowerCase(),n=p(e.clef,"BadArguments","options.clef is not defined").toLowerCase(),{chord:s,duration:a,dots:o,type:r}=this.piece,h=et.accidentals,b=s.map((t=>{var e;return t.key+(h.includes(null!==(e=t.accid)&&void 0!==e?e:"")?t.accid:"")+"/"+t.octave})),c="auto"===i,l="g"==(null==r?void 0:r.toLowerCase())?t.GhostNote({duration:a,dots:o}):t.StaveNote({keys:b,duration:a,dots:o,type:r,clef:n,auto_stem:c});c||l.setStemDirection("up"===i?st.UP:st.DOWN);const d=[];s.forEach(((e,i)=>{const n=e.accid;if("string"==typeof n){const e=t.Accidental({type:n});l.addModifier(e,i),d.push(e)}else d.push(void 0)}));for(let t=0;tt(e,l,this))),this.elements.notes.push(l),this.elements.accidentals.push(d),this.resetPiece()}}function $e(t,e){void 0!==t.id&&e.setAttribute("id",t.id)}const Je=/\s*,\s*/;function qe(t,e){void 0!==t.class&&t.class.split(Je).forEach((t=>e.addClass(t)))}class Qe{constructor(t={}){this.defaults={clef:"treble",time:"4/4",stem:"auto"},this.setOptions(t)}set(t){return this.defaults=Object.assign(Object.assign({},this.defaults),t),this}setOptions(t){var e,i;const n=t.factory,s=null!==(e=t.builder)&&void 0!==e?e:new Ke(n);return this.options=Object.assign(Object.assign({commitHooks:[$e,qe,ft.easyScoreHook,Wt.easyScoreHook],throwOnError:!1},t),{factory:n,builder:s}),this.factory=n,this.builder=s,this.grammar=new Xe(this.builder),this.parser=new He(this.grammar),null===(i=this.options.commitHooks)||void 0===i||i.forEach((t=>this.addCommitHook(t))),this}setContext(t){return this.factory.setContext(t),this}parse(t,e={}){this.builder.reset(e);const i=this.parser.parse(t);if(!i.success&&this.options.throwOnError)throw je(i),new x("Error parsing line: "+t);return i}beam(t,e){return this.factory.Beam({notes:t,options:e}),t}tuplet(t,e){return this.factory.Tuplet({notes:t,options:e}),t}notes(t,e={}){return e=Object.assign({clef:this.defaults.clef,stem:this.defaults.stem},e),this.parse(t,e),this.builder.getElements().notes}voice(t,e={}){return e=Object.assign({time:this.defaults.time},e),this.factory.Voice(e).addTickables(t)}addCommitHook(t){this.builder.addCommitHook(t)}}Qe.DEBUG=!1;const Ze="Ghost note must have valid initialization data to identify duration.";class ti extends It{static get CATEGORY(){return _.GhostNote}constructor(t){if(!t)throw new x("BadArguments",Ze);let e;if("string"==typeof t)e={duration:t};else{if("object"!=typeof t)throw new x("BadArguments",Ze);e=t}super(e),this.setWidth(0)}isRest(){return!0}setStave(t){return super.setStave(t),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){this.setRendered();for(let t=0;t=ri.type.TEXT&&t<=ri.type.MIXED&&(this.type=t),this}setCustomText(t,e){return this.custom_depress_text=t||"",this.custom_release_text=e||"",this}setLine(t){return this.line=t,this}drawBracketed(){const t=this.checkContext();let e,i,n=!1;this.notes.forEach(((s,a,o)=>{var r;n=!n;const h=s.getAbsoluteX(),b=s.checkStave().getYForBottomText(this.line+3);if(h{var n;e=!e;const s=i.checkStave(),a=i.getAbsoluteX(),o=s.getYForBottomText(this.line+3),r=null!==(n=V.currentMusicFont().lookupMetric(`pedalMarking.${e?"down":"up"}.point`))&&void 0!==n?n:V.NOTATION_FONT_SCALE;let h=0;e?this.custom_depress_text?(h=t.measureText(this.custom_depress_text).width,t.fillText(this.custom_depress_text,a-h/2,o)):oi("pedal_depress",t,a,o,r):this.custom_release_text?(h=t.measureText(this.custom_release_text).width,t.fillText(this.custom_release_text,a-h/2,o)):oi("pedal_release",t,a,o,r)}))}draw(){const t=this.checkContext();this.setRendered(),t.save(),t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color),t.setFont(this.textFont),function(...t){ri.DEBUG&&f("Vex.Flow.PedalMarking",t)}("Rendering Pedal Marking"),this.type===ri.type.BRACKET||this.type===ri.type.MIXED?(t.setLineWidth(this.render_options.bracket_line_width),this.drawBracketed()):this.type===ri.type.TEXT&&this.drawText(),t.restore()}}ri.DEBUG=!1,ri.TEXT_FONT={family:F.SERIF,size:12,weight:N.BOLD,style:k.ITALIC},ri.GLYPHS={pedal_depress:{code:"keyboardPedalPed"},pedal_release:{code:"keyboardPedalUp"}},ri.type={TEXT:1,BRACKET:2,MIXED:3},ri.typeString={text:ri.type.TEXT,bracket:ri.type.BRACKET,mixed:ri.type.MIXED};const hi={1:"repeat1Bar",2:"repeat2Bars",4:"repeat4Bars",slash:"repeatBarSlash"};class bi extends ei{static get CATEGORY(){return _.RepeatNote}constructor(t,e,i){super(new Z(hi[t]||"repeat1Bar",V.currentMusicFont().lookupMetric("repeatNote.point",40),{category:"repeatNote"}),Object.assign({duration:"q",align_center:"slash"!==t},e),i)}}function ci(t,e,i,n,s,a,o){t.beginPath(),t.moveTo(e,i),t.lineTo(n,s),t.lineTo(a,o),t.lineTo(e,i),t.closePath(),t.fill()}class li extends W{static get CATEGORY(){return _.StaveLine}constructor(t){super(),this.setNotes(t),this.text="",this.resetFont(),this.render_options={padding_left:4,padding_right:3,line_width:1,line_dash:void 0,rounded_end:!0,color:void 0,draw_start_arrow:!1,draw_end_arrow:!1,arrowhead_length:10,arrowhead_angle:Math.PI/8,text_position_vertical:li.TextVerticalPosition.TOP,text_justification:li.TextJustification.CENTER}}setText(t){return this.text=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new x("BadArguments","Notes needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new x("BadArguments","Connected notes must have same number of indices.");return this.notes=t,this.first_note=t.first_note,this.first_indices=t.first_indices,this.last_note=t.last_note,this.last_indices=t.last_indices,this}applyLineStyle(){const t=this.checkContext(),e=this.render_options;e.line_dash&&t.setLineDash(e.line_dash),e.line_width&&t.setLineWidth(e.line_width),e.rounded_end?t.setLineCap("round"):t.setLineCap("square")}applyFontStyle(){const t=this.checkContext();t.setFont(this.textFont);const e=this.render_options.color;e&&(t.setStrokeStyle(e),t.setFillStyle(e))}drawArrowLine(t,e,i){const n=this.render_options.draw_start_arrow&&this.render_options.draw_end_arrow,s=e.x,a=e.y,o=i.x,r=i.y,h=Math.sqrt((o-s)*(o-s)+(r-a)*(r-a)),b=(h-this.render_options.arrowhead_length/3)/h;let c,l,d,m;this.render_options.draw_end_arrow||n?(c=Math.round(s+(o-s)*b),l=Math.round(a+(r-a)*b)):(c=o,l=r),this.render_options.draw_start_arrow||n?(d=s+(o-s)*(1-b),m=a+(r-a)*(1-b)):(d=s,m=a),this.render_options.color&&(t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color)),t.beginPath(),t.moveTo(d,m),t.lineTo(c,l),t.stroke(),t.closePath();const g=Math.atan2(r-a,o-s),_=Math.abs(this.render_options.arrowhead_length/Math.cos(this.render_options.arrowhead_angle));let x,u,p,f,y,S;(this.render_options.draw_end_arrow||n)&&(x=g+Math.PI+this.render_options.arrowhead_angle,p=o+Math.cos(x)*_,f=r+Math.sin(x)*_,u=g+Math.PI-this.render_options.arrowhead_angle,y=o+Math.cos(u)*_,S=r+Math.sin(u)*_,ci(t,p,f,o,r,y,S)),(this.render_options.draw_start_arrow||n)&&(x=g+this.render_options.arrowhead_angle,p=s+Math.cos(x)*_,f=a+Math.sin(x)*_,u=g-this.render_options.arrowhead_angle,y=s+Math.cos(u)*_,S=a+Math.sin(u)*_,ci(t,p,f,s,a,y,S))}draw(){const t=this.checkContext();this.setRendered();const e=this.first_note,i=this.last_note,n=this.render_options;t.save(),this.applyLineStyle();let s={x:0,y:0},a={x:0,y:0};this.first_indices.forEach(((o,r)=>{const h=this.last_indices[r];s=e.getModifierStartXY(2,o),a=i.getModifierStartXY(1,h);const b=s.y>a.y;s.x+=e.getMetrics().modRightPx+n.padding_left,a.x-=i.getMetrics().modLeftPx+n.padding_right;const c=e.getGlyphProps().getWidth();e.getKeyProps()[o].displaced&&1===e.getStemDirection()&&(s.x+=c+n.padding_left);i.getKeyProps()[h].displaced&&-1===i.getStemDirection()&&(a.x-=c+n.padding_right),s.y+=b?-3:1,a.y+=b?2:0,this.drawArrowLine(t,s,a)})),t.restore();const o=t.measureText(this.text).width,r=n.text_justification;let h=0;if(r===li.TextJustification.LEFT)h=s.x;else if(r===li.TextJustification.CENTER){h=(a.x-s.x)/2+s.x-o/2}else r===li.TextJustification.RIGHT&&(h=a.x-o);let b=0;const c=n.text_position_vertical;return c===li.TextVerticalPosition.TOP?b=e.checkStave().getYForTopText():c===li.TextVerticalPosition.BOTTOM&&(b=e.checkStave().getYForBottomText(V.TEXT_HEIGHT_OFFSET_HACK)),t.save(),this.applyFontStyle(),t.fillText(this.text,h,b),t.restore(),this}}li.TEXT_FONT=Object.assign({},W.TEXT_FONT),li.TextVerticalPosition={TOP:1,BOTTOM:2},li.TextJustification=ae;class di extends W{static get CATEGORY(){return _.System}constructor(t={}){super(),this.setOptions(t),this.partStaves=[],this.partStaveInfos=[],this.partVoices=[]}setOptions(t={}){if(!t.factory)throw new x("NoFactory","System.setOptions(options) requires a factory.");this.factory=t.factory,this.options=Object.assign(Object.assign({factory:this.factory,x:10,y:10,width:500,spaceBetweenStaves:12,autoWidth:!1,noJustification:!1,debugFormatter:!1,formatIterations:0,noPadding:!1},t),{details:Object.assign({alpha:.5},t.details),formatOptions:Object.assign({},t.formatOptions)}),!1===this.options.noJustification&&void 0===t.width&&(this.options.autoWidth=!0)}getX(){return this.options.x}setX(t){this.options.x=t,this.partStaves.forEach((e=>{e.setX(t)}))}getY(){return this.options.y}setY(t){this.options.y=t,this.partStaves.forEach((e=>{e.setY(t)}))}getStaves(){return this.partStaves}getVoices(){return this.partVoices}setContext(t){return super.setContext(t),this.factory.setContext(t),this}addConnector(t="double"){return this.connector=this.factory.StaveConnector({top_stave:this.partStaves[0],bottom_stave:this.partStaves[this.partStaves.length-1],type:t}),this.connector}addStave(t){var e;const i=Object.assign({left_bar:!1},t.options),n=null!==(e=t.stave)&&void 0!==e?e:this.factory.Stave({x:this.options.x,y:this.options.y,width:this.options.width,options:i}),s=Object.assign(Object.assign({spaceAbove:0,spaceBelow:0,debugNoteMetrics:!1,noJustification:!1},t),{options:i}),a=this.getContext();return s.voices.forEach((t=>{t.setContext(a).setStave(n).getTickables().forEach((t=>t.setStave(n))),this.partVoices.push(t)})),this.partStaves.push(n),this.partStaveInfos.push(s),n}addVoices(t){const e=this.getContext();t.forEach((t=>{t.setContext(e),this.partVoices.push(t)}))}format(){const t=this.options.details;let e=0;const i=new ke(t);this.formatter=i;let n=this.options.y,s=0;const a=[];this.partStaves.forEach(((t,e)=>{n+=t.space(this.partStaveInfos[e].spaceAbove),t.setY(n),n+=t.space(this.partStaveInfos[e].spaceBelow),n+=t.space(this.options.spaceBetweenStaves),this.partStaveInfos[e].debugNoteMetrics&&(a.push({y:n,stave:t}),n+=15),s=Math.max(s,t.getNoteStartX())})),this.partVoices.forEach((t=>{t.getTickables().forEach((t=>{const e=t.getStave();e&&t.setStave(e)}))})),i.joinVoices(this.partVoices),this.partStaves.forEach((t=>t.setNoteStartX(s))),this.options.autoWidth&&this.partVoices.length>0?(e=i.preCalculateMinTotalWidth(this.partVoices),this.options.width=e+Be.rightPadding+(s-this.options.x),this.partStaves.forEach((t=>{t.setWidth(this.options.width)}))):e=this.options.noPadding?this.options.width-(s-this.options.x):this.options.width-(s-this.options.x)-Be.defaultPadding,this.partVoices.length>0&&i.format(this.partVoices,this.options.noJustification?0:e,this.options.formatOptions),i.postFormat();for(let e=0;e{this.partVoices.forEach((i=>{i.getTickables().forEach((i=>{i.getStave()===e.stave&&vt.plotMetrics(t,i,e.y)}))}))}))}}class mi extends It{static get CATEGORY(){return _.TabNote}constructor(t,e=!1){super(t),this.glyphPropsArr=[],this.greatestString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>t>e?t:e)),this.leastString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>tthis.width}setStave(t){super.setStave(t);const e=t.getContext();if(this.setContext(e),e){this.width=0;for(let t=0;ti.width),this.width=Math.max(i.getWidth(),this.width)}this.glyphProps.getWidth=()=>this.width}const i=this.positions.map((({str:e})=>t.getYForLine(Number(e)-1)));return this.setYs(i),this.stem&&this.stem.setYBounds(this.getStemY(),this.getStemY()),this}getPositions(){return this.positions}getModifierStartXY(t,e){if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new x("NoYValues","No Y-Values calculated for this note.");let i=0;if(t===tt.Position.LEFT)i=-2;else if(t===tt.Position.RIGHT)i=this.width+2;else if(t===tt.Position.BELOW||t===tt.Position.ABOVE){i=this.glyphProps.getWidth()/2}return{x:this.getAbsoluteX()+i,y:this.ys[e]}}getLineForRest(){return Number(this.positions[0].str)}preFormat(){this.preFormatted||(this.modifierContext&&this.modifierContext.preFormat(),this.preFormatted=!0)}getStemX(){return this.getCenterGlyphX()}getStemY(){const t=this.checkStave().getNumLines()-.5,e=st.UP===this.stem_direction?-.5:t;return this.checkStave().getYForLine(e)}getStemExtents(){return this.checkStem().getExtents()}drawFlag(){var t;const{beam:e,glyphProps:i,render_options:{draw_stem:n}}=this,s=this.checkContext(),a=null==e&&n;if(i.flag&&a){const e=this.getStemX(),i=this.getStemDirection()===st.DOWN?this.getStemY()-this.checkStem().getHeight()-(this.glyphProps?this.glyphProps.stem_down_extension:0):this.getStemY()-this.checkStem().getHeight()+(this.glyphProps?this.glyphProps.stem_up_extension:0);null===(t=this.flag)||void 0===t||t.render(s,e,i)}}drawModifiers(){this.modifiers.forEach((t=>{r(t)&&!this.render_options.draw_dots||(t.setContext(this.getContext()),t.drawWithStyle())}))}drawStemThrough(){const t=this.getStemX(),e=this.getStemY(),i=this.checkContext(),n=this.render_options.draw_stem,s=this.render_options.draw_stem_through_stave;if(n&&s){const n=function(t,e,i,n){const s=1!==n,a=-1!==n,o=i.getSpacingBetweenLines(),r=i.getNumLines(),h=[];return e.forEach((e=>{const b=e.indexOf(r)>-1,c=e.indexOf(1)>-1;if(s&&c||a&&b)return;1===e.length&&e.push(e[0]);const l=[];e.forEach(((e,s,a)=>{const h=1===e,b=e===r;let c=i.getYForLine(e-1);0!==s||h?s!==a.length-1||b||(c+=o/2-1):c-=o/2-1,l.push(c),1===n&&h?l.push(t-2):-1===n&&b&&l.push(t+2)})),h.push(l.sort(((t,e)=>t-e)))})),h}(e,function(t,e){const i=[];let n=[];for(let s=1;s<=t;s++)e.indexOf(s)>-1?(i.push(n),n=[]):n.push(s);return n.length>0&&i.push(n),i}(this.checkStave().getNumLines(),this.positions.map((t=>Number(t.str)))),this.checkStave(),this.getStemDirection());i.save(),i.setLineWidth(st.WIDTH),n.forEach((e=>{0!==e.length&&(i.beginPath(),i.moveTo(t,e[0]),i.lineTo(t,e[e.length-1]),i.stroke(),i.closePath())})),i.restore()}}drawPositions(){var t;const e=this.checkContext(),i=this.getAbsoluteX(),n=this.ys;for(let s=0;s{const i=fi.GLYPHS[e];if(!i)throw new x("Invalid dynamics character: "+e);const n=p(this.render_options.glyph_font_size),s=new Z(i.code,n,{category:"textNote"});this.glyphs.push(s),t+=i.width})),this.setWidth(t),this.preFormatted=!0,this}draw(){this.setRendered();const t=this.getAbsoluteX(),e=this.checkStave().getYForLine(this.line+-3);pi("Rendering Dynamics: ",this.sequence);let i=t;this.glyphs.forEach(((t,n)=>{const s=this.sequence[n];t.render(this.checkContext(),i,e),i+=fi.GLYPHS[s].width}))}}fi.DEBUG=!1;class yi extends vt{static get CATEGORY(){return _.TimeSigNote}constructor(t,e){super({duration:"b"}),this.timeSig=new Te(t,e),this.setWidth(this.timeSig.getGlyph().getMetrics().width),this.ignore_ticks=!0}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkStave(),e=this.checkContext();this.setRendered();const i=this.timeSig.getGlyph();i.getContext()||i.setContext(e),i.setStave(t),i.setYShift(t.getYForLine(2)-t.getYForGlyphs()),i.renderToStave(this.getAbsoluteX())}}class Si extends W{static get CATEGORY(){return _.VibratoBracket}constructor(t){super(),t.start&&(this.start=t.start),t.stop&&(this.stop=t.stop),this.line=1,this.render_options={harsh:!1,wave_height:6,wave_width:4,wave_girth:2,vibrato_width:0}}setLine(t){return this.line=t,this}setHarsh(t){return this.render_options.harsh=t,this}draw(){const t=this.checkContext();this.setRendered();const e=this.start&&this.start.checkStave().getYForTopText(this.line)||this.stop&&this.stop.checkStave().getYForTopText(this.line)||0,i=this.start&&this.start.getAbsoluteX()||this.stop&&this.stop.checkStave().getTieStartX()||0,n=this.stop&&this.stop.getAbsoluteX()-this.stop.getWidth()-5||this.start&&this.start.checkStave().getTieEndX()-10||0;this.render_options.vibrato_width=n-i,function(...t){Si.DEBUG&&f("Vex.Flow.VibratoBracket",t)}("Rendering VibratoBracket: start_x:",i,"stop_x:",n,"y:",e),ce.renderVibrato(t,i,e,this.render_options)}}function Ti(...t){vi.DEBUG&&f("Vex.Flow.Factory",t)}Si.DEBUG=!1;class vi{static newFromElementId(t,e=500,i=200){return new vi({renderer:{elementId:t,width:e,height:i}})}constructor(t={}){Ti("New factory: ",t),this.options={stave:{space:10},renderer:{elementId:"",width:500,height:200,background:"#FFF"},font:vi.TEXT_FONT},this.setOptions(t)}reset(){this.renderQ=[],this.systems=[],this.staves=[],this.voices=[],this.stave=void 0}setOptions(t){this.options=Object.assign(Object.assign({},this.options),t),this.initRenderer(),this.reset()}initRenderer(){const{elementId:t,width:e,height:i,background:n}=this.options.renderer;if(null==t)return;if(""==t)throw Ti(this),new x("renderer.elementId not set in FactoryOptions");let s=this.options.renderer.backend;if(void 0===s){s=Jt(document.getElementById(t))?re.Backends.CANVAS:re.Backends.SVG}this.context=re.buildContext(t,s,e,i,n)}getContext(){return this.context}setContext(t){return this.context=t,this}getStave(){return this.stave}getVoices(){return this.voices}Stave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1*e}},t),n=new Be(i.x,i.y,i.width,i.options);return this.staves.push(n),n.setContext(this.context),this.stave=n,n}TabStave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1.3*e}},t),n=new gi(i.x,i.y,i.width,i.options);return this.staves.push(n),n.setContext(this.context),this.stave=n,n}StaveNote(t){const e=new Gt(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GlyphNote(t,e,i){const n=new ei(t,e,i);return this.stave&&n.setStave(this.stave),n.setContext(this.context),this.renderQ.push(n),n}RepeatNote(t,e,i){const n=new bi(t,e,i);return this.stave&&n.setStave(this.stave),n.setContext(this.context),this.renderQ.push(n),n}GhostNote(t){const e=new ti(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TextNote(t){const e=new pe(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}BarNote(t={}){const e=new Dt(t.type);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}ClefNote(t){const e=Object.assign({type:"treble",options:{size:"default",annotation:void 0}},t),i=new Le(e.type,e.options.size,e.options.annotation);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}TimeSigNote(t){const e=Object.assign({time:"4/4"},t),i=new yi(e.time);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}KeySigNote(t){const e=new ni(t.key,t.cancelKey,t.alterKey);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TabNote(t){const e=new mi(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GraceNote(t){const e=new ii(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),e}GraceNoteGroup(t){const e=new Xt(t.notes,t.slur);return e.setContext(this.context),e}Accidental(t){const e=new nt(t.type);return e.setContext(this.context),e}Annotation(t){const e=Object.assign({text:"p",hJustify:ct.CENTER,vJustify:lt.BOTTOM},t),i=new dt(e.text);return i.setJustification(e.hJustify),i.setVerticalJustification(e.vJustify),i.setFont(e.font),i.setContext(this.context),i}ChordSymbol(t){const e=Object.assign({vJustify:"top",hJustify:"center",kerning:!0,reportWidth:!0},t),i=new Ot;return i.setHorizontal(e.hJustify),i.setVertical(e.vJustify),i.setEnableKerning(e.kerning),i.setReportWidth(e.reportWidth),"string"==typeof e.fontFamily&&"number"==typeof e.fontSize?"string"==typeof e.fontWeight?i.setFont(e.fontFamily,e.fontSize,e.fontWeight):i.setFont(e.fontFamily,e.fontSize,""):"number"==typeof e.fontSize&&i.setFontSize(e.fontSize),i.setContext(this.context),i}Articulation(t){var e;const i=new ft(null!==(e=null==t?void 0:t.type)&&void 0!==e?e:"a.");return null!=(null==t?void 0:t.position)&&i.setPosition(t.position),null!=(null==t?void 0:t.betweenLines)&&i.setBetweenLines(t.betweenLines),i.setContext(this.context),i}Ornament(t,e){const i=Object.assign({type:t,position:0,accidental:""},e),n=new Kt(t);return n.setPosition(i.position),i.upperAccidental&&n.setUpperAccidental(i.upperAccidental),i.lowerAccidental&&n.setLowerAccidental(i.lowerAccidental),void 0!==i.delayed&&n.setDelayed(i.delayed),n.setContext(this.context),n}TextDynamics(t){const e=Object.assign({text:"p",duration:"q",dots:0,line:0},t),i=new fi({text:e.text,line:e.line,duration:e.duration,dots:e.dots});return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}Fingering(t){const e=Object.assign({number:"0",position:"left"},t),i=new Wt(e.number);return i.setPosition(e.position),i.setContext(this.context),i}StringNumber(t,e=!0){const i=new he(t.number);return i.setPosition(t.position),i.setContext(this.context),i.setDrawCircle(e),i}TickContext(){return new Pe}ModifierContext(){return new de}MultiMeasureRest(t){const e=p(t.number_of_measures,"NoNumberOfMeasures"),i=new ai(e,t);return i.setContext(this.context),this.renderQ.push(i),i}Voice(t){const e=Object.assign({time:"4/4"},t),i=new jt(e.time);return this.voices.push(i),i}StaveConnector(t){const e=new Ce(t.top_stave,t.bottom_stave);return e.setType(t.type).setContext(this.context),this.renderQ.push(e),e}Formatter(t){return new ke(t)}Tuplet(t){const e=Object.assign({notes:[],options:{}},t),i=new De(e.notes,e.options).setContext(this.context);return this.renderQ.push(i),i}Beam(t){var e,i,n,s,a;const o=new We(t.notes,null===(e=t.options)||void 0===e?void 0:e.autoStem).setContext(this.context);return o.breakSecondaryAt(null!==(n=null===(i=t.options)||void 0===i?void 0:i.secondaryBeamBreaks)&&void 0!==n?n:[]),(null===(s=t.options)||void 0===s?void 0:s.partialBeamDirections)&&Object.entries(null===(a=t.options)||void 0===a?void 0:a.partialBeamDirections).forEach((([t,e])=>{o.setPartialBeamSideAt(Number(t),e)})),this.renderQ.push(o),o}Curve(t){const e=new Ge(t.from,t.to,t.options).setContext(this.context);return this.renderQ.push(e),e}StaveTie(t){var e;const i=new Ut({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices},t.text);return(null===(e=t.options)||void 0===e?void 0:e.direction)&&i.setDirection(t.options.direction),i.setContext(this.context),this.renderQ.push(i),i}StaveLine(t){var e,i;const n=new li({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices});return(null===(e=t.options)||void 0===e?void 0:e.text)&&n.setText(t.options.text),(null===(i=t.options)||void 0===i?void 0:i.font)&&n.setFont(t.options.font),n.setContext(this.context),this.renderQ.push(n),n}VibratoBracket(t){const e=new Si({start:t.from,stop:t.to});return t.options.line&&e.setLine(t.options.line),t.options.harsh&&e.setHarsh(t.options.harsh),e.setContext(this.context),this.renderQ.push(e),e}TextBracket(t){const e=new ui({start:t.from,stop:t.to,text:t.text,superscript:t.options.superscript,position:t.options.position});return t.options.line&&e.setLine(t.options.line),t.options.font&&e.setFont(t.options.font),e.setContext(this.context),this.renderQ.push(e),e}System(t={}){t.factory=this;const e=new di(t).setContext(this.context);return this.systems.push(e),e}EasyScore(t={}){return t.factory=this,new Qe(t)}PedalMarking(t){const e=Object.assign({notes:[],options:{style:"mixed"}},t),i=new ri(e.notes);return i.setType(ri.typeString[e.options.style]),i.setContext(this.context),this.renderQ.push(i),i}NoteSubGroup(t){const e=Object.assign({notes:[]},t),i=new Vt(e.notes);return i.setContext(this.context),i}draw(){const t=this.context;this.systems.forEach((e=>e.setContext(t).format())),this.staves.forEach((e=>e.setContext(t).draw())),this.voices.forEach((e=>e.setContext(t).draw())),this.renderQ.forEach((e=>{e.isRendered()||e.setContext(t).draw()})),this.systems.forEach((e=>e.setContext(t).draw())),this.reset()}}vi.DEBUG=!1,vi.TEXT_FONT=Object.assign({},W.TEXT_FONT);class wi extends mi{static get CATEGORY(){return _.GraceTabNote}constructor(t){super(t,!1),this.render_options=Object.assign(Object.assign({},this.render_options),{y_shift:.3,scale:.6,font:`7.5pt ${F.SANS_SERIF}`}),this.updateWidth()}}class Bi{constructor(t){this.music=new et,this.setKey(t)}setKey(t){return this.key=t,this.reset(),this}getKey(){return this.key}reset(){this.keyParts=this.music.getKeyParts(this.key),this.keyString=this.keyParts.root,this.keyParts.accidental&&(this.keyString+=this.keyParts.accidental);if(!et.scaleTypes[this.keyParts.type])throw new x("BadArguments",`Unsupported key type: ${this.key}`);this.scale=this.music.getScaleTones(this.music.getNoteValue(this.keyString),et.scaleTypes[this.keyParts.type]),this.scaleMap={},this.scaleMapByValue={},this.originalScaleMapByValue={};const t=et.root_indices[this.keyParts.root];for(let e=0;en?Ci.SLIDE_DOWN:Ci.SLIDE_UP}this.direction=e,this.render_options.cp1=11,this.render_options.cp2=14,this.render_options.y_shift=.5,this.resetFont()}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new x("BadArguments","No Y-values to render");const e=this.checkContext(),i=t.first_x_px,n=t.first_ys,s=t.last_x_px,a=t.direction;if(a!==Ci.SLIDE_UP&&a!==Ci.SLIDE_DOWN)throw new x("BadSlide","Invalid slide direction");const o=this.notes.first_indices;for(let t=0;tthis.tuningValues.length)throw new x("BadArguments",`String number must be between 1 and ${this.tuningValues.length}:${t}`);return this.tuningValues[e-1]}getValueForFret(t,e){const i=this.getValueForString(e),n=Number(t);if(n<0)throw new x("BadArguments",`Fret number must be 0 or higher: ${t}`);return i+n}getNoteForFret(t,e){const i=this.getValueForFret(t,e),n=Math.floor(i/12),s=i%12;return`${V.integerToNote(s)}/${n}`}}var ki=function(t,e,i,n){return new(i||(i=Promise))((function(s,a){function o(t){try{h(n.next(t))}catch(t){a(t)}}function r(t){try{h(n.throw(t))}catch(t){a(t)}}function h(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,r)}h((n=n.apply(t,e||[])).next())}))};class Ai{static get BUILD(){return{VERSION:"4.2.6",ID:"103aad2b14837418c5e96c9e078edd036fcddf60",DATE:"2024-08-26T20:16:17.134Z"}}static setMusicFont(...t){const e=t.map((t=>F.load(t)));return V.MUSIC_FONT_STACK=e,Z.MUSIC_FONT_STACK=e.slice(),Z.CURRENT_CACHE_KEY=t.join(","),e}static fetchMusicFont(t,e){return ki(this,void 0,void 0,(function*(){}))}static getMusicFont(){return V.MUSIC_FONT_STACK.map((t=>t.getName()))}static getMusicFontStack(){return V.MUSIC_FONT_STACK}static get RENDER_PRECISION_PLACES(){return V.RENDER_PRECISION_PLACES}static set RENDER_PRECISION_PLACES(t){V.RENDER_PRECISION_PLACES=t}static get SOFTMAX_FACTOR(){return V.SOFTMAX_FACTOR}static set SOFTMAX_FACTOR(t){V.SOFTMAX_FACTOR=t}static get NOTATION_FONT_SCALE(){return V.NOTATION_FONT_SCALE}static set NOTATION_FONT_SCALE(t){V.NOTATION_FONT_SCALE=t}static get TABLATURE_FONT_SCALE(){return V.TABLATURE_FONT_SCALE}static set TABLATURE_FONT_SCALE(t){V.TABLATURE_FONT_SCALE=t}static get RESOLUTION(){return V.RESOLUTION}static set RESOLUTION(t){V.RESOLUTION=t}static get SLASH_NOTEHEAD_WIDTH(){return V.SLASH_NOTEHEAD_WIDTH}static set SLASH_NOTEHEAD_WIDTH(t){V.SLASH_NOTEHEAD_WIDTH=t}static get STAVE_LINE_DISTANCE(){return V.STAVE_LINE_DISTANCE}static set STAVE_LINE_DISTANCE(t){V.STAVE_LINE_DISTANCE=t}static get STAVE_LINE_THICKNESS(){return V.STAVE_LINE_THICKNESS}static set STAVE_LINE_THICKNESS(t){V.STAVE_LINE_THICKNESS=t}static get STEM_HEIGHT(){return V.STEM_HEIGHT}static set STEM_HEIGHT(t){V.STEM_HEIGHT=t}static get STEM_WIDTH(){return V.STEM_WIDTH}static set STEM_WIDTH(t){V.STEM_WIDTH=t}static get TIME4_4(){return V.TIME4_4}static get accidentalMap(){return V.accidentalMap}static get unicode(){return V.unicode}static keySignature(t){return V.keySignature(t)}static hasKeySignature(t){return V.hasKeySignature(t)}static getKeySignatures(){return V.getKeySignatures()}static clefProperties(t){return V.clefProperties(t)}static keyProperties(t,e,i){return V.keyProperties(t,e,i)}static durationToTicks(t){return V.durationToTicks(t)}}Ai.Accidental=nt,Ai.Annotation=dt,Ai.Articulation=ft,Ai.Barline=At,Ai.BarNote=Dt,Ai.Beam=We,Ai.Bend=Mt,Ai.BoundingBox=C,Ai.BoundingBoxComputation=P,Ai.CanvasContext=Qt,Ai.ChordSymbol=Ot,Ai.Clef=me,Ai.ClefNote=Le,Ai.Crescendo=Ie,Ai.Curve=Ge,Ai.Dot=Rt,Ai.EasyScore=Qe,Ai.Element=W,Ai.Factory=vi,Ai.Font=F,Ai.Formatter=ke,Ai.Fraction=B,Ai.FretHandFinger=Wt,Ai.GhostNote=ti,Ai.Glyph=Z,Ai.GlyphNote=ei,Ai.GraceNote=ii,Ai.GraceNoteGroup=Xt,Ai.GraceTabNote=wi,Ai.KeyManager=Bi,Ai.KeySignature=ge,Ai.KeySigNote=ni,Ai.Modifier=tt,Ai.ModifierContext=de,Ai.MultiMeasureRest=ai,Ai.Music=et,Ai.Note=vt,Ai.NoteHead=Lt,Ai.NoteSubGroup=Vt,Ai.Ornament=Kt,Ai.Parenthesis=$t,Ai.Parser=He,Ai.PedalMarking=ri,Ai.Registry=R,Ai.RenderContext=yt,Ai.Renderer=re,Ai.RepeatNote=bi,Ai.Repetition=_e,Ai.Stave=Be,Ai.StaveConnector=Ce,Ai.StaveHairpin=Ei,Ai.StaveLine=li,Ai.StaveModifier=kt,Ai.StaveNote=Gt,Ai.StaveTempo=ue,Ai.StaveText=fe,Ai.StaveTie=Ut,Ai.Stem=st,Ai.StringNumber=he,Ai.Stroke=be,Ai.SVGContext=ie,Ai.System=di,Ai.TabNote=mi,Ai.TabSlide=Ci,Ai.TabStave=gi,Ai.TabTie=Yt,Ai.TextBracket=ui,Ai.TextDynamics=fi,Ai.TextFormatter=bt,Ai.TextNote=pe,Ai.TickContext=Pe,Ai.TimeSignature=Te,Ai.TimeSigNote=yi,Ai.Tremolo=Pi,Ai.Tuning=Ni,Ai.Tuplet=De,Ai.Vibrato=ce,Ai.VibratoBracket=Si,Ai.Voice=jt,Ai.Volta=ye,Ai.AnnotationHorizontalJustify=ct,Ai.AnnotationVerticalJustify=lt,Ai.ChordSymbolHorizontalJustify=Et,Ai.ChordSymbolVerticalJustify=Ct,Ai.SymbolTypes=Pt,Ai.SymbolModifiers=Nt,Ai.CurvePosition=ze,Ai.FontWeight=N,Ai.FontStyle=k,Ai.ModifierPosition=J,Ai.RendererBackends=ne,Ai.RendererLineEndType=se,Ai.BarlineType=Bt,Ai.StaveModifierPosition=wt,Ai.VoltaType=oe,Ai.TextBracketPosition=xi,Ai.TextJustification=ae,Ai.VoiceMode=Ht;const Di={smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}},Mi={resolution:1e3,fontFamily:"VexFlowCustom",glyphs:{vexAccidentalMicrotonal1:{x_min:-171.5,x_max:483.1875,ha:493,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 "},vexAccidentalMicrotonal3:{x_min:0,x_max:430.75,ha:360,o:"m -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z "},vexAccidentalMicrotonal4:{x_min:0,x_max:430.75,ha:360,o:"m 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z "},vexNoteHeadRectBlack:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 "},vexNoteHeadRectWhite:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100"},vexWiggleArpeggioUp:{x_min:58.53125,x_max:228.671875,ha:294,o:"m 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 "}}};const Fi={glyphs:{bracketTop:{x_min:0,x_max:508,y_min:0,y_max:370,ha:370,o:"m 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z"},bracketBottom:{x_min:0,x_max:496,y_min:-393,y_max:0,ha:393,o:"m 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z"},barlineTick:{x_min:0,x_max:56,y_min:877,y_max:1122,ha:245,o:"m 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z"},breathMarkTick:{x_min:0,x_max:568,y_min:0,y_max:621,ha:621,o:"m 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z"},segno:{x_min:0,x_max:798,y_min:-65,y_max:806,ha:871,o:"m 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z"},coda:{x_min:0,x_max:1380,y_min:-196,y_max:1037,ha:1233,o:"m 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z"},gClef:{x_min:0,x_max:664,y_min:-559,y_max:1009,ha:1568,o:"m 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z"},cClef:{x_min:0,x_max:731,y_min:-543,y_max:543,ha:1086,o:"m 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z"},fClef:{x_min:0,x_max:776,y_min:-496,y_max:216,ha:712,o:"m 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z"},unpitchedPercussionClef1:{x_min:0,x_max:379,y_min:-250,y_max:250,ha:500,o:"m 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z"},"6stringTabClef":{x_min:0,x_max:438,y_min:-768,y_max:767,ha:1535,o:"m 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z"},timeSig0:{x_min:20,x_max:513,y_min:-358,y_max:359,ha:717,o:"m 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z"},timeSig1:{x_min:20,x_max:283,y_min:-364,y_max:366,ha:730,o:"m 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z"},timeSig2:{x_min:20,x_max:660,y_min:-379,y_max:382,ha:761,o:"m 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z"},timeSig3:{x_min:20,x_max:540,y_min:-392,y_max:392,ha:784,o:"m 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z"},timeSig4:{x_min:20,x_max:633,y_min:-490,y_max:491,ha:981,o:"m 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z"},timeSig5:{x_min:20,x_max:583,y_min:-389,y_max:389,ha:778,o:"m 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z"},timeSig6:{x_min:20,x_max:565,y_min:-363,y_max:363,ha:726,o:"m 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z"},timeSig7:{x_min:20,x_max:592,y_min:-345,y_max:345,ha:690,o:"m 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z"},timeSig8:{x_min:20,x_max:504,y_min:-428,y_max:428,ha:856,o:"m 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z"},timeSig9:{x_min:20,x_max:494,y_min:-421,y_max:421,ha:842,o:"m 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z"},timeSigCommon:{x_min:20,x_max:585,y_min:-298,y_max:294,ha:592,o:"m 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z"},timeSigCutCommon:{x_min:20,x_max:695,y_min:-687,y_max:687,ha:1374,o:"m 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z"},timeSigPlus:{x_min:0,x_max:661,y_min:-358,y_max:358,ha:716,o:"m 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z"},timeSigPlusSmall:{x_min:0,x_max:418,y_min:-197,y_max:199,ha:396,o:"m 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z"},timeSigMinus:{x_min:0,x_max:662,y_min:-54,y_max:55,ha:109,o:"m 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z"},timeSigParensRight:{x_min:0,x_max:274,y_min:-723,y_max:725,ha:1448,o:"m 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z"},timeSigParensRightSmall:{x_min:0,x_max:154,y_min:-422,y_max:422,ha:844,o:"m 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z"},timeSigParensLeft:{x_min:1,x_max:400,y_min:-728,y_max:728,ha:1456,o:"m 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z"},timeSigParensLeftSmall:{x_min:0,x_max:173,y_min:-405,y_max:404,ha:809,o:"m 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z"},noteheadDoubleWhole:{x_min:0,x_max:614,y_min:-223,y_max:223,ha:446,o:"m 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z"},noteheadWhole:{x_min:0,x_max:380,y_min:-186,y_max:165,ha:351,o:"m 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z"},noteheadHalf:{x_min:0,x_max:334,y_min:-174,y_max:175,ha:349,o:"m 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z"},noteheadBlack:{x_min:0,x_max:334,y_min:-164,y_max:164,ha:328,o:"m 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z"},noteheadXDoubleWhole:{x_min:0,x_max:730,y_min:-266,y_max:267,ha:533,o:"m 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z"},noteheadXWhole:{x_min:0,x_max:506,y_min:-143,y_max:144,ha:287,o:"m 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z"},noteheadXHalf:{x_min:0,x_max:421,y_min:-146,y_max:151,ha:297,o:"m 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z"},noteheadXBlack:{x_min:0,x_max:289,y_min:-156,y_max:157,ha:313,o:"m 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z"},noteheadCircleXDoubleWhole:{x_min:0,x_max:437,y_min:-220,y_max:219,ha:439,o:"m 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z"},noteheadCircleXWhole:{x_min:0,x_max:323,y_min:-190,y_max:184,ha:374,o:"m 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z"},noteheadCircleXHalf:{x_min:0,x_max:309,y_min:-179,y_max:179,ha:358,o:"m 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z"},noteheadCircleX:{x_min:0,x_max:344,y_min:-179,y_max:175,ha:354,o:"m 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z"},noteheadCircledDoubleWhole:{x_min:0,x_max:672,y_min:-291,y_max:291,ha:582,o:"m 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z"},noteheadCircledWhole:{x_min:-50,x_max:472,y_min:-231,y_max:232,ha:463,o:"m 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z"},noteheadCircledHalf:{x_min:-50,x_max:393,y_min:-175,y_max:175,ha:350,o:"m 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z"},noteheadCircledBlack:{x_min:-70,x_max:326,y_min:-168,y_max:192,ha:360,o:"m 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:474,y_min:-209,y_max:211,ha:420,o:"m 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z"},noteheadSquareWhite:{x_min:0,x_max:350,y_min:-131,y_max:131,ha:262,o:"m 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z"},noteheadSquareBlack:{x_min:0,x_max:342,y_min:-130,y_max:132,ha:262,o:"m 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z"},noteheadTriangleDownDoubleWhole:{x_min:0,x_max:510,y_min:-213,y_max:213,ha:426,o:"m 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z"},noteheadTriangleDownWhole:{x_min:0,x_max:366,y_min:-145,y_max:138,ha:283,o:"m 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z"},noteheadTriangleDownHalf:{x_min:0,x_max:341,y_min:-159,y_max:159,ha:318,o:"m 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z"},noteheadTriangleDownBlack:{x_min:0,x_max:346,y_min:-149,y_max:149,ha:298,o:"m 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z"},noteheadTriangleUpDoubleWhole:{x_min:0,x_max:510,y_min:-213,y_max:213,ha:426,o:"m 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z"},noteheadTriangleUpWhole:{x_min:0,x_max:366,y_min:-145,y_max:138,ha:283,o:"m 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z"},noteheadTriangleUpHalf:{x_min:0,x_max:341,y_min:-159,y_max:159,ha:318,o:"m 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z"},noteheadTriangleUpBlack:{x_min:0,x_max:346,y_min:-149,y_max:149,ha:298,o:"m 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z"},noteheadSlashedDoubleWhole1:{x_min:0,x_max:697,y_min:-290,y_max:290,ha:580,o:"m 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z"},noteheadSlashedWhole1:{x_min:-76,x_max:498,y_min:-168,y_max:168,ha:336,o:"m -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z"},noteheadSlashedHalf1:{x_min:-79,x_max:471,y_min:-184,y_max:184,ha:368,o:"m -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z"},noteheadSlashedBlack1:{x_min:-110,x_max:452,y_min:-190,y_max:190,ha:380,o:"m -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z"},noteheadSlashedDoubleWhole2:{x_min:0,x_max:697,y_min:-295,y_max:295,ha:590,o:"m 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z"},noteheadSlashedWhole2:{x_min:-83,x_max:510,y_min:-201,y_max:198,ha:399,o:"m 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z"},noteheadSlashedHalf2:{x_min:-73,x_max:454,y_min:-188,y_max:188,ha:376,o:"m 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z"},noteheadSlashedBlack2:{x_min:-84,x_max:405,y_min:-189,y_max:189,ha:378,o:"m 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:429,y_min:-221,y_max:221,ha:442,o:"m 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z"},noteheadDiamondWhole:{x_min:0,x_max:271,y_min:-132,y_max:132,ha:264,o:"m 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z"},noteheadDiamondHalf:{x_min:0,x_max:295,y_min:-148,y_max:148,ha:296,o:"m 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z"},noteheadDiamondBlack:{x_min:0,x_max:310,y_min:-146,y_max:146,ha:292,o:"m 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z"},noteheadParenthesis:{x_min:-70,x_max:329,y_min:-196,y_max:201,ha:397,o:"m 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z"},noteheadParenthesisRight:{x_min:-30,x_max:82,y_min:-199,y_max:206,ha:405,o:"m -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z"},noteheadParenthesisLeft:{x_min:0,x_max:106,y_min:-197,y_max:197,ha:394,o:"m 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z"},noteheadMoonBlack:{x_min:0,x_max:328,y_min:-125,y_max:125,ha:250,o:"m 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:391,y_min:-142,y_max:142,ha:284,o:"m 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z"},noteheadTriangleRightBlack:{x_min:0,x_max:398,y_min:-139,y_max:140,ha:279,o:"m 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:334,y_min:-134,y_max:136,ha:270,o:"m 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z"},augmentationDot:{x_min:0,x_max:96,y_min:-57,y_max:57,ha:114,o:"m 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z"},tremolo1:{x_min:-158,x_max:156,y_min:-88,y_max:88,ha:176,o:"m -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z"},flag8thUp:{x_min:0,x_max:261,y_min:-819,y_max:0,ha:819,o:"m 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z"},flag8thDown:{x_min:0,x_max:261,y_min:0,y_max:819,ha:819,o:"m 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z"},flag16thUp:{x_min:0,x_max:327,y_min:-819,y_max:0,ha:819,o:"m 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z"},flag16thDown:{x_min:0,x_max:327,y_min:0,y_max:819,ha:819,o:"m 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z"},flag32ndUp:{x_min:0,x_max:268,y_min:-849,y_max:149,ha:999,o:"m 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z"},flag32ndDown:{x_min:-3,x_max:268,y_min:-169,y_max:829,ha:999,o:"m 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z"},flag64thUp:{x_min:-4,x_max:282,y_min:-824,y_max:347,ha:1171,o:"m 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z"},flag64thDown:{x_min:-5,x_max:281,y_min:-375,y_max:796,ha:1171,o:"m 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z"},flag128thUp:{x_min:0,x_max:252,y_min:-804,y_max:530,ha:1334,o:"m 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z"},flag128thDown:{x_min:-1,x_max:252,y_min:-580,y_max:754,ha:1334,o:"m 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z"},accidentalFlat:{x_min:1,x_max:209,y_min:-208,y_max:472,ha:680,o:"m 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z"},accidentalNatural:{x_min:0,x_max:214,y_min:-456,y_max:462,ha:918,o:"m 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z"},accidentalSharp:{x_min:-22,x_max:390,y_min:-384,y_max:383,ha:767,o:"m 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z"},accidentalDoubleSharp:{x_min:0,x_max:287,y_min:-159,y_max:159,ha:318,o:"m 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z"},accidentalDoubleFlat:{x_min:0,x_max:359,y_min:-220,y_max:446,ha:666,o:"m 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z"},accidentalParensLeft:{x_min:0,x_max:130,y_min:-270,y_max:268,ha:538,o:"m 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z"},accidentalParensRight:{x_min:0,x_max:139,y_min:-275,y_max:277,ha:552,o:"m 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:208,y_min:-240,y_max:440,ha:680,o:"m 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:422,y_min:-240,y_max:440,ha:680,o:"m 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:300,y_min:-338,y_max:351,ha:689,o:"m 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z"},accidentalThreeQuarterTonesSharpStein:{x_min:-23,x_max:388,y_min:-373,y_max:445,ha:818,o:"m 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z"},accidentalBuyukMucennebFlat:{x_min:2,x_max:287,y_min:-248,y_max:432,ha:680,o:"m 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z"},accidentalBuyukMucennebSharp:{x_min:-1,x_max:467,y_min:-460,y_max:350,ha:810,o:"m 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z"},accidentalBakiyeFlat:{x_min:2,x_max:287,y_min:-236,y_max:444,ha:680,o:"m 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z"},accidentalKomaSharp:{x_min:0,x_max:300,y_min:-338,y_max:351,ha:689,o:"m 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:359,y_min:-420,y_max:343,ha:763,o:"m 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z"},accidentalKoron:{x_min:0,x_max:303,y_min:-462,y_max:180,ha:642,o:"m 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z"},accidentalSori:{x_min:0,x_max:434,y_min:-295,y_max:325,ha:620,o:"m 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z"},articAccentAbove:{x_min:0,x_max:425,y_min:0,y_max:326,ha:326,o:"m 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z"},articAccentBelow:{x_min:0,x_max:425,y_min:-326,y_max:0,ha:326,o:"m 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z"},articTenutoAbove:{x_min:0,x_max:471,y_min:0,y_max:56,ha:56,o:"m 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z"},articTenutoBelow:{x_min:0,x_max:471,y_min:-59,y_max:-3,ha:56,o:"m 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z"},articStaccatoAbove:{x_min:1,x_max:112,y_min:0,y_max:156,ha:156,o:"m 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z"},articStaccatoBelow:{x_min:1,x_max:112,y_min:-156,y_max:0,ha:156,o:"m 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z"},articStaccatissimoAbove:{x_min:0,x_max:139,y_min:0,y_max:411,ha:411,o:"m 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z"},articStaccatissimoBelow:{x_min:0,x_max:139,y_min:-411,y_max:0,ha:411,o:"m 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z"},articMarcatoAbove:{x_min:0,x_max:396,y_min:0,y_max:328,ha:328,o:"m 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z"},articMarcatoBelow:{x_min:0,x_max:396,y_min:-328,y_max:0,ha:328,o:"m 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z"},fermataAbove:{x_min:0,x_max:472,y_min:2,y_max:454,ha:452,o:"m 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z"},fermataBelow:{x_min:0,x_max:519,y_min:-430,y_max:-1,ha:429,o:"m 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z"},fermataLongAbove:{x_min:0,x_max:591,y_min:-6,y_max:337,ha:343,o:"m 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z"},fermataLongBelow:{x_min:0,x_max:602,y_min:-335,y_max:7,ha:342,o:"m 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z"},fermataVeryLongAbove:{x_min:0,x_max:715,y_min:-14,y_max:437,ha:451,o:"m 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z"},fermataVeryLongBelow:{x_min:0,x_max:686,y_min:-427,y_max:30,ha:457,o:"m 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z"},fermataVeryShortAbove:{x_min:0,x_max:711,y_min:-31,y_max:496,ha:527,o:"m 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z"},fermataVeryShortBelow:{x_min:0,x_max:697,y_min:-475,y_max:13,ha:488,o:"m 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z"},fermataShortAbove:{x_min:0,x_max:545,y_min:-18,y_max:348,ha:366,o:"m 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z"},fermataShortBelow:{x_min:0,x_max:565,y_min:-335,y_max:10,ha:345,o:"m 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z"},breathMarkComma:{x_min:0,x_max:148,y_min:0,y_max:275,ha:275,o:"m 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z"},breathMarkUpbow:{x_min:0,x_max:254,y_min:0,y_max:595,ha:595,o:"m 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z"},caesura:{x_min:0,x_max:566,y_min:0,y_max:562,ha:563,o:"m 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z"},caesuraCurved:{x_min:0,x_max:386,y_min:-10,y_max:584,ha:594,o:"m 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z"},restMaxima:{x_min:0,x_max:366,y_min:-255,y_max:255,ha:510,o:"m 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z"},restDoubleWhole:{x_min:0,x_max:122,y_min:0,y_max:249,ha:249,o:"m 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z"},restWhole:{x_min:1,x_max:500,y_min:-120,y_max:14,ha:134,o:"m 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z"},restWholeLegerLine:{x_min:-197,x_max:685,y_min:-157,y_max:29,ha:186,o:"m 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z"},restHalf:{x_min:0,x_max:518,y_min:0,y_max:162,ha:162,o:"m 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z"},restHalfLegerLine:{x_min:-120,x_max:448,y_min:-20,y_max:143,ha:163,o:"m 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z"},restQuarter:{x_min:0,x_max:263,y_min:-415,y_max:415,ha:830,o:"m 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z"},rest8th:{x_min:0,x_max:289,y_min:-260,y_max:261,ha:521,o:"m 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z"},rest16th:{x_min:0,x_max:333,y_min:-328,y_max:244,ha:572,o:"m 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z"},rest32nd:{x_min:0,x_max:347,y_min:-498,y_max:483,ha:981,o:"m 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z"},rest64th:{x_min:0,x_max:428,y_min:-720,y_max:474,ha:1194,o:"m 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z"},rest128th:{x_min:1,x_max:491,y_min:-711,y_max:719,ha:1430,o:"m 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z"},dynamicPiano:{x_min:-49,x_max:327,y_min:-142,y_max:515,ha:657,o:"m -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z"},dynamicMezzo:{x_min:-18,x_max:559,y_min:-50,y_max:365,ha:415,o:"m 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z"},dynamicForte:{x_min:-144,x_max:311,y_min:-115,y_max:504,ha:619,o:"m -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z"},dynamicRinforzando:{x_min:-75,x_max:322,y_min:-90,y_max:325,ha:415,o:"m 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z"},dynamicSforzando:{x_min:0,x_max:296,y_min:0,y_max:379,ha:379,o:"m 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z"},dynamicZ:{x_min:-43,x_max:331,y_min:0,y_max:328,ha:328,o:"m -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z"},ornamentTrill:{x_min:1,x_max:551,y_min:-18,y_max:539,ha:557,o:"m 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z"},ornamentTurn:{x_min:0,x_max:574,y_min:0,y_max:312,ha:312,o:"m 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z"},ornamentTurnSlash:{x_min:0,x_max:574,y_min:-106,y_max:405,ha:511,o:"m 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z"},ornamentMordent:{x_min:0,x_max:700,y_min:0,y_max:497,ha:497,o:"m 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z"},ornamentShortTrill:{x_min:0,x_max:747,y_min:0,y_max:243,ha:243,o:"m 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z"},ornamentTremblement:{x_min:0,x_max:982,y_min:0,y_max:224,ha:224,o:"m 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:1066,y_min:-50,y_max:533,ha:583,o:"m 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:0,x_max:1088,y_min:-380,y_max:252,ha:632,o:"m 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:1185,y_min:-380,y_max:465,ha:845,o:"m 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:1003,y_min:-20,y_max:521,ha:541,o:"m 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:1246,y_min:-30,y_max:296,ha:326,o:"m 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:0,x_max:1226,y_min:-237,y_max:436,ha:673,o:"m 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:833,y_min:-309,y_max:319,ha:628,o:"m 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z"},brassScoop:{x_min:0,x_max:312,y_min:-390,y_max:28,ha:418,o:"m 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z"},brassDoitMedium:{x_min:0,x_max:476,y_min:-50,y_max:333,ha:383,o:"m 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z"},brassFallLipShort:{x_min:0,x_max:298,y_min:-344,y_max:65,ha:409,o:"m 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z"},brassLiftMedium:{x_min:0,x_max:807,y_min:0,y_max:838,ha:838,o:"m 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z"},brassFallRoughMedium:{x_min:0,x_max:791,y_min:0,y_max:819,ha:819,o:"m 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z"},brassBend:{x_min:0,x_max:381,y_min:0,y_max:367,ha:367,o:"m 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z"},brassMuteClosed:{x_min:0,x_max:274,y_min:0,y_max:260,ha:260,o:"m 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z"},brassMuteOpen:{x_min:1,x_max:313,y_min:0,y_max:309,ha:309,o:"m 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z"},brassFlip:{x_min:0,x_max:402,y_min:0,y_max:361,ha:361,o:"m 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z"},brassJazzTurn:{x_min:0,x_max:646,y_min:0,y_max:212,ha:212,o:"m 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z"},brassSmear:{x_min:0,x_max:334,y_min:0,y_max:151,ha:151,o:"m 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z"},stringsDownBow:{x_min:0,x_max:306,y_min:0,y_max:366,ha:366,o:"m 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z"},stringsUpBow:{x_min:0,x_max:219,y_min:0,y_max:489,ha:489,o:"m 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z"},stringsHarmonic:{x_min:0,x_max:191,y_min:0,y_max:202,ha:202,o:"m 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:201,y_min:0,y_max:325,ha:325,o:"m 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:211,y_min:0,y_max:307,ha:307,o:"m 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z"},pluckedLeftHandPizzicato:{x_min:0,x_max:271,y_min:0,y_max:284,ha:284,o:"m 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z"},keyboardPedalPed:{x_min:0,x_max:944,y_min:-13,y_max:550,ha:563,o:"m 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z"},keyboardPedalUp:{x_min:0,x_max:437,y_min:0,y_max:461,ha:461,o:"m 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z"},pictChokeCymbal:{x_min:1,x_max:147,y_min:0,y_max:242,ha:242,o:"m 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z"},wiggleArpeggiatoUp:{x_min:-22,x_max:300,y_min:0,y_max:176,ha:176,o:"m 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z"},arpeggiatoUp:{x_min:0,x_max:262,y_min:0,y_max:1459,ha:1459,o:"m 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z"},arpeggiatoDown:{x_min:0,x_max:218,y_min:0,y_max:1440,ha:1440,o:"m 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z"},repeat1Bar:{x_min:0,x_max:599,y_min:-250,y_max:175,ha:425,o:"m 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z"},repeat2Bars:{x_min:0,x_max:775,y_min:-247,y_max:363,ha:610,o:"m 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z"},repeat4Bars:{x_min:0,x_max:1374,y_min:-304,y_max:304,ha:608,o:"m 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z"},repeatBarSlash:{x_min:0,x_max:630,y_min:-225,y_max:265,ha:490,o:"m 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z"},csymDiminished:{x_min:0,x_max:506,y_min:0,y_max:500,ha:500,o:"m 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z"},csymHalfDiminished:{x_min:-32,x_max:496,y_min:-33,y_max:492,ha:525,o:"m -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z"},csymAugmented:{x_min:0,x_max:530,y_min:0,y_max:539,ha:539,o:"m 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z"},csymMajorSeventh:{x_min:0,x_max:593,y_min:0,y_max:569,ha:569,o:"m 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z"},csymMinor:{x_min:0,x_max:482,y_min:193,y_max:265,ha:72,o:"m 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z"},csymParensLeftTall:{x_min:0,x_max:185,y_min:0,y_max:1034,ha:1034,o:"m 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z"},csymParensRightTall:{x_min:-40,x_max:189,y_min:0,y_max:1058,ha:1058,o:"m 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z"},csymBracketLeftTall:{x_min:0,x_max:328,y_min:2,y_max:807,ha:805,o:"m 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z"},csymBracketRightTall:{x_min:1,x_max:306,y_min:0,y_max:829,ha:829,o:"m 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z"},csymParensLeftVeryTall:{x_min:0,x_max:116,y_min:0,y_max:934,ha:934,o:"m 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z"},csymParensRightVeryTall:{x_min:-20,x_max:111,y_min:0,y_max:1009,ha:1009,o:"m -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z"},csymDiagonalArrangementSlash:{x_min:0,x_max:990,y_min:-27,y_max:1028,ha:1054,o:"m 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:208,y_min:-231,y_max:449,ha:680,o:"m 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:335,y_min:-231,y_max:449,ha:680,o:"m 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z"},accidentalWilsonPlus:{x_min:0,x_max:298,y_min:-218,y_max:218,ha:436,o:"m 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z"},accidentalWilsonMinus:{x_min:0,x_max:284,y_min:-163,y_max:163,ha:326,o:"m 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z"}},fontFamily:"Petaluma",resolution:1e3,generatedOn:"2022-12-18T09:07:50.817Z"},Oi={csymDiminished:{leftSideBearing:-95,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:-25,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:0,advanceWidth:155,yOffset:150},csymParensRightTall:{leftSideBearing:40,advanceWidth:189,yOffset:150},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:0,advanceWidth:210,yOffset:250},csymParensRightVeryTall:{leftSideBearing:-100,advanceWidth:111,yOffset:250},csymDiagonalArrangementSlash:{leftSideBearing:-1,advanceWidth:990,yOffset:0},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:100,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:0,advanceWidth:425,yOffset:-422},accidentalFlat:{leftSideBearing:-10,advanceWidth:228,yOffset:-284}};const Ri={spacing:50,glyphs:{" ":{x_min:0,x_max:250,y_min:0,y_max:500,ha:500,leftSideBearing:0,advanceWidth:250},0:{x_min:33,x_max:534,y_min:-13,y_max:751,ha:764,leftSideBearing:33,advanceWidth:570},1:{x_min:48,x_max:235,y_min:-17,y_max:734,ha:751,leftSideBearing:48,advanceWidth:286},2:{x_min:56,x_max:571,y_min:-19,y_max:741,ha:760,leftSideBearing:56,advanceWidth:626},3:{x_min:50,x_max:528,y_min:-7,y_max:731,ha:738,leftSideBearing:50,advanceWidth:589},4:{x_min:38,x_max:564,y_min:-13,y_max:743,ha:756,leftSideBearing:38,advanceWidth:614},5:{x_min:42,x_max:601,y_min:-34,y_max:743,ha:777,leftSideBearing:42,advanceWidth:648},6:{x_min:47,x_max:606,y_min:-16,y_max:743,ha:759,leftSideBearing:47,advanceWidth:667},7:{x_min:47,x_max:567,y_min:5,y_max:739,ha:734,leftSideBearing:0,advanceWidth:615},8:{x_min:40,x_max:541,y_min:-15,y_max:752,ha:767,leftSideBearing:40,advanceWidth:585},9:{x_min:40,x_max:537,y_min:-52,y_max:736,ha:788,leftSideBearing:40,advanceWidth:592},"!":{x_min:49,x_max:180,y_min:-7,y_max:761,ha:768,leftSideBearing:49,advanceWidth:230},'"':{x_min:39,x_max:304,y_min:596,y_max:804,ha:208,leftSideBearing:39,advanceWidth:353},"#":{x_min:33,x_max:599,y_min:-8,y_max:765,ha:773,leftSideBearing:33,advanceWidth:648},$:{x_min:53,x_max:495,y_min:-111,y_max:823,ha:934,leftSideBearing:53,advanceWidth:560},"%":{x_min:35,x_max:656,y_min:-128,y_max:808,ha:936,leftSideBearing:35,advanceWidth:711},"&":{x_min:53,x_max:441,y_min:-3,y_max:753,ha:756,leftSideBearing:53,advanceWidth:500},"'":{x_min:43,x_max:161,y_min:590,y_max:811,ha:221,leftSideBearing:43,advanceWidth:217},"(":{x_min:41,x_max:311,y_min:-36,y_max:845,ha:881,leftSideBearing:41,advanceWidth:308},")":{x_min:-8,x_max:257,y_min:-21,y_max:852,ha:873,leftSideBearing:-8,advanceWidth:280},"*":{x_min:59,x_max:539,y_min:175,y_max:589,ha:414,leftSideBearing:59,advanceWidth:601},"+":{x_min:33,x_max:361,y_min:180,y_max:587,ha:407,leftSideBearing:33,advanceWidth:400},",":{x_min:15,x_max:176,y_min:-129,y_max:92,ha:221,leftSideBearing:15,advanceWidth:205},"-":{x_min:40,x_max:380,y_min:317,y_max:452,ha:135,leftSideBearing:40,advanceWidth:422},".":{x_min:48,x_max:185,y_min:-56,y_max:84,ha:140,leftSideBearing:48,advanceWidth:227},"/":{x_min:-58,x_max:654,y_min:-122,y_max:844,ha:966,leftSideBearing:-58,advanceWidth:626},":":{x_min:65,x_max:225,y_min:97,y_max:536,ha:439,leftSideBearing:65,advanceWidth:302},";":{x_min:13,x_max:295,y_min:-139,y_max:536,ha:675,leftSideBearing:13,advanceWidth:334},"<":{x_min:28,x_max:438,y_min:-1,y_max:607,ha:608,leftSideBearing:28,advanceWidth:475},"=":{x_min:40,x_max:383,y_min:199.9598640852289,y_max:541,ha:341.0401359147711,leftSideBearing:40,advanceWidth:422},">":{x_min:35,x_max:421,y_min:28,y_max:632,ha:604,leftSideBearing:35,advanceWidth:466},"?":{x_min:45,x_max:548,y_min:-17,y_max:767,ha:784,leftSideBearing:45,advanceWidth:592},"@":{x_min:51,x_max:730,y_min:-78,y_max:753,ha:831,leftSideBearing:51,advanceWidth:781},A:{x_min:37,x_max:554,y_min:-4,y_max:746,ha:750,leftSideBearing:37,advanceWidth:617},B:{x_min:37,x_max:532,y_min:3,y_max:783,ha:780,leftSideBearing:37,advanceWidth:579},C:{x_min:37,x_max:583,y_min:-3,y_max:775,ha:778,leftSideBearing:37,advanceWidth:623},D:{x_min:50,x_max:530,y_min:-15,y_max:749,ha:764,leftSideBearing:50,advanceWidth:579},E:{x_min:45,x_max:531,y_min:-1,y_max:743,ha:744,leftSideBearing:45,advanceWidth:585},F:{x_min:45,x_max:459,y_min:23,y_max:727,ha:704,leftSideBearing:45,advanceWidth:510},G:{x_min:31,x_max:577,y_min:-8,y_max:733,ha:741,leftSideBearing:31,advanceWidth:611},H:{x_min:37,x_max:493,y_min:-22,y_max:758,ha:780,leftSideBearing:37,advanceWidth:535},I:{x_min:47,x_max:501,y_min:-3,y_max:731,ha:734,leftSideBearing:47,advanceWidth:541},J:{x_min:33,x_max:531,y_min:-23,y_max:725,ha:748,leftSideBearing:33,advanceWidth:573},K:{x_min:43,x_max:505,y_min:-10,y_max:740,ha:750,leftSideBearing:43,advanceWidth:560},L:{x_min:49,x_max:457,y_min:-2,y_max:746,ha:748,leftSideBearing:49,advanceWidth:510},M:{x_min:35,x_max:699,y_min:1,y_max:744,ha:743,leftSideBearing:35,advanceWidth:743},N:{x_min:34,x_max:533,y_min:-17,y_max:761,ha:778,leftSideBearing:34,advanceWidth:579},O:{x_min:41,x_max:608,y_min:-5,y_max:735,ha:740,leftSideBearing:41,advanceWidth:667},P:{x_min:53,x_max:451,y_min:-18,y_max:735,ha:753,leftSideBearing:53,advanceWidth:497},Q:{x_min:40,x_max:599,y_min:-67,y_max:744,ha:811,leftSideBearing:40,advanceWidth:648},R:{x_min:39,x_max:487,y_min:16,y_max:735,ha:719,leftSideBearing:39,advanceWidth:535},S:{x_min:35,x_max:552,y_min:-47,y_max:708,ha:755,leftSideBearing:35,advanceWidth:604},T:{x_min:26,x_max:656,y_min:-13,y_max:718,ha:731,leftSideBearing:26,advanceWidth:705},U:{x_min:41,x_max:518,y_min:-20,y_max:748,ha:768,leftSideBearing:41,advanceWidth:567},V:{x_min:47,x_max:509,y_min:-26,y_max:744,ha:770,leftSideBearing:47,advanceWidth:567},W:{x_min:44,x_max:789,y_min:-35,y_max:720,ha:755,leftSideBearing:44,advanceWidth:833},X:{x_min:63,x_max:635,y_min:-10,y_max:745,ha:755,leftSideBearing:63,advanceWidth:680},Y:{x_min:43,x_max:503,y_min:-21,y_max:734,ha:755,leftSideBearing:43,advanceWidth:541},Z:{x_min:42,x_max:584,y_min:-10,y_max:739,ha:749,leftSideBearing:42,advanceWidth:629},"[":{x_min:46,x_max:346,y_min:-150,y_max:884,ha:1034,leftSideBearing:46,advanceWidth:291},"\\":{x_min:20,x_max:616,y_min:-100,y_max:797,ha:897,leftSideBearing:20,advanceWidth:645},"]":{x_min:-76,x_max:226,y_min:-150,y_max:881,ha:1031,leftSideBearing:-76,advanceWidth:297},"^":{x_min:43,x_max:437,y_min:517,y_max:812,ha:295,leftSideBearing:43,advanceWidth:478},_:{x_min:29,x_max:563,y_min:-110,y_max:-1,ha:109,leftSideBearing:29,advanceWidth:598},"`":{x_min:54,x_max:321,y_min:540,y_max:747,ha:207,leftSideBearing:54,advanceWidth:368},a:{x_min:20,x_max:447,y_min:-17,y_max:495,ha:512,leftSideBearing:20,advanceWidth:494},b:{x_min:37,x_max:466,y_min:-27,y_max:770,ha:797,leftSideBearing:37,advanceWidth:510},c:{x_min:35,x_max:456,y_min:-9,y_max:507,ha:516,leftSideBearing:35,advanceWidth:460},d:{x_min:45,x_max:520,y_min:-15,y_max:764,ha:779,leftSideBearing:45,advanceWidth:560},e:{x_min:33,x_max:370,y_min:-5,y_max:501,ha:506,leftSideBearing:33,advanceWidth:397},f:{x_min:35,x_max:411,y_min:-13,y_max:695,ha:708,leftSideBearing:35,advanceWidth:453},g:{x_min:33,x_max:551,y_min:-257,y_max:505,ha:762,leftSideBearing:33,advanceWidth:611},h:{x_min:32,x_max:458,y_min:-29,y_max:743,ha:772,leftSideBearing:32,advanceWidth:491},i:{x_min:45,x_max:167,y_min:-13,y_max:631,ha:644,leftSideBearing:45,advanceWidth:220},j:{x_min:-127,x_max:261,y_min:-231,y_max:601,ha:832,leftSideBearing:-127,advanceWidth:308},k:{x_min:39,x_max:443,y_min:-3,y_max:700,ha:703,leftSideBearing:39,advanceWidth:497},l:{x_min:58,x_max:168,y_min:-8,y_max:686,ha:694,leftSideBearing:58,advanceWidth:227},m:{x_min:39,x_max:688,y_min:-14,y_max:501,ha:515,leftSideBearing:39,advanceWidth:718},n:{x_min:45,x_max:491,y_min:-32,y_max:512,ha:544,leftSideBearing:45,advanceWidth:541},o:{x_min:41,x_max:424,y_min:-12,y_max:493,ha:505,leftSideBearing:41,advanceWidth:447},p:{x_min:25,x_max:529,y_min:-260,y_max:500,ha:760,leftSideBearing:25,advanceWidth:573},q:{x_min:53,x_max:603,y_min:-235,y_max:514,ha:749,leftSideBearing:53,advanceWidth:623},r:{x_min:32,x_max:407,y_min:-7,y_max:492,ha:499,leftSideBearing:32,advanceWidth:460},s:{x_min:49,x_max:416,y_min:-12,y_max:519,ha:531,leftSideBearing:49,advanceWidth:460},t:{x_min:32,x_max:442,y_min:-5,y_max:684,ha:689,leftSideBearing:32,advanceWidth:469},u:{x_min:41,x_max:487,y_min:-5,y_max:507,ha:512,leftSideBearing:41,advanceWidth:510},v:{x_min:16,x_max:441,y_min:-20,y_max:542,ha:562,leftSideBearing:16,advanceWidth:456},w:{x_min:39,x_max:639,y_min:-22,y_max:505,ha:527,leftSideBearing:39,advanceWidth:661},x:{x_min:15,x_max:505,y_min:-39,y_max:539,ha:578,leftSideBearing:15,advanceWidth:541},y:{x_min:-98,x_max:501,y_min:-242,y_max:511,ha:753,leftSideBearing:-98,advanceWidth:548},z:{x_min:27,x_max:479,y_min:-3,y_max:494,ha:497,leftSideBearing:27,advanceWidth:494},"{":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"|":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"}":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"~":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308}},fontFamily:"PetalumaScript",resolution:1e3,generatedOn:"2020-06-14T18:33:25.407Z"},Wi={spacing:50,glyphs:{" ":{x_min:0,x_max:509,y_min:0,y_max:2e3,ha:2e3,leftSideBearing:0,advanceWidth:509},0:{x_min:121,x_max:1048,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1168},1:{x_min:117,x_max:767,y_min:0,y_max:1456,ha:1456,leftSideBearing:117,advanceWidth:844},2:{x_min:75.8474576645637,x_max:1040,y_min:0,y_max:1477,ha:1477,leftSideBearing:75,advanceWidth:1131},3:{x_min:74.85365853658536,x_max:994,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1106},4:{x_min:63,x_max:1114,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1187},5:{x_min:96.8448275474953,x_max:982,y_min:-21,y_max:1456,ha:1477,leftSideBearing:96,advanceWidth:1081},6:{x_min:121,x_max:1067,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1144},7:{x_min:76,x_max:1060,y_min:0,y_max:1456,ha:1456,leftSideBearing:-30,advanceWidth:1128},8:{x_min:92,x_max:1039,y_min:-21,y_max:1477,ha:1498,leftSideBearing:92,advanceWidth:1131},9:{x_min:84,x_max:1026,y_min:-21,y_max:1477,ha:1498,leftSideBearing:84,advanceWidth:1154},"!":{x_min:143,x_max:340,y_min:0,y_max:1456,ha:1456,leftSideBearing:143,advanceWidth:483},'"':{x_min:166,x_max:634,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:770},"#":{x_min:63,x_max:1179,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1246},$:{x_min:81.92156915727656,x_max:1012,y_min:-208,y_max:1693,ha:1901,leftSideBearing:81,advanceWidth:1110},"%":{x_min:77,x_max:1384,y_min:-21,y_max:1477,ha:1498,leftSideBearing:77,advanceWidth:1460},"&":{x_min:74,x_max:1242,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1289},"'":{x_min:166,x_max:324,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:460},"(":{x_min:114,x_max:650,y_min:-463,y_max:1636,ha:2099,leftSideBearing:114,advanceWidth:662},")":{x_min:11,x_max:547,y_min:-463,y_max:1636,ha:2099,leftSideBearing:11,advanceWidth:654},"*":{x_min:66,x_max:893,y_min:607,y_max:1456,ha:849,leftSideBearing:66,advanceWidth:958},"+":{x_min:73,x_max:1071,y_min:146,y_max:1206,ha:1060,leftSideBearing:73,advanceWidth:1145},",":{x_min:23,x_max:315,y_min:-311,y_max:221,ha:532,leftSideBearing:23,advanceWidth:404},"-":{x_min:154,x_max:643,y_min:538,y_max:692,ha:154,leftSideBearing:154,advanceWidth:797},".":{x_min:145,x_max:342,y_min:0,y_max:202,ha:202,leftSideBearing:145,advanceWidth:493},"/":{x_min:0,x_max:774,y_min:-125,y_max:1456,ha:1581,leftSideBearing:0,advanceWidth:824},":":{x_min:145,x_max:342,y_min:0,y_max:1082,ha:1082,leftSideBearing:145,advanceWidth:419},";":{x_min:53,x_max:345,y_min:-311,y_max:1082,ha:1393,leftSideBearing:53,advanceWidth:424},"<":{x_min:76,x_max:892,y_min:107,y_max:1013,ha:906,leftSideBearing:76,advanceWidth:1017},"=":{x_min:147,x_max:981,y_min:407,y_max:987,ha:580,leftSideBearing:147,advanceWidth:1127},">":{x_min:125,x_max:980,y_min:87,y_max:993,ha:906,leftSideBearing:125,advanceWidth:1060},"?":{x_min:65.92660602419838,x_max:890,y_min:0,y_max:1477,ha:1477,leftSideBearing:65,advanceWidth:953},"@":{x_min:84.3592218305664,x_max:1705.2346925277395,y_min:-453,y_max:1431,ha:1884,leftSideBearing:84,advanceWidth:1821},A:{x_min:70,x_max:1463,y_min:0,y_max:1456,ha:1456,leftSideBearing:70,advanceWidth:1533},B:{x_min:81,x_max:1253,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1322},C:{x_min:80,x_max:1174,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1290},D:{x_min:81,x_max:1291,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1356},E:{x_min:81,x_max:1190,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1306},F:{x_min:81,x_max:1176,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1256},G:{x_min:80,x_max:1226,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1346},H:{x_min:81,x_max:1497,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1578},I:{x_min:81,x_max:604,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:685},J:{x_min:60,x_max:1100,y_min:-21,y_max:1456,ha:1477,leftSideBearing:60,advanceWidth:1169},K:{x_min:81,x_max:1427,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1501},L:{x_min:81,x_max:1130,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1210},M:{x_min:94,x_max:1888,y_min:0,y_max:1456,ha:1456,leftSideBearing:94,advanceWidth:1982},N:{x_min:83,x_max:1509,y_min:0,y_max:1456,ha:1456,leftSideBearing:83,advanceWidth:1592},O:{x_min:70,x_max:1281,y_min:-21,y_max:1477,ha:1498,leftSideBearing:70,advanceWidth:1351},P:{x_min:81,x_max:1242,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1297},Q:{x_min:70,x_max:1348,y_min:-245,y_max:1477,ha:1722,leftSideBearing:70,advanceWidth:1376},R:{x_min:81,x_max:1285,y_min:0,y_max:1455,ha:1455,leftSideBearing:81,advanceWidth:1385},S:{x_min:115,x_max:1116,y_min:-21,y_max:1477,ha:1498,leftSideBearing:115,advanceWidth:1206},T:{x_min:96,x_max:1306,y_min:0,y_max:1456,ha:1456,leftSideBearing:96,advanceWidth:1406},U:{x_min:70,x_max:1452,y_min:-21,y_max:1456,ha:1477,leftSideBearing:70,advanceWidth:1522},V:{x_min:65,x_max:1443,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1508},W:{x_min:72,x_max:2057,y_min:0,y_max:1456,ha:1456,leftSideBearing:72,advanceWidth:2129},X:{x_min:80,x_max:1449,y_min:0,y_max:1456,ha:1456,leftSideBearing:80,advanceWidth:1529},Y:{x_min:65,x_max:1396,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1461},Z:{x_min:90,x_max:1107,y_min:0,y_max:1456,ha:1456,leftSideBearing:90,advanceWidth:1197},"[":{x_min:157,x_max:541,y_min:-312,y_max:1664,ha:1976,leftSideBearing:157,advanceWidth:573},"\\":{x_min:36,x_max:830,y_min:-125,y_max:1456,ha:1581,leftSideBearing:36,advanceWidth:841},"]":{x_min:23,x_max:408,y_min:-312,y_max:1664,ha:1976,leftSideBearing:23,advanceWidth:552},"^":{x_min:71,x_max:802,y_min:729,y_max:1456,ha:727,leftSideBearing:71,advanceWidth:864},_:{x_min:119,x_max:1041,y_min:-154,y_max:0,ha:154,leftSideBearing:119,advanceWidth:1168},"`":{x_min:40,x_max:456,y_min:1288,y_max:1560,ha:272,leftSideBearing:40,advanceWidth:496},a:{x_min:79,x_max:1053,y_min:-21,y_max:1102,ha:1123,leftSideBearing:79,advanceWidth:1132},b:{x_min:-16,x_max:1071,y_min:-21,y_max:1560,ha:1581,leftSideBearing:-16,advanceWidth:1145},c:{x_min:78,x_max:988,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1067},d:{x_min:78,x_max:1156,y_min:-21,y_max:1560,ha:1581,leftSideBearing:78,advanceWidth:1218},e:{x_min:74,x_max:980,y_min:-21,y_max:1102,ha:1123,leftSideBearing:74,advanceWidth:1059},f:{x_min:64,x_max:731,y_min:0,y_max:1581,ha:1581,leftSideBearing:64,advanceWidth:725},g:{x_min:78,x_max:1133,y_min:-437,y_max:1102,ha:1539,leftSideBearing:78,advanceWidth:1157},h:{x_min:49,x_max:1255,y_min:0,y_max:1560,ha:1560,leftSideBearing:49,advanceWidth:1315},i:{x_min:67,x_max:590,y_min:0,y_max:1560,ha:1560,leftSideBearing:67,advanceWidth:652},j:{x_min:-56,x_max:381,y_min:-437,y_max:1560,ha:1997,leftSideBearing:-56,advanceWidth:525},k:{x_min:64,x_max:1248,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:1287},l:{x_min:64,x_max:587,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:653},m:{x_min:74,x_max:1905,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1977},n:{x_min:74,x_max:1278,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1343},o:{x_min:78,x_max:1046,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1124},p:{x_min:34,x_max:1119,y_min:-416,y_max:1102,ha:1518,leftSideBearing:34,advanceWidth:1197},q:{x_min:78,x_max:1135,y_min:-416,y_max:1102,ha:1518,leftSideBearing:78,advanceWidth:1139},r:{x_min:72,x_max:808,y_min:0,y_max:1102,ha:1102,leftSideBearing:72,advanceWidth:854},s:{x_min:104,x_max:933,y_min:-21,y_max:1102,ha:1123,leftSideBearing:104,advanceWidth:1022},t:{x_min:24,x_max:678,y_min:-17,y_max:1343,ha:1360,leftSideBearing:24,advanceWidth:730},u:{x_min:52,x_max:1181,y_min:-21,y_max:1082,ha:1103,leftSideBearing:52,advanceWidth:1245},v:{x_min:26,x_max:1176,y_min:0,y_max:1082,ha:1082,leftSideBearing:26,advanceWidth:1206},w:{x_min:52,x_max:1777,y_min:0,y_max:1082,ha:1082,leftSideBearing:52,advanceWidth:1823},x:{x_min:42,x_max:1163,y_min:0,y_max:1082,ha:1082,leftSideBearing:42,advanceWidth:1203},y:{x_min:24,x_max:1172,y_min:-437,y_max:1082,ha:1519,leftSideBearing:24,advanceWidth:1192},z:{x_min:88,x_max:960,y_min:0,y_max:1082,ha:1082,leftSideBearing:88,advanceWidth:1032},"{":{x_min:63,x_max:671,y_min:-364,y_max:1597,ha:1961,leftSideBearing:63,advanceWidth:701},"|":{x_min:150,x_max:307,y_min:-270,y_max:1456,ha:1726,leftSideBearing:150,advanceWidth:451},"}":{x_min:27,x_max:635,y_min:-364,y_max:1597,ha:1961,leftSideBearing:27,advanceWidth:701},"~":{x_min:121,x_max:1257,y_min:401,y_max:803,ha:402,leftSideBearing:121,advanceWidth:1386}},fontFamily:"Roboto Slab",resolution:2048,generatedOn:"2020-06-15T19:12:58.120Z"},Li={glyphs:{0:{x_min:86,x_max:1038,y_min:-25,y_max:1472,ha:1497,leftSideBearing:86,advanceWidth:1139},1:{x_min:162,x_max:806,y_min:0,y_max:1472,ha:1472,leftSideBearing:162,advanceWidth:1139},2:{x_min:51,x_max:1036,y_min:0,y_max:1472,ha:1472,leftSideBearing:51,advanceWidth:1139},3:{x_min:77,x_max:1051,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},4:{x_min:38,x_max:1092,y_min:0,y_max:1472,ha:1472,leftSideBearing:38,advanceWidth:1139},5:{x_min:91,x_max:1077,y_min:-25,y_max:1446,ha:1471,leftSideBearing:91,advanceWidth:1139},6:{x_min:87,x_max:1066,y_min:-25,y_max:1472,ha:1497,leftSideBearing:87,advanceWidth:1139},7:{x_min:87,x_max:1048,y_min:0,y_max:1446,ha:1446,leftSideBearing:87,advanceWidth:1139},8:{x_min:83,x_max:1047,y_min:-26,y_max:1472,ha:1498,leftSideBearing:83,advanceWidth:1139},9:{x_min:65,x_max:1044,y_min:-26,y_max:1472,ha:1498,leftSideBearing:65,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:184,x_max:488,y_min:0,y_max:1466,ha:1466,leftSideBearing:184,advanceWidth:682},'"':{x_min:112,x_max:869,y_min:945,y_max:1466,ha:521,leftSideBearing:112,advanceWidth:971},"#":{x_min:18,x_max:1115,y_min:-25,y_max:1491,ha:1516,leftSideBearing:18,advanceWidth:1139},$:{x_min:70,x_max:1048,y_min:-205,y_max:1584,ha:1789,leftSideBearing:70,advanceWidth:1139},"%":{x_min:89,x_max:1725,y_min:-59,y_max:1491,ha:1550,leftSideBearing:89,advanceWidth:1821},"&":{x_min:90,x_max:1446,y_min:-38,y_max:1491,ha:1529,leftSideBearing:90,advanceWidth:1479},"'":{x_min:92,x_max:398,y_min:945,y_max:1466,ha:521,leftSideBearing:92,advanceWidth:487},"(":{x_min:107,x_max:616,y_min:-431,y_max:1491,ha:1922,leftSideBearing:107,advanceWidth:682},")":{x_min:67,x_max:576,y_min:-431,y_max:1491,ha:1922,leftSideBearing:67,advanceWidth:682},"*":{x_min:28,x_max:753,y_min:792,y_max:1491,ha:699,leftSideBearing:28,advanceWidth:797},"+":{x_min:85,x_max:1110,y_min:211,y_max:1236,ha:1025,leftSideBearing:85,advanceWidth:1196},",":{x_min:117,x_max:421,y_min:-327,y_max:281,ha:608,leftSideBearing:117,advanceWidth:569},"-":{x_min:115,x_max:667,y_min:391,y_max:672,ha:281,leftSideBearing:115,advanceWidth:682},".":{x_min:147,x_max:428,y_min:0,y_max:281,ha:281,leftSideBearing:147,advanceWidth:569},"/":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},":":{x_min:201,x_max:482,y_min:0,y_max:1062,ha:1062,leftSideBearing:201,advanceWidth:682},";":{x_min:170,x_max:474,y_min:-327,y_max:1062,ha:1389,leftSideBearing:170,advanceWidth:682},"<":{x_min:95,x_max:1100,y_min:167,y_max:1281,ha:1114,leftSideBearing:95,advanceWidth:1196},"=":{x_min:85,x_max:1110,y_min:372,y_max:1074,ha:702,leftSideBearing:85,advanceWidth:1196},">":{x_min:95,x_max:1101,y_min:166,y_max:1279,ha:1113,leftSideBearing:95,advanceWidth:1196},"?":{x_min:106,x_max:1158,y_min:0,y_max:1481,ha:1481,leftSideBearing:106,advanceWidth:1251},"@":{x_min:61,x_max:1990,y_min:-431,y_max:1492,ha:1923,leftSideBearing:61,advanceWidth:1997},A:{x_min:0,x_max:1471,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1479},B:{x_min:150,x_max:1378,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},C:{x_min:97,x_max:1374,y_min:-25,y_max:1491,ha:1516,leftSideBearing:97,advanceWidth:1479},D:{x_min:148,x_max:1377,y_min:0,y_max:1466,ha:1466,leftSideBearing:148,advanceWidth:1479},E:{x_min:149,x_max:1264,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},F:{x_min:151,x_max:1156,y_min:0,y_max:1466,ha:1466,leftSideBearing:151,advanceWidth:1251},G:{x_min:98,x_max:1469,y_min:-25,y_max:1491,ha:1516,leftSideBearing:98,advanceWidth:1593},H:{x_min:150,x_max:1322,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},I:{x_min:140,x_max:436,y_min:0,y_max:1466,ha:1466,leftSideBearing:140,advanceWidth:569},J:{x_min:35,x_max:973,y_min:-25,y_max:1466,ha:1491,leftSideBearing:35,advanceWidth:1139},K:{x_min:153,x_max:1475,y_min:0,y_max:1466,ha:1466,leftSideBearing:153,advanceWidth:1479},L:{x_min:157,x_max:1189,y_min:0,y_max:1454,ha:1454,leftSideBearing:157,advanceWidth:1251},M:{x_min:145,x_max:1561,y_min:0,y_max:1466,ha:1466,leftSideBearing:145,advanceWidth:1706},N:{x_min:152,x_max:1315,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1479},O:{x_min:89,x_max:1511,y_min:-25,y_max:1491,ha:1516,leftSideBearing:89,advanceWidth:1593},P:{x_min:149,x_max:1272,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},Q:{x_min:89,x_max:1566,y_min:-147,y_max:1491,ha:1638,leftSideBearing:89,advanceWidth:1593},R:{x_min:150,x_max:1468,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},S:{x_min:74,x_max:1266,y_min:-26,y_max:1491,ha:1517,leftSideBearing:74,advanceWidth:1366},T:{x_min:44,x_max:1209,y_min:0,y_max:1466,ha:1466,leftSideBearing:44,advanceWidth:1251},U:{x_min:147,x_max:1316,y_min:-25,y_max:1466,ha:1491,leftSideBearing:147,advanceWidth:1479},V:{x_min:-1,x_max:1364,y_min:0,y_max:1466,ha:1466,leftSideBearing:-1,advanceWidth:1366},W:{x_min:7,x_max:1931,y_min:0,y_max:1466,ha:1466,leftSideBearing:7,advanceWidth:1933},X:{x_min:0,x_max:1363,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1366},Y:{x_min:-3,x_max:1368,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},Z:{x_min:22,x_max:1213,y_min:0,y_max:1466,ha:1466,leftSideBearing:22,advanceWidth:1251},"[":{x_min:146,x_max:644,y_min:-413,y_max:1466,ha:1879,leftSideBearing:146,advanceWidth:682},"\\":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},"]":{x_min:38,x_max:536,y_min:-413,y_max:1466,ha:1879,leftSideBearing:38,advanceWidth:682},"^":{x_min:115,x_max:1080,y_min:692,y_max:1491,ha:799,leftSideBearing:115,advanceWidth:1196},_:{x_min:-19,x_max:1149,y_min:-405,y_max:-223,ha:182,leftSideBearing:-19,advanceWidth:1139},"`":{x_min:42,x_max:495,y_min:1192,y_max:1491,ha:299,leftSideBearing:42,advanceWidth:682},a:{x_min:73,x_max:1070,y_min:-24,y_max:1086,ha:1110,leftSideBearing:73,advanceWidth:1139},b:{x_min:135,x_max:1172,y_min:-24,y_max:1466,ha:1490,leftSideBearing:135,advanceWidth:1251},c:{x_min:85,x_max:1087,y_min:-24,y_max:1086,ha:1110,leftSideBearing:85,advanceWidth:1139},d:{x_min:84,x_max:1121,y_min:-24,y_max:1466,ha:1490,leftSideBearing:84,advanceWidth:1251},e:{x_min:65,x_max:1057.2517482517483,y_min:-24,y_max:1086,ha:1110,leftSideBearing:65,advanceWidth:1139},f:{x_min:24,x_max:742,y_min:0,y_max:1491,ha:1491,leftSideBearing:24,advanceWidth:682},g:{x_min:84,x_max:1120,y_min:-431,y_max:1086,ha:1517,leftSideBearing:84,advanceWidth:1251},h:{x_min:146,x_max:1113,y_min:0,y_max:1466,ha:1466,leftSideBearing:146,advanceWidth:1251},i:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},j:{x_min:-94,x_max:422,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:569},k:{x_min:137,x_max:1119,y_min:0,y_max:1466,ha:1466,leftSideBearing:137,advanceWidth:1139},l:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},m:{x_min:126,x_max:1688,y_min:0,y_max:1086,ha:1086,leftSideBearing:126,advanceWidth:1821},n:{x_min:145,x_max:1113,y_min:0,y_max:1086,ha:1086,leftSideBearing:145,advanceWidth:1251},o:{x_min:82,x_max:1178,y_min:-24,y_max:1086,ha:1110,leftSideBearing:82,advanceWidth:1251},p:{x_min:139,x_max:1175,y_min:-404,y_max:1086,ha:1490,leftSideBearing:139,advanceWidth:1251},q:{x_min:91,x_max:1122,y_min:-404,y_max:1086,ha:1490,leftSideBearing:91,advanceWidth:1251},r:{x_min:135,x_max:823,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:797},s:{x_min:48,x_max:1040,y_min:-24,y_max:1086,ha:1110,leftSideBearing:48,advanceWidth:1139},t:{x_min:31,x_max:657,y_min:-24,y_max:1437,ha:1461,leftSideBearing:31,advanceWidth:682},u:{x_min:141,x_max:1107,y_min:-24,y_max:1062,ha:1086,leftSideBearing:141,advanceWidth:1251},v:{x_min:11,x_max:1114,y_min:0,y_max:1062,ha:1062,leftSideBearing:11,advanceWidth:1139},w:{x_min:9,x_max:1592,y_min:0,y_max:1062,ha:1062,leftSideBearing:9,advanceWidth:1593},x:{x_min:12,x_max:1120,y_min:0,y_max:1062,ha:1062,leftSideBearing:12,advanceWidth:1139},y:{x_min:14,x_max:1106,y_min:-431,y_max:1062,ha:1493,leftSideBearing:14,advanceWidth:1139},z:{x_min:34,x_max:982,y_min:0,y_max:1062,ha:1062,leftSideBearing:34,advanceWidth:1024},"{":{x_min:60,x_max:744,y_min:-431,y_max:1491,ha:1922,leftSideBearing:60,advanceWidth:797},"|":{x_min:176,x_max:399,y_min:-431,y_max:1491,ha:1922,leftSideBearing:176,advanceWidth:573},"}":{x_min:45,x_max:729,y_min:-431,y_max:1491,ha:1922,leftSideBearing:45,advanceWidth:797},"~":{x_min:67,x_max:1129,y_min:519,y_max:924,ha:405,leftSideBearing:67,advanceWidth:1196}},fontFamily:"Arial",resolution:2048,generatedOn:"2022-11-04T20:05:21.000Z"},Ii={smufl:!1,name:"SANS",spacing:50,Description:"Built-in sans-serif font",bold:!0,italic:!0,monospaced:!1,serifs:!1,glyphs:{0:{x_min:85,x_max:1041,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139},1:{x_min:223,x_max:763,y_min:0,y_max:1472,ha:1472,leftSideBearing:223,advanceWidth:1139},2:{x_min:61.840001123045234,x_max:1031,y_min:0,y_max:1472,ha:1472,leftSideBearing:61,advanceWidth:1139},3:{x_min:86,x_max:1046,y_min:-26,y_max:1472,ha:1498,leftSideBearing:86,advanceWidth:1139},4:{x_min:26,x_max:1040,y_min:0,y_max:1466,ha:1466,leftSideBearing:26,advanceWidth:1139},5:{x_min:85,x_max:1057,y_min:-25,y_max:1446,ha:1471,leftSideBearing:85,advanceWidth:1139},6:{x_min:77,x_max:1045,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},7:{x_min:97,x_max:1046,y_min:0,y_max:1447,ha:1447,leftSideBearing:97,advanceWidth:1139},8:{x_min:83,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:83,advanceWidth:1139},9:{x_min:85,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:176,x_max:399,y_min:0,y_max:1466,ha:1466,leftSideBearing:176,advanceWidth:569},'"':{x_min:94,x_max:631,y_min:947,y_max:1466,ha:519,leftSideBearing:94,advanceWidth:727},"#":{x_min:21,x_max:1113,y_min:-25,y_max:1491,ha:1516,leftSideBearing:21,advanceWidth:1139},$:{x_min:73,x_max:1043,y_min:-211,y_max:1601,ha:1812,leftSideBearing:73,advanceWidth:1139},"%":{x_min:119,x_max:1695,y_min:-54,y_max:1491,ha:1545,leftSideBearing:119,advanceWidth:1821},"&":{x_min:88,x_max:1319,y_min:-34,y_max:1491,ha:1525,leftSideBearing:88,advanceWidth:1366},"'":{x_min:90,x_max:295,y_min:947,y_max:1466,ha:519,leftSideBearing:90,advanceWidth:391},"(":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},")":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},"*":{x_min:64,x_max:725,y_min:867,y_max:1491,ha:624,leftSideBearing:64,advanceWidth:797},"+":{x_min:114,x_max:1082,y_min:237,y_max:1206,ha:969,leftSideBearing:114,advanceWidth:1196},",":{x_min:170,x_max:387,y_min:-290,y_max:205,ha:495,leftSideBearing:170,advanceWidth:569},"-":{x_min:65,x_max:618,y_min:440,y_max:621,ha:181,leftSideBearing:65,advanceWidth:682},".":{x_min:186,x_max:391,y_min:0,y_max:205,ha:205,leftSideBearing:186,advanceWidth:569},"/":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},":":{x_min:185,x_max:390,y_min:0,y_max:1062,ha:1062,leftSideBearing:185,advanceWidth:569},";":{x_min:170,x_max:387,y_min:-290,y_max:1062,ha:1352,leftSideBearing:170,advanceWidth:569},"<":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"=":{x_min:114,x_max:1082,y_min:417,y_max:1030,ha:613,leftSideBearing:114,advanceWidth:1196},">":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"?":{x_min:90,x_max:1036,y_min:0,y_max:1491,ha:1491,leftSideBearing:90,advanceWidth:1139},"@":{x_min:111,x_max:2005,y_min:-431,y_max:1493,ha:1924,leftSideBearing:111,advanceWidth:2079},A:{x_min:-3,x_max:1369,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},B:{x_min:150,x_max:1257,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},C:{x_min:102,x_max:1398,y_min:-25,y_max:1491,ha:1516,leftSideBearing:102,advanceWidth:1479},D:{x_min:158,x_max:1370,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1479},E:{x_min:162,x_max:1256,y_min:0,y_max:1466,ha:1466,leftSideBearing:162,advanceWidth:1366},F:{x_min:168,x_max:1157,y_min:0,y_max:1466,ha:1466,leftSideBearing:168,advanceWidth:1251},G:{x_min:109,x_max:1465,y_min:-25,y_max:1491,ha:1516,leftSideBearing:109,advanceWidth:1593},H:{x_min:164,x_max:1314,y_min:0,y_max:1466,ha:1466,leftSideBearing:164,advanceWidth:1479},I:{x_min:191,x_max:385,y_min:0,y_max:1466,ha:1466,leftSideBearing:191,advanceWidth:569},J:{x_min:58.84976474807333,x_max:865,y_min:-25,y_max:1466,ha:1491,leftSideBearing:58,advanceWidth:1024},K:{x_min:150,x_max:1362,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},L:{x_min:150,x_max:1066,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1139},M:{x_min:152,x_max:1551,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1706},N:{x_min:156,x_max:1311,y_min:0,y_max:1466,ha:1466,leftSideBearing:156,advanceWidth:1479},O:{x_min:99,x_max:1501,y_min:-25,y_max:1492,ha:1517,leftSideBearing:99,advanceWidth:1593},P:{x_min:158,x_max:1277,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1366},Q:{x_min:88,x_max:1518,y_min:-114,y_max:1492,ha:1606,leftSideBearing:88,advanceWidth:1593},R:{x_min:161,x_max:1453,y_min:0,y_max:1466,ha:1466,leftSideBearing:161,advanceWidth:1479},S:{x_min:92,x_max:1259,y_min:-25,y_max:1491,ha:1516,leftSideBearing:92,advanceWidth:1366},T:{x_min:48,x_max:1210,y_min:0,y_max:1466,ha:1466,leftSideBearing:48,advanceWidth:1251},U:{x_min:161,x_max:1314,y_min:-25,y_max:1466,ha:1491,leftSideBearing:161,advanceWidth:1479},V:{x_min:9,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},W:{x_min:25,x_max:1910,y_min:0,y_max:1466,ha:1466,leftSideBearing:25,advanceWidth:1933},X:{x_min:9,x_max:1353,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},Y:{x_min:6,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:6,advanceWidth:1366},Z:{x_min:41,x_max:1200,y_min:0,y_max:1466,ha:1466,leftSideBearing:41,advanceWidth:1251},"[":{x_min:139,x_max:536,y_min:-407,y_max:1466,ha:1873,leftSideBearing:139,advanceWidth:569},"\\":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},"]":{x_min:39,x_max:436,y_min:-407,y_max:1466,ha:1873,leftSideBearing:39,advanceWidth:569},"^":{x_min:54,x_max:907,y_min:690,y_max:1491,ha:801,leftSideBearing:54,advanceWidth:961},_:{x_min:-31,x_max:1162,y_min:-407,y_max:-277,ha:130,leftSideBearing:-31,advanceWidth:1139},"`":{x_min:89,x_max:465,y_min:1194,y_max:1474,ha:280,leftSideBearing:89,advanceWidth:682},a:{x_min:74,x_max:1052,y_min:-24,y_max:1086,ha:1110,leftSideBearing:74,advanceWidth:1139},b:{x_min:134,x_max:1055,y_min:-24,y_max:1466,ha:1490,leftSideBearing:134,advanceWidth:1139},c:{x_min:80,x_max:1005,y_min:-24,y_max:1086,ha:1110,leftSideBearing:80,advanceWidth:1024},d:{x_min:70,x_max:991,y_min:-24,y_max:1466,ha:1490,leftSideBearing:70,advanceWidth:1139},e:{x_min:75,x_max:1054,y_min:-24,y_max:1086,ha:1110,leftSideBearing:75,advanceWidth:1139},f:{x_min:19,x_max:640,y_min:0,y_max:1491,ha:1491,leftSideBearing:19,advanceWidth:569},g:{x_min:66,x_max:1002,y_min:-431,y_max:1086,ha:1517,leftSideBearing:66,advanceWidth:1139},h:{x_min:135,x_max:1e3,y_min:0,y_max:1466,ha:1466,leftSideBearing:135,advanceWidth:1139},i:{x_min:136,x_max:316,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:455},j:{x_min:-94,x_max:314,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:455},k:{x_min:136,x_max:1016,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:1024},l:{x_min:131,x_max:311,y_min:0,y_max:1466,ha:1466,leftSideBearing:131,advanceWidth:455},m:{x_min:135,x_max:1574,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1706},n:{x_min:135,x_max:998,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1139},o:{x_min:68,x_max:1063,y_min:-24,y_max:1086,ha:1110,leftSideBearing:68,advanceWidth:1139},p:{x_min:135,x_max:1057,y_min:-407,y_max:1086,ha:1493,leftSideBearing:135,advanceWidth:1139},q:{x_min:72,x_max:992,y_min:-407,y_max:1086,ha:1493,leftSideBearing:72,advanceWidth:1139},r:{x_min:133,x_max:710,y_min:0,y_max:1086,ha:1086,leftSideBearing:133,advanceWidth:682},s:{x_min:63,x_max:945,y_min:-24,y_max:1086,ha:1110,leftSideBearing:63,advanceWidth:1024},t:{x_min:36,x_max:554,y_min:-14,y_max:1433,ha:1447,leftSideBearing:36,advanceWidth:569},u:{x_min:131,x_max:992,y_min:-24,y_max:1062,ha:1086,leftSideBearing:131,advanceWidth:1139},v:{x_min:26,x_max:1e3,y_min:0,y_max:1062,ha:1062,leftSideBearing:26,advanceWidth:1024},w:{x_min:6,x_max:1463,y_min:0,y_max:1062,ha:1062,leftSideBearing:6,advanceWidth:1479},x:{x_min:15,x_max:1009,y_min:0,y_max:1062,ha:1062,leftSideBearing:15,advanceWidth:1024},y:{x_min:33,x_max:1006,y_min:-431,y_max:1062,ha:1493,leftSideBearing:33,advanceWidth:1024},z:{x_min:40,x_max:980,y_min:0,y_max:1062,ha:1062,leftSideBearing:40,advanceWidth:1024},"{":{x_min:57,x_max:636,y_min:-431,y_max:1491,ha:1922,leftSideBearing:57,advanceWidth:684},"|":{x_min:188,x_max:345,y_min:-431,y_max:1491,ha:1922,leftSideBearing:188,advanceWidth:532},"}":{x_min:47,x_max:626,y_min:-431,y_max:1491,ha:1922,leftSideBearing:47,advanceWidth:684},"~":{x_min:87,x_max:1110,y_min:557,y_max:885,ha:328,leftSideBearing:87,advanceWidth:1196}},fontFamily:"sans-serif",resolution:2048,generatedOn:"2020-10-18T18:48:11.823Z"},zi={smufl:!1,name:"SERIF",spacing:50,Description:"Built-in serif font",bold:!0,italic:!0,monospaced:!1,serifs:!0,glyphs:{0:{x_min:49,x_max:975,y_min:-27,y_max:1383,ha:1410,leftSideBearing:49,advanceWidth:1024},1:{x_min:227,x_max:811,y_min:0,y_max:1383,ha:1383,leftSideBearing:227,advanceWidth:1024},2:{x_min:61,x_max:965,y_min:0,y_max:1383,ha:1383,leftSideBearing:61,advanceWidth:1024},3:{x_min:88,x_max:883,y_min:-27,y_max:1383,ha:1410,leftSideBearing:88,advanceWidth:1024},4:{x_min:25,x_max:967,y_min:0,y_max:1384,ha:1384,leftSideBearing:25,advanceWidth:1024},5:{x_min:66,x_max:898,y_min:-27,y_max:1409,ha:1436,leftSideBearing:66,advanceWidth:1024},6:{x_min:70,x_max:958,y_min:-27,y_max:1401,ha:1428,leftSideBearing:70,advanceWidth:1024},7:{x_min:41,x_max:920,y_min:-16,y_max:1356,ha:1372,leftSideBearing:41,advanceWidth:1024},8:{x_min:115,x_max:911,y_min:-27,y_max:1383,ha:1410,leftSideBearing:115,advanceWidth:1024},9:{x_min:61,x_max:940,y_min:-41,y_max:1383,ha:1424,leftSideBearing:61,advanceWidth:1024}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:512},"!":{x_min:266,x_max:488,y_min:-22,y_max:1383,ha:1405,leftSideBearing:266,advanceWidth:682},'"':{x_min:157.2000021972655,x_max:678.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:157,advanceWidth:836},"#":{x_min:10,x_max:1016,y_min:-1,y_max:1356,ha:1357,leftSideBearing:10,advanceWidth:1024},$:{x_min:90,x_max:936,y_min:-180,y_max:1492,ha:1672,leftSideBearing:90,advanceWidth:1024},"%":{x_min:125,x_max:1581,y_min:-30,y_max:1388,ha:1418,leftSideBearing:125,advanceWidth:1706},"&":{x_min:86,x_max:1536,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1593},"'":{x_min:97.20000219726548,x_max:273.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:97,advanceWidth:369},"(":{x_min:98,x_max:623,y_min:-363,y_max:1383,ha:1746,leftSideBearing:98,advanceWidth:682},")":{x_min:59,x_max:584,y_min:-363,y_max:1383,ha:1746,leftSideBearing:59,advanceWidth:682},"*":{x_min:137.96078522291893,x_max:886.039214777081,y_min:543,y_max:1383,ha:840,leftSideBearing:137,advanceWidth:1024},"+":{x_min:61,x_max:1093,y_min:2,y_max:1034,ha:1032,leftSideBearing:61,advanceWidth:1155},",":{x_min:115,x_max:399,y_min:-291,y_max:208,ha:499,leftSideBearing:115,advanceWidth:512},"-":{x_min:80,x_max:584,y_min:396,y_max:525,ha:129,leftSideBearing:80,advanceWidth:682},".":{x_min:143,x_max:371,y_min:-22,y_max:205,ha:227,leftSideBearing:143,advanceWidth:512},"/":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},":":{x_min:166,x_max:394,y_min:-22,y_max:943,ha:965,leftSideBearing:166,advanceWidth:569},";":{x_min:164,x_max:448,y_min:-290,y_max:943,ha:1233,leftSideBearing:164,advanceWidth:569},"<":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"=":{x_min:61,x_max:1093,y_min:246,y_max:791,ha:545,leftSideBearing:61,advanceWidth:1155},">":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"?":{x_min:139,x_max:848,y_min:-15,y_max:1383,ha:1398,leftSideBearing:139,advanceWidth:909},"@":{x_min:238,x_max:1657,y_min:-29,y_max:1386,ha:1415,leftSideBearing:238,advanceWidth:1886},A:{x_min:31,x_max:1445,y_min:0,y_max:1380,ha:1380,leftSideBearing:31,advanceWidth:1479},B:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},C:{x_min:57,x_max:1296,y_min:-28,y_max:1383,ha:1411,leftSideBearing:57,advanceWidth:1366},D:{x_min:33,x_max:1403,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1479},E:{x_min:25,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},F:{x_min:25,x_max:1119,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1139},G:{x_min:66,x_max:1452,y_min:-28,y_max:1383,ha:1411,leftSideBearing:66,advanceWidth:1479},H:{x_min:39,x_max:1438,y_min:0,y_max:1356,ha:1356,leftSideBearing:39,advanceWidth:1479},I:{x_min:37,x_max:642,y_min:0,y_max:1356,ha:1356,leftSideBearing:37,advanceWidth:682},J:{x_min:20,x_max:758,y_min:-28,y_max:1356,ha:1384,leftSideBearing:20,advanceWidth:797},K:{x_min:70,x_max:1479,y_min:0,y_max:1356,ha:1356,leftSideBearing:70,advanceWidth:1479},L:{x_min:25,x_max:1224,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},M:{x_min:25,x_max:1768,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1821},N:{x_min:25,x_max:1450,y_min:-22,y_max:1356,ha:1378,leftSideBearing:25,advanceWidth:1479},O:{x_min:70,x_max:1409,y_min:-28,y_max:1383,ha:1411,leftSideBearing:70,advanceWidth:1479},P:{x_min:33,x_max:1110,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1139},Q:{x_min:70,x_max:1435,y_min:-364.28571588721996,y_max:1383,ha:1747.28571588722,leftSideBearing:70,advanceWidth:1479},R:{x_min:35,x_max:1347,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},S:{x_min:86,x_max:1006,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1139},T:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1251},U:{x_min:29,x_max:1444,y_min:-28,y_max:1356,ha:1384,leftSideBearing:29,advanceWidth:1479},V:{x_min:33,x_max:1428,y_min:-22,y_max:1356,ha:1378,leftSideBearing:33,advanceWidth:1479},W:{x_min:10,x_max:1906,y_min:-22,y_max:1356,ha:1378,leftSideBearing:10,advanceWidth:1933},X:{x_min:20,x_max:1449,y_min:0,y_max:1356,ha:1356,leftSideBearing:20,advanceWidth:1479},Y:{x_min:45,x_max:1441,y_min:0,y_max:1356,ha:1356,leftSideBearing:45,advanceWidth:1479},Z:{x_min:18,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:18,advanceWidth:1251},"[":{x_min:180,x_max:612,y_min:-319,y_max:1355,ha:1674,leftSideBearing:180,advanceWidth:682},"\\":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},"]":{x_min:70,x_max:502,y_min:-319,y_max:1355,ha:1674,leftSideBearing:70,advanceWidth:682},"^":{x_min:49,x_max:914,y_min:608,y_max:1355,ha:747,leftSideBearing:49,advanceWidth:961},_:{x_min:0,x_max:1024,y_min:-255,y_max:-153,ha:102,leftSideBearing:0,advanceWidth:1024},"`":{x_min:39,x_max:499,y_min:1037,y_max:1392.509803639748,ha:355.50980363974804,leftSideBearing:39,advanceWidth:682},a:{x_min:76,x_max:905,y_min:-20,y_max:942,ha:962,leftSideBearing:76,advanceWidth:909},b:{x_min:6,x_max:958,y_min:-20,y_max:1399,ha:1419,leftSideBearing:6,advanceWidth:1024},c:{x_min:51,x_max:843,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},d:{x_min:55,x_max:1006,y_min:-20,y_max:1399,ha:1419,leftSideBearing:55,advanceWidth:1024},e:{x_min:51,x_max:868,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},f:{x_min:41,x_max:783,y_min:0,y_max:1399,ha:1399,leftSideBearing:41,advanceWidth:682},g:{x_min:57,x_max:963,y_min:-446,y_max:942,ha:1388,leftSideBearing:57,advanceWidth:1024},h:{x_min:18,x_max:997,y_min:0,y_max:1399,ha:1399,leftSideBearing:18,advanceWidth:1024},i:{x_min:33,x_max:516,y_min:0,y_max:1399,ha:1399,leftSideBearing:33,advanceWidth:569},j:{x_min:-142,x_max:397,y_min:-446,y_max:1399,ha:1845,leftSideBearing:-142,advanceWidth:569},k:{x_min:14,x_max:1029,y_min:0,y_max:1399,ha:1399,leftSideBearing:14,advanceWidth:1024},l:{x_min:39,x_max:523,y_min:0,y_max:1399,ha:1399,leftSideBearing:39,advanceWidth:569},m:{x_min:33,x_max:1587,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1593},n:{x_min:33,x_max:993,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1024},o:{x_min:59,x_max:963,y_min:-20,y_max:942,ha:962,leftSideBearing:59,advanceWidth:1024},p:{x_min:10,x_max:964,y_min:-443,y_max:944,ha:1387,leftSideBearing:10,advanceWidth:1024},q:{x_min:49,x_max:999,y_min:-443,y_max:942.0135137169275,ha:1385.0135137169275,leftSideBearing:49,advanceWidth:1024},r:{x_min:10,x_max:685,y_min:0,y_max:944,ha:944,leftSideBearing:10,advanceWidth:682},s:{x_min:104,x_max:713,y_min:-20,y_max:942.0263161804552,ha:962.0263161804552,leftSideBearing:104,advanceWidth:797},t:{x_min:27,x_max:572,y_min:-18,y_max:1186,ha:1204,leftSideBearing:27,advanceWidth:569},u:{x_min:18,x_max:981,y_min:-21,y_max:921,ha:942,leftSideBearing:18,advanceWidth:1024},v:{x_min:39,x_max:976,y_min:-28,y_max:921,ha:949,leftSideBearing:39,advanceWidth:1024},w:{x_min:43,x_max:1423,y_min:-28,y_max:921,ha:949,leftSideBearing:43,advanceWidth:1479},x:{x_min:35,x_max:989,y_min:0,y_max:921,ha:921,leftSideBearing:35,advanceWidth:1024},y:{x_min:29,x_max:976,y_min:-445,y_max:921,ha:1366,leftSideBearing:29,advanceWidth:1024},z:{x_min:55,x_max:855,y_min:0,y_max:921,ha:921,leftSideBearing:55,advanceWidth:909},"{":{x_min:205,x_max:717,y_min:-377,y_max:1397,ha:1774,leftSideBearing:205,advanceWidth:983},"|":{x_min:137,x_max:273,y_min:-512,y_max:1535,ha:2047,leftSideBearing:137,advanceWidth:410},"}":{x_min:266,x_max:778,y_min:-377,y_max:1397,ha:1774,leftSideBearing:266,advanceWidth:983},"~":{x_min:82,x_max:1028,y_min:380,y_max:666,ha:286,leftSideBearing:82,advanceWidth:1108}},fontFamily:"serif",resolution:2048,generatedOn:"2020-10-18T19:03:12.514Z"};class Gi{static sortAndUnique(t,e,i){if(t.length>1){const n=[];let s;t.sort(e);for(let e=0;e {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\nexport { Fraction };\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\nexport { Font };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Element };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave -= options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\nexport { Tables };\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\nexport { Glyph };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accidentalLinePositionsAndSpaceNeeds = [];\n let prevNote = undefined;\n let extraXSpaceNeededForLeftDisplacedNotehead = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n // If the current extra left-space needed isn't as big as this note's,\n // then we need to use this note's.\n extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accidentalLinePositionsAndSpaceNeeds.push({\n y,\n line: accLine,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n spacingBetweenStaveLines: lineSpace,\n });\n }\n else {\n accidentalLinePositionsAndSpaceNeeds.push({\n line: props.line,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n });\n }\n }\n // Sort accidentals by line number.\n accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line);\n const staveLineAccidentalLayoutMetrics = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let maxExtraXSpaceNeeded = 0;\n // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics)\n // from accidentalLinePositionsAndSpaceNeeds\n for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) {\n const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i];\n const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1];\n let currentLineMetric;\n // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric\n if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) {\n currentLineMetric = {\n line: accidentalLinePositionAndSpaceNeeds.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n };\n staveLineAccidentalLayoutMetrics.push(currentLineMetric);\n }\n else {\n currentLineMetric = priorLineMetric;\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' &&\n accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') {\n currentLineMetric.flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') {\n currentLineMetric.dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n currentLineMetric.numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing;\n // if this extraXSpaceNeeded is the largest so far, use it as the starting point for\n // all accidental columns.\n maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded);\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd])\n ? 'a'\n : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) {\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = leftShift + maxExtraXSpaceNeeded;\n columnXOffsets[0] = leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded;\n accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift = totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\nexport { Accidental };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nclass Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\nexport { Stem };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\nexport { TextFormatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\nexport { Annotation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\nexport { Articulation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\nexport { ChordSymbol };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n this.barline = new Barline(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n ctx.openGroup('barnote', this.getAttribute('id'));\n this.barline.setType(this.type);\n this.barline.setX(this.getAbsoluteX());\n this.barline.draw(this.checkStave());\n ctx.closeGroup();\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\nexport { BarNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nclass Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Bend };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { FretHandFinger };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\nexport { NoteHead };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n return this._noteHeads;\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\nexport { StaveNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { StaveTie };\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\nexport { GraceNoteGroup };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - stave.getNoteStartX();\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const tickables = note.getVoice().getTickables();\n const index = tickables.indexOf(note);\n const nextContext = index + 1 < tickables.length ? tickables[index + 1].checkTickContext() : undefined;\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - glyphX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\nexport { Ornament };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = (_b = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : Note.getPoint('gracenote');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height, devicePixelRatio) {\n var _a;\n const canvas = this.context2D.canvas;\n const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : globalObject().devicePixelRatio) !== null && _a !== void 0 ? _a : 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / dpr) | 0;\n height = (height / dpr) | 0;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(dpr, dpr);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\nexport { SVGContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\nexport { Renderer };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\nexport { TextNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { Volta };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n /**\n * The modifier context's left_shift state.\n */\n const left_shift = state.left_shift;\n /**\n * The modifier context's right_shift state.\n */\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let extraXSpaceForDisplacedNotehead = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (pos === Modifier.Position.LEFT) {\n extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: extraXSpaceForDisplacedNotehead,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n let num_x_shift = 0;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + extraXSpaceForDisplacedNotehead);\n num_x_shift = num_width; // spacing\n x_widthL = Math.max(num_x_shift, x_widthL);\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_x_shift += num_width; // spacing\n x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StringNumber };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { Stroke };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\nexport { ModifierContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\nexport { Clef };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nclass KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\nexport { KeySignature };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nclass Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n var _a;\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', {\n category: 'coda',\n });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: Tables.NOTATION_FONT_SCALE / 3,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\nexport { Repetition };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveSection };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveTempo };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { StaveText };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nclass Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n /**\n * treat the stave as if the clef is clefSpec, but don't display the clef\n */\n setClefLines(clefSpec) {\n this.clef = clefSpec;\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Stave };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\nexport { StaveConnector };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\nexport { Formatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\nexport { Crescendo };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\nexport { Parser };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\nexport { EasyScore };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\nexport { PedalMarking };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\nexport { StaveLine };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\nexport { TextBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\nexport { TextDynamics };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\nexport { VibratoBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Factory };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\nexport { StaveHairpin };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { TabSlide };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n doubleCBanjo: 'D/5,C/5,G/4,C/4,G/5',\n doubleDBanjo: 'E/5,D/5,A/4,D/4,A/5',\n sawmillBanjo: 'D/5,C/5,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static getMusicFontStack() {\n return Tables.MUSIC_FONT_STACK;\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\nexport { Flow };\n","export const VERSION = '4.2.6';\nexport const ID = '103aad2b14837418c5e96c9e078edd036fcddf60';\nexport const DATE = '2024-08-26T20:16:17.134Z';\n","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const PetalumaFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 508,\n y_min: 0,\n y_max: 370,\n ha: 370,\n o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 496,\n y_min: -393,\n y_max: 0,\n ha: 393,\n o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 56,\n y_min: 877,\n y_max: 1122,\n ha: 245,\n o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 568,\n y_min: 0,\n y_max: 621,\n ha: 621,\n o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z',\n },\n segno: {\n x_min: 0,\n x_max: 798,\n y_min: -65,\n y_max: 806,\n ha: 871,\n o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z',\n },\n coda: {\n x_min: 0,\n x_max: 1380,\n y_min: -196,\n y_max: 1037,\n ha: 1233,\n o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z',\n },\n gClef: {\n x_min: 0,\n x_max: 664,\n y_min: -559,\n y_max: 1009,\n ha: 1568,\n o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z',\n },\n cClef: {\n x_min: 0,\n x_max: 731,\n y_min: -543,\n y_max: 543,\n ha: 1086,\n o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z',\n },\n fClef: {\n x_min: 0,\n x_max: 776,\n y_min: -496,\n y_max: 216,\n ha: 712,\n o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 379,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 438,\n y_min: -768,\n y_max: 767,\n ha: 1535,\n o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 513,\n y_min: -358,\n y_max: 359,\n ha: 717,\n o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 283,\n y_min: -364,\n y_max: 366,\n ha: 730,\n o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 660,\n y_min: -379,\n y_max: 382,\n ha: 761,\n o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 540,\n y_min: -392,\n y_max: 392,\n ha: 784,\n o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 633,\n y_min: -490,\n y_max: 491,\n ha: 981,\n o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 583,\n y_min: -389,\n y_max: 389,\n ha: 778,\n o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 565,\n y_min: -363,\n y_max: 363,\n ha: 726,\n o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 592,\n y_min: -345,\n y_max: 345,\n ha: 690,\n o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 504,\n y_min: -428,\n y_max: 428,\n ha: 856,\n o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 494,\n y_min: -421,\n y_max: 421,\n ha: 842,\n o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z',\n },\n timeSigCommon: {\n x_min: 20,\n x_max: 585,\n y_min: -298,\n y_max: 294,\n ha: 592,\n o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z',\n },\n timeSigCutCommon: {\n x_min: 20,\n x_max: 695,\n y_min: -687,\n y_max: 687,\n ha: 1374,\n o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 661,\n y_min: -358,\n y_max: 358,\n ha: 716,\n o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 418,\n y_min: -197,\n y_max: 199,\n ha: 396,\n o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 662,\n y_min: -54,\n y_max: 55,\n ha: 109,\n o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 274,\n y_min: -723,\n y_max: 725,\n ha: 1448,\n o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 154,\n y_min: -422,\n y_max: 422,\n ha: 844,\n o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z',\n },\n timeSigParensLeft: {\n x_min: 1,\n x_max: 400,\n y_min: -728,\n y_max: 728,\n ha: 1456,\n o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 173,\n y_min: -405,\n y_max: 404,\n ha: 809,\n o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 614,\n y_min: -223,\n y_max: 223,\n ha: 446,\n o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 380,\n y_min: -186,\n y_max: 165,\n ha: 351,\n o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -174,\n y_max: 175,\n ha: 349,\n o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 730,\n y_min: -266,\n y_max: 267,\n ha: 533,\n o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 506,\n y_min: -143,\n y_max: 144,\n ha: 287,\n o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 421,\n y_min: -146,\n y_max: 151,\n ha: 297,\n o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 289,\n y_min: -156,\n y_max: 157,\n ha: 313,\n o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -220,\n y_max: 219,\n ha: 439,\n o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 323,\n y_min: -190,\n y_max: 184,\n ha: 374,\n o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 309,\n y_min: -179,\n y_max: 179,\n ha: 358,\n o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 344,\n y_min: -179,\n y_max: 175,\n ha: 354,\n o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 672,\n y_min: -291,\n y_max: 291,\n ha: 582,\n o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z',\n },\n noteheadCircledWhole: {\n x_min: -50,\n x_max: 472,\n y_min: -231,\n y_max: 232,\n ha: 463,\n o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z',\n },\n noteheadCircledHalf: {\n x_min: -50,\n x_max: 393,\n y_min: -175,\n y_max: 175,\n ha: 350,\n o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z',\n },\n noteheadCircledBlack: {\n x_min: -70,\n x_max: 326,\n y_min: -168,\n y_max: 192,\n ha: 360,\n o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 474,\n y_min: -209,\n y_max: 211,\n ha: 420,\n o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 350,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 342,\n y_min: -130,\n y_max: 132,\n ha: 262,\n o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 697,\n y_min: -290,\n y_max: 290,\n ha: 580,\n o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z',\n },\n noteheadSlashedWhole1: {\n x_min: -76,\n x_max: 498,\n y_min: -168,\n y_max: 168,\n ha: 336,\n o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z',\n },\n noteheadSlashedHalf1: {\n x_min: -79,\n x_max: 471,\n y_min: -184,\n y_max: 184,\n ha: 368,\n o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z',\n },\n noteheadSlashedBlack1: {\n x_min: -110,\n x_max: 452,\n y_min: -190,\n y_max: 190,\n ha: 380,\n o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 697,\n y_min: -295,\n y_max: 295,\n ha: 590,\n o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z',\n },\n noteheadSlashedWhole2: {\n x_min: -83,\n x_max: 510,\n y_min: -201,\n y_max: 198,\n ha: 399,\n o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 454,\n y_min: -188,\n y_max: 188,\n ha: 376,\n o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z',\n },\n noteheadSlashedBlack2: {\n x_min: -84,\n x_max: 405,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 429,\n y_min: -221,\n y_max: 221,\n ha: 442,\n o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 271,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z',\n },\n noteheadParenthesis: {\n x_min: -70,\n x_max: 329,\n y_min: -196,\n y_max: 201,\n ha: 397,\n o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z',\n },\n noteheadParenthesisRight: {\n x_min: -30,\n x_max: 82,\n y_min: -199,\n y_max: 206,\n ha: 405,\n o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 106,\n y_min: -197,\n y_max: 197,\n ha: 394,\n o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 328,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 391,\n y_min: -142,\n y_max: 142,\n ha: 284,\n o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 398,\n y_min: -139,\n y_max: 140,\n ha: 279,\n o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 96,\n y_min: -57,\n y_max: 57,\n ha: 114,\n o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z',\n },\n tremolo1: {\n x_min: -158,\n x_max: 156,\n y_min: -88,\n y_max: 88,\n ha: 176,\n o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 261,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 327,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 327,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 268,\n y_min: -849,\n y_max: 149,\n ha: 999,\n o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z',\n },\n flag32ndDown: {\n x_min: -3,\n x_max: 268,\n y_min: -169,\n y_max: 829,\n ha: 999,\n o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z',\n },\n flag64thUp: {\n x_min: -4,\n x_max: 282,\n y_min: -824,\n y_max: 347,\n ha: 1171,\n o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z',\n },\n flag64thDown: {\n x_min: -5,\n x_max: 281,\n y_min: -375,\n y_max: 796,\n ha: 1171,\n o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 252,\n y_min: -804,\n y_max: 530,\n ha: 1334,\n o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z',\n },\n flag128thDown: {\n x_min: -1,\n x_max: 252,\n y_min: -580,\n y_max: 754,\n ha: 1334,\n o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z',\n },\n accidentalFlat: {\n x_min: 1,\n x_max: 209,\n y_min: -208,\n y_max: 472,\n ha: 680,\n o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 214,\n y_min: -456,\n y_max: 462,\n ha: 918,\n o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z',\n },\n accidentalSharp: {\n x_min: -22,\n x_max: 390,\n y_min: -384,\n y_max: 383,\n ha: 767,\n o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 287,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 359,\n y_min: -220,\n y_max: 446,\n ha: 666,\n o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 130,\n y_min: -270,\n y_max: 268,\n ha: 538,\n o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 139,\n y_min: -275,\n y_max: 277,\n ha: 552,\n o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 208,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: -23,\n x_max: 388,\n y_min: -373,\n y_max: 445,\n ha: 818,\n o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -248,\n y_max: 432,\n ha: 680,\n o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: -1,\n x_max: 467,\n y_min: -460,\n y_max: 350,\n ha: 810,\n o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z',\n },\n accidentalBakiyeFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -236,\n y_max: 444,\n ha: 680,\n o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 359,\n y_min: -420,\n y_max: 343,\n ha: 763,\n o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 303,\n y_min: -462,\n y_max: 180,\n ha: 642,\n o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 434,\n y_min: -295,\n y_max: 325,\n ha: 620,\n o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 425,\n y_min: 0,\n y_max: 326,\n ha: 326,\n o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 425,\n y_min: -326,\n y_max: 0,\n ha: 326,\n o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 471,\n y_min: 0,\n y_max: 56,\n ha: 56,\n o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 471,\n y_min: -59,\n y_max: -3,\n ha: 56,\n o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z',\n },\n articStaccatoAbove: {\n x_min: 1,\n x_max: 112,\n y_min: 0,\n y_max: 156,\n ha: 156,\n o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z',\n },\n articStaccatoBelow: {\n x_min: 1,\n x_max: 112,\n y_min: -156,\n y_max: 0,\n ha: 156,\n o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 139,\n y_min: 0,\n y_max: 411,\n ha: 411,\n o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 139,\n y_min: -411,\n y_max: 0,\n ha: 411,\n o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z',\n },\n articMarcatoAbove: {\n x_min: 0,\n x_max: 396,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 396,\n y_min: -328,\n y_max: 0,\n ha: 328,\n o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 472,\n y_min: 2,\n y_max: 454,\n ha: 452,\n o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 519,\n y_min: -430,\n y_max: -1,\n ha: 429,\n o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 591,\n y_min: -6,\n y_max: 337,\n ha: 343,\n o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 602,\n y_min: -335,\n y_max: 7,\n ha: 342,\n o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: -14,\n y_max: 437,\n ha: 451,\n o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 686,\n y_min: -427,\n y_max: 30,\n ha: 457,\n o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 711,\n y_min: -31,\n y_max: 496,\n ha: 527,\n o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 697,\n y_min: -475,\n y_max: 13,\n ha: 488,\n o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 545,\n y_min: -18,\n y_max: 348,\n ha: 366,\n o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 565,\n y_min: -335,\n y_max: 10,\n ha: 345,\n o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 148,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z',\n },\n breathMarkUpbow: {\n x_min: 0,\n x_max: 254,\n y_min: 0,\n y_max: 595,\n ha: 595,\n o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z',\n },\n caesura: {\n x_min: 0,\n x_max: 566,\n y_min: 0,\n y_max: 562,\n ha: 563,\n o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 386,\n y_min: -10,\n y_max: 584,\n ha: 594,\n o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 366,\n y_min: -255,\n y_max: 255,\n ha: 510,\n o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 249,\n ha: 249,\n o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z',\n },\n restWhole: {\n x_min: 1,\n x_max: 500,\n y_min: -120,\n y_max: 14,\n ha: 134,\n o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z',\n },\n restWholeLegerLine: {\n x_min: -197,\n x_max: 685,\n y_min: -157,\n y_max: 29,\n ha: 186,\n o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 518,\n y_min: 0,\n y_max: 162,\n ha: 162,\n o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z',\n },\n restHalfLegerLine: {\n x_min: -120,\n x_max: 448,\n y_min: -20,\n y_max: 143,\n ha: 163,\n o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 263,\n y_min: -415,\n y_max: 415,\n ha: 830,\n o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 289,\n y_min: -260,\n y_max: 261,\n ha: 521,\n o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 333,\n y_min: -328,\n y_max: 244,\n ha: 572,\n o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 347,\n y_min: -498,\n y_max: 483,\n ha: 981,\n o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 428,\n y_min: -720,\n y_max: 474,\n ha: 1194,\n o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z',\n },\n rest128th: {\n x_min: 1,\n x_max: 491,\n y_min: -711,\n y_max: 719,\n ha: 1430,\n o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z',\n },\n dynamicPiano: {\n x_min: -49,\n x_max: 327,\n y_min: -142,\n y_max: 515,\n ha: 657,\n o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z',\n },\n dynamicMezzo: {\n x_min: -18,\n x_max: 559,\n y_min: -50,\n y_max: 365,\n ha: 415,\n o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z',\n },\n dynamicForte: {\n x_min: -144,\n x_max: 311,\n y_min: -115,\n y_max: 504,\n ha: 619,\n o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z',\n },\n dynamicRinforzando: {\n x_min: -75,\n x_max: 322,\n y_min: -90,\n y_max: 325,\n ha: 415,\n o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 296,\n y_min: 0,\n y_max: 379,\n ha: 379,\n o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z',\n },\n dynamicZ: {\n x_min: -43,\n x_max: 331,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z',\n },\n ornamentTrill: {\n x_min: 1,\n x_max: 551,\n y_min: -18,\n y_max: 539,\n ha: 557,\n o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 574,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 574,\n y_min: -106,\n y_max: 405,\n ha: 511,\n o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 700,\n y_min: 0,\n y_max: 497,\n ha: 497,\n o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 747,\n y_min: 0,\n y_max: 243,\n ha: 243,\n o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 982,\n y_min: 0,\n y_max: 224,\n ha: 224,\n o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1066,\n y_min: -50,\n y_max: 533,\n ha: 583,\n o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 1088,\n y_min: -380,\n y_max: 252,\n ha: 632,\n o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1185,\n y_min: -380,\n y_max: 465,\n ha: 845,\n o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 1003,\n y_min: -20,\n y_max: 521,\n ha: 541,\n o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1246,\n y_min: -30,\n y_max: 296,\n ha: 326,\n o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1226,\n y_min: -237,\n y_max: 436,\n ha: 673,\n o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 833,\n y_min: -309,\n y_max: 319,\n ha: 628,\n o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z',\n },\n brassScoop: {\n x_min: 0,\n x_max: 312,\n y_min: -390,\n y_max: 28,\n ha: 418,\n o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 476,\n y_min: -50,\n y_max: 333,\n ha: 383,\n o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z',\n },\n brassFallLipShort: {\n x_min: 0,\n x_max: 298,\n y_min: -344,\n y_max: 65,\n ha: 409,\n o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 807,\n y_min: 0,\n y_max: 838,\n ha: 838,\n o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 791,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 381,\n y_min: 0,\n y_max: 367,\n ha: 367,\n o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 274,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z',\n },\n brassMuteOpen: {\n x_min: 1,\n x_max: 313,\n y_min: 0,\n y_max: 309,\n ha: 309,\n o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 402,\n y_min: 0,\n y_max: 361,\n ha: 361,\n o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 646,\n y_min: 0,\n y_max: 212,\n ha: 212,\n o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z',\n },\n brassSmear: {\n x_min: 0,\n x_max: 334,\n y_min: 0,\n y_max: 151,\n ha: 151,\n o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 366,\n ha: 366,\n o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 219,\n y_min: 0,\n y_max: 489,\n ha: 489,\n o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 202,\n ha: 202,\n o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 201,\n y_min: 0,\n y_max: 325,\n ha: 325,\n o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 211,\n y_min: 0,\n y_max: 307,\n ha: 307,\n o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 271,\n y_min: 0,\n y_max: 284,\n ha: 284,\n o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 944,\n y_min: -13,\n y_max: 550,\n ha: 563,\n o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 437,\n y_min: 0,\n y_max: 461,\n ha: 461,\n o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 147,\n y_min: 0,\n y_max: 242,\n ha: 242,\n o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 300,\n y_min: 0,\n y_max: 176,\n ha: 176,\n o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z',\n },\n arpeggiatoUp: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 1459,\n ha: 1459,\n o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z',\n },\n arpeggiatoDown: {\n x_min: 0,\n x_max: 218,\n y_min: 0,\n y_max: 1440,\n ha: 1440,\n o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 599,\n y_min: -250,\n y_max: 175,\n ha: 425,\n o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 775,\n y_min: -247,\n y_max: 363,\n ha: 610,\n o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1374,\n y_min: -304,\n y_max: 304,\n ha: 608,\n o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 630,\n y_min: -225,\n y_max: 265,\n ha: 490,\n o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 506,\n y_min: 0,\n y_max: 500,\n ha: 500,\n o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z',\n },\n csymHalfDiminished: {\n x_min: -32,\n x_max: 496,\n y_min: -33,\n y_max: 492,\n ha: 525,\n o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 530,\n y_min: 0,\n y_max: 539,\n ha: 539,\n o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 593,\n y_min: 0,\n y_max: 569,\n ha: 569,\n o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 482,\n y_min: 193,\n y_max: 265,\n ha: 72,\n o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z',\n },\n csymParensLeftTall: {\n x_min: 0,\n x_max: 185,\n y_min: 0,\n y_max: 1034,\n ha: 1034,\n o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z',\n },\n csymParensRightTall: {\n x_min: -40,\n x_max: 189,\n y_min: 0,\n y_max: 1058,\n ha: 1058,\n o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 328,\n y_min: 2,\n y_max: 807,\n ha: 805,\n o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 829,\n ha: 829,\n o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 116,\n y_min: 0,\n y_max: 934,\n ha: 934,\n o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z',\n },\n csymParensRightVeryTall: {\n x_min: -20,\n x_max: 111,\n y_min: 0,\n y_max: 1009,\n ha: 1009,\n o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 990,\n y_min: -27,\n y_max: 1028,\n ha: 1054,\n o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 208,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 335,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 298,\n y_min: -218,\n y_max: 218,\n ha: 436,\n o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 284,\n y_min: -163,\n y_max: 163,\n ha: 326,\n o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z',\n },\n },\n fontFamily: 'Petaluma',\n resolution: 1000,\n generatedOn: '2022-12-18T09:07:50.817Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { PetalumaFont } from './petaluma_glyphs';\nconst petalumaChordMetrics = {\n csymDiminished: {\n leftSideBearing: -95,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: -25,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 150,\n },\n csymParensRightTall: {\n leftSideBearing: 40,\n advanceWidth: 189,\n yOffset: 150,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 210,\n yOffset: 250,\n },\n csymParensRightVeryTall: {\n leftSideBearing: -100,\n advanceWidth: 111,\n yOffset: 250,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 100,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 0,\n advanceWidth: 425,\n yOffset: -422,\n },\n accidentalFlat: {\n leftSideBearing: -10,\n advanceWidth: 228,\n yOffset: -284,\n },\n};\nexport function loadPetaluma() {\n const metrics = JSON.parse(JSON.stringify(CommonMetrics));\n const chordMetrics = metrics.chordSymbol;\n if (chordMetrics) {\n chordMetrics.glyphs = petalumaChordMetrics;\n }\n Font.load('Petaluma', PetalumaFont, metrics);\n}\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\nexport { Vex };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-petaluma.ts is the entry point for vexflow-petaluma.js.\n// This version bundles the Petaluma music engraving font.\nimport { Flow } from '../src/flow';\nimport { loadCustom } from '../src/fonts/load_custom';\nimport { loadPetaluma } from '../src/fonts/load_petaluma';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadPetaluma();\nloadCustom();\nFlow.setMusicFont('Petaluma', 'Custom');\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { CustomFont } from './custom_glyphs';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","Function","e","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","isCategory","category","checkAncestors","constructorFcn","constructor","CATEGORY","getPrototypeOf","isAccidental","Category","Accidental","isAnnotation","Annotation","isBarline","Barline","isDot","Dot","isGraceNote","GraceNote","isGraceNoteGroup","GraceNoteGroup","isNote","Note","isRenderContext","RenderContext","isStaveNote","StaveNote","isStemmableNote","StemmableNote","isTabNote","TabNote","RuntimeError","Error","code","message","super","globalObject","self","defined","x","undefined","log","block","args","line","Array","slice","join","console","warn","err","stack","midLine","a","b","mid_line","n","parseInt","prefix","text","normalizeAngle","Math","PI","sumArray","arr","reduce","Fraction","GCD","Number","isNaN","t","LCM","LCMM","length","shift","numerator","denominator","set","simplify","u","d","gcd","add","param1","param2","otherNumerator","otherDenominator","getNumeratorAndDenominator","lcm","subtract","multiply","divide","equals","compare","__staticFractionA","copy","__staticFractionB","greaterThan","greaterThanEquals","lessThan","lessThanEquals","clone","other","quotient","floor","remainder","makeAbs","abs","toString","toSimplifiedString","__staticFractionTmp","toMixedString","s","q","f","parse","str","i","split","BoundingBox","that","y","w","h","getX","getY","getW","getH","setX","setY","setW","setH","move","mergeWith","boundingBox","new_x","new_y","new_w","max","new_h","BoundingBoxComputation","x1","NaN","y1","x2","y2","getX1","getY1","width","height","addPoint","addX","addY","addQuadraticCurve","p0x","p0y","p1x","p1y","p2x","p2y","p01x","denom","it","p01y","addBezierCurve","p3x","p3y","p0","p1","p2","p3","pow","c","b2ac","t1","sqrt","t2","FontWeight","FontStyle","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","fontParser","Fonts","Font","convertSizeToPixelValue","fontSize","SIZE","_a","scaleToPxFrom","pt","parseFloat","unit","replace","toLowerCase","convertSizeToPointValue","validate","size","weight","style","fromCSSString","family","SANS_SERIF","NORMAL","cssFontShorthand","document","createElement","font","fontFamily","fontWeight","fontStyle","toCSSString","fontInfo","st","trim","wt","sz","scaleSize","scaleFactor","isBold","parsedWeight","isItalic","ITALIC","loadWebFont","fontName","woffURL","includeWoff2","fontFace","FontFace","load","fonts","loadWebFonts","host","WEB_FONT_HOST","files","WEB_FONT_FILES","fontPath","data","metrics","setData","setMetrics","name","getName","getData","getMetrics","hasData","getResolution","resolution","getGlyphs","glyphs","lookupMetric","defaultValue","keyParts","currObj","SERIF","px","em","in","mm","cm","PetalumaScript","Index","id","type","class","Registry","getDefaultRegistry","defaultRegistry","enableDefaultRegistry","registry","disableDefaultRegistry","index","clear","setIndexValue","elem","updateIndex","oldValue","getElementById","getAttribute","register","setAttribute","onRegister","_b","getElementsByAttribute","attribute","index_attr","index_attr_val","keys","map","k","getElementsByType","getElementsByClass","className","onUpdate","info","includes","Element","newID","ID","children","attrs","getCategory","rendered","addChildElement","child","push","setStyle","setGroupStyle","forEach","getStyle","applyStyle","context","save","shadowColor","setShadowColor","shadowBlur","setShadowBlur","fillStyle","setFillStyle","strokeStyle","setStrokeStyle","lineWidth","setLineWidth","restoreStyle","restore","drawWithStyle","checkContext","draw","hasClass","indexOf","addClass","removeClass","splice","isRendered","setRendered","getAttributes","getSVGElement","suffix","element","oldID","getBoundingBox","getContext","setContext","setFont","textFont","defaultTextFont","TEXT_FONT","fontIsObject","fontIsString","fontIsUndefined","sizeWeightStyleAreUndefined","assign","getFont","resetFont","setFontSize","getFontSize","fontSizeInPoints","fontSizeInPixels","RESOLUTION","durations","durationAliases","keySignatures","C","num","Am","F","acc","Dm","Bb","Gm","Eb","Cm","Ab","Fm","Db","Bbm","Gb","Ebm","Cb","Abm","G","Em","D","Bm","A","E","B","clefs","treble","line_shift","bass","tenor","alto","soprano","percussion","subbass","french","notesInfo","int_val","CN","accidental","CB","CBB","DN","DB","DBB","EN","EB","EBB","FN","FB","FBB","GN","GB","GBB","AN","AB","ABB","BN","BB","BBB","R","rest","X","octave","shift_right","accidentals","parenRightPaddingAdjustment","bb","db","bs","bss","bbs","ashs","afhf","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","articulations","between_lines","av","aboveCode","belowCode","ao","ah","am","ornaments","mordent","mordent_inverted","turn","turn_inverted","tr","upprall","downprall","prallup","pralldown","upmordent","downmordent","lineprall","prallprall","scoop","doit","fall","doitLong","fallLong","bend","plungerClosed","plungerOpen","flip","jazzTurn","smear","Tables","currentMusicFont","MUSIC_FONT_STACK","clefProperties","clef","keyProperties","keyOctaveGlyph","params","options","octave_shift","duration","sanitizeDuration","pieces","toUpperCase","stroke","int_value","customNoteHeadProps","glyphName","codeNoteHead","displaced","integerToNote","integer","noteValue","tabToGlyphProps","fret","scale","glyph","shift_y","glyphMetrics","Glyph","TABLATURE_FONT_SCALE","textWidth","getWidth","articulationCodes","artic","accidentalCodes","ornamentCodes","keySignature","spec","keySpec","notes","acc_list","getKeySignatures","hasKeySignature","durationNumber","durationToFraction","durationToNumber","durationToTicks","ticks","getGlyphProps","durationCodes","glyphTypeProperties","code_head","common","NOTATION_FONT_SCALE","UNISON","SOFTMAX_FACTOR","STEM_WIDTH","STEM_HEIGHT","STAVE_LINE_THICKNESS","RENDER_PRECISION_PLACES","SLASH_NOTEHEAD_WIDTH","STAVE_LINE_DISTANCE","TEXT_HEIGHT_OFFSET_HACK","accidentalMap","accidentalColumnsTable","second_on_bottom","spaced_out_tetrachord","spaced_out_pentachord","very_spaced_out_pentachord","spaced_out_hexachord","very_spaced_out_hexachord","unicode","sharp","String","fromCharCode","flat","natural","triangle","degrees","circle","validTypes","m","ci","cx","sf","sb","sq","tu","td","TIME4_4","num_beats","beat_value","stem","flag","stem_up_extension","stem_down_extension","tabnote_stem_up_extension","tabnote_stem_down_extension","dot_shiftY","line_above","line_below","position","ledger_code_head","beam_count","stem_beam_extension","code_flag_upstem","code_flag_downstem","OutlineCode","ModifierPosition","GlyphCacheEntry","fontStack","point","loadMetrics","bbox","getOutlineBoundingBox","outline","x_shift","y_shift","lookupFontMetric","GlyphOutline","originX","originY","precision","round","nextX","nextY","parts","MOVE","LINE","QUADRATIC","BEZIER","lookupGlyph","x_min","x_max","ha","cached_outline","renderGlyph","ctx","x_pos","y_pos","cache","lookup","customScale","renderOutline","go","beginPath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","fill","bboxComp","penX","penY","topGlyphs","botGlyphs","originShift","setOptions","reset","getCode","setPoint","setStave","stave","getXShift","setXShift","getYshift","setYShift","checkMetrics","metricsScale","setOriginX","xShift","setOriginY","yShift","setOrigin","render","xPos","yPos","checkStave","renderToStave","getYForGlyphs","Map","entries","CURRENT_CACHE_KEY","entry","Modifier","Position","PositionString","center","CENTER","above","ABOVE","below","BELOW","left","LEFT","right","RIGHT","text_line","spacingFromNextModifier","setWidth","getNote","note","checkAttachedNote","setNote","getIndex","checkIndex","setIndex","getModifierContext","modifierContext","checkModifierContext","setModifierContext","getPosition","setPosition","setTextLine","setSpacingFromNextModifier","getSpacingFromNextModifier","alignSubNotesWithNote","subNotes","tickContext","getTickContext","getStave","subNoteXOffset","modLeftPx","modRightPx","subNote","subTickContext","setXOffset","Music","NUM_TONES","canonical_notes","roots","root_values","root_indices","diatonic_intervals","diatonic_accidentals","unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","intervals","b2","min2","S","H","maj2","T","W","b3","min3","maj3","b5","aug4","b6","aug5","maj6","m7","min7","dom7","maj7","scales","major","minor","ionian","dorian","phyrgian","lydian","mixolydian","aeolian","locrian","scaleTypes","M","noteValues","root_index","cn","cb","cbb","dn","dbb","en","eb","ebb","fn","fb","fbb","gn","gb","gbb","an","ab","abb","bn","bbb","isValidNoteValue","isValidIntervalValue","interval","getNoteParts","noteString","match","exec","getKeyParts","keyString","getNoteValue","getIntervalValue","intervalString","getCanonicalNoteName","getCanonicalIntervalName","intervalValue","getRelativeNoteValue","direction","sum","getRelativeNoteName","rootValue","multiplier","reverse_interval","relativeNoteName","getScaleTones","tones","nextNote","getIntervalBetween","note1","note2","difference","createScaleMap","keySigParts","scaleName","keySigString","noteLocation","scaleMap","rootName","noteName","L","DEBUG","format","state","musicFont","noteheadAccidentalPadding","leftShift","left_shift","accidentalSpacing","additionalPadding","accidentalLinePositionsAndSpaceNeeds","prevNote","extraXSpaceNeededForLeftDisplacedNotehead","props","getKeyProps","getLeftDisplacedHeadPx","lineSpace","getSpacingBetweenLines","getYForLine","accLine","extraXSpaceNeeded","spacingBetweenStaveLines","sort","staveLineAccidentalLayoutMetrics","maxExtraXSpaceNeeded","accidentalLinePositionAndSpaceNeeds","priorLineMetric","currentLineMetric","flatLine","dblSharpLine","numAcc","column","totalColumns","noFurtherConflicts","groupStart","groupEnd","checkCollision","getGroupLine","getGroupLines","indexes","lineDifference","indexA","indexB","item","notColliding","indexPairs","every","line1","line2","groupLength","groupMember","endCase","patternLength","collisionDetected","columnWidths","columnXOffsets","totalShift","accCount","lastAccOnLine","clearance","clearanceRequired","collision","applyAccidentals","voices","tickPositions","tickNoteMap","voice","tickPosition","getTickables","shouldIgnoreTicks","notesAtPosition","getTicks","music","scaleMapKey","tickPos","tickables","modifiedPitches","processNote","isRest","staveNote","keyIndex","accidentalString","pitch","sameAccidental","previouslyModified","getModifiers","modifier","addModifier","getGraceNotes","render_options","font_scale","parenLeftPadding","parenRightPadding","cautionary","fontScale","parenLeft","parenRight","parenWidth","setAsCautionary","start","getModifierStartXY","accX","accY","Stem","UP","DOWN","WIDTH","HEIGHT","stem_up_y_offset","stem_down_y_offset","stem_up_y_base_offset","stem_down_y_base_offset","x_begin","x_end","y_top","y_bottom","stem_extension","stem_direction","hide","isStemlet","stemletHeight","renderHeightAdjustment","setNoteHeadXBounds","setDirection","setExtension","ext","getExtension","setYBounds","getHeight","y_offset","getExtents","isStemUp","ys","stemHeight","innerMostNoteheadY","min","outerMostNoteheadY","topY","baseY","setVisibility","isVisible","setStemlet","adjustHeightForFlag","adjustHeightForBeam","stem_x","stem_y","y_base_offset","stemletYOffset","openGroup","pointerBBox","closeGroup","TextFormatter","textWidthCache","textHeightCache","getFontFamilies","registeredFonts","formatterInfo","create","requestedFont","candidates","requestedFamilies","requestedFamily","startsWith","formatter","values","bold","italic","perfectMatch","find","partialMatch","fontSizeInPt","getInfo","registerInfo","overwrite","serifs","monospaced","superscriptOffset","subscriptOffset","maxSizeGlyph","cacheKey","updateParams","localHeightCache","updateCacheKey","BOLD","getGlyphMetrics","character","maxHeight","getWidthForCharacterInEm","advanceWidth","getYForCharacterInPx","rv","yMin","yMax","y_min","y_max","getYForStringInPx","extent","curY","getWidthForTextInEm","cachedWidths","getWidthForTextInPx","AnnotationHorizontalJustify","AnnotationVerticalJustify","minAnnotationPadding","annotations","leftWidth","rightWidth","maxLeftGlyphWidth","maxRightGlyphWidth","annotation","textFormatter","verticalSpaceNeeded","glyphWidth","horizontalJustification","stemDirection","hasStem","getStemDirection","lines","draw_stem","getStem","getNoteType","getNumLines","verticalJustification","VerticalJustify","TOP","noteLine","getLineNumber","leastString","top_text_line","BOTTOM","greatestString","curBottom","rightOverlap","right_shift","leftOverlap","setVerticalJustification","just","VerticalJustifyString","getJustification","setJustification","HorizontalJustifyString","text_width","text_height","getStemX","stem_ext","spacing","has_stem","checkStem","getYs","yt","getYForTopText","getYForBottomText","getTopLineTopY","extents","getStemExtents","fillText","HorizontalJustify","centerStem","CENTER_STEM","top","bottom","roundToNearestHalf","mathFn","isWithinLines","getRoundingFunction","ceil","isStaveOrGraceNote","Articulation","maxGlyphWidth","getIncrement","articulation","increment","curTop","maxWidth","articWidth","overlap","easyScoreHook","builder","articNameToCode","staccato","tenuto","accent","articString","getFactory","endsWith","setBetweenLines","betweenLines","textLine","canSitBetweenLines","staffSpace","isTab","shouldSitOutsideStaff","initialOffset","isOnStemTip","getInitialOffset","padding","stemTipY","stemBaseY","getTopY","INITIAL_OFFSET","getBottomY","offsetDirection","articLine","snappedLine","snapLineToStaff","setRawFont","drawDot","color","arc","closePath","Tickable","_preFormatted","_postFormatted","intrinsicTicks","tickMultiplier","modifiers","tupletStack","align_center","center_x_shift","ignore_ticks","formatterMetrics","freedom","iterations","space","used","mean","deviation","setIgnoreTicks","checkTickContext","getFormatterMetrics","getCenterXShift","isCenterAligned","setCenterXShift","centerXShift","setCenterAlignment","getVoice","setVoice","getTuplet","tuplet","getTupletStack","resetTuplet","noteCount","notesOccupied","getNoteCount","getNotesOccupied","applyTickMultiplier","pop","setTuplet","addToModifierContext","mc","addMember","setTickContext","tc","preFormat","preFormatted","postFormat","postFormatted","getIntrinsicTicks","setIntrinsicTicks","getTickMultiplier","setDuration","getAbsoluteX","plotMetrics","xStart","leftDisplacedHeadPx","xPre1","xAbs","xPost1","notePx","xPost2","rightDisplacedHeadPx","xEnd","xFreedomRight","xWidth","yy","spaceDeviation","parseDuration","durationString","dots","parseNoteStruct","noteStruct","durationProps","customTypes","currentTicks","parsedNoteStruct","JSON","stringify","keyProps","noteType","duration_override","glyphProps","customGlyphs","playNote","annotation_spacing","glyph_font_scale","stroke_px","getPlayNote","setPlayNote","addStroke","setYs","getRightDisplacedHeadPx","setLeftDisplacedHeadPx","setRightDisplacedHeadPx","isTopNote","getLineForRest","getGlyph","getGlyphWidth","getDuration","isDotted","getModifiersByType","getBeam","beam","checkBeam","hasBeam","setBeam","signature","filter","getRightParenthesisPx","getLeftParenthesisPx","getFirstDotPx","getMembers","getState","glyphPx","getNoteStartX","getPoint","getTieRightX","tieStartX","getTieLeftX","tieEndX","getKeys","StaveModifierPosition","BarlineType","ChordSymbolHorizontalJustify","ChordSymbolVerticalJustify","SymbolTypes","SymbolModifiers","StaveModifier","placeGlyphOnLine","customShift","getPadding","setPadding","setLayoutMetrics","layoutMetrics","getLayoutMetrics","typeString","single","SINGLE","double","DOUBLE","end","END","repeatBegin","REPEAT_BEGIN","repeatEnd","REPEAT_END","repeatBoth","REPEAT_BOTH","none","NONE","thickness","TYPE","widths","paddings","layoutMetricsMap","xMin","xMax","paddingLeft","paddingRight","BEGIN","setType","getType","drawVerticalBar","drawVerticalEndBar","drawRepeatBar","double_bar","staveCtx","botY","getBottomLineBottomY","fillRect","begin","dot_x","dot_radius","dot_y","BarNote","barline","Bend","bends","last_width","stringPos","release","phrase","tap","line_width","line_style","bend_width","release_width","updateWidth","setTap","getText","getTextHeight","totalWidth","additional_width","draw_width","lowestY","bend_height","annotation_y","renderBend","cp_x","cp_y","renderRelease","renderArrowHead","yBase","renderText","render_x","measureText","last_bend","last_bend_draw_width","last_drawn_width","ChordSymbol","superSubRatio","global","NO_TEXT_FORMAT","val","noFormat","getMetricForGlyph","glyphCode","engravingFontResolution","spacingBetweenBlocks","getWidthForGlyph","metric","getYShiftForGlyph","yOffset","getXShiftForGlyph","leftSideBearing","kerningOffset","chordSymbol","lowerKerningText","upperKerningText","isSuperscript","symbolModifier","SUPERSCRIPT","isSubscript","SUBSCRIPT","minPadding","symbols","nonSuperWidth","symbol","fontAdj","glyphAdj","symbolWidth","lineSpaces","vAlign","j","symbolBlocks","sup","sub","superSubScale","adj","symbolType","GLYPH","superSubFontSize","TEXT","getYOffsetForText","over","prev","setEnableKerning","updateKerningAdjustments","updateOverBarAdjustments","getVertical","getReportWidth","getHorizontal","horizontal","vertical","useKerning","reportWidth","setReportWidth","barIndex","findIndex","xoff","yoff","symIndex","accum","getKerningAdjustment","currSymbol","prevSymbol","adjustment","preKernUpper","preKernLower","some","xx","kerningOffsetPixels","getSymbolBlock","_c","symbolBlock","glyphArgs","glyphPoints","addSymbolBlock","parameters","addText","addTextSuperscript","addTextSubscript","addGlyphSuperscript","addGlyph","addGlyphOrText","char","addLine","setVertical","vj","setHorizontal","hj","stem_base","isSuper","isSub","smallerFontSize","diminished","dim","halfDiminished","augmented","majorSeventh","leftParen","rightParen","leftBracket","rightBracket","leftParenTall","rightParenTall","symbolTypes","symbolModifiers","getDots","buildAndAttach","all","dot","setDotShiftY","dot_list","max_shift_map","note_id","dot_shift","x_width","last_line","last_note","prev_dotted_space","half_shiftY","radius","forceFlagRight","FretHandFinger","nums","nums_list","prev_note","shiftLeft","shiftRight","pos","textHeight","shiftL","shiftR","numShiftL","numShiftR","xWidthL","xWidthR","lastLine","lastNote","num_shift","numWidth","fingerings","fingeringString","number","Fingering","fingering","finger","x_offset","setFretHandFinger","getFretHandFinger","setOffsetX","setOffsetY","NoteHead","custom_glyph","stem_up_x_offset","stem_down_x_offset","note_type","glyph_code","custom_glyph_code","slashed","isDisplaced","getLine","setLine","displacementStemAdjustment","fontShift","displacedFontShift","half_spacing","min_y","getYForNote","head_x","categorySuffix","staveSpace","breve_lines","drawSlashNoteHead","setStem","buildStem","buildFlag","hasFlag","flagCode","getBaseCustomNoteHeadGlyphProps","getStemLength","getStemExtension","getBeamCount","getStemMinimumLength","setStemDirection","offsets","offsetYBaseStemUp","offsetYTopStemUp","offsetYBaseStemDown","offsetYTopStemDown","getCenterGlyphX","stem_extension_override","setStemLength","drawStem","stemOptions","shiftRestVertical","dir","delta","maxLine","minLine","setKeyLine","getKeyLine","STEM_UP","STEM_DOWN","LEDGER_LINE_OFFSET","minNoteheadPadding","notesList","sortedKeyProps","minL","stemMax","stemMin","maxL","isrest","voice_shift","getVoiceShiftWidth","is_displaced","noteU","noteM","noteL","voiceXShift","lineSpacing","lineDiff","noteUHead","noteLHead","centerRest","ledgerLineStyle","use_default_head_x","_noteHeads","calculateKeyProps","auto_stem","autoStem","noteHeadStyles","noteHead","buildNoteHeads","noteHeadStyle","calcNoteDisplacements","noteProps","notehead","calculateOptimalStemDirection","minY","maxY","halfLineSpacing","frac","resultLine","thisLine","isChord","getNoteHeadBounds","setNoteDisplaced","getRightShift","restLine","isInnerNoteIndex","setStemStyle","getStemStyle","setLedgerLineStyle","getLedgerLineStyle","setFlagStyle","getFlagStyle","setKeyStyle","noteHeadPadding","shouldDrawFlag","nonDisplacedX","displacedX","highestDisplacedLine","lowestDisplacedLine","yTop","Infinity","yBottom","highestLine","lowestLine","highestNonDisplacedLine","lowestNonDisplacedLine","displaced_x","non_displaced_x","highest_line","lowest_line","highest_displaced_line","lowest_displaced_line","highest_non_displaced_line","lowest_non_displaced_line","getNoteHeadBeginX","getNoteHeadEndX","noteHeads","note_heads","drawLedgerLines","doubleWidth","min_x","drawLedgerLine","normal","ledgerWidth","getDefaultLedgerLineStyle","drawModifiers","noteheadParam","noteheadStyle","hasNoBeam","drawFlag","_d","_e","noteStemHeight","flagX","flagY","getStaveNoteScale","drawNoteHeads","super_stem_extension","mid_line_distance","lines_over_octave_from_mid_line","spacing_between_lines","xBegin","shouldRenderStem","stemX","StaveTie","setNotes","cp1","cp2","text_shift_x","first_x_shift","last_x_shift","tie_spacing","first_note","first_indices","last_indices","isPartial","renderTie","first_ys","last_ys","last_x_px","first_x_px","first_y_px","last_y_px","top_cp_y","bottom_cp_y","center_x","getNotes","getTieStartX","getTieEndX","TabTie","createHammeron","createPulloff","VoiceMode","Voice","Mode","time","voiceTime","resolutionMultiplier","mode","STRICT","ticksUsed","largestTickWidth","softmaxFactor","totalTicks","smallestTickCount","getTotalTicks","getTicksUsed","getLargestTickWidth","getSmallestTickCount","getMode","setMode","getResolutionMultiplier","getActualResolution","tickable","setStrict","strict","SOFT","isComplete","FULL","setSoftmaxFactor","factor","expTicksUsed","reCalculateExpTicksUsed","softmax","tickValue","v","exp","addTickable","addTickables","gracenote_groups","group_list","gracenote_group","is_stavenote","formatWidth","group_shift","grace_notes","show_slur","slur","slur_y_shift","beams","Formatter","joinVoices","getMinTotalWidth","beamNotes","Beam","beam_width","partial_beam_length","graceNote","TieClass","NoteSubGroup","groups","group","Ornament","ornament","ornamentRelease","ornamentAttack","reportedWidth","ornamentArticulation","ornamentNoteTransition","ornamentAlignWithNoteHead","ornamentMetrics","delayed","accidentalLowerPadding","accidentalUpperPadding","adjustForStemDirection","stemUpYOffset","xOffset","setDelayed","setUpperAccidental","accid","accidentalUpper","setLowerAccidental","accidentalLower","stemDir","stemExtents","isPlacedOnNoteheadSide","glyphYBetweenLines","glyphX","glyphY","delayXShift","startX","nextContext","Parenthesis","parentheses","x_widthL","x_widthR","parenthesis","isHTMLCanvas","HTMLCanvasElement","toDataURL","isHTMLDiv","HTMLDivElement","appendChild","CanvasContext","CANVAS_BROWSER_SIZE_LIMIT","sanitizeCanvasDims","limit","context2D","canvas","clearRect","cls","setBackgroundFillStyle","blur","getTransform","setLineCap","capType","lineCap","setLineDash","dash","resize","devicePixelRatio","dpr","rect","cp1x","cp1y","cp2x","cp2y","cpx","cpy","startAngle","endAngle","counterclockwise","fontBoundingBoxAscent","fontBoundingBoxDescent","actualBoundingBoxAscent","actualBoundingBoxDescent","ATTRIBUTES_TO_IGNORE","path","SVG_NS","TWO_PI","SVGContext","backgroundFillStyle","fontCSSString","svg","parent","pen","defaultFontAttributes","scaleX","scaleY","attributes","groupAttributes","applyAttributes","shadow_attributes","state_stack","svgElementType","createElementNS","lineDash","visibleWidth","visibleHeight","setViewBox","viewBox_or_minX","viewBoxString","attrNamesToIgnore","nodeName","attrName","setAttributeNS","lastChild","removeChild","rectangle","x0","cos","y0","sin","tmpStartTest","tmpEndTest","large","sweep","getShadowStyle","sa","measureTextCache","txt","textContent","savedState","fontAttributes","RendererBackends","RendererLineEndType","TextJustification","VoltaType","measureImpl","getBBox","Renderer","buildContext","elementId","backend","background","renderer","lastContext","getCanvasContext","Backends","CANVAS","getSVGContext","SVG","drawDashedLine","fromX","fromY","toX","toY","dashPattern","dx","dy","angle","atan2","idx","dashLength","nx","ny","arg0","arg1","maybeElement","willReadFrequently","LineEndType","StringNumber","stringNumber","verticalPadding","stemPadding","leftPadding","rightPadding","extraXSpaceForDisplacedNotehead","glyphLine","num_shiftR","num_width","num_x_shift","string_number","stem_offset","dashed","leg","drawCircle","setLineEndType","setStringNumber","setLastNote","setDashed","setDrawCircle","len","pattern","Stroke","strokes","strokeList","string","getPositions","strokeShift","all_voices","addEndNote","note_end","line_space","arrow","arrow_shift_x","arrow_y","text_y","Type","BRUSH_DOWN","BRUSH_UP","ROLL_DOWN","RASQUEDO_DOWN","ROLL_UP","RASQUEDO_UP","ARPEGGIO_DIRECTIONLESS","strokeLine","Vibrato","vibratos","vibrato","harsh","vibrato_width","wave_height","wave_width","wave_girth","setVibratoWidth","setHarsh","vx","vy","renderVibrato","opts","num_waves","ModifierContext","members","formatted","member","getLeftShift","Clef","types","tab","annotationSmufl","attachment","KeySignature","cancelKeySpec","alterKeySpec","accList","setKeySig","glyphFontScale","xPositions","paddingForced","convertToGlyph","nextAcc","accGlyphData","extraWidth","xPosition","cancelKey","convertToCancelAccList","cancel_accList","different_types","naturals","cancelled","concat","addToStave","convertAccLines","customLines","offset","alterKey","convertToAlterAccList","firstAccidentalType","cancelAccList","getEndClef","getClef","Repetition","symbol_type","setShiftX","setShiftY","CODA_RIGHT","drawCodaFixed","CODA_LEFT","drawSymbolText","SEGNO_LEFT","drawSignoFixed","SEGNO_RIGHT","DC","DC_AL_CODA","DC_AL_FINE","DS","DS_AL_CODA","DS_AL_FINE","FINE","TO_CODA","draw_coda","text_x","symbol_x","modifierWidth","getVerticalBarWidth","StaveSection","section","drawRect","shift_x","setStaveSection","textY","headroom","StaveTempo","tempo","setTempo","bpm","noteTextFont","noteTextFormatter","stem_height","flagMetrics","TextNote","GLYPHS","segno","mordent_upper","mordent_lower","p","z","coda","pedal_open","pedal_close","caesura_straight","caesura_curved","breath","tick","superscript","subscript","smooth","justification","struct","Justification","StaveText","setStaveText","setText","getBottomLineY","Volta","volta","top_y","vert_height","BEGIN_END","TimeSignatureGlyph","timeSignature","topDigits","botDigits","topWidth","timeSigType","topGlyph","botWidth","botGlyph","lineShift","topStartX","botStartX","start_x","topLine","bottomLine","TimeSignature","timeSpec","customPadding","validate_args","is_numeric","fontLineShift","setTimeSig","parseTimeSpec","numbers","test","assertIsValidTimeSig","makeTimeSignatureGlyph","setGlyph","getTimeSpec","getIsNumeric","setIsNumeric","isNumeric","SORT_ORDER_BEG_MODIFIERS","SORT_ORDER_END_MODIFIERS","Stave","defaultPadding","end_x","measure","endClef","vertical_bar_width","num_lines","fill_style","left_bar","right_bar","spacing_between_lines_px","space_above_staff_ln","space_below_staff_ln","top_text_position","bottom_text_position","line_config","bounds","defaultLedgerLineStyle","resetLines","addEndModifier","setDefaultLedgerLineStyle","visible","setNoteStartX","getNoteEndX","setNumLines","mod","setMeasure","getMeasure","getModifierXShift","begBarline","setRepetitionType","setVoltaType","number_t","setSection","staveSection","getLineForY","setBegBarType","setEndBarType","setClefLines","clefSpec","setClef","addClef","setEndClef","setKeySignature","addKeySignature","setEndKeySignature","setTimeSignature","timeSignatures","addTimeSignature","setEndTimeSignature","addEndClef","addEndTimeSignature","addTrebleGlyph","noPosition","noCategory","sortByCategory","items","order","temp","endBarline","begModifiers","endModifiers","lastBarlineIdx","getConfigForLines","setConfigForLine","line_number","setConfigForLines","lines_configuration","formatBegModifiers","staves","adjustCategoryStartX","minStartX","adjustX","allModifiers","bAdjust","maxX","drawBoldDoubleLine","topX","StaveConnector","BOLD_DOUBLE_LEFT","BOLD_DOUBLE_RIGHT","variableWidth","top_stave","bottom_stave","texts","newType","content","SINGLE_RIGHT","THIN_DOUBLE","attachment_height","SINGLE_LEFT","BRACE","x3","y3","cpx1","cpy1","cpx2","cpy2","cpx3","cpy3","cpx4","cpy4","cpx5","cpy5","cpx6","cpy6","cpx7","cpy7","cpx8","cpy8","BRACKET","singleRight","singleLeft","brace","bracket","boldDoubleLeft","boldDoubleRight","thinDouble","TickContext","getNextContext","tContext","contexts","tContexts","tickID","currentTick","maxTicks","maxTickable","minTicks","minTickable","xBase","tickablesByVoice","totalLeftPx","totalRightPx","getTickID","getXBase","setXBase","getXOffset","getMaxTicks","getMinTicks","getMaxTickable","getMinTickable","getTickableForVoice","voiceIndex","getTickablesByVoice","getCenterAlignedTickables","getCurrentTick","setCurrentTick","getRestLineForNextNoteGroup","currRestLine","currNoteIndex","nextRestLine","noteIndex","SimpleFormat","paddingBetween","accumulator","plotDebugging","stavePadding","contextGaps","gaps","gap","totalCost","toFixed","total","FormatAndDraw","auto_beam","align_rests","applyAndGetBeams","formatToStave","FormatAndDrawTab","tabstave","tabnotes","autobeam","notevoice","tabvoice","AlignRestsToNotes","alignAllNotes","alignTuplets","currTickable","prevTickable","formatterOptions","globalSoftmax","maxIterations","justifyWidth","durationStats","minTotalWidth","hasMinTotalWidth","tickContexts","array","list","modifierContexts","lossHistory","alignRests","preCalculateMinTotalWidth","unalignedPadding","unalignedCtxCount","wsum","dsum","createTickContexts","contextList","contextMap","wavg","wvar","ll","wpads","davg","dvar","dpads","padmax","unalignedPad","createModifierContexts","tickToContextMap","integerTicks","staveTickToContextMap","newContext","makeContext","addToContext","tickList","createContexts","contextArray","getTickContexts","renderingContext","voicesParam","evaluate","firstContext","calculateIdealDistances","adjustedJustifyWidth","backTickable","prevContext","backVoices","matchingVoices","maxNegativeShiftPx","expectedDistance","thisTickable","insideLeftEdge","backMetrics","insideRightEdge","fromTickable","fromTickablePx","shiftToIdealDistances","idealDistances","centerX","spaceAccum","contextX","ideal","errorPx","negativeShiftPx","configMinPadding","configMaxPadding","targetWidth","distances","actualWidth","minDistance","mdCalc","di","calcMinDistance","paddingMaxCalc","curTargetWidth","lastTickablePadding","lastTickable","tickWidth","paddingMax","paddingMin","prevTick","prevMetrics","currMetrics","leftNoteEdge","rightNote","rightMetrics","stats","count","updateStats","totalDeviation","tune","alpha","current","cost","optionsParam","TupletLocation","Tuplet","LOCATION_TOP","LOCATION_BOTTOM","NESTING_OFFSET","tupletMetrics","numerator_glyphs","denom_glyphs","num_notes","beats_occupied","beatsOccupiedDeprecationWarning","notes_occupied","bracketed","ratioed","setTupletLocation","location","resolveGlyphs","attach","detach","setBracketed","setRatioed","getBeatsOccupied","setBeatsOccupied","beats","setNotesOccupied","unshift","getNestedTupletCount","maxTupletCount","countTuplets","minTupletCount","tupletCount","getYPosition","nested_tuplet_y_offset","topModifierOffset","modLines","modY","noteHeadOffset","stemOffset","lineCheck","nn","bottom_y","addGlyphWidth","notation_start_x","shiftY","colon_x","colon_radius","calculateStemDirection","lineSum","keyProp","BEAM_LEFT","BEAM_RIGHT","BEAM_BOTH","getDefaultBeamGroups","time_sig","beatTotal","beatValue","generateBeams","config","tickGroups","unprocessedNotes","currentTickGroup","noteGroups","currentGroup","nextTickGroup","nextGroup","currentGroupTotalTicks","unprocessedNote","ticksPerGroup","vf_notes","memo","unbeamable","createGroups","sanitizedGroups","tempGroup","isFirstOrLast","breaksOnEachRest","beam_rests","breaksOnFirstOrLastRest","beam_middle_only","breakOnStemChange","maintain_stem_directions","prevDirection","isUnbeamableDuration","sanitizeGroups","findFirstNote","applyStemDirection","beamedNoteGroups","beamable","allTuplets","uniqueTuplets","noteTuplet","getTuplets","show_stemlets","secondary_breaks","secondary_break_ticks","flat_beams","flat_beam_offset","slope","forcedPartialDirections","stem_weight","break_on_indices","max_slope","min_slope","slope_iterations","slope_cost","stemlet_extension","min_flat_beam_offset","beamCount","breakSecondaryAt","indices","setPartialBeamSideAt","side","unsetPartialBeamSideAt","getSlopeY","calculateSlope","firstNote","initialSlope","firstStemTipY","firstStemX","getStemSlope","minCost","MAX_VALUE","bestSlope","totalStemExtension","yShiftTemp","adjustedStemTipY","diff","idealSlope","calculateFlatSlope","extremeY","extremeBeamCount","currentExtreme","extremeTest","newOffset","getBeamYToDraw","beamY","applyStemExtensions","beamedStemTipY","preBeamExtension","beamExtension","crossStemExtension","totalBeamWidth","lookupBeamDirection","prev_tick","next_tick","forcedBeamDirection","lookup_duration","prev_note_gets_beam","next_note_gets_beam","note_gets_beam","getBeamLines","tick_of_duration","beam_started","beam_lines","current_beam","previous_should_break","tick_tally","should_break","next_note","beam_alone","beam_direction","last_beam","drawStems","drawBeamLines","valid_beam_durations","beamThickness","beamLines","beam_line","startBeamX","startBeamY","lastBeamX","lastBeamY","ClefNote","abs_x","Crescendo","extend_left","extend_right","decrescendo","setHeight","setDecrescendo","decresc","tick_context","next_context","begin_x","half_height","reverse","renderHairpin","CurvePosition","Curve","nearHead","NEAR_HEAD","nearTop","NEAR_TOP","from","to","position_end","invert","cps","renderCurve","first_x","first_y","last_x","last_y","cp0x","cp0y","cp_spacing","end_metric","Parser","flattenMatches","matchedString","results","grammar","errorPos","expect","matchFail","returnPos","matchSuccess","matchToken","token","noSpace","regexp","RegExp","success","incrementPos","expectOne","rule","maybe","allMatches","oneMatch","localPos","or","gotOne","numMatches","expectOneOrMore","more","expectZeroOrMore","ruleFunc","bind","oneOrMore","zeroOrMore","matches","run","EasyScore","EasyScoreGrammar","PIECE","PIECES","EOL","CHORDORNOTE","PARAMS","commitPiece","COMMA","DURATION","DOTS","OPTS","CHORD","SINGLENOTE","LPAREN","NOTES","RPAREN","addChord","NOTE","NOTENAME","ACCIDENTAL","OCTAVE","addSingleNote","MICROTONES","ACCIDENTALS","DOT","setNoteDots","SLASH","MAYBESLASH","TYPES","setNoteType","DURATIONS","setNoteDuration","LBRACKET","KEYVAL","KEYVALS","RBRACKET","KEY","EQUALS","VAL","addNoteOption","SVAL","DVAL","Piece","chord","Builder","commitHooks","elements","rollingDuration","resetPiece","getElements","addCommitHook","commitHook","piece","addNote","standardAccidentals","notePiece","GhostNote","setId","commaSeparatedRegex","setClass","defaults","throwOnError","parser","ERROR_MSG","parameter","GlyphNote","ignoreTicks","SCALE","slash","ret","staveNoteScale","offsetScale","slashBBox","calcBeamedNotesSlashBBox","noteHeadBounds","defaultStemExtention","defaultOffsetY","slashStemOffset","slashBeamOffset","protrusions","beam_slope","beam_angle","atan","iPointOnBeam","slash_angle","protrusion_stem_dx","protrusion_stem_dy","protrusion_beam_dx","protrusion_beam_dy","stem0X","stemY","KeySigNote","semibreve_rest","MultiMeasureRest","number_of_measures","xs","hasPaddingLeft","hasPaddingRight","hasLineThickness","hasSymbolSpacing","padding_left","padding_right","line_thickness","symbol_spacing","use_symbols","show_number","number_line","number_glyph_point","serif_thickness","semibreve_rest_glyph_scale","getXs","drawLine","spacingBetweenLines","lineThicknessHalf","serifThickness","bot","leftIndented","rightIndented","lineTop","lineBottom","drawSymbols","n4","n2","n1","get_semibreve_rest","rest_scale","rest_width","yMiddle","timeSig","drawPedalGlyph","glyph_data","PedalMarking","createSustain","createSostenuto","pedal","MIXED","setCustomText","createUnaCorda","custom_depress_text","custom_release_text","bracket_height","text_margin_right","bracket_line_width","depress","drawBracketed","prev_x","prev_y","is_pedal_depressed","next_is_same","prev_is_same","drawText","pedal_depress","pedal_release","mixed","CODES","RepeatNote","drawArrowHead","StaveLine","line_dash","rounded_end","draw_start_arrow","draw_end_arrow","arrowhead_length","arrowhead_angle","text_position_vertical","TextVerticalPosition","text_justification","applyLineStyle","applyFontStyle","drawArrowLine","pt1","pt2","both_arrows","distance","ratio","end_y","start_y","line_angle","angle1","angle2","top_x","bottom_x","start_position","end_position","first_index","last_index","upwards_slope","notehead_width","vertical_position","System","partStaves","partStaveInfos","partVoices","spaceBetweenStaves","autoWidth","noJustification","debugFormatter","formatIterations","noPadding","details","formatOptions","getStaves","getVoices","addConnector","connector","addStave","staveOptions","spaceAbove","spaceBelow","debugNoteMetrics","addVoices","options_details","debugNoteMetricsYs","part","lastY","glyphPropsArr","positions","ghost","draw_dots","draw_stem_through_stave","setGhost","getStemY","stemDownLine","stemStartLine","flag_x","flag_y","drawStemThrough","stemThrough","stemLines","unused_strings","up_stem","down_stem","line_spacing","total_lines","stem_lines","strings","containsLastString","containsFirstString","line_ys","isTopBound","isBottomBound","getPartialStemLines","strings_used","stem_through","getUnusedStringGroups","drawPositions","tab_x","render_stem","TabStave","addTabGlyph","TextBracket","TextBracketPosition","Positions","PositionsString","stop","show_bracket","underline_superscript","main_measure","main_width","main_height","super_y","super_measure","super_width","super_height","line_y","TextDynamics","sequence","glyph_font_size","total_width","letter","letter_x","current_letter","TimeSigNote","tsGlyph","VibratoBracket","bracket_data","stop_x","Factory","newFromElementId","renderQ","systems","initRenderer","ghostNote","textNote","barNote","clefNote","timeSigNote","keySigNote","hJustify","vJustify","kerning","upperAccidental","lowerAccidental","numMeasures","multiMeasureRest","secondaryBeamBreaks","partialBeamDirections","curve","tie","vibratoBracket","textBracket","system","GraceTabNote","KeyManager","setKey","getKey","scaleMapByValue","originalScaleMapByValue","getAccidental","selectNote","scaleNote","modparts","change","valueNote","originalValueNote","StaveHairpin","FormatByTicksAndDraw","ppt","pixelsPerTick","l_shift_px","left_shift_ticks","r_shift_px","right_shift_ticks","hairpin_options","left_shift_px","right_shift_px","setRenderOptions","hairpin","dis","staff_height","l_shift","r_shift","CRESC","DECRESC","TabSlide","SLIDE_UP","SLIDE_DOWN","createSlideUp","createSlideDown","first_fret","last_fret","slide_y","Tremolo","y_spacing_scale","extra_stroke_scale","y_spacing","Tuning","names","standard","dagdad","dropd","standardBanjo","doubleCBanjo","doubleDBanjo","sawmillBanjo","tuningString","tuningValues","setTuning","noteToInteger","getValueForString","stringNum","getValueForFret","fretNum","stringValue","getNoteForFret","Flow","BUILD","VERSION","DATE","setMusicFont","fontNames","fetchMusicFont","fontModuleOrPath","getMusicFont","getMusicFontStack","CommonMetrics","smufl","endPaddingMax","endPaddingMin","unalignedNotePadding","csymDiminished","csymHalfDiminished","csymAugmented","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","csymMinor","csymMajorSeventh","accidentalSharp","accidentalFlat","clef_default","shiftX","clef_small","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","default","gracenote","pedalMarking","digits","shiftLine","articStaccatissimoAbove","articStaccatissimoBelow","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","heightAdjustmentForFlag","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadTriangleUpWhole","noteheadXHalf","noteheadXBlack","noteheadXWhole","noteheadHalf","noteheadBlack","noteheadSquareWhite","staveTempo","gClef","clefNote_default","clefNote_small","stroke_straight","arrowheadBlackDown","arrowheadBlackUp","stroke_wiggly","breathMarkTick","breathMarkComma","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","CustomFont","vexAccidentalMicrotonal1","vexAccidentalMicrotonal3","vexAccidentalMicrotonal4","vexNoteHeadRectBlack","vexNoteHeadRectWhite","vexWiggleArpeggioUp","PetalumaFont","bracketTop","bracketBottom","barlineTick","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadXDoubleWhole","noteheadCircleXDoubleWhole","noteheadCircleXWhole","noteheadCircleXHalf","noteheadCircleX","noteheadCircledDoubleWhole","noteheadCircledWhole","noteheadCircledHalf","noteheadCircledBlack","noteheadDoubleWholeSquare","noteheadSquareBlack","noteheadTriangleDownDoubleWhole","noteheadTriangleDownWhole","noteheadTriangleDownHalf","noteheadTriangleDownBlack","noteheadTriangleUpDoubleWhole","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesis","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalNatural","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBuyukMucennebSharp","accidentalBakiyeFlat","accidentalKomaSharp","accidentalKucukMucennebSharp","accidentalKoron","accidentalSori","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","wiggleArpeggiatoUp","arpeggiatoUp","arpeggiatoDown","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","generatedOn","petalumaChordMetrics","PetalumaScriptFont","$","I","J","K","N","O","Q","U","V","Y","Z","_","l","RobotoSlabFont","SansFontBold","SansFont","Description","SerifFont","Vex","sortAndUnique","cmp","eq","newArr","last","contains","canvasSelector","benchmark","start_time","Date","getTime","stackTrace","chordMetrics","loadPetaluma","fontData","description","loadTextFonts"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow.js b/build/cjs/vexflow.js new file mode 100644 index 0000000000..108a5b387f --- /dev/null +++ b/build/cjs/vexflow.js @@ -0,0 +1,7 @@ +/*! + * VexFlow 4.2.6 2024-08-26T20:16:17.134Z 103aad2b14837418c5e96c9e078edd036fcddf60 + * Copyright (c) 2010 Mohit Muthanna Cheppudira + * https://www.vexflow.com https://github.com/0xfe/vexflow + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Vex=e():t.Vex=e()}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var b in i)t.o(i,b)&&!t.o(e,b)&&Object.defineProperty(e,b,{enumerable:!0,get:i[b]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};t.d(e,{default:()=>i});var i={};function b(t,e,i=!0){if("object"!=typeof t||null===t)return!1;let b=t.constructor;if(i){for(;null!==t;){if(b=t.constructor,"CATEGORY"in b&&b.CATEGORY===e)return!0;t=Object.getPrototypeOf(t)}return!1}return"CATEGORY"in b&&b.CATEGORY===e}t.r(i),t.d(i,{Accidental:()=>bt,Annotation:()=>ct,AnnotationHorizontalJustify:()=>ht,AnnotationVerticalJustify:()=>mt,Articulation:()=>ut,BEAM_BOTH:()=>Oe,BEAM_LEFT:()=>Fe,BEAM_RIGHT:()=>Me,BarNote:()=>At,Barline:()=>kt,BarlineType:()=>zt,Beam:()=>Re,Bend:()=>Nt,BoundingBox:()=>D,BoundingBoxComputation:()=>C,Builder:()=>Ke,CanvasContext:()=>Qt,Category:()=>x,ChordSymbol:()=>Mt,ChordSymbolHorizontalJustify:()=>Bt,ChordSymbolVerticalJustify:()=>Dt,Clef:()=>de,ClefNote:()=>Le,Crescendo:()=>We,Curve:()=>Ie,CurvePosition:()=>Ue,Dot:()=>Ot,EasyScore:()=>Qe,EasyScoreGrammar:()=>Xe,Element:()=>R,Factory:()=>vi,Flow:()=>ki,Font:()=>F,FontStyle:()=>P,FontWeight:()=>E,Formatter:()=>Pe,Fraction:()=>z,FretHandFinger:()=>Rt,GhostNote:()=>ti,Glyph:()=>Z,GlyphNote:()=>ei,GraceNote:()=>ii,GraceNoteGroup:()=>Xt,GraceTabNote:()=>wi,KeyManager:()=>zi,KeySigNote:()=>bi,KeySignature:()=>_e,Modifier:()=>tt,ModifierContext:()=>ce,ModifierPosition:()=>J,MultiMeasureRest:()=>ni,Music:()=>et,Note:()=>vt,NoteHead:()=>Lt,NoteSubGroup:()=>Vt,Ornament:()=>Kt,OutlineCode:()=>$,Parenthesis:()=>$t,Parser:()=>Ye,PedalMarking:()=>li,Piece:()=>Ve,Registry:()=>O,RenderContext:()=>ft,Renderer:()=>le,RendererBackends:()=>be,RendererLineEndType:()=>ae,RepeatNote:()=>ri,Repetition:()=>xe,RuntimeError:()=>g,SVGContext:()=>ie,Stave:()=>ze,StaveConnector:()=>De,StaveHairpin:()=>Bi,StaveLine:()=>mi,StaveModifier:()=>Pt,StaveModifierPosition:()=>wt,StaveNote:()=>It,StaveSection:()=>ge,StaveTempo:()=>ye,StaveText:()=>ue,StaveTie:()=>Gt,Stem:()=>at,StemmableNote:()=>Wt,StringNumber:()=>oe,Stroke:()=>re,SymbolModifiers:()=>Et,SymbolTypes:()=>Ct,System:()=>ci,TabNote:()=>di,TabSlide:()=>Di,TabStave:()=>_i,TabTie:()=>Ht,TextBracket:()=>yi,TextBracketPosition:()=>gi,TextDynamics:()=>ui,TextFormatter:()=>rt,TextJustification:()=>ne,TextNote:()=>pe,TickContext:()=>Ce,Tickable:()=>Tt,TimeSigNote:()=>fi,TimeSignature:()=>Te,TimeSignatureGlyph:()=>Se,Tremolo:()=>Ci,Tuning:()=>Ei,Tuplet:()=>Ae,TupletLocation:()=>ke,Vex:()=>Yi,Vibrato:()=>he,VibratoBracket:()=>Si,Voice:()=>jt,VoiceMode:()=>Yt,Volta:()=>fe,VoltaType:()=>se,defined:()=>p,drawDot:()=>St,globalObject:()=>y,isAccidental:()=>a,isAnnotation:()=>n,isBarline:()=>s,isCategory:()=>b,isDot:()=>l,isGraceNote:()=>o,isGraceNoteGroup:()=>r,isHTMLCanvas:()=>Jt,isHTMLDiv:()=>qt,isNote:()=>h,isRenderContext:()=>m,isStaveNote:()=>c,isStemmableNote:()=>d,isTabNote:()=>_,log:()=>u,midLine:()=>S,normalizeAngle:()=>v,prefix:()=>T,sumArray:()=>w,warn:()=>f});const a=t=>b(t,x.Accidental),n=t=>b(t,x.Annotation),s=t=>b(t,x.Barline),l=t=>b(t,x.Dot),o=t=>b(t,x.GraceNote),r=t=>b(t,x.GraceNoteGroup),h=t=>b(t,x.Note),m=t=>b(t,x.RenderContext),c=t=>b(t,x.StaveNote),d=t=>b(t,x.StemmableNote),_=t=>b(t,x.TabNote);var x;!function(t){t.Accidental="Accidental",t.Annotation="Annotation",t.Articulation="Articulation",t.Barline="Barline",t.BarNote="BarNote",t.Beam="Beam",t.Bend="Bend",t.ChordSymbol="ChordSymbol",t.Clef="Clef",t.ClefNote="ClefNote",t.Crescendo="Crescendo",t.Curve="Curve",t.Dot="Dot",t.Element="Element",t.Fraction="Fraction",t.FretHandFinger="FretHandFinger",t.GhostNote="GhostNote",t.Glyph="Glyph",t.GlyphNote="GlyphNote",t.GraceNote="GraceNote",t.GraceNoteGroup="GraceNoteGroup",t.GraceTabNote="GraceTabNote",t.KeySignature="KeySignature",t.KeySigNote="KeySigNote",t.Modifier="Modifier",t.MultiMeasureRest="MultiMeasureRest",t.Note="Note",t.NoteHead="NoteHead",t.NoteSubGroup="NoteSubGroup",t.Ornament="Ornament",t.Parenthesis="Parenthesis",t.PedalMarking="PedalMarking",t.RenderContext="RenderContext",t.RepeatNote="RepeatNote",t.Repetition="Repetition",t.Stave="Stave",t.StaveConnector="StaveConnector",t.StaveHairpin="StaveHairpin",t.StaveLine="StaveLine",t.StaveModifier="StaveModifier",t.StaveNote="StaveNote",t.StaveSection="StaveSection",t.StaveTempo="StaveTempo",t.StaveText="StaveText",t.StaveTie="StaveTie",t.Stem="Stem",t.StemmableNote="StemmableNote",t.StringNumber="StringNumber",t.Stroke="Stroke",t.System="System",t.TabNote="TabNote",t.TabSlide="TabSlide",t.TabStave="TabStave",t.TabTie="TabTie",t.TextBracket="TextBracket",t.TextDynamics="TextDynamics",t.TextNote="TextNote",t.Tickable="Tickable",t.TimeSignature="TimeSignature",t.TimeSigNote="TimeSigNote",t.Tremolo="Tremolo",t.Tuplet="Tuplet",t.Vibrato="Vibrato",t.VibratoBracket="VibratoBracket",t.Voice="Voice",t.Volta="Volta"}(x||(x={}));class g extends Error{constructor(t,e=""){super("[RuntimeError] "+t+": "+e),this.code=t}}function y(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:Function("return this")()}function p(t,e="undefined",i=""){if(void 0===t)throw new g(e,i);return t}function u(t,...e){if(!e)return;const i=Array.prototype.slice.call(e).join(" ");y().console.log(t+": "+i)}function f(...t){const e=t.join(" "),i=new Error;y().console.log("Warning: ",e,i.stack)}function S(t,e){let i=e+(t-e)/2;var b,a;return i%2>0&&(i=((b=10*i)%(a=5)>=a/2?parseInt(""+b/a,10)*a+a:parseInt(""+b/a,10)*a)/10),i}function T(t){return`vf-${t}`}function v(t){return(t%=2*Math.PI)<0&&(t+=2*Math.PI),t}function w(t){return t.reduce(((t,e)=>t+e),0)}class z{static get CATEGORY(){return x.Fraction}static GCD(t,e){if("number"!=typeof t||Number.isNaN(t)||"number"!=typeof e||Number.isNaN(e))throw new g("BadArgument",`Invalid numbers: ${t}, ${e}`);let i;for(;0!==e;)i=e,e=t%e,t=i;return t}static LCM(t,e){return t*e/z.GCD(t,e)}static LCMM(t){return 0===t.length?0:1===t.length?t[0]:2===t.length?z.LCM(t[0],t[1]):z.LCM(t.shift(),z.LCMM(t))}constructor(t,e){this.numerator=1,this.denominator=1,this.set(t,e)}set(t=1,e=1){return this.numerator=t,this.denominator=e,this}value(){return this.numerator/this.denominator}simplify(){let t=this.numerator,e=this.denominator;const i=z.GCD(t,e);return t/=i,e/=i,e<0&&(e=-e,t=-t),this.set(t,e)}add(t=0,e=1){const[i,b]=B(t,e),a=z.LCM(this.denominator,b),n=a/this.denominator,s=a/b,l=this.numerator*n+i*s;return this.set(l,a)}subtract(t=0,e=1){const[i,b]=B(t,e),a=z.LCM(this.denominator,b),n=a/this.denominator,s=a/b,l=this.numerator*n-i*s;return this.set(l,a)}multiply(t=1,e=1){const[i,b]=B(t,e);return this.set(this.numerator*i,this.denominator*b)}divide(t=1,e=1){const[i,b]=B(t,e);return this.set(this.numerator*b,this.denominator*i)}equals(t){const e=z.__staticFractionA.copy(t).simplify(),i=z.__staticFractionB.copy(this).simplify();return e.numerator===i.numerator&&e.denominator===i.denominator}greaterThan(t){const e=z.__staticFractionB.copy(this);return e.subtract(t),e.numerator>0}greaterThanEquals(t){const e=z.__staticFractionB.copy(this);return e.subtract(t),e.numerator>=0}lessThan(t){return!this.greaterThanEquals(t)}lessThanEquals(t){return!this.greaterThan(t)}clone(){return new z(this.numerator,this.denominator)}copy(t){return"number"==typeof t?this.set(t,1):this.set(t.numerator,t.denominator)}quotient(){return Math.floor(this.numerator/this.denominator)}remainder(){return this.numerator%this.denominator}makeAbs(){return this.denominator=Math.abs(this.denominator),this.numerator=Math.abs(this.numerator),this}toString(){return`${this.numerator}/${this.denominator}`}toSimplifiedString(){return z.__staticFractionTmp.copy(this).simplify().toString()}toMixedString(){let t="";const e=this.quotient(),i=z.__staticFractionTmp.copy(this);return e<0&&i.makeAbs(),0!==e?(t+=e,0!==i.numerator&&(t+=` ${i.toSimplifiedString()}`)):t=0===i.numerator?"0":i.toSimplifiedString(),t}parse(t){const e=t.split("/"),i=parseInt(e[0],10),b=e[1]?parseInt(e[1],10):1;return this.set(i,b)}}function B(t,e=1){return"number"==typeof t?[t,e]:[t.numerator,t.denominator]}z.__staticFractionA=new z,z.__staticFractionB=new z,z.__staticFractionTmp=new z;class D{static copy(t){return new D(t.x,t.y,t.w,t.h)}constructor(t,e,i,b){this.x=t,this.y=e,this.w=i,this.h=b}getX(){return this.x}getY(){return this.y}getW(){return this.w}getH(){return this.h}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setW(t){return this.w=t,this}setH(t){return this.h=t,this}move(t,e){return this.x+=t,this.y+=e,this}clone(){return D.copy(this)}mergeWith(t){const e=t,i=this.xthis.x2)&&(this.x2=t),(isNaN(this.y1)||ethis.y2)&&(this.y2=e)}addX(t){this.addPoint(t,this.y1)}addY(t){this.addPoint(this.x1,t)}addQuadraticCurve(t,e,i,b,a,n){this.addPoint(t,e),this.addPoint(a,n);const s=i-t;let l=s-(a-i);if(0!=l){const e=s/l;if(e>0&&e<1){const b=1-e;this.addX(b*b*t+2*b*e*i+e*e*a)}}const o=b-e;if(l=o-(n-b),0!=l){const t=o/l;if(t>0&&t<1){const i=1-t;this.addY(i*i*e+2*i*t*b+t*t*n)}}}addBezierCurve(t,e,i,b,a,n,s,l){const o=[t,e],r=[i,b],h=[a,n],m=[s,l];let c;this.addPoint(o[0],o[1]),this.addPoint(m[0],m[1]);const d=(t,e)=>Math.pow(1-t,3)*o[e]+3*Math.pow(1-t,2)*t*r[e]+3*(1-t)*Math.pow(t,2)*h[e]+Math.pow(t,3)*m[e];for(c=0;c<=1;c++){const t=6*o[c]-12*r[c]+6*h[c],e=-3*o[c]+9*r[c]-9*h[c]+3*m[c],i=3*r[c]-3*o[c];if(0===e){if(0===t)continue;const e=-i/t;0=600;{const e=parseInt(t,10);return isNaN(e)?"bold"===t.toLowerCase():e>=600}}return!1}static isItalic(t){return!!t&&t.toLowerCase()===P.ITALIC}static loadWebFont(t,e,i=!0){return k(this,void 0,void 0,(function*(){const b=new FontFace(t,(i?`url(${e}2) format('woff2'), `:"")+`url(${e}) format('woff')`);return yield b.load(),document.fonts.add(b),b}))}static loadWebFonts(){return k(this,void 0,void 0,(function*(){const t=F.WEB_FONT_HOST,e=F.WEB_FONT_FILES;for(const i in e){const b=e[i];F.loadWebFont(i,t+b)}}))}static load(t,e,i){let b=N[t];return b||(b=new F(t),N[t]=b),e&&b.setData(e),i&&b.setMetrics(i),b}constructor(t){this.name=t}getName(){return this.name}getData(){return p(this.data,"FontError","Missing font data")}getMetrics(){return p(this.metrics,"FontError","Missing metrics")}setData(t){this.data=t}setMetrics(t){this.metrics=t}hasData(){return void 0!==this.data}getResolution(){return this.getData().resolution}getGlyphs(){return this.getData().glyphs}lookupMetric(t,e){const i=t.split(".");let b=this.getMetrics();for(let t=0;tt[e]))}}return[]}getElementsByType(t){return this.getElementsByAttribute("type",t)}getElementsByClass(t){return this.getElementsByAttribute("class",t)}onUpdate(t){return["id","type","class"].includes(t.name)&&this.updateIndex(t),this}}class R{static get CATEGORY(){return x.Element}static newID(){return"auto"+R.ID++}constructor(){var t;this.children=[],this.attrs={id:R.newID(),type:this.getCategory(),class:""},this.rendered=!1,null===(t=O.getDefaultRegistry())||void 0===t||t.register(this)}addChildElement(t){return this.children.push(t),this}getCategory(){return this.constructor.CATEGORY}setStyle(t){return this.style=t,this}setGroupStyle(t){return this.style=t,this.children.forEach((e=>e.setGroupStyle(t))),this}getStyle(){return this.style}applyStyle(t=this.context,e=this.getStyle()){return e&&t?(t.save(),e.shadowColor&&t.setShadowColor(e.shadowColor),e.shadowBlur&&t.setShadowBlur(e.shadowBlur),e.fillStyle&&t.setFillStyle(e.fillStyle),e.strokeStyle&&t.setStrokeStyle(e.strokeStyle),e.lineWidth&&t.setLineWidth(e.lineWidth),this):this}restoreStyle(t=this.context,e=this.getStyle()){return e&&t?(t.restore(),this):this}drawWithStyle(){this.checkContext(),this.applyStyle(),this.draw(),this.restoreStyle()}hasClass(t){var e;return!!this.attrs.class&&-1!=(null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ").indexOf(t))}addClass(t){var e;return this.hasClass(t)||(this.attrs.class?this.attrs.class=`${this.attrs.class} ${t}`:this.attrs.class=`${t}`,null===(e=this.registry)||void 0===e||e.onUpdate({id:this.attrs.id,name:"class",value:t,oldValue:void 0})),this}removeClass(t){var e,i;if(!this.hasClass(t))return this;const b=null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ");return b&&(b.splice(b.indexOf(t)),this.attrs.class=b.join(" ")),null===(i=this.registry)||void 0===i||i.onUpdate({id:this.attrs.id,name:"class",value:void 0,oldValue:t}),this}onRegister(t){return this.registry=t,this}isRendered(){return this.rendered}setRendered(t=!0){return this.rendered=t,this}getAttributes(){return this.attrs}getAttribute(t){return this.attrs[t]}getSVGElement(t=""){const e=T(this.attrs.id+t),i=document.getElementById(e);if(i)return i}setAttribute(t,e){var i;const b=this.attrs.id,a=this.attrs[t];return this.attrs[t]=e,null===(i=this.registry)||void 0===i||i.onUpdate({id:b,name:t,value:e,oldValue:a}),this}getBoundingBox(){return this.boundingBox}getContext(){return this.context}setContext(t){return this.context=t,this}checkContext(){return p(this.context,"NoContext","No rendering context attached to instance.")}set font(t){this.setFont(t)}get font(){return F.toCSSString(this.textFont)}setFont(t,e,i,b){const a=this.constructor.TEXT_FONT,n="object"==typeof t,s="string"==typeof t,l=void 0===t,o=void 0===e&&void 0===i&&void 0===b;return this.textFont=n?Object.assign(Object.assign({},a),t):s&&o?F.fromCSSString(t):l&&o?Object.assign({},a):F.validate(null!=t?t:a.family,null!=e?e:a.size,null!=i?i:a.weight,null!=b?b:a.style),this}getFont(){return this.textFont||this.resetFont(),F.toCSSString(this.textFont)}resetFont(){this.setFont()}get fontInfo(){return this.textFont||this.resetFont(),Object.assign({},this.textFont)}set fontInfo(t){this.setFont(t)}setFontSize(t){const e=this.fontInfo;return this.setFont(e.family,t,e.weight,e.style),this}getFontSize(){return this.fontSize}set fontSize(t){this.setFontSize(t)}get fontSize(){let t=this.fontInfo.size;return"number"==typeof t&&(t=`${t}pt`),t}get fontSizeInPoints(){return F.convertSizeToPointValue(this.fontSize)}get fontSizeInPixels(){return F.convertSizeToPixelValue(this.fontSize)}get fontStyle(){return this.fontInfo.style}set fontStyle(t){const e=this.fontInfo;this.setFont(e.family,e.size,e.weight,t)}get fontWeight(){return this.fontInfo.weight+""}set fontWeight(t){const e=this.fontInfo;this.setFont(e.family,e.size,t,e.style)}}R.ID=1e3,R.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:E.NORMAL,style:P.NORMAL};const L=16384,W={"1/2":32768,1:16384,2:8192,4:4096,8:2048,16:1024,32:512,64:256,128:128,256:64},U={w:"1",h:"2",q:"4",b:"256"},I={C:{num:0},Am:{num:0},F:{acc:"b",num:1},Dm:{acc:"b",num:1},Bb:{acc:"b",num:2},Gm:{acc:"b",num:2},Eb:{acc:"b",num:3},Cm:{acc:"b",num:3},Ab:{acc:"b",num:4},Fm:{acc:"b",num:4},Db:{acc:"b",num:5},Bbm:{acc:"b",num:5},Gb:{acc:"b",num:6},Ebm:{acc:"b",num:6},Cb:{acc:"b",num:7},Abm:{acc:"b",num:7},G:{acc:"#",num:1},Em:{acc:"#",num:1},D:{acc:"#",num:2},Bm:{acc:"#",num:2},A:{acc:"#",num:3},"F#m":{acc:"#",num:3},E:{acc:"#",num:4},"C#m":{acc:"#",num:4},B:{acc:"#",num:5},"G#m":{acc:"#",num:5},"F#":{acc:"#",num:6},"D#m":{acc:"#",num:6},"C#":{acc:"#",num:7},"A#m":{acc:"#",num:7}},G={treble:{line_shift:0},bass:{line_shift:6},tenor:{line_shift:4},alto:{line_shift:3},soprano:{line_shift:1},percussion:{line_shift:0},"mezzo-soprano":{line_shift:2},"baritone-c":{line_shift:5},"baritone-f":{line_shift:5},subbass:{line_shift:7},french:{line_shift:-1}},H={C:{index:0,int_val:0},CN:{index:0,int_val:0,accidental:"n"},"C#":{index:0,int_val:1,accidental:"#"},"C##":{index:0,int_val:2,accidental:"##"},CB:{index:0,int_val:11,accidental:"b"},CBB:{index:0,int_val:10,accidental:"bb"},D:{index:1,int_val:2},DN:{index:1,int_val:2,accidental:"n"},"D#":{index:1,int_val:3,accidental:"#"},"D##":{index:1,int_val:4,accidental:"##"},DB:{index:1,int_val:1,accidental:"b"},DBB:{index:1,int_val:0,accidental:"bb"},E:{index:2,int_val:4},EN:{index:2,int_val:4,accidental:"n"},"E#":{index:2,int_val:5,accidental:"#"},"E##":{index:2,int_val:6,accidental:"##"},EB:{index:2,int_val:3,accidental:"b"},EBB:{index:2,int_val:2,accidental:"bb"},F:{index:3,int_val:5},FN:{index:3,int_val:5,accidental:"n"},"F#":{index:3,int_val:6,accidental:"#"},"F##":{index:3,int_val:7,accidental:"##"},FB:{index:3,int_val:4,accidental:"b"},FBB:{index:3,int_val:3,accidental:"bb"},G:{index:4,int_val:7},GN:{index:4,int_val:7,accidental:"n"},"G#":{index:4,int_val:8,accidental:"#"},"G##":{index:4,int_val:9,accidental:"##"},GB:{index:4,int_val:6,accidental:"b"},GBB:{index:4,int_val:5,accidental:"bb"},A:{index:5,int_val:9},AN:{index:5,int_val:9,accidental:"n"},"A#":{index:5,int_val:10,accidental:"#"},"A##":{index:5,int_val:11,accidental:"##"},AB:{index:5,int_val:8,accidental:"b"},ABB:{index:5,int_val:7,accidental:"bb"},B:{index:6,int_val:11},BN:{index:6,int_val:11,accidental:"n"},"B#":{index:6,int_val:12,accidental:"#"},"B##":{index:6,int_val:13,accidental:"##"},BB:{index:6,int_val:10,accidental:"b"},BBB:{index:6,int_val:9,accidental:"bb"},R:{index:6,rest:!0},X:{index:6,accidental:"",octave:4,code:"noteheadXBlack",shift_right:5.5}},Y={"#":{code:"accidentalSharp",parenRightPaddingAdjustment:-1},"##":{code:"accidentalDoubleSharp",parenRightPaddingAdjustment:-1},b:{code:"accidentalFlat",parenRightPaddingAdjustment:-2},bb:{code:"accidentalDoubleFlat",parenRightPaddingAdjustment:-2},n:{code:"accidentalNatural",parenRightPaddingAdjustment:-1},"{":{code:"accidentalParensLeft",parenRightPaddingAdjustment:-1},"}":{code:"accidentalParensRight",parenRightPaddingAdjustment:-1},db:{code:"accidentalThreeQuarterTonesFlatZimmermann",parenRightPaddingAdjustment:-1},d:{code:"accidentalQuarterToneFlatStein",parenRightPaddingAdjustment:0},"++":{code:"accidentalThreeQuarterTonesSharpStein",parenRightPaddingAdjustment:-1},"+":{code:"accidentalQuarterToneSharpStein",parenRightPaddingAdjustment:-1},"+-":{code:"accidentalKucukMucennebSharp",parenRightPaddingAdjustment:-1},bs:{code:"accidentalBakiyeFlat",parenRightPaddingAdjustment:-1},bss:{code:"accidentalBuyukMucennebFlat",parenRightPaddingAdjustment:-1},o:{code:"accidentalSori",parenRightPaddingAdjustment:-1},k:{code:"accidentalKoron",parenRightPaddingAdjustment:-1},bbs:{code:"vexAccidentalMicrotonal1",parenRightPaddingAdjustment:-1},"++-":{code:"accidentalBuyukMucennebSharp",parenRightPaddingAdjustment:-1},ashs:{code:"vexAccidentalMicrotonal3",parenRightPaddingAdjustment:-1},afhf:{code:"vexAccidentalMicrotonal4",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaUp:{code:"accSagittal5v7KleismaUp",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaDown:{code:"accSagittal5v7KleismaDown",parenRightPaddingAdjustment:-1},accSagittal5CommaUp:{code:"accSagittal5CommaUp",parenRightPaddingAdjustment:-1},accSagittal5CommaDown:{code:"accSagittal5CommaDown",parenRightPaddingAdjustment:-1},accSagittal7CommaUp:{code:"accSagittal7CommaUp",parenRightPaddingAdjustment:-1},accSagittal7CommaDown:{code:"accSagittal7CommaDown",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisUp:{code:"accSagittal25SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisDown:{code:"accSagittal25SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisUp:{code:"accSagittal35MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisDown:{code:"accSagittal35MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisUp:{code:"accSagittal11MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisDown:{code:"accSagittal11MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisUp:{code:"accSagittal11LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisDown:{code:"accSagittal11LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisUp:{code:"accSagittal35LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisDown:{code:"accSagittal35LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SDown:{code:"accSagittalSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalFlat25SUp:{code:"accSagittalFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7CDown:{code:"accSagittalSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7CUp:{code:"accSagittalFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5CDown:{code:"accSagittalSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5CUp:{code:"accSagittalFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kDown:{code:"accSagittalSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kUp:{code:"accSagittalFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalSharp:{code:"accSagittalSharp",parenRightPaddingAdjustment:-1},accSagittalFlat:{code:"accSagittalFlat",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kUp:{code:"accSagittalSharp5v7kUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kDown:{code:"accSagittalFlat5v7kDown",parenRightPaddingAdjustment:-1},accSagittalSharp5CUp:{code:"accSagittalSharp5CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5CDown:{code:"accSagittalFlat5CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7CUp:{code:"accSagittalSharp7CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7CDown:{code:"accSagittalFlat7CDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SUp:{code:"accSagittalSharp25SUp",parenRightPaddingAdjustment:-1},accSagittalFlat25SDown:{code:"accSagittalFlat25SDown",parenRightPaddingAdjustment:-1},accSagittalSharp35MUp:{code:"accSagittalSharp35MUp",parenRightPaddingAdjustment:-1},accSagittalFlat35MDown:{code:"accSagittalFlat35MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11MUp:{code:"accSagittalSharp11MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11MDown:{code:"accSagittalFlat11MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11LUp:{code:"accSagittalSharp11LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11LDown:{code:"accSagittalFlat11LDown",parenRightPaddingAdjustment:-1},accSagittalSharp35LUp:{code:"accSagittalSharp35LUp",parenRightPaddingAdjustment:-1},accSagittalFlat35LDown:{code:"accSagittalFlat35LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp25SDown:{code:"accSagittalDoubleSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat25SUp:{code:"accSagittalDoubleFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7CDown:{code:"accSagittalDoubleSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7CUp:{code:"accSagittalDoubleFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5CDown:{code:"accSagittalDoubleSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5CUp:{code:"accSagittalDoubleFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v7kDown:{code:"accSagittalDoubleSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v7kUp:{code:"accSagittalDoubleFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp:{code:"accSagittalDoubleSharp",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat:{code:"accSagittalDoubleFlat",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaUp:{code:"accSagittal7v11KleismaUp",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaDown:{code:"accSagittal7v11KleismaDown",parenRightPaddingAdjustment:-1},accSagittal17CommaUp:{code:"accSagittal17CommaUp",parenRightPaddingAdjustment:-1},accSagittal17CommaDown:{code:"accSagittal17CommaDown",parenRightPaddingAdjustment:-1},accSagittal55CommaUp:{code:"accSagittal55CommaUp",parenRightPaddingAdjustment:-1},accSagittal55CommaDown:{code:"accSagittal55CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v11CommaUp:{code:"accSagittal7v11CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v11CommaDown:{code:"accSagittal7v11CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisUp:{code:"accSagittal5v11SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisDown:{code:"accSagittal5v11SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SDown:{code:"accSagittalSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SUp:{code:"accSagittalFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CDown:{code:"accSagittalSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CUp:{code:"accSagittalFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalSharp55CDown:{code:"accSagittalSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalFlat55CUp:{code:"accSagittalFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17CDown:{code:"accSagittalSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalFlat17CUp:{code:"accSagittalFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kDown:{code:"accSagittalSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kUp:{code:"accSagittalFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kUp:{code:"accSagittalSharp7v11kUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kDown:{code:"accSagittalFlat7v11kDown",parenRightPaddingAdjustment:-1},accSagittalSharp17CUp:{code:"accSagittalSharp17CUp",parenRightPaddingAdjustment:-1},accSagittalFlat17CDown:{code:"accSagittalFlat17CDown",parenRightPaddingAdjustment:-1},accSagittalSharp55CUp:{code:"accSagittalSharp55CUp",parenRightPaddingAdjustment:-1},accSagittalFlat55CDown:{code:"accSagittalFlat55CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CUp:{code:"accSagittalSharp7v11CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CDown:{code:"accSagittalFlat7v11CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SUp:{code:"accSagittalSharp5v11SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SDown:{code:"accSagittalFlat5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v11SDown:{code:"accSagittalDoubleSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v11SUp:{code:"accSagittalDoubleFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11CDown:{code:"accSagittalDoubleSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11CUp:{code:"accSagittalDoubleFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp55CDown:{code:"accSagittalDoubleSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat55CUp:{code:"accSagittalDoubleFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17CDown:{code:"accSagittalDoubleSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17CUp:{code:"accSagittalDoubleFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11kDown:{code:"accSagittalDoubleSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11kUp:{code:"accSagittalDoubleFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittal23CommaUp:{code:"accSagittal23CommaUp",parenRightPaddingAdjustment:-1},accSagittal23CommaDown:{code:"accSagittal23CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v19CommaUp:{code:"accSagittal5v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal5v19CommaDown:{code:"accSagittal5v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisUp:{code:"accSagittal5v23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisDown:{code:"accSagittal5v23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SDown:{code:"accSagittalSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SUp:{code:"accSagittalFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CDown:{code:"accSagittalSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CUp:{code:"accSagittalFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CDown:{code:"accSagittalSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalFlat23CUp:{code:"accSagittalFlat23CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CUp:{code:"accSagittalSharp23CUp",parenRightPaddingAdjustment:-1},accSagittalFlat23CDown:{code:"accSagittalFlat23CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CUp:{code:"accSagittalSharp5v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CDown:{code:"accSagittalFlat5v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SUp:{code:"accSagittalSharp5v23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SDown:{code:"accSagittalFlat5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v23SDown:{code:"accSagittalDoubleSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v23SUp:{code:"accSagittalDoubleFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v19CDown:{code:"accSagittalDoubleSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v19CUp:{code:"accSagittalDoubleFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23CDown:{code:"accSagittalDoubleSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23CUp:{code:"accSagittalDoubleFlat23CUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaUp:{code:"accSagittal19SchismaUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaDown:{code:"accSagittal19SchismaDown",parenRightPaddingAdjustment:-1},accSagittal17KleismaUp:{code:"accSagittal17KleismaUp",parenRightPaddingAdjustment:-1},accSagittal17KleismaDown:{code:"accSagittal17KleismaDown",parenRightPaddingAdjustment:-1},accSagittal143CommaUp:{code:"accSagittal143CommaUp",parenRightPaddingAdjustment:-1},accSagittal143CommaDown:{code:"accSagittal143CommaDown",parenRightPaddingAdjustment:-1},accSagittal11v49CommaUp:{code:"accSagittal11v49CommaUp",parenRightPaddingAdjustment:-1},accSagittal11v49CommaDown:{code:"accSagittal11v49CommaDown",parenRightPaddingAdjustment:-1},accSagittal19CommaUp:{code:"accSagittal19CommaUp",parenRightPaddingAdjustment:-1},accSagittal19CommaDown:{code:"accSagittal19CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v19CommaUp:{code:"accSagittal7v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v19CommaDown:{code:"accSagittal7v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisUp:{code:"accSagittal49SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisDown:{code:"accSagittal49SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisUp:{code:"accSagittal23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisDown:{code:"accSagittal23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisUp:{code:"accSagittal5v13MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisDown:{code:"accSagittal5v13MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisUp:{code:"accSagittal11v19MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisDown:{code:"accSagittal11v19MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisUp:{code:"accSagittal49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisDown:{code:"accSagittal49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisUp:{code:"accSagittal5v49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisDown:{code:"accSagittal5v49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisUp:{code:"accSagittal49LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisDown:{code:"accSagittal49LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisUp:{code:"accSagittal11v19LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisDown:{code:"accSagittal11v19LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisUp:{code:"accSagittal5v13LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisDown:{code:"accSagittal5v13LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SDown:{code:"accSagittalSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat23SUp:{code:"accSagittalFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp49SDown:{code:"accSagittalSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalFlat49SUp:{code:"accSagittalFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CDown:{code:"accSagittalSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CUp:{code:"accSagittalFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp19CDown:{code:"accSagittalSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat19CUp:{code:"accSagittalFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CDown:{code:"accSagittalSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CUp:{code:"accSagittalFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalSharp143CDown:{code:"accSagittalSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalFlat143CUp:{code:"accSagittalFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17kDown:{code:"accSagittalSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalFlat17kUp:{code:"accSagittalFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sDown:{code:"accSagittalSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalFlat19sUp:{code:"accSagittalFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sUp:{code:"accSagittalSharp19sUp",parenRightPaddingAdjustment:-1},accSagittalFlat19sDown:{code:"accSagittalFlat19sDown",parenRightPaddingAdjustment:-1},accSagittalSharp17kUp:{code:"accSagittalSharp17kUp",parenRightPaddingAdjustment:-1},accSagittalFlat17kDown:{code:"accSagittalFlat17kDown",parenRightPaddingAdjustment:-1},accSagittalSharp143CUp:{code:"accSagittalSharp143CUp",parenRightPaddingAdjustment:-1},accSagittalFlat143CDown:{code:"accSagittalFlat143CDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CUp:{code:"accSagittalSharp11v49CUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CDown:{code:"accSagittalFlat11v49CDown",parenRightPaddingAdjustment:-1},accSagittalSharp19CUp:{code:"accSagittalSharp19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat19CDown:{code:"accSagittalFlat19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CUp:{code:"accSagittalSharp7v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CDown:{code:"accSagittalFlat7v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp49SUp:{code:"accSagittalSharp49SUp",parenRightPaddingAdjustment:-1},accSagittalFlat49SDown:{code:"accSagittalFlat49SDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SUp:{code:"accSagittalSharp23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat23SDown:{code:"accSagittalFlat23SDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13MUp:{code:"accSagittalSharp5v13MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13MDown:{code:"accSagittalFlat5v13MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19MUp:{code:"accSagittalSharp11v19MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19MDown:{code:"accSagittalFlat11v19MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49MUp:{code:"accSagittalSharp49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat49MDown:{code:"accSagittalFlat49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v49MUp:{code:"accSagittalSharp5v49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v49MDown:{code:"accSagittalFlat5v49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49LUp:{code:"accSagittalSharp49LUp",parenRightPaddingAdjustment:-1},accSagittalFlat49LDown:{code:"accSagittalFlat49LDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19LUp:{code:"accSagittalSharp11v19LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19LDown:{code:"accSagittalFlat11v19LDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13LUp:{code:"accSagittalSharp5v13LUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13LDown:{code:"accSagittalFlat5v13LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23SDown:{code:"accSagittalDoubleSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23SUp:{code:"accSagittalDoubleFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp49SDown:{code:"accSagittalDoubleSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat49SUp:{code:"accSagittalDoubleFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v19CDown:{code:"accSagittalDoubleSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v19CUp:{code:"accSagittalDoubleFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19CDown:{code:"accSagittalDoubleSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19CUp:{code:"accSagittalDoubleFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp11v49CDown:{code:"accSagittalDoubleSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat11v49CUp:{code:"accSagittalDoubleFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp143CDown:{code:"accSagittalDoubleSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat143CUp:{code:"accSagittalDoubleFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17kDown:{code:"accSagittalDoubleSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17kUp:{code:"accSagittalDoubleFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19sDown:{code:"accSagittalDoubleSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19sUp:{code:"accSagittalDoubleFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalShaftUp:{code:"accSagittalShaftUp",parenRightPaddingAdjustment:-1},accSagittalShaftDown:{code:"accSagittalShaftDown",parenRightPaddingAdjustment:-1},accSagittalAcute:{code:"accSagittalAcute",parenRightPaddingAdjustment:-1},accSagittalGrave:{code:"accSagittalGrave",parenRightPaddingAdjustment:-1},accSagittal1MinaUp:{code:"accSagittal1MinaUp",parenRightPaddingAdjustment:-1},accSagittal1MinaDown:{code:"accSagittal1MinaDown",parenRightPaddingAdjustment:-1},accSagittal2MinasUp:{code:"accSagittal2MinasUp",parenRightPaddingAdjustment:-1},accSagittal2MinasDown:{code:"accSagittal2MinasDown",parenRightPaddingAdjustment:-1},accSagittal1TinaUp:{code:"accSagittal1TinaUp",parenRightPaddingAdjustment:-1},accSagittal1TinaDown:{code:"accSagittal1TinaDown",parenRightPaddingAdjustment:-1},accSagittal2TinasUp:{code:"accSagittal2TinasUp",parenRightPaddingAdjustment:-1},accSagittal2TinasDown:{code:"accSagittal2TinasDown",parenRightPaddingAdjustment:-1},accSagittal3TinasUp:{code:"accSagittal3TinasUp",parenRightPaddingAdjustment:-1},accSagittal3TinasDown:{code:"accSagittal3TinasDown",parenRightPaddingAdjustment:-1},accSagittal4TinasUp:{code:"accSagittal4TinasUp",parenRightPaddingAdjustment:-1},accSagittal4TinasDown:{code:"accSagittal4TinasDown",parenRightPaddingAdjustment:-1},accSagittal5TinasUp:{code:"accSagittal5TinasUp",parenRightPaddingAdjustment:-1},accSagittal5TinasDown:{code:"accSagittal5TinasDown",parenRightPaddingAdjustment:-1},accSagittal6TinasUp:{code:"accSagittal6TinasUp",parenRightPaddingAdjustment:-1},accSagittal6TinasDown:{code:"accSagittal6TinasDown",parenRightPaddingAdjustment:-1},accSagittal7TinasUp:{code:"accSagittal7TinasUp",parenRightPaddingAdjustment:-1},accSagittal7TinasDown:{code:"accSagittal7TinasDown",parenRightPaddingAdjustment:-1},accSagittal8TinasUp:{code:"accSagittal8TinasUp",parenRightPaddingAdjustment:-1},accSagittal8TinasDown:{code:"accSagittal8TinasDown",parenRightPaddingAdjustment:-1},accSagittal9TinasUp:{code:"accSagittal9TinasUp",parenRightPaddingAdjustment:-1},accSagittal9TinasDown:{code:"accSagittal9TinasDown",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaUp:{code:"accSagittalFractionalTinaUp",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaDown:{code:"accSagittalFractionalTinaDown",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlat:{code:"accidentalNarrowReversedFlat",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlatAndFlat:{code:"accidentalNarrowReversedFlatAndFlat",parenRightPaddingAdjustment:-1},accidentalWilsonPlus:{code:"accidentalWilsonPlus",parenRightPaddingAdjustment:-1},accidentalWilsonMinus:{code:"accidentalWilsonMinus",parenRightPaddingAdjustment:-1}},j={"a.":{code:"augmentationDot",between_lines:!0},av:{aboveCode:"articStaccatissimoAbove",belowCode:"articStaccatissimoBelow",between_lines:!0},"a>":{aboveCode:"articAccentAbove",belowCode:"articAccentBelow",between_lines:!0},"a-":{aboveCode:"articTenutoAbove",belowCode:"articTenutoBelow",between_lines:!0},"a^":{aboveCode:"articMarcatoAbove",belowCode:"articMarcatoBelow",between_lines:!1},"a+":{code:"pluckedLeftHandPizzicato",between_lines:!1},ao:{aboveCode:"pluckedSnapPizzicatoAbove",belowCode:"pluckedSnapPizzicatoBelow",between_lines:!1},ah:{code:"stringsHarmonic",between_lines:!1},"a@":{aboveCode:"fermataAbove",belowCode:"fermataBelow",between_lines:!1},"a@a":{code:"fermataAbove",between_lines:!1},"a@u":{code:"fermataBelow",between_lines:!1},"a@s":{aboveCode:"fermataShortAbove",belowCode:"fermataShortBelow",between_lines:!1},"a@as":{code:"fermataShortAbove",between_lines:!1},"a@us":{code:"fermataShortBelow",between_lines:!1},"a@l":{aboveCode:"fermataLongAbove",belowCode:"fermataLongBelow",between_lines:!1},"a@al":{code:"fermataLongAbove",between_lines:!1},"a@ul":{code:"fermataLongBelow",between_lines:!1},"a@vl":{aboveCode:"fermataVeryLongAbove",belowCode:"fermataVeryLongBelow",between_lines:!1},"a@avl":{code:"fermataVeryLongAbove",between_lines:!1},"a@uvl":{code:"fermataVeryLongBelow",between_lines:!1},"a|":{code:"stringsUpBow",between_lines:!1},am:{code:"stringsDownBow",between_lines:!1},"a,":{code:"pictChokeCymbal",between_lines:!1}},X={mordent:{code:"ornamentShortTrill"},mordent_inverted:{code:"ornamentMordent"},turn:{code:"ornamentTurn"},turn_inverted:{code:"ornamentTurnSlash"},tr:{code:"ornamentTrill"},upprall:{code:"ornamentPrecompSlideTrillDAnglebert"},downprall:{code:"ornamentPrecompDoubleCadenceUpperPrefix"},prallup:{code:"ornamentPrecompTrillSuffixDandrieu"},pralldown:{code:"ornamentPrecompTrillLowerSuffix"},upmordent:{code:"ornamentPrecompSlideTrillBach"},downmordent:{code:"ornamentPrecompDoubleCadenceUpperPrefixTurn"},lineprall:{code:"ornamentPrecompAppoggTrill"},prallprall:{code:"ornamentTremblement"},scoop:{code:"brassScoop"},doit:{code:"brassDoitMedium"},fall:{code:"brassFallLipShort"},doitLong:{code:"brassLiftMedium"},fallLong:{code:"brassFallRoughMedium"},bend:{code:"brassBend"},plungerClosed:{code:"brassMuteClosed"},plungerOpen:{code:"brassMuteOpen"},flip:{code:"brassFlip"},jazzTurn:{code:"brassJazzTurn"},smear:{code:"brassSmear"}};class V{static currentMusicFont(){if(0===V.MUSIC_FONT_STACK.length)throw new g("NoFonts","The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).");return V.MUSIC_FONT_STACK[0]}static clefProperties(t){if(!t||!(t in G))throw new g("BadArgument","Invalid clef: "+t);return G[t]}static keyProperties(t,e="treble",i){let b={octave_shift:0,duration:"4"};"object"==typeof i&&(b=Object.assign(Object.assign({},b),i));const a=V.sanitizeDuration(b.duration),n=t.split("/");if(n.length<2)throw new g("BadArguments",`First argument must be note/octave or note/octave/glyph-code: ${t}`);const s=n[0].toUpperCase(),l=H[s];if(!l)throw new g("BadArguments","Invalid key name: "+s);l.octave&&(n[1]=l.octave.toString());let o=parseInt(n[1],10);o-=b.octave_shift;let r=(7*o-28+l.index)/2;r+=V.clefProperties(e).line_shift;let h=0;r<=0&&2*r%2==0&&(h=1),r>=6&&2*r%2==0&&(h=-1);const m=void 0!==l.int_val?12*o+l.int_val:void 0,c=l.code,d=l.shift_right;let _={};if(n.length>2&&n[2]){const t=n[2].toUpperCase();_={code:this.codeNoteHead(t,a)}||{}}return Object.assign({key:s,octave:o,line:r,int_value:m,accidental:l.accidental,code:c,stroke:h,shift_right:d,displaced:!1},_)}static integerToNote(t){if(void 0===t||t<0||t>11)throw new g("BadArguments",`integerToNote() requires an integer in the range [0, 11]: ${t}`);const e={0:"C",1:"C#",2:"D",3:"D#",4:"E",5:"F",6:"F#",7:"G",8:"G#",9:"A",10:"A#",11:"B"}[t];if(!e)throw new g("BadArguments",`Unknown note value for integer: ${t}`);return e}static tabToGlyphProps(t,e=1){let i,b=0,a=0;if("X"===t.toUpperCase()){const t=new Z("accidentalDoubleSharp",V.TABLATURE_FONT_SCALE).getMetrics();if(i="accidentalDoubleSharp",null==t.width||null==t.height)throw new g("InvalidMetrics","Width and height required");b=t.width,a=-t.height/2}else b=V.textWidth(t);return{text:t,code:i,getWidth:()=>b*e,shift_y:a}}static textWidth(t){return 7*t.toString().length}static articulationCodes(t){return j[t]}static accidentalCodes(t){return Y[t]}static ornamentCodes(t){return X[t]}static keySignature(t){const e=I[t];if(!e)throw new g("BadKeySignature",`Bad key signature spec: '${t}'`);if(!e.acc)return[];const i={b:[2,.5,2.5,1,3,1.5,3.5],"#":[0,1.5,-.5,1,2.5,.5,2]}[e.acc],b=[];for(let t=0;tZ.getWidth(n,t)}),b)}}V.UNISON=!0,V.SOFTMAX_FACTOR=10,V.STEM_WIDTH=1.5,V.STEM_HEIGHT=35,V.STAVE_LINE_THICKNESS=1,V.RENDER_PRECISION_PLACES=3,V.RESOLUTION=L,V.MUSIC_FONT_STACK=[],V.NOTATION_FONT_SCALE=39,V.TABLATURE_FONT_SCALE=39,V.SLASH_NOTEHEAD_WIDTH=15,V.STAVE_LINE_DISTANCE=10,V.TEXT_HEIGHT_OFFSET_HACK=1,V.accidentalMap=Y,V.accidentalColumnsTable={1:{a:[1],b:[1]},2:{a:[1,2]},3:{a:[1,3,2],b:[1,2,1],second_on_bottom:[1,2,3]},4:{a:[1,3,4,2],b:[1,2,3,1],spaced_out_tetrachord:[1,2,1,2]},5:{a:[1,3,5,4,2],b:[1,2,4,3,1],spaced_out_pentachord:[1,2,3,2,1],very_spaced_out_pentachord:[1,2,1,2,1]},6:{a:[1,3,5,6,4,2],b:[1,2,4,5,3,1],spaced_out_hexachord:[1,3,2,1,3,2],very_spaced_out_hexachord:[1,2,1,2,1,2]}},V.unicode={sharp:String.fromCharCode(9839),flat:String.fromCharCode(9837),natural:String.fromCharCode(9838),triangle:String.fromCharCode(9651),"o-with-slash":String.fromCharCode(248),degrees:String.fromCharCode(176),circle:String.fromCharCode(9675)},V.validTypes={n:{name:"note"},r:{name:"rest"},h:{name:"harmonic"},m:{name:"muted"},s:{name:"slash"},g:{name:"ghost"},d:{name:"diamond"},x:{name:"x"},ci:{name:"circled"},cx:{name:"circle x"},sf:{name:"slashed"},sb:{name:"slashed backward"},sq:{name:"square"},tu:{name:"triangle up"},td:{name:"triangle down"}},V.TIME4_4={num_beats:4,beat_value:4,resolution:L};const K={"1/2":{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restDoubleWhole",rest:!0,position:"B/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},1:{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restWhole",ledger_code_head:"restWholeLegerLine",rest:!0,position:"D/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},2:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restHalf",ledger_code_head:"restHalfLegerLine",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},4:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restQuarter",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1.5,line_below:1.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},8:{common:{code_head:"",stem:!0,flag:!0,beam_count:1,stem_beam_extension:0,code_flag_upstem:"flag8thUp",code_flag_downstem:"flag8thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest8th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:1},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},16:{common:{code_head:"",beam_count:2,stem_beam_extension:0,stem:!0,flag:!0,code_flag_upstem:"flag16thUp",code_flag_downstem:"flag16thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest16th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},32:{common:{code_head:"",beam_count:3,stem_beam_extension:7.5,stem:!0,flag:!0,code_flag_upstem:"flag32ndUp",code_flag_downstem:"flag32ndDown",stem_up_extension:9,stem_down_extension:9,tabnote_stem_up_extension:9,tabnote_stem_down_extension:9,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest32nd",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},64:{common:{code_head:"",beam_count:4,stem_beam_extension:15,stem:!0,flag:!0,code_flag_upstem:"flag64thUp",code_flag_downstem:"flag64thDown",stem_up_extension:13,stem_down_extension:13,tabnote_stem_up_extension:13,tabnote_stem_down_extension:13,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest64th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},128:{common:{code_head:"",beam_count:5,stem_beam_extension:22.5,stem:!0,flag:!0,code_flag_upstem:"flag128thUp",code_flag_downstem:"flag128thDown",stem_up_extension:22,stem_down_extension:22,tabnote_stem_up_extension:22,tabnote_stem_down_extension:22,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest128th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-2.5,line_above:3,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}}};var $,J;!function(t){t[t.MOVE=0]="MOVE",t[t.LINE=1]="LINE",t[t.QUADRATIC=2]="QUADRATIC",t[t.BEZIER=3]="BEZIER"}($||($={}));class q{constructor(t,e,i){this.point=-1,this.metrics=Z.loadMetrics(t,e,i),this.bbox=Z.getOutlineBoundingBox(this.metrics.outline,this.metrics.scale,this.metrics.x_shift,this.metrics.y_shift),i&&(this.point=Z.lookupFontMetric(this.metrics.font,i,e,"point",-1))}}class Q{constructor(t,e,i,b){this.outline=t,this.originX=e,this.originY=i,this.scale=b,this.i=0,this.precision=1,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES)}done(){return this.i>=this.outline.length}next(){return Math.round(this.outline[this.i++]*this.precision/this.precision)}nextX(){return Math.round((this.originX+this.outline[this.i++]*this.scale)*this.precision)/this.precision}nextY(){return Math.round((this.originY-this.outline[this.i++]*this.scale)*this.precision)/this.precision}static parse(t){const e=[],i=t.split(" ");let b=0;for(;b{const e=t.getTickContext();a&&t.setStave(a),e.setXOffset(n)}))}}class et{static get NUM_TONES(){return this.canonical_notes.length}static get roots(){return["c","d","e","f","g","a","b"]}static get root_values(){return[0,2,4,5,7,9,11]}static get root_indices(){return{c:0,d:1,e:2,f:3,g:4,a:5,b:6}}static get canonical_notes(){return["c","c#","d","d#","e","f","f#","g","g#","a","a#","b"]}static get diatonic_intervals(){return["unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","octave"]}static get diatonic_accidentals(){return{unison:{note:0,accidental:0},m2:{note:1,accidental:-1},M2:{note:1,accidental:0},m3:{note:2,accidental:-1},M3:{note:2,accidental:0},p4:{note:3,accidental:0},dim5:{note:4,accidental:-1},p5:{note:4,accidental:0},m6:{note:5,accidental:-1},M6:{note:5,accidental:0},b7:{note:6,accidental:-1},M7:{note:6,accidental:0},octave:{note:7,accidental:0}}}static get intervals(){return{u:0,unison:0,m2:1,b2:1,min2:1,S:1,H:1,2:2,M2:2,maj2:2,T:2,W:2,m3:3,b3:3,min3:3,M3:4,3:4,maj3:4,4:5,p4:5,"#4":6,b5:6,aug4:6,dim5:6,5:7,p5:7,"#5":8,b6:8,aug5:8,6:9,M6:9,maj6:9,b7:10,m7:10,min7:10,dom7:10,M7:11,maj7:11,8:12,octave:12}}static get scales(){return{major:[2,2,1,2,2,2,1],minor:[2,1,2,2,1,2,2],ionian:[2,2,1,2,2,2,1],dorian:[2,1,2,2,2,1,2],phyrgian:[1,2,2,2,1,2,2],lydian:[2,2,2,1,2,2,1],mixolydian:[2,2,1,2,2,1,2],aeolian:[2,1,2,2,1,2,2],locrian:[1,2,2,1,2,2,2]}}static get scaleTypes(){return{M:et.scales.major,m:et.scales.minor}}static get accidentals(){return["bb","b","n","#","##"]}static get noteValues(){return{c:{root_index:0,int_val:0},cn:{root_index:0,int_val:0},"c#":{root_index:0,int_val:1},"c##":{root_index:0,int_val:2},cb:{root_index:0,int_val:11},cbb:{root_index:0,int_val:10},d:{root_index:1,int_val:2},dn:{root_index:1,int_val:2},"d#":{root_index:1,int_val:3},"d##":{root_index:1,int_val:4},db:{root_index:1,int_val:1},dbb:{root_index:1,int_val:0},e:{root_index:2,int_val:4},en:{root_index:2,int_val:4},"e#":{root_index:2,int_val:5},"e##":{root_index:2,int_val:6},eb:{root_index:2,int_val:3},ebb:{root_index:2,int_val:2},f:{root_index:3,int_val:5},fn:{root_index:3,int_val:5},"f#":{root_index:3,int_val:6},"f##":{root_index:3,int_val:7},fb:{root_index:3,int_val:4},fbb:{root_index:3,int_val:3},g:{root_index:4,int_val:7},gn:{root_index:4,int_val:7},"g#":{root_index:4,int_val:8},"g##":{root_index:4,int_val:9},gb:{root_index:4,int_val:6},gbb:{root_index:4,int_val:5},a:{root_index:5,int_val:9},an:{root_index:5,int_val:9},"a#":{root_index:5,int_val:10},"a##":{root_index:5,int_val:11},ab:{root_index:5,int_val:8},abb:{root_index:5,int_val:7},b:{root_index:6,int_val:11},bn:{root_index:6,int_val:11},"b#":{root_index:6,int_val:0},"b##":{root_index:6,int_val:1},bb:{root_index:6,int_val:10},bbb:{root_index:6,int_val:9}}}isValidNoteValue(t){return t>=0&&t=0&&t3)throw new g("BadArguments","Invalid note name: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|bb|n|#|##)?$/.exec(e);if(null!==i){return{root:i[1],accidental:i[2]}}throw new g("BadArguments","Invalid note name: "+t)}getKeyParts(t){if(!t||t.length<1)throw new g("BadArguments","Invalid key: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|#)?(mel|harm|m|M)?$/.exec(e);if(null!==i){const t=i[1],e=i[2];let b=i[3];return b||(b="M"),{root:t,accidental:e,type:b}}throw new g("BadArguments",`Invalid key: ${t}`)}getNoteValue(t){const e=et.noteValues[t];if(void 0===e)throw new g("BadArguments",`Invalid note name: ${t}`);return e.int_val}getIntervalValue(t){const e=et.intervals[t];if(void 0===e)throw new g("BadArguments",`Invalid interval name: ${t}`);return e}getCanonicalNoteName(t){if(!this.isValidNoteValue(t))throw new g("BadArguments",`Invalid note value: ${t}`);return et.canonical_notes[t]}getCanonicalIntervalName(t){if(!this.isValidIntervalValue(t))throw new g("BadArguments",`Invalid interval value: ${t}`);return et.diatonic_intervals[t]}getRelativeNoteValue(t,e,i=1){if(1!==i&&-1!==i)throw new g("BadArguments",`Invalid direction: ${i}`);let b=(t+i*e)%et.NUM_TONES;return b<0&&(b+=et.NUM_TONES),b}getRelativeNoteName(t,e){const i=this.getNoteParts(t),b=this.getNoteValue(i.root);let a=e-b;if(Math.abs(a)>et.NUM_TONES-3){let i=1;a>0&&(i=-1);const n=(e+1+(b+1))%et.NUM_TONES*i;if(Math.abs(n)>2)throw new g("BadArguments",`Notes not related: ${t}, ${e})`);a=n}if(Math.abs(a)>2)throw new g("BadArguments",`Notes not related: ${t}, ${e})`);let n=i.root;if(a>0)for(let t=1;t<=a;++t)n+="#";else if(a<0)for(let t=-1;t>=a;--t)n+="b";return n}getScaleTones(t,e){const i=[t];let b=t;for(let a=0;ae.line-t.line));const h=[];let m=0;for(let t=0;th[i+t],n=t=>t.map(a),s=(t,e)=>{const[i,b]=n([t,e]).map((t=>t.line));return i-b},l=(...t)=>t.map(n).every((([t,e])=>!this.checkCollision(t,e))),o=b-i+1;let r,m,d=this.checkCollision(h[i],h[b])?"a":"b";switch(o){case 3:"a"===d&&.5===s(1,2)&&.5!==s(0,1)&&(d="second_on_bottom");break;case 4:l([0,2],[1,3])&&(d="spaced_out_tetrachord");break;case 5:"b"===d&&l([1,3])&&(d="spaced_out_pentachord",l([0,2],[2,4])&&(d="very_spaced_out_pentachord"));break;case 6:l([0,3],[1,4],[2,5])&&(d="spaced_out_hexachord"),l([0,2],[2,4],[1,3],[3,5])&&(d="very_spaced_out_hexachord")}if(o>=7){let e=2,i=!0;for(;!0===i;){i=!1;for(let t=0;t+em?c:m}else for(r=t;r<=b;r++)m=V.accidentalColumnsTable[o][d][r-t],h[r].column=m,c=c>m?c:m;t=b}const d=[],_=[];for(let t=0;t<=c;t++)d[t]=0,_[t]=0;d[0]=a+m,_[0]=a,h.forEach((t=>{t.width>d[t.column]&&(d[t.column]=t.width)}));for(let t=1;t{let e=0;const i=g+t.numAcc;for(;g0?(b=e.flatLine||e.dblSharpLine?2.5:3,t.dblSharpLine&&(i-=.5)):(b=t.flatLine||t.dblSharpLine?2.5:3,e.dblSharpLine&&(i-=.5));const a=Math.abs(i){const e=new z(0,1);t.getTickables().forEach((t=>{if(t.shouldIgnoreTicks())return;const a=b[e.value()];a?a.push(t):(i.push(e.value()),b[e.value()]=[t]),e.add(t.getTicks())}))}));const n=new et;e||(e="C");const s=n.createScaleMap(e),l={};i.forEach((t=>{const e=b[t],i=[],o=t=>{if(!c(t)||t.isRest()||t.shouldIgnoreTicks())return;const e=t;e.keys.forEach(((t,b)=>{const o=n.getNoteParts(t.split("/")[0]),r=t.split("/")[1],h=o.accidental||"n",m=o.root+h;l[o.root+r]||(l[o.root+r]=s[o.root]);const c=l[o.root+r]===m,d=i.indexOf(t)>-1;if(e.getModifiers().forEach(((t,i)=>{a(t)&&t.type==h&&t.getIndex()==b&&e.getModifiers().splice(i,1)})),!c||c&&d){l[o.root+r]=m;const a=new bt(h);e.addModifier(a,b),i.push(t)}})),e.getModifiers().forEach((t=>{r(t)&&t.getGraceNotes().forEach(o)}))};e.forEach(o)}))}constructor(t){super(),it("New accidental: ",t),this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE,parenLeftPadding:2,parenRightPadding:2},this.accidental=V.accidentalCodes(this.type),p(this.accidental,"ArgumentError",`Unknown accidental type: ${t}`),this.cautionary=!1,this.reset()}reset(){const t=this.render_options.font_scale;this.glyph=new Z(this.accidental.code,t),this.glyph.setOriginX(1),this.cautionary&&(this.parenLeft=new Z(V.accidentalCodes("{").code,t),this.parenRight=new Z(V.accidentalCodes("}").code,t),this.parenLeft.setOriginX(1),this.parenRight.setOriginX(1))}getWidth(){if(this.cautionary){const t=p(this.parenLeft),e=p(this.parenRight),i=t.getMetrics().width+e.getMetrics().width+this.render_options.parenLeftPadding+this.render_options.parenRightPadding;return this.glyph.getMetrics().width+i}return this.glyph.getMetrics().width}setNote(t){return p(t,"ArgumentError",`Bad note value: ${t}`),this.note=t,o(t)&&(this.render_options.font_scale=25,this.reset()),this}setAsCautionary(){return this.cautionary=!0,this.render_options.font_scale=28,this.reset(),this}draw(){const{type:t,position:e,index:i,cautionary:b,x_shift:a,y_shift:n,glyph:s,render_options:{parenLeftPadding:l,parenRightPadding:o}}=this,r=this.checkContext(),h=this.checkAttachedNote();this.setRendered();const m=h.getModifierStartXY(e,i);let c=m.x+a;const d=m.y+n;if(it("Rendering: ",t,c,d),b){const t=p(this.parenLeft),e=p(this.parenRight);e.render(r,c,d),c-=e.getMetrics().width,c-=o,c-=this.accidental.parenRightPaddingAdjustment,s.render(r,c,d),c-=s.getMetrics().width,c-=l,t.render(r,c,d)}else s.render(r,c,d)}}bt.DEBUG=!1;class at extends R{static get CATEGORY(){return x.Stem}static get UP(){return 1}static get DOWN(){return-1}static get WIDTH(){return V.STEM_WIDTH}static get HEIGHT(){return V.STEM_HEIGHT}constructor(t){super(),this.stem_up_y_offset=0,this.stem_down_y_offset=0,this.stem_up_y_base_offset=0,this.stem_down_y_base_offset=0,this.x_begin=(null==t?void 0:t.x_begin)||0,this.x_end=(null==t?void 0:t.x_end)||0,this.y_top=(null==t?void 0:t.y_top)||0,this.y_bottom=(null==t?void 0:t.y_bottom)||0,this.stem_extension=(null==t?void 0:t.stem_extension)||0,this.stem_direction=(null==t?void 0:t.stem_direction)||0,this.hide=(null==t?void 0:t.hide)||!1,this.isStemlet=(null==t?void 0:t.isStemlet)||!1,this.stemletHeight=(null==t?void 0:t.stemletHeight)||0,this.renderHeightAdjustment=0,this.setOptions(t)}setOptions(t){this.stem_up_y_offset=(null==t?void 0:t.stem_up_y_offset)||0,this.stem_down_y_offset=(null==t?void 0:t.stem_down_y_offset)||0,this.stem_up_y_base_offset=(null==t?void 0:t.stem_up_y_base_offset)||0,this.stem_down_y_base_offset=(null==t?void 0:t.stem_down_y_base_offset)||0}setNoteHeadXBounds(t,e){return this.x_begin=t,this.x_end=e,this}setDirection(t){this.stem_direction=t}setExtension(t){this.stem_extension=t}getExtension(){return this.stem_extension}setYBounds(t,e){this.y_top=t,this.y_bottom=e}getHeight(){const t=this.stem_direction===at.UP?this.stem_up_y_offset:this.stem_down_y_offset;return(this.y_bottom-this.y_top+(at.HEIGHT-t+this.stem_extension))*this.stem_direction}getBoundingBox(){throw new g("NotImplemented","getBoundingBox() not implemented.")}getExtents(){const t=this.stem_direction===at.UP,e=[this.y_top,this.y_bottom],i=at.HEIGHT+this.stem_extension,b=(t?Math.min:Math.max)(...e),a=(t?Math.max:Math.min)(...e);return{topY:b+i*-this.stem_direction,baseY:a}}setVisibility(t){return this.hide=!t,this}setStemlet(t,e){return this.isStemlet=t,this.stemletHeight=e,this}adjustHeightForFlag(){this.renderHeightAdjustment=V.currentMusicFont().lookupMetric("stem.heightAdjustmentForFlag",-3)}adjustHeightForBeam(){this.renderHeightAdjustment=-at.WIDTH/2}draw(){if(this.setRendered(),this.hide)return;const t=this.checkContext();let e,i;const b=this.stem_direction;let a=0;b===at.DOWN?(e=this.x_begin,i=this.y_top+this.stem_down_y_offset,a=this.stem_down_y_base_offset):(e=this.x_end,i=this.y_bottom-this.stem_up_y_offset,a=this.stem_up_y_base_offset);const n=this.getHeight();!function(...t){at.DEBUG&&u("Vex.Flow.Stem",t)}("Rendering stem - ","Top Y: ",this.y_top,"Bottom Y: ",this.y_bottom);const s=this.isStemlet?n-this.stemletHeight*this.stem_direction:0;t.save(),this.applyStyle(),t.openGroup("stem",this.getAttribute("id"),{pointerBBox:!0}),t.beginPath(),t.setLineWidth(at.WIDTH),t.moveTo(e,i-s+a),t.lineTo(e,i-n-this.renderHeightAdjustment*b),t.stroke(),t.closeGroup(),this.restoreStyle(),t.restore()}}function nt(...t){rt.DEBUG&&u("Vex.Flow.TextFormatter",t)}at.DEBUG=!1;const st={},lt={},ot={};class rt{static getFontFamilies(){const t=[];for(const e in ot){const i=ot[e];t.push(Object.assign({},i))}return t}static create(t={}){nt("create: ",t),t.family||(t.family=F.SANS_SERIF);const e=[],i=t.family.split(/\s*,\s*/);for(const t of i){for(const i in ot)i.startsWith(t)&&e.push(ot[i]);if(e.length>0)break}let b;if(0===e.length)b=new rt(Object.values(ot)[0]);else if(1===e.length)b=new rt(e[0]);else{const i=F.isBold(t.weight),a=F.isItalic(t.style),n=e.find((t=>t.bold===i&&t.italic===a));if(n)b=new rt(n);else{const t=e.find((t=>t.italic===a||t.bold===i));b=new rt(t||e[0])}}const a=t.size;if(void 0!==a){const t=F.convertSizeToPointValue(a);b.setFontSize(t)}return b}static getInfo(t){return ot[t]}static registerInfo(t,e=!1){nt("registerInfo: ",t,e);const i=t.family;(void 0===ot[i]||e)&&(ot[i]=t)}constructor(t){this.family="",this.size=14,this.resolution=1e3,this.glyphs={},this.serifs=!1,this.monospaced=!1,this.italic=!1,this.bold=!1,this.superscriptOffset=0,this.subscriptOffset=0,this.maxSizeGlyph="@",this.cacheKey="",this.updateParams(t)}get localHeightCache(){var t;return void 0===lt[this.cacheKey]&&(lt[this.cacheKey]={}),null!==(t=lt[this.cacheKey])&&void 0!==t?t:{}}updateParams(t){t.family&&(this.family=t.family),t.resolution&&(this.resolution=t.resolution),t.glyphs&&(this.glyphs=t.glyphs),t.serifs&&(this.serifs=t.serifs),t.monospaced&&(this.monospaced=t.monospaced),t.italic&&(this.italic=t.italic),t.bold&&(this.bold=t.bold),t.maxSizeGlyph&&(this.maxSizeGlyph=t.maxSizeGlyph),t.superscriptOffset&&(this.superscriptOffset=t.superscriptOffset),t.subscriptOffset&&(this.subscriptOffset=t.subscriptOffset),this.updateCacheKey()}updateCacheKey(){const t=this.family.replace(/\s+/g,"_"),e=this.size,i=this.bold?E.BOLD:E.NORMAL,b=this.italic?P.ITALIC:P.NORMAL;this.cacheKey=`${t}%${e}%${i}%${b}`}getGlyphMetrics(t){return this.glyphs[t]?this.glyphs[t]:this.glyphs[this.maxSizeGlyph]}get maxHeight(){return this.getGlyphMetrics(this.maxSizeGlyph).ha/this.resolution*this.fontSizeInPixels}getWidthForCharacterInEm(t){var e;const i=this.getGlyphMetrics(t);if(i){return(null!==(e=i.advanceWidth)&&void 0!==e?e:0)/this.resolution}return.65}getYForCharacterInPx(t){const e=this.getGlyphMetrics(t),i={yMin:0,yMax:this.maxHeight,height:this.maxHeight};return e?("number"==typeof e.y_min&&(i.yMin=e.y_min/this.resolution*this.fontSizeInPixels),"number"==typeof e.y_max&&(i.yMax=e.y_max/this.resolution*this.fontSizeInPixels),i.height=i.yMax-i.yMin,i):i}getYForStringInPx(t){const e=this.localHeightCache,i={yMin:0,yMax:this.maxHeight,height:this.maxHeight},b=e[t];if(void 0!==b)return b;for(let e=0;et>e?t:e)),o+=(this.text_line+1)*V.STAVE_LINE_DISTANCE+s,m&&i===at.DOWN&&(o=Math.max(o,r.topY+s+h*this.text_line))}else if(this.verticalJustification===mt.CENTER){const t=e.getYForTopText(this.text_line)-1;o=t+(c.getYForBottomText(this.text_line)-t)/2+s/2}else if(this.verticalJustification===mt.TOP){o=Math.min(...e.getYs())-(this.text_line+1)*V.STAVE_LINE_DISTANCE,m&&i===at.UP&&(h=r.topY=1}function yt(t,e){return gt(t,e)?e===dt?Math.ceil:Math.floor:Math.round}const pt=t=>c(t)||o(t);class ut extends tt{static get CATEGORY(){return x.Articulation}static format(t,e){if(!t||0===t.length)return!1;let i=0;const b=(t,e,i)=>xt(yt(e,i),p(t.glyph.getMetrics().height)/10+.5);t.forEach((t=>{const a=t.checkAttachedNote();i=Math.max(a.getGlyphProps().getWidth(),i);let n=5;const s=a.hasStem()?a.getStemDirection():at.UP;let l=0;if(d(a)){const t=a.getStem();t&&(l=Math.abs(t.getHeight())/V.STAVE_LINE_DISTANCE)}const o=a.getStave();if(o&&(n=o.getNumLines()),t.getPosition()===dt){let i=a.getLineNumber(!0);s===at.UP&&(i+=l);let o=b(t,e.top_text_line,dt);const r=i+e.top_text_line+.5;!t.articulation.between_lines&&rt.getWidth())).reduce(((t,e)=>Math.max(e,t))),n=Math.min(Math.max(a-i,0),Math.max(a-(e.left_shift+e.right_shift),0));return e.left_shift+=n/2,e.right_shift+=n/2,!0}static easyScoreHook({articulations:t},e,i){if(!t)return;const b={staccato:"a.",tenuto:"a-",accent:"a>"};t.split(",").map((t=>t.trim().split("."))).map((([t,e])=>{const a={type:b[t]};return e&&(a.position=tt.PositionString[e]),i.getFactory().Articulation(a)})).map((t=>e.addModifier(t,0)))}constructor(t){super(),this.type=t,this.position=dt,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.reset()}reset(){this.articulation=V.articulationCodes(this.type),this.articulation||(this.articulation={code:this.type,between_lines:!1},this.type.endsWith("Above")&&(this.position=dt),this.type.endsWith("Below")&&(this.position=_t));const t=(this.position===dt?this.articulation.aboveCode:this.articulation.belowCode)||this.articulation.code;this.glyph=new Z(null!=t?t:"",this.render_options.font_scale),p(this.glyph,"ArgumentError",`Articulation not found: ${this.type}`),this.setWidth(p(this.glyph.getMetrics().width))}setBetweenLines(t=!0){return this.articulation.between_lines=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=this.checkIndex(),{position:b,glyph:a,text_line:n}=this,s=this.articulation.between_lines,l=e.checkStave(),o=l.getSpacingBetweenLines(),r=_(e),{x:h}=e.getModifierStartXY(b,i),m=!s||r,c=function(t,e){const i=e===dt&&t.getStemDirection()===at.UP||e===_t&&t.getStemDirection()===at.DOWN;return pt(t)?t.hasStem()&&i?.5:1:t.hasStem()&&i?1:0}(e,b),d=V.currentMusicFont().lookupMetric(`articulation.${a.getCode()}.padding`,0);let x={[dt]:()=>{a.setOrigin(.5,1);const t=function(t,e){const i=t.getStemDirection(),{topY:b,baseY:a}=t.getStemExtents();if(pt(t))return t.hasStem()?i===at.UP?b:a:Math.min(...t.getYs());if(_(t))return t.hasStem()&&i===at.UP?b:t.checkStave().getYForTopText(e);throw new g("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,n)-(n+c)*o;return m?Math.min(l.getYForTopText(ut.INITIAL_OFFSET),t):t},[_t]:()=>{a.setOrigin(.5,0);const t=function(t,e){const i=t.getStemDirection(),{topY:b,baseY:a}=t.getStemExtents();if(pt(t))return t.hasStem()?i===at.UP?a:b:Math.max(...t.getYs());if(_(t))return t.hasStem()?i===at.UP?t.checkStave().getYForBottomText(e):b:t.checkStave().getYForBottomText(e);throw new g("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,n)+(n+c)*o;return m?Math.max(l.getYForBottomText(ut.INITIAL_OFFSET),t):t}}[b]();if(!r){const t=b===dt?-1:1,n=e.getKeyProps()[i].line,l=(e.getYs()[i]-x)/o+Number(n),r=function(t,e,i,b){const a=xt(yt(e,i),e);if(t&>(a,i)&&a%1==0)return a+.5*-b;return a}(s,l,b,t);gt(r,b)&&a.setOrigin(.5,.5),x+=Math.abs(r-l)*o*t+d*t}!function(...t){ut.DEBUG&&u("Vex.Flow.Articulation",t)}(`Rendering articulation at (x: ${h}, y: ${x})`),a.render(t,h,x)}}ut.DEBUG=!1,ut.INITIAL_OFFSET=-.5;class ft{static get CATEGORY(){return x.RenderContext}set font(t){this.setFont(t)}get font(){return this.getFont()}setRawFont(t){return this.setFont(t),this}}function St(t,e,i,b="#F55"){t.save(),t.setFillStyle(b),t.beginPath(),t.arc(e,i,3,0,2*Math.PI,!1),t.closePath(),t.fill(),t.restore()}class Tt extends R{static get CATEGORY(){return x.Tickable}constructor(){super(),this._preFormatted=!1,this._postFormatted=!1,this.ticks=new z(0,1),this.intrinsicTicks=0,this.tickMultiplier=new z(1,1),this.width=0,this.x_shift=0,this.modifiers=[],this.tupletStack=[],this.align_center=!1,this.center_x_shift=0,this.ignore_ticks=!1,this.formatterMetrics={freedom:{left:0,right:0},duration:"",iterations:0,space:{used:0,mean:0,deviation:0}}}reset(){return this}getTicks(){return this.ticks}shouldIgnoreTicks(){return this.ignore_ticks}setIgnoreTicks(t){return this.ignore_ticks=t,this}setWidth(t){this.width=t}getWidth(){if(!this._preFormatted)throw new g("UnformattedNote","Can't call GetWidth on an unformatted note.");return this.width+(this.modifierContext?this.modifierContext.getWidth():0)}setXShift(t){return this.x_shift=t,this}getXShift(){return this.x_shift}getX(){return this.checkTickContext("Can't getX() without a TickContext.").getX()+this.x_shift}getFormatterMetrics(){return this.formatterMetrics}getCenterXShift(){return this.isCenterAligned()?this.center_x_shift:0}setCenterXShift(t){return this.center_x_shift=t,this}isCenterAligned(){return this.align_center}setCenterAlignment(t){return this.align_center=t,this}getVoice(){return p(this.voice,"NoVoice","Tickable has no voice.")}setVoice(t){this.voice=t}getTuplet(){return this.tuplet}getTupletStack(){return this.tupletStack}resetTuplet(t){let e,i;if(t){const b=this.tupletStack.indexOf(t);return-1!==b&&(this.tupletStack.splice(b,1),e=t.getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i)),this}for(;this.tupletStack.length;)e=(t=this.tupletStack.pop()).getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i);return this}setTuplet(t){if(t){this.tupletStack.push(t);const e=t.getNoteCount(),i=t.getNotesOccupied();this.applyTickMultiplier(i,e)}return this.tuplet=t,this}addToModifierContext(t){this.modifierContext=t;for(let t=0;t0){const b=_.space.deviation,a=b>=0?"+":"";t.setFillStyle("red"),t.fillText(a+Math.round(b),s+e.getXShift(),i-10)}t.restore()}static parseDuration(t){if(!t)return;const e=/(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/.exec(t);if(!e)return;return{duration:e[1],dots:e[2].length,type:e[3]||"n"}}static parseNoteStruct(t){const e=vt.parseDuration(t.duration);if(!e)return;let i=t.type;if(i&&!V.validTypes[i])return;const b=[];i||(i=e.type||"n",void 0!==t.keys&&t.keys.forEach(((t,e)=>{const a=t.split("/");b[e]=a&&3===a.length?a[2]:i})));let a=V.durationToTicks(e.duration);if(!a)return;const n=t.dots?t.dots:e.dots;if("number"!=typeof n)return;let s=a;for(let t=0;tV.getGlyphProps(this.duration,t))),this.playNote=void 0,this.ignore_ticks=!1,this.width=0,this.leftDisplacedHeadPx=0,this.rightDisplacedHeadPx=0,this.x_shift=0,this.ys=[],t.align_center&&this.setCenterAlignment(t.align_center),this.render_options={annotation_spacing:5,glyph_font_scale:1,stroke_px:1,scale:1,font:"",y_shift:0}}getPlayNote(){return this.playNote}setPlayNote(t){return this.playNote=t,this}isRest(){return!1}addStroke(t,e){return e.setNote(this),e.setIndex(t),this.modifiers.push(e),this.preFormatted=!1,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this.setYs([t.getYForLine(0)]),this.setContext(this.stave.getContext()),this}getLeftDisplacedHeadPx(){return this.leftDisplacedHeadPx}getRightDisplacedHeadPx(){return this.rightDisplacedHeadPx}setLeftDisplacedHeadPx(t){return this.leftDisplacedHeadPx=t,this}setRightDisplacedHeadPx(t){return this.rightDisplacedHeadPx=t,this}shouldIgnoreTicks(){return this.ignore_ticks}getLineNumber(t){return 0}getLineForRest(){return 0}getGlyph(){return this.glyphProps}getGlyphProps(){return this.glyphProps}getGlyphWidth(){return this.glyphProps.getWidth(this.render_options.glyph_font_scale)}setYs(t){return this.ys=t,this}getYs(){if(0===this.ys.length)throw new g("NoYValues","No Y-values calculated for this note.");return this.ys}getYForTopText(t){return this.checkStave().getYForTopText(t)}getVoice(){if(!this.voice)throw new g("NoVoice","Note has no voice.");return this.voice}setVoice(t){return this.voice=t,this.preFormatted=!1,this}getTickContext(){return this.checkTickContext()}setTickContext(t){return this.tickContext=t,this.preFormatted=!1,this}getDuration(){return this.duration}isDotted(){return this.getModifiersByType(x.Dot).length>0}hasStem(){return!1}getNoteType(){return this.noteType}getBeam(){return this.beam}checkBeam(){return p(this.beam,"NoBeam","No beam attached to instance")}hasBeam(){return null!=this.beam}setBeam(t){return this.beam=t,this}addModifier(t,e=0){const i="Note.addModifier(modifier: Modifier, index: number=0)";if("string"==typeof e&&(e=parseInt(e),console.warn(i+" expected a number for `index`, but received a string.")),"object"!=typeof t||"number"!=typeof e)throw new g("WrongParams","Incorrect call signature. Use "+i+" instead.");return t.setNote(this),t.setIndex(e),super.addModifier(t),this}getModifiersByType(t){return this.modifiers.filter((e=>e.getCategory()===t))}getModifierStartXY(t,e,i){if(!this.preFormatted)throw new g("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");return{x:this.getAbsoluteX(),y:this.ys[0]}}getRightParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getRightDisplacedHeadPx():0}getLeftParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getLeftDisplacedHeadPx()-this.x_shift:-this.x_shift}getFirstDotPx(){let t=this.getRightDisplacedHeadPx();return 0!==this.checkModifierContext().getMembers("Parenthesis").length&&(t+=V.currentMusicFont().lookupMetric("parenthesis.default.width")),t}getMetrics(){if(!this.preFormatted)throw new g("UnformattedNote","Can't call getMetrics on an unformatted note.");const t=this.modifierContext?this.modifierContext.getState().left_shift:0,e=this.modifierContext?this.modifierContext.getState().right_shift:0,i=this.getWidth();return{width:i,glyphWidth:this.getGlyphWidth(),notePx:i-t-e-this.leftDisplacedHeadPx-this.rightDisplacedHeadPx,modLeftPx:t,modRightPx:e,leftDisplacedHeadPx:this.leftDisplacedHeadPx,rightDisplacedHeadPx:this.rightDisplacedHeadPx,glyphPx:0}}getAbsoluteX(){let t=this.checkTickContext("Can't getAbsoluteX() without a TickContext.").getX();return this.stave&&(t+=this.stave.getNoteStartX()+V.currentMusicFont().lookupMetric("stave.padding")),this.isCenterAligned()&&(t+=this.getCenterXShift()),t}static getPoint(t){return"default"==t?V.NOTATION_FONT_SCALE:V.NOTATION_FONT_SCALE/5*3}getStemDirection(){throw new g("NoStem","No stem attached to this note.")}getStemExtents(){throw new g("NoStem","No stem attached to this note.")}getTieRightX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t+=-this.width/2+this.width+2,t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t-=this.width/2+2,t}getKeys(){return this.keys}getKeyProps(){return this.keyProps}}var wt,zt,Bt,Dt,Ct,Et;!function(t){t[t.CENTER=0]="CENTER",t[t.LEFT=1]="LEFT",t[t.RIGHT=2]="RIGHT",t[t.ABOVE=3]="ABOVE",t[t.BELOW=4]="BELOW",t[t.BEGIN=5]="BEGIN",t[t.END=6]="END"}(wt||(wt={}));class Pt extends R{static get CATEGORY(){return x.StaveModifier}static get Position(){return wt}constructor(){super(),this.width=0,this.x=0,this.padding=10,this.position=wt.ABOVE}getPosition(){return this.position}setPosition(t){return this.position=t,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this}getWidth(){return this.width}setWidth(t){return this.width=t,this}getX(){return this.x}setX(t){return this.x=t,this}placeGlyphOnLine(t,e,i,b=0){t.setYShift(e.getYForLine(null!=i?i:0)-e.getYForGlyphs()+b)}getPadding(t){return void 0!==t&&t<2?0:this.padding}setPadding(t){return this.padding=t,this}setLayoutMetrics(t){return this.layoutMetrics=t,this}getLayoutMetrics(){return this.layoutMetrics}draw(...t){}}!function(t){t[t.SINGLE=1]="SINGLE",t[t.DOUBLE=2]="DOUBLE",t[t.END=3]="END",t[t.REPEAT_BEGIN=4]="REPEAT_BEGIN",t[t.REPEAT_END=5]="REPEAT_END",t[t.REPEAT_BOTH=6]="REPEAT_BOTH",t[t.NONE=7]="NONE"}(zt||(zt={}));class kt extends Pt{static get CATEGORY(){return x.Barline}static get type(){return zt}static get typeString(){return{single:zt.SINGLE,double:zt.DOUBLE,end:zt.END,repeatBegin:zt.REPEAT_BEGIN,repeatEnd:zt.REPEAT_END,repeatBoth:zt.REPEAT_BOTH,none:zt.NONE}}constructor(t){super(),this.thickness=V.STAVE_LINE_THICKNESS;const e=zt;this.widths={},this.widths[e.SINGLE]=5,this.widths[e.DOUBLE]=5,this.widths[e.END]=5,this.widths[e.REPEAT_BEGIN]=5,this.widths[e.REPEAT_END]=5,this.widths[e.REPEAT_BOTH]=5,this.widths[e.NONE]=5,this.paddings={},this.paddings[e.SINGLE]=0,this.paddings[e.DOUBLE]=0,this.paddings[e.END]=0,this.paddings[e.REPEAT_BEGIN]=15,this.paddings[e.REPEAT_END]=15,this.paddings[e.REPEAT_BOTH]=15,this.paddings[e.NONE]=0,this.layoutMetricsMap={},this.layoutMetricsMap[e.SINGLE]={xMin:0,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.DOUBLE]={xMin:-3,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.END]={xMin:-5,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_END]={xMin:-10,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BEGIN]={xMin:-2,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BOTH]={xMin:-10,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.NONE]={xMin:0,xMax:0,paddingLeft:5,paddingRight:5},this.setPosition(wt.BEGIN),this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?kt.typeString[t]:t,this.setWidth(this.widths[this.type]),this.setPadding(this.paddings[this.type]),this.setLayoutMetrics(this.layoutMetricsMap[this.type]),this}draw(t){const e=t.checkContext();switch(this.setRendered(),this.applyStyle(e),e.openGroup("stavebarline",this.getAttribute("id")),this.type){case zt.SINGLE:this.drawVerticalBar(t,this.x,!1);break;case zt.DOUBLE:this.drawVerticalBar(t,this.x,!0);break;case zt.END:this.drawVerticalEndBar(t,this.x);break;case zt.REPEAT_BEGIN:this.drawRepeatBar(t,this.x,!0),t.getX()!==this.x&&this.drawVerticalBar(t,t.getX());break;case zt.REPEAT_END:this.drawRepeatBar(t,this.x,!1);break;case zt.REPEAT_BOTH:this.drawRepeatBar(t,this.x,!1),this.drawRepeatBar(t,this.x,!0)}e.closeGroup(),this.restoreStyle(e)}drawVerticalBar(t,e,i){const b=t.checkContext(),a=t.getTopLineTopY(),n=t.getBottomLineBottomY();i&&b.fillRect(e-3,a,1,n-a),b.fillRect(e,a,1,n-a)}drawVerticalEndBar(t,e){const i=t.checkContext(),b=t.getTopLineTopY(),a=t.getBottomLineBottomY();i.fillRect(e-5,b,1,a-b),i.fillRect(e-2,b,3,a-b)}drawRepeatBar(t,e,i){const b=t.checkContext(),a=t.getTopLineTopY(),n=t.getBottomLineBottomY();let s=3;i||(s=-5),b.fillRect(e+s,a,1,n-a),b.fillRect(e-2,a,3,n-a);i?s+=4:s-=4;const l=e+s+1;let o=(t.getNumLines()-1)*t.getSpacingBetweenLines();o=o/2-t.getSpacingBetweenLines()/2;let r=a+o+1;b.beginPath(),b.arc(l,r,2,0,2*Math.PI,!1),b.fill(),r+=t.getSpacingBetweenLines(),b.beginPath(),b.arc(l,r,2,0,2*Math.PI,!1),b.fill()}}class At extends vt{static get CATEGORY(){return x.BarNote}constructor(t=zt.SINGLE){super({duration:"b"}),this.metrics={widths:{}};const e=zt;this.metrics.widths={[e.SINGLE]:8,[e.DOUBLE]:12,[e.END]:15,[e.REPEAT_BEGIN]:14,[e.REPEAT_END]:14,[e.REPEAT_BOTH]:18,[e.NONE]:0},this.ignore_ticks=!0,this.setType(t),this.barline=new kt(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?kt.typeString[t]:t,this.setWidth(this.metrics.widths[this.type]),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkContext();!function(...t){At.DEBUG&&u("Vex.Flow.BarNote",t)}("Rendering bar line at: ",this.getAbsoluteX()),this.applyStyle(t),t.openGroup("barnote",this.getAttribute("id")),this.barline.setType(this.type),this.barline.setX(this.getAbsoluteX()),this.barline.draw(this.checkStave()),t.closeGroup(),this.restoreStyle(t),this.setRendered()}}At.DEBUG=!1;class Nt extends tt{static get CATEGORY(){return x.Bend}static get UP(){return 0}static get DOWN(){return 1}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let b=0;bt{const n=t+b,s=i;e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,i),e.quadraticCurveTo(n,s,t+b,a),e.stroke(),e.restore()},h=(t,i,b,a)=>{e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,a),e.quadraticCurveTo(t+b,a,t+b,i),e.stroke(),e.restore()},m=(t,i,b)=>{const a=i+4*b;e.beginPath(),e.moveTo(t,i),e.lineTo(t-4,a),e.lineTo(t+4,a),e.closePath(),e.fill()},c=(t,i)=>{e.save(),e.setFont(this.textFont);const b=t-e.measureText(i).width/2;e.fillText(i,b,o),e.restore()};let d,_=0,x=0;if(null===(t=this.tap)||void 0===t?void 0:t.length){c(i.getModifierStartXY(tt.Position.CENTER,this.index).x,this.tap)}for(let t=0;t0){const e=r.symbolBlocks[t-1];Mt.isSuperscript(e)||(a=b)}n&&a>0&&(g=!0,e.xShift=e.xShift+(a-b),b=a,a=0,r.setEnableKerning(!1)),i||n||(a=0),e.vAlign=g,b+=e.width,_=b}if(r.updateKerningAdjustments(),r.updateOverBarAdjustments(),r.getVertical()===Dt.TOP?(r.setTextLine(e.top_text_line),e.top_text_line+=x):(r.setTextLine(e.text_line+1),e.text_line+=x+1),r.getReportWidth()&&d(c)){const t=c.getGlyphProps().getWidth();r.getHorizontal()===Bt.LEFT?(l=Math.max(t,l),n=Math.max(n,_)+Mt.minPadding):r.getHorizontal()===Bt.RIGHT?(o=Math.max(t,o),s=Math.max(s,_)):(n=Math.max(n,_/2)+Mt.minPadding,s=Math.max(s,_/2),l=Math.max(t/2,l),o=Math.max(t/2,o))}b=0}const r=Math.min(Math.max(s-o,0),Math.max(s-e.right_shift,0)),h=Math.min(Math.max(n-l,0),Math.max(n-e.left_shift,0));return e.left_shift+=h,e.right_shift+=r,!0}constructor(){super(),this.symbolBlocks=[],this.horizontal=Bt.LEFT,this.vertical=Dt.TOP,this.useKerning=!0,this.reportWidth=!0,this.resetFont()}static get TEXT_FONT(){let t="Roboto Slab, Times, serif";return"Petaluma"===V.currentMusicFont().getName()&&(t="PetalumaScript, Arial, sans-serif"),{family:t,size:12,weight:E.NORMAL,style:P.NORMAL}}get superscriptOffset(){return Mt.superscriptOffset*this.textFormatter.fontSizeInPixels}get subscriptOffset(){return Mt.subscriptOffset*this.textFormatter.fontSizeInPixels}setReportWidth(t){return this.reportWidth=t,this}getReportWidth(){return this.reportWidth}updateOverBarAdjustments(){const t=this.symbolBlocks.findIndex((({symbolType:t,glyph:e})=>t===Ct.GLYPH&&void 0!==e&&"csymDiagonalArrangementSlash"===e.code));if(t<0)return;const e=this.symbolBlocks[t].width/4,i=.25*this.textFormatter.fontSizeInPixels;let b=0;for(;b0?this.symbolBlocks[t-1]:void 0;let b=0;e.symbolType===Ct.GLYPH&&void 0!==e.glyph&&e.glyph.code===Mt.glyphs.over.code&&(b+=e.glyph.metrics.x_shift),void 0!==i&&i.symbolType===Ct.GLYPH&&void 0!==i.glyph&&i.glyph.code===Mt.glyphs.over.code&&(b+=i.glyph.metrics.x_shift);let a=!1,n=!1;void 0!==i&&i.symbolType===Ct.TEXT&&(a=Mt.upperKerningText.some((t=>t===i.text[i.text.length-1])),n=Mt.lowerKerningText.some((t=>t===i.text[i.text.length-1])));const s=Mt.kerningOffset*this.textFormatter.fontSizeInPixels;return a&&e.symbolModifier===Et.SUPERSCRIPT&&(b+=s),n&&e.symbolType===Ct.TEXT&&(e.text[0]>="a"&&e.text[0]<="z"&&(b+=s/2),Mt.upperKerningText.some((t=>t===(null==i?void 0:i.text[i.text.length-1])))&&(b+=s/2)),b}getSymbolBlock(t={}){var e,i,b;const a=null!==(e=t.symbolType)&&void 0!==e?e:Ct.TEXT,n={text:null!==(i=t.text)&&void 0!==i?i:"",symbolType:a,symbolModifier:null!==(b=t.symbolModifier)&&void 0!==b?b:Et.NONE,xShift:0,yShift:0,vAlign:!1,width:0};if(a===Ct.GLYPH&&"string"==typeof t.glyph){const e=Mt.glyphs[t.glyph],i=20;n.glyph=new Z(e.code,i,{category:"chordSymbol"})}else a===Ct.TEXT?n.width=this.textFormatter.getWidthForTextInEm(n.text):a===Ct.LINE&&(n.width=t.width);return n}addSymbolBlock(t){return this.symbolBlocks.push(this.getSymbolBlock(t)),this}addText(t,e={}){const i=Ct.TEXT;return this.addSymbolBlock(Object.assign(Object.assign({},e),{text:t,symbolType:i}))}addTextSuperscript(t){const e=Ct.TEXT,i=Et.SUPERSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addTextSubscript(t){const e=Ct.TEXT,i=Et.SUBSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addGlyphSuperscript(t){const e=Ct.GLYPH,i=Et.SUPERSCRIPT;return this.addSymbolBlock({glyph:t,symbolType:e,symbolModifier:i})}addGlyph(t,e={}){const i=Ct.GLYPH;return this.addSymbolBlock(Object.assign(Object.assign({},e),{glyph:t,symbolType:i}))}addGlyphOrText(t,e={}){let i="";for(let b=0;b0&&(this.addText(i,e),i=""),this.addGlyph(a,e)):i+=a}return i.length>0&&this.addText(i,e),this}addLine(t,e={}){const i=Ct.LINE;return this.addSymbolBlock(Object.assign(Object.assign({},e),{symbolType:i,width:t}))}setFont(t,e,i,b){return super.setFont(t,e,i,b),this.textFormatter=rt.create(this.textFont),this}setEnableKerning(t){return this.useKerning=t,this}setVertical(t){return this.vertical="string"==typeof t?Mt.VerticalJustifyString[t]:t,this}getVertical(){return this.vertical}setHorizontal(t){return this.horizontal="string"==typeof t?Mt.HorizontalJustifyString[t]:t,this}getHorizontal(){return this.horizontal}getWidth(){let t=0;return this.symbolBlocks.forEach((e=>{t+=e.vAlign?0:e.width})),t}getYOffsetForText(t){var e;let i=0,b=0;for(b=0;b0?i/a*-1:0}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),t.save(),this.applyStyle(),t.openGroup("chordsymbol",this.getAttribute("id"));const i=e.getModifierStartXY(tt.Position.ABOVE,this.index);let b;t.setFont(this.textFont);const a=e.hasStem(),n=e.checkStave();if(this.vertical===Dt.BOTTOM){if(b=n.getYForBottomText(this.text_line+V.TEXT_HEIGHT_OFFSET_HACK),a){const t=e.checkStem().getExtents(),i=n.getSpacingBetweenLines(),a=1===e.getStemDirection()?t.baseY:t.topY;b=Math.max(b,a+i*(this.text_line+2))}}else{const t=Math.min(...e.getYs());if(b=Math.min(n.getYForTopText(this.text_line),t-10),a){const t=e.checkStem().getExtents(),i=n.getSpacingBetweenLines();b=Math.min(b,t.topY-5-i*this.text_line)}}let s=i.x;s=this.horizontal===Bt.LEFT?i.x:this.horizontal===Bt.RIGHT?i.x+this.getWidth():this.horizontal===Bt.CENTER?i.x-this.getWidth()/2:e.getStemX()-this.getWidth()/2,Ft("Rendering ChordSymbol: ",this.textFormatter,s,b),this.symbolBlocks.forEach((e=>{const i=Mt.isSuperscript(e),a=Mt.isSubscript(e);let n=b;if(Ft("shift was ",e.xShift,e.yShift),Ft("curY pre sub ",n),i&&(n+=this.superscriptOffset),a&&(n+=this.subscriptOffset),Ft("curY sup/sub ",n),e.symbolType===Ct.TEXT){if((i||a)&&(t.save(),this.textFont)){const{family:e,size:i,weight:b,style:a}=this.textFont,n=F.scaleSize(i,Mt.superSubRatio);t.setFont(e,n,b,a)}Ft("Rendering Text: ",e.text,s+e.xShift,n+e.yShift),t.fillText(e.text,s+e.xShift,n+e.yShift),(i||a)&&t.restore()}else e.symbolType===Ct.GLYPH&&e.glyph?(n+=e.yShift,Ft("Rendering Glyph: ",e.glyph.code,s+e.xShift,n),e.glyph.render(t,s+e.xShift,n)):e.symbolType===Ct.LINE&&(Ft("Rendering Line : ",e.width,s,n),t.beginPath(),t.setLineWidth(1),t.moveTo(s,b),t.lineTo(s+e.width,n),t.stroke());s+=e.width,e.vAlign&&(s+=e.xShift)})),t.closeGroup(),this.restoreStyle(),t.restore()}}Mt.DEBUG=!1,Mt.HorizontalJustify=Bt,Mt.HorizontalJustifyString={left:Bt.LEFT,right:Bt.RIGHT,center:Bt.CENTER,centerStem:Bt.CENTER_STEM},Mt.VerticalJustify=Dt,Mt.VerticalJustifyString={top:Dt.TOP,above:Dt.TOP,below:Dt.BOTTOM,bottom:Dt.BOTTOM},Mt.glyphs={diminished:{code:"csymDiminished"},dim:{code:"csymDiminished"},halfDiminished:{code:"csymHalfDiminished"},"+":{code:"csymAugmented"},augmented:{code:"csymAugmented"},majorSeventh:{code:"csymMajorSeventh"},minor:{code:"csymMinor"},"-":{code:"csymMinor"},"(":{code:"csymParensLeftTall"},leftParen:{code:"csymParensLeftTall"},")":{code:"csymParensRightTall"},rightParen:{code:"csymParensRightTall"},leftBracket:{code:"csymBracketLeftTall"},rightBracket:{code:"csymBracketRightTall"},leftParenTall:{code:"csymParensLeftVeryTall"},rightParenTall:{code:"csymParensRightVeryTall"},"/":{code:"csymDiagonalArrangementSlash"},over:{code:"csymDiagonalArrangementSlash"},"#":{code:"accidentalSharp"},b:{code:"accidentalFlat"}},Mt.symbolTypes=Ct,Mt.symbolModifiers=Et,Mt.noFormat=!1;class Ot extends tt{static get CATEGORY(){return x.Dot}static getDots(t){return t.getModifiersByType(Ot.CATEGORY)}static buildAndAttach(t,e){for(const i of t)if(null==e?void 0:e.all)for(let t=0;te.line-t.line));let n=i,s=0,l=null,o=null,r=null,h=0;for(let t=0;ts?n:s,l=c,o=i}return e.right_shift+=s,!0}constructor(){super(),this.position=tt.Position.RIGHT,this.radius=2,this.setWidth(5),this.dot_shiftY=0}setNote(t){return this.note=t,o(t)&&(this.radius*=.5,this.setWidth(3)),this}setDotShiftY(t){return this.dot_shiftY=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.checkStave().getSpacingBetweenLines(),b=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0});_(e)&&(b.y=e.getStemExtents().baseY);const a=b.x+this.x_shift+this.width-this.radius,n=b.y+this.y_shift+this.dot_shiftY*i;t.beginPath(),t.arc(a,n,this.radius,0,2*Math.PI,!1),t.fill()}}class Rt extends tt{static get CATEGORY(){return x.FretHandFinger}static format(t,e){const{left_shift:i,right_shift:b}=e;if(!t||0===t.length)return!1;const a=[];let n=null,s=0,l=0;for(let o=0;oe.line-t.line));let o=0,r=0,h=0,m=0,c=null,d=null;for(let t=0;th?e:h):s===tt.Position.RIGHT&&(_.setXShift(r),e=l+p,m=e>m?e:m),c=x,d=n}return e.left_shift+=h,e.right_shift+=m,!0}static easyScoreHook({fingerings:t}={},e,i){null==t||t.split(",").map((t=>{const e=t.trim().split("."),b={number:e[0]};return e[1]&&(b.position=e[1]),i.getFactory().Fingering(b)})).map(((t,i)=>e.addModifier(t,i)))}constructor(t){super(),this.finger=t,this.width=7,this.position=tt.Position.LEFT,this.x_shift=0,this.y_shift=0,this.x_offset=0,this.y_offset=0,this.resetFont()}setFretHandFinger(t){return this.finger=t,this}getFretHandFinger(){return this.finger}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let b=i.x+this.x_shift+this.x_offset,a=i.y+this.y_shift+this.y_offset+5;switch(this.position){case tt.Position.ABOVE:b-=4,a-=12;break;case tt.Position.BELOW:b-=2,a+=10;break;case tt.Position.LEFT:b-=this.width;break;case tt.Position.RIGHT:b+=1;break;default:throw new g("InvalidPosition",`The position ${this.position} does not exist`)}t.save(),t.setFont(this.textFont),t.fillText(""+this.finger,b,a),t.restore()}}Rt.TEXT_FONT={family:F.SANS_SERIF,size:9,weight:E.BOLD,style:P.NORMAL};class Lt extends vt{static get CATEGORY(){return x.NoteHead}constructor(t){super(t),this.custom_glyph=!1,this.stem_up_x_offset=0,this.stem_down_x_offset=0,this.index=t.index,this.x=t.x||0,this.y=t.y||0,t.note_type&&(this.noteType=t.note_type),this.displaced=t.displaced||!1,this.stem_direction=t.stem_direction||at.UP,this.line=t.line||0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),(this.line>5||this.line<0)&&this.glyphProps.ledger_code_head&&(this.glyphProps.code_head=this.glyphProps.ledger_code_head),this.glyph_code=this.glyphProps.code_head,this.x_shift=t.x_shift||0,t.custom_glyph_code&&(this.custom_glyph=!0,this.glyph_code=t.custom_glyph_code,this.stem_up_x_offset=t.stem_up_x_offset||0,this.stem_down_x_offset=t.stem_down_x_offset||0),this.setStyle(t.style),this.slashed=t.slashed||!1,this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE}),this.setWidth(!this.custom_glyph||this.glyph_code.startsWith("noteheadSlashed")||this.glyph_code.startsWith("noteheadCircled")?this.glyphProps.getWidth(this.render_options.glyph_font_scale):Z.getWidth(this.glyph_code,this.render_options.glyph_font_scale))}getWidth(){return this.width}isDisplaced(){return!0===this.displaced}setX(t){return this.x=t,this}getY(){return this.y}setY(t){return this.y=t,this}getLine(){return this.line}setLine(t){return this.line=t,this}getAbsoluteX(){const t=this.preFormatted?super.getAbsoluteX():this.x,e=at.WIDTH/2,i=V.currentMusicFont(),b=i.lookupMetric("notehead.shiftX",0)*this.stem_direction,a=i.lookupMetric("noteHead.displacedShiftX",0)*this.stem_direction;return t+b+(this.displaced?(this.width-e)*this.stem_direction+a:0)}getBoundingBox(){const t=this.checkStave().getSpacingBetweenLines(),e=t/2,i=this.y-e;return new D(this.getAbsoluteX(),i,this.width,t)}setStave(t){const e=this.getLine();return this.stave=t,this.stave&&(this.setY(this.stave.getYForNote(e)),this.setContext(this.stave.getContext())),this}preFormat(){if(this.preFormatted)return this;const t=this.getWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx;return this.setWidth(t),this.preFormatted=!0,this}draw(){const t=this.checkContext();this.setRendered();let e=this.getAbsoluteX();this.custom_glyph&&(e+=this.stem_direction===at.UP?this.stem_up_x_offset+(this.glyphProps.stem?this.glyphProps.getWidth(this.render_options.glyph_font_scale)-this.width:0):this.stem_down_x_offset);const i=this.y;!function(...t){Lt.DEBUG&&u("Vex.Flow.NoteHead",t)}("Drawing note head '",this.noteType,this.duration,"' at",e,i);const b=this.stem_direction,a=this.render_options.glyph_font_scale,n=`${this.glyph_code}Stem${b===at.UP?"Up":"Down"}`;if("s"===this.noteType){const a=this.checkStave().getSpacingBetweenLines();!function(t,e,i,b,a,n){const s=V.SLASH_NOTEHEAD_WIDTH;t.save(),t.setLineWidth(V.STEM_WIDTH);let l=!1;if(V.durationToNumber(e)>2&&(l=!0),l||(i-=V.STEM_WIDTH/2*a),t.beginPath(),t.moveTo(i,b+n),t.lineTo(i,b+1),t.lineTo(i+s,b-n),t.lineTo(i+s,b),t.lineTo(i,b+n),t.closePath(),l?t.fill():t.stroke(),V.durationToFraction(e).equals(.5)){const e=[-3,-1,s+1,s+3];for(let a=0;at.getCategory()===x.Dot&&0===t.getIndex())).length!==l.note.getModifiers().filter((t=>t.getCategory()===x.Dot&&0===t.getIndex())).length||t<1&&t>0||JSON.stringify(n.note.getStyle())!==JSON.stringify(l.note.getStyle())?(m=h+2,n.stemDirection===l.stemDirection?n.note.setXShift(m):l.note.setXShift(m)):n.note.voice!==l.note.voice&&n.stemDirection===l.stemDirection&&(n.line!=l.line?(m=h+2,n.note.setXShift(m)):1===l.stemDirection&&(l.stemDirection=-1,l.note.setStemDirection(-1)))}else t<1?(m=h+2,n.note.durationt.postFormat())),!0)}constructor(t){var e,i,b;super(t),this.minLine=0,this.maxLine=0,this.sortedKeyProps=[],this.ledgerLineStyle={},this.clef=null!==(e=t.clef)&&void 0!==e?e:"treble",this.octave_shift=null!==(i=t.octave_shift)&&void 0!==i?i:0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),this.displaced=!1,this.dot_shiftY=0,this.use_default_head_x=!1,this._noteHeads=[],this.modifiers=[],this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE,stroke_px:t.stroke_px||It.LEDGER_LINE_OFFSET}),this.calculateKeyProps(),this.buildStem(),t.auto_stem?this.autoStem():this.setStemDirection(null!==(b=t.stem_direction)&&void 0!==b?b:at.UP),this.reset(),this.buildFlag()}reset(){super.reset();const t=this._noteHeads.map((t=>t.getStyle()));this.buildNoteHeads(),this._noteHeads.forEach(((e,i)=>{const b=t[i];b&&e.setStyle(b)}));const e=this.stave;return e&&this.setStave(e),this.calcNoteDisplacements(),this}setBeam(t){return this.beam=t,this.calcNoteDisplacements(),this.stem&&this.stem.setExtension(this.getStemExtension()),this}buildStem(){return this.setStem(new at({hide:!!this.isRest()})),this}buildNoteHeads(){this._noteHeads=[];const t=this.getStemDirection(),e=this.getKeys();let i,b,a,n,s,l=!1;t===at.UP?(a=0,n=e.length,s=1):(a=e.length-1,n=-1,s=-1);for(let e=a;e!==n;e+=s){const a=this.sortedKeyProps[e].keyProps,n=a.line;void 0===i?i=n:(b=Math.abs(i-n),0===b||.5===b?l=!l:(l=!1,this.use_default_head_x=!0)),i=n;const s=new Lt({duration:this.duration,note_type:this.noteType,displaced:l,stem_direction:t,custom_glyph_code:a.code,glyph_font_scale:this.render_options.glyph_font_scale,x_shift:a.shift_right,stem_up_x_offset:a.stem_up_x_offset,stem_down_x_offset:a.stem_down_x_offset,line:a.line});this.addChildElement(s),this._noteHeads[this.sortedKeyProps[e].index]=s}return this._noteHeads}autoStem(){this.setStemDirection(this.calculateOptimalStemDirection())}calculateOptimalStemDirection(){this.minLine=this.sortedKeyProps[0].keyProps.line,this.maxLine=this.sortedKeyProps[this.keyProps.length-1].keyProps.line;return(this.minLine+this.maxLine)/2<3?at.UP:at.DOWN}calculateKeyProps(){let t;for(let e=0;e0&&(this.keyProps[e-1].displaced=!0)),t=n,this.keyProps.push(a)}this.keyProps.forEach(((t,e)=>{this.sortedKeyProps.push({keyProps:t,index:e})})),this.sortedKeyProps.sort(((t,e)=>t.keyProps.line-e.keyProps.line))}getBoundingBox(){var t,e;if(!this.preFormatted)throw new g("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const{width:i,modLeftPx:b,leftDisplacedHeadPx:a}=this.getMetrics(),n=this.getAbsoluteX()-b-a;let s=0,l=0;const o=(null!==(e=null===(t=this.getStave())||void 0===t?void 0:t.getSpacingBetweenLines())&&void 0!==e?e:0)/2,r=2*o;if(this.isRest()){const t=this.ys[0],e=V.durationToFraction(this.duration);e.equals(1)||e.equals(2)?(s=t-o,l=t+o):(s=t-this.glyphProps.line_above*r,l=t+this.glyphProps.line_below*r)}else if(this.glyphProps.stem){const t=this.getStemExtents();t.baseY+=o*this.getStemDirection(),s=Math.min(t.topY,t.baseY),l=Math.max(t.topY,t.baseY)}else{s=0,l=0;for(let t=0;te&&(e=b):b1}hasStem(){return this.glyphProps.stem}hasFlag(){return super.hasFlag()&&!this.isRest()}getStemX(){return"r"===this.noteType?this.getCenterGlyphX():super.getStemX()+(this.stem_direction?at.WIDTH/(2*-this.stem_direction):0)}getYForTopText(t){const e=this.getStemExtents();return Math.min(this.checkStave().getYForTopText(t),e.topY-this.render_options.annotation_spacing*(t+1))}getYForBottomText(t){const e=this.getStemExtents();return Math.max(this.checkStave().getYForTopText(t),e.baseY+this.render_options.annotation_spacing*t)}setStave(t){super.setStave(t);const e=this._noteHeads.map((e=>(e.setStave(t),e.getY())));if(this.setYs(e),this.stem){const{y_top:t,y_bottom:e}=this.getNoteHeadBounds();this.stem.setYBounds(t,e)}return this}isDisplaced(){return this.displaced}setNoteDisplaced(t){return this.displaced=t,this}getTieRightX(){let t=this.getAbsoluteX();return t+=this.getGlyphWidth()+this.x_shift+this.rightDisplacedHeadPx,this.modifierContext&&(t+=this.modifierContext.getRightShift()),t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.x_shift-this.leftDisplacedHeadPx,t}getLineForRest(){let t=this.keyProps[0].line;if(this.keyProps.length>1){const e=this.keyProps[this.keyProps.length-1].line;t=S(Math.max(t,e),Math.min(t,e))}return t}getModifierStartXY(t,e,i={}){var b,a;if(!this.preFormatted)throw new g("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new g("NoYValues","No Y-Values calculated for this note.");const{ABOVE:n,BELOW:s,LEFT:l,RIGHT:o}=tt.Position;let r=0;return t===l?r=-2:t===o?(r=this.getGlyphWidth()+this.x_shift+2,this.stem_direction===at.UP&&this.hasFlag()&&(i.forceFlagRight||((t,e)=>e===(t.getStemDirection()===at.UP?t.keyProps.length-1:0))(this,e))&&(r+=null!==(a=null===(b=null==this?void 0:this.flag)||void 0===b?void 0:b.getMetrics().width)&&void 0!==a?a:0)):t!==s&&t!==n||(r=this.getGlyphWidth()/2),{x:this.getAbsoluteX()+r,y:this.ys[e]}}setStyle(t){return super.setGroupStyle(t)}setStemStyle(t){const e=this.getStem();return e&&e.setStyle(t),this}getStemStyle(){var t;return null===(t=this.stem)||void 0===t?void 0:t.getStyle()}setLedgerLineStyle(t){this.ledgerLineStyle=t}getLedgerLineStyle(){return this.ledgerLineStyle}setFlagStyle(t){var e;null===(e=this.flag)||void 0===e||e.setStyle(t)}getFlagStyle(){var t;return null===(t=this.flag)||void 0===t?void 0:t.getStyle()}setKeyStyle(t,e){return this._noteHeads[t].setStyle(e),this}setKeyLine(t,e){return this.keyProps[t].line=e,this.reset(),this}getKeyLine(t){return this.keyProps[t].line}getVoiceShiftWidth(){return this.getGlyphWidth()*(this.displaced?2:1)}calcNoteDisplacements(){this.setLeftDisplacedHeadPx(this.displaced&&this.stem_direction===at.DOWN?this.getGlyphWidth():0),this.setRightDisplacedHeadPx(!this.hasFlag()&&this.displaced&&this.stem_direction===at.UP?this.getGlyphWidth():0)}preFormat(){if(this.preFormatted)return;let t=0;this.modifierContext&&(this.modifierContext.preFormat(),0===this.modifierContext.getWidth()&&(t=It.minNoteheadPadding));let e=this.getGlyphWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx+t;this.shouldDrawFlag()&&this.stem_direction===at.UP&&(e+=this.getGlyphWidth()),this.setWidth(e),this.preFormatted=!0}getNoteHeadBounds(){let t,e,i,b,a=1/0,n=-1/0,s=this.checkStave().getNumLines(),l=1,o=s,r=l;return this._noteHeads.forEach((h=>{const m=h.getLine(),c=h.getY();a=Math.min(c,a),n=Math.max(c,n),void 0===e&&h.isDisplaced()&&(e=h.getAbsoluteX()),void 0!==t||h.isDisplaced()||(t=h.getAbsoluteX()),s=Math.max(m,s),l=Math.min(m,l),h.isDisplaced()?(i=void 0===i?m:Math.max(m,i),b=void 0===b?m:Math.min(m,b)):(o=Math.max(m,o),r=Math.min(m,r))}),this),{y_top:a,y_bottom:n,displaced_x:e,non_displaced_x:t,highest_line:s,lowest_line:l,highest_displaced_line:i,lowest_displaced_line:b,highest_non_displaced_line:o,lowest_non_displaced_line:r}}getNoteHeadBeginX(){return this.getAbsoluteX()+this.x_shift}getNoteHeadEndX(){return this.getNoteHeadBeginX()+this.getGlyphWidth()}get noteHeads(){return this._noteHeads.slice()}get note_heads(){return console.warn("StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.","This accessor will be removed in VexFlow 5.0."),this.noteHeads}drawLedgerLines(){const t=this.checkStave(),{glyphProps:e,render_options:{stroke_px:i}}=this,b=this.checkContext(),a=e.getWidth()+2*i,n=2*(e.getWidth()+i)-at.WIDTH/2;if(this.isRest())return;if(!b)throw new g("NoCanvasContext","Can't draw without a canvas context.");const{highest_line:s,lowest_line:l,highest_displaced_line:o,highest_non_displaced_line:r,lowest_displaced_line:h,lowest_non_displaced_line:m,displaced_x:c,non_displaced_x:d}=this.getNoteHeadBounds();if(s<6&&l>0)return;const _=Math.min(null!=c?c:0,null!=d?d:0),x=(t,e,s)=>{let l;l=s&&e?_-i:e?(null!=d?d:0)-i:(null!=c?c:0)-i;const o=e&&s?n:a;b.beginPath(),b.moveTo(l,t),b.lineTo(l+o,t),b.stroke()},y=Object.assign(Object.assign({},t.getDefaultLedgerLineStyle()),this.getLedgerLineStyle());this.applyStyle(b,y);for(let e=6;e<=s;++e){const i=void 0!==d&&e<=r,b=void 0!==o&&e<=o;x(t.getYForNote(e),i,b)}for(let e=0;e>=l;--e){const i=void 0!==d&&e>=m,b=void 0!==h&&e>=h;x(t.getYForNote(e),i,b)}this.restoreStyle(b,y)}drawModifiers(t){const e=this.checkContext();for(let i=0;i{e.applyStyle(t),t.openGroup("notehead",e.getAttribute("id"),{pointerBBox:!0}),e.setContext(t).draw(),this.drawModifiers(e),t.closeGroup(),e.restoreStyle(t)}))}drawStem(t){const e=this.checkContext();t&&this.setStem(new at(t)),this.shouldDrawFlag()&&this.stem&&this.stem.adjustHeightForFlag(),this.stem&&this.stem.setContext(e).draw()}getStaveNoteScale(){return 1}getStemExtension(){const t=super.getStemExtension();if(!this.glyphProps.stem)return t;const e=this.getStemDirection();if(e!==this.calculateOptimalStemDirection())return t;let i;i=e===at.UP?3-this.maxLine:this.minLine-3;const b=i-3.5;if(b<=0)return t;const a=this.getStave();let n=10;return null!=a&&(n=a.getSpacingBetweenLines()),t+b*n}draw(){if(!1===this.render_options.draw)return;if(0===this.ys.length)throw new g("NoYValues","Can't draw note without Y values.");const t=this.checkContext(),e=this.getNoteHeadBeginX(),i=this.hasStem()&&!this.beam;if(this._noteHeads.forEach((t=>t.setX(e))),this.stem){const t=this.getStemX();this.stem.setNoteHeadXBounds(t,t)}!function(...t){It.DEBUG&&u("Vex.Flow.StaveNote",t)}("Rendering ",this.isChord()?"chord :":"note :",this.keys),this.applyStyle(),t.openGroup("stavenote",this.getAttribute("id")),this.drawLedgerLines(),i&&this.drawStem(),this.drawNoteHeads(),this.drawFlag(),t.closeGroup(),this.restoreStyle(),this.setRendered()}}It.DEBUG=!1;class Gt extends R{static get CATEGORY(){return x.StaveTie}constructor(t,e){super(),this.setNotes(t),this.text=e,this.render_options={cp1:8,cp2:12,text_shift_x:0,first_x_shift:0,last_x_shift:0,y_shift:7,tie_spacing:0},this.resetFont()}setDirection(t){return this.direction=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new g("BadArguments","Tie needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new g("BadArguments","Tied notes must have same number of indices.");return this.notes=t,this}isPartial(){return!this.notes.first_note||!this.notes.last_note}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new g("BadArguments","No Y-values to render");const e=this.checkContext();let i=this.render_options.cp1,b=this.render_options.cp2;Math.abs(t.last_x_px-t.first_x_px)<10&&(i=2,b=8);const a=this.render_options.first_x_shift,n=this.render_options.last_x_shift,s=this.render_options.y_shift*t.direction,l=this.notes.first_indices,o=this.notes.last_indices;this.applyStyle(),e.openGroup("stavetie",this.getAttribute("id"));for(let r=0;rMath.pow(this.options.softmaxFactor,e.getTicks().value()/t)))),this.expTicksUsed}softmax(t){this.expTicksUsed||(this.expTicksUsed=this.reCalculateExpTicksUsed());const e=this.ticksUsed.value();return(t=>Math.pow(this.options.softmaxFactor,t/e))(t)/this.expTicksUsed}addTickable(t){if(!t.shouldIgnoreTicks()){const e=t.getTicks();if(this.ticksUsed.add(e),this.expTicksUsed=0,(this.mode===Yt.STRICT||this.mode===Yt.FULL)&&this.ticksUsed.greaterThan(this.totalTicks))throw this.ticksUsed.subtract(e),new g("BadArgument","Too many ticks.");e.lessThan(this.smallestTickCount)&&(this.smallestTickCount=e.clone()),this.resolutionMultiplier=this.ticksUsed.denominator,this.totalTicks.add(0,this.ticksUsed.denominator)}return this.tickables.push(t),t.setVoice(this),this}addTickables(t){for(let e=0;e{e.getStave()||e.setStave(t)})),this.preFormatted=!0,this}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}draw(t=this.checkContext(),e){let i;e=null!=e?e:this.stave,this.setRendered();for(let b=0;b1){const e=new Re(t);e.render_options.beam_width=3,e.render_options.partial_beam_length=4,this.beams.push(e)}return this}setWidth(t){return this.width=t,this}getWidth(){return this.width+It.minNoteheadPadding}getGraceNotes(){return this.grace_notes}draw(){const t=this.checkContext(),e=this.checkAttachedNote();if(this.setRendered(),function(...t){Xt.DEBUG&&u("Vex.Flow.GraceNoteGroup",t)}("Drawing grace note group for:",e),this.alignSubNotesWithNote(this.getGraceNotes(),e),this.grace_notes.forEach((e=>e.setContext(t).draw())),this.beams.forEach((e=>e.setContext(t).draw())),this.show_slur){const i=c(e),b=i?Gt:Ht;this.slur=new b({last_note:this.grace_notes[0],first_note:e,first_indices:[0],last_indices:[0]}),this.slur.render_options.cp2=12,this.slur.render_options.y_shift=(i?7:5)+this.render_options.slur_y_shift,this.slur.setContext(t).draw()}}}Xt.DEBUG=!1;class Vt extends tt{static get CATEGORY(){return x.NoteSubGroup}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let e=0;e{t.setIgnoreTicks(!1)})),this.width=0,this.formatter=new Pe,this.voice=new jt({num_beats:4,beat_value:4,resolution:V.RESOLUTION}).setStrict(!1),this.voice.addTickables(this.subNotes)}preFormat(){this.preFormatted||(this.formatter.joinVoices([this.voice]).format([this.voice],0),this.setWidth(this.formatter.getMinTotalWidth()),this.preFormatted=!0)}setWidth(t){return this.width=t,this}getWidth(){return this.width}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),this.alignSubNotesWithNote(this.subNotes,e),this.subNotes.forEach((e=>e.setContext(t).drawWithStyle()))}}class Kt extends tt{static get CATEGORY(){return x.Ornament}static get minPadding(){return V.currentMusicFont().lookupMetric("noteHead.minPadding")}static format(t,e){if(!t||0===t.length)return!1;let i=0,b=e.right_shift,a=e.left_shift,n=0;for(let s=0;s=0&&(l.x_shift+=b+2),Kt.ornamentAttack.indexOf(l.type)>=0&&(l.x_shift-=a+2),l.reportedWidth&&l.x_shift<0?a+=l.reportedWidth:l.reportedWidth&&l.x_shift>=0?b+=l.reportedWidth+Kt.minPadding:i=Math.max(l.getWidth(),i),Kt.ornamentArticulation.indexOf(l.type)>=0){p(l.note,"NoAttachedNote").getLineNumber()>=3||l.getPosition()===tt.Position.ABOVE?(e.top_text_line+=o,l.y_shift+=n,n-=l.glyph.bbox.getH()):(e.text_line+=o,l.y_shift+=n,n+=l.glyph.bbox.getH())}else l.getPosition()===tt.Position.ABOVE?(l.setTextLine(e.top_text_line),e.top_text_line+=o):(l.setTextLine(e.text_line),e.text_line+=o)}return e.left_shift=a+i/2,e.right_shift=b+i/2,!0}static get ornamentNoteTransition(){return["flip","jazzTurn","smear"]}static get ornamentAttack(){return["scoop"]}static get ornamentAlignWithNoteHead(){return["doit","fall","fallLong","doitLong","bend","plungerClosed","plungerOpen","scoop"]}static get ornamentRelease(){return["doit","fall","fallLong","doitLong","jazzTurn","smear","flip"]}static get ornamentArticulation(){return["bend","plungerClosed","plungerOpen"]}getMetrics(){const t=V.currentMusicFont().getMetrics().ornament;if(!t)throw new g("BadMetrics","ornament missing");return t[this.ornament.code]}constructor(t){super(),this.type=t,this.delayed=!1,this.render_options={font_scale:V.NOTATION_FONT_SCALE,accidentalLowerPadding:3,accidentalUpperPadding:3},this.ornament=V.ornamentCodes(this.type);const e=this.getMetrics();if(this.adjustForStemDirection=!1,this.reportedWidth=e&&e.reportedWidth?e.reportedWidth:0,this.stemUpYOffset=e&&e.stemUpYOffset?e.stemUpYOffset:0,this.ornamentAlignWithNoteHead=Kt.ornamentAlignWithNoteHead.indexOf(this.type)>=0,!this.ornament)throw new g("ArgumentError",`Ornament not found: '${this.type}'`);this.x_shift=e?e.xOffset:0,this.y_shift=e?e.yOffset:0,this.glyph=new Z(this.ornament.code,this.render_options.font_scale,{category:`ornament.${this.ornament.code}`}),Kt.ornamentNoteTransition.indexOf(this.type)>=0&&(this.delayed=!0),e||this.glyph.setOrigin(.5,1)}setDelayed(t){return this.delayed=t,this}setUpperAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalUpper=new Z(V.accidentalCodes(t).code,e),this.accidentalUpper.setOrigin(.5,1),this}setLowerAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalLower=new Z(V.accidentalCodes(t).code,e),this.accidentalLower.setOrigin(.5,1),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getStemDirection(),b=e.checkStave();this.applyStyle(),t.openGroup("ornament",this.getAttribute("id"));const a=e.checkStem().getExtents();let n=i===at.DOWN?a.baseY:a.topY;_(e)&&(e.hasStem()?i===at.DOWN&&(n=b.getYForTopText(this.text_line)):n=b.getYForTopText(this.text_line));const s=i===at.DOWN,l=b.getSpacingBetweenLines();let o=1;!s&&e.hasBeam()&&(o+=.5);const r=n-l*(this.text_line+o),h=e.getModifierStartXY(this.position,this.index);let m=h.x,c=this.ornamentAlignWithNoteHead?h.y:Math.min(b.getYForTopText(this.text_line),r);if(c+=this.y_shift,this.delayed){let t=0;const i=m-b.getNoteStartX();if(void 0!==this.delayXShift)t=this.delayXShift;else{t+=this.glyph.getMetrics().width/2;const a=e.getVoice().getTickables(),n=a.indexOf(e),s=n+1=0&&(c=e.checkStave().getBoundingBox().getY()+40),this.glyph.render(t,m+this.x_shift,c),this.accidentalUpper&&(c-=this.glyph.getMetrics().height+this.render_options.accidentalUpperPadding,this.accidentalUpper.render(t,m,c)),t.closeGroup(),this.restoreStyle()}}Kt.DEBUG=!1;class $t extends tt{static get CATEGORY(){return x.Parenthesis}static buildAndAttach(t){for(const e of t)for(let t=0;to+a.width?b:o+a.width),s===J.LEFT&&(o=n.getLeftParenthesisPx(l),i=i>o+a.width?i:o+a.width),a.setXShift(o)}return e.left_shift+=i,e.right_shift+=b,!0}constructor(t){var e;super(),this.position=null!=t?t:tt.Position.LEFT,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width"))}setNote(t){var e,i;return this.note=t,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width")),o(t)&&(this.point=null!==(i=V.currentMusicFont().lookupMetric("parenthesis.gracenote.point"))&&void 0!==i?i:vt.getPoint("gracenote"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.gracenote.width"))),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0}),b=i.x+this.x_shift,a=i.y+this.y_shift;this.position==tt.Position.RIGHT?Z.renderGlyph(t,b+1,a,this.point,"noteheadParenthesisRight",{category:"noteHead.standard.noteheadParenthesisRight"}):this.position==tt.Position.LEFT&&Z.renderGlyph(t,b-2,a,this.point,"noteheadParenthesisLeft",{category:"noteHead.standard.noteheadParenthesisLeft"})}}function Jt(t){if(!t)return!1;const e=y();return"function"==typeof e.HTMLCanvasElement&&t instanceof e.HTMLCanvasElement||"function"==typeof t.getContext&&"function"==typeof t.toDataURL}function qt(t){if(!t)return!1;const e=y();return"function"==typeof e.HTMLDivElement&&t instanceof e.HTMLDivElement||"function"==typeof t.appendChild&&"object"==typeof t.style}class Qt extends ft{static get WIDTH(){return 600}static get HEIGHT(){return 400}static get CANVAS_BROWSER_SIZE_LIMIT(){return 32767}static sanitizeCanvasDims(t,e){const i=this.CANVAS_BROWSER_SIZE_LIMIT;return Math.max(t,e)>i&&(f("Canvas dimensions exceed browser limit. Cropping to "+i),t>i&&(t=i),e>i&&(e=i)),[t,e]}constructor(t){super(),this.textHeight=0,this.context2D=t,t.canvas?this.canvas=t.canvas:this.canvas={width:Qt.WIDTH,height:Qt.HEIGHT}}clear(){this.context2D.clearRect(0,0,this.canvas.width,this.canvas.height)}openGroup(t,e,i){}closeGroup(){}add(t){}setFillStyle(t){return this.context2D.fillStyle=t,this}setBackgroundFillStyle(t){return this}setStrokeStyle(t){return this.context2D.strokeStyle=t,this}setShadowColor(t){return this.context2D.shadowColor=t,this}setShadowBlur(t){const e=this.context2D.getTransform(),i=Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c+e.d*e.d);return this.context2D.shadowBlur=i*t,this}setLineWidth(t){return this.context2D.lineWidth=t,this}setLineCap(t){return this.context2D.lineCap=t,this}setLineDash(t){return this.context2D.setLineDash(t),this}scale(t,e){return this.context2D.scale(t,e),this}resize(t,e,i){var b;const a=this.context2D.canvas,n=null!==(b=null!=i?i:y().devicePixelRatio)&&void 0!==b?b:1;return[t,e]=Qt.sanitizeCanvasDims(t*n,e*n),t=t/n|0,e=e/n|0,a.width=t*n,a.height=e*n,Jt(a)&&(a.style.width=t+"px",a.style.height=e+"px"),this.scale(n,n)}rect(t,e,i,b){return this.context2D.rect(t,e,i,b),this}fillRect(t,e,i,b){return this.context2D.fillRect(t,e,i,b),this}clearRect(t,e,i,b){return this.context2D.clearRect(t,e,i,b),this}beginPath(){return this.context2D.beginPath(),this}moveTo(t,e){return this.context2D.moveTo(t,e),this}lineTo(t,e){return this.context2D.lineTo(t,e),this}bezierCurveTo(t,e,i,b,a,n){return this.context2D.bezierCurveTo(t,e,i,b,a,n),this}quadraticCurveTo(t,e,i,b){return this.context2D.quadraticCurveTo(t,e,i,b),this}arc(t,e,i,b,a,n){return this.context2D.arc(t,e,i,b,a,n),this}fill(){return this.context2D.fill(),this}stroke(){return this.context2D.stroke(),this}closePath(){return this.context2D.closePath(),this}measureText(t){const e=this.context2D.measureText(t);let i=0,b=0;return e.fontBoundingBoxAscent?(i=-e.fontBoundingBoxAscent,b=e.fontBoundingBoxDescent+e.fontBoundingBoxAscent):(i=-e.actualBoundingBoxAscent,b=e.actualBoundingBoxDescent+e.actualBoundingBoxAscent),{x:0,y:i,width:e.width,height:b}}fillText(t,e,i){return this.context2D.fillText(t,e,i),this}save(){return this.context2D.save(),this}restore(){return this.context2D.restore(),this}set fillStyle(t){this.context2D.fillStyle=t}get fillStyle(){return this.context2D.fillStyle}set strokeStyle(t){this.context2D.strokeStyle=t}get strokeStyle(){return this.context2D.strokeStyle}setFont(t,e,i,b){const a=F.validate(t,e,i,b);return this.context2D.font=F.toCSSString(a),this.textHeight=F.convertSizeToPixelValue(a.size),this}getFont(){return this.context2D.font}}const Zt={path:{x:!0,y:!0,width:!0,height:!0,"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},rect:{"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},text:{width:!0,height:!0}},te="http://www.w3.org/2000/svg",ee=2*Math.PI;class ie extends ft{constructor(t){super(),this.width=0,this.height=0,this.precision=1,this.backgroundFillStyle="white",this.fontCSSString="",this.element=t,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES);const e=this.create("svg");this.element.appendChild(e),this.svg=e,this.parent=this.svg,this.groups=[this.svg],this.path="",this.pen={x:NaN,y:NaN},this.lineWidth=1;const i={"font-family":F.SANS_SERIF,"font-size":F.SIZE+"pt","font-weight":E.NORMAL,"font-style":P.NORMAL};this.state=Object.assign({scaleX:1,scaleY:1},i),this.attributes=Object.assign({"stroke-width":.3,"stroke-dasharray":"none",fill:"black",stroke:"black"},i),this.groupAttributes=[],this.applyAttributes(e,this.attributes),this.groupAttributes.push(Object.assign({},this.attributes)),this.shadow_attributes={width:0,color:"black"},this.state_stack=[]}round(t){return Math.round(t*this.precision)/this.precision}create(t){return document.createElementNS(te,t)}openGroup(t,e,i){const b=this.create("g");return this.groups.push(b),this.parent.appendChild(b),this.parent=b,t&&b.setAttribute("class",T(t)),e&&b.setAttribute("id",T(e)),i&&i.pointerBBox&&b.setAttribute("pointer-events","bounding-box"),this.applyAttributes(b,this.attributes),this.groupAttributes.push(Object.assign(Object.assign({},this.groupAttributes[this.groupAttributes.length-1]),this.attributes)),b}closeGroup(){this.groups.pop(),this.groupAttributes.pop(),this.parent=this.groups[this.groups.length-1]}add(t){this.parent.appendChild(t)}setFillStyle(t){return this.attributes.fill=t,this}setBackgroundFillStyle(t){return this.backgroundFillStyle=t,this}setStrokeStyle(t){return this.attributes.stroke=t,this}setShadowColor(t){return this.shadow_attributes.color=t,this}setShadowBlur(t){return this.shadow_attributes.width=t,this}setLineWidth(t){return this.attributes["stroke-width"]=t,this.lineWidth=t,this}setLineDash(t){if("[object Array]"===Object.prototype.toString.call(t))return this.attributes["stroke-dasharray"]=t.join(","),this;throw new g("ArgumentError","lineDash must be an array of integers.")}setLineCap(t){return this.attributes["stroke-linecap"]=t,this}resize(t,e){this.width=t,this.height=e,this.element.style.width=t.toString(),this.svg.style.width=t.toString(),this.svg.style.height=e.toString();const i={width:t,height:e};return this.applyAttributes(this.svg,i),this.scale(this.state.scaleX,this.state.scaleY),this}scale(t,e){this.state.scaleX=this.state.scaleX?this.state.scaleX*t:t,this.state.scaleY=this.state.scaleY?this.state.scaleY*e:e;const i=this.width/this.state.scaleX,b=this.height/this.state.scaleY;return this.setViewBox(0,0,i,b),this}setViewBox(t,e,i,b){if("string"==typeof t)this.svg.setAttribute("viewBox",t);else{const a=t+" "+e+" "+i+" "+b;this.svg.setAttribute("viewBox",a)}}applyAttributes(t,e){const i=Zt[t.nodeName];for(const b in e)i&&i[b]||!e[b]||0!=this.groupAttributes.length&&e[b]==this.groupAttributes[this.groupAttributes.length-1][b]||t.setAttributeNS(null,b,e[b]);return t}clear(){for(;this.svg.lastChild;)this.svg.removeChild(this.svg.lastChild);this.scale(this.state.scaleX,this.state.scaleY)}rect(t,e,i,b,a){b<0&&(e+=b,b*=-1);const n=this.create("rect");return a=null!=a?a:{fill:"none","stroke-width":this.lineWidth,stroke:"black"},t=this.round(t),e=this.round(e),i=this.round(i),b=this.round(b),this.applyAttributes(n,Object.assign({x:t,y:e,width:i,height:b},a)),this.add(n),this}fillRect(t,e,i,b){const a={fill:this.attributes.fill,stroke:"none"};return this.rect(t,e,i,b,a),this}clearRect(t,e,i,b){return this.rect(t,e,i,b,{fill:this.backgroundFillStyle,stroke:"none"}),this}beginPath(){return this.path="",this.pen.x=NaN,this.pen.y=NaN,this}moveTo(t,e){return t=this.round(t),e=this.round(e),this.path+="M"+t+" "+e,this.pen.x=t,this.pen.y=e,this}lineTo(t,e){return t=this.round(t),e=this.round(e),this.path+="L"+t+" "+e,this.pen.x=t,this.pen.y=e,this}bezierCurveTo(t,e,i,b,a,n){return a=this.round(a),n=this.round(n),t=this.round(t),e=this.round(e),i=this.round(i),b=this.round(b),this.path+="C"+t+" "+e+","+i+" "+b+","+a+" "+n,this.pen.x=a,this.pen.y=n,this}quadraticCurveTo(t,e,i,b){return i=this.round(i),b=this.round(b),t=this.round(t),e=this.round(e),this.path+="Q"+t+" "+e+","+i+" "+b,this.pen.x=i,this.pen.y=b,this}arc(t,e,i,b,a,n){let s=t+i*Math.cos(b),l=e+i*Math.sin(b);s=this.round(s),l=this.round(l);const o=v(b),r=v(a);if(!n&&a-b>=ee||n&&b-a>=ee||o===r){let a=t+i*Math.cos(b+Math.PI),n=e+i*Math.sin(b+Math.PI);a=this.round(a),n=this.round(n),i=this.round(i),this.path+=`M${s} ${l} A${i} ${i} 0 0 0 ${a} ${n} `,this.path+=`A${i} ${i} 0 0 0 ${s} ${l}`,this.pen.x=s,this.pen.y=l}else{let h,m=t+i*Math.cos(a),c=e+i*Math.sin(a);b=o,a=r,h=Math.abs(a-b)a&&(h=!h);const d=!n;m=this.round(m),c=this.round(c),i=this.round(i),this.path+=`M${s} ${l} A${i} ${i} 0 ${+h} ${+d} ${m} ${c}`,this.pen.x=m,this.pen.y=c}return this}closePath(){return this.path+="Z",this}getShadowStyle(){const t=this.shadow_attributes;return`filter: drop-shadow(0 0 ${t.width/1.5}px ${t.color})`}fill(t){const e=this.create("path");return void 0===t&&(t=Object.assign(Object.assign({},this.attributes),{stroke:"none"})),t.d=this.path,this.shadow_attributes.width>0&&(t.style=this.getShadowStyle()),this.applyAttributes(e,t),this.add(e),this}stroke(){const t=this.create("path"),e=Object.assign(Object.assign({},this.attributes),{fill:"none","stroke-width":this.lineWidth,d:this.path});return this.shadow_attributes.width>0&&(e.style=this.getShadowStyle()),this.applyAttributes(t,e),this.add(t),this}measureText(t){return ie.measureTextCache.lookup(t,this.svg,this.attributes)}fillText(t,e,i){if(!t||t.length<=0)return this;e=this.round(e),i=this.round(i);const b=Object.assign(Object.assign({},this.attributes),{stroke:"none",x:e,y:i}),a=this.create("text");return a.textContent=t,this.applyAttributes(a,b),this.add(a),this}save(){return this.state_stack.push({state:{"font-family":this.state["font-family"],"font-weight":this.state["font-weight"],"font-style":this.state["font-style"],"font-size":this.state["font-size"],scale:this.state.scale},attributes:{"font-family":this.attributes["font-family"],"font-weight":this.attributes["font-weight"],"font-style":this.attributes["font-style"],"font-size":this.attributes["font-size"],fill:this.attributes.fill,stroke:this.attributes.stroke,"stroke-width":this.attributes["stroke-width"],"stroke-dasharray":this.attributes["stroke-dasharray"]},shadow_attributes:{width:this.shadow_attributes.width,color:this.shadow_attributes.color},lineWidth:this.lineWidth}),this}restore(){const t=this.state_stack.pop();if(t){const e=t;this.state["font-family"]=e.state["font-family"],this.state["font-weight"]=e.state["font-weight"],this.state["font-style"]=e.state["font-style"],this.state["font-size"]=e.state["font-size"],this.state.scale=e.state.scale,this.attributes["font-family"]=e.attributes["font-family"],this.attributes["font-weight"]=e.attributes["font-weight"],this.attributes["font-style"]=e.attributes["font-style"],this.attributes["font-size"]=e.attributes["font-size"],this.attributes.fill=e.attributes.fill,this.attributes.stroke=e.attributes.stroke,this.attributes["stroke-width"]=e.attributes["stroke-width"],this.attributes["stroke-dasharray"]=e.attributes["stroke-dasharray"],this.shadow_attributes.width=e.shadow_attributes.width,this.shadow_attributes.color=e.shadow_attributes.color,this.lineWidth=e.lineWidth}return this}set fillStyle(t){this.setFillStyle(t)}get fillStyle(){return this.attributes.fill}set strokeStyle(t){this.setStrokeStyle(t)}get strokeStyle(){return this.attributes.stroke}setFont(t,e,i,b){const a=F.validate(t,e,i,b);this.fontCSSString=F.toCSSString(a);const n={"font-family":a.family,"font-size":a.size,"font-weight":a.weight,"font-style":a.style};return this.attributes=Object.assign(Object.assign({},this.attributes),n),this.state=Object.assign(Object.assign({},this.state),n),this}getFont(){return this.fontCSSString}}var be,ae,ne,se;ie.measureTextCache=new class{constructor(){this.cache={}}lookup(t,e,i){let b=this.cache[t];void 0===b&&(b={},this.cache[t]=b);const a=`${i["font-family"]}%${i["font-size"]}%${i["font-weight"]}%${i["font-style"]}`;let n=b[a];return void 0===n&&(n=this.measureImpl(t,e,i),b[a]=n),n}measureImpl(t,e,i){let b=this.txt;b||(b=document.createElementNS(te,"text"),this.txt=b),b.textContent=t,i["font-family"]&&b.setAttributeNS(null,"font-family",i["font-family"]),i["font-size"]&&b.setAttributeNS(null,"font-size",`${i["font-size"]}`),i["font-style"]&&b.setAttributeNS(null,"font-style",i["font-style"]),i["font-weight"]&&b.setAttributeNS(null,"font-weight",`${i["font-weight"]}`),e.appendChild(b);const a=b.getBBox();return e.removeChild(b),{x:a.x,y:a.y,width:a.width,height:a.height}}},function(t){t[t.CANVAS=1]="CANVAS",t[t.SVG=2]="SVG"}(be||(be={})),function(t){t[t.NONE=1]="NONE",t[t.UP=2]="UP",t[t.DOWN=3]="DOWN"}(ae||(ae={}));class le{static buildContext(t,e,i,b,a="#FFF"){const n=new le(t,e);i&&b&&n.resize(i,b);const s=n.getContext();return s.setBackgroundFillStyle(a),le.lastContext=s,s}static getCanvasContext(t,e,i,b){return le.buildContext(t,le.Backends.CANVAS,e,i,b)}static getSVGContext(t,e,i,b){return le.buildContext(t,le.Backends.SVG,e,i,b)}static drawDashedLine(t,e,i,b,a,n){t.beginPath();const s=b-e,l=a-i,o=Math.atan2(l,s);let r=e,h=i;t.moveTo(e,i);let m=0,c=!0;for(;!(s<0?r<=b:r>=b)||!(l<0?h<=a:h>=a);){const e=n[m++%n.length],i=r+Math.cos(o)*e;r=s<0?Math.max(b,i):Math.min(b,i);const d=h+Math.sin(o)*e;h=l<0?Math.max(a,d):Math.min(a,d),c?t.lineTo(r,h):t.moveTo(r,h),c=!c}t.closePath(),t.stroke()}constructor(t,e){if(m(t))this.ctx=t;else{if(void 0===e)throw new g("InvalidArgument","Missing backend argument");const i=e;let b;if("string"==typeof t){const e=document.getElementById(t);if(!e)throw new g("BadElementId",`Can't find element with ID "${e}"`);b=e}else b=t;if(i===le.Backends.CANVAS){if(!Jt(b))throw new g("BadElement","CANVAS context requires an HTMLCanvasElement.");const t=b.getContext("2d",{willReadFrequently:!0});if(!t)throw new g("BadElement","Can't get canvas context");this.ctx=new Qt(t)}else{if(i!==le.Backends.SVG)throw new g("InvalidBackend",`No support for backend: ${i}`);if(!qt(b))throw new g("BadElement","SVG context requires an HTMLDivElement.");this.ctx=new ie(b)}}}resize(t,e){return this.ctx.resize(t,e),this}getContext(){return this.ctx}}le.Backends=be,le.LineEndType=ae,le.lastContext=void 0;class oe extends tt{static get CATEGORY(){return x.StringNumber}static get metrics(){var t;return null!==(t=V.currentMusicFont().getMetrics().stringNumber)&&void 0!==t?t:{verticalPadding:0,stemPadding:0,leftPadding:0,rightPadding:0}}static format(t,e){const i=e.left_shift,b=e.right_shift;if(!t||0===t.length)return!1;const a=[];let n=null,s=0,l=0;for(let i=0;ie.line-t.line));let o=0,r=0,h=0,m=null,d=null;for(let t=0;th?g:h),m=c,d=e}return e.left_shift+=r,e.right_shift+=h,!0}constructor(t){super(),this.string_number=t,this.position=tt.Position.ABOVE,this.x_shift=0,this.y_shift=0,this.text_line=0,this.stem_offset=0,this.x_offset=0,this.y_offset=0,this.dashed=!0,this.leg=le.LineEndType.NONE,this.radius=8,this.drawCircle=!0,this.setWidth(2*this.radius+4),this.resetFont()}setLineEndType(t){return t>=le.LineEndType.NONE&&t<=le.LineEndType.DOWN&&(this.leg=t),this}setStringNumber(t){return this.string_number=t,this}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}setLastNote(t){return this.last_note=t,this}setDashed(t){return this.dashed=t,this}setDrawCircle(t){return this.drawCircle=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index),b=e.hasStem()?e.getStemDirection():at.UP;let a=i.x+this.x_shift+this.x_offset,n={};e.hasStem()&&(n=e.checkStem().getExtents());let s=i.y+this.y_shift+this.y_offset;switch(this.position){case tt.Position.ABOVE:s=e.getYs().reduce(((t,e)=>tt>e?t:e)),e.hasStem()&&b==at.DOWN&&(s=n.topY-oe.metrics.stemPadding),s+=this.radius+oe.metrics.verticalPadding+this.text_line*V.STAVE_LINE_DISTANCE;break;case tt.Position.LEFT:a-=this.radius/2+oe.metrics.leftPadding;break;case tt.Position.RIGHT:a+=this.radius/2+oe.metrics.rightPadding;break;default:throw new g("InvalidPosition",`The position ${this.position} is invalid`)}t.save(),this.drawCircle&&(t.beginPath(),t.arc(a,s,this.radius,0,2*Math.PI,!1),t.setLineWidth(1.5),t.stroke()),t.setFont(this.textFont);const l=a-t.measureText(this.string_number).width/2;t.fillText(""+this.string_number,l,s+4.5);const o=this.last_note;if(d(o)){const i=o.getStemX()-e.getX()+5;let b,n;switch(t.setStrokeStyle("#000000"),t.setLineCap("round"),t.setLineWidth(.6),this.dashed?le.drawDashedLine(t,a+10,s,a+i,s,[3,3]):le.drawDashedLine(t,a+10,s,a+i,s,[3,0]),this.leg){case le.LineEndType.UP:b=-10,n=this.dashed?[3,3]:[3,0],le.drawDashedLine(t,a+i,s,a+i,s+b,n);break;case le.LineEndType.DOWN:b=10,n=this.dashed?[3,3]:[3,0],le.drawDashedLine(t,a+i,s,a+i,s+b,n)}}t.restore()}}oe.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:E.BOLD,style:P.NORMAL};class re extends tt{static get CATEGORY(){return x.Stroke}static format(t,e){const i=e.left_shift;if(!t||0===t.length)return!1;const b=t.map((t=>{const e=t.getNote(),i=t.checkIndex();if(c(e)){const{line:b}=e.getKeyProps()[i];return{line:b,shift:e.getLeftDisplacedHeadPx(),stroke:t}}if(_(e)){const{str:b}=e.getPositions()[i];return{line:b,shift:0,stroke:t}}throw new g("Internal","Unexpected instance.")})),a=i,n=b.reduce(((t,{stroke:e,shift:i})=>(e.setXShift(a+i),Math.max(e.getWidth()+0,t))),0);return e.left_shift+=n,!0}constructor(t,e){super(),this.options=Object.assign({all_voices:!0},e),this.all_voices=this.options.all_voices,this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.resetFont(),this.setXShift(0),this.setWidth(10)}getPosition(){return this.position}addEndNote(t){return this.note_end=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let b=e.getYs(),a=i.y,n=i.y;const s=i.x-5,l=e.checkStave().getSpacingBetweenLines(),o=this.checkModifierContext().getMembers(e.getCategory());for(let t=0;t0){b-=s.map((t=>t.getTextHeight())).reduce(((t,e)=>t>e?t:e))/V.STAVE_LINE_DISTANCE+1}else e.top_text_line+=1;for(let e=0;e=t.line?i.above:i.below}}this.placeGlyphOnLine(b,this.checkStave(),t.line),this.glyphs.push(b);const n=this.xPositions[this.xPositions.length-1],s=b.getMetrics().width+a;this.xPositions.push(n+s),this.width+=s}cancelKey(t){return this.formatted=!1,this.cancelKeySpec=t,this}convertToCancelAccList(t){const e=V.keySignature(t),i=this.accList.length>0&&e.length>0&&e[0].type!==this.accList[0].type,b=i?e.length:e.length-this.accList.length;if(b<1)return;const a=[];for(let t=0;t0?e[0].type:void 0;let b;if(this.cancelKeySpec&&(b=this.convertToCancelAccList(this.cancelKeySpec)),this.alterKeySpec&&this.convertToAlterAccList(this.alterKeySpec),this.accList.length>0){const a=(this.position===wt.END?t.getEndClef():t.getClef())||t.getClef();b&&this.convertAccLines(a,b.type,b.accList),this.convertAccLines(a,i,e);for(let t=0;t0?"PlusSmall":"Plus";break;case"(":b=i.length>0?"ParensLeftSmall":"ParensLeft";break;case")":b=i.length>0?"ParensRightSmall":"ParensRight"}const a=new Z("timeSig"+b,this.timeSignature.point);this.topGlyphs.push(a),l+=null!==(s=a.getMetrics().width)&&void 0!==s?s:0,o=Math.max(o,a.getMetrics().height)}let r=0;for(let t=0;t22?1:0,this.width=Math.max(l,r),this.xMin=this.getMetrics().x_min,this.topStartX=(this.width-l)/2,this.botStartX=(this.width-r)/2,this.reset()}getMetrics(){return{x_min:this.xMin,x_max:this.xMin+this.width,width:this.width}}renderToStave(t){const e=this.checkStave(),i=this.checkContext();let b=t+this.topStartX,a=0;a=this.botGlyphs.length>0?e.getYForLine(this.timeSignature.topLine-this.lineShift):(e.getYForLine(this.timeSignature.topLine)+e.getYForLine(this.timeSignature.bottomLine))/2;for(let t=0;t{const e=t.split("/");if(2!==e.length&&"+"!==e[0]&&"-"!==e[0])throw new g("BadTimeSignature",`Invalid time spec: ${t}. Must be in the form "/"`);e.forEach((e=>{if(0==/^[0-9+\-()]+$/.test(e))throw new g("BadTimeSignature",`Invalid time spec: ${t}. Must contain valid signatures.`)}))})(t);const b=t.split("/");return{line:0,num:!0,glyph:this.makeTimeSignatureGlyph(null!==(e=b[0])&&void 0!==e?e:"",null!==(i=b[1])&&void 0!==i?i:"")}}makeTimeSignatureGlyph(t,e){return new Se(this,t,e,"timeSig0",this.point)}getInfo(){const{line:t,is_numeric:e,glyph:i}=this;return{line:t,num:e,glyph:i}}setTimeSig(t){this.timeSpec=t;const e=this.parseTimeSpec(t);return this.setGlyph(e.glyph),this.is_numeric=e.num,this.line=e.line,this}getTimeSpec(){return this.timeSpec}getLine(){return this.line}setLine(t){this.line=t}getGlyph(){return this.glyph}setGlyph(t){this.glyph=t,this.setWidth(p(this.glyph.getMetrics().width))}getIsNumeric(){return this.is_numeric}setIsNumeric(t){this.is_numeric=t}draw(){const t=this.checkStave(),e=t.checkContext();this.setRendered(),this.applyStyle(e),e.openGroup("timesignature",this.getAttribute("id")),this.glyph.setStave(t),this.glyph.setContext(e),this.placeGlyphOnLine(this.glyph,t,this.line),this.glyph.renderToStave(this.x),e.closeGroup(),this.restoreStyle(e)}}const ve={[kt.CATEGORY]:0,[de.CATEGORY]:1,[_e.CATEGORY]:2,[Te.CATEGORY]:3},we={[Te.CATEGORY]:0,[_e.CATEGORY]:1,[kt.CATEGORY]:2,[de.CATEGORY]:3};class ze extends R{static get CATEGORY(){return x.Stave}static get defaultPadding(){const t=V.currentMusicFont();return t.lookupMetric("stave.padding")+t.lookupMetric("stave.endPaddingMax")}static get rightPadding(){return V.currentMusicFont().lookupMetric("stave.endPaddingMax")}constructor(t,e,i,b){super(),this.height=0,this.x=t,this.y=e,this.width=i,this.formatted=!1,this.start_x=t+5,this.end_x=t+i,this.modifiers=[],this.measure=0,this.clef="treble",this.endClef=void 0,this.resetFont(),this.options=Object.assign({vertical_bar_width:10,num_lines:5,fill_style:"#999999",left_bar:!0,right_bar:!0,spacing_between_lines_px:V.STAVE_LINE_DISTANCE,space_above_staff_ln:4,space_below_staff_ln:4,top_text_position:1,bottom_text_position:4,line_config:[]},b),this.bounds={x:this.x,y:this.y,w:this.width,h:0},this.defaultLedgerLineStyle={strokeStyle:"#444",lineWidth:1.4},this.resetLines(),this.addModifier(new kt(this.options.left_bar?zt.SINGLE:zt.NONE)),this.addEndModifier(new kt(this.options.right_bar?zt.SINGLE:zt.NONE))}setDefaultLedgerLineStyle(t){this.defaultLedgerLineStyle=t}getDefaultLedgerLineStyle(){return Object.assign(Object.assign({},this.getStyle()),this.defaultLedgerLineStyle)}space(t){return this.options.spacing_between_lines_px*t}resetLines(){this.options.line_config=[];for(let t=0;ti.getWidth()&&(e-=i.getWidth()),e}setRepetitionType(t,e=0){return this.modifiers.push(new xe(t,this.x,e)),this}setVoltaType(t,e,i){return this.modifiers.push(new fe(t,e,this.x,i)),this}setSection(t,e,i=0,b,a=!0){const n=new ge(t,this.x+i,e,a);return b&&n.setFontSize(b),this.modifiers.push(n),this}setTempo(t,e){return this.modifiers.push(new ye(t,this.x,e)),this}setText(t,e,i={}){return this.modifiers.push(new ue(t,e,i)),this}getHeight(){return this.height}getSpacingBetweenLines(){return this.options.spacing_between_lines_px}getBoundingBox(){return new D(this.x,this.y,this.width,this.getBottomY()-this.y)}getBottomY(){const t=this.options,e=t.spacing_between_lines_px;return this.getYForLine(t.num_lines)+t.space_below_staff_ln*e}getBottomLineY(){return this.getYForLine(this.options.num_lines)}getYForLine(t){const e=this.options,i=e.spacing_between_lines_px,b=e.space_above_staff_ln;return this.y+t*i+b*i}getLineForY(t){const e=this.options,i=e.spacing_between_lines_px,b=e.space_above_staff_ln;return(t-this.y)/i-b}getYForTopText(t=0){return this.getYForLine(-t-this.options.top_text_position)}getYForBottomText(t=0){return this.getYForLine(this.options.bottom_text_position+t)}getYForNote(t){const e=this.options,i=e.spacing_between_lines_px,b=e.space_above_staff_ln;return this.y+b*i+5*i-t*i}getYForGlyphs(){return this.getYForLine(3)}addModifier(t,e){return void 0!==e&&t.setPosition(e),t.setStave(this),this.formatted=!1,this.modifiers.push(t),this}addEndModifier(t){return this.addModifier(t,wt.END),this}setBegBarType(t){const{SINGLE:e,REPEAT_BEGIN:i,NONE:b}=zt;return t!==e&&t!==i&&t!==b||(this.modifiers[0].setType(t),this.formatted=!1),this}setEndBarType(t){return t!==zt.REPEAT_BEGIN&&(this.modifiers[1].setType(t),this.formatted=!1),this}setClefLines(t){return this.clef=t,this}setClef(t,e,i,b){void 0===b&&(b=wt.BEGIN),b===wt.END?this.endClef=t:this.clef=t;const a=this.getModifiers(b,de.CATEGORY);return 0===a.length?this.addClef(t,e,i,b):a[0].setType(t,e,i),this}getClef(){return this.clef}setEndClef(t,e,i){return this.setClef(t,e,i,wt.END),this}getEndClef(){return this.endClef}setKeySignature(t,e,i){void 0===i&&(i=wt.BEGIN);const b=this.getModifiers(i,_e.CATEGORY);return 0===b.length?this.addKeySignature(t,e,i):b[0].setKeySig(t,e),this}setEndKeySignature(t,e){return this.setKeySignature(t,e,wt.END),this}setTimeSignature(t,e,i){void 0===i&&(i=wt.BEGIN);const b=this.getModifiers(i,Te.CATEGORY);return 0===b.length?this.addTimeSignature(t,e,i):b[0].setTimeSig(t),this}setEndTimeSignature(t,e){return this.setTimeSignature(t,e,wt.END),this}addKeySignature(t,e,i){return void 0===i&&(i=wt.BEGIN),this.addModifier(new _e(t,e).setPosition(i),i),this}addClef(t,e,i,b){return void 0===b||b===wt.BEGIN?this.clef=t:b===wt.END&&(this.endClef=t),this.addModifier(new de(t,e,i),b),this}addEndClef(t,e,i){return this.addClef(t,e,i,wt.END),this}addTimeSignature(t,e,i){return this.addModifier(new Te(t,e),i),this}addEndTimeSignature(t,e){return this.addTimeSignature(t,e,wt.END),this}addTrebleGlyph(){return this.addClef("treble"),this}getModifiers(t,e){const i=void 0===t,b=void 0===e;return i&&b?this.modifiers:i?this.modifiers.filter((t=>e===t.getCategory())):b?this.modifiers.filter((e=>t===e.getPosition())):this.modifiers.filter((i=>t===i.getPosition()&&e===i.getCategory()))}sortByCategory(t,e){for(let i=t.length-1;i>=0;i--)for(let b=0;be[t[b+1].getCategory()]){const e=t[b];t[b]=t[b+1],t[b+1]=e}}format(){const t=this.modifiers[0],e=this.modifiers[1],i=this.getModifiers(wt.BEGIN),b=this.getModifiers(wt.END);let a,n,l;this.sortByCategory(i,ve),this.sortByCategory(b,we),i.length>1&&t.getType()===zt.REPEAT_BEGIN&&(i.push(i.splice(0,1)[0]),i.splice(0,0,new kt(zt.SINGLE))),b.indexOf(e)>0&&b.splice(0,0,new kt(zt.NONE));let o=0,r=this.x;for(let t=0;t0){t.save(),t.setFont(this.textFont);const e=t.measureText(""+this.measure).width;a=this.getYForTopText(0)+3,t.fillText(""+this.measure,this.x-e/2,a),t.restore()}return this}getVerticalBarWidth(){return this.options.vertical_bar_width}getConfigForLines(){return this.options.line_config}setConfigForLine(t,e){if(t>=this.options.num_lines||t<0)throw new g("StaveConfigError","The line number must be within the range of the number of lines in the Stave.");if(void 0===e.visible)throw new g("StaveConfigError","The line configuration object is missing the 'visible' property.");if("boolean"!=typeof e.visible)throw new g("StaveConfigError","The line configuration objects 'visible' property must be true or false.");return this.options.line_config[t]=e,this}setConfigForLines(t){if(t.length!==this.options.num_lines)throw new g("StaveConfigError","The length of the lines configuration array must match the number of lines in the Stave");for(const e in t)null==t[e].visible&&(t[e]=this.options.line_config[e]),this.options.line_config[e]=Object.assign(Object.assign({},this.options.line_config[e]),t[e]);return this.options.line_config=t,this}static formatBegModifiers(t){const e=e=>{let i=0;t.forEach((t=>{const b=t.getModifiers(wt.BEGIN,e);b.length>0&&b[0].getX()>i&&(i=b[0].getX())}));let b=0;t.forEach((t=>{b=0;t.getModifiers(wt.BEGIN,e).forEach((t=>{i-t.getX()>b&&(b=i-t.getX())}));const a=t.getModifiers(wt.BEGIN);let n=!1;a.forEach((t=>{t.getCategory()===e&&(n=!0),n&&b>0&&t.setX(t.getX()+b)})),t.setNoteStartX(t.getNoteStartX()+b)}))};t.forEach((t=>{t.formatted||t.format()})),e(x.Clef),e(x.KeySignature),e(x.TimeSignature);let i=0;t.forEach((t=>{t.getNoteStartX()>i&&(i=t.getNoteStartX())})),t.forEach((t=>{t.setNoteStartX(i)})),i=0,t.forEach((t=>{t.getModifiers(wt.BEGIN,x.Barline).forEach((t=>{t.getType()==zt.REPEAT_BEGIN&&t.getX()>i&&(i=t.getX())}))})),t.forEach((t=>{t.getModifiers(wt.BEGIN,x.Barline).forEach((t=>{t.getType()==zt.REPEAT_BEGIN&&t.setX(i)}))}))}}function Be(t,e,i,b,a){if(e!==De.type.BOLD_DOUBLE_LEFT&&e!==De.type.BOLD_DOUBLE_RIGHT)throw new g("InvalidConnector","A REPEAT_BEGIN or REPEAT_END type must be provided.");let n=3,s=3.5;e===De.type.BOLD_DOUBLE_RIGHT&&(n=-5,s=3),t.fillRect(i+n,b,1,a-b),t.fillRect(i-2,b,s,a-b)}ze.TEXT_FONT={family:F.SANS_SERIF,size:8,weight:E.NORMAL,style:P.NORMAL};class De extends R{static get CATEGORY(){return x.StaveConnector}constructor(t,e){super(),this.thickness=V.STAVE_LINE_THICKNESS,this.width=3,this.top_stave=t,this.bottom_stave=e,this.type=De.type.DOUBLE,this.resetFont(),this.x_shift=0,this.texts=[]}setType(t){const e="string"==typeof t?De.typeString[t]:t;return Object.values(De.type).includes(e)&&(this.type=e),this}getType(){return this.type}setText(t,e={}){return this.texts.push({content:t,options:Object.assign({shift_x:0,shift_y:0},e)}),this}setXShift(t){if("number"!=typeof t)throw new g("InvalidType","x_shift must be a Number");return this.x_shift=t,this}getXShift(){return this.x_shift}draw(){const t=this.checkContext();this.setRendered();let e=this.top_stave.getYForLine(0),i=this.bottom_stave.getYForLine(this.bottom_stave.getNumLines()-1)+this.thickness,b=this.width,a=this.top_stave.getX();(this.type===De.type.SINGLE_RIGHT||this.type===De.type.BOLD_DOUBLE_RIGHT||this.type===De.type.THIN_DOUBLE)&&(a=this.top_stave.getX()+this.top_stave.getWidth());let n=i-e;switch(this.type){case De.type.SINGLE:case De.type.SINGLE_LEFT:case De.type.SINGLE_RIGHT:b=1;break;case De.type.DOUBLE:a-=this.width+2,e-=this.thickness,n+=.5;break;case De.type.BRACE:{b=12;const a=this.top_stave.getX()-2+this.x_shift,s=e,l=a,o=i,r=a-b,h=s+n/2,m=r-.9*b,c=s+.2*n,d=a+1.1*b,_=h-.135*n,x=d,g=h+.135*n,y=m,p=o-.2*n,u=r-b,f=p,S=a+.4*b,T=h+.135*n,v=S,w=h-.135*n,z=u,B=c;t.beginPath(),t.moveTo(a,s),t.bezierCurveTo(m,c,d,_,r,h),t.bezierCurveTo(x,g,y,p,l,o),t.bezierCurveTo(u,f,S,T,r,h),t.bezierCurveTo(v,w,z,B,a,s),t.fill(),t.stroke();break}case De.type.BRACKET:e-=6,i+=6,n=i-e,Z.renderGlyph(t,a-5,e,40,"bracketTop"),Z.renderGlyph(t,a-5,i,40,"bracketBottom"),a-=this.width+2;break;case De.type.BOLD_DOUBLE_LEFT:Be(t,this.type,a+this.x_shift,e,i-this.thickness);break;case De.type.BOLD_DOUBLE_RIGHT:Be(t,this.type,a,e,i-this.thickness);break;case De.type.THIN_DOUBLE:b=1,n-=this.thickness;break;case De.type.NONE:break;default:throw new g("InvalidType",`The provided StaveConnector.type (${this.type}) is invalid.`)}this.type!==De.type.BRACE&&this.type!==De.type.BOLD_DOUBLE_LEFT&&this.type!==De.type.BOLD_DOUBLE_RIGHT&&this.type!==De.type.NONE&&t.fillRect(a,e,b,n),this.type===De.type.THIN_DOUBLE&&t.fillRect(a-3,e,b,n),t.save(),t.setLineWidth(2),t.setFont(this.textFont);for(let e=0;et.isCenterAligned()))}getMetrics(){const{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:b,rightDisplacedHeadPx:a,modLeftPx:n,modRightPx:s,totalLeftPx:l,totalRightPx:o}=this;return{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:b,rightDisplacedHeadPx:a,modLeftPx:n,modRightPx:s,totalLeftPx:l,totalRightPx:o}}getCurrentTick(){return this.currentTick}setCurrentTick(t){this.currentTick=t,this.preFormatted=!1}addTickable(t,e){if(!t)throw new g("BadArgument","Invalid tickable added.");if(!t.shouldIgnoreTicks()){const e=t.getTicks();e.greaterThan(this.maxTicks)&&(this.maxTicks=e.clone(),this.maxTickable=t),(null==this.minTicks||e.lessThan(this.minTicks))&&(this.minTicks=e.clone(),this.minTickable=t)}return t.setTickContext(this),this.tickables.push(t),this.tickablesByVoice[e||0]=t,this.preFormatted=!1,this}preFormat(){if(this.preFormatted)return this;for(let t=0;t{e.addToModifierContext(new ce);const b=(new Ce).addTickable(e).preFormat(),a=b.getMetrics();return b.setX(t+a.totalLeftPx),t+b.getWidth()+a.totalRightPx+i}),e)}static plotDebugging(t,e,i,b,a,n){const s=i+(n=Object.assign({stavePadding:V.currentMusicFont().lookupMetric("stave.padding")},n)).stavePadding,l=e.contextGaps;t.save(),t.setFont(F.SANS_SERIF,8),l.gaps.forEach((e=>{var i,n,l;i=s+e.x1,n=s+e.x2,l="rgba(100,200,100,0.4)",t.beginPath(),t.setStrokeStyle(l),t.setFillStyle(l),t.setLineWidth(1),t.fillRect(i,b,Math.max(n-i,0),a-b),t.setFillStyle("green"),t.fillText(Math.round(e.x2-e.x1).toString(),s+e.x1,a+12)})),t.setFillStyle("red"),t.fillText(`Loss: ${(e.totalCost||0).toFixed(2)} Shift: ${(e.totalShift||0).toFixed(2)} Gap: ${l.total.toFixed(2)}`,s-20,a+27),t.restore()}static FormatAndDraw(t,e,i,b){let a={auto_beam:!1,align_rests:!1};"object"==typeof b?a=Object.assign(Object.assign({},a),b):"boolean"==typeof b&&(a.auto_beam=b);const n=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(i),s=a.auto_beam?Re.applyAndGetBeams(n):[];return(new Pe).joinVoices([n]).formatToStave([n],e,{align_rests:a.align_rests,stave:e}),n.setStave(e).draw(t,e),s.forEach((e=>e.setContext(t).draw())),n.getBoundingBox()}static FormatAndDrawTab(t,e,i,b,a,n,s){let l={auto_beam:n,align_rests:!1};"object"==typeof s?l=Object.assign(Object.assign({},l),s):"boolean"==typeof s&&(l.auto_beam=s);const o=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(a),r=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(b),h=l.auto_beam?Re.applyAndGetBeams(o):[];(new Pe).joinVoices([o]).joinVoices([r]).formatToStave([o,r],i,{align_rests:l.align_rests}),o.draw(t,i),r.draw(t,e),h.forEach((e=>e.setContext(t).draw())),new De(i,e).setContext(t).draw()}static AlignRestsToNotes(t,e,i){t.forEach(((b,a)=>{if(c(b)&&b.isRest()){if(b.getTuplet()&&!i)return;const n=b.getGlyphProps().position.toUpperCase();if("R/4"!==n&&"B/4"!==n)return;if(e||b.getBeam()){const e=b.getKeyProps()[0];if(0===a)e.line=Ee(t,e.line,a,!1);else if(a>0&&aPe.AlignRestsToNotes(t.getTickables(),e)))}preCalculateMinTotalWidth(t){const e=V.currentMusicFont().lookupMetric("stave.unalignedNotePadding");let i=0,b=0,a=0;const n=[],s=[];if(this.hasMinTotalWidth)return this.minTotalWidth;if(!t)throw new g("BadArgument","'voices' required to run preCalculateMinTotalWidth");this.createTickContexts(t);const{list:l,map:o}=this.tickContexts;this.minTotalWidth=0,l.forEach((e=>{const l=o[e];l.preFormat(),l.getTickables().length{b+=t.getMetrics().width,a+=t.getTicks().value(),n.push(t.getMetrics().width),s.push(t.getTicks().value())}));const r=l.getWidth();this.minTotalWidth+=r})),this.hasMinTotalWidth=!0;const r=b>0?b/n.length:1/n.length,h=w(n.map((t=>Math.pow(t-r,2)))),m=Math.pow(h/n.length,.5)/r,c=a/s.length,d=w(s.map((t=>Math.pow(t-c,2)))),_=Math.pow(d/s.length,.5)/c,x=Math.max(_,m)*l.length*e,y=e*i;return this.minTotalWidth+Math.max(y,x)}getMinTotalWidth(){if(!this.hasMinTotalWidth)throw new g("NoMinTotalWidth","Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'");return this.minTotalWidth}static getResolutionMultiplier(t){if(!t||!t.length)throw new g("BadArgument","No voices to format");const e=t[0].getTotalTicks();return t.reduce(((t,i)=>{if(!i.getTotalTicks().equals(e))throw new g("TickMismatch","Voices should have same total note duration in ticks.");if(i.getMode()===jt.Mode.STRICT&&!i.isComplete())throw new g("IncompleteVoice","Voice does not have enough notes.");return Math.max(t,z.LCM(t,i.getResolutionMultiplier()))}),1)}createModifierContexts(t){if(0==t.length)return;const e=Pe.getResolutionMultiplier(t),i=new Map,b=[];t.forEach((t=>{const a=new z(0,e);t.getTickables().forEach((t=>{const e=a.numerator;let n=i.get(t.getStave());if(n||(i.set(t.getStave(),{}),n=i.get(t.getStave())),!(n?n[e]:void 0)){const t=new ce;b.push(t),n[e]=t}t.addToModifierContext(n[e]),a.add(t.getTicks())}))})),this.modifierContexts.push({map:i,array:b,resolutionMultiplier:e})}createTickContexts(t){const e=function(t,e,i){if(0==t.length)return{map:{},array:[],list:[],resolutionMultiplier:0};const b={},a=[],n=[],s=Pe.getResolutionMultiplier(t);return t.forEach(((t,l)=>{const o=new z(0,s);t.getTickables().forEach((t=>{const s=o.numerator;if(!b[s]){const t=e({tickID:s});n.push(t),b[s]=t,a.push(s)}i(t,b[s],l),o.add(t.getTicks())}))})),{map:b,array:n,list:a.sort(((t,e)=>t-e)),resolutionMultiplier:s}}(t,(t=>new Ce(t)),((t,e,i)=>e.addTickable(t,i)));this.tickContexts=e;const i=this.tickContexts.array;return i.forEach((t=>{t.tContexts=i})),e}getTickContexts(){return this.tickContexts}preFormat(t=0,e,i,b){const a=this.tickContexts;if(!a)throw new g("NoTickContexts","preFormat requires TickContexts");const{list:n,map:s}=a;this.lossHistory=[],i&&b&&i.forEach((t=>t.setStave(b).preFormat()));let l=0,o=0;this.minTotalWidth=0;let r=0;n.forEach((t=>{const e=s[t];e.preFormat();const i=e.getWidth();this.minTotalWidth+=i;const b=e.getMaxTicks().value();r+=b;const a=e.getMetrics();l=l+o+a.totalLeftPx,e.setX(l),o=i-a.totalLeftPx}));const{globalSoftmax:h,softmaxFactor:m,maxIterations:c}=this.formatterOptions,d=w(n.map((t=>Math.pow(m,s[t].getMaxTicks().value()/r))));if(this.minTotalWidth=l+o,this.hasMinTotalWidth=!0,t<=0)return this.evaluate();const _=s[n[0]],x=s[n[n.length-1]];function y(t){return n.map(((e,i)=>{const b=s[e],a=b.getTickablesByVoice();let l;if(i>0){const e=s[n[i-1]];for(let o=i-1;o>=0;o--){const i=s[n[o]].getTickablesByVoice(),c=[];if(Object.keys(a).forEach((t=>{i[t]&&c.push(t)})),c.length>0){let n=0,s=1/0,o=0;if(c.forEach((t=>{const e=i[t].getTicks().value();e>n&&(l=i[t],n=e);const b=a[t],o=b.getX()-(b.getMetrics().modLeftPx+b.getMetrics().leftDisplacedHeadPx),r=i[t].getMetrics(),h=i[t].getX()+r.notePx+r.modRightPx+r.rightDisplacedHeadPx;s=Math.min(s,o-h)})),s=Math.min(s,b.getX()-(e.getX()+.05*t)),h){const e=r;o=Math.pow(m,n/e)/d*t}else void 0!==l&&(o=l.getVoice().softmax(n)*t);return{expectedDistance:o,maxNegativeShiftPx:s,fromTickable:l}}}}return{expectedDistance:0,fromTickablePx:0,maxNegativeShiftPx:0}}))}function u(t){const e=f/2;let i=0;return n.forEach(((b,a)=>{const n=s[b];if(a>0){const e=n.getX(),b=t[a],s=p(b.fromTickable).getX()+b.expectedDistance-(e+i);let l=0;s>0?i+=s:s<0&&(l=Math.min(b.maxNegativeShiftPx,Math.abs(s)),i+=-l),n.setX(e+i)}n.getCenterAlignedTickables().forEach((t=>{t.setCenterXShift(e-n.getX())}))})),x.getX()-_.getX()}const f=t-x.getMetrics().notePx-x.getMetrics().totalRightPx-_.getMetrics().totalLeftPx,S=V.currentMusicFont(),T=S.lookupMetric("stave.endPaddingMin"),v=S.lookupMetric("stave.endPaddingMax"),z=S.lookupMetric("stave.padding");let B=f;const D=y(B);let C=u(D);if(1===n.length)return 0;const E=((t,e)=>{let i=t/2;if(e.length>1)for(let t=1;t{let e=0;const i=x&&x.getMaxTickable();if(i){const b=i.getVoice();if(b.getTicksUsed().value()>b.getTotalTicks().value())return 2*vN&&F>0||C+k1;)B-=C-N,k=P(B),A=k-(v-T),C=u(y(B)),F--;return this.justifyWidth=t,this.evaluate()}evaluate(){const t=this.tickContexts,e=this.justifyWidth;this.contextGaps={total:0,gaps:[]},t.list.forEach(((e,i)=>{if(0===i)return;const b=t.list[i-1],a=t.map[b],n=t.map[e],s=a.getMetrics(),l=n.getMetrics(),o=a.getX()+s.notePx+s.totalRightPx,r=n.getX()-l.totalLeftPx,h=r-o;this.contextGaps.total+=h,this.contextGaps.gaps.push({x1:o,x2:r}),n.getFormatterMetrics().freedom.left=h,a.getFormatterMetrics().freedom.right=h})),this.durationStats={};const i=this.durationStats;this.voices.forEach((t=>{t.getTickables().forEach(((t,b,a)=>{const n=t.getTicks().clone().simplify().toString(),s=t.getMetrics(),l=t.getFormatterMetrics(),o=t.getX()+s.notePx+s.modRightPx+s.rightDisplacedHeadPx;let r=0;if(b{t.getTickables().forEach((t=>{const e=t.getTicks().clone().simplify().toString(),a=t.getFormatterMetrics();a.space.mean=i[e].mean,a.duration=e,a.iterations+=1,a.space.deviation=a.space.used-a.space.mean,b+=Math.pow(a.space.deviation,2)}))})),this.totalCost=Math.sqrt(b),this.lossHistory.push(this.totalCost),this.totalCost}tune(t){var e;const i=this.tickContexts;if(!i)return 0;const b=null!==(e=null==t?void 0:t.alpha)&&void 0!==e?e:.5;let a=0;return this.totalShift=0,i.list.forEach(((t,e,n)=>{const s=i.map[t],l=e>0?i.map[n[e-1]]:void 0,o=et.getFormatterMetrics().space.deviation)));r>0?a=-Math.min(s.getFormatterMetrics().freedom.right,Math.abs(r)):r<0&&(a=o?Math.min(o.getFormatterMetrics().freedom.right,Math.abs(r)):0),a*=b,this.totalShift+=a})),this.evaluate()}postFormat(){return this.modifierContexts.forEach((t=>{t.array.forEach((t=>t.postFormat()))})),this.tickContexts.list.forEach((t=>{this.tickContexts.map[t].postFormat()})),this}joinVoices(t){return this.createModifierContexts(t),this.hasMinTotalWidth=!1,this}format(t,e,i){const b=Object.assign({align_rests:!1},i);this.voices=t;const a=this.formatterOptions.softmaxFactor;return a&&this.voices.forEach((t=>t.setSoftmaxFactor(a))),this.alignRests(t,b.align_rests),this.createTickContexts(t),this.preFormat(e,b.context,t,b.stave),b.stave&&this.postFormat(),this}formatToStave(t,e,i){const b=Object.assign({context:e.getContext()},i),a=e.getNoteEndX()-e.getNoteStartX()-ze.defaultPadding;return function(...t){Pe.DEBUG&&u("Vex.Flow.Formatter",t)}("Formatting voices to width: ",a),this.format(t,a,b)}getTickContext(t){var e;return null===(e=this.tickContexts)||void 0===e?void 0:e.map[t]}}var ke;Pe.DEBUG=!1,function(t){t[t.BOTTOM=-1]="BOTTOM",t[t.TOP=1]="TOP"}(ke||(ke={}));class Ae extends R{static get CATEGORY(){return x.Tuplet}static get LOCATION_TOP(){return ke.TOP}static get LOCATION_BOTTOM(){return ke.BOTTOM}static get NESTING_OFFSET(){return 15}static get metrics(){const t=V.currentMusicFont().getMetrics().tuplet;if(!t)throw new g("BadMetrics","tuplet missing");return t}constructor(t,e={}){if(super(),this.numerator_glyphs=[],this.denom_glyphs=[],!t||!t.length)throw new g("BadArguments","No notes provided for tuplet.");this.options=e,this.notes=t,this.num_notes=null!=this.options.num_notes?this.options.num_notes:t.length,this.options.beats_occupied&&this.beatsOccupiedDeprecationWarning(),this.notes_occupied=this.options.notes_occupied||this.options.beats_occupied||2,null!=this.options.bracketed?this.bracketed=this.options.bracketed:this.bracketed=t.some((t=>!t.hasBeam())),this.ratioed=null!=this.options.ratioed?this.options.ratioed:Math.abs(this.notes_occupied-this.num_notes)>1,this.point=3*V.NOTATION_FONT_SCALE/5,this.y_pos=16,this.x_pos=100,this.width=200,this.setTupletLocation(this.options.location||Ae.LOCATION_TOP),Pe.AlignRestsToNotes(t,!0,!0),this.resolveGlyphs(),this.attach()}attach(){for(let t=0;t=1;)this.numerator_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10);for(this.denom_glyphs=[],t=this.notes_occupied;t>=1;)this.denom_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10)}getNestedTupletCount(){const t=this.location,e=this.notes[0];let i=a(e,t),b=a(e,t);function a(t,e){return t.getTupletStack().filter((t=>t.location===e)).length}return this.notes.forEach((e=>{const n=a(e,t);i=n>i?n:i,b=n0&&(b=Math.min(n,b))}}}else{let t=Ae.metrics.bottomLine;this.notes.forEach((e=>{const i=e.getModifierContext();i&&(t=Math.max(t,i.getState().text_line+1))})),b=i.checkStave().getYForLine(t)+Ae.metrics.noteHeadOffset;for(let t=0;tb&&(b=e)}}return b+t+e}draw(){const t=this.checkContext();this.setRendered();const e=this.notes[0],i=this.notes[this.notes.length-1];this.bracketed?(this.x_pos=e.getTieLeftX()-5,this.width=i.getTieRightX()-this.x_pos+5):(this.x_pos=e.getStemX(),this.width=i.getStemX()-this.x_pos),this.y_pos=this.getYPosition();const b=(t,e)=>t+p(e.getMetrics().width);let a=this.numerator_glyphs.reduce(b,0);this.ratioed&&(a=this.denom_glyphs.reduce(b,a),a+=.32*this.point);const n=this.x_pos+this.width/2-a/2;if(this.bracketed){const e=this.width/2-a/2-5;e>0&&(t.fillRect(this.x_pos,this.y_pos,e,1),t.fillRect(this.x_pos+this.width/2+a/2+5,this.y_pos,e,1),t.fillRect(this.x_pos,this.y_pos+(this.location===Ae.LOCATION_BOTTOM?1:0),1,10*this.location),t.fillRect(this.x_pos+this.width,this.y_pos+(this.location===Ae.LOCATION_BOTTOM?1:0),1,10*this.location))}const s=V.currentMusicFont().lookupMetric("digits.shiftY",0);let l=0;if(this.numerator_glyphs.forEach((e=>{e.render(t,n+l,this.y_pos+this.point/3-2+s),l+=p(e.getMetrics().width)})),this.ratioed){const e=n+l+.16*this.point,i=.06*this.point;t.beginPath(),t.arc(e,this.y_pos-.08*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),t.beginPath(),t.arc(e,this.y_pos+.12*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),l+=.32*this.point,this.denom_glyphs.forEach((e=>{e.render(t,n+l,this.y_pos+this.point/3-2+s),l+=p(e.getMetrics().width)}))}}}function Ne(t){let e=0;return t.forEach((t=>{t.keyProps&&t.keyProps.forEach((t=>{e+=t.line-3}))})),e>=0?at.DOWN:at.UP}const Fe="L",Me="R",Oe="B";class Re extends R{static get CATEGORY(){return x.Beam}getStemDirection(){return this.stem_direction}static getDefaultBeamGroups(t){t&&"c"!==t||(t="4/4");const e={"1/2":["1/2"],"2/2":["1/2"],"3/2":["1/2"],"4/2":["1/2"],"1/4":["1/4"],"2/4":["1/4"],"3/4":["1/4"],"4/4":["1/4"],"1/8":["1/8"],"2/8":["2/8"],"3/8":["3/8"],"4/8":["2/8"],"1/16":["1/16"],"2/16":["2/16"],"3/16":["3/16"],"4/16":["2/16"]}[t];if(void 0!==e)return e.map((t=>(new z).parse(t)));{const e=parseInt(t.split("/")[0],10),i=parseInt(t.split("/")[1],10);if(e%3==0)return[new z(3,i)];if(i>4)return[new z(2,i)];if(i<=4)return[new z(1,i)]}return[new z(1,4)]}static applyAndGetBeams(t,e,i){return Re.generateBeams(t.getTickables(),{groups:i,stem_direction:e})}static generateBeams(t,e={}){e.groups&&e.groups.length||(e.groups=[new z(2,8)]);const i=e.groups.map((t=>{if(!t.multiply)throw new g("InvalidBeamGroups","The beam groups must be an array of Vex.Flow.Fractions");return t.clone().multiply(V.RESOLUTION,1)})),b=t;let a=0,n=[],s=[];function l(){i.length-1>a?a+=1:a=0}!function(){let t=[],e=new z(0,1);b.forEach((b=>{if(t=[],b.shouldIgnoreTicks())return n.push(s),void(s=t);s.push(b);const o=i[a].clone(),r=(h=s,h.reduce(((t,e)=>e.getTicks().clone().add(t)),new z(0,1))).add(e);var h;const m=V.durationToNumber(b.getDuration())<8;if(m&&b.getTuplet()&&(o.numerator*=2),r.greaterThan(o)){if(!m){const e=s.pop();e&&t.push(e)}n.push(s);do{e=r.subtract(i[a]),l()}while(e.greaterThanEquals(i[a]));s=t}else r.equals(o)&&(n.push(s),e=new z(0,1),s=t,l())})),s.length>0&&n.push(s)}(),function(){const t=[];n.forEach((i=>{let b=[];i.forEach(((i,a,n)=>{const s=0===a||a===n.length-1,l=n[a-1],o=!e.beam_rests&&i.isRest(),r=e.beam_rests&&e.beam_middle_only&&i.isRest()&&s;let h=!1;if(e.maintain_stem_directions&&l&&!i.isRest()&&!l.isRest()){const t=l.getStemDirection();h=i.getStemDirection()!==t}const m=parseInt(i.getDuration(),10)<8;o||r||h||m?(b.length>0&&t.push(b),b=h?[i]:[]):b.push(i)})),b.length>0&&t.push(b)})),n=t}(),n.forEach((t=>{let i;if(e.maintain_stem_directions){const e=function(t){for(let e=0;e{t.setStemDirection(e)}))}(t,i)}));const o=n.filter((t=>{if(t.length>1){let e=!0;return t.forEach((t=>{t.getIntrinsicTicks()>=V.durationToTicks("4")&&(e=!1)})),e}return!1})),r=function(){const t=[];return n.forEach((e=>{let i;e.forEach((e=>{const b=e.getTuplet();b&&i!==b&&(i=b,t.push(i))}))})),t}(),h=[];return o.forEach((t=>{const i=new Re(t);e.show_stemlets&&(i.render_options.show_stemlets=!0),e.secondary_breaks&&(i.render_options.secondary_break_ticks=V.durationToTicks(e.secondary_breaks)),!0===e.flat_beams&&(i.render_options.flat_beams=!0,i.render_options.flat_beam_offset=e.flat_beam_offset),h.push(i)})),r.forEach((t=>{const e=t.notes[0].stem_direction===at.DOWN?ke.BOTTOM:ke.TOP;t.setTupletLocation(e);let i=!1;for(let e=0;e=V.durationToTicks("4"))throw new g("BadArguments","Beams can only be applied to notes shorter than a quarter note.");let i,b;this.stem_direction=t[0].getStemDirection();let a=this.stem_direction;if(e&&c(t[0]))a=Ne(t);else if(e&&_(t[0])){const e=t.reduce(((t,e)=>t+e.getStemDirection()),0);a=e>-1?at.UP:at.DOWN}for(i=0;it.getGlyphProps().beam_count)).reduce(((t,e)=>e>t?e:t))}breakSecondaryAt(t){return this.break_on_indices=t,this}setPartialBeamSideAt(t,e){return this.forcedPartialDirections[t]=e,this}unsetPartialBeamSideAt(t){return delete this.forcedPartialDirections[t],this}getSlopeY(t,e,i,b){return i+(t-e)*b}calculateSlope(){const{notes:t,stem_direction:e,render_options:{max_slope:i,min_slope:b,slope_iterations:a,slope_cost:n}}=this,s=t[0],l=function(t,e){const i=t.getStemExtents().topY,b=t.getStemX();return(e.getStemExtents().topY-i)/(e.getStemX()-b)}(s,t[t.length-1]),o=(i-b)/a;let r=Number.MAX_VALUE,h=0,m=0;for(let a=b;a<=i;a+=o){let i=0,b=0;for(let n=1;na)&&(o=a,s=Math.min(...b.getYs()),l=b.getBeamCount())}let r=n/t.length;const h=b+l*(1.5*i),m=s+h*-e;e===at.DOWN&&rm&&(r=s-h),a?(e===at.DOWN&&r>a||e===at.UP&&r=8&&(h=-1!==this.break_on_indices.indexOf(o),this.render_options.secondary_break_ticks&&l>=this.render_options.secondary_break_ticks&&(l=0,h=!0));const m=r.getIntrinsicTicks(){const i=e.getStem();if(i){const b=e.getStemX();i.setNoteHeadXBounds(b,b),i.setContext(t).draw()}}),this)}drawBeamLines(t){const e=["4","8","16","32","64"],i=this.notes[0];let b=this.getBeamYToDraw();const a=i.getStemX(),n=this.render_options.beam_width*this.stem_direction;for(let i=0;i0||!0===e;return!e||a>0||(this.pos=b),s?this.matchSuccess():this.matchFail(b),{success:s,results:i,numMatches:a}}expectZeroOrMore(t){return this.expectOneOrMore(t,!0)}expect(t){if(Ge("Evaluating rule function:",t),!t)throw new g("Invalid rule function");let e;const i=t.bind(this.grammar)();if(i.token)e=this.matchToken(i.token,!0===i.noSpace),e.success&&(this.pos+=e.incrementPos);else{if(!i.expect)throw Ge(i),new g("Bad grammar! No `token` or `expect` property "+i);e=i.oneOrMore?this.expectOneOrMore(i):i.zeroOrMore?this.expectZeroOrMore(i):this.expectOne(i)}const b=[];return e.matches=b,e.results&&e.results.forEach((t=>b.push(He(t)))),i.run&&e.success&&i.run({matches:b}),e}}function je(...t){Qe.DEBUG&&u("Vex.Flow.EasyScore",t)}Ye.DEBUG=!1;class Xe{constructor(t){this.builder=t}begin(){return this.LINE}LINE(){return{expect:[this.PIECE,this.PIECES,this.EOL]}}PIECE(){return{expect:[this.CHORDORNOTE,this.PARAMS],run:()=>this.builder.commitPiece()}}PIECES(){return{expect:[this.COMMA,this.PIECE],zeroOrMore:!0}}PARAMS(){return{expect:[this.DURATION,this.TYPE,this.DOTS,this.OPTS]}}CHORDORNOTE(){return{expect:[this.CHORD,this.SINGLENOTE],or:!0}}CHORD(){return{expect:[this.LPAREN,this.NOTES,this.RPAREN],run:t=>this.builder.addChord(t.matches[1])}}NOTES(){return{expect:[this.NOTE],oneOrMore:!0}}NOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE]}}SINGLENOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE],run:t=>{const e=t;this.builder.addSingleNote(e.matches[0],e.matches[1],e.matches[2])}}}ACCIDENTAL(){return{expect:[this.MICROTONES,this.ACCIDENTALS],maybe:!0,or:!0}}DOTS(){return{expect:[this.DOT],zeroOrMore:!0,run:t=>this.builder.setNoteDots(t.matches)}}TYPE(){return{expect:[this.SLASH,this.MAYBESLASH,this.TYPES],maybe:!0,run:t=>this.builder.setNoteType(t.matches[2])}}DURATION(){return{expect:[this.SLASH,this.DURATIONS],maybe:!0,run:t=>this.builder.setNoteDuration(t.matches[1])}}OPTS(){return{expect:[this.LBRACKET,this.KEYVAL,this.KEYVALS,this.RBRACKET],maybe:!0}}KEYVALS(){return{expect:[this.COMMA,this.KEYVAL],zeroOrMore:!0}}KEYVAL(){return{expect:[this.KEY,this.EQUALS,this.VAL],run:t=>this.builder.addNoteOption(t.matches[0],t.matches[2].slice(1,-1))}}VAL(){return{expect:[this.SVAL,this.DVAL],or:!0}}KEY(){return{token:"[a-zA-Z][a-zA-Z0-9]*"}}DVAL(){return{token:'["][^"]*["]'}}SVAL(){return{token:"['][^']*[']"}}NOTENAME(){return{token:"[a-gA-G]"}}OCTAVE(){return{token:"[0-9]+"}}ACCIDENTALS(){return{token:"bb|b|##|#|n"}}MICROTONES(){return{token:"bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o"}}DURATIONS(){return{token:"[0-9whq]+"}}TYPES(){return{token:"[rRsSmMhHgG]"}}LPAREN(){return{token:"[(]"}}RPAREN(){return{token:"[)]"}}COMMA(){return{token:"[,]"}}DOT(){return{token:"[.]"}}SLASH(){return{token:"[/]"}}MAYBESLASH(){return{token:"[/]?"}}EQUALS(){return{token:"[=]"}}LBRACKET(){return{token:"\\["}}RBRACKET(){return{token:"\\]"}}EOL(){return{token:"$"}}}class Ve{constructor(t){this.chord=[],this.dots=0,this.options={},this.duration=t}}class Ke{constructor(t){this.commitHooks=[],this.factory=t,this.reset()}reset(t){this.options=Object.assign({stem:"auto",clef:"treble"},t),this.elements={notes:[],accidentals:[]},this.rollingDuration="8",this.resetPiece()}getFactory(){return this.factory}getElements(){return this.elements}addCommitHook(t){this.commitHooks.push(t)}resetPiece(){je("resetPiece"),this.piece=new Ve(this.rollingDuration)}setNoteDots(t){je("setNoteDots:",t),t&&(this.piece.dots=t.length)}setNoteDuration(t){je("setNoteDuration:",t),this.rollingDuration=this.piece.duration=t||this.rollingDuration}setNoteType(t){je("setNoteType:",t),t&&(this.piece.type=t)}addNoteOption(t,e){je("addNoteOption: key:",t,"value:",e),this.piece.options[t]=e}addNote(t,e,i){je("addNote:",t,e,i),this.piece.chord.push({key:t,accid:e,octave:i})}addSingleNote(t,e,i){je("addSingleNote:",t,e,i),this.addNote(t,e,i)}addChord(t){je("startChord"),"object"!=typeof t[0]?this.addSingleNote(t[0]):t.forEach((t=>{t&&this.addNote(...t)})),je("endChord")}commitPiece(){je("commitPiece");const{factory:t}=this;if(!t)return;const e=Object.assign(Object.assign({},this.options),this.piece.options),i=p(e.stem,"BadArguments","options.stem is not defined").toLowerCase(),b=p(e.clef,"BadArguments","options.clef is not defined").toLowerCase(),{chord:a,duration:n,dots:s,type:l}=this.piece,o=et.accidentals,r=a.map((t=>{var e;return t.key+(o.includes(null!==(e=t.accid)&&void 0!==e?e:"")?t.accid:"")+"/"+t.octave})),h="auto"===i,m="g"==(null==l?void 0:l.toLowerCase())?t.GhostNote({duration:n,dots:s}):t.StaveNote({keys:r,duration:n,dots:s,type:l,clef:b,auto_stem:h});h||m.setStemDirection("up"===i?at.UP:at.DOWN);const c=[];a.forEach(((e,i)=>{const b=e.accid;if("string"==typeof b){const e=t.Accidental({type:b});m.addModifier(e,i),c.push(e)}else c.push(void 0)}));for(let t=0;tt(e,m,this))),this.elements.notes.push(m),this.elements.accidentals.push(c),this.resetPiece()}}function $e(t,e){void 0!==t.id&&e.setAttribute("id",t.id)}const Je=/\s*,\s*/;function qe(t,e){void 0!==t.class&&t.class.split(Je).forEach((t=>e.addClass(t)))}class Qe{constructor(t={}){this.defaults={clef:"treble",time:"4/4",stem:"auto"},this.setOptions(t)}set(t){return this.defaults=Object.assign(Object.assign({},this.defaults),t),this}setOptions(t){var e,i;const b=t.factory,a=null!==(e=t.builder)&&void 0!==e?e:new Ke(b);return this.options=Object.assign(Object.assign({commitHooks:[$e,qe,ut.easyScoreHook,Rt.easyScoreHook],throwOnError:!1},t),{factory:b,builder:a}),this.factory=b,this.builder=a,this.grammar=new Xe(this.builder),this.parser=new Ye(this.grammar),null===(i=this.options.commitHooks)||void 0===i||i.forEach((t=>this.addCommitHook(t))),this}setContext(t){return this.factory.setContext(t),this}parse(t,e={}){this.builder.reset(e);const i=this.parser.parse(t);if(!i.success&&this.options.throwOnError)throw je(i),new g("Error parsing line: "+t);return i}beam(t,e){return this.factory.Beam({notes:t,options:e}),t}tuplet(t,e){return this.factory.Tuplet({notes:t,options:e}),t}notes(t,e={}){return e=Object.assign({clef:this.defaults.clef,stem:this.defaults.stem},e),this.parse(t,e),this.builder.getElements().notes}voice(t,e={}){return e=Object.assign({time:this.defaults.time},e),this.factory.Voice(e).addTickables(t)}addCommitHook(t){this.builder.addCommitHook(t)}}Qe.DEBUG=!1;const Ze="Ghost note must have valid initialization data to identify duration.";class ti extends Wt{static get CATEGORY(){return x.GhostNote}constructor(t){if(!t)throw new g("BadArguments",Ze);let e;if("string"==typeof t)e={duration:t};else{if("object"!=typeof t)throw new g("BadArguments",Ze);e=t}super(e),this.setWidth(0)}isRest(){return!0}setStave(t){return super.setStave(t),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){this.setRendered();for(let t=0;t=li.type.TEXT&&t<=li.type.MIXED&&(this.type=t),this}setCustomText(t,e){return this.custom_depress_text=t||"",this.custom_release_text=e||"",this}setLine(t){return this.line=t,this}drawBracketed(){const t=this.checkContext();let e,i,b=!1;this.notes.forEach(((a,n,s)=>{var l;b=!b;const o=a.getAbsoluteX(),r=a.checkStave().getYForBottomText(this.line+3);if(o{var b;e=!e;const a=i.checkStave(),n=i.getAbsoluteX(),s=a.getYForBottomText(this.line+3),l=null!==(b=V.currentMusicFont().lookupMetric(`pedalMarking.${e?"down":"up"}.point`))&&void 0!==b?b:V.NOTATION_FONT_SCALE;let o=0;e?this.custom_depress_text?(o=t.measureText(this.custom_depress_text).width,t.fillText(this.custom_depress_text,n-o/2,s)):si("pedal_depress",t,n,s,l):this.custom_release_text?(o=t.measureText(this.custom_release_text).width,t.fillText(this.custom_release_text,n-o/2,s)):si("pedal_release",t,n,s,l)}))}draw(){const t=this.checkContext();this.setRendered(),t.save(),t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color),t.setFont(this.textFont),function(...t){li.DEBUG&&u("Vex.Flow.PedalMarking",t)}("Rendering Pedal Marking"),this.type===li.type.BRACKET||this.type===li.type.MIXED?(t.setLineWidth(this.render_options.bracket_line_width),this.drawBracketed()):this.type===li.type.TEXT&&this.drawText(),t.restore()}}li.DEBUG=!1,li.TEXT_FONT={family:F.SERIF,size:12,weight:E.BOLD,style:P.ITALIC},li.GLYPHS={pedal_depress:{code:"keyboardPedalPed"},pedal_release:{code:"keyboardPedalUp"}},li.type={TEXT:1,BRACKET:2,MIXED:3},li.typeString={text:li.type.TEXT,bracket:li.type.BRACKET,mixed:li.type.MIXED};const oi={1:"repeat1Bar",2:"repeat2Bars",4:"repeat4Bars",slash:"repeatBarSlash"};class ri extends ei{static get CATEGORY(){return x.RepeatNote}constructor(t,e,i){super(new Z(oi[t]||"repeat1Bar",V.currentMusicFont().lookupMetric("repeatNote.point",40),{category:"repeatNote"}),Object.assign({duration:"q",align_center:"slash"!==t},e),i)}}function hi(t,e,i,b,a,n,s){t.beginPath(),t.moveTo(e,i),t.lineTo(b,a),t.lineTo(n,s),t.lineTo(e,i),t.closePath(),t.fill()}class mi extends R{static get CATEGORY(){return x.StaveLine}constructor(t){super(),this.setNotes(t),this.text="",this.resetFont(),this.render_options={padding_left:4,padding_right:3,line_width:1,line_dash:void 0,rounded_end:!0,color:void 0,draw_start_arrow:!1,draw_end_arrow:!1,arrowhead_length:10,arrowhead_angle:Math.PI/8,text_position_vertical:mi.TextVerticalPosition.TOP,text_justification:mi.TextJustification.CENTER}}setText(t){return this.text=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new g("BadArguments","Notes needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new g("BadArguments","Connected notes must have same number of indices.");return this.notes=t,this.first_note=t.first_note,this.first_indices=t.first_indices,this.last_note=t.last_note,this.last_indices=t.last_indices,this}applyLineStyle(){const t=this.checkContext(),e=this.render_options;e.line_dash&&t.setLineDash(e.line_dash),e.line_width&&t.setLineWidth(e.line_width),e.rounded_end?t.setLineCap("round"):t.setLineCap("square")}applyFontStyle(){const t=this.checkContext();t.setFont(this.textFont);const e=this.render_options.color;e&&(t.setStrokeStyle(e),t.setFillStyle(e))}drawArrowLine(t,e,i){const b=this.render_options.draw_start_arrow&&this.render_options.draw_end_arrow,a=e.x,n=e.y,s=i.x,l=i.y,o=Math.sqrt((s-a)*(s-a)+(l-n)*(l-n)),r=(o-this.render_options.arrowhead_length/3)/o;let h,m,c,d;this.render_options.draw_end_arrow||b?(h=Math.round(a+(s-a)*r),m=Math.round(n+(l-n)*r)):(h=s,m=l),this.render_options.draw_start_arrow||b?(c=a+(s-a)*(1-r),d=n+(l-n)*(1-r)):(c=a,d=n),this.render_options.color&&(t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color)),t.beginPath(),t.moveTo(c,d),t.lineTo(h,m),t.stroke(),t.closePath();const _=Math.atan2(l-n,s-a),x=Math.abs(this.render_options.arrowhead_length/Math.cos(this.render_options.arrowhead_angle));let g,y,p,u,f,S;(this.render_options.draw_end_arrow||b)&&(g=_+Math.PI+this.render_options.arrowhead_angle,p=s+Math.cos(g)*x,u=l+Math.sin(g)*x,y=_+Math.PI-this.render_options.arrowhead_angle,f=s+Math.cos(y)*x,S=l+Math.sin(y)*x,hi(t,p,u,s,l,f,S)),(this.render_options.draw_start_arrow||b)&&(g=_+this.render_options.arrowhead_angle,p=a+Math.cos(g)*x,u=n+Math.sin(g)*x,y=_-this.render_options.arrowhead_angle,f=a+Math.cos(y)*x,S=n+Math.sin(y)*x,hi(t,p,u,a,n,f,S))}draw(){const t=this.checkContext();this.setRendered();const e=this.first_note,i=this.last_note,b=this.render_options;t.save(),this.applyLineStyle();let a={x:0,y:0},n={x:0,y:0};this.first_indices.forEach(((s,l)=>{const o=this.last_indices[l];a=e.getModifierStartXY(2,s),n=i.getModifierStartXY(1,o);const r=a.y>n.y;a.x+=e.getMetrics().modRightPx+b.padding_left,n.x-=i.getMetrics().modLeftPx+b.padding_right;const h=e.getGlyphProps().getWidth();e.getKeyProps()[s].displaced&&1===e.getStemDirection()&&(a.x+=h+b.padding_left);i.getKeyProps()[o].displaced&&-1===i.getStemDirection()&&(n.x-=h+b.padding_right),a.y+=r?-3:1,n.y+=r?2:0,this.drawArrowLine(t,a,n)})),t.restore();const s=t.measureText(this.text).width,l=b.text_justification;let o=0;if(l===mi.TextJustification.LEFT)o=a.x;else if(l===mi.TextJustification.CENTER){o=(n.x-a.x)/2+a.x-s/2}else l===mi.TextJustification.RIGHT&&(o=n.x-s);let r=0;const h=b.text_position_vertical;return h===mi.TextVerticalPosition.TOP?r=e.checkStave().getYForTopText():h===mi.TextVerticalPosition.BOTTOM&&(r=e.checkStave().getYForBottomText(V.TEXT_HEIGHT_OFFSET_HACK)),t.save(),this.applyFontStyle(),t.fillText(this.text,o,r),t.restore(),this}}mi.TEXT_FONT=Object.assign({},R.TEXT_FONT),mi.TextVerticalPosition={TOP:1,BOTTOM:2},mi.TextJustification=ne;class ci extends R{static get CATEGORY(){return x.System}constructor(t={}){super(),this.setOptions(t),this.partStaves=[],this.partStaveInfos=[],this.partVoices=[]}setOptions(t={}){if(!t.factory)throw new g("NoFactory","System.setOptions(options) requires a factory.");this.factory=t.factory,this.options=Object.assign(Object.assign({factory:this.factory,x:10,y:10,width:500,spaceBetweenStaves:12,autoWidth:!1,noJustification:!1,debugFormatter:!1,formatIterations:0,noPadding:!1},t),{details:Object.assign({alpha:.5},t.details),formatOptions:Object.assign({},t.formatOptions)}),!1===this.options.noJustification&&void 0===t.width&&(this.options.autoWidth=!0)}getX(){return this.options.x}setX(t){this.options.x=t,this.partStaves.forEach((e=>{e.setX(t)}))}getY(){return this.options.y}setY(t){this.options.y=t,this.partStaves.forEach((e=>{e.setY(t)}))}getStaves(){return this.partStaves}getVoices(){return this.partVoices}setContext(t){return super.setContext(t),this.factory.setContext(t),this}addConnector(t="double"){return this.connector=this.factory.StaveConnector({top_stave:this.partStaves[0],bottom_stave:this.partStaves[this.partStaves.length-1],type:t}),this.connector}addStave(t){var e;const i=Object.assign({left_bar:!1},t.options),b=null!==(e=t.stave)&&void 0!==e?e:this.factory.Stave({x:this.options.x,y:this.options.y,width:this.options.width,options:i}),a=Object.assign(Object.assign({spaceAbove:0,spaceBelow:0,debugNoteMetrics:!1,noJustification:!1},t),{options:i}),n=this.getContext();return a.voices.forEach((t=>{t.setContext(n).setStave(b).getTickables().forEach((t=>t.setStave(b))),this.partVoices.push(t)})),this.partStaves.push(b),this.partStaveInfos.push(a),b}addVoices(t){const e=this.getContext();t.forEach((t=>{t.setContext(e),this.partVoices.push(t)}))}format(){const t=this.options.details;let e=0;const i=new Pe(t);this.formatter=i;let b=this.options.y,a=0;const n=[];this.partStaves.forEach(((t,e)=>{b+=t.space(this.partStaveInfos[e].spaceAbove),t.setY(b),b+=t.space(this.partStaveInfos[e].spaceBelow),b+=t.space(this.options.spaceBetweenStaves),this.partStaveInfos[e].debugNoteMetrics&&(n.push({y:b,stave:t}),b+=15),a=Math.max(a,t.getNoteStartX())})),this.partVoices.forEach((t=>{t.getTickables().forEach((t=>{const e=t.getStave();e&&t.setStave(e)}))})),i.joinVoices(this.partVoices),this.partStaves.forEach((t=>t.setNoteStartX(a))),this.options.autoWidth&&this.partVoices.length>0?(e=i.preCalculateMinTotalWidth(this.partVoices),this.options.width=e+ze.rightPadding+(a-this.options.x),this.partStaves.forEach((t=>{t.setWidth(this.options.width)}))):e=this.options.noPadding?this.options.width-(a-this.options.x):this.options.width-(a-this.options.x)-ze.defaultPadding,this.partVoices.length>0&&i.format(this.partVoices,this.options.noJustification?0:e,this.options.formatOptions),i.postFormat();for(let e=0;e{this.partVoices.forEach((i=>{i.getTickables().forEach((i=>{i.getStave()===e.stave&&vt.plotMetrics(t,i,e.y)}))}))}))}}class di extends Wt{static get CATEGORY(){return x.TabNote}constructor(t,e=!1){super(t),this.glyphPropsArr=[],this.greatestString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>t>e?t:e)),this.leastString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>tthis.width}setStave(t){super.setStave(t);const e=t.getContext();if(this.setContext(e),e){this.width=0;for(let t=0;ti.width),this.width=Math.max(i.getWidth(),this.width)}this.glyphProps.getWidth=()=>this.width}const i=this.positions.map((({str:e})=>t.getYForLine(Number(e)-1)));return this.setYs(i),this.stem&&this.stem.setYBounds(this.getStemY(),this.getStemY()),this}getPositions(){return this.positions}getModifierStartXY(t,e){if(!this.preFormatted)throw new g("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new g("NoYValues","No Y-Values calculated for this note.");let i=0;if(t===tt.Position.LEFT)i=-2;else if(t===tt.Position.RIGHT)i=this.width+2;else if(t===tt.Position.BELOW||t===tt.Position.ABOVE){i=this.glyphProps.getWidth()/2}return{x:this.getAbsoluteX()+i,y:this.ys[e]}}getLineForRest(){return Number(this.positions[0].str)}preFormat(){this.preFormatted||(this.modifierContext&&this.modifierContext.preFormat(),this.preFormatted=!0)}getStemX(){return this.getCenterGlyphX()}getStemY(){const t=this.checkStave().getNumLines()-.5,e=at.UP===this.stem_direction?-.5:t;return this.checkStave().getYForLine(e)}getStemExtents(){return this.checkStem().getExtents()}drawFlag(){var t;const{beam:e,glyphProps:i,render_options:{draw_stem:b}}=this,a=this.checkContext(),n=null==e&&b;if(i.flag&&n){const e=this.getStemX(),i=this.getStemDirection()===at.DOWN?this.getStemY()-this.checkStem().getHeight()-(this.glyphProps?this.glyphProps.stem_down_extension:0):this.getStemY()-this.checkStem().getHeight()+(this.glyphProps?this.glyphProps.stem_up_extension:0);null===(t=this.flag)||void 0===t||t.render(a,e,i)}}drawModifiers(){this.modifiers.forEach((t=>{l(t)&&!this.render_options.draw_dots||(t.setContext(this.getContext()),t.drawWithStyle())}))}drawStemThrough(){const t=this.getStemX(),e=this.getStemY(),i=this.checkContext(),b=this.render_options.draw_stem,a=this.render_options.draw_stem_through_stave;if(b&&a){const b=function(t,e,i,b){const a=1!==b,n=-1!==b,s=i.getSpacingBetweenLines(),l=i.getNumLines(),o=[];return e.forEach((e=>{const r=e.indexOf(l)>-1,h=e.indexOf(1)>-1;if(a&&h||n&&r)return;1===e.length&&e.push(e[0]);const m=[];e.forEach(((e,a,n)=>{const o=1===e,r=e===l;let h=i.getYForLine(e-1);0!==a||o?a!==n.length-1||r||(h+=s/2-1):h-=s/2-1,m.push(h),1===b&&o?m.push(t-2):-1===b&&r&&m.push(t+2)})),o.push(m.sort(((t,e)=>t-e)))})),o}(e,function(t,e){const i=[];let b=[];for(let a=1;a<=t;a++)e.indexOf(a)>-1?(i.push(b),b=[]):b.push(a);return b.length>0&&i.push(b),i}(this.checkStave().getNumLines(),this.positions.map((t=>Number(t.str)))),this.checkStave(),this.getStemDirection());i.save(),i.setLineWidth(at.WIDTH),b.forEach((e=>{0!==e.length&&(i.beginPath(),i.moveTo(t,e[0]),i.lineTo(t,e[e.length-1]),i.stroke(),i.closePath())})),i.restore()}}drawPositions(){var t;const e=this.checkContext(),i=this.getAbsoluteX(),b=this.ys;for(let a=0;a{const i=ui.GLYPHS[e];if(!i)throw new g("Invalid dynamics character: "+e);const b=p(this.render_options.glyph_font_size),a=new Z(i.code,b,{category:"textNote"});this.glyphs.push(a),t+=i.width})),this.setWidth(t),this.preFormatted=!0,this}draw(){this.setRendered();const t=this.getAbsoluteX(),e=this.checkStave().getYForLine(this.line+-3);pi("Rendering Dynamics: ",this.sequence);let i=t;this.glyphs.forEach(((t,b)=>{const a=this.sequence[b];t.render(this.checkContext(),i,e),i+=ui.GLYPHS[a].width}))}}ui.DEBUG=!1;class fi extends vt{static get CATEGORY(){return x.TimeSigNote}constructor(t,e){super({duration:"b"}),this.timeSig=new Te(t,e),this.setWidth(this.timeSig.getGlyph().getMetrics().width),this.ignore_ticks=!0}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkStave(),e=this.checkContext();this.setRendered();const i=this.timeSig.getGlyph();i.getContext()||i.setContext(e),i.setStave(t),i.setYShift(t.getYForLine(2)-t.getYForGlyphs()),i.renderToStave(this.getAbsoluteX())}}class Si extends R{static get CATEGORY(){return x.VibratoBracket}constructor(t){super(),t.start&&(this.start=t.start),t.stop&&(this.stop=t.stop),this.line=1,this.render_options={harsh:!1,wave_height:6,wave_width:4,wave_girth:2,vibrato_width:0}}setLine(t){return this.line=t,this}setHarsh(t){return this.render_options.harsh=t,this}draw(){const t=this.checkContext();this.setRendered();const e=this.start&&this.start.checkStave().getYForTopText(this.line)||this.stop&&this.stop.checkStave().getYForTopText(this.line)||0,i=this.start&&this.start.getAbsoluteX()||this.stop&&this.stop.checkStave().getTieStartX()||0,b=this.stop&&this.stop.getAbsoluteX()-this.stop.getWidth()-5||this.start&&this.start.checkStave().getTieEndX()-10||0;this.render_options.vibrato_width=b-i,function(...t){Si.DEBUG&&u("Vex.Flow.VibratoBracket",t)}("Rendering VibratoBracket: start_x:",i,"stop_x:",b,"y:",e),he.renderVibrato(t,i,e,this.render_options)}}function Ti(...t){vi.DEBUG&&u("Vex.Flow.Factory",t)}Si.DEBUG=!1;class vi{static newFromElementId(t,e=500,i=200){return new vi({renderer:{elementId:t,width:e,height:i}})}constructor(t={}){Ti("New factory: ",t),this.options={stave:{space:10},renderer:{elementId:"",width:500,height:200,background:"#FFF"},font:vi.TEXT_FONT},this.setOptions(t)}reset(){this.renderQ=[],this.systems=[],this.staves=[],this.voices=[],this.stave=void 0}setOptions(t){this.options=Object.assign(Object.assign({},this.options),t),this.initRenderer(),this.reset()}initRenderer(){const{elementId:t,width:e,height:i,background:b}=this.options.renderer;if(null==t)return;if(""==t)throw Ti(this),new g("renderer.elementId not set in FactoryOptions");let a=this.options.renderer.backend;if(void 0===a){a=Jt(document.getElementById(t))?le.Backends.CANVAS:le.Backends.SVG}this.context=le.buildContext(t,a,e,i,b)}getContext(){return this.context}setContext(t){return this.context=t,this}getStave(){return this.stave}getVoices(){return this.voices}Stave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1*e}},t),b=new ze(i.x,i.y,i.width,i.options);return this.staves.push(b),b.setContext(this.context),this.stave=b,b}TabStave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1.3*e}},t),b=new _i(i.x,i.y,i.width,i.options);return this.staves.push(b),b.setContext(this.context),this.stave=b,b}StaveNote(t){const e=new It(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GlyphNote(t,e,i){const b=new ei(t,e,i);return this.stave&&b.setStave(this.stave),b.setContext(this.context),this.renderQ.push(b),b}RepeatNote(t,e,i){const b=new ri(t,e,i);return this.stave&&b.setStave(this.stave),b.setContext(this.context),this.renderQ.push(b),b}GhostNote(t){const e=new ti(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TextNote(t){const e=new pe(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}BarNote(t={}){const e=new At(t.type);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}ClefNote(t){const e=Object.assign({type:"treble",options:{size:"default",annotation:void 0}},t),i=new Le(e.type,e.options.size,e.options.annotation);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}TimeSigNote(t){const e=Object.assign({time:"4/4"},t),i=new fi(e.time);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}KeySigNote(t){const e=new bi(t.key,t.cancelKey,t.alterKey);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TabNote(t){const e=new di(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GraceNote(t){const e=new ii(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),e}GraceNoteGroup(t){const e=new Xt(t.notes,t.slur);return e.setContext(this.context),e}Accidental(t){const e=new bt(t.type);return e.setContext(this.context),e}Annotation(t){const e=Object.assign({text:"p",hJustify:ht.CENTER,vJustify:mt.BOTTOM},t),i=new ct(e.text);return i.setJustification(e.hJustify),i.setVerticalJustification(e.vJustify),i.setFont(e.font),i.setContext(this.context),i}ChordSymbol(t){const e=Object.assign({vJustify:"top",hJustify:"center",kerning:!0,reportWidth:!0},t),i=new Mt;return i.setHorizontal(e.hJustify),i.setVertical(e.vJustify),i.setEnableKerning(e.kerning),i.setReportWidth(e.reportWidth),"string"==typeof e.fontFamily&&"number"==typeof e.fontSize?"string"==typeof e.fontWeight?i.setFont(e.fontFamily,e.fontSize,e.fontWeight):i.setFont(e.fontFamily,e.fontSize,""):"number"==typeof e.fontSize&&i.setFontSize(e.fontSize),i.setContext(this.context),i}Articulation(t){var e;const i=new ut(null!==(e=null==t?void 0:t.type)&&void 0!==e?e:"a.");return null!=(null==t?void 0:t.position)&&i.setPosition(t.position),null!=(null==t?void 0:t.betweenLines)&&i.setBetweenLines(t.betweenLines),i.setContext(this.context),i}Ornament(t,e){const i=Object.assign({type:t,position:0,accidental:""},e),b=new Kt(t);return b.setPosition(i.position),i.upperAccidental&&b.setUpperAccidental(i.upperAccidental),i.lowerAccidental&&b.setLowerAccidental(i.lowerAccidental),void 0!==i.delayed&&b.setDelayed(i.delayed),b.setContext(this.context),b}TextDynamics(t){const e=Object.assign({text:"p",duration:"q",dots:0,line:0},t),i=new ui({text:e.text,line:e.line,duration:e.duration,dots:e.dots});return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}Fingering(t){const e=Object.assign({number:"0",position:"left"},t),i=new Rt(e.number);return i.setPosition(e.position),i.setContext(this.context),i}StringNumber(t,e=!0){const i=new oe(t.number);return i.setPosition(t.position),i.setContext(this.context),i.setDrawCircle(e),i}TickContext(){return new Ce}ModifierContext(){return new ce}MultiMeasureRest(t){const e=p(t.number_of_measures,"NoNumberOfMeasures"),i=new ni(e,t);return i.setContext(this.context),this.renderQ.push(i),i}Voice(t){const e=Object.assign({time:"4/4"},t),i=new jt(e.time);return this.voices.push(i),i}StaveConnector(t){const e=new De(t.top_stave,t.bottom_stave);return e.setType(t.type).setContext(this.context),this.renderQ.push(e),e}Formatter(t){return new Pe(t)}Tuplet(t){const e=Object.assign({notes:[],options:{}},t),i=new Ae(e.notes,e.options).setContext(this.context);return this.renderQ.push(i),i}Beam(t){var e,i,b,a,n;const s=new Re(t.notes,null===(e=t.options)||void 0===e?void 0:e.autoStem).setContext(this.context);return s.breakSecondaryAt(null!==(b=null===(i=t.options)||void 0===i?void 0:i.secondaryBeamBreaks)&&void 0!==b?b:[]),(null===(a=t.options)||void 0===a?void 0:a.partialBeamDirections)&&Object.entries(null===(n=t.options)||void 0===n?void 0:n.partialBeamDirections).forEach((([t,e])=>{s.setPartialBeamSideAt(Number(t),e)})),this.renderQ.push(s),s}Curve(t){const e=new Ie(t.from,t.to,t.options).setContext(this.context);return this.renderQ.push(e),e}StaveTie(t){var e;const i=new Gt({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices},t.text);return(null===(e=t.options)||void 0===e?void 0:e.direction)&&i.setDirection(t.options.direction),i.setContext(this.context),this.renderQ.push(i),i}StaveLine(t){var e,i;const b=new mi({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices});return(null===(e=t.options)||void 0===e?void 0:e.text)&&b.setText(t.options.text),(null===(i=t.options)||void 0===i?void 0:i.font)&&b.setFont(t.options.font),b.setContext(this.context),this.renderQ.push(b),b}VibratoBracket(t){const e=new Si({start:t.from,stop:t.to});return t.options.line&&e.setLine(t.options.line),t.options.harsh&&e.setHarsh(t.options.harsh),e.setContext(this.context),this.renderQ.push(e),e}TextBracket(t){const e=new yi({start:t.from,stop:t.to,text:t.text,superscript:t.options.superscript,position:t.options.position});return t.options.line&&e.setLine(t.options.line),t.options.font&&e.setFont(t.options.font),e.setContext(this.context),this.renderQ.push(e),e}System(t={}){t.factory=this;const e=new ci(t).setContext(this.context);return this.systems.push(e),e}EasyScore(t={}){return t.factory=this,new Qe(t)}PedalMarking(t){const e=Object.assign({notes:[],options:{style:"mixed"}},t),i=new li(e.notes);return i.setType(li.typeString[e.options.style]),i.setContext(this.context),this.renderQ.push(i),i}NoteSubGroup(t){const e=Object.assign({notes:[]},t),i=new Vt(e.notes);return i.setContext(this.context),i}draw(){const t=this.context;this.systems.forEach((e=>e.setContext(t).format())),this.staves.forEach((e=>e.setContext(t).draw())),this.voices.forEach((e=>e.setContext(t).draw())),this.renderQ.forEach((e=>{e.isRendered()||e.setContext(t).draw()})),this.systems.forEach((e=>e.setContext(t).draw())),this.reset()}}vi.DEBUG=!1,vi.TEXT_FONT=Object.assign({},R.TEXT_FONT);class wi extends di{static get CATEGORY(){return x.GraceTabNote}constructor(t){super(t,!1),this.render_options=Object.assign(Object.assign({},this.render_options),{y_shift:.3,scale:.6,font:`7.5pt ${F.SANS_SERIF}`}),this.updateWidth()}}class zi{constructor(t){this.music=new et,this.setKey(t)}setKey(t){return this.key=t,this.reset(),this}getKey(){return this.key}reset(){this.keyParts=this.music.getKeyParts(this.key),this.keyString=this.keyParts.root,this.keyParts.accidental&&(this.keyString+=this.keyParts.accidental);if(!et.scaleTypes[this.keyParts.type])throw new g("BadArguments",`Unsupported key type: ${this.key}`);this.scale=this.music.getScaleTones(this.music.getNoteValue(this.keyString),et.scaleTypes[this.keyParts.type]),this.scaleMap={},this.scaleMapByValue={},this.originalScaleMapByValue={};const t=et.root_indices[this.keyParts.root];for(let e=0;eb?Di.SLIDE_DOWN:Di.SLIDE_UP}this.direction=e,this.render_options.cp1=11,this.render_options.cp2=14,this.render_options.y_shift=.5,this.resetFont()}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new g("BadArguments","No Y-values to render");const e=this.checkContext(),i=t.first_x_px,b=t.first_ys,a=t.last_x_px,n=t.direction;if(n!==Di.SLIDE_UP&&n!==Di.SLIDE_DOWN)throw new g("BadSlide","Invalid slide direction");const s=this.notes.first_indices;for(let t=0;tthis.tuningValues.length)throw new g("BadArguments",`String number must be between 1 and ${this.tuningValues.length}:${t}`);return this.tuningValues[e-1]}getValueForFret(t,e){const i=this.getValueForString(e),b=Number(t);if(b<0)throw new g("BadArguments",`Fret number must be 0 or higher: ${t}`);return i+b}getNoteForFret(t,e){const i=this.getValueForFret(t,e),b=Math.floor(i/12),a=i%12;return`${V.integerToNote(a)}/${b}`}}var Pi=function(t,e,i,b){return new(i||(i=Promise))((function(a,n){function s(t){try{o(b.next(t))}catch(t){n(t)}}function l(t){try{o(b.throw(t))}catch(t){n(t)}}function o(t){var e;t.done?a(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(s,l)}o((b=b.apply(t,e||[])).next())}))};class ki{static get BUILD(){return{VERSION:"4.2.6",ID:"103aad2b14837418c5e96c9e078edd036fcddf60",DATE:"2024-08-26T20:16:17.134Z"}}static setMusicFont(...t){const e=t.map((t=>F.load(t)));return V.MUSIC_FONT_STACK=e,Z.MUSIC_FONT_STACK=e.slice(),Z.CURRENT_CACHE_KEY=t.join(","),e}static fetchMusicFont(t,e){return Pi(this,void 0,void 0,(function*(){}))}static getMusicFont(){return V.MUSIC_FONT_STACK.map((t=>t.getName()))}static getMusicFontStack(){return V.MUSIC_FONT_STACK}static get RENDER_PRECISION_PLACES(){return V.RENDER_PRECISION_PLACES}static set RENDER_PRECISION_PLACES(t){V.RENDER_PRECISION_PLACES=t}static get SOFTMAX_FACTOR(){return V.SOFTMAX_FACTOR}static set SOFTMAX_FACTOR(t){V.SOFTMAX_FACTOR=t}static get NOTATION_FONT_SCALE(){return V.NOTATION_FONT_SCALE}static set NOTATION_FONT_SCALE(t){V.NOTATION_FONT_SCALE=t}static get TABLATURE_FONT_SCALE(){return V.TABLATURE_FONT_SCALE}static set TABLATURE_FONT_SCALE(t){V.TABLATURE_FONT_SCALE=t}static get RESOLUTION(){return V.RESOLUTION}static set RESOLUTION(t){V.RESOLUTION=t}static get SLASH_NOTEHEAD_WIDTH(){return V.SLASH_NOTEHEAD_WIDTH}static set SLASH_NOTEHEAD_WIDTH(t){V.SLASH_NOTEHEAD_WIDTH=t}static get STAVE_LINE_DISTANCE(){return V.STAVE_LINE_DISTANCE}static set STAVE_LINE_DISTANCE(t){V.STAVE_LINE_DISTANCE=t}static get STAVE_LINE_THICKNESS(){return V.STAVE_LINE_THICKNESS}static set STAVE_LINE_THICKNESS(t){V.STAVE_LINE_THICKNESS=t}static get STEM_HEIGHT(){return V.STEM_HEIGHT}static set STEM_HEIGHT(t){V.STEM_HEIGHT=t}static get STEM_WIDTH(){return V.STEM_WIDTH}static set STEM_WIDTH(t){V.STEM_WIDTH=t}static get TIME4_4(){return V.TIME4_4}static get accidentalMap(){return V.accidentalMap}static get unicode(){return V.unicode}static keySignature(t){return V.keySignature(t)}static hasKeySignature(t){return V.hasKeySignature(t)}static getKeySignatures(){return V.getKeySignatures()}static clefProperties(t){return V.clefProperties(t)}static keyProperties(t,e,i){return V.keyProperties(t,e,i)}static durationToTicks(t){return V.durationToTicks(t)}}ki.Accidental=bt,ki.Annotation=ct,ki.Articulation=ut,ki.Barline=kt,ki.BarNote=At,ki.Beam=Re,ki.Bend=Nt,ki.BoundingBox=D,ki.BoundingBoxComputation=C,ki.CanvasContext=Qt,ki.ChordSymbol=Mt,ki.Clef=de,ki.ClefNote=Le,ki.Crescendo=We,ki.Curve=Ie,ki.Dot=Ot,ki.EasyScore=Qe,ki.Element=R,ki.Factory=vi,ki.Font=F,ki.Formatter=Pe,ki.Fraction=z,ki.FretHandFinger=Rt,ki.GhostNote=ti,ki.Glyph=Z,ki.GlyphNote=ei,ki.GraceNote=ii,ki.GraceNoteGroup=Xt,ki.GraceTabNote=wi,ki.KeyManager=zi,ki.KeySignature=_e,ki.KeySigNote=bi,ki.Modifier=tt,ki.ModifierContext=ce,ki.MultiMeasureRest=ni,ki.Music=et,ki.Note=vt,ki.NoteHead=Lt,ki.NoteSubGroup=Vt,ki.Ornament=Kt,ki.Parenthesis=$t,ki.Parser=Ye,ki.PedalMarking=li,ki.Registry=O,ki.RenderContext=ft,ki.Renderer=le,ki.RepeatNote=ri,ki.Repetition=xe,ki.Stave=ze,ki.StaveConnector=De,ki.StaveHairpin=Bi,ki.StaveLine=mi,ki.StaveModifier=Pt,ki.StaveNote=It,ki.StaveTempo=ye,ki.StaveText=ue,ki.StaveTie=Gt,ki.Stem=at,ki.StringNumber=oe,ki.Stroke=re,ki.SVGContext=ie,ki.System=ci,ki.TabNote=di,ki.TabSlide=Di,ki.TabStave=_i,ki.TabTie=Ht,ki.TextBracket=yi,ki.TextDynamics=ui,ki.TextFormatter=rt,ki.TextNote=pe,ki.TickContext=Ce,ki.TimeSignature=Te,ki.TimeSigNote=fi,ki.Tremolo=Ci,ki.Tuning=Ei,ki.Tuplet=Ae,ki.Vibrato=he,ki.VibratoBracket=Si,ki.Voice=jt,ki.Volta=fe,ki.AnnotationHorizontalJustify=ht,ki.AnnotationVerticalJustify=mt,ki.ChordSymbolHorizontalJustify=Bt,ki.ChordSymbolVerticalJustify=Dt,ki.SymbolTypes=Ct,ki.SymbolModifiers=Et,ki.CurvePosition=Ue,ki.FontWeight=E,ki.FontStyle=P,ki.ModifierPosition=J,ki.RendererBackends=be,ki.RendererLineEndType=ae,ki.BarlineType=zt,ki.StaveModifierPosition=wt,ki.VoltaType=se,ki.TextBracketPosition=gi,ki.TextJustification=ne,ki.VoiceMode=Yt;const Ai={glyphs:{bracketTop:{x_min:0,x_max:469,y_min:0,y_max:295,ha:295,o:"m 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z"},bracketBottom:{x_min:0,x_max:469,y_min:-295,y_max:0,ha:295,o:"m 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z"},barlineTick:{x_min:0,x_max:36,y_min:868,y_max:1120,ha:252,o:"m 52 1250 l 52 1613 l 0 1613 l 0 1250 z"},breathMarkTick:{x_min:0,x_max:500,y_min:0,y_max:502,ha:502,o:"m 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z"},segno:{x_min:4,x_max:550,y_min:-27,y_max:759,ha:786,o:"m 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z"},coda:{x_min:-4,x_max:955,y_min:-158,y_max:898,ha:1056,o:"m 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z"},gClef:{x_min:0,x_max:671,y_min:-658,y_max:1098,ha:1756,o:"m 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z"},cClef:{x_min:0,x_max:699,y_min:-506,y_max:506,ha:1012,o:"m 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z"},fClef:{x_min:-5,x_max:684,y_min:-635,y_max:262,ha:897,o:"m 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z"},unpitchedPercussionClef1:{x_min:0,x_max:382,y_min:-250,y_max:250,ha:500,o:"m 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z"},"6stringTabClef":{x_min:-3,x_max:408,y_min:-748,y_max:764,ha:1512,o:"m 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z"},timeSig0:{x_min:20,x_max:450,y_min:-250,y_max:251,ha:501,o:"m 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z"},timeSig1:{x_min:20,x_max:314,y_min:-250,y_max:251,ha:501,o:"m 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z"},timeSig2:{x_min:20,x_max:426,y_min:-257,y_max:254,ha:511,o:"m 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z"},timeSig3:{x_min:20,x_max:401,y_min:-251,y_max:249,ha:500,o:"m 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z"},timeSig4:{x_min:20,x_max:450,y_min:-250,y_max:251,ha:501,o:"m 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z"},timeSig5:{x_min:20,x_max:383,y_min:-251,y_max:246,ha:497,o:"m 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z"},timeSig6:{x_min:20,x_max:414,y_min:-249,y_max:251,ha:500,o:"m 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z"},timeSig7:{x_min:20,x_max:421,y_min:-250,y_max:249,ha:499,o:"m 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z"},timeSig8:{x_min:20,x_max:416,y_min:-259,y_max:259,ha:518,o:"m 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z"},timeSig9:{x_min:20,x_max:414,y_min:-249,y_max:251,ha:500,o:"m 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z"},timeSigCommon:{x_min:5,x_max:424,y_min:-249,y_max:251,ha:500,o:"m 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z"},timeSigCutCommon:{x_min:0,x_max:418,y_min:-359,y_max:361,ha:720,o:"m 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z"},timeSigPlus:{x_min:-1,x_max:499,y_min:-250,y_max:250,ha:500,o:"m 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z"},timeSigPlusSmall:{x_min:-1,x_max:255,y_min:-133,y_max:123,ha:256,o:"m 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z"},timeSigMinus:{x_min:0,x_max:448,y_min:-35,y_max:40,ha:75,o:"m 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z"},timeSigParensRight:{x_min:0,x_max:184,y_min:-489,y_max:491,ha:980,o:"m 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z"},timeSigParensRightSmall:{x_min:0,x_max:110,y_min:-251,y_max:249,ha:500,o:"m 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z"},timeSigParensLeft:{x_min:0,x_max:184,y_min:-489,y_max:491,ha:980,o:"m 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z"},timeSigParensLeftSmall:{x_min:0,x_max:110,y_min:-251,y_max:249,ha:500,o:"m 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z"},noteheadDoubleWhole:{x_min:0,x_max:599,y_min:-155,y_max:155,ha:310,o:"m 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z"},noteheadWhole:{x_min:0,x_max:422,y_min:-125,y_max:125,ha:250,o:"m 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z"},noteheadHalf:{x_min:0,x_max:295,y_min:-125,y_max:125,ha:250,o:"m 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z"},noteheadBlack:{x_min:0,x_max:295,y_min:-125,y_max:125,ha:250,o:"m 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z"},noteheadXDoubleWhole:{x_min:0,x_max:546,y_min:-155,y_max:155,ha:310,o:"m 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z"},noteheadXWhole:{x_min:0,x_max:377,y_min:-125,y_max:125,ha:250,o:"m 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z"},noteheadXHalf:{x_min:0,x_max:334,y_min:-125,y_max:125,ha:250,o:"m 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z"},noteheadXBlack:{x_min:0,x_max:290,y_min:-125,y_max:125,ha:250,o:"m 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z"},noteheadCircleXDoubleWhole:{x_min:0,x_max:422,y_min:-155,y_max:155,ha:310,o:"m 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z"},noteheadCircleXWhole:{x_min:0,x_max:249,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z"},noteheadCircleXHalf:{x_min:0,x_max:250,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z"},noteheadCircleX:{x_min:0,x_max:249,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z"},noteheadCircledDoubleWhole:{x_min:0,x_max:603,y_min:-218,y_max:213,ha:431,o:"m 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z"},noteheadCircledWhole:{x_min:0,x_max:437,y_min:-225,y_max:211,ha:436,o:"m 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z"},noteheadCircledHalf:{x_min:-18,x_max:311,y_min:-162,y_max:167,ha:329,o:"m 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z"},noteheadCircledBlack:{x_min:-21,x_max:321,y_min:-171,y_max:167,ha:338,o:"m 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:416,y_min:-190,y_max:198,ha:388,o:"m 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z"},noteheadSquareWhite:{x_min:0,x_max:313,y_min:-125,y_max:125,ha:250,o:"m 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z"},noteheadSquareBlack:{x_min:0,x_max:313,y_min:-125,y_max:125,ha:250,o:"m 451 -180 l 451 180 l 0 180 l 0 -180 z"},noteheadTriangleDownDoubleWhole:{x_min:0,x_max:483,y_min:-155,y_max:155,ha:310,o:"m 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z"},noteheadTriangleDownWhole:{x_min:0,x_max:319,y_min:-125,y_max:125,ha:250,o:"m 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z"},noteheadTriangleDownHalf:{x_min:0,x_max:285,y_min:-125,y_max:125,ha:250,o:"m 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z"},noteheadTriangleDownBlack:{x_min:0,x_max:292,y_min:-125,y_max:125,ha:250,o:"m 207 -180 l 420 180 l 0 180 z"},noteheadTriangleUpDoubleWhole:{x_min:0,x_max:483,y_min:-155,y_max:155,ha:310,o:"m 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z"},noteheadTriangleUpWhole:{x_min:0,x_max:319,y_min:-125,y_max:125,ha:250,o:"m 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z"},noteheadTriangleUpHalf:{x_min:0,x_max:285,y_min:-125,y_max:125,ha:250,o:"m 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z"},noteheadTriangleUpBlack:{x_min:0,x_max:293,y_min:-125,y_max:125,ha:250,o:"m 422 -180 l 207 180 l 0 -180 z"},noteheadSlashedDoubleWhole1:{x_min:0,x_max:596,y_min:-179,y_max:168,ha:347,o:"m 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z"},noteheadSlashedWhole1:{x_min:-22,x_max:433,y_min:-157,y_max:148,ha:305,o:"m 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z"},noteheadSlashedHalf1:{x_min:-67,x_max:386,y_min:-142,y_max:160,ha:302,o:"m 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z"},noteheadSlashedBlack1:{x_min:-80,x_max:375,y_min:-165,y_max:167,ha:332,o:"m 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z"},noteheadSlashedDoubleWhole2:{x_min:0,x_max:596,y_min:-178,y_max:169,ha:347,o:"m 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z"},noteheadSlashedWhole2:{x_min:-18,x_max:436,y_min:-154,y_max:151,ha:305,o:"m 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z"},noteheadSlashedHalf2:{x_min:-73,x_max:380,y_min:-134,y_max:168,ha:302,o:"m 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z"},noteheadSlashedBlack2:{x_min:-79,x_max:376,y_min:-164,y_max:168,ha:332,o:"m 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:432,y_min:-155,y_max:155,ha:310,o:"m 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z"},noteheadDiamondWhole:{x_min:0,x_max:270,y_min:-125,y_max:125,ha:250,o:"m 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z"},noteheadDiamondHalf:{x_min:0,x_max:251,y_min:-125,y_max:125,ha:250,o:"m 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z"},noteheadDiamondBlack:{x_min:0,x_max:250,y_min:-125,y_max:125,ha:250,o:"m 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z"},noteheadParenthesis:{x_min:-73,x_max:368,y_min:-180,y_max:182,ha:362,o:"m 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z"},noteheadParenthesisRight:{x_min:-36,x_max:73,y_min:-181,y_max:181,ha:362,o:"m -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z"},noteheadParenthesisLeft:{x_min:0,x_max:109,y_min:-181,y_max:181,ha:362,o:"m 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z"},noteheadMoonBlack:{x_min:0,x_max:315,y_min:-125,y_max:125,ha:250,o:"m 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:339,y_min:-125,y_max:125,ha:250,o:"m 488 -180 l 0 180 l 0 -180 z"},noteheadTriangleRightBlack:{x_min:0,x_max:339,y_min:-125,y_max:125,ha:250,o:"m 488 180 l 0 -180 l 488 -180 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:278,y_min:-125,y_max:125,ha:250,o:"m 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z"},augmentationDot:{x_min:0,x_max:100,y_min:-50,y_max:50,ha:100,o:"m 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z"},tremolo1:{x_min:-150,x_max:150,y_min:-93,y_max:94,ha:187,o:"m 216 -45 l 216 135 l -216 46 l -216 -134 z"},flag8thUp:{x_min:0,x_max:264,y_min:-810,y_max:9,ha:819,o:"m 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z"},flag8thDown:{x_min:0,x_max:306,y_min:-14,y_max:808,ha:822,o:"m 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z"},flag16thUp:{x_min:0,x_max:279,y_min:-813,y_max:2,ha:815,o:"m 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z"},flag16thDown:{x_min:0,x_max:291,y_min:-9,y_max:812,ha:821,o:"m 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z"},flag32ndUp:{x_min:0,x_max:261,y_min:-812,y_max:149,ha:961,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag32ndDown:{x_min:0,x_max:273,y_min:-172,y_max:812,ha:984,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z"},flag64thUp:{x_min:0,x_max:261,y_min:-812,y_max:347,ha:1159,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag64thDown:{x_min:0,x_max:273,y_min:-376,y_max:812,ha:1188,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z"},flag128thUp:{x_min:0,x_max:261,y_min:-812,y_max:533,ha:1345,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag128thDown:{x_min:0,x_max:273,y_min:-580,y_max:812,ha:1392,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z"},accidentalFlat:{x_min:0,x_max:226,y_min:-175,y_max:439,ha:614,o:"m 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z"},accidentalNatural:{x_min:0,x_max:168,y_min:-335,y_max:341,ha:676,o:"m 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z"},accidentalSharp:{x_min:0,x_max:249,y_min:-348,y_max:350,ha:698,o:"m 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z"},accidentalDoubleSharp:{x_min:0,x_max:247,y_min:-125,y_max:127,ha:252,o:"m 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z"},accidentalDoubleFlat:{x_min:0,x_max:411,y_min:-175,y_max:437,ha:612,o:"m 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z"},accidentalParensLeft:{x_min:0,x_max:141,y_min:-248,y_max:247,ha:495,o:"m 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z"},accidentalParensRight:{x_min:0,x_max:141,y_min:-248,y_max:247,ha:495,o:"m 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z"},accidentalQuarterToneFlatStein:{x_min:1,x_max:227,y_min:-175,y_max:439,ha:614,o:"m 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:1,x_max:466,y_min:-175,y_max:439,ha:614,o:"m 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:179,y_min:-353,y_max:307,ha:660,o:"m 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z"},accidentalThreeQuarterTonesSharpStein:{x_min:3,x_max:317,y_min:-347,y_max:369,ha:716,o:"m 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z"},accidentalBuyukMucennebFlat:{x_min:1,x_max:287,y_min:-174,y_max:438,ha:612,o:"m 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z"},accidentalBuyukMucennebSharp:{x_min:0,x_max:341,y_min:-350,y_max:348,ha:698,o:"m 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z"},accidentalBakiyeFlat:{x_min:-1,x_max:286,y_min:-175,y_max:439,ha:614,o:"m 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z"},accidentalKomaSharp:{x_min:0,x_max:229,y_min:-337,y_max:322,ha:659,o:"m 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z"},accidentalKucukMucennebSharp:{x_min:-1,x_max:339,y_min:-338,y_max:321,ha:659,o:"m 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z"},accidentalKoron:{x_min:0,x_max:300,y_min:-472,y_max:157,ha:629,o:"m 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z"},accidentalSori:{x_min:0,x_max:421,y_min:-318,y_max:328,ha:646,o:"m 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z"},articAccentAbove:{x_min:0,x_max:339,y_min:1,y_max:245,ha:244,o:"m 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z"},articAccentBelow:{x_min:0,x_max:339,y_min:-244,y_max:0,ha:244,o:"m 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z"},articTenutoAbove:{x_min:-1,x_max:338,y_min:0,y_max:48,ha:48,o:"m 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z"},articTenutoBelow:{x_min:-1,x_max:338,y_min:-48,y_max:0,ha:48,o:"m 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z"},articStaccatoAbove:{x_min:0,x_max:84,y_min:0,y_max:84,ha:84,o:"m 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z"},articStaccatoBelow:{x_min:0,x_max:84,y_min:-84,y_max:0,ha:84,o:"m 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z"},articStaccatissimoAbove:{x_min:1,x_max:100,y_min:-2,y_max:293,ha:295,o:"m 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z"},articStaccatissimoBelow:{x_min:1,x_max:100,y_min:-295,y_max:0,ha:295,o:"m 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z"},articMarcatoAbove:{x_min:-1,x_max:235,y_min:-1,y_max:253,ha:254,o:"m 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z"},articMarcatoBelow:{x_min:-1,x_max:235,y_min:-254,y_max:0,ha:254,o:"m 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z"},fermataAbove:{x_min:3,x_max:605,y_min:-3,y_max:329,ha:332,o:"m 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z"},fermataBelow:{x_min:3,x_max:605,y_min:-332,y_max:0,ha:332,o:"m 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z"},fermataLongAbove:{x_min:0,x_max:603,y_min:-1,y_max:333,ha:334,o:"m 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z"},fermataLongBelow:{x_min:0,x_max:603,y_min:-333,y_max:1,ha:334,o:"m 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z"},fermataVeryLongAbove:{x_min:0,x_max:715,y_min:0,y_max:408,ha:408,o:"m 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z"},fermataVeryLongBelow:{x_min:0,x_max:715,y_min:-408,y_max:0,ha:408,o:"m 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z"},fermataVeryShortAbove:{x_min:0,x_max:726,y_min:0,y_max:449,ha:449,o:"m 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z"},fermataVeryShortBelow:{x_min:0,x_max:726,y_min:-449,y_max:0,ha:449,o:"m 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z"},fermataShortAbove:{x_min:0,x_max:604,y_min:0,y_max:341,ha:341,o:"m 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z"},fermataShortBelow:{x_min:0,x_max:604,y_min:-341,y_max:0,ha:341,o:"m 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z"},breathMarkComma:{x_min:1,x_max:152,y_min:2,y_max:251,ha:249,o:"m 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z"},breathMarkUpbow:{x_min:1,x_max:249,y_min:1,y_max:495,ha:494,o:"m 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z"},caesura:{x_min:0,x_max:384,y_min:-1,y_max:532,ha:533,o:"m 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z"},caesuraCurved:{x_min:0,x_max:373,y_min:0,y_max:530,ha:530,o:"m 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z"},restMaxima:{x_min:0,x_max:381,y_min:-249,y_max:250,ha:499,o:"m 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z"},restDoubleWhole:{x_min:0,x_max:125,y_min:0,y_max:250,ha:250,o:"m 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z"},restWhole:{x_min:0,x_max:282,y_min:-135,y_max:9,ha:144,o:"m 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z"},restWholeLegerLine:{x_min:-117,x_max:399,y_min:-135,y_max:20,ha:155,o:"m -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z"},restHalf:{x_min:0,x_max:282,y_min:-2,y_max:142,ha:144,o:"m 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z"},restHalfLegerLine:{x_min:-117,x_max:399,y_min:-13,y_max:142,ha:155,o:"m 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z"},restQuarter:{x_min:1,x_max:270,y_min:-375,y_max:373,ha:748,o:"m 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z"},rest8th:{x_min:0,x_max:247,y_min:-251,y_max:174,ha:425,o:"m 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z"},rest16th:{x_min:0,x_max:320,y_min:-500,y_max:179,ha:679,o:"m 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z"},rest32nd:{x_min:0,x_max:363,y_min:-500,y_max:426,ha:926,o:"m 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z"},rest64th:{x_min:0,x_max:423,y_min:-753,y_max:430,ha:1183,o:"m 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z"},rest128th:{x_min:0,x_max:485,y_min:-750,y_max:689,ha:1439,o:"m 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z"},dynamicPiano:{x_min:-89,x_max:366,y_min:-142,y_max:274,ha:416,o:"m 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z"},dynamicMezzo:{x_min:-20,x_max:446,y_min:-10,y_max:274,ha:284,o:"m 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z"},dynamicForte:{x_min:-141,x_max:364,y_min:-152,y_max:444,ha:596,o:"m 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z"},dynamicRinforzando:{x_min:-20,x_max:277,y_min:0,y_max:274,ha:274,o:"m 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z"},dynamicSforzando:{x_min:0,x_max:229,y_min:-10,y_max:273,ha:283,o:"m 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z"},dynamicZ:{x_min:-30,x_max:244,y_min:-10,y_max:268,ha:278,o:"m 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z"},ornamentTrill:{x_min:0,x_max:521,y_min:-10,y_max:390,ha:400,o:"m 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z"},ornamentTurn:{x_min:0,x_max:460,y_min:0,y_max:218,ha:218,o:"m 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z"},ornamentTurnSlash:{x_min:0,x_max:460,y_min:-90,y_max:306,ha:396,o:"m 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z"},ornamentMordent:{x_min:1,x_max:729,y_min:-73,y_max:319,ha:392,o:"m 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z"},ornamentShortTrill:{x_min:0,x_max:725,y_min:0,y_max:245,ha:245,o:"m 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z"},ornamentTremblement:{x_min:1,x_max:985,y_min:0,y_max:244,ha:244,o:"m 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:1119,y_min:0,y_max:481,ha:481,o:"m 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:2,x_max:1150,y_min:-367,y_max:245,ha:612,o:"m 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:1048,y_min:-367,y_max:331,ha:698,o:"m 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:949,y_min:0,y_max:381,ha:381,o:"m 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:1278,y_min:0,y_max:247,ha:247,o:"m 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:0,x_max:1277,y_min:-62,y_max:333,ha:395,o:"m 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:859,y_min:-222,y_max:246,ha:468,o:"m 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z"},brassScoop:{x_min:1,x_max:320,y_min:-373,y_max:13,ha:386,o:"m 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z"},brassDoitMedium:{x_min:0,x_max:489,y_min:-40,y_max:346,ha:386,o:"m 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z"},brassFallLipShort:{x_min:1,x_max:293,y_min:-345,y_max:42,ha:387,o:"m 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z"},brassLiftMedium:{x_min:0,x_max:811,y_min:0,y_max:852,ha:852,o:"m 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z"},brassFallRoughMedium:{x_min:0,x_max:811,y_min:0,y_max:852,ha:852,o:"m 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z"},brassBend:{x_min:0,x_max:392,y_min:0,y_max:282,ha:282,o:"m 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z"},brassMuteClosed:{x_min:0,x_max:272,y_min:0,y_max:272,ha:272,o:"m 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z"},brassMuteOpen:{x_min:0,x_max:304,y_min:0,y_max:304,ha:304,o:"m 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z"},brassFlip:{x_min:0,x_max:379,y_min:0,y_max:282,ha:282,o:"m 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z"},brassJazzTurn:{x_min:0,x_max:620,y_min:0,y_max:245,ha:245,o:"m 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z"},brassSmear:{x_min:1,x_max:306,y_min:0,y_max:170,ha:170,o:"m 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z"},stringsDownBow:{x_min:0,x_max:312,y_min:0,y_max:318,ha:318,o:"m 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z"},stringsUpBow:{x_min:1,x_max:249,y_min:1,y_max:495,ha:494,o:"m 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z"},stringsHarmonic:{x_min:0,x_max:200,y_min:0,y_max:200,ha:200,o:"m 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:200,y_min:0,y_max:300,ha:300,o:"m 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:200,y_min:0,y_max:300,ha:300,o:"m 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z"},pluckedLeftHandPizzicato:{x_min:0,x_max:272,y_min:0,y_max:272,ha:272,o:"m 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z"},keyboardPedalPed:{x_min:0,x_max:1019,y_min:-8,y_max:555,ha:563,o:"m 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z"},keyboardPedalUp:{x_min:0,x_max:450,y_min:0,y_max:450,ha:450,o:"m 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z"},pictChokeCymbal:{x_min:1,x_max:152,y_min:2,y_max:251,ha:249,o:"m 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z"},wiggleArpeggiatoUp:{x_min:-33,x_max:292,y_min:0,y_max:119,ha:119,o:"m 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z"},arrowheadBlackUp:{x_min:0,x_max:228,y_min:0,y_max:299,ha:299,o:"m 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z"},arrowheadBlackDown:{x_min:0,x_max:228,y_min:0,y_max:299,ha:299,o:"m 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z"},arpeggiatoUp:{x_min:1,x_max:229,y_min:7,y_max:1511,ha:1504,o:"m 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z"},arpeggiatoDown:{x_min:1,x_max:229,y_min:-4,y_max:1500,ha:1504,o:"m 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z"},repeat1Bar:{x_min:0,x_max:532,y_min:-250,y_max:279,ha:529,o:"m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z"},repeat2Bars:{x_min:0,x_max:762,y_min:-250,y_max:279,ha:529,o:"m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z"},repeat4Bars:{x_min:0,x_max:1232,y_min:-250,y_max:279,ha:529,o:"m 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z"},repeatBarSlash:{x_min:0,x_max:532,y_min:-250,y_max:279,ha:529,o:"m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z"},csymDiminished:{x_min:0,x_max:473,y_min:0,y_max:473,ha:473,o:"m 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z"},csymHalfDiminished:{x_min:-16,x_max:488,y_min:-15,y_max:489,ha:504,o:"m 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z"},csymAugmented:{x_min:0,x_max:395,y_min:1,y_max:396,ha:395,o:"m 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z"},csymMajorSeventh:{x_min:0,x_max:558,y_min:1,y_max:477,ha:476,o:"m 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z"},csymMinor:{x_min:0,x_max:325,y_min:216,y_max:260,ha:44,o:"m 468 374 l 0 374 l 0 311 l 468 311 z"},csymParensLeftTall:{x_min:1,x_max:185,y_min:0,y_max:997,ha:997,o:"m 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z"},csymParensRightTall:{x_min:-20,x_max:164,y_min:0,y_max:997,ha:997,o:"m -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z"},csymBracketLeftTall:{x_min:0,x_max:155,y_min:0,y_max:1e3,ha:1e3,o:"m 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z"},csymBracketRightTall:{x_min:1,x_max:156,y_min:0,y_max:1e3,ha:1e3,o:"m 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z"},csymParensLeftVeryTall:{x_min:0,x_max:122,y_min:0,y_max:993,ha:993,o:"m 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z"},csymParensRightVeryTall:{x_min:-15,x_max:107,y_min:0,y_max:993,ha:993,o:"m -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z"},csymDiagonalArrangementSlash:{x_min:0,x_max:999,y_min:0,y_max:1e3,ha:1e3,o:"m 1439 1380 l 1377 1440 l 0 60 l 62 0 z"},accSagittal5v7KleismaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z"},accSagittal5v7KleismaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z"},accSagittal5CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z"},accSagittal5CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z"},accSagittal7CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z"},accSagittal7CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z"},accSagittal25SmallDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z"},accSagittal25SmallDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z"},accSagittal35MediumDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z"},accSagittal35MediumDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittal11MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z"},accSagittal11MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z"},accSagittal11LargeDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z"},accSagittal11LargeDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal35LargeDiesisUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal35LargeDiesisDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittalSharp25SDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z"},accSagittalFlat25SUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z"},accSagittalSharp7CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z"},accSagittalFlat7CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z"},accSagittalSharp5CDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z"},accSagittalFlat5CUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z"},accSagittalSharp5v7kDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z"},accSagittalFlat5v7kUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z"},accSagittalSharp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z"},accSagittalFlat:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z"},accSagittalSharp5v7kUp:{x_min:0,x_max:312,y_min:-361,y_max:172,ha:533,o:"m 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z"},accSagittalFlat5v7kDown:{x_min:0,x_max:312,y_min:-172,y_max:361,ha:533,o:"m 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z"},accSagittalSharp5CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z"},accSagittalFlat5CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z"},accSagittalSharp7CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z"},accSagittalFlat7CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z"},accSagittalSharp25SUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z"},accSagittalFlat25SDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z"},accSagittalSharp35MUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z"},accSagittalFlat35MDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z"},accSagittalSharp11MUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z"},accSagittalFlat11MDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z"},accSagittalSharp11LUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat11LDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalSharp35LUp:{x_min:0,x_max:500,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat35LDown:{x_min:0,x_max:500,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalDoubleSharp25SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z"},accSagittalDoubleFlat25SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z"},accSagittalDoubleSharp7CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z"},accSagittalDoubleFlat7CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z"},accSagittalDoubleSharp5CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z"},accSagittalDoubleFlat5CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z"},accSagittalDoubleSharp5v7kDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z"},accSagittalDoubleFlat5v7kUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z"},accSagittalDoubleSharp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z"},accSagittalDoubleFlat:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z"},accSagittal7v11KleismaUp:{x_min:0,x_max:219,y_min:-359,y_max:172,ha:531,o:"m 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z"},accSagittal7v11KleismaDown:{x_min:0,x_max:219,y_min:-172,y_max:359,ha:531,o:"m 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z"},accSagittal17CommaUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal17CommaDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal55CommaUp:{x_min:0,x_max:219,y_min:-359,y_max:172,ha:531,o:"m 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z"},accSagittal55CommaDown:{x_min:0,x_max:219,y_min:-172,y_max:359,ha:531,o:"m 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z"},accSagittal7v11CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z"},accSagittal7v11CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal5v11SmallDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z"},accSagittal5v11SmallDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittalSharp5v11SDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat5v11SUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp7v11CDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z"},accSagittalFlat7v11CUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z"},accSagittalSharp55CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z"},accSagittalFlat55CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z"},accSagittalSharp17CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z"},accSagittalFlat17CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z"},accSagittalSharp7v11kDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z"},accSagittalFlat7v11kUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z"},accSagittalSharp7v11kUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z"},accSagittalFlat7v11kDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z"},accSagittalSharp17CUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat17CDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp55CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z"},accSagittalFlat55CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z"},accSagittalSharp7v11CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z"},accSagittalFlat7v11CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z"},accSagittalSharp5v11SUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z"},accSagittalFlat5v11SDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalDoubleSharp5v11SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat5v11SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp7v11CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z"},accSagittalDoubleFlat7v11CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z"},accSagittalDoubleSharp55CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z"},accSagittalDoubleFlat55CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z"},accSagittalDoubleSharp17CDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z"},accSagittalDoubleFlat17CUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z"},accSagittalDoubleSharp7v11kDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z"},accSagittalDoubleFlat7v11kUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z"},accSagittal23CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z"},accSagittal23CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z"},accSagittal5v19CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z"},accSagittal5v19CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittal5v23SmallDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z"},accSagittal5v23SmallDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittalSharp5v23SDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z"},accSagittalFlat5v23SUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z"},accSagittalSharp5v19CDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z"},accSagittalFlat5v19CUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z"},accSagittalSharp23CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z"},accSagittalFlat23CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z"},accSagittalSharp23CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z"},accSagittalFlat23CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z"},accSagittalSharp5v19CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z"},accSagittalFlat5v19CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z"},accSagittalSharp5v23SUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z"},accSagittalFlat5v23SDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z"},accSagittalDoubleSharp5v23SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z"},accSagittalDoubleFlat5v23SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z"},accSagittalDoubleSharp5v19CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z"},accSagittalDoubleFlat5v19CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z"},accSagittalDoubleSharp23CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z"},accSagittalDoubleFlat23CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z"},accSagittal19SchismaUp:{x_min:0,x_max:125,y_min:-359,y_max:172,ha:531,o:"m 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z"},accSagittal19SchismaDown:{x_min:0,x_max:125,y_min:-172,y_max:359,ha:531,o:"m 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z"},accSagittal17KleismaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal17KleismaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal143CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z"},accSagittal143CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal11v49CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z"},accSagittal11v49CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z"},accSagittal19CommaUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z"},accSagittal19CommaDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z"},accSagittal7v19CommaUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z"},accSagittal7v19CommaDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z"},accSagittal49SmallDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal49SmallDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal23SmallDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal23SmallDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal5v13MediumDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z"},accSagittal5v13MediumDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z"},accSagittal11v19MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z"},accSagittal11v19MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z"},accSagittal49MediumDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z"},accSagittal49MediumDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z"},accSagittal5v49MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z"},accSagittal5v49MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z"},accSagittal49LargeDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z"},accSagittal49LargeDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z"},accSagittal11v19LargeDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z"},accSagittal11v19LargeDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z"},accSagittal5v13LargeDiesisUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z"},accSagittal5v13LargeDiesisDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z"},accSagittalSharp23SDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z"},accSagittalFlat23SUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp49SDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z"},accSagittalFlat49SUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z"},accSagittalSharp7v19CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z"},accSagittalFlat7v19CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z"},accSagittalSharp19CDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z"},accSagittalFlat19CUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z"},accSagittalSharp11v49CDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat11v49CUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z"},accSagittalSharp143CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat143CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp17kDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z"},accSagittalFlat17kUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z"},accSagittalSharp19sDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z"},accSagittalFlat19sUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z"},accSagittalSharp19sUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z"},accSagittalFlat19sDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z"},accSagittalSharp17kUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat17kDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp143CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z"},accSagittalFlat143CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp11v49CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z"},accSagittalFlat11v49CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z"},accSagittalSharp19CUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat19CDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalSharp7v19CUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat7v19CDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalSharp49SUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat49SDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp23SUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat23SDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp5v13MUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z"},accSagittalFlat5v13MDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z"},accSagittalSharp11v19MUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat11v19MDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalSharp49MUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z"},accSagittalFlat49MDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z"},accSagittalSharp5v49MUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z"},accSagittalFlat5v49MDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z"},accSagittalSharp49LUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z"},accSagittalFlat49LDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z"},accSagittalSharp11v19LUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z"},accSagittalFlat11v19LDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z"},accSagittalSharp5v13LUp:{x_min:0,x_max:500,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat5v13LDown:{x_min:0,x_max:500,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalDoubleSharp23SDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z"},accSagittalDoubleFlat23SUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z"},accSagittalDoubleSharp49SDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z"},accSagittalDoubleFlat49SUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z"},accSagittalDoubleSharp7v19CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z"},accSagittalDoubleFlat7v19CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z"},accSagittalDoubleSharp19CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z"},accSagittalDoubleFlat19CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z"},accSagittalDoubleSharp11v49CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat11v49CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp143CDown:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat143CUp:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp17kDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z"},accSagittalDoubleFlat17kUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z"},accSagittalDoubleSharp19sDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z"},accSagittalDoubleFlat19sUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z"},accSagittalShaftUp:{x_min:0,x_max:31,y_min:-359,y_max:172,ha:531,o:"m 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z"},accSagittalShaftDown:{x_min:0,x_max:31,y_min:-172,y_max:359,ha:531,o:"m 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z"},accSagittalAcute:{x_min:0,x_max:125,y_min:-62,y_max:125,ha:187,o:"m 0 0 l 0 -89 l 180 89 l 180 180 z"},accSagittalGrave:{x_min:0,x_max:125,y_min:-125,y_max:62,ha:187,o:"m 180 -180 l 180 -89 l 0 89 l 0 0 z"},accSagittal1MinaUp:{x_min:-7,x_max:124,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal1MinaDown:{x_min:-7,x_max:124,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal2MinasUp:{x_min:-7,x_max:218,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal2MinasDown:{x_min:-7,x_max:218,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal1TinaUp:{x_min:0,x_max:93,y_min:16,y_max:107,ha:91,o:"m 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z"},accSagittal1TinaDown:{x_min:0,x_max:93,y_min:-107,y_max:-16,ha:91,o:"m 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z"},accSagittal2TinasUp:{x_min:0,x_max:94,y_min:16,y_max:107,ha:91,o:"m 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal2TinasDown:{x_min:0,x_max:94,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z"},accSagittal3TinasUp:{x_min:-7,x_max:124,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal3TinasDown:{x_min:-7,x_max:124,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal4TinasUp:{x_min:0,x_max:187,y_min:16,y_max:107,ha:91,o:"m 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z"},accSagittal4TinasDown:{x_min:0,x_max:187,y_min:-107,y_max:-16,ha:91,o:"m 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z"},accSagittal5TinasUp:{x_min:0,x_max:218,y_min:16,y_max:107,ha:91,o:"m 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal5TinasDown:{x_min:0,x_max:218,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z"},accSagittal6TinasUp:{x_min:-7,x_max:218,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal6TinasDown:{x_min:-7,x_max:218,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal7TinasUp:{x_min:0,x_max:281,y_min:16,y_max:107,ha:91,o:"m 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z"},accSagittal7TinasDown:{x_min:0,x_max:281,y_min:-107,y_max:-16,ha:91,o:"m 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z"},accSagittal8TinasUp:{x_min:0,x_max:312,y_min:16,y_max:107,ha:91,o:"m 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal8TinasDown:{x_min:0,x_max:312,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z"},accSagittal9TinasUp:{x_min:-7,x_max:312,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal9TinasDown:{x_min:-7,x_max:312,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittalFractionalTinaUp:{x_min:-3,x_max:35,y_min:73,y_max:111,ha:38,o:"m -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z"},accSagittalFractionalTinaDown:{x_min:-3,x_max:35,y_min:-111,y_max:-73,ha:38,o:"m -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:164,y_min:-194,y_max:421,ha:615,o:"m 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:414,y_min:-194,y_max:421,ha:615,o:"m 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z"},accidentalWilsonPlus:{x_min:0,x_max:281,y_min:-203,y_max:203,ha:406,o:"m 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z"},accidentalWilsonMinus:{x_min:0,x_max:281,y_min:-186,y_max:186,ha:372,o:"m 0 112 l 405 -268 l 405 -112 l 0 268 z"}},fontFamily:"Bravura",resolution:1e3,generatedOn:"2022-12-18T09:06:51.407Z"},Ni={smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}};const Fi={resolution:1e3,fontFamily:"VexFlowCustom",glyphs:{vexAccidentalMicrotonal1:{x_min:-171.5,x_max:483.1875,ha:493,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 "},vexAccidentalMicrotonal3:{x_min:0,x_max:430.75,ha:360,o:"m -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z "},vexAccidentalMicrotonal4:{x_min:0,x_max:430.75,ha:360,o:"m 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z "},vexNoteHeadRectBlack:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 "},vexNoteHeadRectWhite:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100"},vexWiggleArpeggioUp:{x_min:58.53125,x_max:228.671875,ha:294,o:"m 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 "}}};const Mi={glyphs:{bracketTop:{x_min:0,x_max:412,y_min:-18,y_max:223,ha:241,o:"m 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z"},bracketBottom:{x_min:0,x_max:412,y_min:-223,y_max:18,ha:241,o:"m 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z"},barlineTick:{x_min:-59,x_max:59,y_min:-139,y_max:139,ha:279,o:"m 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z"},breathMarkTick:{x_min:-151,x_max:272,y_min:0,y_max:429,ha:429,o:"m 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z"},segno:{x_min:7,x_max:493,y_min:-50,y_max:650,ha:699,o:"m 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z"},coda:{x_min:22,x_max:478,y_min:-31,y_max:531,ha:563,o:"m 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z"},gClef:{x_min:0,x_max:623,y_min:-632,y_max:1082,ha:1713,o:"m 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z"},cClef:{x_min:0,x_max:643,y_min:-508,y_max:508,ha:1016,o:"m 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z"},fClef:{x_min:0,x_max:661,y_min:-545,y_max:254,ha:798,o:"m 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z"},unpitchedPercussionClef1:{x_min:-4,x_max:337,y_min:-250,y_max:250,ha:500,o:"m -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z"},"6stringTabClef":{x_min:0,x_max:501,y_min:-735,y_max:753,ha:1487,o:"m 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z"},timeSig0:{x_min:0,x_max:380,y_min:-250,y_max:236,ha:486,o:"m 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z"},timeSig1:{x_min:0,x_max:254,y_min:-250,y_max:236,ha:486,o:"m 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z"},timeSig2:{x_min:0,x_max:337,y_min:-250,y_max:236,ha:486,o:"m 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z"},timeSig3:{x_min:0,x_max:302,y_min:-250,y_max:236,ha:486,o:"m 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z"},timeSig4:{x_min:0,x_max:345,y_min:-250,y_max:236,ha:486,o:"m 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z"},timeSig5:{x_min:0,x_max:302,y_min:-250,y_max:236,ha:486,o:"m 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z"},timeSig6:{x_min:0,x_max:349,y_min:-250,y_max:236,ha:486,o:"m 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z"},timeSig7:{x_min:0,x_max:326,y_min:-250,y_max:236,ha:486,o:"m 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z"},timeSig8:{x_min:0,x_max:360,y_min:-250,y_max:236,ha:486,o:"m 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z"},timeSig9:{x_min:0,x_max:349,y_min:-250,y_max:236,ha:486,o:"m 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z"},timeSigCommon:{x_min:0,x_max:409,y_min:-233,y_max:233,ha:466,o:"m 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z"},timeSigCutCommon:{x_min:0,x_max:409,y_min:-394,y_max:394,ha:788,o:"m 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z"},timeSigPlus:{x_min:0,x_max:235,y_min:-118,y_max:118,ha:235,o:"m 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z"},timeSigPlusSmall:{x_min:0,x_max:235,y_min:-118,y_max:118,ha:235,o:"m 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z"},timeSigMinus:{x_min:0,x_max:235,y_min:-23,y_max:23,ha:46,o:"m 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z"},timeSigParensRight:{x_min:19,x_max:122,y_min:-267,y_max:267,ha:535,o:"m 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z"},timeSigParensRightSmall:{x_min:19,x_max:122,y_min:-267,y_max:267,ha:535,o:"m 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z"},timeSigParensLeft:{x_min:-122,x_max:-19,y_min:-267,y_max:267,ha:534,o:"m -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z"},timeSigParensLeftSmall:{x_min:-122,x_max:-19,y_min:-267,y_max:267,ha:534,o:"m -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z"},noteheadDoubleWhole:{x_min:0,x_max:663,y_min:-174,y_max:174,ha:349,o:"m 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z"},noteheadWhole:{x_min:0,x_max:455,y_min:-135,y_max:135,ha:269,o:"m 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z"},noteheadHalf:{x_min:0,x_max:316,y_min:-135,y_max:135,ha:269,o:"m 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z"},noteheadBlack:{x_min:0,x_max:316,y_min:-135,y_max:135,ha:269,o:"m 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z"},noteheadXWhole:{x_min:0,x_max:440,y_min:-133,y_max:133,ha:265,o:"m 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z"},noteheadXHalf:{x_min:0,x_max:300,y_min:-133,y_max:133,ha:265,o:"m 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z"},noteheadXBlack:{x_min:0,x_max:300,y_min:-133,y_max:133,ha:265,o:"m 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z"},noteheadCircleX:{x_min:0,x_max:357,y_min:-178,y_max:178,ha:357,o:"m 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z"},noteheadTriangleUpWhole:{x_min:0,x_max:462,y_min:-149,y_max:149,ha:297,o:"m 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z"},noteheadTriangleUpHalf:{x_min:0,x_max:323,y_min:-149,y_max:149,ha:298,o:"m 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z"},noteheadTriangleUpBlack:{x_min:0,x_max:322,y_min:-149,y_max:149,ha:297,o:"m 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z"},noteheadDiamondWhole:{x_min:0,x_max:462,y_min:-138,y_max:138,ha:277,o:"m 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z"},noteheadDiamondHalf:{x_min:0,x_max:322,y_min:-138,y_max:138,ha:277,o:"m 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z"},noteheadDiamondBlack:{x_min:0,x_max:322,y_min:-138,y_max:138,ha:277,o:"m 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z"},augmentationDot:{x_min:-63,x_max:63,y_min:-63,y_max:63,ha:126,o:"m -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z"},tremolo1:{x_min:-252,x_max:216,y_min:-185,y_max:148,ha:333,o:"m 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z"},flag8thUp:{x_min:-17,x_max:234,y_min:-745,y_max:-4,ha:741,o:"m -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z"},flag8thDown:{x_min:-15,x_max:271,y_min:4,y_max:745,ha:741,o:"m 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z"},flag16thUp:{x_min:-17,x_max:234,y_min:-847,y_max:-4,ha:843,o:"m -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z"},flag16thDown:{x_min:-15,x_max:267,y_min:4,y_max:745,ha:741,o:"m 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z"},flag32ndUp:{x_min:-17,x_max:233,y_min:-1005,y_max:96,ha:1101,o:"m -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z"},flag32ndDown:{x_min:-15,x_max:270,y_min:-96,y_max:895,ha:991,o:"m 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z"},flag64thUp:{x_min:-17,x_max:233,y_min:-933,y_max:296,ha:1230,o:"m -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z"},flag64thDown:{x_min:-15,x_max:271,y_min:-296,y_max:820,ha:1116,o:"m 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z"},flag128thUp:{x_min:-17,x_max:231,y_min:-987,y_max:496,ha:1484,o:"m -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z"},flag128thDown:{x_min:-15,x_max:270,y_min:-496,y_max:870,ha:1366,o:"m 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z"},accidentalFlat:{x_min:-15,x_max:185,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z"},accidentalNatural:{x_min:0,x_max:176,y_min:-334,y_max:334,ha:667,o:"m 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z"},accidentalSharp:{x_min:0,x_max:239,y_min:-388,y_max:388,ha:775,o:"m 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z"},accidentalDoubleSharp:{x_min:0,x_max:271,y_min:-135,y_max:135,ha:271,o:"m 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z"},accidentalDoubleFlat:{x_min:-15,x_max:356,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z"},accidentalParensLeft:{x_min:-122,x_max:-19,y_min:-267,y_max:267,ha:534,o:"m -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z"},accidentalParensRight:{x_min:19,x_max:122,y_min:-267,y_max:267,ha:535,o:"m 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:200,y_min:-165,y_max:457,ha:622,o:"m 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:446,y_min:-165,y_max:457,ha:622,o:"m 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:142,y_min:-373,y_max:373,ha:747,o:"m 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z"},accidentalThreeQuarterTonesSharpStein:{x_min:0,x_max:335,y_min:-391,y_max:391,ha:782,o:"m 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z"},accidentalBuyukMucennebFlat:{x_min:-125,x_max:185,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z"},accidentalBuyukMucennebSharp:{x_min:0,x_max:284,y_min:-388,y_max:388,ha:775,o:"m 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z"},accidentalBakiyeFlat:{x_min:-129,x_max:185,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z"},accidentalKomaSharp:{x_min:0,x_max:142,y_min:-373,y_max:373,ha:747,o:"m 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:188,y_min:-373,y_max:373,ha:747,o:"m 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z"},articAccentAbove:{x_min:-256,x_max:19,y_min:-114,y_max:114,ha:227,o:"m -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z"},articAccentBelow:{x_min:-256,x_max:19,y_min:-114,y_max:114,ha:227,o:"m -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z"},articTenutoAbove:{x_min:-154,x_max:154,y_min:-15,y_max:15,ha:30,o:"m -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z"},articTenutoBelow:{x_min:-154,x_max:154,y_min:-15,y_max:15,ha:30,o:"m -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z"},articStaccatoAbove:{x_min:-49,x_max:49,y_min:-49,y_max:49,ha:99,o:"m -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z"},articStaccatoBelow:{x_min:-49,x_max:49,y_min:-49,y_max:49,ha:99,o:"m -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z"},articStaccatissimoAbove:{x_min:-53,x_max:53,y_min:0,y_max:184,ha:184,o:"m -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z"},articStaccatissimoBelow:{x_min:-53,x_max:53,y_min:-184,y_max:0,ha:184,o:"m -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z"},articMarcatoAbove:{x_min:-114,x_max:114,y_min:-256,y_max:19,ha:275,o:"m -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z"},articMarcatoBelow:{x_min:-114,x_max:114,y_min:-19,y_max:256,ha:275,o:"m -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z"},fermataAbove:{x_min:-324,x_max:324,y_min:0,y_max:353,ha:353,o:"m -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z"},fermataBelow:{x_min:-324,x_max:324,y_min:-353,y_max:0,ha:353,o:"m -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},fermataLongAbove:{x_min:-286,x_max:286,y_min:0,y_max:364,ha:364,o:"m -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z"},fermataLongBelow:{x_min:-286,x_max:286,y_min:-364,y_max:0,ha:364,o:"m -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},fermataVeryLongAbove:{x_min:-286,x_max:286,y_min:0,y_max:438,ha:438,o:"m -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z"},fermataVeryLongBelow:{x_min:-286,x_max:286,y_min:-438,y_max:0,ha:438,o:"m -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},fermataVeryShortAbove:{x_min:-351,x_max:351,y_min:0,y_max:571,ha:571,o:"m -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z"},fermataVeryShortBelow:{x_min:-351,x_max:351,y_min:-571,y_max:0,ha:571,o:"m 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z"},fermataShortAbove:{x_min:-286,x_max:286,y_min:0,y_max:469,ha:469,o:"m -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z"},fermataShortBelow:{x_min:-286,x_max:286,y_min:-469,y_max:0,ha:469,o:"m -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},breathMarkComma:{x_min:0,x_max:168,y_min:-155,y_max:155,ha:311,o:"m 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z"},breathMarkUpbow:{x_min:-125,x_max:125,y_min:0,y_max:409,ha:409,o:"m -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z"},caesura:{x_min:0,x_max:457,y_min:-202,y_max:303,ha:504,o:"m 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z"},caesuraCurved:{x_min:0,x_max:370,y_min:-207,y_max:310,ha:517,o:"m 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z"},restMaxima:{x_min:0,x_max:853,y_min:-250,y_max:250,ha:500,o:"m 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z"},restDoubleWhole:{x_min:0,x_max:284,y_min:0,y_max:250,ha:250,o:"m 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z"},restWhole:{x_min:0,x_max:330,y_min:-125,y_max:0,ha:125,o:"m 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z"},restWholeLegerLine:{x_min:0,x_max:542,y_min:-125,y_max:11,ha:137,o:"m 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z"},restHalf:{x_min:0,x_max:330,y_min:0,y_max:125,ha:125,o:"m 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z"},restHalfLegerLine:{x_min:0,x_max:542,y_min:-11,y_max:125,ha:137,o:"m 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z"},restQuarter:{x_min:0,x_max:221,y_min:-365,y_max:365,ha:730,o:"m 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z"},rest8th:{x_min:0,x_max:258,y_min:-197,y_max:219,ha:416,o:"m 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z"},rest16th:{x_min:0,x_max:331,y_min:-443,y_max:219,ha:662,o:"m 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z"},rest32nd:{x_min:0,x_max:405,y_min:-443,y_max:466,ha:909,o:"m 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z"},rest64th:{x_min:0,x_max:479,y_min:-689,y_max:466,ha:1155,o:"m 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z"},rest128th:{x_min:0,x_max:553,y_min:-689,y_max:712,ha:1401,o:"m 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z"},dynamicPiano:{x_min:-39,x_max:378,y_min:-178,y_max:277,ha:455,o:"m 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z"},dynamicMezzo:{x_min:35,x_max:493,y_min:-19,y_max:272,ha:291,o:"m 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z"},dynamicForte:{x_min:-87,x_max:440,y_min:-182,y_max:415,ha:597,o:"m 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z"},dynamicRinforzando:{x_min:58,x_max:357,y_min:0,y_max:275,ha:275,o:"m 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z"},dynamicSforzando:{x_min:52,x_max:278,y_min:-22,y_max:270,ha:292,o:"m 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z"},dynamicZ:{x_min:23,x_max:309,y_min:2,y_max:250,ha:248,o:"m 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z"},ornamentTrill:{x_min:-249,x_max:249,y_min:0,y_max:376,ha:376,o:"m -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z"},ornamentTurn:{x_min:-310,x_max:310,y_min:-143,y_max:143,ha:286,o:"m -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z"},ornamentTurnSlash:{x_min:-310,x_max:310,y_min:-201,y_max:201,ha:402,o:"m -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z"},ornamentMordent:{x_min:-296,x_max:296,y_min:-215,y_max:198,ha:413,o:"m -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z"},ornamentShortTrill:{x_min:-296,x_max:296,y_min:-127,y_max:127,ha:253,o:"m -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z"},ornamentTremblement:{x_min:-419,x_max:419,y_min:-127,y_max:127,ha:253,o:"m -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z"},ornamentPrecompAppoggTrill:{x_min:-419,x_max:419,y_min:-127,y_max:255,ha:381,o:"m -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:-433,x_max:433,y_min:-243,y_max:127,ha:370,o:"m -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z"},ornamentPrecompSlideTrillBach:{x_min:-433,x_max:433,y_min:-243,y_max:198,ha:442,o:"m 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:-433,x_max:433,y_min:-127,y_max:244,ha:370,o:"m 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:-439,x_max:439,y_min:-127,y_max:236,ha:363,o:"m -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:-439,x_max:439,y_min:-215,y_max:236,ha:451,o:"m -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z"},ornamentPrecompTrillLowerSuffix:{x_min:-439,x_max:439,y_min:-236,y_max:127,ha:362,o:"m -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z"},stringsDownBow:{x_min:-168,x_max:168,y_min:0,y_max:353,ha:353,o:"m -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z"},stringsUpBow:{x_min:-110,x_max:110,y_min:0,y_max:277,ha:277,o:"m -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z"},stringsHarmonic:{x_min:-82,x_max:82,y_min:-82,y_max:82,ha:163,o:"m -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z"},pluckedSnapPizzicatoAbove:{x_min:-110,x_max:110,y_min:-110,y_max:205,ha:315,o:"m -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z"},pluckedSnapPizzicatoBelow:{x_min:-110,x_max:110,y_min:-205,y_max:110,ha:315,o:"m 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z"},pluckedLeftHandPizzicato:{x_min:-155,x_max:155,y_min:-157,y_max:157,ha:315,o:"m -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z"},keyboardPedalPed:{x_min:0,x_max:782,y_min:-1,y_max:500,ha:501,o:"m 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z"},keyboardPedalUp:{x_min:0,x_max:435,y_min:65,y_max:500,ha:435,o:"m 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z"},pictChokeCymbal:{x_min:0,x_max:168,y_min:-155,y_max:155,ha:311,o:"m 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z"},wiggleArpeggiatoUp:{x_min:-8,x_max:269,y_min:0,y_max:126,ha:126,o:"m 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z"},arrowheadBlackUp:{x_min:11,x_max:239,y_min:-6,y_max:269,ha:275,o:"m 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z"},arrowheadBlackDown:{x_min:11,x_max:239,y_min:6,y_max:281,ha:275,o:"m 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z"}},fontFamily:"GonvilleSmufl",resolution:1e3,generatedOn:"2023-04-20T22:11:26.009Z"};const Oi={glyphs:{bracketTop:{x_min:0,x_max:491,y_min:0,y_max:279,ha:279,o:"m 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z"},bracketBottom:{x_min:0,x_max:491,y_min:-279,y_max:0,ha:279,o:"m 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z"},segno:{x_min:0,x_max:654,y_min:0,y_max:869,ha:869,o:"m 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z"},coda:{x_min:0,x_max:745,y_min:-113,y_max:735,ha:848,o:"m 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z"},gClef:{x_min:0,x_max:640,y_min:-666,y_max:1112,ha:1778,o:"m 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z"},cClef:{x_min:0,x_max:627,y_min:-480,y_max:482,ha:962,o:"m 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z"},fClef:{x_min:0,x_max:664,y_min:-617,y_max:251,ha:868,o:"m 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z"},unpitchedPercussionClef1:{x_min:0,x_max:352,y_min:-252,y_max:252,ha:504,o:"m 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z"},"6stringTabClef":{x_min:0,x_max:439,y_min:-743,y_max:746,ha:1489,o:"m 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z"},timeSig0:{x_min:15,x_max:389,y_min:-254,y_max:255,ha:509,o:"m 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z"},timeSig1:{x_min:15,x_max:336,y_min:-243,y_max:245,ha:488,o:"m 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z"},timeSig2:{x_min:15,x_max:377,y_min:-243,y_max:245,ha:488,o:"m 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z"},timeSig3:{x_min:15,x_max:364,y_min:-244,y_max:244,ha:488,o:"m 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z"},timeSig4:{x_min:14,x_max:442,y_min:-248,y_max:249,ha:497,o:"m 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z"},timeSig5:{x_min:15,x_max:362,y_min:-244,y_max:246,ha:490,o:"m 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z"},timeSig6:{x_min:15,x_max:387,y_min:-244,y_max:245,ha:489,o:"m 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z"},timeSig7:{x_min:15,x_max:366,y_min:-250,y_max:251,ha:501,o:"m 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z"},timeSig8:{x_min:15,x_max:393,y_min:-248,y_max:246,ha:494,o:"m 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z"},timeSig9:{x_min:15,x_max:387,y_min:-244,y_max:245,ha:489,o:"m 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z"},timeSigCommon:{x_min:0,x_max:463,y_min:-256,y_max:258,ha:514,o:"m 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z"},timeSigCutCommon:{x_min:0,x_max:463,y_min:-376,y_max:388,ha:764,o:"m 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z"},timeSigPlus:{x_min:0,x_max:408,y_min:-204,y_max:204,ha:408,o:"m 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z"},noteheadDoubleWhole:{x_min:0,x_max:538,y_min:-178,y_max:179,ha:357,o:"m 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z"},noteheadWhole:{x_min:0,x_max:373,y_min:-134,y_max:136,ha:270,o:"m 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z"},noteheadHalf:{x_min:0,x_max:325,y_min:-133,y_max:132,ha:265,o:"m 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z"},noteheadBlack:{x_min:0,x_max:325,y_min:-133,y_max:132,ha:265,o:"m 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z"},noteheadXBlack:{x_min:0,x_max:325,y_min:-132,y_max:132,ha:264,o:"m 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z"},noteheadCircleX:{x_min:0,x_max:325,y_min:-162,y_max:163,ha:325,o:"m 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:432,y_min:-179,y_max:177,ha:356,o:"m 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z"},noteheadSquareWhite:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z"},noteheadSquareBlack:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 446 180 l 0 180 l 0 -180 l 446 -180 z"},noteheadTriangleUpBlack:{x_min:0,x_max:310,y_min:-136,y_max:122,ha:258,o:"m 223 176 l 0 -196 l 446 -196 z"},noteheadSlashedDoubleWhole1:{x_min:-66,x_max:456,y_min:-213,y_max:212,ha:425,o:"m 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z"},noteheadSlashedWhole1:{x_min:-75,x_max:448,y_min:-211,y_max:214,ha:425,o:"m 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z"},noteheadSlashedHalf1:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z"},noteheadSlashedBlack1:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z"},noteheadSlashedDoubleWhole2:{x_min:-66,x_max:456,y_min:-213,y_max:212,ha:425,o:"m 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z"},noteheadSlashedWhole2:{x_min:-75,x_max:448,y_min:-212,y_max:214,ha:426,o:"m 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z"},noteheadSlashedHalf2:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z"},noteheadSlashedBlack2:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:373,y_min:-178,y_max:179,ha:357,o:"m 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z"},noteheadDiamondWhole:{x_min:0,x_max:373,y_min:-133,y_max:132,ha:265,o:"m 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z"},noteheadDiamondHalf:{x_min:0,x_max:335,y_min:-132,y_max:133,ha:265,o:"m 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z"},noteheadDiamondBlack:{x_min:0,x_max:335,y_min:-132,y_max:133,ha:265,o:"m 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z"},noteheadParenthesisRight:{x_min:0,x_max:75,y_min:-209,y_max:212,ha:421,o:"m 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z"},noteheadParenthesisLeft:{x_min:0,x_max:75,y_min:-212,y_max:209,ha:421,o:"m 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z"},noteheadMoonBlack:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:339,y_min:-136,y_max:122,ha:258,o:"m 0 176 l 0 -196 l 488 -196 z"},noteheadTriangleRightBlack:{x_min:0,x_max:339,y_min:-136,y_max:122,ha:258,o:"m 488 176 l 0 -196 l 488 -196 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:310,y_min:-136,y_max:122,ha:258,o:"m 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z"},augmentationDot:{x_min:0,x_max:100,y_min:-50,y_max:50,ha:100,o:"m 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z"},tremolo1:{x_min:0,x_max:290,y_min:-93,y_max:96,ha:189,o:"m 0 48 l 0 -134 l 418 -43 l 418 138 z"},flag8thUp:{x_min:0,x_max:289,y_min:-817,y_max:12,ha:829,o:"m 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z"},flag8thDown:{x_min:0,x_max:309,y_min:-12,y_max:817,ha:829,o:"m 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z"},flag16thUp:{x_min:0,x_max:279,y_min:-820,y_max:12,ha:832,o:"m 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z"},flag16thDown:{x_min:0,x_max:309,y_min:-26,y_max:803,ha:829,o:"m 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z"},flag32ndUp:{x_min:0,x_max:279,y_min:-821,y_max:186,ha:1007,o:"m 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z"},flag32ndDown:{x_min:0,x_max:309,y_min:-216,y_max:803,ha:1019,o:"m 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z"},flag64thUp:{x_min:0,x_max:279,y_min:-822,y_max:373,ha:1195,o:"m 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z"},flag64thDown:{x_min:0,x_max:309,y_min:-403,y_max:804,ha:1207,o:"m 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z"},flag128thUp:{x_min:0,x_max:279,y_min:-821,y_max:573,ha:1394,o:"m 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z"},flag128thDown:{x_min:0,x_max:309,y_min:-591,y_max:803,ha:1394,o:"m 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z"},accidentalFlat:{x_min:0,x_max:203,y_min:-176,y_max:453,ha:629,o:"m 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z"},accidentalNatural:{x_min:0,x_max:171,y_min:-323,y_max:325,ha:648,o:"m 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z"},accidentalSharp:{x_min:0,x_max:244,y_min:-333,y_max:334,ha:667,o:"m 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z"},accidentalDoubleSharp:{x_min:0,x_max:275,y_min:-137,y_max:138,ha:275,o:"m 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z"},accidentalDoubleFlat:{x_min:0,x_max:371,y_min:-176,y_max:453,ha:629,o:"m 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z"},accidentalParensLeft:{x_min:0,x_max:75,y_min:-212,y_max:209,ha:421,o:"m 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z"},accidentalParensRight:{x_min:0,x_max:75,y_min:-209,y_max:212,ha:421,o:"m 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:193,y_min:-176,y_max:452,ha:628,o:"m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:422,y_min:-176,y_max:452,ha:628,o:"m 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:180,y_min:-316,y_max:320,ha:636,o:"m 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z"},accidentalThreeQuarterTonesSharpStein:{x_min:0,x_max:290,y_min:-328,y_max:339,ha:667,o:"m 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z"},accidentalBuyukMucennebFlat:{x_min:0,x_max:277,y_min:-176,y_max:454,ha:630,o:"m 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z"},accidentalBuyukMucennebSharp:{x_min:0,x_max:348,y_min:-332,y_max:334,ha:666,o:"m 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z"},accidentalBakiyeFlat:{x_min:0,x_max:277,y_min:-176,y_max:454,ha:630,o:"m 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:348,y_min:-316,y_max:318,ha:634,o:"m 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z"},articAccentAbove:{x_min:0,x_max:361,y_min:0,y_max:235,ha:235,o:"m 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z"},articAccentBelow:{x_min:0,x_max:361,y_min:-235,y_max:0,ha:235,o:"m 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z"},articTenutoAbove:{x_min:0,x_max:316,y_min:0,y_max:46,ha:46,o:"m 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z"},articTenutoBelow:{x_min:0,x_max:316,y_min:-46,y_max:0,ha:46,o:"m 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z"},articStaccatoAbove:{x_min:0,x_max:78,y_min:0,y_max:78,ha:78,o:"m 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z"},articStaccatoBelow:{x_min:0,x_max:78,y_min:-78,y_max:0,ha:78,o:"m 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z"},articStaccatissimoAbove:{x_min:0,x_max:127,y_min:0,y_max:248,ha:248,o:"m 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z"},articStaccatissimoBelow:{x_min:0,x_max:127,y_min:-248,y_max:0,ha:248,o:"m 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z"},articMarcatoAbove:{x_min:1,x_max:296,y_min:0,y_max:253,ha:253,o:"m 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z"},articMarcatoBelow:{x_min:0,x_max:295,y_min:-253,y_max:0,ha:253,o:"m 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z"},fermataAbove:{x_min:0,x_max:622,y_min:0,y_max:368,ha:368,o:"m 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z"},fermataBelow:{x_min:0,x_max:622,y_min:-368,y_max:0,ha:368,o:"m 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z"},fermataLongAbove:{x_min:0,x_max:623,y_min:0,y_max:368,ha:368,o:"m 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z"},fermataLongBelow:{x_min:0,x_max:623,y_min:-368,y_max:0,ha:368,o:"m 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z"},fermataVeryLongAbove:{x_min:0,x_max:842,y_min:0,y_max:549,ha:549,o:"m 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z"},fermataVeryLongBelow:{x_min:0,x_max:842,y_min:-549,y_max:0,ha:549,o:"m 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z"},fermataShortAbove:{x_min:0,x_max:642,y_min:0,y_max:454,ha:454,o:"m 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z"},fermataShortBelow:{x_min:0,x_max:642,y_min:-454,y_max:0,ha:454,o:"m 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z"},breathMarkComma:{x_min:0,x_max:191,y_min:0,y_max:321,ha:321,o:"m 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z"},caesura:{x_min:0,x_max:380,y_min:0,y_max:490,ha:490,o:"m 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z"},caesuraCurved:{x_min:0,x_max:368,y_min:0,y_max:491,ha:491,o:"m 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z"},restMaxima:{x_min:0,x_max:450,y_min:-250,y_max:250,ha:500,o:"m 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z"},restDoubleWhole:{x_min:0,x_max:125,y_min:-11,y_max:262,ha:273,o:"m 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z"},restWhole:{x_min:0,x_max:325,y_min:-131,y_max:5,ha:136,o:"m 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z"},restWholeLegerLine:{x_min:-139,x_max:464,y_min:-122,y_max:14,ha:136,o:"m 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z"},restHalf:{x_min:0,x_max:325,y_min:-4,y_max:132,ha:136,o:"m 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z"},restHalfLegerLine:{x_min:-139,x_max:464,y_min:-14,y_max:122,ha:136,o:"m 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z"},restQuarter:{x_min:0,x_max:235,y_min:-331,y_max:401,ha:732,o:"m 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z"},rest8th:{x_min:0,x_max:276,y_min:-255,y_max:204,ha:459,o:"m 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z"},rest16th:{x_min:1,x_max:344,y_min:-507,y_max:204,ha:711,o:"m 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z"},rest32nd:{x_min:0,x_max:391,y_min:-507,y_max:460,ha:967,o:"m 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z"},rest64th:{x_min:0,x_max:423,y_min:-758,y_max:464,ha:1222,o:"m 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z"},rest128th:{x_min:-1,x_max:475,y_min:-759,y_max:717,ha:1476,o:"m 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z"},dynamicPiano:{x_min:-95,x_max:317,y_min:-163,y_max:263,ha:426,o:"m 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z"},dynamicMezzo:{x_min:-7,x_max:374,y_min:-2,y_max:251,ha:253,o:"m 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z"},dynamicForte:{x_min:-137,x_max:334,y_min:-193,y_max:421,ha:614,o:"m -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z"},dynamicRinforzando:{x_min:-12,x_max:230,y_min:0,y_max:254,ha:254,o:"m 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z"},dynamicSforzando:{x_min:0,x_max:208,y_min:-5,y_max:263,ha:268,o:"m 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z"},dynamicZ:{x_min:-42,x_max:239,y_min:-1,y_max:258,ha:259,o:"m 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z"},ornamentTrill:{x_min:-12,x_max:383,y_min:0,y_max:383,ha:383,o:"m 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z"},ornamentTurn:{x_min:0,x_max:456,y_min:0,y_max:232,ha:232,o:"m 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z"},ornamentTurnSlash:{x_min:0,x_max:456,y_min:-80,y_max:313,ha:393,o:"m 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z"},ornamentMordent:{x_min:0,x_max:473,y_min:-77,y_max:316,ha:393,o:"m 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z"},ornamentShortTrill:{x_min:0,x_max:473,y_min:0,y_max:248,ha:248,o:"m 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z"},ornamentTremblement:{x_min:0,x_max:654,y_min:0,y_max:248,ha:248,o:"m 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:680,y_min:0,y_max:388,ha:388,o:"m 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:0,x_max:662,y_min:-158,y_max:248,ha:406,o:"m 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:662,y_min:-158,y_max:321,ha:479,o:"m 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:662,y_min:0,y_max:406,ha:406,o:"m 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:857,y_min:0,y_max:248,ha:248,o:"m 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:565,y_min:-171,y_max:249,ha:420,o:"m 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z"},brassMuteClosed:{x_min:0,x_max:312,y_min:0,y_max:312,ha:312,o:"m 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z"},brassMuteOpen:{x_min:0,x_max:280,y_min:0,y_max:280,ha:280,o:"m 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z"},stringsDownBow:{x_min:0,x_max:315,y_min:0,y_max:293,ha:293,o:"m 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z"},stringsUpBow:{x_min:0,x_max:262,y_min:0,y_max:343,ha:343,o:"m 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z"},stringsHarmonic:{x_min:0,x_max:181,y_min:0,y_max:181,ha:181,o:"m 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:269,y_min:0,y_max:389,ha:389,o:"m 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:269,y_min:0,y_max:389,ha:389,o:"m 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z"},keyboardPedalPed:{x_min:0,x_max:981,y_min:-10,y_max:545,ha:555,o:"m 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z"},keyboardPedalUp:{x_min:0,x_max:473,y_min:0,y_max:473,ha:473,o:"m 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z"},wiggleArpeggiatoUp:{x_min:-22,x_max:242,y_min:0,y_max:164,ha:164,o:"m 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z"},repeat1Bar:{x_min:0,x_max:481,y_min:-250,y_max:250,ha:500,o:"m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z"},repeat2Bars:{x_min:0,x_max:735,y_min:-250,y_max:250,ha:500,o:"m 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z"},repeat4Bars:{x_min:0,x_max:1243,y_min:-250,y_max:250,ha:500,o:"m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z"},repeatBarSlash:{x_min:0,x_max:481,y_min:-250,y_max:250,ha:500,o:"m 693 360 l 511 360 l 0 -360 l 181 -360 z"},csymDiminished:{x_min:0,x_max:501,y_min:0,y_max:501,ha:501,o:"m 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z"},csymHalfDiminished:{x_min:-1,x_max:502,y_min:-1,y_max:502,ha:503,o:"m 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z"},csymAugmented:{x_min:1,x_max:321,y_min:90,y_max:410,ha:320,o:"m 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z"},csymMajorSeventh:{x_min:0,x_max:500,y_min:10,y_max:490,ha:480,o:"m 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:160,y_min:-176,y_max:452,ha:628,o:"m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:416,y_min:-176,y_max:452,ha:628,o:"m 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z"}},fontFamily:"Leland",resolution:1e3,generatedOn:"2022-12-19T23:52:37.756Z"};const Ri={glyphs:{bracketTop:{x_min:0,x_max:508,y_min:0,y_max:370,ha:370,o:"m 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z"},bracketBottom:{x_min:0,x_max:496,y_min:-393,y_max:0,ha:393,o:"m 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z"},barlineTick:{x_min:0,x_max:56,y_min:877,y_max:1122,ha:245,o:"m 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z"},breathMarkTick:{x_min:0,x_max:568,y_min:0,y_max:621,ha:621,o:"m 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z"},segno:{x_min:0,x_max:798,y_min:-65,y_max:806,ha:871,o:"m 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z"},coda:{x_min:0,x_max:1380,y_min:-196,y_max:1037,ha:1233,o:"m 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z"},gClef:{x_min:0,x_max:664,y_min:-559,y_max:1009,ha:1568,o:"m 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z"},cClef:{x_min:0,x_max:731,y_min:-543,y_max:543,ha:1086,o:"m 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z"},fClef:{x_min:0,x_max:776,y_min:-496,y_max:216,ha:712,o:"m 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z"},unpitchedPercussionClef1:{x_min:0,x_max:379,y_min:-250,y_max:250,ha:500,o:"m 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z"},"6stringTabClef":{x_min:0,x_max:438,y_min:-768,y_max:767,ha:1535,o:"m 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z"},timeSig0:{x_min:20,x_max:513,y_min:-358,y_max:359,ha:717,o:"m 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z"},timeSig1:{x_min:20,x_max:283,y_min:-364,y_max:366,ha:730,o:"m 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z"},timeSig2:{x_min:20,x_max:660,y_min:-379,y_max:382,ha:761,o:"m 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z"},timeSig3:{x_min:20,x_max:540,y_min:-392,y_max:392,ha:784,o:"m 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z"},timeSig4:{x_min:20,x_max:633,y_min:-490,y_max:491,ha:981,o:"m 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z"},timeSig5:{x_min:20,x_max:583,y_min:-389,y_max:389,ha:778,o:"m 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z"},timeSig6:{x_min:20,x_max:565,y_min:-363,y_max:363,ha:726,o:"m 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z"},timeSig7:{x_min:20,x_max:592,y_min:-345,y_max:345,ha:690,o:"m 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z"},timeSig8:{x_min:20,x_max:504,y_min:-428,y_max:428,ha:856,o:"m 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z"},timeSig9:{x_min:20,x_max:494,y_min:-421,y_max:421,ha:842,o:"m 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z"},timeSigCommon:{x_min:20,x_max:585,y_min:-298,y_max:294,ha:592,o:"m 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z"},timeSigCutCommon:{x_min:20,x_max:695,y_min:-687,y_max:687,ha:1374,o:"m 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z"},timeSigPlus:{x_min:0,x_max:661,y_min:-358,y_max:358,ha:716,o:"m 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z"},timeSigPlusSmall:{x_min:0,x_max:418,y_min:-197,y_max:199,ha:396,o:"m 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z"},timeSigMinus:{x_min:0,x_max:662,y_min:-54,y_max:55,ha:109,o:"m 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z"},timeSigParensRight:{x_min:0,x_max:274,y_min:-723,y_max:725,ha:1448,o:"m 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z"},timeSigParensRightSmall:{x_min:0,x_max:154,y_min:-422,y_max:422,ha:844,o:"m 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z"},timeSigParensLeft:{x_min:1,x_max:400,y_min:-728,y_max:728,ha:1456,o:"m 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z"},timeSigParensLeftSmall:{x_min:0,x_max:173,y_min:-405,y_max:404,ha:809,o:"m 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z"},noteheadDoubleWhole:{x_min:0,x_max:614,y_min:-223,y_max:223,ha:446,o:"m 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z"},noteheadWhole:{x_min:0,x_max:380,y_min:-186,y_max:165,ha:351,o:"m 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z"},noteheadHalf:{x_min:0,x_max:334,y_min:-174,y_max:175,ha:349,o:"m 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z"},noteheadBlack:{x_min:0,x_max:334,y_min:-164,y_max:164,ha:328,o:"m 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z"},noteheadXDoubleWhole:{x_min:0,x_max:730,y_min:-266,y_max:267,ha:533,o:"m 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z"},noteheadXWhole:{x_min:0,x_max:506,y_min:-143,y_max:144,ha:287,o:"m 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z"},noteheadXHalf:{x_min:0,x_max:421,y_min:-146,y_max:151,ha:297,o:"m 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z"},noteheadXBlack:{x_min:0,x_max:289,y_min:-156,y_max:157,ha:313,o:"m 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z"},noteheadCircleXDoubleWhole:{x_min:0,x_max:437,y_min:-220,y_max:219,ha:439,o:"m 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z"},noteheadCircleXWhole:{x_min:0,x_max:323,y_min:-190,y_max:184,ha:374,o:"m 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z"},noteheadCircleXHalf:{x_min:0,x_max:309,y_min:-179,y_max:179,ha:358,o:"m 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z"},noteheadCircleX:{x_min:0,x_max:344,y_min:-179,y_max:175,ha:354,o:"m 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z"},noteheadCircledDoubleWhole:{x_min:0,x_max:672,y_min:-291,y_max:291,ha:582,o:"m 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z"},noteheadCircledWhole:{x_min:-50,x_max:472,y_min:-231,y_max:232,ha:463,o:"m 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z"},noteheadCircledHalf:{x_min:-50,x_max:393,y_min:-175,y_max:175,ha:350,o:"m 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z"},noteheadCircledBlack:{x_min:-70,x_max:326,y_min:-168,y_max:192,ha:360,o:"m 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:474,y_min:-209,y_max:211,ha:420,o:"m 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z"},noteheadSquareWhite:{x_min:0,x_max:350,y_min:-131,y_max:131,ha:262,o:"m 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z"},noteheadSquareBlack:{x_min:0,x_max:342,y_min:-130,y_max:132,ha:262,o:"m 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z"},noteheadTriangleDownDoubleWhole:{x_min:0,x_max:510,y_min:-213,y_max:213,ha:426,o:"m 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z"},noteheadTriangleDownWhole:{x_min:0,x_max:366,y_min:-145,y_max:138,ha:283,o:"m 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z"},noteheadTriangleDownHalf:{x_min:0,x_max:341,y_min:-159,y_max:159,ha:318,o:"m 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z"},noteheadTriangleDownBlack:{x_min:0,x_max:346,y_min:-149,y_max:149,ha:298,o:"m 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z"},noteheadTriangleUpDoubleWhole:{x_min:0,x_max:510,y_min:-213,y_max:213,ha:426,o:"m 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z"},noteheadTriangleUpWhole:{x_min:0,x_max:366,y_min:-145,y_max:138,ha:283,o:"m 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z"},noteheadTriangleUpHalf:{x_min:0,x_max:341,y_min:-159,y_max:159,ha:318,o:"m 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z"},noteheadTriangleUpBlack:{x_min:0,x_max:346,y_min:-149,y_max:149,ha:298,o:"m 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z"},noteheadSlashedDoubleWhole1:{x_min:0,x_max:697,y_min:-290,y_max:290,ha:580,o:"m 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z"},noteheadSlashedWhole1:{x_min:-76,x_max:498,y_min:-168,y_max:168,ha:336,o:"m -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z"},noteheadSlashedHalf1:{x_min:-79,x_max:471,y_min:-184,y_max:184,ha:368,o:"m -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z"},noteheadSlashedBlack1:{x_min:-110,x_max:452,y_min:-190,y_max:190,ha:380,o:"m -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z"},noteheadSlashedDoubleWhole2:{x_min:0,x_max:697,y_min:-295,y_max:295,ha:590,o:"m 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z"},noteheadSlashedWhole2:{x_min:-83,x_max:510,y_min:-201,y_max:198,ha:399,o:"m 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z"},noteheadSlashedHalf2:{x_min:-73,x_max:454,y_min:-188,y_max:188,ha:376,o:"m 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z"},noteheadSlashedBlack2:{x_min:-84,x_max:405,y_min:-189,y_max:189,ha:378,o:"m 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:429,y_min:-221,y_max:221,ha:442,o:"m 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z"},noteheadDiamondWhole:{x_min:0,x_max:271,y_min:-132,y_max:132,ha:264,o:"m 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z"},noteheadDiamondHalf:{x_min:0,x_max:295,y_min:-148,y_max:148,ha:296,o:"m 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z"},noteheadDiamondBlack:{x_min:0,x_max:310,y_min:-146,y_max:146,ha:292,o:"m 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z"},noteheadParenthesis:{x_min:-70,x_max:329,y_min:-196,y_max:201,ha:397,o:"m 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z"},noteheadParenthesisRight:{x_min:-30,x_max:82,y_min:-199,y_max:206,ha:405,o:"m -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z"},noteheadParenthesisLeft:{x_min:0,x_max:106,y_min:-197,y_max:197,ha:394,o:"m 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z"},noteheadMoonBlack:{x_min:0,x_max:328,y_min:-125,y_max:125,ha:250,o:"m 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:391,y_min:-142,y_max:142,ha:284,o:"m 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z"},noteheadTriangleRightBlack:{x_min:0,x_max:398,y_min:-139,y_max:140,ha:279,o:"m 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:334,y_min:-134,y_max:136,ha:270,o:"m 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z"},augmentationDot:{x_min:0,x_max:96,y_min:-57,y_max:57,ha:114,o:"m 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z"},tremolo1:{x_min:-158,x_max:156,y_min:-88,y_max:88,ha:176,o:"m -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z"},flag8thUp:{x_min:0,x_max:261,y_min:-819,y_max:0,ha:819,o:"m 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z"},flag8thDown:{x_min:0,x_max:261,y_min:0,y_max:819,ha:819,o:"m 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z"},flag16thUp:{x_min:0,x_max:327,y_min:-819,y_max:0,ha:819,o:"m 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z"},flag16thDown:{x_min:0,x_max:327,y_min:0,y_max:819,ha:819,o:"m 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z"},flag32ndUp:{x_min:0,x_max:268,y_min:-849,y_max:149,ha:999,o:"m 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z"},flag32ndDown:{x_min:-3,x_max:268,y_min:-169,y_max:829,ha:999,o:"m 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z"},flag64thUp:{x_min:-4,x_max:282,y_min:-824,y_max:347,ha:1171,o:"m 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z"},flag64thDown:{x_min:-5,x_max:281,y_min:-375,y_max:796,ha:1171,o:"m 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z"},flag128thUp:{x_min:0,x_max:252,y_min:-804,y_max:530,ha:1334,o:"m 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z"},flag128thDown:{x_min:-1,x_max:252,y_min:-580,y_max:754,ha:1334,o:"m 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z"},accidentalFlat:{x_min:1,x_max:209,y_min:-208,y_max:472,ha:680,o:"m 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z"},accidentalNatural:{x_min:0,x_max:214,y_min:-456,y_max:462,ha:918,o:"m 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z"},accidentalSharp:{x_min:-22,x_max:390,y_min:-384,y_max:383,ha:767,o:"m 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z"},accidentalDoubleSharp:{x_min:0,x_max:287,y_min:-159,y_max:159,ha:318,o:"m 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z"},accidentalDoubleFlat:{x_min:0,x_max:359,y_min:-220,y_max:446,ha:666,o:"m 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z"},accidentalParensLeft:{x_min:0,x_max:130,y_min:-270,y_max:268,ha:538,o:"m 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z"},accidentalParensRight:{x_min:0,x_max:139,y_min:-275,y_max:277,ha:552,o:"m 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:208,y_min:-240,y_max:440,ha:680,o:"m 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:422,y_min:-240,y_max:440,ha:680,o:"m 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:300,y_min:-338,y_max:351,ha:689,o:"m 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z"},accidentalThreeQuarterTonesSharpStein:{x_min:-23,x_max:388,y_min:-373,y_max:445,ha:818,o:"m 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z"},accidentalBuyukMucennebFlat:{x_min:2,x_max:287,y_min:-248,y_max:432,ha:680,o:"m 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z"},accidentalBuyukMucennebSharp:{x_min:-1,x_max:467,y_min:-460,y_max:350,ha:810,o:"m 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z"},accidentalBakiyeFlat:{x_min:2,x_max:287,y_min:-236,y_max:444,ha:680,o:"m 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z"},accidentalKomaSharp:{x_min:0,x_max:300,y_min:-338,y_max:351,ha:689,o:"m 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:359,y_min:-420,y_max:343,ha:763,o:"m 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z"},accidentalKoron:{x_min:0,x_max:303,y_min:-462,y_max:180,ha:642,o:"m 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z"},accidentalSori:{x_min:0,x_max:434,y_min:-295,y_max:325,ha:620,o:"m 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z"},articAccentAbove:{x_min:0,x_max:425,y_min:0,y_max:326,ha:326,o:"m 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z"},articAccentBelow:{x_min:0,x_max:425,y_min:-326,y_max:0,ha:326,o:"m 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z"},articTenutoAbove:{x_min:0,x_max:471,y_min:0,y_max:56,ha:56,o:"m 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z"},articTenutoBelow:{x_min:0,x_max:471,y_min:-59,y_max:-3,ha:56,o:"m 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z"},articStaccatoAbove:{x_min:1,x_max:112,y_min:0,y_max:156,ha:156,o:"m 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z"},articStaccatoBelow:{x_min:1,x_max:112,y_min:-156,y_max:0,ha:156,o:"m 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z"},articStaccatissimoAbove:{x_min:0,x_max:139,y_min:0,y_max:411,ha:411,o:"m 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z"},articStaccatissimoBelow:{x_min:0,x_max:139,y_min:-411,y_max:0,ha:411,o:"m 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z"},articMarcatoAbove:{x_min:0,x_max:396,y_min:0,y_max:328,ha:328,o:"m 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z"},articMarcatoBelow:{x_min:0,x_max:396,y_min:-328,y_max:0,ha:328,o:"m 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z"},fermataAbove:{x_min:0,x_max:472,y_min:2,y_max:454,ha:452,o:"m 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z"},fermataBelow:{x_min:0,x_max:519,y_min:-430,y_max:-1,ha:429,o:"m 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z"},fermataLongAbove:{x_min:0,x_max:591,y_min:-6,y_max:337,ha:343,o:"m 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z"},fermataLongBelow:{x_min:0,x_max:602,y_min:-335,y_max:7,ha:342,o:"m 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z"},fermataVeryLongAbove:{x_min:0,x_max:715,y_min:-14,y_max:437,ha:451,o:"m 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z"},fermataVeryLongBelow:{x_min:0,x_max:686,y_min:-427,y_max:30,ha:457,o:"m 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z"},fermataVeryShortAbove:{x_min:0,x_max:711,y_min:-31,y_max:496,ha:527,o:"m 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z"},fermataVeryShortBelow:{x_min:0,x_max:697,y_min:-475,y_max:13,ha:488,o:"m 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z"},fermataShortAbove:{x_min:0,x_max:545,y_min:-18,y_max:348,ha:366,o:"m 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z"},fermataShortBelow:{x_min:0,x_max:565,y_min:-335,y_max:10,ha:345,o:"m 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z"},breathMarkComma:{x_min:0,x_max:148,y_min:0,y_max:275,ha:275,o:"m 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z"},breathMarkUpbow:{x_min:0,x_max:254,y_min:0,y_max:595,ha:595,o:"m 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z"},caesura:{x_min:0,x_max:566,y_min:0,y_max:562,ha:563,o:"m 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z"},caesuraCurved:{x_min:0,x_max:386,y_min:-10,y_max:584,ha:594,o:"m 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z"},restMaxima:{x_min:0,x_max:366,y_min:-255,y_max:255,ha:510,o:"m 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z"},restDoubleWhole:{x_min:0,x_max:122,y_min:0,y_max:249,ha:249,o:"m 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z"},restWhole:{x_min:1,x_max:500,y_min:-120,y_max:14,ha:134,o:"m 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z"},restWholeLegerLine:{x_min:-197,x_max:685,y_min:-157,y_max:29,ha:186,o:"m 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z"},restHalf:{x_min:0,x_max:518,y_min:0,y_max:162,ha:162,o:"m 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z"},restHalfLegerLine:{x_min:-120,x_max:448,y_min:-20,y_max:143,ha:163,o:"m 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z"},restQuarter:{x_min:0,x_max:263,y_min:-415,y_max:415,ha:830,o:"m 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z"},rest8th:{x_min:0,x_max:289,y_min:-260,y_max:261,ha:521,o:"m 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z"},rest16th:{x_min:0,x_max:333,y_min:-328,y_max:244,ha:572,o:"m 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z"},rest32nd:{x_min:0,x_max:347,y_min:-498,y_max:483,ha:981,o:"m 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z"},rest64th:{x_min:0,x_max:428,y_min:-720,y_max:474,ha:1194,o:"m 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z"},rest128th:{x_min:1,x_max:491,y_min:-711,y_max:719,ha:1430,o:"m 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z"},dynamicPiano:{x_min:-49,x_max:327,y_min:-142,y_max:515,ha:657,o:"m -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z"},dynamicMezzo:{x_min:-18,x_max:559,y_min:-50,y_max:365,ha:415,o:"m 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z"},dynamicForte:{x_min:-144,x_max:311,y_min:-115,y_max:504,ha:619,o:"m -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z"},dynamicRinforzando:{x_min:-75,x_max:322,y_min:-90,y_max:325,ha:415,o:"m 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z"},dynamicSforzando:{x_min:0,x_max:296,y_min:0,y_max:379,ha:379,o:"m 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z"},dynamicZ:{x_min:-43,x_max:331,y_min:0,y_max:328,ha:328,o:"m -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z"},ornamentTrill:{x_min:1,x_max:551,y_min:-18,y_max:539,ha:557,o:"m 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z"},ornamentTurn:{x_min:0,x_max:574,y_min:0,y_max:312,ha:312,o:"m 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z"},ornamentTurnSlash:{x_min:0,x_max:574,y_min:-106,y_max:405,ha:511,o:"m 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z"},ornamentMordent:{x_min:0,x_max:700,y_min:0,y_max:497,ha:497,o:"m 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z"},ornamentShortTrill:{x_min:0,x_max:747,y_min:0,y_max:243,ha:243,o:"m 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z"},ornamentTremblement:{x_min:0,x_max:982,y_min:0,y_max:224,ha:224,o:"m 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:1066,y_min:-50,y_max:533,ha:583,o:"m 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:0,x_max:1088,y_min:-380,y_max:252,ha:632,o:"m 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:1185,y_min:-380,y_max:465,ha:845,o:"m 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:1003,y_min:-20,y_max:521,ha:541,o:"m 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:1246,y_min:-30,y_max:296,ha:326,o:"m 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:0,x_max:1226,y_min:-237,y_max:436,ha:673,o:"m 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:833,y_min:-309,y_max:319,ha:628,o:"m 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z"},brassScoop:{x_min:0,x_max:312,y_min:-390,y_max:28,ha:418,o:"m 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z"},brassDoitMedium:{x_min:0,x_max:476,y_min:-50,y_max:333,ha:383,o:"m 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z"},brassFallLipShort:{x_min:0,x_max:298,y_min:-344,y_max:65,ha:409,o:"m 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z"},brassLiftMedium:{x_min:0,x_max:807,y_min:0,y_max:838,ha:838,o:"m 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z"},brassFallRoughMedium:{x_min:0,x_max:791,y_min:0,y_max:819,ha:819,o:"m 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z"},brassBend:{x_min:0,x_max:381,y_min:0,y_max:367,ha:367,o:"m 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z"},brassMuteClosed:{x_min:0,x_max:274,y_min:0,y_max:260,ha:260,o:"m 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z"},brassMuteOpen:{x_min:1,x_max:313,y_min:0,y_max:309,ha:309,o:"m 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z"},brassFlip:{x_min:0,x_max:402,y_min:0,y_max:361,ha:361,o:"m 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z"},brassJazzTurn:{x_min:0,x_max:646,y_min:0,y_max:212,ha:212,o:"m 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z"},brassSmear:{x_min:0,x_max:334,y_min:0,y_max:151,ha:151,o:"m 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z"},stringsDownBow:{x_min:0,x_max:306,y_min:0,y_max:366,ha:366,o:"m 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z"},stringsUpBow:{x_min:0,x_max:219,y_min:0,y_max:489,ha:489,o:"m 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z"},stringsHarmonic:{x_min:0,x_max:191,y_min:0,y_max:202,ha:202,o:"m 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:201,y_min:0,y_max:325,ha:325,o:"m 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:211,y_min:0,y_max:307,ha:307,o:"m 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z"},pluckedLeftHandPizzicato:{x_min:0,x_max:271,y_min:0,y_max:284,ha:284,o:"m 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z"},keyboardPedalPed:{x_min:0,x_max:944,y_min:-13,y_max:550,ha:563,o:"m 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z"},keyboardPedalUp:{x_min:0,x_max:437,y_min:0,y_max:461,ha:461,o:"m 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z"},pictChokeCymbal:{x_min:1,x_max:147,y_min:0,y_max:242,ha:242,o:"m 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z"},wiggleArpeggiatoUp:{x_min:-22,x_max:300,y_min:0,y_max:176,ha:176,o:"m 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z"},arpeggiatoUp:{x_min:0,x_max:262,y_min:0,y_max:1459,ha:1459,o:"m 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z"},arpeggiatoDown:{x_min:0,x_max:218,y_min:0,y_max:1440,ha:1440,o:"m 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z"},repeat1Bar:{x_min:0,x_max:599,y_min:-250,y_max:175,ha:425,o:"m 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z"},repeat2Bars:{x_min:0,x_max:775,y_min:-247,y_max:363,ha:610,o:"m 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z"},repeat4Bars:{x_min:0,x_max:1374,y_min:-304,y_max:304,ha:608,o:"m 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z"},repeatBarSlash:{x_min:0,x_max:630,y_min:-225,y_max:265,ha:490,o:"m 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z"},csymDiminished:{x_min:0,x_max:506,y_min:0,y_max:500,ha:500,o:"m 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z"},csymHalfDiminished:{x_min:-32,x_max:496,y_min:-33,y_max:492,ha:525,o:"m -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z"},csymAugmented:{x_min:0,x_max:530,y_min:0,y_max:539,ha:539,o:"m 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z"},csymMajorSeventh:{x_min:0,x_max:593,y_min:0,y_max:569,ha:569,o:"m 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z"},csymMinor:{x_min:0,x_max:482,y_min:193,y_max:265,ha:72,o:"m 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z"},csymParensLeftTall:{x_min:0,x_max:185,y_min:0,y_max:1034,ha:1034,o:"m 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z"},csymParensRightTall:{x_min:-40,x_max:189,y_min:0,y_max:1058,ha:1058,o:"m 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z"},csymBracketLeftTall:{x_min:0,x_max:328,y_min:2,y_max:807,ha:805,o:"m 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z"},csymBracketRightTall:{x_min:1,x_max:306,y_min:0,y_max:829,ha:829,o:"m 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z"},csymParensLeftVeryTall:{x_min:0,x_max:116,y_min:0,y_max:934,ha:934,o:"m 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z"},csymParensRightVeryTall:{x_min:-20,x_max:111,y_min:0,y_max:1009,ha:1009,o:"m -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z"},csymDiagonalArrangementSlash:{x_min:0,x_max:990,y_min:-27,y_max:1028,ha:1054,o:"m 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:208,y_min:-231,y_max:449,ha:680,o:"m 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:335,y_min:-231,y_max:449,ha:680,o:"m 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z"},accidentalWilsonPlus:{x_min:0,x_max:298,y_min:-218,y_max:218,ha:436,o:"m 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z"},accidentalWilsonMinus:{x_min:0,x_max:284,y_min:-163,y_max:163,ha:326,o:"m 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z"}},fontFamily:"Petaluma",resolution:1e3,generatedOn:"2022-12-18T09:07:50.817Z"},Li={csymDiminished:{leftSideBearing:-95,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:-25,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:0,advanceWidth:155,yOffset:150},csymParensRightTall:{leftSideBearing:40,advanceWidth:189,yOffset:150},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:0,advanceWidth:210,yOffset:250},csymParensRightVeryTall:{leftSideBearing:-100,advanceWidth:111,yOffset:250},csymDiagonalArrangementSlash:{leftSideBearing:-1,advanceWidth:990,yOffset:0},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:100,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:0,advanceWidth:425,yOffset:-422},accidentalFlat:{leftSideBearing:-10,advanceWidth:228,yOffset:-284}};const Wi={spacing:50,glyphs:{" ":{x_min:0,x_max:250,y_min:0,y_max:500,ha:500,leftSideBearing:0,advanceWidth:250},0:{x_min:33,x_max:534,y_min:-13,y_max:751,ha:764,leftSideBearing:33,advanceWidth:570},1:{x_min:48,x_max:235,y_min:-17,y_max:734,ha:751,leftSideBearing:48,advanceWidth:286},2:{x_min:56,x_max:571,y_min:-19,y_max:741,ha:760,leftSideBearing:56,advanceWidth:626},3:{x_min:50,x_max:528,y_min:-7,y_max:731,ha:738,leftSideBearing:50,advanceWidth:589},4:{x_min:38,x_max:564,y_min:-13,y_max:743,ha:756,leftSideBearing:38,advanceWidth:614},5:{x_min:42,x_max:601,y_min:-34,y_max:743,ha:777,leftSideBearing:42,advanceWidth:648},6:{x_min:47,x_max:606,y_min:-16,y_max:743,ha:759,leftSideBearing:47,advanceWidth:667},7:{x_min:47,x_max:567,y_min:5,y_max:739,ha:734,leftSideBearing:0,advanceWidth:615},8:{x_min:40,x_max:541,y_min:-15,y_max:752,ha:767,leftSideBearing:40,advanceWidth:585},9:{x_min:40,x_max:537,y_min:-52,y_max:736,ha:788,leftSideBearing:40,advanceWidth:592},"!":{x_min:49,x_max:180,y_min:-7,y_max:761,ha:768,leftSideBearing:49,advanceWidth:230},'"':{x_min:39,x_max:304,y_min:596,y_max:804,ha:208,leftSideBearing:39,advanceWidth:353},"#":{x_min:33,x_max:599,y_min:-8,y_max:765,ha:773,leftSideBearing:33,advanceWidth:648},$:{x_min:53,x_max:495,y_min:-111,y_max:823,ha:934,leftSideBearing:53,advanceWidth:560},"%":{x_min:35,x_max:656,y_min:-128,y_max:808,ha:936,leftSideBearing:35,advanceWidth:711},"&":{x_min:53,x_max:441,y_min:-3,y_max:753,ha:756,leftSideBearing:53,advanceWidth:500},"'":{x_min:43,x_max:161,y_min:590,y_max:811,ha:221,leftSideBearing:43,advanceWidth:217},"(":{x_min:41,x_max:311,y_min:-36,y_max:845,ha:881,leftSideBearing:41,advanceWidth:308},")":{x_min:-8,x_max:257,y_min:-21,y_max:852,ha:873,leftSideBearing:-8,advanceWidth:280},"*":{x_min:59,x_max:539,y_min:175,y_max:589,ha:414,leftSideBearing:59,advanceWidth:601},"+":{x_min:33,x_max:361,y_min:180,y_max:587,ha:407,leftSideBearing:33,advanceWidth:400},",":{x_min:15,x_max:176,y_min:-129,y_max:92,ha:221,leftSideBearing:15,advanceWidth:205},"-":{x_min:40,x_max:380,y_min:317,y_max:452,ha:135,leftSideBearing:40,advanceWidth:422},".":{x_min:48,x_max:185,y_min:-56,y_max:84,ha:140,leftSideBearing:48,advanceWidth:227},"/":{x_min:-58,x_max:654,y_min:-122,y_max:844,ha:966,leftSideBearing:-58,advanceWidth:626},":":{x_min:65,x_max:225,y_min:97,y_max:536,ha:439,leftSideBearing:65,advanceWidth:302},";":{x_min:13,x_max:295,y_min:-139,y_max:536,ha:675,leftSideBearing:13,advanceWidth:334},"<":{x_min:28,x_max:438,y_min:-1,y_max:607,ha:608,leftSideBearing:28,advanceWidth:475},"=":{x_min:40,x_max:383,y_min:199.9598640852289,y_max:541,ha:341.0401359147711,leftSideBearing:40,advanceWidth:422},">":{x_min:35,x_max:421,y_min:28,y_max:632,ha:604,leftSideBearing:35,advanceWidth:466},"?":{x_min:45,x_max:548,y_min:-17,y_max:767,ha:784,leftSideBearing:45,advanceWidth:592},"@":{x_min:51,x_max:730,y_min:-78,y_max:753,ha:831,leftSideBearing:51,advanceWidth:781},A:{x_min:37,x_max:554,y_min:-4,y_max:746,ha:750,leftSideBearing:37,advanceWidth:617},B:{x_min:37,x_max:532,y_min:3,y_max:783,ha:780,leftSideBearing:37,advanceWidth:579},C:{x_min:37,x_max:583,y_min:-3,y_max:775,ha:778,leftSideBearing:37,advanceWidth:623},D:{x_min:50,x_max:530,y_min:-15,y_max:749,ha:764,leftSideBearing:50,advanceWidth:579},E:{x_min:45,x_max:531,y_min:-1,y_max:743,ha:744,leftSideBearing:45,advanceWidth:585},F:{x_min:45,x_max:459,y_min:23,y_max:727,ha:704,leftSideBearing:45,advanceWidth:510},G:{x_min:31,x_max:577,y_min:-8,y_max:733,ha:741,leftSideBearing:31,advanceWidth:611},H:{x_min:37,x_max:493,y_min:-22,y_max:758,ha:780,leftSideBearing:37,advanceWidth:535},I:{x_min:47,x_max:501,y_min:-3,y_max:731,ha:734,leftSideBearing:47,advanceWidth:541},J:{x_min:33,x_max:531,y_min:-23,y_max:725,ha:748,leftSideBearing:33,advanceWidth:573},K:{x_min:43,x_max:505,y_min:-10,y_max:740,ha:750,leftSideBearing:43,advanceWidth:560},L:{x_min:49,x_max:457,y_min:-2,y_max:746,ha:748,leftSideBearing:49,advanceWidth:510},M:{x_min:35,x_max:699,y_min:1,y_max:744,ha:743,leftSideBearing:35,advanceWidth:743},N:{x_min:34,x_max:533,y_min:-17,y_max:761,ha:778,leftSideBearing:34,advanceWidth:579},O:{x_min:41,x_max:608,y_min:-5,y_max:735,ha:740,leftSideBearing:41,advanceWidth:667},P:{x_min:53,x_max:451,y_min:-18,y_max:735,ha:753,leftSideBearing:53,advanceWidth:497},Q:{x_min:40,x_max:599,y_min:-67,y_max:744,ha:811,leftSideBearing:40,advanceWidth:648},R:{x_min:39,x_max:487,y_min:16,y_max:735,ha:719,leftSideBearing:39,advanceWidth:535},S:{x_min:35,x_max:552,y_min:-47,y_max:708,ha:755,leftSideBearing:35,advanceWidth:604},T:{x_min:26,x_max:656,y_min:-13,y_max:718,ha:731,leftSideBearing:26,advanceWidth:705},U:{x_min:41,x_max:518,y_min:-20,y_max:748,ha:768,leftSideBearing:41,advanceWidth:567},V:{x_min:47,x_max:509,y_min:-26,y_max:744,ha:770,leftSideBearing:47,advanceWidth:567},W:{x_min:44,x_max:789,y_min:-35,y_max:720,ha:755,leftSideBearing:44,advanceWidth:833},X:{x_min:63,x_max:635,y_min:-10,y_max:745,ha:755,leftSideBearing:63,advanceWidth:680},Y:{x_min:43,x_max:503,y_min:-21,y_max:734,ha:755,leftSideBearing:43,advanceWidth:541},Z:{x_min:42,x_max:584,y_min:-10,y_max:739,ha:749,leftSideBearing:42,advanceWidth:629},"[":{x_min:46,x_max:346,y_min:-150,y_max:884,ha:1034,leftSideBearing:46,advanceWidth:291},"\\":{x_min:20,x_max:616,y_min:-100,y_max:797,ha:897,leftSideBearing:20,advanceWidth:645},"]":{x_min:-76,x_max:226,y_min:-150,y_max:881,ha:1031,leftSideBearing:-76,advanceWidth:297},"^":{x_min:43,x_max:437,y_min:517,y_max:812,ha:295,leftSideBearing:43,advanceWidth:478},_:{x_min:29,x_max:563,y_min:-110,y_max:-1,ha:109,leftSideBearing:29,advanceWidth:598},"`":{x_min:54,x_max:321,y_min:540,y_max:747,ha:207,leftSideBearing:54,advanceWidth:368},a:{x_min:20,x_max:447,y_min:-17,y_max:495,ha:512,leftSideBearing:20,advanceWidth:494},b:{x_min:37,x_max:466,y_min:-27,y_max:770,ha:797,leftSideBearing:37,advanceWidth:510},c:{x_min:35,x_max:456,y_min:-9,y_max:507,ha:516,leftSideBearing:35,advanceWidth:460},d:{x_min:45,x_max:520,y_min:-15,y_max:764,ha:779,leftSideBearing:45,advanceWidth:560},e:{x_min:33,x_max:370,y_min:-5,y_max:501,ha:506,leftSideBearing:33,advanceWidth:397},f:{x_min:35,x_max:411,y_min:-13,y_max:695,ha:708,leftSideBearing:35,advanceWidth:453},g:{x_min:33,x_max:551,y_min:-257,y_max:505,ha:762,leftSideBearing:33,advanceWidth:611},h:{x_min:32,x_max:458,y_min:-29,y_max:743,ha:772,leftSideBearing:32,advanceWidth:491},i:{x_min:45,x_max:167,y_min:-13,y_max:631,ha:644,leftSideBearing:45,advanceWidth:220},j:{x_min:-127,x_max:261,y_min:-231,y_max:601,ha:832,leftSideBearing:-127,advanceWidth:308},k:{x_min:39,x_max:443,y_min:-3,y_max:700,ha:703,leftSideBearing:39,advanceWidth:497},l:{x_min:58,x_max:168,y_min:-8,y_max:686,ha:694,leftSideBearing:58,advanceWidth:227},m:{x_min:39,x_max:688,y_min:-14,y_max:501,ha:515,leftSideBearing:39,advanceWidth:718},n:{x_min:45,x_max:491,y_min:-32,y_max:512,ha:544,leftSideBearing:45,advanceWidth:541},o:{x_min:41,x_max:424,y_min:-12,y_max:493,ha:505,leftSideBearing:41,advanceWidth:447},p:{x_min:25,x_max:529,y_min:-260,y_max:500,ha:760,leftSideBearing:25,advanceWidth:573},q:{x_min:53,x_max:603,y_min:-235,y_max:514,ha:749,leftSideBearing:53,advanceWidth:623},r:{x_min:32,x_max:407,y_min:-7,y_max:492,ha:499,leftSideBearing:32,advanceWidth:460},s:{x_min:49,x_max:416,y_min:-12,y_max:519,ha:531,leftSideBearing:49,advanceWidth:460},t:{x_min:32,x_max:442,y_min:-5,y_max:684,ha:689,leftSideBearing:32,advanceWidth:469},u:{x_min:41,x_max:487,y_min:-5,y_max:507,ha:512,leftSideBearing:41,advanceWidth:510},v:{x_min:16,x_max:441,y_min:-20,y_max:542,ha:562,leftSideBearing:16,advanceWidth:456},w:{x_min:39,x_max:639,y_min:-22,y_max:505,ha:527,leftSideBearing:39,advanceWidth:661},x:{x_min:15,x_max:505,y_min:-39,y_max:539,ha:578,leftSideBearing:15,advanceWidth:541},y:{x_min:-98,x_max:501,y_min:-242,y_max:511,ha:753,leftSideBearing:-98,advanceWidth:548},z:{x_min:27,x_max:479,y_min:-3,y_max:494,ha:497,leftSideBearing:27,advanceWidth:494},"{":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"|":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"}":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"~":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308}},fontFamily:"PetalumaScript",resolution:1e3,generatedOn:"2020-06-14T18:33:25.407Z"},Ui={spacing:50,glyphs:{" ":{x_min:0,x_max:509,y_min:0,y_max:2e3,ha:2e3,leftSideBearing:0,advanceWidth:509},0:{x_min:121,x_max:1048,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1168},1:{x_min:117,x_max:767,y_min:0,y_max:1456,ha:1456,leftSideBearing:117,advanceWidth:844},2:{x_min:75.8474576645637,x_max:1040,y_min:0,y_max:1477,ha:1477,leftSideBearing:75,advanceWidth:1131},3:{x_min:74.85365853658536,x_max:994,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1106},4:{x_min:63,x_max:1114,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1187},5:{x_min:96.8448275474953,x_max:982,y_min:-21,y_max:1456,ha:1477,leftSideBearing:96,advanceWidth:1081},6:{x_min:121,x_max:1067,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1144},7:{x_min:76,x_max:1060,y_min:0,y_max:1456,ha:1456,leftSideBearing:-30,advanceWidth:1128},8:{x_min:92,x_max:1039,y_min:-21,y_max:1477,ha:1498,leftSideBearing:92,advanceWidth:1131},9:{x_min:84,x_max:1026,y_min:-21,y_max:1477,ha:1498,leftSideBearing:84,advanceWidth:1154},"!":{x_min:143,x_max:340,y_min:0,y_max:1456,ha:1456,leftSideBearing:143,advanceWidth:483},'"':{x_min:166,x_max:634,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:770},"#":{x_min:63,x_max:1179,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1246},$:{x_min:81.92156915727656,x_max:1012,y_min:-208,y_max:1693,ha:1901,leftSideBearing:81,advanceWidth:1110},"%":{x_min:77,x_max:1384,y_min:-21,y_max:1477,ha:1498,leftSideBearing:77,advanceWidth:1460},"&":{x_min:74,x_max:1242,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1289},"'":{x_min:166,x_max:324,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:460},"(":{x_min:114,x_max:650,y_min:-463,y_max:1636,ha:2099,leftSideBearing:114,advanceWidth:662},")":{x_min:11,x_max:547,y_min:-463,y_max:1636,ha:2099,leftSideBearing:11,advanceWidth:654},"*":{x_min:66,x_max:893,y_min:607,y_max:1456,ha:849,leftSideBearing:66,advanceWidth:958},"+":{x_min:73,x_max:1071,y_min:146,y_max:1206,ha:1060,leftSideBearing:73,advanceWidth:1145},",":{x_min:23,x_max:315,y_min:-311,y_max:221,ha:532,leftSideBearing:23,advanceWidth:404},"-":{x_min:154,x_max:643,y_min:538,y_max:692,ha:154,leftSideBearing:154,advanceWidth:797},".":{x_min:145,x_max:342,y_min:0,y_max:202,ha:202,leftSideBearing:145,advanceWidth:493},"/":{x_min:0,x_max:774,y_min:-125,y_max:1456,ha:1581,leftSideBearing:0,advanceWidth:824},":":{x_min:145,x_max:342,y_min:0,y_max:1082,ha:1082,leftSideBearing:145,advanceWidth:419},";":{x_min:53,x_max:345,y_min:-311,y_max:1082,ha:1393,leftSideBearing:53,advanceWidth:424},"<":{x_min:76,x_max:892,y_min:107,y_max:1013,ha:906,leftSideBearing:76,advanceWidth:1017},"=":{x_min:147,x_max:981,y_min:407,y_max:987,ha:580,leftSideBearing:147,advanceWidth:1127},">":{x_min:125,x_max:980,y_min:87,y_max:993,ha:906,leftSideBearing:125,advanceWidth:1060},"?":{x_min:65.92660602419838,x_max:890,y_min:0,y_max:1477,ha:1477,leftSideBearing:65,advanceWidth:953},"@":{x_min:84.3592218305664,x_max:1705.2346925277395,y_min:-453,y_max:1431,ha:1884,leftSideBearing:84,advanceWidth:1821},A:{x_min:70,x_max:1463,y_min:0,y_max:1456,ha:1456,leftSideBearing:70,advanceWidth:1533},B:{x_min:81,x_max:1253,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1322},C:{x_min:80,x_max:1174,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1290},D:{x_min:81,x_max:1291,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1356},E:{x_min:81,x_max:1190,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1306},F:{x_min:81,x_max:1176,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1256},G:{x_min:80,x_max:1226,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1346},H:{x_min:81,x_max:1497,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1578},I:{x_min:81,x_max:604,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:685},J:{x_min:60,x_max:1100,y_min:-21,y_max:1456,ha:1477,leftSideBearing:60,advanceWidth:1169},K:{x_min:81,x_max:1427,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1501},L:{x_min:81,x_max:1130,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1210},M:{x_min:94,x_max:1888,y_min:0,y_max:1456,ha:1456,leftSideBearing:94,advanceWidth:1982},N:{x_min:83,x_max:1509,y_min:0,y_max:1456,ha:1456,leftSideBearing:83,advanceWidth:1592},O:{x_min:70,x_max:1281,y_min:-21,y_max:1477,ha:1498,leftSideBearing:70,advanceWidth:1351},P:{x_min:81,x_max:1242,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1297},Q:{x_min:70,x_max:1348,y_min:-245,y_max:1477,ha:1722,leftSideBearing:70,advanceWidth:1376},R:{x_min:81,x_max:1285,y_min:0,y_max:1455,ha:1455,leftSideBearing:81,advanceWidth:1385},S:{x_min:115,x_max:1116,y_min:-21,y_max:1477,ha:1498,leftSideBearing:115,advanceWidth:1206},T:{x_min:96,x_max:1306,y_min:0,y_max:1456,ha:1456,leftSideBearing:96,advanceWidth:1406},U:{x_min:70,x_max:1452,y_min:-21,y_max:1456,ha:1477,leftSideBearing:70,advanceWidth:1522},V:{x_min:65,x_max:1443,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1508},W:{x_min:72,x_max:2057,y_min:0,y_max:1456,ha:1456,leftSideBearing:72,advanceWidth:2129},X:{x_min:80,x_max:1449,y_min:0,y_max:1456,ha:1456,leftSideBearing:80,advanceWidth:1529},Y:{x_min:65,x_max:1396,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1461},Z:{x_min:90,x_max:1107,y_min:0,y_max:1456,ha:1456,leftSideBearing:90,advanceWidth:1197},"[":{x_min:157,x_max:541,y_min:-312,y_max:1664,ha:1976,leftSideBearing:157,advanceWidth:573},"\\":{x_min:36,x_max:830,y_min:-125,y_max:1456,ha:1581,leftSideBearing:36,advanceWidth:841},"]":{x_min:23,x_max:408,y_min:-312,y_max:1664,ha:1976,leftSideBearing:23,advanceWidth:552},"^":{x_min:71,x_max:802,y_min:729,y_max:1456,ha:727,leftSideBearing:71,advanceWidth:864},_:{x_min:119,x_max:1041,y_min:-154,y_max:0,ha:154,leftSideBearing:119,advanceWidth:1168},"`":{x_min:40,x_max:456,y_min:1288,y_max:1560,ha:272,leftSideBearing:40,advanceWidth:496},a:{x_min:79,x_max:1053,y_min:-21,y_max:1102,ha:1123,leftSideBearing:79,advanceWidth:1132},b:{x_min:-16,x_max:1071,y_min:-21,y_max:1560,ha:1581,leftSideBearing:-16,advanceWidth:1145},c:{x_min:78,x_max:988,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1067},d:{x_min:78,x_max:1156,y_min:-21,y_max:1560,ha:1581,leftSideBearing:78,advanceWidth:1218},e:{x_min:74,x_max:980,y_min:-21,y_max:1102,ha:1123,leftSideBearing:74,advanceWidth:1059},f:{x_min:64,x_max:731,y_min:0,y_max:1581,ha:1581,leftSideBearing:64,advanceWidth:725},g:{x_min:78,x_max:1133,y_min:-437,y_max:1102,ha:1539,leftSideBearing:78,advanceWidth:1157},h:{x_min:49,x_max:1255,y_min:0,y_max:1560,ha:1560,leftSideBearing:49,advanceWidth:1315},i:{x_min:67,x_max:590,y_min:0,y_max:1560,ha:1560,leftSideBearing:67,advanceWidth:652},j:{x_min:-56,x_max:381,y_min:-437,y_max:1560,ha:1997,leftSideBearing:-56,advanceWidth:525},k:{x_min:64,x_max:1248,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:1287},l:{x_min:64,x_max:587,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:653},m:{x_min:74,x_max:1905,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1977},n:{x_min:74,x_max:1278,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1343},o:{x_min:78,x_max:1046,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1124},p:{x_min:34,x_max:1119,y_min:-416,y_max:1102,ha:1518,leftSideBearing:34,advanceWidth:1197},q:{x_min:78,x_max:1135,y_min:-416,y_max:1102,ha:1518,leftSideBearing:78,advanceWidth:1139},r:{x_min:72,x_max:808,y_min:0,y_max:1102,ha:1102,leftSideBearing:72,advanceWidth:854},s:{x_min:104,x_max:933,y_min:-21,y_max:1102,ha:1123,leftSideBearing:104,advanceWidth:1022},t:{x_min:24,x_max:678,y_min:-17,y_max:1343,ha:1360,leftSideBearing:24,advanceWidth:730},u:{x_min:52,x_max:1181,y_min:-21,y_max:1082,ha:1103,leftSideBearing:52,advanceWidth:1245},v:{x_min:26,x_max:1176,y_min:0,y_max:1082,ha:1082,leftSideBearing:26,advanceWidth:1206},w:{x_min:52,x_max:1777,y_min:0,y_max:1082,ha:1082,leftSideBearing:52,advanceWidth:1823},x:{x_min:42,x_max:1163,y_min:0,y_max:1082,ha:1082,leftSideBearing:42,advanceWidth:1203},y:{x_min:24,x_max:1172,y_min:-437,y_max:1082,ha:1519,leftSideBearing:24,advanceWidth:1192},z:{x_min:88,x_max:960,y_min:0,y_max:1082,ha:1082,leftSideBearing:88,advanceWidth:1032},"{":{x_min:63,x_max:671,y_min:-364,y_max:1597,ha:1961,leftSideBearing:63,advanceWidth:701},"|":{x_min:150,x_max:307,y_min:-270,y_max:1456,ha:1726,leftSideBearing:150,advanceWidth:451},"}":{x_min:27,x_max:635,y_min:-364,y_max:1597,ha:1961,leftSideBearing:27,advanceWidth:701},"~":{x_min:121,x_max:1257,y_min:401,y_max:803,ha:402,leftSideBearing:121,advanceWidth:1386}},fontFamily:"Roboto Slab",resolution:2048,generatedOn:"2020-06-15T19:12:58.120Z"},Ii={glyphs:{0:{x_min:86,x_max:1038,y_min:-25,y_max:1472,ha:1497,leftSideBearing:86,advanceWidth:1139},1:{x_min:162,x_max:806,y_min:0,y_max:1472,ha:1472,leftSideBearing:162,advanceWidth:1139},2:{x_min:51,x_max:1036,y_min:0,y_max:1472,ha:1472,leftSideBearing:51,advanceWidth:1139},3:{x_min:77,x_max:1051,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},4:{x_min:38,x_max:1092,y_min:0,y_max:1472,ha:1472,leftSideBearing:38,advanceWidth:1139},5:{x_min:91,x_max:1077,y_min:-25,y_max:1446,ha:1471,leftSideBearing:91,advanceWidth:1139},6:{x_min:87,x_max:1066,y_min:-25,y_max:1472,ha:1497,leftSideBearing:87,advanceWidth:1139},7:{x_min:87,x_max:1048,y_min:0,y_max:1446,ha:1446,leftSideBearing:87,advanceWidth:1139},8:{x_min:83,x_max:1047,y_min:-26,y_max:1472,ha:1498,leftSideBearing:83,advanceWidth:1139},9:{x_min:65,x_max:1044,y_min:-26,y_max:1472,ha:1498,leftSideBearing:65,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:184,x_max:488,y_min:0,y_max:1466,ha:1466,leftSideBearing:184,advanceWidth:682},'"':{x_min:112,x_max:869,y_min:945,y_max:1466,ha:521,leftSideBearing:112,advanceWidth:971},"#":{x_min:18,x_max:1115,y_min:-25,y_max:1491,ha:1516,leftSideBearing:18,advanceWidth:1139},$:{x_min:70,x_max:1048,y_min:-205,y_max:1584,ha:1789,leftSideBearing:70,advanceWidth:1139},"%":{x_min:89,x_max:1725,y_min:-59,y_max:1491,ha:1550,leftSideBearing:89,advanceWidth:1821},"&":{x_min:90,x_max:1446,y_min:-38,y_max:1491,ha:1529,leftSideBearing:90,advanceWidth:1479},"'":{x_min:92,x_max:398,y_min:945,y_max:1466,ha:521,leftSideBearing:92,advanceWidth:487},"(":{x_min:107,x_max:616,y_min:-431,y_max:1491,ha:1922,leftSideBearing:107,advanceWidth:682},")":{x_min:67,x_max:576,y_min:-431,y_max:1491,ha:1922,leftSideBearing:67,advanceWidth:682},"*":{x_min:28,x_max:753,y_min:792,y_max:1491,ha:699,leftSideBearing:28,advanceWidth:797},"+":{x_min:85,x_max:1110,y_min:211,y_max:1236,ha:1025,leftSideBearing:85,advanceWidth:1196},",":{x_min:117,x_max:421,y_min:-327,y_max:281,ha:608,leftSideBearing:117,advanceWidth:569},"-":{x_min:115,x_max:667,y_min:391,y_max:672,ha:281,leftSideBearing:115,advanceWidth:682},".":{x_min:147,x_max:428,y_min:0,y_max:281,ha:281,leftSideBearing:147,advanceWidth:569},"/":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},":":{x_min:201,x_max:482,y_min:0,y_max:1062,ha:1062,leftSideBearing:201,advanceWidth:682},";":{x_min:170,x_max:474,y_min:-327,y_max:1062,ha:1389,leftSideBearing:170,advanceWidth:682},"<":{x_min:95,x_max:1100,y_min:167,y_max:1281,ha:1114,leftSideBearing:95,advanceWidth:1196},"=":{x_min:85,x_max:1110,y_min:372,y_max:1074,ha:702,leftSideBearing:85,advanceWidth:1196},">":{x_min:95,x_max:1101,y_min:166,y_max:1279,ha:1113,leftSideBearing:95,advanceWidth:1196},"?":{x_min:106,x_max:1158,y_min:0,y_max:1481,ha:1481,leftSideBearing:106,advanceWidth:1251},"@":{x_min:61,x_max:1990,y_min:-431,y_max:1492,ha:1923,leftSideBearing:61,advanceWidth:1997},A:{x_min:0,x_max:1471,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1479},B:{x_min:150,x_max:1378,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},C:{x_min:97,x_max:1374,y_min:-25,y_max:1491,ha:1516,leftSideBearing:97,advanceWidth:1479},D:{x_min:148,x_max:1377,y_min:0,y_max:1466,ha:1466,leftSideBearing:148,advanceWidth:1479},E:{x_min:149,x_max:1264,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},F:{x_min:151,x_max:1156,y_min:0,y_max:1466,ha:1466,leftSideBearing:151,advanceWidth:1251},G:{x_min:98,x_max:1469,y_min:-25,y_max:1491,ha:1516,leftSideBearing:98,advanceWidth:1593},H:{x_min:150,x_max:1322,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},I:{x_min:140,x_max:436,y_min:0,y_max:1466,ha:1466,leftSideBearing:140,advanceWidth:569},J:{x_min:35,x_max:973,y_min:-25,y_max:1466,ha:1491,leftSideBearing:35,advanceWidth:1139},K:{x_min:153,x_max:1475,y_min:0,y_max:1466,ha:1466,leftSideBearing:153,advanceWidth:1479},L:{x_min:157,x_max:1189,y_min:0,y_max:1454,ha:1454,leftSideBearing:157,advanceWidth:1251},M:{x_min:145,x_max:1561,y_min:0,y_max:1466,ha:1466,leftSideBearing:145,advanceWidth:1706},N:{x_min:152,x_max:1315,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1479},O:{x_min:89,x_max:1511,y_min:-25,y_max:1491,ha:1516,leftSideBearing:89,advanceWidth:1593},P:{x_min:149,x_max:1272,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},Q:{x_min:89,x_max:1566,y_min:-147,y_max:1491,ha:1638,leftSideBearing:89,advanceWidth:1593},R:{x_min:150,x_max:1468,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},S:{x_min:74,x_max:1266,y_min:-26,y_max:1491,ha:1517,leftSideBearing:74,advanceWidth:1366},T:{x_min:44,x_max:1209,y_min:0,y_max:1466,ha:1466,leftSideBearing:44,advanceWidth:1251},U:{x_min:147,x_max:1316,y_min:-25,y_max:1466,ha:1491,leftSideBearing:147,advanceWidth:1479},V:{x_min:-1,x_max:1364,y_min:0,y_max:1466,ha:1466,leftSideBearing:-1,advanceWidth:1366},W:{x_min:7,x_max:1931,y_min:0,y_max:1466,ha:1466,leftSideBearing:7,advanceWidth:1933},X:{x_min:0,x_max:1363,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1366},Y:{x_min:-3,x_max:1368,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},Z:{x_min:22,x_max:1213,y_min:0,y_max:1466,ha:1466,leftSideBearing:22,advanceWidth:1251},"[":{x_min:146,x_max:644,y_min:-413,y_max:1466,ha:1879,leftSideBearing:146,advanceWidth:682},"\\":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},"]":{x_min:38,x_max:536,y_min:-413,y_max:1466,ha:1879,leftSideBearing:38,advanceWidth:682},"^":{x_min:115,x_max:1080,y_min:692,y_max:1491,ha:799,leftSideBearing:115,advanceWidth:1196},_:{x_min:-19,x_max:1149,y_min:-405,y_max:-223,ha:182,leftSideBearing:-19,advanceWidth:1139},"`":{x_min:42,x_max:495,y_min:1192,y_max:1491,ha:299,leftSideBearing:42,advanceWidth:682},a:{x_min:73,x_max:1070,y_min:-24,y_max:1086,ha:1110,leftSideBearing:73,advanceWidth:1139},b:{x_min:135,x_max:1172,y_min:-24,y_max:1466,ha:1490,leftSideBearing:135,advanceWidth:1251},c:{x_min:85,x_max:1087,y_min:-24,y_max:1086,ha:1110,leftSideBearing:85,advanceWidth:1139},d:{x_min:84,x_max:1121,y_min:-24,y_max:1466,ha:1490,leftSideBearing:84,advanceWidth:1251},e:{x_min:65,x_max:1057.2517482517483,y_min:-24,y_max:1086,ha:1110,leftSideBearing:65,advanceWidth:1139},f:{x_min:24,x_max:742,y_min:0,y_max:1491,ha:1491,leftSideBearing:24,advanceWidth:682},g:{x_min:84,x_max:1120,y_min:-431,y_max:1086,ha:1517,leftSideBearing:84,advanceWidth:1251},h:{x_min:146,x_max:1113,y_min:0,y_max:1466,ha:1466,leftSideBearing:146,advanceWidth:1251},i:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},j:{x_min:-94,x_max:422,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:569},k:{x_min:137,x_max:1119,y_min:0,y_max:1466,ha:1466,leftSideBearing:137,advanceWidth:1139},l:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},m:{x_min:126,x_max:1688,y_min:0,y_max:1086,ha:1086,leftSideBearing:126,advanceWidth:1821},n:{x_min:145,x_max:1113,y_min:0,y_max:1086,ha:1086,leftSideBearing:145,advanceWidth:1251},o:{x_min:82,x_max:1178,y_min:-24,y_max:1086,ha:1110,leftSideBearing:82,advanceWidth:1251},p:{x_min:139,x_max:1175,y_min:-404,y_max:1086,ha:1490,leftSideBearing:139,advanceWidth:1251},q:{x_min:91,x_max:1122,y_min:-404,y_max:1086,ha:1490,leftSideBearing:91,advanceWidth:1251},r:{x_min:135,x_max:823,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:797},s:{x_min:48,x_max:1040,y_min:-24,y_max:1086,ha:1110,leftSideBearing:48,advanceWidth:1139},t:{x_min:31,x_max:657,y_min:-24,y_max:1437,ha:1461,leftSideBearing:31,advanceWidth:682},u:{x_min:141,x_max:1107,y_min:-24,y_max:1062,ha:1086,leftSideBearing:141,advanceWidth:1251},v:{x_min:11,x_max:1114,y_min:0,y_max:1062,ha:1062,leftSideBearing:11,advanceWidth:1139},w:{x_min:9,x_max:1592,y_min:0,y_max:1062,ha:1062,leftSideBearing:9,advanceWidth:1593},x:{x_min:12,x_max:1120,y_min:0,y_max:1062,ha:1062,leftSideBearing:12,advanceWidth:1139},y:{x_min:14,x_max:1106,y_min:-431,y_max:1062,ha:1493,leftSideBearing:14,advanceWidth:1139},z:{x_min:34,x_max:982,y_min:0,y_max:1062,ha:1062,leftSideBearing:34,advanceWidth:1024},"{":{x_min:60,x_max:744,y_min:-431,y_max:1491,ha:1922,leftSideBearing:60,advanceWidth:797},"|":{x_min:176,x_max:399,y_min:-431,y_max:1491,ha:1922,leftSideBearing:176,advanceWidth:573},"}":{x_min:45,x_max:729,y_min:-431,y_max:1491,ha:1922,leftSideBearing:45,advanceWidth:797},"~":{x_min:67,x_max:1129,y_min:519,y_max:924,ha:405,leftSideBearing:67,advanceWidth:1196}},fontFamily:"Arial",resolution:2048,generatedOn:"2022-11-04T20:05:21.000Z"},Gi={smufl:!1,name:"SANS",spacing:50,Description:"Built-in sans-serif font",bold:!0,italic:!0,monospaced:!1,serifs:!1,glyphs:{0:{x_min:85,x_max:1041,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139},1:{x_min:223,x_max:763,y_min:0,y_max:1472,ha:1472,leftSideBearing:223,advanceWidth:1139},2:{x_min:61.840001123045234,x_max:1031,y_min:0,y_max:1472,ha:1472,leftSideBearing:61,advanceWidth:1139},3:{x_min:86,x_max:1046,y_min:-26,y_max:1472,ha:1498,leftSideBearing:86,advanceWidth:1139},4:{x_min:26,x_max:1040,y_min:0,y_max:1466,ha:1466,leftSideBearing:26,advanceWidth:1139},5:{x_min:85,x_max:1057,y_min:-25,y_max:1446,ha:1471,leftSideBearing:85,advanceWidth:1139},6:{x_min:77,x_max:1045,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},7:{x_min:97,x_max:1046,y_min:0,y_max:1447,ha:1447,leftSideBearing:97,advanceWidth:1139},8:{x_min:83,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:83,advanceWidth:1139},9:{x_min:85,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:176,x_max:399,y_min:0,y_max:1466,ha:1466,leftSideBearing:176,advanceWidth:569},'"':{x_min:94,x_max:631,y_min:947,y_max:1466,ha:519,leftSideBearing:94,advanceWidth:727},"#":{x_min:21,x_max:1113,y_min:-25,y_max:1491,ha:1516,leftSideBearing:21,advanceWidth:1139},$:{x_min:73,x_max:1043,y_min:-211,y_max:1601,ha:1812,leftSideBearing:73,advanceWidth:1139},"%":{x_min:119,x_max:1695,y_min:-54,y_max:1491,ha:1545,leftSideBearing:119,advanceWidth:1821},"&":{x_min:88,x_max:1319,y_min:-34,y_max:1491,ha:1525,leftSideBearing:88,advanceWidth:1366},"'":{x_min:90,x_max:295,y_min:947,y_max:1466,ha:519,leftSideBearing:90,advanceWidth:391},"(":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},")":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},"*":{x_min:64,x_max:725,y_min:867,y_max:1491,ha:624,leftSideBearing:64,advanceWidth:797},"+":{x_min:114,x_max:1082,y_min:237,y_max:1206,ha:969,leftSideBearing:114,advanceWidth:1196},",":{x_min:170,x_max:387,y_min:-290,y_max:205,ha:495,leftSideBearing:170,advanceWidth:569},"-":{x_min:65,x_max:618,y_min:440,y_max:621,ha:181,leftSideBearing:65,advanceWidth:682},".":{x_min:186,x_max:391,y_min:0,y_max:205,ha:205,leftSideBearing:186,advanceWidth:569},"/":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},":":{x_min:185,x_max:390,y_min:0,y_max:1062,ha:1062,leftSideBearing:185,advanceWidth:569},";":{x_min:170,x_max:387,y_min:-290,y_max:1062,ha:1352,leftSideBearing:170,advanceWidth:569},"<":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"=":{x_min:114,x_max:1082,y_min:417,y_max:1030,ha:613,leftSideBearing:114,advanceWidth:1196},">":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"?":{x_min:90,x_max:1036,y_min:0,y_max:1491,ha:1491,leftSideBearing:90,advanceWidth:1139},"@":{x_min:111,x_max:2005,y_min:-431,y_max:1493,ha:1924,leftSideBearing:111,advanceWidth:2079},A:{x_min:-3,x_max:1369,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},B:{x_min:150,x_max:1257,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},C:{x_min:102,x_max:1398,y_min:-25,y_max:1491,ha:1516,leftSideBearing:102,advanceWidth:1479},D:{x_min:158,x_max:1370,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1479},E:{x_min:162,x_max:1256,y_min:0,y_max:1466,ha:1466,leftSideBearing:162,advanceWidth:1366},F:{x_min:168,x_max:1157,y_min:0,y_max:1466,ha:1466,leftSideBearing:168,advanceWidth:1251},G:{x_min:109,x_max:1465,y_min:-25,y_max:1491,ha:1516,leftSideBearing:109,advanceWidth:1593},H:{x_min:164,x_max:1314,y_min:0,y_max:1466,ha:1466,leftSideBearing:164,advanceWidth:1479},I:{x_min:191,x_max:385,y_min:0,y_max:1466,ha:1466,leftSideBearing:191,advanceWidth:569},J:{x_min:58.84976474807333,x_max:865,y_min:-25,y_max:1466,ha:1491,leftSideBearing:58,advanceWidth:1024},K:{x_min:150,x_max:1362,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},L:{x_min:150,x_max:1066,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1139},M:{x_min:152,x_max:1551,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1706},N:{x_min:156,x_max:1311,y_min:0,y_max:1466,ha:1466,leftSideBearing:156,advanceWidth:1479},O:{x_min:99,x_max:1501,y_min:-25,y_max:1492,ha:1517,leftSideBearing:99,advanceWidth:1593},P:{x_min:158,x_max:1277,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1366},Q:{x_min:88,x_max:1518,y_min:-114,y_max:1492,ha:1606,leftSideBearing:88,advanceWidth:1593},R:{x_min:161,x_max:1453,y_min:0,y_max:1466,ha:1466,leftSideBearing:161,advanceWidth:1479},S:{x_min:92,x_max:1259,y_min:-25,y_max:1491,ha:1516,leftSideBearing:92,advanceWidth:1366},T:{x_min:48,x_max:1210,y_min:0,y_max:1466,ha:1466,leftSideBearing:48,advanceWidth:1251},U:{x_min:161,x_max:1314,y_min:-25,y_max:1466,ha:1491,leftSideBearing:161,advanceWidth:1479},V:{x_min:9,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},W:{x_min:25,x_max:1910,y_min:0,y_max:1466,ha:1466,leftSideBearing:25,advanceWidth:1933},X:{x_min:9,x_max:1353,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},Y:{x_min:6,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:6,advanceWidth:1366},Z:{x_min:41,x_max:1200,y_min:0,y_max:1466,ha:1466,leftSideBearing:41,advanceWidth:1251},"[":{x_min:139,x_max:536,y_min:-407,y_max:1466,ha:1873,leftSideBearing:139,advanceWidth:569},"\\":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},"]":{x_min:39,x_max:436,y_min:-407,y_max:1466,ha:1873,leftSideBearing:39,advanceWidth:569},"^":{x_min:54,x_max:907,y_min:690,y_max:1491,ha:801,leftSideBearing:54,advanceWidth:961},_:{x_min:-31,x_max:1162,y_min:-407,y_max:-277,ha:130,leftSideBearing:-31,advanceWidth:1139},"`":{x_min:89,x_max:465,y_min:1194,y_max:1474,ha:280,leftSideBearing:89,advanceWidth:682},a:{x_min:74,x_max:1052,y_min:-24,y_max:1086,ha:1110,leftSideBearing:74,advanceWidth:1139},b:{x_min:134,x_max:1055,y_min:-24,y_max:1466,ha:1490,leftSideBearing:134,advanceWidth:1139},c:{x_min:80,x_max:1005,y_min:-24,y_max:1086,ha:1110,leftSideBearing:80,advanceWidth:1024},d:{x_min:70,x_max:991,y_min:-24,y_max:1466,ha:1490,leftSideBearing:70,advanceWidth:1139},e:{x_min:75,x_max:1054,y_min:-24,y_max:1086,ha:1110,leftSideBearing:75,advanceWidth:1139},f:{x_min:19,x_max:640,y_min:0,y_max:1491,ha:1491,leftSideBearing:19,advanceWidth:569},g:{x_min:66,x_max:1002,y_min:-431,y_max:1086,ha:1517,leftSideBearing:66,advanceWidth:1139},h:{x_min:135,x_max:1e3,y_min:0,y_max:1466,ha:1466,leftSideBearing:135,advanceWidth:1139},i:{x_min:136,x_max:316,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:455},j:{x_min:-94,x_max:314,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:455},k:{x_min:136,x_max:1016,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:1024},l:{x_min:131,x_max:311,y_min:0,y_max:1466,ha:1466,leftSideBearing:131,advanceWidth:455},m:{x_min:135,x_max:1574,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1706},n:{x_min:135,x_max:998,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1139},o:{x_min:68,x_max:1063,y_min:-24,y_max:1086,ha:1110,leftSideBearing:68,advanceWidth:1139},p:{x_min:135,x_max:1057,y_min:-407,y_max:1086,ha:1493,leftSideBearing:135,advanceWidth:1139},q:{x_min:72,x_max:992,y_min:-407,y_max:1086,ha:1493,leftSideBearing:72,advanceWidth:1139},r:{x_min:133,x_max:710,y_min:0,y_max:1086,ha:1086,leftSideBearing:133,advanceWidth:682},s:{x_min:63,x_max:945,y_min:-24,y_max:1086,ha:1110,leftSideBearing:63,advanceWidth:1024},t:{x_min:36,x_max:554,y_min:-14,y_max:1433,ha:1447,leftSideBearing:36,advanceWidth:569},u:{x_min:131,x_max:992,y_min:-24,y_max:1062,ha:1086,leftSideBearing:131,advanceWidth:1139},v:{x_min:26,x_max:1e3,y_min:0,y_max:1062,ha:1062,leftSideBearing:26,advanceWidth:1024},w:{x_min:6,x_max:1463,y_min:0,y_max:1062,ha:1062,leftSideBearing:6,advanceWidth:1479},x:{x_min:15,x_max:1009,y_min:0,y_max:1062,ha:1062,leftSideBearing:15,advanceWidth:1024},y:{x_min:33,x_max:1006,y_min:-431,y_max:1062,ha:1493,leftSideBearing:33,advanceWidth:1024},z:{x_min:40,x_max:980,y_min:0,y_max:1062,ha:1062,leftSideBearing:40,advanceWidth:1024},"{":{x_min:57,x_max:636,y_min:-431,y_max:1491,ha:1922,leftSideBearing:57,advanceWidth:684},"|":{x_min:188,x_max:345,y_min:-431,y_max:1491,ha:1922,leftSideBearing:188,advanceWidth:532},"}":{x_min:47,x_max:626,y_min:-431,y_max:1491,ha:1922,leftSideBearing:47,advanceWidth:684},"~":{x_min:87,x_max:1110,y_min:557,y_max:885,ha:328,leftSideBearing:87,advanceWidth:1196}},fontFamily:"sans-serif",resolution:2048,generatedOn:"2020-10-18T18:48:11.823Z"},Hi={smufl:!1,name:"SERIF",spacing:50,Description:"Built-in serif font",bold:!0,italic:!0,monospaced:!1,serifs:!0,glyphs:{0:{x_min:49,x_max:975,y_min:-27,y_max:1383,ha:1410,leftSideBearing:49,advanceWidth:1024},1:{x_min:227,x_max:811,y_min:0,y_max:1383,ha:1383,leftSideBearing:227,advanceWidth:1024},2:{x_min:61,x_max:965,y_min:0,y_max:1383,ha:1383,leftSideBearing:61,advanceWidth:1024},3:{x_min:88,x_max:883,y_min:-27,y_max:1383,ha:1410,leftSideBearing:88,advanceWidth:1024},4:{x_min:25,x_max:967,y_min:0,y_max:1384,ha:1384,leftSideBearing:25,advanceWidth:1024},5:{x_min:66,x_max:898,y_min:-27,y_max:1409,ha:1436,leftSideBearing:66,advanceWidth:1024},6:{x_min:70,x_max:958,y_min:-27,y_max:1401,ha:1428,leftSideBearing:70,advanceWidth:1024},7:{x_min:41,x_max:920,y_min:-16,y_max:1356,ha:1372,leftSideBearing:41,advanceWidth:1024},8:{x_min:115,x_max:911,y_min:-27,y_max:1383,ha:1410,leftSideBearing:115,advanceWidth:1024},9:{x_min:61,x_max:940,y_min:-41,y_max:1383,ha:1424,leftSideBearing:61,advanceWidth:1024}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:512},"!":{x_min:266,x_max:488,y_min:-22,y_max:1383,ha:1405,leftSideBearing:266,advanceWidth:682},'"':{x_min:157.2000021972655,x_max:678.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:157,advanceWidth:836},"#":{x_min:10,x_max:1016,y_min:-1,y_max:1356,ha:1357,leftSideBearing:10,advanceWidth:1024},$:{x_min:90,x_max:936,y_min:-180,y_max:1492,ha:1672,leftSideBearing:90,advanceWidth:1024},"%":{x_min:125,x_max:1581,y_min:-30,y_max:1388,ha:1418,leftSideBearing:125,advanceWidth:1706},"&":{x_min:86,x_max:1536,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1593},"'":{x_min:97.20000219726548,x_max:273.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:97,advanceWidth:369},"(":{x_min:98,x_max:623,y_min:-363,y_max:1383,ha:1746,leftSideBearing:98,advanceWidth:682},")":{x_min:59,x_max:584,y_min:-363,y_max:1383,ha:1746,leftSideBearing:59,advanceWidth:682},"*":{x_min:137.96078522291893,x_max:886.039214777081,y_min:543,y_max:1383,ha:840,leftSideBearing:137,advanceWidth:1024},"+":{x_min:61,x_max:1093,y_min:2,y_max:1034,ha:1032,leftSideBearing:61,advanceWidth:1155},",":{x_min:115,x_max:399,y_min:-291,y_max:208,ha:499,leftSideBearing:115,advanceWidth:512},"-":{x_min:80,x_max:584,y_min:396,y_max:525,ha:129,leftSideBearing:80,advanceWidth:682},".":{x_min:143,x_max:371,y_min:-22,y_max:205,ha:227,leftSideBearing:143,advanceWidth:512},"/":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},":":{x_min:166,x_max:394,y_min:-22,y_max:943,ha:965,leftSideBearing:166,advanceWidth:569},";":{x_min:164,x_max:448,y_min:-290,y_max:943,ha:1233,leftSideBearing:164,advanceWidth:569},"<":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"=":{x_min:61,x_max:1093,y_min:246,y_max:791,ha:545,leftSideBearing:61,advanceWidth:1155},">":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"?":{x_min:139,x_max:848,y_min:-15,y_max:1383,ha:1398,leftSideBearing:139,advanceWidth:909},"@":{x_min:238,x_max:1657,y_min:-29,y_max:1386,ha:1415,leftSideBearing:238,advanceWidth:1886},A:{x_min:31,x_max:1445,y_min:0,y_max:1380,ha:1380,leftSideBearing:31,advanceWidth:1479},B:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},C:{x_min:57,x_max:1296,y_min:-28,y_max:1383,ha:1411,leftSideBearing:57,advanceWidth:1366},D:{x_min:33,x_max:1403,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1479},E:{x_min:25,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},F:{x_min:25,x_max:1119,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1139},G:{x_min:66,x_max:1452,y_min:-28,y_max:1383,ha:1411,leftSideBearing:66,advanceWidth:1479},H:{x_min:39,x_max:1438,y_min:0,y_max:1356,ha:1356,leftSideBearing:39,advanceWidth:1479},I:{x_min:37,x_max:642,y_min:0,y_max:1356,ha:1356,leftSideBearing:37,advanceWidth:682},J:{x_min:20,x_max:758,y_min:-28,y_max:1356,ha:1384,leftSideBearing:20,advanceWidth:797},K:{x_min:70,x_max:1479,y_min:0,y_max:1356,ha:1356,leftSideBearing:70,advanceWidth:1479},L:{x_min:25,x_max:1224,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},M:{x_min:25,x_max:1768,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1821},N:{x_min:25,x_max:1450,y_min:-22,y_max:1356,ha:1378,leftSideBearing:25,advanceWidth:1479},O:{x_min:70,x_max:1409,y_min:-28,y_max:1383,ha:1411,leftSideBearing:70,advanceWidth:1479},P:{x_min:33,x_max:1110,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1139},Q:{x_min:70,x_max:1435,y_min:-364.28571588721996,y_max:1383,ha:1747.28571588722,leftSideBearing:70,advanceWidth:1479},R:{x_min:35,x_max:1347,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},S:{x_min:86,x_max:1006,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1139},T:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1251},U:{x_min:29,x_max:1444,y_min:-28,y_max:1356,ha:1384,leftSideBearing:29,advanceWidth:1479},V:{x_min:33,x_max:1428,y_min:-22,y_max:1356,ha:1378,leftSideBearing:33,advanceWidth:1479},W:{x_min:10,x_max:1906,y_min:-22,y_max:1356,ha:1378,leftSideBearing:10,advanceWidth:1933},X:{x_min:20,x_max:1449,y_min:0,y_max:1356,ha:1356,leftSideBearing:20,advanceWidth:1479},Y:{x_min:45,x_max:1441,y_min:0,y_max:1356,ha:1356,leftSideBearing:45,advanceWidth:1479},Z:{x_min:18,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:18,advanceWidth:1251},"[":{x_min:180,x_max:612,y_min:-319,y_max:1355,ha:1674,leftSideBearing:180,advanceWidth:682},"\\":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},"]":{x_min:70,x_max:502,y_min:-319,y_max:1355,ha:1674,leftSideBearing:70,advanceWidth:682},"^":{x_min:49,x_max:914,y_min:608,y_max:1355,ha:747,leftSideBearing:49,advanceWidth:961},_:{x_min:0,x_max:1024,y_min:-255,y_max:-153,ha:102,leftSideBearing:0,advanceWidth:1024},"`":{x_min:39,x_max:499,y_min:1037,y_max:1392.509803639748,ha:355.50980363974804,leftSideBearing:39,advanceWidth:682},a:{x_min:76,x_max:905,y_min:-20,y_max:942,ha:962,leftSideBearing:76,advanceWidth:909},b:{x_min:6,x_max:958,y_min:-20,y_max:1399,ha:1419,leftSideBearing:6,advanceWidth:1024},c:{x_min:51,x_max:843,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},d:{x_min:55,x_max:1006,y_min:-20,y_max:1399,ha:1419,leftSideBearing:55,advanceWidth:1024},e:{x_min:51,x_max:868,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},f:{x_min:41,x_max:783,y_min:0,y_max:1399,ha:1399,leftSideBearing:41,advanceWidth:682},g:{x_min:57,x_max:963,y_min:-446,y_max:942,ha:1388,leftSideBearing:57,advanceWidth:1024},h:{x_min:18,x_max:997,y_min:0,y_max:1399,ha:1399,leftSideBearing:18,advanceWidth:1024},i:{x_min:33,x_max:516,y_min:0,y_max:1399,ha:1399,leftSideBearing:33,advanceWidth:569},j:{x_min:-142,x_max:397,y_min:-446,y_max:1399,ha:1845,leftSideBearing:-142,advanceWidth:569},k:{x_min:14,x_max:1029,y_min:0,y_max:1399,ha:1399,leftSideBearing:14,advanceWidth:1024},l:{x_min:39,x_max:523,y_min:0,y_max:1399,ha:1399,leftSideBearing:39,advanceWidth:569},m:{x_min:33,x_max:1587,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1593},n:{x_min:33,x_max:993,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1024},o:{x_min:59,x_max:963,y_min:-20,y_max:942,ha:962,leftSideBearing:59,advanceWidth:1024},p:{x_min:10,x_max:964,y_min:-443,y_max:944,ha:1387,leftSideBearing:10,advanceWidth:1024},q:{x_min:49,x_max:999,y_min:-443,y_max:942.0135137169275,ha:1385.0135137169275,leftSideBearing:49,advanceWidth:1024},r:{x_min:10,x_max:685,y_min:0,y_max:944,ha:944,leftSideBearing:10,advanceWidth:682},s:{x_min:104,x_max:713,y_min:-20,y_max:942.0263161804552,ha:962.0263161804552,leftSideBearing:104,advanceWidth:797},t:{x_min:27,x_max:572,y_min:-18,y_max:1186,ha:1204,leftSideBearing:27,advanceWidth:569},u:{x_min:18,x_max:981,y_min:-21,y_max:921,ha:942,leftSideBearing:18,advanceWidth:1024},v:{x_min:39,x_max:976,y_min:-28,y_max:921,ha:949,leftSideBearing:39,advanceWidth:1024},w:{x_min:43,x_max:1423,y_min:-28,y_max:921,ha:949,leftSideBearing:43,advanceWidth:1479},x:{x_min:35,x_max:989,y_min:0,y_max:921,ha:921,leftSideBearing:35,advanceWidth:1024},y:{x_min:29,x_max:976,y_min:-445,y_max:921,ha:1366,leftSideBearing:29,advanceWidth:1024},z:{x_min:55,x_max:855,y_min:0,y_max:921,ha:921,leftSideBearing:55,advanceWidth:909},"{":{x_min:205,x_max:717,y_min:-377,y_max:1397,ha:1774,leftSideBearing:205,advanceWidth:983},"|":{x_min:137,x_max:273,y_min:-512,y_max:1535,ha:2047,leftSideBearing:137,advanceWidth:410},"}":{x_min:266,x_max:778,y_min:-377,y_max:1397,ha:1774,leftSideBearing:266,advanceWidth:983},"~":{x_min:82,x_max:1028,y_min:380,y_max:666,ha:286,leftSideBearing:82,advanceWidth:1108}},fontFamily:"serif",resolution:2048,generatedOn:"2020-10-18T19:03:12.514Z"};class Yi{static sortAndUnique(t,e,i){if(t.length>1){const b=[];let a;t.sort(e);for(let e=0;e {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\nexport { Fraction };\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\nexport { Font };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Element };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave -= options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\nexport { Tables };\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\nexport { Glyph };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accidentalLinePositionsAndSpaceNeeds = [];\n let prevNote = undefined;\n let extraXSpaceNeededForLeftDisplacedNotehead = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n // If the current extra left-space needed isn't as big as this note's,\n // then we need to use this note's.\n extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accidentalLinePositionsAndSpaceNeeds.push({\n y,\n line: accLine,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n spacingBetweenStaveLines: lineSpace,\n });\n }\n else {\n accidentalLinePositionsAndSpaceNeeds.push({\n line: props.line,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n });\n }\n }\n // Sort accidentals by line number.\n accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line);\n const staveLineAccidentalLayoutMetrics = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let maxExtraXSpaceNeeded = 0;\n // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics)\n // from accidentalLinePositionsAndSpaceNeeds\n for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) {\n const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i];\n const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1];\n let currentLineMetric;\n // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric\n if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) {\n currentLineMetric = {\n line: accidentalLinePositionAndSpaceNeeds.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n };\n staveLineAccidentalLayoutMetrics.push(currentLineMetric);\n }\n else {\n currentLineMetric = priorLineMetric;\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' &&\n accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') {\n currentLineMetric.flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') {\n currentLineMetric.dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n currentLineMetric.numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing;\n // if this extraXSpaceNeeded is the largest so far, use it as the starting point for\n // all accidental columns.\n maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded);\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd])\n ? 'a'\n : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) {\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = leftShift + maxExtraXSpaceNeeded;\n columnXOffsets[0] = leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded;\n accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift = totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\nexport { Accidental };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nclass Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\nexport { Stem };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\nexport { TextFormatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\nexport { Annotation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\nexport { Articulation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\nexport { ChordSymbol };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n this.barline = new Barline(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n ctx.openGroup('barnote', this.getAttribute('id'));\n this.barline.setType(this.type);\n this.barline.setX(this.getAbsoluteX());\n this.barline.draw(this.checkStave());\n ctx.closeGroup();\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\nexport { BarNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nclass Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Bend };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { FretHandFinger };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\nexport { NoteHead };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n return this._noteHeads;\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\nexport { StaveNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { StaveTie };\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\nexport { GraceNoteGroup };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - stave.getNoteStartX();\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const tickables = note.getVoice().getTickables();\n const index = tickables.indexOf(note);\n const nextContext = index + 1 < tickables.length ? tickables[index + 1].checkTickContext() : undefined;\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - glyphX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\nexport { Ornament };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = (_b = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : Note.getPoint('gracenote');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height, devicePixelRatio) {\n var _a;\n const canvas = this.context2D.canvas;\n const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : globalObject().devicePixelRatio) !== null && _a !== void 0 ? _a : 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / dpr) | 0;\n height = (height / dpr) | 0;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(dpr, dpr);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\nexport { SVGContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\nexport { Renderer };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\nexport { TextNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { Volta };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n /**\n * The modifier context's left_shift state.\n */\n const left_shift = state.left_shift;\n /**\n * The modifier context's right_shift state.\n */\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let extraXSpaceForDisplacedNotehead = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (pos === Modifier.Position.LEFT) {\n extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: extraXSpaceForDisplacedNotehead,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n let num_x_shift = 0;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + extraXSpaceForDisplacedNotehead);\n num_x_shift = num_width; // spacing\n x_widthL = Math.max(num_x_shift, x_widthL);\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_x_shift += num_width; // spacing\n x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StringNumber };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { Stroke };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\nexport { ModifierContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\nexport { Clef };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nclass KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\nexport { KeySignature };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nclass Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n var _a;\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', {\n category: 'coda',\n });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: Tables.NOTATION_FONT_SCALE / 3,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\nexport { Repetition };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveSection };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveTempo };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { StaveText };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nclass Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n /**\n * treat the stave as if the clef is clefSpec, but don't display the clef\n */\n setClefLines(clefSpec) {\n this.clef = clefSpec;\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Stave };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\nexport { StaveConnector };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\nexport { Formatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\nexport { Crescendo };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\nexport { Parser };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\nexport { EasyScore };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\nexport { PedalMarking };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\nexport { StaveLine };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\nexport { TextBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\nexport { TextDynamics };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\nexport { VibratoBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Factory };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\nexport { StaveHairpin };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { TabSlide };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n doubleCBanjo: 'D/5,C/5,G/4,C/4,G/5',\n doubleDBanjo: 'E/5,D/5,A/4,D/4,A/5',\n sawmillBanjo: 'D/5,C/5,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static getMusicFontStack() {\n return Tables.MUSIC_FONT_STACK;\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\nexport { Flow };\n","export const VERSION = '4.2.6';\nexport const ID = '103aad2b14837418c5e96c9e078edd036fcddf60';\nexport const DATE = '2024-08-26T20:16:17.134Z';\n","export const BravuraFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 469,\n y_min: 0,\n y_max: 295,\n ha: 295,\n o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 469,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 36,\n y_min: 868,\n y_max: 1120,\n ha: 252,\n o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 500,\n y_min: 0,\n y_max: 502,\n ha: 502,\n o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z',\n },\n segno: {\n x_min: 4,\n x_max: 550,\n y_min: -27,\n y_max: 759,\n ha: 786,\n o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z',\n },\n coda: {\n x_min: -4,\n x_max: 955,\n y_min: -158,\n y_max: 898,\n ha: 1056,\n o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z',\n },\n gClef: {\n x_min: 0,\n x_max: 671,\n y_min: -658,\n y_max: 1098,\n ha: 1756,\n o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z',\n },\n cClef: {\n x_min: 0,\n x_max: 699,\n y_min: -506,\n y_max: 506,\n ha: 1012,\n o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z',\n },\n fClef: {\n x_min: -5,\n x_max: 684,\n y_min: -635,\n y_max: 262,\n ha: 897,\n o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 382,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z',\n },\n '6stringTabClef': {\n x_min: -3,\n x_max: 408,\n y_min: -748,\n y_max: 764,\n ha: 1512,\n o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 314,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 426,\n y_min: -257,\n y_max: 254,\n ha: 511,\n o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 401,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 383,\n y_min: -251,\n y_max: 246,\n ha: 497,\n o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 421,\n y_min: -250,\n y_max: 249,\n ha: 499,\n o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 416,\n y_min: -259,\n y_max: 259,\n ha: 518,\n o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z',\n },\n timeSigCommon: {\n x_min: 5,\n x_max: 424,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 418,\n y_min: -359,\n y_max: 361,\n ha: 720,\n o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z',\n },\n timeSigPlus: {\n x_min: -1,\n x_max: 499,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z',\n },\n timeSigPlusSmall: {\n x_min: -1,\n x_max: 255,\n y_min: -133,\n y_max: 123,\n ha: 256,\n o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 448,\n y_min: -35,\n y_max: 40,\n ha: 75,\n o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z',\n },\n timeSigParensLeft: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 599,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 546,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 377,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 290,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 603,\n y_min: -218,\n y_max: 213,\n ha: 431,\n o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z',\n },\n noteheadCircledWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -225,\n y_max: 211,\n ha: 436,\n o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z',\n },\n noteheadCircledHalf: {\n x_min: -18,\n x_max: 311,\n y_min: -162,\n y_max: 167,\n ha: 329,\n o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z',\n },\n noteheadCircledBlack: {\n x_min: -21,\n x_max: 321,\n y_min: -171,\n y_max: 167,\n ha: 338,\n o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 416,\n y_min: -190,\n y_max: 198,\n ha: 388,\n o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 292,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 207 -180 l 420 180 l 0 180 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 293,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 422 -180 l 207 180 l 0 -180 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 596,\n y_min: -179,\n y_max: 168,\n ha: 347,\n o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z',\n },\n noteheadSlashedWhole1: {\n x_min: -22,\n x_max: 433,\n y_min: -157,\n y_max: 148,\n ha: 305,\n o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z',\n },\n noteheadSlashedHalf1: {\n x_min: -67,\n x_max: 386,\n y_min: -142,\n y_max: 160,\n ha: 302,\n o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z',\n },\n noteheadSlashedBlack1: {\n x_min: -80,\n x_max: 375,\n y_min: -165,\n y_max: 167,\n ha: 332,\n o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 596,\n y_min: -178,\n y_max: 169,\n ha: 347,\n o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z',\n },\n noteheadSlashedWhole2: {\n x_min: -18,\n x_max: 436,\n y_min: -154,\n y_max: 151,\n ha: 305,\n o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 380,\n y_min: -134,\n y_max: 168,\n ha: 302,\n o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z',\n },\n noteheadSlashedBlack2: {\n x_min: -79,\n x_max: 376,\n y_min: -164,\n y_max: 168,\n ha: 332,\n o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 432,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 270,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 251,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z',\n },\n noteheadParenthesis: {\n x_min: -73,\n x_max: 368,\n y_min: -180,\n y_max: 182,\n ha: 362,\n o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z',\n },\n noteheadParenthesisRight: {\n x_min: -36,\n x_max: 73,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 109,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 315,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 -180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 180 l 0 -180 l 488 -180 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 278,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z',\n },\n tremolo1: {\n x_min: -150,\n x_max: 150,\n y_min: -93,\n y_max: 94,\n ha: 187,\n o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 264,\n y_min: -810,\n y_max: 9,\n ha: 819,\n o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 306,\n y_min: -14,\n y_max: 808,\n ha: 822,\n o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -813,\n y_max: 2,\n ha: 815,\n o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 291,\n y_min: -9,\n y_max: 812,\n ha: 821,\n o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 149,\n ha: 961,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 273,\n y_min: -172,\n y_max: 812,\n ha: 984,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 347,\n ha: 1159,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -376,\n y_max: 812,\n ha: 1188,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 533,\n ha: 1345,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -580,\n y_max: 812,\n ha: 1392,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 226,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 168,\n y_min: -335,\n y_max: 341,\n ha: 676,\n o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 249,\n y_min: -348,\n y_max: 350,\n ha: 698,\n o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 247,\n y_min: -125,\n y_max: 127,\n ha: 252,\n o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 411,\n y_min: -175,\n y_max: 437,\n ha: 612,\n o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 1,\n x_max: 227,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 1,\n x_max: 466,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 179,\n y_min: -353,\n y_max: 307,\n ha: 660,\n o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 3,\n x_max: 317,\n y_min: -347,\n y_max: 369,\n ha: 716,\n o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 1,\n x_max: 287,\n y_min: -174,\n y_max: 438,\n ha: 612,\n o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 341,\n y_min: -350,\n y_max: 348,\n ha: 698,\n o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z',\n },\n accidentalBakiyeFlat: {\n x_min: -1,\n x_max: 286,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 229,\n y_min: -337,\n y_max: 322,\n ha: 659,\n o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1,\n x_max: 339,\n y_min: -338,\n y_max: 321,\n ha: 659,\n o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 300,\n y_min: -472,\n y_max: 157,\n ha: 629,\n o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 421,\n y_min: -318,\n y_max: 328,\n ha: 646,\n o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 339,\n y_min: 1,\n y_max: 245,\n ha: 244,\n o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 339,\n y_min: -244,\n y_max: 0,\n ha: 244,\n o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z',\n },\n articTenutoAbove: {\n x_min: -1,\n x_max: 338,\n y_min: 0,\n y_max: 48,\n ha: 48,\n o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z',\n },\n articTenutoBelow: {\n x_min: -1,\n x_max: 338,\n y_min: -48,\n y_max: 0,\n ha: 48,\n o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 84,\n y_min: 0,\n y_max: 84,\n ha: 84,\n o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 84,\n y_min: -84,\n y_max: 0,\n ha: 84,\n o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z',\n },\n articStaccatissimoAbove: {\n x_min: 1,\n x_max: 100,\n y_min: -2,\n y_max: 293,\n ha: 295,\n o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z',\n },\n articStaccatissimoBelow: {\n x_min: 1,\n x_max: 100,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z',\n },\n articMarcatoAbove: {\n x_min: -1,\n x_max: 235,\n y_min: -1,\n y_max: 253,\n ha: 254,\n o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z',\n },\n articMarcatoBelow: {\n x_min: -1,\n x_max: 235,\n y_min: -254,\n y_max: 0,\n ha: 254,\n o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z',\n },\n fermataAbove: {\n x_min: 3,\n x_max: 605,\n y_min: -3,\n y_max: 329,\n ha: 332,\n o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z',\n },\n fermataBelow: {\n x_min: 3,\n x_max: 605,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 603,\n y_min: -1,\n y_max: 333,\n ha: 334,\n o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 603,\n y_min: -333,\n y_max: 1,\n ha: 334,\n o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: 0,\n y_max: 408,\n ha: 408,\n o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 715,\n y_min: -408,\n y_max: 0,\n ha: 408,\n o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 726,\n y_min: 0,\n y_max: 449,\n ha: 449,\n o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 726,\n y_min: -449,\n y_max: 0,\n ha: 449,\n o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 604,\n y_min: 0,\n y_max: 341,\n ha: 341,\n o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 604,\n y_min: -341,\n y_max: 0,\n ha: 341,\n o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z',\n },\n breathMarkComma: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n breathMarkUpbow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n caesura: {\n x_min: 0,\n x_max: 384,\n y_min: -1,\n y_max: 532,\n ha: 533,\n o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 373,\n y_min: 0,\n y_max: 530,\n ha: 530,\n o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 381,\n y_min: -249,\n y_max: 250,\n ha: 499,\n o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 282,\n y_min: -135,\n y_max: 9,\n ha: 144,\n o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z',\n },\n restWholeLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -135,\n y_max: 20,\n ha: 155,\n o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -2,\n y_max: 142,\n ha: 144,\n o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z',\n },\n restHalfLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -13,\n y_max: 142,\n ha: 155,\n o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z',\n },\n restQuarter: {\n x_min: 1,\n x_max: 270,\n y_min: -375,\n y_max: 373,\n ha: 748,\n o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 247,\n y_min: -251,\n y_max: 174,\n ha: 425,\n o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 320,\n y_min: -500,\n y_max: 179,\n ha: 679,\n o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 363,\n y_min: -500,\n y_max: 426,\n ha: 926,\n o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -753,\n y_max: 430,\n ha: 1183,\n o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 485,\n y_min: -750,\n y_max: 689,\n ha: 1439,\n o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z',\n },\n dynamicPiano: {\n x_min: -89,\n x_max: 366,\n y_min: -142,\n y_max: 274,\n ha: 416,\n o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z',\n },\n dynamicMezzo: {\n x_min: -20,\n x_max: 446,\n y_min: -10,\n y_max: 274,\n ha: 284,\n o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z',\n },\n dynamicForte: {\n x_min: -141,\n x_max: 364,\n y_min: -152,\n y_max: 444,\n ha: 596,\n o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z',\n },\n dynamicRinforzando: {\n x_min: -20,\n x_max: 277,\n y_min: 0,\n y_max: 274,\n ha: 274,\n o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 229,\n y_min: -10,\n y_max: 273,\n ha: 283,\n o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z',\n },\n dynamicZ: {\n x_min: -30,\n x_max: 244,\n y_min: -10,\n y_max: 268,\n ha: 278,\n o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z',\n },\n ornamentTrill: {\n x_min: 0,\n x_max: 521,\n y_min: -10,\n y_max: 390,\n ha: 400,\n o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 460,\n y_min: 0,\n y_max: 218,\n ha: 218,\n o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 460,\n y_min: -90,\n y_max: 306,\n ha: 396,\n o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z',\n },\n ornamentMordent: {\n x_min: 1,\n x_max: 729,\n y_min: -73,\n y_max: 319,\n ha: 392,\n o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 725,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z',\n },\n ornamentTremblement: {\n x_min: 1,\n x_max: 985,\n y_min: 0,\n y_max: 244,\n ha: 244,\n o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1119,\n y_min: 0,\n y_max: 481,\n ha: 481,\n o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 2,\n x_max: 1150,\n y_min: -367,\n y_max: 245,\n ha: 612,\n o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1048,\n y_min: -367,\n y_max: 331,\n ha: 698,\n o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 949,\n y_min: 0,\n y_max: 381,\n ha: 381,\n o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1278,\n y_min: 0,\n y_max: 247,\n ha: 247,\n o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1277,\n y_min: -62,\n y_max: 333,\n ha: 395,\n o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 859,\n y_min: -222,\n y_max: 246,\n ha: 468,\n o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z',\n },\n brassScoop: {\n x_min: 1,\n x_max: 320,\n y_min: -373,\n y_max: 13,\n ha: 386,\n o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 489,\n y_min: -40,\n y_max: 346,\n ha: 386,\n o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z',\n },\n brassFallLipShort: {\n x_min: 1,\n x_max: 293,\n y_min: -345,\n y_max: 42,\n ha: 387,\n o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 392,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 304,\n y_min: 0,\n y_max: 304,\n ha: 304,\n o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 379,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 620,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z',\n },\n brassSmear: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 170,\n ha: 170,\n o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 318,\n ha: 318,\n o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z',\n },\n stringsUpBow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 200,\n ha: 200,\n o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 1019,\n y_min: -8,\n y_max: 555,\n ha: 563,\n o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 450,\n y_min: 0,\n y_max: 450,\n ha: 450,\n o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -33,\n x_max: 292,\n y_min: 0,\n y_max: 119,\n ha: 119,\n o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z',\n },\n arrowheadBlackUp: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z',\n },\n arrowheadBlackDown: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z',\n },\n arpeggiatoUp: {\n x_min: 1,\n x_max: 229,\n y_min: 7,\n y_max: 1511,\n ha: 1504,\n o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z',\n },\n arpeggiatoDown: {\n x_min: 1,\n x_max: 229,\n y_min: -4,\n y_max: 1500,\n ha: 1504,\n o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 762,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1232,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z',\n },\n csymHalfDiminished: {\n x_min: -16,\n x_max: 488,\n y_min: -15,\n y_max: 489,\n ha: 504,\n o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 395,\n y_min: 1,\n y_max: 396,\n ha: 395,\n o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 558,\n y_min: 1,\n y_max: 477,\n ha: 476,\n o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 325,\n y_min: 216,\n y_max: 260,\n ha: 44,\n o: 'm 468 374 l 0 374 l 0 311 l 468 311 z',\n },\n csymParensLeftTall: {\n x_min: 1,\n x_max: 185,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z',\n },\n csymParensRightTall: {\n x_min: -20,\n x_max: 164,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 155,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 156,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z',\n },\n csymParensRightVeryTall: {\n x_min: -15,\n x_max: 107,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 999,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z',\n },\n accSagittal5v7KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z',\n },\n accSagittal5v7KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z',\n },\n accSagittal5CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z',\n },\n accSagittal5CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z',\n },\n accSagittal7CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z',\n },\n accSagittal7CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal25SmallDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z',\n },\n accSagittal25SmallDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z',\n },\n accSagittal35MediumDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z',\n },\n accSagittal35MediumDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal11MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z',\n },\n accSagittal11MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z',\n },\n accSagittal11LargeDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal11LargeDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp25SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z',\n },\n accSagittalFlat25SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z',\n },\n accSagittalSharp7CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z',\n },\n accSagittalFlat7CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp5CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z',\n },\n accSagittalSharp5v7kDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z',\n },\n accSagittalFlat5v7kUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z',\n },\n accSagittalSharp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z',\n },\n accSagittalSharp5v7kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -361,\n y_max: 172,\n ha: 533,\n o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5v7kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 361,\n ha: 533,\n o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z',\n },\n accSagittalSharp5CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z',\n },\n accSagittalFlat5CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z',\n },\n accSagittalSharp7CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z',\n },\n accSagittalFlat7CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp25SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z',\n },\n accSagittalFlat25SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z',\n },\n accSagittalSharp35MUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z',\n },\n accSagittalFlat35MDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z',\n },\n accSagittalSharp11MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z',\n },\n accSagittalFlat11MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z',\n },\n accSagittalSharp11LUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11LDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp35LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat35LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp25SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z',\n },\n accSagittalDoubleFlat25SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z',\n },\n accSagittalDoubleSharp7CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z',\n },\n accSagittalDoubleFlat7CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z',\n },\n accSagittalDoubleSharp5CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z',\n },\n accSagittalDoubleFlat5CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z',\n },\n accSagittalDoubleSharp5v7kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z',\n },\n accSagittalDoubleFlat5v7kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z',\n },\n accSagittalDoubleSharp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z',\n },\n accSagittalDoubleFlat: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z',\n },\n accSagittal7v11KleismaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z',\n },\n accSagittal7v11KleismaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal55CommaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z',\n },\n accSagittal55CommaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal7v11CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal7v11CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal5v11SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z',\n },\n accSagittal5v11SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat5v11SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z',\n },\n accSagittalFlat7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z',\n },\n accSagittalSharp55CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z',\n },\n accSagittalFlat55CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z',\n },\n accSagittalSharp17CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z',\n },\n accSagittalFlat17CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z',\n },\n accSagittalSharp7v11kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z',\n },\n accSagittalFlat7v11kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z',\n },\n accSagittalSharp7v11kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z',\n },\n accSagittalFlat7v11kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z',\n },\n accSagittalSharp17CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp55CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat55CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z',\n },\n accSagittalSharp7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z',\n },\n accSagittalFlat7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z',\n },\n accSagittalFlat5v11SDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp5v11SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat5v11SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp7v11CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z',\n },\n accSagittalDoubleFlat7v11CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z',\n },\n accSagittalDoubleSharp55CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z',\n },\n accSagittalDoubleFlat55CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z',\n },\n accSagittalDoubleSharp17CDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z',\n },\n accSagittalDoubleFlat17CUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z',\n },\n accSagittalDoubleSharp7v11kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat7v11kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittal23CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z',\n },\n accSagittal23CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z',\n },\n accSagittal5v19CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z',\n },\n accSagittal5v19CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal5v23SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z',\n },\n accSagittal5v23SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittalSharp5v23SDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z',\n },\n accSagittalFlat5v23SUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z',\n },\n accSagittalFlat5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z',\n },\n accSagittalFlat23CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z',\n },\n accSagittalSharp23CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z',\n },\n accSagittalFlat23CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalFlat5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z',\n },\n accSagittalSharp5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z',\n },\n accSagittalDoubleSharp5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z',\n },\n accSagittalDoubleFlat5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z',\n },\n accSagittalDoubleSharp5v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z',\n },\n accSagittalDoubleFlat5v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z',\n },\n accSagittalDoubleSharp23CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalDoubleFlat23CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z',\n },\n accSagittal19SchismaUp: {\n x_min: 0,\n x_max: 125,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z',\n },\n accSagittal19SchismaDown: {\n x_min: 0,\n x_max: 125,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal143CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z',\n },\n accSagittal143CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal11v49CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z',\n },\n accSagittal11v49CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z',\n },\n accSagittal19CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal19CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal7v19CommaUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal7v19CommaDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal49SmallDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal49SmallDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal23SmallDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal23SmallDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal5v13MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z',\n },\n accSagittal5v13MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z',\n },\n accSagittal11v19MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z',\n },\n accSagittal11v19MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z',\n },\n accSagittal49MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z',\n },\n accSagittal49MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z',\n },\n accSagittal5v49MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z',\n },\n accSagittal5v49MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z',\n },\n accSagittal49LargeDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z',\n },\n accSagittal49LargeDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z',\n },\n accSagittal11v19LargeDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z',\n },\n accSagittal11v19LargeDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z',\n },\n accSagittal5v13LargeDiesisUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z',\n },\n accSagittal5v13LargeDiesisDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z',\n },\n accSagittalFlat23SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp49SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z',\n },\n accSagittalFlat49SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalSharp7v19CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z',\n },\n accSagittalFlat7v19CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z',\n },\n accSagittalSharp19CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z',\n },\n accSagittalFlat19CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z',\n },\n accSagittalSharp11v49CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat11v49CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z',\n },\n accSagittalSharp143CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat143CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z',\n },\n accSagittalFlat17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z',\n },\n accSagittalSharp19sDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z',\n },\n accSagittalFlat19sUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z',\n },\n accSagittalSharp19sUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z',\n },\n accSagittalFlat19sDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z',\n },\n accSagittalSharp17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp143CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalFlat143CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp11v49CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z',\n },\n accSagittalFlat11v49CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z',\n },\n accSagittalSharp19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp49SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat49SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp23SUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat23SDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp5v13MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z',\n },\n accSagittalFlat5v13MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z',\n },\n accSagittalSharp11v19MUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11v19MDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp49MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z',\n },\n accSagittalFlat49MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z',\n },\n accSagittalSharp5v49MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z',\n },\n accSagittalFlat5v49MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z',\n },\n accSagittalSharp49LUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z',\n },\n accSagittalFlat49LDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z',\n },\n accSagittalSharp11v19LUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z',\n },\n accSagittalFlat11v19LDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v13LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat5v13LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalDoubleSharp23SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalDoubleFlat23SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z',\n },\n accSagittalDoubleSharp49SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z',\n },\n accSagittalDoubleFlat49SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalDoubleSharp7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalDoubleFlat7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z',\n },\n accSagittalDoubleSharp19CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z',\n },\n accSagittalDoubleFlat19CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z',\n },\n accSagittalDoubleSharp11v49CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat11v49CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp143CDown: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat143CUp: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp17kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat17kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittalDoubleSharp19sDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalDoubleFlat19sUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalShaftUp: {\n x_min: 0,\n x_max: 31,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z',\n },\n accSagittalShaftDown: {\n x_min: 0,\n x_max: 31,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z',\n },\n accSagittalAcute: {\n x_min: 0,\n x_max: 125,\n y_min: -62,\n y_max: 125,\n ha: 187,\n o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z',\n },\n accSagittalGrave: {\n x_min: 0,\n x_max: 125,\n y_min: -125,\n y_max: 62,\n ha: 187,\n o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z',\n },\n accSagittal1MinaUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal1MinaDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal2MinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal2MinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal1TinaUp: {\n x_min: 0,\n x_max: 93,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z',\n },\n accSagittal1TinaDown: {\n x_min: 0,\n x_max: 93,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z',\n },\n accSagittal2TinasUp: {\n x_min: 0,\n x_max: 94,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal2TinasDown: {\n x_min: 0,\n x_max: 94,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z',\n },\n accSagittal3TinasUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal3TinasDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal4TinasUp: {\n x_min: 0,\n x_max: 187,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal4TinasDown: {\n x_min: 0,\n x_max: 187,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal5TinasUp: {\n x_min: 0,\n x_max: 218,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal5TinasDown: {\n x_min: 0,\n x_max: 218,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal6TinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal6TinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal7TinasUp: {\n x_min: 0,\n x_max: 281,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal7TinasDown: {\n x_min: 0,\n x_max: 281,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal8TinasUp: {\n x_min: 0,\n x_max: 312,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal8TinasDown: {\n x_min: 0,\n x_max: 312,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal9TinasUp: {\n x_min: -7,\n x_max: 312,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal9TinasDown: {\n x_min: -7,\n x_max: 312,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittalFractionalTinaUp: {\n x_min: -3,\n x_max: 35,\n y_min: 73,\n y_max: 111,\n ha: 38,\n o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z',\n },\n accSagittalFractionalTinaDown: {\n x_min: -3,\n x_max: 35,\n y_min: -111,\n y_max: -73,\n ha: 38,\n o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 164,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 414,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 281,\n y_min: -203,\n y_max: 203,\n ha: 406,\n o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 281,\n y_min: -186,\n y_max: 186,\n ha: 372,\n o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z',\n },\n },\n fontFamily: 'Bravura',\n resolution: 1000,\n generatedOn: '2022-12-18T09:06:51.407Z',\n};\n","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const GonvilleSmuflFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 412,\n y_min: -18,\n y_max: 223,\n ha: 241,\n o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 412,\n y_min: -223,\n y_max: 18,\n ha: 241,\n o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z',\n },\n barlineTick: {\n x_min: -59,\n x_max: 59,\n y_min: -139,\n y_max: 139,\n ha: 279,\n o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z',\n },\n breathMarkTick: {\n x_min: -151,\n x_max: 272,\n y_min: 0,\n y_max: 429,\n ha: 429,\n o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z',\n },\n segno: {\n x_min: 7,\n x_max: 493,\n y_min: -50,\n y_max: 650,\n ha: 699,\n o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z',\n },\n coda: {\n x_min: 22,\n x_max: 478,\n y_min: -31,\n y_max: 531,\n ha: 563,\n o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z',\n },\n gClef: {\n x_min: 0,\n x_max: 623,\n y_min: -632,\n y_max: 1082,\n ha: 1713,\n o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z',\n },\n cClef: {\n x_min: 0,\n x_max: 643,\n y_min: -508,\n y_max: 508,\n ha: 1016,\n o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z',\n },\n fClef: {\n x_min: 0,\n x_max: 661,\n y_min: -545,\n y_max: 254,\n ha: 798,\n o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z',\n },\n unpitchedPercussionClef1: {\n x_min: -4,\n x_max: 337,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 501,\n y_min: -735,\n y_max: 753,\n ha: 1487,\n o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z',\n },\n timeSig0: {\n x_min: 0,\n x_max: 380,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z',\n },\n timeSig1: {\n x_min: 0,\n x_max: 254,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z',\n },\n timeSig2: {\n x_min: 0,\n x_max: 337,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z',\n },\n timeSig3: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig4: {\n x_min: 0,\n x_max: 345,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z',\n },\n timeSig5: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig6: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSig7: {\n x_min: 0,\n x_max: 326,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z',\n },\n timeSig8: {\n x_min: 0,\n x_max: 360,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z',\n },\n timeSig9: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -233,\n y_max: 233,\n ha: 466,\n o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -394,\n y_max: 394,\n ha: 788,\n o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 235,\n y_min: -23,\n y_max: 23,\n ha: 46,\n o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z',\n },\n timeSigParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensRightSmall: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n timeSigParensLeftSmall: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 663,\n y_min: -174,\n y_max: 174,\n ha: 349,\n o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 455,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 440,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 357,\n y_min: -178,\n y_max: 178,\n ha: 357,\n o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 323,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z',\n },\n augmentationDot: {\n x_min: -63,\n x_max: 63,\n y_min: -63,\n y_max: 63,\n ha: 126,\n o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z',\n },\n tremolo1: {\n x_min: -252,\n x_max: 216,\n y_min: -185,\n y_max: 148,\n ha: 333,\n o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z',\n },\n flag8thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -745,\n y_max: -4,\n ha: 741,\n o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z',\n },\n flag8thDown: {\n x_min: -15,\n x_max: 271,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z',\n },\n flag16thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -847,\n y_max: -4,\n ha: 843,\n o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z',\n },\n flag16thDown: {\n x_min: -15,\n x_max: 267,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z',\n },\n flag32ndUp: {\n x_min: -17,\n x_max: 233,\n y_min: -1005,\n y_max: 96,\n ha: 1101,\n o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z',\n },\n flag32ndDown: {\n x_min: -15,\n x_max: 270,\n y_min: -96,\n y_max: 895,\n ha: 991,\n o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z',\n },\n flag64thUp: {\n x_min: -17,\n x_max: 233,\n y_min: -933,\n y_max: 296,\n ha: 1230,\n o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z',\n },\n flag64thDown: {\n x_min: -15,\n x_max: 271,\n y_min: -296,\n y_max: 820,\n ha: 1116,\n o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z',\n },\n flag128thUp: {\n x_min: -17,\n x_max: 231,\n y_min: -987,\n y_max: 496,\n ha: 1484,\n o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z',\n },\n flag128thDown: {\n x_min: -15,\n x_max: 270,\n y_min: -496,\n y_max: 870,\n ha: 1366,\n o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z',\n },\n accidentalFlat: {\n x_min: -15,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 176,\n y_min: -334,\n y_max: 334,\n ha: 667,\n o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 239,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 271,\n y_min: -135,\n y_max: 135,\n ha: 271,\n o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z',\n },\n accidentalDoubleFlat: {\n x_min: -15,\n x_max: 356,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z',\n },\n accidentalParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n accidentalParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 200,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 446,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 335,\n y_min: -391,\n y_max: 391,\n ha: 782,\n o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -125,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 284,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z',\n },\n accidentalBakiyeFlat: {\n x_min: -129,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 188,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z',\n },\n articAccentAbove: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articAccentBelow: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articTenutoAbove: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articTenutoBelow: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articStaccatoAbove: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatoBelow: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatissimoAbove: {\n x_min: -53,\n x_max: 53,\n y_min: 0,\n y_max: 184,\n ha: 184,\n o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z',\n },\n articStaccatissimoBelow: {\n x_min: -53,\n x_max: 53,\n y_min: -184,\n y_max: 0,\n ha: 184,\n o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z',\n },\n articMarcatoAbove: {\n x_min: -114,\n x_max: 114,\n y_min: -256,\n y_max: 19,\n ha: 275,\n o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z',\n },\n articMarcatoBelow: {\n x_min: -114,\n x_max: 114,\n y_min: -19,\n y_max: 256,\n ha: 275,\n o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z',\n },\n fermataAbove: {\n x_min: -324,\n x_max: 324,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataBelow: {\n x_min: -324,\n x_max: 324,\n y_min: -353,\n y_max: 0,\n ha: 353,\n o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 364,\n ha: 364,\n o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z',\n },\n fermataLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -364,\n y_max: 0,\n ha: 364,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 438,\n ha: 438,\n o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataVeryLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -438,\n y_max: 0,\n ha: 438,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryShortAbove: {\n x_min: -351,\n x_max: 351,\n y_min: 0,\n y_max: 571,\n ha: 571,\n o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z',\n },\n fermataVeryShortBelow: {\n x_min: -351,\n x_max: 351,\n y_min: -571,\n y_max: 0,\n ha: 571,\n o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z',\n },\n fermataShortAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 469,\n ha: 469,\n o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataShortBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -469,\n y_max: 0,\n ha: 469,\n o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n breathMarkUpbow: {\n x_min: -125,\n x_max: 125,\n y_min: 0,\n y_max: 409,\n ha: 409,\n o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z',\n },\n caesura: {\n x_min: 0,\n x_max: 457,\n y_min: -202,\n y_max: 303,\n ha: 504,\n o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 370,\n y_min: -207,\n y_max: 310,\n ha: 517,\n o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 853,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 330,\n y_min: -125,\n y_max: 0,\n ha: 125,\n o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z',\n },\n restWholeLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -125,\n y_max: 11,\n ha: 137,\n o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 330,\n y_min: 0,\n y_max: 125,\n ha: 125,\n o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z',\n },\n restHalfLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -11,\n y_max: 125,\n ha: 137,\n o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 221,\n y_min: -365,\n y_max: 365,\n ha: 730,\n o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 258,\n y_min: -197,\n y_max: 219,\n ha: 416,\n o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 331,\n y_min: -443,\n y_max: 219,\n ha: 662,\n o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 405,\n y_min: -443,\n y_max: 466,\n ha: 909,\n o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 479,\n y_min: -689,\n y_max: 466,\n ha: 1155,\n o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 553,\n y_min: -689,\n y_max: 712,\n ha: 1401,\n o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z',\n },\n dynamicPiano: {\n x_min: -39,\n x_max: 378,\n y_min: -178,\n y_max: 277,\n ha: 455,\n o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z',\n },\n dynamicMezzo: {\n x_min: 35,\n x_max: 493,\n y_min: -19,\n y_max: 272,\n ha: 291,\n o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z',\n },\n dynamicForte: {\n x_min: -87,\n x_max: 440,\n y_min: -182,\n y_max: 415,\n ha: 597,\n o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z',\n },\n dynamicRinforzando: {\n x_min: 58,\n x_max: 357,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z',\n },\n dynamicSforzando: {\n x_min: 52,\n x_max: 278,\n y_min: -22,\n y_max: 270,\n ha: 292,\n o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z',\n },\n dynamicZ: {\n x_min: 23,\n x_max: 309,\n y_min: 2,\n y_max: 250,\n ha: 248,\n o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z',\n },\n ornamentTrill: {\n x_min: -249,\n x_max: 249,\n y_min: 0,\n y_max: 376,\n ha: 376,\n o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z',\n },\n ornamentTurn: {\n x_min: -310,\n x_max: 310,\n y_min: -143,\n y_max: 143,\n ha: 286,\n o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z',\n },\n ornamentTurnSlash: {\n x_min: -310,\n x_max: 310,\n y_min: -201,\n y_max: 201,\n ha: 402,\n o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z',\n },\n ornamentMordent: {\n x_min: -296,\n x_max: 296,\n y_min: -215,\n y_max: 198,\n ha: 413,\n o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z',\n },\n ornamentShortTrill: {\n x_min: -296,\n x_max: 296,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z',\n },\n ornamentTremblement: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 255,\n ha: 381,\n o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 127,\n ha: 370,\n o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 198,\n ha: 442,\n o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: -433,\n x_max: 433,\n y_min: -127,\n y_max: 244,\n ha: 370,\n o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: -439,\n x_max: 439,\n y_min: -127,\n y_max: 236,\n ha: 363,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: -439,\n x_max: 439,\n y_min: -215,\n y_max: 236,\n ha: 451,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: -439,\n x_max: 439,\n y_min: -236,\n y_max: 127,\n ha: 362,\n o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z',\n },\n stringsDownBow: {\n x_min: -168,\n x_max: 168,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z',\n },\n stringsUpBow: {\n x_min: -110,\n x_max: 110,\n y_min: 0,\n y_max: 277,\n ha: 277,\n o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z',\n },\n stringsHarmonic: {\n x_min: -82,\n x_max: 82,\n y_min: -82,\n y_max: 82,\n ha: 163,\n o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: -110,\n x_max: 110,\n y_min: -110,\n y_max: 205,\n ha: 315,\n o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: -110,\n x_max: 110,\n y_min: -205,\n y_max: 110,\n ha: 315,\n o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: -155,\n x_max: 155,\n y_min: -157,\n y_max: 157,\n ha: 315,\n o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 782,\n y_min: -1,\n y_max: 500,\n ha: 501,\n o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 435,\n y_min: 65,\n y_max: 500,\n ha: 435,\n o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z',\n },\n pictChokeCymbal: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -8,\n x_max: 269,\n y_min: 0,\n y_max: 126,\n ha: 126,\n o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z',\n },\n arrowheadBlackUp: {\n x_min: 11,\n x_max: 239,\n y_min: -6,\n y_max: 269,\n ha: 275,\n o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z',\n },\n arrowheadBlackDown: {\n x_min: 11,\n x_max: 239,\n y_min: 6,\n y_max: 281,\n ha: 275,\n o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z',\n },\n },\n fontFamily: 'GonvilleSmufl',\n resolution: 1000,\n generatedOn: '2023-04-20T22:11:26.009Z',\n};\n","export const LelandFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 491,\n y_min: 0,\n y_max: 279,\n ha: 279,\n o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 491,\n y_min: -279,\n y_max: 0,\n ha: 279,\n o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z',\n },\n segno: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 869,\n ha: 869,\n o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z',\n },\n coda: {\n x_min: 0,\n x_max: 745,\n y_min: -113,\n y_max: 735,\n ha: 848,\n o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z',\n },\n gClef: {\n x_min: 0,\n x_max: 640,\n y_min: -666,\n y_max: 1112,\n ha: 1778,\n o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z',\n },\n cClef: {\n x_min: 0,\n x_max: 627,\n y_min: -480,\n y_max: 482,\n ha: 962,\n o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z',\n },\n fClef: {\n x_min: 0,\n x_max: 664,\n y_min: -617,\n y_max: 251,\n ha: 868,\n o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 352,\n y_min: -252,\n y_max: 252,\n ha: 504,\n o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 439,\n y_min: -743,\n y_max: 746,\n ha: 1489,\n o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z',\n },\n timeSig0: {\n x_min: 15,\n x_max: 389,\n y_min: -254,\n y_max: 255,\n ha: 509,\n o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z',\n },\n timeSig1: {\n x_min: 15,\n x_max: 336,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z',\n },\n timeSig2: {\n x_min: 15,\n x_max: 377,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z',\n },\n timeSig3: {\n x_min: 15,\n x_max: 364,\n y_min: -244,\n y_max: 244,\n ha: 488,\n o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z',\n },\n timeSig4: {\n x_min: 14,\n x_max: 442,\n y_min: -248,\n y_max: 249,\n ha: 497,\n o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z',\n },\n timeSig5: {\n x_min: 15,\n x_max: 362,\n y_min: -244,\n y_max: 246,\n ha: 490,\n o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z',\n },\n timeSig6: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z',\n },\n timeSig7: {\n x_min: 15,\n x_max: 366,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z',\n },\n timeSig8: {\n x_min: 15,\n x_max: 393,\n y_min: -248,\n y_max: 246,\n ha: 494,\n o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z',\n },\n timeSig9: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -256,\n y_max: 258,\n ha: 514,\n o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -376,\n y_max: 388,\n ha: 764,\n o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 408,\n y_min: -204,\n y_max: 204,\n ha: 408,\n o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 538,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 325,\n y_min: -162,\n y_max: 163,\n ha: 325,\n o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 432,\n y_min: -179,\n y_max: 177,\n ha: 356,\n o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 223 176 l 0 -196 l 446 -196 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z',\n },\n noteheadSlashedWhole1: {\n x_min: -75,\n x_max: 448,\n y_min: -211,\n y_max: 214,\n ha: 425,\n o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z',\n },\n noteheadSlashedHalf1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z',\n },\n noteheadSlashedBlack1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z',\n },\n noteheadSlashedWhole2: {\n x_min: -75,\n x_max: 448,\n y_min: -212,\n y_max: 214,\n ha: 426,\n o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z',\n },\n noteheadSlashedHalf2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z',\n },\n noteheadSlashedBlack2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z',\n },\n noteheadParenthesisRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 0 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 488 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z',\n },\n tremolo1: {\n x_min: 0,\n x_max: 290,\n y_min: -93,\n y_max: 96,\n ha: 189,\n o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 289,\n y_min: -817,\n y_max: 12,\n ha: 829,\n o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -12,\n y_max: 817,\n ha: 829,\n o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -820,\n y_max: 12,\n ha: 832,\n o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -26,\n y_max: 803,\n ha: 829,\n o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 186,\n ha: 1007,\n o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 309,\n y_min: -216,\n y_max: 803,\n ha: 1019,\n o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -822,\n y_max: 373,\n ha: 1195,\n o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -403,\n y_max: 804,\n ha: 1207,\n o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 573,\n ha: 1394,\n o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -591,\n y_max: 803,\n ha: 1394,\n o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 203,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 171,\n y_min: -323,\n y_max: 325,\n ha: 648,\n o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 244,\n y_min: -333,\n y_max: 334,\n ha: 667,\n o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 275,\n y_min: -137,\n y_max: 138,\n ha: 275,\n o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 371,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 193,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 180,\n y_min: -316,\n y_max: 320,\n ha: 636,\n o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 290,\n y_min: -328,\n y_max: 339,\n ha: 667,\n o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -332,\n y_max: 334,\n ha: 666,\n o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z',\n },\n accidentalBakiyeFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -316,\n y_max: 318,\n ha: 634,\n o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 361,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 361,\n y_min: -235,\n y_max: 0,\n ha: 235,\n o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 316,\n y_min: 0,\n y_max: 46,\n ha: 46,\n o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 316,\n y_min: -46,\n y_max: 0,\n ha: 46,\n o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 78,\n y_min: 0,\n y_max: 78,\n ha: 78,\n o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 78,\n y_min: -78,\n y_max: 0,\n ha: 78,\n o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 127,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 127,\n y_min: -248,\n y_max: 0,\n ha: 248,\n o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z',\n },\n articMarcatoAbove: {\n x_min: 1,\n x_max: 296,\n y_min: 0,\n y_max: 253,\n ha: 253,\n o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 295,\n y_min: -253,\n y_max: 0,\n ha: 253,\n o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 622,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 622,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 623,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 623,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 842,\n y_min: 0,\n y_max: 549,\n ha: 549,\n o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 842,\n y_min: -549,\n y_max: 0,\n ha: 549,\n o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 642,\n y_min: 0,\n y_max: 454,\n ha: 454,\n o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 642,\n y_min: -454,\n y_max: 0,\n ha: 454,\n o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 321,\n ha: 321,\n o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z',\n },\n caesura: {\n x_min: 0,\n x_max: 380,\n y_min: 0,\n y_max: 490,\n ha: 490,\n o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 368,\n y_min: 0,\n y_max: 491,\n ha: 491,\n o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 450,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: -11,\n y_max: 262,\n ha: 273,\n o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 325,\n y_min: -131,\n y_max: 5,\n ha: 136,\n o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z',\n },\n restWholeLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -122,\n y_max: 14,\n ha: 136,\n o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -4,\n y_max: 132,\n ha: 136,\n o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z',\n },\n restHalfLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -14,\n y_max: 122,\n ha: 136,\n o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 235,\n y_min: -331,\n y_max: 401,\n ha: 732,\n o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 276,\n y_min: -255,\n y_max: 204,\n ha: 459,\n o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z',\n },\n rest16th: {\n x_min: 1,\n x_max: 344,\n y_min: -507,\n y_max: 204,\n ha: 711,\n o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 391,\n y_min: -507,\n y_max: 460,\n ha: 967,\n o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -758,\n y_max: 464,\n ha: 1222,\n o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z',\n },\n rest128th: {\n x_min: -1,\n x_max: 475,\n y_min: -759,\n y_max: 717,\n ha: 1476,\n o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z',\n },\n dynamicPiano: {\n x_min: -95,\n x_max: 317,\n y_min: -163,\n y_max: 263,\n ha: 426,\n o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z',\n },\n dynamicMezzo: {\n x_min: -7,\n x_max: 374,\n y_min: -2,\n y_max: 251,\n ha: 253,\n o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z',\n },\n dynamicForte: {\n x_min: -137,\n x_max: 334,\n y_min: -193,\n y_max: 421,\n ha: 614,\n o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z',\n },\n dynamicRinforzando: {\n x_min: -12,\n x_max: 230,\n y_min: 0,\n y_max: 254,\n ha: 254,\n o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 208,\n y_min: -5,\n y_max: 263,\n ha: 268,\n o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z',\n },\n dynamicZ: {\n x_min: -42,\n x_max: 239,\n y_min: -1,\n y_max: 258,\n ha: 259,\n o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z',\n },\n ornamentTrill: {\n x_min: -12,\n x_max: 383,\n y_min: 0,\n y_max: 383,\n ha: 383,\n o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 456,\n y_min: 0,\n y_max: 232,\n ha: 232,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 456,\n y_min: -80,\n y_max: 313,\n ha: 393,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 473,\n y_min: -77,\n y_max: 316,\n ha: 393,\n o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 680,\n y_min: 0,\n y_max: 388,\n ha: 388,\n o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 248,\n ha: 406,\n o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 321,\n ha: 479,\n o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 662,\n y_min: 0,\n y_max: 406,\n ha: 406,\n o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 857,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 565,\n y_min: -171,\n y_max: 249,\n ha: 420,\n o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 280,\n y_min: 0,\n y_max: 280,\n ha: 280,\n o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 315,\n y_min: 0,\n y_max: 293,\n ha: 293,\n o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 343,\n ha: 343,\n o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 181,\n y_min: 0,\n y_max: 181,\n ha: 181,\n o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 981,\n y_min: -10,\n y_max: 545,\n ha: 555,\n o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 242,\n y_min: 0,\n y_max: 164,\n ha: 164,\n o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 735,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1243,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 501,\n y_min: 0,\n y_max: 501,\n ha: 501,\n o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z',\n },\n csymHalfDiminished: {\n x_min: -1,\n x_max: 502,\n y_min: -1,\n y_max: 502,\n ha: 503,\n o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z',\n },\n csymAugmented: {\n x_min: 1,\n x_max: 321,\n y_min: 90,\n y_max: 410,\n ha: 320,\n o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 500,\n y_min: 10,\n y_max: 490,\n ha: 480,\n o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 160,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 416,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n },\n fontFamily: 'Leland',\n resolution: 1000,\n generatedOn: '2022-12-19T23:52:37.756Z',\n};\n","export const PetalumaFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 508,\n y_min: 0,\n y_max: 370,\n ha: 370,\n o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 496,\n y_min: -393,\n y_max: 0,\n ha: 393,\n o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 56,\n y_min: 877,\n y_max: 1122,\n ha: 245,\n o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 568,\n y_min: 0,\n y_max: 621,\n ha: 621,\n o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z',\n },\n segno: {\n x_min: 0,\n x_max: 798,\n y_min: -65,\n y_max: 806,\n ha: 871,\n o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z',\n },\n coda: {\n x_min: 0,\n x_max: 1380,\n y_min: -196,\n y_max: 1037,\n ha: 1233,\n o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z',\n },\n gClef: {\n x_min: 0,\n x_max: 664,\n y_min: -559,\n y_max: 1009,\n ha: 1568,\n o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z',\n },\n cClef: {\n x_min: 0,\n x_max: 731,\n y_min: -543,\n y_max: 543,\n ha: 1086,\n o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z',\n },\n fClef: {\n x_min: 0,\n x_max: 776,\n y_min: -496,\n y_max: 216,\n ha: 712,\n o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 379,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 438,\n y_min: -768,\n y_max: 767,\n ha: 1535,\n o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 513,\n y_min: -358,\n y_max: 359,\n ha: 717,\n o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 283,\n y_min: -364,\n y_max: 366,\n ha: 730,\n o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 660,\n y_min: -379,\n y_max: 382,\n ha: 761,\n o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 540,\n y_min: -392,\n y_max: 392,\n ha: 784,\n o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 633,\n y_min: -490,\n y_max: 491,\n ha: 981,\n o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 583,\n y_min: -389,\n y_max: 389,\n ha: 778,\n o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 565,\n y_min: -363,\n y_max: 363,\n ha: 726,\n o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 592,\n y_min: -345,\n y_max: 345,\n ha: 690,\n o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 504,\n y_min: -428,\n y_max: 428,\n ha: 856,\n o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 494,\n y_min: -421,\n y_max: 421,\n ha: 842,\n o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z',\n },\n timeSigCommon: {\n x_min: 20,\n x_max: 585,\n y_min: -298,\n y_max: 294,\n ha: 592,\n o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z',\n },\n timeSigCutCommon: {\n x_min: 20,\n x_max: 695,\n y_min: -687,\n y_max: 687,\n ha: 1374,\n o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 661,\n y_min: -358,\n y_max: 358,\n ha: 716,\n o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 418,\n y_min: -197,\n y_max: 199,\n ha: 396,\n o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 662,\n y_min: -54,\n y_max: 55,\n ha: 109,\n o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 274,\n y_min: -723,\n y_max: 725,\n ha: 1448,\n o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 154,\n y_min: -422,\n y_max: 422,\n ha: 844,\n o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z',\n },\n timeSigParensLeft: {\n x_min: 1,\n x_max: 400,\n y_min: -728,\n y_max: 728,\n ha: 1456,\n o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 173,\n y_min: -405,\n y_max: 404,\n ha: 809,\n o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 614,\n y_min: -223,\n y_max: 223,\n ha: 446,\n o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 380,\n y_min: -186,\n y_max: 165,\n ha: 351,\n o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -174,\n y_max: 175,\n ha: 349,\n o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 730,\n y_min: -266,\n y_max: 267,\n ha: 533,\n o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 506,\n y_min: -143,\n y_max: 144,\n ha: 287,\n o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 421,\n y_min: -146,\n y_max: 151,\n ha: 297,\n o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 289,\n y_min: -156,\n y_max: 157,\n ha: 313,\n o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -220,\n y_max: 219,\n ha: 439,\n o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 323,\n y_min: -190,\n y_max: 184,\n ha: 374,\n o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 309,\n y_min: -179,\n y_max: 179,\n ha: 358,\n o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 344,\n y_min: -179,\n y_max: 175,\n ha: 354,\n o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 672,\n y_min: -291,\n y_max: 291,\n ha: 582,\n o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z',\n },\n noteheadCircledWhole: {\n x_min: -50,\n x_max: 472,\n y_min: -231,\n y_max: 232,\n ha: 463,\n o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z',\n },\n noteheadCircledHalf: {\n x_min: -50,\n x_max: 393,\n y_min: -175,\n y_max: 175,\n ha: 350,\n o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z',\n },\n noteheadCircledBlack: {\n x_min: -70,\n x_max: 326,\n y_min: -168,\n y_max: 192,\n ha: 360,\n o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 474,\n y_min: -209,\n y_max: 211,\n ha: 420,\n o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 350,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 342,\n y_min: -130,\n y_max: 132,\n ha: 262,\n o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 697,\n y_min: -290,\n y_max: 290,\n ha: 580,\n o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z',\n },\n noteheadSlashedWhole1: {\n x_min: -76,\n x_max: 498,\n y_min: -168,\n y_max: 168,\n ha: 336,\n o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z',\n },\n noteheadSlashedHalf1: {\n x_min: -79,\n x_max: 471,\n y_min: -184,\n y_max: 184,\n ha: 368,\n o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z',\n },\n noteheadSlashedBlack1: {\n x_min: -110,\n x_max: 452,\n y_min: -190,\n y_max: 190,\n ha: 380,\n o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 697,\n y_min: -295,\n y_max: 295,\n ha: 590,\n o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z',\n },\n noteheadSlashedWhole2: {\n x_min: -83,\n x_max: 510,\n y_min: -201,\n y_max: 198,\n ha: 399,\n o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 454,\n y_min: -188,\n y_max: 188,\n ha: 376,\n o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z',\n },\n noteheadSlashedBlack2: {\n x_min: -84,\n x_max: 405,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 429,\n y_min: -221,\n y_max: 221,\n ha: 442,\n o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 271,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z',\n },\n noteheadParenthesis: {\n x_min: -70,\n x_max: 329,\n y_min: -196,\n y_max: 201,\n ha: 397,\n o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z',\n },\n noteheadParenthesisRight: {\n x_min: -30,\n x_max: 82,\n y_min: -199,\n y_max: 206,\n ha: 405,\n o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 106,\n y_min: -197,\n y_max: 197,\n ha: 394,\n o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 328,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 391,\n y_min: -142,\n y_max: 142,\n ha: 284,\n o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 398,\n y_min: -139,\n y_max: 140,\n ha: 279,\n o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 96,\n y_min: -57,\n y_max: 57,\n ha: 114,\n o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z',\n },\n tremolo1: {\n x_min: -158,\n x_max: 156,\n y_min: -88,\n y_max: 88,\n ha: 176,\n o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 261,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 327,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 327,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 268,\n y_min: -849,\n y_max: 149,\n ha: 999,\n o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z',\n },\n flag32ndDown: {\n x_min: -3,\n x_max: 268,\n y_min: -169,\n y_max: 829,\n ha: 999,\n o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z',\n },\n flag64thUp: {\n x_min: -4,\n x_max: 282,\n y_min: -824,\n y_max: 347,\n ha: 1171,\n o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z',\n },\n flag64thDown: {\n x_min: -5,\n x_max: 281,\n y_min: -375,\n y_max: 796,\n ha: 1171,\n o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 252,\n y_min: -804,\n y_max: 530,\n ha: 1334,\n o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z',\n },\n flag128thDown: {\n x_min: -1,\n x_max: 252,\n y_min: -580,\n y_max: 754,\n ha: 1334,\n o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z',\n },\n accidentalFlat: {\n x_min: 1,\n x_max: 209,\n y_min: -208,\n y_max: 472,\n ha: 680,\n o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 214,\n y_min: -456,\n y_max: 462,\n ha: 918,\n o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z',\n },\n accidentalSharp: {\n x_min: -22,\n x_max: 390,\n y_min: -384,\n y_max: 383,\n ha: 767,\n o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 287,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 359,\n y_min: -220,\n y_max: 446,\n ha: 666,\n o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 130,\n y_min: -270,\n y_max: 268,\n ha: 538,\n o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 139,\n y_min: -275,\n y_max: 277,\n ha: 552,\n o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 208,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: -23,\n x_max: 388,\n y_min: -373,\n y_max: 445,\n ha: 818,\n o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -248,\n y_max: 432,\n ha: 680,\n o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: -1,\n x_max: 467,\n y_min: -460,\n y_max: 350,\n ha: 810,\n o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z',\n },\n accidentalBakiyeFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -236,\n y_max: 444,\n ha: 680,\n o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 359,\n y_min: -420,\n y_max: 343,\n ha: 763,\n o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 303,\n y_min: -462,\n y_max: 180,\n ha: 642,\n o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 434,\n y_min: -295,\n y_max: 325,\n ha: 620,\n o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 425,\n y_min: 0,\n y_max: 326,\n ha: 326,\n o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 425,\n y_min: -326,\n y_max: 0,\n ha: 326,\n o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 471,\n y_min: 0,\n y_max: 56,\n ha: 56,\n o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 471,\n y_min: -59,\n y_max: -3,\n ha: 56,\n o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z',\n },\n articStaccatoAbove: {\n x_min: 1,\n x_max: 112,\n y_min: 0,\n y_max: 156,\n ha: 156,\n o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z',\n },\n articStaccatoBelow: {\n x_min: 1,\n x_max: 112,\n y_min: -156,\n y_max: 0,\n ha: 156,\n o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 139,\n y_min: 0,\n y_max: 411,\n ha: 411,\n o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 139,\n y_min: -411,\n y_max: 0,\n ha: 411,\n o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z',\n },\n articMarcatoAbove: {\n x_min: 0,\n x_max: 396,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 396,\n y_min: -328,\n y_max: 0,\n ha: 328,\n o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 472,\n y_min: 2,\n y_max: 454,\n ha: 452,\n o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 519,\n y_min: -430,\n y_max: -1,\n ha: 429,\n o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 591,\n y_min: -6,\n y_max: 337,\n ha: 343,\n o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 602,\n y_min: -335,\n y_max: 7,\n ha: 342,\n o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: -14,\n y_max: 437,\n ha: 451,\n o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 686,\n y_min: -427,\n y_max: 30,\n ha: 457,\n o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 711,\n y_min: -31,\n y_max: 496,\n ha: 527,\n o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 697,\n y_min: -475,\n y_max: 13,\n ha: 488,\n o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 545,\n y_min: -18,\n y_max: 348,\n ha: 366,\n o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 565,\n y_min: -335,\n y_max: 10,\n ha: 345,\n o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 148,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z',\n },\n breathMarkUpbow: {\n x_min: 0,\n x_max: 254,\n y_min: 0,\n y_max: 595,\n ha: 595,\n o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z',\n },\n caesura: {\n x_min: 0,\n x_max: 566,\n y_min: 0,\n y_max: 562,\n ha: 563,\n o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 386,\n y_min: -10,\n y_max: 584,\n ha: 594,\n o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 366,\n y_min: -255,\n y_max: 255,\n ha: 510,\n o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 249,\n ha: 249,\n o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z',\n },\n restWhole: {\n x_min: 1,\n x_max: 500,\n y_min: -120,\n y_max: 14,\n ha: 134,\n o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z',\n },\n restWholeLegerLine: {\n x_min: -197,\n x_max: 685,\n y_min: -157,\n y_max: 29,\n ha: 186,\n o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 518,\n y_min: 0,\n y_max: 162,\n ha: 162,\n o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z',\n },\n restHalfLegerLine: {\n x_min: -120,\n x_max: 448,\n y_min: -20,\n y_max: 143,\n ha: 163,\n o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 263,\n y_min: -415,\n y_max: 415,\n ha: 830,\n o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 289,\n y_min: -260,\n y_max: 261,\n ha: 521,\n o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 333,\n y_min: -328,\n y_max: 244,\n ha: 572,\n o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 347,\n y_min: -498,\n y_max: 483,\n ha: 981,\n o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 428,\n y_min: -720,\n y_max: 474,\n ha: 1194,\n o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z',\n },\n rest128th: {\n x_min: 1,\n x_max: 491,\n y_min: -711,\n y_max: 719,\n ha: 1430,\n o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z',\n },\n dynamicPiano: {\n x_min: -49,\n x_max: 327,\n y_min: -142,\n y_max: 515,\n ha: 657,\n o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z',\n },\n dynamicMezzo: {\n x_min: -18,\n x_max: 559,\n y_min: -50,\n y_max: 365,\n ha: 415,\n o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z',\n },\n dynamicForte: {\n x_min: -144,\n x_max: 311,\n y_min: -115,\n y_max: 504,\n ha: 619,\n o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z',\n },\n dynamicRinforzando: {\n x_min: -75,\n x_max: 322,\n y_min: -90,\n y_max: 325,\n ha: 415,\n o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 296,\n y_min: 0,\n y_max: 379,\n ha: 379,\n o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z',\n },\n dynamicZ: {\n x_min: -43,\n x_max: 331,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z',\n },\n ornamentTrill: {\n x_min: 1,\n x_max: 551,\n y_min: -18,\n y_max: 539,\n ha: 557,\n o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 574,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 574,\n y_min: -106,\n y_max: 405,\n ha: 511,\n o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 700,\n y_min: 0,\n y_max: 497,\n ha: 497,\n o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 747,\n y_min: 0,\n y_max: 243,\n ha: 243,\n o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 982,\n y_min: 0,\n y_max: 224,\n ha: 224,\n o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1066,\n y_min: -50,\n y_max: 533,\n ha: 583,\n o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 1088,\n y_min: -380,\n y_max: 252,\n ha: 632,\n o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1185,\n y_min: -380,\n y_max: 465,\n ha: 845,\n o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 1003,\n y_min: -20,\n y_max: 521,\n ha: 541,\n o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1246,\n y_min: -30,\n y_max: 296,\n ha: 326,\n o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1226,\n y_min: -237,\n y_max: 436,\n ha: 673,\n o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 833,\n y_min: -309,\n y_max: 319,\n ha: 628,\n o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z',\n },\n brassScoop: {\n x_min: 0,\n x_max: 312,\n y_min: -390,\n y_max: 28,\n ha: 418,\n o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 476,\n y_min: -50,\n y_max: 333,\n ha: 383,\n o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z',\n },\n brassFallLipShort: {\n x_min: 0,\n x_max: 298,\n y_min: -344,\n y_max: 65,\n ha: 409,\n o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 807,\n y_min: 0,\n y_max: 838,\n ha: 838,\n o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 791,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 381,\n y_min: 0,\n y_max: 367,\n ha: 367,\n o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 274,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z',\n },\n brassMuteOpen: {\n x_min: 1,\n x_max: 313,\n y_min: 0,\n y_max: 309,\n ha: 309,\n o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 402,\n y_min: 0,\n y_max: 361,\n ha: 361,\n o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 646,\n y_min: 0,\n y_max: 212,\n ha: 212,\n o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z',\n },\n brassSmear: {\n x_min: 0,\n x_max: 334,\n y_min: 0,\n y_max: 151,\n ha: 151,\n o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 366,\n ha: 366,\n o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 219,\n y_min: 0,\n y_max: 489,\n ha: 489,\n o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 202,\n ha: 202,\n o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 201,\n y_min: 0,\n y_max: 325,\n ha: 325,\n o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 211,\n y_min: 0,\n y_max: 307,\n ha: 307,\n o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 271,\n y_min: 0,\n y_max: 284,\n ha: 284,\n o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 944,\n y_min: -13,\n y_max: 550,\n ha: 563,\n o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 437,\n y_min: 0,\n y_max: 461,\n ha: 461,\n o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 147,\n y_min: 0,\n y_max: 242,\n ha: 242,\n o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 300,\n y_min: 0,\n y_max: 176,\n ha: 176,\n o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z',\n },\n arpeggiatoUp: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 1459,\n ha: 1459,\n o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z',\n },\n arpeggiatoDown: {\n x_min: 0,\n x_max: 218,\n y_min: 0,\n y_max: 1440,\n ha: 1440,\n o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 599,\n y_min: -250,\n y_max: 175,\n ha: 425,\n o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 775,\n y_min: -247,\n y_max: 363,\n ha: 610,\n o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1374,\n y_min: -304,\n y_max: 304,\n ha: 608,\n o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 630,\n y_min: -225,\n y_max: 265,\n ha: 490,\n o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 506,\n y_min: 0,\n y_max: 500,\n ha: 500,\n o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z',\n },\n csymHalfDiminished: {\n x_min: -32,\n x_max: 496,\n y_min: -33,\n y_max: 492,\n ha: 525,\n o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 530,\n y_min: 0,\n y_max: 539,\n ha: 539,\n o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 593,\n y_min: 0,\n y_max: 569,\n ha: 569,\n o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 482,\n y_min: 193,\n y_max: 265,\n ha: 72,\n o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z',\n },\n csymParensLeftTall: {\n x_min: 0,\n x_max: 185,\n y_min: 0,\n y_max: 1034,\n ha: 1034,\n o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z',\n },\n csymParensRightTall: {\n x_min: -40,\n x_max: 189,\n y_min: 0,\n y_max: 1058,\n ha: 1058,\n o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 328,\n y_min: 2,\n y_max: 807,\n ha: 805,\n o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 829,\n ha: 829,\n o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 116,\n y_min: 0,\n y_max: 934,\n ha: 934,\n o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z',\n },\n csymParensRightVeryTall: {\n x_min: -20,\n x_max: 111,\n y_min: 0,\n y_max: 1009,\n ha: 1009,\n o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 990,\n y_min: -27,\n y_max: 1028,\n ha: 1054,\n o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 208,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 335,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 298,\n y_min: -218,\n y_max: 218,\n ha: 436,\n o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 284,\n y_min: -163,\n y_max: 163,\n ha: 326,\n o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z',\n },\n },\n fontFamily: 'Petaluma',\n resolution: 1000,\n generatedOn: '2022-12-18T09:07:50.817Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { PetalumaFont } from './petaluma_glyphs';\nconst petalumaChordMetrics = {\n csymDiminished: {\n leftSideBearing: -95,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: -25,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 150,\n },\n csymParensRightTall: {\n leftSideBearing: 40,\n advanceWidth: 189,\n yOffset: 150,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 210,\n yOffset: 250,\n },\n csymParensRightVeryTall: {\n leftSideBearing: -100,\n advanceWidth: 111,\n yOffset: 250,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 100,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 0,\n advanceWidth: 425,\n yOffset: -422,\n },\n accidentalFlat: {\n leftSideBearing: -10,\n advanceWidth: 228,\n yOffset: -284,\n },\n};\nexport function loadPetaluma() {\n const metrics = JSON.parse(JSON.stringify(CommonMetrics));\n const chordMetrics = metrics.chordSymbol;\n if (chordMetrics) {\n chordMetrics.glyphs = petalumaChordMetrics;\n }\n Font.load('Petaluma', PetalumaFont, metrics);\n}\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\nexport { Vex };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base.\n// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts\n// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js).\n// ADD_MUSIC_FONT\n// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts.\n// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts.\n// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js\n// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary.\nimport { Font } from '../font';\nimport { BravuraFont } from './bravura_glyphs';\nimport { CommonMetrics } from './common_metrics';\nexport function loadBravura() {\n Font.load('Bravura', BravuraFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { GonvilleSmuflFont } from './gonville_glyphs';\nexport function loadGonville() {\n Font.load('Gonville', GonvilleSmuflFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow.js statically bundles & preloads all of our music engraving fonts.\nimport { loadBravura } from './load_bravura';\nimport { loadCustom } from './load_custom';\nimport { loadGonville } from './load_gonville';\nimport { loadLeland } from './load_leland';\nimport { loadPetaluma } from './load_petaluma';\n// ADD_MUSIC_FONT\n// import { loadXXX } from './load_xxx';\n// Populate our font \"database\" with all our music fonts.\nexport function loadAllMusicFonts() {\n loadBravura();\n loadGonville();\n loadPetaluma();\n loadCustom();\n loadLeland();\n // ADD_MUSIC_FONT\n // loadXXX();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { CustomFont } from './custom_glyphs';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { LelandFont } from './leland_glyphs';\nexport function loadLeland() {\n Font.load('Leland', LelandFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow.ts is the entry point for the build output file vexflow.js.\n// It statically bundles all the music engraving fonts, and sets the music font stack to:\n// Flow.setMusicFont('Bravura', 'Gonville', 'Custom');\n// The webpack config inside Gruntfile.js sets the mode to 'production' to produce a minified build.\nimport { Flow } from '../src/flow';\nimport { loadAllMusicFonts } from '../src/fonts/load_all';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadAllMusicFonts();\nFlow.setMusicFont('Bravura', 'Gonville', 'Custom');\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","Function","e","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","isCategory","category","checkAncestors","constructorFcn","constructor","CATEGORY","getPrototypeOf","isAccidental","Category","Accidental","isAnnotation","Annotation","isBarline","Barline","isDot","Dot","isGraceNote","GraceNote","isGraceNoteGroup","GraceNoteGroup","isNote","Note","isRenderContext","RenderContext","isStaveNote","StaveNote","isStemmableNote","StemmableNote","isTabNote","TabNote","RuntimeError","Error","code","message","super","globalObject","self","defined","x","undefined","log","block","args","line","Array","slice","join","console","warn","err","stack","midLine","a","b","mid_line","n","parseInt","prefix","text","normalizeAngle","Math","PI","sumArray","arr","reduce","Fraction","GCD","Number","isNaN","t","LCM","LCMM","length","shift","numerator","denominator","set","simplify","u","d","gcd","add","param1","param2","otherNumerator","otherDenominator","getNumeratorAndDenominator","lcm","subtract","multiply","divide","equals","compare","__staticFractionA","copy","__staticFractionB","greaterThan","greaterThanEquals","lessThan","lessThanEquals","clone","other","quotient","floor","remainder","makeAbs","abs","toString","toSimplifiedString","__staticFractionTmp","toMixedString","s","q","f","parse","str","i","split","BoundingBox","that","y","w","h","getX","getY","getW","getH","setX","setY","setW","setH","move","mergeWith","boundingBox","new_x","new_y","new_w","max","new_h","BoundingBoxComputation","x1","NaN","y1","x2","y2","getX1","getY1","width","height","addPoint","addX","addY","addQuadraticCurve","p0x","p0y","p1x","p1y","p2x","p2y","p01x","denom","it","p01y","addBezierCurve","p3x","p3y","p0","p1","p2","p3","pow","c","b2ac","t1","sqrt","t2","FontWeight","FontStyle","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","fontParser","Fonts","Font","convertSizeToPixelValue","fontSize","SIZE","_a","scaleToPxFrom","pt","parseFloat","unit","replace","toLowerCase","convertSizeToPointValue","validate","size","weight","style","fromCSSString","family","SANS_SERIF","NORMAL","cssFontShorthand","document","createElement","font","fontFamily","fontWeight","fontStyle","toCSSString","fontInfo","st","trim","wt","sz","scaleSize","scaleFactor","isBold","parsedWeight","isItalic","ITALIC","loadWebFont","fontName","woffURL","includeWoff2","fontFace","FontFace","load","fonts","loadWebFonts","host","WEB_FONT_HOST","files","WEB_FONT_FILES","fontPath","data","metrics","setData","setMetrics","name","getName","getData","getMetrics","hasData","getResolution","resolution","getGlyphs","glyphs","lookupMetric","defaultValue","keyParts","currObj","SERIF","px","em","in","mm","cm","PetalumaScript","Index","id","type","class","Registry","getDefaultRegistry","defaultRegistry","enableDefaultRegistry","registry","disableDefaultRegistry","index","clear","setIndexValue","elem","updateIndex","oldValue","getElementById","getAttribute","register","setAttribute","onRegister","_b","getElementsByAttribute","attribute","index_attr","index_attr_val","keys","map","k","getElementsByType","getElementsByClass","className","onUpdate","info","includes","Element","newID","ID","children","attrs","getCategory","rendered","addChildElement","child","push","setStyle","setGroupStyle","forEach","getStyle","applyStyle","context","save","shadowColor","setShadowColor","shadowBlur","setShadowBlur","fillStyle","setFillStyle","strokeStyle","setStrokeStyle","lineWidth","setLineWidth","restoreStyle","restore","drawWithStyle","checkContext","draw","hasClass","indexOf","addClass","removeClass","splice","isRendered","setRendered","getAttributes","getSVGElement","suffix","element","oldID","getBoundingBox","getContext","setContext","setFont","textFont","defaultTextFont","TEXT_FONT","fontIsObject","fontIsString","fontIsUndefined","sizeWeightStyleAreUndefined","assign","getFont","resetFont","setFontSize","getFontSize","fontSizeInPoints","fontSizeInPixels","RESOLUTION","durations","durationAliases","keySignatures","C","num","Am","F","acc","Dm","Bb","Gm","Eb","Cm","Ab","Fm","Db","Bbm","Gb","Ebm","Cb","Abm","G","Em","D","Bm","A","E","B","clefs","treble","line_shift","bass","tenor","alto","soprano","percussion","subbass","french","notesInfo","int_val","CN","accidental","CB","CBB","DN","DB","DBB","EN","EB","EBB","FN","FB","FBB","GN","GB","GBB","AN","AB","ABB","BN","BB","BBB","R","rest","X","octave","shift_right","accidentals","parenRightPaddingAdjustment","bb","db","bs","bss","bbs","ashs","afhf","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","articulations","between_lines","av","aboveCode","belowCode","ao","ah","am","ornaments","mordent","mordent_inverted","turn","turn_inverted","tr","upprall","downprall","prallup","pralldown","upmordent","downmordent","lineprall","prallprall","scoop","doit","fall","doitLong","fallLong","bend","plungerClosed","plungerOpen","flip","jazzTurn","smear","Tables","currentMusicFont","MUSIC_FONT_STACK","clefProperties","clef","keyProperties","keyOctaveGlyph","params","options","octave_shift","duration","sanitizeDuration","pieces","toUpperCase","stroke","int_value","customNoteHeadProps","glyphName","codeNoteHead","displaced","integerToNote","integer","noteValue","tabToGlyphProps","fret","scale","glyph","shift_y","glyphMetrics","Glyph","TABLATURE_FONT_SCALE","textWidth","getWidth","articulationCodes","artic","accidentalCodes","ornamentCodes","keySignature","spec","keySpec","notes","acc_list","getKeySignatures","hasKeySignature","durationNumber","durationToFraction","durationToNumber","durationToTicks","ticks","getGlyphProps","durationCodes","glyphTypeProperties","code_head","common","NOTATION_FONT_SCALE","UNISON","SOFTMAX_FACTOR","STEM_WIDTH","STEM_HEIGHT","STAVE_LINE_THICKNESS","RENDER_PRECISION_PLACES","SLASH_NOTEHEAD_WIDTH","STAVE_LINE_DISTANCE","TEXT_HEIGHT_OFFSET_HACK","accidentalMap","accidentalColumnsTable","second_on_bottom","spaced_out_tetrachord","spaced_out_pentachord","very_spaced_out_pentachord","spaced_out_hexachord","very_spaced_out_hexachord","unicode","sharp","String","fromCharCode","flat","natural","triangle","degrees","circle","validTypes","m","ci","cx","sf","sb","sq","tu","td","TIME4_4","num_beats","beat_value","stem","flag","stem_up_extension","stem_down_extension","tabnote_stem_up_extension","tabnote_stem_down_extension","dot_shiftY","line_above","line_below","position","ledger_code_head","beam_count","stem_beam_extension","code_flag_upstem","code_flag_downstem","OutlineCode","ModifierPosition","GlyphCacheEntry","fontStack","point","loadMetrics","bbox","getOutlineBoundingBox","outline","x_shift","y_shift","lookupFontMetric","GlyphOutline","originX","originY","precision","round","nextX","nextY","parts","MOVE","LINE","QUADRATIC","BEZIER","lookupGlyph","x_min","x_max","ha","cached_outline","renderGlyph","ctx","x_pos","y_pos","cache","lookup","customScale","renderOutline","go","beginPath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","fill","bboxComp","penX","penY","topGlyphs","botGlyphs","originShift","setOptions","reset","getCode","setPoint","setStave","stave","getXShift","setXShift","getYshift","setYShift","checkMetrics","metricsScale","setOriginX","xShift","setOriginY","yShift","setOrigin","render","xPos","yPos","checkStave","renderToStave","getYForGlyphs","Map","entries","CURRENT_CACHE_KEY","entry","Modifier","Position","PositionString","center","CENTER","above","ABOVE","below","BELOW","left","LEFT","right","RIGHT","text_line","spacingFromNextModifier","setWidth","getNote","note","checkAttachedNote","setNote","getIndex","checkIndex","setIndex","getModifierContext","modifierContext","checkModifierContext","setModifierContext","getPosition","setPosition","setTextLine","setSpacingFromNextModifier","getSpacingFromNextModifier","alignSubNotesWithNote","subNotes","tickContext","getTickContext","getStave","subNoteXOffset","modLeftPx","modRightPx","subNote","subTickContext","setXOffset","Music","NUM_TONES","canonical_notes","roots","root_values","root_indices","diatonic_intervals","diatonic_accidentals","unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","intervals","b2","min2","S","H","maj2","T","W","b3","min3","maj3","b5","aug4","b6","aug5","maj6","m7","min7","dom7","maj7","scales","major","minor","ionian","dorian","phyrgian","lydian","mixolydian","aeolian","locrian","scaleTypes","M","noteValues","root_index","cn","cb","cbb","dn","dbb","en","eb","ebb","fn","fb","fbb","gn","gb","gbb","an","ab","abb","bn","bbb","isValidNoteValue","isValidIntervalValue","interval","getNoteParts","noteString","match","exec","getKeyParts","keyString","getNoteValue","getIntervalValue","intervalString","getCanonicalNoteName","getCanonicalIntervalName","intervalValue","getRelativeNoteValue","direction","sum","getRelativeNoteName","rootValue","multiplier","reverse_interval","relativeNoteName","getScaleTones","tones","nextNote","getIntervalBetween","note1","note2","difference","createScaleMap","keySigParts","scaleName","keySigString","noteLocation","scaleMap","rootName","noteName","L","DEBUG","format","state","musicFont","noteheadAccidentalPadding","leftShift","left_shift","accidentalSpacing","additionalPadding","accidentalLinePositionsAndSpaceNeeds","prevNote","extraXSpaceNeededForLeftDisplacedNotehead","props","getKeyProps","getLeftDisplacedHeadPx","lineSpace","getSpacingBetweenLines","getYForLine","accLine","extraXSpaceNeeded","spacingBetweenStaveLines","sort","staveLineAccidentalLayoutMetrics","maxExtraXSpaceNeeded","accidentalLinePositionAndSpaceNeeds","priorLineMetric","currentLineMetric","flatLine","dblSharpLine","numAcc","column","totalColumns","noFurtherConflicts","groupStart","groupEnd","checkCollision","getGroupLine","getGroupLines","indexes","lineDifference","indexA","indexB","item","notColliding","indexPairs","every","line1","line2","groupLength","groupMember","endCase","patternLength","collisionDetected","columnWidths","columnXOffsets","totalShift","accCount","lastAccOnLine","clearance","clearanceRequired","collision","applyAccidentals","voices","tickPositions","tickNoteMap","voice","tickPosition","getTickables","shouldIgnoreTicks","notesAtPosition","getTicks","music","scaleMapKey","tickPos","tickables","modifiedPitches","processNote","isRest","staveNote","keyIndex","accidentalString","pitch","sameAccidental","previouslyModified","getModifiers","modifier","addModifier","getGraceNotes","render_options","font_scale","parenLeftPadding","parenRightPadding","cautionary","fontScale","parenLeft","parenRight","parenWidth","setAsCautionary","start","getModifierStartXY","accX","accY","Stem","UP","DOWN","WIDTH","HEIGHT","stem_up_y_offset","stem_down_y_offset","stem_up_y_base_offset","stem_down_y_base_offset","x_begin","x_end","y_top","y_bottom","stem_extension","stem_direction","hide","isStemlet","stemletHeight","renderHeightAdjustment","setNoteHeadXBounds","setDirection","setExtension","ext","getExtension","setYBounds","getHeight","y_offset","getExtents","isStemUp","ys","stemHeight","innerMostNoteheadY","min","outerMostNoteheadY","topY","baseY","setVisibility","isVisible","setStemlet","adjustHeightForFlag","adjustHeightForBeam","stem_x","stem_y","y_base_offset","stemletYOffset","openGroup","pointerBBox","closeGroup","TextFormatter","textWidthCache","textHeightCache","getFontFamilies","registeredFonts","formatterInfo","create","requestedFont","candidates","requestedFamilies","requestedFamily","startsWith","formatter","values","bold","italic","perfectMatch","find","partialMatch","fontSizeInPt","getInfo","registerInfo","overwrite","serifs","monospaced","superscriptOffset","subscriptOffset","maxSizeGlyph","cacheKey","updateParams","localHeightCache","updateCacheKey","BOLD","getGlyphMetrics","character","maxHeight","getWidthForCharacterInEm","advanceWidth","getYForCharacterInPx","rv","yMin","yMax","y_min","y_max","getYForStringInPx","extent","curY","getWidthForTextInEm","cachedWidths","getWidthForTextInPx","AnnotationHorizontalJustify","AnnotationVerticalJustify","minAnnotationPadding","annotations","leftWidth","rightWidth","maxLeftGlyphWidth","maxRightGlyphWidth","annotation","textFormatter","verticalSpaceNeeded","glyphWidth","horizontalJustification","stemDirection","hasStem","getStemDirection","lines","draw_stem","getStem","getNoteType","getNumLines","verticalJustification","VerticalJustify","TOP","noteLine","getLineNumber","leastString","top_text_line","BOTTOM","greatestString","curBottom","rightOverlap","right_shift","leftOverlap","setVerticalJustification","just","VerticalJustifyString","getJustification","setJustification","HorizontalJustifyString","text_width","text_height","getStemX","stem_ext","spacing","has_stem","checkStem","getYs","yt","getYForTopText","getYForBottomText","getTopLineTopY","extents","getStemExtents","fillText","HorizontalJustify","centerStem","CENTER_STEM","top","bottom","roundToNearestHalf","mathFn","isWithinLines","getRoundingFunction","ceil","isStaveOrGraceNote","Articulation","maxGlyphWidth","getIncrement","articulation","increment","curTop","maxWidth","articWidth","overlap","easyScoreHook","builder","articNameToCode","staccato","tenuto","accent","articString","getFactory","endsWith","setBetweenLines","betweenLines","textLine","canSitBetweenLines","staffSpace","isTab","shouldSitOutsideStaff","initialOffset","isOnStemTip","getInitialOffset","padding","stemTipY","stemBaseY","getTopY","INITIAL_OFFSET","getBottomY","offsetDirection","articLine","snappedLine","snapLineToStaff","setRawFont","drawDot","color","arc","closePath","Tickable","_preFormatted","_postFormatted","intrinsicTicks","tickMultiplier","modifiers","tupletStack","align_center","center_x_shift","ignore_ticks","formatterMetrics","freedom","iterations","space","used","mean","deviation","setIgnoreTicks","checkTickContext","getFormatterMetrics","getCenterXShift","isCenterAligned","setCenterXShift","centerXShift","setCenterAlignment","getVoice","setVoice","getTuplet","tuplet","getTupletStack","resetTuplet","noteCount","notesOccupied","getNoteCount","getNotesOccupied","applyTickMultiplier","pop","setTuplet","addToModifierContext","mc","addMember","setTickContext","tc","preFormat","preFormatted","postFormat","postFormatted","getIntrinsicTicks","setIntrinsicTicks","getTickMultiplier","setDuration","getAbsoluteX","plotMetrics","xStart","leftDisplacedHeadPx","xPre1","xAbs","xPost1","notePx","xPost2","rightDisplacedHeadPx","xEnd","xFreedomRight","xWidth","yy","spaceDeviation","parseDuration","durationString","dots","parseNoteStruct","noteStruct","durationProps","customTypes","currentTicks","parsedNoteStruct","JSON","stringify","keyProps","noteType","duration_override","glyphProps","customGlyphs","playNote","annotation_spacing","glyph_font_scale","stroke_px","getPlayNote","setPlayNote","addStroke","setYs","getRightDisplacedHeadPx","setLeftDisplacedHeadPx","setRightDisplacedHeadPx","isTopNote","getLineForRest","getGlyph","getGlyphWidth","getDuration","isDotted","getModifiersByType","getBeam","beam","checkBeam","hasBeam","setBeam","signature","filter","getRightParenthesisPx","getLeftParenthesisPx","getFirstDotPx","getMembers","getState","glyphPx","getNoteStartX","getPoint","getTieRightX","tieStartX","getTieLeftX","tieEndX","getKeys","StaveModifierPosition","BarlineType","ChordSymbolHorizontalJustify","ChordSymbolVerticalJustify","SymbolTypes","SymbolModifiers","StaveModifier","placeGlyphOnLine","customShift","getPadding","setPadding","setLayoutMetrics","layoutMetrics","getLayoutMetrics","typeString","single","SINGLE","double","DOUBLE","end","END","repeatBegin","REPEAT_BEGIN","repeatEnd","REPEAT_END","repeatBoth","REPEAT_BOTH","none","NONE","thickness","TYPE","widths","paddings","layoutMetricsMap","xMin","xMax","paddingLeft","paddingRight","BEGIN","setType","getType","drawVerticalBar","drawVerticalEndBar","drawRepeatBar","double_bar","staveCtx","botY","getBottomLineBottomY","fillRect","begin","dot_x","dot_radius","dot_y","BarNote","barline","Bend","bends","last_width","stringPos","release","phrase","tap","line_width","line_style","bend_width","release_width","updateWidth","setTap","getText","getTextHeight","totalWidth","additional_width","draw_width","lowestY","bend_height","annotation_y","renderBend","cp_x","cp_y","renderRelease","renderArrowHead","yBase","renderText","render_x","measureText","last_bend","last_bend_draw_width","last_drawn_width","ChordSymbol","superSubRatio","global","NO_TEXT_FORMAT","val","noFormat","getMetricForGlyph","glyphCode","engravingFontResolution","spacingBetweenBlocks","getWidthForGlyph","metric","getYShiftForGlyph","yOffset","getXShiftForGlyph","leftSideBearing","kerningOffset","chordSymbol","lowerKerningText","upperKerningText","isSuperscript","symbolModifier","SUPERSCRIPT","isSubscript","SUBSCRIPT","minPadding","symbols","nonSuperWidth","symbol","fontAdj","glyphAdj","symbolWidth","lineSpaces","vAlign","j","symbolBlocks","sup","sub","superSubScale","adj","symbolType","GLYPH","superSubFontSize","TEXT","getYOffsetForText","over","prev","setEnableKerning","updateKerningAdjustments","updateOverBarAdjustments","getVertical","getReportWidth","getHorizontal","horizontal","vertical","useKerning","reportWidth","setReportWidth","barIndex","findIndex","xoff","yoff","symIndex","accum","getKerningAdjustment","currSymbol","prevSymbol","adjustment","preKernUpper","preKernLower","some","xx","kerningOffsetPixels","getSymbolBlock","_c","symbolBlock","glyphArgs","glyphPoints","addSymbolBlock","parameters","addText","addTextSuperscript","addTextSubscript","addGlyphSuperscript","addGlyph","addGlyphOrText","char","addLine","setVertical","vj","setHorizontal","hj","stem_base","isSuper","isSub","smallerFontSize","diminished","dim","halfDiminished","augmented","majorSeventh","leftParen","rightParen","leftBracket","rightBracket","leftParenTall","rightParenTall","symbolTypes","symbolModifiers","getDots","buildAndAttach","all","dot","setDotShiftY","dot_list","max_shift_map","note_id","dot_shift","x_width","last_line","last_note","prev_dotted_space","half_shiftY","radius","forceFlagRight","FretHandFinger","nums","nums_list","prev_note","shiftLeft","shiftRight","pos","textHeight","shiftL","shiftR","numShiftL","numShiftR","xWidthL","xWidthR","lastLine","lastNote","num_shift","numWidth","fingerings","fingeringString","number","Fingering","fingering","finger","x_offset","setFretHandFinger","getFretHandFinger","setOffsetX","setOffsetY","NoteHead","custom_glyph","stem_up_x_offset","stem_down_x_offset","note_type","glyph_code","custom_glyph_code","slashed","isDisplaced","getLine","setLine","displacementStemAdjustment","fontShift","displacedFontShift","half_spacing","min_y","getYForNote","head_x","categorySuffix","staveSpace","breve_lines","drawSlashNoteHead","setStem","buildStem","buildFlag","hasFlag","flagCode","getBaseCustomNoteHeadGlyphProps","getStemLength","getStemExtension","getBeamCount","getStemMinimumLength","setStemDirection","offsets","offsetYBaseStemUp","offsetYTopStemUp","offsetYBaseStemDown","offsetYTopStemDown","getCenterGlyphX","stem_extension_override","setStemLength","drawStem","stemOptions","shiftRestVertical","dir","delta","maxLine","minLine","setKeyLine","getKeyLine","STEM_UP","STEM_DOWN","LEDGER_LINE_OFFSET","minNoteheadPadding","notesList","sortedKeyProps","minL","stemMax","stemMin","maxL","isrest","voice_shift","getVoiceShiftWidth","is_displaced","noteU","noteM","noteL","voiceXShift","lineSpacing","lineDiff","noteUHead","noteLHead","centerRest","ledgerLineStyle","use_default_head_x","_noteHeads","calculateKeyProps","auto_stem","autoStem","noteHeadStyles","noteHead","buildNoteHeads","noteHeadStyle","calcNoteDisplacements","noteProps","notehead","calculateOptimalStemDirection","minY","maxY","halfLineSpacing","frac","resultLine","thisLine","isChord","getNoteHeadBounds","setNoteDisplaced","getRightShift","restLine","isInnerNoteIndex","setStemStyle","getStemStyle","setLedgerLineStyle","getLedgerLineStyle","setFlagStyle","getFlagStyle","setKeyStyle","noteHeadPadding","shouldDrawFlag","nonDisplacedX","displacedX","highestDisplacedLine","lowestDisplacedLine","yTop","Infinity","yBottom","highestLine","lowestLine","highestNonDisplacedLine","lowestNonDisplacedLine","displaced_x","non_displaced_x","highest_line","lowest_line","highest_displaced_line","lowest_displaced_line","highest_non_displaced_line","lowest_non_displaced_line","getNoteHeadBeginX","getNoteHeadEndX","noteHeads","note_heads","drawLedgerLines","doubleWidth","min_x","drawLedgerLine","normal","ledgerWidth","getDefaultLedgerLineStyle","drawModifiers","noteheadParam","noteheadStyle","hasNoBeam","drawFlag","_d","_e","noteStemHeight","flagX","flagY","getStaveNoteScale","drawNoteHeads","super_stem_extension","mid_line_distance","lines_over_octave_from_mid_line","spacing_between_lines","xBegin","shouldRenderStem","stemX","StaveTie","setNotes","cp1","cp2","text_shift_x","first_x_shift","last_x_shift","tie_spacing","first_note","first_indices","last_indices","isPartial","renderTie","first_ys","last_ys","last_x_px","first_x_px","first_y_px","last_y_px","top_cp_y","bottom_cp_y","center_x","getNotes","getTieStartX","getTieEndX","TabTie","createHammeron","createPulloff","VoiceMode","Voice","Mode","time","voiceTime","resolutionMultiplier","mode","STRICT","ticksUsed","largestTickWidth","softmaxFactor","totalTicks","smallestTickCount","getTotalTicks","getTicksUsed","getLargestTickWidth","getSmallestTickCount","getMode","setMode","getResolutionMultiplier","getActualResolution","tickable","setStrict","strict","SOFT","isComplete","FULL","setSoftmaxFactor","factor","expTicksUsed","reCalculateExpTicksUsed","softmax","tickValue","v","exp","addTickable","addTickables","gracenote_groups","group_list","gracenote_group","is_stavenote","formatWidth","group_shift","grace_notes","show_slur","slur","slur_y_shift","beams","Formatter","joinVoices","getMinTotalWidth","beamNotes","Beam","beam_width","partial_beam_length","graceNote","TieClass","NoteSubGroup","groups","group","Ornament","ornament","ornamentRelease","ornamentAttack","reportedWidth","ornamentArticulation","ornamentNoteTransition","ornamentAlignWithNoteHead","ornamentMetrics","delayed","accidentalLowerPadding","accidentalUpperPadding","adjustForStemDirection","stemUpYOffset","xOffset","setDelayed","setUpperAccidental","accid","accidentalUpper","setLowerAccidental","accidentalLower","stemDir","stemExtents","isPlacedOnNoteheadSide","glyphYBetweenLines","glyphX","glyphY","delayXShift","startX","nextContext","Parenthesis","parentheses","x_widthL","x_widthR","parenthesis","isHTMLCanvas","HTMLCanvasElement","toDataURL","isHTMLDiv","HTMLDivElement","appendChild","CanvasContext","CANVAS_BROWSER_SIZE_LIMIT","sanitizeCanvasDims","limit","context2D","canvas","clearRect","cls","setBackgroundFillStyle","blur","getTransform","setLineCap","capType","lineCap","setLineDash","dash","resize","devicePixelRatio","dpr","rect","cp1x","cp1y","cp2x","cp2y","cpx","cpy","startAngle","endAngle","counterclockwise","fontBoundingBoxAscent","fontBoundingBoxDescent","actualBoundingBoxAscent","actualBoundingBoxDescent","ATTRIBUTES_TO_IGNORE","path","SVG_NS","TWO_PI","SVGContext","backgroundFillStyle","fontCSSString","svg","parent","pen","defaultFontAttributes","scaleX","scaleY","attributes","groupAttributes","applyAttributes","shadow_attributes","state_stack","svgElementType","createElementNS","lineDash","visibleWidth","visibleHeight","setViewBox","viewBox_or_minX","viewBoxString","attrNamesToIgnore","nodeName","attrName","setAttributeNS","lastChild","removeChild","rectangle","x0","cos","y0","sin","tmpStartTest","tmpEndTest","large","sweep","getShadowStyle","sa","measureTextCache","txt","textContent","savedState","fontAttributes","RendererBackends","RendererLineEndType","TextJustification","VoltaType","measureImpl","getBBox","Renderer","buildContext","elementId","backend","background","renderer","lastContext","getCanvasContext","Backends","CANVAS","getSVGContext","SVG","drawDashedLine","fromX","fromY","toX","toY","dashPattern","dx","dy","angle","atan2","idx","dashLength","nx","ny","arg0","arg1","maybeElement","willReadFrequently","LineEndType","StringNumber","stringNumber","verticalPadding","stemPadding","leftPadding","rightPadding","extraXSpaceForDisplacedNotehead","glyphLine","num_shiftR","num_width","num_x_shift","string_number","stem_offset","dashed","leg","drawCircle","setLineEndType","setStringNumber","setLastNote","setDashed","setDrawCircle","len","pattern","Stroke","strokes","strokeList","string","getPositions","strokeShift","all_voices","addEndNote","note_end","line_space","arrow","arrow_shift_x","arrow_y","text_y","Type","BRUSH_DOWN","BRUSH_UP","ROLL_DOWN","RASQUEDO_DOWN","ROLL_UP","RASQUEDO_UP","ARPEGGIO_DIRECTIONLESS","strokeLine","Vibrato","vibratos","vibrato","harsh","vibrato_width","wave_height","wave_width","wave_girth","setVibratoWidth","setHarsh","vx","vy","renderVibrato","opts","num_waves","ModifierContext","members","formatted","member","getLeftShift","Clef","types","tab","annotationSmufl","attachment","KeySignature","cancelKeySpec","alterKeySpec","accList","setKeySig","glyphFontScale","xPositions","paddingForced","convertToGlyph","nextAcc","accGlyphData","extraWidth","xPosition","cancelKey","convertToCancelAccList","cancel_accList","different_types","naturals","cancelled","concat","addToStave","convertAccLines","customLines","offset","alterKey","convertToAlterAccList","firstAccidentalType","cancelAccList","getEndClef","getClef","Repetition","symbol_type","setShiftX","setShiftY","CODA_RIGHT","drawCodaFixed","CODA_LEFT","drawSymbolText","SEGNO_LEFT","drawSignoFixed","SEGNO_RIGHT","DC","DC_AL_CODA","DC_AL_FINE","DS","DS_AL_CODA","DS_AL_FINE","FINE","TO_CODA","draw_coda","text_x","symbol_x","modifierWidth","getVerticalBarWidth","StaveSection","section","drawRect","shift_x","setStaveSection","textY","headroom","StaveTempo","tempo","setTempo","bpm","noteTextFont","noteTextFormatter","stem_height","flagMetrics","TextNote","GLYPHS","segno","mordent_upper","mordent_lower","p","z","coda","pedal_open","pedal_close","caesura_straight","caesura_curved","breath","tick","superscript","subscript","smooth","justification","struct","Justification","StaveText","setStaveText","setText","getBottomLineY","Volta","volta","top_y","vert_height","BEGIN_END","TimeSignatureGlyph","timeSignature","topDigits","botDigits","topWidth","timeSigType","topGlyph","botWidth","botGlyph","lineShift","topStartX","botStartX","start_x","topLine","bottomLine","TimeSignature","timeSpec","customPadding","validate_args","is_numeric","fontLineShift","setTimeSig","parseTimeSpec","numbers","test","assertIsValidTimeSig","makeTimeSignatureGlyph","setGlyph","getTimeSpec","getIsNumeric","setIsNumeric","isNumeric","SORT_ORDER_BEG_MODIFIERS","SORT_ORDER_END_MODIFIERS","Stave","defaultPadding","end_x","measure","endClef","vertical_bar_width","num_lines","fill_style","left_bar","right_bar","spacing_between_lines_px","space_above_staff_ln","space_below_staff_ln","top_text_position","bottom_text_position","line_config","bounds","defaultLedgerLineStyle","resetLines","addEndModifier","setDefaultLedgerLineStyle","visible","setNoteStartX","getNoteEndX","setNumLines","mod","setMeasure","getMeasure","getModifierXShift","begBarline","setRepetitionType","setVoltaType","number_t","setSection","staveSection","getLineForY","setBegBarType","setEndBarType","setClefLines","clefSpec","setClef","addClef","setEndClef","setKeySignature","addKeySignature","setEndKeySignature","setTimeSignature","timeSignatures","addTimeSignature","setEndTimeSignature","addEndClef","addEndTimeSignature","addTrebleGlyph","noPosition","noCategory","sortByCategory","items","order","temp","endBarline","begModifiers","endModifiers","lastBarlineIdx","getConfigForLines","setConfigForLine","line_number","setConfigForLines","lines_configuration","formatBegModifiers","staves","adjustCategoryStartX","minStartX","adjustX","allModifiers","bAdjust","maxX","drawBoldDoubleLine","topX","StaveConnector","BOLD_DOUBLE_LEFT","BOLD_DOUBLE_RIGHT","variableWidth","top_stave","bottom_stave","texts","newType","content","SINGLE_RIGHT","THIN_DOUBLE","attachment_height","SINGLE_LEFT","BRACE","x3","y3","cpx1","cpy1","cpx2","cpy2","cpx3","cpy3","cpx4","cpy4","cpx5","cpy5","cpx6","cpy6","cpx7","cpy7","cpx8","cpy8","BRACKET","singleRight","singleLeft","brace","bracket","boldDoubleLeft","boldDoubleRight","thinDouble","TickContext","getNextContext","tContext","contexts","tContexts","tickID","currentTick","maxTicks","maxTickable","minTicks","minTickable","xBase","tickablesByVoice","totalLeftPx","totalRightPx","getTickID","getXBase","setXBase","getXOffset","getMaxTicks","getMinTicks","getMaxTickable","getMinTickable","getTickableForVoice","voiceIndex","getTickablesByVoice","getCenterAlignedTickables","getCurrentTick","setCurrentTick","getRestLineForNextNoteGroup","currRestLine","currNoteIndex","nextRestLine","noteIndex","SimpleFormat","paddingBetween","accumulator","plotDebugging","stavePadding","contextGaps","gaps","gap","totalCost","toFixed","total","FormatAndDraw","auto_beam","align_rests","applyAndGetBeams","formatToStave","FormatAndDrawTab","tabstave","tabnotes","autobeam","notevoice","tabvoice","AlignRestsToNotes","alignAllNotes","alignTuplets","currTickable","prevTickable","formatterOptions","globalSoftmax","maxIterations","justifyWidth","durationStats","minTotalWidth","hasMinTotalWidth","tickContexts","array","list","modifierContexts","lossHistory","alignRests","preCalculateMinTotalWidth","unalignedPadding","unalignedCtxCount","wsum","dsum","createTickContexts","contextList","contextMap","wavg","wvar","ll","wpads","davg","dvar","dpads","padmax","unalignedPad","createModifierContexts","tickToContextMap","integerTicks","staveTickToContextMap","newContext","makeContext","addToContext","tickList","createContexts","contextArray","getTickContexts","renderingContext","voicesParam","evaluate","firstContext","calculateIdealDistances","adjustedJustifyWidth","backTickable","prevContext","backVoices","matchingVoices","maxNegativeShiftPx","expectedDistance","thisTickable","insideLeftEdge","backMetrics","insideRightEdge","fromTickable","fromTickablePx","shiftToIdealDistances","idealDistances","centerX","spaceAccum","contextX","ideal","errorPx","negativeShiftPx","configMinPadding","configMaxPadding","targetWidth","distances","actualWidth","minDistance","mdCalc","di","calcMinDistance","paddingMaxCalc","curTargetWidth","lastTickablePadding","lastTickable","tickWidth","paddingMax","paddingMin","prevTick","prevMetrics","currMetrics","leftNoteEdge","rightNote","rightMetrics","stats","count","updateStats","totalDeviation","tune","alpha","current","cost","optionsParam","TupletLocation","Tuplet","LOCATION_TOP","LOCATION_BOTTOM","NESTING_OFFSET","tupletMetrics","numerator_glyphs","denom_glyphs","num_notes","beats_occupied","beatsOccupiedDeprecationWarning","notes_occupied","bracketed","ratioed","setTupletLocation","location","resolveGlyphs","attach","detach","setBracketed","setRatioed","getBeatsOccupied","setBeatsOccupied","beats","setNotesOccupied","unshift","getNestedTupletCount","maxTupletCount","countTuplets","minTupletCount","tupletCount","getYPosition","nested_tuplet_y_offset","topModifierOffset","modLines","modY","noteHeadOffset","stemOffset","lineCheck","nn","bottom_y","addGlyphWidth","notation_start_x","shiftY","colon_x","colon_radius","calculateStemDirection","lineSum","keyProp","BEAM_LEFT","BEAM_RIGHT","BEAM_BOTH","getDefaultBeamGroups","time_sig","beatTotal","beatValue","generateBeams","config","tickGroups","unprocessedNotes","currentTickGroup","noteGroups","currentGroup","nextTickGroup","nextGroup","currentGroupTotalTicks","unprocessedNote","ticksPerGroup","vf_notes","memo","unbeamable","createGroups","sanitizedGroups","tempGroup","isFirstOrLast","breaksOnEachRest","beam_rests","breaksOnFirstOrLastRest","beam_middle_only","breakOnStemChange","maintain_stem_directions","prevDirection","isUnbeamableDuration","sanitizeGroups","findFirstNote","applyStemDirection","beamedNoteGroups","beamable","allTuplets","uniqueTuplets","noteTuplet","getTuplets","show_stemlets","secondary_breaks","secondary_break_ticks","flat_beams","flat_beam_offset","slope","forcedPartialDirections","stem_weight","break_on_indices","max_slope","min_slope","slope_iterations","slope_cost","stemlet_extension","min_flat_beam_offset","beamCount","breakSecondaryAt","indices","setPartialBeamSideAt","side","unsetPartialBeamSideAt","getSlopeY","calculateSlope","firstNote","initialSlope","firstStemTipY","firstStemX","getStemSlope","minCost","MAX_VALUE","bestSlope","totalStemExtension","yShiftTemp","adjustedStemTipY","diff","idealSlope","calculateFlatSlope","extremeY","extremeBeamCount","currentExtreme","extremeTest","newOffset","getBeamYToDraw","beamY","applyStemExtensions","beamedStemTipY","preBeamExtension","beamExtension","crossStemExtension","totalBeamWidth","lookupBeamDirection","prev_tick","next_tick","forcedBeamDirection","lookup_duration","prev_note_gets_beam","next_note_gets_beam","note_gets_beam","getBeamLines","tick_of_duration","beam_started","beam_lines","current_beam","previous_should_break","tick_tally","should_break","next_note","beam_alone","beam_direction","last_beam","drawStems","drawBeamLines","valid_beam_durations","beamThickness","beamLines","beam_line","startBeamX","startBeamY","lastBeamX","lastBeamY","ClefNote","abs_x","Crescendo","extend_left","extend_right","decrescendo","setHeight","setDecrescendo","decresc","tick_context","next_context","begin_x","half_height","reverse","renderHairpin","CurvePosition","Curve","nearHead","NEAR_HEAD","nearTop","NEAR_TOP","from","to","position_end","invert","cps","renderCurve","first_x","first_y","last_x","last_y","cp0x","cp0y","cp_spacing","end_metric","Parser","flattenMatches","matchedString","results","grammar","errorPos","expect","matchFail","returnPos","matchSuccess","matchToken","token","noSpace","regexp","RegExp","success","incrementPos","expectOne","rule","maybe","allMatches","oneMatch","localPos","or","gotOne","numMatches","expectOneOrMore","more","expectZeroOrMore","ruleFunc","bind","oneOrMore","zeroOrMore","matches","run","EasyScore","EasyScoreGrammar","PIECE","PIECES","EOL","CHORDORNOTE","PARAMS","commitPiece","COMMA","DURATION","DOTS","OPTS","CHORD","SINGLENOTE","LPAREN","NOTES","RPAREN","addChord","NOTE","NOTENAME","ACCIDENTAL","OCTAVE","addSingleNote","MICROTONES","ACCIDENTALS","DOT","setNoteDots","SLASH","MAYBESLASH","TYPES","setNoteType","DURATIONS","setNoteDuration","LBRACKET","KEYVAL","KEYVALS","RBRACKET","KEY","EQUALS","VAL","addNoteOption","SVAL","DVAL","Piece","chord","Builder","commitHooks","elements","rollingDuration","resetPiece","getElements","addCommitHook","commitHook","piece","addNote","standardAccidentals","notePiece","GhostNote","setId","commaSeparatedRegex","setClass","defaults","throwOnError","parser","ERROR_MSG","parameter","GlyphNote","ignoreTicks","SCALE","slash","ret","staveNoteScale","offsetScale","slashBBox","calcBeamedNotesSlashBBox","noteHeadBounds","defaultStemExtention","defaultOffsetY","slashStemOffset","slashBeamOffset","protrusions","beam_slope","beam_angle","atan","iPointOnBeam","slash_angle","protrusion_stem_dx","protrusion_stem_dy","protrusion_beam_dx","protrusion_beam_dy","stem0X","stemY","KeySigNote","semibreve_rest","MultiMeasureRest","number_of_measures","xs","hasPaddingLeft","hasPaddingRight","hasLineThickness","hasSymbolSpacing","padding_left","padding_right","line_thickness","symbol_spacing","use_symbols","show_number","number_line","number_glyph_point","serif_thickness","semibreve_rest_glyph_scale","getXs","drawLine","spacingBetweenLines","lineThicknessHalf","serifThickness","bot","leftIndented","rightIndented","lineTop","lineBottom","drawSymbols","n4","n2","n1","get_semibreve_rest","rest_scale","rest_width","yMiddle","timeSig","drawPedalGlyph","glyph_data","PedalMarking","createSustain","createSostenuto","pedal","MIXED","setCustomText","createUnaCorda","custom_depress_text","custom_release_text","bracket_height","text_margin_right","bracket_line_width","depress","drawBracketed","prev_x","prev_y","is_pedal_depressed","next_is_same","prev_is_same","drawText","pedal_depress","pedal_release","mixed","CODES","RepeatNote","drawArrowHead","StaveLine","line_dash","rounded_end","draw_start_arrow","draw_end_arrow","arrowhead_length","arrowhead_angle","text_position_vertical","TextVerticalPosition","text_justification","applyLineStyle","applyFontStyle","drawArrowLine","pt1","pt2","both_arrows","distance","ratio","end_y","start_y","line_angle","angle1","angle2","top_x","bottom_x","start_position","end_position","first_index","last_index","upwards_slope","notehead_width","vertical_position","System","partStaves","partStaveInfos","partVoices","spaceBetweenStaves","autoWidth","noJustification","debugFormatter","formatIterations","noPadding","details","formatOptions","getStaves","getVoices","addConnector","connector","addStave","staveOptions","spaceAbove","spaceBelow","debugNoteMetrics","addVoices","options_details","debugNoteMetricsYs","part","lastY","glyphPropsArr","positions","ghost","draw_dots","draw_stem_through_stave","setGhost","getStemY","stemDownLine","stemStartLine","flag_x","flag_y","drawStemThrough","stemThrough","stemLines","unused_strings","up_stem","down_stem","line_spacing","total_lines","stem_lines","strings","containsLastString","containsFirstString","line_ys","isTopBound","isBottomBound","getPartialStemLines","strings_used","stem_through","getUnusedStringGroups","drawPositions","tab_x","render_stem","TabStave","addTabGlyph","TextBracket","TextBracketPosition","Positions","PositionsString","stop","show_bracket","underline_superscript","main_measure","main_width","main_height","super_y","super_measure","super_width","super_height","line_y","TextDynamics","sequence","glyph_font_size","total_width","letter","letter_x","current_letter","TimeSigNote","tsGlyph","VibratoBracket","bracket_data","stop_x","Factory","newFromElementId","renderQ","systems","initRenderer","ghostNote","textNote","barNote","clefNote","timeSigNote","keySigNote","hJustify","vJustify","kerning","upperAccidental","lowerAccidental","numMeasures","multiMeasureRest","secondaryBeamBreaks","partialBeamDirections","curve","tie","vibratoBracket","textBracket","system","GraceTabNote","KeyManager","setKey","getKey","scaleMapByValue","originalScaleMapByValue","getAccidental","selectNote","scaleNote","modparts","change","valueNote","originalValueNote","StaveHairpin","FormatByTicksAndDraw","ppt","pixelsPerTick","l_shift_px","left_shift_ticks","r_shift_px","right_shift_ticks","hairpin_options","left_shift_px","right_shift_px","setRenderOptions","hairpin","dis","staff_height","l_shift","r_shift","CRESC","DECRESC","TabSlide","SLIDE_UP","SLIDE_DOWN","createSlideUp","createSlideDown","first_fret","last_fret","slide_y","Tremolo","y_spacing_scale","extra_stroke_scale","y_spacing","Tuning","names","standard","dagdad","dropd","standardBanjo","doubleCBanjo","doubleDBanjo","sawmillBanjo","tuningString","tuningValues","setTuning","noteToInteger","getValueForString","stringNum","getValueForFret","fretNum","stringValue","getNoteForFret","Flow","BUILD","VERSION","DATE","setMusicFont","fontNames","fetchMusicFont","fontModuleOrPath","getMusicFont","getMusicFontStack","BravuraFont","bracketTop","bracketBottom","barlineTick","breathMarkTick","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXDoubleWhole","noteheadXWhole","noteheadXHalf","noteheadXBlack","noteheadCircleXDoubleWhole","noteheadCircleXWhole","noteheadCircleXHalf","noteheadCircleX","noteheadCircledDoubleWhole","noteheadCircledWhole","noteheadCircledHalf","noteheadCircledBlack","noteheadDoubleWholeSquare","noteheadSquareWhite","noteheadSquareBlack","noteheadTriangleDownDoubleWhole","noteheadTriangleDownWhole","noteheadTriangleDownHalf","noteheadTriangleDownBlack","noteheadTriangleUpDoubleWhole","noteheadTriangleUpWhole","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesis","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBuyukMucennebSharp","accidentalBakiyeFlat","accidentalKomaSharp","accidentalKucukMucennebSharp","accidentalKoron","accidentalSori","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","wiggleArpeggiatoUp","arrowheadBlackUp","arrowheadBlackDown","arpeggiatoUp","arpeggiatoDown","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","csymDiminished","csymHalfDiminished","csymAugmented","csymMajorSeventh","csymMinor","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","generatedOn","CommonMetrics","smufl","endPaddingMax","endPaddingMin","unalignedNotePadding","clef_default","shiftX","clef_small","default","gracenote","pedalMarking","digits","shiftLine","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","heightAdjustmentForFlag","staveTempo","clefNote_default","clefNote_small","stroke_straight","stroke_wiggly","CustomFont","vexAccidentalMicrotonal1","vexAccidentalMicrotonal3","vexAccidentalMicrotonal4","vexNoteHeadRectBlack","vexNoteHeadRectWhite","vexWiggleArpeggioUp","GonvilleSmuflFont","LelandFont","PetalumaFont","petalumaChordMetrics","PetalumaScriptFont","$","I","J","K","N","O","Q","U","V","Y","Z","_","l","RobotoSlabFont","SansFontBold","SansFont","Description","SerifFont","Vex","sortAndUnique","cmp","eq","newArr","last","contains","canvasSelector","benchmark","start_time","Date","getTime","stackTrace","chordMetrics","loadPetaluma","fontData","description","loadTextFonts"],"sourceRoot":""} \ No newline at end of file diff --git a/build/esm/entry/vexflow-bravura.js b/build/esm/entry/vexflow-bravura.js new file mode 100644 index 0000000000..d11dbcf0a4 --- /dev/null +++ b/build/esm/entry/vexflow-bravura.js @@ -0,0 +1,10 @@ +import { Flow } from '../src/flow.js'; +import { loadBravura } from '../src/fonts/load_bravura.js'; +import { loadCustom } from '../src/fonts/load_custom.js'; +import { loadTextFonts } from '../src/fonts/textfonts.js'; +loadBravura(); +loadCustom(); +Flow.setMusicFont('Bravura', 'Custom'); +loadTextFonts(); +export * from '../src/index.js'; +export * as default from '../src/index.js'; diff --git a/build/esm/entry/vexflow-core.js b/build/esm/entry/vexflow-core.js new file mode 100644 index 0000000000..61664497c8 --- /dev/null +++ b/build/esm/entry/vexflow-core.js @@ -0,0 +1,54 @@ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +import { Flow } from '../src/flow.js'; +import { Font } from '../src/font.js'; +import { loadTextFonts } from '../src/fonts/textfonts.js'; +import { globalObject, RuntimeError } from '../src/util.js'; +const fontModules = { + Bravura: './vexflow-font-bravura.js', + Gonville: './vexflow-font-gonville.js', + Petaluma: './vexflow-font-petaluma.js', + Leland: './vexflow-font-leland.js', + Custom: './vexflow-font-custom.js', +}; +Flow.fetchMusicFont = (fontName, fontModuleOrPath) => __awaiter(void 0, void 0, void 0, function* () { + const font = Font.load(fontName); + if (font.hasData()) { + return; + } + if (!fontModuleOrPath) { + if (fontName in fontModules) { + fontModuleOrPath = fontModules[fontName]; + } + else { + throw new RuntimeError('UnknownFont', `Music font ${fontName} does not exist.`); + } + } + let fontModule; + if (typeof fontModuleOrPath === 'string') { + const module = yield import(fontModuleOrPath); + const g = globalObject(); + const VexFlowFont = g['VexFlowFont']; + if (typeof VexFlowFont !== 'undefined' && typeof VexFlowFont[fontName] !== 'undefined') { + fontModule = VexFlowFont[fontName]; + } + else { + fontModule = module.Font; + } + } + else { + fontModule = fontModuleOrPath; + } + font.setData(fontModule.data); + font.setMetrics(fontModule.metrics); +}); +loadTextFonts(); +export * from '../src/index.js'; +export * as default from '../src/index.js'; diff --git a/build/esm/entry/vexflow-debug-with-tests.js b/build/esm/entry/vexflow-debug-with-tests.js new file mode 100644 index 0000000000..cb08380693 --- /dev/null +++ b/build/esm/entry/vexflow-debug-with-tests.js @@ -0,0 +1,11 @@ +import * as VexSrc from '../src/index.js'; +import * as VexTests from '../tests/index.js'; +import { Flow } from '../src/flow.js'; +import { loadAllMusicFonts } from '../src/fonts/load_all.js'; +import { loadTextFonts } from '../src/fonts/textfonts.js'; +loadAllMusicFonts(); +Flow.setMusicFont('Bravura', 'Gonville', 'Custom'); +loadTextFonts(); +export * from '../src/index.js'; +export * from '../tests/index.js'; +export default Object.assign(Object.assign({}, VexSrc), VexTests); diff --git a/build/esm/entry/vexflow-debug.js b/build/esm/entry/vexflow-debug.js new file mode 100644 index 0000000000..c1af57c988 --- /dev/null +++ b/build/esm/entry/vexflow-debug.js @@ -0,0 +1,8 @@ +import { Flow } from '../src/flow.js'; +import { loadAllMusicFonts } from '../src/fonts/load_all.js'; +import { loadTextFonts } from '../src/fonts/textfonts.js'; +loadAllMusicFonts(); +Flow.setMusicFont('Bravura', 'Gonville', 'Custom'); +loadTextFonts(); +export * from '../src/index.js'; +export * as default from '../src/index.js'; diff --git a/build/esm/entry/vexflow-font-bravura.js b/build/esm/entry/vexflow-font-bravura.js new file mode 100644 index 0000000000..5f7d008b74 --- /dev/null +++ b/build/esm/entry/vexflow-font-bravura.js @@ -0,0 +1,7 @@ +import { BravuraFont } from '../src/fonts/bravura_glyphs.js'; +import { CommonMetrics } from '../src/fonts/common_metrics.js'; +export const Font = { + data: BravuraFont, + metrics: CommonMetrics, +}; +export default Font; diff --git a/build/esm/entry/vexflow-font-custom.js b/build/esm/entry/vexflow-font-custom.js new file mode 100644 index 0000000000..865c08286b --- /dev/null +++ b/build/esm/entry/vexflow-font-custom.js @@ -0,0 +1,7 @@ +import { CommonMetrics } from '../src/fonts/common_metrics.js'; +import { CustomFont } from '../src/fonts/custom_glyphs.js'; +export const Font = { + data: CustomFont, + metrics: CommonMetrics, +}; +export default Font; diff --git a/build/esm/entry/vexflow-font-gonville.js b/build/esm/entry/vexflow-font-gonville.js new file mode 100644 index 0000000000..61b518b0ce --- /dev/null +++ b/build/esm/entry/vexflow-font-gonville.js @@ -0,0 +1,7 @@ +import { CommonMetrics } from '../src/fonts/common_metrics.js'; +import { GonvilleSmuflFont } from '../src/fonts/gonville_glyphs.js'; +export const Font = { + data: GonvilleSmuflFont, + metrics: CommonMetrics, +}; +export default Font; diff --git a/build/esm/entry/vexflow-font-leland.js b/build/esm/entry/vexflow-font-leland.js new file mode 100644 index 0000000000..dd7282f33d --- /dev/null +++ b/build/esm/entry/vexflow-font-leland.js @@ -0,0 +1,7 @@ +import { CommonMetrics } from '../src/fonts/common_metrics.js'; +import { LelandFont } from '../src/fonts/leland_glyphs.js'; +export const Font = { + data: LelandFont, + metrics: CommonMetrics, +}; +export default Font; diff --git a/build/esm/entry/vexflow-font-petaluma.js b/build/esm/entry/vexflow-font-petaluma.js new file mode 100644 index 0000000000..a7e95124bd --- /dev/null +++ b/build/esm/entry/vexflow-font-petaluma.js @@ -0,0 +1,7 @@ +import { CommonMetrics } from '../src/fonts/common_metrics.js'; +import { PetalumaFont } from '../src/fonts/petaluma_glyphs.js'; +export const Font = { + data: PetalumaFont, + metrics: CommonMetrics, +}; +export default Font; diff --git a/build/esm/entry/vexflow-gonville.js b/build/esm/entry/vexflow-gonville.js new file mode 100644 index 0000000000..4d7948edf6 --- /dev/null +++ b/build/esm/entry/vexflow-gonville.js @@ -0,0 +1,10 @@ +import { Flow } from '../src/flow.js'; +import { loadCustom } from '../src/fonts/load_custom.js'; +import { loadGonville } from '../src/fonts/load_gonville.js'; +import { loadTextFonts } from '../src/fonts/textfonts.js'; +loadGonville(); +loadCustom(); +Flow.setMusicFont('Gonville', 'Custom'); +loadTextFonts(); +export * from '../src/index.js'; +export * as default from '../src/index.js'; diff --git a/build/esm/entry/vexflow-leland.js b/build/esm/entry/vexflow-leland.js new file mode 100644 index 0000000000..3ab21d2ad8 --- /dev/null +++ b/build/esm/entry/vexflow-leland.js @@ -0,0 +1,10 @@ +import { Flow } from '../src/flow.js'; +import { loadCustom } from '../src/fonts/load_custom.js'; +import { loadLeland } from '../src/fonts/load_leland.js'; +import { loadTextFonts } from '../src/fonts/textfonts.js'; +loadLeland(); +loadCustom(); +Flow.setMusicFont('Leland', 'Custom'); +loadTextFonts(); +export * from '../src/index.js'; +export * as default from '../src/index.js'; diff --git a/build/esm/entry/vexflow-petaluma.js b/build/esm/entry/vexflow-petaluma.js new file mode 100644 index 0000000000..10532eb61e --- /dev/null +++ b/build/esm/entry/vexflow-petaluma.js @@ -0,0 +1,10 @@ +import { Flow } from '../src/flow.js'; +import { loadCustom } from '../src/fonts/load_custom.js'; +import { loadPetaluma } from '../src/fonts/load_petaluma.js'; +import { loadTextFonts } from '../src/fonts/textfonts.js'; +loadPetaluma(); +loadCustom(); +Flow.setMusicFont('Petaluma', 'Custom'); +loadTextFonts(); +export * from '../src/index.js'; +export * as default from '../src/index.js'; diff --git a/build/esm/entry/vexflow.js b/build/esm/entry/vexflow.js new file mode 100644 index 0000000000..c1af57c988 --- /dev/null +++ b/build/esm/entry/vexflow.js @@ -0,0 +1,8 @@ +import { Flow } from '../src/flow.js'; +import { loadAllMusicFonts } from '../src/fonts/load_all.js'; +import { loadTextFonts } from '../src/fonts/textfonts.js'; +loadAllMusicFonts(); +Flow.setMusicFont('Bravura', 'Gonville', 'Custom'); +loadTextFonts(); +export * from '../src/index.js'; +export * as default from '../src/index.js'; diff --git a/build/esm/package.json b/build/esm/package.json new file mode 100644 index 0000000000..3dbc1ca591 --- /dev/null +++ b/build/esm/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/build/esm/src/accidental.js b/build/esm/src/accidental.js new file mode 100644 index 0000000000..2448901f01 --- /dev/null +++ b/build/esm/src/accidental.js @@ -0,0 +1,366 @@ +import { Fraction } from './fraction.js'; +import { Glyph } from './glyph.js'; +import { Modifier } from './modifier.js'; +import { Music } from './music.js'; +import { Tables } from './tables.js'; +import { isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard.js'; +import { defined, log } from './util.js'; +function L(...args) { + if (Accidental.DEBUG) + log('Vex.Flow.Accidental', args); +} +class Accidental extends Modifier { + static get CATEGORY() { + return "Accidental"; + } + static format(accidentals, state) { + if (!accidentals || accidentals.length === 0) + return; + const musicFont = Tables.currentMusicFont(); + const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding'); + const leftShift = state.left_shift + noteheadAccidentalPadding; + const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing'); + const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); + const accidentalLinePositionsAndSpaceNeeds = []; + let prevNote = undefined; + let extraXSpaceNeededForLeftDisplacedNotehead = 0; + for (let i = 0; i < accidentals.length; ++i) { + const acc = accidentals[i]; + const note = acc.getNote(); + const stave = note.getStave(); + const index = acc.checkIndex(); + const props = note.getKeyProps()[index]; + if (note !== prevNote) { + for (let n = 0; n < note.keys.length; ++n) { + extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead); + } + prevNote = note; + } + if (stave) { + const lineSpace = stave.getSpacingBetweenLines(); + const y = stave.getYForLine(props.line); + const accLine = Math.round((y / lineSpace) * 2) / 2; + accidentalLinePositionsAndSpaceNeeds.push({ + y, + line: accLine, + extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead, + acc, + spacingBetweenStaveLines: lineSpace, + }); + } + else { + accidentalLinePositionsAndSpaceNeeds.push({ + line: props.line, + extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead, + acc, + }); + } + } + accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line); + const staveLineAccidentalLayoutMetrics = []; + let maxExtraXSpaceNeeded = 0; + for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) { + const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i]; + const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1]; + let currentLineMetric; + if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) { + currentLineMetric = { + line: accidentalLinePositionAndSpaceNeeds.line, + flatLine: true, + dblSharpLine: true, + numAcc: 0, + width: 0, + column: 0, + }; + staveLineAccidentalLayoutMetrics.push(currentLineMetric); + } + else { + currentLineMetric = priorLineMetric; + } + if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' && + accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') { + currentLineMetric.flatLine = false; + } + if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') { + currentLineMetric.dblSharpLine = false; + } + currentLineMetric.numAcc++; + currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing; + maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded); + } + let totalColumns = 0; + for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) { + let noFurtherConflicts = false; + const groupStart = i; + let groupEnd = i; + while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) { + if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) { + groupEnd++; + } + else { + noFurtherConflicts = true; + } + } + const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index]; + const getGroupLines = (indexes) => indexes.map(getGroupLine); + const lineDifference = (indexA, indexB) => { + const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line); + return a - b; + }; + const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2)); + const groupLength = groupEnd - groupStart + 1; + let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd]) + ? 'a' + : 'b'; + switch (groupLength) { + case 3: + if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) { + endCase = 'second_on_bottom'; + } + break; + case 4: + if (notColliding([0, 2], [1, 3])) { + endCase = 'spaced_out_tetrachord'; + } + break; + case 5: + if (endCase === 'b' && notColliding([1, 3])) { + endCase = 'spaced_out_pentachord'; + if (notColliding([0, 2], [2, 4])) { + endCase = 'very_spaced_out_pentachord'; + } + } + break; + case 6: + if (notColliding([0, 3], [1, 4], [2, 5])) { + endCase = 'spaced_out_hexachord'; + } + if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) { + endCase = 'very_spaced_out_hexachord'; + } + break; + default: + break; + } + let groupMember; + let column; + if (groupLength >= 7) { + let patternLength = 2; + let collisionDetected = true; + while (collisionDetected === true) { + collisionDetected = false; + for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) { + if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) { + collisionDetected = true; + patternLength++; + break; + } + } + } + for (groupMember = i; groupMember <= groupEnd; groupMember++) { + column = ((groupMember - i) % patternLength) + 1; + staveLineAccidentalLayoutMetrics[groupMember].column = column; + totalColumns = totalColumns > column ? totalColumns : column; + } + } + else { + for (groupMember = i; groupMember <= groupEnd; groupMember++) { + column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i]; + staveLineAccidentalLayoutMetrics[groupMember].column = column; + totalColumns = totalColumns > column ? totalColumns : column; + } + } + i = groupEnd; + } + const columnWidths = []; + const columnXOffsets = []; + for (let i = 0; i <= totalColumns; i++) { + columnWidths[i] = 0; + columnXOffsets[i] = 0; + } + columnWidths[0] = leftShift + maxExtraXSpaceNeeded; + columnXOffsets[0] = leftShift; + staveLineAccidentalLayoutMetrics.forEach((line) => { + if (line.width > columnWidths[line.column]) + columnWidths[line.column] = line.width; + }); + for (let i = 1; i < columnWidths.length; i++) { + columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1]; + } + const totalShift = columnXOffsets[columnXOffsets.length - 1]; + let accCount = 0; + staveLineAccidentalLayoutMetrics.forEach((line) => { + let lineWidth = 0; + const lastAccOnLine = accCount + line.numAcc; + for (accCount; accCount < lastAccOnLine; accCount++) { + const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded; + accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift); + lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing; + L('Line, accCount, shift: ', line.line, accCount, xShift); + } + }); + state.left_shift = totalShift + additionalPadding; + } + static checkCollision(line1, line2) { + let clearance = line2.line - line1.line; + let clearanceRequired = 3; + if (clearance > 0) { + clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0; + if (line1.dblSharpLine) + clearance -= 0.5; + } + else { + clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0; + if (line2.dblSharpLine) + clearance -= 0.5; + } + const collision = Math.abs(clearance) < clearanceRequired; + L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision); + return collision; + } + static applyAccidentals(voices, keySignature) { + const tickPositions = []; + const tickNoteMap = {}; + voices.forEach((voice) => { + const tickPosition = new Fraction(0, 1); + const tickable = voice.getTickables(); + tickable.forEach((t) => { + if (t.shouldIgnoreTicks()) + return; + const notesAtPosition = tickNoteMap[tickPosition.value()]; + if (!notesAtPosition) { + tickPositions.push(tickPosition.value()); + tickNoteMap[tickPosition.value()] = [t]; + } + else { + notesAtPosition.push(t); + } + tickPosition.add(t.getTicks()); + }); + }); + const music = new Music(); + if (!keySignature) + keySignature = 'C'; + const scaleMapKey = music.createScaleMap(keySignature); + const scaleMap = {}; + tickPositions.forEach((tickPos) => { + const tickables = tickNoteMap[tickPos]; + const modifiedPitches = []; + const processNote = (t) => { + if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) { + return; + } + const staveNote = t; + staveNote.keys.forEach((keyString, keyIndex) => { + const key = music.getNoteParts(keyString.split('/')[0]); + const octave = keyString.split('/')[1]; + const accidentalString = key.accidental || 'n'; + const pitch = key.root + accidentalString; + if (!scaleMap[key.root + octave]) + scaleMap[key.root + octave] = scaleMapKey[key.root]; + const sameAccidental = scaleMap[key.root + octave] === pitch; + const previouslyModified = modifiedPitches.indexOf(keyString) > -1; + staveNote.getModifiers().forEach((modifier, index) => { + if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) { + staveNote.getModifiers().splice(index, 1); + } + }); + if (!sameAccidental || (sameAccidental && previouslyModified)) { + scaleMap[key.root + octave] = pitch; + const accidental = new Accidental(accidentalString); + staveNote.addModifier(accidental, keyIndex); + modifiedPitches.push(keyString); + } + }); + staveNote.getModifiers().forEach((modifier) => { + if (isGraceNoteGroup(modifier)) { + modifier.getGraceNotes().forEach(processNote); + } + }); + }; + tickables.forEach(processNote); + }); + } + constructor(type) { + super(); + L('New accidental: ', type); + this.type = type; + this.position = Modifier.Position.LEFT; + this.render_options = { + font_scale: Tables.NOTATION_FONT_SCALE, + parenLeftPadding: 2, + parenRightPadding: 2, + }; + this.accidental = Tables.accidentalCodes(this.type); + defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`); + this.cautionary = false; + this.reset(); + } + reset() { + const fontScale = this.render_options.font_scale; + this.glyph = new Glyph(this.accidental.code, fontScale); + this.glyph.setOriginX(1.0); + if (this.cautionary) { + this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale); + this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale); + this.parenLeft.setOriginX(1.0); + this.parenRight.setOriginX(1.0); + } + } + getWidth() { + if (this.cautionary) { + const parenLeft = defined(this.parenLeft); + const parenRight = defined(this.parenRight); + const parenWidth = parenLeft.getMetrics().width + + parenRight.getMetrics().width + + this.render_options.parenLeftPadding + + this.render_options.parenRightPadding; + return this.glyph.getMetrics().width + parenWidth; + } + else { + return this.glyph.getMetrics().width; + } + } + setNote(note) { + defined(note, 'ArgumentError', `Bad note value: ${note}`); + this.note = note; + if (isGraceNote(note)) { + this.render_options.font_scale = 25; + this.reset(); + } + return this; + } + setAsCautionary() { + this.cautionary = true; + this.render_options.font_scale = 28; + this.reset(); + return this; + } + draw() { + const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this; + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(position, index); + let accX = start.x + x_shift; + const accY = start.y + y_shift; + L('Rendering: ', type, accX, accY); + if (!cautionary) { + glyph.render(ctx, accX, accY); + } + else { + const parenLeft = defined(this.parenLeft); + const parenRight = defined(this.parenRight); + parenRight.render(ctx, accX, accY); + accX -= parenRight.getMetrics().width; + accX -= parenRightPadding; + accX -= this.accidental.parenRightPaddingAdjustment; + glyph.render(ctx, accX, accY); + accX -= glyph.getMetrics().width; + accX -= parenLeftPadding; + parenLeft.render(ctx, accX, accY); + } + } +} +Accidental.DEBUG = false; +export { Accidental }; diff --git a/build/esm/src/annotation.js b/build/esm/src/annotation.js new file mode 100644 index 0000000000..ea004366e4 --- /dev/null +++ b/build/esm/src/annotation.js @@ -0,0 +1,239 @@ +import { Element } from './element.js'; +import { Modifier, ModifierPosition } from './modifier.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { TextFormatter } from './textformatter.js'; +import { isStemmableNote, isTabNote } from './typeguard.js'; +import { log } from './util.js'; +function L(...args) { + if (Annotation.DEBUG) + log('Vex.Flow.Annotation', args); +} +export var AnnotationHorizontalJustify; +(function (AnnotationHorizontalJustify) { + AnnotationHorizontalJustify[AnnotationHorizontalJustify["LEFT"] = 1] = "LEFT"; + AnnotationHorizontalJustify[AnnotationHorizontalJustify["CENTER"] = 2] = "CENTER"; + AnnotationHorizontalJustify[AnnotationHorizontalJustify["RIGHT"] = 3] = "RIGHT"; + AnnotationHorizontalJustify[AnnotationHorizontalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; +})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {})); +export var AnnotationVerticalJustify; +(function (AnnotationVerticalJustify) { + AnnotationVerticalJustify[AnnotationVerticalJustify["TOP"] = 1] = "TOP"; + AnnotationVerticalJustify[AnnotationVerticalJustify["CENTER"] = 2] = "CENTER"; + AnnotationVerticalJustify[AnnotationVerticalJustify["BOTTOM"] = 3] = "BOTTOM"; + AnnotationVerticalJustify[AnnotationVerticalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; +})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {})); +class Annotation extends Modifier { + static get CATEGORY() { + return "Annotation"; + } + static get minAnnotationPadding() { + const musicFont = Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + static format(annotations, state) { + if (!annotations || annotations.length === 0) + return false; + let leftWidth = 0; + let rightWidth = 0; + let maxLeftGlyphWidth = 0; + let maxRightGlyphWidth = 0; + for (let i = 0; i < annotations.length; ++i) { + const annotation = annotations[i]; + const textFormatter = TextFormatter.create(annotation.textFont); + const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE; + let verticalSpaceNeeded = textLines; + const note = annotation.checkAttachedNote(); + const glyphWidth = note.getGlyphProps().getWidth(); + const textWidth = textFormatter.getWidthForTextInPx(annotation.text); + if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) { + maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth); + leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding; + } + else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) { + maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth); + rightWidth = Math.max(rightWidth, textWidth); + } + else { + leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding; + rightWidth = Math.max(rightWidth, textWidth / 2); + maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth); + maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth); + } + const stave = note.getStave(); + const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP; + let stemHeight = 0; + let lines = 5; + if (isTabNote(note)) { + if (note.render_options.draw_stem) { + const stem = note.getStem(); + if (stem) { + stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE; + } + } + else { + stemHeight = 0; + } + } + else if (isStemmableNote(note)) { + const stem = note.getStem(); + if (stem && note.getNoteType() === 'n') { + stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE; + } + } + if (stave) { + lines = stave.getNumLines(); + } + if (annotation.verticalJustification === this.VerticalJustify.TOP) { + let noteLine = note.getLineNumber(true); + if (isTabNote(note)) { + noteLine = lines - (note.leastString() - 0.5); + } + if (stemDirection === Stem.UP) { + noteLine += stemHeight; + } + const curTop = noteLine + state.top_text_line + 0.5; + if (curTop < lines) { + annotation.setTextLine(lines - noteLine); + verticalSpaceNeeded += lines - noteLine; + state.top_text_line = verticalSpaceNeeded; + } + else { + annotation.setTextLine(state.top_text_line); + state.top_text_line += verticalSpaceNeeded; + } + } + else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) { + let noteLine = lines - note.getLineNumber(); + if (isTabNote(note)) { + noteLine = note.greatestString() - 1; + } + if (stemDirection === Stem.DOWN) { + noteLine += stemHeight; + } + const curBottom = noteLine + state.text_line + 1; + if (curBottom < lines) { + annotation.setTextLine(lines - curBottom); + verticalSpaceNeeded += lines - curBottom; + state.text_line = verticalSpaceNeeded; + } + else { + annotation.setTextLine(state.text_line); + state.text_line += verticalSpaceNeeded; + } + } + else { + annotation.setTextLine(state.text_line); + } + } + const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0)); + const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0)); + state.left_shift += leftOverlap; + state.right_shift += rightOverlap; + return true; + } + constructor(text) { + super(); + this.text = text; + this.horizontalJustification = AnnotationHorizontalJustify.CENTER; + this.verticalJustification = AnnotationVerticalJustify.TOP; + this.resetFont(); + this.setWidth(Tables.textWidth(text)); + } + setVerticalJustification(just) { + this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just; + return this; + } + getJustification() { + return this.horizontalJustification; + } + setJustification(just) { + this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP; + const textFormatter = TextFormatter.create(this.textFont); + const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index); + this.setRendered(); + ctx.save(); + this.applyStyle(); + ctx.openGroup('annotation', this.getAttribute('id')); + ctx.setFont(this.textFont); + const text_width = textFormatter.getWidthForTextInPx(this.text); + const text_height = textFormatter.getYForStringInPx(this.text).height; + let x; + let y; + if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) { + x = start.x; + } + else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) { + x = start.x - text_width; + } + else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) { + x = start.x - text_width / 2; + } + else { + x = note.getStemX() - text_width / 2; + } + let stem_ext = {}; + let spacing = 0; + const has_stem = note.hasStem(); + const stave = note.checkStave(); + if (has_stem) { + stem_ext = note.checkStem().getExtents(); + spacing = stave.getSpacingBetweenLines(); + } + if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) { + const ys = note.getYs(); + y = ys.reduce((a, b) => (a > b ? a : b)); + y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height; + if (has_stem && stemDirection === Stem.DOWN) { + y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line); + } + } + else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) { + const yt = note.getYForTopText(this.text_line) - 1; + const yb = stave.getYForBottomText(this.text_line); + y = yt + (yb - yt) / 2 + text_height / 2; + } + else if (this.verticalJustification === AnnotationVerticalJustify.TOP) { + const topY = Math.min(...note.getYs()); + y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE; + if (has_stem && stemDirection === Stem.UP) { + spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing; + y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1)); + } + } + else { + const extents = note.getStemExtents(); + y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2; + } + L('Rendering annotation: ', this.text, x, y); + ctx.fillText(this.text, x, y); + ctx.closeGroup(); + this.restoreStyle(); + ctx.restore(); + } +} +Annotation.DEBUG = false; +Annotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT); +Annotation.HorizontalJustify = AnnotationHorizontalJustify; +Annotation.HorizontalJustifyString = { + left: AnnotationHorizontalJustify.LEFT, + right: AnnotationHorizontalJustify.RIGHT, + center: AnnotationHorizontalJustify.CENTER, + centerStem: AnnotationHorizontalJustify.CENTER_STEM, +}; +Annotation.VerticalJustify = AnnotationVerticalJustify; +Annotation.VerticalJustifyString = { + above: AnnotationVerticalJustify.TOP, + top: AnnotationVerticalJustify.TOP, + below: AnnotationVerticalJustify.BOTTOM, + bottom: AnnotationVerticalJustify.BOTTOM, + center: AnnotationVerticalJustify.CENTER, + centerStem: AnnotationVerticalJustify.CENTER_STEM, +}; +export { Annotation }; diff --git a/build/esm/src/articulation.js b/build/esm/src/articulation.js new file mode 100644 index 0000000000..cc3db1f487 --- /dev/null +++ b/build/esm/src/articulation.js @@ -0,0 +1,279 @@ +import { Glyph } from './glyph.js'; +import { Modifier } from './modifier.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard.js'; +import { defined, log, RuntimeError } from './util.js'; +function L(...args) { + if (Articulation.DEBUG) + log('Vex.Flow.Articulation', args); +} +const { ABOVE, BELOW } = Modifier.Position; +function roundToNearestHalf(mathFn, value) { + return mathFn(value / 0.5) * 0.5; +} +function isWithinLines(line, position) { + return position === ABOVE ? line <= 5 : line >= 1; +} +function getRoundingFunction(line, position) { + if (isWithinLines(line, position)) { + if (position === ABOVE) { + return Math.ceil; + } + else { + return Math.floor; + } + } + else { + return Math.round; + } +} +function snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) { + const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line); + const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position); + const onStaffLine = snappedLine % 1 === 0; + if (canSnapToStaffSpace && onStaffLine) { + const HALF_STAFF_SPACE = 0.5; + return snappedLine + HALF_STAFF_SPACE * -offsetDirection; + } + else { + return snappedLine; + } +} +const isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note); +function getTopY(note, textLine) { + const stemDirection = note.getStemDirection(); + const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents(); + if (isStaveOrGraceNote(note)) { + if (note.hasStem()) { + if (stemDirection === Stem.UP) { + return stemTipY; + } + else { + return stemBaseY; + } + } + else { + return Math.min(...note.getYs()); + } + } + else if (isTabNote(note)) { + if (note.hasStem()) { + if (stemDirection === Stem.UP) { + return stemTipY; + } + else { + return note.checkStave().getYForTopText(textLine); + } + } + else { + return note.checkStave().getYForTopText(textLine); + } + } + else { + throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'); + } +} +function getBottomY(note, textLine) { + const stemDirection = note.getStemDirection(); + const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents(); + if (isStaveOrGraceNote(note)) { + if (note.hasStem()) { + if (stemDirection === Stem.UP) { + return stemBaseY; + } + else { + return stemTipY; + } + } + else { + return Math.max(...note.getYs()); + } + } + else if (isTabNote(note)) { + if (note.hasStem()) { + if (stemDirection === Stem.UP) { + return note.checkStave().getYForBottomText(textLine); + } + else { + return stemTipY; + } + } + else { + return note.checkStave().getYForBottomText(textLine); + } + } + else { + throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'); + } +} +function getInitialOffset(note, position) { + const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) || + (position === BELOW && note.getStemDirection() === Stem.DOWN); + if (isStaveOrGraceNote(note)) { + if (note.hasStem() && isOnStemTip) { + return 0.5; + } + else { + return 1; + } + } + else { + if (note.hasStem() && isOnStemTip) { + return 1; + } + else { + return 0; + } + } +} +class Articulation extends Modifier { + static get CATEGORY() { + return "Articulation"; + } + static format(articulations, state) { + if (!articulations || articulations.length === 0) + return false; + const margin = 0.5; + let maxGlyphWidth = 0; + const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin); + articulations.forEach((articulation) => { + const note = articulation.checkAttachedNote(); + maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth); + let lines = 5; + const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP; + let stemHeight = 0; + if (isStemmableNote(note)) { + const stem = note.getStem(); + if (stem) { + stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE; + } + } + const stave = note.getStave(); + if (stave) { + lines = stave.getNumLines(); + } + if (articulation.getPosition() === ABOVE) { + let noteLine = note.getLineNumber(true); + if (stemDirection === Stem.UP) { + noteLine += stemHeight; + } + let increment = getIncrement(articulation, state.top_text_line, ABOVE); + const curTop = noteLine + state.top_text_line + 0.5; + if (!articulation.articulation.between_lines && curTop < lines) { + increment += lines - curTop; + } + articulation.setTextLine(state.top_text_line); + state.top_text_line += increment; + } + else if (articulation.getPosition() === BELOW) { + let noteLine = Math.max(lines - note.getLineNumber(), 0); + if (stemDirection === Stem.DOWN) { + noteLine += stemHeight; + } + let increment = getIncrement(articulation, state.text_line, BELOW); + const curBottom = noteLine + state.text_line + 0.5; + if (!articulation.articulation.between_lines && curBottom < lines) { + increment += lines - curBottom; + } + articulation.setTextLine(state.text_line); + state.text_line += increment; + } + }); + const width = articulations + .map((articulation) => articulation.getWidth()) + .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth)); + const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0)); + state.left_shift += overlap / 2; + state.right_shift += overlap / 2; + return true; + } + static easyScoreHook({ articulations }, note, builder) { + if (!articulations) + return; + const articNameToCode = { + staccato: 'a.', + tenuto: 'a-', + accent: 'a>', + }; + articulations + .split(',') + .map((articString) => articString.trim().split('.')) + .map(([name, position]) => { + const artic = { type: articNameToCode[name] }; + if (position) + artic.position = Modifier.PositionString[position]; + return builder.getFactory().Articulation(artic); + }) + .map((artic) => note.addModifier(artic, 0)); + } + constructor(type) { + super(); + this.type = type; + this.position = ABOVE; + this.render_options = { + font_scale: Tables.NOTATION_FONT_SCALE, + }; + this.reset(); + } + reset() { + this.articulation = Tables.articulationCodes(this.type); + if (!this.articulation) { + this.articulation = { code: this.type, between_lines: false }; + if (this.type.endsWith('Above')) + this.position = ABOVE; + if (this.type.endsWith('Below')) + this.position = BELOW; + } + const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code; + this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale); + defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`); + this.setWidth(defined(this.glyph.getMetrics().width)); + } + setBetweenLines(betweenLines = true) { + this.articulation.between_lines = betweenLines; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const index = this.checkIndex(); + const { position, glyph, text_line: textLine } = this; + const canSitBetweenLines = this.articulation.between_lines; + const stave = note.checkStave(); + const staffSpace = stave.getSpacingBetweenLines(); + const isTab = isTabNote(note); + const { x } = note.getModifierStartXY(position, index); + const shouldSitOutsideStaff = !canSitBetweenLines || isTab; + const initialOffset = getInitialOffset(note, position); + const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0); + let y = { + [ABOVE]: () => { + glyph.setOrigin(0.5, 1); + const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace; + return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y; + }, + [BELOW]: () => { + glyph.setOrigin(0.5, 0); + const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace; + return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y; + }, + }[position](); + if (!isTab) { + const offsetDirection = position === ABOVE ? -1 : +1; + const noteLine = note.getKeyProps()[index].line; + const distanceFromNote = (note.getYs()[index] - y) / staffSpace; + const articLine = distanceFromNote + Number(noteLine); + const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection); + if (isWithinLines(snappedLine, position)) + glyph.setOrigin(0.5, 0.5); + y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection; + } + L(`Rendering articulation at (x: ${x}, y: ${y})`); + glyph.render(ctx, x, y); + } +} +Articulation.DEBUG = false; +Articulation.INITIAL_OFFSET = -0.5; +export { Articulation }; diff --git a/build/esm/src/barnote.js b/build/esm/src/barnote.js new file mode 100644 index 0000000000..0d3860cc6d --- /dev/null +++ b/build/esm/src/barnote.js @@ -0,0 +1,60 @@ +import { Note } from './note.js'; +import { Barline, BarlineType } from './stavebarline.js'; +import { log } from './util.js'; +function L(...args) { + if (BarNote.DEBUG) + log('Vex.Flow.BarNote', args); +} +class BarNote extends Note { + static get CATEGORY() { + return "BarNote"; + } + constructor(type = BarlineType.SINGLE) { + super({ duration: 'b' }); + this.metrics = { + widths: {}, + }; + const TYPE = BarlineType; + this.metrics.widths = { + [TYPE.SINGLE]: 8, + [TYPE.DOUBLE]: 12, + [TYPE.END]: 15, + [TYPE.REPEAT_BEGIN]: 14, + [TYPE.REPEAT_END]: 14, + [TYPE.REPEAT_BOTH]: 18, + [TYPE.NONE]: 0, + }; + this.ignore_ticks = true; + this.setType(type); + this.barline = new Barline(type); + } + getType() { + return this.type; + } + setType(type) { + this.type = typeof type === 'string' ? Barline.typeString[type] : type; + this.setWidth(this.metrics.widths[this.type]); + return this; + } + addToModifierContext(mc) { + return this; + } + preFormat() { + this.preFormatted = true; + return this; + } + draw() { + const ctx = this.checkContext(); + L('Rendering bar line at: ', this.getAbsoluteX()); + this.applyStyle(ctx); + ctx.openGroup('barnote', this.getAttribute('id')); + this.barline.setType(this.type); + this.barline.setX(this.getAbsoluteX()); + this.barline.draw(this.checkStave()); + ctx.closeGroup(); + this.restoreStyle(ctx); + this.setRendered(); + } +} +BarNote.DEBUG = false; +export { BarNote }; diff --git a/build/esm/src/beam.js b/build/esm/src/beam.js new file mode 100644 index 0000000000..4e955a3cf0 --- /dev/null +++ b/build/esm/src/beam.js @@ -0,0 +1,642 @@ +import { Element } from './element.js'; +import { Fraction } from './fraction.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { isStaveNote, isTabNote } from './typeguard.js'; +import { RuntimeError } from './util.js'; +function calculateStemDirection(notes) { + let lineSum = 0; + notes.forEach((note) => { + if (note.keyProps) { + note.keyProps.forEach((keyProp) => { + lineSum += keyProp.line - 3; + }); + } + }); + if (lineSum >= 0) { + return Stem.DOWN; + } + return Stem.UP; +} +function getStemSlope(firstNote, lastNote) { + const firstStemTipY = firstNote.getStemExtents().topY; + const firstStemX = firstNote.getStemX(); + const lastStemTipY = lastNote.getStemExtents().topY; + const lastStemX = lastNote.getStemX(); + return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX); +} +export const BEAM_LEFT = 'L'; +export const BEAM_RIGHT = 'R'; +export const BEAM_BOTH = 'B'; +export class Beam extends Element { + static get CATEGORY() { + return "Beam"; + } + getStemDirection() { + return this.stem_direction; + } + static getDefaultBeamGroups(time_sig) { + if (!time_sig || time_sig === 'c') { + time_sig = '4/4'; + } + const defaults = { + '1/2': ['1/2'], + '2/2': ['1/2'], + '3/2': ['1/2'], + '4/2': ['1/2'], + '1/4': ['1/4'], + '2/4': ['1/4'], + '3/4': ['1/4'], + '4/4': ['1/4'], + '1/8': ['1/8'], + '2/8': ['2/8'], + '3/8': ['3/8'], + '4/8': ['2/8'], + '1/16': ['1/16'], + '2/16': ['2/16'], + '3/16': ['3/16'], + '4/16': ['2/16'], + }; + const groups = defaults[time_sig]; + if (groups === undefined) { + const beatTotal = parseInt(time_sig.split('/')[0], 10); + const beatValue = parseInt(time_sig.split('/')[1], 10); + const tripleMeter = beatTotal % 3 === 0; + if (tripleMeter) { + return [new Fraction(3, beatValue)]; + } + else if (beatValue > 4) { + return [new Fraction(2, beatValue)]; + } + else if (beatValue <= 4) { + return [new Fraction(1, beatValue)]; + } + } + else { + return groups.map((group) => new Fraction().parse(group)); + } + return [new Fraction(1, 4)]; + } + static applyAndGetBeams(voice, stem_direction, groups) { + return Beam.generateBeams(voice.getTickables(), { groups, stem_direction }); + } + static generateBeams(notes, config = {}) { + if (!config.groups || !config.groups.length) { + config.groups = [new Fraction(2, 8)]; + } + const tickGroups = config.groups.map((group) => { + if (!group.multiply) { + throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions'); + } + return group.clone().multiply(Tables.RESOLUTION, 1); + }); + const unprocessedNotes = notes; + let currentTickGroup = 0; + let noteGroups = []; + let currentGroup = []; + function getTotalTicks(vf_notes) { + return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1)); + } + function nextTickGroup() { + if (tickGroups.length - 1 > currentTickGroup) { + currentTickGroup += 1; + } + else { + currentTickGroup = 0; + } + } + function createGroups() { + let nextGroup = []; + let currentGroupTotalTicks = new Fraction(0, 1); + unprocessedNotes.forEach((unprocessedNote) => { + nextGroup = []; + if (unprocessedNote.shouldIgnoreTicks()) { + noteGroups.push(currentGroup); + currentGroup = nextGroup; + return; + } + currentGroup.push(unprocessedNote); + const ticksPerGroup = tickGroups[currentTickGroup].clone(); + const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks); + const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8; + if (unbeamable && unprocessedNote.getTuplet()) { + ticksPerGroup.numerator *= 2; + } + if (totalTicks.greaterThan(ticksPerGroup)) { + if (!unbeamable) { + const note = currentGroup.pop(); + if (note) + nextGroup.push(note); + } + noteGroups.push(currentGroup); + do { + currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]); + nextTickGroup(); + } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup])); + currentGroup = nextGroup; + } + else if (totalTicks.equals(ticksPerGroup)) { + noteGroups.push(currentGroup); + currentGroupTotalTicks = new Fraction(0, 1); + currentGroup = nextGroup; + nextTickGroup(); + } + }); + if (currentGroup.length > 0) { + noteGroups.push(currentGroup); + } + } + function getBeamGroups() { + return noteGroups.filter((group) => { + if (group.length > 1) { + let beamable = true; + group.forEach((note) => { + if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) { + beamable = false; + } + }); + return beamable; + } + return false; + }); + } + function sanitizeGroups() { + const sanitizedGroups = []; + noteGroups.forEach((group) => { + let tempGroup = []; + group.forEach((note, index, group) => { + const isFirstOrLast = index === 0 || index === group.length - 1; + const prevNote = group[index - 1]; + const breaksOnEachRest = !config.beam_rests && note.isRest(); + const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast; + let breakOnStemChange = false; + if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) { + const prevDirection = prevNote.getStemDirection(); + const currentDirection = note.getStemDirection(); + breakOnStemChange = currentDirection !== prevDirection; + } + const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8; + const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration; + if (shouldBreak) { + if (tempGroup.length > 0) { + sanitizedGroups.push(tempGroup); + } + tempGroup = breakOnStemChange ? [note] : []; + } + else { + tempGroup.push(note); + } + }); + if (tempGroup.length > 0) { + sanitizedGroups.push(tempGroup); + } + }); + noteGroups = sanitizedGroups; + } + function formatStems() { + noteGroups.forEach((group) => { + let stemDirection; + if (config.maintain_stem_directions) { + const note = findFirstNote(group); + stemDirection = note ? note.getStemDirection() : Stem.UP; + } + else { + if (config.stem_direction) { + stemDirection = config.stem_direction; + } + else { + stemDirection = calculateStemDirection(group); + } + } + applyStemDirection(group, stemDirection); + }); + } + function findFirstNote(group) { + for (let i = 0; i < group.length; i++) { + const note = group[i]; + if (!note.isRest()) { + return note; + } + } + return false; + } + function applyStemDirection(group, direction) { + group.forEach((note) => { + note.setStemDirection(direction); + }); + } + function getTuplets() { + const uniqueTuplets = []; + noteGroups.forEach((group) => { + let tuplet; + group.forEach((note) => { + const noteTuplet = note.getTuplet(); + if (noteTuplet && tuplet !== noteTuplet) { + tuplet = noteTuplet; + uniqueTuplets.push(tuplet); + } + }); + }); + return uniqueTuplets; + } + createGroups(); + sanitizeGroups(); + formatStems(); + const beamedNoteGroups = getBeamGroups(); + const allTuplets = getTuplets(); + const beams = []; + beamedNoteGroups.forEach((group) => { + const beam = new Beam(group); + if (config.show_stemlets) { + beam.render_options.show_stemlets = true; + } + if (config.secondary_breaks) { + beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks); + } + if (config.flat_beams === true) { + beam.render_options.flat_beams = true; + beam.render_options.flat_beam_offset = config.flat_beam_offset; + } + beams.push(beam); + }); + allTuplets.forEach((tuplet) => { + const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? -1 : 1; + tuplet.setTupletLocation(direction); + let bracketed = false; + for (let i = 0; i < tuplet.notes.length; i++) { + const note = tuplet.notes[i]; + if (!note.hasBeam()) { + bracketed = true; + break; + } + } + tuplet.setBracketed(bracketed); + }); + return beams; + } + constructor(notes, auto_stem = false) { + super(); + this.slope = 0; + this.y_shift = 0; + this.forcedPartialDirections = {}; + if (!notes || notes.length === 0) { + throw new RuntimeError('BadArguments', 'No notes provided for beam.'); + } + if (notes.length === 1) { + throw new RuntimeError('BadArguments', 'Too few notes for beam.'); + } + this.ticks = notes[0].getIntrinsicTicks(); + if (this.ticks >= Tables.durationToTicks('4')) { + throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.'); + } + let i; + let note; + this.stem_direction = notes[0].getStemDirection(); + let stem_direction = this.stem_direction; + if (auto_stem && isStaveNote(notes[0])) { + stem_direction = calculateStemDirection(notes); + } + else if (auto_stem && isTabNote(notes[0])) { + const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0); + stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN; + } + for (i = 0; i < notes.length; ++i) { + note = notes[i]; + if (auto_stem) { + note.setStemDirection(stem_direction); + this.stem_direction = stem_direction; + } + note.setBeam(this); + } + this.postFormatted = false; + this.notes = notes; + this.beam_count = this.getBeamCount(); + this.break_on_indices = []; + this.render_options = { + beam_width: 5, + max_slope: 0.25, + min_slope: -0.25, + slope_iterations: 20, + slope_cost: 100, + show_stemlets: false, + stemlet_extension: 7, + partial_beam_length: 10, + flat_beams: false, + min_flat_beam_offset: 15, + }; + } + getNotes() { + return this.notes; + } + getBeamCount() { + const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count); + const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max)); + return maxBeamCount; + } + breakSecondaryAt(indices) { + this.break_on_indices = indices; + return this; + } + setPartialBeamSideAt(noteIndex, side) { + this.forcedPartialDirections[noteIndex] = side; + return this; + } + unsetPartialBeamSideAt(noteIndex) { + delete this.forcedPartialDirections[noteIndex]; + return this; + } + getSlopeY(x, first_x_px, first_y_px, slope) { + return first_y_px + (x - first_x_px) * slope; + } + calculateSlope() { + const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this; + const firstNote = notes[0]; + const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]); + const increment = (max_slope - min_slope) / slope_iterations; + let minCost = Number.MAX_VALUE; + let bestSlope = 0; + let yShift = 0; + for (let slope = min_slope; slope <= max_slope; slope += increment) { + let totalStemExtension = 0; + let yShiftTemp = 0; + for (let i = 1; i < notes.length; ++i) { + const note = notes[i]; + if (note.hasStem() || note.isRest()) { + const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp; + const stemTipY = note.getStemExtents().topY; + if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) { + const diff = Math.abs(stemTipY - adjustedStemTipY); + yShiftTemp += diff * -stemDirection; + totalStemExtension += diff * i; + } + else { + totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection; + } + } + } + const idealSlope = initialSlope / 2; + const distanceFromIdeal = Math.abs(idealSlope - slope); + const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension); + if (cost < minCost) { + minCost = cost; + bestSlope = slope; + yShift = yShiftTemp; + } + } + this.slope = bestSlope; + this.y_shift = yShift; + } + calculateFlatSlope() { + const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this; + let total = 0; + let extremeY = 0; + let extremeBeamCount = 0; + let currentExtreme = 0; + for (let i = 0; i < notes.length; i++) { + const note = notes[i]; + const stemTipY = note.getStemExtents().topY; + total += stemTipY; + if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) { + currentExtreme = stemTipY; + extremeY = Math.max(...note.getYs()); + extremeBeamCount = note.getBeamCount(); + } + else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) { + currentExtreme = stemTipY; + extremeY = Math.min(...note.getYs()); + extremeBeamCount = note.getBeamCount(); + } + } + let offset = total / notes.length; + const beamWidth = beam_width * 1.5; + const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth; + const newOffset = extremeY + extremeTest * -stem_direction; + if (stem_direction === Stem.DOWN && offset < newOffset) { + offset = extremeY + extremeTest; + } + else if (stem_direction === Stem.UP && offset > newOffset) { + offset = extremeY - extremeTest; + } + if (!flat_beam_offset) { + this.render_options.flat_beam_offset = offset; + } + else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) { + this.render_options.flat_beam_offset = offset; + } + else if (stem_direction === Stem.UP && offset < flat_beam_offset) { + this.render_options.flat_beam_offset = offset; + } + this.slope = 0; + this.y_shift = 0; + } + getBeamYToDraw() { + const firstNote = this.notes[0]; + const firstStemTipY = firstNote.getStemExtents().topY; + let beamY = firstStemTipY; + if (this.render_options.flat_beams && this.render_options.flat_beam_offset) { + beamY = this.render_options.flat_beam_offset; + } + return beamY; + } + applyStemExtensions() { + const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this; + const firstNote = notes[0]; + const firstStemTipY = this.getBeamYToDraw(); + const firstStemX = firstNote.getStemX(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + const stem = note.getStem(); + if (stem) { + const stemX = note.getStemX(); + const { topY: stemTipY } = note.getStemExtents(); + const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift; + const preBeamExtension = stem.getExtension(); + const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY; + let crossStemExtension = 0; + if (note.getStemDirection() !== this.stem_direction) { + const beamCount = note.getGlyphProps().beam_count; + crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width; + } + stem.setExtension(preBeamExtension + beamExtension + crossStemExtension); + stem.adjustHeightForBeam(); + if (note.isRest() && show_stemlets) { + const beamWidth = beam_width; + const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth; + stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension); + } + } + } + } + lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) { + if (duration === '4') { + return BEAM_LEFT; + } + const forcedBeamDirection = this.forcedPartialDirections[noteIndex]; + if (forcedBeamDirection) + return forcedBeamDirection; + const lookup_duration = `${Tables.durationToNumber(duration) / 2}`; + const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration); + const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration); + const note_gets_beam = tick < Tables.durationToTicks(lookup_duration); + if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) { + return BEAM_BOTH; + } + else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) { + return BEAM_LEFT; + } + else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) { + return BEAM_RIGHT; + } + return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex); + } + getBeamLines(duration) { + const tick_of_duration = Tables.durationToTicks(duration); + let beam_started = false; + const beam_lines = []; + let current_beam = undefined; + const partial_beam_length = this.render_options.partial_beam_length; + let previous_should_break = false; + let tick_tally = 0; + for (let i = 0; i < this.notes.length; ++i) { + const note = this.notes[i]; + const ticks = note.getTicks().value(); + tick_tally += ticks; + let should_break = false; + if (parseInt(duration, 10) >= 8) { + should_break = this.break_on_indices.indexOf(i) !== -1; + if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) { + tick_tally = 0; + should_break = true; + } + } + const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration; + const stem_x = note.getStemX() - Stem.WIDTH / 2; + const prev_note = this.notes[i - 1]; + const next_note = this.notes[i + 1]; + const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration; + const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration; + const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam; + if (note_gets_beam) { + if (beam_started) { + current_beam = beam_lines[beam_lines.length - 1]; + current_beam.end = stem_x; + if (should_break) { + beam_started = false; + if (next_note && !next_note_gets_beam && current_beam.end === undefined) { + current_beam.end = current_beam.start - partial_beam_length; + } + } + } + else { + current_beam = { start: stem_x, end: undefined }; + beam_started = true; + if (beam_alone) { + const prev_tick = prev_note.getIntrinsicTicks(); + const next_tick = next_note.getIntrinsicTicks(); + const tick = note.getIntrinsicTicks(); + const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i); + if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) { + current_beam.end = current_beam.start - partial_beam_length; + } + else { + current_beam.end = current_beam.start + partial_beam_length; + } + } + else if (!next_note_gets_beam) { + if ((previous_should_break || i === 0) && next_note) { + current_beam.end = current_beam.start + partial_beam_length; + } + else { + current_beam.end = current_beam.start - partial_beam_length; + } + } + else if (should_break) { + current_beam.end = current_beam.start - partial_beam_length; + beam_started = false; + } + beam_lines.push(current_beam); + } + } + else { + beam_started = false; + } + previous_should_break = should_break; + } + const last_beam = beam_lines[beam_lines.length - 1]; + if (last_beam && last_beam.end === undefined) { + last_beam.end = last_beam.start - partial_beam_length; + } + return beam_lines; + } + drawStems(ctx) { + this.notes.forEach((note) => { + const stem = note.getStem(); + if (stem) { + const stem_x = note.getStemX(); + stem.setNoteHeadXBounds(stem_x, stem_x); + stem.setContext(ctx).draw(); + } + }, this); + } + drawBeamLines(ctx) { + const valid_beam_durations = ['4', '8', '16', '32', '64']; + const firstNote = this.notes[0]; + let beamY = this.getBeamYToDraw(); + const firstStemX = firstNote.getStemX(); + const beamThickness = this.render_options.beam_width * this.stem_direction; + for (let i = 0; i < valid_beam_durations.length; ++i) { + const duration = valid_beam_durations[i]; + const beamLines = this.getBeamLines(duration); + for (let j = 0; j < beamLines.length; ++j) { + const beam_line = beamLines[j]; + const startBeamX = beam_line.start; + const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope); + const lastBeamX = beam_line.end; + if (lastBeamX) { + const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope); + ctx.beginPath(); + ctx.moveTo(startBeamX, startBeamY); + ctx.lineTo(startBeamX, startBeamY + beamThickness); + ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness); + ctx.lineTo(lastBeamX + 1, lastBeamY); + ctx.closePath(); + ctx.fill(); + } + else { + throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.'); + } + } + beamY += beamThickness * 1.5; + } + } + preFormat() { + return this; + } + postFormat() { + if (this.postFormatted) + return; + if (isTabNote(this.notes[0]) || this.render_options.flat_beams) { + this.calculateFlatSlope(); + } + else { + this.calculateSlope(); + } + this.applyStemExtensions(); + this.postFormatted = true; + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + if (this.unbeamable) + return; + if (!this.postFormatted) { + this.postFormat(); + } + this.drawStems(ctx); + this.applyStyle(); + ctx.openGroup('beam', this.getAttribute('id')); + this.drawBeamLines(ctx); + ctx.closeGroup(); + this.restoreStyle(); + } +} diff --git a/build/esm/src/bend.js b/build/esm/src/bend.js new file mode 100644 index 0000000000..5068c8a9f2 --- /dev/null +++ b/build/esm/src/bend.js @@ -0,0 +1,203 @@ +import { Element } from './element.js'; +import { Modifier } from './modifier.js'; +import { TextFormatter } from './textformatter.js'; +import { isTabNote } from './typeguard.js'; +import { RuntimeError } from './util.js'; +class Bend extends Modifier { + static get CATEGORY() { + return "Bend"; + } + static get UP() { + return 0; + } + static get DOWN() { + return 1; + } + static format(bends, state) { + if (!bends || bends.length === 0) + return false; + let last_width = 0; + for (let i = 0; i < bends.length; ++i) { + const bend = bends[i]; + const note = bend.checkAttachedNote(); + if (isTabNote(note)) { + const stringPos = note.leastString() - 1; + if (state.top_text_line < stringPos) { + state.top_text_line = stringPos; + } + } + bend.setXShift(last_width); + last_width = bend.getWidth(); + bend.setTextLine(state.top_text_line); + } + state.right_shift += last_width; + state.top_text_line += 1; + return true; + } + constructor(text, release = false, phrase) { + super(); + this.text = text; + this.x_shift = 0; + this.release = release; + this.tap = ''; + this.resetFont(); + this.render_options = { + line_width: 1.5, + line_style: '#777777', + bend_width: 8, + release_width: 8, + }; + if (phrase) { + this.phrase = phrase; + } + else { + this.phrase = [{ type: Bend.UP, text: this.text }]; + if (this.release) + this.phrase.push({ type: Bend.DOWN, text: '' }); + } + this.updateWidth(); + } + setXShift(value) { + this.x_shift = value; + this.updateWidth(); + return this; + } + setTap(value) { + this.tap = value; + return this; + } + getText() { + return this.text; + } + getTextHeight() { + const textFormatter = TextFormatter.create(this.textFont); + return textFormatter.maxHeight; + } + updateWidth() { + const textFormatter = TextFormatter.create(this.textFont); + const measureText = (text) => { + return textFormatter.getWidthForTextInPx(text); + }; + let totalWidth = 0; + for (let i = 0; i < this.phrase.length; ++i) { + const bend = this.phrase[i]; + if (bend.width !== undefined) { + totalWidth += bend.width; + } + else { + const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width; + bend.width = Math.max(additional_width, measureText(bend.text)) + 3; + bend.draw_width = bend.width / 2; + totalWidth += bend.width; + } + } + this.setWidth(totalWidth + this.x_shift); + return this; + } + draw() { + var _a; + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index); + start.x += 3; + start.y += 0.5; + const x_shift = this.x_shift; + const stave = note.checkStave(); + const spacing = stave.getSpacingBetweenLines(); + const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b)); + const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3; + const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1; + const renderBend = (x, y, width, height) => { + const cp_x = x + width; + const cp_y = y; + ctx.save(); + ctx.beginPath(); + ctx.setLineWidth(this.render_options.line_width); + ctx.setStrokeStyle(this.render_options.line_style); + ctx.setFillStyle(this.render_options.line_style); + ctx.moveTo(x, y); + ctx.quadraticCurveTo(cp_x, cp_y, x + width, height); + ctx.stroke(); + ctx.restore(); + }; + const renderRelease = (x, y, width, height) => { + ctx.save(); + ctx.beginPath(); + ctx.setLineWidth(this.render_options.line_width); + ctx.setStrokeStyle(this.render_options.line_style); + ctx.setFillStyle(this.render_options.line_style); + ctx.moveTo(x, height); + ctx.quadraticCurveTo(x + width, height, x + width, y); + ctx.stroke(); + ctx.restore(); + }; + const renderArrowHead = (x, y, direction) => { + const width = 4; + const yBase = y + width * direction; + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x - width, yBase); + ctx.lineTo(x + width, yBase); + ctx.closePath(); + ctx.fill(); + }; + const renderText = (x, text) => { + ctx.save(); + ctx.setFont(this.textFont); + const render_x = x - ctx.measureText(text).width / 2; + ctx.fillText(text, render_x, annotation_y); + ctx.restore(); + }; + let last_bend = undefined; + let last_bend_draw_width = 0; + let last_drawn_width = 0; + if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) { + const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index); + renderText(tapStart.x, this.tap); + } + for (let i = 0; i < this.phrase.length; ++i) { + const bend = this.phrase[i]; + if (!bend.draw_width) + bend.draw_width = 0; + if (i === 0) + bend.draw_width += x_shift; + last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0); + if (bend.type === Bend.UP) { + if (last_bend && last_bend.type === Bend.UP) { + renderArrowHead(start.x, bend_height, +1); + } + renderBend(start.x, start.y, last_drawn_width, bend_height); + } + if (bend.type === Bend.DOWN) { + if (last_bend && last_bend.type === Bend.UP) { + renderRelease(start.x, start.y, last_drawn_width, bend_height); + } + if (last_bend && last_bend.type === Bend.DOWN) { + renderArrowHead(start.x, start.y, -1); + renderRelease(start.x, start.y, last_drawn_width, bend_height); + } + if (!last_bend) { + last_drawn_width = bend.draw_width; + renderRelease(start.x, start.y, last_drawn_width, bend_height); + } + } + renderText(start.x + last_drawn_width, bend.text); + last_bend = bend; + last_bend_draw_width = bend.draw_width; + last_bend.x = start.x; + start.x += last_drawn_width; + } + if (!last_bend || last_bend.x == undefined) { + throw new RuntimeError('NoLastBendForBend', 'Internal error.'); + } + if (last_bend.type === Bend.UP) { + renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1); + } + else if (last_bend.type === Bend.DOWN) { + renderArrowHead(last_bend.x + last_drawn_width, start.y, -1); + } + } +} +Bend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT); +export { Bend }; diff --git a/build/esm/src/boundingbox.js b/build/esm/src/boundingbox.js new file mode 100644 index 0000000000..1d1adbcea0 --- /dev/null +++ b/build/esm/src/boundingbox.js @@ -0,0 +1,59 @@ +export class BoundingBox { + static copy(that) { + return new BoundingBox(that.x, that.y, that.w, that.h); + } + constructor(x, y, w, h) { + this.x = x; + this.y = y; + this.w = w; + this.h = h; + } + getX() { + return this.x; + } + getY() { + return this.y; + } + getW() { + return this.w; + } + getH() { + return this.h; + } + setX(x) { + this.x = x; + return this; + } + setY(y) { + this.y = y; + return this; + } + setW(w) { + this.w = w; + return this; + } + setH(h) { + this.h = h; + return this; + } + move(x, y) { + this.x += x; + this.y += y; + return this; + } + clone() { + return BoundingBox.copy(this); + } + mergeWith(boundingBox) { + const that = boundingBox; + const new_x = this.x < that.x ? this.x : that.x; + const new_y = this.y < that.y ? this.y : that.y; + const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x; + const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y; + this.x = new_x; + this.y = new_y; + this.w = new_w; + this.h = new_h; + return this; + } +} diff --git a/build/esm/src/boundingboxcomputation.js b/build/esm/src/boundingboxcomputation.js new file mode 100644 index 0000000000..ee8588e456 --- /dev/null +++ b/build/esm/src/boundingboxcomputation.js @@ -0,0 +1,107 @@ +export class BoundingBoxComputation { + constructor() { + this.x1 = Number.NaN; + this.y1 = Number.NaN; + this.x2 = Number.NaN; + this.y2 = Number.NaN; + } + getX1() { + return this.x1; + } + getY1() { + return this.y1; + } + width() { + return this.x2 - this.x1; + } + height() { + return this.y2 - this.y1; + } + addPoint(x, y) { + if (isNaN(this.x1) || x < this.x1) + this.x1 = x; + if (isNaN(this.x2) || x > this.x2) + this.x2 = x; + if (isNaN(this.y1) || y < this.y1) + this.y1 = y; + if (isNaN(this.y2) || y > this.y2) + this.y2 = y; + } + addX(x) { + this.addPoint(x, this.y1); + } + addY(y) { + this.addPoint(this.x1, y); + } + addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) { + this.addPoint(p0x, p0y); + this.addPoint(p2x, p2y); + const p01x = p1x - p0x; + const p12x = p2x - p1x; + let denom = p01x - p12x; + if (denom != 0) { + const t = p01x / denom; + if (t > 0 && t < 1) { + const it = 1 - t; + this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x); + } + } + const p01y = p1y - p0y; + const p12y = p2y - p1y; + denom = p01y - p12y; + if (denom != 0) { + const t = p01y / denom; + if (t > 0 && t < 1) { + const it = 1 - t; + this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y); + } + } + } + addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) { + const p0 = [p0x, p0y]; + const p1 = [p1x, p1y]; + const p2 = [p2x, p2y]; + const p3 = [p3x, p3y]; + let i; + this.addPoint(p0[0], p0[1]); + this.addPoint(p3[0], p3[1]); + const f = (t, i) => Math.pow(1 - t, 3) * p0[i] + + 3 * Math.pow(1 - t, 2) * t * p1[i] + + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + + Math.pow(t, 3) * p3[i]; + for (i = 0; i <= 1; i++) { + const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; + const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; + const c = 3 * p1[i] - 3 * p0[i]; + if (a === 0) { + if (b === 0) + continue; + const t = -c / b; + if (0 < t && t < 1) { + if (i === 0) + this.addX(f(t, i)); + if (i === 1) + this.addY(f(t, i)); + } + continue; + } + const b2ac = Math.pow(b, 2) - 4 * c * a; + if (b2ac < 0) + continue; + const t1 = (-b + Math.sqrt(b2ac)) / (2 * a); + if (0 < t1 && t1 < 1) { + if (i === 0) + this.addX(f(t1, i)); + if (i === 1) + this.addY(f(t1, i)); + } + const t2 = (-b - Math.sqrt(b2ac)) / (2 * a); + if (0 < t2 && t2 < 1) { + if (i === 0) + this.addX(f(t2, i)); + if (i === 1) + this.addY(f(t2, i)); + } + } + } +} diff --git a/build/esm/src/canvascontext.js b/build/esm/src/canvascontext.js new file mode 100644 index 0000000000..6efadd10f6 --- /dev/null +++ b/build/esm/src/canvascontext.js @@ -0,0 +1,203 @@ +import { Font } from './font.js'; +import { RenderContext } from './rendercontext.js'; +import { globalObject, warn } from './util.js'; +import { isHTMLCanvas } from './web.js'; +export class CanvasContext extends RenderContext { + static get WIDTH() { + return 600; + } + static get HEIGHT() { + return 400; + } + static get CANVAS_BROWSER_SIZE_LIMIT() { + return 32767; + } + static sanitizeCanvasDims(width, height) { + const limit = this.CANVAS_BROWSER_SIZE_LIMIT; + if (Math.max(width, height) > limit) { + warn('Canvas dimensions exceed browser limit. Cropping to ' + limit); + if (width > limit) { + width = limit; + } + if (height > limit) { + height = limit; + } + } + return [width, height]; + } + constructor(context) { + super(); + this.textHeight = 0; + this.context2D = context; + if (!context.canvas) { + this.canvas = { + width: CanvasContext.WIDTH, + height: CanvasContext.HEIGHT, + }; + } + else { + this.canvas = context.canvas; + } + } + clear() { + this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height); + } + openGroup(cls, id, attrs) { + } + closeGroup() { + } + add(child) { + } + setFillStyle(style) { + this.context2D.fillStyle = style; + return this; + } + setBackgroundFillStyle(style) { + return this; + } + setStrokeStyle(style) { + this.context2D.strokeStyle = style; + return this; + } + setShadowColor(color) { + this.context2D.shadowColor = color; + return this; + } + setShadowBlur(blur) { + const t = this.context2D.getTransform(); + const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d); + this.context2D.shadowBlur = scale * blur; + return this; + } + setLineWidth(width) { + this.context2D.lineWidth = width; + return this; + } + setLineCap(capType) { + this.context2D.lineCap = capType; + return this; + } + setLineDash(dash) { + this.context2D.setLineDash(dash); + return this; + } + scale(x, y) { + this.context2D.scale(x, y); + return this; + } + resize(width, height, devicePixelRatio) { + var _a; + const canvas = this.context2D.canvas; + const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : globalObject().devicePixelRatio) !== null && _a !== void 0 ? _a : 1; + [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr); + width = (width / dpr) | 0; + height = (height / dpr) | 0; + canvas.width = width * dpr; + canvas.height = height * dpr; + if (isHTMLCanvas(canvas)) { + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } + return this.scale(dpr, dpr); + } + rect(x, y, width, height) { + this.context2D.rect(x, y, width, height); + return this; + } + fillRect(x, y, width, height) { + this.context2D.fillRect(x, y, width, height); + return this; + } + clearRect(x, y, width, height) { + this.context2D.clearRect(x, y, width, height); + return this; + } + beginPath() { + this.context2D.beginPath(); + return this; + } + moveTo(x, y) { + this.context2D.moveTo(x, y); + return this; + } + lineTo(x, y) { + this.context2D.lineTo(x, y); + return this; + } + bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) { + this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); + return this; + } + quadraticCurveTo(cpx, cpy, x, y) { + this.context2D.quadraticCurveTo(cpx, cpy, x, y); + return this; + } + arc(x, y, radius, startAngle, endAngle, counterclockwise) { + this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise); + return this; + } + fill() { + this.context2D.fill(); + return this; + } + stroke() { + this.context2D.stroke(); + return this; + } + closePath() { + this.context2D.closePath(); + return this; + } + measureText(text) { + const metrics = this.context2D.measureText(text); + let y = 0; + let height = 0; + if (metrics.fontBoundingBoxAscent) { + y = -metrics.fontBoundingBoxAscent; + height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent; + } + else { + y = -metrics.actualBoundingBoxAscent; + height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent; + } + return { + x: 0, + y: y, + width: metrics.width, + height: height, + }; + } + fillText(text, x, y) { + this.context2D.fillText(text, x, y); + return this; + } + save() { + this.context2D.save(); + return this; + } + restore() { + this.context2D.restore(); + return this; + } + set fillStyle(style) { + this.context2D.fillStyle = style; + } + get fillStyle() { + return this.context2D.fillStyle; + } + set strokeStyle(style) { + this.context2D.strokeStyle = style; + } + get strokeStyle() { + return this.context2D.strokeStyle; + } + setFont(f, size, weight, style) { + const fontInfo = Font.validate(f, size, weight, style); + this.context2D.font = Font.toCSSString(fontInfo); + this.textHeight = Font.convertSizeToPixelValue(fontInfo.size); + return this; + } + getFont() { + return this.context2D.font; + } +} diff --git a/build/esm/src/chordsymbol.js b/build/esm/src/chordsymbol.js new file mode 100644 index 0000000000..3759d79e83 --- /dev/null +++ b/build/esm/src/chordsymbol.js @@ -0,0 +1,608 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { Glyph } from './glyph.js'; +import { Modifier } from './modifier.js'; +import { Tables } from './tables.js'; +import { TextFormatter } from './textformatter.js'; +import { isStemmableNote } from './typeguard.js'; +import { log, RuntimeError } from './util.js'; +function L(...args) { + if (ChordSymbol.DEBUG) + log('Vex.Flow.ChordSymbol', args); +} +export var ChordSymbolHorizontalJustify; +(function (ChordSymbolHorizontalJustify) { + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["LEFT"] = 1] = "LEFT"; + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["CENTER"] = 2] = "CENTER"; + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["RIGHT"] = 3] = "RIGHT"; + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; +})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {})); +export var ChordSymbolVerticalJustify; +(function (ChordSymbolVerticalJustify) { + ChordSymbolVerticalJustify[ChordSymbolVerticalJustify["TOP"] = 1] = "TOP"; + ChordSymbolVerticalJustify[ChordSymbolVerticalJustify["BOTTOM"] = 2] = "BOTTOM"; +})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {})); +export var SymbolTypes; +(function (SymbolTypes) { + SymbolTypes[SymbolTypes["GLYPH"] = 1] = "GLYPH"; + SymbolTypes[SymbolTypes["TEXT"] = 2] = "TEXT"; + SymbolTypes[SymbolTypes["LINE"] = 3] = "LINE"; +})(SymbolTypes || (SymbolTypes = {})); +export var SymbolModifiers; +(function (SymbolModifiers) { + SymbolModifiers[SymbolModifiers["NONE"] = 1] = "NONE"; + SymbolModifiers[SymbolModifiers["SUBSCRIPT"] = 2] = "SUBSCRIPT"; + SymbolModifiers[SymbolModifiers["SUPERSCRIPT"] = 3] = "SUPERSCRIPT"; +})(SymbolModifiers || (SymbolModifiers = {})); +class ChordSymbol extends Modifier { + static get CATEGORY() { + return "ChordSymbol"; + } + static get superSubRatio() { + return ChordSymbol.metrics.global.superSubRatio; + } + static set NO_TEXT_FORMAT(val) { + ChordSymbol.noFormat = val; + } + static get NO_TEXT_FORMAT() { + return ChordSymbol.noFormat; + } + static getMetricForGlyph(glyphCode) { + if (ChordSymbol.metrics.glyphs[glyphCode]) { + return ChordSymbol.metrics.glyphs[glyphCode]; + } + return undefined; + } + static get engravingFontResolution() { + return Tables.currentMusicFont().getResolution(); + } + static get spacingBetweenBlocks() { + return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution; + } + static getWidthForGlyph(glyph) { + const metric = ChordSymbol.getMetricForGlyph(glyph.code); + if (!metric) { + return 0.65; + } + return metric.advanceWidth / ChordSymbol.engravingFontResolution; + } + static getYShiftForGlyph(glyph) { + const metric = ChordSymbol.getMetricForGlyph(glyph.code); + if (!metric) { + return 0; + } + return metric.yOffset / ChordSymbol.engravingFontResolution; + } + static getXShiftForGlyph(glyph) { + const metric = ChordSymbol.getMetricForGlyph(glyph.code); + if (!metric) { + return 0; + } + return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution; + } + static get superscriptOffset() { + return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution; + } + static get subscriptOffset() { + return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution; + } + static get kerningOffset() { + return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution; + } + static get metrics() { + const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol; + if (!chordSymbol) + throw new RuntimeError('BadMetrics', `chordSymbol missing`); + return chordSymbol; + } + static get lowerKerningText() { + return ChordSymbol.metrics.global.lowerKerningText; + } + static get upperKerningText() { + return ChordSymbol.metrics.global.upperKerningText; + } + static isSuperscript(block) { + return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT; + } + static isSubscript(block) { + return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT; + } + static get minPadding() { + const musicFont = Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + static format(symbols, state) { + var _a; + if (!symbols || symbols.length === 0) + return false; + let width = 0; + let nonSuperWidth = 0; + let leftWidth = 0; + let rightWidth = 0; + let maxLeftGlyphWidth = 0; + let maxRightGlyphWidth = 0; + for (const symbol of symbols) { + const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size); + const fontAdj = Font.scaleSize(fontSize, 0.05); + const glyphAdj = fontAdj * 2; + const note = symbol.checkAttachedNote(); + let symbolWidth = 0; + let lineSpaces = 1; + let vAlign = false; + for (let j = 0; j < symbol.symbolBlocks.length; ++j) { + const block = symbol.symbolBlocks[j]; + const sup = ChordSymbol.isSuperscript(block); + const sub = ChordSymbol.isSubscript(block); + const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1; + const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale; + if (sup || sub) { + lineSpaces = 2; + } + const fontSize = symbol.textFormatter.fontSizeInPixels; + const superSubFontSize = fontSize * superSubScale; + if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) { + block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize; + block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize; + block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize; + block.glyph.scale = block.glyph.scale * adj; + } + else if (block.symbolType === SymbolTypes.TEXT) { + block.width = block.width * superSubFontSize; + block.yShift += symbol.getYOffsetForText(block.text) * adj; + } + if (block.symbolType === SymbolTypes.GLYPH && + block.glyph !== undefined && + block.glyph.code === ChordSymbol.glyphs.over.code) { + lineSpaces = 2; + } + block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale; + if (sup && j > 0) { + const prev = symbol.symbolBlocks[j - 1]; + if (!ChordSymbol.isSuperscript(prev)) { + nonSuperWidth = width; + } + } + if (sub && nonSuperWidth > 0) { + vAlign = true; + block.xShift = block.xShift + (nonSuperWidth - width); + width = nonSuperWidth; + nonSuperWidth = 0; + symbol.setEnableKerning(false); + } + if (!sup && !sub) { + nonSuperWidth = 0; + } + block.vAlign = vAlign; + width += block.width; + symbolWidth = width; + } + symbol.updateKerningAdjustments(); + symbol.updateOverBarAdjustments(); + if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) { + symbol.setTextLine(state.top_text_line); + state.top_text_line += lineSpaces; + } + else { + symbol.setTextLine(state.text_line + 1); + state.text_line += lineSpaces + 1; + } + if (symbol.getReportWidth() && isStemmableNote(note)) { + const glyphWidth = note.getGlyphProps().getWidth(); + if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) { + maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth); + leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding; + } + else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) { + maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth); + rightWidth = Math.max(rightWidth, symbolWidth); + } + else { + leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding; + rightWidth = Math.max(rightWidth, symbolWidth / 2); + maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth); + maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth); + } + } + width = 0; + } + const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0)); + const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0)); + state.left_shift += leftOverlap; + state.right_shift += rightOverlap; + return true; + } + constructor() { + super(); + this.symbolBlocks = []; + this.horizontal = ChordSymbolHorizontalJustify.LEFT; + this.vertical = ChordSymbolVerticalJustify.TOP; + this.useKerning = true; + this.reportWidth = true; + this.resetFont(); + } + static get TEXT_FONT() { + let family = 'Roboto Slab, Times, serif'; + if (Tables.currentMusicFont().getName() === 'Petaluma') { + family = 'PetalumaScript, Arial, sans-serif'; + } + return { + family, + size: 12, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, + }; + } + get superscriptOffset() { + return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels; + } + get subscriptOffset() { + return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels; + } + setReportWidth(value) { + this.reportWidth = value; + return this; + } + getReportWidth() { + return this.reportWidth; + } + updateOverBarAdjustments() { + const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash'); + if (barIndex < 0) { + return; + } + const bar = this.symbolBlocks[barIndex]; + const xoff = bar.width / 4; + const yoff = 0.25 * this.textFormatter.fontSizeInPixels; + let symIndex = 0; + for (symIndex === 0; symIndex < barIndex; ++symIndex) { + const symbol = this.symbolBlocks[symIndex]; + symbol.xShift = symbol.xShift + xoff; + symbol.yShift = symbol.yShift - yoff; + } + for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) { + const symbol = this.symbolBlocks[symIndex]; + symbol.xShift = symbol.xShift - xoff; + symbol.yShift = symbol.yShift + yoff; + } + } + updateKerningAdjustments() { + let accum = 0; + for (let j = 0; j < this.symbolBlocks.length; ++j) { + const symbol = this.symbolBlocks[j]; + accum += this.getKerningAdjustment(j); + symbol.xShift += accum; + } + } + getKerningAdjustment(j) { + if (!this.useKerning) { + return 0; + } + const currSymbol = this.symbolBlocks[j]; + const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined; + let adjustment = 0; + if (currSymbol.symbolType === SymbolTypes.GLYPH && + currSymbol.glyph !== undefined && + currSymbol.glyph.code === ChordSymbol.glyphs.over.code) { + adjustment += currSymbol.glyph.metrics.x_shift; + } + if (prevSymbol !== undefined && + prevSymbol.symbolType === SymbolTypes.GLYPH && + prevSymbol.glyph !== undefined && + prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) { + adjustment += prevSymbol.glyph.metrics.x_shift; + } + let preKernUpper = false; + let preKernLower = false; + if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) { + preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]); + preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]); + } + const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels; + if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) { + adjustment += kerningOffsetPixels; + } + if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) { + if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') { + adjustment += kerningOffsetPixels / 2; + } + if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) { + adjustment += kerningOffsetPixels / 2; + } + } + return adjustment; + } + getSymbolBlock(params = {}) { + var _a, _b, _c; + const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT; + const symbolBlock = { + text: (_b = params.text) !== null && _b !== void 0 ? _b : '', + symbolType, + symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE, + xShift: 0, + yShift: 0, + vAlign: false, + width: 0, + }; + if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') { + const glyphArgs = ChordSymbol.glyphs[params.glyph]; + const glyphPoints = 20; + symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' }); + } + else if (symbolType === SymbolTypes.TEXT) { + symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text); + } + else if (symbolType === SymbolTypes.LINE) { + symbolBlock.width = params.width; + } + return symbolBlock; + } + addSymbolBlock(parameters) { + this.symbolBlocks.push(this.getSymbolBlock(parameters)); + return this; + } + addText(text, parameters = {}) { + const symbolType = SymbolTypes.TEXT; + return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType })); + } + addTextSuperscript(text) { + const symbolType = SymbolTypes.TEXT; + const symbolModifier = SymbolModifiers.SUPERSCRIPT; + return this.addSymbolBlock({ text, symbolType, symbolModifier }); + } + addTextSubscript(text) { + const symbolType = SymbolTypes.TEXT; + const symbolModifier = SymbolModifiers.SUBSCRIPT; + return this.addSymbolBlock({ text, symbolType, symbolModifier }); + } + addGlyphSuperscript(glyph) { + const symbolType = SymbolTypes.GLYPH; + const symbolModifier = SymbolModifiers.SUPERSCRIPT; + return this.addSymbolBlock({ glyph, symbolType, symbolModifier }); + } + addGlyph(glyph, params = {}) { + const symbolType = SymbolTypes.GLYPH; + return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType })); + } + addGlyphOrText(text, params = {}) { + let str = ''; + for (let i = 0; i < text.length; ++i) { + const char = text[i]; + if (ChordSymbol.glyphs[char]) { + if (str.length > 0) { + this.addText(str, params); + str = ''; + } + this.addGlyph(char, params); + } + else { + str += char; + } + } + if (str.length > 0) { + this.addText(str, params); + } + return this; + } + addLine(width, params = {}) { + const symbolType = SymbolTypes.LINE; + return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width })); + } + setFont(f, size, weight, style) { + super.setFont(f, size, weight, style); + this.textFormatter = TextFormatter.create(this.textFont); + return this; + } + setEnableKerning(val) { + this.useKerning = val; + return this; + } + setVertical(vj) { + this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj; + return this; + } + getVertical() { + return this.vertical; + } + setHorizontal(hj) { + this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj; + return this; + } + getHorizontal() { + return this.horizontal; + } + getWidth() { + let width = 0; + this.symbolBlocks.forEach((symbol) => { + width += symbol.vAlign ? 0 : symbol.width; + }); + return width; + } + getYOffsetForText(text) { + var _a; + let acc = 0; + let i = 0; + for (i = 0; i < text.length; ++i) { + const metrics = this.textFormatter.getGlyphMetrics(text[i]); + if (metrics) { + const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0; + acc = yMax < acc ? yMax : acc; + } + } + const resolution = this.textFormatter.getResolution(); + return i > 0 ? -1 * (acc / resolution) : 0; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + ctx.save(); + this.applyStyle(); + ctx.openGroup('chordsymbol', this.getAttribute('id')); + const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index); + ctx.setFont(this.textFont); + let y; + const hasStem = note.hasStem(); + const stave = note.checkStave(); + if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) { + y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK); + if (hasStem) { + const stem_ext = note.checkStem().getExtents(); + const spacing = stave.getSpacingBetweenLines(); + const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY; + y = Math.max(y, stem_base + spacing * (this.text_line + 2)); + } + } + else { + const topY = Math.min(...note.getYs()); + y = Math.min(stave.getYForTopText(this.text_line), topY - 10); + if (hasStem) { + const stem_ext = note.checkStem().getExtents(); + const spacing = stave.getSpacingBetweenLines(); + y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line); + } + } + let x = start.x; + if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) { + x = start.x; + } + else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) { + x = start.x + this.getWidth(); + } + else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) { + x = start.x - this.getWidth() / 2; + } + else { + x = note.getStemX() - this.getWidth() / 2; + } + L('Rendering ChordSymbol: ', this.textFormatter, x, y); + this.symbolBlocks.forEach((symbol) => { + const isSuper = ChordSymbol.isSuperscript(symbol); + const isSub = ChordSymbol.isSubscript(symbol); + let curY = y; + L('shift was ', symbol.xShift, symbol.yShift); + L('curY pre sub ', curY); + if (isSuper) { + curY += this.superscriptOffset; + } + if (isSub) { + curY += this.subscriptOffset; + } + L('curY sup/sub ', curY); + if (symbol.symbolType === SymbolTypes.TEXT) { + if (isSuper || isSub) { + ctx.save(); + if (this.textFont) { + const { family, size, weight, style } = this.textFont; + const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio); + ctx.setFont(family, smallerFontSize, weight, style); + } + } + L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift); + ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift); + if (isSuper || isSub) { + ctx.restore(); + } + } + else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) { + curY += symbol.yShift; + L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY); + symbol.glyph.render(ctx, x + symbol.xShift, curY); + } + else if (symbol.symbolType === SymbolTypes.LINE) { + L('Rendering Line : ', symbol.width, x, curY); + ctx.beginPath(); + ctx.setLineWidth(1); + ctx.moveTo(x, y); + ctx.lineTo(x + symbol.width, curY); + ctx.stroke(); + } + x += symbol.width; + if (symbol.vAlign) { + x += symbol.xShift; + } + }); + ctx.closeGroup(); + this.restoreStyle(); + ctx.restore(); + } +} +ChordSymbol.DEBUG = false; +ChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify; +ChordSymbol.HorizontalJustifyString = { + left: ChordSymbolHorizontalJustify.LEFT, + right: ChordSymbolHorizontalJustify.RIGHT, + center: ChordSymbolHorizontalJustify.CENTER, + centerStem: ChordSymbolHorizontalJustify.CENTER_STEM, +}; +ChordSymbol.VerticalJustify = ChordSymbolVerticalJustify; +ChordSymbol.VerticalJustifyString = { + top: ChordSymbolVerticalJustify.TOP, + above: ChordSymbolVerticalJustify.TOP, + below: ChordSymbolVerticalJustify.BOTTOM, + bottom: ChordSymbolVerticalJustify.BOTTOM, +}; +ChordSymbol.glyphs = { + diminished: { + code: 'csymDiminished', + }, + dim: { + code: 'csymDiminished', + }, + halfDiminished: { + code: 'csymHalfDiminished', + }, + '+': { + code: 'csymAugmented', + }, + augmented: { + code: 'csymAugmented', + }, + majorSeventh: { + code: 'csymMajorSeventh', + }, + minor: { + code: 'csymMinor', + }, + '-': { + code: 'csymMinor', + }, + '(': { + code: 'csymParensLeftTall', + }, + leftParen: { + code: 'csymParensLeftTall', + }, + ')': { + code: 'csymParensRightTall', + }, + rightParen: { + code: 'csymParensRightTall', + }, + leftBracket: { + code: 'csymBracketLeftTall', + }, + rightBracket: { + code: 'csymBracketRightTall', + }, + leftParenTall: { + code: 'csymParensLeftVeryTall', + }, + rightParenTall: { + code: 'csymParensRightVeryTall', + }, + '/': { + code: 'csymDiagonalArrangementSlash', + }, + over: { + code: 'csymDiagonalArrangementSlash', + }, + '#': { + code: 'accidentalSharp', + }, + b: { + code: 'accidentalFlat', + }, +}; +ChordSymbol.symbolTypes = SymbolTypes; +ChordSymbol.symbolModifiers = SymbolModifiers; +ChordSymbol.noFormat = false; +export { ChordSymbol }; diff --git a/build/esm/src/clef.js b/build/esm/src/clef.js new file mode 100644 index 0000000000..9dd24003bc --- /dev/null +++ b/build/esm/src/clef.js @@ -0,0 +1,137 @@ +import { Glyph } from './glyph.js'; +import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; +import { Tables } from './tables.js'; +import { defined, log } from './util.js'; +function L(...args) { + if (Clef.DEBUG) + log('Vex.Flow.Clef', args); +} +class Clef extends StaveModifier { + static get CATEGORY() { + return "Clef"; + } + static get types() { + return { + treble: { + code: 'gClef', + line: 3, + }, + bass: { + code: 'fClef', + line: 1, + }, + alto: { + code: 'cClef', + line: 2, + }, + tenor: { + code: 'cClef', + line: 1, + }, + percussion: { + code: 'unpitchedPercussionClef1', + line: 2, + }, + soprano: { + code: 'cClef', + line: 4, + }, + 'mezzo-soprano': { + code: 'cClef', + line: 3, + }, + 'baritone-c': { + code: 'cClef', + line: 0, + }, + 'baritone-f': { + code: 'fClef', + line: 2, + }, + subbass: { + code: 'fClef', + line: 0, + }, + french: { + code: 'gClef', + line: 4, + }, + tab: { + code: '6stringTabClef', + line: 2.5, + }, + }; + } + static get annotationSmufl() { + return { + '8va': 'timeSig8', + '8vb': 'timeSig8', + }; + } + constructor(type, size, annotation) { + super(); + this.clef = Clef.types['treble']; + this.setPosition(StaveModifierPosition.BEGIN); + this.setType(type, size, annotation); + this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`)); + L('Creating clef:', type); + } + setType(type, size, annotation) { + this.type = type; + this.clef = Clef.types[type]; + if (size === undefined) { + this.size = 'default'; + } + else { + this.size = size; + } + const musicFont = Tables.currentMusicFont(); + if (annotation !== undefined) { + const code = Clef.annotationSmufl[annotation]; + const point = (Clef.getPoint(this.size) / 5) * 3; + const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`); + const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`); + this.annotation = { code, point, line, x_shift }; + this.attachment = new Glyph(this.annotation.code, this.annotation.point); + this.attachment.metrics.x_max = 0; + this.attachment.setXShift(this.annotation.x_shift); + } + else { + this.annotation = undefined; + } + return this; + } + getWidth() { + if (this.type === 'tab') { + defined(this.stave, 'ClefError', "Can't get width without stave."); + } + return this.width; + } + static getPoint(size) { + return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 3) * 2; + } + setStave(stave) { + this.stave = stave; + return this; + } + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('clef', this.getAttribute('id')); + Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, { + category: `clef_${this.size}`, + }); + if (this.annotation !== undefined && this.attachment !== undefined) { + this.placeGlyphOnLine(this.attachment, stave, this.annotation.line); + this.attachment.setStave(stave); + this.attachment.setContext(ctx); + this.attachment.renderToStave(this.x); + } + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} +Clef.DEBUG = false; +export { Clef }; diff --git a/build/esm/src/clefnote.js b/build/esm/src/clefnote.js new file mode 100644 index 0000000000..57f8ffa106 --- /dev/null +++ b/build/esm/src/clefnote.js @@ -0,0 +1,51 @@ +import { Clef } from './clef.js'; +import { Glyph } from './glyph.js'; +import { Note } from './note.js'; +export class ClefNote extends Note { + static get CATEGORY() { + return "ClefNote"; + } + constructor(type, size, annotation) { + super({ duration: 'b' }); + this.type = type; + const clef = new Clef(type, size, annotation); + this.clef = clef.clef; + this.annotation = clef.annotation; + this.size = size === undefined ? 'default' : size; + this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`)); + this.ignore_ticks = true; + } + setType(type, size, annotation) { + this.type = type; + this.size = size; + const clef = new Clef(type, size, annotation); + this.clef = clef.clef; + this.annotation = clef.annotation; + this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`)); + return this; + } + getClef() { + return this.clef; + } + preFormat() { + this.preFormatted = true; + return this; + } + draw() { + const stave = this.checkStave(); + const ctx = this.checkContext(); + this.setRendered(); + const abs_x = this.getAbsoluteX(); + Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, { + category: `clefNote_${this.size}`, + }); + if (this.annotation !== undefined) { + const attachment = new Glyph(this.annotation.code, this.annotation.point); + attachment.setContext(ctx); + attachment.setStave(stave); + attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs()); + attachment.setXShift(this.annotation.x_shift); + attachment.renderToStave(abs_x); + } + } +} diff --git a/build/esm/src/crescendo.js b/build/esm/src/crescendo.js new file mode 100644 index 0000000000..f757ccc150 --- /dev/null +++ b/build/esm/src/crescendo.js @@ -0,0 +1,78 @@ +import { Note } from './note.js'; +import { TickContext } from './tickcontext.js'; +import { log } from './util.js'; +function L(...args) { + if (Crescendo.DEBUG) + log('Vex.Flow.Crescendo', args); +} +function renderHairpin(ctx, params) { + const begin_x = params.begin_x; + const end_x = params.end_x; + const y = params.y; + const half_height = params.height / 2; + ctx.beginPath(); + if (params.reverse) { + ctx.moveTo(begin_x, y - half_height); + ctx.lineTo(end_x, y); + ctx.lineTo(begin_x, y + half_height); + } + else { + ctx.moveTo(end_x, y - half_height); + ctx.lineTo(begin_x, y); + ctx.lineTo(end_x, y + half_height); + } + ctx.stroke(); + ctx.closePath(); +} +class Crescendo extends Note { + static get CATEGORY() { + return "Crescendo"; + } + constructor(noteStruct) { + super(noteStruct); + this.options = { + extend_left: 0, + extend_right: 0, + y_shift: 0, + }; + this.decrescendo = false; + this.line = noteStruct.line || 0; + this.height = 15; + } + setLine(line) { + this.line = line; + return this; + } + setHeight(height) { + this.height = height; + return this; + } + setDecrescendo(decresc) { + this.decrescendo = decresc; + return this; + } + preFormat() { + this.preFormatted = true; + return this; + } + draw() { + const ctx = this.checkContext(); + const stave = this.checkStave(); + this.setRendered(); + const tick_context = this.getTickContext(); + const next_context = TickContext.getNextContext(tick_context); + const begin_x = this.getAbsoluteX(); + const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth(); + const y = stave.getYForLine(this.line + -3) + 1; + L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x); + renderHairpin(ctx, { + begin_x: begin_x - this.options.extend_left, + end_x: end_x + this.options.extend_right, + y: y + this.options.y_shift, + height: this.height, + reverse: this.decrescendo, + }); + } +} +Crescendo.DEBUG = false; +export { Crescendo }; diff --git a/build/esm/src/curve.js b/build/esm/src/curve.js new file mode 100644 index 0000000000..199b170757 --- /dev/null +++ b/build/esm/src/curve.js @@ -0,0 +1,118 @@ +import { Element } from './element.js'; +import { RuntimeError } from './util.js'; +export var CurvePosition; +(function (CurvePosition) { + CurvePosition[CurvePosition["NEAR_HEAD"] = 1] = "NEAR_HEAD"; + CurvePosition[CurvePosition["NEAR_TOP"] = 2] = "NEAR_TOP"; +})(CurvePosition || (CurvePosition = {})); +export class Curve extends Element { + static get CATEGORY() { + return "Curve"; + } + static get Position() { + return CurvePosition; + } + static get PositionString() { + return { + nearHead: CurvePosition.NEAR_HEAD, + nearTop: CurvePosition.NEAR_TOP, + }; + } + constructor(from, to, options) { + super(); + this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [ + { x: 0, y: 10 }, + { x: 0, y: 10 }, + ] }, options); + this.from = from; + this.to = to; + } + setNotes(from, to) { + if (!from && !to) { + throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.'); + } + this.from = from; + this.to = to; + return this; + } + isPartial() { + return !this.from || !this.to; + } + renderCurve(params) { + const ctx = this.checkContext(); + const x_shift = this.render_options.x_shift; + const y_shift = this.render_options.y_shift * params.direction; + const first_x = params.first_x + x_shift; + const first_y = params.first_y + y_shift; + const last_x = params.last_x - x_shift; + const last_y = params.last_y + y_shift; + const thickness = this.render_options.thickness; + const cps = this.render_options.cps; + const { x: cp0x, y: cp0y } = cps[0]; + const { x: cp1x, y: cp1y } = cps[1]; + const cp_spacing = (last_x - first_x) / (cps.length + 2); + ctx.beginPath(); + ctx.moveTo(first_x, first_y); + ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y); + ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y); + ctx.stroke(); + ctx.closePath(); + ctx.fill(); + } + draw() { + this.checkContext(); + this.setRendered(); + const first_note = this.from; + const last_note = this.to; + let first_x; + let last_x; + let first_y; + let last_y; + let stem_direction = 0; + let metric = 'baseY'; + let end_metric = 'baseY'; + function getPosition(position) { + return typeof position === 'string' ? Curve.PositionString[position] : position; + } + const position = getPosition(this.render_options.position); + const position_end = getPosition(this.render_options.position_end); + if (position === CurvePosition.NEAR_TOP) { + metric = 'topY'; + end_metric = 'topY'; + } + if (position_end === CurvePosition.NEAR_HEAD) { + end_metric = 'baseY'; + } + else if (position_end === CurvePosition.NEAR_TOP) { + end_metric = 'topY'; + } + if (first_note) { + first_x = first_note.getTieRightX(); + stem_direction = first_note.getStemDirection(); + first_y = first_note.getStemExtents()[metric]; + } + else { + const stave = last_note.checkStave(); + first_x = stave.getTieStartX(); + first_y = last_note.getStemExtents()[metric]; + } + if (last_note) { + last_x = last_note.getTieLeftX(); + stem_direction = last_note.getStemDirection(); + last_y = last_note.getStemExtents()[end_metric]; + } + else { + const stave = first_note.checkStave(); + last_x = stave.getTieEndX(); + last_y = first_note.getStemExtents()[end_metric]; + } + this.renderCurve({ + first_x, + last_x, + first_y, + last_y, + direction: stem_direction * (this.render_options.invert === true ? -1 : 1), + }); + return true; + } +} diff --git a/build/esm/src/dot.js b/build/esm/src/dot.js new file mode 100644 index 0000000000..454e3d08e0 --- /dev/null +++ b/build/esm/src/dot.js @@ -0,0 +1,137 @@ +import { Modifier } from './modifier.js'; +import { isGraceNote, isStaveNote, isTabNote } from './typeguard.js'; +import { RuntimeError } from './util.js'; +export class Dot extends Modifier { + static get CATEGORY() { + return "Dot"; + } + static getDots(note) { + return note.getModifiersByType(Dot.CATEGORY); + } + static buildAndAttach(notes, options) { + for (const note of notes) { + if (options === null || options === void 0 ? void 0 : options.all) { + for (let i = 0; i < note.keys.length; i++) { + const dot = new Dot(); + dot.setDotShiftY(note.glyphProps.dot_shiftY); + note.addModifier(dot, i); + } + } + else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) { + const dot = new Dot(); + dot.setDotShiftY(note.glyphProps.dot_shiftY); + note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index); + } + else { + const dot = new Dot(); + dot.setDotShiftY(note.glyphProps.dot_shiftY); + note.addModifier(dot, 0); + } + } + } + static format(dots, state) { + const right_shift = state.right_shift; + const dot_spacing = 1; + if (!dots || dots.length === 0) + return false; + const dot_list = []; + const max_shift_map = {}; + for (let i = 0; i < dots.length; ++i) { + const dot = dots[i]; + const note = dot.getNote(); + let props; + let shift; + if (isStaveNote(note)) { + const index = dot.checkIndex(); + props = note.getKeyProps()[index]; + shift = note.getFirstDotPx(); + } + else if (isTabNote(note)) { + props = { line: 0.5 }; + shift = right_shift; + } + else { + throw new RuntimeError('Internal', 'Unexpected instance.'); + } + const note_id = note.getAttribute('id'); + dot_list.push({ line: props.line, note, note_id, dot }); + max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift); + } + dot_list.sort((a, b) => b.line - a.line); + let dot_shift = right_shift; + let x_width = 0; + let last_line = null; + let last_note = null; + let prev_dotted_space = null; + let half_shiftY = 0; + for (let i = 0; i < dot_list.length; ++i) { + const { dot, note, note_id, line } = dot_list[i]; + if (line !== last_line || note !== last_note) { + dot_shift = max_shift_map[note_id]; + } + if (!note.isRest() && line !== last_line) { + if (Math.abs(line % 1) === 0.5) { + half_shiftY = 0; + } + else { + half_shiftY = 0.5; + if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) { + half_shiftY = -0.5; + } + else if (line + half_shiftY === prev_dotted_space) { + half_shiftY = -0.5; + } + } + } + if (note.isRest()) { + dot.dot_shiftY += -half_shiftY; + } + else { + dot.dot_shiftY = -half_shiftY; + } + prev_dotted_space = line + half_shiftY; + dot.setXShift(dot_shift); + dot_shift += dot.getWidth() + dot_spacing; + x_width = dot_shift > x_width ? dot_shift : x_width; + last_line = line; + last_note = note; + } + state.right_shift += x_width; + return true; + } + constructor() { + super(); + this.position = Modifier.Position.RIGHT; + this.radius = 2; + this.setWidth(5); + this.dot_shiftY = 0; + } + setNote(note) { + this.note = note; + if (isGraceNote(note)) { + this.radius *= 0.5; + this.setWidth(3); + } + return this; + } + setDotShiftY(y) { + this.dot_shiftY = y; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const stave = note.checkStave(); + const lineSpace = stave.getSpacingBetweenLines(); + const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true }); + if (isTabNote(note)) { + start.y = note.getStemExtents().baseY; + } + const x = start.x + this.x_shift + this.width - this.radius; + const y = start.y + this.y_shift + this.dot_shiftY * lineSpace; + ctx.beginPath(); + ctx.arc(x, y, this.radius, 0, Math.PI * 2, false); + ctx.fill(); + } +} diff --git a/build/esm/src/easyscore.js b/build/esm/src/easyscore.js new file mode 100644 index 0000000000..e46852d75a --- /dev/null +++ b/build/esm/src/easyscore.js @@ -0,0 +1,375 @@ +import { Articulation } from './articulation.js'; +import { Dot } from './dot.js'; +import { FretHandFinger } from './frethandfinger.js'; +import { Music } from './music.js'; +import { Parser } from './parser.js'; +import { Stem } from './stem.js'; +import { defined, log, RuntimeError } from './util.js'; +function L(...args) { + if (EasyScore.DEBUG) + log('Vex.Flow.EasyScore', args); +} +export class EasyScoreGrammar { + constructor(builder) { + this.builder = builder; + } + begin() { + return this.LINE; + } + LINE() { + return { + expect: [this.PIECE, this.PIECES, this.EOL], + }; + } + PIECE() { + return { + expect: [this.CHORDORNOTE, this.PARAMS], + run: () => this.builder.commitPiece(), + }; + } + PIECES() { + return { + expect: [this.COMMA, this.PIECE], + zeroOrMore: true, + }; + } + PARAMS() { + return { + expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS], + }; + } + CHORDORNOTE() { + return { + expect: [this.CHORD, this.SINGLENOTE], + or: true, + }; + } + CHORD() { + return { + expect: [this.LPAREN, this.NOTES, this.RPAREN], + run: (state) => this.builder.addChord(state.matches[1]), + }; + } + NOTES() { + return { + expect: [this.NOTE], + oneOrMore: true, + }; + } + NOTE() { + return { + expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE], + }; + } + SINGLENOTE() { + return { + expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE], + run: (state) => { + const s = state; + this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]); + }, + }; + } + ACCIDENTAL() { + return { + expect: [this.MICROTONES, this.ACCIDENTALS], + maybe: true, + or: true, + }; + } + DOTS() { + return { + expect: [this.DOT], + zeroOrMore: true, + run: (state) => this.builder.setNoteDots(state.matches), + }; + } + TYPE() { + return { + expect: [this.SLASH, this.MAYBESLASH, this.TYPES], + maybe: true, + run: (state) => this.builder.setNoteType(state.matches[2]), + }; + } + DURATION() { + return { + expect: [this.SLASH, this.DURATIONS], + maybe: true, + run: (state) => this.builder.setNoteDuration(state.matches[1]), + }; + } + OPTS() { + return { + expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET], + maybe: true, + }; + } + KEYVALS() { + return { + expect: [this.COMMA, this.KEYVAL], + zeroOrMore: true, + }; + } + KEYVAL() { + const unquote = (str) => str.slice(1, -1); + return { + expect: [this.KEY, this.EQUALS, this.VAL], + run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])), + }; + } + VAL() { + return { + expect: [this.SVAL, this.DVAL], + or: true, + }; + } + KEY() { + return { token: '[a-zA-Z][a-zA-Z0-9]*' }; + } + DVAL() { + return { token: '["][^"]*["]' }; + } + SVAL() { + return { token: "['][^']*[']" }; + } + NOTENAME() { + return { token: '[a-gA-G]' }; + } + OCTAVE() { + return { token: '[0-9]+' }; + } + ACCIDENTALS() { + return { token: 'bb|b|##|#|n' }; + } + MICROTONES() { + return { token: 'bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o' }; + } + DURATIONS() { + return { token: '[0-9whq]+' }; + } + TYPES() { + return { token: '[rRsSmMhHgG]' }; + } + LPAREN() { + return { token: '[(]' }; + } + RPAREN() { + return { token: '[)]' }; + } + COMMA() { + return { token: '[,]' }; + } + DOT() { + return { token: '[.]' }; + } + SLASH() { + return { token: '[/]' }; + } + MAYBESLASH() { + return { token: '[/]?' }; + } + EQUALS() { + return { token: '[=]' }; + } + LBRACKET() { + return { token: '\\[' }; + } + RBRACKET() { + return { token: '\\]' }; + } + EOL() { + return { token: '$' }; + } +} +export class Piece { + constructor(duration) { + this.chord = []; + this.dots = 0; + this.options = {}; + this.duration = duration; + } +} +export class Builder { + constructor(factory) { + this.commitHooks = []; + this.factory = factory; + this.reset(); + } + reset(options) { + this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options); + this.elements = { notes: [], accidentals: [] }; + this.rollingDuration = '8'; + this.resetPiece(); + } + getFactory() { + return this.factory; + } + getElements() { + return this.elements; + } + addCommitHook(commitHook) { + this.commitHooks.push(commitHook); + } + resetPiece() { + L('resetPiece'); + this.piece = new Piece(this.rollingDuration); + } + setNoteDots(dots) { + L('setNoteDots:', dots); + if (dots) + this.piece.dots = dots.length; + } + setNoteDuration(duration) { + L('setNoteDuration:', duration); + this.rollingDuration = this.piece.duration = duration || this.rollingDuration; + } + setNoteType(type) { + L('setNoteType:', type); + if (type) + this.piece.type = type; + } + addNoteOption(key, value) { + L('addNoteOption: key:', key, 'value:', value); + this.piece.options[key] = value; + } + addNote(key, accid, octave) { + L('addNote:', key, accid, octave); + this.piece.chord.push({ + key: key, + accid, + octave, + }); + } + addSingleNote(key, accid, octave) { + L('addSingleNote:', key, accid, octave); + this.addNote(key, accid, octave); + } + addChord(notes) { + L('startChord'); + if (typeof notes[0] !== 'object') { + this.addSingleNote(notes[0]); + } + else { + notes.forEach((n) => { + if (n) + this.addNote(...n); + }); + } + L('endChord'); + } + commitPiece() { + L('commitPiece'); + const { factory } = this; + if (!factory) + return; + const options = Object.assign(Object.assign({}, this.options), this.piece.options); + const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase(); + const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase(); + const { chord, duration, dots, type } = this.piece; + const standardAccidentals = Music.accidentals; + const keys = chord.map((notePiece) => { + var _a; + return notePiece.key + + (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') + + '/' + + notePiece.octave; + }); + const auto_stem = stem === 'auto'; + const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g' + ? factory.GhostNote({ duration, dots }) + : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem }); + if (!auto_stem) + note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN); + const accidentals = []; + chord.forEach((notePiece, index) => { + const accid = notePiece.accid; + if (typeof accid === 'string') { + const accidental = factory.Accidental({ type: accid }); + note.addModifier(accidental, index); + accidentals.push(accidental); + } + else { + accidentals.push(undefined); + } + }); + for (let i = 0; i < dots; i++) + Dot.buildAndAttach([note], { all: true }); + this.commitHooks.forEach((commitHook) => commitHook(options, note, this)); + this.elements.notes.push(note); + this.elements.accidentals.push(accidentals); + this.resetPiece(); + } +} +function setId(options, note) { + if (options.id === undefined) + return; + note.setAttribute('id', options.id); +} +const commaSeparatedRegex = /\s*,\s*/; +function setClass(options, note) { + if (options.class === undefined) + return; + options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className)); +} +class EasyScore { + constructor(options = {}) { + this.defaults = { + clef: 'treble', + time: '4/4', + stem: 'auto', + }; + this.setOptions(options); + } + set(defaults) { + this.defaults = Object.assign(Object.assign({}, this.defaults), defaults); + return this; + } + setOptions(options) { + var _a, _b; + const factory = options.factory; + const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory); + this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory, + builder }); + this.factory = factory; + this.builder = builder; + this.grammar = new EasyScoreGrammar(this.builder); + this.parser = new Parser(this.grammar); + (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook)); + return this; + } + setContext(context) { + this.factory.setContext(context); + return this; + } + parse(line, options = {}) { + this.builder.reset(options); + const result = this.parser.parse(line); + if (!result.success && this.options.throwOnError) { + L(result); + throw new RuntimeError('Error parsing line: ' + line); + } + return result; + } + beam(notes, options) { + this.factory.Beam({ notes, options }); + return notes; + } + tuplet(notes, options) { + this.factory.Tuplet({ notes, options }); + return notes; + } + notes(line, options = {}) { + options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options); + this.parse(line, options); + return this.builder.getElements().notes; + } + voice(notes, options = {}) { + options = Object.assign({ time: this.defaults.time }, options); + return this.factory.Voice(options).addTickables(notes); + } + addCommitHook(commitHook) { + this.builder.addCommitHook(commitHook); + } +} +EasyScore.DEBUG = false; +export { EasyScore }; diff --git a/build/esm/src/element.js b/build/esm/src/element.js new file mode 100644 index 0000000000..3cbfe9e745 --- /dev/null +++ b/build/esm/src/element.js @@ -0,0 +1,246 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { Registry } from './registry.js'; +import { defined, prefix } from './util.js'; +class Element { + static get CATEGORY() { + return "Element"; + } + static newID() { + return `auto${Element.ID++}`; + } + constructor() { + var _a; + this.children = []; + this.attrs = { + id: Element.newID(), + type: this.getCategory(), + class: '', + }; + this.rendered = false; + (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this); + } + addChildElement(child) { + this.children.push(child); + return this; + } + getCategory() { + return this.constructor.CATEGORY; + } + setStyle(style) { + this.style = style; + return this; + } + setGroupStyle(style) { + this.style = style; + this.children.forEach((child) => child.setGroupStyle(style)); + return this; + } + getStyle() { + return this.style; + } + applyStyle(context = this.context, style = this.getStyle()) { + if (!style) + return this; + if (!context) + return this; + context.save(); + if (style.shadowColor) + context.setShadowColor(style.shadowColor); + if (style.shadowBlur) + context.setShadowBlur(style.shadowBlur); + if (style.fillStyle) + context.setFillStyle(style.fillStyle); + if (style.strokeStyle) + context.setStrokeStyle(style.strokeStyle); + if (style.lineWidth) + context.setLineWidth(style.lineWidth); + return this; + } + restoreStyle(context = this.context, style = this.getStyle()) { + if (!style) + return this; + if (!context) + return this; + context.restore(); + return this; + } + drawWithStyle() { + this.checkContext(); + this.applyStyle(); + this.draw(); + this.restoreStyle(); + } + hasClass(className) { + var _a; + if (!this.attrs.class) + return false; + return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1; + } + addClass(className) { + var _a; + if (this.hasClass(className)) + return this; + if (!this.attrs.class) + this.attrs.class = `${className}`; + else + this.attrs.class = `${this.attrs.class} ${className}`; + (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ + id: this.attrs.id, + name: 'class', + value: className, + oldValue: undefined, + }); + return this; + } + removeClass(className) { + var _a, _b; + if (!this.hasClass(className)) + return this; + const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' '); + if (arr) { + arr.splice(arr.indexOf(className)); + this.attrs.class = arr.join(' '); + } + (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({ + id: this.attrs.id, + name: 'class', + value: undefined, + oldValue: className, + }); + return this; + } + onRegister(registry) { + this.registry = registry; + return this; + } + isRendered() { + return this.rendered; + } + setRendered(rendered = true) { + this.rendered = rendered; + return this; + } + getAttributes() { + return this.attrs; + } + getAttribute(name) { + return this.attrs[name]; + } + getSVGElement(suffix = '') { + const id = prefix(this.attrs.id + suffix); + const element = document.getElementById(id); + if (element) + return element; + } + setAttribute(name, value) { + var _a; + const oldID = this.attrs.id; + const oldValue = this.attrs[name]; + this.attrs[name] = value; + (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue }); + return this; + } + getBoundingBox() { + return this.boundingBox; + } + getContext() { + return this.context; + } + setContext(context) { + this.context = context; + return this; + } + checkContext() { + return defined(this.context, 'NoContext', 'No rendering context attached to instance.'); + } + set font(f) { + this.setFont(f); + } + get font() { + return Font.toCSSString(this.textFont); + } + setFont(font, size, weight, style) { + const defaultTextFont = this.constructor.TEXT_FONT; + const fontIsObject = typeof font === 'object'; + const fontIsString = typeof font === 'string'; + const fontIsUndefined = font === undefined; + const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined; + if (fontIsObject) { + this.textFont = Object.assign(Object.assign({}, defaultTextFont), font); + } + else if (fontIsString && sizeWeightStyleAreUndefined) { + this.textFont = Font.fromCSSString(font); + } + else if (fontIsUndefined && sizeWeightStyleAreUndefined) { + this.textFont = Object.assign({}, defaultTextFont); + } + else { + this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style); + } + return this; + } + getFont() { + if (!this.textFont) { + this.resetFont(); + } + return Font.toCSSString(this.textFont); + } + resetFont() { + this.setFont(); + } + get fontInfo() { + if (!this.textFont) { + this.resetFont(); + } + return Object.assign({}, this.textFont); + } + set fontInfo(fontInfo) { + this.setFont(fontInfo); + } + setFontSize(size) { + const fontInfo = this.fontInfo; + this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style); + return this; + } + getFontSize() { + return this.fontSize; + } + set fontSize(size) { + this.setFontSize(size); + } + get fontSize() { + let size = this.fontInfo.size; + if (typeof size === 'number') { + size = `${size}pt`; + } + return size; + } + get fontSizeInPoints() { + return Font.convertSizeToPointValue(this.fontSize); + } + get fontSizeInPixels() { + return Font.convertSizeToPixelValue(this.fontSize); + } + get fontStyle() { + return this.fontInfo.style; + } + set fontStyle(style) { + const fontInfo = this.fontInfo; + this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style); + } + get fontWeight() { + return this.fontInfo.weight + ''; + } + set fontWeight(weight) { + const fontInfo = this.fontInfo; + this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style); + } +} +Element.ID = 1000; +Element.TEXT_FONT = { + family: Font.SANS_SERIF, + size: Font.SIZE, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, +}; +export { Element }; diff --git a/build/esm/src/factory.js b/build/esm/src/factory.js new file mode 100644 index 0000000000..a9c9e5f0d5 --- /dev/null +++ b/build/esm/src/factory.js @@ -0,0 +1,467 @@ +import { Accidental } from './accidental.js'; +import { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation.js'; +import { Articulation } from './articulation.js'; +import { BarNote } from './barnote.js'; +import { Beam } from './beam.js'; +import { ChordSymbol } from './chordsymbol.js'; +import { ClefNote } from './clefnote.js'; +import { Curve } from './curve.js'; +import { EasyScore } from './easyscore.js'; +import { Element } from './element.js'; +import { Formatter } from './formatter.js'; +import { FretHandFinger } from './frethandfinger.js'; +import { GhostNote } from './ghostnote.js'; +import { GlyphNote } from './glyphnote.js'; +import { GraceNote } from './gracenote.js'; +import { GraceNoteGroup } from './gracenotegroup.js'; +import { KeySigNote } from './keysignote.js'; +import { ModifierContext } from './modifiercontext.js'; +import { MultiMeasureRest } from './multimeasurerest.js'; +import { NoteSubGroup } from './notesubgroup.js'; +import { Ornament } from './ornament.js'; +import { PedalMarking } from './pedalmarking.js'; +import { Renderer } from './renderer.js'; +import { RepeatNote } from './repeatnote.js'; +import { Stave } from './stave.js'; +import { StaveConnector } from './staveconnector.js'; +import { StaveLine } from './staveline.js'; +import { StaveNote } from './stavenote.js'; +import { StaveTie } from './stavetie.js'; +import { StringNumber } from './stringnumber.js'; +import { System } from './system.js'; +import { TabNote } from './tabnote.js'; +import { TabStave } from './tabstave.js'; +import { TextBracket } from './textbracket.js'; +import { TextDynamics } from './textdynamics.js'; +import { TextNote } from './textnote.js'; +import { TickContext } from './tickcontext.js'; +import { TimeSigNote } from './timesignote.js'; +import { Tuplet } from './tuplet.js'; +import { defined, log, RuntimeError } from './util.js'; +import { VibratoBracket } from './vibratobracket.js'; +import { Voice } from './voice.js'; +import { isHTMLCanvas } from './web.js'; +function L(...args) { + if (Factory.DEBUG) + log('Vex.Flow.Factory', args); +} +class Factory { + static newFromElementId(elementId, width = 500, height = 200) { + return new Factory({ renderer: { elementId, width, height } }); + } + constructor(options = {}) { + L('New factory: ', options); + this.options = { + stave: { + space: 10, + }, + renderer: { + elementId: '', + width: 500, + height: 200, + background: '#FFF', + }, + font: Factory.TEXT_FONT, + }; + this.setOptions(options); + } + reset() { + this.renderQ = []; + this.systems = []; + this.staves = []; + this.voices = []; + this.stave = undefined; + } + setOptions(options) { + this.options = Object.assign(Object.assign({}, this.options), options); + this.initRenderer(); + this.reset(); + } + initRenderer() { + const { elementId, width, height, background } = this.options.renderer; + if (elementId == null) { + return; + } + if (elementId == '') { + L(this); + throw new RuntimeError('renderer.elementId not set in FactoryOptions'); + } + let backend = this.options.renderer.backend; + if (backend === undefined) { + const elem = document.getElementById(elementId); + if (isHTMLCanvas(elem)) { + backend = Renderer.Backends.CANVAS; + } + else { + backend = Renderer.Backends.SVG; + } + } + this.context = Renderer.buildContext(elementId, backend, width, height, background); + } + getContext() { + return this.context; + } + setContext(context) { + this.context = context; + return this; + } + getStave() { + return this.stave; + } + getVoices() { + return this.voices; + } + Stave(params) { + const staveSpace = this.options.stave.space; + const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params); + const stave = new Stave(p.x, p.y, p.width, p.options); + this.staves.push(stave); + stave.setContext(this.context); + this.stave = stave; + return stave; + } + TabStave(params) { + const staveSpace = this.options.stave.space; + const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params); + const stave = new TabStave(p.x, p.y, p.width, p.options); + this.staves.push(stave); + stave.setContext(this.context); + this.stave = stave; + return stave; + } + StaveNote(noteStruct) { + const note = new StaveNote(noteStruct); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + GlyphNote(glyph, noteStruct, options) { + const note = new GlyphNote(glyph, noteStruct, options); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + RepeatNote(type, noteStruct, options) { + const note = new RepeatNote(type, noteStruct, options); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + GhostNote(noteStruct) { + const ghostNote = new GhostNote(noteStruct); + if (this.stave) + ghostNote.setStave(this.stave); + ghostNote.setContext(this.context); + this.renderQ.push(ghostNote); + return ghostNote; + } + TextNote(noteStruct) { + const textNote = new TextNote(noteStruct); + if (this.stave) + textNote.setStave(this.stave); + textNote.setContext(this.context); + this.renderQ.push(textNote); + return textNote; + } + BarNote(params = {}) { + const barNote = new BarNote(params.type); + if (this.stave) + barNote.setStave(this.stave); + barNote.setContext(this.context); + this.renderQ.push(barNote); + return barNote; + } + ClefNote(params) { + const p = Object.assign({ type: 'treble', options: { + size: 'default', + annotation: undefined, + } }, params); + const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation); + if (this.stave) + clefNote.setStave(this.stave); + clefNote.setContext(this.context); + this.renderQ.push(clefNote); + return clefNote; + } + TimeSigNote(params) { + const p = Object.assign({ time: '4/4' }, params); + const timeSigNote = new TimeSigNote(p.time); + if (this.stave) + timeSigNote.setStave(this.stave); + timeSigNote.setContext(this.context); + this.renderQ.push(timeSigNote); + return timeSigNote; + } + KeySigNote(params) { + const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey); + if (this.stave) + keySigNote.setStave(this.stave); + keySigNote.setContext(this.context); + this.renderQ.push(keySigNote); + return keySigNote; + } + TabNote(noteStruct) { + const note = new TabNote(noteStruct); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + GraceNote(noteStruct) { + const note = new GraceNote(noteStruct); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + return note; + } + GraceNoteGroup(params) { + const group = new GraceNoteGroup(params.notes, params.slur); + group.setContext(this.context); + return group; + } + Accidental(params) { + const accid = new Accidental(params.type); + accid.setContext(this.context); + return accid; + } + Annotation(params) { + const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params); + const annotation = new Annotation(p.text); + annotation.setJustification(p.hJustify); + annotation.setVerticalJustification(p.vJustify); + annotation.setFont(p.font); + annotation.setContext(this.context); + return annotation; + } + ChordSymbol(params) { + const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params); + const chordSymbol = new ChordSymbol(); + chordSymbol.setHorizontal(p.hJustify); + chordSymbol.setVertical(p.vJustify); + chordSymbol.setEnableKerning(p.kerning); + chordSymbol.setReportWidth(p.reportWidth); + if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') { + if (typeof p.fontWeight === 'string') + chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight); + else + chordSymbol.setFont(p.fontFamily, p.fontSize, ''); + } + else if (typeof p.fontSize === 'number') { + chordSymbol.setFontSize(p.fontSize); + } + chordSymbol.setContext(this.context); + return chordSymbol; + } + Articulation(params) { + var _a; + const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.'); + if ((params === null || params === void 0 ? void 0 : params.position) != undefined) + articulation.setPosition(params.position); + if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined) + articulation.setBetweenLines(params.betweenLines); + articulation.setContext(this.context); + return articulation; + } + Ornament(type, params) { + const options = Object.assign({ type, position: 0, accidental: '' }, params); + const ornament = new Ornament(type); + ornament.setPosition(options.position); + if (options.upperAccidental) { + ornament.setUpperAccidental(options.upperAccidental); + } + if (options.lowerAccidental) { + ornament.setLowerAccidental(options.lowerAccidental); + } + if (typeof options.delayed !== 'undefined') { + ornament.setDelayed(options.delayed); + } + ornament.setContext(this.context); + return ornament; + } + TextDynamics(params) { + const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params); + const text = new TextDynamics({ + text: p.text, + line: p.line, + duration: p.duration, + dots: p.dots, + }); + if (this.stave) + text.setStave(this.stave); + text.setContext(this.context); + this.renderQ.push(text); + return text; + } + Fingering(params) { + const p = Object.assign({ number: '0', position: 'left' }, params); + const fingering = new FretHandFinger(p.number); + fingering.setPosition(p.position); + fingering.setContext(this.context); + return fingering; + } + StringNumber(params, drawCircle = true) { + const stringNumber = new StringNumber(params.number); + stringNumber.setPosition(params.position); + stringNumber.setContext(this.context); + stringNumber.setDrawCircle(drawCircle); + return stringNumber; + } + TickContext() { + return new TickContext(); + } + ModifierContext() { + return new ModifierContext(); + } + MultiMeasureRest(params) { + const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures'); + const multiMeasureRest = new MultiMeasureRest(numMeasures, params); + multiMeasureRest.setContext(this.context); + this.renderQ.push(multiMeasureRest); + return multiMeasureRest; + } + Voice(params) { + const p = Object.assign({ time: '4/4' }, params); + const voice = new Voice(p.time); + this.voices.push(voice); + return voice; + } + StaveConnector(params) { + const connector = new StaveConnector(params.top_stave, params.bottom_stave); + connector.setType(params.type).setContext(this.context); + this.renderQ.push(connector); + return connector; + } + Formatter(options) { + return new Formatter(options); + } + Tuplet(params) { + const p = Object.assign({ notes: [], options: {} }, params); + const tuplet = new Tuplet(p.notes, p.options).setContext(this.context); + this.renderQ.push(tuplet); + return tuplet; + } + Beam(params) { + var _a, _b, _c, _d, _e; + const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context); + beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []); + if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) { + Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => { + beam.setPartialBeamSideAt(Number(noteIndex), direction); + }); + } + this.renderQ.push(beam); + return beam; + } + Curve(params) { + const curve = new Curve(params.from, params.to, params.options).setContext(this.context); + this.renderQ.push(curve); + return curve; + } + StaveTie(params) { + var _a; + const tie = new StaveTie({ + first_note: params.from, + last_note: params.to, + first_indices: params.first_indices, + last_indices: params.last_indices, + }, params.text); + if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction) + tie.setDirection(params.options.direction); + tie.setContext(this.context); + this.renderQ.push(tie); + return tie; + } + StaveLine(params) { + var _a, _b; + const line = new StaveLine({ + first_note: params.from, + last_note: params.to, + first_indices: params.first_indices, + last_indices: params.last_indices, + }); + if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text) + line.setText(params.options.text); + if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font) + line.setFont(params.options.font); + line.setContext(this.context); + this.renderQ.push(line); + return line; + } + VibratoBracket(params) { + const vibratoBracket = new VibratoBracket({ + start: params.from, + stop: params.to, + }); + if (params.options.line) + vibratoBracket.setLine(params.options.line); + if (params.options.harsh) + vibratoBracket.setHarsh(params.options.harsh); + vibratoBracket.setContext(this.context); + this.renderQ.push(vibratoBracket); + return vibratoBracket; + } + TextBracket(params) { + const textBracket = new TextBracket({ + start: params.from, + stop: params.to, + text: params.text, + superscript: params.options.superscript, + position: params.options.position, + }); + if (params.options.line) + textBracket.setLine(params.options.line); + if (params.options.font) + textBracket.setFont(params.options.font); + textBracket.setContext(this.context); + this.renderQ.push(textBracket); + return textBracket; + } + System(params = {}) { + params.factory = this; + const system = new System(params).setContext(this.context); + this.systems.push(system); + return system; + } + EasyScore(options = {}) { + options.factory = this; + return new EasyScore(options); + } + PedalMarking(params) { + const p = Object.assign({ notes: [], options: { + style: 'mixed', + } }, params); + const pedal = new PedalMarking(p.notes); + pedal.setType(PedalMarking.typeString[p.options.style]); + pedal.setContext(this.context); + this.renderQ.push(pedal); + return pedal; + } + NoteSubGroup(params) { + const p = Object.assign({ notes: [] }, params); + const group = new NoteSubGroup(p.notes); + group.setContext(this.context); + return group; + } + draw() { + const ctx = this.context; + this.systems.forEach((s) => s.setContext(ctx).format()); + this.staves.forEach((s) => s.setContext(ctx).draw()); + this.voices.forEach((v) => v.setContext(ctx).draw()); + this.renderQ.forEach((e) => { + if (!e.isRendered()) + e.setContext(ctx).draw(); + }); + this.systems.forEach((s) => s.setContext(ctx).draw()); + this.reset(); + } +} +Factory.DEBUG = false; +Factory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT); +export { Factory }; diff --git a/build/esm/src/flow.js b/build/esm/src/flow.js new file mode 100644 index 0000000000..feade2705b --- /dev/null +++ b/build/esm/src/flow.js @@ -0,0 +1,304 @@ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +import { Accidental } from './accidental.js'; +import { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation.js'; +import { Articulation } from './articulation.js'; +import { BarNote } from './barnote.js'; +import { Beam } from './beam.js'; +import { Bend } from './bend.js'; +import { BoundingBox } from './boundingbox.js'; +import { BoundingBoxComputation } from './boundingboxcomputation.js'; +import { CanvasContext } from './canvascontext.js'; +import { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol.js'; +import { Clef } from './clef.js'; +import { ClefNote } from './clefnote.js'; +import { Crescendo } from './crescendo.js'; +import { Curve, CurvePosition } from './curve.js'; +import { Dot } from './dot.js'; +import { EasyScore } from './easyscore.js'; +import { Element } from './element.js'; +import { Factory } from './factory.js'; +import { Font, FontStyle, FontWeight } from './font.js'; +import { Formatter } from './formatter.js'; +import { Fraction } from './fraction.js'; +import { FretHandFinger } from './frethandfinger.js'; +import { GhostNote } from './ghostnote.js'; +import { Glyph } from './glyph.js'; +import { GlyphNote } from './glyphnote.js'; +import { GraceNote } from './gracenote.js'; +import { GraceNoteGroup } from './gracenotegroup.js'; +import { GraceTabNote } from './gracetabnote.js'; +import { KeyManager } from './keymanager.js'; +import { KeySignature } from './keysignature.js'; +import { KeySigNote } from './keysignote.js'; +import { Modifier, ModifierPosition } from './modifier.js'; +import { ModifierContext } from './modifiercontext.js'; +import { MultiMeasureRest } from './multimeasurerest.js'; +import { Music } from './music.js'; +import { Note } from './note.js'; +import { NoteHead } from './notehead.js'; +import { NoteSubGroup } from './notesubgroup.js'; +import { Ornament } from './ornament.js'; +import { Parenthesis } from './parenthesis.js'; +import { Parser } from './parser.js'; +import { PedalMarking } from './pedalmarking.js'; +import { Registry } from './registry.js'; +import { RenderContext } from './rendercontext.js'; +import { Renderer, RendererBackends, RendererLineEndType } from './renderer.js'; +import { RepeatNote } from './repeatnote.js'; +import { Stave } from './stave.js'; +import { Barline, BarlineType } from './stavebarline.js'; +import { StaveConnector } from './staveconnector.js'; +import { StaveHairpin } from './stavehairpin.js'; +import { StaveLine } from './staveline.js'; +import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; +import { StaveNote } from './stavenote.js'; +import { Repetition } from './staverepetition.js'; +import { StaveTempo } from './stavetempo.js'; +import { StaveText } from './stavetext.js'; +import { StaveTie } from './stavetie.js'; +import { Volta, VoltaType } from './stavevolta.js'; +import { Stem } from './stem.js'; +import { StringNumber } from './stringnumber.js'; +import { Stroke } from './strokes.js'; +import { SVGContext } from './svgcontext.js'; +import { System } from './system.js'; +import { Tables } from './tables.js'; +import { TabNote } from './tabnote.js'; +import { TabSlide } from './tabslide.js'; +import { TabStave } from './tabstave.js'; +import { TabTie } from './tabtie.js'; +import { TextBracket, TextBracketPosition } from './textbracket.js'; +import { TextDynamics } from './textdynamics.js'; +import { TextFormatter } from './textformatter.js'; +import { TextJustification, TextNote } from './textnote.js'; +import { TickContext } from './tickcontext.js'; +import { TimeSignature } from './timesignature.js'; +import { TimeSigNote } from './timesignote.js'; +import { Tremolo } from './tremolo.js'; +import { Tuning } from './tuning.js'; +import { Tuplet } from './tuplet.js'; +import { DATE, ID, VERSION } from './version.js'; +import { Vibrato } from './vibrato.js'; +import { VibratoBracket } from './vibratobracket.js'; +import { Voice, VoiceMode } from './voice.js'; +class Flow { + static get BUILD() { + return { + VERSION: VERSION, + ID: ID, + DATE: DATE, + }; + } + static setMusicFont(...fontNames) { + const fonts = fontNames.map((fontName) => Font.load(fontName)); + Tables.MUSIC_FONT_STACK = fonts; + Glyph.MUSIC_FONT_STACK = fonts.slice(); + Glyph.CURRENT_CACHE_KEY = fontNames.join(','); + return fonts; + } + static fetchMusicFont(fontName, fontModuleOrPath) { + return __awaiter(this, void 0, void 0, function* () { + }); + } + static getMusicFont() { + const fonts = Tables.MUSIC_FONT_STACK; + return fonts.map((font) => font.getName()); + } + static getMusicFontStack() { + return Tables.MUSIC_FONT_STACK; + } + static get RENDER_PRECISION_PLACES() { + return Tables.RENDER_PRECISION_PLACES; + } + static set RENDER_PRECISION_PLACES(precision) { + Tables.RENDER_PRECISION_PLACES = precision; + } + static get SOFTMAX_FACTOR() { + return Tables.SOFTMAX_FACTOR; + } + static set SOFTMAX_FACTOR(factor) { + Tables.SOFTMAX_FACTOR = factor; + } + static get NOTATION_FONT_SCALE() { + return Tables.NOTATION_FONT_SCALE; + } + static set NOTATION_FONT_SCALE(value) { + Tables.NOTATION_FONT_SCALE = value; + } + static get TABLATURE_FONT_SCALE() { + return Tables.TABLATURE_FONT_SCALE; + } + static set TABLATURE_FONT_SCALE(value) { + Tables.TABLATURE_FONT_SCALE = value; + } + static get RESOLUTION() { + return Tables.RESOLUTION; + } + static set RESOLUTION(value) { + Tables.RESOLUTION = value; + } + static get SLASH_NOTEHEAD_WIDTH() { + return Tables.SLASH_NOTEHEAD_WIDTH; + } + static set SLASH_NOTEHEAD_WIDTH(value) { + Tables.SLASH_NOTEHEAD_WIDTH = value; + } + static get STAVE_LINE_DISTANCE() { + return Tables.STAVE_LINE_DISTANCE; + } + static set STAVE_LINE_DISTANCE(value) { + Tables.STAVE_LINE_DISTANCE = value; + } + static get STAVE_LINE_THICKNESS() { + return Tables.STAVE_LINE_THICKNESS; + } + static set STAVE_LINE_THICKNESS(value) { + Tables.STAVE_LINE_THICKNESS = value; + } + static get STEM_HEIGHT() { + return Tables.STEM_HEIGHT; + } + static set STEM_HEIGHT(value) { + Tables.STEM_HEIGHT = value; + } + static get STEM_WIDTH() { + return Tables.STEM_WIDTH; + } + static set STEM_WIDTH(value) { + Tables.STEM_WIDTH = value; + } + static get TIME4_4() { + return Tables.TIME4_4; + } + static get accidentalMap() { + return Tables.accidentalMap; + } + static get unicode() { + return Tables.unicode; + } + static keySignature(spec) { + return Tables.keySignature(spec); + } + static hasKeySignature(spec) { + return Tables.hasKeySignature(spec); + } + static getKeySignatures() { + return Tables.getKeySignatures(); + } + static clefProperties(clef) { + return Tables.clefProperties(clef); + } + static keyProperties(key, clef, params) { + return Tables.keyProperties(key, clef, params); + } + static durationToTicks(duration) { + return Tables.durationToTicks(duration); + } +} +Flow.Accidental = Accidental; +Flow.Annotation = Annotation; +Flow.Articulation = Articulation; +Flow.Barline = Barline; +Flow.BarNote = BarNote; +Flow.Beam = Beam; +Flow.Bend = Bend; +Flow.BoundingBox = BoundingBox; +Flow.BoundingBoxComputation = BoundingBoxComputation; +Flow.CanvasContext = CanvasContext; +Flow.ChordSymbol = ChordSymbol; +Flow.Clef = Clef; +Flow.ClefNote = ClefNote; +Flow.Crescendo = Crescendo; +Flow.Curve = Curve; +Flow.Dot = Dot; +Flow.EasyScore = EasyScore; +Flow.Element = Element; +Flow.Factory = Factory; +Flow.Font = Font; +Flow.Formatter = Formatter; +Flow.Fraction = Fraction; +Flow.FretHandFinger = FretHandFinger; +Flow.GhostNote = GhostNote; +Flow.Glyph = Glyph; +Flow.GlyphNote = GlyphNote; +Flow.GraceNote = GraceNote; +Flow.GraceNoteGroup = GraceNoteGroup; +Flow.GraceTabNote = GraceTabNote; +Flow.KeyManager = KeyManager; +Flow.KeySignature = KeySignature; +Flow.KeySigNote = KeySigNote; +Flow.Modifier = Modifier; +Flow.ModifierContext = ModifierContext; +Flow.MultiMeasureRest = MultiMeasureRest; +Flow.Music = Music; +Flow.Note = Note; +Flow.NoteHead = NoteHead; +Flow.NoteSubGroup = NoteSubGroup; +Flow.Ornament = Ornament; +Flow.Parenthesis = Parenthesis; +Flow.Parser = Parser; +Flow.PedalMarking = PedalMarking; +Flow.Registry = Registry; +Flow.RenderContext = RenderContext; +Flow.Renderer = Renderer; +Flow.RepeatNote = RepeatNote; +Flow.Repetition = Repetition; +Flow.Stave = Stave; +Flow.StaveConnector = StaveConnector; +Flow.StaveHairpin = StaveHairpin; +Flow.StaveLine = StaveLine; +Flow.StaveModifier = StaveModifier; +Flow.StaveNote = StaveNote; +Flow.StaveTempo = StaveTempo; +Flow.StaveText = StaveText; +Flow.StaveTie = StaveTie; +Flow.Stem = Stem; +Flow.StringNumber = StringNumber; +Flow.Stroke = Stroke; +Flow.SVGContext = SVGContext; +Flow.System = System; +Flow.TabNote = TabNote; +Flow.TabSlide = TabSlide; +Flow.TabStave = TabStave; +Flow.TabTie = TabTie; +Flow.TextBracket = TextBracket; +Flow.TextDynamics = TextDynamics; +Flow.TextFormatter = TextFormatter; +Flow.TextNote = TextNote; +Flow.TickContext = TickContext; +Flow.TimeSignature = TimeSignature; +Flow.TimeSigNote = TimeSigNote; +Flow.Tremolo = Tremolo; +Flow.Tuning = Tuning; +Flow.Tuplet = Tuplet; +Flow.Vibrato = Vibrato; +Flow.VibratoBracket = VibratoBracket; +Flow.Voice = Voice; +Flow.Volta = Volta; +Flow.AnnotationHorizontalJustify = AnnotationHorizontalJustify; +Flow.AnnotationVerticalJustify = AnnotationVerticalJustify; +Flow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify; +Flow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify; +Flow.SymbolTypes = SymbolTypes; +Flow.SymbolModifiers = SymbolModifiers; +Flow.CurvePosition = CurvePosition; +Flow.FontWeight = FontWeight; +Flow.FontStyle = FontStyle; +Flow.ModifierPosition = ModifierPosition; +Flow.RendererBackends = RendererBackends; +Flow.RendererLineEndType = RendererLineEndType; +Flow.BarlineType = BarlineType; +Flow.StaveModifierPosition = StaveModifierPosition; +Flow.VoltaType = VoltaType; +Flow.TextBracketPosition = TextBracketPosition; +Flow.TextJustification = TextJustification; +Flow.VoiceMode = VoiceMode; +export { Flow }; diff --git a/build/esm/src/font.js b/build/esm/src/font.js new file mode 100644 index 0000000000..eaa808c19a --- /dev/null +++ b/build/esm/src/font.js @@ -0,0 +1,263 @@ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +import { defined } from './util.js'; +export var FontWeight; +(function (FontWeight) { + FontWeight["NORMAL"] = "normal"; + FontWeight["BOLD"] = "bold"; +})(FontWeight || (FontWeight = {})); +export var FontStyle; +(function (FontStyle) { + FontStyle["NORMAL"] = "normal"; + FontStyle["ITALIC"] = "italic"; +})(FontStyle || (FontStyle = {})); +let fontParser; +const Fonts = {}; +class Font { + static convertSizeToPixelValue(fontSize = Font.SIZE) { + var _a; + if (typeof fontSize === 'number') { + return fontSize * Font.scaleToPxFrom.pt; + } + else { + const value = parseFloat(fontSize); + if (isNaN(value)) { + return 0; + } + const unit = fontSize.replace(/[\d.\s]/g, '').toLowerCase(); + const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1; + return value * conversionFactor; + } + } + static convertSizeToPointValue(fontSize = Font.SIZE) { + var _a; + if (typeof fontSize === 'number') { + return fontSize; + } + else { + const value = parseFloat(fontSize); + if (isNaN(value)) { + return 0; + } + const unit = fontSize.replace(/[\d.\s]/g, '').toLowerCase(); + const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt; + return value * conversionFactor; + } + } + static validate(f, size, weight, style) { + if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) { + return Font.fromCSSString(f); + } + let family; + if (typeof f === 'object') { + family = f.family; + size = f.size; + weight = f.weight; + style = f.style; + } + else { + family = f; + } + family = family !== null && family !== void 0 ? family : Font.SANS_SERIF; + size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt'; + weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL; + style = style !== null && style !== void 0 ? style : FontStyle.NORMAL; + if (weight === '') { + weight = FontWeight.NORMAL; + } + if (style === '') { + style = FontStyle.NORMAL; + } + if (typeof size === 'number') { + size = `${size}pt`; + } + if (typeof weight === 'number') { + weight = weight.toString(); + } + return { family, size, weight, style }; + } + static fromCSSString(cssFontShorthand) { + if (!fontParser) { + fontParser = document.createElement('span'); + } + fontParser.style.font = cssFontShorthand; + const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style; + return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle }; + } + static toCSSString(fontInfo) { + var _a; + if (!fontInfo) { + return ''; + } + let style; + const st = fontInfo.style; + if (st === FontStyle.NORMAL || st === '' || st === undefined) { + style = ''; + } + else { + style = st.trim() + ' '; + } + let weight; + const wt = fontInfo.weight; + if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) { + weight = ''; + } + else if (typeof wt === 'number') { + weight = wt + ' '; + } + else { + weight = wt.trim() + ' '; + } + let size; + const sz = fontInfo.size; + if (sz === undefined) { + size = Font.SIZE + 'pt '; + } + else if (typeof sz === 'number') { + size = sz + 'pt '; + } + else { + size = sz.trim() + ' '; + } + const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF; + return `${style}${weight}${size}${family}`; + } + static scaleSize(fontSize, scaleFactor) { + if (typeof fontSize === 'number') { + return (fontSize * scaleFactor); + } + else { + const value = parseFloat(fontSize); + const unit = fontSize.replace(/[\d.\s]/g, ''); + return `${value * scaleFactor}${unit}`; + } + } + static isBold(weight) { + if (!weight) { + return false; + } + else if (typeof weight === 'number') { + return weight >= 600; + } + else { + const parsedWeight = parseInt(weight, 10); + if (isNaN(parsedWeight)) { + return weight.toLowerCase() === 'bold'; + } + else { + return parsedWeight >= 600; + } + } + } + static isItalic(style) { + if (!style) { + return false; + } + else { + return style.toLowerCase() === FontStyle.ITALIC; + } + } + static loadWebFont(fontName, woffURL, includeWoff2 = true) { + return __awaiter(this, void 0, void 0, function* () { + const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : ''; + const woff1URL = `url(${woffURL}) format('woff')`; + const woffURLs = woff2URL + woff1URL; + const fontFace = new FontFace(fontName, woffURLs); + yield fontFace.load(); + document.fonts.add(fontFace); + return fontFace; + }); + } + static loadWebFonts() { + return __awaiter(this, void 0, void 0, function* () { + const host = Font.WEB_FONT_HOST; + const files = Font.WEB_FONT_FILES; + for (const fontName in files) { + const fontPath = files[fontName]; + Font.loadWebFont(fontName, host + fontPath); + } + }); + } + static load(fontName, data, metrics) { + let font = Fonts[fontName]; + if (!font) { + font = new Font(fontName); + Fonts[fontName] = font; + } + if (data) { + font.setData(data); + } + if (metrics) { + font.setMetrics(metrics); + } + return font; + } + constructor(fontName) { + this.name = fontName; + } + getName() { + return this.name; + } + getData() { + return defined(this.data, 'FontError', 'Missing font data'); + } + getMetrics() { + return defined(this.metrics, 'FontError', 'Missing metrics'); + } + setData(data) { + this.data = data; + } + setMetrics(metrics) { + this.metrics = metrics; + } + hasData() { + return this.data !== undefined; + } + getResolution() { + return this.getData().resolution; + } + getGlyphs() { + return this.getData().glyphs; + } + lookupMetric(key, defaultValue) { + const keyParts = key.split('.'); + let currObj = this.getMetrics(); + for (let i = 0; i < keyParts.length; i++) { + const keyPart = keyParts[i]; + const value = currObj[keyPart]; + if (value === undefined) { + return defaultValue; + } + currObj = value; + } + return currObj; + } + toString() { + return '[' + this.name + ' Font]'; + } +} +Font.SANS_SERIF = 'Arial, sans-serif'; +Font.SERIF = 'Times New Roman, serif'; +Font.SIZE = 10; +Font.scaleToPxFrom = { + pt: 4 / 3, + px: 1, + em: 16, + '%': 4 / 25, + in: 96, + mm: 96 / 25.4, + cm: 96 / 2.54, +}; +Font.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/'; +Font.WEB_FONT_FILES = { + 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff', + PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff', +}; +export { Font }; diff --git a/build/esm/src/fonts/bravura_glyphs.js b/build/esm/src/fonts/bravura_glyphs.js new file mode 100644 index 0000000000..743b08204b --- /dev/null +++ b/build/esm/src/fonts/bravura_glyphs.js @@ -0,0 +1,3543 @@ +export const BravuraFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 469, + y_min: 0, + y_max: 295, + ha: 295, + o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z', + }, + bracketBottom: { + x_min: 0, + x_max: 469, + y_min: -295, + y_max: 0, + ha: 295, + o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z', + }, + barlineTick: { + x_min: 0, + x_max: 36, + y_min: 868, + y_max: 1120, + ha: 252, + o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z', + }, + breathMarkTick: { + x_min: 0, + x_max: 500, + y_min: 0, + y_max: 502, + ha: 502, + o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z', + }, + segno: { + x_min: 4, + x_max: 550, + y_min: -27, + y_max: 759, + ha: 786, + o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z', + }, + coda: { + x_min: -4, + x_max: 955, + y_min: -158, + y_max: 898, + ha: 1056, + o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z', + }, + gClef: { + x_min: 0, + x_max: 671, + y_min: -658, + y_max: 1098, + ha: 1756, + o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z', + }, + cClef: { + x_min: 0, + x_max: 699, + y_min: -506, + y_max: 506, + ha: 1012, + o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z', + }, + fClef: { + x_min: -5, + x_max: 684, + y_min: -635, + y_max: 262, + ha: 897, + o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z', + }, + unpitchedPercussionClef1: { + x_min: 0, + x_max: 382, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z', + }, + '6stringTabClef': { + x_min: -3, + x_max: 408, + y_min: -748, + y_max: 764, + ha: 1512, + o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z', + }, + timeSig0: { + x_min: 20, + x_max: 450, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z', + }, + timeSig1: { + x_min: 20, + x_max: 314, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z', + }, + timeSig2: { + x_min: 20, + x_max: 426, + y_min: -257, + y_max: 254, + ha: 511, + o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z', + }, + timeSig3: { + x_min: 20, + x_max: 401, + y_min: -251, + y_max: 249, + ha: 500, + o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z', + }, + timeSig4: { + x_min: 20, + x_max: 450, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z', + }, + timeSig5: { + x_min: 20, + x_max: 383, + y_min: -251, + y_max: 246, + ha: 497, + o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z', + }, + timeSig6: { + x_min: 20, + x_max: 414, + y_min: -249, + y_max: 251, + ha: 500, + o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z', + }, + timeSig7: { + x_min: 20, + x_max: 421, + y_min: -250, + y_max: 249, + ha: 499, + o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z', + }, + timeSig8: { + x_min: 20, + x_max: 416, + y_min: -259, + y_max: 259, + ha: 518, + o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z', + }, + timeSig9: { + x_min: 20, + x_max: 414, + y_min: -249, + y_max: 251, + ha: 500, + o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z', + }, + timeSigCommon: { + x_min: 5, + x_max: 424, + y_min: -249, + y_max: 251, + ha: 500, + o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z', + }, + timeSigCutCommon: { + x_min: 0, + x_max: 418, + y_min: -359, + y_max: 361, + ha: 720, + o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z', + }, + timeSigPlus: { + x_min: -1, + x_max: 499, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z', + }, + timeSigPlusSmall: { + x_min: -1, + x_max: 255, + y_min: -133, + y_max: 123, + ha: 256, + o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z', + }, + timeSigMinus: { + x_min: 0, + x_max: 448, + y_min: -35, + y_max: 40, + ha: 75, + o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z', + }, + timeSigParensRight: { + x_min: 0, + x_max: 184, + y_min: -489, + y_max: 491, + ha: 980, + o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z', + }, + timeSigParensRightSmall: { + x_min: 0, + x_max: 110, + y_min: -251, + y_max: 249, + ha: 500, + o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z', + }, + timeSigParensLeft: { + x_min: 0, + x_max: 184, + y_min: -489, + y_max: 491, + ha: 980, + o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z', + }, + timeSigParensLeftSmall: { + x_min: 0, + x_max: 110, + y_min: -251, + y_max: 249, + ha: 500, + o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 599, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 422, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 295, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 295, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z', + }, + noteheadXDoubleWhole: { + x_min: 0, + x_max: 546, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z', + }, + noteheadXWhole: { + x_min: 0, + x_max: 377, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z', + }, + noteheadXHalf: { + x_min: 0, + x_max: 334, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 290, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z', + }, + noteheadCircleXDoubleWhole: { + x_min: 0, + x_max: 422, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z', + }, + noteheadCircleXWhole: { + x_min: 0, + x_max: 249, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z', + }, + noteheadCircleXHalf: { + x_min: 0, + x_max: 250, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 249, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z', + }, + noteheadCircledDoubleWhole: { + x_min: 0, + x_max: 603, + y_min: -218, + y_max: 213, + ha: 431, + o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z', + }, + noteheadCircledWhole: { + x_min: 0, + x_max: 437, + y_min: -225, + y_max: 211, + ha: 436, + o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z', + }, + noteheadCircledHalf: { + x_min: -18, + x_max: 311, + y_min: -162, + y_max: 167, + ha: 329, + o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z', + }, + noteheadCircledBlack: { + x_min: -21, + x_max: 321, + y_min: -171, + y_max: 167, + ha: 338, + o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z', + }, + noteheadDoubleWholeSquare: { + x_min: 0, + x_max: 416, + y_min: -190, + y_max: 198, + ha: 388, + o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z', + }, + noteheadSquareWhite: { + x_min: 0, + x_max: 313, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z', + }, + noteheadSquareBlack: { + x_min: 0, + x_max: 313, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z', + }, + noteheadTriangleDownDoubleWhole: { + x_min: 0, + x_max: 483, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z', + }, + noteheadTriangleDownWhole: { + x_min: 0, + x_max: 319, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z', + }, + noteheadTriangleDownHalf: { + x_min: 0, + x_max: 285, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z', + }, + noteheadTriangleDownBlack: { + x_min: 0, + x_max: 292, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 207 -180 l 420 180 l 0 180 z', + }, + noteheadTriangleUpDoubleWhole: { + x_min: 0, + x_max: 483, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z', + }, + noteheadTriangleUpWhole: { + x_min: 0, + x_max: 319, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z', + }, + noteheadTriangleUpHalf: { + x_min: 0, + x_max: 285, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 293, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 422 -180 l 207 180 l 0 -180 z', + }, + noteheadSlashedDoubleWhole1: { + x_min: 0, + x_max: 596, + y_min: -179, + y_max: 168, + ha: 347, + o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z', + }, + noteheadSlashedWhole1: { + x_min: -22, + x_max: 433, + y_min: -157, + y_max: 148, + ha: 305, + o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z', + }, + noteheadSlashedHalf1: { + x_min: -67, + x_max: 386, + y_min: -142, + y_max: 160, + ha: 302, + o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z', + }, + noteheadSlashedBlack1: { + x_min: -80, + x_max: 375, + y_min: -165, + y_max: 167, + ha: 332, + o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z', + }, + noteheadSlashedDoubleWhole2: { + x_min: 0, + x_max: 596, + y_min: -178, + y_max: 169, + ha: 347, + o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z', + }, + noteheadSlashedWhole2: { + x_min: -18, + x_max: 436, + y_min: -154, + y_max: 151, + ha: 305, + o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z', + }, + noteheadSlashedHalf2: { + x_min: -73, + x_max: 380, + y_min: -134, + y_max: 168, + ha: 302, + o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z', + }, + noteheadSlashedBlack2: { + x_min: -79, + x_max: 376, + y_min: -164, + y_max: 168, + ha: 332, + o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z', + }, + noteheadDiamondDoubleWhole: { + x_min: 0, + x_max: 432, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 270, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 251, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 250, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z', + }, + noteheadParenthesis: { + x_min: -73, + x_max: 368, + y_min: -180, + y_max: 182, + ha: 362, + o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z', + }, + noteheadParenthesisRight: { + x_min: -36, + x_max: 73, + y_min: -181, + y_max: 181, + ha: 362, + o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z', + }, + noteheadParenthesisLeft: { + x_min: 0, + x_max: 109, + y_min: -181, + y_max: 181, + ha: 362, + o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z', + }, + noteheadMoonBlack: { + x_min: 0, + x_max: 315, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z', + }, + noteheadTriangleLeftBlack: { + x_min: 0, + x_max: 339, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 488 -180 l 0 180 l 0 -180 z', + }, + noteheadTriangleRightBlack: { + x_min: 0, + x_max: 339, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 488 180 l 0 -180 l 488 -180 z', + }, + noteheadTriangleRoundDownBlack: { + x_min: 0, + x_max: 278, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z', + }, + augmentationDot: { + x_min: 0, + x_max: 100, + y_min: -50, + y_max: 50, + ha: 100, + o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z', + }, + tremolo1: { + x_min: -150, + x_max: 150, + y_min: -93, + y_max: 94, + ha: 187, + o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z', + }, + flag8thUp: { + x_min: 0, + x_max: 264, + y_min: -810, + y_max: 9, + ha: 819, + o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z', + }, + flag8thDown: { + x_min: 0, + x_max: 306, + y_min: -14, + y_max: 808, + ha: 822, + o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z', + }, + flag16thUp: { + x_min: 0, + x_max: 279, + y_min: -813, + y_max: 2, + ha: 815, + o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z', + }, + flag16thDown: { + x_min: 0, + x_max: 291, + y_min: -9, + y_max: 812, + ha: 821, + o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z', + }, + flag32ndUp: { + x_min: 0, + x_max: 261, + y_min: -812, + y_max: 149, + ha: 961, + o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', + }, + flag32ndDown: { + x_min: 0, + x_max: 273, + y_min: -172, + y_max: 812, + ha: 984, + o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z', + }, + flag64thUp: { + x_min: 0, + x_max: 261, + y_min: -812, + y_max: 347, + ha: 1159, + o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', + }, + flag64thDown: { + x_min: 0, + x_max: 273, + y_min: -376, + y_max: 812, + ha: 1188, + o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z', + }, + flag128thUp: { + x_min: 0, + x_max: 261, + y_min: -812, + y_max: 533, + ha: 1345, + o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', + }, + flag128thDown: { + x_min: 0, + x_max: 273, + y_min: -580, + y_max: 812, + ha: 1392, + o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z', + }, + accidentalFlat: { + x_min: 0, + x_max: 226, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 168, + y_min: -335, + y_max: 341, + ha: 676, + o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z', + }, + accidentalSharp: { + x_min: 0, + x_max: 249, + y_min: -348, + y_max: 350, + ha: 698, + o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 247, + y_min: -125, + y_max: 127, + ha: 252, + o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z', + }, + accidentalDoubleFlat: { + x_min: 0, + x_max: 411, + y_min: -175, + y_max: 437, + ha: 612, + o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z', + }, + accidentalParensLeft: { + x_min: 0, + x_max: 141, + y_min: -248, + y_max: 247, + ha: 495, + o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z', + }, + accidentalParensRight: { + x_min: 0, + x_max: 141, + y_min: -248, + y_max: 247, + ha: 495, + o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 1, + x_max: 227, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 1, + x_max: 466, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 179, + y_min: -353, + y_max: 307, + ha: 660, + o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: 3, + x_max: 317, + y_min: -347, + y_max: 369, + ha: 716, + o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z', + }, + accidentalBuyukMucennebFlat: { + x_min: 1, + x_max: 287, + y_min: -174, + y_max: 438, + ha: 612, + o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z', + }, + accidentalBuyukMucennebSharp: { + x_min: 0, + x_max: 341, + y_min: -350, + y_max: 348, + ha: 698, + o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z', + }, + accidentalBakiyeFlat: { + x_min: -1, + x_max: 286, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z', + }, + accidentalKomaSharp: { + x_min: 0, + x_max: 229, + y_min: -337, + y_max: 322, + ha: 659, + o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z', + }, + accidentalKucukMucennebSharp: { + x_min: -1, + x_max: 339, + y_min: -338, + y_max: 321, + ha: 659, + o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z', + }, + accidentalKoron: { + x_min: 0, + x_max: 300, + y_min: -472, + y_max: 157, + ha: 629, + o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z', + }, + accidentalSori: { + x_min: 0, + x_max: 421, + y_min: -318, + y_max: 328, + ha: 646, + o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z', + }, + articAccentAbove: { + x_min: 0, + x_max: 339, + y_min: 1, + y_max: 245, + ha: 244, + o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z', + }, + articAccentBelow: { + x_min: 0, + x_max: 339, + y_min: -244, + y_max: 0, + ha: 244, + o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z', + }, + articTenutoAbove: { + x_min: -1, + x_max: 338, + y_min: 0, + y_max: 48, + ha: 48, + o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z', + }, + articTenutoBelow: { + x_min: -1, + x_max: 338, + y_min: -48, + y_max: 0, + ha: 48, + o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z', + }, + articStaccatoAbove: { + x_min: 0, + x_max: 84, + y_min: 0, + y_max: 84, + ha: 84, + o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z', + }, + articStaccatoBelow: { + x_min: 0, + x_max: 84, + y_min: -84, + y_max: 0, + ha: 84, + o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z', + }, + articStaccatissimoAbove: { + x_min: 1, + x_max: 100, + y_min: -2, + y_max: 293, + ha: 295, + o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z', + }, + articStaccatissimoBelow: { + x_min: 1, + x_max: 100, + y_min: -295, + y_max: 0, + ha: 295, + o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z', + }, + articMarcatoAbove: { + x_min: -1, + x_max: 235, + y_min: -1, + y_max: 253, + ha: 254, + o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z', + }, + articMarcatoBelow: { + x_min: -1, + x_max: 235, + y_min: -254, + y_max: 0, + ha: 254, + o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z', + }, + fermataAbove: { + x_min: 3, + x_max: 605, + y_min: -3, + y_max: 329, + ha: 332, + o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z', + }, + fermataBelow: { + x_min: 3, + x_max: 605, + y_min: -332, + y_max: 0, + ha: 332, + o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z', + }, + fermataLongAbove: { + x_min: 0, + x_max: 603, + y_min: -1, + y_max: 333, + ha: 334, + o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z', + }, + fermataLongBelow: { + x_min: 0, + x_max: 603, + y_min: -333, + y_max: 1, + ha: 334, + o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z', + }, + fermataVeryLongAbove: { + x_min: 0, + x_max: 715, + y_min: 0, + y_max: 408, + ha: 408, + o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z', + }, + fermataVeryLongBelow: { + x_min: 0, + x_max: 715, + y_min: -408, + y_max: 0, + ha: 408, + o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z', + }, + fermataVeryShortAbove: { + x_min: 0, + x_max: 726, + y_min: 0, + y_max: 449, + ha: 449, + o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z', + }, + fermataVeryShortBelow: { + x_min: 0, + x_max: 726, + y_min: -449, + y_max: 0, + ha: 449, + o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z', + }, + fermataShortAbove: { + x_min: 0, + x_max: 604, + y_min: 0, + y_max: 341, + ha: 341, + o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z', + }, + fermataShortBelow: { + x_min: 0, + x_max: 604, + y_min: -341, + y_max: 0, + ha: 341, + o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z', + }, + breathMarkComma: { + x_min: 1, + x_max: 152, + y_min: 2, + y_max: 251, + ha: 249, + o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z', + }, + breathMarkUpbow: { + x_min: 1, + x_max: 249, + y_min: 1, + y_max: 495, + ha: 494, + o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z', + }, + caesura: { + x_min: 0, + x_max: 384, + y_min: -1, + y_max: 532, + ha: 533, + o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 373, + y_min: 0, + y_max: 530, + ha: 530, + o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z', + }, + restMaxima: { + x_min: 0, + x_max: 381, + y_min: -249, + y_max: 250, + ha: 499, + o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 125, + y_min: 0, + y_max: 250, + ha: 250, + o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z', + }, + restWhole: { + x_min: 0, + x_max: 282, + y_min: -135, + y_max: 9, + ha: 144, + o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z', + }, + restWholeLegerLine: { + x_min: -117, + x_max: 399, + y_min: -135, + y_max: 20, + ha: 155, + o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z', + }, + restHalf: { + x_min: 0, + x_max: 282, + y_min: -2, + y_max: 142, + ha: 144, + o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z', + }, + restHalfLegerLine: { + x_min: -117, + x_max: 399, + y_min: -13, + y_max: 142, + ha: 155, + o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z', + }, + restQuarter: { + x_min: 1, + x_max: 270, + y_min: -375, + y_max: 373, + ha: 748, + o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z', + }, + rest8th: { + x_min: 0, + x_max: 247, + y_min: -251, + y_max: 174, + ha: 425, + o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z', + }, + rest16th: { + x_min: 0, + x_max: 320, + y_min: -500, + y_max: 179, + ha: 679, + o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z', + }, + rest32nd: { + x_min: 0, + x_max: 363, + y_min: -500, + y_max: 426, + ha: 926, + o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z', + }, + rest64th: { + x_min: 0, + x_max: 423, + y_min: -753, + y_max: 430, + ha: 1183, + o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z', + }, + rest128th: { + x_min: 0, + x_max: 485, + y_min: -750, + y_max: 689, + ha: 1439, + o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z', + }, + dynamicPiano: { + x_min: -89, + x_max: 366, + y_min: -142, + y_max: 274, + ha: 416, + o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z', + }, + dynamicMezzo: { + x_min: -20, + x_max: 446, + y_min: -10, + y_max: 274, + ha: 284, + o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z', + }, + dynamicForte: { + x_min: -141, + x_max: 364, + y_min: -152, + y_max: 444, + ha: 596, + o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z', + }, + dynamicRinforzando: { + x_min: -20, + x_max: 277, + y_min: 0, + y_max: 274, + ha: 274, + o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z', + }, + dynamicSforzando: { + x_min: 0, + x_max: 229, + y_min: -10, + y_max: 273, + ha: 283, + o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z', + }, + dynamicZ: { + x_min: -30, + x_max: 244, + y_min: -10, + y_max: 268, + ha: 278, + o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z', + }, + ornamentTrill: { + x_min: 0, + x_max: 521, + y_min: -10, + y_max: 390, + ha: 400, + o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z', + }, + ornamentTurn: { + x_min: 0, + x_max: 460, + y_min: 0, + y_max: 218, + ha: 218, + o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z', + }, + ornamentTurnSlash: { + x_min: 0, + x_max: 460, + y_min: -90, + y_max: 306, + ha: 396, + o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z', + }, + ornamentMordent: { + x_min: 1, + x_max: 729, + y_min: -73, + y_max: 319, + ha: 392, + o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z', + }, + ornamentShortTrill: { + x_min: 0, + x_max: 725, + y_min: 0, + y_max: 245, + ha: 245, + o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z', + }, + ornamentTremblement: { + x_min: 1, + x_max: 985, + y_min: 0, + y_max: 244, + ha: 244, + o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z', + }, + ornamentPrecompAppoggTrill: { + x_min: 0, + x_max: 1119, + y_min: 0, + y_max: 481, + ha: 481, + o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: 2, + x_max: 1150, + y_min: -367, + y_max: 245, + ha: 612, + o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: 0, + x_max: 1048, + y_min: -367, + y_max: 331, + ha: 698, + o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: 0, + x_max: 949, + y_min: 0, + y_max: 381, + ha: 381, + o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: 0, + x_max: 1278, + y_min: 0, + y_max: 247, + ha: 247, + o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z', + }, + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: 0, + x_max: 1277, + y_min: -62, + y_max: 333, + ha: 395, + o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: 0, + x_max: 859, + y_min: -222, + y_max: 246, + ha: 468, + o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z', + }, + brassScoop: { + x_min: 1, + x_max: 320, + y_min: -373, + y_max: 13, + ha: 386, + o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z', + }, + brassDoitMedium: { + x_min: 0, + x_max: 489, + y_min: -40, + y_max: 346, + ha: 386, + o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z', + }, + brassFallLipShort: { + x_min: 1, + x_max: 293, + y_min: -345, + y_max: 42, + ha: 387, + o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z', + }, + brassLiftMedium: { + x_min: 0, + x_max: 811, + y_min: 0, + y_max: 852, + ha: 852, + o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z', + }, + brassFallRoughMedium: { + x_min: 0, + x_max: 811, + y_min: 0, + y_max: 852, + ha: 852, + o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z', + }, + brassBend: { + x_min: 0, + x_max: 392, + y_min: 0, + y_max: 282, + ha: 282, + o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z', + }, + brassMuteClosed: { + x_min: 0, + x_max: 272, + y_min: 0, + y_max: 272, + ha: 272, + o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z', + }, + brassMuteOpen: { + x_min: 0, + x_max: 304, + y_min: 0, + y_max: 304, + ha: 304, + o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z', + }, + brassFlip: { + x_min: 0, + x_max: 379, + y_min: 0, + y_max: 282, + ha: 282, + o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z', + }, + brassJazzTurn: { + x_min: 0, + x_max: 620, + y_min: 0, + y_max: 245, + ha: 245, + o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z', + }, + brassSmear: { + x_min: 1, + x_max: 306, + y_min: 0, + y_max: 170, + ha: 170, + o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z', + }, + stringsDownBow: { + x_min: 0, + x_max: 312, + y_min: 0, + y_max: 318, + ha: 318, + o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z', + }, + stringsUpBow: { + x_min: 1, + x_max: 249, + y_min: 1, + y_max: 495, + ha: 494, + o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z', + }, + stringsHarmonic: { + x_min: 0, + x_max: 200, + y_min: 0, + y_max: 200, + ha: 200, + o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: 0, + x_max: 200, + y_min: 0, + y_max: 300, + ha: 300, + o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: 0, + x_max: 200, + y_min: 0, + y_max: 300, + ha: 300, + o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z', + }, + pluckedLeftHandPizzicato: { + x_min: 0, + x_max: 272, + y_min: 0, + y_max: 272, + ha: 272, + o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 1019, + y_min: -8, + y_max: 555, + ha: 563, + o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 450, + y_min: 0, + y_max: 450, + ha: 450, + o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z', + }, + pictChokeCymbal: { + x_min: 1, + x_max: 152, + y_min: 2, + y_max: 251, + ha: 249, + o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z', + }, + wiggleArpeggiatoUp: { + x_min: -33, + x_max: 292, + y_min: 0, + y_max: 119, + ha: 119, + o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z', + }, + arrowheadBlackUp: { + x_min: 0, + x_max: 228, + y_min: 0, + y_max: 299, + ha: 299, + o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z', + }, + arrowheadBlackDown: { + x_min: 0, + x_max: 228, + y_min: 0, + y_max: 299, + ha: 299, + o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z', + }, + arpeggiatoUp: { + x_min: 1, + x_max: 229, + y_min: 7, + y_max: 1511, + ha: 1504, + o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z', + }, + arpeggiatoDown: { + x_min: 1, + x_max: 229, + y_min: -4, + y_max: 1500, + ha: 1504, + o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z', + }, + repeat1Bar: { + x_min: 0, + x_max: 532, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z', + }, + repeat2Bars: { + x_min: 0, + x_max: 762, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z', + }, + repeat4Bars: { + x_min: 0, + x_max: 1232, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z', + }, + repeatBarSlash: { + x_min: 0, + x_max: 532, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z', + }, + csymDiminished: { + x_min: 0, + x_max: 473, + y_min: 0, + y_max: 473, + ha: 473, + o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z', + }, + csymHalfDiminished: { + x_min: -16, + x_max: 488, + y_min: -15, + y_max: 489, + ha: 504, + o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z', + }, + csymAugmented: { + x_min: 0, + x_max: 395, + y_min: 1, + y_max: 396, + ha: 395, + o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z', + }, + csymMajorSeventh: { + x_min: 0, + x_max: 558, + y_min: 1, + y_max: 477, + ha: 476, + o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z', + }, + csymMinor: { + x_min: 0, + x_max: 325, + y_min: 216, + y_max: 260, + ha: 44, + o: 'm 468 374 l 0 374 l 0 311 l 468 311 z', + }, + csymParensLeftTall: { + x_min: 1, + x_max: 185, + y_min: 0, + y_max: 997, + ha: 997, + o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z', + }, + csymParensRightTall: { + x_min: -20, + x_max: 164, + y_min: 0, + y_max: 997, + ha: 997, + o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z', + }, + csymBracketLeftTall: { + x_min: 0, + x_max: 155, + y_min: 0, + y_max: 1000, + ha: 1000, + o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z', + }, + csymBracketRightTall: { + x_min: 1, + x_max: 156, + y_min: 0, + y_max: 1000, + ha: 1000, + o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z', + }, + csymParensLeftVeryTall: { + x_min: 0, + x_max: 122, + y_min: 0, + y_max: 993, + ha: 993, + o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z', + }, + csymParensRightVeryTall: { + x_min: -15, + x_max: 107, + y_min: 0, + y_max: 993, + ha: 993, + o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z', + }, + csymDiagonalArrangementSlash: { + x_min: 0, + x_max: 999, + y_min: 0, + y_max: 1000, + ha: 1000, + o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z', + }, + accSagittal5v7KleismaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z', + }, + accSagittal5v7KleismaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z', + }, + accSagittal5CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z', + }, + accSagittal5CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z', + }, + accSagittal7CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z', + }, + accSagittal7CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z', + }, + accSagittal25SmallDiesisUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z', + }, + accSagittal25SmallDiesisDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z', + }, + accSagittal35MediumDiesisUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z', + }, + accSagittal35MediumDiesisDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z', + }, + accSagittal11MediumDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z', + }, + accSagittal11MediumDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z', + }, + accSagittal11LargeDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z', + }, + accSagittal11LargeDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittal35LargeDiesisUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittal35LargeDiesisDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittalSharp25SDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z', + }, + accSagittalFlat25SUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z', + }, + accSagittalSharp7CDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z', + }, + accSagittalFlat7CUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z', + }, + accSagittalSharp5CDown: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z', + }, + accSagittalFlat5CUp: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z', + }, + accSagittalSharp5v7kDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z', + }, + accSagittalFlat5v7kUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z', + }, + accSagittalSharp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z', + }, + accSagittalFlat: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z', + }, + accSagittalSharp5v7kUp: { + x_min: 0, + x_max: 312, + y_min: -361, + y_max: 172, + ha: 533, + o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z', + }, + accSagittalFlat5v7kDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 361, + ha: 533, + o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z', + }, + accSagittalSharp5CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z', + }, + accSagittalFlat5CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z', + }, + accSagittalSharp7CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z', + }, + accSagittalFlat7CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z', + }, + accSagittalSharp25SUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z', + }, + accSagittalFlat25SDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z', + }, + accSagittalSharp35MUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z', + }, + accSagittalFlat35MDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z', + }, + accSagittalSharp11MUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z', + }, + accSagittalFlat11MDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z', + }, + accSagittalSharp11LUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalFlat11LDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalSharp35LUp: { + x_min: 0, + x_max: 500, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalFlat35LDown: { + x_min: 0, + x_max: 500, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalDoubleSharp25SDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z', + }, + accSagittalDoubleFlat25SUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z', + }, + accSagittalDoubleSharp7CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z', + }, + accSagittalDoubleFlat7CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z', + }, + accSagittalDoubleSharp5CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z', + }, + accSagittalDoubleFlat5CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z', + }, + accSagittalDoubleSharp5v7kDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z', + }, + accSagittalDoubleFlat5v7kUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z', + }, + accSagittalDoubleSharp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z', + }, + accSagittalDoubleFlat: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z', + }, + accSagittal7v11KleismaUp: { + x_min: 0, + x_max: 219, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z', + }, + accSagittal7v11KleismaDown: { + x_min: 0, + x_max: 219, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z', + }, + accSagittal17CommaUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal17CommaDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal55CommaUp: { + x_min: 0, + x_max: 219, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z', + }, + accSagittal55CommaDown: { + x_min: 0, + x_max: 219, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z', + }, + accSagittal7v11CommaUp: { + x_min: 0, + x_max: 188, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z', + }, + accSagittal7v11CommaDown: { + x_min: 0, + x_max: 188, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittal5v11SmallDiesisUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z', + }, + accSagittal5v11SmallDiesisDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittalSharp5v11SDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z', + }, + accSagittalFlat5v11SUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', + }, + accSagittalSharp7v11CDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z', + }, + accSagittalFlat7v11CUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z', + }, + accSagittalSharp55CDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z', + }, + accSagittalFlat55CUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z', + }, + accSagittalSharp17CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z', + }, + accSagittalFlat17CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z', + }, + accSagittalSharp7v11kDown: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z', + }, + accSagittalFlat7v11kUp: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z', + }, + accSagittalSharp7v11kUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z', + }, + accSagittalFlat7v11kDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z', + }, + accSagittalSharp17CUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat17CDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp55CUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z', + }, + accSagittalFlat55CDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z', + }, + accSagittalSharp7v11CUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z', + }, + accSagittalFlat7v11CDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z', + }, + accSagittalSharp5v11SUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z', + }, + accSagittalFlat5v11SDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalDoubleSharp5v11SDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalDoubleFlat5v11SUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalDoubleSharp7v11CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z', + }, + accSagittalDoubleFlat7v11CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z', + }, + accSagittalDoubleSharp55CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z', + }, + accSagittalDoubleFlat55CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z', + }, + accSagittalDoubleSharp17CDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z', + }, + accSagittalDoubleFlat17CUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z', + }, + accSagittalDoubleSharp7v11kDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z', + }, + accSagittalDoubleFlat7v11kUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z', + }, + accSagittal23CommaUp: { + x_min: 0, + x_max: 188, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z', + }, + accSagittal23CommaDown: { + x_min: 0, + x_max: 188, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z', + }, + accSagittal5v19CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z', + }, + accSagittal5v19CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z', + }, + accSagittal5v23SmallDiesisUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z', + }, + accSagittal5v23SmallDiesisDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z', + }, + accSagittalSharp5v23SDown: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z', + }, + accSagittalFlat5v23SUp: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z', + }, + accSagittalSharp5v19CDown: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z', + }, + accSagittalFlat5v19CUp: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z', + }, + accSagittalSharp23CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z', + }, + accSagittalFlat23CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z', + }, + accSagittalSharp23CUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z', + }, + accSagittalFlat23CDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z', + }, + accSagittalSharp5v19CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z', + }, + accSagittalFlat5v19CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z', + }, + accSagittalSharp5v23SUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z', + }, + accSagittalFlat5v23SDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z', + }, + accSagittalDoubleSharp5v23SDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z', + }, + accSagittalDoubleFlat5v23SUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z', + }, + accSagittalDoubleSharp5v19CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z', + }, + accSagittalDoubleFlat5v19CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z', + }, + accSagittalDoubleSharp23CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z', + }, + accSagittalDoubleFlat23CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z', + }, + accSagittal19SchismaUp: { + x_min: 0, + x_max: 125, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z', + }, + accSagittal19SchismaDown: { + x_min: 0, + x_max: 125, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z', + }, + accSagittal17KleismaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal17KleismaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal143CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z', + }, + accSagittal143CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal11v49CommaUp: { + x_min: 0, + x_max: 188, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z', + }, + accSagittal11v49CommaDown: { + x_min: 0, + x_max: 188, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z', + }, + accSagittal19CommaUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z', + }, + accSagittal19CommaDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z', + }, + accSagittal7v19CommaUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z', + }, + accSagittal7v19CommaDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z', + }, + accSagittal49SmallDiesisUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal49SmallDiesisDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal23SmallDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal23SmallDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal5v13MediumDiesisUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z', + }, + accSagittal5v13MediumDiesisDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z', + }, + accSagittal11v19MediumDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z', + }, + accSagittal11v19MediumDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z', + }, + accSagittal49MediumDiesisUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z', + }, + accSagittal49MediumDiesisDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z', + }, + accSagittal5v49MediumDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z', + }, + accSagittal5v49MediumDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z', + }, + accSagittal49LargeDiesisUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z', + }, + accSagittal49LargeDiesisDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z', + }, + accSagittal11v19LargeDiesisUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z', + }, + accSagittal11v19LargeDiesisDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z', + }, + accSagittal5v13LargeDiesisUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z', + }, + accSagittal5v13LargeDiesisDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z', + }, + accSagittalSharp23SDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z', + }, + accSagittalFlat23SUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', + }, + accSagittalSharp49SDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z', + }, + accSagittalFlat49SUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z', + }, + accSagittalSharp7v19CDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z', + }, + accSagittalFlat7v19CUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z', + }, + accSagittalSharp19CDown: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z', + }, + accSagittalFlat19CUp: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z', + }, + accSagittalSharp11v49CDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z', + }, + accSagittalFlat11v49CUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z', + }, + accSagittalSharp143CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z', + }, + accSagittalFlat143CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', + }, + accSagittalSharp17kDown: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z', + }, + accSagittalFlat17kUp: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z', + }, + accSagittalSharp19sDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z', + }, + accSagittalFlat19sUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z', + }, + accSagittalSharp19sUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z', + }, + accSagittalFlat19sDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z', + }, + accSagittalSharp17kUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat17kDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp143CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z', + }, + accSagittalFlat143CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp11v49CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z', + }, + accSagittalFlat11v49CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z', + }, + accSagittalSharp19CUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', + }, + accSagittalFlat19CDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', + }, + accSagittalSharp7v19CUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', + }, + accSagittalFlat7v19CDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', + }, + accSagittalSharp49SUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat49SDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp23SUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat23SDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp5v13MUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z', + }, + accSagittalFlat5v13MDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z', + }, + accSagittalSharp11v19MUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalFlat11v19MDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalSharp49MUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z', + }, + accSagittalFlat49MDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z', + }, + accSagittalSharp5v49MUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z', + }, + accSagittalFlat5v49MDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z', + }, + accSagittalSharp49LUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z', + }, + accSagittalFlat49LDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z', + }, + accSagittalSharp11v19LUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z', + }, + accSagittalFlat11v19LDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z', + }, + accSagittalSharp5v13LUp: { + x_min: 0, + x_max: 500, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', + }, + accSagittalFlat5v13LDown: { + x_min: 0, + x_max: 500, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', + }, + accSagittalDoubleSharp23SDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z', + }, + accSagittalDoubleFlat23SUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z', + }, + accSagittalDoubleSharp49SDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z', + }, + accSagittalDoubleFlat49SUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z', + }, + accSagittalDoubleSharp7v19CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z', + }, + accSagittalDoubleFlat7v19CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z', + }, + accSagittalDoubleSharp19CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z', + }, + accSagittalDoubleFlat19CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z', + }, + accSagittalDoubleSharp11v49CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalDoubleFlat11v49CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalDoubleSharp143CDown: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalDoubleFlat143CUp: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalDoubleSharp17kDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z', + }, + accSagittalDoubleFlat17kUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z', + }, + accSagittalDoubleSharp19sDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalDoubleFlat19sUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittalShaftUp: { + x_min: 0, + x_max: 31, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z', + }, + accSagittalShaftDown: { + x_min: 0, + x_max: 31, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z', + }, + accSagittalAcute: { + x_min: 0, + x_max: 125, + y_min: -62, + y_max: 125, + ha: 187, + o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z', + }, + accSagittalGrave: { + x_min: 0, + x_max: 125, + y_min: -125, + y_max: 62, + ha: 187, + o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z', + }, + accSagittal1MinaUp: { + x_min: -7, + x_max: 124, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal1MinaDown: { + x_min: -7, + x_max: 124, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal2MinasUp: { + x_min: -7, + x_max: 218, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal2MinasDown: { + x_min: -7, + x_max: 218, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal1TinaUp: { + x_min: 0, + x_max: 93, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z', + }, + accSagittal1TinaDown: { + x_min: 0, + x_max: 93, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z', + }, + accSagittal2TinasUp: { + x_min: 0, + x_max: 94, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', + }, + accSagittal2TinasDown: { + x_min: 0, + x_max: 94, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z', + }, + accSagittal3TinasUp: { + x_min: -7, + x_max: 124, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal3TinasDown: { + x_min: -7, + x_max: 124, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal4TinasUp: { + x_min: 0, + x_max: 187, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z', + }, + accSagittal4TinasDown: { + x_min: 0, + x_max: 187, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z', + }, + accSagittal5TinasUp: { + x_min: 0, + x_max: 218, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', + }, + accSagittal5TinasDown: { + x_min: 0, + x_max: 218, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z', + }, + accSagittal6TinasUp: { + x_min: -7, + x_max: 218, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal6TinasDown: { + x_min: -7, + x_max: 218, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal7TinasUp: { + x_min: 0, + x_max: 281, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z', + }, + accSagittal7TinasDown: { + x_min: 0, + x_max: 281, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z', + }, + accSagittal8TinasUp: { + x_min: 0, + x_max: 312, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', + }, + accSagittal8TinasDown: { + x_min: 0, + x_max: 312, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z', + }, + accSagittal9TinasUp: { + x_min: -7, + x_max: 312, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal9TinasDown: { + x_min: -7, + x_max: 312, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittalFractionalTinaUp: { + x_min: -3, + x_max: 35, + y_min: 73, + y_max: 111, + ha: 38, + o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z', + }, + accSagittalFractionalTinaDown: { + x_min: -3, + x_max: 35, + y_min: -111, + y_max: -73, + ha: 38, + o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z', + }, + accidentalNarrowReversedFlat: { + x_min: 0, + x_max: 164, + y_min: -194, + y_max: 421, + ha: 615, + o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z', + }, + accidentalNarrowReversedFlatAndFlat: { + x_min: 0, + x_max: 414, + y_min: -194, + y_max: 421, + ha: 615, + o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z', + }, + accidentalWilsonPlus: { + x_min: 0, + x_max: 281, + y_min: -203, + y_max: 203, + ha: 406, + o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z', + }, + accidentalWilsonMinus: { + x_min: 0, + x_max: 281, + y_min: -186, + y_max: 186, + ha: 372, + o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z', + }, + }, + fontFamily: 'Bravura', + resolution: 1000, + generatedOn: '2022-12-18T09:06:51.407Z', +}; diff --git a/build/esm/src/fonts/common_metrics.js b/build/esm/src/fonts/common_metrics.js new file mode 100644 index 0000000000..806cda2f52 --- /dev/null +++ b/build/esm/src/fonts/common_metrics.js @@ -0,0 +1,384 @@ +export const CommonMetrics = { + smufl: true, + stave: { + padding: 12, + endPaddingMax: 10, + endPaddingMin: 5, + unalignedNotePadding: 10, + }, + accidental: { + noteheadAccidentalPadding: 1, + leftPadding: 2, + accidentalSpacing: 3, + }, + chordSymbol: { + global: { + superscriptOffset: -400, + subscriptOffset: 300, + kerningOffset: -250, + lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'], + upperKerningText: ['A', 'L'], + spacing: 100, + superSubRatio: 0.66, + }, + glyphs: { + csymDiminished: { + leftSideBearing: -32, + advanceWidth: 506, + yOffset: 0, + }, + csymHalfDiminished: { + leftSideBearing: -32, + advanceWidth: 506, + yOffset: 0, + }, + csymAugmented: { + leftSideBearing: 0, + advanceWidth: 530, + yOffset: 0, + }, + csymParensLeftTall: { + leftSideBearing: -20, + advanceWidth: 184, + yOffset: 250, + }, + csymParensRightTall: { + leftSideBearing: 0, + advanceWidth: 189, + yOffset: 250, + }, + csymBracketLeftTall: { + leftSideBearing: 0, + advanceWidth: 328, + yOffset: 0, + }, + csymBracketRightTall: { + leftSideBearing: 1, + advanceWidth: 600, + yOffset: 0, + }, + csymParensLeftVeryTall: { + leftSideBearing: 50, + advanceWidth: 121, + yOffset: 350, + }, + csymParensRightVeryTall: { + leftSideBearing: 0, + advanceWidth: 111, + yOffset: 350, + }, + csymDiagonalArrangementSlash: { + leftSideBearing: 250, + advanceWidth: 990, + yOffset: 300, + }, + csymMinor: { + leftSideBearing: 0, + advanceWidth: 482, + yOffset: 0, + }, + csymMajorSeventh: { + leftSideBearing: 200, + yOffset: 0, + advanceWidth: 600, + }, + accidentalSharp: { + leftSideBearing: 20, + advanceWidth: 250, + yOffset: -302, + }, + accidentalFlat: { + leftSideBearing: -20, + advanceWidth: 226, + yOffset: -184, + }, + }, + }, + clef_default: { + width: 26, + annotations: { + '8va': { + treble: { + line: -2, + shiftX: 12, + }, + }, + '8vb': { + treble: { + line: 6.5, + shiftX: 10, + }, + bass: { + line: 4, + shiftX: 1, + }, + }, + }, + }, + clef_small: { + width: 20, + annotations: { + '8va': { + treble: { + line: -0.2, + shiftX: 8, + }, + }, + '8vb': { + treble: { + line: 5.3, + shiftX: 6, + }, + bass: { + line: 3.1, + shiftX: 0.5, + }, + }, + }, + }, + ornament: { + brassScoop: { + xOffset: -12, + yOffset: 0, + stemUpYOffset: 0, + reportedWidth: 20, + }, + brassDoitMedium: { + xOffset: 16, + yOffset: 0, + stemUpYOffset: 0, + reportedWidth: 22, + }, + brassFallLipShort: { + xOffset: 16, + yOffset: 0, + stemUpYOffset: 0, + reportedWidth: 15, + }, + brassLiftMedium: { + xOffset: 16, + yOffset: 5, + stemUpYOffset: 0, + reportedWidth: 5, + }, + brassFallRoughMedium: { + xOffset: 16, + yOffset: 28, + stemUpYOffset: 0, + reportedWidth: 5, + }, + brassBend: { + xOffset: 2, + yOffset: -8, + stemUpYOffset: 25, + reportedWidth: 5, + }, + brassMuteClosed: { + xOffset: 3, + yOffset: -8, + stemUpYOffset: 25, + reportedWidth: 5, + }, + brassMuteOpen: { + xOffset: 3, + yOffset: -7, + stemUpYOffset: 25, + reportedWidth: 5, + }, + brassFlip: { + xOffset: 10, + yOffset: 0, + stemUpYOffset: 7, + reportedWidth: 10, + }, + brassJazzTurn: { + xOffset: 0, + yOffset: 0, + stemUpYOffset: 8, + reportedWidth: 31, + }, + brassSmear: { + xOffset: 10, + yOffset: 0, + stemUpYOffset: 8, + reportedWidth: 5, + }, + }, + parenthesis: { + default: { + width: 7, + }, + gracenote: { + width: 3, + }, + }, + pedalMarking: {}, + digits: { + shiftLine: -1, + shiftY: -6, + }, + articulation: { + articStaccatissimoAbove: { + padding: 2, + }, + articStaccatissimoBelow: { + padding: 2, + }, + }, + tremolo: { + default: { + spacing: 7, + offsetYStemUp: -8, + offsetYStemDown: 8, + offsetXStemUp: 11, + offsetXStemDown: 1, + }, + grace: { + spacing: (7 * 3) / 5, + offsetYStemUp: -(8 * 3) / 5, + offsetYStemDown: (8 * 3) / 5, + offsetXStemUp: 7, + offsetXStemDown: 1, + }, + }, + staveRepetition: { + symbolText: { + offsetX: 12, + offsetY: 25, + spacing: 5, + }, + coda: { + offsetY: 25, + }, + segno: { + offsetY: 10, + }, + }, + noteHead: { + minPadding: 2, + }, + stem: { + heightAdjustmentForFlag: -3, + noteHead: { + noteheadTriangleUpHalf: { + offsetYBaseStemUp: 5, + offsetYBaseStemDown: 4, + }, + noteheadTriangleUpBlack: { + offsetYBaseStemUp: 5, + offsetYBaseStemDown: 4, + }, + noteheadTriangleUpWhole: { + offsetYBaseStemUp: 5, + offsetYBaseStemDown: 4, + }, + noteheadXHalf: { + offsetYBaseStemUp: -4, + offsetYBaseStemDown: 4, + }, + noteheadXBlack: { + offsetYBaseStemUp: -4, + offsetYBaseStemDown: 4, + }, + noteheadXWhole: { + offsetYBaseStemUp: -4, + offsetYBaseStemDown: 4, + }, + noteheadHalf: { + offsetYBaseStemUp: -2.55, + offsetYBaseStemDown: 2.65, + }, + noteheadBlack: { + offsetYBaseStemUp: -2, + offsetYBaseStemDown: 2, + }, + noteheadSquareWhite: { + offsetYBaseStemDown: -5, + offsetYBaseStemUp: 5, + }, + }, + }, + stringNumber: { + verticalPadding: 8, + stemPadding: 2, + leftPadding: 5, + rightPadding: 6, + }, + tuplet: { + noteHeadOffset: 20, + stemOffset: 10, + bottomLine: 4, + topModifierOffset: 15, + }, + glyphs: { + coda: { + shiftX: -7, + shiftY: 8, + }, + segno: { + shiftX: -7, + }, + flag: { + shiftX: -0.75, + staveTempo: { + shiftX: -1, + }, + }, + clef_default: {}, + clef_small: { + gClef: { + shiftY: 1.5, + }, + }, + clefNote_default: {}, + clefNote_small: {}, + stroke_straight: { + arrowheadBlackDown: { + shiftX: -4.5, + }, + arrowheadBlackUp: { + shiftX: -0.85, + }, + }, + stroke_wiggly: { + arrowheadBlackDown: { + shiftX: -1, + shiftY: 1, + }, + arrowheadBlackUp: { + shiftX: -1, + shiftY: 1, + }, + }, + textNote: { + breathMarkTick: { + shiftY: 9, + }, + breathMarkComma: {}, + segno: { + shiftX: -7, + shiftY: 8, + }, + coda: { + shiftX: -7, + shiftY: 8, + }, + ornamentTrill: { + shiftX: -8, + shiftY: 8, + }, + ornamentTurn: {}, + ornamentTurnSlash: {}, + ornamentMordent: { + shiftX: -8, + }, + ornamentShortTrill: { + shiftX: -8, + }, + }, + noteHead: {}, + chordSymbol: { + scale: 0.8, + }, + }, +}; diff --git a/build/esm/src/fonts/custom_glyphs.js b/build/esm/src/fonts/custom_glyphs.js new file mode 100644 index 0000000000..fc46ea245d --- /dev/null +++ b/build/esm/src/fonts/custom_glyphs.js @@ -0,0 +1,42 @@ +export const CustomFont = { + resolution: 1000, + fontFamily: 'VexFlowCustom', + glyphs: { + vexAccidentalMicrotonal1: { + x_min: -171.5, + x_max: 483.1875, + ha: 493, + o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ', + }, + vexAccidentalMicrotonal3: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ', + }, + vexAccidentalMicrotonal4: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ', + }, + vexNoteHeadRectBlack: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ', + }, + vexNoteHeadRectWhite: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100', + }, + vexWiggleArpeggioUp: { + x_min: 58.53125, + x_max: 228.671875, + ha: 294, + o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ', + }, + }, +}; diff --git a/build/esm/src/fonts/gonville_glyphs.js b/build/esm/src/fonts/gonville_glyphs.js new file mode 100644 index 0000000000..1dfdacb243 --- /dev/null +++ b/build/esm/src/fonts/gonville_glyphs.js @@ -0,0 +1,1119 @@ +export const GonvilleSmuflFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 412, + y_min: -18, + y_max: 223, + ha: 241, + o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z', + }, + bracketBottom: { + x_min: 0, + x_max: 412, + y_min: -223, + y_max: 18, + ha: 241, + o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z', + }, + barlineTick: { + x_min: -59, + x_max: 59, + y_min: -139, + y_max: 139, + ha: 279, + o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z', + }, + breathMarkTick: { + x_min: -151, + x_max: 272, + y_min: 0, + y_max: 429, + ha: 429, + o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z', + }, + segno: { + x_min: 7, + x_max: 493, + y_min: -50, + y_max: 650, + ha: 699, + o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z', + }, + coda: { + x_min: 22, + x_max: 478, + y_min: -31, + y_max: 531, + ha: 563, + o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z', + }, + gClef: { + x_min: 0, + x_max: 623, + y_min: -632, + y_max: 1082, + ha: 1713, + o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z', + }, + cClef: { + x_min: 0, + x_max: 643, + y_min: -508, + y_max: 508, + ha: 1016, + o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z', + }, + fClef: { + x_min: 0, + x_max: 661, + y_min: -545, + y_max: 254, + ha: 798, + o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z', + }, + unpitchedPercussionClef1: { + x_min: -4, + x_max: 337, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z', + }, + '6stringTabClef': { + x_min: 0, + x_max: 501, + y_min: -735, + y_max: 753, + ha: 1487, + o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z', + }, + timeSig0: { + x_min: 0, + x_max: 380, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z', + }, + timeSig1: { + x_min: 0, + x_max: 254, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z', + }, + timeSig2: { + x_min: 0, + x_max: 337, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z', + }, + timeSig3: { + x_min: 0, + x_max: 302, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z', + }, + timeSig4: { + x_min: 0, + x_max: 345, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z', + }, + timeSig5: { + x_min: 0, + x_max: 302, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z', + }, + timeSig6: { + x_min: 0, + x_max: 349, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z', + }, + timeSig7: { + x_min: 0, + x_max: 326, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z', + }, + timeSig8: { + x_min: 0, + x_max: 360, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z', + }, + timeSig9: { + x_min: 0, + x_max: 349, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z', + }, + timeSigCommon: { + x_min: 0, + x_max: 409, + y_min: -233, + y_max: 233, + ha: 466, + o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z', + }, + timeSigCutCommon: { + x_min: 0, + x_max: 409, + y_min: -394, + y_max: 394, + ha: 788, + o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z', + }, + timeSigPlus: { + x_min: 0, + x_max: 235, + y_min: -118, + y_max: 118, + ha: 235, + o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z', + }, + timeSigPlusSmall: { + x_min: 0, + x_max: 235, + y_min: -118, + y_max: 118, + ha: 235, + o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z', + }, + timeSigMinus: { + x_min: 0, + x_max: 235, + y_min: -23, + y_max: 23, + ha: 46, + o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z', + }, + timeSigParensRight: { + x_min: 19, + x_max: 122, + y_min: -267, + y_max: 267, + ha: 535, + o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z', + }, + timeSigParensRightSmall: { + x_min: 19, + x_max: 122, + y_min: -267, + y_max: 267, + ha: 535, + o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z', + }, + timeSigParensLeft: { + x_min: -122, + x_max: -19, + y_min: -267, + y_max: 267, + ha: 534, + o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z', + }, + timeSigParensLeftSmall: { + x_min: -122, + x_max: -19, + y_min: -267, + y_max: 267, + ha: 534, + o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 663, + y_min: -174, + y_max: 174, + ha: 349, + o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 455, + y_min: -135, + y_max: 135, + ha: 269, + o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 316, + y_min: -135, + y_max: 135, + ha: 269, + o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 316, + y_min: -135, + y_max: 135, + ha: 269, + o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z', + }, + noteheadXWhole: { + x_min: 0, + x_max: 440, + y_min: -133, + y_max: 133, + ha: 265, + o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z', + }, + noteheadXHalf: { + x_min: 0, + x_max: 300, + y_min: -133, + y_max: 133, + ha: 265, + o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 300, + y_min: -133, + y_max: 133, + ha: 265, + o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 357, + y_min: -178, + y_max: 178, + ha: 357, + o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z', + }, + noteheadTriangleUpWhole: { + x_min: 0, + x_max: 462, + y_min: -149, + y_max: 149, + ha: 297, + o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z', + }, + noteheadTriangleUpHalf: { + x_min: 0, + x_max: 323, + y_min: -149, + y_max: 149, + ha: 298, + o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 322, + y_min: -149, + y_max: 149, + ha: 297, + o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 462, + y_min: -138, + y_max: 138, + ha: 277, + o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 322, + y_min: -138, + y_max: 138, + ha: 277, + o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 322, + y_min: -138, + y_max: 138, + ha: 277, + o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z', + }, + augmentationDot: { + x_min: -63, + x_max: 63, + y_min: -63, + y_max: 63, + ha: 126, + o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z', + }, + tremolo1: { + x_min: -252, + x_max: 216, + y_min: -185, + y_max: 148, + ha: 333, + o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z', + }, + flag8thUp: { + x_min: -17, + x_max: 234, + y_min: -745, + y_max: -4, + ha: 741, + o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z', + }, + flag8thDown: { + x_min: -15, + x_max: 271, + y_min: 4, + y_max: 745, + ha: 741, + o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z', + }, + flag16thUp: { + x_min: -17, + x_max: 234, + y_min: -847, + y_max: -4, + ha: 843, + o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z', + }, + flag16thDown: { + x_min: -15, + x_max: 267, + y_min: 4, + y_max: 745, + ha: 741, + o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z', + }, + flag32ndUp: { + x_min: -17, + x_max: 233, + y_min: -1005, + y_max: 96, + ha: 1101, + o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z', + }, + flag32ndDown: { + x_min: -15, + x_max: 270, + y_min: -96, + y_max: 895, + ha: 991, + o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z', + }, + flag64thUp: { + x_min: -17, + x_max: 233, + y_min: -933, + y_max: 296, + ha: 1230, + o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z', + }, + flag64thDown: { + x_min: -15, + x_max: 271, + y_min: -296, + y_max: 820, + ha: 1116, + o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z', + }, + flag128thUp: { + x_min: -17, + x_max: 231, + y_min: -987, + y_max: 496, + ha: 1484, + o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z', + }, + flag128thDown: { + x_min: -15, + x_max: 270, + y_min: -496, + y_max: 870, + ha: 1366, + o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z', + }, + accidentalFlat: { + x_min: -15, + x_max: 185, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 176, + y_min: -334, + y_max: 334, + ha: 667, + o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z', + }, + accidentalSharp: { + x_min: 0, + x_max: 239, + y_min: -388, + y_max: 388, + ha: 775, + o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 271, + y_min: -135, + y_max: 135, + ha: 271, + o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z', + }, + accidentalDoubleFlat: { + x_min: -15, + x_max: 356, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z', + }, + accidentalParensLeft: { + x_min: -122, + x_max: -19, + y_min: -267, + y_max: 267, + ha: 534, + o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z', + }, + accidentalParensRight: { + x_min: 19, + x_max: 122, + y_min: -267, + y_max: 267, + ha: 535, + o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 0, + x_max: 200, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 0, + x_max: 446, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 142, + y_min: -373, + y_max: 373, + ha: 747, + o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: 0, + x_max: 335, + y_min: -391, + y_max: 391, + ha: 782, + o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z', + }, + accidentalBuyukMucennebFlat: { + x_min: -125, + x_max: 185, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z', + }, + accidentalBuyukMucennebSharp: { + x_min: 0, + x_max: 284, + y_min: -388, + y_max: 388, + ha: 775, + o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z', + }, + accidentalBakiyeFlat: { + x_min: -129, + x_max: 185, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z', + }, + accidentalKomaSharp: { + x_min: 0, + x_max: 142, + y_min: -373, + y_max: 373, + ha: 747, + o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z', + }, + accidentalKucukMucennebSharp: { + x_min: 0, + x_max: 188, + y_min: -373, + y_max: 373, + ha: 747, + o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z', + }, + articAccentAbove: { + x_min: -256, + x_max: 19, + y_min: -114, + y_max: 114, + ha: 227, + o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z', + }, + articAccentBelow: { + x_min: -256, + x_max: 19, + y_min: -114, + y_max: 114, + ha: 227, + o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z', + }, + articTenutoAbove: { + x_min: -154, + x_max: 154, + y_min: -15, + y_max: 15, + ha: 30, + o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z', + }, + articTenutoBelow: { + x_min: -154, + x_max: 154, + y_min: -15, + y_max: 15, + ha: 30, + o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z', + }, + articStaccatoAbove: { + x_min: -49, + x_max: 49, + y_min: -49, + y_max: 49, + ha: 99, + o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z', + }, + articStaccatoBelow: { + x_min: -49, + x_max: 49, + y_min: -49, + y_max: 49, + ha: 99, + o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z', + }, + articStaccatissimoAbove: { + x_min: -53, + x_max: 53, + y_min: 0, + y_max: 184, + ha: 184, + o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z', + }, + articStaccatissimoBelow: { + x_min: -53, + x_max: 53, + y_min: -184, + y_max: 0, + ha: 184, + o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z', + }, + articMarcatoAbove: { + x_min: -114, + x_max: 114, + y_min: -256, + y_max: 19, + ha: 275, + o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z', + }, + articMarcatoBelow: { + x_min: -114, + x_max: 114, + y_min: -19, + y_max: 256, + ha: 275, + o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z', + }, + fermataAbove: { + x_min: -324, + x_max: 324, + y_min: 0, + y_max: 353, + ha: 353, + o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z', + }, + fermataBelow: { + x_min: -324, + x_max: 324, + y_min: -353, + y_max: 0, + ha: 353, + o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + fermataLongAbove: { + x_min: -286, + x_max: 286, + y_min: 0, + y_max: 364, + ha: 364, + o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z', + }, + fermataLongBelow: { + x_min: -286, + x_max: 286, + y_min: -364, + y_max: 0, + ha: 364, + o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + fermataVeryLongAbove: { + x_min: -286, + x_max: 286, + y_min: 0, + y_max: 438, + ha: 438, + o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z', + }, + fermataVeryLongBelow: { + x_min: -286, + x_max: 286, + y_min: -438, + y_max: 0, + ha: 438, + o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + fermataVeryShortAbove: { + x_min: -351, + x_max: 351, + y_min: 0, + y_max: 571, + ha: 571, + o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z', + }, + fermataVeryShortBelow: { + x_min: -351, + x_max: 351, + y_min: -571, + y_max: 0, + ha: 571, + o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z', + }, + fermataShortAbove: { + x_min: -286, + x_max: 286, + y_min: 0, + y_max: 469, + ha: 469, + o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z', + }, + fermataShortBelow: { + x_min: -286, + x_max: 286, + y_min: -469, + y_max: 0, + ha: 469, + o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + breathMarkComma: { + x_min: 0, + x_max: 168, + y_min: -155, + y_max: 155, + ha: 311, + o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z', + }, + breathMarkUpbow: { + x_min: -125, + x_max: 125, + y_min: 0, + y_max: 409, + ha: 409, + o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z', + }, + caesura: { + x_min: 0, + x_max: 457, + y_min: -202, + y_max: 303, + ha: 504, + o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 370, + y_min: -207, + y_max: 310, + ha: 517, + o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z', + }, + restMaxima: { + x_min: 0, + x_max: 853, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 284, + y_min: 0, + y_max: 250, + ha: 250, + o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z', + }, + restWhole: { + x_min: 0, + x_max: 330, + y_min: -125, + y_max: 0, + ha: 125, + o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z', + }, + restWholeLegerLine: { + x_min: 0, + x_max: 542, + y_min: -125, + y_max: 11, + ha: 137, + o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z', + }, + restHalf: { + x_min: 0, + x_max: 330, + y_min: 0, + y_max: 125, + ha: 125, + o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z', + }, + restHalfLegerLine: { + x_min: 0, + x_max: 542, + y_min: -11, + y_max: 125, + ha: 137, + o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z', + }, + restQuarter: { + x_min: 0, + x_max: 221, + y_min: -365, + y_max: 365, + ha: 730, + o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z', + }, + rest8th: { + x_min: 0, + x_max: 258, + y_min: -197, + y_max: 219, + ha: 416, + o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z', + }, + rest16th: { + x_min: 0, + x_max: 331, + y_min: -443, + y_max: 219, + ha: 662, + o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z', + }, + rest32nd: { + x_min: 0, + x_max: 405, + y_min: -443, + y_max: 466, + ha: 909, + o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z', + }, + rest64th: { + x_min: 0, + x_max: 479, + y_min: -689, + y_max: 466, + ha: 1155, + o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z', + }, + rest128th: { + x_min: 0, + x_max: 553, + y_min: -689, + y_max: 712, + ha: 1401, + o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z', + }, + dynamicPiano: { + x_min: -39, + x_max: 378, + y_min: -178, + y_max: 277, + ha: 455, + o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z', + }, + dynamicMezzo: { + x_min: 35, + x_max: 493, + y_min: -19, + y_max: 272, + ha: 291, + o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z', + }, + dynamicForte: { + x_min: -87, + x_max: 440, + y_min: -182, + y_max: 415, + ha: 597, + o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z', + }, + dynamicRinforzando: { + x_min: 58, + x_max: 357, + y_min: 0, + y_max: 275, + ha: 275, + o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z', + }, + dynamicSforzando: { + x_min: 52, + x_max: 278, + y_min: -22, + y_max: 270, + ha: 292, + o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z', + }, + dynamicZ: { + x_min: 23, + x_max: 309, + y_min: 2, + y_max: 250, + ha: 248, + o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z', + }, + ornamentTrill: { + x_min: -249, + x_max: 249, + y_min: 0, + y_max: 376, + ha: 376, + o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z', + }, + ornamentTurn: { + x_min: -310, + x_max: 310, + y_min: -143, + y_max: 143, + ha: 286, + o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z', + }, + ornamentTurnSlash: { + x_min: -310, + x_max: 310, + y_min: -201, + y_max: 201, + ha: 402, + o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z', + }, + ornamentMordent: { + x_min: -296, + x_max: 296, + y_min: -215, + y_max: 198, + ha: 413, + o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z', + }, + ornamentShortTrill: { + x_min: -296, + x_max: 296, + y_min: -127, + y_max: 127, + ha: 253, + o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z', + }, + ornamentTremblement: { + x_min: -419, + x_max: 419, + y_min: -127, + y_max: 127, + ha: 253, + o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z', + }, + ornamentPrecompAppoggTrill: { + x_min: -419, + x_max: 419, + y_min: -127, + y_max: 255, + ha: 381, + o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: -433, + x_max: 433, + y_min: -243, + y_max: 127, + ha: 370, + o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: -433, + x_max: 433, + y_min: -243, + y_max: 198, + ha: 442, + o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: -433, + x_max: 433, + y_min: -127, + y_max: 244, + ha: 370, + o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: -439, + x_max: 439, + y_min: -127, + y_max: 236, + ha: 363, + o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z', + }, + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: -439, + x_max: 439, + y_min: -215, + y_max: 236, + ha: 451, + o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: -439, + x_max: 439, + y_min: -236, + y_max: 127, + ha: 362, + o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z', + }, + stringsDownBow: { + x_min: -168, + x_max: 168, + y_min: 0, + y_max: 353, + ha: 353, + o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z', + }, + stringsUpBow: { + x_min: -110, + x_max: 110, + y_min: 0, + y_max: 277, + ha: 277, + o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z', + }, + stringsHarmonic: { + x_min: -82, + x_max: 82, + y_min: -82, + y_max: 82, + ha: 163, + o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: -110, + x_max: 110, + y_min: -110, + y_max: 205, + ha: 315, + o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: -110, + x_max: 110, + y_min: -205, + y_max: 110, + ha: 315, + o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z', + }, + pluckedLeftHandPizzicato: { + x_min: -155, + x_max: 155, + y_min: -157, + y_max: 157, + ha: 315, + o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 782, + y_min: -1, + y_max: 500, + ha: 501, + o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 435, + y_min: 65, + y_max: 500, + ha: 435, + o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z', + }, + pictChokeCymbal: { + x_min: 0, + x_max: 168, + y_min: -155, + y_max: 155, + ha: 311, + o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z', + }, + wiggleArpeggiatoUp: { + x_min: -8, + x_max: 269, + y_min: 0, + y_max: 126, + ha: 126, + o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z', + }, + arrowheadBlackUp: { + x_min: 11, + x_max: 239, + y_min: -6, + y_max: 269, + ha: 275, + o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z', + }, + arrowheadBlackDown: { + x_min: 11, + x_max: 239, + y_min: 6, + y_max: 281, + ha: 275, + o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z', + }, + }, + fontFamily: 'GonvilleSmufl', + resolution: 1000, + generatedOn: '2023-04-20T22:11:26.009Z', +}; diff --git a/build/esm/src/fonts/leland_glyphs.js b/build/esm/src/fonts/leland_glyphs.js new file mode 100644 index 0000000000..b08ceec834 --- /dev/null +++ b/build/esm/src/fonts/leland_glyphs.js @@ -0,0 +1,1191 @@ +export const LelandFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 491, + y_min: 0, + y_max: 279, + ha: 279, + o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z', + }, + bracketBottom: { + x_min: 0, + x_max: 491, + y_min: -279, + y_max: 0, + ha: 279, + o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z', + }, + segno: { + x_min: 0, + x_max: 654, + y_min: 0, + y_max: 869, + ha: 869, + o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z', + }, + coda: { + x_min: 0, + x_max: 745, + y_min: -113, + y_max: 735, + ha: 848, + o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z', + }, + gClef: { + x_min: 0, + x_max: 640, + y_min: -666, + y_max: 1112, + ha: 1778, + o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z', + }, + cClef: { + x_min: 0, + x_max: 627, + y_min: -480, + y_max: 482, + ha: 962, + o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z', + }, + fClef: { + x_min: 0, + x_max: 664, + y_min: -617, + y_max: 251, + ha: 868, + o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z', + }, + unpitchedPercussionClef1: { + x_min: 0, + x_max: 352, + y_min: -252, + y_max: 252, + ha: 504, + o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z', + }, + '6stringTabClef': { + x_min: 0, + x_max: 439, + y_min: -743, + y_max: 746, + ha: 1489, + o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z', + }, + timeSig0: { + x_min: 15, + x_max: 389, + y_min: -254, + y_max: 255, + ha: 509, + o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z', + }, + timeSig1: { + x_min: 15, + x_max: 336, + y_min: -243, + y_max: 245, + ha: 488, + o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z', + }, + timeSig2: { + x_min: 15, + x_max: 377, + y_min: -243, + y_max: 245, + ha: 488, + o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z', + }, + timeSig3: { + x_min: 15, + x_max: 364, + y_min: -244, + y_max: 244, + ha: 488, + o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z', + }, + timeSig4: { + x_min: 14, + x_max: 442, + y_min: -248, + y_max: 249, + ha: 497, + o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z', + }, + timeSig5: { + x_min: 15, + x_max: 362, + y_min: -244, + y_max: 246, + ha: 490, + o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z', + }, + timeSig6: { + x_min: 15, + x_max: 387, + y_min: -244, + y_max: 245, + ha: 489, + o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z', + }, + timeSig7: { + x_min: 15, + x_max: 366, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z', + }, + timeSig8: { + x_min: 15, + x_max: 393, + y_min: -248, + y_max: 246, + ha: 494, + o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z', + }, + timeSig9: { + x_min: 15, + x_max: 387, + y_min: -244, + y_max: 245, + ha: 489, + o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z', + }, + timeSigCommon: { + x_min: 0, + x_max: 463, + y_min: -256, + y_max: 258, + ha: 514, + o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z', + }, + timeSigCutCommon: { + x_min: 0, + x_max: 463, + y_min: -376, + y_max: 388, + ha: 764, + o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z', + }, + timeSigPlus: { + x_min: 0, + x_max: 408, + y_min: -204, + y_max: 204, + ha: 408, + o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 538, + y_min: -178, + y_max: 179, + ha: 357, + o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 373, + y_min: -134, + y_max: 136, + ha: 270, + o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 325, + y_min: -133, + y_max: 132, + ha: 265, + o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 325, + y_min: -133, + y_max: 132, + ha: 265, + o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 325, + y_min: -132, + y_max: 132, + ha: 264, + o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 325, + y_min: -162, + y_max: 163, + ha: 325, + o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z', + }, + noteheadDoubleWholeSquare: { + x_min: 0, + x_max: 432, + y_min: -179, + y_max: 177, + ha: 356, + o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z', + }, + noteheadSquareWhite: { + x_min: 0, + x_max: 310, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z', + }, + noteheadSquareBlack: { + x_min: 0, + x_max: 310, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 310, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 223 176 l 0 -196 l 446 -196 z', + }, + noteheadSlashedDoubleWhole1: { + x_min: -66, + x_max: 456, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z', + }, + noteheadSlashedWhole1: { + x_min: -75, + x_max: 448, + y_min: -211, + y_max: 214, + ha: 425, + o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z', + }, + noteheadSlashedHalf1: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z', + }, + noteheadSlashedBlack1: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z', + }, + noteheadSlashedDoubleWhole2: { + x_min: -66, + x_max: 456, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z', + }, + noteheadSlashedWhole2: { + x_min: -75, + x_max: 448, + y_min: -212, + y_max: 214, + ha: 426, + o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z', + }, + noteheadSlashedHalf2: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z', + }, + noteheadSlashedBlack2: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z', + }, + noteheadDiamondDoubleWhole: { + x_min: 0, + x_max: 373, + y_min: -178, + y_max: 179, + ha: 357, + o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 373, + y_min: -133, + y_max: 132, + ha: 265, + o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 335, + y_min: -132, + y_max: 133, + ha: 265, + o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 335, + y_min: -132, + y_max: 133, + ha: 265, + o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z', + }, + noteheadParenthesisRight: { + x_min: 0, + x_max: 75, + y_min: -209, + y_max: 212, + ha: 421, + o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z', + }, + noteheadParenthesisLeft: { + x_min: 0, + x_max: 75, + y_min: -212, + y_max: 209, + ha: 421, + o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z', + }, + noteheadMoonBlack: { + x_min: 0, + x_max: 310, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z', + }, + noteheadTriangleLeftBlack: { + x_min: 0, + x_max: 339, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 0 176 l 0 -196 l 488 -196 z', + }, + noteheadTriangleRightBlack: { + x_min: 0, + x_max: 339, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 488 176 l 0 -196 l 488 -196 z', + }, + noteheadTriangleRoundDownBlack: { + x_min: 0, + x_max: 310, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z', + }, + augmentationDot: { + x_min: 0, + x_max: 100, + y_min: -50, + y_max: 50, + ha: 100, + o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z', + }, + tremolo1: { + x_min: 0, + x_max: 290, + y_min: -93, + y_max: 96, + ha: 189, + o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z', + }, + flag8thUp: { + x_min: 0, + x_max: 289, + y_min: -817, + y_max: 12, + ha: 829, + o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z', + }, + flag8thDown: { + x_min: 0, + x_max: 309, + y_min: -12, + y_max: 817, + ha: 829, + o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z', + }, + flag16thUp: { + x_min: 0, + x_max: 279, + y_min: -820, + y_max: 12, + ha: 832, + o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z', + }, + flag16thDown: { + x_min: 0, + x_max: 309, + y_min: -26, + y_max: 803, + ha: 829, + o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z', + }, + flag32ndUp: { + x_min: 0, + x_max: 279, + y_min: -821, + y_max: 186, + ha: 1007, + o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z', + }, + flag32ndDown: { + x_min: 0, + x_max: 309, + y_min: -216, + y_max: 803, + ha: 1019, + o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z', + }, + flag64thUp: { + x_min: 0, + x_max: 279, + y_min: -822, + y_max: 373, + ha: 1195, + o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z', + }, + flag64thDown: { + x_min: 0, + x_max: 309, + y_min: -403, + y_max: 804, + ha: 1207, + o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z', + }, + flag128thUp: { + x_min: 0, + x_max: 279, + y_min: -821, + y_max: 573, + ha: 1394, + o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z', + }, + flag128thDown: { + x_min: 0, + x_max: 309, + y_min: -591, + y_max: 803, + ha: 1394, + o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z', + }, + accidentalFlat: { + x_min: 0, + x_max: 203, + y_min: -176, + y_max: 453, + ha: 629, + o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 171, + y_min: -323, + y_max: 325, + ha: 648, + o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z', + }, + accidentalSharp: { + x_min: 0, + x_max: 244, + y_min: -333, + y_max: 334, + ha: 667, + o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 275, + y_min: -137, + y_max: 138, + ha: 275, + o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z', + }, + accidentalDoubleFlat: { + x_min: 0, + x_max: 371, + y_min: -176, + y_max: 453, + ha: 629, + o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z', + }, + accidentalParensLeft: { + x_min: 0, + x_max: 75, + y_min: -212, + y_max: 209, + ha: 421, + o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z', + }, + accidentalParensRight: { + x_min: 0, + x_max: 75, + y_min: -209, + y_max: 212, + ha: 421, + o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 0, + x_max: 193, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 0, + x_max: 422, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 180, + y_min: -316, + y_max: 320, + ha: 636, + o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: 0, + x_max: 290, + y_min: -328, + y_max: 339, + ha: 667, + o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z', + }, + accidentalBuyukMucennebFlat: { + x_min: 0, + x_max: 277, + y_min: -176, + y_max: 454, + ha: 630, + o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z', + }, + accidentalBuyukMucennebSharp: { + x_min: 0, + x_max: 348, + y_min: -332, + y_max: 334, + ha: 666, + o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z', + }, + accidentalBakiyeFlat: { + x_min: 0, + x_max: 277, + y_min: -176, + y_max: 454, + ha: 630, + o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z', + }, + accidentalKucukMucennebSharp: { + x_min: 0, + x_max: 348, + y_min: -316, + y_max: 318, + ha: 634, + o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z', + }, + articAccentAbove: { + x_min: 0, + x_max: 361, + y_min: 0, + y_max: 235, + ha: 235, + o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z', + }, + articAccentBelow: { + x_min: 0, + x_max: 361, + y_min: -235, + y_max: 0, + ha: 235, + o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z', + }, + articTenutoAbove: { + x_min: 0, + x_max: 316, + y_min: 0, + y_max: 46, + ha: 46, + o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z', + }, + articTenutoBelow: { + x_min: 0, + x_max: 316, + y_min: -46, + y_max: 0, + ha: 46, + o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z', + }, + articStaccatoAbove: { + x_min: 0, + x_max: 78, + y_min: 0, + y_max: 78, + ha: 78, + o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z', + }, + articStaccatoBelow: { + x_min: 0, + x_max: 78, + y_min: -78, + y_max: 0, + ha: 78, + o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z', + }, + articStaccatissimoAbove: { + x_min: 0, + x_max: 127, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z', + }, + articStaccatissimoBelow: { + x_min: 0, + x_max: 127, + y_min: -248, + y_max: 0, + ha: 248, + o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z', + }, + articMarcatoAbove: { + x_min: 1, + x_max: 296, + y_min: 0, + y_max: 253, + ha: 253, + o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z', + }, + articMarcatoBelow: { + x_min: 0, + x_max: 295, + y_min: -253, + y_max: 0, + ha: 253, + o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z', + }, + fermataAbove: { + x_min: 0, + x_max: 622, + y_min: 0, + y_max: 368, + ha: 368, + o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z', + }, + fermataBelow: { + x_min: 0, + x_max: 622, + y_min: -368, + y_max: 0, + ha: 368, + o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z', + }, + fermataLongAbove: { + x_min: 0, + x_max: 623, + y_min: 0, + y_max: 368, + ha: 368, + o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z', + }, + fermataLongBelow: { + x_min: 0, + x_max: 623, + y_min: -368, + y_max: 0, + ha: 368, + o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z', + }, + fermataVeryLongAbove: { + x_min: 0, + x_max: 842, + y_min: 0, + y_max: 549, + ha: 549, + o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z', + }, + fermataVeryLongBelow: { + x_min: 0, + x_max: 842, + y_min: -549, + y_max: 0, + ha: 549, + o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z', + }, + fermataShortAbove: { + x_min: 0, + x_max: 642, + y_min: 0, + y_max: 454, + ha: 454, + o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z', + }, + fermataShortBelow: { + x_min: 0, + x_max: 642, + y_min: -454, + y_max: 0, + ha: 454, + o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z', + }, + breathMarkComma: { + x_min: 0, + x_max: 191, + y_min: 0, + y_max: 321, + ha: 321, + o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z', + }, + caesura: { + x_min: 0, + x_max: 380, + y_min: 0, + y_max: 490, + ha: 490, + o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 368, + y_min: 0, + y_max: 491, + ha: 491, + o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z', + }, + restMaxima: { + x_min: 0, + x_max: 450, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 125, + y_min: -11, + y_max: 262, + ha: 273, + o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z', + }, + restWhole: { + x_min: 0, + x_max: 325, + y_min: -131, + y_max: 5, + ha: 136, + o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z', + }, + restWholeLegerLine: { + x_min: -139, + x_max: 464, + y_min: -122, + y_max: 14, + ha: 136, + o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z', + }, + restHalf: { + x_min: 0, + x_max: 325, + y_min: -4, + y_max: 132, + ha: 136, + o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z', + }, + restHalfLegerLine: { + x_min: -139, + x_max: 464, + y_min: -14, + y_max: 122, + ha: 136, + o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z', + }, + restQuarter: { + x_min: 0, + x_max: 235, + y_min: -331, + y_max: 401, + ha: 732, + o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z', + }, + rest8th: { + x_min: 0, + x_max: 276, + y_min: -255, + y_max: 204, + ha: 459, + o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z', + }, + rest16th: { + x_min: 1, + x_max: 344, + y_min: -507, + y_max: 204, + ha: 711, + o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z', + }, + rest32nd: { + x_min: 0, + x_max: 391, + y_min: -507, + y_max: 460, + ha: 967, + o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z', + }, + rest64th: { + x_min: 0, + x_max: 423, + y_min: -758, + y_max: 464, + ha: 1222, + o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z', + }, + rest128th: { + x_min: -1, + x_max: 475, + y_min: -759, + y_max: 717, + ha: 1476, + o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z', + }, + dynamicPiano: { + x_min: -95, + x_max: 317, + y_min: -163, + y_max: 263, + ha: 426, + o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z', + }, + dynamicMezzo: { + x_min: -7, + x_max: 374, + y_min: -2, + y_max: 251, + ha: 253, + o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z', + }, + dynamicForte: { + x_min: -137, + x_max: 334, + y_min: -193, + y_max: 421, + ha: 614, + o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z', + }, + dynamicRinforzando: { + x_min: -12, + x_max: 230, + y_min: 0, + y_max: 254, + ha: 254, + o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z', + }, + dynamicSforzando: { + x_min: 0, + x_max: 208, + y_min: -5, + y_max: 263, + ha: 268, + o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z', + }, + dynamicZ: { + x_min: -42, + x_max: 239, + y_min: -1, + y_max: 258, + ha: 259, + o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z', + }, + ornamentTrill: { + x_min: -12, + x_max: 383, + y_min: 0, + y_max: 383, + ha: 383, + o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z', + }, + ornamentTurn: { + x_min: 0, + x_max: 456, + y_min: 0, + y_max: 232, + ha: 232, + o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z', + }, + ornamentTurnSlash: { + x_min: 0, + x_max: 456, + y_min: -80, + y_max: 313, + ha: 393, + o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z', + }, + ornamentMordent: { + x_min: 0, + x_max: 473, + y_min: -77, + y_max: 316, + ha: 393, + o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z', + }, + ornamentShortTrill: { + x_min: 0, + x_max: 473, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z', + }, + ornamentTremblement: { + x_min: 0, + x_max: 654, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z', + }, + ornamentPrecompAppoggTrill: { + x_min: 0, + x_max: 680, + y_min: 0, + y_max: 388, + ha: 388, + o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: 0, + x_max: 662, + y_min: -158, + y_max: 248, + ha: 406, + o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: 0, + x_max: 662, + y_min: -158, + y_max: 321, + ha: 479, + o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: 0, + x_max: 662, + y_min: 0, + y_max: 406, + ha: 406, + o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: 0, + x_max: 857, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: 0, + x_max: 565, + y_min: -171, + y_max: 249, + ha: 420, + o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z', + }, + brassMuteClosed: { + x_min: 0, + x_max: 312, + y_min: 0, + y_max: 312, + ha: 312, + o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z', + }, + brassMuteOpen: { + x_min: 0, + x_max: 280, + y_min: 0, + y_max: 280, + ha: 280, + o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z', + }, + stringsDownBow: { + x_min: 0, + x_max: 315, + y_min: 0, + y_max: 293, + ha: 293, + o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z', + }, + stringsUpBow: { + x_min: 0, + x_max: 262, + y_min: 0, + y_max: 343, + ha: 343, + o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z', + }, + stringsHarmonic: { + x_min: 0, + x_max: 181, + y_min: 0, + y_max: 181, + ha: 181, + o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: 0, + x_max: 269, + y_min: 0, + y_max: 389, + ha: 389, + o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: 0, + x_max: 269, + y_min: 0, + y_max: 389, + ha: 389, + o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 981, + y_min: -10, + y_max: 545, + ha: 555, + o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 473, + y_min: 0, + y_max: 473, + ha: 473, + o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z', + }, + wiggleArpeggiatoUp: { + x_min: -22, + x_max: 242, + y_min: 0, + y_max: 164, + ha: 164, + o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z', + }, + repeat1Bar: { + x_min: 0, + x_max: 481, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z', + }, + repeat2Bars: { + x_min: 0, + x_max: 735, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z', + }, + repeat4Bars: { + x_min: 0, + x_max: 1243, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z', + }, + repeatBarSlash: { + x_min: 0, + x_max: 481, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z', + }, + csymDiminished: { + x_min: 0, + x_max: 501, + y_min: 0, + y_max: 501, + ha: 501, + o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z', + }, + csymHalfDiminished: { + x_min: -1, + x_max: 502, + y_min: -1, + y_max: 502, + ha: 503, + o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z', + }, + csymAugmented: { + x_min: 1, + x_max: 321, + y_min: 90, + y_max: 410, + ha: 320, + o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z', + }, + csymMajorSeventh: { + x_min: 0, + x_max: 500, + y_min: 10, + y_max: 490, + ha: 480, + o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z', + }, + accidentalNarrowReversedFlat: { + x_min: 0, + x_max: 160, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z', + }, + accidentalNarrowReversedFlatAndFlat: { + x_min: 0, + x_max: 416, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z', + }, + }, + fontFamily: 'Leland', + resolution: 1000, + generatedOn: '2022-12-19T23:52:37.756Z', +}; diff --git a/build/esm/src/fonts/load_all.js b/build/esm/src/fonts/load_all.js new file mode 100644 index 0000000000..09b7cde58a --- /dev/null +++ b/build/esm/src/fonts/load_all.js @@ -0,0 +1,12 @@ +import { loadBravura } from './load_bravura.js'; +import { loadCustom } from './load_custom.js'; +import { loadGonville } from './load_gonville.js'; +import { loadLeland } from './load_leland.js'; +import { loadPetaluma } from './load_petaluma.js'; +export function loadAllMusicFonts() { + loadBravura(); + loadGonville(); + loadPetaluma(); + loadCustom(); + loadLeland(); +} diff --git a/build/esm/src/fonts/load_bravura.js b/build/esm/src/fonts/load_bravura.js new file mode 100644 index 0000000000..2f8600f99d --- /dev/null +++ b/build/esm/src/fonts/load_bravura.js @@ -0,0 +1,6 @@ +import { Font } from '../font.js'; +import { BravuraFont } from './bravura_glyphs.js'; +import { CommonMetrics } from './common_metrics.js'; +export function loadBravura() { + Font.load('Bravura', BravuraFont, CommonMetrics); +} diff --git a/build/esm/src/fonts/load_custom.js b/build/esm/src/fonts/load_custom.js new file mode 100644 index 0000000000..23abe0d4fa --- /dev/null +++ b/build/esm/src/fonts/load_custom.js @@ -0,0 +1,6 @@ +import { Font } from '../font.js'; +import { CommonMetrics } from './common_metrics.js'; +import { CustomFont } from './custom_glyphs.js'; +export function loadCustom() { + Font.load('Custom', CustomFont, CommonMetrics); +} diff --git a/build/esm/src/fonts/load_gonville.js b/build/esm/src/fonts/load_gonville.js new file mode 100644 index 0000000000..e0ce947d73 --- /dev/null +++ b/build/esm/src/fonts/load_gonville.js @@ -0,0 +1,6 @@ +import { Font } from '../font.js'; +import { CommonMetrics } from './common_metrics.js'; +import { GonvilleSmuflFont } from './gonville_glyphs.js'; +export function loadGonville() { + Font.load('Gonville', GonvilleSmuflFont, CommonMetrics); +} diff --git a/build/esm/src/fonts/load_leland.js b/build/esm/src/fonts/load_leland.js new file mode 100644 index 0000000000..9106e80307 --- /dev/null +++ b/build/esm/src/fonts/load_leland.js @@ -0,0 +1,6 @@ +import { Font } from '../font.js'; +import { CommonMetrics } from './common_metrics.js'; +import { LelandFont } from './leland_glyphs.js'; +export function loadLeland() { + Font.load('Leland', LelandFont, CommonMetrics); +} diff --git a/build/esm/src/fonts/load_petaluma.js b/build/esm/src/fonts/load_petaluma.js new file mode 100644 index 0000000000..1cdfee755c --- /dev/null +++ b/build/esm/src/fonts/load_petaluma.js @@ -0,0 +1,83 @@ +import { Font } from '../font.js'; +import { CommonMetrics } from './common_metrics.js'; +import { PetalumaFont } from './petaluma_glyphs.js'; +const petalumaChordMetrics = { + csymDiminished: { + leftSideBearing: -95, + advanceWidth: 506, + yOffset: 0, + }, + csymHalfDiminished: { + leftSideBearing: -32, + advanceWidth: 506, + yOffset: 0, + }, + csymAugmented: { + leftSideBearing: -25, + advanceWidth: 530, + yOffset: 0, + }, + csymParensLeftTall: { + leftSideBearing: 0, + advanceWidth: 155, + yOffset: 150, + }, + csymParensRightTall: { + leftSideBearing: 40, + advanceWidth: 189, + yOffset: 150, + }, + csymBracketLeftTall: { + leftSideBearing: 0, + advanceWidth: 328, + yOffset: 0, + }, + csymBracketRightTall: { + leftSideBearing: 1, + advanceWidth: 600, + yOffset: 0, + }, + csymParensLeftVeryTall: { + leftSideBearing: 0, + advanceWidth: 210, + yOffset: 250, + }, + csymParensRightVeryTall: { + leftSideBearing: -100, + advanceWidth: 111, + yOffset: 250, + }, + csymDiagonalArrangementSlash: { + leftSideBearing: -1, + advanceWidth: 990, + yOffset: 0, + }, + csymMinor: { + leftSideBearing: 0, + advanceWidth: 482, + yOffset: 0, + }, + csymMajorSeventh: { + leftSideBearing: 100, + yOffset: 0, + advanceWidth: 600, + }, + accidentalSharp: { + leftSideBearing: 0, + advanceWidth: 425, + yOffset: -422, + }, + accidentalFlat: { + leftSideBearing: -10, + advanceWidth: 228, + yOffset: -284, + }, +}; +export function loadPetaluma() { + const metrics = JSON.parse(JSON.stringify(CommonMetrics)); + const chordMetrics = metrics.chordSymbol; + if (chordMetrics) { + chordMetrics.glyphs = petalumaChordMetrics; + } + Font.load('Petaluma', PetalumaFont, metrics); +} diff --git a/build/esm/src/fonts/petaluma_glyphs.js b/build/esm/src/fonts/petaluma_glyphs.js new file mode 100644 index 0000000000..0c8298babf --- /dev/null +++ b/build/esm/src/fonts/petaluma_glyphs.js @@ -0,0 +1,1639 @@ +export const PetalumaFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 508, + y_min: 0, + y_max: 370, + ha: 370, + o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z', + }, + bracketBottom: { + x_min: 0, + x_max: 496, + y_min: -393, + y_max: 0, + ha: 393, + o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z', + }, + barlineTick: { + x_min: 0, + x_max: 56, + y_min: 877, + y_max: 1122, + ha: 245, + o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z', + }, + breathMarkTick: { + x_min: 0, + x_max: 568, + y_min: 0, + y_max: 621, + ha: 621, + o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z', + }, + segno: { + x_min: 0, + x_max: 798, + y_min: -65, + y_max: 806, + ha: 871, + o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z', + }, + coda: { + x_min: 0, + x_max: 1380, + y_min: -196, + y_max: 1037, + ha: 1233, + o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z', + }, + gClef: { + x_min: 0, + x_max: 664, + y_min: -559, + y_max: 1009, + ha: 1568, + o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z', + }, + cClef: { + x_min: 0, + x_max: 731, + y_min: -543, + y_max: 543, + ha: 1086, + o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z', + }, + fClef: { + x_min: 0, + x_max: 776, + y_min: -496, + y_max: 216, + ha: 712, + o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z', + }, + unpitchedPercussionClef1: { + x_min: 0, + x_max: 379, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z', + }, + '6stringTabClef': { + x_min: 0, + x_max: 438, + y_min: -768, + y_max: 767, + ha: 1535, + o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z', + }, + timeSig0: { + x_min: 20, + x_max: 513, + y_min: -358, + y_max: 359, + ha: 717, + o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z', + }, + timeSig1: { + x_min: 20, + x_max: 283, + y_min: -364, + y_max: 366, + ha: 730, + o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z', + }, + timeSig2: { + x_min: 20, + x_max: 660, + y_min: -379, + y_max: 382, + ha: 761, + o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z', + }, + timeSig3: { + x_min: 20, + x_max: 540, + y_min: -392, + y_max: 392, + ha: 784, + o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z', + }, + timeSig4: { + x_min: 20, + x_max: 633, + y_min: -490, + y_max: 491, + ha: 981, + o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z', + }, + timeSig5: { + x_min: 20, + x_max: 583, + y_min: -389, + y_max: 389, + ha: 778, + o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z', + }, + timeSig6: { + x_min: 20, + x_max: 565, + y_min: -363, + y_max: 363, + ha: 726, + o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z', + }, + timeSig7: { + x_min: 20, + x_max: 592, + y_min: -345, + y_max: 345, + ha: 690, + o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z', + }, + timeSig8: { + x_min: 20, + x_max: 504, + y_min: -428, + y_max: 428, + ha: 856, + o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z', + }, + timeSig9: { + x_min: 20, + x_max: 494, + y_min: -421, + y_max: 421, + ha: 842, + o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z', + }, + timeSigCommon: { + x_min: 20, + x_max: 585, + y_min: -298, + y_max: 294, + ha: 592, + o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z', + }, + timeSigCutCommon: { + x_min: 20, + x_max: 695, + y_min: -687, + y_max: 687, + ha: 1374, + o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z', + }, + timeSigPlus: { + x_min: 0, + x_max: 661, + y_min: -358, + y_max: 358, + ha: 716, + o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z', + }, + timeSigPlusSmall: { + x_min: 0, + x_max: 418, + y_min: -197, + y_max: 199, + ha: 396, + o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z', + }, + timeSigMinus: { + x_min: 0, + x_max: 662, + y_min: -54, + y_max: 55, + ha: 109, + o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z', + }, + timeSigParensRight: { + x_min: 0, + x_max: 274, + y_min: -723, + y_max: 725, + ha: 1448, + o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z', + }, + timeSigParensRightSmall: { + x_min: 0, + x_max: 154, + y_min: -422, + y_max: 422, + ha: 844, + o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z', + }, + timeSigParensLeft: { + x_min: 1, + x_max: 400, + y_min: -728, + y_max: 728, + ha: 1456, + o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z', + }, + timeSigParensLeftSmall: { + x_min: 0, + x_max: 173, + y_min: -405, + y_max: 404, + ha: 809, + o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 614, + y_min: -223, + y_max: 223, + ha: 446, + o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 380, + y_min: -186, + y_max: 165, + ha: 351, + o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 334, + y_min: -174, + y_max: 175, + ha: 349, + o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 334, + y_min: -164, + y_max: 164, + ha: 328, + o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z', + }, + noteheadXDoubleWhole: { + x_min: 0, + x_max: 730, + y_min: -266, + y_max: 267, + ha: 533, + o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z', + }, + noteheadXWhole: { + x_min: 0, + x_max: 506, + y_min: -143, + y_max: 144, + ha: 287, + o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z', + }, + noteheadXHalf: { + x_min: 0, + x_max: 421, + y_min: -146, + y_max: 151, + ha: 297, + o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 289, + y_min: -156, + y_max: 157, + ha: 313, + o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z', + }, + noteheadCircleXDoubleWhole: { + x_min: 0, + x_max: 437, + y_min: -220, + y_max: 219, + ha: 439, + o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z', + }, + noteheadCircleXWhole: { + x_min: 0, + x_max: 323, + y_min: -190, + y_max: 184, + ha: 374, + o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z', + }, + noteheadCircleXHalf: { + x_min: 0, + x_max: 309, + y_min: -179, + y_max: 179, + ha: 358, + o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 344, + y_min: -179, + y_max: 175, + ha: 354, + o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z', + }, + noteheadCircledDoubleWhole: { + x_min: 0, + x_max: 672, + y_min: -291, + y_max: 291, + ha: 582, + o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z', + }, + noteheadCircledWhole: { + x_min: -50, + x_max: 472, + y_min: -231, + y_max: 232, + ha: 463, + o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z', + }, + noteheadCircledHalf: { + x_min: -50, + x_max: 393, + y_min: -175, + y_max: 175, + ha: 350, + o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z', + }, + noteheadCircledBlack: { + x_min: -70, + x_max: 326, + y_min: -168, + y_max: 192, + ha: 360, + o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z', + }, + noteheadDoubleWholeSquare: { + x_min: 0, + x_max: 474, + y_min: -209, + y_max: 211, + ha: 420, + o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z', + }, + noteheadSquareWhite: { + x_min: 0, + x_max: 350, + y_min: -131, + y_max: 131, + ha: 262, + o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z', + }, + noteheadSquareBlack: { + x_min: 0, + x_max: 342, + y_min: -130, + y_max: 132, + ha: 262, + o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z', + }, + noteheadTriangleDownDoubleWhole: { + x_min: 0, + x_max: 510, + y_min: -213, + y_max: 213, + ha: 426, + o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z', + }, + noteheadTriangleDownWhole: { + x_min: 0, + x_max: 366, + y_min: -145, + y_max: 138, + ha: 283, + o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z', + }, + noteheadTriangleDownHalf: { + x_min: 0, + x_max: 341, + y_min: -159, + y_max: 159, + ha: 318, + o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z', + }, + noteheadTriangleDownBlack: { + x_min: 0, + x_max: 346, + y_min: -149, + y_max: 149, + ha: 298, + o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z', + }, + noteheadTriangleUpDoubleWhole: { + x_min: 0, + x_max: 510, + y_min: -213, + y_max: 213, + ha: 426, + o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z', + }, + noteheadTriangleUpWhole: { + x_min: 0, + x_max: 366, + y_min: -145, + y_max: 138, + ha: 283, + o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z', + }, + noteheadTriangleUpHalf: { + x_min: 0, + x_max: 341, + y_min: -159, + y_max: 159, + ha: 318, + o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 346, + y_min: -149, + y_max: 149, + ha: 298, + o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z', + }, + noteheadSlashedDoubleWhole1: { + x_min: 0, + x_max: 697, + y_min: -290, + y_max: 290, + ha: 580, + o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z', + }, + noteheadSlashedWhole1: { + x_min: -76, + x_max: 498, + y_min: -168, + y_max: 168, + ha: 336, + o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z', + }, + noteheadSlashedHalf1: { + x_min: -79, + x_max: 471, + y_min: -184, + y_max: 184, + ha: 368, + o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z', + }, + noteheadSlashedBlack1: { + x_min: -110, + x_max: 452, + y_min: -190, + y_max: 190, + ha: 380, + o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z', + }, + noteheadSlashedDoubleWhole2: { + x_min: 0, + x_max: 697, + y_min: -295, + y_max: 295, + ha: 590, + o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z', + }, + noteheadSlashedWhole2: { + x_min: -83, + x_max: 510, + y_min: -201, + y_max: 198, + ha: 399, + o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z', + }, + noteheadSlashedHalf2: { + x_min: -73, + x_max: 454, + y_min: -188, + y_max: 188, + ha: 376, + o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z', + }, + noteheadSlashedBlack2: { + x_min: -84, + x_max: 405, + y_min: -189, + y_max: 189, + ha: 378, + o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z', + }, + noteheadDiamondDoubleWhole: { + x_min: 0, + x_max: 429, + y_min: -221, + y_max: 221, + ha: 442, + o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 271, + y_min: -132, + y_max: 132, + ha: 264, + o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 295, + y_min: -148, + y_max: 148, + ha: 296, + o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 310, + y_min: -146, + y_max: 146, + ha: 292, + o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z', + }, + noteheadParenthesis: { + x_min: -70, + x_max: 329, + y_min: -196, + y_max: 201, + ha: 397, + o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z', + }, + noteheadParenthesisRight: { + x_min: -30, + x_max: 82, + y_min: -199, + y_max: 206, + ha: 405, + o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z', + }, + noteheadParenthesisLeft: { + x_min: 0, + x_max: 106, + y_min: -197, + y_max: 197, + ha: 394, + o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z', + }, + noteheadMoonBlack: { + x_min: 0, + x_max: 328, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z', + }, + noteheadTriangleLeftBlack: { + x_min: 0, + x_max: 391, + y_min: -142, + y_max: 142, + ha: 284, + o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z', + }, + noteheadTriangleRightBlack: { + x_min: 0, + x_max: 398, + y_min: -139, + y_max: 140, + ha: 279, + o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z', + }, + noteheadTriangleRoundDownBlack: { + x_min: 0, + x_max: 334, + y_min: -134, + y_max: 136, + ha: 270, + o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z', + }, + augmentationDot: { + x_min: 0, + x_max: 96, + y_min: -57, + y_max: 57, + ha: 114, + o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z', + }, + tremolo1: { + x_min: -158, + x_max: 156, + y_min: -88, + y_max: 88, + ha: 176, + o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z', + }, + flag8thUp: { + x_min: 0, + x_max: 261, + y_min: -819, + y_max: 0, + ha: 819, + o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z', + }, + flag8thDown: { + x_min: 0, + x_max: 261, + y_min: 0, + y_max: 819, + ha: 819, + o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z', + }, + flag16thUp: { + x_min: 0, + x_max: 327, + y_min: -819, + y_max: 0, + ha: 819, + o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z', + }, + flag16thDown: { + x_min: 0, + x_max: 327, + y_min: 0, + y_max: 819, + ha: 819, + o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z', + }, + flag32ndUp: { + x_min: 0, + x_max: 268, + y_min: -849, + y_max: 149, + ha: 999, + o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z', + }, + flag32ndDown: { + x_min: -3, + x_max: 268, + y_min: -169, + y_max: 829, + ha: 999, + o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z', + }, + flag64thUp: { + x_min: -4, + x_max: 282, + y_min: -824, + y_max: 347, + ha: 1171, + o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z', + }, + flag64thDown: { + x_min: -5, + x_max: 281, + y_min: -375, + y_max: 796, + ha: 1171, + o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z', + }, + flag128thUp: { + x_min: 0, + x_max: 252, + y_min: -804, + y_max: 530, + ha: 1334, + o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z', + }, + flag128thDown: { + x_min: -1, + x_max: 252, + y_min: -580, + y_max: 754, + ha: 1334, + o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z', + }, + accidentalFlat: { + x_min: 1, + x_max: 209, + y_min: -208, + y_max: 472, + ha: 680, + o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 214, + y_min: -456, + y_max: 462, + ha: 918, + o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z', + }, + accidentalSharp: { + x_min: -22, + x_max: 390, + y_min: -384, + y_max: 383, + ha: 767, + o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 287, + y_min: -159, + y_max: 159, + ha: 318, + o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z', + }, + accidentalDoubleFlat: { + x_min: 0, + x_max: 359, + y_min: -220, + y_max: 446, + ha: 666, + o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z', + }, + accidentalParensLeft: { + x_min: 0, + x_max: 130, + y_min: -270, + y_max: 268, + ha: 538, + o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z', + }, + accidentalParensRight: { + x_min: 0, + x_max: 139, + y_min: -275, + y_max: 277, + ha: 552, + o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 0, + x_max: 208, + y_min: -240, + y_max: 440, + ha: 680, + o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 0, + x_max: 422, + y_min: -240, + y_max: 440, + ha: 680, + o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 300, + y_min: -338, + y_max: 351, + ha: 689, + o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: -23, + x_max: 388, + y_min: -373, + y_max: 445, + ha: 818, + o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z', + }, + accidentalBuyukMucennebFlat: { + x_min: 2, + x_max: 287, + y_min: -248, + y_max: 432, + ha: 680, + o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z', + }, + accidentalBuyukMucennebSharp: { + x_min: -1, + x_max: 467, + y_min: -460, + y_max: 350, + ha: 810, + o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z', + }, + accidentalBakiyeFlat: { + x_min: 2, + x_max: 287, + y_min: -236, + y_max: 444, + ha: 680, + o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z', + }, + accidentalKomaSharp: { + x_min: 0, + x_max: 300, + y_min: -338, + y_max: 351, + ha: 689, + o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z', + }, + accidentalKucukMucennebSharp: { + x_min: 0, + x_max: 359, + y_min: -420, + y_max: 343, + ha: 763, + o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z', + }, + accidentalKoron: { + x_min: 0, + x_max: 303, + y_min: -462, + y_max: 180, + ha: 642, + o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z', + }, + accidentalSori: { + x_min: 0, + x_max: 434, + y_min: -295, + y_max: 325, + ha: 620, + o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z', + }, + articAccentAbove: { + x_min: 0, + x_max: 425, + y_min: 0, + y_max: 326, + ha: 326, + o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z', + }, + articAccentBelow: { + x_min: 0, + x_max: 425, + y_min: -326, + y_max: 0, + ha: 326, + o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z', + }, + articTenutoAbove: { + x_min: 0, + x_max: 471, + y_min: 0, + y_max: 56, + ha: 56, + o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z', + }, + articTenutoBelow: { + x_min: 0, + x_max: 471, + y_min: -59, + y_max: -3, + ha: 56, + o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z', + }, + articStaccatoAbove: { + x_min: 1, + x_max: 112, + y_min: 0, + y_max: 156, + ha: 156, + o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z', + }, + articStaccatoBelow: { + x_min: 1, + x_max: 112, + y_min: -156, + y_max: 0, + ha: 156, + o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z', + }, + articStaccatissimoAbove: { + x_min: 0, + x_max: 139, + y_min: 0, + y_max: 411, + ha: 411, + o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z', + }, + articStaccatissimoBelow: { + x_min: 0, + x_max: 139, + y_min: -411, + y_max: 0, + ha: 411, + o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z', + }, + articMarcatoAbove: { + x_min: 0, + x_max: 396, + y_min: 0, + y_max: 328, + ha: 328, + o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z', + }, + articMarcatoBelow: { + x_min: 0, + x_max: 396, + y_min: -328, + y_max: 0, + ha: 328, + o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z', + }, + fermataAbove: { + x_min: 0, + x_max: 472, + y_min: 2, + y_max: 454, + ha: 452, + o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z', + }, + fermataBelow: { + x_min: 0, + x_max: 519, + y_min: -430, + y_max: -1, + ha: 429, + o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z', + }, + fermataLongAbove: { + x_min: 0, + x_max: 591, + y_min: -6, + y_max: 337, + ha: 343, + o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z', + }, + fermataLongBelow: { + x_min: 0, + x_max: 602, + y_min: -335, + y_max: 7, + ha: 342, + o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z', + }, + fermataVeryLongAbove: { + x_min: 0, + x_max: 715, + y_min: -14, + y_max: 437, + ha: 451, + o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z', + }, + fermataVeryLongBelow: { + x_min: 0, + x_max: 686, + y_min: -427, + y_max: 30, + ha: 457, + o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z', + }, + fermataVeryShortAbove: { + x_min: 0, + x_max: 711, + y_min: -31, + y_max: 496, + ha: 527, + o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z', + }, + fermataVeryShortBelow: { + x_min: 0, + x_max: 697, + y_min: -475, + y_max: 13, + ha: 488, + o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z', + }, + fermataShortAbove: { + x_min: 0, + x_max: 545, + y_min: -18, + y_max: 348, + ha: 366, + o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z', + }, + fermataShortBelow: { + x_min: 0, + x_max: 565, + y_min: -335, + y_max: 10, + ha: 345, + o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z', + }, + breathMarkComma: { + x_min: 0, + x_max: 148, + y_min: 0, + y_max: 275, + ha: 275, + o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z', + }, + breathMarkUpbow: { + x_min: 0, + x_max: 254, + y_min: 0, + y_max: 595, + ha: 595, + o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z', + }, + caesura: { + x_min: 0, + x_max: 566, + y_min: 0, + y_max: 562, + ha: 563, + o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 386, + y_min: -10, + y_max: 584, + ha: 594, + o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z', + }, + restMaxima: { + x_min: 0, + x_max: 366, + y_min: -255, + y_max: 255, + ha: 510, + o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 122, + y_min: 0, + y_max: 249, + ha: 249, + o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z', + }, + restWhole: { + x_min: 1, + x_max: 500, + y_min: -120, + y_max: 14, + ha: 134, + o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z', + }, + restWholeLegerLine: { + x_min: -197, + x_max: 685, + y_min: -157, + y_max: 29, + ha: 186, + o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z', + }, + restHalf: { + x_min: 0, + x_max: 518, + y_min: 0, + y_max: 162, + ha: 162, + o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z', + }, + restHalfLegerLine: { + x_min: -120, + x_max: 448, + y_min: -20, + y_max: 143, + ha: 163, + o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z', + }, + restQuarter: { + x_min: 0, + x_max: 263, + y_min: -415, + y_max: 415, + ha: 830, + o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z', + }, + rest8th: { + x_min: 0, + x_max: 289, + y_min: -260, + y_max: 261, + ha: 521, + o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z', + }, + rest16th: { + x_min: 0, + x_max: 333, + y_min: -328, + y_max: 244, + ha: 572, + o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z', + }, + rest32nd: { + x_min: 0, + x_max: 347, + y_min: -498, + y_max: 483, + ha: 981, + o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z', + }, + rest64th: { + x_min: 0, + x_max: 428, + y_min: -720, + y_max: 474, + ha: 1194, + o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z', + }, + rest128th: { + x_min: 1, + x_max: 491, + y_min: -711, + y_max: 719, + ha: 1430, + o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z', + }, + dynamicPiano: { + x_min: -49, + x_max: 327, + y_min: -142, + y_max: 515, + ha: 657, + o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z', + }, + dynamicMezzo: { + x_min: -18, + x_max: 559, + y_min: -50, + y_max: 365, + ha: 415, + o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z', + }, + dynamicForte: { + x_min: -144, + x_max: 311, + y_min: -115, + y_max: 504, + ha: 619, + o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z', + }, + dynamicRinforzando: { + x_min: -75, + x_max: 322, + y_min: -90, + y_max: 325, + ha: 415, + o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z', + }, + dynamicSforzando: { + x_min: 0, + x_max: 296, + y_min: 0, + y_max: 379, + ha: 379, + o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z', + }, + dynamicZ: { + x_min: -43, + x_max: 331, + y_min: 0, + y_max: 328, + ha: 328, + o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z', + }, + ornamentTrill: { + x_min: 1, + x_max: 551, + y_min: -18, + y_max: 539, + ha: 557, + o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z', + }, + ornamentTurn: { + x_min: 0, + x_max: 574, + y_min: 0, + y_max: 312, + ha: 312, + o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z', + }, + ornamentTurnSlash: { + x_min: 0, + x_max: 574, + y_min: -106, + y_max: 405, + ha: 511, + o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z', + }, + ornamentMordent: { + x_min: 0, + x_max: 700, + y_min: 0, + y_max: 497, + ha: 497, + o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z', + }, + ornamentShortTrill: { + x_min: 0, + x_max: 747, + y_min: 0, + y_max: 243, + ha: 243, + o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z', + }, + ornamentTremblement: { + x_min: 0, + x_max: 982, + y_min: 0, + y_max: 224, + ha: 224, + o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z', + }, + ornamentPrecompAppoggTrill: { + x_min: 0, + x_max: 1066, + y_min: -50, + y_max: 533, + ha: 583, + o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: 0, + x_max: 1088, + y_min: -380, + y_max: 252, + ha: 632, + o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: 0, + x_max: 1185, + y_min: -380, + y_max: 465, + ha: 845, + o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: 0, + x_max: 1003, + y_min: -20, + y_max: 521, + ha: 541, + o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: 0, + x_max: 1246, + y_min: -30, + y_max: 296, + ha: 326, + o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z', + }, + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: 0, + x_max: 1226, + y_min: -237, + y_max: 436, + ha: 673, + o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: 0, + x_max: 833, + y_min: -309, + y_max: 319, + ha: 628, + o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z', + }, + brassScoop: { + x_min: 0, + x_max: 312, + y_min: -390, + y_max: 28, + ha: 418, + o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z', + }, + brassDoitMedium: { + x_min: 0, + x_max: 476, + y_min: -50, + y_max: 333, + ha: 383, + o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z', + }, + brassFallLipShort: { + x_min: 0, + x_max: 298, + y_min: -344, + y_max: 65, + ha: 409, + o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z', + }, + brassLiftMedium: { + x_min: 0, + x_max: 807, + y_min: 0, + y_max: 838, + ha: 838, + o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z', + }, + brassFallRoughMedium: { + x_min: 0, + x_max: 791, + y_min: 0, + y_max: 819, + ha: 819, + o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z', + }, + brassBend: { + x_min: 0, + x_max: 381, + y_min: 0, + y_max: 367, + ha: 367, + o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z', + }, + brassMuteClosed: { + x_min: 0, + x_max: 274, + y_min: 0, + y_max: 260, + ha: 260, + o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z', + }, + brassMuteOpen: { + x_min: 1, + x_max: 313, + y_min: 0, + y_max: 309, + ha: 309, + o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z', + }, + brassFlip: { + x_min: 0, + x_max: 402, + y_min: 0, + y_max: 361, + ha: 361, + o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z', + }, + brassJazzTurn: { + x_min: 0, + x_max: 646, + y_min: 0, + y_max: 212, + ha: 212, + o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z', + }, + brassSmear: { + x_min: 0, + x_max: 334, + y_min: 0, + y_max: 151, + ha: 151, + o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z', + }, + stringsDownBow: { + x_min: 0, + x_max: 306, + y_min: 0, + y_max: 366, + ha: 366, + o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z', + }, + stringsUpBow: { + x_min: 0, + x_max: 219, + y_min: 0, + y_max: 489, + ha: 489, + o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z', + }, + stringsHarmonic: { + x_min: 0, + x_max: 191, + y_min: 0, + y_max: 202, + ha: 202, + o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: 0, + x_max: 201, + y_min: 0, + y_max: 325, + ha: 325, + o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: 0, + x_max: 211, + y_min: 0, + y_max: 307, + ha: 307, + o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z', + }, + pluckedLeftHandPizzicato: { + x_min: 0, + x_max: 271, + y_min: 0, + y_max: 284, + ha: 284, + o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 944, + y_min: -13, + y_max: 550, + ha: 563, + o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 437, + y_min: 0, + y_max: 461, + ha: 461, + o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z', + }, + pictChokeCymbal: { + x_min: 1, + x_max: 147, + y_min: 0, + y_max: 242, + ha: 242, + o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z', + }, + wiggleArpeggiatoUp: { + x_min: -22, + x_max: 300, + y_min: 0, + y_max: 176, + ha: 176, + o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z', + }, + arpeggiatoUp: { + x_min: 0, + x_max: 262, + y_min: 0, + y_max: 1459, + ha: 1459, + o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z', + }, + arpeggiatoDown: { + x_min: 0, + x_max: 218, + y_min: 0, + y_max: 1440, + ha: 1440, + o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z', + }, + repeat1Bar: { + x_min: 0, + x_max: 599, + y_min: -250, + y_max: 175, + ha: 425, + o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z', + }, + repeat2Bars: { + x_min: 0, + x_max: 775, + y_min: -247, + y_max: 363, + ha: 610, + o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z', + }, + repeat4Bars: { + x_min: 0, + x_max: 1374, + y_min: -304, + y_max: 304, + ha: 608, + o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z', + }, + repeatBarSlash: { + x_min: 0, + x_max: 630, + y_min: -225, + y_max: 265, + ha: 490, + o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z', + }, + csymDiminished: { + x_min: 0, + x_max: 506, + y_min: 0, + y_max: 500, + ha: 500, + o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z', + }, + csymHalfDiminished: { + x_min: -32, + x_max: 496, + y_min: -33, + y_max: 492, + ha: 525, + o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z', + }, + csymAugmented: { + x_min: 0, + x_max: 530, + y_min: 0, + y_max: 539, + ha: 539, + o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z', + }, + csymMajorSeventh: { + x_min: 0, + x_max: 593, + y_min: 0, + y_max: 569, + ha: 569, + o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z', + }, + csymMinor: { + x_min: 0, + x_max: 482, + y_min: 193, + y_max: 265, + ha: 72, + o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z', + }, + csymParensLeftTall: { + x_min: 0, + x_max: 185, + y_min: 0, + y_max: 1034, + ha: 1034, + o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z', + }, + csymParensRightTall: { + x_min: -40, + x_max: 189, + y_min: 0, + y_max: 1058, + ha: 1058, + o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z', + }, + csymBracketLeftTall: { + x_min: 0, + x_max: 328, + y_min: 2, + y_max: 807, + ha: 805, + o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z', + }, + csymBracketRightTall: { + x_min: 1, + x_max: 306, + y_min: 0, + y_max: 829, + ha: 829, + o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z', + }, + csymParensLeftVeryTall: { + x_min: 0, + x_max: 116, + y_min: 0, + y_max: 934, + ha: 934, + o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z', + }, + csymParensRightVeryTall: { + x_min: -20, + x_max: 111, + y_min: 0, + y_max: 1009, + ha: 1009, + o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z', + }, + csymDiagonalArrangementSlash: { + x_min: 0, + x_max: 990, + y_min: -27, + y_max: 1028, + ha: 1054, + o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z', + }, + accidentalNarrowReversedFlat: { + x_min: 0, + x_max: 208, + y_min: -231, + y_max: 449, + ha: 680, + o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z', + }, + accidentalNarrowReversedFlatAndFlat: { + x_min: 0, + x_max: 335, + y_min: -231, + y_max: 449, + ha: 680, + o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z', + }, + accidentalWilsonPlus: { + x_min: 0, + x_max: 298, + y_min: -218, + y_max: 218, + ha: 436, + o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z', + }, + accidentalWilsonMinus: { + x_min: 0, + x_max: 284, + y_min: -163, + y_max: 163, + ha: 326, + o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z', + }, + }, + fontFamily: 'Petaluma', + resolution: 1000, + generatedOn: '2022-12-18T09:07:50.817Z', +}; diff --git a/build/esm/src/fonts/petalumascript_glyphs.js b/build/esm/src/fonts/petalumascript_glyphs.js new file mode 100644 index 0000000000..2589c61a67 --- /dev/null +++ b/build/esm/src/fonts/petalumascript_glyphs.js @@ -0,0 +1,863 @@ +export const PetalumaScriptFont = { + spacing: 50, + glyphs: { + ' ': { + x_min: 0, + x_max: 250, + y_min: 0, + y_max: 500, + ha: 500, + leftSideBearing: 0, + advanceWidth: 250, + }, + '0': { + x_min: 33, + x_max: 534, + y_min: -13, + y_max: 751, + ha: 764, + leftSideBearing: 33, + advanceWidth: 570, + }, + '1': { + x_min: 48, + x_max: 235, + y_min: -17, + y_max: 734, + ha: 751, + leftSideBearing: 48, + advanceWidth: 286, + }, + '2': { + x_min: 56, + x_max: 571, + y_min: -19, + y_max: 741, + ha: 760, + leftSideBearing: 56, + advanceWidth: 626, + }, + '3': { + x_min: 50, + x_max: 528, + y_min: -7, + y_max: 731, + ha: 738, + leftSideBearing: 50, + advanceWidth: 589, + }, + '4': { + x_min: 38, + x_max: 564, + y_min: -13, + y_max: 743, + ha: 756, + leftSideBearing: 38, + advanceWidth: 614, + }, + '5': { + x_min: 42, + x_max: 601, + y_min: -34, + y_max: 743, + ha: 777, + leftSideBearing: 42, + advanceWidth: 648, + }, + '6': { + x_min: 47, + x_max: 606, + y_min: -16, + y_max: 743, + ha: 759, + leftSideBearing: 47, + advanceWidth: 667, + }, + '7': { + x_min: 47, + x_max: 567, + y_min: 5, + y_max: 739, + ha: 734, + leftSideBearing: 0, + advanceWidth: 615, + }, + '8': { + x_min: 40, + x_max: 541, + y_min: -15, + y_max: 752, + ha: 767, + leftSideBearing: 40, + advanceWidth: 585, + }, + '9': { + x_min: 40, + x_max: 537, + y_min: -52, + y_max: 736, + ha: 788, + leftSideBearing: 40, + advanceWidth: 592, + }, + '!': { + x_min: 49, + x_max: 180, + y_min: -7, + y_max: 761, + ha: 768, + leftSideBearing: 49, + advanceWidth: 230, + }, + '"': { + x_min: 39, + x_max: 304, + y_min: 596, + y_max: 804, + ha: 208, + leftSideBearing: 39, + advanceWidth: 353, + }, + '#': { + x_min: 33, + x_max: 599, + y_min: -8, + y_max: 765, + ha: 773, + leftSideBearing: 33, + advanceWidth: 648, + }, + $: { + x_min: 53, + x_max: 495, + y_min: -111, + y_max: 823, + ha: 934, + leftSideBearing: 53, + advanceWidth: 560, + }, + '%': { + x_min: 35, + x_max: 656, + y_min: -128, + y_max: 808, + ha: 936, + leftSideBearing: 35, + advanceWidth: 711, + }, + '&': { + x_min: 53, + x_max: 441, + y_min: -3, + y_max: 753, + ha: 756, + leftSideBearing: 53, + advanceWidth: 500, + }, + "'": { + x_min: 43, + x_max: 161, + y_min: 590, + y_max: 811, + ha: 221, + leftSideBearing: 43, + advanceWidth: 217, + }, + '(': { + x_min: 41, + x_max: 311, + y_min: -36, + y_max: 845, + ha: 881, + leftSideBearing: 41, + advanceWidth: 308, + }, + ')': { + x_min: -8, + x_max: 257, + y_min: -21, + y_max: 852, + ha: 873, + leftSideBearing: -8, + advanceWidth: 280, + }, + '*': { + x_min: 59, + x_max: 539, + y_min: 175, + y_max: 589, + ha: 414, + leftSideBearing: 59, + advanceWidth: 601, + }, + '+': { + x_min: 33, + x_max: 361, + y_min: 180, + y_max: 587, + ha: 407, + leftSideBearing: 33, + advanceWidth: 400, + }, + ',': { + x_min: 15, + x_max: 176, + y_min: -129, + y_max: 92, + ha: 221, + leftSideBearing: 15, + advanceWidth: 205, + }, + '-': { + x_min: 40, + x_max: 380, + y_min: 317, + y_max: 452, + ha: 135, + leftSideBearing: 40, + advanceWidth: 422, + }, + '.': { + x_min: 48, + x_max: 185, + y_min: -56, + y_max: 84, + ha: 140, + leftSideBearing: 48, + advanceWidth: 227, + }, + '/': { + x_min: -58, + x_max: 654, + y_min: -122, + y_max: 844, + ha: 966, + leftSideBearing: -58, + advanceWidth: 626, + }, + ':': { + x_min: 65, + x_max: 225, + y_min: 97, + y_max: 536, + ha: 439, + leftSideBearing: 65, + advanceWidth: 302, + }, + ';': { + x_min: 13, + x_max: 295, + y_min: -139, + y_max: 536, + ha: 675, + leftSideBearing: 13, + advanceWidth: 334, + }, + '<': { + x_min: 28, + x_max: 438, + y_min: -1, + y_max: 607, + ha: 608, + leftSideBearing: 28, + advanceWidth: 475, + }, + '=': { + x_min: 40, + x_max: 383, + y_min: 199.9598640852289, + y_max: 541, + ha: 341.0401359147711, + leftSideBearing: 40, + advanceWidth: 422, + }, + '>': { + x_min: 35, + x_max: 421, + y_min: 28, + y_max: 632, + ha: 604, + leftSideBearing: 35, + advanceWidth: 466, + }, + '?': { + x_min: 45, + x_max: 548, + y_min: -17, + y_max: 767, + ha: 784, + leftSideBearing: 45, + advanceWidth: 592, + }, + '@': { + x_min: 51, + x_max: 730, + y_min: -78, + y_max: 753, + ha: 831, + leftSideBearing: 51, + advanceWidth: 781, + }, + A: { + x_min: 37, + x_max: 554, + y_min: -4, + y_max: 746, + ha: 750, + leftSideBearing: 37, + advanceWidth: 617, + }, + B: { + x_min: 37, + x_max: 532, + y_min: 3, + y_max: 783, + ha: 780, + leftSideBearing: 37, + advanceWidth: 579, + }, + C: { + x_min: 37, + x_max: 583, + y_min: -3, + y_max: 775, + ha: 778, + leftSideBearing: 37, + advanceWidth: 623, + }, + D: { + x_min: 50, + x_max: 530, + y_min: -15, + y_max: 749, + ha: 764, + leftSideBearing: 50, + advanceWidth: 579, + }, + E: { + x_min: 45, + x_max: 531, + y_min: -1, + y_max: 743, + ha: 744, + leftSideBearing: 45, + advanceWidth: 585, + }, + F: { + x_min: 45, + x_max: 459, + y_min: 23, + y_max: 727, + ha: 704, + leftSideBearing: 45, + advanceWidth: 510, + }, + G: { + x_min: 31, + x_max: 577, + y_min: -8, + y_max: 733, + ha: 741, + leftSideBearing: 31, + advanceWidth: 611, + }, + H: { + x_min: 37, + x_max: 493, + y_min: -22, + y_max: 758, + ha: 780, + leftSideBearing: 37, + advanceWidth: 535, + }, + I: { + x_min: 47, + x_max: 501, + y_min: -3, + y_max: 731, + ha: 734, + leftSideBearing: 47, + advanceWidth: 541, + }, + J: { + x_min: 33, + x_max: 531, + y_min: -23, + y_max: 725, + ha: 748, + leftSideBearing: 33, + advanceWidth: 573, + }, + K: { + x_min: 43, + x_max: 505, + y_min: -10, + y_max: 740, + ha: 750, + leftSideBearing: 43, + advanceWidth: 560, + }, + L: { + x_min: 49, + x_max: 457, + y_min: -2, + y_max: 746, + ha: 748, + leftSideBearing: 49, + advanceWidth: 510, + }, + M: { + x_min: 35, + x_max: 699, + y_min: 1, + y_max: 744, + ha: 743, + leftSideBearing: 35, + advanceWidth: 743, + }, + N: { + x_min: 34, + x_max: 533, + y_min: -17, + y_max: 761, + ha: 778, + leftSideBearing: 34, + advanceWidth: 579, + }, + O: { + x_min: 41, + x_max: 608, + y_min: -5, + y_max: 735, + ha: 740, + leftSideBearing: 41, + advanceWidth: 667, + }, + P: { + x_min: 53, + x_max: 451, + y_min: -18, + y_max: 735, + ha: 753, + leftSideBearing: 53, + advanceWidth: 497, + }, + Q: { + x_min: 40, + x_max: 599, + y_min: -67, + y_max: 744, + ha: 811, + leftSideBearing: 40, + advanceWidth: 648, + }, + R: { + x_min: 39, + x_max: 487, + y_min: 16, + y_max: 735, + ha: 719, + leftSideBearing: 39, + advanceWidth: 535, + }, + S: { + x_min: 35, + x_max: 552, + y_min: -47, + y_max: 708, + ha: 755, + leftSideBearing: 35, + advanceWidth: 604, + }, + T: { + x_min: 26, + x_max: 656, + y_min: -13, + y_max: 718, + ha: 731, + leftSideBearing: 26, + advanceWidth: 705, + }, + U: { + x_min: 41, + x_max: 518, + y_min: -20, + y_max: 748, + ha: 768, + leftSideBearing: 41, + advanceWidth: 567, + }, + V: { + x_min: 47, + x_max: 509, + y_min: -26, + y_max: 744, + ha: 770, + leftSideBearing: 47, + advanceWidth: 567, + }, + W: { + x_min: 44, + x_max: 789, + y_min: -35, + y_max: 720, + ha: 755, + leftSideBearing: 44, + advanceWidth: 833, + }, + X: { + x_min: 63, + x_max: 635, + y_min: -10, + y_max: 745, + ha: 755, + leftSideBearing: 63, + advanceWidth: 680, + }, + Y: { + x_min: 43, + x_max: 503, + y_min: -21, + y_max: 734, + ha: 755, + leftSideBearing: 43, + advanceWidth: 541, + }, + Z: { + x_min: 42, + x_max: 584, + y_min: -10, + y_max: 739, + ha: 749, + leftSideBearing: 42, + advanceWidth: 629, + }, + '[': { + x_min: 46, + x_max: 346, + y_min: -150, + y_max: 884, + ha: 1034, + leftSideBearing: 46, + advanceWidth: 291, + }, + '\\': { + x_min: 20, + x_max: 616, + y_min: -100, + y_max: 797, + ha: 897, + leftSideBearing: 20, + advanceWidth: 645, + }, + ']': { + x_min: -76, + x_max: 226, + y_min: -150, + y_max: 881, + ha: 1031, + leftSideBearing: -76, + advanceWidth: 297, + }, + '^': { + x_min: 43, + x_max: 437, + y_min: 517, + y_max: 812, + ha: 295, + leftSideBearing: 43, + advanceWidth: 478, + }, + _: { + x_min: 29, + x_max: 563, + y_min: -110, + y_max: -1, + ha: 109, + leftSideBearing: 29, + advanceWidth: 598, + }, + '`': { + x_min: 54, + x_max: 321, + y_min: 540, + y_max: 747, + ha: 207, + leftSideBearing: 54, + advanceWidth: 368, + }, + a: { + x_min: 20, + x_max: 447, + y_min: -17, + y_max: 495, + ha: 512, + leftSideBearing: 20, + advanceWidth: 494, + }, + b: { + x_min: 37, + x_max: 466, + y_min: -27, + y_max: 770, + ha: 797, + leftSideBearing: 37, + advanceWidth: 510, + }, + c: { + x_min: 35, + x_max: 456, + y_min: -9, + y_max: 507, + ha: 516, + leftSideBearing: 35, + advanceWidth: 460, + }, + d: { + x_min: 45, + x_max: 520, + y_min: -15, + y_max: 764, + ha: 779, + leftSideBearing: 45, + advanceWidth: 560, + }, + e: { + x_min: 33, + x_max: 370, + y_min: -5, + y_max: 501, + ha: 506, + leftSideBearing: 33, + advanceWidth: 397, + }, + f: { + x_min: 35, + x_max: 411, + y_min: -13, + y_max: 695, + ha: 708, + leftSideBearing: 35, + advanceWidth: 453, + }, + g: { + x_min: 33, + x_max: 551, + y_min: -257, + y_max: 505, + ha: 762, + leftSideBearing: 33, + advanceWidth: 611, + }, + h: { + x_min: 32, + x_max: 458, + y_min: -29, + y_max: 743, + ha: 772, + leftSideBearing: 32, + advanceWidth: 491, + }, + i: { + x_min: 45, + x_max: 167, + y_min: -13, + y_max: 631, + ha: 644, + leftSideBearing: 45, + advanceWidth: 220, + }, + j: { + x_min: -127, + x_max: 261, + y_min: -231, + y_max: 601, + ha: 832, + leftSideBearing: -127, + advanceWidth: 308, + }, + k: { + x_min: 39, + x_max: 443, + y_min: -3, + y_max: 700, + ha: 703, + leftSideBearing: 39, + advanceWidth: 497, + }, + l: { + x_min: 58, + x_max: 168, + y_min: -8, + y_max: 686, + ha: 694, + leftSideBearing: 58, + advanceWidth: 227, + }, + m: { + x_min: 39, + x_max: 688, + y_min: -14, + y_max: 501, + ha: 515, + leftSideBearing: 39, + advanceWidth: 718, + }, + n: { + x_min: 45, + x_max: 491, + y_min: -32, + y_max: 512, + ha: 544, + leftSideBearing: 45, + advanceWidth: 541, + }, + o: { + x_min: 41, + x_max: 424, + y_min: -12, + y_max: 493, + ha: 505, + leftSideBearing: 41, + advanceWidth: 447, + }, + p: { + x_min: 25, + x_max: 529, + y_min: -260, + y_max: 500, + ha: 760, + leftSideBearing: 25, + advanceWidth: 573, + }, + q: { + x_min: 53, + x_max: 603, + y_min: -235, + y_max: 514, + ha: 749, + leftSideBearing: 53, + advanceWidth: 623, + }, + r: { + x_min: 32, + x_max: 407, + y_min: -7, + y_max: 492, + ha: 499, + leftSideBearing: 32, + advanceWidth: 460, + }, + s: { + x_min: 49, + x_max: 416, + y_min: -12, + y_max: 519, + ha: 531, + leftSideBearing: 49, + advanceWidth: 460, + }, + t: { + x_min: 32, + x_max: 442, + y_min: -5, + y_max: 684, + ha: 689, + leftSideBearing: 32, + advanceWidth: 469, + }, + u: { + x_min: 41, + x_max: 487, + y_min: -5, + y_max: 507, + ha: 512, + leftSideBearing: 41, + advanceWidth: 510, + }, + v: { + x_min: 16, + x_max: 441, + y_min: -20, + y_max: 542, + ha: 562, + leftSideBearing: 16, + advanceWidth: 456, + }, + w: { + x_min: 39, + x_max: 639, + y_min: -22, + y_max: 505, + ha: 527, + leftSideBearing: 39, + advanceWidth: 661, + }, + x: { + x_min: 15, + x_max: 505, + y_min: -39, + y_max: 539, + ha: 578, + leftSideBearing: 15, + advanceWidth: 541, + }, + y: { + x_min: -98, + x_max: 501, + y_min: -242, + y_max: 511, + ha: 753, + leftSideBearing: -98, + advanceWidth: 548, + }, + z: { + x_min: 27, + x_max: 479, + y_min: -3, + y_max: 494, + ha: 497, + leftSideBearing: 27, + advanceWidth: 494, + }, + '{': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + '|': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + '}': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + '~': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + }, + fontFamily: 'PetalumaScript', + resolution: 1000, + generatedOn: '2020-06-14T18:33:25.407Z', +}; diff --git a/build/esm/src/fonts/robotoslab_glyphs.js b/build/esm/src/fonts/robotoslab_glyphs.js new file mode 100644 index 0000000000..e7f8b1d3e9 --- /dev/null +++ b/build/esm/src/fonts/robotoslab_glyphs.js @@ -0,0 +1,863 @@ +export const RobotoSlabFont = { + spacing: 50, + glyphs: { + ' ': { + x_min: 0, + x_max: 509, + y_min: 0, + y_max: 2000, + ha: 2000, + leftSideBearing: 0, + advanceWidth: 509, + }, + '0': { + x_min: 121, + x_max: 1048, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 121, + advanceWidth: 1168, + }, + '1': { + x_min: 117, + x_max: 767, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 117, + advanceWidth: 844, + }, + '2': { + x_min: 75.8474576645637, + x_max: 1040, + y_min: 0, + y_max: 1477, + ha: 1477, + leftSideBearing: 75, + advanceWidth: 1131, + }, + '3': { + x_min: 74.85365853658536, + x_max: 994, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 74, + advanceWidth: 1106, + }, + '4': { + x_min: 63, + x_max: 1114, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 63, + advanceWidth: 1187, + }, + '5': { + x_min: 96.8448275474953, + x_max: 982, + y_min: -21, + y_max: 1456, + ha: 1477, + leftSideBearing: 96, + advanceWidth: 1081, + }, + '6': { + x_min: 121, + x_max: 1067, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 121, + advanceWidth: 1144, + }, + '7': { + x_min: 76, + x_max: 1060, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: -30, + advanceWidth: 1128, + }, + '8': { + x_min: 92, + x_max: 1039, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 92, + advanceWidth: 1131, + }, + '9': { + x_min: 84, + x_max: 1026, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 84, + advanceWidth: 1154, + }, + '!': { + x_min: 143, + x_max: 340, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 143, + advanceWidth: 483, + }, + '"': { + x_min: 166, + x_max: 634, + y_min: 1055, + y_max: 1560, + ha: 505, + leftSideBearing: 166, + advanceWidth: 770, + }, + '#': { + x_min: 63, + x_max: 1179, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 63, + advanceWidth: 1246, + }, + $: { + x_min: 81.92156915727656, + x_max: 1012, + y_min: -208, + y_max: 1693, + ha: 1901, + leftSideBearing: 81, + advanceWidth: 1110, + }, + '%': { + x_min: 77, + x_max: 1384, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 77, + advanceWidth: 1460, + }, + '&': { + x_min: 74, + x_max: 1242, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 74, + advanceWidth: 1289, + }, + "'": { + x_min: 166, + x_max: 324, + y_min: 1055, + y_max: 1560, + ha: 505, + leftSideBearing: 166, + advanceWidth: 460, + }, + '(': { + x_min: 114, + x_max: 650, + y_min: -463, + y_max: 1636, + ha: 2099, + leftSideBearing: 114, + advanceWidth: 662, + }, + ')': { + x_min: 11, + x_max: 547, + y_min: -463, + y_max: 1636, + ha: 2099, + leftSideBearing: 11, + advanceWidth: 654, + }, + '*': { + x_min: 66, + x_max: 893, + y_min: 607, + y_max: 1456, + ha: 849, + leftSideBearing: 66, + advanceWidth: 958, + }, + '+': { + x_min: 73, + x_max: 1071, + y_min: 146, + y_max: 1206, + ha: 1060, + leftSideBearing: 73, + advanceWidth: 1145, + }, + ',': { + x_min: 23, + x_max: 315, + y_min: -311, + y_max: 221, + ha: 532, + leftSideBearing: 23, + advanceWidth: 404, + }, + '-': { + x_min: 154, + x_max: 643, + y_min: 538, + y_max: 692, + ha: 154, + leftSideBearing: 154, + advanceWidth: 797, + }, + '.': { + x_min: 145, + x_max: 342, + y_min: 0, + y_max: 202, + ha: 202, + leftSideBearing: 145, + advanceWidth: 493, + }, + '/': { + x_min: 0, + x_max: 774, + y_min: -125, + y_max: 1456, + ha: 1581, + leftSideBearing: 0, + advanceWidth: 824, + }, + ':': { + x_min: 145, + x_max: 342, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 145, + advanceWidth: 419, + }, + ';': { + x_min: 53, + x_max: 345, + y_min: -311, + y_max: 1082, + ha: 1393, + leftSideBearing: 53, + advanceWidth: 424, + }, + '<': { + x_min: 76, + x_max: 892, + y_min: 107, + y_max: 1013, + ha: 906, + leftSideBearing: 76, + advanceWidth: 1017, + }, + '=': { + x_min: 147, + x_max: 981, + y_min: 407, + y_max: 987, + ha: 580, + leftSideBearing: 147, + advanceWidth: 1127, + }, + '>': { + x_min: 125, + x_max: 980, + y_min: 87, + y_max: 993, + ha: 906, + leftSideBearing: 125, + advanceWidth: 1060, + }, + '?': { + x_min: 65.92660602419838, + x_max: 890, + y_min: 0, + y_max: 1477, + ha: 1477, + leftSideBearing: 65, + advanceWidth: 953, + }, + '@': { + x_min: 84.3592218305664, + x_max: 1705.2346925277395, + y_min: -453, + y_max: 1431, + ha: 1884, + leftSideBearing: 84, + advanceWidth: 1821, + }, + A: { + x_min: 70, + x_max: 1463, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 70, + advanceWidth: 1533, + }, + B: { + x_min: 81, + x_max: 1253, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1322, + }, + C: { + x_min: 80, + x_max: 1174, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 80, + advanceWidth: 1290, + }, + D: { + x_min: 81, + x_max: 1291, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1356, + }, + E: { + x_min: 81, + x_max: 1190, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1306, + }, + F: { + x_min: 81, + x_max: 1176, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1256, + }, + G: { + x_min: 80, + x_max: 1226, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 80, + advanceWidth: 1346, + }, + H: { + x_min: 81, + x_max: 1497, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1578, + }, + I: { + x_min: 81, + x_max: 604, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 685, + }, + J: { + x_min: 60, + x_max: 1100, + y_min: -21, + y_max: 1456, + ha: 1477, + leftSideBearing: 60, + advanceWidth: 1169, + }, + K: { + x_min: 81, + x_max: 1427, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1501, + }, + L: { + x_min: 81, + x_max: 1130, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1210, + }, + M: { + x_min: 94, + x_max: 1888, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 94, + advanceWidth: 1982, + }, + N: { + x_min: 83, + x_max: 1509, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 83, + advanceWidth: 1592, + }, + O: { + x_min: 70, + x_max: 1281, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 70, + advanceWidth: 1351, + }, + P: { + x_min: 81, + x_max: 1242, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1297, + }, + Q: { + x_min: 70, + x_max: 1348, + y_min: -245, + y_max: 1477, + ha: 1722, + leftSideBearing: 70, + advanceWidth: 1376, + }, + R: { + x_min: 81, + x_max: 1285, + y_min: 0, + y_max: 1455, + ha: 1455, + leftSideBearing: 81, + advanceWidth: 1385, + }, + S: { + x_min: 115, + x_max: 1116, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 115, + advanceWidth: 1206, + }, + T: { + x_min: 96, + x_max: 1306, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 96, + advanceWidth: 1406, + }, + U: { + x_min: 70, + x_max: 1452, + y_min: -21, + y_max: 1456, + ha: 1477, + leftSideBearing: 70, + advanceWidth: 1522, + }, + V: { + x_min: 65, + x_max: 1443, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 65, + advanceWidth: 1508, + }, + W: { + x_min: 72, + x_max: 2057, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 72, + advanceWidth: 2129, + }, + X: { + x_min: 80, + x_max: 1449, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 80, + advanceWidth: 1529, + }, + Y: { + x_min: 65, + x_max: 1396, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 65, + advanceWidth: 1461, + }, + Z: { + x_min: 90, + x_max: 1107, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 90, + advanceWidth: 1197, + }, + '[': { + x_min: 157, + x_max: 541, + y_min: -312, + y_max: 1664, + ha: 1976, + leftSideBearing: 157, + advanceWidth: 573, + }, + '\\': { + x_min: 36, + x_max: 830, + y_min: -125, + y_max: 1456, + ha: 1581, + leftSideBearing: 36, + advanceWidth: 841, + }, + ']': { + x_min: 23, + x_max: 408, + y_min: -312, + y_max: 1664, + ha: 1976, + leftSideBearing: 23, + advanceWidth: 552, + }, + '^': { + x_min: 71, + x_max: 802, + y_min: 729, + y_max: 1456, + ha: 727, + leftSideBearing: 71, + advanceWidth: 864, + }, + _: { + x_min: 119, + x_max: 1041, + y_min: -154, + y_max: 0, + ha: 154, + leftSideBearing: 119, + advanceWidth: 1168, + }, + '`': { + x_min: 40, + x_max: 456, + y_min: 1288, + y_max: 1560, + ha: 272, + leftSideBearing: 40, + advanceWidth: 496, + }, + a: { + x_min: 79, + x_max: 1053, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 79, + advanceWidth: 1132, + }, + b: { + x_min: -16, + x_max: 1071, + y_min: -21, + y_max: 1560, + ha: 1581, + leftSideBearing: -16, + advanceWidth: 1145, + }, + c: { + x_min: 78, + x_max: 988, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 78, + advanceWidth: 1067, + }, + d: { + x_min: 78, + x_max: 1156, + y_min: -21, + y_max: 1560, + ha: 1581, + leftSideBearing: 78, + advanceWidth: 1218, + }, + e: { + x_min: 74, + x_max: 980, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 74, + advanceWidth: 1059, + }, + f: { + x_min: 64, + x_max: 731, + y_min: 0, + y_max: 1581, + ha: 1581, + leftSideBearing: 64, + advanceWidth: 725, + }, + g: { + x_min: 78, + x_max: 1133, + y_min: -437, + y_max: 1102, + ha: 1539, + leftSideBearing: 78, + advanceWidth: 1157, + }, + h: { + x_min: 49, + x_max: 1255, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 49, + advanceWidth: 1315, + }, + i: { + x_min: 67, + x_max: 590, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 67, + advanceWidth: 652, + }, + j: { + x_min: -56, + x_max: 381, + y_min: -437, + y_max: 1560, + ha: 1997, + leftSideBearing: -56, + advanceWidth: 525, + }, + k: { + x_min: 64, + x_max: 1248, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 64, + advanceWidth: 1287, + }, + l: { + x_min: 64, + x_max: 587, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 64, + advanceWidth: 653, + }, + m: { + x_min: 74, + x_max: 1905, + y_min: 0, + y_max: 1102, + ha: 1102, + leftSideBearing: 74, + advanceWidth: 1977, + }, + n: { + x_min: 74, + x_max: 1278, + y_min: 0, + y_max: 1102, + ha: 1102, + leftSideBearing: 74, + advanceWidth: 1343, + }, + o: { + x_min: 78, + x_max: 1046, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 78, + advanceWidth: 1124, + }, + p: { + x_min: 34, + x_max: 1119, + y_min: -416, + y_max: 1102, + ha: 1518, + leftSideBearing: 34, + advanceWidth: 1197, + }, + q: { + x_min: 78, + x_max: 1135, + y_min: -416, + y_max: 1102, + ha: 1518, + leftSideBearing: 78, + advanceWidth: 1139, + }, + r: { + x_min: 72, + x_max: 808, + y_min: 0, + y_max: 1102, + ha: 1102, + leftSideBearing: 72, + advanceWidth: 854, + }, + s: { + x_min: 104, + x_max: 933, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 104, + advanceWidth: 1022, + }, + t: { + x_min: 24, + x_max: 678, + y_min: -17, + y_max: 1343, + ha: 1360, + leftSideBearing: 24, + advanceWidth: 730, + }, + u: { + x_min: 52, + x_max: 1181, + y_min: -21, + y_max: 1082, + ha: 1103, + leftSideBearing: 52, + advanceWidth: 1245, + }, + v: { + x_min: 26, + x_max: 1176, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 26, + advanceWidth: 1206, + }, + w: { + x_min: 52, + x_max: 1777, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 52, + advanceWidth: 1823, + }, + x: { + x_min: 42, + x_max: 1163, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 42, + advanceWidth: 1203, + }, + y: { + x_min: 24, + x_max: 1172, + y_min: -437, + y_max: 1082, + ha: 1519, + leftSideBearing: 24, + advanceWidth: 1192, + }, + z: { + x_min: 88, + x_max: 960, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 88, + advanceWidth: 1032, + }, + '{': { + x_min: 63, + x_max: 671, + y_min: -364, + y_max: 1597, + ha: 1961, + leftSideBearing: 63, + advanceWidth: 701, + }, + '|': { + x_min: 150, + x_max: 307, + y_min: -270, + y_max: 1456, + ha: 1726, + leftSideBearing: 150, + advanceWidth: 451, + }, + '}': { + x_min: 27, + x_max: 635, + y_min: -364, + y_max: 1597, + ha: 1961, + leftSideBearing: 27, + advanceWidth: 701, + }, + '~': { + x_min: 121, + x_max: 1257, + y_min: 401, + y_max: 803, + ha: 402, + leftSideBearing: 121, + advanceWidth: 1386, + }, + }, + fontFamily: 'Roboto Slab', + resolution: 2048, + generatedOn: '2020-06-15T19:12:58.120Z', +}; diff --git a/build/esm/src/fonts/sans_bold_text_metrics.js b/build/esm/src/fonts/sans_bold_text_metrics.js new file mode 100644 index 0000000000..350031ffe1 --- /dev/null +++ b/build/esm/src/fonts/sans_bold_text_metrics.js @@ -0,0 +1,862 @@ +export const SansFontBold = { + glyphs: { + '0': { + x_min: 86, + x_max: 1038, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 86, + advanceWidth: 1139, + }, + '1': { + x_min: 162, + x_max: 806, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 162, + advanceWidth: 1139, + }, + '2': { + x_min: 51, + x_max: 1036, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 51, + advanceWidth: 1139, + }, + '3': { + x_min: 77, + x_max: 1051, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 77, + advanceWidth: 1139, + }, + '4': { + x_min: 38, + x_max: 1092, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 38, + advanceWidth: 1139, + }, + '5': { + x_min: 91, + x_max: 1077, + y_min: -25, + y_max: 1446, + ha: 1471, + leftSideBearing: 91, + advanceWidth: 1139, + }, + '6': { + x_min: 87, + x_max: 1066, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 87, + advanceWidth: 1139, + }, + '7': { + x_min: 87, + x_max: 1048, + y_min: 0, + y_max: 1446, + ha: 1446, + leftSideBearing: 87, + advanceWidth: 1139, + }, + '8': { + x_min: 83, + x_max: 1047, + y_min: -26, + y_max: 1472, + ha: 1498, + leftSideBearing: 83, + advanceWidth: 1139, + }, + '9': { + x_min: 65, + x_max: 1044, + y_min: -26, + y_max: 1472, + ha: 1498, + leftSideBearing: 65, + advanceWidth: 1139, + }, + ' ': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 569, + }, + '!': { + x_min: 184, + x_max: 488, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 184, + advanceWidth: 682, + }, + '"': { + x_min: 112, + x_max: 869, + y_min: 945, + y_max: 1466, + ha: 521, + leftSideBearing: 112, + advanceWidth: 971, + }, + '#': { + x_min: 18, + x_max: 1115, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 18, + advanceWidth: 1139, + }, + $: { + x_min: 70, + x_max: 1048, + y_min: -205, + y_max: 1584, + ha: 1789, + leftSideBearing: 70, + advanceWidth: 1139, + }, + '%': { + x_min: 89, + x_max: 1725, + y_min: -59, + y_max: 1491, + ha: 1550, + leftSideBearing: 89, + advanceWidth: 1821, + }, + '&': { + x_min: 90, + x_max: 1446, + y_min: -38, + y_max: 1491, + ha: 1529, + leftSideBearing: 90, + advanceWidth: 1479, + }, + "'": { + x_min: 92, + x_max: 398, + y_min: 945, + y_max: 1466, + ha: 521, + leftSideBearing: 92, + advanceWidth: 487, + }, + '(': { + x_min: 107, + x_max: 616, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 107, + advanceWidth: 682, + }, + ')': { + x_min: 67, + x_max: 576, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 67, + advanceWidth: 682, + }, + '*': { + x_min: 28, + x_max: 753, + y_min: 792, + y_max: 1491, + ha: 699, + leftSideBearing: 28, + advanceWidth: 797, + }, + '+': { + x_min: 85, + x_max: 1110, + y_min: 211, + y_max: 1236, + ha: 1025, + leftSideBearing: 85, + advanceWidth: 1196, + }, + ',': { + x_min: 117, + x_max: 421, + y_min: -327, + y_max: 281, + ha: 608, + leftSideBearing: 117, + advanceWidth: 569, + }, + '-': { + x_min: 115, + x_max: 667, + y_min: 391, + y_max: 672, + ha: 281, + leftSideBearing: 115, + advanceWidth: 682, + }, + '.': { + x_min: 147, + x_max: 428, + y_min: 0, + y_max: 281, + ha: 281, + leftSideBearing: 147, + advanceWidth: 569, + }, + '/': { + x_min: -3, + x_max: 571, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: -3, + advanceWidth: 569, + }, + ':': { + x_min: 201, + x_max: 482, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 201, + advanceWidth: 682, + }, + ';': { + x_min: 170, + x_max: 474, + y_min: -327, + y_max: 1062, + ha: 1389, + leftSideBearing: 170, + advanceWidth: 682, + }, + '<': { + x_min: 95, + x_max: 1100, + y_min: 167, + y_max: 1281, + ha: 1114, + leftSideBearing: 95, + advanceWidth: 1196, + }, + '=': { + x_min: 85, + x_max: 1110, + y_min: 372, + y_max: 1074, + ha: 702, + leftSideBearing: 85, + advanceWidth: 1196, + }, + '>': { + x_min: 95, + x_max: 1101, + y_min: 166, + y_max: 1279, + ha: 1113, + leftSideBearing: 95, + advanceWidth: 1196, + }, + '?': { + x_min: 106, + x_max: 1158, + y_min: 0, + y_max: 1481, + ha: 1481, + leftSideBearing: 106, + advanceWidth: 1251, + }, + '@': { + x_min: 61, + x_max: 1990, + y_min: -431, + y_max: 1492, + ha: 1923, + leftSideBearing: 61, + advanceWidth: 1997, + }, + A: { + x_min: 0, + x_max: 1471, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 0, + advanceWidth: 1479, + }, + B: { + x_min: 150, + x_max: 1378, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1479, + }, + C: { + x_min: 97, + x_max: 1374, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 97, + advanceWidth: 1479, + }, + D: { + x_min: 148, + x_max: 1377, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 148, + advanceWidth: 1479, + }, + E: { + x_min: 149, + x_max: 1264, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 149, + advanceWidth: 1366, + }, + F: { + x_min: 151, + x_max: 1156, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 151, + advanceWidth: 1251, + }, + G: { + x_min: 98, + x_max: 1469, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 98, + advanceWidth: 1593, + }, + H: { + x_min: 150, + x_max: 1322, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1479, + }, + I: { + x_min: 140, + x_max: 436, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 140, + advanceWidth: 569, + }, + J: { + x_min: 35, + x_max: 973, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 35, + advanceWidth: 1139, + }, + K: { + x_min: 153, + x_max: 1475, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 153, + advanceWidth: 1479, + }, + L: { + x_min: 157, + x_max: 1189, + y_min: 0, + y_max: 1454, + ha: 1454, + leftSideBearing: 157, + advanceWidth: 1251, + }, + M: { + x_min: 145, + x_max: 1561, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 145, + advanceWidth: 1706, + }, + N: { + x_min: 152, + x_max: 1315, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 152, + advanceWidth: 1479, + }, + O: { + x_min: 89, + x_max: 1511, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 89, + advanceWidth: 1593, + }, + P: { + x_min: 149, + x_max: 1272, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 149, + advanceWidth: 1366, + }, + Q: { + x_min: 89, + x_max: 1566, + y_min: -147, + y_max: 1491, + ha: 1638, + leftSideBearing: 89, + advanceWidth: 1593, + }, + R: { + x_min: 150, + x_max: 1468, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1479, + }, + S: { + x_min: 74, + x_max: 1266, + y_min: -26, + y_max: 1491, + ha: 1517, + leftSideBearing: 74, + advanceWidth: 1366, + }, + T: { + x_min: 44, + x_max: 1209, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 44, + advanceWidth: 1251, + }, + U: { + x_min: 147, + x_max: 1316, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 147, + advanceWidth: 1479, + }, + V: { + x_min: -1, + x_max: 1364, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: -1, + advanceWidth: 1366, + }, + W: { + x_min: 7, + x_max: 1931, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 7, + advanceWidth: 1933, + }, + X: { + x_min: 0, + x_max: 1363, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 0, + advanceWidth: 1366, + }, + Y: { + x_min: -3, + x_max: 1368, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: -3, + advanceWidth: 1366, + }, + Z: { + x_min: 22, + x_max: 1213, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 22, + advanceWidth: 1251, + }, + '[': { + x_min: 146, + x_max: 644, + y_min: -413, + y_max: 1466, + ha: 1879, + leftSideBearing: 146, + advanceWidth: 682, + }, + '\\': { + x_min: -3, + x_max: 571, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: -3, + advanceWidth: 569, + }, + ']': { + x_min: 38, + x_max: 536, + y_min: -413, + y_max: 1466, + ha: 1879, + leftSideBearing: 38, + advanceWidth: 682, + }, + '^': { + x_min: 115, + x_max: 1080, + y_min: 692, + y_max: 1491, + ha: 799, + leftSideBearing: 115, + advanceWidth: 1196, + }, + _: { + x_min: -19, + x_max: 1149, + y_min: -405, + y_max: -223, + ha: 182, + leftSideBearing: -19, + advanceWidth: 1139, + }, + '`': { + x_min: 42, + x_max: 495, + y_min: 1192, + y_max: 1491, + ha: 299, + leftSideBearing: 42, + advanceWidth: 682, + }, + a: { + x_min: 73, + x_max: 1070, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 73, + advanceWidth: 1139, + }, + b: { + x_min: 135, + x_max: 1172, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 135, + advanceWidth: 1251, + }, + c: { + x_min: 85, + x_max: 1087, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 85, + advanceWidth: 1139, + }, + d: { + x_min: 84, + x_max: 1121, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 84, + advanceWidth: 1251, + }, + e: { + x_min: 65, + x_max: 1057.2517482517483, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 65, + advanceWidth: 1139, + }, + f: { + x_min: 24, + x_max: 742, + y_min: 0, + y_max: 1491, + ha: 1491, + leftSideBearing: 24, + advanceWidth: 682, + }, + g: { + x_min: 84, + x_max: 1120, + y_min: -431, + y_max: 1086, + ha: 1517, + leftSideBearing: 84, + advanceWidth: 1251, + }, + h: { + x_min: 146, + x_max: 1113, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 146, + advanceWidth: 1251, + }, + i: { + x_min: 147, + x_max: 428, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 147, + advanceWidth: 569, + }, + j: { + x_min: -94, + x_max: 422, + y_min: -431, + y_max: 1466, + ha: 1897, + leftSideBearing: -94, + advanceWidth: 569, + }, + k: { + x_min: 137, + x_max: 1119, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 137, + advanceWidth: 1139, + }, + l: { + x_min: 147, + x_max: 428, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 147, + advanceWidth: 569, + }, + m: { + x_min: 126, + x_max: 1688, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 126, + advanceWidth: 1821, + }, + n: { + x_min: 145, + x_max: 1113, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 145, + advanceWidth: 1251, + }, + o: { + x_min: 82, + x_max: 1178, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 82, + advanceWidth: 1251, + }, + p: { + x_min: 139, + x_max: 1175, + y_min: -404, + y_max: 1086, + ha: 1490, + leftSideBearing: 139, + advanceWidth: 1251, + }, + q: { + x_min: 91, + x_max: 1122, + y_min: -404, + y_max: 1086, + ha: 1490, + leftSideBearing: 91, + advanceWidth: 1251, + }, + r: { + x_min: 135, + x_max: 823, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 135, + advanceWidth: 797, + }, + s: { + x_min: 48, + x_max: 1040, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 48, + advanceWidth: 1139, + }, + t: { + x_min: 31, + x_max: 657, + y_min: -24, + y_max: 1437, + ha: 1461, + leftSideBearing: 31, + advanceWidth: 682, + }, + u: { + x_min: 141, + x_max: 1107, + y_min: -24, + y_max: 1062, + ha: 1086, + leftSideBearing: 141, + advanceWidth: 1251, + }, + v: { + x_min: 11, + x_max: 1114, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 11, + advanceWidth: 1139, + }, + w: { + x_min: 9, + x_max: 1592, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 9, + advanceWidth: 1593, + }, + x: { + x_min: 12, + x_max: 1120, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 12, + advanceWidth: 1139, + }, + y: { + x_min: 14, + x_max: 1106, + y_min: -431, + y_max: 1062, + ha: 1493, + leftSideBearing: 14, + advanceWidth: 1139, + }, + z: { + x_min: 34, + x_max: 982, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 34, + advanceWidth: 1024, + }, + '{': { + x_min: 60, + x_max: 744, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 60, + advanceWidth: 797, + }, + '|': { + x_min: 176, + x_max: 399, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 176, + advanceWidth: 573, + }, + '}': { + x_min: 45, + x_max: 729, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 45, + advanceWidth: 797, + }, + '~': { + x_min: 67, + x_max: 1129, + y_min: 519, + y_max: 924, + ha: 405, + leftSideBearing: 67, + advanceWidth: 1196, + }, + }, + fontFamily: 'Arial', + resolution: 2048, + generatedOn: '2022-11-04T20:05:21.000Z', +}; diff --git a/build/esm/src/fonts/sans_text_metrics.js b/build/esm/src/fonts/sans_text_metrics.js new file mode 100644 index 0000000000..bb6d9affcd --- /dev/null +++ b/build/esm/src/fonts/sans_text_metrics.js @@ -0,0 +1,870 @@ +export const SansFont = { + smufl: false, + name: 'SANS', + spacing: 50, + Description: 'Built-in sans-serif font', + bold: true, + italic: true, + monospaced: false, + serifs: false, + glyphs: { + '0': { + x_min: 85, + x_max: 1041, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 85, + advanceWidth: 1139, + }, + '1': { + x_min: 223, + x_max: 763, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 223, + advanceWidth: 1139, + }, + '2': { + x_min: 61.840001123045234, + x_max: 1031, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 61, + advanceWidth: 1139, + }, + '3': { + x_min: 86, + x_max: 1046, + y_min: -26, + y_max: 1472, + ha: 1498, + leftSideBearing: 86, + advanceWidth: 1139, + }, + '4': { + x_min: 26, + x_max: 1040, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 26, + advanceWidth: 1139, + }, + '5': { + x_min: 85, + x_max: 1057, + y_min: -25, + y_max: 1446, + ha: 1471, + leftSideBearing: 85, + advanceWidth: 1139, + }, + '6': { + x_min: 77, + x_max: 1045, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 77, + advanceWidth: 1139, + }, + '7': { + x_min: 97, + x_max: 1046, + y_min: 0, + y_max: 1447, + ha: 1447, + leftSideBearing: 97, + advanceWidth: 1139, + }, + '8': { + x_min: 83, + x_max: 1049, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 83, + advanceWidth: 1139, + }, + '9': { + x_min: 85, + x_max: 1049, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 85, + advanceWidth: 1139, + }, + ' ': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 569, + }, + '!': { + x_min: 176, + x_max: 399, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 176, + advanceWidth: 569, + }, + '"': { + x_min: 94, + x_max: 631, + y_min: 947, + y_max: 1466, + ha: 519, + leftSideBearing: 94, + advanceWidth: 727, + }, + '#': { + x_min: 21, + x_max: 1113, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 21, + advanceWidth: 1139, + }, + $: { + x_min: 73, + x_max: 1043, + y_min: -211, + y_max: 1601, + ha: 1812, + leftSideBearing: 73, + advanceWidth: 1139, + }, + '%': { + x_min: 119, + x_max: 1695, + y_min: -54, + y_max: 1491, + ha: 1545, + leftSideBearing: 119, + advanceWidth: 1821, + }, + '&': { + x_min: 88, + x_max: 1319, + y_min: -34, + y_max: 1491, + ha: 1525, + leftSideBearing: 88, + advanceWidth: 1366, + }, + "'": { + x_min: 90, + x_max: 295, + y_min: 947, + y_max: 1466, + ha: 519, + leftSideBearing: 90, + advanceWidth: 391, + }, + '(': { + x_min: 124, + x_max: 608, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 124, + advanceWidth: 682, + }, + ')': { + x_min: 124, + x_max: 608, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 124, + advanceWidth: 682, + }, + '*': { + x_min: 64, + x_max: 725, + y_min: 867, + y_max: 1491, + ha: 624, + leftSideBearing: 64, + advanceWidth: 797, + }, + '+': { + x_min: 114, + x_max: 1082, + y_min: 237, + y_max: 1206, + ha: 969, + leftSideBearing: 114, + advanceWidth: 1196, + }, + ',': { + x_min: 170, + x_max: 387, + y_min: -290, + y_max: 205, + ha: 495, + leftSideBearing: 170, + advanceWidth: 569, + }, + '-': { + x_min: 65, + x_max: 618, + y_min: 440, + y_max: 621, + ha: 181, + leftSideBearing: 65, + advanceWidth: 682, + }, + '.': { + x_min: 186, + x_max: 391, + y_min: 0, + y_max: 205, + ha: 205, + leftSideBearing: 186, + advanceWidth: 569, + }, + '/': { + x_min: 0, + x_max: 569, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 0, + advanceWidth: 569, + }, + ':': { + x_min: 185, + x_max: 390, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 185, + advanceWidth: 569, + }, + ';': { + x_min: 170, + x_max: 387, + y_min: -290, + y_max: 1062, + ha: 1352, + leftSideBearing: 170, + advanceWidth: 569, + }, + '<': { + x_min: 112, + x_max: 1083, + y_min: 226, + y_max: 1219, + ha: 993, + leftSideBearing: 112, + advanceWidth: 1196, + }, + '=': { + x_min: 114, + x_max: 1082, + y_min: 417, + y_max: 1030, + ha: 613, + leftSideBearing: 114, + advanceWidth: 1196, + }, + '>': { + x_min: 112, + x_max: 1083, + y_min: 226, + y_max: 1219, + ha: 993, + leftSideBearing: 112, + advanceWidth: 1196, + }, + '?': { + x_min: 90, + x_max: 1036, + y_min: 0, + y_max: 1491, + ha: 1491, + leftSideBearing: 90, + advanceWidth: 1139, + }, + '@': { + x_min: 111, + x_max: 2005, + y_min: -431, + y_max: 1493, + ha: 1924, + leftSideBearing: 111, + advanceWidth: 2079, + }, + A: { + x_min: -3, + x_max: 1369, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: -3, + advanceWidth: 1366, + }, + B: { + x_min: 150, + x_max: 1257, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1366, + }, + C: { + x_min: 102, + x_max: 1398, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 102, + advanceWidth: 1479, + }, + D: { + x_min: 158, + x_max: 1370, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 158, + advanceWidth: 1479, + }, + E: { + x_min: 162, + x_max: 1256, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 162, + advanceWidth: 1366, + }, + F: { + x_min: 168, + x_max: 1157, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 168, + advanceWidth: 1251, + }, + G: { + x_min: 109, + x_max: 1465, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 109, + advanceWidth: 1593, + }, + H: { + x_min: 164, + x_max: 1314, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 164, + advanceWidth: 1479, + }, + I: { + x_min: 191, + x_max: 385, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 191, + advanceWidth: 569, + }, + J: { + x_min: 58.84976474807333, + x_max: 865, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 58, + advanceWidth: 1024, + }, + K: { + x_min: 150, + x_max: 1362, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1366, + }, + L: { + x_min: 150, + x_max: 1066, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1139, + }, + M: { + x_min: 152, + x_max: 1551, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 152, + advanceWidth: 1706, + }, + N: { + x_min: 156, + x_max: 1311, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 156, + advanceWidth: 1479, + }, + O: { + x_min: 99, + x_max: 1501, + y_min: -25, + y_max: 1492, + ha: 1517, + leftSideBearing: 99, + advanceWidth: 1593, + }, + P: { + x_min: 158, + x_max: 1277, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 158, + advanceWidth: 1366, + }, + Q: { + x_min: 88, + x_max: 1518, + y_min: -114, + y_max: 1492, + ha: 1606, + leftSideBearing: 88, + advanceWidth: 1593, + }, + R: { + x_min: 161, + x_max: 1453, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 161, + advanceWidth: 1479, + }, + S: { + x_min: 92, + x_max: 1259, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 92, + advanceWidth: 1366, + }, + T: { + x_min: 48, + x_max: 1210, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 48, + advanceWidth: 1251, + }, + U: { + x_min: 161, + x_max: 1314, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 161, + advanceWidth: 1479, + }, + V: { + x_min: 9, + x_max: 1350, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 9, + advanceWidth: 1366, + }, + W: { + x_min: 25, + x_max: 1910, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 25, + advanceWidth: 1933, + }, + X: { + x_min: 9, + x_max: 1353, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 9, + advanceWidth: 1366, + }, + Y: { + x_min: 6, + x_max: 1350, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 6, + advanceWidth: 1366, + }, + Z: { + x_min: 41, + x_max: 1200, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 41, + advanceWidth: 1251, + }, + '[': { + x_min: 139, + x_max: 536, + y_min: -407, + y_max: 1466, + ha: 1873, + leftSideBearing: 139, + advanceWidth: 569, + }, + '\\': { + x_min: 0, + x_max: 569, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 0, + advanceWidth: 569, + }, + ']': { + x_min: 39, + x_max: 436, + y_min: -407, + y_max: 1466, + ha: 1873, + leftSideBearing: 39, + advanceWidth: 569, + }, + '^': { + x_min: 54, + x_max: 907, + y_min: 690, + y_max: 1491, + ha: 801, + leftSideBearing: 54, + advanceWidth: 961, + }, + _: { + x_min: -31, + x_max: 1162, + y_min: -407, + y_max: -277, + ha: 130, + leftSideBearing: -31, + advanceWidth: 1139, + }, + '`': { + x_min: 89, + x_max: 465, + y_min: 1194, + y_max: 1474, + ha: 280, + leftSideBearing: 89, + advanceWidth: 682, + }, + a: { + x_min: 74, + x_max: 1052, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 74, + advanceWidth: 1139, + }, + b: { + x_min: 134, + x_max: 1055, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 134, + advanceWidth: 1139, + }, + c: { + x_min: 80, + x_max: 1005, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 80, + advanceWidth: 1024, + }, + d: { + x_min: 70, + x_max: 991, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 70, + advanceWidth: 1139, + }, + e: { + x_min: 75, + x_max: 1054, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 75, + advanceWidth: 1139, + }, + f: { + x_min: 19, + x_max: 640, + y_min: 0, + y_max: 1491, + ha: 1491, + leftSideBearing: 19, + advanceWidth: 569, + }, + g: { + x_min: 66, + x_max: 1002, + y_min: -431, + y_max: 1086, + ha: 1517, + leftSideBearing: 66, + advanceWidth: 1139, + }, + h: { + x_min: 135, + x_max: 1000, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 135, + advanceWidth: 1139, + }, + i: { + x_min: 136, + x_max: 316, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 136, + advanceWidth: 455, + }, + j: { + x_min: -94, + x_max: 314, + y_min: -431, + y_max: 1466, + ha: 1897, + leftSideBearing: -94, + advanceWidth: 455, + }, + k: { + x_min: 136, + x_max: 1016, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 136, + advanceWidth: 1024, + }, + l: { + x_min: 131, + x_max: 311, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 131, + advanceWidth: 455, + }, + m: { + x_min: 135, + x_max: 1574, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 135, + advanceWidth: 1706, + }, + n: { + x_min: 135, + x_max: 998, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 135, + advanceWidth: 1139, + }, + o: { + x_min: 68, + x_max: 1063, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 68, + advanceWidth: 1139, + }, + p: { + x_min: 135, + x_max: 1057, + y_min: -407, + y_max: 1086, + ha: 1493, + leftSideBearing: 135, + advanceWidth: 1139, + }, + q: { + x_min: 72, + x_max: 992, + y_min: -407, + y_max: 1086, + ha: 1493, + leftSideBearing: 72, + advanceWidth: 1139, + }, + r: { + x_min: 133, + x_max: 710, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 133, + advanceWidth: 682, + }, + s: { + x_min: 63, + x_max: 945, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 63, + advanceWidth: 1024, + }, + t: { + x_min: 36, + x_max: 554, + y_min: -14, + y_max: 1433, + ha: 1447, + leftSideBearing: 36, + advanceWidth: 569, + }, + u: { + x_min: 131, + x_max: 992, + y_min: -24, + y_max: 1062, + ha: 1086, + leftSideBearing: 131, + advanceWidth: 1139, + }, + v: { + x_min: 26, + x_max: 1000, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 26, + advanceWidth: 1024, + }, + w: { + x_min: 6, + x_max: 1463, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 6, + advanceWidth: 1479, + }, + x: { + x_min: 15, + x_max: 1009, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 15, + advanceWidth: 1024, + }, + y: { + x_min: 33, + x_max: 1006, + y_min: -431, + y_max: 1062, + ha: 1493, + leftSideBearing: 33, + advanceWidth: 1024, + }, + z: { + x_min: 40, + x_max: 980, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 40, + advanceWidth: 1024, + }, + '{': { + x_min: 57, + x_max: 636, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 57, + advanceWidth: 684, + }, + '|': { + x_min: 188, + x_max: 345, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 188, + advanceWidth: 532, + }, + '}': { + x_min: 47, + x_max: 626, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 47, + advanceWidth: 684, + }, + '~': { + x_min: 87, + x_max: 1110, + y_min: 557, + y_max: 885, + ha: 328, + leftSideBearing: 87, + advanceWidth: 1196, + }, + }, + fontFamily: 'sans-serif', + resolution: 2048, + generatedOn: '2020-10-18T18:48:11.823Z', +}; diff --git a/build/esm/src/fonts/serif_text_metrics.js b/build/esm/src/fonts/serif_text_metrics.js new file mode 100644 index 0000000000..a2af7634f4 --- /dev/null +++ b/build/esm/src/fonts/serif_text_metrics.js @@ -0,0 +1,870 @@ +export const SerifFont = { + smufl: false, + name: 'SERIF', + spacing: 50, + Description: 'Built-in serif font', + bold: true, + italic: true, + monospaced: false, + serifs: true, + glyphs: { + '0': { + x_min: 49, + x_max: 975, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: 49, + advanceWidth: 1024, + }, + '1': { + x_min: 227, + x_max: 811, + y_min: 0, + y_max: 1383, + ha: 1383, + leftSideBearing: 227, + advanceWidth: 1024, + }, + '2': { + x_min: 61, + x_max: 965, + y_min: 0, + y_max: 1383, + ha: 1383, + leftSideBearing: 61, + advanceWidth: 1024, + }, + '3': { + x_min: 88, + x_max: 883, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: 88, + advanceWidth: 1024, + }, + '4': { + x_min: 25, + x_max: 967, + y_min: 0, + y_max: 1384, + ha: 1384, + leftSideBearing: 25, + advanceWidth: 1024, + }, + '5': { + x_min: 66, + x_max: 898, + y_min: -27, + y_max: 1409, + ha: 1436, + leftSideBearing: 66, + advanceWidth: 1024, + }, + '6': { + x_min: 70, + x_max: 958, + y_min: -27, + y_max: 1401, + ha: 1428, + leftSideBearing: 70, + advanceWidth: 1024, + }, + '7': { + x_min: 41, + x_max: 920, + y_min: -16, + y_max: 1356, + ha: 1372, + leftSideBearing: 41, + advanceWidth: 1024, + }, + '8': { + x_min: 115, + x_max: 911, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: 115, + advanceWidth: 1024, + }, + '9': { + x_min: 61, + x_max: 940, + y_min: -41, + y_max: 1383, + ha: 1424, + leftSideBearing: 61, + advanceWidth: 1024, + }, + ' ': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 512, + }, + '!': { + x_min: 266, + x_max: 488, + y_min: -22, + y_max: 1383, + ha: 1405, + leftSideBearing: 266, + advanceWidth: 682, + }, + '"': { + x_min: 157.2000021972655, + x_max: 678.2500021457677, + y_min: 881, + y_max: 1385, + ha: 504, + leftSideBearing: 157, + advanceWidth: 836, + }, + '#': { + x_min: 10, + x_max: 1016, + y_min: -1, + y_max: 1356, + ha: 1357, + leftSideBearing: 10, + advanceWidth: 1024, + }, + $: { + x_min: 90, + x_max: 936, + y_min: -180, + y_max: 1492, + ha: 1672, + leftSideBearing: 90, + advanceWidth: 1024, + }, + '%': { + x_min: 125, + x_max: 1581, + y_min: -30, + y_max: 1388, + ha: 1418, + leftSideBearing: 125, + advanceWidth: 1706, + }, + '&': { + x_min: 86, + x_max: 1536, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 86, + advanceWidth: 1593, + }, + "'": { + x_min: 97.20000219726548, + x_max: 273.2500021457677, + y_min: 881, + y_max: 1385, + ha: 504, + leftSideBearing: 97, + advanceWidth: 369, + }, + '(': { + x_min: 98, + x_max: 623, + y_min: -363, + y_max: 1383, + ha: 1746, + leftSideBearing: 98, + advanceWidth: 682, + }, + ')': { + x_min: 59, + x_max: 584, + y_min: -363, + y_max: 1383, + ha: 1746, + leftSideBearing: 59, + advanceWidth: 682, + }, + '*': { + x_min: 137.96078522291893, + x_max: 886.039214777081, + y_min: 543, + y_max: 1383, + ha: 840, + leftSideBearing: 137, + advanceWidth: 1024, + }, + '+': { + x_min: 61, + x_max: 1093, + y_min: 2, + y_max: 1034, + ha: 1032, + leftSideBearing: 61, + advanceWidth: 1155, + }, + ',': { + x_min: 115, + x_max: 399, + y_min: -291, + y_max: 208, + ha: 499, + leftSideBearing: 115, + advanceWidth: 512, + }, + '-': { + x_min: 80, + x_max: 584, + y_min: 396, + y_max: 525, + ha: 129, + leftSideBearing: 80, + advanceWidth: 682, + }, + '.': { + x_min: 143, + x_max: 371, + y_min: -22, + y_max: 205, + ha: 227, + leftSideBearing: 143, + advanceWidth: 512, + }, + '/': { + x_min: -17, + x_max: 586, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: -17, + advanceWidth: 569, + }, + ':': { + x_min: 166, + x_max: 394, + y_min: -22, + y_max: 943, + ha: 965, + leftSideBearing: 166, + advanceWidth: 569, + }, + ';': { + x_min: 164, + x_max: 448, + y_min: -290, + y_max: 943, + ha: 1233, + leftSideBearing: 164, + advanceWidth: 569, + }, + '<': { + x_min: 57, + x_max: 1098, + y_min: -15, + y_max: 1051, + ha: 1066, + leftSideBearing: 57, + advanceWidth: 1155, + }, + '=': { + x_min: 61, + x_max: 1093, + y_min: 246, + y_max: 791, + ha: 545, + leftSideBearing: 61, + advanceWidth: 1155, + }, + '>': { + x_min: 57, + x_max: 1098, + y_min: -15, + y_max: 1051, + ha: 1066, + leftSideBearing: 57, + advanceWidth: 1155, + }, + '?': { + x_min: 139, + x_max: 848, + y_min: -15, + y_max: 1383, + ha: 1398, + leftSideBearing: 139, + advanceWidth: 909, + }, + '@': { + x_min: 238, + x_max: 1657, + y_min: -29, + y_max: 1386, + ha: 1415, + leftSideBearing: 238, + advanceWidth: 1886, + }, + A: { + x_min: 31, + x_max: 1445, + y_min: 0, + y_max: 1380, + ha: 1380, + leftSideBearing: 31, + advanceWidth: 1479, + }, + B: { + x_min: 35, + x_max: 1214, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 35, + advanceWidth: 1366, + }, + C: { + x_min: 57, + x_max: 1296, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 57, + advanceWidth: 1366, + }, + D: { + x_min: 33, + x_max: 1403, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 33, + advanceWidth: 1479, + }, + E: { + x_min: 25, + x_max: 1222, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1251, + }, + F: { + x_min: 25, + x_max: 1119, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1139, + }, + G: { + x_min: 66, + x_max: 1452, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 66, + advanceWidth: 1479, + }, + H: { + x_min: 39, + x_max: 1438, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 39, + advanceWidth: 1479, + }, + I: { + x_min: 37, + x_max: 642, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 37, + advanceWidth: 682, + }, + J: { + x_min: 20, + x_max: 758, + y_min: -28, + y_max: 1356, + ha: 1384, + leftSideBearing: 20, + advanceWidth: 797, + }, + K: { + x_min: 70, + x_max: 1479, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 70, + advanceWidth: 1479, + }, + L: { + x_min: 25, + x_max: 1224, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1251, + }, + M: { + x_min: 25, + x_max: 1768, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1821, + }, + N: { + x_min: 25, + x_max: 1450, + y_min: -22, + y_max: 1356, + ha: 1378, + leftSideBearing: 25, + advanceWidth: 1479, + }, + O: { + x_min: 70, + x_max: 1409, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 70, + advanceWidth: 1479, + }, + P: { + x_min: 33, + x_max: 1110, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 33, + advanceWidth: 1139, + }, + Q: { + x_min: 70, + x_max: 1435, + y_min: -364.28571588721996, + y_max: 1383, + ha: 1747.28571588722, + leftSideBearing: 70, + advanceWidth: 1479, + }, + R: { + x_min: 35, + x_max: 1347, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 35, + advanceWidth: 1366, + }, + S: { + x_min: 86, + x_max: 1006, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 86, + advanceWidth: 1139, + }, + T: { + x_min: 35, + x_max: 1214, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 35, + advanceWidth: 1251, + }, + U: { + x_min: 29, + x_max: 1444, + y_min: -28, + y_max: 1356, + ha: 1384, + leftSideBearing: 29, + advanceWidth: 1479, + }, + V: { + x_min: 33, + x_max: 1428, + y_min: -22, + y_max: 1356, + ha: 1378, + leftSideBearing: 33, + advanceWidth: 1479, + }, + W: { + x_min: 10, + x_max: 1906, + y_min: -22, + y_max: 1356, + ha: 1378, + leftSideBearing: 10, + advanceWidth: 1933, + }, + X: { + x_min: 20, + x_max: 1449, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 20, + advanceWidth: 1479, + }, + Y: { + x_min: 45, + x_max: 1441, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 45, + advanceWidth: 1479, + }, + Z: { + x_min: 18, + x_max: 1222, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 18, + advanceWidth: 1251, + }, + '[': { + x_min: 180, + x_max: 612, + y_min: -319, + y_max: 1355, + ha: 1674, + leftSideBearing: 180, + advanceWidth: 682, + }, + '\\': { + x_min: -17, + x_max: 586, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: -17, + advanceWidth: 569, + }, + ']': { + x_min: 70, + x_max: 502, + y_min: -319, + y_max: 1355, + ha: 1674, + leftSideBearing: 70, + advanceWidth: 682, + }, + '^': { + x_min: 49, + x_max: 914, + y_min: 608, + y_max: 1355, + ha: 747, + leftSideBearing: 49, + advanceWidth: 961, + }, + _: { + x_min: 0, + x_max: 1024, + y_min: -255, + y_max: -153, + ha: 102, + leftSideBearing: 0, + advanceWidth: 1024, + }, + '`': { + x_min: 39, + x_max: 499, + y_min: 1037, + y_max: 1392.509803639748, + ha: 355.50980363974804, + leftSideBearing: 39, + advanceWidth: 682, + }, + a: { + x_min: 76, + x_max: 905, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 76, + advanceWidth: 909, + }, + b: { + x_min: 6, + x_max: 958, + y_min: -20, + y_max: 1399, + ha: 1419, + leftSideBearing: 6, + advanceWidth: 1024, + }, + c: { + x_min: 51, + x_max: 843, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 51, + advanceWidth: 909, + }, + d: { + x_min: 55, + x_max: 1006, + y_min: -20, + y_max: 1399, + ha: 1419, + leftSideBearing: 55, + advanceWidth: 1024, + }, + e: { + x_min: 51, + x_max: 868, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 51, + advanceWidth: 909, + }, + f: { + x_min: 41, + x_max: 783, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 41, + advanceWidth: 682, + }, + g: { + x_min: 57, + x_max: 963, + y_min: -446, + y_max: 942, + ha: 1388, + leftSideBearing: 57, + advanceWidth: 1024, + }, + h: { + x_min: 18, + x_max: 997, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 18, + advanceWidth: 1024, + }, + i: { + x_min: 33, + x_max: 516, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 33, + advanceWidth: 569, + }, + j: { + x_min: -142, + x_max: 397, + y_min: -446, + y_max: 1399, + ha: 1845, + leftSideBearing: -142, + advanceWidth: 569, + }, + k: { + x_min: 14, + x_max: 1029, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 14, + advanceWidth: 1024, + }, + l: { + x_min: 39, + x_max: 523, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 39, + advanceWidth: 569, + }, + m: { + x_min: 33, + x_max: 1587, + y_min: 0, + y_max: 944, + ha: 944, + leftSideBearing: 33, + advanceWidth: 1593, + }, + n: { + x_min: 33, + x_max: 993, + y_min: 0, + y_max: 944, + ha: 944, + leftSideBearing: 33, + advanceWidth: 1024, + }, + o: { + x_min: 59, + x_max: 963, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 59, + advanceWidth: 1024, + }, + p: { + x_min: 10, + x_max: 964, + y_min: -443, + y_max: 944, + ha: 1387, + leftSideBearing: 10, + advanceWidth: 1024, + }, + q: { + x_min: 49, + x_max: 999, + y_min: -443, + y_max: 942.0135137169275, + ha: 1385.0135137169275, + leftSideBearing: 49, + advanceWidth: 1024, + }, + r: { + x_min: 10, + x_max: 685, + y_min: 0, + y_max: 944, + ha: 944, + leftSideBearing: 10, + advanceWidth: 682, + }, + s: { + x_min: 104, + x_max: 713, + y_min: -20, + y_max: 942.0263161804552, + ha: 962.0263161804552, + leftSideBearing: 104, + advanceWidth: 797, + }, + t: { + x_min: 27, + x_max: 572, + y_min: -18, + y_max: 1186, + ha: 1204, + leftSideBearing: 27, + advanceWidth: 569, + }, + u: { + x_min: 18, + x_max: 981, + y_min: -21, + y_max: 921, + ha: 942, + leftSideBearing: 18, + advanceWidth: 1024, + }, + v: { + x_min: 39, + x_max: 976, + y_min: -28, + y_max: 921, + ha: 949, + leftSideBearing: 39, + advanceWidth: 1024, + }, + w: { + x_min: 43, + x_max: 1423, + y_min: -28, + y_max: 921, + ha: 949, + leftSideBearing: 43, + advanceWidth: 1479, + }, + x: { + x_min: 35, + x_max: 989, + y_min: 0, + y_max: 921, + ha: 921, + leftSideBearing: 35, + advanceWidth: 1024, + }, + y: { + x_min: 29, + x_max: 976, + y_min: -445, + y_max: 921, + ha: 1366, + leftSideBearing: 29, + advanceWidth: 1024, + }, + z: { + x_min: 55, + x_max: 855, + y_min: 0, + y_max: 921, + ha: 921, + leftSideBearing: 55, + advanceWidth: 909, + }, + '{': { + x_min: 205, + x_max: 717, + y_min: -377, + y_max: 1397, + ha: 1774, + leftSideBearing: 205, + advanceWidth: 983, + }, + '|': { + x_min: 137, + x_max: 273, + y_min: -512, + y_max: 1535, + ha: 2047, + leftSideBearing: 137, + advanceWidth: 410, + }, + '}': { + x_min: 266, + x_max: 778, + y_min: -377, + y_max: 1397, + ha: 1774, + leftSideBearing: 266, + advanceWidth: 983, + }, + '~': { + x_min: 82, + x_max: 1028, + y_min: 380, + y_max: 666, + ha: 286, + leftSideBearing: 82, + advanceWidth: 1108, + }, + }, + fontFamily: 'serif', + resolution: 2048, + generatedOn: '2020-10-18T19:03:12.514Z', +}; diff --git a/build/esm/src/fonts/textfonts.js b/build/esm/src/fonts/textfonts.js new file mode 100644 index 0000000000..35bacbfa06 --- /dev/null +++ b/build/esm/src/fonts/textfonts.js @@ -0,0 +1,104 @@ +import { Font } from '../font.js'; +import { TextFormatter } from '../textformatter.js'; +import { PetalumaScriptFont } from './petalumascript_glyphs.js'; +import { RobotoSlabFont } from './robotoslab_glyphs.js'; +import { SansFontBold } from './sans_bold_text_metrics.js'; +import { SansFont } from './sans_text_metrics.js'; +import { SerifFont } from './serif_text_metrics.js'; +export function loadTextFonts() { + { + const fontData = SansFontBold; + const { fontFamily, resolution, glyphs } = fontData; + Font.load(fontFamily, fontData); + const maxSizeGlyph = '@'; + TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: true, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: false, + description: 'Generic SANS font', + }); + } + { + const fontData = SansFont; + const { fontFamily, resolution, glyphs } = fontData; + Font.load(fontFamily, fontData); + const maxSizeGlyph = '@'; + TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: false, + description: 'Generic SANS font', + }); + } + { + const fontData = SerifFont; + const { fontFamily, resolution, glyphs } = fontData; + Font.load(fontFamily, fontData); + const maxSizeGlyph = '@'; + TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: true, + description: 'Generic SERIF font', + }); + } + { + const fontData = RobotoSlabFont; + const { fontFamily, resolution, glyphs } = fontData; + Font.load(fontFamily, fontData); + const maxSizeGlyph = 'b'; + TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: true, + description: 'Text font to pair with the Bravura / Gonville music fonts.', + }); + } + { + const fontData = PetalumaScriptFont; + const { fontFamily, resolution, glyphs } = fontData; + Font.load(fontFamily, fontData); + const maxSizeGlyph = 'b'; + TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: false, + description: 'Text font to pair with the Petaluma music font.', + }); + } +} diff --git a/build/esm/src/formatter.js b/build/esm/src/formatter.js new file mode 100644 index 0000000000..03dc3bd139 --- /dev/null +++ b/build/esm/src/formatter.js @@ -0,0 +1,621 @@ +import { Beam } from './beam.js'; +import { Font } from './font.js'; +import { Fraction } from './fraction.js'; +import { ModifierContext } from './modifiercontext.js'; +import { Stave } from './stave.js'; +import { StaveConnector } from './staveconnector.js'; +import { Tables } from './tables.js'; +import { TickContext } from './tickcontext.js'; +import { isNote, isStaveNote } from './typeguard.js'; +import { defined, log, midLine, RuntimeError, sumArray } from './util.js'; +import { Voice } from './voice.js'; +function createContexts(voices, makeContext, addToContext) { + if (voices.length == 0) + return { + map: {}, + array: [], + list: [], + resolutionMultiplier: 0, + }; + const tickToContextMap = {}; + const tickList = []; + const contexts = []; + const resolutionMultiplier = Formatter.getResolutionMultiplier(voices); + voices.forEach((voice, voiceIndex) => { + const ticksUsed = new Fraction(0, resolutionMultiplier); + voice.getTickables().forEach((tickable) => { + const integerTicks = ticksUsed.numerator; + if (!tickToContextMap[integerTicks]) { + const newContext = makeContext({ tickID: integerTicks }); + contexts.push(newContext); + tickToContextMap[integerTicks] = newContext; + tickList.push(integerTicks); + } + addToContext(tickable, tickToContextMap[integerTicks], voiceIndex); + ticksUsed.add(tickable.getTicks()); + }); + }); + return { + map: tickToContextMap, + array: contexts, + list: tickList.sort((a, b) => a - b), + resolutionMultiplier, + }; +} +function L(...args) { + if (Formatter.DEBUG) + log('Vex.Flow.Formatter', args); +} +function getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) { + let nextRestLine = currRestLine; + for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) { + const note = notes[noteIndex]; + if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) { + nextRestLine = note.getLineForRest(); + break; + } + } + if (compare && currRestLine !== nextRestLine) { + const top = Math.max(currRestLine, nextRestLine); + const bot = Math.min(currRestLine, nextRestLine); + nextRestLine = midLine(top, bot); + } + return nextRestLine; +} +class Formatter { + static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) { + notes.reduce((accumulator, note) => { + note.addToModifierContext(new ModifierContext()); + const tick = new TickContext().addTickable(note).preFormat(); + const metrics = tick.getMetrics(); + tick.setX(accumulator + metrics.totalLeftPx); + return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween; + }, x); + } + static plotDebugging(ctx, formatter, xPos, y1, y2, options) { + options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options); + const x = xPos + options.stavePadding; + const contextGaps = formatter.contextGaps; + function stroke(x1, x2, color) { + ctx.beginPath(); + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + ctx.setLineWidth(1); + ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1); + } + ctx.save(); + ctx.setFont(Font.SANS_SERIF, 8); + contextGaps.gaps.forEach((gap) => { + stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)'); + ctx.setFillStyle('green'); + ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12); + }); + ctx.setFillStyle('red'); + ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27); + ctx.restore(); + } + static FormatAndDraw(ctx, stave, notes, params) { + let options = { + auto_beam: false, + align_rests: false, + }; + if (typeof params === 'object') { + options = Object.assign(Object.assign({}, options), params); + } + else if (typeof params === 'boolean') { + options.auto_beam = params; + } + const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes); + const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : []; + new Formatter() + .joinVoices([voice]) + .formatToStave([voice], stave, { align_rests: options.align_rests, stave }); + voice.setStave(stave).draw(ctx, stave); + beams.forEach((beam) => beam.setContext(ctx).draw()); + return voice.getBoundingBox(); + } + static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) { + let opts = { + auto_beam: autobeam, + align_rests: false, + }; + if (typeof params === 'object') { + opts = Object.assign(Object.assign({}, opts), params); + } + else if (typeof params === 'boolean') { + opts.auto_beam = params; + } + const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes); + const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes); + const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : []; + new Formatter() + .joinVoices([notevoice]) + .joinVoices([tabvoice]) + .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests }); + notevoice.draw(ctx, stave); + tabvoice.draw(ctx, tabstave); + beams.forEach((beam) => beam.setContext(ctx).draw()); + new StaveConnector(stave, tabstave).setContext(ctx).draw(); + } + static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) { + tickables.forEach((currTickable, index) => { + if (isStaveNote(currTickable) && currTickable.isRest()) { + if (currTickable.getTuplet() && !alignTuplets) { + return; + } + const position = currTickable.getGlyphProps().position.toUpperCase(); + if (position !== 'R/4' && position !== 'B/4') { + return; + } + if (alignAllNotes || currTickable.getBeam()) { + const props = currTickable.getKeyProps()[0]; + if (index === 0) { + props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false); + } + else if (index > 0 && index < tickables.length) { + const prevTickable = tickables[index - 1]; + if (isStaveNote(prevTickable)) { + if (prevTickable.isRest()) { + props.line = prevTickable.getKeyProps()[0].line; + } + else { + const restLine = prevTickable.getLineForRest(); + props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true); + } + } + } + currTickable.setKeyLine(0, props.line); + } + } + }); + } + constructor(options) { + this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options); + this.justifyWidth = 0; + this.totalCost = 0; + this.totalShift = 0; + this.durationStats = {}; + this.minTotalWidth = 0; + this.hasMinTotalWidth = false; + this.tickContexts = { + map: {}, + array: [], + list: [], + resolutionMultiplier: 0, + }; + this.modifierContexts = []; + this.contextGaps = { + total: 0, + gaps: [], + }; + this.voices = []; + this.lossHistory = []; + } + alignRests(voices, alignAllNotes) { + if (!voices || !voices.length) { + throw new RuntimeError('BadArgument', 'No voices to format rests'); + } + voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes)); + } + preCalculateMinTotalWidth(voices) { + const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding'); + let unalignedCtxCount = 0; + let wsum = 0; + let dsum = 0; + const widths = []; + const durations = []; + if (this.hasMinTotalWidth) + return this.minTotalWidth; + if (!voices) { + throw new RuntimeError('BadArgument', "'voices' required to run preCalculateMinTotalWidth"); + } + this.createTickContexts(voices); + const { list: contextList, map: contextMap } = this.tickContexts; + this.minTotalWidth = 0; + contextList.forEach((tick) => { + const context = contextMap[tick]; + context.preFormat(); + if (context.getTickables().length < voices.length) { + unalignedCtxCount += 1; + } + context.getTickables().forEach((t) => { + wsum += t.getMetrics().width; + dsum += t.getTicks().value(); + widths.push(t.getMetrics().width); + durations.push(t.getTicks().value()); + }); + const width = context.getWidth(); + this.minTotalWidth += width; + }); + this.hasMinTotalWidth = true; + const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length; + const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2))); + const wpads = Math.pow(wvar / widths.length, 0.5) / wavg; + const davg = dsum / durations.length; + const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2))); + const dpads = Math.pow(dvar / durations.length, 0.5) / davg; + const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding; + const unalignedPad = unalignedPadding * unalignedCtxCount; + return this.minTotalWidth + Math.max(unalignedPad, padmax); + } + getMinTotalWidth() { + if (!this.hasMinTotalWidth) { + throw new RuntimeError('NoMinTotalWidth', "Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'"); + } + return this.minTotalWidth; + } + static getResolutionMultiplier(voices) { + if (!voices || !voices.length) { + throw new RuntimeError('BadArgument', 'No voices to format'); + } + const totalTicks = voices[0].getTotalTicks(); + const resolutionMultiplier = voices.reduce((accumulator, voice) => { + if (!voice.getTotalTicks().equals(totalTicks)) { + throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.'); + } + if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) { + throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.'); + } + return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier())); + }, 1); + return resolutionMultiplier; + } + createModifierContexts(voices) { + if (voices.length == 0) + return; + const resolutionMultiplier = Formatter.getResolutionMultiplier(voices); + const tickToContextMap = new Map(); + const contexts = []; + voices.forEach((voice) => { + const ticksUsed = new Fraction(0, resolutionMultiplier); + voice.getTickables().forEach((tickable) => { + const integerTicks = ticksUsed.numerator; + let staveTickToContextMap = tickToContextMap.get(tickable.getStave()); + if (!staveTickToContextMap) { + tickToContextMap.set(tickable.getStave(), {}); + staveTickToContextMap = tickToContextMap.get(tickable.getStave()); + } + if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) { + const newContext = new ModifierContext(); + contexts.push(newContext); + staveTickToContextMap[integerTicks] = newContext; + } + tickable.addToModifierContext(staveTickToContextMap[integerTicks]); + ticksUsed.add(tickable.getTicks()); + }); + }); + this.modifierContexts.push({ + map: tickToContextMap, + array: contexts, + resolutionMultiplier, + }); + } + createTickContexts(voices) { + const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex); + const contexts = createContexts(voices, (tick) => new TickContext(tick), fn); + this.tickContexts = contexts; + const contextArray = this.tickContexts.array; + contextArray.forEach((context) => { + context.tContexts = contextArray; + }); + return contexts; + } + getTickContexts() { + return this.tickContexts; + } + preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) { + const contexts = this.tickContexts; + if (!contexts) { + throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts'); + } + const { list: contextList, map: contextMap } = contexts; + this.lossHistory = []; + if (voicesParam && stave) { + voicesParam.forEach((voice) => voice.setStave(stave).preFormat()); + } + let x = 0; + let shift = 0; + this.minTotalWidth = 0; + let totalTicks = 0; + contextList.forEach((tick) => { + const context = contextMap[tick]; + context.preFormat(); + const width = context.getWidth(); + this.minTotalWidth += width; + const maxTicks = context.getMaxTicks().value(); + totalTicks += maxTicks; + const metrics = context.getMetrics(); + x = x + shift + metrics.totalLeftPx; + context.setX(x); + shift = width - metrics.totalLeftPx; + }); + const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions; + const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks)); + const expTicksUsed = sumArray(contextList.map(exp)); + this.minTotalWidth = x + shift; + this.hasMinTotalWidth = true; + if (justifyWidth <= 0) + return this.evaluate(); + const firstContext = contextMap[contextList[0]]; + const lastContext = contextMap[contextList[contextList.length - 1]]; + function calculateIdealDistances(adjustedJustifyWidth) { + const distances = contextList.map((tick, i) => { + const context = contextMap[tick]; + const voices = context.getTickablesByVoice(); + let backTickable; + if (i > 0) { + const prevContext = contextMap[contextList[i - 1]]; + for (let j = i - 1; j >= 0; j--) { + const backTick = contextMap[contextList[j]]; + const backVoices = backTick.getTickablesByVoice(); + const matchingVoices = []; + Object.keys(voices).forEach((v) => { + if (backVoices[v]) { + matchingVoices.push(v); + } + }); + if (matchingVoices.length > 0) { + let maxTicks = 0; + let maxNegativeShiftPx = Infinity; + let expectedDistance = 0; + matchingVoices.forEach((v) => { + const ticks = backVoices[v].getTicks().value(); + if (ticks > maxTicks) { + backTickable = backVoices[v]; + maxTicks = ticks; + } + const thisTickable = voices[v]; + const insideLeftEdge = thisTickable.getX() - + (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx); + const backMetrics = backVoices[v].getMetrics(); + const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx; + maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge); + }); + maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05)); + if (globalSoftmax) { + const t = totalTicks; + expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth; + } + else if (typeof backTickable !== 'undefined') { + expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth; + } + return { + expectedDistance, + maxNegativeShiftPx, + fromTickable: backTickable, + }; + } + } + } + return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 }; + }); + return distances; + } + function shiftToIdealDistances(idealDistances) { + const centerX = adjustedJustifyWidth / 2; + let spaceAccum = 0; + contextList.forEach((tick, index) => { + const context = contextMap[tick]; + if (index > 0) { + const contextX = context.getX(); + const ideal = idealDistances[index]; + const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum); + let negativeShiftPx = 0; + if (errorPx > 0) { + spaceAccum += errorPx; + } + else if (errorPx < 0) { + negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx)); + spaceAccum += -negativeShiftPx; + } + context.setX(contextX + spaceAccum); + } + context.getCenterAlignedTickables().forEach((tickable) => { + tickable.setCenterXShift(centerX - context.getX()); + }); + }); + return lastContext.getX() - firstContext.getX(); + } + const adjustedJustifyWidth = justifyWidth - + lastContext.getMetrics().notePx - + lastContext.getMetrics().totalRightPx - + firstContext.getMetrics().totalLeftPx; + const musicFont = Tables.currentMusicFont(); + const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin'); + const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax'); + const leftPadding = musicFont.lookupMetric('stave.padding'); + let targetWidth = adjustedJustifyWidth; + const distances = calculateIdealDistances(targetWidth); + let actualWidth = shiftToIdealDistances(distances); + if (contextList.length === 1) + return 0; + const calcMinDistance = (targetWidth, distances) => { + let mdCalc = targetWidth / 2; + if (distances.length > 1) { + for (let di = 1; di < distances.length; ++di) { + mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc); + } + } + return mdCalc; + }; + const minDistance = calcMinDistance(targetWidth, distances); + const paddingMaxCalc = (curTargetWidth) => { + let lastTickablePadding = 0; + const lastTickable = lastContext && lastContext.getMaxTickable(); + if (lastTickable) { + const voice = lastTickable.getVoice(); + if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) { + return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding; + } + const tickWidth = lastTickable.getWidth(); + lastTickablePadding = + voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding); + } + return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding; + }; + let paddingMax = paddingMaxCalc(targetWidth); + let paddingMin = paddingMax - (configMaxPadding - configMinPadding); + const maxX = adjustedJustifyWidth - paddingMin; + let iterations = maxIterations; + while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) { + targetWidth -= actualWidth - maxX; + paddingMax = paddingMaxCalc(targetWidth); + paddingMin = paddingMax - (configMaxPadding - configMinPadding); + actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth)); + iterations--; + } + this.justifyWidth = justifyWidth; + return this.evaluate(); + } + evaluate() { + const contexts = this.tickContexts; + const justifyWidth = this.justifyWidth; + this.contextGaps = { total: 0, gaps: [] }; + contexts.list.forEach((tick, index) => { + if (index === 0) + return; + const prevTick = contexts.list[index - 1]; + const prevContext = contexts.map[prevTick]; + const context = contexts.map[tick]; + const prevMetrics = prevContext.getMetrics(); + const currMetrics = context.getMetrics(); + const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx; + const insideLeftEdge = context.getX() - currMetrics.totalLeftPx; + const gap = insideLeftEdge - insideRightEdge; + this.contextGaps.total += gap; + this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge }); + context.getFormatterMetrics().freedom.left = gap; + prevContext.getFormatterMetrics().freedom.right = gap; + }); + this.durationStats = {}; + const durationStats = this.durationStats; + function updateStats(duration, space) { + const stats = durationStats[duration]; + if (stats === undefined) { + durationStats[duration] = { mean: space, count: 1 }; + } + else { + stats.count += 1; + stats.mean = (stats.mean + space) / 2; + } + } + this.voices.forEach((voice) => { + voice.getTickables().forEach((note, i, notes) => { + const duration = note.getTicks().clone().simplify().toString(); + const metrics = note.getMetrics(); + const formatterMetrics = note.getFormatterMetrics(); + const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx; + let space = 0; + if (i < notes.length - 1) { + const rightNote = notes[i + 1]; + const rightMetrics = rightNote.getMetrics(); + const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx; + space = rightNoteEdge - leftNoteEdge; + formatterMetrics.space.used = rightNote.getX() - note.getX(); + rightNote.getFormatterMetrics().freedom.left = space; + } + else { + space = justifyWidth - leftNoteEdge; + formatterMetrics.space.used = justifyWidth - note.getX(); + } + formatterMetrics.freedom.right = space; + updateStats(duration, formatterMetrics.space.used); + }); + }); + let totalDeviation = 0; + this.voices.forEach((voice) => { + voice.getTickables().forEach((note) => { + const duration = note.getTicks().clone().simplify().toString(); + const metrics = note.getFormatterMetrics(); + metrics.space.mean = durationStats[duration].mean; + metrics.duration = duration; + metrics.iterations += 1; + metrics.space.deviation = metrics.space.used - metrics.space.mean; + totalDeviation += Math.pow(metrics.space.deviation, 2); + }); + }); + this.totalCost = Math.sqrt(totalDeviation); + this.lossHistory.push(this.totalCost); + return this.totalCost; + } + tune(options) { + var _a; + const contexts = this.tickContexts; + if (!contexts) { + return 0; + } + const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5; + function move(current, shift, prev, next) { + current.setX(current.getX() + shift); + current.getFormatterMetrics().freedom.left += shift; + current.getFormatterMetrics().freedom.right -= shift; + if (prev) + prev.getFormatterMetrics().freedom.right += shift; + if (next) + next.getFormatterMetrics().freedom.left -= shift; + } + let shift = 0; + this.totalShift = 0; + contexts.list.forEach((tick, index, list) => { + const context = contexts.map[tick]; + const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined; + const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined; + move(context, shift, prevContext, nextContext); + const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation)); + if (cost > 0) { + shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost)); + } + else if (cost < 0) { + if (nextContext) { + shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost)); + } + else { + shift = 0; + } + } + shift *= alpha; + this.totalShift += shift; + }); + return this.evaluate(); + } + postFormat() { + this.modifierContexts.forEach((modifierContexts) => { + modifierContexts.array.forEach((mc) => mc.postFormat()); + }); + this.tickContexts.list.forEach((tick) => { + this.tickContexts.map[tick].postFormat(); + }); + return this; + } + joinVoices(voices) { + this.createModifierContexts(voices); + this.hasMinTotalWidth = false; + return this; + } + format(voices, justifyWidth, options) { + const opts = Object.assign({ align_rests: false }, options); + this.voices = voices; + const softmaxFactor = this.formatterOptions.softmaxFactor; + if (softmaxFactor) { + this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor)); + } + this.alignRests(voices, opts.align_rests); + this.createTickContexts(voices); + this.preFormat(justifyWidth, opts.context, voices, opts.stave); + if (opts.stave) + this.postFormat(); + return this; + } + formatToStave(voices, stave, optionsParam) { + const options = Object.assign({ context: stave.getContext() }, optionsParam); + const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding; + L('Formatting voices to width: ', justifyWidth); + return this.format(voices, justifyWidth, options); + } + getTickContext(tick) { + var _a; + return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick]; + } +} +Formatter.DEBUG = false; +export { Formatter }; diff --git a/build/esm/src/fraction.js b/build/esm/src/fraction.js new file mode 100644 index 0000000000..e9c234f2e4 --- /dev/null +++ b/build/esm/src/fraction.js @@ -0,0 +1,172 @@ +import { RuntimeError } from './util.js'; +class Fraction { + static get CATEGORY() { + return "Fraction"; + } + static GCD(a, b) { + if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) { + throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`); + } + let t; + while (b !== 0) { + t = b; + b = a % b; + a = t; + } + return a; + } + static LCM(a, b) { + return (a * b) / Fraction.GCD(a, b); + } + static LCMM(args) { + if (args.length === 0) { + return 0; + } + else if (args.length === 1) { + return args[0]; + } + else if (args.length === 2) { + return Fraction.LCM(args[0], args[1]); + } + else { + return Fraction.LCM(args.shift(), Fraction.LCMM(args)); + } + } + constructor(numerator, denominator) { + this.numerator = 1; + this.denominator = 1; + this.set(numerator, denominator); + } + set(numerator = 1, denominator = 1) { + this.numerator = numerator; + this.denominator = denominator; + return this; + } + value() { + return this.numerator / this.denominator; + } + simplify() { + let u = this.numerator; + let d = this.denominator; + const gcd = Fraction.GCD(u, d); + u /= gcd; + d /= gcd; + if (d < 0) { + d = -d; + u = -u; + } + return this.set(u, d); + } + add(param1 = 0, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + const lcm = Fraction.LCM(this.denominator, otherDenominator); + const a = lcm / this.denominator; + const b = lcm / otherDenominator; + const u = this.numerator * a + otherNumerator * b; + return this.set(u, lcm); + } + subtract(param1 = 0, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + const lcm = Fraction.LCM(this.denominator, otherDenominator); + const a = lcm / this.denominator; + const b = lcm / otherDenominator; + const u = this.numerator * a - otherNumerator * b; + return this.set(u, lcm); + } + multiply(param1 = 1, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator); + } + divide(param1 = 1, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator); + } + equals(compare) { + const a = Fraction.__staticFractionA.copy(compare).simplify(); + const b = Fraction.__staticFractionB.copy(this).simplify(); + return a.numerator === b.numerator && a.denominator === b.denominator; + } + greaterThan(compare) { + const a = Fraction.__staticFractionB.copy(this); + a.subtract(compare); + return a.numerator > 0; + } + greaterThanEquals(compare) { + const a = Fraction.__staticFractionB.copy(this); + a.subtract(compare); + return a.numerator >= 0; + } + lessThan(compare) { + return !this.greaterThanEquals(compare); + } + lessThanEquals(compare) { + return !this.greaterThan(compare); + } + clone() { + return new Fraction(this.numerator, this.denominator); + } + copy(other) { + if (typeof other === 'number') { + return this.set(other, 1); + } + else { + return this.set(other.numerator, other.denominator); + } + } + quotient() { + return Math.floor(this.numerator / this.denominator); + } + remainder() { + return this.numerator % this.denominator; + } + makeAbs() { + this.denominator = Math.abs(this.denominator); + this.numerator = Math.abs(this.numerator); + return this; + } + toString() { + return `${this.numerator}/${this.denominator}`; + } + toSimplifiedString() { + return Fraction.__staticFractionTmp.copy(this).simplify().toString(); + } + toMixedString() { + let s = ''; + const q = this.quotient(); + const f = Fraction.__staticFractionTmp.copy(this); + if (q < 0) { + f.makeAbs(); + } + if (q !== 0) { + s += q; + if (f.numerator !== 0) { + s += ` ${f.toSimplifiedString()}`; + } + } + else if (f.numerator === 0) { + s = '0'; + } + else { + s = f.toSimplifiedString(); + } + return s; + } + parse(str) { + const i = str.split('/'); + const n = parseInt(i[0], 10); + const d = i[1] ? parseInt(i[1], 10) : 1; + return this.set(n, d); + } +} +Fraction.__staticFractionA = new Fraction(); +Fraction.__staticFractionB = new Fraction(); +Fraction.__staticFractionTmp = new Fraction(); +export { Fraction }; +function getNumeratorAndDenominator(n, d = 1) { + if (typeof n === 'number') { + return [n, d]; + } + else { + return [n.numerator, n.denominator]; + } +} diff --git a/build/esm/src/frethandfinger.js b/build/esm/src/frethandfinger.js new file mode 100644 index 0000000000..60cc1aadc4 --- /dev/null +++ b/build/esm/src/frethandfinger.js @@ -0,0 +1,157 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { Modifier, ModifierPosition } from './modifier.js'; +import { Tables } from './tables.js'; +import { TextFormatter } from './textformatter.js'; +import { RuntimeError } from './util.js'; +class FretHandFinger extends Modifier { + static get CATEGORY() { + return "FretHandFinger"; + } + static format(nums, state) { + const { left_shift, right_shift } = state; + const num_spacing = 1; + if (!nums || nums.length === 0) + return false; + const nums_list = []; + let prev_note = null; + let shiftLeft = 0; + let shiftRight = 0; + for (let i = 0; i < nums.length; ++i) { + const num = nums[i]; + const note = num.getNote(); + const pos = num.getPosition(); + const index = num.checkIndex(); + const props = note.getKeyProps()[index]; + const textFormatter = TextFormatter.create(num.textFont); + const textHeight = textFormatter.maxHeight; + if (num.position === ModifierPosition.ABOVE) { + state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5; + } + if (num.position === ModifierPosition.BELOW) { + state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5; + } + if (note !== prev_note) { + for (let n = 0; n < note.keys.length; ++n) { + if (left_shift === 0) { + shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft); + } + if (right_shift === 0) { + shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight); + } + } + prev_note = note; + } + nums_list.push({ + note, + num, + pos, + line: props.line, + shiftL: shiftLeft, + shiftR: shiftRight, + }); + } + nums_list.sort((a, b) => b.line - a.line); + let numShiftL = 0; + let numShiftR = 0; + let xWidthL = 0; + let xWidthR = 0; + let lastLine = null; + let lastNote = null; + for (let i = 0; i < nums_list.length; ++i) { + let num_shift = 0; + const { note, pos, num, line, shiftL, shiftR } = nums_list[i]; + if (line !== lastLine || note !== lastNote) { + numShiftL = left_shift + shiftL; + numShiftR = right_shift + shiftR; + } + const numWidth = num.getWidth() + num_spacing; + if (pos === Modifier.Position.LEFT) { + num.setXShift(left_shift + numShiftL); + num_shift = left_shift + numWidth; + xWidthL = num_shift > xWidthL ? num_shift : xWidthL; + } + else if (pos === Modifier.Position.RIGHT) { + num.setXShift(numShiftR); + num_shift = shiftRight + numWidth; + xWidthR = num_shift > xWidthR ? num_shift : xWidthR; + } + lastLine = line; + lastNote = note; + } + state.left_shift += xWidthL; + state.right_shift += xWidthR; + return true; + } + static easyScoreHook({ fingerings } = {}, note, builder) { + fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => { + const split = fingeringString.trim().split('.'); + const params = { number: split[0] }; + if (split[1]) + params.position = split[1]; + return builder.getFactory().Fingering(params); + }).map((fingering, index) => note.addModifier(fingering, index)); + } + constructor(finger) { + super(); + this.finger = finger; + this.width = 7; + this.position = Modifier.Position.LEFT; + this.x_shift = 0; + this.y_shift = 0; + this.x_offset = 0; + this.y_offset = 0; + this.resetFont(); + } + setFretHandFinger(finger) { + this.finger = finger; + return this; + } + getFretHandFinger() { + return this.finger; + } + setOffsetX(x) { + this.x_offset = x; + return this; + } + setOffsetY(y) { + this.y_offset = y; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index); + let dot_x = start.x + this.x_shift + this.x_offset; + let dot_y = start.y + this.y_shift + this.y_offset + 5; + switch (this.position) { + case Modifier.Position.ABOVE: + dot_x -= 4; + dot_y -= 12; + break; + case Modifier.Position.BELOW: + dot_x -= 2; + dot_y += 10; + break; + case Modifier.Position.LEFT: + dot_x -= this.width; + break; + case Modifier.Position.RIGHT: + dot_x += 1; + break; + default: + throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`); + } + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText('' + this.finger, dot_x, dot_y); + ctx.restore(); + } +} +FretHandFinger.TEXT_FONT = { + family: Font.SANS_SERIF, + size: 9, + weight: FontWeight.BOLD, + style: FontStyle.NORMAL, +}; +export { FretHandFinger }; diff --git a/build/esm/src/ghostnote.js b/build/esm/src/ghostnote.js new file mode 100644 index 0000000000..02b3f05342 --- /dev/null +++ b/build/esm/src/ghostnote.js @@ -0,0 +1,50 @@ +import { StemmableNote } from './stemmablenote.js'; +import { isAnnotation } from './typeguard.js'; +import { RuntimeError } from './util.js'; +const ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.'; +export class GhostNote extends StemmableNote { + static get CATEGORY() { + return "GhostNote"; + } + constructor(parameter) { + if (!parameter) { + throw new RuntimeError('BadArguments', ERROR_MSG); + } + let noteStruct; + if (typeof parameter === 'string') { + noteStruct = { duration: parameter }; + } + else if (typeof parameter === 'object') { + noteStruct = parameter; + } + else { + throw new RuntimeError('BadArguments', ERROR_MSG); + } + super(noteStruct); + this.setWidth(0); + } + isRest() { + return true; + } + setStave(stave) { + super.setStave(stave); + return this; + } + addToModifierContext(mc) { + return this; + } + preFormat() { + this.preFormatted = true; + return this; + } + draw() { + this.setRendered(); + for (let i = 0; i < this.modifiers.length; ++i) { + const modifier = this.modifiers[i]; + if (isAnnotation(modifier)) { + modifier.setContext(this.getContext()); + modifier.drawWithStyle(); + } + } + } +} diff --git a/build/esm/src/glyph.js b/build/esm/src/glyph.js new file mode 100644 index 0000000000..a3f0f92393 --- /dev/null +++ b/build/esm/src/glyph.js @@ -0,0 +1,341 @@ +import { BoundingBox } from './boundingbox.js'; +import { BoundingBoxComputation } from './boundingboxcomputation.js'; +import { Element } from './element.js'; +import { Tables } from './tables.js'; +import { defined, RuntimeError } from './util.js'; +class GlyphCacheEntry { + constructor(fontStack, code, category) { + this.point = -1; + this.metrics = Glyph.loadMetrics(fontStack, code, category); + this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift); + if (category) { + this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1); + } + } +} +class GlyphCache { + constructor() { + this.cache = new Map(); + } + lookup(code, category) { + let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY); + if (entries === undefined) { + entries = {}; + this.cache.set(Glyph.CURRENT_CACHE_KEY, entries); + } + const key = category ? `${code}%${category}` : code; + let entry = entries[key]; + if (entry === undefined) { + entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category); + entries[key] = entry; + } + return entry; + } +} +class GlyphOutline { + constructor(outline, originX, originY, scale) { + this.outline = outline; + this.originX = originX; + this.originY = originY; + this.scale = scale; + this.i = 0; + this.precision = 1; + this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES); + } + done() { + return this.i >= this.outline.length; + } + next() { + return Math.round((this.outline[this.i++] * this.precision) / this.precision); + } + nextX() { + return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision; + } + nextY() { + return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision; + } + static parse(str) { + const result = []; + const parts = str.split(' '); + let i = 0; + while (i < parts.length) { + switch (parts[i++]) { + case 'm': + result.push(0, parseInt(parts[i++]), parseInt(parts[i++])); + break; + case 'l': + result.push(1, parseInt(parts[i++]), parseInt(parts[i++])); + break; + case 'q': + result.push(2, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++])); + break; + case 'b': + result.push(3, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++])); + break; + } + } + return result; + } +} +class Glyph extends Element { + static get CATEGORY() { + return "Glyph"; + } + static lookupFontMetric(font, category, code, key, defaultValue) { + let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined); + if (value === undefined) { + value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue); + } + return value; + } + static lookupGlyph(fontStack, code) { + defined(fontStack, 'BadFontStack', 'Font stack is misconfigured'); + let glyph; + let font; + for (let i = 0; i < fontStack.length; i++) { + font = fontStack[i]; + glyph = font.getGlyphs()[code]; + if (glyph) + return { glyph, font }; + } + throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`); + } + static loadMetrics(fontStack, code, category) { + const { glyph, font } = Glyph.lookupGlyph(fontStack, code); + if (!glyph.o) + throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`); + let x_shift = 0; + let y_shift = 0; + let scale = 1; + if (category && font) { + x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0); + y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0); + scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1); + } + const x_min = glyph.x_min; + const x_max = glyph.x_max; + const ha = glyph.ha; + if (!glyph.cached_outline) { + glyph.cached_outline = GlyphOutline.parse(glyph.o); + } + return { + x_min, + x_max, + x_shift, + y_shift, + scale, + ha, + outline: glyph.cached_outline, + font, + width: x_max - x_min, + height: ha, + }; + } + static renderGlyph(ctx, x_pos, y_pos, point, code, options) { + var _a; + const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category); + const metrics = data.metrics; + if (data.point != -1) { + point = data.point; + } + const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1; + const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale; + Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale); + return metrics; + } + static renderOutline(ctx, outline, scale, x_pos, y_pos) { + const go = new GlyphOutline(outline, x_pos, y_pos, scale); + ctx.beginPath(); + let x, y; + while (!go.done()) { + switch (go.next()) { + case 0: + ctx.moveTo(go.nextX(), go.nextY()); + break; + case 1: + ctx.lineTo(go.nextX(), go.nextY()); + break; + case 2: + x = go.nextX(); + y = go.nextY(); + ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y); + break; + case 3: + x = go.nextX(); + y = go.nextY(); + ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y); + break; + } + } + ctx.fill(); + } + static getOutlineBoundingBox(outline, scale, x_pos, y_pos) { + const go = new GlyphOutline(outline, x_pos, y_pos, scale); + const bboxComp = new BoundingBoxComputation(); + let penX = x_pos; + let penY = y_pos; + let x, y; + while (!go.done()) { + switch (go.next()) { + case 0: + penX = go.nextX(); + penY = go.nextY(); + break; + case 1: + bboxComp.addPoint(penX, penY); + penX = go.nextX(); + penY = go.nextY(); + bboxComp.addPoint(penX, penY); + break; + case 2: + x = go.nextX(); + y = go.nextY(); + bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y); + penX = x; + penY = y; + break; + case 3: + x = go.nextX(); + y = go.nextY(); + bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y); + penX = x; + penY = y; + break; + } + } + return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height()); + } + static getWidth(code, point, category) { + const data = Glyph.cache.lookup(code, category); + if (data.point != -1) { + point = data.point; + } + const scale = (point * 72) / (data.metrics.font.getResolution() * 100); + return data.bbox.getW() * scale; + } + constructor(code, point, options) { + super(); + this.bbox = new BoundingBox(0, 0, 0, 0); + this.topGlyphs = []; + this.botGlyphs = []; + this.options = {}; + this.scale = 1; + this.code = code; + this.point = point; + this.originShift = { x: 0, y: 0 }; + this.x_shift = 0; + this.y_shift = 0; + if (options) { + this.setOptions(options); + } + else { + this.reset(); + } + } + draw(...args) { + } + getCode() { + return this.code; + } + setOptions(options) { + this.options = Object.assign(Object.assign({}, this.options), options); + this.reset(); + } + setPoint(point) { + this.point = point; + return this; + } + setStave(stave) { + this.stave = stave; + return this; + } + getXShift() { + return this.x_shift; + } + setXShift(x_shift) { + this.x_shift = x_shift; + return this; + } + getYshift() { + return this.y_shift; + } + setYShift(y_shift) { + this.y_shift = y_shift; + return this; + } + reset() { + const data = Glyph.cache.lookup(this.code, this.options.category); + this.metrics = data.metrics; + if (data.point != -1) { + this.point = data.point; + } + this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100); + this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale); + } + checkMetrics() { + return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`); + } + getMetrics() { + const metrics = this.checkMetrics(); + const metricsScale = metrics.scale; + return { + x_min: metrics.x_min * this.scale * metricsScale, + x_max: metrics.x_max * this.scale * metricsScale, + width: this.bbox.getW(), + height: this.bbox.getH(), + scale: this.scale * metricsScale, + x_shift: metrics.x_shift, + y_shift: metrics.y_shift, + outline: metrics.outline, + font: metrics.font, + ha: metrics.ha, + }; + } + setOriginX(x) { + const { bbox } = this; + const originX = Math.abs(bbox.getX() / bbox.getW()); + const xShift = (x - originX) * bbox.getW(); + this.originShift.x = -xShift; + } + setOriginY(y) { + const { bbox } = this; + const originY = Math.abs(bbox.getY() / bbox.getH()); + const yShift = (y - originY) * bbox.getH(); + this.originShift.y = -yShift; + } + setOrigin(x, y) { + this.setOriginX(x); + this.setOriginY(y); + } + render(ctx, x, y) { + const metrics = this.checkMetrics(); + const outline = metrics.outline; + const scale = this.scale * metrics.scale; + this.setRendered(); + this.applyStyle(ctx); + const xPos = x + this.originShift.x + metrics.x_shift; + const yPos = y + this.originShift.y + metrics.y_shift; + Glyph.renderOutline(ctx, outline, scale, xPos, yPos); + this.restoreStyle(ctx); + } + checkStave() { + return defined(this.stave, 'NoStave', 'No stave attached to instance.'); + } + renderToStave(x) { + const context = this.checkContext(); + const metrics = this.checkMetrics(); + const stave = this.checkStave(); + const outline = metrics.outline; + const scale = this.scale * metrics.scale; + this.setRendered(); + this.applyStyle(); + const xPos = x + this.x_shift + metrics.x_shift; + const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift; + Glyph.renderOutline(context, outline, scale, xPos, yPos); + this.restoreStyle(); + } +} +Glyph.cache = new GlyphCache(); +Glyph.CURRENT_CACHE_KEY = ''; +Glyph.MUSIC_FONT_STACK = []; +export { Glyph }; diff --git a/build/esm/src/glyphnote.js b/build/esm/src/glyphnote.js new file mode 100644 index 0000000000..b7b3446b1b --- /dev/null +++ b/build/esm/src/glyphnote.js @@ -0,0 +1,56 @@ +import { Note } from './note.js'; +export class GlyphNote extends Note { + static get CATEGORY() { + return "GlyphNote"; + } + constructor(glyph, noteStruct, options) { + super(noteStruct); + this.options = Object.assign({ ignoreTicks: false, line: 2 }, options); + this.ignore_ticks = this.options.ignoreTicks; + this.setGlyph(glyph); + } + setGlyph(glyph) { + this.glyph = glyph; + this.setWidth(this.glyph.getMetrics().width); + return this; + } + getBoundingBox() { + return this.glyph.getBoundingBox(); + } + preFormat() { + if (!this.preFormatted && this.modifierContext) { + this.modifierContext.preFormat(); + } + this.preFormatted = true; + return this; + } + drawModifiers() { + const ctx = this.checkContext(); + for (let i = 0; i < this.modifiers.length; i++) { + const modifier = this.modifiers[i]; + modifier.setContext(ctx); + modifier.drawWithStyle(); + } + } + getGlyphWidth() { + return this.glyph.getMetrics().width; + } + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('glyphNote', this.getAttribute('id')); + const glyph = this.glyph; + if (!glyph.getContext()) { + glyph.setContext(ctx); + } + glyph.setStave(stave); + glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs()); + const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX(); + glyph.renderToStave(x); + this.drawModifiers(); + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} diff --git a/build/esm/src/gracenote.js b/build/esm/src/gracenote.js new file mode 100644 index 0000000000..29b2aaacda --- /dev/null +++ b/build/esm/src/gracenote.js @@ -0,0 +1,133 @@ +import { StaveNote } from './stavenote.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { RuntimeError } from './util.js'; +export class GraceNote extends StaveNote { + static get CATEGORY() { + return "GraceNote"; + } + static get LEDGER_LINE_OFFSET() { + return 2; + } + static get SCALE() { + return 0.66; + } + constructor(noteStruct) { + super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct)); + this.slash = noteStruct.slash || false; + this.slur = true; + this.buildNoteHeads(); + this.width = 3; + } + getStemExtension() { + if (this.stem_extension_override) { + return this.stem_extension_override; + } + const glyphProps = this.getGlyphProps(); + if (glyphProps) { + let ret = super.getStemExtension(); + if (glyphProps.stem) { + const staveNoteScale = this.getStaveNoteScale(); + ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT; + } + return ret; + } + return 0; + } + getStaveNoteScale() { + return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE; + } + draw() { + super.draw(); + this.setRendered(); + const stem = this.stem; + if (this.slash && stem) { + const staveNoteScale = this.getStaveNoteScale(); + const offsetScale = staveNoteScale / 0.66; + let slashBBox = undefined; + const beam = this.beam; + if (beam) { + if (!beam.postFormatted) { + beam.postFormat(); + } + slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, { + stem: 6 * offsetScale, + beam: 5 * offsetScale, + }); + } + else { + const stem_direction = this.getStemDirection(); + const noteHeadBounds = this.getNoteHeadBounds(); + const noteStemHeight = stem.getHeight(); + let x = this.getAbsoluteX(); + let y = stem_direction === Stem.DOWN + ? noteHeadBounds.y_top - noteStemHeight + : noteHeadBounds.y_bottom - noteStemHeight; + const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension; + let defaultOffsetY = Tables.STEM_HEIGHT; + defaultOffsetY -= defaultOffsetY / 2.8; + defaultOffsetY += defaultStemExtention; + y += defaultOffsetY * staveNoteScale * stem_direction; + const offsets = stem_direction === Stem.UP + ? { + x1: 1, + y1: 0, + x2: 13, + y2: -9, + } + : { + x1: -4, + y1: 1, + x2: 13, + y2: 9, + }; + x += offsets.x1 * offsetScale; + y += offsets.y1 * offsetScale; + slashBBox = { + x1: x, + y1: y, + x2: x + offsets.x2 * offsetScale, + y2: y + offsets.y2 * offsetScale, + }; + } + const ctx = this.checkContext(); + ctx.save(); + ctx.setLineWidth(1 * offsetScale); + ctx.beginPath(); + ctx.moveTo(slashBBox.x1, slashBBox.y1); + ctx.lineTo(slashBBox.x2, slashBBox.y2); + ctx.closePath(); + ctx.stroke(); + ctx.restore(); + } + } + calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) { + const beam = this.beam; + if (!beam) + throw new RuntimeError('NoBeam', "Can't calculate without a beam."); + const beam_slope = beam.slope; + const isBeamEndNote = beam.notes[beam.notes.length - 1] === this; + const scaleX = isBeamEndNote ? -1 : 1; + const beam_angle = Math.atan(beam_slope * scaleX); + const iPointOnBeam = { + dx: Math.cos(beam_angle) * slashBeamOffset, + dy: Math.sin(beam_angle) * slashBeamOffset, + }; + slashStemOffset *= this.getStemDirection(); + const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx); + const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX; + const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem; + const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX; + const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam; + const stemX = this.getStemX(); + const stem0X = beam.notes[0].getStemX(); + const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope; + const ret = { + x1: stemX - protrusion_stem_dx, + y1: stemY + slashStemOffset - protrusion_stem_dy, + x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx, + y2: stemY + iPointOnBeam.dy + protrusion_beam_dy, + }; + return ret; + } +} diff --git a/build/esm/src/gracenotegroup.js b/build/esm/src/gracenotegroup.js new file mode 100644 index 0000000000..74b19ba78f --- /dev/null +++ b/build/esm/src/gracenotegroup.js @@ -0,0 +1,130 @@ +import { Beam } from './beam.js'; +import { Formatter } from './formatter.js'; +import { Modifier } from './modifier.js'; +import { StaveNote } from './stavenote.js'; +import { StaveTie } from './stavetie.js'; +import { Tables } from './tables.js'; +import { TabTie } from './tabtie.js'; +import { isStaveNote } from './typeguard.js'; +import { log } from './util.js'; +import { Voice } from './voice.js'; +function L(...args) { + if (GraceNoteGroup.DEBUG) + log('Vex.Flow.GraceNoteGroup', args); +} +class GraceNoteGroup extends Modifier { + static get CATEGORY() { + return "GraceNoteGroup"; + } + static format(gracenote_groups, state) { + const group_spacing_stave = 4; + const group_spacing_tab = 0; + if (!gracenote_groups || gracenote_groups.length === 0) + return false; + const group_list = []; + let prev_note = null; + let shiftL = 0; + for (let i = 0; i < gracenote_groups.length; ++i) { + const gracenote_group = gracenote_groups[i]; + const note = gracenote_group.getNote(); + const is_stavenote = isStaveNote(note); + const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab; + if (is_stavenote && note !== prev_note) { + for (let n = 0; n < note.keys.length; ++n) { + shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL); + } + prev_note = note; + } + group_list.push({ shift: shiftL, gracenote_group, spacing }); + } + let group_shift = group_list[0].shift; + let formatWidth; + for (let i = 0; i < group_list.length; ++i) { + const gracenote_group = group_list[i].gracenote_group; + gracenote_group.preFormat(); + formatWidth = gracenote_group.getWidth() + group_list[i].spacing; + group_shift = Math.max(formatWidth, group_shift); + } + for (let i = 0; i < group_list.length; ++i) { + const gracenote_group = group_list[i].gracenote_group; + formatWidth = gracenote_group.getWidth() + group_list[i].spacing; + gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding); + } + state.left_shift += group_shift; + return true; + } + constructor(grace_notes, show_slur) { + super(); + this.preFormatted = false; + this.position = Modifier.Position.LEFT; + this.grace_notes = grace_notes; + this.width = 0; + this.show_slur = show_slur; + this.slur = undefined; + this.voice = new Voice({ + num_beats: 4, + beat_value: 4, + resolution: Tables.RESOLUTION, + }).setStrict(false); + this.render_options = { + slur_y_shift: 0, + }; + this.beams = []; + this.voice.addTickables(this.grace_notes); + return this; + } + preFormat() { + if (this.preFormatted) + return; + if (!this.formatter) { + this.formatter = new Formatter(); + } + this.formatter.joinVoices([this.voice]).format([this.voice], 0, {}); + this.setWidth(this.formatter.getMinTotalWidth()); + this.preFormatted = true; + } + beamNotes(grace_notes) { + grace_notes = grace_notes || this.grace_notes; + if (grace_notes.length > 1) { + const beam = new Beam(grace_notes); + beam.render_options.beam_width = 3; + beam.render_options.partial_beam_length = 4; + this.beams.push(beam); + } + return this; + } + setWidth(width) { + this.width = width; + return this; + } + getWidth() { + return this.width + StaveNote.minNoteheadPadding; + } + getGraceNotes() { + return this.grace_notes; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + L('Drawing grace note group for:', note); + this.alignSubNotesWithNote(this.getGraceNotes(), note); + this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw()); + this.beams.forEach((beam) => beam.setContext(ctx).draw()); + if (this.show_slur) { + const is_stavenote = isStaveNote(note); + const TieClass = is_stavenote ? StaveTie : TabTie; + this.slur = new TieClass({ + last_note: this.grace_notes[0], + first_note: note, + first_indices: [0], + last_indices: [0], + }); + this.slur.render_options.cp2 = 12; + this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift; + this.slur.setContext(ctx).draw(); + } + } +} +GraceNoteGroup.DEBUG = false; +export { GraceNoteGroup }; diff --git a/build/esm/src/gracetabnote.js b/build/esm/src/gracetabnote.js new file mode 100644 index 0000000000..8aba164203 --- /dev/null +++ b/build/esm/src/gracetabnote.js @@ -0,0 +1,12 @@ +import { Font } from './font.js'; +import { TabNote } from './tabnote.js'; +export class GraceTabNote extends TabNote { + static get CATEGORY() { + return "GraceTabNote"; + } + constructor(noteStruct) { + super(noteStruct, false); + this.render_options = Object.assign(Object.assign({}, this.render_options), { y_shift: 0.3, scale: 0.6, font: `7.5pt ${Font.SANS_SERIF}` }); + this.updateWidth(); + } +} diff --git a/build/esm/src/index.js b/build/esm/src/index.js new file mode 100644 index 0000000000..2c9f8c57d8 --- /dev/null +++ b/build/esm/src/index.js @@ -0,0 +1,89 @@ +export * from './accidental.js'; +export * from './annotation.js'; +export * from './articulation.js'; +export * from './barnote.js'; +export * from './beam.js'; +export * from './bend.js'; +export * from './boundingbox.js'; +export * from './boundingboxcomputation.js'; +export * from './canvascontext.js'; +export * from './chordsymbol.js'; +export * from './clef.js'; +export * from './clefnote.js'; +export * from './crescendo.js'; +export * from './curve.js'; +export * from './dot.js'; +export * from './easyscore.js'; +export * from './element.js'; +export * from './factory.js'; +export * from './flow.js'; +export * from './font.js'; +export * from './formatter.js'; +export * from './fraction.js'; +export * from './frethandfinger.js'; +export * from './ghostnote.js'; +export * from './glyph.js'; +export * from './glyphnote.js'; +export * from './gracenote.js'; +export * from './gracenotegroup.js'; +export * from './gracetabnote.js'; +export * from './keymanager.js'; +export * from './keysignature.js'; +export * from './keysignote.js'; +export * from './modifier.js'; +export * from './modifiercontext.js'; +export * from './multimeasurerest.js'; +export * from './music.js'; +export * from './note.js'; +export * from './notehead.js'; +export * from './notesubgroup.js'; +export * from './ornament.js'; +export * from './parenthesis.js'; +export * from './parser.js'; +export * from './pedalmarking.js'; +export * from './registry.js'; +export * from './rendercontext.js'; +export * from './renderer.js'; +export * from './repeatnote.js'; +export * from './stave.js'; +export * from './stavebarline.js'; +export * from './staveconnector.js'; +export * from './stavehairpin.js'; +export * from './staveline.js'; +export * from './stavemodifier.js'; +export * from './stavenote.js'; +export * from './staverepetition.js'; +export * from './stavesection.js'; +export * from './stavetempo.js'; +export * from './stavetext.js'; +export * from './stavetie.js'; +export * from './stavevolta.js'; +export * from './stem.js'; +export * from './stemmablenote.js'; +export * from './stringnumber.js'; +export * from './strokes.js'; +export * from './svgcontext.js'; +export * from './system.js'; +export * from './tabnote.js'; +export * from './tabslide.js'; +export * from './tabstave.js'; +export * from './tabtie.js'; +export * from './textbracket.js'; +export * from './textdynamics.js'; +export * from './textformatter.js'; +export * from './textnote.js'; +export * from './tickable.js'; +export * from './tickcontext.js'; +export * from './timesigglyph.js'; +export * from './timesignature.js'; +export * from './timesignote.js'; +export * from './tremolo.js'; +export * from './tuning.js'; +export * from './tuplet.js'; +export * from './typeguard.js'; +export * from './util.js'; +export * from './vex.js'; +export * from './vibrato.js'; +export * from './vibratobracket.js'; +export * from './voice.js'; +export * from './web.js'; diff --git a/build/esm/src/keymanager.js b/build/esm/src/keymanager.js new file mode 100644 index 0000000000..6ccffe83c2 --- /dev/null +++ b/build/esm/src/keymanager.js @@ -0,0 +1,99 @@ +import { Music } from './music.js'; +import { RuntimeError } from './util.js'; +export class KeyManager { + constructor(key) { + this.music = new Music(); + this.setKey(key); + } + setKey(key) { + this.key = key; + this.reset(); + return this; + } + getKey() { + return this.key; + } + reset() { + this.keyParts = this.music.getKeyParts(this.key); + this.keyString = this.keyParts.root; + if (this.keyParts.accidental) + this.keyString += this.keyParts.accidental; + const is_supported_type = Music.scaleTypes[this.keyParts.type]; + if (!is_supported_type) { + throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`); + } + this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]); + this.scaleMap = {}; + this.scaleMapByValue = {}; + this.originalScaleMapByValue = {}; + const noteLocation = Music.root_indices[this.keyParts.root]; + for (let i = 0; i < Music.roots.length; ++i) { + const index = (noteLocation + i) % Music.roots.length; + const rootName = Music.roots[index]; + const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]); + this.scaleMap[rootName] = noteName; + this.scaleMapByValue[this.scale[i]] = noteName; + this.originalScaleMapByValue[this.scale[i]] = noteName; + } + return this; + } + getAccidental(key) { + const root = this.music.getKeyParts(key).root; + const parts = this.music.getNoteParts(this.scaleMap[root]); + return { + note: this.scaleMap[root], + accidental: parts.accidental, + }; + } + selectNote(note) { + note = note.toLowerCase(); + const parts = this.music.getNoteParts(note); + const scaleNote = this.scaleMap[parts.root]; + const modparts = this.music.getNoteParts(scaleNote); + if (scaleNote === note) { + return { + note: scaleNote, + accidental: parts.accidental, + change: false, + }; + } + const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)]; + if (valueNote != null) { + return { + note: valueNote, + accidental: this.music.getNoteParts(valueNote).accidental, + change: false, + }; + } + const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)]; + if (originalValueNote != null) { + this.scaleMap[modparts.root] = originalValueNote; + delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)]; + this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote; + return { + note: originalValueNote, + accidental: this.music.getNoteParts(originalValueNote).accidental, + change: true, + }; + } + if (modparts.root === note) { + delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])]; + this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root; + this.scaleMap[modparts.root] = modparts.root; + return { + note: modparts.root, + accidental: undefined, + change: true, + }; + } + delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])]; + this.scaleMapByValue[this.music.getNoteValue(note)] = note; + delete this.scaleMap[modparts.root]; + this.scaleMap[modparts.root] = note; + return { + note, + accidental: parts.accidental, + change: true, + }; + } +} diff --git a/build/esm/src/keysignature.js b/build/esm/src/keysignature.js new file mode 100644 index 0000000000..83bdcb979f --- /dev/null +++ b/build/esm/src/keysignature.js @@ -0,0 +1,258 @@ +import { Glyph } from './glyph.js'; +import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; +import { Tables } from './tables.js'; +import { defined } from './util.js'; +class KeySignature extends StaveModifier { + static get CATEGORY() { + return "KeySignature"; + } + constructor(keySpec, cancelKeySpec, alterKeySpec) { + super(); + this.accList = []; + this.setKeySig(keySpec, cancelKeySpec, alterKeySpec); + this.setPosition(StaveModifierPosition.BEGIN); + this.glyphFontScale = Tables.NOTATION_FONT_SCALE; + this.glyphs = []; + this.xPositions = []; + this.paddingForced = false; + } + convertToGlyph(acc, nextAcc) { + const accGlyphData = Tables.accidentalCodes(acc.type); + const glyph = new Glyph(accGlyphData.code, this.glyphFontScale); + let extraWidth = 1; + if (acc.type === 'n' && nextAcc) { + const spacing = KeySignature.accidentalSpacing[nextAcc.type]; + if (spacing) { + const isAbove = nextAcc.line >= acc.line; + extraWidth = isAbove ? spacing.above : spacing.below; + } + } + this.placeGlyphOnLine(glyph, this.checkStave(), acc.line); + this.glyphs.push(glyph); + const xPosition = this.xPositions[this.xPositions.length - 1]; + const glyphWidth = glyph.getMetrics().width + extraWidth; + this.xPositions.push(xPosition + glyphWidth); + this.width += glyphWidth; + } + cancelKey(spec) { + this.formatted = false; + this.cancelKeySpec = spec; + return this; + } + convertToCancelAccList(spec) { + const cancel_accList = Tables.keySignature(spec); + const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type; + const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length; + if (naturals < 1) + return undefined; + const cancelled = []; + for (let i = 0; i < naturals; i++) { + let index = i; + if (!different_types) { + index = cancel_accList.length - naturals + i; + } + const acc = cancel_accList[index]; + cancelled.push({ type: 'n', line: acc.line }); + } + this.accList = cancelled.concat(this.accList); + return { + accList: cancelled, + type: cancel_accList[0].type, + }; + } + addToStave(stave) { + this.paddingForced = true; + stave.addModifier(this); + return this; + } + convertAccLines(clef, type, accList = this.accList) { + let offset = 0.0; + let customLines; + switch (clef) { + case 'soprano': + if (type === '#') + customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1]; + else + offset = -1; + break; + case 'mezzo-soprano': + if (type === 'b') + customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5]; + else + offset = 1.5; + break; + case 'alto': + offset = 0.5; + break; + case 'tenor': + if (type === '#') + customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5]; + else + offset = -0.5; + break; + case 'baritone-f': + case 'baritone-c': + if (type === 'b') + customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2]; + else + offset = 2; + break; + case 'bass': + case 'french': + offset = 1; + break; + default: + break; + } + let i; + if (typeof customLines !== 'undefined') { + for (i = 0; i < accList.length; ++i) { + accList[i].line = customLines[i]; + } + } + else if (offset !== 0) { + for (i = 0; i < accList.length; ++i) { + accList[i].line += offset; + } + } + } + getPadding(index) { + if (!this.formatted) + this.format(); + return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding; + } + getWidth() { + if (!this.formatted) + this.format(); + return this.width; + } + setKeySig(keySpec, cancelKeySpec, alterKeySpec) { + this.formatted = false; + this.keySpec = keySpec; + this.cancelKeySpec = cancelKeySpec; + this.alterKeySpec = alterKeySpec; + return this; + } + alterKey(alterKeySpec) { + this.formatted = false; + this.alterKeySpec = alterKeySpec; + return this; + } + convertToAlterAccList(alterKeySpec) { + const max = Math.min(alterKeySpec.length, this.accList.length); + for (let i = 0; i < max; ++i) { + if (alterKeySpec[i]) { + this.accList[i].type = alterKeySpec[i]; + } + } + } + format() { + const stave = this.checkStave(); + this.width = 0; + this.glyphs = []; + this.xPositions = [0]; + this.accList = Tables.keySignature(defined(this.keySpec)); + const accList = this.accList; + const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined; + let cancelAccList; + if (this.cancelKeySpec) { + cancelAccList = this.convertToCancelAccList(this.cancelKeySpec); + } + if (this.alterKeySpec) { + this.convertToAlterAccList(this.alterKeySpec); + } + if (this.accList.length > 0) { + const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef(); + if (cancelAccList) { + this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList); + } + this.convertAccLines(clef, firstAccidentalType, accList); + for (let i = 0; i < this.accList.length; ++i) { + this.convertToGlyph(this.accList[i], this.accList[i + 1]); + } + } + this.formatted = true; + } + getGlyphs() { + if (!this.formatted) + this.format(); + return this.glyphs; + } + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + if (!this.formatted) + this.format(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('keysignature', this.getAttribute('id')); + for (let i = 0; i < this.glyphs.length; i++) { + const glyph = this.glyphs[i]; + const x = this.x + this.xPositions[i]; + glyph.setStave(stave); + glyph.setContext(ctx); + glyph.renderToStave(x); + } + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} +KeySignature.accidentalSpacing = { + '#': { + above: 6, + below: 4, + }, + b: { + above: 4, + below: 7, + }, + n: { + above: 4, + below: 1, + }, + '##': { + above: 6, + below: 4, + }, + bb: { + above: 4, + below: 7, + }, + db: { + above: 4, + below: 7, + }, + d: { + above: 4, + below: 7, + }, + bbs: { + above: 4, + below: 7, + }, + '++': { + above: 6, + below: 4, + }, + '+': { + above: 6, + below: 4, + }, + '+-': { + above: 6, + below: 4, + }, + '++-': { + above: 6, + below: 4, + }, + bs: { + above: 4, + below: 10, + }, + bss: { + above: 4, + below: 10, + }, +}; +export { KeySignature }; diff --git a/build/esm/src/keysignote.js b/build/esm/src/keysignote.js new file mode 100644 index 0000000000..13998c1698 --- /dev/null +++ b/build/esm/src/keysignote.js @@ -0,0 +1,28 @@ +import { KeySignature } from './keysignature.js'; +import { Note } from './note.js'; +export class KeySigNote extends Note { + static get CATEGORY() { + return "KeySigNote"; + } + constructor(keySpec, cancelKeySpec, alterKeySpec) { + super({ duration: 'b' }); + this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec); + this.ignore_ticks = true; + } + addToModifierContext(mc) { + return this; + } + preFormat() { + this.preFormatted = true; + this.keySignature.setStave(this.checkStave()); + this.setWidth(this.keySignature.getWidth()); + return this; + } + draw() { + const ctx = this.checkStave().checkContext(); + this.setRendered(); + this.keySignature.setX(this.getAbsoluteX()); + this.keySignature.setContext(ctx); + this.keySignature.draw(); + } +} diff --git a/build/esm/src/modifier.js b/build/esm/src/modifier.js new file mode 100644 index 0000000000..2da5e569b1 --- /dev/null +++ b/build/esm/src/modifier.js @@ -0,0 +1,128 @@ +import { Element } from './element.js'; +import { defined, RuntimeError } from './util.js'; +export var ModifierPosition; +(function (ModifierPosition) { + ModifierPosition[ModifierPosition["CENTER"] = 0] = "CENTER"; + ModifierPosition[ModifierPosition["LEFT"] = 1] = "LEFT"; + ModifierPosition[ModifierPosition["RIGHT"] = 2] = "RIGHT"; + ModifierPosition[ModifierPosition["ABOVE"] = 3] = "ABOVE"; + ModifierPosition[ModifierPosition["BELOW"] = 4] = "BELOW"; +})(ModifierPosition || (ModifierPosition = {})); +export class Modifier extends Element { + static get CATEGORY() { + return "Modifier"; + } + static get Position() { + return ModifierPosition; + } + static get PositionString() { + return { + center: ModifierPosition.CENTER, + above: ModifierPosition.ABOVE, + below: ModifierPosition.BELOW, + left: ModifierPosition.LEFT, + right: ModifierPosition.RIGHT, + }; + } + constructor() { + super(); + this.width = 0; + this.text_line = 0; + this.position = Modifier.Position.LEFT; + this.x_shift = 0; + this.y_shift = 0; + this.spacingFromNextModifier = 0; + } + reset() { + } + getWidth() { + return this.width; + } + setWidth(width) { + this.width = width; + return this; + } + getNote() { + return defined(this.note, 'NoNote', 'Modifier has no note.'); + } + checkAttachedNote() { + const category = this.getCategory(); + defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`); + return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`); + } + setNote(note) { + this.note = note; + return this; + } + getIndex() { + return this.index; + } + checkIndex() { + return defined(this.index, 'NoIndex', 'Modifier has an invalid index.'); + } + setIndex(index) { + this.index = index; + return this; + } + getModifierContext() { + return this.modifierContext; + } + checkModifierContext() { + return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required'); + } + setModifierContext(c) { + this.modifierContext = c; + return this; + } + getPosition() { + return this.position; + } + setPosition(position) { + this.position = typeof position === 'string' ? Modifier.PositionString[position] : position; + this.reset(); + return this; + } + setTextLine(line) { + this.text_line = line; + return this; + } + setYShift(y) { + this.y_shift = y; + return this; + } + setSpacingFromNextModifier(x) { + this.spacingFromNextModifier = x; + } + getSpacingFromNextModifier() { + return this.spacingFromNextModifier; + } + setXShift(x) { + this.x_shift = 0; + if (this.position === Modifier.Position.LEFT) { + this.x_shift -= x; + } + else { + this.x_shift += x; + } + return this; + } + getXShift() { + return this.x_shift; + } + draw() { + this.checkContext(); + throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.'); + } + alignSubNotesWithNote(subNotes, note) { + const tickContext = note.getTickContext(); + const metrics = tickContext.getMetrics(); + const stave = note.getStave(); + const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier(); + subNotes.forEach((subNote) => { + const subTickContext = subNote.getTickContext(); + if (stave) + subNote.setStave(stave); + subTickContext.setXOffset(subNoteXOffset); + }); + } +} diff --git a/build/esm/src/modifiercontext.js b/build/esm/src/modifiercontext.js new file mode 100644 index 0000000000..e85d41ec7b --- /dev/null +++ b/build/esm/src/modifiercontext.js @@ -0,0 +1,111 @@ +import { Accidental } from './accidental.js'; +import { Annotation } from './annotation.js'; +import { Articulation } from './articulation.js'; +import { Bend } from './bend.js'; +import { ChordSymbol } from './chordsymbol.js'; +import { Dot } from './dot.js'; +import { FretHandFinger } from './frethandfinger.js'; +import { GraceNoteGroup } from './gracenotegroup.js'; +import { NoteSubGroup } from './notesubgroup.js'; +import { Ornament } from './ornament.js'; +import { Parenthesis } from './parenthesis.js'; +import { StaveNote } from './stavenote.js'; +import { StringNumber } from './stringnumber.js'; +import { Stroke } from './strokes.js'; +import { log, RuntimeError } from './util.js'; +import { Vibrato } from './vibrato.js'; +function L(...args) { + if (ModifierContext.DEBUG) + log('Vex.Flow.ModifierContext', args); +} +class ModifierContext { + constructor() { + this.state = { + left_shift: 0, + right_shift: 0, + text_line: 0, + top_text_line: 0, + }; + this.members = {}; + this.preFormatted = false; + this.postFormatted = false; + this.formatted = false; + this.width = 0; + this.spacing = 0; + } + addModifier(member) { + L('addModifier is deprecated, use addMember instead.'); + return this.addMember(member); + } + addMember(member) { + const category = member.getCategory(); + if (!this.members[category]) { + this.members[category] = []; + } + this.members[category].push(member); + member.setModifierContext(this); + this.preFormatted = false; + return this; + } + getModifiers(category) { + L('getModifiers is deprecated, use getMembers instead.'); + return this.getMembers(category); + } + getMembers(category) { + var _a; + return (_a = this.members[category]) !== null && _a !== void 0 ? _a : []; + } + getWidth() { + return this.width; + } + getLeftShift() { + return this.state.left_shift; + } + getRightShift() { + return this.state.right_shift; + } + getState() { + return this.state; + } + getMetrics() { + if (!this.formatted) { + throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.'); + } + return { + width: this.state.left_shift + this.state.right_shift + this.spacing, + spacing: this.spacing, + }; + } + preFormat() { + if (this.preFormatted) + return; + L('Preformatting ModifierContext'); + const state = this.state; + const members = this.members; + StaveNote.format(members["StaveNote"], state); + Parenthesis.format(members["Parenthesis"], state); + Dot.format(members["Dot"], state); + FretHandFinger.format(members["FretHandFinger"], state); + Accidental.format(members["Accidental"], state); + Stroke.format(members["Stroke"], state); + GraceNoteGroup.format(members["GraceNoteGroup"], state); + NoteSubGroup.format(members["NoteSubGroup"], state); + StringNumber.format(members["StringNumber"], state); + Articulation.format(members["Articulation"], state); + Ornament.format(members["Ornament"], state); + Annotation.format(members["Annotation"], state); + ChordSymbol.format(members["ChordSymbol"], state); + Bend.format(members["Bend"], state); + Vibrato.format(members["Vibrato"], state, this); + this.width = state.left_shift + state.right_shift; + this.preFormatted = true; + } + postFormat() { + if (this.postFormatted) + return; + L('Postformatting ModifierContext'); + StaveNote.postFormat(this.getMembers("StaveNote")); + } +} +ModifierContext.DEBUG = false; +export { ModifierContext }; diff --git a/build/esm/src/multimeasurerest.js b/build/esm/src/multimeasurerest.js new file mode 100644 index 0000000000..f5ccc5ecfd --- /dev/null +++ b/build/esm/src/multimeasurerest.js @@ -0,0 +1,174 @@ +import { Element } from './element.js'; +import { Glyph } from './glyph.js'; +import { NoteHead } from './notehead.js'; +import { StaveModifierPosition } from './stavemodifier.js'; +import { Tables } from './tables.js'; +import { TimeSignature } from './timesignature.js'; +import { isBarline } from './typeguard.js'; +import { defined } from './util.js'; +let semibreve_rest; +function get_semibreve_rest() { + if (!semibreve_rest) { + const noteHead = new NoteHead({ duration: 'w', note_type: 'r' }); + semibreve_rest = { + glyph_font_scale: noteHead.render_options.glyph_font_scale, + glyph_code: noteHead.glyph_code, + width: noteHead.getWidth(), + }; + } + return semibreve_rest; +} +export class MultiMeasureRest extends Element { + static get CATEGORY() { + return "MultiMeasureRest"; + } + constructor(number_of_measures, options) { + var _a; + super(); + this.xs = { left: NaN, right: NaN }; + this.hasPaddingLeft = false; + this.hasPaddingRight = false; + this.hasLineThickness = false; + this.hasSymbolSpacing = false; + this.number_of_measures = number_of_measures; + this.hasPaddingLeft = typeof options.padding_left === 'number'; + this.hasPaddingRight = typeof options.padding_right === 'number'; + this.hasLineThickness = typeof options.line_thickness === 'number'; + this.hasSymbolSpacing = typeof options.symbol_spacing === 'number'; + const musicFont = Tables.currentMusicFont(); + this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options); + const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0); + this.render_options.number_line += fontLineShift; + } + getXs() { + return this.xs; + } + setStave(stave) { + this.stave = stave; + return this; + } + getStave() { + return this.stave; + } + checkStave() { + return defined(this.stave, 'NoStave', 'No stave attached to instance.'); + } + drawLine(stave, ctx, left, right, spacingBetweenLines) { + const options = this.render_options; + const y = stave.getYForLine(options.line); + const padding = (right - left) * 0.1; + left += padding; + right -= padding; + let lineThicknessHalf; + if (this.hasLineThickness) { + lineThicknessHalf = options.line_thickness * 0.5; + } + else { + lineThicknessHalf = spacingBetweenLines * 0.25; + } + const serifThickness = options.serif_thickness; + const top = y - spacingBetweenLines; + const bot = y + spacingBetweenLines; + const leftIndented = left + serifThickness; + const rightIndented = right - serifThickness; + const lineTop = y - lineThicknessHalf; + const lineBottom = y + lineThicknessHalf; + ctx.save(); + ctx.beginPath(); + ctx.moveTo(left, top); + ctx.lineTo(leftIndented, top); + ctx.lineTo(leftIndented, lineTop); + ctx.lineTo(rightIndented, lineTop); + ctx.lineTo(rightIndented, top); + ctx.lineTo(right, top); + ctx.lineTo(right, bot); + ctx.lineTo(rightIndented, bot); + ctx.lineTo(rightIndented, lineBottom); + ctx.lineTo(leftIndented, lineBottom); + ctx.lineTo(leftIndented, bot); + ctx.lineTo(left, bot); + ctx.closePath(); + ctx.fill(); + } + drawSymbols(stave, ctx, left, right, spacingBetweenLines) { + const n4 = Math.floor(this.number_of_measures / 4); + const n = this.number_of_measures % 4; + const n2 = Math.floor(n / 2); + const n1 = n % 2; + const options = this.render_options; + semibreve_rest = undefined; + const rest = get_semibreve_rest(); + const rest_scale = options.semibreve_rest_glyph_scale; + const rest_width = rest.width * (rest_scale / rest.glyph_font_scale); + const glyphs = { + 2: { + width: rest_width * 0.5, + height: spacingBetweenLines, + }, + 1: { + width: rest_width, + }, + }; + const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10; + const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing; + let x = left + (right - left) * 0.5 - width * 0.5; + const line = options.line; + const yTop = stave.getYForLine(line - 1); + const yMiddle = stave.getYForLine(line); + const yBottom = stave.getYForLine(line + 1); + ctx.save(); + ctx.setStrokeStyle('none'); + ctx.setLineWidth(0); + for (let i = 0; i < n4; ++i) { + ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height); + ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height); + x += glyphs[2].width + spacing; + } + for (let i = 0; i < n2; ++i) { + ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height); + x += glyphs[2].width + spacing; + } + for (let i = 0; i < n1; ++i) { + Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code); + x += glyphs[1].width + spacing; + } + ctx.restore(); + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const stave = this.checkStave(); + let left = stave.getNoteStartX(); + let right = stave.getNoteEndX(); + const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN); + if (begModifiers.length === 1 && isBarline(begModifiers[0])) { + left -= begModifiers[0].getWidth(); + } + const options = this.render_options; + if (this.hasPaddingLeft) { + left = stave.getX() + options.padding_left; + } + if (this.hasPaddingRight) { + right = stave.getX() + stave.getWidth() - options.padding_right; + } + this.xs.left = left; + this.xs.right = right; + const spacingBetweenLines = options.spacing_between_lines_px; + if (options.use_symbols) { + this.drawSymbols(stave, ctx, left, right, spacingBetweenLines); + } + else { + this.drawLine(stave, ctx, left, right, spacingBetweenLines); + } + if (options.show_number) { + const timeSpec = '/' + this.number_of_measures; + const timeSig = new TimeSignature(timeSpec, 0, false); + timeSig.point = options.number_glyph_point; + timeSig.setTimeSig(timeSpec); + timeSig.setStave(stave); + timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5); + timeSig.bottomLine = options.number_line; + timeSig.setContext(ctx).draw(); + } + } +} diff --git a/build/esm/src/music.js b/build/esm/src/music.js new file mode 100644 index 0000000000..d92c3749fe --- /dev/null +++ b/build/esm/src/music.js @@ -0,0 +1,322 @@ +import { RuntimeError } from './util.js'; +export class Music { + static get NUM_TONES() { + return this.canonical_notes.length; + } + static get roots() { + return ['c', 'd', 'e', 'f', 'g', 'a', 'b']; + } + static get root_values() { + return [0, 2, 4, 5, 7, 9, 11]; + } + static get root_indices() { + return { + c: 0, + d: 1, + e: 2, + f: 3, + g: 4, + a: 5, + b: 6, + }; + } + static get canonical_notes() { + return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b']; + } + static get diatonic_intervals() { + return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave']; + } + static get diatonic_accidentals() { + return { + unison: { note: 0, accidental: 0 }, + m2: { note: 1, accidental: -1 }, + M2: { note: 1, accidental: 0 }, + m3: { note: 2, accidental: -1 }, + M3: { note: 2, accidental: 0 }, + p4: { note: 3, accidental: 0 }, + dim5: { note: 4, accidental: -1 }, + p5: { note: 4, accidental: 0 }, + m6: { note: 5, accidental: -1 }, + M6: { note: 5, accidental: 0 }, + b7: { note: 6, accidental: -1 }, + M7: { note: 6, accidental: 0 }, + octave: { note: 7, accidental: 0 }, + }; + } + static get intervals() { + return { + u: 0, + unison: 0, + m2: 1, + b2: 1, + min2: 1, + S: 1, + H: 1, + 2: 2, + M2: 2, + maj2: 2, + T: 2, + W: 2, + m3: 3, + b3: 3, + min3: 3, + M3: 4, + 3: 4, + maj3: 4, + 4: 5, + p4: 5, + '#4': 6, + b5: 6, + aug4: 6, + dim5: 6, + 5: 7, + p5: 7, + '#5': 8, + b6: 8, + aug5: 8, + 6: 9, + M6: 9, + maj6: 9, + b7: 10, + m7: 10, + min7: 10, + dom7: 10, + M7: 11, + maj7: 11, + 8: 12, + octave: 12, + }; + } + static get scales() { + return { + major: [2, 2, 1, 2, 2, 2, 1], + minor: [2, 1, 2, 2, 1, 2, 2], + ionian: [2, 2, 1, 2, 2, 2, 1], + dorian: [2, 1, 2, 2, 2, 1, 2], + phyrgian: [1, 2, 2, 2, 1, 2, 2], + lydian: [2, 2, 2, 1, 2, 2, 1], + mixolydian: [2, 2, 1, 2, 2, 1, 2], + aeolian: [2, 1, 2, 2, 1, 2, 2], + locrian: [1, 2, 2, 1, 2, 2, 2], + }; + } + static get scaleTypes() { + return { + M: Music.scales.major, + m: Music.scales.minor, + }; + } + static get accidentals() { + return ['bb', 'b', 'n', '#', '##']; + } + static get noteValues() { + return { + c: { root_index: 0, int_val: 0 }, + cn: { root_index: 0, int_val: 0 }, + 'c#': { root_index: 0, int_val: 1 }, + 'c##': { root_index: 0, int_val: 2 }, + cb: { root_index: 0, int_val: 11 }, + cbb: { root_index: 0, int_val: 10 }, + d: { root_index: 1, int_val: 2 }, + dn: { root_index: 1, int_val: 2 }, + 'd#': { root_index: 1, int_val: 3 }, + 'd##': { root_index: 1, int_val: 4 }, + db: { root_index: 1, int_val: 1 }, + dbb: { root_index: 1, int_val: 0 }, + e: { root_index: 2, int_val: 4 }, + en: { root_index: 2, int_val: 4 }, + 'e#': { root_index: 2, int_val: 5 }, + 'e##': { root_index: 2, int_val: 6 }, + eb: { root_index: 2, int_val: 3 }, + ebb: { root_index: 2, int_val: 2 }, + f: { root_index: 3, int_val: 5 }, + fn: { root_index: 3, int_val: 5 }, + 'f#': { root_index: 3, int_val: 6 }, + 'f##': { root_index: 3, int_val: 7 }, + fb: { root_index: 3, int_val: 4 }, + fbb: { root_index: 3, int_val: 3 }, + g: { root_index: 4, int_val: 7 }, + gn: { root_index: 4, int_val: 7 }, + 'g#': { root_index: 4, int_val: 8 }, + 'g##': { root_index: 4, int_val: 9 }, + gb: { root_index: 4, int_val: 6 }, + gbb: { root_index: 4, int_val: 5 }, + a: { root_index: 5, int_val: 9 }, + an: { root_index: 5, int_val: 9 }, + 'a#': { root_index: 5, int_val: 10 }, + 'a##': { root_index: 5, int_val: 11 }, + ab: { root_index: 5, int_val: 8 }, + abb: { root_index: 5, int_val: 7 }, + b: { root_index: 6, int_val: 11 }, + bn: { root_index: 6, int_val: 11 }, + 'b#': { root_index: 6, int_val: 0 }, + 'b##': { root_index: 6, int_val: 1 }, + bb: { root_index: 6, int_val: 10 }, + bbb: { root_index: 6, int_val: 9 }, + }; + } + isValidNoteValue(note) { + return note >= 0 && note < Music.canonical_notes.length; + } + isValidIntervalValue(interval) { + return interval >= 0 && interval < Music.diatonic_intervals.length; + } + getNoteParts(noteString) { + if (!noteString || noteString.length < 1) { + throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString); + } + if (noteString.length > 3) { + throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString); + } + const note = noteString.toLowerCase(); + const regex = /^([cdefgab])(b|bb|n|#|##)?$/; + const match = regex.exec(note); + if (match !== null) { + const root = match[1]; + const accidental = match[2]; + return { + root, + accidental, + }; + } + else { + throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString); + } + } + getKeyParts(keyString) { + if (!keyString || keyString.length < 1) { + throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString); + } + const key = keyString.toLowerCase(); + const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/; + const match = regex.exec(key); + if (match !== null) { + const root = match[1]; + const accidental = match[2]; + let type = match[3]; + if (!type) + type = 'M'; + return { + root, + accidental, + type, + }; + } + else { + throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`); + } + } + getNoteValue(noteString) { + const value = Music.noteValues[noteString]; + if (value === undefined) { + throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`); + } + return value.int_val; + } + getIntervalValue(intervalString) { + const value = Music.intervals[intervalString]; + if (value === undefined) { + throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`); + } + return value; + } + getCanonicalNoteName(noteValue) { + if (!this.isValidNoteValue(noteValue)) { + throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`); + } + return Music.canonical_notes[noteValue]; + } + getCanonicalIntervalName(intervalValue) { + if (!this.isValidIntervalValue(intervalValue)) { + throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`); + } + return Music.diatonic_intervals[intervalValue]; + } + getRelativeNoteValue(noteValue, intervalValue, direction = 1) { + if (direction !== 1 && direction !== -1) { + throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`); + } + let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES; + if (sum < 0) + sum += Music.NUM_TONES; + return sum; + } + getRelativeNoteName(root, noteValue) { + const parts = this.getNoteParts(root); + const rootValue = this.getNoteValue(parts.root); + let interval = noteValue - rootValue; + if (Math.abs(interval) > Music.NUM_TONES - 3) { + let multiplier = 1; + if (interval > 0) + multiplier = -1; + const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier; + if (Math.abs(reverse_interval) > 2) { + throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`); + } + else { + interval = reverse_interval; + } + } + if (Math.abs(interval) > 2) { + throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`); + } + let relativeNoteName = parts.root; + if (interval > 0) { + for (let i = 1; i <= interval; ++i) { + relativeNoteName += '#'; + } + } + else if (interval < 0) { + for (let i = -1; i >= interval; --i) { + relativeNoteName += 'b'; + } + } + return relativeNoteName; + } + getScaleTones(key, intervals) { + const tones = [key]; + let nextNote = key; + for (let i = 0; i < intervals.length; i++) { + nextNote = this.getRelativeNoteValue(nextNote, intervals[i]); + if (nextNote !== key) + tones.push(nextNote); + } + return tones; + } + getIntervalBetween(note1, note2, direction = 1) { + if (direction !== 1 && direction !== -1) { + throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`); + } + if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) { + throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`); + } + let difference = direction === 1 ? note2 - note1 : note1 - note2; + if (difference < 0) + difference += Music.NUM_TONES; + return difference; + } + createScaleMap(keySignature) { + const keySigParts = this.getKeyParts(keySignature); + if (!keySigParts.type) + throw new RuntimeError('BadArguments', 'Unsupported key type: undefined'); + const scaleName = Music.scaleTypes[keySigParts.type]; + let keySigString = keySigParts.root; + if (keySigParts.accidental) + keySigString += keySigParts.accidental; + if (!scaleName) + throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature); + const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName); + const noteLocation = Music.root_indices[keySigParts.root]; + const scaleMap = {}; + for (let i = 0; i < Music.roots.length; ++i) { + const index = (noteLocation + i) % Music.roots.length; + const rootName = Music.roots[index]; + let noteName = this.getRelativeNoteName(rootName, scale[i]); + if (noteName.length === 1) { + noteName += 'n'; + } + scaleMap[rootName] = noteName; + } + return scaleMap; + } +} diff --git a/build/esm/src/note.js b/build/esm/src/note.js new file mode 100644 index 0000000000..a31bb3134a --- /dev/null +++ b/build/esm/src/note.js @@ -0,0 +1,369 @@ +import { Font } from './font.js'; +import { drawDot } from './rendercontext.js'; +import { Tables } from './tables.js'; +import { Tickable } from './tickable.js'; +import { defined, RuntimeError } from './util.js'; +export class Note extends Tickable { + static get CATEGORY() { + return "Note"; + } + static plotMetrics(ctx, note, yPos) { + const metrics = note.getMetrics(); + const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx; + const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx; + const xAbs = note.getAbsoluteX(); + const xPost1 = note.getAbsoluteX() + metrics.notePx; + const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx; + const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx; + const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0); + const xWidth = xEnd - xStart; + ctx.save(); + ctx.setFont(Font.SANS_SERIF, 8); + ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos); + const y = yPos + 7; + function stroke(x1, x2, color, yy = y) { + ctx.beginPath(); + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + ctx.setLineWidth(3); + ctx.moveTo(x1 + note.getXShift(), yy); + ctx.lineTo(x2 + note.getXShift(), yy); + ctx.stroke(); + } + stroke(xStart, xPre1, 'red'); + stroke(xPre1, xAbs, '#999'); + stroke(xAbs, xPost1, 'green'); + stroke(xPost1, xPost2, '#999'); + stroke(xPost2, xEnd, 'red'); + stroke(xEnd, xFreedomRight, '#DD0'); + stroke(xStart - note.getXShift(), xStart, '#BBB'); + drawDot(ctx, xAbs + note.getXShift(), y, 'blue'); + const formatterMetrics = note.getFormatterMetrics(); + if (formatterMetrics.iterations > 0) { + const spaceDeviation = formatterMetrics.space.deviation; + const prefix = spaceDeviation >= 0 ? '+' : ''; + ctx.setFillStyle('red'); + ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10); + } + ctx.restore(); + } + static parseDuration(durationString) { + if (!durationString) { + return undefined; + } + const regexp = /(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/; + const result = regexp.exec(durationString); + if (!result) { + return undefined; + } + const duration = result[1]; + const dots = result[2].length; + const type = result[3] || 'n'; + return { duration, dots, type }; + } + static parseNoteStruct(noteStruct) { + const durationProps = Note.parseDuration(noteStruct.duration); + if (!durationProps) { + return undefined; + } + let type = noteStruct.type; + if (type && !Tables.validTypes[type]) { + return undefined; + } + const customTypes = []; + if (!type) { + type = durationProps.type || 'n'; + if (noteStruct.keys !== undefined) { + noteStruct.keys.forEach((k, i) => { + const result = k.split('/'); + customTypes[i] = (result && result.length === 3 ? result[2] : type); + }); + } + } + let ticks = Tables.durationToTicks(durationProps.duration); + if (!ticks) { + return undefined; + } + const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots; + if (typeof dots !== 'number') { + return undefined; + } + let currentTicks = ticks; + for (let i = 0; i < dots; i++) { + if (currentTicks <= 1) + return undefined; + currentTicks = currentTicks / 2; + ticks += currentTicks; + } + return { + duration: durationProps.duration, + type, + customTypes, + dots, + ticks, + }; + } + constructor(noteStruct) { + super(); + if (!noteStruct) { + throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.'); + } + const parsedNoteStruct = Note.parseNoteStruct(noteStruct); + if (!parsedNoteStruct) { + throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`); + } + this.keys = noteStruct.keys || []; + this.keyProps = []; + this.duration = parsedNoteStruct.duration; + this.noteType = parsedNoteStruct.type; + this.customTypes = parsedNoteStruct.customTypes; + if (noteStruct.duration_override) { + this.setDuration(noteStruct.duration_override); + } + else { + this.setIntrinsicTicks(parsedNoteStruct.ticks); + } + this.modifiers = []; + this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType); + this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t)); + this.playNote = undefined; + this.ignore_ticks = false; + this.width = 0; + this.leftDisplacedHeadPx = 0; + this.rightDisplacedHeadPx = 0; + this.x_shift = 0; + this.ys = []; + if (noteStruct.align_center) { + this.setCenterAlignment(noteStruct.align_center); + } + this.render_options = { + annotation_spacing: 5, + glyph_font_scale: 1, + stroke_px: 1, + scale: 1, + font: '', + y_shift: 0, + }; + } + getPlayNote() { + return this.playNote; + } + setPlayNote(note) { + this.playNote = note; + return this; + } + isRest() { + return false; + } + addStroke(index, stroke) { + stroke.setNote(this); + stroke.setIndex(index); + this.modifiers.push(stroke); + this.preFormatted = false; + return this; + } + getStave() { + return this.stave; + } + checkStave() { + return defined(this.stave, 'NoStave', 'No stave attached to instance.'); + } + setStave(stave) { + this.stave = stave; + this.setYs([stave.getYForLine(0)]); + this.setContext(this.stave.getContext()); + return this; + } + getLeftDisplacedHeadPx() { + return this.leftDisplacedHeadPx; + } + getRightDisplacedHeadPx() { + return this.rightDisplacedHeadPx; + } + setLeftDisplacedHeadPx(x) { + this.leftDisplacedHeadPx = x; + return this; + } + setRightDisplacedHeadPx(x) { + this.rightDisplacedHeadPx = x; + return this; + } + shouldIgnoreTicks() { + return this.ignore_ticks; + } + getLineNumber(isTopNote) { + return 0; + } + getLineForRest() { + return 0; + } + getGlyph() { + return this.glyphProps; + } + getGlyphProps() { + return this.glyphProps; + } + getGlyphWidth() { + return this.glyphProps.getWidth(this.render_options.glyph_font_scale); + } + setYs(ys) { + this.ys = ys; + return this; + } + getYs() { + if (this.ys.length === 0) { + throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.'); + } + return this.ys; + } + getYForTopText(text_line) { + return this.checkStave().getYForTopText(text_line); + } + getVoice() { + if (!this.voice) + throw new RuntimeError('NoVoice', 'Note has no voice.'); + return this.voice; + } + setVoice(voice) { + this.voice = voice; + this.preFormatted = false; + return this; + } + getTickContext() { + return this.checkTickContext(); + } + setTickContext(tc) { + this.tickContext = tc; + this.preFormatted = false; + return this; + } + getDuration() { + return this.duration; + } + isDotted() { + return this.getModifiersByType("Dot").length > 0; + } + hasStem() { + return false; + } + getNoteType() { + return this.noteType; + } + getBeam() { + return this.beam; + } + checkBeam() { + return defined(this.beam, 'NoBeam', 'No beam attached to instance'); + } + hasBeam() { + return this.beam != undefined; + } + setBeam(beam) { + this.beam = beam; + return this; + } + addModifier(modifier, index = 0) { + const signature = 'Note.addModifier(modifier: Modifier, index: number=0)'; + if (typeof index === 'string') { + index = parseInt(index); + console.warn(signature + ' expected a number for `index`, but received a string.'); + } + if (typeof modifier !== 'object' || typeof index !== 'number') { + throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.'); + } + modifier.setNote(this); + modifier.setIndex(index); + super.addModifier(modifier); + return this; + } + getModifiersByType(type) { + return this.modifiers.filter((modifier) => modifier.getCategory() === type); + } + getModifierStartXY(position, index, options) { + if (!this.preFormatted) { + throw new RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); + } + return { + x: this.getAbsoluteX(), + y: this.ys[0], + }; + } + getRightParenthesisPx(index) { + const props = this.getKeyProps()[index]; + return props.displaced ? this.getRightDisplacedHeadPx() : 0; + } + getLeftParenthesisPx(index) { + const props = this.getKeyProps()[index]; + return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift; + } + getFirstDotPx() { + let px = this.getRightDisplacedHeadPx(); + if (this.checkModifierContext().getMembers('Parenthesis').length !== 0) + px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width'); + return px; + } + getMetrics() { + if (!this.preFormatted) { + throw new RuntimeError('UnformattedNote', "Can't call getMetrics on an unformatted note."); + } + const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0; + const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0; + const width = this.getWidth(); + const glyphWidth = this.getGlyphWidth(); + const notePx = width - + modLeftPx - + modRightPx - + this.leftDisplacedHeadPx - + this.rightDisplacedHeadPx; + return { + width, + glyphWidth, + notePx, + modLeftPx, + modRightPx, + leftDisplacedHeadPx: this.leftDisplacedHeadPx, + rightDisplacedHeadPx: this.rightDisplacedHeadPx, + glyphPx: 0, + }; + } + getAbsoluteX() { + const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`); + let x = tickContext.getX(); + if (this.stave) { + x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding'); + } + if (this.isCenterAligned()) { + x += this.getCenterXShift(); + } + return x; + } + static getPoint(size) { + return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 5) * 3; + } + getStemDirection() { + throw new RuntimeError('NoStem', 'No stem attached to this note.'); + } + getStemExtents() { + throw new RuntimeError('NoStem', 'No stem attached to this note.'); + } + getTieRightX() { + let tieStartX = this.getAbsoluteX(); + const note_glyph_width = this.glyphProps.getWidth(); + tieStartX += note_glyph_width / 2; + tieStartX += -this.width / 2 + this.width + 2; + return tieStartX; + } + getTieLeftX() { + let tieEndX = this.getAbsoluteX(); + const note_glyph_width = this.glyphProps.getWidth(); + tieEndX += note_glyph_width / 2; + tieEndX -= this.width / 2 + 2; + return tieEndX; + } + getKeys() { + return this.keys; + } + getKeyProps() { + return this.keyProps; + } +} diff --git a/build/esm/src/notehead.js b/build/esm/src/notehead.js new file mode 100644 index 0000000000..e2a2a9a46c --- /dev/null +++ b/build/esm/src/notehead.js @@ -0,0 +1,169 @@ +import { BoundingBox } from './boundingbox.js'; +import { Glyph } from './glyph.js'; +import { Note } from './note.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { defined, log } from './util.js'; +function L(...args) { + if (NoteHead.DEBUG) + log('Vex.Flow.NoteHead', args); +} +function drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) { + const width = Tables.SLASH_NOTEHEAD_WIDTH; + ctx.save(); + ctx.setLineWidth(Tables.STEM_WIDTH); + let fill = false; + if (Tables.durationToNumber(duration) > 2) { + fill = true; + } + if (!fill) + x -= (Tables.STEM_WIDTH / 2) * stem_direction; + ctx.beginPath(); + ctx.moveTo(x, y + staveSpace); + ctx.lineTo(x, y + 1); + ctx.lineTo(x + width, y - staveSpace); + ctx.lineTo(x + width, y); + ctx.lineTo(x, y + staveSpace); + ctx.closePath(); + if (fill) { + ctx.fill(); + } + else { + ctx.stroke(); + } + if (Tables.durationToFraction(duration).equals(0.5)) { + const breve_lines = [-3, -1, width + 1, width + 3]; + for (let i = 0; i < breve_lines.length; i++) { + ctx.beginPath(); + ctx.moveTo(x + breve_lines[i], y - 10); + ctx.lineTo(x + breve_lines[i], y + 11); + ctx.stroke(); + } + } + ctx.restore(); +} +class NoteHead extends Note { + static get CATEGORY() { + return "NoteHead"; + } + constructor(noteStruct) { + super(noteStruct); + this.custom_glyph = false; + this.stem_up_x_offset = 0; + this.stem_down_x_offset = 0; + this.index = noteStruct.index; + this.x = noteStruct.x || 0; + this.y = noteStruct.y || 0; + if (noteStruct.note_type) + this.noteType = noteStruct.note_type; + this.displaced = noteStruct.displaced || false; + this.stem_direction = noteStruct.stem_direction || Stem.UP; + this.line = noteStruct.line || 0; + this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType); + defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); + if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) { + this.glyphProps.code_head = this.glyphProps.ledger_code_head; + } + this.glyph_code = this.glyphProps.code_head; + this.x_shift = noteStruct.x_shift || 0; + if (noteStruct.custom_glyph_code) { + this.custom_glyph = true; + this.glyph_code = noteStruct.custom_glyph_code; + this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0; + this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0; + } + this.setStyle(noteStruct.style); + this.slashed = noteStruct.slashed || false; + this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE }); + this.setWidth(this.custom_glyph && + !this.glyph_code.startsWith('noteheadSlashed') && + !this.glyph_code.startsWith('noteheadCircled') + ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale) + : this.glyphProps.getWidth(this.render_options.glyph_font_scale)); + } + getWidth() { + return this.width; + } + isDisplaced() { + return this.displaced === true; + } + setX(x) { + this.x = x; + return this; + } + getY() { + return this.y; + } + setY(y) { + this.y = y; + return this; + } + getLine() { + return this.line; + } + setLine(line) { + this.line = line; + return this; + } + getAbsoluteX() { + const x = !this.preFormatted ? this.x : super.getAbsoluteX(); + const displacementStemAdjustment = Stem.WIDTH / 2; + const musicFont = Tables.currentMusicFont(); + const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction; + const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction; + return (x + + fontShift + + (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0)); + } + getBoundingBox() { + const spacing = this.checkStave().getSpacingBetweenLines(); + const half_spacing = spacing / 2; + const min_y = this.y - half_spacing; + return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing); + } + setStave(stave) { + const line = this.getLine(); + this.stave = stave; + if (this.stave) { + this.setY(this.stave.getYForNote(line)); + this.setContext(this.stave.getContext()); + } + return this; + } + preFormat() { + if (this.preFormatted) + return this; + const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx; + this.setWidth(width); + this.preFormatted = true; + return this; + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + let head_x = this.getAbsoluteX(); + if (this.custom_glyph) { + head_x += + this.stem_direction === Stem.UP + ? this.stem_up_x_offset + + (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0) + : this.stem_down_x_offset; + } + const y = this.y; + L("Drawing note head '", this.noteType, this.duration, "' at", head_x, y); + const stem_direction = this.stem_direction; + const glyph_font_scale = this.render_options.glyph_font_scale; + const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`; + if (this.noteType === 's') { + const staveSpace = this.checkStave().getSpacingBetweenLines(); + drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace); + } + else { + Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, { + category: `noteHead.${categorySuffix}`, + }); + } + } +} +NoteHead.DEBUG = false; +export { NoteHead }; diff --git a/build/esm/src/notesubgroup.js b/build/esm/src/notesubgroup.js new file mode 100644 index 0000000000..b91f3d0ada --- /dev/null +++ b/build/esm/src/notesubgroup.js @@ -0,0 +1,59 @@ +import { Formatter } from './formatter.js'; +import { Modifier } from './modifier.js'; +import { Tables } from './tables.js'; +import { Voice } from './voice.js'; +export class NoteSubGroup extends Modifier { + static get CATEGORY() { + return "NoteSubGroup"; + } + static format(groups, state) { + if (!groups || groups.length === 0) + return false; + let width = 0; + for (let i = 0; i < groups.length; ++i) { + const group = groups[i]; + group.preFormat(); + width += group.getWidth(); + } + state.left_shift += width; + return true; + } + constructor(subNotes) { + super(); + this.preFormatted = false; + this.position = Modifier.Position.LEFT; + this.subNotes = subNotes; + this.subNotes.forEach((subNote) => { + subNote.setIgnoreTicks(false); + }); + this.width = 0; + this.formatter = new Formatter(); + this.voice = new Voice({ + num_beats: 4, + beat_value: 4, + resolution: Tables.RESOLUTION, + }).setStrict(false); + this.voice.addTickables(this.subNotes); + } + preFormat() { + if (this.preFormatted) + return; + this.formatter.joinVoices([this.voice]).format([this.voice], 0); + this.setWidth(this.formatter.getMinTotalWidth()); + this.preFormatted = true; + } + setWidth(width) { + this.width = width; + return this; + } + getWidth() { + return this.width; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + this.alignSubNotesWithNote(this.subNotes, note); + this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle()); + } +} diff --git a/build/esm/src/ornament.js b/build/esm/src/ornament.js new file mode 100644 index 0000000000..f5845a8e4f --- /dev/null +++ b/build/esm/src/ornament.js @@ -0,0 +1,216 @@ +import { Glyph } from './glyph.js'; +import { Modifier } from './modifier.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { isTabNote } from './typeguard.js'; +import { defined, log, RuntimeError } from './util.js'; +function L(...args) { + if (Ornament.DEBUG) + log('Vex.Flow.Ornament', args); +} +class Ornament extends Modifier { + static get CATEGORY() { + return "Ornament"; + } + static get minPadding() { + const musicFont = Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + static format(ornaments, state) { + if (!ornaments || ornaments.length === 0) + return false; + let width = 0; + let right_shift = state.right_shift; + let left_shift = state.left_shift; + let yOffset = 0; + for (let i = 0; i < ornaments.length; ++i) { + const ornament = ornaments[i]; + const increment = 2; + if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) { + ornament.x_shift += right_shift + 2; + } + if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) { + ornament.x_shift -= left_shift + 2; + } + if (ornament.reportedWidth && ornament.x_shift < 0) { + left_shift += ornament.reportedWidth; + } + else if (ornament.reportedWidth && ornament.x_shift >= 0) { + right_shift += ornament.reportedWidth + Ornament.minPadding; + } + else { + width = Math.max(ornament.getWidth(), width); + } + if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) { + const ornamentNote = defined(ornament.note, 'NoAttachedNote'); + if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) { + state.top_text_line += increment; + ornament.y_shift += yOffset; + yOffset -= ornament.glyph.bbox.getH(); + } + else { + state.text_line += increment; + ornament.y_shift += yOffset; + yOffset += ornament.glyph.bbox.getH(); + } + } + else { + if (ornament.getPosition() === Modifier.Position.ABOVE) { + ornament.setTextLine(state.top_text_line); + state.top_text_line += increment; + } + else { + ornament.setTextLine(state.text_line); + state.text_line += increment; + } + } + } + state.left_shift = left_shift + width / 2; + state.right_shift = right_shift + width / 2; + return true; + } + static get ornamentNoteTransition() { + return ['flip', 'jazzTurn', 'smear']; + } + static get ornamentAttack() { + return ['scoop']; + } + static get ornamentAlignWithNoteHead() { + return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop']; + } + static get ornamentRelease() { + return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip']; + } + static get ornamentArticulation() { + return ['bend', 'plungerClosed', 'plungerOpen']; + } + getMetrics() { + const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament; + if (!ornamentMetrics) + throw new RuntimeError('BadMetrics', `ornament missing`); + return ornamentMetrics[this.ornament.code]; + } + constructor(type) { + super(); + this.type = type; + this.delayed = false; + this.render_options = { + font_scale: Tables.NOTATION_FONT_SCALE, + accidentalLowerPadding: 3, + accidentalUpperPadding: 3, + }; + this.ornament = Tables.ornamentCodes(this.type); + const metrics = this.getMetrics(); + this.adjustForStemDirection = false; + this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0; + this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0; + this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0; + if (!this.ornament) { + throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`); + } + this.x_shift = metrics ? metrics.xOffset : 0; + this.y_shift = metrics ? metrics.yOffset : 0; + this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, { + category: `ornament.${this.ornament.code}`, + }); + if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) { + this.delayed = true; + } + if (!metrics) { + this.glyph.setOrigin(0.5, 1.0); + } + } + setDelayed(delayed) { + this.delayed = delayed; + return this; + } + setUpperAccidental(accid) { + const scale = this.render_options.font_scale / 1.3; + this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale); + this.accidentalUpper.setOrigin(0.5, 1.0); + return this; + } + setLowerAccidental(accid) { + const scale = this.render_options.font_scale / 1.3; + this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale); + this.accidentalLower.setOrigin(0.5, 1.0); + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const stemDir = note.getStemDirection(); + const stave = note.checkStave(); + this.applyStyle(); + ctx.openGroup('ornament', this.getAttribute('id')); + const stemExtents = note.checkStem().getExtents(); + let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY; + if (isTabNote(note)) { + if (note.hasStem()) { + if (stemDir === Stem.DOWN) { + y = stave.getYForTopText(this.text_line); + } + } + else { + y = stave.getYForTopText(this.text_line); + } + } + const isPlacedOnNoteheadSide = stemDir === Stem.DOWN; + const spacing = stave.getSpacingBetweenLines(); + let lineSpacing = 1; + if (!isPlacedOnNoteheadSide && note.hasBeam()) { + lineSpacing += 0.5; + } + const totalSpacing = spacing * (this.text_line + lineSpacing); + const glyphYBetweenLines = y - totalSpacing; + const start = note.getModifierStartXY(this.position, this.index); + let glyphX = start.x; + let glyphY = this.ornamentAlignWithNoteHead + ? start.y + : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines); + glyphY += this.y_shift; + if (this.delayed) { + let delayXShift = 0; + const startX = glyphX - stave.getNoteStartX(); + if (this.delayXShift !== undefined) { + delayXShift = this.delayXShift; + } + else { + delayXShift += this.glyph.getMetrics().width / 2; + const tickables = note.getVoice().getTickables(); + const index = tickables.indexOf(note); + const nextContext = index + 1 < tickables.length ? tickables[index + 1].checkTickContext() : undefined; + if (nextContext) { + delayXShift += (nextContext.getX() - startX) * 0.5; + } + else { + delayXShift += (stave.getX() + stave.getWidth() - glyphX) * 0.5; + } + this.delayXShift = delayXShift; + } + glyphX += delayXShift; + } + L('Rendering ornament: ', this.ornament, glyphX, glyphY); + if (this.accidentalLower) { + this.accidentalLower.render(ctx, glyphX, glyphY); + glyphY -= this.accidentalLower.getMetrics().height; + glyphY -= this.render_options.accidentalLowerPadding; + } + if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) { + glyphY += this.stemUpYOffset; + } + if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) { + glyphY = note.checkStave().getBoundingBox().getY() + 40; + } + this.glyph.render(ctx, glyphX + this.x_shift, glyphY); + if (this.accidentalUpper) { + glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding; + this.accidentalUpper.render(ctx, glyphX, glyphY); + } + ctx.closeGroup(); + this.restoreStyle(); + } +} +Ornament.DEBUG = false; +export { Ornament }; diff --git a/build/esm/src/parenthesis.js b/build/esm/src/parenthesis.js new file mode 100644 index 0000000000..d2172e99ee --- /dev/null +++ b/build/esm/src/parenthesis.js @@ -0,0 +1,79 @@ +import { Glyph } from './glyph.js'; +import { Modifier, ModifierPosition } from './modifier.js'; +import { Note } from './note.js'; +import { Tables } from './tables.js'; +import { isGraceNote } from './typeguard.js'; +export class Parenthesis extends Modifier { + static get CATEGORY() { + return "Parenthesis"; + } + static buildAndAttach(notes) { + for (const note of notes) { + for (let i = 0; i < note.keys.length; i++) { + note.addModifier(new Parenthesis(ModifierPosition.LEFT), i); + note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i); + } + } + } + static format(parentheses, state) { + if (!parentheses || parentheses.length === 0) + return false; + let x_widthL = 0; + let x_widthR = 0; + for (let i = 0; i < parentheses.length; ++i) { + const parenthesis = parentheses[i]; + const note = parenthesis.getNote(); + const pos = parenthesis.getPosition(); + const index = parenthesis.checkIndex(); + let shift = 0; + if (pos === ModifierPosition.RIGHT) { + shift = note.getRightParenthesisPx(index); + x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width; + } + if (pos === ModifierPosition.LEFT) { + shift = note.getLeftParenthesisPx(index); + x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width; + } + parenthesis.setXShift(shift); + } + state.left_shift += x_widthL; + state.right_shift += x_widthR; + return true; + } + constructor(position) { + var _a; + super(); + this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT; + this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default'); + this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width')); + } + setNote(note) { + var _a, _b; + this.note = note; + this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default'); + this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width')); + if (isGraceNote(note)) { + this.point = (_b = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : Note.getPoint('gracenote'); + this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width')); + } + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true }); + const x = start.x + this.x_shift; + const y = start.y + this.y_shift; + if (this.position == Modifier.Position.RIGHT) { + Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', { + category: `noteHead.standard.noteheadParenthesisRight`, + }); + } + else if (this.position == Modifier.Position.LEFT) { + Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', { + category: `noteHead.standard.noteheadParenthesisLeft`, + }); + } + } +} diff --git a/build/esm/src/parser.js b/build/esm/src/parser.js new file mode 100644 index 0000000000..44f0ad05b2 --- /dev/null +++ b/build/esm/src/parser.js @@ -0,0 +1,165 @@ +import { log, RuntimeError } from './util.js'; +function L(...args) { + if (Parser.DEBUG) + log('Vex.Flow.Parser', args); +} +const NO_ERROR_POS = -1; +function flattenMatches(r) { + if ('matchedString' in r) + return r.matchedString; + if ('results' in r) + return flattenMatches(r.results); + const results = r; + if (results.length === 1) + return flattenMatches(results[0]); + if (results.length === 0) + return null; + return results.map(flattenMatches); +} +class Parser { + constructor(grammar) { + this.grammar = grammar; + this.line = ''; + this.pos = 0; + this.errorPos = NO_ERROR_POS; + } + parse(line) { + this.line = line; + this.pos = 0; + this.errorPos = NO_ERROR_POS; + const result = this.expect(this.grammar.begin()); + result.errorPos = this.errorPos; + return result; + } + matchFail(returnPos) { + if (this.errorPos === NO_ERROR_POS) + this.errorPos = this.pos; + this.pos = returnPos; + } + matchSuccess() { + this.errorPos = NO_ERROR_POS; + } + matchToken(token, noSpace = false) { + const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\s*)'); + const workingLine = this.line.slice(this.pos); + const result = workingLine.match(regexp); + if (result !== null) { + return { + success: true, + matchedString: result[2], + incrementPos: result[1].length, + pos: this.pos, + }; + } + else { + return { success: false, pos: this.pos }; + } + } + expectOne(rule, maybe = false) { + const results = []; + const pos = this.pos; + let allMatches = true; + let oneMatch = false; + maybe = maybe === true || rule.maybe === true; + if (rule.expect) { + for (const next of rule.expect) { + const localPos = this.pos; + const result = this.expect(next); + if (result.success) { + results.push(result); + oneMatch = true; + if (rule.or) + break; + } + else { + allMatches = false; + if (!rule.or) { + this.pos = localPos; + break; + } + } + } + } + const gotOne = (rule.or && oneMatch) || allMatches; + const success = gotOne || maybe === true; + const numMatches = gotOne ? 1 : 0; + if (maybe && !gotOne) + this.pos = pos; + if (success) { + this.matchSuccess(); + } + else { + this.matchFail(pos); + } + return { success, results, numMatches }; + } + expectOneOrMore(rule, maybe = false) { + const results = []; + const pos = this.pos; + let numMatches = 0; + let more = true; + do { + const result = this.expectOne(rule); + if (result.success && result.results) { + numMatches++; + results.push(result.results); + } + else { + more = false; + } + } while (more); + const success = numMatches > 0 || maybe === true; + if (maybe && !(numMatches > 0)) + this.pos = pos; + if (success) { + this.matchSuccess(); + } + else { + this.matchFail(pos); + } + return { success, results, numMatches }; + } + expectZeroOrMore(rule) { + return this.expectOneOrMore(rule, true); + } + expect(ruleFunc) { + L('Evaluating rule function:', ruleFunc); + if (!ruleFunc) { + throw new RuntimeError('Invalid rule function'); + } + let result; + const rule = ruleFunc.bind(this.grammar)(); + if (rule.token) { + result = this.matchToken(rule.token, rule.noSpace === true); + if (result.success) { + this.pos += result.incrementPos; + } + } + else if (rule.expect) { + if (rule.oneOrMore) { + result = this.expectOneOrMore(rule); + } + else if (rule.zeroOrMore) { + result = this.expectZeroOrMore(rule); + } + else { + result = this.expectOne(rule); + } + } + else { + L(rule); + throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule); + } + const matches = []; + result.matches = matches; + if (result.results) { + result.results.forEach((r) => matches.push(flattenMatches(r))); + } + if (rule.run && result.success) { + rule.run({ matches }); + } + return result; + } +} +Parser.DEBUG = false; +export { Parser }; diff --git a/build/esm/src/pedalmarking.js b/build/esm/src/pedalmarking.js new file mode 100644 index 0000000000..362e1122f1 --- /dev/null +++ b/build/esm/src/pedalmarking.js @@ -0,0 +1,191 @@ +import { Element } from './element.js'; +import { Font, FontStyle, FontWeight } from './font.js'; +import { Glyph } from './glyph.js'; +import { Tables } from './tables.js'; +import { log, RuntimeError } from './util.js'; +function L(...args) { + if (PedalMarking.DEBUG) + log('Vex.Flow.PedalMarking', args); +} +function drawPedalGlyph(name, context, x, y, point) { + const glyph_data = PedalMarking.GLYPHS[name]; + const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' }); + glyph.render(context, x - (glyph.getMetrics().width - Tables.STAVE_LINE_DISTANCE) / 2, y); +} +class PedalMarking extends Element { + static get CATEGORY() { + return "PedalMarking"; + } + static createSustain(notes) { + const pedal = new PedalMarking(notes); + return pedal; + } + static createSostenuto(notes) { + const pedal = new PedalMarking(notes); + pedal.setType(PedalMarking.type.MIXED); + pedal.setCustomText('Sost. Ped.'); + return pedal; + } + static createUnaCorda(notes) { + const pedal = new PedalMarking(notes); + pedal.setType(PedalMarking.type.TEXT); + pedal.setCustomText('una corda', 'tre corda'); + return pedal; + } + constructor(notes) { + super(); + this.notes = notes; + this.type = PedalMarking.type.TEXT; + this.line = 0; + this.custom_depress_text = ''; + this.custom_release_text = ''; + this.resetFont(); + this.render_options = { + bracket_height: 10, + text_margin_right: 6, + bracket_line_width: 1, + color: 'black', + }; + } + setType(type) { + type = typeof type === 'string' ? PedalMarking.typeString[type] : type; + if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) { + this.type = type; + } + return this; + } + setCustomText(depress, release) { + this.custom_depress_text = depress || ''; + this.custom_release_text = release || ''; + return this; + } + setLine(line) { + this.line = line; + return this; + } + drawBracketed() { + const ctx = this.checkContext(); + let is_pedal_depressed = false; + let prev_x; + let prev_y; + this.notes.forEach((note, index, notes) => { + var _a; + is_pedal_depressed = !is_pedal_depressed; + const x = note.getAbsoluteX(); + const y = note.checkStave().getYForBottomText(this.line + 3); + if (x < prev_x) { + throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions'); + } + const next_is_same = notes[index + 1] === note; + const prev_is_same = notes[index - 1] === note; + let x_shift = 0; + const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE; + if (is_pedal_depressed) { + x_shift = prev_is_same ? 5 : 0; + if (this.type === PedalMarking.type.MIXED && !prev_is_same) { + if (this.custom_depress_text) { + const text_width = ctx.measureText(this.custom_depress_text).width; + ctx.fillText(this.custom_depress_text, x - text_width / 2, y); + x_shift = text_width / 2 + this.render_options.text_margin_right; + } + else { + drawPedalGlyph('pedal_depress', ctx, x, y, point); + x_shift = 20 + this.render_options.text_margin_right; + } + } + else { + ctx.beginPath(); + ctx.moveTo(x, y - this.render_options.bracket_height); + ctx.lineTo(x + x_shift, y); + ctx.stroke(); + ctx.closePath(); + } + } + else { + x_shift = next_is_same ? -5 : 0; + ctx.beginPath(); + ctx.moveTo(prev_x, prev_y); + ctx.lineTo(x + x_shift, y); + ctx.lineTo(x, y - this.render_options.bracket_height); + ctx.stroke(); + ctx.closePath(); + } + prev_x = x + x_shift; + prev_y = y; + }); + } + drawText() { + const ctx = this.checkContext(); + let is_pedal_depressed = false; + this.notes.forEach((note) => { + var _a; + is_pedal_depressed = !is_pedal_depressed; + const stave = note.checkStave(); + const x = note.getAbsoluteX(); + const y = stave.getYForBottomText(this.line + 3); + const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE; + let text_width = 0; + if (is_pedal_depressed) { + if (this.custom_depress_text) { + text_width = ctx.measureText(this.custom_depress_text).width; + ctx.fillText(this.custom_depress_text, x - text_width / 2, y); + } + else { + drawPedalGlyph('pedal_depress', ctx, x, y, point); + } + } + else { + if (this.custom_release_text) { + text_width = ctx.measureText(this.custom_release_text).width; + ctx.fillText(this.custom_release_text, x - text_width / 2, y); + } + else { + drawPedalGlyph('pedal_release', ctx, x, y, point); + } + } + }); + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + ctx.save(); + ctx.setStrokeStyle(this.render_options.color); + ctx.setFillStyle(this.render_options.color); + ctx.setFont(this.textFont); + L('Rendering Pedal Marking'); + if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) { + ctx.setLineWidth(this.render_options.bracket_line_width); + this.drawBracketed(); + } + else if (this.type === PedalMarking.type.TEXT) { + this.drawText(); + } + ctx.restore(); + } +} +PedalMarking.DEBUG = false; +PedalMarking.TEXT_FONT = { + family: Font.SERIF, + size: 12, + weight: FontWeight.BOLD, + style: FontStyle.ITALIC, +}; +PedalMarking.GLYPHS = { + pedal_depress: { + code: 'keyboardPedalPed', + }, + pedal_release: { + code: 'keyboardPedalUp', + }, +}; +PedalMarking.type = { + TEXT: 1, + BRACKET: 2, + MIXED: 3, +}; +PedalMarking.typeString = { + text: PedalMarking.type.TEXT, + bracket: PedalMarking.type.BRACKET, + mixed: PedalMarking.type.MIXED, +}; +export { PedalMarking }; diff --git a/build/esm/src/registry.js b/build/esm/src/registry.js new file mode 100644 index 0000000000..368096fd04 --- /dev/null +++ b/build/esm/src/registry.js @@ -0,0 +1,81 @@ +import { RuntimeError } from './util.js'; +class Index { + constructor() { + this.id = {}; + this.type = {}; + this.class = {}; + } +} +export class Registry { + static getDefaultRegistry() { + return Registry.defaultRegistry; + } + static enableDefaultRegistry(registry) { + Registry.defaultRegistry = registry; + } + static disableDefaultRegistry() { + Registry.defaultRegistry = undefined; + } + constructor() { + this.index = new Index(); + } + clear() { + this.index = new Index(); + return this; + } + setIndexValue(name, value, id, elem) { + const index = this.index; + if (!index[name][value]) { + index[name][value] = {}; + } + index[name][value][id] = elem; + } + updateIndex({ id, name, value, oldValue }) { + const elem = this.getElementById(id); + if (oldValue !== undefined && this.index[name][oldValue]) { + delete this.index[name][oldValue][id]; + } + if (value && elem) { + this.setIndexValue(name, value, elem.getAttribute('id'), elem); + } + } + register(elem, id) { + id = id || elem.getAttribute('id'); + if (!id) { + throw new RuntimeError("Can't add element without `id` attribute to registry"); + } + elem.setAttribute('id', id); + this.setIndexValue('id', id, id, elem); + this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined }); + elem.onRegister(this); + return this; + } + getElementById(id) { + var _a, _b; + return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; + } + getElementsByAttribute(attribute, value) { + const index_attr = this.index[attribute]; + if (index_attr) { + const index_attr_val = index_attr[value]; + if (index_attr_val) { + const keys = Object.keys(index_attr_val); + return keys.map((k) => index_attr_val[k]); + } + } + return []; + } + getElementsByType(type) { + return this.getElementsByAttribute('type', type); + } + getElementsByClass(className) { + return this.getElementsByAttribute('class', className); + } + onUpdate(info) { + const allowedNames = ['id', 'type', 'class']; + if (allowedNames.includes(info.name)) { + this.updateIndex(info); + } + return this; + } +} diff --git a/build/esm/src/rendercontext.js b/build/esm/src/rendercontext.js new file mode 100644 index 0000000000..ec7a54acc0 --- /dev/null +++ b/build/esm/src/rendercontext.js @@ -0,0 +1,24 @@ +export class RenderContext { + static get CATEGORY() { + return "RenderContext"; + } + set font(f) { + this.setFont(f); + } + get font() { + return this.getFont(); + } + setRawFont(f) { + this.setFont(f); + return this; + } +} +export function drawDot(ctx, x, y, color = '#F55') { + ctx.save(); + ctx.setFillStyle(color); + ctx.beginPath(); + ctx.arc(x, y, 3, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + ctx.restore(); +} diff --git a/build/esm/src/renderer.js b/build/esm/src/renderer.js new file mode 100644 index 0000000000..eb69c168c1 --- /dev/null +++ b/build/esm/src/renderer.js @@ -0,0 +1,113 @@ +import { CanvasContext } from './canvascontext.js'; +import { SVGContext } from './svgcontext.js'; +import { isRenderContext } from './typeguard.js'; +import { RuntimeError } from './util.js'; +import { isHTMLCanvas, isHTMLDiv } from './web.js'; +export var RendererBackends; +(function (RendererBackends) { + RendererBackends[RendererBackends["CANVAS"] = 1] = "CANVAS"; + RendererBackends[RendererBackends["SVG"] = 2] = "SVG"; +})(RendererBackends || (RendererBackends = {})); +export var RendererLineEndType; +(function (RendererLineEndType) { + RendererLineEndType[RendererLineEndType["NONE"] = 1] = "NONE"; + RendererLineEndType[RendererLineEndType["UP"] = 2] = "UP"; + RendererLineEndType[RendererLineEndType["DOWN"] = 3] = "DOWN"; +})(RendererLineEndType || (RendererLineEndType = {})); +class Renderer { + static buildContext(elementId, backend, width, height, background = '#FFF') { + const renderer = new Renderer(elementId, backend); + if (width && height) { + renderer.resize(width, height); + } + const ctx = renderer.getContext(); + ctx.setBackgroundFillStyle(background); + Renderer.lastContext = ctx; + return ctx; + } + static getCanvasContext(elementId, width, height, background) { + return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background); + } + static getSVGContext(elementId, width, height, background) { + return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background); + } + static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) { + context.beginPath(); + const dx = toX - fromX; + const dy = toY - fromY; + const angle = Math.atan2(dy, dx); + let x = fromX; + let y = fromY; + context.moveTo(fromX, fromY); + let idx = 0; + let draw = true; + while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) { + const dashLength = dashPattern[idx++ % dashPattern.length]; + const nx = x + Math.cos(angle) * dashLength; + x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx); + const ny = y + Math.sin(angle) * dashLength; + y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny); + if (draw) { + context.lineTo(x, y); + } + else { + context.moveTo(x, y); + } + draw = !draw; + } + context.closePath(); + context.stroke(); + } + constructor(arg0, arg1) { + if (isRenderContext(arg0)) { + this.ctx = arg0; + } + else { + if (arg1 === undefined) { + throw new RuntimeError('InvalidArgument', 'Missing backend argument'); + } + const backend = arg1; + let element; + if (typeof arg0 == 'string') { + const maybeElement = document.getElementById(arg0); + if (!maybeElement) { + throw new RuntimeError('BadElementId', `Can't find element with ID "${maybeElement}"`); + } + element = maybeElement; + } + else { + element = arg0; + } + if (backend === Renderer.Backends.CANVAS) { + if (!isHTMLCanvas(element)) { + throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.'); + } + const context = element.getContext('2d', { willReadFrequently: true }); + if (!context) { + throw new RuntimeError('BadElement', "Can't get canvas context"); + } + this.ctx = new CanvasContext(context); + } + else if (backend === Renderer.Backends.SVG) { + if (!isHTMLDiv(element)) { + throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.'); + } + this.ctx = new SVGContext(element); + } + else { + throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`); + } + } + } + resize(width, height) { + this.ctx.resize(width, height); + return this; + } + getContext() { + return this.ctx; + } +} +Renderer.Backends = RendererBackends; +Renderer.LineEndType = RendererLineEndType; +Renderer.lastContext = undefined; +export { Renderer }; diff --git a/build/esm/src/repeatnote.js b/build/esm/src/repeatnote.js new file mode 100644 index 0000000000..6d97c8c3a4 --- /dev/null +++ b/build/esm/src/repeatnote.js @@ -0,0 +1,21 @@ +import { Glyph } from './glyph.js'; +import { GlyphNote } from './glyphnote.js'; +import { Tables } from './tables.js'; +const CODES = { + '1': 'repeat1Bar', + '2': 'repeat2Bars', + '4': 'repeat4Bars', + slash: 'repeatBarSlash', +}; +export class RepeatNote extends GlyphNote { + static get CATEGORY() { + return "RepeatNote"; + } + constructor(type, noteStruct, options) { + const glyphCode = CODES[type] || 'repeat1Bar'; + const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), { + category: 'repeatNote', + }); + super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options); + } +} diff --git a/build/esm/src/stave.js b/build/esm/src/stave.js new file mode 100644 index 0000000000..2b9a0ad7b6 --- /dev/null +++ b/build/esm/src/stave.js @@ -0,0 +1,612 @@ +import { BoundingBox } from './boundingbox.js'; +import { Clef } from './clef.js'; +import { Element } from './element.js'; +import { Font, FontStyle, FontWeight } from './font.js'; +import { KeySignature } from './keysignature.js'; +import { Barline, BarlineType } from './stavebarline.js'; +import { StaveModifierPosition } from './stavemodifier.js'; +import { Repetition } from './staverepetition.js'; +import { StaveSection } from './stavesection.js'; +import { StaveTempo } from './stavetempo.js'; +import { StaveText } from './stavetext.js'; +import { Volta } from './stavevolta.js'; +import { Tables } from './tables.js'; +import { TimeSignature } from './timesignature.js'; +import { isBarline } from './typeguard.js'; +import { RuntimeError } from './util.js'; +const SORT_ORDER_BEG_MODIFIERS = { + [Barline.CATEGORY]: 0, + [Clef.CATEGORY]: 1, + [KeySignature.CATEGORY]: 2, + [TimeSignature.CATEGORY]: 3, +}; +const SORT_ORDER_END_MODIFIERS = { + [TimeSignature.CATEGORY]: 0, + [KeySignature.CATEGORY]: 1, + [Barline.CATEGORY]: 2, + [Clef.CATEGORY]: 3, +}; +class Stave extends Element { + static get CATEGORY() { + return "Stave"; + } + static get defaultPadding() { + const musicFont = Tables.currentMusicFont(); + return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax'); + } + static get rightPadding() { + const musicFont = Tables.currentMusicFont(); + return musicFont.lookupMetric('stave.endPaddingMax'); + } + constructor(x, y, width, options) { + super(); + this.height = 0; + this.x = x; + this.y = y; + this.width = width; + this.formatted = false; + this.start_x = x + 5; + this.end_x = x + width; + this.modifiers = []; + this.measure = 0; + this.clef = 'treble'; + this.endClef = undefined; + this.resetFont(); + this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options); + this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 }; + this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 }; + this.resetLines(); + this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE)); + this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE)); + } + setDefaultLedgerLineStyle(style) { + this.defaultLedgerLineStyle = style; + } + getDefaultLedgerLineStyle() { + return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle); + } + space(spacing) { + return this.options.spacing_between_lines_px * spacing; + } + resetLines() { + this.options.line_config = []; + for (let i = 0; i < this.options.num_lines; i++) { + this.options.line_config.push({ visible: true }); + } + this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px; + this.options.bottom_text_position = this.options.num_lines; + } + setNoteStartX(x) { + if (!this.formatted) + this.format(); + this.start_x = x; + return this; + } + getNoteStartX() { + if (!this.formatted) + this.format(); + return this.start_x; + } + getNoteEndX() { + if (!this.formatted) + this.format(); + return this.end_x; + } + getTieStartX() { + return this.start_x; + } + getTieEndX() { + return this.end_x; + } + getX() { + return this.x; + } + getNumLines() { + return this.options.num_lines; + } + setNumLines(n) { + this.options.num_lines = n; + this.resetLines(); + return this; + } + setY(y) { + this.y = y; + return this; + } + getY() { + return this.y; + } + getTopLineTopY() { + return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2; + } + getBottomLineBottomY() { + return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2; + } + setX(x) { + const shift = x - this.x; + this.formatted = false; + this.x = x; + this.start_x += shift; + this.end_x += shift; + for (let i = 0; i < this.modifiers.length; i++) { + const mod = this.modifiers[i]; + mod.setX(mod.getX() + shift); + } + return this; + } + setWidth(width) { + this.formatted = false; + this.width = width; + this.end_x = this.x + width; + return this; + } + getWidth() { + return this.width; + } + getStyle() { + return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle()); + } + setMeasure(measure) { + this.measure = measure; + return this; + } + getMeasure() { + return this.measure; + } + getModifierXShift(index = 0) { + if (typeof index !== 'number') { + throw new RuntimeError('InvalidIndex', 'Must be of number type'); + } + if (!this.formatted) + this.format(); + if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) { + return 0; + } + if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) { + return 0; + } + let start_x = this.start_x - this.x; + const begBarline = this.modifiers[0]; + if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) { + start_x -= begBarline.getWidth(); + } + return start_x; + } + setRepetitionType(type, yShift = 0) { + this.modifiers.push(new Repetition(type, this.x, yShift)); + return this; + } + setVoltaType(type, number_t, y) { + this.modifiers.push(new Volta(type, number_t, this.x, y)); + return this; + } + setSection(section, y, xOffset = 0, fontSize, drawRect = true) { + const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect); + if (fontSize) + staveSection.setFontSize(fontSize); + this.modifiers.push(staveSection); + return this; + } + setTempo(tempo, y) { + this.modifiers.push(new StaveTempo(tempo, this.x, y)); + return this; + } + setText(text, position, options = {}) { + this.modifiers.push(new StaveText(text, position, options)); + return this; + } + getHeight() { + return this.height; + } + getSpacingBetweenLines() { + return this.options.spacing_between_lines_px; + } + getBoundingBox() { + return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y); + } + getBottomY() { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing; + return score_bottom; + } + getBottomLineY() { + return this.getYForLine(this.options.num_lines); + } + getYForLine(line) { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const headroom = options.space_above_staff_ln; + const y = this.y + line * spacing + headroom * spacing; + return y; + } + getLineForY(y) { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const headroom = options.space_above_staff_ln; + return (y - this.y) / spacing - headroom; + } + getYForTopText(line = 0) { + return this.getYForLine(-line - this.options.top_text_position); + } + getYForBottomText(line = 0) { + return this.getYForLine(this.options.bottom_text_position + line); + } + getYForNote(line) { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const headroom = options.space_above_staff_ln; + return this.y + headroom * spacing + 5 * spacing - line * spacing; + } + getYForGlyphs() { + return this.getYForLine(3); + } + addModifier(modifier, position) { + if (position !== undefined) { + modifier.setPosition(position); + } + modifier.setStave(this); + this.formatted = false; + this.modifiers.push(modifier); + return this; + } + addEndModifier(modifier) { + this.addModifier(modifier, StaveModifierPosition.END); + return this; + } + setBegBarType(type) { + const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType; + if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) { + this.modifiers[0].setType(type); + this.formatted = false; + } + return this; + } + setEndBarType(type) { + if (type !== BarlineType.REPEAT_BEGIN) { + this.modifiers[1].setType(type); + this.formatted = false; + } + return this; + } + setClefLines(clefSpec) { + this.clef = clefSpec; + return this; + } + setClef(clefSpec, size, annotation, position) { + if (position === undefined) { + position = StaveModifierPosition.BEGIN; + } + if (position === StaveModifierPosition.END) { + this.endClef = clefSpec; + } + else { + this.clef = clefSpec; + } + const clefs = this.getModifiers(position, Clef.CATEGORY); + if (clefs.length === 0) { + this.addClef(clefSpec, size, annotation, position); + } + else { + clefs[0].setType(clefSpec, size, annotation); + } + return this; + } + getClef() { + return this.clef; + } + setEndClef(clefSpec, size, annotation) { + this.setClef(clefSpec, size, annotation, StaveModifierPosition.END); + return this; + } + getEndClef() { + return this.endClef; + } + setKeySignature(keySpec, cancelKeySpec, position) { + if (position === undefined) { + position = StaveModifierPosition.BEGIN; + } + const keySignatures = this.getModifiers(position, KeySignature.CATEGORY); + if (keySignatures.length === 0) { + this.addKeySignature(keySpec, cancelKeySpec, position); + } + else { + keySignatures[0].setKeySig(keySpec, cancelKeySpec); + } + return this; + } + setEndKeySignature(keySpec, cancelKeySpec) { + this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END); + return this; + } + setTimeSignature(timeSpec, customPadding, position) { + if (position === undefined) { + position = StaveModifierPosition.BEGIN; + } + const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY); + if (timeSignatures.length === 0) { + this.addTimeSignature(timeSpec, customPadding, position); + } + else { + timeSignatures[0].setTimeSig(timeSpec); + } + return this; + } + setEndTimeSignature(timeSpec, customPadding) { + this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END); + return this; + } + addKeySignature(keySpec, cancelKeySpec, position) { + if (position === undefined) { + position = StaveModifierPosition.BEGIN; + } + this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position); + return this; + } + addClef(clef, size, annotation, position) { + if (position === undefined || position === StaveModifierPosition.BEGIN) { + this.clef = clef; + } + else if (position === StaveModifierPosition.END) { + this.endClef = clef; + } + this.addModifier(new Clef(clef, size, annotation), position); + return this; + } + addEndClef(clef, size, annotation) { + this.addClef(clef, size, annotation, StaveModifierPosition.END); + return this; + } + addTimeSignature(timeSpec, customPadding, position) { + this.addModifier(new TimeSignature(timeSpec, customPadding), position); + return this; + } + addEndTimeSignature(timeSpec, customPadding) { + this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END); + return this; + } + addTrebleGlyph() { + this.addClef('treble'); + return this; + } + getModifiers(position, category) { + const noPosition = position === undefined; + const noCategory = category === undefined; + if (noPosition && noCategory) { + return this.modifiers; + } + else if (noPosition) { + return this.modifiers.filter((m) => category === m.getCategory()); + } + else if (noCategory) { + return this.modifiers.filter((m) => position === m.getPosition()); + } + else { + return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory()); + } + } + sortByCategory(items, order) { + for (let i = items.length - 1; i >= 0; i--) { + for (let j = 0; j < i; j++) { + if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) { + const temp = items[j]; + items[j] = items[j + 1]; + items[j + 1] = temp; + } + } + } + } + format() { + const begBarline = this.modifiers[0]; + const endBarline = this.modifiers[1]; + const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN); + const endModifiers = this.getModifiers(StaveModifierPosition.END); + this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS); + this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS); + if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) { + begModifiers.push(begModifiers.splice(0, 1)[0]); + begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE)); + } + if (endModifiers.indexOf(endBarline) > 0) { + endModifiers.splice(0, 0, new Barline(BarlineType.NONE)); + } + let width; + let padding; + let modifier; + let offset = 0; + let x = this.x; + for (let i = 0; i < begModifiers.length; i++) { + modifier = begModifiers[i]; + padding = modifier.getPadding(i + offset); + width = modifier.getWidth(); + x += padding; + modifier.setX(x); + x += width; + if (padding + width === 0) + offset--; + } + this.start_x = x; + x = this.x + this.width; + const widths = { + left: 0, + right: 0, + paddingRight: 0, + paddingLeft: 0, + }; + let lastBarlineIdx = 0; + for (let i = 0; i < endModifiers.length; i++) { + modifier = endModifiers[i]; + lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx; + widths.right = 0; + widths.left = 0; + widths.paddingRight = 0; + widths.paddingLeft = 0; + const layoutMetrics = modifier.getLayoutMetrics(); + if (layoutMetrics) { + if (i !== 0) { + widths.right = layoutMetrics.xMax || 0; + widths.paddingRight = layoutMetrics.paddingRight || 0; + } + widths.left = -layoutMetrics.xMin || 0; + widths.paddingLeft = layoutMetrics.paddingLeft || 0; + if (i === endModifiers.length - 1) { + widths.paddingLeft = 0; + } + } + else { + widths.paddingRight = modifier.getPadding(i - lastBarlineIdx); + if (i !== 0) { + widths.right = modifier.getWidth(); + } + if (i === 0) { + widths.left = modifier.getWidth(); + } + } + x -= widths.paddingRight; + x -= widths.right; + modifier.setX(x); + x -= widths.left; + x -= widths.paddingLeft; + } + this.end_x = endModifiers.length === 1 ? this.x + this.width : x; + this.formatted = true; + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + this.applyStyle(); + ctx.openGroup('stave', this.getAttribute('id')); + if (!this.formatted) + this.format(); + const num_lines = this.options.num_lines; + const width = this.width; + const x = this.x; + let y; + for (let line = 0; line < num_lines; line++) { + y = this.getYForLine(line); + if (this.options.line_config[line].visible) { + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x + width, y); + ctx.stroke(); + } + } + ctx.closeGroup(); + this.restoreStyle(); + for (let i = 0; i < this.modifiers.length; i++) { + const modifier = this.modifiers[i]; + if (typeof modifier.draw === 'function') { + modifier.applyStyle(ctx); + modifier.draw(this, this.getModifierXShift(i)); + modifier.restoreStyle(ctx); + } + } + if (this.measure > 0) { + ctx.save(); + ctx.setFont(this.textFont); + const textWidth = ctx.measureText('' + this.measure).width; + y = this.getYForTopText(0) + 3; + ctx.fillText('' + this.measure, this.x - textWidth / 2, y); + ctx.restore(); + } + return this; + } + getVerticalBarWidth() { + return this.options.vertical_bar_width; + } + getConfigForLines() { + return this.options.line_config; + } + setConfigForLine(line_number, line_config) { + if (line_number >= this.options.num_lines || line_number < 0) { + throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.'); + } + if (line_config.visible === undefined) { + throw new RuntimeError('StaveConfigError', "The line configuration object is missing the 'visible' property."); + } + if (typeof line_config.visible !== 'boolean') { + throw new RuntimeError('StaveConfigError', "The line configuration objects 'visible' property must be true or false."); + } + this.options.line_config[line_number] = line_config; + return this; + } + setConfigForLines(lines_configuration) { + if (lines_configuration.length !== this.options.num_lines) { + throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave'); + } + for (const line_config in lines_configuration) { + if (lines_configuration[line_config].visible == undefined) { + lines_configuration[line_config] = this.options.line_config[line_config]; + } + this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]); + } + this.options.line_config = lines_configuration; + return this; + } + static formatBegModifiers(staves) { + const adjustCategoryStartX = (category) => { + let minStartX = 0; + staves.forEach((stave) => { + const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category); + if (modifiers.length > 0 && modifiers[0].getX() > minStartX) + minStartX = modifiers[0].getX(); + }); + let adjustX = 0; + staves.forEach((stave) => { + adjustX = 0; + const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category); + modifiers.forEach((modifier) => { + if (minStartX - modifier.getX() > adjustX) + adjustX = minStartX - modifier.getX(); + }); + const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN); + let bAdjust = false; + allModifiers.forEach((modifier) => { + if (modifier.getCategory() === category) + bAdjust = true; + if (bAdjust && adjustX > 0) + modifier.setX(modifier.getX() + adjustX); + }); + stave.setNoteStartX(stave.getNoteStartX() + adjustX); + }); + }; + staves.forEach((stave) => { + if (!stave.formatted) + stave.format(); + }); + adjustCategoryStartX("Clef"); + adjustCategoryStartX("KeySignature"); + adjustCategoryStartX("TimeSignature"); + let maxX = 0; + staves.forEach((stave) => { + if (stave.getNoteStartX() > maxX) + maxX = stave.getNoteStartX(); + }); + staves.forEach((stave) => { + stave.setNoteStartX(maxX); + }); + maxX = 0; + staves.forEach((stave) => { + const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, "Barline"); + modifiers.forEach((modifier) => { + if (modifier.getType() == BarlineType.REPEAT_BEGIN) + if (modifier.getX() > maxX) + maxX = modifier.getX(); + }); + }); + staves.forEach((stave) => { + const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, "Barline"); + modifiers.forEach((modifier) => { + if (modifier.getType() == BarlineType.REPEAT_BEGIN) + modifier.setX(maxX); + }); + }); + } +} +Stave.TEXT_FONT = { + family: Font.SANS_SERIF, + size: 8, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, +}; +export { Stave }; diff --git a/build/esm/src/stavebarline.js b/build/esm/src/stavebarline.js new file mode 100644 index 0000000000..3e85b4d3c8 --- /dev/null +++ b/build/esm/src/stavebarline.js @@ -0,0 +1,186 @@ +import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; +import { Tables } from './tables.js'; +export var BarlineType; +(function (BarlineType) { + BarlineType[BarlineType["SINGLE"] = 1] = "SINGLE"; + BarlineType[BarlineType["DOUBLE"] = 2] = "DOUBLE"; + BarlineType[BarlineType["END"] = 3] = "END"; + BarlineType[BarlineType["REPEAT_BEGIN"] = 4] = "REPEAT_BEGIN"; + BarlineType[BarlineType["REPEAT_END"] = 5] = "REPEAT_END"; + BarlineType[BarlineType["REPEAT_BOTH"] = 6] = "REPEAT_BOTH"; + BarlineType[BarlineType["NONE"] = 7] = "NONE"; +})(BarlineType || (BarlineType = {})); +export class Barline extends StaveModifier { + static get CATEGORY() { + return "Barline"; + } + static get type() { + return BarlineType; + } + static get typeString() { + return { + single: BarlineType.SINGLE, + double: BarlineType.DOUBLE, + end: BarlineType.END, + repeatBegin: BarlineType.REPEAT_BEGIN, + repeatEnd: BarlineType.REPEAT_END, + repeatBoth: BarlineType.REPEAT_BOTH, + none: BarlineType.NONE, + }; + } + constructor(type) { + super(); + this.thickness = Tables.STAVE_LINE_THICKNESS; + const TYPE = BarlineType; + this.widths = {}; + this.widths[TYPE.SINGLE] = 5; + this.widths[TYPE.DOUBLE] = 5; + this.widths[TYPE.END] = 5; + this.widths[TYPE.REPEAT_BEGIN] = 5; + this.widths[TYPE.REPEAT_END] = 5; + this.widths[TYPE.REPEAT_BOTH] = 5; + this.widths[TYPE.NONE] = 5; + this.paddings = {}; + this.paddings[TYPE.SINGLE] = 0; + this.paddings[TYPE.DOUBLE] = 0; + this.paddings[TYPE.END] = 0; + this.paddings[TYPE.REPEAT_BEGIN] = 15; + this.paddings[TYPE.REPEAT_END] = 15; + this.paddings[TYPE.REPEAT_BOTH] = 15; + this.paddings[TYPE.NONE] = 0; + this.layoutMetricsMap = {}; + this.layoutMetricsMap[TYPE.SINGLE] = { + xMin: 0, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.DOUBLE] = { + xMin: -3, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.END] = { + xMin: -5, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.REPEAT_END] = { + xMin: -10, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = { + xMin: -2, + xMax: 10, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.REPEAT_BOTH] = { + xMin: -10, + xMax: 10, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.NONE] = { + xMin: 0, + xMax: 0, + paddingLeft: 5, + paddingRight: 5, + }; + this.setPosition(StaveModifierPosition.BEGIN); + this.setType(type); + } + getType() { + return this.type; + } + setType(type) { + this.type = typeof type === 'string' ? Barline.typeString[type] : type; + this.setWidth(this.widths[this.type]); + this.setPadding(this.paddings[this.type]); + this.setLayoutMetrics(this.layoutMetricsMap[this.type]); + return this; + } + draw(stave) { + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('stavebarline', this.getAttribute('id')); + switch (this.type) { + case BarlineType.SINGLE: + this.drawVerticalBar(stave, this.x, false); + break; + case BarlineType.DOUBLE: + this.drawVerticalBar(stave, this.x, true); + break; + case BarlineType.END: + this.drawVerticalEndBar(stave, this.x); + break; + case BarlineType.REPEAT_BEGIN: + this.drawRepeatBar(stave, this.x, true); + if (stave.getX() !== this.x) { + this.drawVerticalBar(stave, stave.getX()); + } + break; + case BarlineType.REPEAT_END: + this.drawRepeatBar(stave, this.x, false); + break; + case BarlineType.REPEAT_BOTH: + this.drawRepeatBar(stave, this.x, false); + this.drawRepeatBar(stave, this.x, true); + break; + default: + break; + } + ctx.closeGroup(); + this.restoreStyle(ctx); + } + drawVerticalBar(stave, x, double_bar) { + const staveCtx = stave.checkContext(); + const topY = stave.getTopLineTopY(); + const botY = stave.getBottomLineBottomY(); + if (double_bar) { + staveCtx.fillRect(x - 3, topY, 1, botY - topY); + } + staveCtx.fillRect(x, topY, 1, botY - topY); + } + drawVerticalEndBar(stave, x) { + const staveCtx = stave.checkContext(); + const topY = stave.getTopLineTopY(); + const botY = stave.getBottomLineBottomY(); + staveCtx.fillRect(x - 5, topY, 1, botY - topY); + staveCtx.fillRect(x - 2, topY, 3, botY - topY); + } + drawRepeatBar(stave, x, begin) { + const staveCtx = stave.checkContext(); + const topY = stave.getTopLineTopY(); + const botY = stave.getBottomLineBottomY(); + let x_shift = 3; + if (!begin) { + x_shift = -5; + } + staveCtx.fillRect(x + x_shift, topY, 1, botY - topY); + staveCtx.fillRect(x - 2, topY, 3, botY - topY); + const dot_radius = 2; + if (begin) { + x_shift += 4; + } + else { + x_shift -= 4; + } + const dot_x = x + x_shift + dot_radius / 2; + let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines(); + y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2; + let dot_y = topY + y_offset + dot_radius / 2; + staveCtx.beginPath(); + staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false); + staveCtx.fill(); + dot_y += stave.getSpacingBetweenLines(); + staveCtx.beginPath(); + staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false); + staveCtx.fill(); + } +} diff --git a/build/esm/src/staveconnector.js b/build/esm/src/staveconnector.js new file mode 100644 index 0000000000..5f62181d16 --- /dev/null +++ b/build/esm/src/staveconnector.js @@ -0,0 +1,200 @@ +import { Element } from './element.js'; +import { Font, FontStyle, FontWeight } from './font.js'; +import { Glyph } from './glyph.js'; +import { Tables } from './tables.js'; +import { RuntimeError } from './util.js'; +function drawBoldDoubleLine(ctx, type, topX, topY, botY) { + if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) { + throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.'); + } + let x_shift = 3; + let variableWidth = 3.5; + const thickLineOffset = 2; + if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) { + x_shift = -5; + variableWidth = 3; + } + ctx.fillRect(topX + x_shift, topY, 1, botY - topY); + ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY); +} +class StaveConnector extends Element { + static get CATEGORY() { + return "StaveConnector"; + } + constructor(top_stave, bottom_stave) { + super(); + this.thickness = Tables.STAVE_LINE_THICKNESS; + this.width = 3; + this.top_stave = top_stave; + this.bottom_stave = bottom_stave; + this.type = StaveConnector.type.DOUBLE; + this.resetFont(); + this.x_shift = 0; + this.texts = []; + } + setType(type) { + const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type; + if (Object.values(StaveConnector.type).includes(newType)) { + this.type = newType; + } + return this; + } + getType() { + return this.type; + } + setText(text, options = {}) { + this.texts.push({ + content: text, + options: Object.assign({ shift_x: 0, shift_y: 0 }, options), + }); + return this; + } + setXShift(x_shift) { + if (typeof x_shift !== 'number') { + throw new RuntimeError('InvalidType', 'x_shift must be a Number'); + } + this.x_shift = x_shift; + return this; + } + getXShift() { + return this.x_shift; + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + let topY = this.top_stave.getYForLine(0); + let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness; + let width = this.width; + let topX = this.top_stave.getX(); + const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT || + this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT || + this.type === StaveConnector.type.THIN_DOUBLE; + if (isRightSidedConnector) { + topX = this.top_stave.getX() + this.top_stave.getWidth(); + } + let attachment_height = botY - topY; + switch (this.type) { + case StaveConnector.type.SINGLE: + width = 1; + break; + case StaveConnector.type.SINGLE_LEFT: + width = 1; + break; + case StaveConnector.type.SINGLE_RIGHT: + width = 1; + break; + case StaveConnector.type.DOUBLE: + topX -= this.width + 2; + topY -= this.thickness; + attachment_height += 0.5; + break; + case StaveConnector.type.BRACE: { + width = 12; + const x1 = this.top_stave.getX() - 2 + this.x_shift; + const y1 = topY; + const x3 = x1; + const y3 = botY; + const x2 = x1 - width; + const y2 = y1 + attachment_height / 2.0; + const cpx1 = x2 - 0.9 * width; + const cpy1 = y1 + 0.2 * attachment_height; + const cpx2 = x1 + 1.1 * width; + const cpy2 = y2 - 0.135 * attachment_height; + const cpx3 = cpx2; + const cpy3 = y2 + 0.135 * attachment_height; + const cpx4 = cpx1; + const cpy4 = y3 - 0.2 * attachment_height; + const cpx5 = x2 - width; + const cpy5 = cpy4; + const cpx6 = x1 + 0.4 * width; + const cpy6 = y2 + 0.135 * attachment_height; + const cpx7 = cpx6; + const cpy7 = y2 - 0.135 * attachment_height; + const cpx8 = cpx5; + const cpy8 = cpy1; + ctx.beginPath(); + ctx.moveTo(x1, y1); + ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2); + ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3); + ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2); + ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1); + ctx.fill(); + ctx.stroke(); + break; + } + case StaveConnector.type.BRACKET: + topY -= 6; + botY += 6; + attachment_height = botY - topY; + Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop'); + Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom'); + topX -= this.width + 2; + break; + case StaveConnector.type.BOLD_DOUBLE_LEFT: + drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness); + break; + case StaveConnector.type.BOLD_DOUBLE_RIGHT: + drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness); + break; + case StaveConnector.type.THIN_DOUBLE: + width = 1; + attachment_height -= this.thickness; + break; + case StaveConnector.type.NONE: + break; + default: + throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`); + } + if (this.type !== StaveConnector.type.BRACE && + this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT && + this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT && + this.type !== StaveConnector.type.NONE) { + ctx.fillRect(topX, topY, width, attachment_height); + } + if (this.type === StaveConnector.type.THIN_DOUBLE) { + ctx.fillRect(topX - 3, topY, width, attachment_height); + } + ctx.save(); + ctx.setLineWidth(2); + ctx.setFont(this.textFont); + for (let i = 0; i < this.texts.length; i++) { + const text = this.texts[i]; + const text_width = ctx.measureText('' + text.content).width; + const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x; + const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y; + ctx.fillText('' + text.content, x, y + 4); + } + ctx.restore(); + } +} +StaveConnector.TEXT_FONT = { + family: Font.SERIF, + size: 16, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, +}; +StaveConnector.type = { + SINGLE_RIGHT: 0, + SINGLE_LEFT: 1, + SINGLE: 1, + DOUBLE: 2, + BRACE: 3, + BRACKET: 4, + BOLD_DOUBLE_LEFT: 5, + BOLD_DOUBLE_RIGHT: 6, + THIN_DOUBLE: 7, + NONE: 8, +}; +StaveConnector.typeString = { + singleRight: StaveConnector.type.SINGLE_RIGHT, + singleLeft: StaveConnector.type.SINGLE_LEFT, + single: StaveConnector.type.SINGLE, + double: StaveConnector.type.DOUBLE, + brace: StaveConnector.type.BRACE, + bracket: StaveConnector.type.BRACKET, + boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT, + boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT, + thinDouble: StaveConnector.type.THIN_DOUBLE, + none: StaveConnector.type.NONE, +}; +export { StaveConnector }; diff --git a/build/esm/src/stavehairpin.js b/build/esm/src/stavehairpin.js new file mode 100644 index 0000000000..b6b1542032 --- /dev/null +++ b/build/esm/src/stavehairpin.js @@ -0,0 +1,121 @@ +import { Element } from './element.js'; +import { Modifier } from './modifier.js'; +import { RuntimeError } from './util.js'; +class StaveHairpin extends Element { + static get CATEGORY() { + return "StaveHairpin"; + } + static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) { + var _a, _b; + const ppt = formatter.pixelsPerTick; + if (ppt == null) { + throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.'); + } + const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0); + const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0); + const hairpin_options = { + height: options.height, + y_shift: options.y_shift, + left_shift_px: l_shift_px, + right_shift_px: r_shift_px, + right_shift_ticks: 0, + left_shift_ticks: 0, + }; + new StaveHairpin({ + first_note: notes.first_note, + last_note: notes.last_note, + }, type) + .setContext(ctx) + .setRenderOptions(hairpin_options) + .setPosition(position) + .draw(); + } + constructor(notes, type) { + super(); + this.setNotes(notes); + this.hairpin = type; + this.position = Modifier.Position.BELOW; + this.render_options = { + height: 10, + y_shift: 0, + left_shift_px: 0, + right_shift_px: 0, + right_shift_ticks: 0, + left_shift_ticks: 0, + }; + } + setPosition(position) { + if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) { + this.position = position; + } + return this; + } + setRenderOptions(options) { + if (options.height != null && + options.y_shift != null && + options.left_shift_px != null && + options.right_shift_px != null) { + this.render_options = options; + } + return this; + } + setNotes(notes) { + if (!notes.first_note && !notes.last_note) { + throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.'); + } + this.notes = notes; + this.first_note = notes.first_note; + this.last_note = notes.last_note; + return this; + } + renderHairpin(params) { + const ctx = this.checkContext(); + let dis = this.render_options.y_shift + 20; + let y_shift = params.first_y; + if (this.position === Modifier.Position.ABOVE) { + dis = -dis + 30; + y_shift = params.first_y - params.staff_height; + } + const l_shift = this.render_options.left_shift_px; + const r_shift = this.render_options.right_shift_px; + ctx.beginPath(); + switch (this.hairpin) { + case StaveHairpin.type.CRESC: + ctx.moveTo(params.last_x + r_shift, y_shift + dis); + ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis); + ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis); + break; + case StaveHairpin.type.DECRESC: + ctx.moveTo(params.first_x + l_shift, y_shift + dis); + ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis); + ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis); + break; + default: + break; + } + ctx.stroke(); + ctx.closePath(); + } + draw() { + this.checkContext(); + this.setRendered(); + const firstNote = this.first_note; + const lastNote = this.last_note; + if (!firstNote || !lastNote) + throw new RuntimeError('NoNote', 'Notes required to draw'); + const start = firstNote.getModifierStartXY(this.position, 0); + const end = lastNote.getModifierStartXY(this.position, 0); + this.renderHairpin({ + first_x: start.x, + last_x: end.x, + first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(), + last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(), + staff_height: firstNote.checkStave().getHeight(), + }); + } +} +StaveHairpin.type = { + CRESC: 1, + DECRESC: 2, +}; +export { StaveHairpin }; diff --git a/build/esm/src/staveline.js b/build/esm/src/staveline.js new file mode 100644 index 0000000000..a3d06bb8db --- /dev/null +++ b/build/esm/src/staveline.js @@ -0,0 +1,216 @@ +import { Element } from './element.js'; +import { Tables } from './tables.js'; +import { TextJustification } from './textnote.js'; +import { RuntimeError } from './util.js'; +function drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) { + ctx.beginPath(); + ctx.moveTo(x0, y0); + ctx.lineTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.lineTo(x0, y0); + ctx.closePath(); + ctx.fill(); +} +class StaveLine extends Element { + static get CATEGORY() { + return "StaveLine"; + } + constructor(notes) { + super(); + this.setNotes(notes); + this.text = ''; + this.resetFont(); + this.render_options = { + padding_left: 4, + padding_right: 3, + line_width: 1, + line_dash: undefined, + rounded_end: true, + color: undefined, + draw_start_arrow: false, + draw_end_arrow: false, + arrowhead_length: 10, + arrowhead_angle: Math.PI / 8, + text_position_vertical: StaveLine.TextVerticalPosition.TOP, + text_justification: StaveLine.TextJustification.CENTER, + }; + } + setText(text) { + this.text = text; + return this; + } + setNotes(notes) { + if (!notes.first_note && !notes.last_note) { + throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.'); + } + if (!notes.first_indices) + notes.first_indices = [0]; + if (!notes.last_indices) + notes.last_indices = [0]; + if (notes.first_indices.length !== notes.last_indices.length) { + throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.'); + } + this.notes = notes; + this.first_note = notes.first_note; + this.first_indices = notes.first_indices; + this.last_note = notes.last_note; + this.last_indices = notes.last_indices; + return this; + } + applyLineStyle() { + const ctx = this.checkContext(); + const render_options = this.render_options; + if (render_options.line_dash) { + ctx.setLineDash(render_options.line_dash); + } + if (render_options.line_width) { + ctx.setLineWidth(render_options.line_width); + } + if (render_options.rounded_end) { + ctx.setLineCap('round'); + } + else { + ctx.setLineCap('square'); + } + } + applyFontStyle() { + const ctx = this.checkContext(); + ctx.setFont(this.textFont); + const render_options = this.render_options; + const color = render_options.color; + if (color) { + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + } + } + drawArrowLine(ctx, pt1, pt2) { + const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow; + const x1 = pt1.x; + const y1 = pt1.y; + const x2 = pt2.x; + const y2 = pt2.y; + const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + const ratio = (distance - this.render_options.arrowhead_length / 3) / distance; + let end_x; + let end_y; + let start_x; + let start_y; + if (this.render_options.draw_end_arrow || both_arrows) { + end_x = Math.round(x1 + (x2 - x1) * ratio); + end_y = Math.round(y1 + (y2 - y1) * ratio); + } + else { + end_x = x2; + end_y = y2; + } + if (this.render_options.draw_start_arrow || both_arrows) { + start_x = x1 + (x2 - x1) * (1 - ratio); + start_y = y1 + (y2 - y1) * (1 - ratio); + } + else { + start_x = x1; + start_y = y1; + } + if (this.render_options.color) { + ctx.setStrokeStyle(this.render_options.color); + ctx.setFillStyle(this.render_options.color); + } + ctx.beginPath(); + ctx.moveTo(start_x, start_y); + ctx.lineTo(end_x, end_y); + ctx.stroke(); + ctx.closePath(); + const line_angle = Math.atan2(y2 - y1, x2 - x1); + const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle)); + let angle1; + let angle2; + let top_x; + let top_y; + let bottom_x; + let bottom_y; + if (this.render_options.draw_end_arrow || both_arrows) { + angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle; + top_x = x2 + Math.cos(angle1) * h; + top_y = y2 + Math.sin(angle1) * h; + angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle; + bottom_x = x2 + Math.cos(angle2) * h; + bottom_y = y2 + Math.sin(angle2) * h; + drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y); + } + if (this.render_options.draw_start_arrow || both_arrows) { + angle1 = line_angle + this.render_options.arrowhead_angle; + top_x = x1 + Math.cos(angle1) * h; + top_y = y1 + Math.sin(angle1) * h; + angle2 = line_angle - this.render_options.arrowhead_angle; + bottom_x = x1 + Math.cos(angle2) * h; + bottom_y = y1 + Math.sin(angle2) * h; + drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y); + } + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const first_note = this.first_note; + const last_note = this.last_note; + const render_options = this.render_options; + ctx.save(); + this.applyLineStyle(); + let start_position = { x: 0, y: 0 }; + let end_position = { x: 0, y: 0 }; + this.first_indices.forEach((first_index, i) => { + const last_index = this.last_indices[i]; + start_position = first_note.getModifierStartXY(2, first_index); + end_position = last_note.getModifierStartXY(1, last_index); + const upwards_slope = start_position.y > end_position.y; + start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left; + end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right; + const notehead_width = first_note.getGlyphProps().getWidth(); + const first_displaced = first_note.getKeyProps()[first_index].displaced; + if (first_displaced && first_note.getStemDirection() === 1) { + start_position.x += notehead_width + render_options.padding_left; + } + const last_displaced = last_note.getKeyProps()[last_index].displaced; + if (last_displaced && last_note.getStemDirection() === -1) { + end_position.x -= notehead_width + render_options.padding_right; + } + start_position.y += upwards_slope ? -3 : 1; + end_position.y += upwards_slope ? 2 : 0; + this.drawArrowLine(ctx, start_position, end_position); + }); + ctx.restore(); + const text_width = ctx.measureText(this.text).width; + const justification = render_options.text_justification; + let x = 0; + if (justification === StaveLine.TextJustification.LEFT) { + x = start_position.x; + } + else if (justification === StaveLine.TextJustification.CENTER) { + const delta_x = end_position.x - start_position.x; + const center_x = delta_x / 2 + start_position.x; + x = center_x - text_width / 2; + } + else if (justification === StaveLine.TextJustification.RIGHT) { + x = end_position.x - text_width; + } + let y = 0; + const vertical_position = render_options.text_position_vertical; + if (vertical_position === StaveLine.TextVerticalPosition.TOP) { + y = first_note.checkStave().getYForTopText(); + } + else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) { + y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK); + } + ctx.save(); + this.applyFontStyle(); + ctx.fillText(this.text, x, y); + ctx.restore(); + return this; + } +} +StaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT); +StaveLine.TextVerticalPosition = { + TOP: 1, + BOTTOM: 2, +}; +StaveLine.TextJustification = TextJustification; +export { StaveLine }; diff --git a/build/esm/src/stavemodifier.js b/build/esm/src/stavemodifier.js new file mode 100644 index 0000000000..ea7e8a6c25 --- /dev/null +++ b/build/esm/src/stavemodifier.js @@ -0,0 +1,77 @@ +import { Element } from './element.js'; +import { defined } from './util.js'; +export var StaveModifierPosition; +(function (StaveModifierPosition) { + StaveModifierPosition[StaveModifierPosition["CENTER"] = 0] = "CENTER"; + StaveModifierPosition[StaveModifierPosition["LEFT"] = 1] = "LEFT"; + StaveModifierPosition[StaveModifierPosition["RIGHT"] = 2] = "RIGHT"; + StaveModifierPosition[StaveModifierPosition["ABOVE"] = 3] = "ABOVE"; + StaveModifierPosition[StaveModifierPosition["BELOW"] = 4] = "BELOW"; + StaveModifierPosition[StaveModifierPosition["BEGIN"] = 5] = "BEGIN"; + StaveModifierPosition[StaveModifierPosition["END"] = 6] = "END"; +})(StaveModifierPosition || (StaveModifierPosition = {})); +export class StaveModifier extends Element { + static get CATEGORY() { + return "StaveModifier"; + } + static get Position() { + return StaveModifierPosition; + } + constructor() { + super(); + this.width = 0; + this.x = 0; + this.padding = 10; + this.position = StaveModifierPosition.ABOVE; + } + getPosition() { + return this.position; + } + setPosition(position) { + this.position = position; + return this; + } + getStave() { + return this.stave; + } + checkStave() { + return defined(this.stave, 'NoStave', 'No stave attached to instance.'); + } + setStave(stave) { + this.stave = stave; + return this; + } + getWidth() { + return this.width; + } + setWidth(width) { + this.width = width; + return this; + } + getX() { + return this.x; + } + setX(x) { + this.x = x; + return this; + } + placeGlyphOnLine(glyph, stave, line, customShift = 0) { + glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift); + } + getPadding(index) { + return index !== undefined && index < 2 ? 0 : this.padding; + } + setPadding(padding) { + this.padding = padding; + return this; + } + setLayoutMetrics(layoutMetrics) { + this.layoutMetrics = layoutMetrics; + return this; + } + getLayoutMetrics() { + return this.layoutMetrics; + } + draw(...args) { + } +} diff --git a/build/esm/src/stavenote.js b/build/esm/src/stavenote.js new file mode 100644 index 0000000000..4ab7579c91 --- /dev/null +++ b/build/esm/src/stavenote.js @@ -0,0 +1,875 @@ +import { BoundingBox } from './boundingbox.js'; +import { Modifier } from './modifier.js'; +import { NoteHead } from './notehead.js'; +import { Stem } from './stem.js'; +import { StemmableNote } from './stemmablenote.js'; +import { Tables } from './tables.js'; +import { defined, log, midLine, RuntimeError } from './util.js'; +function showDeprecationWarningForNoteHeads() { + console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.'); +} +function L(...args) { + if (StaveNote.DEBUG) + log('Vex.Flow.StaveNote', args); +} +const isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0); +function shiftRestVertical(rest, note, dir) { + const delta = dir; + rest.line += delta; + rest.maxLine += delta; + rest.minLine += delta; + rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta); +} +function centerRest(rest, noteU, noteL) { + const delta = rest.line - midLine(noteU.minLine, noteL.maxLine); + rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta); + rest.line -= delta; + rest.maxLine -= delta; + rest.minLine -= delta; +} +class StaveNote extends StemmableNote { + static get CATEGORY() { + return "StaveNote"; + } + static get STEM_UP() { + return Stem.UP; + } + static get STEM_DOWN() { + return Stem.DOWN; + } + static get LEDGER_LINE_OFFSET() { + return 3; + } + static get minNoteheadPadding() { + const musicFont = Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + static format(notes, state) { + var _a, _b; + if (!notes || notes.length < 2) + return false; + const notesList = []; + for (let i = 0; i < notes.length; i++) { + const props = notes[i].sortedKeyProps; + const line = props[0].keyProps.line; + let minL = props[props.length - 1].keyProps.line; + const stemDirection = notes[i].getStemDirection(); + const stemMax = notes[i].getStemLength() / 10; + const stemMin = notes[i].getStemMinimumLength() / 10; + let maxL; + if (notes[i].isRest()) { + maxL = line + notes[i].glyphProps.line_above; + minL = line - notes[i].glyphProps.line_below; + } + else { + maxL = + stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line; + minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax; + } + notesList.push({ + line: props[0].keyProps.line, + maxLine: maxL, + minLine: minL, + isrest: notes[i].isRest(), + stemDirection: stemDirection, + stemMax, + stemMin, + voice_shift: notes[i].getVoiceShiftWidth(), + is_displaced: notes[i].isDisplaced(), + note: notes[i], + }); + } + let voices = 0; + let noteU = undefined; + let noteM = undefined; + let noteL = undefined; + const draw = [false, false, false]; + for (let i = 0; i < notesList.length; i++) { + draw[i] = notesList[i].note.render_options.draw == false ? false : true; + } + if (draw[0] && draw[1] && draw[2]) { + voices = 3; + noteU = notesList[0]; + noteM = notesList[1]; + noteL = notesList[2]; + } + else if (draw[0] && draw[1]) { + voices = 2; + noteU = notesList[0]; + noteL = notesList[1]; + } + else if (draw[0] && draw[2]) { + voices = 2; + noteU = notesList[0]; + noteL = notesList[2]; + } + else if (draw[1] && draw[2]) { + voices = 2; + noteU = notesList[1]; + noteL = notesList[2]; + } + else { + return true; + } + if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) { + noteU = notesList[1]; + noteL = notesList[0]; + } + const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift); + let xShift = 0; + if (voices === 2) { + const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5; + if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) { + noteL.note.render_options.draw = false; + } + else if (noteU.minLine <= noteL.maxLine + lineSpacing) { + if (noteU.isrest) { + shiftRestVertical(noteU, noteL, 1); + } + else if (noteL.isrest) { + shiftRestVertical(noteL, noteU, -1); + } + else { + const lineDiff = Math.abs(noteU.line - noteL.line); + if (noteU.note.hasStem() && noteL.note.hasStem()) { + const noteUHead = Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration); + const noteLHead = Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration); + if (!Tables.UNISON || + noteUHead !== noteLHead || + noteU.note.getModifiers().filter((item) => item.getCategory() === "Dot" && item.getIndex() === 0) + .length !== + noteL.note.getModifiers().filter((item) => item.getCategory() === "Dot" && item.getIndex() === 0) + .length || + (lineDiff < 1 && lineDiff > 0) || + JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) { + xShift = voiceXShift + 2; + if (noteU.stemDirection === noteL.stemDirection) { + noteU.note.setXShift(xShift); + } + else { + noteL.note.setXShift(xShift); + } + } + else if (noteU.note.voice !== noteL.note.voice) { + if (noteU.stemDirection === noteL.stemDirection) { + if (noteU.line != noteL.line) { + xShift = voiceXShift + 2; + noteU.note.setXShift(xShift); + } + else { + if (noteL.stemDirection === 1) { + noteL.stemDirection = -1; + noteL.note.setStemDirection(-1); + } + } + } + } + } + else if (lineDiff < 1) { + xShift = voiceXShift + 2; + if (noteU.note.duration < noteL.note.duration) { + noteU.note.setXShift(xShift); + } + else { + noteL.note.setXShift(xShift); + } + } + else if (noteU.note.hasStem()) { + noteU.stemDirection = -noteU.note.getStemDirection(); + noteU.note.setStemDirection(noteU.stemDirection); + } + else if (noteL.note.hasStem()) { + noteL.stemDirection = -noteL.note.getStemDirection(); + noteL.note.setStemDirection(noteL.stemDirection); + } + } + } + state.right_shift += xShift; + return true; + } + if (!noteM) + throw new RuntimeError('InvalidState', 'noteM not defined.'); + if (noteM.isrest && !noteU.isrest && !noteL.isrest) { + if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) { + const restHeight = noteM.maxLine - noteM.minLine; + const space = noteU.minLine - noteL.maxLine; + if (restHeight < space) { + centerRest(noteM, noteU, noteL); + } + else { + xShift = voiceXShift + 2; + noteM.note.setXShift(xShift); + if (noteL.note.hasBeam() === false) { + noteL.stemDirection = -1; + noteL.note.setStemDirection(-1); + } + if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) { + noteU.stemDirection = 1; + noteU.note.setStemDirection(1); + } + } + state.right_shift += xShift; + return true; + } + } + if (noteU.isrest && noteM.isrest && noteL.isrest) { + noteU.note.render_options.draw = false; + noteL.note.render_options.draw = false; + state.right_shift += xShift; + return true; + } + if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) { + noteM.note.render_options.draw = false; + } + if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) { + noteM.note.render_options.draw = false; + } + if (noteU.isrest && noteU.minLine <= noteM.maxLine) { + shiftRestVertical(noteU, noteM, 1); + } + if (noteL.isrest && noteM.minLine <= noteL.maxLine) { + shiftRestVertical(noteL, noteM, -1); + } + if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) { + xShift = voiceXShift + 2; + noteM.note.setXShift(xShift); + if (noteL.note.hasBeam() === false) { + noteL.stemDirection = -1; + noteL.note.setStemDirection(-1); + } + if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) { + noteU.stemDirection = 1; + noteU.note.setStemDirection(1); + } + } + state.right_shift += xShift; + return true; + } + static postFormat(notes) { + if (!notes) + return false; + notes.forEach((note) => note.postFormat()); + return true; + } + constructor(noteStruct) { + var _a, _b, _c; + super(noteStruct); + this.minLine = 0; + this.maxLine = 0; + this.sortedKeyProps = []; + this.ledgerLineStyle = {}; + this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble'; + this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0; + this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType); + defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); + this.displaced = false; + this.dot_shiftY = 0; + this.use_default_head_x = false; + this._noteHeads = []; + this.modifiers = []; + this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET }); + this.calculateKeyProps(); + this.buildStem(); + if (noteStruct.auto_stem) { + this.autoStem(); + } + else { + this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP); + } + this.reset(); + this.buildFlag(); + } + reset() { + super.reset(); + const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle()); + this.buildNoteHeads(); + this._noteHeads.forEach((noteHead, index) => { + const noteHeadStyle = noteHeadStyles[index]; + if (noteHeadStyle) + noteHead.setStyle(noteHeadStyle); + }); + const stave = this.stave; + if (stave) { + this.setStave(stave); + } + this.calcNoteDisplacements(); + return this; + } + setBeam(beam) { + this.beam = beam; + this.calcNoteDisplacements(); + if (this.stem) { + this.stem.setExtension(this.getStemExtension()); + } + return this; + } + buildStem() { + this.setStem(new Stem({ hide: !!this.isRest() })); + return this; + } + buildNoteHeads() { + this._noteHeads = []; + const stemDirection = this.getStemDirection(); + const keys = this.getKeys(); + let lastLine = undefined; + let lineDiff = undefined; + let displaced = false; + let start; + let end; + let step; + if (stemDirection === Stem.UP) { + start = 0; + end = keys.length; + step = 1; + } + else { + start = keys.length - 1; + end = -1; + step = -1; + } + for (let i = start; i !== end; i += step) { + const noteProps = this.sortedKeyProps[i].keyProps; + const line = noteProps.line; + if (lastLine === undefined) { + lastLine = line; + } + else { + lineDiff = Math.abs(lastLine - line); + if (lineDiff === 0 || lineDiff === 0.5) { + displaced = !displaced; + } + else { + displaced = false; + this.use_default_head_x = true; + } + } + lastLine = line; + const notehead = new NoteHead({ + duration: this.duration, + note_type: this.noteType, + displaced, + stem_direction: stemDirection, + custom_glyph_code: noteProps.code, + glyph_font_scale: this.render_options.glyph_font_scale, + x_shift: noteProps.shift_right, + stem_up_x_offset: noteProps.stem_up_x_offset, + stem_down_x_offset: noteProps.stem_down_x_offset, + line: noteProps.line, + }); + this.addChildElement(notehead); + this._noteHeads[this.sortedKeyProps[i].index] = notehead; + } + return this._noteHeads; + } + autoStem() { + this.setStemDirection(this.calculateOptimalStemDirection()); + } + calculateOptimalStemDirection() { + this.minLine = this.sortedKeyProps[0].keyProps.line; + this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line; + const MIDDLE_LINE = 3; + const decider = (this.minLine + this.maxLine) / 2; + const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN; + return stemDirection; + } + calculateKeyProps() { + let lastLine; + for (let i = 0; i < this.keys.length; ++i) { + const key = this.keys[i]; + if (this.glyphProps.rest) + this.glyphProps.position = key; + const options = { octave_shift: this.octave_shift || 0, duration: this.duration }; + const props = Tables.keyProperties(key, this.clef, options); + if (!props) { + throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`); + } + if (props.key === 'R') { + if (this.duration === '1' || this.duration === 'w') { + props.line = 4; + } + else { + props.line = 3; + } + } + const line = props.line; + if (lastLine == undefined) { + lastLine = line; + } + else { + if (Math.abs(lastLine - line) === 0.5) { + this.displaced = true; + props.displaced = true; + if (this.keyProps.length > 0) { + this.keyProps[i - 1].displaced = true; + } + } + } + lastLine = line; + this.keyProps.push(props); + } + this.keyProps.forEach((keyProps, index) => { + this.sortedKeyProps.push({ keyProps, index }); + }); + this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line); + } + getBoundingBox() { + var _a, _b; + if (!this.preFormatted) { + throw new RuntimeError('UnformattedNote', "Can't call getBoundingBox on an unformatted note."); + } + const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics(); + const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx; + let minY = 0; + let maxY = 0; + const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2; + const lineSpacing = halfLineSpacing * 2; + if (this.isRest()) { + const y = this.ys[0]; + const frac = Tables.durationToFraction(this.duration); + if (frac.equals(1) || frac.equals(2)) { + minY = y - halfLineSpacing; + maxY = y + halfLineSpacing; + } + else { + minY = y - this.glyphProps.line_above * lineSpacing; + maxY = y + this.glyphProps.line_below * lineSpacing; + } + } + else if (this.glyphProps.stem) { + const ys = this.getStemExtents(); + ys.baseY += halfLineSpacing * this.getStemDirection(); + minY = Math.min(ys.topY, ys.baseY); + maxY = Math.max(ys.topY, ys.baseY); + } + else { + minY = 0; + maxY = 0; + for (let i = 0; i < this.ys.length; ++i) { + const yy = this.ys[i]; + if (i === 0) { + minY = yy; + maxY = yy; + } + else { + minY = Math.min(yy, minY); + maxY = Math.max(yy, maxY); + } + } + minY -= halfLineSpacing; + maxY += halfLineSpacing; + } + return new BoundingBox(x, minY, w, maxY - minY); + } + getLineNumber(isTopNote) { + if (!this.keyProps.length) { + throw new RuntimeError('NoKeyProps', "Can't get bottom note line, because note is not initialized properly."); + } + let resultLine = this.keyProps[0].line; + for (let i = 0; i < this.keyProps.length; i++) { + const thisLine = this.keyProps[i].line; + if (isTopNote) { + if (thisLine > resultLine) + resultLine = thisLine; + } + else { + if (thisLine < resultLine) + resultLine = thisLine; + } + } + return resultLine; + } + isRest() { + return this.glyphProps.rest; + } + isChord() { + return !this.isRest() && this.keys.length > 1; + } + hasStem() { + return this.glyphProps.stem; + } + hasFlag() { + return super.hasFlag() && !this.isRest(); + } + getStemX() { + if (this.noteType === 'r') { + return this.getCenterGlyphX(); + } + else { + return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0); + } + } + getYForTopText(textLine) { + const extents = this.getStemExtents(); + return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1)); + } + getYForBottomText(textLine) { + const extents = this.getStemExtents(); + return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine); + } + setStave(stave) { + super.setStave(stave); + const ys = this._noteHeads.map((notehead) => { + notehead.setStave(stave); + return notehead.getY(); + }); + this.setYs(ys); + if (this.stem) { + const { y_top, y_bottom } = this.getNoteHeadBounds(); + this.stem.setYBounds(y_top, y_bottom); + } + return this; + } + isDisplaced() { + return this.displaced; + } + setNoteDisplaced(displaced) { + this.displaced = displaced; + return this; + } + getTieRightX() { + let tieStartX = this.getAbsoluteX(); + tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx; + if (this.modifierContext) + tieStartX += this.modifierContext.getRightShift(); + return tieStartX; + } + getTieLeftX() { + let tieEndX = this.getAbsoluteX(); + tieEndX += this.x_shift - this.leftDisplacedHeadPx; + return tieEndX; + } + getLineForRest() { + let restLine = this.keyProps[0].line; + if (this.keyProps.length > 1) { + const lastLine = this.keyProps[this.keyProps.length - 1].line; + const top = Math.max(restLine, lastLine); + const bot = Math.min(restLine, lastLine); + restLine = midLine(top, bot); + } + return restLine; + } + getModifierStartXY(position, index, options = {}) { + var _a, _b; + if (!this.preFormatted) { + throw new RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); + } + if (this.ys.length === 0) { + throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.'); + } + const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position; + let x = 0; + if (position === LEFT) { + x = -1 * 2; + } + else if (position === RIGHT) { + x = this.getGlyphWidth() + this.x_shift + 2; + if (this.stem_direction === Stem.UP && + this.hasFlag() && + (options.forceFlagRight || isInnerNoteIndex(this, index))) { + x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0; + } + } + else if (position === BELOW || position === ABOVE) { + x = this.getGlyphWidth() / 2; + } + return { + x: this.getAbsoluteX() + x, + y: this.ys[index], + }; + } + setStyle(style) { + return super.setGroupStyle(style); + } + setStemStyle(style) { + const stem = this.getStem(); + if (stem) + stem.setStyle(style); + return this; + } + getStemStyle() { + var _a; + return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle(); + } + setLedgerLineStyle(style) { + this.ledgerLineStyle = style; + } + getLedgerLineStyle() { + return this.ledgerLineStyle; + } + setFlagStyle(style) { + var _a; + (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style); + } + getFlagStyle() { + var _a; + return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle(); + } + setKeyStyle(index, style) { + this._noteHeads[index].setStyle(style); + return this; + } + setKeyLine(index, line) { + this.keyProps[index].line = line; + this.reset(); + return this; + } + getKeyLine(index) { + return this.keyProps[index].line; + } + getVoiceShiftWidth() { + return this.getGlyphWidth() * (this.displaced ? 2 : 1); + } + calcNoteDisplacements() { + this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0); + this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0); + } + preFormat() { + if (this.preFormatted) + return; + let noteHeadPadding = 0; + if (this.modifierContext) { + this.modifierContext.preFormat(); + if (this.modifierContext.getWidth() === 0) { + noteHeadPadding = StaveNote.minNoteheadPadding; + } + } + let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding; + if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) { + width += this.getGlyphWidth(); + } + this.setWidth(width); + this.preFormatted = true; + } + getNoteHeadBounds() { + let yTop = +Infinity; + let yBottom = -Infinity; + let nonDisplacedX; + let displacedX; + let highestLine = this.checkStave().getNumLines(); + let lowestLine = 1; + let highestDisplacedLine; + let lowestDisplacedLine; + let highestNonDisplacedLine = highestLine; + let lowestNonDisplacedLine = lowestLine; + this._noteHeads.forEach((notehead) => { + const line = notehead.getLine(); + const y = notehead.getY(); + yTop = Math.min(y, yTop); + yBottom = Math.max(y, yBottom); + if (displacedX === undefined && notehead.isDisplaced()) { + displacedX = notehead.getAbsoluteX(); + } + if (nonDisplacedX === undefined && !notehead.isDisplaced()) { + nonDisplacedX = notehead.getAbsoluteX(); + } + highestLine = Math.max(line, highestLine); + lowestLine = Math.min(line, lowestLine); + if (notehead.isDisplaced()) { + highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine); + lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine); + } + else { + highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine); + lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine); + } + }, this); + return { + y_top: yTop, + y_bottom: yBottom, + displaced_x: displacedX, + non_displaced_x: nonDisplacedX, + highest_line: highestLine, + lowest_line: lowestLine, + highest_displaced_line: highestDisplacedLine, + lowest_displaced_line: lowestDisplacedLine, + highest_non_displaced_line: highestNonDisplacedLine, + lowest_non_displaced_line: lowestNonDisplacedLine, + }; + } + getNoteHeadBeginX() { + return this.getAbsoluteX() + this.x_shift; + } + getNoteHeadEndX() { + const xBegin = this.getNoteHeadBeginX(); + return xBegin + this.getGlyphWidth(); + } + get noteHeads() { + return this._noteHeads.slice(); + } + get note_heads() { + showDeprecationWarningForNoteHeads(); + return this.noteHeads; + } + drawLedgerLines() { + const stave = this.checkStave(); + const { glyphProps, render_options: { stroke_px }, } = this; + const ctx = this.checkContext(); + const width = glyphProps.getWidth() + stroke_px * 2; + const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2; + if (this.isRest()) + return; + if (!ctx) { + throw new RuntimeError('NoCanvasContext', "Can't draw without a canvas context."); + } + const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds(); + if (highest_line < 6 && lowest_line > 0) + return; + const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0); + const drawLedgerLine = (y, normal, displaced) => { + let x; + if (displaced && normal) + x = min_x - stroke_px; + else if (normal) + x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px; + else + x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px; + const ledgerWidth = normal && displaced ? doubleWidth : width; + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x + ledgerWidth, y); + ctx.stroke(); + }; + const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle()); + this.applyStyle(ctx, style); + for (let line = 6; line <= highest_line; ++line) { + const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line; + const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line; + drawLedgerLine(stave.getYForNote(line), normal, displaced); + } + for (let line = 0; line >= lowest_line; --line) { + const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line; + const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line; + drawLedgerLine(stave.getYForNote(line), normal, displaced); + } + this.restoreStyle(ctx, style); + } + drawModifiers(noteheadParam) { + const ctx = this.checkContext(); + for (let i = 0; i < this.modifiers.length; i++) { + const modifier = this.modifiers[i]; + const index = modifier.checkIndex(); + const notehead = this._noteHeads[index]; + if (notehead == noteheadParam) { + const noteheadStyle = notehead.getStyle(); + notehead.applyStyle(ctx, noteheadStyle); + modifier.setContext(ctx); + modifier.drawWithStyle(); + notehead.restoreStyle(ctx, noteheadStyle); + } + } + } + shouldDrawFlag() { + const hasStem = this.stem !== undefined; + const hasFlag = this.glyphProps.flag == true; + const hasNoBeam = this.beam === undefined; + return hasStem && hasFlag && hasNoBeam; + } + drawFlag() { + var _a, _b, _c, _d, _e; + const ctx = this.checkContext(); + if (!ctx) { + throw new RuntimeError('NoCanvasContext', "Can't draw without a canvas context."); + } + if (this.shouldDrawFlag()) { + const { y_top, y_bottom } = this.getNoteHeadBounds(); + const noteStemHeight = this.stem.getHeight(); + const flagX = this.getStemX(); + const flagY = this.getStemDirection() === Stem.DOWN + ? + y_top - + noteStemHeight + + 2 - + (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() - + ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale()) + : + y_bottom - + noteStemHeight - + 2 + + (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() - + ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale()); + (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY); + } + } + drawNoteHeads() { + const ctx = this.checkContext(); + this._noteHeads.forEach((notehead) => { + notehead.applyStyle(ctx); + ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true }); + notehead.setContext(ctx).draw(); + this.drawModifiers(notehead); + ctx.closeGroup(); + notehead.restoreStyle(ctx); + }); + } + drawStem(stemOptions) { + const ctx = this.checkContext(); + if (stemOptions) { + this.setStem(new Stem(stemOptions)); + } + if (this.shouldDrawFlag() && this.stem) { + this.stem.adjustHeightForFlag(); + } + if (this.stem) { + this.stem.setContext(ctx).draw(); + } + } + getStaveNoteScale() { + return 1.0; + } + getStemExtension() { + const super_stem_extension = super.getStemExtension(); + if (!this.glyphProps.stem) { + return super_stem_extension; + } + const stem_direction = this.getStemDirection(); + if (stem_direction !== this.calculateOptimalStemDirection()) { + return super_stem_extension; + } + let mid_line_distance; + const MIDDLE_LINE = 3; + if (stem_direction === Stem.UP) { + mid_line_distance = MIDDLE_LINE - this.maxLine; + } + else { + mid_line_distance = this.minLine - MIDDLE_LINE; + } + const lines_over_octave_from_mid_line = mid_line_distance - 3.5; + if (lines_over_octave_from_mid_line <= 0) { + return super_stem_extension; + } + const stave = this.getStave(); + let spacing_between_lines = 10; + if (stave != undefined) { + spacing_between_lines = stave.getSpacingBetweenLines(); + } + return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines; + } + draw() { + if (this.render_options.draw === false) + return; + if (this.ys.length === 0) { + throw new RuntimeError('NoYValues', "Can't draw note without Y values."); + } + const ctx = this.checkContext(); + const xBegin = this.getNoteHeadBeginX(); + const shouldRenderStem = this.hasStem() && !this.beam; + this._noteHeads.forEach((notehead) => notehead.setX(xBegin)); + if (this.stem) { + const stemX = this.getStemX(); + this.stem.setNoteHeadXBounds(stemX, stemX); + } + L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys); + this.applyStyle(); + ctx.openGroup('stavenote', this.getAttribute('id')); + this.drawLedgerLines(); + if (shouldRenderStem) + this.drawStem(); + this.drawNoteHeads(); + this.drawFlag(); + ctx.closeGroup(); + this.restoreStyle(); + this.setRendered(); + } +} +StaveNote.DEBUG = false; +export { StaveNote }; diff --git a/build/esm/src/staverepetition.js b/build/esm/src/staverepetition.js new file mode 100644 index 0000000000..e5689075ae --- /dev/null +++ b/build/esm/src/staverepetition.js @@ -0,0 +1,159 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { Glyph } from './glyph.js'; +import { StaveModifier } from './stavemodifier.js'; +import { Tables } from './tables.js'; +class Repetition extends StaveModifier { + static get CATEGORY() { + return "Repetition"; + } + constructor(type, x, y_shift) { + super(); + this.symbol_type = type; + this.x = x; + this.x_shift = 0; + this.y_shift = y_shift; + this.resetFont(); + } + setShiftX(x) { + this.x_shift = x; + return this; + } + setShiftY(y) { + this.y_shift = y; + return this; + } + draw(stave, x) { + this.setRendered(); + switch (this.symbol_type) { + case Repetition.type.CODA_RIGHT: + this.drawCodaFixed(stave, x + stave.getWidth()); + break; + case Repetition.type.CODA_LEFT: + this.drawSymbolText(stave, x, 'Coda', true); + break; + case Repetition.type.SEGNO_LEFT: + this.drawSignoFixed(stave, x); + break; + case Repetition.type.SEGNO_RIGHT: + this.drawSignoFixed(stave, x + stave.getWidth()); + break; + case Repetition.type.DC: + this.drawSymbolText(stave, x, 'D.C.', false); + break; + case Repetition.type.DC_AL_CODA: + this.drawSymbolText(stave, x, 'D.C. al', true); + break; + case Repetition.type.DC_AL_FINE: + this.drawSymbolText(stave, x, 'D.C. al Fine', false); + break; + case Repetition.type.DS: + this.drawSymbolText(stave, x, 'D.S.', false); + break; + case Repetition.type.DS_AL_CODA: + this.drawSymbolText(stave, x, 'D.S. al', true); + break; + case Repetition.type.DS_AL_FINE: + this.drawSymbolText(stave, x, 'D.S. al Fine', false); + break; + case Repetition.type.FINE: + this.drawSymbolText(stave, x, 'Fine', false); + break; + case Repetition.type.TO_CODA: + this.drawSymbolText(stave, x, 'To', true); + break; + default: + break; + } + return this; + } + drawCodaFixed(stave, x) { + const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; + Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' }); + return this; + } + drawSignoFixed(stave, x) { + const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; + Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' }); + return this; + } + drawSymbolText(stave, x, text, draw_coda) { + var _a; + const ctx = stave.checkContext(); + ctx.save(); + ctx.setFont(this.textFont); + let text_x = 0; + let symbol_x = 0; + const modifierWidth = stave.getNoteStartX() - this.x; + switch (this.symbol_type) { + case Repetition.type.CODA_LEFT: + text_x = this.x + stave.getVerticalBarWidth(); + symbol_x = + text_x + + ctx.measureText(text).width + + Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); + break; + case Repetition.type.DC: + case Repetition.type.DC_AL_FINE: + case Repetition.type.DS: + case Repetition.type.DS_AL_FINE: + case Repetition.type.FINE: + text_x = + this.x + + x + + this.x_shift + + stave.getWidth() - + Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') - + modifierWidth - + ctx.measureText(text).width; + break; + default: + text_x = + this.x + + x + + this.x_shift + + stave.getWidth() - + Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') - + modifierWidth - + ctx.measureText(text).width - + Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); + symbol_x = + text_x + + ctx.measureText(text).width + + Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); + break; + } + const y = stave.getYForTopText(stave.getNumLines()) + + this.y_shift + + Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY'); + if (draw_coda) { + Glyph.renderGlyph(ctx, symbol_x, y, Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', { + category: 'coda', + }); + } + ctx.fillText(text, text_x, y + 5); + ctx.restore(); + return this; + } +} +Repetition.TEXT_FONT = { + family: Font.SERIF, + size: Tables.NOTATION_FONT_SCALE / 3, + weight: FontWeight.BOLD, + style: FontStyle.NORMAL, +}; +Repetition.type = { + NONE: 1, + CODA_LEFT: 2, + CODA_RIGHT: 3, + SEGNO_LEFT: 4, + SEGNO_RIGHT: 5, + DC: 6, + DC_AL_CODA: 7, + DC_AL_FINE: 8, + DS: 9, + DS_AL_CODA: 10, + DS_AL_FINE: 11, + FINE: 12, + TO_CODA: 13, +}; +export { Repetition }; diff --git a/build/esm/src/stavesection.js b/build/esm/src/stavesection.js new file mode 100644 index 0000000000..6f79c04c71 --- /dev/null +++ b/build/esm/src/stavesection.js @@ -0,0 +1,63 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { StaveModifier } from './stavemodifier.js'; +import { TextFormatter } from './textformatter.js'; +class StaveSection extends StaveModifier { + static get CATEGORY() { + return "StaveSection"; + } + constructor(section, x, shift_y, drawRect = true) { + super(); + this.setWidth(16); + this.section = section; + this.x = x; + this.shift_x = 0; + this.shift_y = shift_y; + this.drawRect = drawRect; + this.resetFont(); + } + setStaveSection(section) { + this.section = section; + return this; + } + setShiftX(x) { + this.shift_x = x; + return this; + } + setShiftY(y) { + this.shift_y = y; + return this; + } + draw(stave, shift_x) { + const borderWidth = 2; + const padding = 2; + const ctx = stave.checkContext(); + this.setRendered(); + ctx.save(); + ctx.setLineWidth(borderWidth); + ctx.setFont(this.textFont); + const textFormatter = TextFormatter.create(this.textFont); + const textWidth = textFormatter.getWidthForTextInPx(this.section); + const textY = textFormatter.getYForStringInPx(this.section); + const textHeight = textY.height; + const headroom = -1 * textY.yMin; + const width = textWidth + 2 * padding; + const height = textHeight + 2 * padding; + const y = stave.getYForTopText(1.5) + this.shift_y; + const x = this.x + shift_x; + if (this.drawRect) { + ctx.beginPath(); + ctx.rect(x, y - height + headroom, width, height); + ctx.stroke(); + } + ctx.fillText(this.section, x + padding, y - padding); + ctx.restore(); + return this; + } +} +StaveSection.TEXT_FONT = { + family: Font.SANS_SERIF, + size: 10, + weight: FontWeight.BOLD, + style: FontStyle.NORMAL, +}; +export { StaveSection }; diff --git a/build/esm/src/stavetempo.js b/build/esm/src/stavetempo.js new file mode 100644 index 0000000000..e54f90f508 --- /dev/null +++ b/build/esm/src/stavetempo.js @@ -0,0 +1,95 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { Glyph } from './glyph.js'; +import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; +import { Tables } from './tables.js'; +import { TextFormatter } from './textformatter.js'; +class StaveTempo extends StaveModifier { + static get CATEGORY() { + return "StaveTempo"; + } + constructor(tempo, x, shift_y) { + super(); + this.render_options = { glyph_font_scale: 30 }; + this.tempo = tempo; + this.position = StaveModifierPosition.ABOVE; + this.x = x; + this.shift_x = 10; + this.shift_y = shift_y; + this.resetFont(); + } + setTempo(tempo) { + this.tempo = tempo; + return this; + } + setShiftX(x) { + this.shift_x = x; + return this; + } + setShiftY(y) { + this.shift_y = y; + return this; + } + draw(stave, shift_x) { + const ctx = stave.checkContext(); + this.setRendered(); + const options = this.render_options; + const scale = options.glyph_font_scale / Tables.NOTATION_FONT_SCALE; + const name = this.tempo.name; + const duration = this.tempo.duration; + const dots = this.tempo.dots || 0; + const bpm = this.tempo.bpm; + let x = this.x + this.shift_x + shift_x; + const y = stave.getYForTopText(1) + this.shift_y; + ctx.save(); + const textFormatter = TextFormatter.create(this.textFont); + if (name) { + ctx.setFont(this.textFont); + ctx.fillText(name, x, y); + x += textFormatter.getWidthForTextInPx(name); + } + if (duration && bpm) { + const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' }); + ctx.setFont(noteTextFont); + const noteTextFormatter = TextFormatter.create(noteTextFont); + if (name) { + x += noteTextFormatter.getWidthForTextInPx('|'); + ctx.fillText('(', x, y); + x += noteTextFormatter.getWidthForTextInPx('('); + } + const glyphProps = Tables.getGlyphProps(duration); + x += 3 * scale; + Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head); + x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale); + if (glyphProps.stem) { + let stem_height = 30; + if (glyphProps.beam_count) + stem_height += 3 * (glyphProps.beam_count - 1); + stem_height *= scale; + const y_top = y - stem_height; + ctx.fillRect(x - scale, y_top, scale, stem_height); + if (glyphProps.code && glyphProps.code_flag_upstem) { + const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, { + category: 'flag.staveTempo', + }); + x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution; + } + } + for (let i = 0; i < dots; i++) { + x += 6 * scale; + ctx.beginPath(); + ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false); + ctx.fill(); + } + ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y); + } + ctx.restore(); + return this; + } +} +StaveTempo.TEXT_FONT = { + family: Font.SERIF, + size: 14, + weight: FontWeight.BOLD, + style: FontStyle.NORMAL, +}; +export { StaveTempo }; diff --git a/build/esm/src/stavetext.js b/build/esm/src/stavetext.js new file mode 100644 index 0000000000..218eb4a639 --- /dev/null +++ b/build/esm/src/stavetext.js @@ -0,0 +1,83 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; +import { TextJustification, TextNote } from './textnote.js'; +import { RuntimeError } from './util.js'; +class StaveText extends StaveModifier { + static get CATEGORY() { + return "StaveText"; + } + constructor(text, position, options = {}) { + super(); + this.setWidth(16); + this.text = text; + this.position = position; + this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options); + this.resetFont(); + } + setStaveText(text) { + this.text = text; + return this; + } + setShiftX(x) { + this.shift_x = x; + return this; + } + setShiftY(y) { + this.shift_y = y; + return this; + } + setText(text) { + this.text = text; + return this; + } + draw(stave) { + const ctx = stave.checkContext(); + this.setRendered(); + ctx.save(); + ctx.setLineWidth(2); + ctx.setFont(this.textFont); + const text_width = ctx.measureText('' + this.text).width; + let x; + let y; + switch (this.position) { + case StaveModifierPosition.LEFT: + case StaveModifierPosition.RIGHT: + y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y; + if (this.position === StaveModifierPosition.LEFT) { + x = stave.getX() - text_width - 24 + this.options.shift_x; + } + else { + x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x; + } + break; + case StaveModifierPosition.ABOVE: + case StaveModifierPosition.BELOW: + x = stave.getX() + this.options.shift_x; + if (this.options.justification === TextJustification.CENTER) { + x += stave.getWidth() / 2 - text_width / 2; + } + else if (this.options.justification === TextJustification.RIGHT) { + x += stave.getWidth() - text_width; + } + if (this.position === StaveModifierPosition.ABOVE) { + y = stave.getYForTopText(2) + this.options.shift_y; + } + else { + y = stave.getYForBottomText(2) + this.options.shift_y; + } + break; + default: + throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.'); + } + ctx.fillText('' + this.text, x, y + 4); + ctx.restore(); + return this; + } +} +StaveText.TEXT_FONT = { + family: Font.SERIF, + size: 16, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, +}; +export { StaveText }; diff --git a/build/esm/src/stavetie.js b/build/esm/src/stavetie.js new file mode 100644 index 0000000000..93e5c08029 --- /dev/null +++ b/build/esm/src/stavetie.js @@ -0,0 +1,147 @@ +import { Element } from './element.js'; +import { RuntimeError } from './util.js'; +class StaveTie extends Element { + static get CATEGORY() { + return "StaveTie"; + } + constructor(notes, text) { + super(); + this.setNotes(notes); + this.text = text; + this.render_options = { + cp1: 8, + cp2: 12, + text_shift_x: 0, + first_x_shift: 0, + last_x_shift: 0, + y_shift: 7, + tie_spacing: 0, + }; + this.resetFont(); + } + setDirection(direction) { + this.direction = direction; + return this; + } + setNotes(notes) { + if (!notes.first_note && !notes.last_note) { + throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.'); + } + if (!notes.first_indices) { + notes.first_indices = [0]; + } + if (!notes.last_indices) { + notes.last_indices = [0]; + } + if (notes.first_indices.length !== notes.last_indices.length) { + throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.'); + } + this.notes = notes; + return this; + } + isPartial() { + return !this.notes.first_note || !this.notes.last_note; + } + renderTie(params) { + if (params.first_ys.length === 0 || params.last_ys.length === 0) { + throw new RuntimeError('BadArguments', 'No Y-values to render'); + } + const ctx = this.checkContext(); + let cp1 = this.render_options.cp1; + let cp2 = this.render_options.cp2; + if (Math.abs(params.last_x_px - params.first_x_px) < 10) { + cp1 = 2; + cp2 = 8; + } + const first_x_shift = this.render_options.first_x_shift; + const last_x_shift = this.render_options.last_x_shift; + const y_shift = this.render_options.y_shift * params.direction; + const first_indices = this.notes.first_indices; + const last_indices = this.notes.last_indices; + this.applyStyle(); + ctx.openGroup('stavetie', this.getAttribute('id')); + for (let i = 0; i < first_indices.length; ++i) { + const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2; + const first_y_px = params.first_ys[first_indices[i]] + y_shift; + const last_y_px = params.last_ys[last_indices[i]] + y_shift; + if (isNaN(first_y_px) || isNaN(last_y_px)) { + throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.'); + } + const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction; + const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction; + ctx.beginPath(); + ctx.moveTo(params.first_x_px + first_x_shift, first_y_px); + ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px); + ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px); + ctx.closePath(); + ctx.fill(); + } + ctx.closeGroup(); + this.restoreStyle(); + } + renderText(first_x_px, last_x_px) { + var _a, _b, _c; + if (!this.text) + return; + const ctx = this.checkContext(); + let center_x = (first_x_px + last_x_px) / 2; + center_x -= ctx.measureText(this.text).width / 2; + const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave(); + if (stave) { + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1); + ctx.restore(); + } + } + getNotes() { + return this.notes; + } + draw() { + this.checkContext(); + this.setRendered(); + const first_note = this.notes.first_note; + const last_note = this.notes.last_note; + let first_x_px = 0; + let last_x_px = 0; + let first_ys = [0]; + let last_ys = [0]; + let stem_direction = 0; + if (first_note) { + first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing; + stem_direction = first_note.getStemDirection(); + first_ys = first_note.getYs(); + } + else if (last_note) { + const stave = last_note.checkStave(); + first_x_px = stave.getTieStartX(); + first_ys = last_note.getYs(); + this.notes.first_indices = this.notes.last_indices; + } + if (last_note) { + last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing; + stem_direction = last_note.getStemDirection(); + last_ys = last_note.getYs(); + } + else if (first_note) { + const stave = first_note.checkStave(); + last_x_px = stave.getTieEndX(); + last_ys = first_note.getYs(); + this.notes.last_indices = this.notes.first_indices; + } + if (this.direction) { + stem_direction = this.direction; + } + this.renderTie({ + first_x_px, + last_x_px, + first_ys, + last_ys, + direction: stem_direction, + }); + this.renderText(first_x_px, last_x_px); + return true; + } +} +StaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT); +export { StaveTie }; diff --git a/build/esm/src/stavevolta.js b/build/esm/src/stavevolta.js new file mode 100644 index 0000000000..7fa9d72e5e --- /dev/null +++ b/build/esm/src/stavevolta.js @@ -0,0 +1,68 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { StaveModifier } from './stavemodifier.js'; +export var VoltaType; +(function (VoltaType) { + VoltaType[VoltaType["NONE"] = 1] = "NONE"; + VoltaType[VoltaType["BEGIN"] = 2] = "BEGIN"; + VoltaType[VoltaType["MID"] = 3] = "MID"; + VoltaType[VoltaType["END"] = 4] = "END"; + VoltaType[VoltaType["BEGIN_END"] = 5] = "BEGIN_END"; +})(VoltaType || (VoltaType = {})); +class Volta extends StaveModifier { + static get CATEGORY() { + return "Volta"; + } + static get type() { + return VoltaType; + } + constructor(type, number, x, y_shift) { + super(); + this.volta = type; + this.x = x; + this.y_shift = y_shift; + this.number = number; + this.resetFont(); + } + setShiftY(y) { + this.y_shift = y; + return this; + } + draw(stave, x) { + const ctx = stave.checkContext(); + this.setRendered(); + let width = stave.getWidth() - x; + const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; + const vert_height = 1.5 * stave.getSpacingBetweenLines(); + switch (this.volta) { + case VoltaType.BEGIN: + ctx.fillRect(this.x + x, top_y, 1, vert_height); + break; + case VoltaType.END: + width -= 5; + ctx.fillRect(this.x + x + width, top_y, 1, vert_height); + break; + case VoltaType.BEGIN_END: + width -= 3; + ctx.fillRect(this.x + x, top_y, 1, vert_height); + ctx.fillRect(this.x + x + width, top_y, 1, vert_height); + break; + default: + break; + } + if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) { + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText(this.number, this.x + x + 5, top_y + 15); + ctx.restore(); + } + ctx.fillRect(this.x + x, top_y, width, 1); + return this; + } +} +Volta.TEXT_FONT = { + family: Font.SANS_SERIF, + size: 9, + weight: FontWeight.BOLD, + style: FontStyle.NORMAL, +}; +export { Volta }; diff --git a/build/esm/src/stem.js b/build/esm/src/stem.js new file mode 100644 index 0000000000..e6cfdbdfcc --- /dev/null +++ b/build/esm/src/stem.js @@ -0,0 +1,134 @@ +import { Element } from './element.js'; +import { Tables } from './tables.js'; +import { log, RuntimeError } from './util.js'; +function L(...args) { + if (Stem.DEBUG) + log('Vex.Flow.Stem', args); +} +class Stem extends Element { + static get CATEGORY() { + return "Stem"; + } + static get UP() { + return 1; + } + static get DOWN() { + return -1; + } + static get WIDTH() { + return Tables.STEM_WIDTH; + } + static get HEIGHT() { + return Tables.STEM_HEIGHT; + } + constructor(options) { + super(); + this.stem_up_y_offset = 0; + this.stem_down_y_offset = 0; + this.stem_up_y_base_offset = 0; + this.stem_down_y_base_offset = 0; + this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0; + this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0; + this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0; + this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0; + this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0; + this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0; + this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false; + this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false; + this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0; + this.renderHeightAdjustment = 0; + this.setOptions(options); + } + setOptions(options) { + this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0; + this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0; + this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0; + this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0; + } + setNoteHeadXBounds(x_begin, x_end) { + this.x_begin = x_begin; + this.x_end = x_end; + return this; + } + setDirection(direction) { + this.stem_direction = direction; + } + setExtension(ext) { + this.stem_extension = ext; + } + getExtension() { + return this.stem_extension; + } + setYBounds(y_top, y_bottom) { + this.y_top = y_top; + this.y_bottom = y_bottom; + } + getHeight() { + const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset; + const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); + return unsigned_height * this.stem_direction; + } + getBoundingBox() { + throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.'); + } + getExtents() { + const isStemUp = this.stem_direction === Stem.UP; + const ys = [this.y_top, this.y_bottom]; + const stemHeight = Stem.HEIGHT + this.stem_extension; + const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys); + const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys); + const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction; + return { topY: stemTipY, baseY: outerMostNoteheadY }; + } + setVisibility(isVisible) { + this.hide = !isVisible; + return this; + } + setStemlet(isStemlet, stemletHeight) { + this.isStemlet = isStemlet; + this.stemletHeight = stemletHeight; + return this; + } + adjustHeightForFlag() { + this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3); + } + adjustHeightForBeam() { + this.renderHeightAdjustment = -Stem.WIDTH / 2; + } + draw() { + this.setRendered(); + if (this.hide) + return; + const ctx = this.checkContext(); + let stem_x; + let stem_y; + const stem_direction = this.stem_direction; + let y_base_offset = 0; + if (stem_direction === Stem.DOWN) { + stem_x = this.x_begin; + stem_y = this.y_top + this.stem_down_y_offset; + y_base_offset = this.stem_down_y_base_offset; + } + else { + stem_x = this.x_end; + stem_y = this.y_bottom - this.stem_up_y_offset; + y_base_offset = this.stem_up_y_base_offset; + } + const stemHeight = this.getHeight(); + L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom); + const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0; + ctx.save(); + this.applyStyle(); + ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true }); + ctx.beginPath(); + ctx.setLineWidth(Stem.WIDTH); + ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset); + ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction); + ctx.stroke(); + ctx.closeGroup(); + this.restoreStyle(); + ctx.restore(); + } +} +Stem.DEBUG = false; +export { Stem }; diff --git a/build/esm/src/stemmablenote.js b/build/esm/src/stemmablenote.js new file mode 100644 index 0000000000..a2b371a185 --- /dev/null +++ b/build/esm/src/stemmablenote.js @@ -0,0 +1,195 @@ +import { Glyph } from './glyph.js'; +import { Note } from './note.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { RuntimeError } from './util.js'; +export class StemmableNote extends Note { + static get CATEGORY() { + return "StemmableNote"; + } + constructor(noteStruct) { + super(noteStruct); + } + getStem() { + return this.stem; + } + checkStem() { + if (!this.stem) { + throw new RuntimeError('NoStem', 'No stem attached to instance'); + } + return this.stem; + } + setStem(stem) { + this.stem = stem; + this.addChildElement(stem); + return this; + } + buildStem() { + const stem = new Stem(); + this.setStem(stem); + return this; + } + buildFlag(category = 'flag') { + const { glyphProps } = this; + if (this.hasFlag()) { + const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem; + if (flagCode) + this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category }); + } + } + getBaseCustomNoteHeadGlyphProps() { + if (this.getStemDirection() === Stem.DOWN) { + return this.customGlyphs[this.customGlyphs.length - 1]; + } + else { + return this.customGlyphs[0]; + } + } + getStemLength() { + return Stem.HEIGHT + this.getStemExtension(); + } + getBeamCount() { + const glyphProps = this.getGlyphProps(); + if (glyphProps) { + return glyphProps.beam_count; + } + else { + return 0; + } + } + getStemMinimumLength() { + const frac = Tables.durationToFraction(this.duration); + let length = frac.value() <= 1 ? 0 : 20; + switch (this.duration) { + case '8': + if (this.beam == undefined) + length = 35; + break; + case '16': + length = this.beam == undefined ? 35 : 25; + break; + case '32': + length = this.beam == undefined ? 45 : 35; + break; + case '64': + length = this.beam == undefined ? 50 : 40; + break; + case '128': + length = this.beam == undefined ? 55 : 45; + break; + default: + break; + } + return length; + } + getStemDirection() { + if (!this.stem_direction) + throw new RuntimeError('NoStem', 'No stem attached to this note.'); + return this.stem_direction; + } + setStemDirection(direction) { + if (!direction) + direction = Stem.UP; + if (direction !== Stem.UP && direction !== Stem.DOWN) { + throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`); + } + this.stem_direction = direction; + this.reset(); + if (this.hasFlag()) { + this.buildFlag(); + } + this.beam = undefined; + if (this.stem) { + this.stem.setDirection(direction); + this.stem.setExtension(this.getStemExtension()); + const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps(); + const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, { + offsetYBaseStemUp: 0, + offsetYTopStemUp: 0, + offsetYBaseStemDown: 0, + offsetYTopStemDown: 0, + }); + this.stem.setOptions({ + stem_up_y_offset: offsets.offsetYTopStemUp, + stem_down_y_offset: offsets.offsetYTopStemDown, + stem_up_y_base_offset: offsets.offsetYBaseStemUp, + stem_down_y_base_offset: offsets.offsetYBaseStemDown, + }); + } + if (this.preFormatted) { + this.preFormat(); + } + return this; + } + getStemX() { + const x_begin = this.getAbsoluteX() + this.x_shift; + const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth(); + const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end; + return stem_x; + } + getCenterGlyphX() { + return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2; + } + getStemExtension() { + const glyphProps = this.getGlyphProps(); + if (this.stem_extension_override != undefined) { + return this.stem_extension_override; + } + if (this.beam) { + return glyphProps.stem_beam_extension; + } + if (glyphProps) { + return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension; + } + return 0; + } + setStemLength(height) { + this.stem_extension_override = height - Stem.HEIGHT; + return this; + } + getStemExtents() { + if (!this.stem) + throw new RuntimeError('NoStem', 'No stem attached to this note.'); + return this.stem.getExtents(); + } + getYForTopText(textLine) { + const stave = this.checkStave(); + if (this.hasStem()) { + const extents = this.getStemExtents(); + if (!extents) + throw new RuntimeError('InvalidState', 'Stem does not have extents.'); + return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1)); + } + else { + return stave.getYForTopText(textLine); + } + } + getYForBottomText(textLine) { + const stave = this.checkStave(); + if (this.hasStem()) { + const extents = this.getStemExtents(); + if (!extents) + throw new RuntimeError('InvalidState', 'Stem does not have extents.'); + return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine); + } + else { + return stave.getYForBottomText(textLine); + } + } + hasFlag() { + return Tables.getGlyphProps(this.duration).flag == true && !this.beam; + } + postFormat() { + var _a; + (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat(); + this.postFormatted = true; + return this; + } + drawStem(stemOptions) { + var _a; + this.checkContext(); + this.setRendered(); + this.setStem(new Stem(stemOptions)); + (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw(); + } +} diff --git a/build/esm/src/stringnumber.js b/build/esm/src/stringnumber.js new file mode 100644 index 0000000000..c1e8fe3ad9 --- /dev/null +++ b/build/esm/src/stringnumber.js @@ -0,0 +1,245 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { Modifier, ModifierPosition } from './modifier.js'; +import { Renderer } from './renderer.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { isStaveNote, isStemmableNote } from './typeguard.js'; +import { RuntimeError } from './util.js'; +class StringNumber extends Modifier { + static get CATEGORY() { + return "StringNumber"; + } + static get metrics() { + var _a; + return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : { + verticalPadding: 0, + stemPadding: 0, + leftPadding: 0, + rightPadding: 0, + }); + } + static format(nums, state) { + const left_shift = state.left_shift; + const right_shift = state.right_shift; + const num_spacing = 1; + if (!nums || nums.length === 0) + return false; + const nums_list = []; + let prev_note = null; + let extraXSpaceForDisplacedNotehead = 0; + let shift_right = 0; + const modLines = 0; + for (let i = 0; i < nums.length; ++i) { + const num = nums[i]; + const note = num.getNote(); + const pos = num.getPosition(); + if (!isStaveNote(note)) { + throw new RuntimeError('NoStaveNote'); + } + const index = num.checkIndex(); + const props = note.getKeyProps()[index]; + const mc = note.getModifierContext(); + const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5; + if (mc) { + if (pos === ModifierPosition.ABOVE) { + num.text_line = mc.getState().top_text_line; + state.top_text_line += verticalSpaceNeeded; + } + else if (pos === ModifierPosition.BELOW) { + num.text_line = mc.getState().text_line; + state.text_line += verticalSpaceNeeded; + } + } + if (note !== prev_note) { + for (let n = 0; n < note.keys.length; ++n) { + if (pos === Modifier.Position.LEFT) { + extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead); + } + if (right_shift === 0) { + shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right); + } + } + prev_note = note; + } + const glyphLine = modLines === 0 ? props.line : modLines; + nums_list.push({ + pos, + note, + num, + line: glyphLine, + shiftL: extraXSpaceForDisplacedNotehead, + shiftR: shift_right, + }); + } + nums_list.sort((a, b) => b.line - a.line); + let num_shiftR = 0; + let x_widthL = 0; + let x_widthR = 0; + let last_line = null; + let last_note = null; + for (let i = 0; i < nums_list.length; ++i) { + const note = nums_list[i].note; + const pos = nums_list[i].pos; + const num = nums_list[i].num; + const line = nums_list[i].line; + const shiftR = nums_list[i].shiftR; + if (line !== last_line || note !== last_note) { + num_shiftR = right_shift + shiftR; + } + const num_width = num.getWidth() + num_spacing; + let num_x_shift = 0; + if (pos === Modifier.Position.LEFT) { + num.setXShift(left_shift + extraXSpaceForDisplacedNotehead); + num_x_shift = num_width; + x_widthL = Math.max(num_x_shift, x_widthL); + } + else if (pos === Modifier.Position.RIGHT) { + num.setXShift(num_shiftR); + num_x_shift += num_width; + x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR; + } + last_line = line; + last_note = note; + } + state.left_shift += x_widthL; + state.right_shift += x_widthR; + return true; + } + constructor(number) { + super(); + this.string_number = number; + this.position = Modifier.Position.ABOVE; + this.x_shift = 0; + this.y_shift = 0; + this.text_line = 0; + this.stem_offset = 0; + this.x_offset = 0; + this.y_offset = 0; + this.dashed = true; + this.leg = Renderer.LineEndType.NONE; + this.radius = 8; + this.drawCircle = true; + this.setWidth(this.radius * 2 + 4); + this.resetFont(); + } + setLineEndType(leg) { + if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) { + this.leg = leg; + } + return this; + } + setStringNumber(number) { + this.string_number = number; + return this; + } + setOffsetX(x) { + this.x_offset = x; + return this; + } + setOffsetY(y) { + this.y_offset = y; + return this; + } + setLastNote(note) { + this.last_note = note; + return this; + } + setDashed(dashed) { + this.dashed = dashed; + return this; + } + setDrawCircle(drawCircle) { + this.drawCircle = drawCircle; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index); + const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP; + let dot_x = start.x + this.x_shift + this.x_offset; + let stem_ext = {}; + if (note.hasStem()) { + stem_ext = note.checkStem().getExtents(); + } + let dot_y = start.y + this.y_shift + this.y_offset; + switch (this.position) { + case Modifier.Position.ABOVE: + { + const ys = note.getYs(); + dot_y = ys.reduce((a, b) => (a < b ? a : b)); + if (note.hasStem() && stemDirection == Stem.UP) { + dot_y = stem_ext.topY + StringNumber.metrics.stemPadding; + } + dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE; + } + break; + case Modifier.Position.BELOW: + { + const ys = note.getYs(); + dot_y = ys.reduce((a, b) => (a > b ? a : b)); + if (note.hasStem() && stemDirection == Stem.DOWN) { + dot_y = stem_ext.topY - StringNumber.metrics.stemPadding; + } + dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE; + } + break; + case Modifier.Position.LEFT: + dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding; + break; + case Modifier.Position.RIGHT: + dot_x += this.radius / 2 + StringNumber.metrics.rightPadding; + break; + default: + throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`); + } + ctx.save(); + if (this.drawCircle) { + ctx.beginPath(); + ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false); + ctx.setLineWidth(1.5); + ctx.stroke(); + } + ctx.setFont(this.textFont); + const x = dot_x - ctx.measureText(this.string_number).width / 2; + ctx.fillText('' + this.string_number, x, dot_y + 4.5); + const lastNote = this.last_note; + if (isStemmableNote(lastNote)) { + const end = lastNote.getStemX() - note.getX() + 5; + ctx.setStrokeStyle('#000000'); + ctx.setLineCap('round'); + ctx.setLineWidth(0.6); + if (this.dashed) { + Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]); + } + else { + Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]); + } + let len; + let pattern; + switch (this.leg) { + case Renderer.LineEndType.UP: + len = -10; + pattern = this.dashed ? [3, 3] : [3, 0]; + Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern); + break; + case Renderer.LineEndType.DOWN: + len = 10; + pattern = this.dashed ? [3, 3] : [3, 0]; + Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern); + break; + default: + break; + } + } + ctx.restore(); + } +} +StringNumber.TEXT_FONT = { + family: Font.SANS_SERIF, + size: Font.SIZE, + weight: FontWeight.BOLD, + style: FontStyle.NORMAL, +}; +export { StringNumber }; diff --git a/build/esm/src/strokes.js b/build/esm/src/strokes.js new file mode 100644 index 0000000000..dfbfd6942e --- /dev/null +++ b/build/esm/src/strokes.js @@ -0,0 +1,202 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { Glyph } from './glyph.js'; +import { Modifier } from './modifier.js'; +import { Tables } from './tables.js'; +import { isNote, isStaveNote, isTabNote } from './typeguard.js'; +import { RuntimeError } from './util.js'; +class Stroke extends Modifier { + static get CATEGORY() { + return "Stroke"; + } + static format(strokes, state) { + const left_shift = state.left_shift; + const stroke_spacing = 0; + if (!strokes || strokes.length === 0) + return false; + const strokeList = strokes.map((stroke) => { + const note = stroke.getNote(); + const index = stroke.checkIndex(); + if (isStaveNote(note)) { + const { line } = note.getKeyProps()[index]; + const shift = note.getLeftDisplacedHeadPx(); + return { line, shift, stroke }; + } + else if (isTabNote(note)) { + const { str: string } = note.getPositions()[index]; + return { line: string, shift: 0, stroke }; + } + else { + throw new RuntimeError('Internal', 'Unexpected instance.'); + } + }); + const strokeShift = left_shift; + const xShift = strokeList.reduce((xShift, { stroke, shift }) => { + stroke.setXShift(strokeShift + shift); + return Math.max(stroke.getWidth() + stroke_spacing, xShift); + }, 0); + state.left_shift += xShift; + return true; + } + constructor(type, options) { + super(); + this.options = Object.assign({ all_voices: true }, options); + this.all_voices = this.options.all_voices; + this.type = type; + this.position = Modifier.Position.LEFT; + this.render_options = { + font_scale: Tables.NOTATION_FONT_SCALE, + }; + this.resetFont(); + this.setXShift(0); + this.setWidth(10); + } + getPosition() { + return this.position; + } + addEndNote(note) { + this.note_end = note; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index); + let ys = note.getYs(); + let topY = start.y; + let botY = start.y; + const x = start.x - 5; + const line_space = note.checkStave().getSpacingBetweenLines(); + const notes = this.checkModifierContext().getMembers(note.getCategory()); + for (let i = 0; i < notes.length; i++) { + const note = notes[i]; + if (isNote(note)) { + ys = note.getYs(); + for (let n = 0; n < ys.length; n++) { + if (this.note === notes[i] || this.all_voices) { + topY = Math.min(topY, ys[n]); + botY = Math.max(botY, ys[n]); + } + } + } + } + let arrow = ''; + let arrow_shift_x = 0; + let arrow_y = 0; + let text_shift_x = 0; + let text_y = 0; + switch (this.type) { + case Stroke.Type.BRUSH_DOWN: + arrow = 'arrowheadBlackUp'; + arrow_shift_x = -3; + arrow_y = topY - line_space / 2 + 10; + botY += line_space / 2; + break; + case Stroke.Type.BRUSH_UP: + arrow = 'arrowheadBlackDown'; + arrow_shift_x = 0.5; + arrow_y = botY + line_space / 2; + topY -= line_space / 2; + break; + case Stroke.Type.ROLL_DOWN: + case Stroke.Type.RASQUEDO_DOWN: + arrow = 'arrowheadBlackUp'; + arrow_shift_x = -3; + text_shift_x = this.x_shift + arrow_shift_x - 2; + if (isStaveNote(note)) { + topY += 1.5 * line_space; + if ((botY - topY) % 2 !== 0) { + botY += 0.5 * line_space; + } + else { + botY += line_space; + } + arrow_y = topY - line_space; + text_y = botY + line_space + 2; + } + else { + topY += 1.5 * line_space; + botY += line_space; + arrow_y = topY - 0.75 * line_space; + text_y = botY + 0.25 * line_space; + } + break; + case Stroke.Type.ROLL_UP: + case Stroke.Type.RASQUEDO_UP: + arrow = 'arrowheadBlackDown'; + arrow_shift_x = -4; + text_shift_x = this.x_shift + arrow_shift_x - 1; + if (isStaveNote(note)) { + arrow_y = line_space / 2; + topY += 0.5 * line_space; + if ((botY - topY) % 2 === 0) { + botY += line_space / 2; + } + arrow_y = botY + 0.5 * line_space; + text_y = topY - 1.25 * line_space; + } + else { + topY += 0.25 * line_space; + botY += 0.5 * line_space; + arrow_y = botY + 0.25 * line_space; + text_y = topY - line_space; + } + break; + case Stroke.Type.ARPEGGIO_DIRECTIONLESS: + topY += 0.5 * line_space; + botY += line_space; + break; + default: + throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`); + } + let strokeLine = 'straight'; + if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) { + ctx.fillRect(x + this.x_shift, topY, 1, botY - topY); + } + else { + strokeLine = 'wiggly'; + if (isStaveNote(note)) { + for (let i = topY; i <= botY; i += line_space) { + Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp'); + } + } + else { + let i; + for (i = topY; i <= botY; i += 10) { + Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp'); + } + if (this.type === Stroke.Type.RASQUEDO_DOWN) { + text_y = i + 0.25 * line_space; + } + } + } + if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) { + return; + } + Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, { + category: `stroke_${strokeLine}.${arrow}`, + }); + if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) { + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText('R', x + text_shift_x, text_y); + ctx.restore(); + } + } +} +Stroke.Type = { + BRUSH_DOWN: 1, + BRUSH_UP: 2, + ROLL_DOWN: 3, + ROLL_UP: 4, + RASQUEDO_DOWN: 5, + RASQUEDO_UP: 6, + ARPEGGIO_DIRECTIONLESS: 7, +}; +Stroke.TEXT_FONT = { + family: Font.SERIF, + size: Font.SIZE, + weight: FontWeight.BOLD, + style: FontStyle.ITALIC, +}; +export { Stroke }; diff --git a/build/esm/src/svgcontext.js b/build/esm/src/svgcontext.js new file mode 100644 index 0000000000..ab5b11f577 --- /dev/null +++ b/build/esm/src/svgcontext.js @@ -0,0 +1,466 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { RenderContext } from './rendercontext.js'; +import { Tables } from './tables.js'; +import { normalizeAngle, prefix, RuntimeError } from './util.js'; +const ATTRIBUTES_TO_IGNORE = { + path: { + x: true, + y: true, + width: true, + height: true, + 'font-family': true, + 'font-weight': true, + 'font-style': true, + 'font-size': true, + }, + rect: { + 'font-family': true, + 'font-weight': true, + 'font-style': true, + 'font-size': true, + }, + text: { + width: true, + height: true, + }, +}; +const SVG_NS = 'http://www.w3.org/2000/svg'; +const TWO_PI = 2 * Math.PI; +class MeasureTextCache { + constructor() { + this.cache = {}; + } + lookup(text, svg, attributes) { + let entries = this.cache[text]; + if (entries === undefined) { + entries = {}; + this.cache[text] = entries; + } + const family = attributes['font-family']; + const size = attributes['font-size']; + const weight = attributes['font-weight']; + const style = attributes['font-style']; + const key = `${family}%${size}%${weight}%${style}`; + let entry = entries[key]; + if (entry === undefined) { + entry = this.measureImpl(text, svg, attributes); + entries[key] = entry; + } + return entry; + } + measureImpl(text, svg, attributes) { + let txt = this.txt; + if (!txt) { + txt = document.createElementNS(SVG_NS, 'text'); + this.txt = txt; + } + txt.textContent = text; + if (attributes['font-family']) + txt.setAttributeNS(null, 'font-family', attributes['font-family']); + if (attributes['font-size']) + txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`); + if (attributes['font-style']) + txt.setAttributeNS(null, 'font-style', attributes['font-style']); + if (attributes['font-weight']) + txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`); + svg.appendChild(txt); + const bbox = txt.getBBox(); + svg.removeChild(txt); + return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height }; + } +} +class SVGContext extends RenderContext { + constructor(element) { + super(); + this.width = 0; + this.height = 0; + this.precision = 1; + this.backgroundFillStyle = 'white'; + this.fontCSSString = ''; + this.element = element; + this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES); + const svg = this.create('svg'); + this.element.appendChild(svg); + this.svg = svg; + this.parent = this.svg; + this.groups = [this.svg]; + this.path = ''; + this.pen = { x: NaN, y: NaN }; + this.lineWidth = 1.0; + const defaultFontAttributes = { + 'font-family': Font.SANS_SERIF, + 'font-size': Font.SIZE + 'pt', + 'font-weight': FontWeight.NORMAL, + 'font-style': FontStyle.NORMAL, + }; + this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes); + this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes); + this.groupAttributes = []; + this.applyAttributes(svg, this.attributes); + this.groupAttributes.push(Object.assign({}, this.attributes)); + this.shadow_attributes = { + width: 0, + color: 'black', + }; + this.state_stack = []; + } + round(n) { + return Math.round(n * this.precision) / this.precision; + } + create(svgElementType) { + return document.createElementNS(SVG_NS, svgElementType); + } + openGroup(cls, id, attrs) { + const group = this.create('g'); + this.groups.push(group); + this.parent.appendChild(group); + this.parent = group; + if (cls) + group.setAttribute('class', prefix(cls)); + if (id) + group.setAttribute('id', prefix(id)); + if (attrs && attrs.pointerBBox) { + group.setAttribute('pointer-events', 'bounding-box'); + } + this.applyAttributes(group, this.attributes); + this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes)); + return group; + } + closeGroup() { + this.groups.pop(); + this.groupAttributes.pop(); + this.parent = this.groups[this.groups.length - 1]; + } + add(elem) { + this.parent.appendChild(elem); + } + setFillStyle(style) { + this.attributes.fill = style; + return this; + } + setBackgroundFillStyle(style) { + this.backgroundFillStyle = style; + return this; + } + setStrokeStyle(style) { + this.attributes.stroke = style; + return this; + } + setShadowColor(color) { + this.shadow_attributes.color = color; + return this; + } + setShadowBlur(blur) { + this.shadow_attributes.width = blur; + return this; + } + setLineWidth(width) { + this.attributes['stroke-width'] = width; + this.lineWidth = width; + return this; + } + setLineDash(lineDash) { + if (Object.prototype.toString.call(lineDash) === '[object Array]') { + this.attributes['stroke-dasharray'] = lineDash.join(','); + return this; + } + else { + throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.'); + } + } + setLineCap(capType) { + this.attributes['stroke-linecap'] = capType; + return this; + } + resize(width, height) { + this.width = width; + this.height = height; + this.element.style.width = width.toString(); + this.svg.style.width = width.toString(); + this.svg.style.height = height.toString(); + const attributes = { + width, + height, + }; + this.applyAttributes(this.svg, attributes); + this.scale(this.state.scaleX, this.state.scaleY); + return this; + } + scale(x, y) { + this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x; + this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y; + const visibleWidth = this.width / this.state.scaleX; + const visibleHeight = this.height / this.state.scaleY; + this.setViewBox(0, 0, visibleWidth, visibleHeight); + return this; + } + setViewBox(viewBox_or_minX, minY, width, height) { + if (typeof viewBox_or_minX === 'string') { + this.svg.setAttribute('viewBox', viewBox_or_minX); + } + else { + const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height; + this.svg.setAttribute('viewBox', viewBoxString); + } + } + applyAttributes(element, attributes) { + const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName]; + for (const attrName in attributes) { + if (attrNamesToIgnore && attrNamesToIgnore[attrName]) { + continue; + } + if (attributes[attrName] && + (this.groupAttributes.length == 0 || + attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName])) + element.setAttributeNS(null, attrName, attributes[attrName]); + } + return element; + } + clear() { + while (this.svg.lastChild) { + this.svg.removeChild(this.svg.lastChild); + } + this.scale(this.state.scaleX, this.state.scaleY); + } + rect(x, y, width, height, attributes) { + if (height < 0) { + y += height; + height *= -1; + } + const rectangle = this.create('rect'); + attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' }; + x = this.round(x); + y = this.round(y); + width = this.round(width); + height = this.round(height); + this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes)); + this.add(rectangle); + return this; + } + fillRect(x, y, width, height) { + const attributes = { fill: this.attributes.fill, stroke: 'none' }; + this.rect(x, y, width, height, attributes); + return this; + } + clearRect(x, y, width, height) { + this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' }); + return this; + } + beginPath() { + this.path = ''; + this.pen.x = NaN; + this.pen.y = NaN; + return this; + } + moveTo(x, y) { + x = this.round(x); + y = this.round(y); + this.path += 'M' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + lineTo(x, y) { + x = this.round(x); + y = this.round(y); + this.path += 'L' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + bezierCurveTo(x1, y1, x2, y2, x, y) { + x = this.round(x); + y = this.round(y); + x1 = this.round(x1); + y1 = this.round(y1); + x2 = this.round(x2); + y2 = this.round(y2); + this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + quadraticCurveTo(x1, y1, x, y) { + x = this.round(x); + y = this.round(y); + x1 = this.round(x1); + y1 = this.round(y1); + this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + arc(x, y, radius, startAngle, endAngle, counterclockwise) { + let x0 = x + radius * Math.cos(startAngle); + let y0 = y + radius * Math.sin(startAngle); + x0 = this.round(x0); + y0 = this.round(y0); + const tmpStartTest = normalizeAngle(startAngle); + const tmpEndTest = normalizeAngle(endAngle); + if ((!counterclockwise && endAngle - startAngle >= TWO_PI) || + (counterclockwise && startAngle - endAngle >= TWO_PI) || + tmpStartTest === tmpEndTest) { + let x1 = x + radius * Math.cos(startAngle + Math.PI); + let y1 = y + radius * Math.sin(startAngle + Math.PI); + x1 = this.round(x1); + y1 = this.round(y1); + radius = this.round(radius); + this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `; + this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`; + this.pen.x = x0; + this.pen.y = y0; + } + else { + let x1 = x + radius * Math.cos(endAngle); + let y1 = y + radius * Math.sin(endAngle); + startAngle = tmpStartTest; + endAngle = tmpEndTest; + let large; + if (Math.abs(endAngle - startAngle) < Math.PI) { + large = counterclockwise; + } + else { + large = !counterclockwise; + } + if (startAngle > endAngle) { + large = !large; + } + const sweep = !counterclockwise; + x1 = this.round(x1); + y1 = this.round(y1); + radius = this.round(radius); + this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`; + this.pen.x = x1; + this.pen.y = y1; + } + return this; + } + closePath() { + this.path += 'Z'; + return this; + } + getShadowStyle() { + const sa = this.shadow_attributes; + return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`; + } + fill(attributes) { + const path = this.create('path'); + if (typeof attributes === 'undefined') { + attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' }); + } + attributes.d = this.path; + if (this.shadow_attributes.width > 0) { + attributes.style = this.getShadowStyle(); + } + this.applyAttributes(path, attributes); + this.add(path); + return this; + } + stroke() { + const path = this.create('path'); + const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path }); + if (this.shadow_attributes.width > 0) { + attributes.style = this.getShadowStyle(); + } + this.applyAttributes(path, attributes); + this.add(path); + return this; + } + measureText(text) { + return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes); + } + fillText(text, x, y) { + if (!text || text.length <= 0) { + return this; + } + x = this.round(x); + y = this.round(y); + const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x, + y }); + const txt = this.create('text'); + txt.textContent = text; + this.applyAttributes(txt, attributes); + this.add(txt); + return this; + } + save() { + this.state_stack.push({ + state: { + 'font-family': this.state['font-family'], + 'font-weight': this.state['font-weight'], + 'font-style': this.state['font-style'], + 'font-size': this.state['font-size'], + scale: this.state.scale, + }, + attributes: { + 'font-family': this.attributes['font-family'], + 'font-weight': this.attributes['font-weight'], + 'font-style': this.attributes['font-style'], + 'font-size': this.attributes['font-size'], + fill: this.attributes.fill, + stroke: this.attributes.stroke, + 'stroke-width': this.attributes['stroke-width'], + 'stroke-dasharray': this.attributes['stroke-dasharray'], + }, + shadow_attributes: { + width: this.shadow_attributes.width, + color: this.shadow_attributes.color, + }, + lineWidth: this.lineWidth, + }); + return this; + } + restore() { + const savedState = this.state_stack.pop(); + if (savedState) { + const state = savedState; + this.state['font-family'] = state.state['font-family']; + this.state['font-weight'] = state.state['font-weight']; + this.state['font-style'] = state.state['font-style']; + this.state['font-size'] = state.state['font-size']; + this.state.scale = state.state.scale; + this.attributes['font-family'] = state.attributes['font-family']; + this.attributes['font-weight'] = state.attributes['font-weight']; + this.attributes['font-style'] = state.attributes['font-style']; + this.attributes['font-size'] = state.attributes['font-size']; + this.attributes.fill = state.attributes.fill; + this.attributes.stroke = state.attributes.stroke; + this.attributes['stroke-width'] = state.attributes['stroke-width']; + this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray']; + this.shadow_attributes.width = state.shadow_attributes.width; + this.shadow_attributes.color = state.shadow_attributes.color; + this.lineWidth = state.lineWidth; + } + return this; + } + set fillStyle(style) { + this.setFillStyle(style); + } + get fillStyle() { + return this.attributes.fill; + } + set strokeStyle(style) { + this.setStrokeStyle(style); + } + get strokeStyle() { + return this.attributes.stroke; + } + setFont(f, size, weight, style) { + const fontInfo = Font.validate(f, size, weight, style); + this.fontCSSString = Font.toCSSString(fontInfo); + const fontAttributes = { + 'font-family': fontInfo.family, + 'font-size': fontInfo.size, + 'font-weight': fontInfo.weight, + 'font-style': fontInfo.style, + }; + this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes); + this.state = Object.assign(Object.assign({}, this.state), fontAttributes); + return this; + } + getFont() { + return this.fontCSSString; + } +} +SVGContext.measureTextCache = new MeasureTextCache(); +export { SVGContext }; diff --git a/build/esm/src/system.js b/build/esm/src/system.js new file mode 100644 index 0000000000..7b0d8f562a --- /dev/null +++ b/build/esm/src/system.js @@ -0,0 +1,161 @@ +import { BoundingBox } from './boundingbox.js'; +import { Element } from './element.js'; +import { Formatter } from './formatter.js'; +import { Note } from './note.js'; +import { Stave } from './stave.js'; +import { RuntimeError } from './util.js'; +export class System extends Element { + static get CATEGORY() { + return "System"; + } + constructor(params = {}) { + super(); + this.setOptions(params); + this.partStaves = []; + this.partStaveInfos = []; + this.partVoices = []; + } + setOptions(options = {}) { + if (!options.factory) { + throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.'); + } + this.factory = options.factory; + this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) }); + if (this.options.noJustification === false && typeof options.width === 'undefined') { + this.options.autoWidth = true; + } + } + getX() { + return this.options.x; + } + setX(x) { + this.options.x = x; + this.partStaves.forEach((s) => { + s.setX(x); + }); + } + getY() { + return this.options.y; + } + setY(y) { + this.options.y = y; + this.partStaves.forEach((s) => { + s.setY(y); + }); + } + getStaves() { + return this.partStaves; + } + getVoices() { + return this.partVoices; + } + setContext(context) { + super.setContext(context); + this.factory.setContext(context); + return this; + } + addConnector(type = 'double') { + this.connector = this.factory.StaveConnector({ + top_stave: this.partStaves[0], + bottom_stave: this.partStaves[this.partStaves.length - 1], + type, + }); + return this.connector; + } + addStave(params) { + var _a; + const staveOptions = Object.assign({ left_bar: false }, params.options); + const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions }); + const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions }); + const ctx = this.getContext(); + p.voices.forEach((voice) => { + voice + .setContext(ctx) + .setStave(stave) + .getTickables() + .forEach((tickable) => tickable.setStave(stave)); + this.partVoices.push(voice); + }); + this.partStaves.push(stave); + this.partStaveInfos.push(p); + return stave; + } + addVoices(voices) { + const ctx = this.getContext(); + voices.forEach((voice) => { + voice.setContext(ctx); + this.partVoices.push(voice); + }); + } + format() { + const options_details = this.options.details; + let justifyWidth = 0; + const formatter = new Formatter(options_details); + this.formatter = formatter; + let y = this.options.y; + let startX = 0; + const debugNoteMetricsYs = []; + this.partStaves.forEach((part, index) => { + y = y + part.space(this.partStaveInfos[index].spaceAbove); + part.setY(y); + y = y + part.space(this.partStaveInfos[index].spaceBelow); + y = y + part.space(this.options.spaceBetweenStaves); + if (this.partStaveInfos[index].debugNoteMetrics) { + debugNoteMetricsYs.push({ y, stave: part }); + y += 15; + } + startX = Math.max(startX, part.getNoteStartX()); + }); + this.partVoices.forEach((voice) => { + voice.getTickables().forEach((tickable) => { + const stave = tickable.getStave(); + if (stave) + tickable.setStave(stave); + }); + }); + formatter.joinVoices(this.partVoices); + this.partStaves.forEach((part) => part.setNoteStartX(startX)); + if (this.options.autoWidth && this.partVoices.length > 0) { + justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices); + this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x); + this.partStaves.forEach((part) => { + part.setWidth(this.options.width); + }); + } + else { + justifyWidth = this.options.noPadding + ? this.options.width - (startX - this.options.x) + : this.options.width - (startX - this.options.x) - Stave.defaultPadding; + } + if (this.partVoices.length > 0) { + formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions); + } + formatter.postFormat(); + for (let i = 0; i < this.options.formatIterations; i++) { + formatter.tune(options_details); + } + this.startX = startX; + this.debugNoteMetricsYs = debugNoteMetricsYs; + this.lastY = y; + this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y); + Stave.formatBegModifiers(this.partStaves); + } + draw() { + const ctx = this.checkContext(); + if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) { + throw new RuntimeError('NoFormatter', 'format() must be called before draw()'); + } + this.setRendered(); + if (this.options.debugFormatter) { + Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY); + } + this.debugNoteMetricsYs.forEach((d) => { + this.partVoices.forEach((voice) => { + voice.getTickables().forEach((tickable) => { + if (tickable.getStave() === d.stave) + Note.plotMetrics(ctx, tickable, d.y); + }); + }); + }); + } +} diff --git a/build/esm/src/tables.js b/build/esm/src/tables.js new file mode 100644 index 0000000000..9a26fc05e9 --- /dev/null +++ b/build/esm/src/tables.js @@ -0,0 +1,1215 @@ +import { Fraction } from './fraction.js'; +import { Glyph } from './glyph.js'; +import { RuntimeError } from './util.js'; +const RESOLUTION = 16384; +const durations = { + '1/2': RESOLUTION * 2, + 1: RESOLUTION / 1, + 2: RESOLUTION / 2, + 4: RESOLUTION / 4, + 8: RESOLUTION / 8, + 16: RESOLUTION / 16, + 32: RESOLUTION / 32, + 64: RESOLUTION / 64, + 128: RESOLUTION / 128, + 256: RESOLUTION / 256, +}; +const durationAliases = { + w: '1', + h: '2', + q: '4', + b: '256', +}; +const keySignatures = { + C: { num: 0 }, + Am: { num: 0 }, + F: { acc: 'b', num: 1 }, + Dm: { acc: 'b', num: 1 }, + Bb: { acc: 'b', num: 2 }, + Gm: { acc: 'b', num: 2 }, + Eb: { acc: 'b', num: 3 }, + Cm: { acc: 'b', num: 3 }, + Ab: { acc: 'b', num: 4 }, + Fm: { acc: 'b', num: 4 }, + Db: { acc: 'b', num: 5 }, + Bbm: { acc: 'b', num: 5 }, + Gb: { acc: 'b', num: 6 }, + Ebm: { acc: 'b', num: 6 }, + Cb: { acc: 'b', num: 7 }, + Abm: { acc: 'b', num: 7 }, + G: { acc: '#', num: 1 }, + Em: { acc: '#', num: 1 }, + D: { acc: '#', num: 2 }, + Bm: { acc: '#', num: 2 }, + A: { acc: '#', num: 3 }, + 'F#m': { acc: '#', num: 3 }, + E: { acc: '#', num: 4 }, + 'C#m': { acc: '#', num: 4 }, + B: { acc: '#', num: 5 }, + 'G#m': { acc: '#', num: 5 }, + 'F#': { acc: '#', num: 6 }, + 'D#m': { acc: '#', num: 6 }, + 'C#': { acc: '#', num: 7 }, + 'A#m': { acc: '#', num: 7 }, +}; +const clefs = { + treble: { line_shift: 0 }, + bass: { line_shift: 6 }, + tenor: { line_shift: 4 }, + alto: { line_shift: 3 }, + soprano: { line_shift: 1 }, + percussion: { line_shift: 0 }, + 'mezzo-soprano': { line_shift: 2 }, + 'baritone-c': { line_shift: 5 }, + 'baritone-f': { line_shift: 5 }, + subbass: { line_shift: 7 }, + french: { line_shift: -1 }, +}; +const notesInfo = { + C: { index: 0, int_val: 0 }, + CN: { index: 0, int_val: 0, accidental: 'n' }, + 'C#': { index: 0, int_val: 1, accidental: '#' }, + 'C##': { index: 0, int_val: 2, accidental: '##' }, + CB: { index: 0, int_val: 11, accidental: 'b' }, + CBB: { index: 0, int_val: 10, accidental: 'bb' }, + D: { index: 1, int_val: 2 }, + DN: { index: 1, int_val: 2, accidental: 'n' }, + 'D#': { index: 1, int_val: 3, accidental: '#' }, + 'D##': { index: 1, int_val: 4, accidental: '##' }, + DB: { index: 1, int_val: 1, accidental: 'b' }, + DBB: { index: 1, int_val: 0, accidental: 'bb' }, + E: { index: 2, int_val: 4 }, + EN: { index: 2, int_val: 4, accidental: 'n' }, + 'E#': { index: 2, int_val: 5, accidental: '#' }, + 'E##': { index: 2, int_val: 6, accidental: '##' }, + EB: { index: 2, int_val: 3, accidental: 'b' }, + EBB: { index: 2, int_val: 2, accidental: 'bb' }, + F: { index: 3, int_val: 5 }, + FN: { index: 3, int_val: 5, accidental: 'n' }, + 'F#': { index: 3, int_val: 6, accidental: '#' }, + 'F##': { index: 3, int_val: 7, accidental: '##' }, + FB: { index: 3, int_val: 4, accidental: 'b' }, + FBB: { index: 3, int_val: 3, accidental: 'bb' }, + G: { index: 4, int_val: 7 }, + GN: { index: 4, int_val: 7, accidental: 'n' }, + 'G#': { index: 4, int_val: 8, accidental: '#' }, + 'G##': { index: 4, int_val: 9, accidental: '##' }, + GB: { index: 4, int_val: 6, accidental: 'b' }, + GBB: { index: 4, int_val: 5, accidental: 'bb' }, + A: { index: 5, int_val: 9 }, + AN: { index: 5, int_val: 9, accidental: 'n' }, + 'A#': { index: 5, int_val: 10, accidental: '#' }, + 'A##': { index: 5, int_val: 11, accidental: '##' }, + AB: { index: 5, int_val: 8, accidental: 'b' }, + ABB: { index: 5, int_val: 7, accidental: 'bb' }, + B: { index: 6, int_val: 11 }, + BN: { index: 6, int_val: 11, accidental: 'n' }, + 'B#': { index: 6, int_val: 12, accidental: '#' }, + 'B##': { index: 6, int_val: 13, accidental: '##' }, + BB: { index: 6, int_val: 10, accidental: 'b' }, + BBB: { index: 6, int_val: 9, accidental: 'bb' }, + R: { index: 6, rest: true }, + X: { + index: 6, + accidental: '', + octave: 4, + code: 'noteheadXBlack', + shift_right: 5.5, + }, +}; +const validNoteTypes = { + n: { name: 'note' }, + r: { name: 'rest' }, + h: { name: 'harmonic' }, + m: { name: 'muted' }, + s: { name: 'slash' }, + g: { name: 'ghost' }, + d: { name: 'diamond' }, + x: { name: 'x' }, + ci: { name: 'circled' }, + cx: { name: 'circle x' }, + sf: { name: 'slashed' }, + sb: { name: 'slashed backward' }, + sq: { name: 'square' }, + tu: { name: 'triangle up' }, + td: { name: 'triangle down' }, +}; +const accidentals = { + '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 }, + '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 }, + b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 }, + bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 }, + n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 }, + '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 }, + '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 }, + db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 }, + d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 }, + '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 }, + '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 }, + '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 }, + bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 }, + bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 }, + o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 }, + k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 }, + bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 }, + '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 }, + ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 }, + afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 }, + accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 }, + accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 }, + accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 }, + accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 }, + accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 }, + accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 }, + accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 }, + accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 }, + accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 }, + accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 }, + accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 }, + accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 }, + accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 }, + accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 }, + accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 }, + accidentalNarrowReversedFlatAndFlat: { + code: 'accidentalNarrowReversedFlatAndFlat', + parenRightPaddingAdjustment: -1, + }, + accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 }, + accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 }, +}; +const accidentalColumns = { + 1: { + a: [1], + b: [1], + }, + 2: { + a: [1, 2], + }, + 3: { + a: [1, 3, 2], + b: [1, 2, 1], + second_on_bottom: [1, 2, 3], + }, + 4: { + a: [1, 3, 4, 2], + b: [1, 2, 3, 1], + spaced_out_tetrachord: [1, 2, 1, 2], + }, + 5: { + a: [1, 3, 5, 4, 2], + b: [1, 2, 4, 3, 1], + spaced_out_pentachord: [1, 2, 3, 2, 1], + very_spaced_out_pentachord: [1, 2, 1, 2, 1], + }, + 6: { + a: [1, 3, 5, 6, 4, 2], + b: [1, 2, 4, 5, 3, 1], + spaced_out_hexachord: [1, 3, 2, 1, 3, 2], + very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2], + }, +}; +const articulations = { + 'a.': { code: 'augmentationDot', between_lines: true }, + av: { + aboveCode: 'articStaccatissimoAbove', + belowCode: 'articStaccatissimoBelow', + between_lines: true, + }, + 'a>': { + aboveCode: 'articAccentAbove', + belowCode: 'articAccentBelow', + between_lines: true, + }, + 'a-': { + aboveCode: 'articTenutoAbove', + belowCode: 'articTenutoBelow', + between_lines: true, + }, + 'a^': { + aboveCode: 'articMarcatoAbove', + belowCode: 'articMarcatoBelow', + between_lines: false, + }, + 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false }, + ao: { + aboveCode: 'pluckedSnapPizzicatoAbove', + belowCode: 'pluckedSnapPizzicatoBelow', + between_lines: false, + }, + ah: { code: 'stringsHarmonic', between_lines: false }, + 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false }, + 'a@a': { code: 'fermataAbove', between_lines: false }, + 'a@u': { code: 'fermataBelow', between_lines: false }, + 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false }, + 'a@as': { code: 'fermataShortAbove', between_lines: false }, + 'a@us': { code: 'fermataShortBelow', between_lines: false }, + 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false }, + 'a@al': { code: 'fermataLongAbove', between_lines: false }, + 'a@ul': { code: 'fermataLongBelow', between_lines: false }, + 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false }, + 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false }, + 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false }, + 'a|': { code: 'stringsUpBow', between_lines: false }, + am: { code: 'stringsDownBow', between_lines: false }, + 'a,': { code: 'pictChokeCymbal', between_lines: false }, +}; +const ornaments = { + mordent: { code: 'ornamentShortTrill' }, + mordent_inverted: { code: 'ornamentMordent' }, + turn: { code: 'ornamentTurn' }, + turn_inverted: { code: 'ornamentTurnSlash' }, + tr: { code: 'ornamentTrill' }, + upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' }, + downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' }, + prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' }, + pralldown: { code: 'ornamentPrecompTrillLowerSuffix' }, + upmordent: { code: 'ornamentPrecompSlideTrillBach' }, + downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' }, + lineprall: { code: 'ornamentPrecompAppoggTrill' }, + prallprall: { code: 'ornamentTremblement' }, + scoop: { code: 'brassScoop' }, + doit: { code: 'brassDoitMedium' }, + fall: { code: 'brassFallLipShort' }, + doitLong: { code: 'brassLiftMedium' }, + fallLong: { code: 'brassFallRoughMedium' }, + bend: { code: 'brassBend' }, + plungerClosed: { code: 'brassMuteClosed' }, + plungerOpen: { code: 'brassMuteOpen' }, + flip: { code: 'brassFlip' }, + jazzTurn: { code: 'brassJazzTurn' }, + smear: { code: 'brassSmear' }, +}; +class Tables { + static currentMusicFont() { + if (Tables.MUSIC_FONT_STACK.length === 0) { + throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).'); + } + else { + return Tables.MUSIC_FONT_STACK[0]; + } + } + static clefProperties(clef) { + if (!clef || !(clef in clefs)) + throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef); + return clefs[clef]; + } + static keyProperties(keyOctaveGlyph, clef = 'treble', params) { + let options = { octave_shift: 0, duration: '4' }; + if (typeof params === 'object') { + options = Object.assign(Object.assign({}, options), params); + } + const duration = Tables.sanitizeDuration(options.duration); + const pieces = keyOctaveGlyph.split('/'); + if (pieces.length < 2) { + throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`); + } + const key = pieces[0].toUpperCase(); + const value = notesInfo[key]; + if (!value) + throw new RuntimeError('BadArguments', 'Invalid key name: ' + key); + if (value.octave) + pieces[1] = value.octave.toString(); + let octave = parseInt(pieces[1], 10); + octave -= options.octave_shift; + const baseIndex = octave * 7 - 4 * 7; + let line = (baseIndex + value.index) / 2; + line += Tables.clefProperties(clef).line_shift; + let stroke = 0; + if (line <= 0 && (line * 2) % 2 === 0) + stroke = 1; + if (line >= 6 && (line * 2) % 2 === 0) + stroke = -1; + const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined; + const code = value.code; + const shift_right = value.shift_right; + let customNoteHeadProps = {}; + if (pieces.length > 2 && pieces[2]) { + const glyphName = pieces[2].toUpperCase(); + customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {}; + } + return Object.assign({ key, + octave, + line, + int_value, accidental: value.accidental, code, + stroke, + shift_right, displaced: false }, customNoteHeadProps); + } + static integerToNote(integer) { + if (typeof integer === 'undefined' || integer < 0 || integer > 11) { + throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`); + } + const table = { + 0: 'C', + 1: 'C#', + 2: 'D', + 3: 'D#', + 4: 'E', + 5: 'F', + 6: 'F#', + 7: 'G', + 8: 'G#', + 9: 'A', + 10: 'A#', + 11: 'B', + }; + const noteValue = table[integer]; + if (!noteValue) { + throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`); + } + return noteValue; + } + static tabToGlyphProps(fret, scale = 1.0) { + let glyph = undefined; + let width = 0; + let shift_y = 0; + if (fret.toUpperCase() === 'X') { + const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics(); + glyph = 'accidentalDoubleSharp'; + if (glyphMetrics.width == undefined || glyphMetrics.height == undefined) + throw new RuntimeError('InvalidMetrics', 'Width and height required'); + width = glyphMetrics.width; + shift_y = -glyphMetrics.height / 2; + } + else { + width = Tables.textWidth(fret); + } + return { + text: fret, + code: glyph, + getWidth: () => width * scale, + shift_y, + }; + } + static textWidth(text) { + return 7 * text.toString().length; + } + static articulationCodes(artic) { + return articulations[artic]; + } + static accidentalCodes(acc) { + return accidentals[acc]; + } + static ornamentCodes(acc) { + return ornaments[acc]; + } + static keySignature(spec) { + const keySpec = keySignatures[spec]; + if (!keySpec) { + throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`); + } + if (!keySpec.acc) { + return []; + } + const accidentalList = { + b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5], + '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2], + }; + const notes = accidentalList[keySpec.acc]; + const acc_list = []; + for (let i = 0; i < keySpec.num; ++i) { + const line = notes[i]; + acc_list.push({ type: keySpec.acc, line }); + } + return acc_list; + } + static getKeySignatures() { + return keySignatures; + } + static hasKeySignature(spec) { + return spec in keySignatures; + } + static sanitizeDuration(duration) { + const durationNumber = durationAliases[duration]; + if (durationNumber !== undefined) { + duration = durationNumber; + } + if (durations[duration] === undefined) { + throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`); + } + return duration; + } + static durationToFraction(duration) { + return new Fraction().parse(Tables.sanitizeDuration(duration)); + } + static durationToNumber(duration) { + return Tables.durationToFraction(duration).value(); + } + static durationToTicks(duration) { + duration = Tables.sanitizeDuration(duration); + const ticks = durations[duration]; + if (ticks === undefined) { + throw new RuntimeError('InvalidDuration'); + } + return ticks; + } + static codeNoteHead(type, duration) { + let code = ''; + switch (type) { + case 'D0': + code = 'noteheadDiamondWhole'; + break; + case 'D1': + code = 'noteheadDiamondHalf'; + break; + case 'D2': + code = 'noteheadDiamondBlack'; + break; + case 'D3': + code = 'noteheadDiamondBlack'; + break; + case 'T0': + code = 'noteheadTriangleUpWhole'; + break; + case 'T1': + code = 'noteheadTriangleUpHalf'; + break; + case 'T2': + code = 'noteheadTriangleUpBlack'; + break; + case 'T3': + code = 'noteheadTriangleUpBlack'; + break; + case 'X0': + code = 'noteheadXWhole'; + break; + case 'X1': + code = 'noteheadXHalf'; + break; + case 'X2': + code = 'noteheadXBlack'; + break; + case 'X3': + code = 'noteheadCircleX'; + break; + case 'S1': + code = 'noteheadSquareWhite'; + break; + case 'S2': + code = 'noteheadSquareBlack'; + break; + case 'R1': + code = 'vexNoteHeadRectWhite'; + break; + case 'R2': + code = 'vexNoteHeadRectBlack'; + break; + case 'DO': + code = 'noteheadTriangleUpBlack'; + break; + case 'RE': + code = 'noteheadMoonBlack'; + break; + case 'MI': + code = 'noteheadDiamondBlack'; + break; + case 'FA': + code = 'noteheadTriangleLeftBlack'; + break; + case 'FAUP': + code = 'noteheadTriangleRightBlack'; + break; + case 'SO': + code = 'noteheadBlack'; + break; + case 'LA': + code = 'noteheadSquareBlack'; + break; + case 'TI': + code = 'noteheadTriangleRoundDownBlack'; + break; + case 'D': + case 'H': + switch (duration) { + case '1/2': + code = 'noteheadDiamondDoubleWhole'; + break; + case '1': + code = 'noteheadDiamondWhole'; + break; + case '2': + code = 'noteheadDiamondHalf'; + break; + default: + code = 'noteheadDiamondBlack'; + break; + } + break; + case 'N': + case 'G': + switch (duration) { + case '1/2': + code = 'noteheadDoubleWhole'; + break; + case '1': + code = 'noteheadWhole'; + break; + case '2': + code = 'noteheadHalf'; + break; + default: + code = 'noteheadBlack'; + break; + } + break; + case 'M': + case 'X': + switch (duration) { + case '1/2': + code = 'noteheadXDoubleWhole'; + break; + case '1': + code = 'noteheadXWhole'; + break; + case '2': + code = 'noteheadXHalf'; + break; + default: + code = 'noteheadXBlack'; + break; + } + break; + case 'CX': + switch (duration) { + case '1/2': + code = 'noteheadCircleXDoubleWhole'; + break; + case '1': + code = 'noteheadCircleXWhole'; + break; + case '2': + code = 'noteheadCircleXHalf'; + break; + default: + code = 'noteheadCircleX'; + break; + } + break; + case 'CI': + switch (duration) { + case '1/2': + code = 'noteheadCircledDoubleWhole'; + break; + case '1': + code = 'noteheadCircledWhole'; + break; + case '2': + code = 'noteheadCircledHalf'; + break; + default: + code = 'noteheadCircledBlack'; + break; + } + break; + case 'SQ': + switch (duration) { + case '1/2': + code = 'noteheadDoubleWholeSquare'; + break; + case '1': + code = 'noteheadSquareWhite'; + break; + case '2': + code = 'noteheadSquareWhite'; + break; + default: + code = 'noteheadSquareBlack'; + break; + } + break; + case 'TU': + switch (duration) { + case '1/2': + code = 'noteheadTriangleUpDoubleWhole'; + break; + case '1': + code = 'noteheadTriangleUpWhole'; + break; + case '2': + code = 'noteheadTriangleUpHalf'; + break; + default: + code = 'noteheadTriangleUpBlack'; + break; + } + break; + case 'TD': + switch (duration) { + case '1/2': + code = 'noteheadTriangleDownDoubleWhole'; + break; + case '1': + code = 'noteheadTriangleDownWhole'; + break; + case '2': + code = 'noteheadTriangleDownHalf'; + break; + default: + code = 'noteheadTriangleDownBlack'; + break; + } + break; + case 'SF': + switch (duration) { + case '1/2': + code = 'noteheadSlashedDoubleWhole1'; + break; + case '1': + code = 'noteheadSlashedWhole1'; + break; + case '2': + code = 'noteheadSlashedHalf1'; + break; + default: + code = 'noteheadSlashedBlack1'; + } + break; + case 'SB': + switch (duration) { + case '1/2': + code = 'noteheadSlashedDoubleWhole2'; + break; + case '1': + code = 'noteheadSlashedWhole2'; + break; + case '2': + code = 'noteheadSlashedHalf2'; + break; + default: + code = 'noteheadSlashedBlack2'; + } + break; + } + return code; + } + static getGlyphProps(duration, type = 'n') { + duration = Tables.sanitizeDuration(duration); + let code = durationCodes[duration]; + if (code === undefined) { + code = durationCodes['4']; + } + let glyphTypeProperties = code[type]; + const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration); + if (codeNoteHead != '') + glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead }); + const code_head = glyphTypeProperties.code_head; + const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale); + return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties); + } +} +Tables.UNISON = true; +Tables.SOFTMAX_FACTOR = 10; +Tables.STEM_WIDTH = 1.5; +Tables.STEM_HEIGHT = 35; +Tables.STAVE_LINE_THICKNESS = 1; +Tables.RENDER_PRECISION_PLACES = 3; +Tables.RESOLUTION = RESOLUTION; +Tables.MUSIC_FONT_STACK = []; +Tables.NOTATION_FONT_SCALE = 39; +Tables.TABLATURE_FONT_SCALE = 39; +Tables.SLASH_NOTEHEAD_WIDTH = 15; +Tables.STAVE_LINE_DISTANCE = 10; +Tables.TEXT_HEIGHT_OFFSET_HACK = 1; +Tables.accidentalMap = accidentals; +Tables.accidentalColumnsTable = accidentalColumns; +Tables.unicode = { + sharp: String.fromCharCode(0x266f), + flat: String.fromCharCode(0x266d), + natural: String.fromCharCode(0x266e), + triangle: String.fromCharCode(0x25b3), + 'o-with-slash': String.fromCharCode(0x00f8), + degrees: String.fromCharCode(0x00b0), + circle: String.fromCharCode(0x25cb), +}; +Tables.validTypes = validNoteTypes; +Tables.TIME4_4 = { + num_beats: 4, + beat_value: 4, + resolution: RESOLUTION, +}; +export { Tables }; +const durationCodes = { + '1/2': { + common: { + code_head: '', + stem: false, + flag: false, + stem_up_extension: -Tables.STEM_HEIGHT, + stem_down_extension: -Tables.STEM_HEIGHT, + tabnote_stem_up_extension: -Tables.STEM_HEIGHT, + tabnote_stem_down_extension: -Tables.STEM_HEIGHT, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + code_head: 'restDoubleWhole', + rest: true, + position: 'B/5', + dot_shiftY: 0.5, + }, + s: { + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 1: { + common: { + code_head: '', + stem: false, + flag: false, + stem_up_extension: -Tables.STEM_HEIGHT, + stem_down_extension: -Tables.STEM_HEIGHT, + tabnote_stem_up_extension: -Tables.STEM_HEIGHT, + tabnote_stem_down_extension: -Tables.STEM_HEIGHT, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + code_head: 'restWhole', + ledger_code_head: 'restWholeLegerLine', + rest: true, + position: 'D/5', + dot_shiftY: 0.5, + }, + s: { + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 2: { + common: { + code_head: '', + stem: true, + flag: false, + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + code_head: 'restHalf', + ledger_code_head: 'restHalfLegerLine', + stem: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + }, + s: { + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 4: { + common: { + code_head: '', + stem: true, + flag: false, + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + code_head: 'restQuarter', + stem: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + line_above: 1.5, + line_below: 1.5, + }, + s: { + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 8: { + common: { + code_head: '', + stem: true, + flag: true, + beam_count: 1, + stem_beam_extension: 0, + code_flag_upstem: 'flag8thUp', + code_flag_downstem: 'flag8thDown', + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + code_head: 'rest8th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + line_above: 1.0, + line_below: 1.0, + }, + s: { + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 16: { + common: { + code_head: '', + beam_count: 2, + stem_beam_extension: 0, + stem: true, + flag: true, + code_flag_upstem: 'flag16thUp', + code_flag_downstem: 'flag16thDown', + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + code_head: 'rest16th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + line_above: 1.0, + line_below: 2.0, + }, + s: { + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 32: { + common: { + code_head: '', + beam_count: 3, + stem_beam_extension: 7.5, + stem: true, + flag: true, + code_flag_upstem: 'flag32ndUp', + code_flag_downstem: 'flag32ndDown', + stem_up_extension: 9, + stem_down_extension: 9, + tabnote_stem_up_extension: 9, + tabnote_stem_down_extension: 9, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + code_head: 'rest32nd', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -1.5, + line_above: 2.0, + line_below: 2.0, + }, + s: { + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 64: { + common: { + code_head: '', + beam_count: 4, + stem_beam_extension: 15, + stem: true, + flag: true, + code_flag_upstem: 'flag64thUp', + code_flag_downstem: 'flag64thDown', + stem_up_extension: 13, + stem_down_extension: 13, + tabnote_stem_up_extension: 13, + tabnote_stem_down_extension: 13, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + code_head: 'rest64th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -1.5, + line_above: 2.0, + line_below: 3.0, + }, + s: { + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 128: { + common: { + code_head: '', + beam_count: 5, + stem_beam_extension: 22.5, + stem: true, + flag: true, + code_flag_upstem: 'flag128thUp', + code_flag_downstem: 'flag128thDown', + stem_up_extension: 22, + stem_down_extension: 22, + tabnote_stem_up_extension: 22, + tabnote_stem_down_extension: 22, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + code_head: 'rest128th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -2.5, + line_above: 3.0, + line_below: 3.0, + }, + s: { + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, +}; diff --git a/build/esm/src/tabnote.js b/build/esm/src/tabnote.js new file mode 100644 index 0000000000..f2a4a8359d --- /dev/null +++ b/build/esm/src/tabnote.js @@ -0,0 +1,302 @@ +import { Font } from './font.js'; +import { Glyph } from './glyph.js'; +import { Modifier } from './modifier.js'; +import { Stem } from './stem.js'; +import { StemmableNote } from './stemmablenote.js'; +import { Tables } from './tables.js'; +import { isDot } from './typeguard.js'; +import { defined, RuntimeError } from './util.js'; +function getUnusedStringGroups(num_lines, strings_used) { + const stem_through = []; + let group = []; + for (let string = 1; string <= num_lines; string++) { + const is_used = strings_used.indexOf(string) > -1; + if (!is_used) { + group.push(string); + } + else { + stem_through.push(group); + group = []; + } + } + if (group.length > 0) + stem_through.push(group); + return stem_through; +} +function getPartialStemLines(stem_y, unused_strings, stave, stem_direction) { + const up_stem = stem_direction !== 1; + const down_stem = stem_direction !== -1; + const line_spacing = stave.getSpacingBetweenLines(); + const total_lines = stave.getNumLines(); + const stem_lines = []; + unused_strings.forEach((strings) => { + const containsLastString = strings.indexOf(total_lines) > -1; + const containsFirstString = strings.indexOf(1) > -1; + if ((up_stem && containsFirstString) || (down_stem && containsLastString)) { + return; + } + if (strings.length === 1) { + strings.push(strings[0]); + } + const line_ys = []; + strings.forEach((string, index, strings) => { + const isTopBound = string === 1; + const isBottomBound = string === total_lines; + let y = stave.getYForLine(string - 1); + if (index === 0 && !isTopBound) { + y -= line_spacing / 2 - 1; + } + else if (index === strings.length - 1 && !isBottomBound) { + y += line_spacing / 2 - 1; + } + line_ys.push(y); + if (stem_direction === 1 && isTopBound) { + line_ys.push(stem_y - 2); + } + else if (stem_direction === -1 && isBottomBound) { + line_ys.push(stem_y + 2); + } + }); + stem_lines.push(line_ys.sort((a, b) => a - b)); + }); + return stem_lines; +} +export class TabNote extends StemmableNote { + static get CATEGORY() { + return "TabNote"; + } + constructor(noteStruct, draw_stem = false) { + super(noteStruct); + this.glyphPropsArr = []; + this.greatestString = () => { + return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b)); + }; + this.leastString = () => { + return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b)); + }; + this.ghost = false; + this.positions = noteStruct.positions || []; + this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_scale: Tables.TABLATURE_FONT_SCALE, draw_stem, draw_dots: draw_stem, draw_stem_through_stave: false, y_shift: 0, scale: 1.0, font: `${Font.SIZE}pt ${Font.SANS_SERIF}` }); + this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType); + defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); + this.buildStem(); + if (noteStruct.stem_direction) { + this.setStemDirection(noteStruct.stem_direction); + } + else { + this.setStemDirection(Stem.UP); + } + this.ghost = false; + this.updateWidth(); + } + reset() { + super.reset(); + if (this.stave) + this.setStave(this.stave); + return this; + } + setGhost(ghost) { + this.ghost = ghost; + this.updateWidth(); + return this; + } + hasStem() { + if (this.render_options.draw_stem) + return true; + return false; + } + getStemExtension() { + const glyphProps = this.getGlyphProps(); + if (this.stem_extension_override != null) { + return this.stem_extension_override; + } + if (glyphProps) { + return this.getStemDirection() === Stem.UP + ? glyphProps.tabnote_stem_up_extension + : glyphProps.tabnote_stem_down_extension; + } + return 0; + } + updateWidth() { + this.glyphPropsArr = []; + this.width = 0; + for (let i = 0; i < this.positions.length; ++i) { + let fret = this.positions[i].fret; + if (this.ghost) + fret = '(' + fret + ')'; + const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale); + this.glyphPropsArr.push(glyphProps); + this.width = Math.max(glyphProps.getWidth(), this.width); + } + this.glyphProps.getWidth = () => this.width; + } + setStave(stave) { + super.setStave(stave); + const ctx = stave.getContext(); + this.setContext(ctx); + if (ctx) { + this.width = 0; + for (let i = 0; i < this.glyphPropsArr.length; ++i) { + const glyphProps = this.glyphPropsArr[i]; + const text = '' + glyphProps.text; + if (text.toUpperCase() !== 'X') { + ctx.save(); + ctx.setFont(this.render_options.font); + glyphProps.width = ctx.measureText(text).width; + ctx.restore(); + glyphProps.getWidth = () => glyphProps.width; + } + this.width = Math.max(glyphProps.getWidth(), this.width); + } + this.glyphProps.getWidth = () => this.width; + } + const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1)); + this.setYs(ys); + if (this.stem) { + this.stem.setYBounds(this.getStemY(), this.getStemY()); + } + return this; + } + getPositions() { + return this.positions; + } + getModifierStartXY(position, index) { + if (!this.preFormatted) { + throw new RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); + } + if (this.ys.length === 0) { + throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.'); + } + let x = 0; + if (position === Modifier.Position.LEFT) { + x = -1 * 2; + } + else if (position === Modifier.Position.RIGHT) { + x = this.width + 2; + } + else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) { + const note_glyph_width = this.glyphProps.getWidth(); + x = note_glyph_width / 2; + } + return { + x: this.getAbsoluteX() + x, + y: this.ys[index], + }; + } + getLineForRest() { + return Number(this.positions[0].str); + } + preFormat() { + if (this.preFormatted) + return; + if (this.modifierContext) + this.modifierContext.preFormat(); + this.preFormatted = true; + } + getStemX() { + return this.getCenterGlyphX(); + } + getStemY() { + const num_lines = this.checkStave().getNumLines(); + const stemUpLine = -0.5; + const stemDownLine = num_lines - 0.5; + const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine; + return this.checkStave().getYForLine(stemStartLine); + } + getStemExtents() { + return this.checkStem().getExtents(); + } + drawFlag() { + var _a; + const { beam, glyphProps, render_options: { draw_stem }, } = this; + const context = this.checkContext(); + const shouldDrawFlag = beam == undefined && draw_stem; + if (glyphProps.flag && shouldDrawFlag) { + const flag_x = this.getStemX(); + const flag_y = this.getStemDirection() === Stem.DOWN + ? + this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0) + : + this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0); + (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y); + } + } + drawModifiers() { + this.modifiers.forEach((modifier) => { + if (isDot(modifier) && !this.render_options.draw_dots) { + return; + } + modifier.setContext(this.getContext()); + modifier.drawWithStyle(); + }); + } + drawStemThrough() { + const stemX = this.getStemX(); + const stemY = this.getStemY(); + const ctx = this.checkContext(); + const drawStem = this.render_options.draw_stem; + const stemThrough = this.render_options.draw_stem_through_stave; + if (drawStem && stemThrough) { + const numLines = this.checkStave().getNumLines(); + const stringsUsed = this.positions.map((position) => Number(position.str)); + const unusedStrings = getUnusedStringGroups(numLines, stringsUsed); + const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection()); + ctx.save(); + ctx.setLineWidth(Stem.WIDTH); + stemLines.forEach((bounds) => { + if (bounds.length === 0) + return; + ctx.beginPath(); + ctx.moveTo(stemX, bounds[0]); + ctx.lineTo(stemX, bounds[bounds.length - 1]); + ctx.stroke(); + ctx.closePath(); + }); + ctx.restore(); + } + } + drawPositions() { + var _a; + const ctx = this.checkContext(); + const x = this.getAbsoluteX(); + const ys = this.ys; + for (let i = 0; i < this.positions.length; ++i) { + const y = ys[i] + this.render_options.y_shift; + const glyphProps = this.glyphPropsArr[i]; + const note_glyph_width = this.glyphProps.getWidth(); + const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2; + ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6); + if (glyphProps.code) { + Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code); + } + else { + ctx.save(); + ctx.setFont(this.render_options.font); + const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : ''; + ctx.fillText(text, tab_x, y + 5 * this.render_options.scale); + ctx.restore(); + } + } + } + draw() { + const ctx = this.checkContext(); + if (this.ys.length === 0) { + throw new RuntimeError('NoYValues', "Can't draw note without Y values."); + } + this.setRendered(); + const render_stem = this.beam == undefined && this.render_options.draw_stem; + this.applyStyle(); + ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true }); + this.drawPositions(); + this.drawStemThrough(); + if (this.stem && render_stem) { + const stem_x = this.getStemX(); + this.stem.setNoteHeadXBounds(stem_x, stem_x); + this.stem.setContext(ctx).draw(); + } + this.drawFlag(); + this.drawModifiers(); + ctx.closeGroup(); + this.restoreStyle(); + } +} diff --git a/build/esm/src/tabslide.js b/build/esm/src/tabslide.js new file mode 100644 index 0000000000..1ad63f0633 --- /dev/null +++ b/build/esm/src/tabslide.js @@ -0,0 +1,77 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { TabTie } from './tabtie.js'; +import { RuntimeError } from './util.js'; +class TabSlide extends TabTie { + static get CATEGORY() { + return "TabSlide"; + } + static get SLIDE_UP() { + return 1; + } + static get SLIDE_DOWN() { + return -1; + } + static createSlideUp(notes) { + return new TabSlide(notes, TabSlide.SLIDE_UP); + } + static createSlideDown(notes) { + return new TabSlide(notes, TabSlide.SLIDE_DOWN); + } + constructor(notes, direction) { + super(notes, 'sl.'); + if (!direction) { + let first_fret = notes.first_note.getPositions()[0].fret; + if (typeof first_fret === 'string') { + first_fret = parseInt(first_fret, 10); + } + let last_fret = notes.last_note.getPositions()[0].fret; + if (typeof last_fret === 'string') { + last_fret = parseInt(last_fret, 10); + } + if (isNaN(first_fret) || isNaN(last_fret)) { + direction = TabSlide.SLIDE_UP; + } + else { + direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP; + } + } + this.direction = direction; + this.render_options.cp1 = 11; + this.render_options.cp2 = 14; + this.render_options.y_shift = 0.5; + this.resetFont(); + } + renderTie(params) { + if (params.first_ys.length === 0 || params.last_ys.length === 0) { + throw new RuntimeError('BadArguments', 'No Y-values to render'); + } + const ctx = this.checkContext(); + const first_x_px = params.first_x_px; + const first_ys = params.first_ys; + const last_x_px = params.last_x_px; + const direction = params.direction; + if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) { + throw new RuntimeError('BadSlide', 'Invalid slide direction'); + } + const first_indices = this.notes.first_indices; + for (let i = 0; i < first_indices.length; ++i) { + const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift; + if (isNaN(slide_y)) { + throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.'); + } + ctx.beginPath(); + ctx.moveTo(first_x_px, slide_y + 3 * direction); + ctx.lineTo(last_x_px, slide_y - 3 * direction); + ctx.closePath(); + ctx.stroke(); + } + this.setRendered(); + } +} +TabSlide.TEXT_FONT = { + family: Font.SERIF, + size: 10, + weight: FontWeight.BOLD, + style: FontStyle.ITALIC, +}; +export { TabSlide }; diff --git a/build/esm/src/tabstave.js b/build/esm/src/tabstave.js new file mode 100644 index 0000000000..e71d724a53 --- /dev/null +++ b/build/esm/src/tabstave.js @@ -0,0 +1,17 @@ +import { Stave } from './stave.js'; +export class TabStave extends Stave { + static get CATEGORY() { + return "TabStave"; + } + constructor(x, y, width, options) { + const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options); + super(x, y, width, tab_options); + } + getYForGlyphs() { + return this.getYForLine(2.5); + } + addTabGlyph() { + this.addClef('tab'); + return this; + } +} diff --git a/build/esm/src/tabtie.js b/build/esm/src/tabtie.js new file mode 100644 index 0000000000..18a303cc73 --- /dev/null +++ b/build/esm/src/tabtie.js @@ -0,0 +1,19 @@ +import { StaveTie } from './stavetie.js'; +export class TabTie extends StaveTie { + static get CATEGORY() { + return "TabTie"; + } + static createHammeron(notes) { + return new TabTie(notes, 'H'); + } + static createPulloff(notes) { + return new TabTie(notes, 'P'); + } + constructor(notes, text) { + super(notes, text); + this.render_options.cp1 = 9; + this.render_options.cp2 = 11; + this.render_options.y_shift = 3; + this.direction = -1; + } +} diff --git a/build/esm/src/textbracket.js b/build/esm/src/textbracket.js new file mode 100644 index 0000000000..7170088e11 --- /dev/null +++ b/build/esm/src/textbracket.js @@ -0,0 +1,145 @@ +import { Element } from './element.js'; +import { Font, FontStyle, FontWeight } from './font.js'; +import { Renderer } from './renderer.js'; +import { Tables } from './tables.js'; +import { log, RuntimeError } from './util.js'; +function L(...args) { + if (TextBracket.DEBUG) + log('Vex.Flow.TextBracket', args); +} +export var TextBracketPosition; +(function (TextBracketPosition) { + TextBracketPosition[TextBracketPosition["TOP"] = 1] = "TOP"; + TextBracketPosition[TextBracketPosition["BOTTOM"] = -1] = "BOTTOM"; +})(TextBracketPosition || (TextBracketPosition = {})); +class TextBracket extends Element { + static get CATEGORY() { + return "TextBracket"; + } + static get Position() { + return TextBracketPosition; + } + static get PositionString() { + return { + top: TextBracketPosition.TOP, + bottom: TextBracketPosition.BOTTOM, + }; + } + static get Positions() { + L('Positions is deprecated, use TextBracketPosition instead.'); + return TextBracketPosition; + } + static get PositionsString() { + L('PositionsString is deprecated, use PositionString instead.'); + return TextBracket.PositionString; + } + constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) { + super(); + this.start = start; + this.stop = stop; + this.text = text; + this.superscript = superscript; + this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position; + this.line = 1; + this.resetFont(); + this.render_options = { + dashed: true, + dash: [5], + color: 'black', + line_width: 1, + show_bracket: true, + bracket_height: 8, + underline_superscript: true, + }; + } + applyStyle(ctx) { + ctx.setFont(this.font); + const options = this.render_options; + ctx.setStrokeStyle(options.color); + ctx.setFillStyle(options.color); + ctx.setLineWidth(options.line_width); + return this; + } + setDashed(dashed, dash) { + this.render_options.dashed = dashed; + if (dash) + this.render_options.dash = dash; + return this; + } + setLine(line) { + this.line = line; + return this; + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + let y = 0; + switch (this.position) { + case TextBracketPosition.TOP: + y = this.start.checkStave().getYForTopText(this.line); + break; + case TextBracketPosition.BOTTOM: + y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK); + break; + default: + throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`); + } + const start = { x: this.start.getAbsoluteX(), y }; + const stop = { x: this.stop.getAbsoluteX(), y }; + L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y); + const bracket_height = this.render_options.bracket_height * this.position; + ctx.save(); + this.applyStyle(ctx); + ctx.fillText(this.text, start.x, start.y); + const main_measure = ctx.measureText(this.text); + const main_width = main_measure.width; + const main_height = main_measure.height; + const super_y = start.y - main_height / 2.5; + const { family, size, weight, style } = this.textFont; + const smallerFontSize = Font.scaleSize(size, 0.714286); + ctx.setFont(family, smallerFontSize, weight, style); + ctx.fillText(this.superscript, start.x + main_width + 1, super_y); + const super_measure = ctx.measureText(this.superscript); + const super_width = super_measure.width; + const super_height = super_measure.height; + let start_x = start.x; + let line_y = super_y; + const end_x = stop.x + this.stop.getGlyphProps().getWidth(); + if (this.position === TextBracketPosition.TOP) { + start_x += main_width + super_width + 5; + line_y -= super_height / 2.7; + } + else if (this.position === TextBracketPosition.BOTTOM) { + line_y += super_height / 2.7; + start_x += main_width + 2; + if (!this.render_options.underline_superscript) { + start_x += super_width; + } + } + if (this.render_options.dashed) { + Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash); + if (this.render_options.show_bracket) { + Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash); + } + } + else { + ctx.beginPath(); + ctx.moveTo(start_x, line_y); + ctx.lineTo(end_x, line_y); + if (this.render_options.show_bracket) { + ctx.lineTo(end_x, line_y + bracket_height); + } + ctx.stroke(); + ctx.closePath(); + } + ctx.restore(); + } +} +TextBracket.DEBUG = false; +TextBracket.TEXT_FONT = { + family: Font.SERIF, + size: 15, + weight: FontWeight.NORMAL, + style: FontStyle.ITALIC, +}; +export { TextBracket }; diff --git a/build/esm/src/textdynamics.js b/build/esm/src/textdynamics.js new file mode 100644 index 0000000000..17be13c50f --- /dev/null +++ b/build/esm/src/textdynamics.js @@ -0,0 +1,83 @@ +import { Glyph } from './glyph.js'; +import { Note } from './note.js'; +import { Tables } from './tables.js'; +import { defined, log, RuntimeError } from './util.js'; +function L(...args) { + if (TextDynamics.DEBUG) + log('Vex.Flow.TextDynamics', args); +} +class TextDynamics extends Note { + static get CATEGORY() { + return "TextDynamics"; + } + static get GLYPHS() { + return { + f: { + code: 'dynamicForte', + width: 12, + }, + p: { + code: 'dynamicPiano', + width: 14, + }, + m: { + code: 'dynamicMezzo', + width: 17, + }, + s: { + code: 'dynamicSforzando', + width: 10, + }, + z: { + code: 'dynamicZ', + width: 12, + }, + r: { + code: 'dynamicRinforzando', + width: 12, + }, + }; + } + constructor(noteStruct) { + super(noteStruct); + this.sequence = (noteStruct.text || '').toLowerCase(); + this.line = noteStruct.line || 0; + this.glyphs = []; + this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: Tables.NOTATION_FONT_SCALE }); + L('New Dynamics Text: ', this.sequence); + } + setLine(line) { + this.line = line; + return this; + } + preFormat() { + let total_width = 0; + this.glyphs = []; + this.sequence.split('').forEach((letter) => { + const glyph_data = TextDynamics.GLYPHS[letter]; + if (!glyph_data) + throw new RuntimeError('Invalid dynamics character: ' + letter); + const size = defined(this.render_options.glyph_font_size); + const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' }); + this.glyphs.push(glyph); + total_width += glyph_data.width; + }); + this.setWidth(total_width); + this.preFormatted = true; + return this; + } + draw() { + this.setRendered(); + const x = this.getAbsoluteX(); + const y = this.checkStave().getYForLine(this.line + -3); + L('Rendering Dynamics: ', this.sequence); + let letter_x = x; + this.glyphs.forEach((glyph, index) => { + const current_letter = this.sequence[index]; + glyph.render(this.checkContext(), letter_x, y); + letter_x += TextDynamics.GLYPHS[current_letter].width; + }); + } +} +TextDynamics.DEBUG = false; +export { TextDynamics }; diff --git a/build/esm/src/textformatter.js b/build/esm/src/textformatter.js new file mode 100644 index 0000000000..2e2939e712 --- /dev/null +++ b/build/esm/src/textformatter.js @@ -0,0 +1,219 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { log } from './util.js'; +function L(...args) { + if (TextFormatter.DEBUG) + log('Vex.Flow.TextFormatter', args); +} +const textWidthCache = {}; +const textHeightCache = {}; +const registry = {}; +class TextFormatter { + static getFontFamilies() { + const registeredFonts = []; + for (const fontFamily in registry) { + const formatterInfo = registry[fontFamily]; + registeredFonts.push(Object.assign({}, formatterInfo)); + } + return registeredFonts; + } + static create(requestedFont = {}) { + L('create: ', requestedFont); + if (!requestedFont.family) { + requestedFont.family = Font.SANS_SERIF; + } + const candidates = []; + const requestedFamilies = requestedFont.family.split(/\s*,\s*/); + for (const requestedFamily of requestedFamilies) { + for (const fontFamily in registry) { + if (fontFamily.startsWith(requestedFamily)) { + candidates.push(registry[fontFamily]); + } + } + if (candidates.length > 0) { + break; + } + } + let formatter; + if (candidates.length === 0) { + formatter = new TextFormatter(Object.values(registry)[0]); + } + else if (candidates.length === 1) { + formatter = new TextFormatter(candidates[0]); + } + else { + const bold = Font.isBold(requestedFont.weight); + const italic = Font.isItalic(requestedFont.style); + const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic); + if (perfectMatch) { + formatter = new TextFormatter(perfectMatch); + } + else { + const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold); + if (partialMatch) { + formatter = new TextFormatter(partialMatch); + } + else { + formatter = new TextFormatter(candidates[0]); + } + } + } + const fontSize = requestedFont.size; + if (typeof fontSize !== 'undefined') { + const fontSizeInPt = Font.convertSizeToPointValue(fontSize); + formatter.setFontSize(fontSizeInPt); + } + return formatter; + } + static getInfo(fontFamily) { + return registry[fontFamily]; + } + static registerInfo(info, overwrite = false) { + L('registerInfo: ', info, overwrite); + const fontFamily = info.family; + const currFontInfo = registry[fontFamily]; + if (currFontInfo === undefined || overwrite) { + registry[fontFamily] = info; + } + } + constructor(formatterInfo) { + this.family = ''; + this.size = 14; + this.resolution = 1000; + this.glyphs = {}; + this.serifs = false; + this.monospaced = false; + this.italic = false; + this.bold = false; + this.superscriptOffset = 0; + this.subscriptOffset = 0; + this.maxSizeGlyph = '@'; + this.cacheKey = ''; + this.updateParams(formatterInfo); + } + get localHeightCache() { + var _a; + if (textHeightCache[this.cacheKey] === undefined) { + textHeightCache[this.cacheKey] = {}; + } + return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {}; + } + updateParams(params) { + if (params.family) + this.family = params.family; + if (params.resolution) + this.resolution = params.resolution; + if (params.glyphs) + this.glyphs = params.glyphs; + if (params.serifs) + this.serifs = params.serifs; + if (params.monospaced) + this.monospaced = params.monospaced; + if (params.italic) + this.italic = params.italic; + if (params.bold) + this.bold = params.bold; + if (params.maxSizeGlyph) + this.maxSizeGlyph = params.maxSizeGlyph; + if (params.superscriptOffset) + this.superscriptOffset = params.superscriptOffset; + if (params.subscriptOffset) + this.subscriptOffset = params.subscriptOffset; + this.updateCacheKey(); + } + updateCacheKey() { + const family = this.family.replace(/\s+/g, '_'); + const size = this.size; + const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL; + const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL; + this.cacheKey = `${family}%${size}%${weight}%${style}`; + } + getGlyphMetrics(character) { + if (this.glyphs[character]) { + return this.glyphs[character]; + } + else { + return this.glyphs[this.maxSizeGlyph]; + } + } + get maxHeight() { + const metrics = this.getGlyphMetrics(this.maxSizeGlyph); + return (metrics.ha / this.resolution) * this.fontSizeInPixels; + } + getWidthForCharacterInEm(c) { + var _a; + const metrics = this.getGlyphMetrics(c); + if (!metrics) { + return 0.65; + } + else { + const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0; + return advanceWidth / this.resolution; + } + } + getYForCharacterInPx(c) { + const metrics = this.getGlyphMetrics(c); + const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight }; + if (!metrics) { + return rv; + } + else { + if (typeof metrics.y_min === 'number') { + rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels; + } + if (typeof metrics.y_max === 'number') { + rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels; + } + rv.height = rv.yMax - rv.yMin; + return rv; + } + } + getYForStringInPx(str) { + const entry = this.localHeightCache; + const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight }; + const cache = entry[str]; + if (cache !== undefined) { + return cache; + } + for (let i = 0; i < str.length; ++i) { + const curY = this.getYForCharacterInPx(str[i]); + extent.yMin = Math.min(extent.yMin, curY.yMin); + extent.yMax = Math.max(extent.yMax, curY.yMax); + extent.height = extent.yMax - extent.yMin; + } + entry[str] = extent; + return extent; + } + getWidthForTextInEm(text) { + const key = this.cacheKey; + let cachedWidths = textWidthCache[key]; + if (cachedWidths === undefined) { + cachedWidths = {}; + textWidthCache[key] = cachedWidths; + } + let width = cachedWidths[text]; + if (width === undefined) { + width = 0; + for (let i = 0; i < text.length; ++i) { + width += this.getWidthForCharacterInEm(text[i]); + } + cachedWidths[text] = width; + } + return width; + } + getWidthForTextInPx(text) { + return this.getWidthForTextInEm(text) * this.fontSizeInPixels; + } + setFontSize(size) { + this.size = size; + this.updateCacheKey(); + return this; + } + get fontSizeInPixels() { + return this.size * Font.scaleToPxFrom.pt; + } + getResolution() { + return this.resolution; + } +} +TextFormatter.DEBUG = false; +export { TextFormatter }; diff --git a/build/esm/src/textnote.js b/build/esm/src/textnote.js new file mode 100644 index 0000000000..2c04697525 --- /dev/null +++ b/build/esm/src/textnote.js @@ -0,0 +1,182 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { Glyph } from './glyph.js'; +import { Note } from './note.js'; +import { Tables } from './tables.js'; +import { RuntimeError } from './util.js'; +export var TextJustification; +(function (TextJustification) { + TextJustification[TextJustification["LEFT"] = 1] = "LEFT"; + TextJustification[TextJustification["CENTER"] = 2] = "CENTER"; + TextJustification[TextJustification["RIGHT"] = 3] = "RIGHT"; +})(TextJustification || (TextJustification = {})); +class TextNote extends Note { + static get CATEGORY() { + return "TextNote"; + } + static get GLYPHS() { + return { + segno: { + code: 'segno', + }, + tr: { + code: 'ornamentTrill', + }, + mordent: { + code: 'ornamentMordent', + }, + mordent_upper: { + code: 'ornamentShortTrill', + }, + mordent_lower: { + code: 'ornamentMordent', + }, + f: { + code: 'dynamicForte', + }, + p: { + code: 'dynamicPiano', + }, + m: { + code: 'dynamicMezzo', + }, + s: { + code: 'dynamicSforzando', + }, + z: { + code: 'dynamicZ', + }, + coda: { + code: 'coda', + }, + pedal_open: { + code: 'keyboardPedalPed', + }, + pedal_close: { + code: 'keyboardPedalUp', + }, + caesura_straight: { + code: 'caesura', + }, + caesura_curved: { + code: 'caesuraCurved', + }, + breath: { + code: 'breathMarkComma', + }, + tick: { + code: 'breathMarkTick', + }, + turn: { + code: 'ornamentTurn', + }, + turn_inverted: { + code: 'ornamentTurnSlash', + }, + }; + } + constructor(noteStruct) { + super(noteStruct); + this.text = noteStruct.text || ''; + this.superscript = noteStruct.superscript; + this.subscript = noteStruct.subscript; + this.setFont(noteStruct.font); + this.line = noteStruct.line || 0; + this.smooth = noteStruct.smooth || false; + this.ignore_ticks = noteStruct.ignore_ticks || false; + this.justification = TextJustification.LEFT; + if (noteStruct.glyph) { + const struct = TextNote.GLYPHS[noteStruct.glyph]; + if (!struct) + throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph); + this.glyph = new Glyph(struct.code, Tables.NOTATION_FONT_SCALE, { category: 'textNote' }); + this.setWidth(this.glyph.getMetrics().width); + } + else { + this.glyph = undefined; + } + } + setJustification(just) { + this.justification = just; + return this; + } + setLine(line) { + this.line = line; + return this; + } + getLine() { + return this.line; + } + getText() { + return this.text; + } + preFormat() { + if (this.preFormatted) + return; + const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`); + if (this.smooth) { + this.setWidth(0); + } + else { + if (this.glyph) { + } + else { + const ctx = this.checkContext(); + ctx.setFont(this.textFont); + this.setWidth(ctx.measureText(this.text).width); + } + } + if (this.justification === TextJustification.CENTER) { + this.leftDisplacedHeadPx = this.width / 2; + } + else if (this.justification === TextJustification.RIGHT) { + this.leftDisplacedHeadPx = this.width; + } + this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2; + this.preFormatted = true; + } + draw() { + const ctx = this.checkContext(); + const stave = this.checkStave(); + const tickContext = this.checkTickContext(`Can't draw without a TickContext.`); + this.setRendered(); + let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2; + const width = this.getWidth(); + if (this.justification === TextJustification.CENTER) { + x -= width / 2; + } + else if (this.justification === TextJustification.RIGHT) { + x -= width; + } + let y; + if (this.glyph) { + y = stave.getYForLine(this.line + -3); + this.glyph.render(ctx, x, y); + } + else { + y = stave.getYForLine(this.line + -3); + this.applyStyle(ctx); + ctx.setFont(this.textFont); + ctx.fillText(this.text, x, y); + const height = ctx.measureText(this.text).height; + const { family, size, weight, style } = this.textFont; + const smallerFontSize = Font.scaleSize(size, 0.769231); + if (this.superscript) { + ctx.setFont(family, smallerFontSize, weight, style); + ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2); + } + if (this.subscript) { + ctx.setFont(family, smallerFontSize, weight, style); + ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1); + } + this.restoreStyle(ctx); + } + } +} +TextNote.TEXT_FONT = { + family: Font.SANS_SERIF, + size: 12, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, +}; +TextNote.Justification = TextJustification; +export { TextNote }; diff --git a/build/esm/src/tickable.js b/build/esm/src/tickable.js new file mode 100644 index 0000000000..48b67427b0 --- /dev/null +++ b/build/esm/src/tickable.js @@ -0,0 +1,214 @@ +import { Element } from './element.js'; +import { Fraction } from './fraction.js'; +import { Tables } from './tables.js'; +import { defined, RuntimeError } from './util.js'; +export class Tickable extends Element { + static get CATEGORY() { + return "Tickable"; + } + constructor() { + super(); + this._preFormatted = false; + this._postFormatted = false; + this.ticks = new Fraction(0, 1); + this.intrinsicTicks = 0; + this.tickMultiplier = new Fraction(1, 1); + this.width = 0; + this.x_shift = 0; + this.modifiers = []; + this.tupletStack = []; + this.align_center = false; + this.center_x_shift = 0; + this.ignore_ticks = false; + this.formatterMetrics = { + freedom: { left: 0, right: 0 }, + duration: '', + iterations: 0, + space: { + used: 0, + mean: 0, + deviation: 0, + }, + }; + } + reset() { + return this; + } + getTicks() { + return this.ticks; + } + shouldIgnoreTicks() { + return this.ignore_ticks; + } + setIgnoreTicks(flag) { + this.ignore_ticks = flag; + return this; + } + setWidth(width) { + this.width = width; + } + getWidth() { + if (!this._preFormatted) { + throw new RuntimeError('UnformattedNote', "Can't call GetWidth on an unformatted note."); + } + return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0); + } + setXShift(x) { + this.x_shift = x; + return this; + } + getXShift() { + return this.x_shift; + } + getX() { + const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`); + return tickContext.getX() + this.x_shift; + } + getFormatterMetrics() { + return this.formatterMetrics; + } + getCenterXShift() { + if (this.isCenterAligned()) { + return this.center_x_shift; + } + return 0; + } + setCenterXShift(centerXShift) { + this.center_x_shift = centerXShift; + return this; + } + isCenterAligned() { + return this.align_center; + } + setCenterAlignment(align_center) { + this.align_center = align_center; + return this; + } + getVoice() { + return defined(this.voice, 'NoVoice', 'Tickable has no voice.'); + } + setVoice(voice) { + this.voice = voice; + } + getTuplet() { + return this.tuplet; + } + getTupletStack() { + return this.tupletStack; + } + resetTuplet(tuplet) { + let noteCount; + let notesOccupied; + if (tuplet) { + const i = this.tupletStack.indexOf(tuplet); + if (i !== -1) { + this.tupletStack.splice(i, 1); + noteCount = tuplet.getNoteCount(); + notesOccupied = tuplet.getNotesOccupied(); + this.applyTickMultiplier(noteCount, notesOccupied); + } + return this; + } + while (this.tupletStack.length) { + tuplet = this.tupletStack.pop(); + noteCount = tuplet.getNoteCount(); + notesOccupied = tuplet.getNotesOccupied(); + this.applyTickMultiplier(noteCount, notesOccupied); + } + return this; + } + setTuplet(tuplet) { + if (tuplet) { + this.tupletStack.push(tuplet); + const noteCount = tuplet.getNoteCount(); + const notesOccupied = tuplet.getNotesOccupied(); + this.applyTickMultiplier(notesOccupied, noteCount); + } + this.tuplet = tuplet; + return this; + } + addToModifierContext(mc) { + this.modifierContext = mc; + for (let i = 0; i < this.modifiers.length; ++i) { + this.modifierContext.addMember(this.modifiers[i]); + } + this.modifierContext.addMember(this); + this._preFormatted = false; + return this; + } + addModifier(modifier, index = 0) { + this.modifiers.push(modifier); + this._preFormatted = false; + return this; + } + getModifiers() { + return this.modifiers; + } + setTickContext(tc) { + this.tickContext = tc; + this._preFormatted = false; + } + checkTickContext(message = 'Tickable has no tick context.') { + return defined(this.tickContext, 'NoTickContext', message); + } + preFormat() { + if (this._preFormatted) + return; + this.width = 0; + if (this.modifierContext) { + this.modifierContext.preFormat(); + this.width += this.modifierContext.getWidth(); + } + } + set preFormatted(value) { + this._preFormatted = value; + } + get preFormatted() { + return this._preFormatted; + } + postFormat() { + if (this._postFormatted) + return this; + this._postFormatted = true; + return this; + } + set postFormatted(value) { + this._postFormatted = value; + } + get postFormatted() { + return this._postFormatted; + } + getIntrinsicTicks() { + return this.intrinsicTicks; + } + setIntrinsicTicks(intrinsicTicks) { + this.intrinsicTicks = intrinsicTicks; + this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks); + } + getTickMultiplier() { + return this.tickMultiplier; + } + applyTickMultiplier(numerator, denominator) { + this.tickMultiplier.multiply(numerator, denominator); + this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks); + } + setDuration(duration) { + const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator); + this.ticks = this.tickMultiplier.clone().multiply(ticks); + this.intrinsicTicks = this.ticks.value(); + } + getAbsoluteX() { + const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`); + return tickContext.getX(); + } + setModifierContext(mc) { + this.modifierContext = mc; + return this; + } + getModifierContext() { + return this.modifierContext; + } + checkModifierContext() { + return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.'); + } +} diff --git a/build/esm/src/tickcontext.js b/build/esm/src/tickcontext.js new file mode 100644 index 0000000000..4e281e369e --- /dev/null +++ b/build/esm/src/tickcontext.js @@ -0,0 +1,170 @@ +import { Fraction } from './fraction.js'; +import { RuntimeError } from './util.js'; +export class TickContext { + static getNextContext(tContext) { + const contexts = tContext.tContexts; + const index = contexts.indexOf(tContext); + if (index + 1 < contexts.length) + return contexts[index + 1]; + } + constructor(options) { + this.preFormatted = false; + this.postFormatted = false; + this.tickID = options && options.tickID ? options.tickID : 0; + this.currentTick = new Fraction(0, 1); + this.maxTicks = new Fraction(0, 1); + this.maxTickable = undefined; + this.minTicks = undefined; + this.minTickable = undefined; + this.padding = 1; + this.x = 0; + this.xBase = 0; + this.xOffset = 0; + this.tickables = []; + this.tickablesByVoice = {}; + this.notePx = 0; + this.glyphPx = 0; + this.leftDisplacedHeadPx = 0; + this.rightDisplacedHeadPx = 0; + this.modLeftPx = 0; + this.modRightPx = 0; + this.totalLeftPx = 0; + this.totalRightPx = 0; + this.tContexts = []; + this.width = 0; + this.formatterMetrics = { + freedom: { left: 0, right: 0 }, + }; + } + getTickID() { + return this.tickID; + } + getX() { + return this.x; + } + setX(x) { + this.x = x; + this.xBase = x; + this.xOffset = 0; + return this; + } + getXBase() { + return this.xBase; + } + setXBase(xBase) { + this.xBase = xBase; + this.x = xBase + this.xOffset; + } + getXOffset() { + return this.xOffset; + } + setXOffset(xOffset) { + this.xOffset = xOffset; + this.x = this.xBase + xOffset; + } + getWidth() { + return this.width + this.padding * 2; + } + setPadding(padding) { + this.padding = padding; + return this; + } + getMaxTicks() { + return this.maxTicks; + } + getMinTicks() { + return this.minTicks; + } + getMaxTickable() { + return this.maxTickable; + } + getMinTickable() { + return this.minTickable; + } + getTickables() { + return this.tickables; + } + getTickableForVoice(voiceIndex) { + return this.tickablesByVoice[voiceIndex]; + } + getTickablesByVoice() { + return this.tickablesByVoice; + } + getCenterAlignedTickables() { + return this.tickables.filter((tickable) => tickable.isCenterAligned()); + } + getMetrics() { + const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this; + return { + width, + glyphPx, + notePx, + leftDisplacedHeadPx, + rightDisplacedHeadPx, + modLeftPx, + modRightPx, + totalLeftPx, + totalRightPx, + }; + } + getCurrentTick() { + return this.currentTick; + } + setCurrentTick(tick) { + this.currentTick = tick; + this.preFormatted = false; + } + addTickable(tickable, voiceIndex) { + if (!tickable) { + throw new RuntimeError('BadArgument', 'Invalid tickable added.'); + } + if (!tickable.shouldIgnoreTicks()) { + const ticks = tickable.getTicks(); + if (ticks.greaterThan(this.maxTicks)) { + this.maxTicks = ticks.clone(); + this.maxTickable = tickable; + } + if (this.minTicks == null) { + this.minTicks = ticks.clone(); + this.minTickable = tickable; + } + else if (ticks.lessThan(this.minTicks)) { + this.minTicks = ticks.clone(); + this.minTickable = tickable; + } + } + tickable.setTickContext(this); + this.tickables.push(tickable); + this.tickablesByVoice[voiceIndex || 0] = tickable; + this.preFormatted = false; + return this; + } + preFormat() { + if (this.preFormatted) + return this; + for (let i = 0; i < this.tickables.length; ++i) { + const tickable = this.tickables[i]; + tickable.preFormat(); + const metrics = tickable.getMetrics(); + this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx); + this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx); + this.notePx = Math.max(this.notePx, metrics.notePx); + this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0); + this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx); + this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx); + this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx); + this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx); + this.width = this.notePx + this.totalLeftPx + this.totalRightPx; + } + return this; + } + postFormat() { + if (this.postFormatted) + return this; + this.postFormatted = true; + return this; + } + getFormatterMetrics() { + return this.formatterMetrics; + } +} diff --git a/build/esm/src/timesigglyph.js b/build/esm/src/timesigglyph.js new file mode 100644 index 0000000000..0246ad8210 --- /dev/null +++ b/build/esm/src/timesigglyph.js @@ -0,0 +1,89 @@ +import { Glyph } from './glyph.js'; +import { defined } from './util.js'; +export class TimeSignatureGlyph extends Glyph { + constructor(timeSignature, topDigits, botDigits, code, point, options) { + var _a; + super(code, point, options); + this.timeSignature = timeSignature; + this.topGlyphs = []; + this.botGlyphs = []; + let topWidth = 0; + let height = 0; + for (let i = 0; i < topDigits.length; ++i) { + let timeSigType = topDigits[i]; + switch (topDigits[i]) { + case '-': + timeSigType = 'Minus'; + break; + case '+': + timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus'; + break; + case '(': + timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft'; + break; + case ')': + timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight'; + break; + } + const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point); + this.topGlyphs.push(topGlyph); + topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0; + height = Math.max(height, topGlyph.getMetrics().height); + } + let botWidth = 0; + for (let i = 0; i < botDigits.length; ++i) { + let timeSigType = botDigits[i]; + switch (botDigits[i]) { + case '+': + timeSigType = 'PlusSmall'; + break; + case '(': + timeSigType = 'ParensLeftSmall'; + break; + case ')': + timeSigType = 'ParensRightSmall'; + break; + } + const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point); + this.botGlyphs.push(botGlyph); + botWidth += defined(botGlyph.getMetrics().width); + height = Math.max(height, botGlyph.getMetrics().height); + } + this.lineShift = height > 22 ? 1 : 0; + this.width = Math.max(topWidth, botWidth); + this.xMin = this.getMetrics().x_min; + this.topStartX = (this.width - topWidth) / 2.0; + this.botStartX = (this.width - botWidth) / 2.0; + this.reset(); + } + getMetrics() { + return { + x_min: this.xMin, + x_max: this.xMin + this.width, + width: this.width, + }; + } + renderToStave(x) { + const stave = this.checkStave(); + const ctx = this.checkContext(); + let start_x = x + this.topStartX; + let y = 0; + if (this.botGlyphs.length > 0) + y = stave.getYForLine(this.timeSignature.topLine - this.lineShift); + else + y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2; + for (let i = 0; i < this.topGlyphs.length; ++i) { + const glyph = this.topGlyphs[i]; + Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y); + start_x += defined(glyph.getMetrics().width); + } + start_x = x + this.botStartX; + y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift); + for (let i = 0; i < this.botGlyphs.length; ++i) { + const glyph = this.botGlyphs[i]; + this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine()); + Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y); + start_x += defined(glyph.getMetrics().width); + } + } +} diff --git a/build/esm/src/timesignature.js b/build/esm/src/timesignature.js new file mode 100644 index 0000000000..c092bb80b1 --- /dev/null +++ b/build/esm/src/timesignature.js @@ -0,0 +1,119 @@ +import { Glyph } from './glyph.js'; +import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; +import { Tables } from './tables.js'; +import { TimeSignatureGlyph } from './timesigglyph.js'; +import { defined, RuntimeError } from './util.js'; +const assertIsValidTimeSig = (timeSpec) => { + const numbers = timeSpec.split('/'); + if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') { + throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form "/"`); + } + numbers.forEach((number) => { + if (/^[0-9+\-()]+$/.test(number) == false) { + throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`); + } + }); +}; +export class TimeSignature extends StaveModifier { + static get CATEGORY() { + return "TimeSignature"; + } + static get glyphs() { + return { + C: { + code: 'timeSigCommon', + line: 2, + }, + 'C|': { + code: 'timeSigCutCommon', + line: 2, + }, + }; + } + constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) { + super(); + this.timeSpec = '4/4'; + this.line = 0; + this.is_numeric = true; + this.validate_args = validate_args; + const padding = customPadding; + const musicFont = Tables.currentMusicFont(); + this.point = musicFont.lookupMetric('digits.point') || Tables.NOTATION_FONT_SCALE; + const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0); + this.topLine = 2 + fontLineShift; + this.bottomLine = 4 + fontLineShift; + this.setPosition(StaveModifierPosition.BEGIN); + this.setTimeSig(timeSpec); + this.setPadding(padding); + } + parseTimeSpec(timeSpec) { + var _a, _b; + if (timeSpec === 'C' || timeSpec === 'C|') { + const { line, code } = TimeSignature.glyphs[timeSpec]; + return { + line, + num: false, + glyph: new Glyph(code, Tables.NOTATION_FONT_SCALE), + }; + } + if (this.validate_args) { + assertIsValidTimeSig(timeSpec); + } + const parts = timeSpec.split('/'); + return { + line: 0, + num: true, + glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''), + }; + } + makeTimeSignatureGlyph(topDigits, botDigits) { + return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point); + } + getInfo() { + const { line, is_numeric, glyph } = this; + return { line, num: is_numeric, glyph }; + } + setTimeSig(timeSpec) { + this.timeSpec = timeSpec; + const info = this.parseTimeSpec(timeSpec); + this.setGlyph(info.glyph); + this.is_numeric = info.num; + this.line = info.line; + return this; + } + getTimeSpec() { + return this.timeSpec; + } + getLine() { + return this.line; + } + setLine(line) { + this.line = line; + } + getGlyph() { + return this.glyph; + } + setGlyph(glyph) { + this.glyph = glyph; + this.setWidth(defined(this.glyph.getMetrics().width)); + } + getIsNumeric() { + return this.is_numeric; + } + setIsNumeric(isNumeric) { + this.is_numeric = isNumeric; + } + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('timesignature', this.getAttribute('id')); + this.glyph.setStave(stave); + this.glyph.setContext(ctx); + this.placeGlyphOnLine(this.glyph, stave, this.line); + this.glyph.renderToStave(this.x); + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} diff --git a/build/esm/src/timesignote.js b/build/esm/src/timesignote.js new file mode 100644 index 0000000000..bf55236ec5 --- /dev/null +++ b/build/esm/src/timesignote.js @@ -0,0 +1,32 @@ +import { Note } from './note.js'; +import { TimeSignature } from './timesignature.js'; +export class TimeSigNote extends Note { + static get CATEGORY() { + return "TimeSigNote"; + } + constructor(timeSpec, customPadding) { + super({ duration: 'b' }); + this.timeSig = new TimeSignature(timeSpec, customPadding); + this.setWidth(this.timeSig.getGlyph().getMetrics().width); + this.ignore_ticks = true; + } + addToModifierContext(mc) { + return this; + } + preFormat() { + this.preFormatted = true; + return this; + } + draw() { + const stave = this.checkStave(); + const ctx = this.checkContext(); + this.setRendered(); + const tsGlyph = this.timeSig.getGlyph(); + if (!tsGlyph.getContext()) { + tsGlyph.setContext(ctx); + } + tsGlyph.setStave(stave); + tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs()); + tsGlyph.renderToStave(this.getAbsoluteX()); + } +} diff --git a/build/esm/src/tremolo.js b/build/esm/src/tremolo.js new file mode 100644 index 0000000000..e23897a58b --- /dev/null +++ b/build/esm/src/tremolo.js @@ -0,0 +1,49 @@ +import { Glyph } from './glyph.js'; +import { GraceNote } from './gracenote.js'; +import { Modifier } from './modifier.js'; +import { Note } from './note.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { isGraceNote } from './typeguard.js'; +export class Tremolo extends Modifier { + static get CATEGORY() { + return "Tremolo"; + } + constructor(num) { + super(); + this.num = num; + this.position = Modifier.Position.CENTER; + this.code = 'tremolo1'; + this.y_spacing_scale = 1; + this.extra_stroke_scale = 1; + } + draw() { + var _a; + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const stemDirection = note.getStemDirection(); + const start = note.getModifierStartXY(this.position, this.index); + let x = start.x; + const gn = isGraceNote(note); + const scale = gn ? GraceNote.SCALE : 1; + const category = `tremolo.${gn ? 'grace' : 'default'}`; + const musicFont = Tables.currentMusicFont(); + let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection; + y_spacing *= this.y_spacing_scale; + const height = this.num * y_spacing; + let y = note.getStemExtents().baseY - height; + if (stemDirection < 0) { + y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale; + } + else { + y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale; + } + const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : Note.getPoint(gn ? 'grace' : 'default'); + x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`); + for (let i = 0; i < this.num; ++i) { + Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale }); + y += y_spacing; + } + } +} diff --git a/build/esm/src/tuning.js b/build/esm/src/tuning.js new file mode 100644 index 0000000000..ea6c2e5ec0 --- /dev/null +++ b/build/esm/src/tuning.js @@ -0,0 +1,58 @@ +import { Tables } from './tables.js'; +import { RuntimeError } from './util.js'; +export class Tuning { + static get names() { + return { + standard: 'E/5,B/4,G/4,D/4,A/3,E/3', + dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3', + dropd: 'E/5,B/4,G/4,D/4,A/3,D/3', + eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3', + standardBanjo: 'D/5,B/4,G/4,D/4,G/5', + doubleCBanjo: 'D/5,C/5,G/4,C/4,G/5', + doubleDBanjo: 'E/5,D/5,A/4,D/4,A/5', + sawmillBanjo: 'D/5,C/5,G/4,D/4,G/5', + }; + } + constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') { + this.tuningValues = []; + this.setTuning(tuningString); + } + noteToInteger(noteString) { + var _a; + return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1; + } + setTuning(tuningString) { + if (Tuning.names[tuningString]) { + tuningString = Tuning.names[tuningString]; + } + this.tuningValues = []; + const keys = tuningString.split(/\s*,\s*/); + if (keys.length === 0) { + throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`); + } + for (let i = 0; i < keys.length; ++i) { + this.tuningValues[i] = this.noteToInteger(keys[i]); + } + } + getValueForString(stringNum) { + const s = Number(stringNum); + if (s < 1 || s > this.tuningValues.length) { + throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`); + } + return this.tuningValues[s - 1]; + } + getValueForFret(fretNum, stringNum) { + const stringValue = this.getValueForString(stringNum); + const f = Number(fretNum); + if (f < 0) { + throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`); + } + return stringValue + f; + } + getNoteForFret(fretNum, stringNum) { + const noteValue = this.getValueForFret(fretNum, stringNum); + const octave = Math.floor(noteValue / 12); + const value = noteValue % 12; + return `${Tables.integerToNote(value)}/${octave}`; + } +} diff --git a/build/esm/src/tuplet.js b/build/esm/src/tuplet.js new file mode 100644 index 0000000000..86890df59e --- /dev/null +++ b/build/esm/src/tuplet.js @@ -0,0 +1,243 @@ +import { Element } from './element.js'; +import { Formatter } from './formatter.js'; +import { Glyph } from './glyph.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { defined, RuntimeError } from './util.js'; +export class Tuplet extends Element { + static get CATEGORY() { + return "Tuplet"; + } + static get LOCATION_TOP() { + return 1; + } + static get LOCATION_BOTTOM() { + return -1; + } + static get NESTING_OFFSET() { + return 15; + } + static get metrics() { + const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet; + if (!tupletMetrics) + throw new RuntimeError('BadMetrics', `tuplet missing`); + return tupletMetrics; + } + constructor(notes, options = {}) { + super(); + this.numerator_glyphs = []; + this.denom_glyphs = []; + if (!notes || !notes.length) { + throw new RuntimeError('BadArguments', 'No notes provided for tuplet.'); + } + this.options = options; + this.notes = notes; + this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length; + if (this.options.beats_occupied) { + this.beatsOccupiedDeprecationWarning(); + } + this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2; + if (this.options.bracketed != undefined) { + this.bracketed = this.options.bracketed; + } + else { + this.bracketed = notes.some((note) => !note.hasBeam()); + } + this.ratioed = + this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1; + this.point = (Tables.NOTATION_FONT_SCALE * 3) / 5; + this.y_pos = 16; + this.x_pos = 100; + this.width = 200; + this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP); + Formatter.AlignRestsToNotes(notes, true, true); + this.resolveGlyphs(); + this.attach(); + } + attach() { + for (let i = 0; i < this.notes.length; i++) { + const note = this.notes[i]; + note.setTuplet(this); + } + } + detach() { + for (let i = 0; i < this.notes.length; i++) { + const note = this.notes[i]; + note.resetTuplet(this); + } + } + setBracketed(bracketed) { + this.bracketed = !!bracketed; + return this; + } + setRatioed(ratioed) { + this.ratioed = !!ratioed; + return this; + } + setTupletLocation(location) { + if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) { + console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`); + location = Tuplet.LOCATION_TOP; + } + this.location = location; + return this; + } + getNotes() { + return this.notes; + } + getNoteCount() { + return this.num_notes; + } + beatsOccupiedDeprecationWarning() { + console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.'); + } + getBeatsOccupied() { + this.beatsOccupiedDeprecationWarning(); + return this.getNotesOccupied(); + } + setBeatsOccupied(beats) { + this.beatsOccupiedDeprecationWarning(); + return this.setNotesOccupied(beats); + } + getNotesOccupied() { + return this.notes_occupied; + } + setNotesOccupied(notes) { + this.detach(); + this.notes_occupied = notes; + this.resolveGlyphs(); + this.attach(); + } + resolveGlyphs() { + this.numerator_glyphs = []; + let n = this.num_notes; + while (n >= 1) { + this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point)); + n = parseInt((n / 10).toString(), 10); + } + this.denom_glyphs = []; + n = this.notes_occupied; + while (n >= 1) { + this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point)); + n = parseInt((n / 10).toString(), 10); + } + } + getNestedTupletCount() { + const location = this.location; + const first_note = this.notes[0]; + let maxTupletCount = countTuplets(first_note, location); + let minTupletCount = countTuplets(first_note, location); + function countTuplets(note, location) { + return note.getTupletStack().filter((tuplet) => tuplet.location === location).length; + } + this.notes.forEach((note) => { + const tupletCount = countTuplets(note, location); + maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount; + minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount; + }); + return maxTupletCount - minTupletCount; + } + getYPosition() { + const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location; + const y_offset = this.options.y_offset || 0; + const first_note = this.notes[0]; + let y_pos; + if (this.location === Tuplet.LOCATION_TOP) { + y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset; + for (let i = 0; i < this.notes.length; ++i) { + const note = this.notes[i]; + let modLines = 0; + const mc = note.getModifierContext(); + if (mc) { + modLines = Math.max(modLines, mc.getState().top_text_line); + } + const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset; + if (note.hasStem() || note.isRest()) { + const top_y = note.getStemDirection() === Stem.UP + ? note.getStemExtents().topY - Tuplet.metrics.stemOffset + : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset; + y_pos = Math.min(top_y, y_pos); + if (modLines > 0) { + y_pos = Math.min(modY, y_pos); + } + } + } + } + else { + let lineCheck = Tuplet.metrics.bottomLine; + this.notes.forEach((nn) => { + const mc = nn.getModifierContext(); + if (mc) { + lineCheck = Math.max(lineCheck, mc.getState().text_line + 1); + } + }); + y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset; + for (let i = 0; i < this.notes.length; ++i) { + if (this.notes[i].hasStem() || this.notes[i].isRest()) { + const bottom_y = this.notes[i].getStemDirection() === Stem.UP + ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset + : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset; + if (bottom_y > y_pos) { + y_pos = bottom_y; + } + } + } + } + return y_pos + nested_tuplet_y_offset + y_offset; + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const first_note = this.notes[0]; + const last_note = this.notes[this.notes.length - 1]; + if (!this.bracketed) { + this.x_pos = first_note.getStemX(); + this.width = last_note.getStemX() - this.x_pos; + } + else { + this.x_pos = first_note.getTieLeftX() - 5; + this.width = last_note.getTieRightX() - this.x_pos + 5; + } + this.y_pos = this.getYPosition(); + const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width); + let width = this.numerator_glyphs.reduce(addGlyphWidth, 0); + if (this.ratioed) { + width = this.denom_glyphs.reduce(addGlyphWidth, width); + width += this.point * 0.32; + } + const notation_center_x = this.x_pos + this.width / 2; + const notation_start_x = notation_center_x - width / 2; + if (this.bracketed) { + const line_width = this.width / 2 - width / 2 - 5; + if (line_width > 0) { + ctx.fillRect(this.x_pos, this.y_pos, line_width, 1); + ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1); + ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10); + ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10); + } + } + const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0); + let x_offset = 0; + this.numerator_glyphs.forEach((glyph) => { + glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY); + x_offset += defined(glyph.getMetrics().width); + }); + if (this.ratioed) { + const colon_x = notation_start_x + x_offset + this.point * 0.16; + const colon_radius = this.point * 0.06; + ctx.beginPath(); + ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + ctx.beginPath(); + ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + x_offset += this.point * 0.32; + this.denom_glyphs.forEach((glyph) => { + glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY); + x_offset += defined(glyph.getMetrics().width); + }); + } + } +} diff --git a/build/esm/src/typeguard.js b/build/esm/src/typeguard.js new file mode 100644 index 0000000000..bc5cfbd703 --- /dev/null +++ b/build/esm/src/typeguard.js @@ -0,0 +1,30 @@ +export function isCategory(obj, category, checkAncestors = true) { + if (typeof obj !== 'object' || obj === null) { + return false; + } + let constructorFcn = obj.constructor; + if (checkAncestors) { + while (obj !== null) { + constructorFcn = obj.constructor; + if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) { + return true; + } + obj = Object.getPrototypeOf(obj); + } + return false; + } + else { + return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category; + } +} +export const isAccidental = (obj) => isCategory(obj, "Accidental"); +export const isAnnotation = (obj) => isCategory(obj, "Annotation"); +export const isBarline = (obj) => isCategory(obj, "Barline"); +export const isDot = (obj) => isCategory(obj, "Dot"); +export const isGraceNote = (obj) => isCategory(obj, "GraceNote"); +export const isGraceNoteGroup = (obj) => isCategory(obj, "GraceNoteGroup"); +export const isNote = (obj) => isCategory(obj, "Note"); +export const isRenderContext = (obj) => isCategory(obj, "RenderContext"); +export const isStaveNote = (obj) => isCategory(obj, "StaveNote"); +export const isStemmableNote = (obj) => isCategory(obj, "StemmableNote"); +export const isTabNote = (obj) => isCategory(obj, "TabNote"); diff --git a/build/esm/src/util.js b/build/esm/src/util.js new file mode 100644 index 0000000000..812b789577 --- /dev/null +++ b/build/esm/src/util.js @@ -0,0 +1,61 @@ +export class RuntimeError extends Error { + constructor(code, message = '') { + super('[RuntimeError] ' + code + ': ' + message); + this.code = code; + } +} +export function globalObject() { + if (typeof globalThis !== 'undefined') { + return globalThis; + } + if (typeof self !== 'undefined') { + return self; + } + if (typeof window !== 'undefined') { + return window; + } + if (typeof global !== 'undefined') { + return global; + } + return Function('return this')(); +} +export function defined(x, code = 'undefined', message = '') { + if (x === undefined) { + throw new RuntimeError(code, message); + } + return x; +} +export function log(block, ...args) { + if (!args) + return; + const line = Array.prototype.slice.call(args).join(' '); + globalObject().console.log(block + ': ' + line); +} +export function warn(...args) { + const line = args.join(' '); + const err = new Error(); + globalObject().console.log('Warning: ', line, err.stack); +} +function roundN(x, n) { + return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n; +} +export function midLine(a, b) { + let mid_line = b + (a - b) / 2; + if (mid_line % 2 > 0) { + mid_line = roundN(mid_line * 10, 5) / 10; + } + return mid_line; +} +export function prefix(text) { + return `vf-${text}`; +} +export function normalizeAngle(a) { + a = a % (2 * Math.PI); + if (a < 0) { + a += 2 * Math.PI; + } + return a; +} +export function sumArray(arr) { + return arr.reduce((a, b) => a + b, 0); +} diff --git a/build/esm/src/version.js b/build/esm/src/version.js new file mode 100644 index 0000000000..42532496c9 --- /dev/null +++ b/build/esm/src/version.js @@ -0,0 +1,3 @@ +export const VERSION = '4.2.6'; +export const ID = '103aad2b14837418c5e96c9e078edd036fcddf60'; +export const DATE = '2024-08-26T20:16:17.134Z'; \ No newline at end of file diff --git a/build/esm/src/vex.js b/build/esm/src/vex.js new file mode 100644 index 0000000000..d6f0c5c8d3 --- /dev/null +++ b/build/esm/src/vex.js @@ -0,0 +1,52 @@ +import { Flow } from './flow.js'; +import { log, RuntimeError } from './util.js'; +class Vex { + static sortAndUnique(arr, cmp, eq) { + if (arr.length > 1) { + const newArr = []; + let last; + arr.sort(cmp); + for (let i = 0; i < arr.length; ++i) { + if (i === 0 || !eq(arr[i], last)) { + newArr.push(arr[i]); + } + last = arr[i]; + } + return newArr; + } + else { + return arr; + } + } + static contains(arr, obj) { + let i = arr.length; + while (i--) { + if (arr[i] === obj) { + return true; + } + } + return false; + } + static getCanvasContext(canvasSelector) { + if (!canvasSelector) { + throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector); + } + const canvas = document.getElementById(canvasSelector); + if (!(canvas && canvas.getContext)) { + throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas'); + } + return canvas.getContext('2d'); + } + static benchmark(s, f) { + const start_time = new Date().getTime(); + f(); + const elapsed = new Date().getTime() - start_time; + log(s, elapsed + 'ms'); + } + static stackTrace() { + const err = new Error(); + return err.stack; + } +} +Vex.Flow = Flow; +export { Vex }; diff --git a/build/esm/src/vibrato.js b/build/esm/src/vibrato.js new file mode 100644 index 0000000000..36bbb54258 --- /dev/null +++ b/build/esm/src/vibrato.js @@ -0,0 +1,100 @@ +import { Bend } from './bend.js'; +import { Modifier } from './modifier.js'; +import { Tables } from './tables.js'; +export class Vibrato extends Modifier { + static get CATEGORY() { + return "Vibrato"; + } + static format(vibratos, state, context) { + if (!vibratos || vibratos.length === 0) + return false; + let text_line = state.top_text_line; + let width = 0; + let shift = state.right_shift - 7; + const bends = context.getMembers(Bend.CATEGORY); + if (bends && bends.length > 0) { + const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE; + text_line = text_line - (bendHeight + 1); + } + else { + state.top_text_line += 1; + } + for (let i = 0; i < vibratos.length; ++i) { + const vibrato = vibratos[i]; + vibrato.setXShift(shift); + vibrato.setTextLine(text_line); + width += vibrato.getWidth(); + shift += width; + } + state.right_shift += width; + return true; + } + constructor() { + super(); + this.position = Modifier.Position.RIGHT; + this.render_options = { + harsh: false, + vibrato_width: 20, + wave_height: 6, + wave_width: 4, + wave_girth: 2, + }; + this.setVibratoWidth(this.render_options.vibrato_width); + } + setHarsh(harsh) { + this.render_options.harsh = harsh; + return this; + } + setVibratoWidth(width) { + this.render_options.vibrato_width = width; + this.setWidth(width); + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index); + const vx = start.x + this.x_shift; + const vy = note.getYForTopText(this.text_line) + 2; + Vibrato.renderVibrato(ctx, vx, vy, this.render_options); + } + static renderVibrato(ctx, x, y, opts) { + const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts; + const num_waves = vibrato_width / wave_width; + ctx.beginPath(); + let i; + if (harsh) { + ctx.moveTo(x, y + wave_girth + 1); + for (i = 0; i < num_waves / 2; ++i) { + ctx.lineTo(x + wave_width, y - wave_height / 2); + x += wave_width; + ctx.lineTo(x + wave_width, y + wave_height / 2); + x += wave_width; + } + for (i = 0; i < num_waves / 2; ++i) { + ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1); + x -= wave_width; + ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1); + x -= wave_width; + } + ctx.fill(); + } + else { + ctx.moveTo(x, y + wave_girth); + for (i = 0; i < num_waves / 2; ++i) { + ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y); + x += wave_width; + ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y); + x += wave_width; + } + for (i = 0; i < num_waves / 2; ++i) { + ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth); + x -= wave_width; + ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth); + x -= wave_width; + } + ctx.fill(); + } + } +} diff --git a/build/esm/src/vibratobracket.js b/build/esm/src/vibratobracket.js new file mode 100644 index 0000000000..01ef3ced0d --- /dev/null +++ b/build/esm/src/vibratobracket.js @@ -0,0 +1,51 @@ +import { Element } from './element.js'; +import { log } from './util.js'; +import { Vibrato } from './vibrato.js'; +function L(...args) { + if (VibratoBracket.DEBUG) + log('Vex.Flow.VibratoBracket', args); +} +class VibratoBracket extends Element { + static get CATEGORY() { + return "VibratoBracket"; + } + constructor(bracket_data) { + super(); + if (bracket_data.start) + this.start = bracket_data.start; + if (bracket_data.stop) + this.stop = bracket_data.stop; + this.line = 1; + this.render_options = { + harsh: false, + wave_height: 6, + wave_width: 4, + wave_girth: 2, + vibrato_width: 0, + }; + } + setLine(line) { + this.line = line; + return this; + } + setHarsh(harsh) { + this.render_options.harsh = harsh; + return this; + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const y = (this.start && this.start.checkStave().getYForTopText(this.line)) || + (this.stop && this.stop.checkStave().getYForTopText(this.line)) || + 0; + const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0; + const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) || + (this.start && this.start.checkStave().getTieEndX() - 10) || + 0; + this.render_options.vibrato_width = stop_x - start_x; + L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y); + Vibrato.renderVibrato(ctx, start_x, y, this.render_options); + } +} +VibratoBracket.DEBUG = false; +export { VibratoBracket }; diff --git a/build/esm/src/voice.js b/build/esm/src/voice.js new file mode 100644 index 0000000000..1ca8752608 --- /dev/null +++ b/build/esm/src/voice.js @@ -0,0 +1,191 @@ +import { Element } from './element.js'; +import { Fraction } from './fraction.js'; +import { Tables } from './tables.js'; +import { defined, RuntimeError, sumArray } from './util.js'; +export var VoiceMode; +(function (VoiceMode) { + VoiceMode[VoiceMode["STRICT"] = 1] = "STRICT"; + VoiceMode[VoiceMode["SOFT"] = 2] = "SOFT"; + VoiceMode[VoiceMode["FULL"] = 3] = "FULL"; +})(VoiceMode || (VoiceMode = {})); +export class Voice extends Element { + static get CATEGORY() { + return "Voice"; + } + static get Mode() { + return VoiceMode; + } + constructor(time) { + super(); + this.resolutionMultiplier = 1; + this.mode = VoiceMode.STRICT; + this.preFormatted = false; + this.ticksUsed = new Fraction(0, 1); + this.largestTickWidth = 0; + this.tickables = []; + this.options = { + softmaxFactor: Tables.SOFTMAX_FACTOR, + }; + let voiceTime; + if (typeof time === 'string') { + const match = time.match(/(\d+)\/(\d+)/); + if (match) { + voiceTime = { + num_beats: parseInt(match[1]), + beat_value: parseInt(match[2]), + }; + } + } + else { + voiceTime = time; + } + this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime); + this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1); + this.smallestTickCount = this.totalTicks.clone(); + } + getTotalTicks() { + return this.totalTicks; + } + getTicksUsed() { + return this.ticksUsed; + } + getLargestTickWidth() { + return this.largestTickWidth; + } + getSmallestTickCount() { + return this.smallestTickCount; + } + getTickables() { + return this.tickables; + } + getMode() { + return this.mode; + } + setMode(mode) { + this.mode = mode; + return this; + } + getResolutionMultiplier() { + return this.resolutionMultiplier; + } + getActualResolution() { + return this.resolutionMultiplier * this.time.resolution; + } + setStave(stave) { + this.stave = stave; + this.boundingBox = undefined; + return this; + } + getStave() { + return this.stave; + } + getBoundingBox() { + if (!this.boundingBox) { + const stave = this.checkStave(); + let boundingBox = undefined; + for (let i = 0; i < this.tickables.length; ++i) { + const tickable = this.tickables[i]; + if (!tickable.getStave()) + tickable.setStave(stave); + const bb = tickable.getBoundingBox(); + if (bb) { + boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb; + } + } + this.boundingBox = boundingBox; + } + return this.boundingBox; + } + setStrict(strict) { + this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT; + return this; + } + isComplete() { + if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) { + return this.ticksUsed.equals(this.totalTicks); + } + else { + return true; + } + } + setSoftmaxFactor(factor) { + this.options.softmaxFactor = factor; + this.expTicksUsed = 0; + return this; + } + reCalculateExpTicksUsed() { + const totalTicks = this.ticksUsed.value(); + const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks); + this.expTicksUsed = sumArray(this.tickables.map(exp)); + return this.expTicksUsed; + } + softmax(tickValue) { + if (!this.expTicksUsed) { + this.expTicksUsed = this.reCalculateExpTicksUsed(); + } + const totalTicks = this.ticksUsed.value(); + const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks); + const sm = exp(tickValue) / this.expTicksUsed; + return sm; + } + addTickable(tickable) { + if (!tickable.shouldIgnoreTicks()) { + const ticks = tickable.getTicks(); + this.ticksUsed.add(ticks); + this.expTicksUsed = 0; + if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) && + this.ticksUsed.greaterThan(this.totalTicks)) { + this.ticksUsed.subtract(ticks); + throw new RuntimeError('BadArgument', 'Too many ticks.'); + } + if (ticks.lessThan(this.smallestTickCount)) { + this.smallestTickCount = ticks.clone(); + } + this.resolutionMultiplier = this.ticksUsed.denominator; + this.totalTicks.add(0, this.ticksUsed.denominator); + } + this.tickables.push(tickable); + tickable.setVoice(this); + return this; + } + addTickables(tickables) { + for (let i = 0; i < tickables.length; ++i) { + this.addTickable(tickables[i]); + } + return this; + } + preFormat() { + if (this.preFormatted) + return this; + const stave = this.checkStave(); + this.tickables.forEach((tickable) => { + if (!tickable.getStave()) { + tickable.setStave(stave); + } + }); + this.preFormatted = true; + return this; + } + checkStave() { + return defined(this.stave, 'NoStave', 'No stave attached to instance.'); + } + draw(context = this.checkContext(), stave) { + stave = stave !== null && stave !== void 0 ? stave : this.stave; + this.setRendered(); + let boundingBox = undefined; + for (let i = 0; i < this.tickables.length; ++i) { + const tickable = this.tickables[i]; + if (stave) { + tickable.setStave(stave); + } + defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.'); + const bb = tickable.getBoundingBox(); + if (bb) { + boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb; + } + tickable.setContext(context); + tickable.drawWithStyle(); + } + this.boundingBox = boundingBox; + } +} diff --git a/build/esm/src/web.js b/build/esm/src/web.js new file mode 100644 index 0000000000..f27804df9c --- /dev/null +++ b/build/esm/src/web.js @@ -0,0 +1,15 @@ +import { globalObject } from './util.js'; +export function isHTMLCanvas(element) { + if (!element) + return false; + const global = globalObject(); + return ((typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) || + (typeof element.getContext === 'function' && typeof element.toDataURL === 'function')); +} +export function isHTMLDiv(element) { + if (!element) + return false; + const global = globalObject(); + return ((typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) || + (typeof element.appendChild === 'function' && typeof element.style === 'object')); +} diff --git a/build/esm/tests/accidental_tests.js b/build/esm/tests/accidental_tests.js new file mode 100644 index 0000000000..ead93097e5 --- /dev/null +++ b/build/esm/tests/accidental_tests.js @@ -0,0 +1,974 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Accidental } from '../src/accidental.js'; +import { Beam } from '../src/beam.js'; +import { Dot } from '../src/dot.js'; +import { Flow } from '../src/flow.js'; +import { Formatter } from '../src/formatter.js'; +import { ModifierContext } from '../src/modifiercontext.js'; +import { Note } from '../src/note.js'; +import { Stave } from '../src/stave.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Stem } from '../src/stem.js'; +import { TickContext } from '../src/tickcontext.js'; +import { TimeSigNote } from '../src/timesignote.js'; +import { isAccidental } from '../src/typeguard.js'; +import { Voice } from '../src/voice.js'; +const AccidentalTests = { + Start() { + QUnit.module('Accidental'); + QUnit.test('Automatic Accidentals - Simple Tests', autoAccidentalWorking); + const run = VexFlowTests.runTests; + run('Accidental Padding', formatAccidentalSpaces); + run('Basic', basic); + run('Stem Down', basicStemDown); + run('Cautionary Accidental', cautionary); + run('Accidental Arrangement Special Cases', specialCases); + run('Multi Voice', multiVoice); + run('Microtonal', microtonal); + run('Microtonal (Iranian)', microtonal_iranian); + run('Sagittal', sagittal); + run('Automatic Accidentals', automaticAccidentals0); + run('Automatic Accidentals - C major scale in Ab', automaticAccidentals1); + run('Automatic Accidentals - No Accidentals Necessary', automaticAccidentals2); + run('Automatic Accidentals - No Accidentals Necessary (EasyScore)', automaticAccidentals3); + run('Automatic Accidentals - Multi Voice Inline', automaticAccidentalsMultiVoiceInline); + run('Automatic Accidentals - Multi Voice Offset', automaticAccidentalsMultiVoiceOffset); + run('Automatic Accidentals - Key C, Single Octave', automaticAccidentalsCornerCases1); + run('Automatic Accidentals - Key C, Two Octaves', automaticAccidentalsCornerCases2); + run('Automatic Accidentals - Key C#, Single Octave', automaticAccidentalsCornerCases3); + run('Automatic Accidentals - Key C#, Two Octaves', automaticAccidentalsCornerCases4); + run('Factory API', factoryAPI); + }, +}; +function hasAccidental(note) { + return note.getModifiers().some((modifier) => isAccidental(modifier)); +} +function makeNewAccid(factory) { + return (type) => factory.Accidental({ type }); +} +function autoAccidentalWorking(assert) { + const createStaveNote = (noteStruct) => new StaveNote(noteStruct); + let notes = [ + { keys: ['bb/4'], duration: '4' }, + { keys: ['bb/4'], duration: '4' }, + { keys: ['g#/4'], duration: '4' }, + { keys: ['g/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['a#/4'], duration: '4' }, + { keys: ['g#/4'], duration: '4' }, + ].map(createStaveNote); + let voice = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + Accidental.applyAccidentals([voice], 'F'); + assert.equal(hasAccidental(notes[0]), false, 'No flat because of key signature'); + assert.equal(hasAccidental(notes[1]), false, 'No flat because of key signature'); + assert.equal(hasAccidental(notes[2]), true, 'Added a sharp'); + assert.equal(hasAccidental(notes[3]), true, 'Back to natural'); + assert.equal(hasAccidental(notes[4]), true, 'Back to natural'); + assert.equal(hasAccidental(notes[5]), false, 'Natural remembered'); + assert.equal(hasAccidental(notes[6]), true, 'Added sharp'); + assert.equal(hasAccidental(notes[7]), true, 'Added sharp'); + notes = [ + { keys: ['e#/4'], duration: '4' }, + { keys: ['cb/4'], duration: '4' }, + { keys: ['fb/4'], duration: '4' }, + { keys: ['b#/4'], duration: '4' }, + { keys: ['b#/4'], duration: '4' }, + { keys: ['cb/5'], duration: '4' }, + { keys: ['fb/5'], duration: '4' }, + { keys: ['e#/4'], duration: '4' }, + ].map(createStaveNote); + voice = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + Accidental.applyAccidentals([voice], 'A'); + assert.equal(hasAccidental(notes[0]), true, 'Added sharp'); + assert.equal(hasAccidental(notes[1]), true, 'Added flat'); + assert.equal(hasAccidental(notes[2]), true, 'Added flat'); + assert.equal(hasAccidental(notes[3]), true, 'Added sharp'); + assert.equal(hasAccidental(notes[4]), false, 'Sharp remembered'); + assert.equal(hasAccidental(notes[5]), true, 'Added flat(different octave)'); + assert.equal(hasAccidental(notes[6]), true, 'Added flat(different octave)'); + assert.equal(hasAccidental(notes[7]), false, 'sharp remembered'); + notes = [ + { keys: ['c/4'], duration: '4' }, + { keys: ['cb/4'], duration: '4' }, + { keys: ['cb/4'], duration: '4' }, + { keys: ['c#/4'], duration: '4' }, + { keys: ['c#/4'], duration: '4' }, + { keys: ['cbb/4'], duration: '4' }, + { keys: ['cbb/4'], duration: '4' }, + { keys: ['c##/4'], duration: '4' }, + { keys: ['c##/4'], duration: '4' }, + { keys: ['c/4'], duration: '4' }, + { keys: ['c/4'], duration: '4' }, + ].map(createStaveNote); + voice = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + Accidental.applyAccidentals([voice], 'C'); + assert.equal(hasAccidental(notes[0]), false, 'No accidental'); + assert.equal(hasAccidental(notes[1]), true, 'Added flat'); + assert.equal(hasAccidental(notes[2]), false, 'Flat remembered'); + assert.equal(hasAccidental(notes[3]), true, 'Sharp added'); + assert.equal(hasAccidental(notes[4]), false, 'Sharp remembered'); + assert.equal(hasAccidental(notes[5]), true, 'Added doubled flat'); + assert.equal(hasAccidental(notes[6]), false, 'Double flat remembered'); + assert.equal(hasAccidental(notes[7]), true, 'Added double sharp'); + assert.equal(hasAccidental(notes[8]), false, 'Double sharp rememberd'); + assert.equal(hasAccidental(notes[9]), true, 'Added natural'); + assert.equal(hasAccidental(notes[10]), false, 'Natural remembered'); +} +function formatAccidentalSpaces(options) { + const f = VexFlowTests.makeFactory(options, 750, 280); + const context = f.getContext(); + const softmaxFactor = 100; + const notes = [ + new StaveNote({ + keys: ['e##/5'], + duration: '8d', + }).addModifier(new Accidental('##'), 0), + new StaveNote({ + keys: ['b/4'], + duration: '16', + }).addModifier(new Accidental('b'), 0), + new StaveNote({ + keys: ['f/3'], + duration: '8', + }), + new StaveNote({ + keys: ['a/3'], + duration: '16', + }), + new StaveNote({ + keys: ['e/4', 'g/4'], + duration: '16', + }) + .addModifier(new Accidental('bb'), 0) + .addModifier(new Accidental('bb'), 1), + new StaveNote({ + keys: ['d/4'], + duration: '16', + }), + new StaveNote({ + keys: ['e/4', 'g/4'], + duration: '16', + }) + .addModifier(new Accidental('#'), 0) + .addModifier(new Accidental('#'), 1), + new StaveNote({ + keys: ['g/4'], + duration: '32', + }), + new StaveNote({ + keys: ['a/4'], + duration: '32', + }), + new StaveNote({ + keys: ['g/4'], + duration: '16', + }), + new StaveNote({ + keys: ['d/4'], + duration: 'q', + }), + ]; + Dot.buildAndAttach([notes[0]], { all: true }); + const beams = Beam.generateBeams(notes); + const voice = new Voice({ + num_beats: 4, + beat_value: 4, + }); + voice.addTickables(notes); + const formatter = new Formatter({ softmaxFactor }).joinVoices([voice]); + const width = formatter.preCalculateMinTotalWidth([voice]); + const stave = new Stave(10, 40, width + 20); + stave.setContext(context).draw(); + formatter.format([voice], width); + voice.draw(context, stave); + beams.forEach((b) => b.setContext(context).draw()); + notes.forEach((note) => Note.plotMetrics(context, note, 30)); + VexFlowTests.plotLegendForNoteWidth(context, 300, 150); + options.assert.ok(true); +} +function basic(options) { + const f = VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + f.Stave({ x: 10, y: 10, width: 550 }); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' }) + .addModifier(accid('b'), 0) + .addModifier(accid('#'), 1), + f + .StaveNote({ keys: ['e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5', 'd/4'], duration: '2' }) + .addModifier(accid('##'), 6) + .addModifier(accid('n'), 0) + .addModifier(accid('bb'), 1) + .addModifier(accid('b'), 2) + .addModifier(accid('#'), 3) + .addModifier(accid('n'), 4) + .addModifier(accid('bb'), 5), + f + .StaveNote({ keys: ['g/5', 'f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5'], duration: '16' }) + .addModifier(accid('n'), 1) + .addModifier(accid('#'), 2) + .addModifier(accid('#'), 3) + .addModifier(accid('b'), 4) + .addModifier(accid('bb'), 5) + .addModifier(accid('##'), 6) + .addModifier(accid('#'), 0), + f + .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' }) + .addModifier(accid('#'), 0) + .addModifier(accid('##').setAsCautionary(), 1) + .addModifier(accid('#').setAsCautionary(), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb').setAsCautionary(), 4) + .addModifier(accid('b').setAsCautionary(), 5), + ]; + Formatter.SimpleFormat(notes, 10, { paddingBetween: 45 }); + notes.forEach((note, index) => { + Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140); + options.assert.ok(true, 'Full Accidental'); +} +function cautionary(options) { + const staveCount = 12; + const scale = 0.85; + const staveWidth = 840; + let i = 0; + let j = 0; + const f = VexFlowTests.makeFactory(options, staveWidth + 10, 175 * staveCount + 10); + f.getContext().scale(scale, scale); + const accids = Object.keys(Flow.accidentalMap).filter((accid) => accid !== '{' && accid !== '}'); + const mod = Math.round(accids.length / staveCount); + for (i = 0; i < staveCount; ++i) { + const stave = f.Stave({ x: 0, y: 10 + 200 * i, width: staveWidth / scale }); + const score = f.EasyScore(); + const rowMap = []; + for (j = 0; j < mod && j + i * staveCount < accids.length; ++j) { + rowMap.push(accids[j + i * staveCount]); + } + const notes = rowMap.map((accidType) => f + .StaveNote({ keys: ['a/4'], duration: '4', stem_direction: Stem.UP }) + .addModifier(f.Accidental({ type: accidType }), 0)); + const voice = score.voice(notes, { time: rowMap.length + '/4' }); + voice.getTickables().forEach((tickable) => { + tickable + .getModifiers() + .filter((modifier) => modifier.getAttribute('type') === Accidental.CATEGORY) + .forEach((accid) => accid.setAsCautionary()); + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + } + options.assert.ok(true, 'Must successfully render cautionary accidentals'); +} +function specialCases(options) { + const f = VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + f.Stave({ x: 10, y: 10, width: 550 }); + const notes = [ + f + .StaveNote({ keys: ['f/4', 'd/5'], duration: '1' }) + .addModifier(accid('#'), 0) + .addModifier(accid('b'), 1), + f + .StaveNote({ keys: ['c/4', 'g/4'], duration: '2' }) + .addModifier(accid('##'), 0) + .addModifier(accid('##'), 1), + f + .StaveNote({ keys: ['b/3', 'd/4', 'f/4'], duration: '16' }) + .addModifier(accid('#'), 0) + .addModifier(accid('#'), 1) + .addModifier(accid('##'), 2), + f + .StaveNote({ keys: ['g/4', 'a/4', 'c/5', 'e/5'], duration: '16' }) + .addModifier(accid('b'), 0) + .addModifier(accid('b'), 1) + .addModifier(accid('n'), 3), + f + .StaveNote({ keys: ['e/4', 'g/4', 'b/4', 'c/5'], duration: '4' }) + .addModifier(accid('b').setAsCautionary(), 0) + .addModifier(accid('b').setAsCautionary(), 1) + .addModifier(accid('bb'), 2) + .addModifier(accid('b'), 3), + f + .StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5', 'g/5'], duration: '8' }) + .addModifier(accid('bb'), 0) + .addModifier(accid('b').setAsCautionary(), 1) + .addModifier(accid('n').setAsCautionary(), 2) + .addModifier(accid('#'), 3) + .addModifier(accid('n').setAsCautionary(), 4), + ]; + Formatter.SimpleFormat(notes, 0, { paddingBetween: 20 }); + notes.forEach((note, index) => { + Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140); + options.assert.ok(true, 'Full Accidental'); +} +function basicStemDown(options) { + const f = VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + f.Stave({ x: 10, y: 10, width: 550 }); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w', stem_direction: -1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('#'), 1), + f + .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2', stem_direction: -1 }) + .addModifier(accid('##'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('bb'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('#'), 4) + .addModifier(accid('n'), 5) + .addModifier(accid('bb'), 6), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16', stem_direction: -1 }) + .addModifier(accid('n'), 0) + .addModifier(accid('#'), 1) + .addModifier(accid('#'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb'), 4) + .addModifier(accid('##'), 5) + .addModifier(accid('#'), 6), + ]; + Formatter.SimpleFormat(notes, 0, { paddingBetween: 30 }); + notes.forEach((note, noteIndex) => { + Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + noteIndex + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, accidIndex) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + accidIndex + ' has set width'); + }); + }); + f.draw(); + VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140); + options.assert.ok(true, 'Full Accidental'); +} +function multiVoice(options) { + function showNotes(note1, note2, stave, ctx, x) { + const modifierContext = new ModifierContext(); + note1.addToModifierContext(modifierContext); + note2.addToModifierContext(modifierContext); + new TickContext().addTickable(note1).addTickable(note2).preFormat().setX(x); + note1.setContext(ctx).draw(); + note2.setContext(ctx).draw(); + Note.plotMetrics(ctx, note1, 180); + Note.plotMetrics(ctx, note2, 15); + } + const f = VexFlowTests.makeFactory(options, 460, 250); + const accid = makeNewAccid(f); + const stave = f.Stave({ x: 10, y: 45, width: 420 }); + const ctx = f.getContext(); + stave.draw(); + let note1 = f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '2', stem_direction: -1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('#'), 2) + .setStave(stave); + let note2 = f + .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '2', stem_direction: 1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('bb'), 1) + .addModifier(accid('##'), 2) + .setStave(stave); + showNotes(note1, note2, stave, ctx, 60); + note1 = f + .StaveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: '2', stem_direction: -1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('#'), 2) + .setStave(stave); + note2 = f + .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }) + .addModifier(accid('b'), 0) + .setStave(stave); + showNotes(note1, note2, stave, ctx, 150); + note1 = f + .StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '2', stem_direction: -1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('#'), 2) + .setStave(stave); + note2 = f + .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }) + .addModifier(accid('b'), 0) + .setStave(stave); + showNotes(note1, note2, stave, ctx, 250); + VexFlowTests.plotLegendForNoteWidth(ctx, 350, 150); + options.assert.ok(true, 'Full Accidental'); +} +function microtonal(options) { + const f = VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + const ctx = f.getContext(); + f.Stave({ x: 10, y: 10, width: 650 }); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' }) + .addModifier(accid('db'), 0) + .addModifier(accid('d'), 1), + f + .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }) + .addModifier(accid('bbs'), 0) + .addModifier(accid('++'), 1) + .addModifier(accid('+'), 2) + .addModifier(accid('d'), 3) + .addModifier(accid('db'), 4) + .addModifier(accid('+'), 5) + .addModifier(accid('##'), 6), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' }) + .addModifier(accid('++'), 0) + .addModifier(accid('bbs'), 1) + .addModifier(accid('+'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('db'), 4) + .addModifier(accid('##'), 5) + .addModifier(accid('#'), 6), + f + .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' }) + .addModifier(accid('#'), 0) + .addModifier(accid('db').setAsCautionary(), 1) + .addModifier(accid('bbs').setAsCautionary(), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('++').setAsCautionary(), 4) + .addModifier(accid('d').setAsCautionary(), 5), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'd/5', 'g/5'], duration: '16' }) + .addModifier(accid('++-'), 0) + .addModifier(accid('+-'), 1) + .addModifier(accid('bs'), 2) + .addModifier(accid('bss'), 3) + .addModifier(accid('afhf'), 4) + .addModifier(accid('ashs'), 5), + ]; + Formatter.SimpleFormat(notes, 0, { paddingBetween: 35 }); + notes.forEach((note, index) => { + Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140); + options.assert.ok(true, 'Microtonal Accidental'); +} +function microtonal_iranian(options) { + const f = VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + const ctx = f.getContext(); + f.Stave({ x: 10, y: 10, width: 650 }); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' }) + .addModifier(accid('k'), 0) + .addModifier(accid('o'), 1), + f + .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }) + .addModifier(accid('b'), 0) + .addModifier(accid('k'), 1) + .addModifier(accid('n'), 2) + .addModifier(accid('o'), 3) + .addModifier(accid('#'), 4) + .addModifier(accid('bb'), 5) + .addModifier(accid('##'), 6), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' }) + .addModifier(accid('o'), 0) + .addModifier(accid('k'), 1) + .addModifier(accid('n'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb'), 4) + .addModifier(accid('##'), 5) + .addModifier(accid('#'), 6), + f + .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' }) + .addModifier(accid('#'), 0) + .addModifier(accid('o').setAsCautionary(), 1) + .addModifier(accid('n').setAsCautionary(), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('k').setAsCautionary(), 4), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: '16' }) + .addModifier(accid('k'), 0) + .addModifier(accid('k'), 1) + .addModifier(accid('k'), 2) + .addModifier(accid('k'), 3), + ]; + Formatter.SimpleFormat(notes, 0, { paddingBetween: 35 }); + notes.forEach((note, index) => { + Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140); + options.assert.ok(true, 'Microtonal Accidental (Iranian)'); +} +function sagittal(options) { + const f = VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + const ctx = f.getContext(); + f.Stave({ x: 10, y: 10, width: 650 }); + const notes = [ + f + .StaveNote({ keys: ['d/4', 'f/4', 'b/4', 'b/4'], duration: '4' }) + .addModifier(accid('accSagittal11MediumDiesisUp'), 1) + .addModifier(accid('accSagittal5CommaDown'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('accSagittal7CommaDown'), 3), + f + .StaveNote({ keys: ['d/4', 'f/4', 'a/4', 'b/4'], duration: '4' }) + .addModifier(accid('accSagittal35LargeDiesisDown'), 2), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5'], duration: '8' }).addModifier(accid('accSagittal5CommaDown'), 1), + f + .StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'b/4'], duration: '8' }) + .addModifier(accid('b'), 1) + .addModifier(accid('accSagittal7CommaDown'), 1) + .addModifier(accid('accSagittal11LargeDiesisDown'), 3), + f + .StaveNote({ keys: ['d/4', 'f/4', 'b/4', 'b/4'], duration: '4' }) + .addModifier(accid('accSagittal11MediumDiesisUp'), 1) + .addModifier(accid('accSagittal5CommaDown'), 2) + .addModifier(accid('accSagittalFlat7CDown'), 3), + f + .StaveNote({ keys: ['d/4', 'f/4', 'a/4', 'b/4'], duration: '4' }) + .addModifier(accid('accSagittal35LargeDiesisDown'), 2), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5'], duration: '8' }).addModifier(accid('accSagittal5CommaDown'), 1), + f + .StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'b/4'], duration: '8' }) + .addModifier(accid('accSagittalFlat7CDown'), 1) + .addModifier(accid('accSagittal11LargeDiesisDown'), 3), + ]; + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1], + last_indices: [0, 1], + }); + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [3], + last_indices: [3], + options: { + direction: Stem.DOWN, + }, + }); + f.StaveTie({ + from: notes[4], + to: notes[5], + first_indices: [0, 1], + last_indices: [0, 1], + }); + f.StaveTie({ + from: notes[4], + to: notes[5], + first_indices: [3], + last_indices: [3], + options: { + direction: Stem.DOWN, + }, + }); + f.Beam({ notes: notes.slice(2, 4) }); + f.Beam({ notes: notes.slice(6, 8) }); + Formatter.SimpleFormat(notes); + notes.forEach((note, index) => { + Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140); + options.assert.ok(true, 'Sagittal'); +} +function automaticAccidentals0(options) { + const f = VexFlowTests.makeFactory(options, 700, 200); + const stave = f.Stave(); + const notes = [ + { keys: ['c/4', 'c/5'], duration: '4' }, + { keys: ['c#/4', 'c#/5'], duration: '4' }, + { keys: ['c#/4', 'c#/5'], duration: '4' }, + { keys: ['c##/4', 'c##/5'], duration: '4' }, + { keys: ['c##/4', 'c##/5'], duration: '4' }, + { keys: ['c/4', 'c/5'], duration: '4' }, + { keys: ['cn/4', 'cn/5'], duration: '4' }, + { keys: ['cbb/4', 'cbb/5'], duration: '4' }, + { keys: ['cbb/4', 'cbb/5'], duration: '4' }, + { keys: ['cb/4', 'cb/5'], duration: '4' }, + { keys: ['cb/4', 'cb/5'], duration: '4' }, + { keys: ['c/4', 'c/5'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const gracenotes = [{ keys: ['d#/4'], duration: '16', slash: true }].map(f.GraceNote.bind(f)); + notes[0].addModifier(f.GraceNoteGroup({ notes: gracenotes }).beamNotes(), 0); + const voice = f + .Voice() + .setMode(Voice.Mode.SOFT) + .addTickable(new TimeSigNote('12/4').setStave(stave)) + .addTickables(notes); + Accidental.applyAccidentals([voice], 'C'); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentals1(options) { + const f = VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('Ab'); + const notes = [ + { keys: ['c/4'], duration: '4' }, + { keys: ['d/4'], duration: '4' }, + { keys: ['e/4'], duration: '4' }, + { keys: ['f/4'], duration: '4' }, + { keys: ['g/4'], duration: '4' }, + { keys: ['a/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['c/5'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + Accidental.applyAccidentals([voice], 'Ab'); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentals2(options) { + const f = VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('A'); + const notes = [ + { keys: ['a/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['c#/5'], duration: '4' }, + { keys: ['d/5'], duration: '4' }, + { keys: ['e/5'], duration: '4' }, + { keys: ['f#/5'], duration: '4' }, + { keys: ['g#/5'], duration: '4' }, + { keys: ['a/5'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + Accidental.applyAccidentals([voice], 'A'); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentals3(options) { + const f = VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('A'); + const score = f.EasyScore(); + score.set({ time: '8/4' }); + const notes = score.notes('A4/q, B4/q, C#5/q, D5/q, E5/q,F#5/q, G#5/q, A5/q', { stem: 'UP' }); + const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + Accidental.applyAccidentals([voice], 'A'); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsMultiVoiceInline(options) { + const f = VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('Ab'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['d/4'], duration: '4', stem_direction: -1 }, + { keys: ['e/4'], duration: '4', stem_direction: -1 }, + { keys: ['f/4'], duration: '4', stem_direction: -1 }, + { keys: ['g/4'], duration: '4', stem_direction: -1 }, + { keys: ['a/4'], duration: '4', stem_direction: -1 }, + { keys: ['b/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const notes1 = [ + { keys: ['c/5'], duration: '4' }, + { keys: ['d/5'], duration: '4' }, + { keys: ['e/5'], duration: '4' }, + { keys: ['f/5'], duration: '4' }, + { keys: ['g/5'], duration: '4' }, + { keys: ['a/5'], duration: '4' }, + { keys: ['b/5'], duration: '4' }, + { keys: ['c/6'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0); + const voice1 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1); + Accidental.applyAccidentals([voice0, voice1], 'Ab'); + options.assert.equal(hasAccidental(notes0[0]), false); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[2]), true); + options.assert.equal(hasAccidental(notes0[3]), false); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[5]), true); + options.assert.equal(hasAccidental(notes0[6]), true); + options.assert.equal(hasAccidental(notes0[7]), false); + options.assert.equal(hasAccidental(notes1[0]), false); + options.assert.equal(hasAccidental(notes1[1]), true); + options.assert.equal(hasAccidental(notes1[2]), true); + options.assert.equal(hasAccidental(notes1[3]), false); + options.assert.equal(hasAccidental(notes1[4]), false); + options.assert.equal(hasAccidental(notes1[5]), true); + options.assert.equal(hasAccidental(notes1[6]), true); + options.assert.equal(hasAccidental(notes1[7]), false); + new Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsMultiVoiceOffset(options) { + const f = VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('Cb'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['d/4'], duration: '4', stem_direction: -1 }, + { keys: ['e/4'], duration: '4', stem_direction: -1 }, + { keys: ['f/4'], duration: '4', stem_direction: -1 }, + { keys: ['g/4'], duration: '4', stem_direction: -1 }, + { keys: ['a/4'], duration: '4', stem_direction: -1 }, + { keys: ['b/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const notes1 = [ + { keys: ['c/5'], duration: '8' }, + { keys: ['c/5'], duration: '4' }, + { keys: ['d/5'], duration: '4' }, + { keys: ['e/5'], duration: '4' }, + { keys: ['f/5'], duration: '4' }, + { keys: ['g/5'], duration: '4' }, + { keys: ['a/5'], duration: '4' }, + { keys: ['b/5'], duration: '4' }, + { keys: ['c/6'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0); + const voice1 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1); + Accidental.applyAccidentals([voice0, voice1], 'Cb'); + options.assert.equal(hasAccidental(notes0[0]), true); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[2]), true); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[4]), true); + options.assert.equal(hasAccidental(notes0[5]), true); + options.assert.equal(hasAccidental(notes0[6]), true); + options.assert.equal(hasAccidental(notes0[7]), false, 'Natural Remembered'); + options.assert.equal(hasAccidental(notes1[0]), true); + options.assert.equal(hasAccidental(notes1[1]), false); + options.assert.equal(hasAccidental(notes1[2]), true); + options.assert.equal(hasAccidental(notes1[3]), true); + options.assert.equal(hasAccidental(notes1[4]), true); + options.assert.equal(hasAccidental(notes1[5]), true); + options.assert.equal(hasAccidental(notes1[6]), true); + options.assert.equal(hasAccidental(notes1[7]), true); + new Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsCornerCases1(options) { + const f = VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('C'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0); + Accidental.applyAccidentals([voice0], 'C'); + options.assert.equal(hasAccidental(notes0[0]), false); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[2]), false); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[5]), true); + options.assert.equal(hasAccidental(notes0[6]), false); + options.assert.equal(hasAccidental(notes0[7]), true); + options.assert.equal(hasAccidental(notes0[8]), false); + new Formatter().joinVoices([voice0]).formatToStave([voice0], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsCornerCases2(options) { + const f = VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('C'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/5'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/5'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0); + Accidental.applyAccidentals([voice0], 'C'); + options.assert.equal(hasAccidental(notes0[0]), false); + options.assert.equal(hasAccidental(notes0[2]), true); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[6]), true); + options.assert.equal(hasAccidental(notes0[8]), false); + options.assert.equal(hasAccidental(notes0[10]), true); + options.assert.equal(hasAccidental(notes0[12]), false); + options.assert.equal(hasAccidental(notes0[14]), true); + options.assert.equal(hasAccidental(notes0[16]), false); + options.assert.equal(hasAccidental(notes0[1]), false); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[5]), false); + options.assert.equal(hasAccidental(notes0[7]), true); + options.assert.equal(hasAccidental(notes0[9]), false); + options.assert.equal(hasAccidental(notes0[11]), true); + options.assert.equal(hasAccidental(notes0[13]), false); + options.assert.equal(hasAccidental(notes0[15]), true); + options.assert.equal(hasAccidental(notes0[17]), false); + new Formatter().joinVoices([voice0]).formatToStave([voice0], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsCornerCases3(options) { + const f = VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('C#'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0); + Accidental.applyAccidentals([voice0], 'C#'); + options.assert.equal(hasAccidental(notes0[0]), true); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[2]), false); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[5]), true); + options.assert.equal(hasAccidental(notes0[6]), false); + options.assert.equal(hasAccidental(notes0[7]), true); + options.assert.equal(hasAccidental(notes0[8]), false); + new Formatter().joinVoices([voice0]).formatToStave([voice0], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsCornerCases4(options) { + const f = VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('C#'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/5'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/5'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0); + Accidental.applyAccidentals([voice0], 'C#'); + options.assert.equal(hasAccidental(notes0[0]), true); + options.assert.equal(hasAccidental(notes0[2]), true); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[6]), true); + options.assert.equal(hasAccidental(notes0[8]), false); + options.assert.equal(hasAccidental(notes0[10]), true); + options.assert.equal(hasAccidental(notes0[12]), false); + options.assert.equal(hasAccidental(notes0[14]), true); + options.assert.equal(hasAccidental(notes0[16]), false); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[5]), false); + options.assert.equal(hasAccidental(notes0[7]), true); + options.assert.equal(hasAccidental(notes0[9]), false); + options.assert.equal(hasAccidental(notes0[11]), true); + options.assert.equal(hasAccidental(notes0[13]), false); + options.assert.equal(hasAccidental(notes0[15]), true); + options.assert.equal(hasAccidental(notes0[17]), false); + new Formatter().joinVoices([voice0]).formatToStave([voice0], stave); + f.draw(); + options.assert.ok(true); +} +function factoryAPI(options) { + const f = VexFlowTests.makeFactory(options, 700, 240); + f.Stave({ x: 10, y: 10, width: 550 }); + const accid = makeNewAccid(f); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }) + .addModifier(accid('b'), 0) + .addModifier(accid('#'), 1), + f + .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: 'h' }) + .addModifier(accid('##'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('bb'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('#'), 4) + .addModifier(accid('n'), 5) + .addModifier(accid('bb'), 6), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' }) + .addModifier(accid('n'), 0) + .addModifier(accid('#'), 1) + .addModifier(accid('#'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb'), 4) + .addModifier(accid('##'), 5) + .addModifier(accid('#'), 6), + f + .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: 'w' }) + .addModifier(accid('#'), 0) + .addModifier(accid('##').setAsCautionary(), 1) + .addModifier(accid('#').setAsCautionary(), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb').setAsCautionary(), 4) + .addModifier(accid('b').setAsCautionary(), 5), + ]; + Formatter.SimpleFormat(notes); + notes.forEach((n, i) => { + options.assert.ok(n.getModifiersByType('Accidental').length > 0, 'Note ' + i + ' has accidentals'); + n.getModifiersByType('Accidental').forEach((accid, i) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + i + ' has set width'); + }); + }); + f.draw(); + options.assert.ok(true, 'Factory API'); +} +VexFlowTests.register(AccidentalTests); +export { AccidentalTests }; diff --git a/build/esm/tests/annotation_tests.js b/build/esm/tests/annotation_tests.js new file mode 100644 index 0000000000..a7d63064ed --- /dev/null +++ b/build/esm/tests/annotation_tests.js @@ -0,0 +1,372 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Annotation, AnnotationVerticalJustify } from '../src/annotation.js'; +import { Articulation } from '../src/articulation.js'; +import { Beam } from '../src/beam.js'; +import { Bend } from '../src/bend.js'; +import { Flow } from '../src/flow.js'; +import { Font, FontStyle, FontWeight } from '../src/font.js'; +import { Formatter } from '../src/formatter.js'; +import { ModifierPosition } from '../src/modifier.js'; +import { Registry } from '../src/registry.js'; +import { Stave } from '../src/stave.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Stem } from '../src/stem.js'; +import { TabNote } from '../src/tabnote.js'; +import { TabStave } from '../src/tabstave.js'; +import { Vibrato } from '../src/vibrato.js'; +import { Voice } from '../src/voice.js'; +const AnnotationTests = { + Start() { + QUnit.module('Annotation'); + const run = VexFlowTests.runTests; + run('Placement', placement); + run('Lyrics', lyrics); + run('Simple Annotation', simple); + run('Styled Annotation', styling); + run('Standard Notation Annotation', standard); + run('Harmonics', harmonic); + run('Fingerpicking', picking); + run('Bottom Annotation', bottom); + run('Bottom Annotations with Beams', bottomWithBeam); + run('Test Justification Annotation Stem Up', justificationStemUp); + run('Test Justification Annotation Stem Down', justificationStemDown); + run('TabNote Annotations', tabNotes); + }, +}; +const FONT_SIZE = VexFlowTests.Font.size; +const tabNote = (noteStruct) => new TabNote(noteStruct); +const staveNote = (noteStruct) => new StaveNote(noteStruct); +function lyrics(options) { + let fontSize = FONT_SIZE; + let x = 10; + let width = 170; + let ratio = 1; + const registry = new Registry(); + Registry.enableDefaultRegistry(registry); + const f = VexFlowTests.makeFactory(options, 750, 260); + for (let i = 0; i < 3; ++i) { + const score = f.EasyScore(); + score.set({ time: '3/4' }); + const system = f.System({ width, x }); + system.addStave({ + voices: [ + score.voice(score.notes('(C4 F4)/2[id="n0"]').concat(score.beam(score.notes('(C4 A4)/8[id="n1"], (C4 A4)/8[id="n2"]')))), + ], + }); + ['hand,', 'and', 'me', 'pears', 'lead', 'the'].forEach((text, ix) => { + const verse = Math.floor(ix / 3); + const noteGroupID = 'n' + (ix % 3); + const noteGroup = registry.getElementById(noteGroupID); + const lyricsAnnotation = f.Annotation({ text }).setFont('Roboto Slab', fontSize); + lyricsAnnotation.setPosition(ModifierPosition.BELOW); + noteGroup.addModifier(lyricsAnnotation, verse); + }); + system.addStave({ + voices: [score.voice(score.notes('(F4 D5)/2').concat(score.beam(score.notes('(F4 F5)/8, (F4 F5)/8'))))], + }); + f.draw(); + ratio = (fontSize + 2) / fontSize; + width = width * ratio; + x = x + width; + fontSize = fontSize + 2; + } + options.assert.ok(true); +} +function simple(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial, sans-serif'; + const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }).addModifier(new Annotation('T'), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'h', + }).addModifier(new Bend('Full').setTap('T'), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Simple Annotation'); +} +function standard(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + const stave = new Stave(10, 10, 450).addClef('treble').setContext(ctx).draw(); + const annotation = (text) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE, 'normal', 'italic'); + const notes = [ + staveNote({ keys: ['c/4', 'e/4'], duration: 'h' }).addModifier(annotation('quiet'), 0), + staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'h' }).addModifier(annotation('Allegro'), 2), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Standard Notation Annotation'); +} +function styling(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + const stave = new Stave(10, 10, 450).addClef('treble').setContext(ctx).draw(); + const annotation = (text, style) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE, 'normal', 'italic').setStyle(style); + const notes = [ + staveNote({ keys: ['c/4', 'e/4'], duration: 'h' }).addModifier(annotation('quiet', { fillStyle: '#0F0' }), 0), + staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'h' }).addModifier(annotation('Allegro', { fillStyle: '#00F' }), 2), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Standard Notation Annotation'); +} +function harmonic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 12 }, + { str: 3, fret: 12 }, + ], + duration: 'h', + }).addModifier(new Annotation('Harm.'), 0), + tabNote({ + positions: [{ str: 2, fret: 9 }], + duration: 'h', + }) + .addModifier(new Annotation('(8va)').setFont(Font.SERIF, FONT_SIZE, FontWeight.NORMAL, FontStyle.ITALIC), 0) + .addModifier(new Annotation('A.H.'), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Simple Annotation'); +} +function picking(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.setFont(Font.SANS_SERIF, FONT_SIZE); + const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const annotation = (text) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE, FontWeight.NORMAL, FontStyle.ITALIC); + const notes = [ + tabNote({ + positions: [ + { str: 1, fret: 0 }, + { str: 2, fret: 1 }, + { str: 3, fret: 2 }, + { str: 4, fret: 2 }, + { str: 5, fret: 0 }, + ], + duration: 'h', + }).addModifier(new Vibrato().setVibratoWidth(40), 0), + tabNote({ + positions: [{ str: 6, fret: 9 }], + duration: '8', + }).addModifier(annotation('p').setVerticalJustification(AnnotationVerticalJustify.TOP), 0), + tabNote({ + positions: [{ str: 3, fret: 9 }], + duration: '8', + }).addModifier(annotation('i').setVerticalJustification(AnnotationVerticalJustify.TOP), 0), + tabNote({ + positions: [{ str: 2, fret: 9 }], + duration: '8', + }).addModifier(annotation('m').setVerticalJustification(AnnotationVerticalJustify.TOP), 0), + tabNote({ + positions: [{ str: 1, fret: 9 }], + duration: '8', + }).addModifier(annotation('a').setVerticalJustification(AnnotationVerticalJustify.TOP), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Fingerpicking'); +} +function placement(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 750, 300); + const stave = new Stave(10, 50, 750).addClef('treble').setContext(ctx).draw(); + const annotation = (text, fontSize, vj) => new Annotation(text).setFont(Font.SERIF, fontSize).setVerticalJustification(vj); + const notes = [ + staveNote({ keys: ['e/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 10, AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 10, AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['c/5'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 10, AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(annotation('v1', 14, AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 14, AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('am').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 20, AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(annotation('v1', 11, AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 11, AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(annotation('v1', 11, AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 20, AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(annotation('v1', 12, AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 12, AnnotationVerticalJustify.BOTTOM), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) + .addModifier(annotation('v1', 11, AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 20, AnnotationVerticalJustify.BOTTOM), 0), + staveNote({ keys: ['f/5'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('am').setPosition(ModifierPosition.BELOW), 0) + .addModifier(annotation('v1', 10, AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 20, AnnotationVerticalJustify.BOTTOM), 0), + staveNote({ keys: ['f/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(annotation('v1', 10, AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 20, AnnotationVerticalJustify.BOTTOM), 0), + staveNote({ keys: ['f/5'], duration: 'w' }) + .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0) + .addModifier(annotation('v1', 11, AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 16, AnnotationVerticalJustify.BOTTOM), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, ' Annotation Placement'); +} +function bottom(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + const stave = new Stave(10, 10, 300).addClef('treble').setContext(ctx).draw(); + const annotation = (text) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE).setVerticalJustification(Annotation.VerticalJustify.BOTTOM); + const notes = [ + staveNote({ keys: ['f/4'], duration: 'w' }).addModifier(annotation('F'), 0), + staveNote({ keys: ['a/4'], duration: 'w' }).addModifier(annotation('A'), 0), + staveNote({ keys: ['c/5'], duration: 'w' }).addModifier(annotation('C'), 0), + staveNote({ keys: ['e/5'], duration: 'w' }).addModifier(annotation('E'), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Bottom Annotation'); +} +function bottomWithBeam(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + const stave = new Stave(10, 10, 300).addClef('treble').setContext(ctx).draw(); + const notes = [ + new StaveNote({ keys: ['a/3'], duration: '8' }).addModifier(new Annotation('good').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)), + new StaveNote({ keys: ['g/3'], duration: '8' }).addModifier(new Annotation('even').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)), + new StaveNote({ keys: ['c/4'], duration: '8' }).addModifier(new Annotation('under').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)), + new StaveNote({ keys: ['d/4'], duration: '8' }).addModifier(new Annotation('beam').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)), + ]; + const beam = new Beam(notes.slice(1)); + Formatter.FormatAndDraw(ctx, stave, notes); + beam.setContext(ctx).draw(); + options.assert.ok(true, 'Bottom Annotation with Beams'); +} +function justificationStemUp(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 650, 950); + ctx.scale(1.5, 1.5); + const annotation = (text, hJustification, vJustification) => new Annotation(text) + .setFont(Font.SANS_SERIF, FONT_SIZE) + .setJustification(hJustification) + .setVerticalJustification(vJustification); + for (let v = 1; v <= 4; ++v) { + const stave = new Stave(10, (v - 1) * 150 + 40, 400).addClef('treble').setContext(ctx).draw(); + const notes = [ + staveNote({ keys: ['c/3'], duration: 'q' }).addModifier(annotation('Text', 1, v), 0), + staveNote({ keys: ['c/4'], duration: 'q' }).addModifier(annotation('Text', 2, v), 0), + staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'q' }).addModifier(annotation('Text', 3, v), 0), + staveNote({ keys: ['c/6'], duration: 'q' }).addModifier(annotation('Text', 4, v), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + } + options.assert.ok(true, 'Test Justification Annotation'); +} +function justificationStemDown(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 650, 1000); + ctx.scale(1.5, 1.5); + const annotation = (text, hJustification, vJustification) => new Annotation(text) + .setFont(Font.SANS_SERIF, FONT_SIZE) + .setJustification(hJustification) + .setVerticalJustification(vJustification); + for (let v = 1; v <= 4; ++v) { + const stave = new Stave(10, (v - 1) * 150 + 40, 400).addClef('treble').setContext(ctx).draw(); + const notes = [ + staveNote({ keys: ['c/3'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 1, v), 0), + staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 2, v), 0), + staveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 3, v), 0), + staveNote({ keys: ['c/6'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 4, v), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + } + options.assert.ok(true, 'Test Justification Annotation'); +} +function tabNotes(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial, sans-serif'; + const stave = new TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '8', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }, + ]; + const notes1 = specs.map((noteSpec) => { + const note = new TabNote(noteSpec); + note.render_options.draw_stem = true; + return note; + }); + const notes2 = specs.map((noteSpec) => { + const note = new TabNote(noteSpec); + note.render_options.draw_stem = true; + note.setStemDirection(-1); + return note; + }); + const notes3 = specs.map((noteSpec) => new TabNote(noteSpec)); + notes1[0].addModifier(new Annotation('Text').setJustification(1).setVerticalJustification(1)); + notes1[1].addModifier(new Annotation('Text').setJustification(2).setVerticalJustification(2)); + notes1[2].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(3)); + notes1[3].addModifier(new Annotation('Text').setJustification(4).setVerticalJustification(4)); + notes2[0].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(1)); + notes2[1].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(2)); + notes2[2].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(3)); + notes2[3].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(4)); + notes3[0].addModifier(new Annotation('Text').setVerticalJustification(1)); + notes3[1].addModifier(new Annotation('Text').setVerticalJustification(2)); + notes3[2].addModifier(new Annotation('Text').setVerticalJustification(3)); + notes3[3].addModifier(new Annotation('Text').setVerticalJustification(4)); + const voice = new Voice(Flow.TIME4_4).setMode(Voice.Mode.SOFT); + voice.addTickables(notes1); + voice.addTickables(notes2); + voice.addTickables(notes3); + new Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave }); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +VexFlowTests.register(AnnotationTests); +export { AnnotationTests }; diff --git a/build/esm/tests/articulation_tests.js b/build/esm/tests/articulation_tests.js new file mode 100644 index 0000000000..1175fdc0de --- /dev/null +++ b/build/esm/tests/articulation_tests.js @@ -0,0 +1,424 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Articulation } from '../src/articulation.js'; +import { Beam } from '../src/beam.js'; +import { Flow } from '../src/flow.js'; +import { Font } from '../src/font.js'; +import { Formatter } from '../src/formatter.js'; +import { ModifierPosition } from '../src/modifier.js'; +import { Stave } from '../src/stave.js'; +import { Barline } from '../src/stavebarline.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Stem } from '../src/stem.js'; +import { TabNote } from '../src/tabnote.js'; +import { TabStave } from '../src/tabstave.js'; +import { Voice } from '../src/voice.js'; +const ArticulationTests = { + Start() { + QUnit.module('Articulation'); + const run = VexFlowTests.runTests; + run('Articulation - Vertical Placement', verticalPlacement); + run('Articulation - Vertical Placement (Glyph codes)', verticalPlacement2); + run('Articulation - Staccato/Staccatissimo', drawArticulations, { sym1: 'a.', sym2: 'av' }); + run('Articulation - Accent/Tenuto', drawArticulations, { sym1: 'a>', sym2: 'a-' }); + run('Articulation - Marcato/L.H. Pizzicato', drawArticulations, { sym1: 'a^', sym2: 'a+' }); + run('Articulation - Snap Pizzicato/Fermata', drawArticulations, { sym1: 'ao', sym2: 'ao' }); + run('Articulation - Up-stroke/Down-Stroke', drawArticulations, { sym1: 'a|', sym2: 'am' }); + run('Articulation - Fermata Above/Below', drawFermata, { sym1: 'a@a', sym2: 'a@u' }); + run('Articulation - Fermata Short Above/Below', drawFermata, { sym1: 'a@as', sym2: 'a@us' }); + run('Articulation - Fermata Long Above/Below', drawFermata, { sym1: 'a@al', sym2: 'a@ul' }); + run('Articulation - Fermata Very Long Above/Below', drawFermata, { sym1: 'a@avl', sym2: 'a@uvl' }); + run('Articulation - Inline/Multiple', drawArticulations2, { sym1: 'a.', sym2: 'a.' }); + run('TabNote Articulation', tabNotes, { sym1: 'a.', sym2: 'a.' }); + }, +}; +function drawArticulations(options) { + const sym1 = options.params.sym1; + const sym2 = options.params.sym2; + const width = 125 - Stave.defaultPadding; + const f = VexFlowTests.makeFactory(options, 675, 195); + const ctx = f.getContext(); + options.assert.expect(0); + let x = 10; + const y = 30; + const score = f.EasyScore(); + const formatAndDrawToWidth = (x, y, width, notes, barline) => { + const voices = [score.voice(notes, { time: '4/4' })]; + const formatter = f.Formatter(); + voices.forEach((v) => formatter.joinVoices([v])); + const nwidth = Math.max(formatter.preCalculateMinTotalWidth(voices), width); + formatter.format(voices, nwidth); + const stave = f + .Stave({ x, y, width: nwidth + Stave.defaultPadding }) + .setEndBarType(barline) + .setContext(ctx) + .draw(); + voices.forEach((voice) => voice.draw(ctx, stave)); + return stave.getWidth(); + }; + const notesBar1 = [ + f.StaveNote({ keys: ['a/3'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), + ]; + notesBar1[0].addModifier(new Articulation(sym1).setPosition(4), 0); + notesBar1[1].addModifier(new Articulation(sym1).setPosition(4), 0); + notesBar1[2].addModifier(new Articulation(sym1).setPosition(3), 0); + notesBar1[3].addModifier(new Articulation(sym1).setPosition(3), 0); + x += formatAndDrawToWidth(x, y, width, notesBar1, Barline.type.NONE); + const notesBar2 = [ + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + ]; + notesBar2[0].addModifier(new Articulation(sym1).setPosition(3), 0); + notesBar2[1].addModifier(new Articulation(sym1).setPosition(3), 0); + notesBar2[2].addModifier(new Articulation(sym1).setPosition(4), 0); + notesBar2[3].addModifier(new Articulation(sym1).setPosition(4), 0); + x += formatAndDrawToWidth(x, y, width, notesBar2, Barline.type.DOUBLE); + const notesBar3 = [ + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), + ]; + notesBar3[0].addModifier(new Articulation(sym2).setPosition(4), 0); + notesBar3[1].addModifier(new Articulation(sym2).setPosition(4), 0); + notesBar3[2].addModifier(new Articulation(sym2).setPosition(3), 0); + notesBar3[3].addModifier(new Articulation(sym2).setPosition(3), 0); + x += formatAndDrawToWidth(x, y, width, notesBar3, Barline.type.NONE); + const notesBar4 = [ + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + ]; + notesBar4[0].addModifier(new Articulation(sym2).setPosition(3), 0); + notesBar4[1].addModifier(new Articulation(sym2).setPosition(3), 0); + notesBar4[2].addModifier(new Articulation(sym2).setPosition(4), 0); + notesBar4[3].addModifier(new Articulation(sym2).setPosition(4), 0); + formatAndDrawToWidth(x, y, width, notesBar4, Barline.type.END); +} +function drawFermata(options) { + const sym1 = options.params.sym1; + const sym2 = options.params.sym2; + const f = VexFlowTests.makeFactory(options, 400, 195); + const ctx = f.getContext(); + const score = f.EasyScore(); + const width = 150 - Stave.defaultPadding; + let x = 50; + const y = 30; + const formatAndDrawToWidth = (x, y, width, notes, barline) => { + const voices = [score.voice(notes, { time: '4/4' })]; + const formatter = f.Formatter(); + voices.forEach((v) => formatter.joinVoices([v])); + const nwidth = Math.max(formatter.preCalculateMinTotalWidth(voices), width); + formatter.format(voices, nwidth); + const stave = f + .Stave({ x, y, width: nwidth + Stave.defaultPadding }) + .setEndBarType(barline) + .setContext(ctx) + .draw(); + voices.forEach((voice) => voice.draw(ctx, stave)); + return stave.getWidth(); + }; + options.assert.expect(0); + const notesBar1 = [ + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: -1 }), + ]; + notesBar1[0].addModifier(new Articulation(sym1).setPosition(3), 0); + notesBar1[1].addModifier(new Articulation(sym1).setPosition(3), 0); + notesBar1[2].addModifier(new Articulation(sym2).setPosition(4), 0); + notesBar1[3].addModifier(new Articulation(sym2).setPosition(4), 0); + x += formatAndDrawToWidth(x, y, width, notesBar1, Barline.type.NONE); + const notesBar2 = [ + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + ]; + notesBar2[0].addModifier(new Articulation(sym1).setPosition(3), 0); + notesBar2[1].addModifier(new Articulation(sym1).setPosition(3), 0); + notesBar2[2].addModifier(new Articulation(sym2).setPosition(4), 0); + notesBar2[3].addModifier(new Articulation(sym2).setPosition(4), 0); + formatAndDrawToWidth(x, y, width, notesBar2, Barline.type.DOUBLE); +} +function verticalPlacement(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 750, 300); + const staveNote = (noteStruct) => new StaveNote(noteStruct); + const stave = new Stave(10, 50, 750).addClef('treble').setContext(ctx).draw(); + const notes = [ + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0), + staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0), + staveNote({ keys: ['c/5'], duration: 'q' }) + .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0), + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0), + staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0), + staveNote({ keys: ['c/5'], duration: 'q' }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0), + staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0), + staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, ' Annotation Placement'); +} +function verticalPlacement2(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 750, 300); + const staveNote = (noteStruct) => new StaveNote(noteStruct); + const stave = new Stave(10, 50, 750).addClef('treble').setContext(ctx).draw(); + const notes = [ + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(new Articulation('fermataBelow'), 0) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('articTenutoBelow'), 0), + staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('fermataShortBelow'), 0) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('articTenutoBelow'), 0), + staveNote({ keys: ['c/5'], duration: 'q' }) + .addModifier(new Articulation('fermataLongBelow'), 0) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('articTenutoBelow'), 0), + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('articTenutoBelow'), 0) + .addModifier(new Articulation('fermataVeryShortBelow'), 0), + staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('articTenutoBelow'), 0) + .addModifier(new Articulation('fermataVeryLongBelow'), 0), + staveNote({ keys: ['c/5'], duration: 'q' }) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW).setBetweenLines(), 0) + .addModifier(new Articulation('articTenutoBelow').setBetweenLines(), 0) + .addModifier(new Articulation('fermataBelow'), 0), + staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('fermataAbove'), 0) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('articTenutoAbove'), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new Articulation('fermataShortAbove'), 0) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('articTenutoAbove'), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('fermataLongAbove'), 0) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('articTenutoAbove'), 0), + staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('articTenutoAbove'), 0) + .addModifier(new Articulation('fermataVeryShortAbove'), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('articTenutoAbove'), 0) + .addModifier(new Articulation('fermataVeryLongAbove'), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE).setBetweenLines(), 0) + .addModifier(new Articulation('articTenutoAbove').setBetweenLines(), 0) + .addModifier(new Articulation('fermataAbove'), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, ' Annotation Placement (Glyph codes)'); +} +function drawArticulations2(options) { + options.assert.expect(0); + const scale = 0.8; + const f = VexFlowTests.makeFactory(options, 1500, 195); + const ctx = f.getContext(); + ctx.scale(scale, scale); + const stave1 = new Stave(10, 50, 500).setContext(ctx).draw(); + const notesBar1 = [ + f.StaveNote({ keys: ['c/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['d/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['e/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['g/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['b/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['d/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['e/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['f/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['g/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['b/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['c/6'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['d/6'], duration: '16', stem_direction: -1 }), + ]; + let i; + for (i = 0; i < 16; i++) { + notesBar1[i].addModifier(new Articulation('a.').setPosition(4), 0); + notesBar1[i].addModifier(new Articulation('a>').setPosition(4), 0); + if (i === 15) { + notesBar1[i].addModifier(new Articulation('a@u').setPosition(4), 0); + } + } + const beam1 = new Beam(notesBar1.slice(0, 8)); + const beam2 = new Beam(notesBar1.slice(8, 16)); + Formatter.FormatAndDraw(ctx, stave1, notesBar1); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + const stave2 = new Stave(510, 50, 500).setContext(ctx).draw(); + const notesBar2 = [ + f.StaveNote({ keys: ['f/3'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['g/3'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['a/3'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['b/3'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['c/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['d/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['e/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['g/4'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['a/4'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['b/4'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['d/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['e/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['f/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['g/5'], duration: '16', stem_direction: -1 }), + ]; + for (i = 0; i < 16; i++) { + notesBar2[i].addModifier(new Articulation('a-').setPosition(3), 0); + notesBar2[i].addModifier(new Articulation('a^').setPosition(3), 0); + if (i === 15) { + notesBar2[i].addModifier(new Articulation('a@u').setPosition(4), 0); + } + } + const beam3 = new Beam(notesBar2.slice(0, 8)); + const beam4 = new Beam(notesBar2.slice(8, 16)); + Formatter.FormatAndDraw(ctx, stave2, notesBar2); + beam3.setContext(ctx).draw(); + beam4.setContext(ctx).draw(); + const stave3 = new Stave(1010, 50, 100).setContext(ctx).draw(); + const notesBar3 = [f.StaveNote({ keys: ['c/4'], duration: 'w', stem_direction: 1 })]; + notesBar3[0].addModifier(new Articulation('a-').setPosition(3), 0); + notesBar3[0].addModifier(new Articulation('a>').setPosition(3), 0); + notesBar3[0].addModifier(new Articulation('a@a').setPosition(3), 0); + Formatter.FormatAndDraw(ctx, stave3, notesBar3); + const stave4 = new Stave(1110, 50, 250).setContext(ctx).draw(); + const notesBar4 = [ + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + ]; + for (i = 0; i < 4; i++) { + let position1 = 3; + if (i > 1) { + position1 = 4; + } + notesBar4[i].addModifier(new Articulation('a-').setPosition(position1), 0); + } + Formatter.FormatAndDraw(ctx, stave4, notesBar4); +} +function tabNotes(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt ' + Font.SANS_SERIF; + const stave = new TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '8', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }, + ]; + const notes1 = specs.map((noteSpec) => { + const tabNote = new TabNote(noteSpec); + tabNote.render_options.draw_stem = true; + return tabNote; + }); + const notes2 = specs.map((noteSpec) => { + const tabNote = new TabNote(noteSpec); + tabNote.render_options.draw_stem = true; + tabNote.setStemDirection(-1); + return tabNote; + }); + const notes3 = specs.map((noteSpec) => new TabNote(noteSpec)); + notes1[0].addModifier(new Articulation('a>').setPosition(3), 0); + notes1[1].addModifier(new Articulation('a>').setPosition(4), 0); + notes1[2].addModifier(new Articulation('a.').setPosition(3), 0); + notes1[3].addModifier(new Articulation('a.').setPosition(4), 0); + notes2[0].addModifier(new Articulation('a>').setPosition(3), 0); + notes2[1].addModifier(new Articulation('a>').setPosition(4), 0); + notes2[2].addModifier(new Articulation('a.').setPosition(3), 0); + notes2[3].addModifier(new Articulation('a.').setPosition(4), 0); + notes3[0].addModifier(new Articulation('a>').setPosition(3), 0); + notes3[1].addModifier(new Articulation('a>').setPosition(4), 0); + notes3[2].addModifier(new Articulation('a.').setPosition(3), 0); + notes3[3].addModifier(new Articulation('a.').setPosition(4), 0); + const voice = new Voice(Flow.TIME4_4).setMode(Voice.Mode.SOFT); + voice.addTickables(notes1); + voice.addTickables(notes2); + voice.addTickables(notes3); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +VexFlowTests.register(ArticulationTests); +export { ArticulationTests }; diff --git a/build/esm/tests/auto_beam_formatting_tests.js b/build/esm/tests/auto_beam_formatting_tests.js new file mode 100644 index 0000000000..2bf452d46b --- /dev/null +++ b/build/esm/tests/auto_beam_formatting_tests.js @@ -0,0 +1,551 @@ +import { concat, VexFlowTests } from './vexflow_test_helpers.js'; +import { Beam } from '../src/beam.js'; +import { Fraction } from '../src/fraction.js'; +import { Stave } from '../src/stave.js'; +import { Stem } from '../src/stem.js'; +const AutoBeamFormattingTests = { + Start() { + QUnit.module('Auto-Beaming'); + const run = VexFlowTests.runTests; + run('Simple Auto Beaming', simpleAuto); + run('Auto Beaming With Overflow Group', simpleAutoWithOverflowGroup); + run('Even Group Stem Directions', evenGroupStemDirections); + run('Odd Group Stem Directions', oddGroupStemDirections); + run('Odd Beam Groups Auto Beaming', oddBeamGroups); + run('More Simple Auto Beaming 0', moreSimple0); + run('More Simple Auto Beaming 1', moreSimple1); + run('Beam Across All Rests', beamAcrossAllRests); + run('Beam Across All Rests with Stemlets', beamAcrossAllRestsWithStemlets); + run('Break Beams on Middle Rests Only', beamAcrossMiddleRests); + run('Break Beams on Rest', breakBeamsOnRests); + run('Maintain Stem Directions', maintainStemDirections); + run('Maintain Stem Directions - Beam Over Rests', maintainStemDirectionsBeamAcrossRests); + run('Beat group with unbeamable note - 2/2', groupWithUnbeamableNote); + run('Offset beat grouping - 6/8 ', groupWithUnbeamableNote1); + run('Odd Time - Guessing Default Beam Groups', autoOddBeamGroups); + run('Custom Beam Groups', customBeamGroups); + run('Simple Tuplet Auto Beaming', simpleTuplets); + run('More Simple Tuplet Auto Beaming', moreSimpleTuplets); + run('More Automatic Beaming', moreBeaming); + run('Automatic Beaming 4/4 with 3, 3, 2 Pattern', beamingWithSeveralGroups1); + run('Automatic Beaming 4/4 with 3, 3, 2 Pattern and Overflow', beamingWithSeveralGroupsOverflow); + run('Automatic Beaming 8/4 with 3, 2, 3 Pattern and 2 Overflows', beamingWithSeveralGroupsOverflow2); + run('Automatic Beaming 8/4 with 3, 2, 3 Pattern and 3 Overflows', beamingWithSeveralGroupsOverflow3); + run('Duration-Based Secondary Beam Breaks', secondaryBreaks1); + run('Duration-Based Secondary Beam Breaks 2', secondaryBreaks2); + run('Flat Beams Up', flatBeamsUp); + run('Flat Beams Down', flatBeamsDown); + run('Flat Beams Mixed Direction', flatBeamsMixed); + run('Flat Beams Up (uniform)', flatBeamsUpUniform); + run('Flat Beams Down (uniform)', flatBeamsDownUniform); + run('Flat Beams Up Bounds', flatBeamsUpBounds); + run('Flat Beams Down Bounds', flatBeamsDownBounds); + }, +}; +function simpleAuto(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('f5/8, e5, d5, c5/16, c5, d5/8, e5, f5, f5/32, f5, f5, f5'), { time: '4/4' }); + const beams = Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beaming Applicator Test'); +} +function simpleAutoWithOverflowGroup(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('f5/4., e5/8, d5/8, d5/16, c5/16, c5/16, c5/16, f5/16, f5/32, f5/32'), { + time: '4/4', + }); + const beams = Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beaming Applicator Test'); +} +function evenGroupStemDirections(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('a4/8, b4, g4, c5, f4, d5, e4, e5, b4, b4, g4, d5'), { time: '6/4' }); + const beams = Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.equal(beams[0].getStemDirection(), Stem.UP); + options.assert.equal(beams[1].getStemDirection(), Stem.UP); + options.assert.equal(beams[2].getStemDirection(), Stem.UP); + options.assert.equal(beams[3].getStemDirection(), Stem.UP); + options.assert.equal(beams[4].getStemDirection(), Stem.DOWN); + options.assert.equal(beams[5].getStemDirection(), Stem.DOWN); + options.assert.ok(true, 'Auto Beaming Applicator Test'); +} +function oddGroupStemDirections(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('g4/8, b4, d5, c5, f4, d5, e4, g5, g4, b4, g4, d5, a4, c5, a4'), { + time: '15/8', + }); + const groups = [new Fraction(3, 8)]; + const beams = Beam.applyAndGetBeams(voice, undefined, groups); + options.assert.equal(beams[0].getStemDirection(), Stem.DOWN, 'Notes are equidistant from middle line'); + options.assert.equal(beams[1].getStemDirection(), Stem.DOWN); + options.assert.equal(beams[2].getStemDirection(), Stem.UP); + options.assert.equal(beams[3].getStemDirection(), Stem.DOWN, 'Notes are equidistant from middle line'); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beaming Applicator Test'); +} +function oddBeamGroups(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('f5, e5, d5, c5, c5, d5, e5, f5, f5, f4, f3, f5/16, f5'), { time: '6/4' }); + const groups = [new Fraction(2, 8), new Fraction(3, 8), new Fraction(1, 8)]; + const beams = Beam.applyAndGetBeams(voice, undefined, groups); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function moreSimple0(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/8, g4, c5, g5, a5, c4, d4, a5'), { time: '4/4' }); + const beams = Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function moreSimple1(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function breakBeamsOnRests(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = Beam.generateBeams(voice.getTickables(), { + beam_rests: false, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamAcrossAllRestsWithStemlets(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = Beam.generateBeams(voice.getTickables(), { + beam_rests: true, + show_stemlets: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamAcrossAllRests(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = Beam.generateBeams(voice.getTickables(), { + beam_rests: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamAcrossMiddleRests(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = Beam.generateBeams(voice.getTickables(), { + beam_rests: true, + beam_middle_only: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function maintainStemDirections(options) { + const f = VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes([ + 'b4/16, b4, b4[stem="down"], b4/r', + 'b4/r, b4[stem="down"], b4, b4', + 'b4[stem="down"], b4[stem="down"], b4, b4/r', + 'b4/32, b4[stem="down"], b4[stem="down"], b4, b4/16/r, b4', + ].join(', '), { stem: 'up' }), { time: '4/4' }); + const beams = Beam.generateBeams(voice.getTickables(), { + beam_rests: false, + maintain_stem_directions: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function maintainStemDirectionsBeamAcrossRests(options) { + const f = VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes([ + 'b4/16, b4, b4[stem="down"], b4/r', + 'b4/r, b4[stem="down"], b4, b4', + 'b4[stem="down"], b4[stem="down"], b4, b4/r', + 'b4/32, b4[stem="down"], b4[stem="down"], b4, b4/16/r, b4', + ].join(', '), { stem: 'up' }), { time: '4/4' }); + const beams = Beam.generateBeams(voice.getTickables(), { + beam_rests: true, + maintain_stem_directions: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function groupWithUnbeamableNote(options) { + const f = VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave().addTimeSignature('2/4'); + const score = f.EasyScore(); + const voice = score.voice(score.notes('b4/16, b4, b4/4, b4/16, b4'), { time: '2/4' }); + const beams = Beam.generateBeams(voice.getTickables(), { + groups: [new Fraction(2, 2)], + beam_rests: false, + maintain_stem_directions: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function groupWithUnbeamableNote1(options) { + const f = VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave().addTimeSignature('6/8'); + const score = f.EasyScore(); + const voice = score.voice(score.notes('b4/4, b4/4, b4/8, b4/8'), { time: '6/8' }); + const beams = Beam.generateBeams(voice.getTickables(), { + groups: [new Fraction(3, 8)], + beam_rests: false, + maintain_stem_directions: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function autoOddBeamGroups(options) { + const f = VexFlowTests.makeFactory(options, 450, 400); + const score = f.EasyScore(); + const stave1 = f.Stave({ y: 10 }).addTimeSignature('5/4'); + const voice1 = score.voice(score.notes('c5/8, g5, c5, b4, b4, c4, d4, a5, c4, g4'), { time: '5/4' }); + const stave2 = f.Stave({ y: 150 }).addTimeSignature('5/8'); + const voice2 = score.voice(score.notes('c5/8, g5, c5, b4, b4'), { time: '5/8' }); + const stave3 = f.Stave({ y: 290 }).addTimeSignature('13/16'); + const voice3 = score.voice(score.notes('c5/16, g5, c5, b4, b4, c5, g5, c5, b4, b4, c5, b4, b4'), { + time: '13/16', + }); + const beams = [ + ...Beam.applyAndGetBeams(voice1, undefined, Beam.getDefaultBeamGroups('5/4')), + ...Beam.applyAndGetBeams(voice2, undefined, Beam.getDefaultBeamGroups('5/8')), + ...Beam.applyAndGetBeams(voice3, undefined, Beam.getDefaultBeamGroups('13/16')), + ]; + f.Formatter().formatToStave([voice1], stave1).formatToStave([voice2], stave2).formatToStave([voice3], stave3); + Stave.formatBegModifiers([stave1, stave2, stave3]); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function customBeamGroups(options) { + const f = VexFlowTests.makeFactory(options, 450, 400); + const score = f.EasyScore(); + const stave1 = f.Stave({ y: 10 }).addTimeSignature('5/4'); + const voice1 = score.voice(score.notes('c5/8, g5, c5, b4, b4, c4, d4, a5, c4, g4'), { time: '5/4' }); + const stave2 = f.Stave({ y: 150 }).addTimeSignature('5/8'); + const voice2 = score.voice(score.notes('c5/8, g5, c5, b4, b4'), { time: '5/8' }); + const stave3 = f.Stave({ y: 290 }).addTimeSignature('13/16'); + const voice3 = score.voice(score.notes('c5/16, g5, c5, b4, b4, c5, g5, c5, b4, b4, c5, b4, b4'), { time: '13/16' }); + const group1 = [new Fraction(5, 8)]; + const group2 = [new Fraction(3, 8), new Fraction(2, 8)]; + const group3 = [new Fraction(7, 16), new Fraction(2, 16), new Fraction(4, 16)]; + const beams = [ + ...Beam.applyAndGetBeams(voice1, undefined, group1), + ...Beam.applyAndGetBeams(voice2, undefined, group2), + ...Beam.applyAndGetBeams(voice3, undefined, group3), + ]; + f.Formatter().formatToStave([voice1], stave1).formatToStave([voice2], stave2).formatToStave([voice3], stave3); + Stave.formatBegModifiers([stave1, stave2, stave3]); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function createShortcuts(score) { + return { + notes: score.notes.bind(score), + tuplet: score.tuplet.bind(score), + }; +} +function simpleTuplets(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + ...tuplet(notes('c4/8, g4, c5')), + ...notes('g5/8, a5'), + ...tuplet(notes('a5/16, (c5 e5), a5, d5, a5'), { ratioed: false, notes_occupied: 4 }), + ], { time: '3/4' }); + const beams = Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function moreSimpleTuplets(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([...tuplet(notes('d4/4, g4, c5')), ...notes('g5/16, a5, a5, (c5 e5)')], { time: '3/4' }); + const beams = Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function moreBeaming(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/8, g4/4, c5/8., g5/16, a5/4, a5/16, (c5 e5)/16, a5/8'), { time: '9/8' }); + const beams = Beam.applyAndGetBeams(voice, undefined, Beam.getDefaultBeamGroups('9/8')); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamingWithSeveralGroups1(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/8, g4/4, c5/8, g5, a5, a5, f5'), { time: '4/4' }); + const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(3, 8), new Fraction(2, 8)]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamingWithSeveralGroupsOverflow(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/8, g4/4., c5/8, g5, a5, a5'), { time: '4/4' }); + const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(3, 8), new Fraction(2, 8)]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamingWithSeveralGroupsOverflow2(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/16, g4/2, f4/16, c5/8, a4/16, c4/16, g4/8, b4, c5, g5, f5, e5, c5, a4/4'), { + time: '8/4', + }); + const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(2, 8), new Fraction(3, 8)]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamingWithSeveralGroupsOverflow3(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/16, g4/1, f4/16, c5/8, g5, f5, e5, c5, a4/4'), { time: '8/4' }); + const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(2, 8), new Fraction(3, 8)]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function secondaryBreaks1(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes([ + 'f5/32, f5, f5, f5, f5/16., f5/32', + 'f5/16, f5/8, f5/16', + 'f5/32, f5/16., f5., f5/32', + 'f5/16., f5/32, f5, f5/16.', + ].join(','))); + const beams = Beam.generateBeams(voice.getTickables(), { secondary_breaks: '8' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Duration-Based Secondary Breaks Test'); +} +function secondaryBreaks2(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + tuplet(notes('e5/16, f5, f5')), + tuplet(notes('f5/16, f5, c5')), + notes('a4/16., f4/32'), + tuplet(notes('d4/16, d4, d4')), + tuplet(notes('a5/8, (e5 g5), a5')), + tuplet(notes('f5/16, f5, f5')), + tuplet(notes('f5/16, f5, a4')), + ].reduce(concat)); + const beams = Beam.generateBeams(voice.getTickables(), { secondary_breaks: '8' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Duration-Based Secondary Breaks Test'); +} +function flatBeamsUp(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + tuplet(notes('c4/8, g4, f5')), + notes('d5/8'), + tuplet(notes('c5/16, (c4 e4 g4), f4')), + notes('d5/8, e5, c4, f5/32, f5, f5, f5'), + ].reduce(concat)); + const beams = Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + stem_direction: 1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Up Test'); +} +function flatBeamsDown(options) { + const f = VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/64, c5, c5, c5, c5, c5, c5, c5, a5/8, g5, (d4 f4 a4)/16, d4, d5/8, e5, g5, a6/32, a6, a6, g4/64, g4')); + const beams = Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + stem_direction: -1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Down Test'); +} +function flatBeamsMixed(options) { + const f = VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/64, d5, e5, c5, f5, c5, a5, c5, a5/8, g5, (d4 f4 a4)/16, d4, d5/8, e5, c4, a4/32, a4, a4, g4/64, g4')); + const beams = Beam.generateBeams(voice.getTickables(), { flat_beams: true }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Mixed Direction Test'); +} +function flatBeamsUpUniform(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + ...tuplet(notes('c4/8, g4, g5')), + ...notes('d5/8, c5/16, (c4 e4 g4), d5/8, e5, c4, f5/32, f5, f5, f5'), + ]); + const beams = Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + flat_beam_offset: 50, + stem_direction: 1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Up (uniform) Test'); +} +function flatBeamsDownUniform(options) { + const f = VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/64, c5, c5, c5, c5, c5, c5, c5, a5/8, g5, (e4 g4 b4)/16, e5, d5/8, e5/8, g5/8, a6/32, a6, a6, g4/64, g4')); + const beams = Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + flat_beam_offset: 155, + stem_direction: -1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Down (uniform) Test'); +} +function flatBeamsUpBounds(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + ...tuplet(notes('c4/8, g4/8, g5/8')), + ...notes('d5/8, c5/16, (c4 e4 g4)/16, d5/8, e5/8, c4/8, f5/32, f5/32, f5/32, f5/32'), + ]); + const beams = Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + flat_beam_offset: 60, + stem_direction: 1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Up (uniform) Test'); +} +function flatBeamsDownBounds(options) { + const f = VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes([ + 'g5/8, a6/32, a6/32, a6/32, g4/64, g4/64', + 'c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, a5/8', + 'g5/8, (e4 g4 b4)/16, e5/16', + 'd5/8, e5/8', + ].join(','), { stem: 'down' })); + const beams = Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + flat_beam_offset: 145, + stem_direction: -1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Down (uniform) Test'); +} +VexFlowTests.register(AutoBeamFormattingTests); +export { AutoBeamFormattingTests }; diff --git a/build/esm/tests/bach_tests.js b/build/esm/tests/bach_tests.js new file mode 100644 index 0000000000..9379a49189 --- /dev/null +++ b/build/esm/tests/bach_tests.js @@ -0,0 +1,335 @@ +import { concat, VexFlowTests } from './vexflow_test_helpers.js'; +import { BarlineType, Registry } from '../src/index.js'; +const BachDemoTests = { + Start() { + QUnit.module('Bach Demo'); + VexFlowTests.runTests('Minuet 1', minuet1); + }, +}; +function minuet1(options) { + const registry = new Registry(); + Registry.enableDefaultRegistry(registry); + const id = (id) => registry.getElementById(id); + const f = VexFlowTests.makeFactory(options, 1100, 900); + const score = f.EasyScore({ throwOnError: true }); + const voice = score.voice.bind(score); + const notes = score.notes.bind(score); + const beam = score.beam.bind(score); + let x = 120; + let y = 80; + function appendSystem(width) { + const system = f.System({ x, y, width, spaceBetweenStaves: 10 }); + x += width; + return system; + } + score.set({ time: '3/4' }); + let system = appendSystem(220); + system + .addStave({ + voices: [ + voice([notes('D5/q[id="m1a"]'), beam(notes('G4/8, A4, B4, C5', { stem: 'up' }))].reduce(concat)), + voice([f.TextDynamics({ text: 'p', duration: 'h', dots: 1, line: 9 })]), + ], + }) + .addClef('treble') + .addKeySignature('G') + .addTimeSignature('3/4') + .setTempo({ name: 'Allegretto', duration: 'h', dots: 1, bpm: 66 }, -30); + system + .addStave({ voices: [voice(notes('(G3 B3 D4)/h, A3/q', { clef: 'bass' }))] }) + .addClef('bass') + .addKeySignature('G') + .addTimeSignature('3/4'); + system.addConnector('brace'); + system.addConnector('singleRight'); + system.addConnector('singleLeft'); + id('m1a').addModifier(f.Fingering({ number: '5' }), 0); + system = appendSystem(150); + system.addStave({ voices: [voice(notes('D5/q[id="m2a"], G4[id="m2b"], G4[id="m2c"]'))] }); + system.addStave({ voices: [voice(notes('B3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m2a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); + id('m2b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m2c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + f.Curve({ + from: id('m1a'), + to: id('m2a'), + options: { + cps: [ + { x: 0, y: 40 }, + { x: 0, y: 40 }, + ], + }, + }); + system = appendSystem(150); + system.addStave({ + voices: [voice([notes('E5/q[id="m3a"]'), beam(notes('C5/8, D5, E5, F5', { stem: 'down' }))].reduce(concat))], + }); + id('m3a').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); + system.addStave({ voices: [voice(notes('C4/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + system = appendSystem(150); + system.addStave({ voices: [voice(notes('G5/q[id="m4a"], G4[id="m4b"], G4[id="m4c"]'))] }); + system.addStave({ voices: [voice(notes('B3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m4a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); + id('m4b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m4c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + f.Curve({ + from: id('m3a'), + to: id('m4a'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 20 }, + ], + }, + }); + system = appendSystem(150); + system.addStave({ + voices: [voice([notes('C5/q[id="m5a"]'), beam(notes('D5/8, C5, B4, A4', { stem: 'down' }))].reduce(concat))], + }); + id('m5a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); + system.addStave({ voices: [voice(notes('A3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + system = appendSystem(150); + system.addStave({ + voices: [voice([notes('B4/q'), beam(notes('C5/8, B4, A4, G4[id="m6a"]', { stem: 'up' }))].reduce(concat))], + }); + system.addStave({ voices: [voice(notes('G3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + f.Curve({ + from: id('m5a'), + to: id('m6a'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 20 }, + ], + invert: true, + position_end: 'nearTop', + y_shift: 20, + }, + }); + x = 20; + y += 230; + system = appendSystem(220); + system + .addStave({ + voices: [ + voice([notes('F4/q[id="m7a"]'), beam(notes('G4/8[id="m7b"], A4, B4, G4', { stem: 'up' }))].reduce(concat)), + ], + }) + .addClef('treble') + .addKeySignature('G'); + system + .addStave({ voices: [voice(notes('D4/q, B3[id="m7c"], G3', { clef: 'bass' }))] }) + .addClef('bass') + .addKeySignature('G'); + system.addConnector('brace'); + system.addConnector('singleRight'); + system.addConnector('singleLeft'); + id('m7a').addModifier(f.Fingering({ number: '2', position: 'below' }), 0); + id('m7b').addModifier(f.Fingering({ number: '1' }), 0); + id('m7c').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); + system = appendSystem(180); + const grace = f.GraceNote({ keys: ['d/3'], clef: 'bass', duration: '4', slash: false }); + system.addStave({ voices: [voice(notes('A4/h.[id="m8c"]'))] }); + system.addStave({ + voices: [ + score + .set({ clef: 'bass' }) + .voice([notes('D4/q[id="m8a"]'), beam(notes('D3/8, C4, B3[id="m8b"], A3', { stem: 'down' }))].reduce(concat)), + ], + }); + system.addConnector('singleRight'); + id('m8b').addModifier(f.Fingering({ number: '1', position: 'above' }), 0); + id('m8c').addModifier(f.GraceNoteGroup({ notes: [grace] }), 0); + f.Curve({ + from: id('m7a'), + to: id('m8c'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 20 }, + ], + invert: true, + position: 'nearTop', + position_end: 'nearTop', + }, + }); + f.StaveTie({ from: grace, to: id('m8c') }); + system = appendSystem(180); + system.addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('D5/q[id="m9a"]'), beam(notes('G4/8, A4, B4, C5', { stem: 'up' }))].reduce(concat)), + ], + }); + system.addStave({ voices: [voice(notes('B3/h, A3/q', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m9a').addModifier(f.Fingering({ number: '5' }), 0); + system = appendSystem(170); + system.addStave({ voices: [voice(notes('D5/q[id="m10a"], G4[id="m10b"], G4[id="m10c"]'))] }); + system.addStave({ voices: [voice(notes('G3/q[id="m10d"], B3, G3', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m10a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); + id('m10b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m10c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m10d').addModifier(f.Fingering({ number: '4' }), 0); + f.Curve({ + from: id('m9a'), + to: id('m10a'), + options: { + cps: [ + { x: 0, y: 40 }, + { x: 0, y: 40 }, + ], + }, + }); + system = appendSystem(150); + system.addStave({ + voices: [voice([notes('E5/q[id="m11a"]'), beam(notes('C5/8, D5, E5, F5', { stem: 'down' }))].reduce(concat))], + }); + id('m11a').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); + system.addStave({ voices: [voice(notes('C4/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + system = appendSystem(170); + system.addStave({ voices: [voice(notes('G5/q[id="m12a"], G4[id="m12b"], G4[id="m12c"]'))] }); + system.addStave({ + voices: [ + score + .set({ clef: 'bass' }) + .voice([notes('B3/q[id="m12d"]'), beam(notes('C4/8, B3, A3, G3[id="m12e"]', { stem: 'down' }))].reduce(concat)), + ], + }); + system.addConnector('singleRight'); + id('m12a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); + id('m12b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m12c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m12d').addModifier(f.Fingering({ number: '2', position: 'above' }), 0); + id('m12e').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); + f.Curve({ + from: id('m11a'), + to: id('m12a'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 20 }, + ], + }, + }); + x = 20; + y += 230; + system = appendSystem(220); + system + .addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('c5/q[id="m13a"]'), beam(notes('d5/8, c5, b4, a4', { stem: 'down' }))].reduce(concat)), + ], + }) + .addClef('treble') + .addKeySignature('G'); + system + .addStave({ voices: [voice(notes('a3/h[id="m13b"], f3/q[id="m13c"]', { clef: 'bass' }))] }) + .addClef('bass') + .addKeySignature('G'); + system.addConnector('brace'); + system.addConnector('singleRight'); + system.addConnector('singleLeft'); + id('m13a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); + id('m13b').addModifier(f.Fingering({ number: '1' }), 0); + id('m13c').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); + system = appendSystem(180); + system.addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('B4/q'), beam(notes('C5/8, b4, a4, g4', { stem: 'up' }))].reduce(concat)), + ], + }); + system.addStave({ voices: [voice(notes('g3/h[id="m14a"], b3/q[id="m14b"]', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m14a').addModifier(f.Fingering({ number: '2' }), 0); + id('m14b').addModifier(f.Fingering({ number: '1' }), 0); + system = appendSystem(180); + system.addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('a4/q'), beam(notes('b4/8, a4, g4, f4[id="m15a"]', { stem: 'up' }))].reduce(concat)), + ], + }); + system.addStave({ voices: [voice(notes('c4/q[id="m15b"], d4, d3', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m15a').addModifier(f.Fingering({ number: '2' }), 0); + id('m15b').addModifier(f.Fingering({ number: '2' }), 0); + system = appendSystem(130); + system + .addStave({ + voices: [score.set({ clef: 'treble' }).voice([notes('g4/h.[id="m16a"]')].reduce(concat))], + }) + .setEndBarType(BarlineType.REPEAT_END); + system + .addStave({ voices: [voice(notes('g3/h[id="m16b"], g2/q', { clef: 'bass' }))] }) + .setEndBarType(BarlineType.REPEAT_END); + system.addConnector('boldDoubleRight'); + id('m16a').addModifier(f.Fingering({ number: '1' }), 0); + id('m16b').addModifier(f.Fingering({ number: '1' }), 0); + f.Curve({ + from: id('m13a'), + to: id('m16a'), + options: { + cps: [ + { x: 0, y: 50 }, + { x: 0, y: 20 }, + ], + invert: true, + position_end: 'nearTop', + }, + }); + system = appendSystem(180); + system + .addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('b5/q[id="m17a"]'), beam(notes('g5/8, a5, b5, g5', { stem: 'down' }))].reduce(concat)), + voice([f.TextDynamics({ text: 'mf', duration: 'h', dots: 1, line: 10 })]), + ], + }) + .setBegBarType(BarlineType.REPEAT_BEGIN); + system.addStave({ voices: [voice(notes('g3/h.', { clef: 'bass' }))] }).setBegBarType(BarlineType.REPEAT_BEGIN); + system.addConnector('boldDoubleLeft'); + system.addConnector('singleRight'); + id('m17a').addModifier(f.Fingering({ number: '5', position: 'above' }), 0); + system = appendSystem(180); + system.addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('a5/q[id="m18a"]'), beam(notes('d5/8, e5, f5, d5[id="m18b"]', { stem: 'down' }))].reduce(concat)), + ], + }); + system.addStave({ voices: [voice(notes('f3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m18a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); + f.Curve({ + from: id('m17a'), + to: id('m18b'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 30 }, + ], + }, + }); + f.draw(); + Registry.disableDefaultRegistry(); + options.assert.ok(true, 'Bach Minuet 1'); +} +VexFlowTests.register(BachDemoTests); +export { BachDemoTests }; diff --git a/build/esm/tests/barline_tests.js b/build/esm/tests/barline_tests.js new file mode 100644 index 0000000000..726a7a417d --- /dev/null +++ b/build/esm/tests/barline_tests.js @@ -0,0 +1,58 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Renderer } from '../src.js'; +import { Barline, BarlineType } from '../src/stavebarline.js'; +const BarlineTests = { + Start() { + QUnit.module('Barline'); + QUnit.test('Enums', enums); + const run = VexFlowTests.runTests; + run('Simple BarNotes', simple); + run('Style BarNotes', style); + }, +}; +function enums(assert) { + assert.equal(Barline.type, BarlineType); + const a = BarlineType['DOUBLE']; + const b = BarlineType.DOUBLE; + assert.equal(a, b); +} +function simple(options) { + const f = VexFlowTests.makeFactory(options, 380, 160); + const stave = f.Stave(); + const notes = [ + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '2' }), + f.BarNote({ type: 'single' }), + f + .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '2' }) + .addModifier(f.Accidental({ type: 'n' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + ]; + const voice = f.Voice().addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + if (options.backend === Renderer.Backends.SVG) { + notes.forEach((note) => { + options.assert.notEqual(note.getSVGElement(), undefined); + }); + } + options.assert.ok(true, 'Simple Test'); +} +function style(options) { + const f = VexFlowTests.makeFactory(options, 380, 160); + const stave = f.Stave(); + const notes = [ + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '2' }), + f.BarNote({ type: 'single' }), + f + .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '2' }) + .addModifier(f.Accidental({ type: 'n' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + ]; + notes[1].setStyle({ shadowBlur: 15, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); + const voice = f.Voice().addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Style'); +} +VexFlowTests.register(BarlineTests); +export { BarlineTests }; diff --git a/build/esm/tests/beam_tests.js b/build/esm/tests/beam_tests.js new file mode 100644 index 0000000000..fe98072e52 --- /dev/null +++ b/build/esm/tests/beam_tests.js @@ -0,0 +1,651 @@ +import { concat, VexFlowTests } from './vexflow_test_helpers.js'; +import { AnnotationVerticalJustify, Beam, Dot, Font, FontStyle, FontWeight, Stem, Voice, } from '../src/index.js'; +const BeamTests = { + Start() { + QUnit.module('Beam'); + const run = VexFlowTests.runTests; + run('Simple Beam', simple); + run('Multi Beam', multi); + run('Sixteenth Beam', sixteenth); + run('Slopey Beam', slopey); + run('Auto-stemmed Beam', autoStem); + run('Mixed Beam 1', mixed); + run('Mixed Beam 2', mixed2); + run('Dotted Beam', dotted); + run('Partial Beam', partial); + run('Close Trade-offs Beam', tradeoffs); + run('Insane Beam', insane); + run('Lengthy Beam', lenghty); + run('Outlier Beam', outlier); + run('Break Secondary Beams', breakSecondaryBeams); + run('Partial Beam Direction', partialBeamDirection); + run('TabNote Beams Up', tabBeamsUp); + run('TabNote Beams Down', tabBeamsDown); + run('TabNote Auto Create Beams', autoTabBeams); + run('TabNote Beams Auto Stem', tabBeamsAutoStem); + run('Complex Beams with Annotations', complexWithAnnotation); + run('Complex Beams with Articulations', complexWithArticulation); + run('Complex Beams with Articulations two Staves', complexWithArticulation2); + }, +}; +function simple(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voice = score.voice([ + notes('(cb4 e#4 a4)/2'), + beam(notes('(cb4 e#4 a4)/8, (d4 f4 a4), (ebb4 g##4 b4), (f4 a4 c5)', { stem: 'up' })), + ].reduce(concat), { time: '2/2' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Simple Test'); +} +function multi(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice.bind(score); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voices = [ + voice([beam(notes('f5/8, e5, d5, c5', { stem: 'up' })), beam(notes('c5, d5, e5, f5', { stem: 'up' }))].reduce(concat)), + voice([beam(notes('f4/8, e4, d4, c4', { stem: 'down' })), beam(notes('c4/8, d4, e4, f4', { stem: 'down' }))].reduce(concat)), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Multi Test'); +} +function sixteenth(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice.bind(score); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voices = [ + voice([ + beam(notes('f5/16, f5, d5, c5', { stem: 'up' })), + beam(notes('c5/16, d5, f5, e5', { stem: 'up' })), + notes('f5/2', { stem: 'up' }), + ].reduce(concat)), + voice([ + beam(notes('f4/16, e4/16, d4/16, c4/16', { stem: 'down' })), + beam(notes('c4/16, d4/16, f4/16, e4/16', { stem: 'down' })), + notes('f4/2', { stem: 'down' }), + ].reduce(concat)), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Sixteenth Test'); +} +function breakSecondaryBeams(options) { + const f = VexFlowTests.makeFactory(options, 600, 200); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice.bind(score); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voices = [ + voice([ + beam(notes('f5/16., f5/32, c5/16., d5/32, c5/16., d5/32', { stem: 'up' }), { secondaryBeamBreaks: [1, 3] }), + beam(notes('f5/16, e5, e5, e5, e5, e5', { stem: 'up' }), { secondaryBeamBreaks: [2] }), + ].reduce(concat), { time: '3/4' }), + voice([ + beam(notes('f4/32, d4, e4, c4, d4, c4, f4, d4, e4, c4, c4, d4', { stem: 'down' }), { + secondaryBeamBreaks: [3, 7], + }), + beam(notes('d4/16, f4, d4, e4, e4, e4', { stem: 'down' }), { secondaryBeamBreaks: [3] }), + ].reduce(concat), { time: '3/4' }), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Breaking Secondary Beams Test'); +} +function partialBeamDirection(options) { + const f = VexFlowTests.makeFactory(options, 600, 200); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice.bind(score); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voices = [ + voice([ + beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' })), + beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' }), { partialBeamDirections: { '1': 'R' } }), + beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' }), { partialBeamDirections: { '1': 'L' } }), + ].reduce(concat), { time: '9/8' }), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Partial beam direction test'); +} +function slopey(options) { + const f = VexFlowTests.makeFactory(options, 350, 140); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voice = score.voice([ + beam(notes('c4/8, f4/8, d5/8, g5/8', { stem: 'up' })), + beam(notes('d6/8, f5/8, d4/8, g3/8', { stem: 'up' })), + ].reduce(concat)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Slopey Test'); +} +function autoStem(options) { + const f = VexFlowTests.makeFactory(options, 350, 140); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('a4/8, b4/8, g4/8, c5/8, f4/8, d5/8, e4/8, e5/8, b4/8, b4/8, g4/8, d5/8'), { + time: '6/4', + }); + const notes = voice.getTickables(); + const beams = [ + f.Beam({ notes: notes.slice(0, 2), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(2, 4), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(4, 6), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(6, 8), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(8, 10), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(10, 12), options: { autoStem: true } }), + ]; + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + const UP = Stem.UP; + const DOWN = Stem.DOWN; + options.assert.equal(beams[0].getStemDirection(), UP); + options.assert.equal(beams[1].getStemDirection(), UP); + options.assert.equal(beams[2].getStemDirection(), UP); + options.assert.equal(beams[3].getStemDirection(), UP); + options.assert.equal(beams[4].getStemDirection(), DOWN); + options.assert.equal(beams[5].getStemDirection(), DOWN); + f.draw(); + options.assert.ok(true, 'AutoStem Beam Test'); +} +function mixed(options) { + const f = VexFlowTests.makeFactory(options, 350, 140); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice1 = score.voice(score.notes('f5/8, d5/16, c5/16, c5/16, d5/16, e5/8, f5/8, d5/16, c5/16, c5/16, d5/16, e5/8', { stem: 'up' })); + const voice2 = score.voice(score.notes('f4/16, e4/8, d4/16, c4/16, d4/8, f4/16, f4/16, e4/8, d4/16, c4/16, d4/8, f4/16', { stem: 'down' })); + [ + [0, 4], + [4, 8], + [8, 12], + ].forEach((range) => f.Beam({ notes: voice1.getTickables().slice(range[0], range[1]) })); + [ + [0, 4], + [4, 8], + [8, 12], + ].forEach((range) => f.Beam({ notes: voice2.getTickables().slice(range[0], range[1]) })); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true, 'Multi Test'); +} +function mixed2(options) { + const f = VexFlowTests.makeFactory(options, 450, 180); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('f5/32, d5/16, c5/32, c5/64, d5/128, e5/8, f5/16, d5/32, c5/64, c5/32, d5/16, e5/128', { + stem: 'up', + }), { time: '31/64' }); + const voice2 = score.voice(score.notes('f4/32, d4/16, c4/32, c4/64, d4/128, e4/8, f4/16, d4/32, c4/64, c4/32, d4/16, e4/128', { + stem: 'down', + }), { time: '31/64' }); + f.Beam({ notes: voice.getTickables().slice(0, 12) }); + f.Beam({ notes: voice2.getTickables().slice(0, 12) }); + f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave); + f.draw(); + options.assert.ok(true, 'Multi Test'); +} +function dotted(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('d4/8, b3/8., a3/16, a3/8, b3/8., c4/16, d4/8, b3/8, a3/8., a3/16, b3/8., c4/16', { stem: 'up' }), { time: '6/4' }); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Beam({ notes: notes.slice(8, 12) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Dotted Test'); +} +function partial(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('d4/8, b3/32, c4/16., d4/16., e4/8, c4/64, c4/32, a3/8., b3/32., c4/8, e4/64, b3/16., b3/64, f4/8, e4/8, g4/64, e4/8'), { time: '89/64' }); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 3) }); + f.Beam({ notes: notes.slice(3, 9) }); + f.Beam({ notes: notes.slice(9, 13) }); + f.Beam({ notes: notes.slice(13, 17) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Partial Test'); +} +function tradeoffs(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('a4/8, b4/8, c4/8, d4/8, g4/8, a4/8, b4/8, c4/8', { stem: 'up' })); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Close Trade-offs Test'); +} +function insane(options) { + const f = VexFlowTests.makeFactory(options, 450, 180); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('g4/8, g5/8, c4/8, b5/8, g4/8[stem="down"], a5[stem="down"], b4[stem="down"], c4/8', { stem: 'up' })); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 7) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Insane Test'); +} +function lenghty(options) { + const f = VexFlowTests.makeFactory(options, 450, 180); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.beam(score.notes('g4/8, g4, g4, a4', { stem: 'up' })), { time: '2/4' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Lengthy Test'); +} +function outlier(options) { + const f = VexFlowTests.makeFactory(options, 450, 180); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes([ + 'g4/8[stem="up"], f4[stem="up"], d5[stem="up"], e4[stem="up"]', + 'd5/8[stem="down"], d5[stem="down"], c5[stem="down"], d5[stem="down"]', + ].join())); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave }); + f.draw(); + options.assert.ok(true, 'Outlier Test'); +} +function tabBeamsUp(options) { + const f = VexFlowTests.makeFactory(options, 600, 200); + const stave = f.TabStave({ y: 20 }); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + { positions: [{ str: 3, fret: 6 }], duration: '8' }, + { positions: [{ str: 3, fret: 6 }], duration: '8' }, + { positions: [{ str: 3, fret: 6 }], duration: '8' }, + { positions: [{ str: 3, fret: 6 }], duration: '8' }, + ]; + const notes = specs.map((struct) => { + const tabNote = f.TabNote(struct); + tabNote.render_options.draw_stem = true; + return tabNote; + }); + f.Beam({ notes: notes.slice(1, 7) }); + f.Beam({ notes: notes.slice(8, 11) }); + f.Tuplet({ notes: notes.slice(8, 11), options: { ratioed: true } }); + const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'All objects have been drawn'); +} +function tabBeamsDown(options) { + const f = VexFlowTests.makeFactory(options, 600, 250); + const stave = f.TabStave({ options: { num_lines: 10 } }); + const specs = [ + { + stem_direction: -1, + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + stem_direction: -1, + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8dd', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 7, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 7, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 10, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 10, fret: 6 }], duration: '8' }, + ]; + const notes = specs.map((struct) => { + const tabNote = f.TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_dots = true; + return tabNote; + }); + Dot.buildAndAttach([notes[1], notes[1]]); + f.Beam({ notes: notes.slice(1, 7) }); + f.Beam({ notes: notes.slice(8, 11) }); + f.Tuplet({ notes: notes.slice(8, 11), options: { location: -1 } }); + f.Tuplet({ notes: notes.slice(11, 14), options: { location: -1 } }); + const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'All objects have been drawn'); +} +function autoTabBeams(options) { + const f = VexFlowTests.makeFactory(options, 600, 200); + const stave = f.TabStave(); + const specs = [ + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { positions: [{ str: 1, fret: 6 }], duration: '32' }, + { positions: [{ str: 1, fret: 6 }], duration: '32' }, + { positions: [{ str: 1, fret: 6 }], duration: '32' }, + { positions: [{ str: 6, fret: 6 }], duration: '32' }, + { positions: [{ str: 6, fret: 6 }], duration: '16' }, + { positions: [{ str: 6, fret: 6 }], duration: '16' }, + { positions: [{ str: 6, fret: 6 }], duration: '16' }, + { positions: [{ str: 6, fret: 6 }], duration: '16' }, + ]; + const notes = specs.map((struct) => { + const tabNote = f.TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_dots = true; + return tabNote; + }); + const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + const beams = Beam.applyAndGetBeams(voice, -1); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'All objects have been drawn'); +} +function tabBeamsAutoStem(options) { + const f = VexFlowTests.makeFactory(options, 600, 300); + const stave = f.TabStave(); + const specs = [ + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + stem_direction: -1, + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + stem_direction: 1, + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + stem_direction: -1, + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + stem_direction: 1, + }, + { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: 1 }, + { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: -1 }, + { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: -1 }, + { positions: [{ str: 6, fret: 6 }], duration: '32', stem_direction: -1 }, + { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 }, + { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 }, + { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 }, + { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: -1 }, + ]; + const notes = specs.map((struct) => { + const tabNote = f.TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_dots = true; + return tabNote; + }); + f.Beam({ notes: notes.slice(0, 8), options: { autoStem: true } }); + f.Beam({ notes: notes.slice(8, 12), options: { autoStem: true } }); + const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'All objects have been drawn'); +} +function complexWithAnnotation(options) { + const factory = VexFlowTests.makeFactory(options, 500, 200); + const stave = factory.Stave({ y: 40 }); + const s1 = [ + { keys: ['e/4'], duration: '128', stem_direction: 1 }, + { keys: ['d/4'], duration: '16', stem_direction: 1 }, + { keys: ['e/4'], duration: '8', stem_direction: 1 }, + { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + ]; + const s2 = [ + { keys: ['e/5'], duration: '128', stem_direction: -1 }, + { keys: ['d/5'], duration: '16', stem_direction: -1 }, + { keys: ['e/5'], duration: '8', stem_direction: -1 }, + { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + ]; + const font = { + family: Font.SERIF, + size: 14, + weight: FontWeight.BOLD, + style: FontStyle.ITALIC, + }; + const notes1 = s1.map((struct) => factory + .StaveNote(struct) + .addModifier(factory.Annotation({ text: '1', vJustify: AnnotationVerticalJustify.TOP, font }), 0)); + const notes2 = s2.map((struct) => factory + .StaveNote(struct) + .addModifier(factory.Annotation({ text: '3', vJustify: AnnotationVerticalJustify.BOTTOM, font }), 0)); + factory.Beam({ notes: notes1 }); + factory.Beam({ notes: notes2 }); + const voice = factory.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2); + factory.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave }); + factory.draw(); + options.assert.ok(true, 'Complex beam annotations'); +} +function complexWithArticulation(options) { + const f = VexFlowTests.makeFactory(options, 500, 200); + const stave = f.Stave({ y: 40 }); + const s1 = [ + { keys: ['e/4'], duration: '128', stem_direction: 1 }, + { keys: ['d/4'], duration: '16', stem_direction: 1 }, + { keys: ['e/4'], duration: '8', stem_direction: 1 }, + { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + ]; + const s2 = [ + { keys: ['e/5'], duration: '128', stem_direction: -1 }, + { keys: ['d/5'], duration: '16', stem_direction: -1 }, + { keys: ['e/5'], duration: '8', stem_direction: -1 }, + { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + ]; + const notes1 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0)); + const notes2 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0)); + f.Beam({ notes: notes1 }); + f.Beam({ notes: notes2 }); + const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave }); + f.draw(); + options.assert.ok(true, 'Complex beam articulations'); +} +function complexWithArticulation2(options) { + const f = VexFlowTests.makeFactory(options, 500, 300); + const system = f.System(); + const s1 = [ + { keys: ['e/4'], duration: '128', stem_direction: 1 }, + { keys: ['d/4'], duration: '16', stem_direction: 1 }, + { keys: ['e/4'], duration: '8', stem_direction: 1 }, + { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + ]; + const s2 = [ + { keys: ['e/5'], duration: '128', stem_direction: -1 }, + { keys: ['d/5'], duration: '16', stem_direction: -1 }, + { keys: ['e/5'], duration: '8', stem_direction: -1 }, + { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + ]; + const notes1 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0)); + const notes2 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0)); + const notes3 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0)); + const notes4 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0)); + f.Beam({ notes: notes1 }); + f.Beam({ notes: notes2 }); + f.Beam({ notes: notes3 }); + f.Beam({ notes: notes4 }); + const voice1 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2); + const voice2 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes3).addTickables(notes4); + system.addStave({ voices: [voice1] }); + system.addStave({ voices: [voice2] }); + f.draw(); + options.assert.ok(true, 'Complex beam articulations two staves'); +} +VexFlowTests.register(BeamTests); +export { BeamTests }; diff --git a/build/esm/tests/bend_tests.js b/build/esm/tests/bend_tests.js new file mode 100644 index 0000000000..ca4269d648 --- /dev/null +++ b/build/esm/tests/bend_tests.js @@ -0,0 +1,209 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Bend } from '../src/bend.js'; +import { Font } from '../src/font.js'; +import { Formatter } from '../src/formatter.js'; +import { ModifierContext } from '../src/modifiercontext.js'; +import { Note } from '../src/note.js'; +import { TabNote } from '../src/tabnote.js'; +import { TabStave } from '../src/tabstave.js'; +import { TickContext } from '../src/tickcontext.js'; +const BendTests = { + Start() { + QUnit.module('Bend'); + const run = VexFlowTests.runTests; + run('Double Bends', doubleBends); + run('Reverse Bends', reverseBends); + run('Bend Phrase', bendPhrase); + run('Double Bends With Release', doubleBendsWithRelease); + run('Whako Bend', whackoBends); + }, +}; +const note = (noteStruct) => new TabNote(noteStruct); +const bendWithText = (text, release = false) => new Bend(text, release); +const bendWithPhrase = (phrase) => new Bend('', false, phrase); +function doubleBends(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + note({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'q', + }) + .addModifier(bendWithText('Full'), 0) + .addModifier(bendWithText('1/2'), 1), + note({ + positions: [ + { str: 2, fret: 5 }, + { str: 3, fret: 5 }, + ], + duration: 'q', + }) + .addModifier(bendWithText('1/4'), 0) + .addModifier(bendWithText('1/4'), 1), + note({ + positions: [{ str: 4, fret: 7 }], + duration: 'h', + }), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + notes.forEach((note) => Note.plotMetrics(ctx, note, 140)); + options.assert.ok(true, 'Double Bends'); +} +function doubleBendsWithRelease(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 550, 240); + ctx.scale(1.0, 1.0); + ctx.setBackgroundFillStyle('#FFF'); + ctx.setFont('Arial', VexFlowTests.Font.size); + const stave = new TabStave(10, 10, 550).addTabGlyph().setContext(ctx).draw(); + const notes = [ + note({ + positions: [ + { str: 1, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'q', + }) + .addModifier(bendWithText('1/2', true), 0) + .addModifier(bendWithText('Full', true), 1), + note({ + positions: [ + { str: 2, fret: 5 }, + { str: 3, fret: 5 }, + { str: 4, fret: 5 }, + ], + duration: 'q', + }) + .addModifier(bendWithText('1/4', true), 0) + .addModifier(bendWithText('Monstrous', true), 1) + .addModifier(bendWithText('1/4', true), 2), + note({ + positions: [{ str: 4, fret: 7 }], + duration: 'q', + }), + note({ + positions: [{ str: 4, fret: 7 }], + duration: 'q', + }), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + notes.forEach((note) => Note.plotMetrics(ctx, note, 140)); + options.assert.ok(true, 'Bend Release'); +} +function reverseBends(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.setFont('10pt Arial'); + const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + note({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'w', + }) + .addModifier(bendWithText('Full'), 1) + .addModifier(bendWithText('1/2'), 0), + note({ + positions: [ + { str: 2, fret: 5 }, + { str: 3, fret: 5 }, + ], + duration: 'w', + }) + .addModifier(bendWithText('1/4'), 1) + .addModifier(bendWithText('1/4'), 0), + note({ + positions: [{ str: 4, fret: 7 }], + duration: 'w', + }), + ]; + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + const mc = new ModifierContext(); + note.addToModifierContext(mc); + const tickContext = new TickContext(); + tickContext + .addTickable(note) + .preFormat() + .setX(75 * i); + note.setStave(stave).setContext(ctx).draw(); + Note.plotMetrics(ctx, note, 140); + options.assert.ok(true, 'Bend ' + i); + } +} +function bendPhrase(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = Font.SIZE + 'pt ' + Font.SANS_SERIF; + const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const phrase1 = [ + { type: Bend.UP, text: 'Full' }, + { type: Bend.DOWN, text: 'Monstrous' }, + { type: Bend.UP, text: '1/2' }, + { type: Bend.DOWN, text: '' }, + ]; + const bend1 = bendWithPhrase(phrase1).setContext(ctx); + const notes = [ + note({ + positions: [{ str: 2, fret: 10 }], + duration: 'w', + }).addModifier(bend1, 0), + ]; + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.addToModifierContext(new ModifierContext()); + const tickContext = new TickContext(); + tickContext + .addTickable(note) + .preFormat() + .setX(75 * i); + note.setStave(stave).setContext(ctx).draw(); + Note.plotMetrics(ctx, note, 140); + options.assert.ok(true, 'Bend ' + i); + } +} +function whackoBends(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 240); + ctx.scale(1.0, 1.0); + ctx.setBackgroundFillStyle('#FFF'); + ctx.setFont('Arial', VexFlowTests.Font.size); + const stave = new TabStave(10, 10, 350).addTabGlyph().setContext(ctx).draw(); + const phrase1 = [ + { type: Bend.UP, text: 'Full' }, + { type: Bend.DOWN, text: '' }, + { type: Bend.UP, text: '1/2' }, + { type: Bend.DOWN, text: '' }, + ]; + const phrase2 = [ + { type: Bend.UP, text: 'Full' }, + { type: Bend.UP, text: 'Full' }, + { type: Bend.UP, text: '1/2' }, + { type: Bend.DOWN, text: '' }, + { type: Bend.DOWN, text: 'Full' }, + { type: Bend.DOWN, text: 'Full' }, + { type: Bend.UP, text: '1/2' }, + { type: Bend.DOWN, text: '' }, + ]; + const notes = [ + note({ + positions: [ + { str: 2, fret: 10 }, + { str: 3, fret: 9 }, + ], + duration: 'q', + }) + .addModifier(bendWithPhrase(phrase1), 0) + .addModifier(bendWithPhrase(phrase2), 1), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + Note.plotMetrics(ctx, notes[0], 140); + options.assert.ok(true, 'Whacko Bend & Release'); +} +VexFlowTests.register(BendTests); +export { BendTests }; diff --git a/build/esm/tests/boundingbox_tests.js b/build/esm/tests/boundingbox_tests.js new file mode 100644 index 0000000000..30b6dc62e4 --- /dev/null +++ b/build/esm/tests/boundingbox_tests.js @@ -0,0 +1,53 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { BoundingBox } from '../src/index.js'; +const BoundingBoxTests = { + Start() { + QUnit.module('BoundingBox'); + QUnit.test('Initialization Test', initialization); + QUnit.test('Merging Text', merging); + }, +}; +function initialization(assert) { + const bb = new BoundingBox(4, 5, 6, 7); + assert.equal(bb.getX(), 4, 'Bad X'); + assert.equal(bb.getY(), 5, 'Bad Y'); + assert.equal(bb.getW(), 6, 'Bad W'); + assert.equal(bb.getH(), 7, 'Bad H'); + bb.setX(5); + assert.equal(bb.getX(), 5, 'Bad X'); +} +function merging(assert) { + const tests = [ + { + type: 'Intersection', + bb1: new BoundingBox(10, 10, 10, 10), + bb2: new BoundingBox(15, 20, 10, 10), + merged: new BoundingBox(10, 10, 15, 20), + }, + { + type: '1 contains 2', + bb1: new BoundingBox(10, 10, 30, 30), + bb2: new BoundingBox(15, 15, 10, 10), + merged: new BoundingBox(10, 10, 30, 30), + }, + { + type: '2 contains 1', + bb1: new BoundingBox(15, 15, 10, 10), + bb2: new BoundingBox(10, 10, 30, 30), + merged: new BoundingBox(10, 10, 30, 30), + }, + ]; + tests.forEach((test) => { + const type = test.type; + const bb1 = test.bb1; + const bb2 = test.bb2; + const merged = test.merged; + bb1.mergeWith(bb2); + assert.equal(bb1.getX(), merged.getX(), type + ' - Bad X'); + assert.equal(bb1.getY(), merged.getY(), type + ' - Bad Y'); + assert.equal(bb1.getW(), merged.getW(), type + ' - Bad W'); + assert.equal(bb1.getH(), merged.getH(), type + ' - Bad H'); + }); +} +VexFlowTests.register(BoundingBoxTests); +export { BoundingBoxTests }; diff --git a/build/esm/tests/boundingboxcomputation_tests.js b/build/esm/tests/boundingboxcomputation_tests.js new file mode 100644 index 0000000000..f4a07afecc --- /dev/null +++ b/build/esm/tests/boundingboxcomputation_tests.js @@ -0,0 +1,183 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { BoundingBoxComputation, Glyph } from '../src/index.js'; +const BoundingBoxComputationTests = { + Start() { + QUnit.module('BoundingBoxComputation'); + QUnit.test('Point Test', point); + const run = VexFlowTests.runTests; + quadraticParams.forEach((params, index) => { + run(`Quadratic Test ${index}`, quadratic, params); + }); + cubicParams.forEach((params, index) => { + run(`Cubic Test ${index}`, cubic, params); + }); + }, +}; +function point(assert) { + const bboxComp = new BoundingBoxComputation(); + bboxComp.addPoint(2, 3); + assert.equal(bboxComp.getX1(), 2, 'Bad X1'); + assert.equal(bboxComp.getY1(), 3, 'Bad Y1'); + assert.equal(bboxComp.width(), 0, 'Bad width'); + assert.equal(bboxComp.height(), 0, 'Bad height'); + bboxComp.addPoint(-5, 7); + assert.equal(bboxComp.getX1(), -5, 'Bad X1'); + assert.equal(bboxComp.getY1(), 3, 'Bad Y1'); + assert.equal(bboxComp.width(), 7, 'Bad width'); + assert.equal(bboxComp.height(), 4, 'Bad height'); +} +function createContext(options) { + const points = options.params.points; + let w = points[0]; + let h = points[1]; + for (let i = 2; i < points.length; i += 2) { + w = Math.max(w, points[i]); + h = Math.max(h, points[i + 1]); + } + const f = VexFlowTests.makeFactory(options, w + 20, h + 20); + const ctx = f.getContext(); + ctx.setLineCap('square'); + return ctx; +} +function rect(ctx, style, lineWidth, x, y, w, h) { + ctx.strokeStyle = style; + ctx.setLineWidth(lineWidth); + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x + w, y); + ctx.lineTo(x + w, y + h); + ctx.lineTo(x, y + h); + ctx.lineTo(x, y); + ctx.stroke(); +} +const quadraticParams = [ + { + points: [10, 10, 100, 20, 110, 110], + box: [10, 10, 100, 100], + }, + { + points: [110, 10, 60, 110, 10, 20], + box: [10, 10, 100, 52.63], + }, + { + points: [10, 10, 30, 20, 50, 30], + box: [10, 10, 40, 20], + }, + { + points: [100, 30, 30, 110, 20, 30], + box: [20, 30, 80, 40], + }, +]; +function quadratic(options) { + const points = options.params.points; + const box = options.params.box; + const ctx = createContext(options); + const [x0, y0, x1, y1, x2, y2] = points; + let [bx, by, bw, bh] = box; + rect(ctx, '#0f0', 5, bx, by, bw, bh); + const bboxComp = new BoundingBoxComputation(); + bboxComp.addQuadraticCurve(x0, y0, x1, y1, x2, y2); + [bx, by, bw, bh] = [bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height()]; + rect(ctx, '#00f', 3, bx, by, bw, bh); + const o = [0, x0, -y0, 2, x2, -y2, x1, -y1]; + const bbox = Glyph.getOutlineBoundingBox(o, 1, 0, 0); + rect(ctx, '#fa0', 1, bbox.getX(), bbox.getY(), bbox.getW(), bbox.getH()); + ctx.setLineWidth(1); + ctx.fillStyle = '#000'; + Glyph.renderOutline(ctx, o, 1, 0, 0); + ctx.strokeStyle = '#f00'; + ctx.beginPath(); + ctx.moveTo(x0, y0); + ctx.lineTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.stroke(); + options.assert.ok(Math.abs(bboxComp.getX1() - box[0]) < 0.01, `Bad X1: ${bboxComp.getX1()}`); + options.assert.ok(Math.abs(bboxComp.getY1() - box[1]) < 0.01, `Bad Y1: ${bboxComp.getY1()}`); + options.assert.ok(Math.abs(bboxComp.width() - box[2]) < 0.01, `Bad width: ${bboxComp.width()}`); + options.assert.ok(Math.abs(bboxComp.height() - box[3]) < 0.01, `Bad height: ${bboxComp.height()}`); + options.assert.ok(Math.abs(bbox.getX() - box[0]) < 0.01, `Bad X: ${bbox.getX()}`); + options.assert.ok(Math.abs(bbox.getY() - box[1]) < 0.01, `Bad Y: ${bbox.getY()}`); + options.assert.ok(Math.abs(bbox.getW() - box[2]) < 0.01, `Bad W: ${bbox.getW()}`); + options.assert.ok(Math.abs(bbox.getH() - box[3]) < 0.01, `Bad H: ${bbox.getH()}`); +} +const cubicParams = [ + { + points: [10, 10, 60, 20, 100, 60, 110, 110], + box: [10, 10, 100, 100], + }, + { + points: [10, 10, 35, 110, 85, 110, 110, 10], + box: [10, 10, 100, 75], + }, + { + points: [10, 110, 90, 10, 30, 10, 110, 110], + box: [10, 35, 100, 75], + }, + { + points: [10, 10, 110, 110, 110, 10, 10, 110], + box: [10, 10, 75, 100], + }, + { + points: [10, 10, 130, 110, -10, 110, 110, 10], + box: [10, 10, 100, 75], + }, + { + points: [50, 10, 10, 110, 110, 110, 74, 10], + box: [40.38, 10, 41.59, 75], + }, + { + points: [10, 30, 35, 60, 110, 110, 60, 10], + box: [10, 10, 66.82, 59.37], + }, + { + points: [210, 70, 10, 10, 190, 10, 120, 90], + box: [112.02, 27.23, 97.98, 62.77], + }, + { + points: [20, 10, 210, 90, 10, 90, 100, 38], + box: [20, 10, 85.33, 64.06], + }, + { + points: [60, 14, 10, 14, 90, 14, 70, 14], + box: [43.28, 14, 30.01, 0], + }, + { + points: [10, 60, 20, 100, 100, 20, 110, 60], + box: [10, 48.45, 100, 23.1], + }, +]; +function cubic(options) { + const points = options.params.points; + const box = options.params.box; + const ctx = createContext(options); + const [x0, y0, x1, y1, x2, y2, x3, y3] = points; + let [bx, by, bw, bh] = box; + rect(ctx, '#0f0', 5, bx, by, bw, bh); + const bboxComp = new BoundingBoxComputation(); + bboxComp.addBezierCurve(x0, y0, x1, y1, x2, y2, x3, y3); + [bx, by, bw, bh] = [bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height()]; + rect(ctx, '#00f', 3, bx, by, bw, bh); + const o = [0, x0, -y0, 3, x3, -y3, x1, -y1, x2, -y2]; + const bbox = Glyph.getOutlineBoundingBox(o, 1, 0, 0); + rect(ctx, '#fa0', 1, bbox.getX(), bbox.getY(), bbox.getW(), bbox.getH()); + ctx.setLineWidth(1); + ctx.fillStyle = '#000'; + Glyph.renderOutline(ctx, o, 1, 0, 0); + ctx.strokeStyle = '#f00'; + ctx.beginPath(); + ctx.moveTo(x0, y0); + ctx.lineTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.lineTo(x3, y3); + ctx.stroke(); + options.assert.ok(Math.abs(bboxComp.getX1() - box[0]) < 0.01, `Bad X1: ${bboxComp.getX1()}`); + options.assert.ok(Math.abs(bboxComp.getY1() - box[1]) < 0.01, `Bad Y1: ${bboxComp.getY1()}`); + options.assert.ok(Math.abs(bboxComp.width() - box[2]) < 0.01, `Bad width: ${bboxComp.width()}`); + options.assert.ok(Math.abs(bboxComp.height() - box[3]) < 0.01, `Bad height: ${bboxComp.height()}`); + options.assert.ok(Math.abs(bbox.getX() - box[0]) < 0.01, `Bad X: ${bbox.getX()}`); + options.assert.ok(Math.abs(bbox.getY() - box[1]) < 0.01, `Bad Y: ${bbox.getY()}`); + options.assert.ok(Math.abs(bbox.getW() - box[2]) < 0.01, `Bad W: ${bbox.getW()}`); + options.assert.ok(Math.abs(bbox.getH() - box[3]) < 0.01, `Bad H: ${bbox.getH()}`); +} +VexFlowTests.register(BoundingBoxComputationTests); +export { BoundingBoxComputationTests }; diff --git a/build/esm/tests/chordsymbol_tests.js b/build/esm/tests/chordsymbol_tests.js new file mode 100644 index 0000000000..3579255d9d --- /dev/null +++ b/build/esm/tests/chordsymbol_tests.js @@ -0,0 +1,387 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Accidental } from '../src/accidental.js'; +import { ChordSymbol } from '../src/chordsymbol.js'; +import { Font } from '../src/font.js'; +import { Formatter } from '../src/formatter.js'; +import { Ornament } from '../src/ornament.js'; +import { Stave } from '../src/stave.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Tables } from '../src/tables.js'; +const ChordSymbolTests = { + Start() { + QUnit.module('ChordSymbol'); + const run = VexFlowTests.runTests; + run('Chord Symbol With Modifiers', withModifiers); + run('Chord Symbol Font Size Tests', fontSize); + run('Chord Symbol Kerning Tests', kern); + run('Top Chord Symbols', top); + run('Top Chord Symbols Justified', topJustify); + run('Bottom Chord Symbols', bottom); + run('Bottom Stem Down Chord Symbols', bottomStemDown); + run('Double Bottom Chord Symbols', doubleBottom); + }, +}; +const superscript = { symbolModifier: ChordSymbol.symbolModifiers.SUPERSCRIPT }; +const subscript = { symbolModifier: ChordSymbol.symbolModifiers.SUBSCRIPT }; +const note = (factory, keys, duration, chordSymbol) => factory.StaveNote({ keys, duration }).addModifier(chordSymbol, 0); +function getGlyphWidth(glyphName) { + const musicFont = Tables.currentMusicFont(); + const glyph = musicFont.getGlyphs()[glyphName]; + const widthInEm = (glyph.x_max - glyph.x_min) / musicFont.getResolution(); + return widthInEm * 38 * Font.scaleToPxFrom.pt; +} +function withModifiers(options) { + const f = VexFlowTests.makeFactory(options, 750, 580); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + const notes = [ + note(f, ['c/4'], 'q', chords[0]).addModifier(new Ornament('doit')), + note(f, ['c/4'], 'q', chords[1]), + note(f, ['c/4'], 'q', chords[2]).addModifier(new Ornament('fall')), + note(f, ['c/4'], 'q', chords[3]), + ]; + const score = f.EasyScore(); + const voice = score.voice(notes, { time: '4/4' }); + const formatter = f.Formatter(); + formatter.joinVoices([voice]); + const voiceW = formatter.preCalculateMinTotalWidth([voice]); + const staffW = voiceW + Stave.defaultPadding + getGlyphWidth('gClef'); + formatter.format([voice], voiceW); + const staff = f.Stave({ x: 10, y, width: staffW }).addClef('treble').draw(); + voice.draw(ctx, staff); + } + let chords = []; + chords.push(f + .ChordSymbol({ fontSize: 10 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .addGlyph('rightParenTall')); + chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('b9', superscript).addGlyphOrText('#11', subscript)); + chords.push(f + .ChordSymbol({ fontSize: 14 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('add 3', superscript) + .addGlyphOrText('omit 9', subscript) + .addGlyph('rightParenTall')); + chords.push(f + .ChordSymbol({ fontSize: 16 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .addGlyph('rightParenTall')); + draw(chords, 40); + chords = []; + chords.push(f + .ChordSymbol({ fontSize: 10 }) + .setFontSize(10) + .addText('F7') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript)); + chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); + chords.push(f.ChordSymbol({ fontSize: 14 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); + chords.push(f + .ChordSymbol({ fontSize: 16 }) + .setFontSize(16) + .addText('F7') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript)); + draw(chords, 140); + chords = [ + f.ChordSymbol({ fontSize: 10 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 14 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 16 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 18 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), + ]; + draw(chords, 240); + options.assert.ok(true, 'Font Size Chord Symbol'); +} +function fontSize(options) { + const f = VexFlowTests.makeFactory(options, 750, 580); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble'); + const notes = [ + note(f, ['c/4'], 'q', chords[0]), + note(f, ['c/4'], 'q', chords[1]), + note(f, ['c/4'], 'q', chords[2]), + note(f, ['c/4'], 'q', chords[3]), + ]; + const score = f.EasyScore(); + const voice = score.voice(notes, { time: '4/4' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + } + let chords = []; + chords.push(f + .ChordSymbol({ fontSize: 10 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .addGlyph('rightParenTall') + .setReportWidth(false)); + chords.push(f + .ChordSymbol({ fontSize: 12 }) + .addText('F7') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .setReportWidth(false)); + chords.push(f + .ChordSymbol({ fontSize: 14 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('add 3', superscript) + .addGlyphOrText('omit 9', subscript) + .addGlyph('rightParenTall') + .setReportWidth(false)); + chords.push(f + .ChordSymbol({ fontSize: 16 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .addGlyph('rightParenTall') + .setReportWidth(false)); + draw(chords, 40); + chords = []; + chords.push(f + .ChordSymbol({ fontSize: 10 }) + .setFontSize(10) + .addText('F7') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript)); + chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); + chords.push(f.ChordSymbol({ fontSize: 14 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); + chords.push(f + .ChordSymbol({ fontSize: 16 }) + .setFontSize(16) + .addText('F7') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript)); + draw(chords, 140); + chords = [ + f.ChordSymbol({ fontSize: 10 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 14 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 16 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 18 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), + ]; + draw(chords, 240); + options.assert.ok(true, 'Font Size Chord Symbol'); +} +function kern(options) { + const f = VexFlowTests.makeFactory(options, 650 * 1.5, 650); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(f, ['C/4'], 'q', chords[0]), + note(f, ['C/4'], 'q', chords[1]), + note(f, ['C/4'], 'q', chords[2]), + note(f, ['C/4'], 'q', chords[3]), + ]; + const score = f.EasyScore(); + const voice = score.voice(notes, { time: '4/4' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + } + let chords = [ + f.ChordSymbol().addText('A').addGlyphSuperscript('dim').setReportWidth(false), + f.ChordSymbol({ kerning: false, reportWidth: false }).addText('A').addGlyphSuperscript('dim'), + f.ChordSymbol({ hJustify: 'left', reportWidth: false }).addText('C').addGlyph('halfDiminished', superscript), + f.ChordSymbol({ reportWidth: false }).addText('D').addGlyph('halfDiminished', superscript), + ]; + draw(chords, 10); + chords = [ + f.ChordSymbol().addText('A').addGlyphSuperscript('dim'), + f.ChordSymbol({ kerning: false }).addText('A').addGlyphSuperscript('dim'), + f.ChordSymbol().addText('A').addGlyphSuperscript('+').addTextSuperscript('5'), + f.ChordSymbol().addText('G').addGlyphSuperscript('+').addTextSuperscript('5'), + ]; + draw(chords, 110); + chords = [ + f.ChordSymbol().addText('A').addGlyph('-'), + f.ChordSymbol().addText('E').addGlyph('-'), + f.ChordSymbol().addText('A').addGlyphOrText('(#11)', superscript), + f.ChordSymbol().addText('E').addGlyphOrText('(#9)', superscript), + ]; + draw(chords, 210); + chords = [ + f.ChordSymbol().addGlyphOrText('F/B').addGlyphOrText('b', superscript), + f.ChordSymbol().addText('E').addGlyphOrText('V/V'), + f.ChordSymbol().addText('A').addGlyphOrText('(#11)', superscript), + f.ChordSymbol().addText('E').addGlyphOrText('(#9)', superscript), + ]; + draw(chords, 310); + options.assert.ok(true, 'Chord Symbol Kerning Tests'); +} +function top(options) { + const f = VexFlowTests.makeFactory(options, 650 * 1.5, 650); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + const note = (factory, keys, duration, chordSymbol, direction) => factory.StaveNote({ keys, duration, stem_direction: direction }).addModifier(chordSymbol, 0); + function draw(c1, c2, y) { + const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(f, ['e/4', 'a/4', 'd/5'], 'h', c1, 1).addModifier(new Accidental('b'), 0), + note(f, ['c/5', 'e/5', 'c/6'], 'h', c2, -1), + ]; + const score = f.EasyScore(); + const voice = score.voice(notes, { time: '4/4' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + } + let chord1 = f + .ChordSymbol({ reportWidth: false }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('(#11b9)', superscript); + let chord2 = f + .ChordSymbol({ reportWidth: false }) + .addText('C') + .setHorizontal('left') + .addGlyphSuperscript('majorSeventh'); + draw(chord1, chord2, 40); + chord1 = f + .ChordSymbol() + .addText('F7') + .addTextSuperscript('(') + .addGlyphOrText('#11b9', superscript) + .addTextSuperscript(')'); + chord2 = f.ChordSymbol().addText('C').setHorizontal('left').addTextSuperscript('Maj.'); + draw(chord1, chord2, 140); + chord1 = f + .ChordSymbol() + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript); + chord2 = f.ChordSymbol().addText('C').addTextSuperscript('sus4'); + draw(chord1, chord2, 240); + options.assert.ok(true, 'Top Chord Symbol'); +} +function topJustify(options) { + const f = VexFlowTests.makeFactory(options, 500 * 1.5, 680); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chord1, chord2, y) { + const stave = new Stave(10, y, 450).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(f, ['e/4', 'a/4', 'd/5'], 'h', chord1).addModifier(new Accidental('b'), 0), + note(f, ['c/4', 'e/4', 'B/4'], 'h', chord2), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + } + let chord1 = f.ChordSymbol().addText('F7').setHorizontal('left').addGlyphOrText('(#11b9)', superscript); + let chord2 = f.ChordSymbol({ hJustify: 'left' }).addText('C').addGlyphSuperscript('majorSeventh'); + draw(chord1, chord2, 40); + chord1 = f + .ChordSymbol({ hJustify: 'center' }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('(#11b9)', superscript); + chord2 = f.ChordSymbol({ hJustify: 'center' }).addText('C').addTextSuperscript('Maj.'); + draw(chord1, chord2, 140); + chord1 = f + .ChordSymbol({ hJustify: 'right' }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript); + chord2 = f.ChordSymbol({ hJustify: 'right' }).addText('C').addTextSuperscript('Maj.'); + draw(chord1, chord2, 240); + chord1 = f + .ChordSymbol({ hJustify: 'left' }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript); + chord2 = f.ChordSymbol({ hJustify: 'centerStem' }).addText('C').addTextSuperscript('Maj.'); + draw(chord1, chord2, 340); + options.assert.ok(true, 'Top Chord Justified'); +} +function bottom(options) { + const f = VexFlowTests.makeFactory(options, 600 * 1.5, 230); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + const stave = new Stave(10, y, 400).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(f, ['c/4', 'f/4', 'a/4'], 'q', chords[0]), + note(f, ['c/4', 'e/4', 'b/4'], 'q', chords[1]).addModifier(new Accidental('b'), 2), + note(f, ['c/4', 'e/4', 'g/4'], 'q', chords[2]), + note(f, ['c/4', 'f/4', 'a/4'], 'q', chords[3]).addModifier(new Accidental('#'), 1), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + } + const chords = [ + f.ChordSymbol({ vJustify: 'bottom' }).addText('I').addTextSuperscript('6').addTextSubscript('4'), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V'), + f.ChordSymbol({ vJustify: 'bottom' }).addLine(12), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V/V'), + ]; + draw(chords, 10); + options.assert.ok(true, 'Bottom Chord Symbol'); +} +function bottomStemDown(options) { + const f = VexFlowTests.makeFactory(options, 600 * 1.5, 330); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + const note = (keys, duration, chordSymbol) => new StaveNote({ keys, duration, stem_direction: -1 }).addModifier(chordSymbol, 0); + const stave = new Stave(10, y, 400).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(['c/4', 'f/4', 'a/4'], 'q', chords[0]), + note(['c/4', 'e/4', 'b/4'], 'q', chords[1]).addModifier(new Accidental('b'), 2), + note(['c/4', 'e/4', 'g/4'], 'q', chords[2]), + note(['c/4', 'f/4', 'a/4'], 'q', chords[3]).addModifier(new Accidental('#'), 1), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + } + const chords = [ + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('F'), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('C7'), + f.ChordSymbol({ vJustify: 'bottom' }).addLine(12), + f.ChordSymbol({ vJustify: 'bottom' }).addText('A').addGlyphSuperscript('dim'), + ]; + draw(chords, 10); + options.assert.ok(true, 'Bottom Stem Down Chord Symbol'); +} +function doubleBottom(options) { + const f = VexFlowTests.makeFactory(options, 600 * 1.5, 260); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, chords2, y) { + const note = (keys, duration, chordSymbol1, chordSymbol2) => new StaveNote({ keys, duration }).addModifier(chordSymbol1, 0).addModifier(chordSymbol2, 0); + const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(['c/4', 'f/4', 'a/4'], 'q', chords[0], chords2[0]), + note(['c/4', 'e/4', 'b/4'], 'q', chords[1], chords2[1]).addModifier(f.Accidental({ type: 'b' }), 2), + note(['c/4', 'e/4', 'g/4'], 'q', chords[2], chords2[2]), + note(['c/4', 'f/4', 'a/4'], 'q', chords[3], chords2[3]).addModifier(f.Accidental({ type: '#' }), 1), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + } + const chords1 = [ + f.ChordSymbol({ vJustify: 'bottom' }).addText('I').addTextSuperscript('6').addTextSubscript('4'), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V'), + f.ChordSymbol({ vJustify: 'bottom' }).addLine(12), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V/V'), + ]; + const chords2 = [ + f.ChordSymbol({ vJustify: 'bottom' }).addText('T'), + f.ChordSymbol({ vJustify: 'bottom' }).addText('D'), + f.ChordSymbol({ vJustify: 'bottom' }).addText('D'), + f.ChordSymbol({ vJustify: 'bottom' }).addText('SD'), + ]; + draw(chords1, chords2, 10); + options.assert.ok(true, '2 Bottom Chord Symbol'); +} +VexFlowTests.register(ChordSymbolTests); +export { ChordSymbolTests }; diff --git a/build/esm/tests/clef_tests.js b/build/esm/tests/clef_tests.js new file mode 100644 index 0000000000..1241e4f7a7 --- /dev/null +++ b/build/esm/tests/clef_tests.js @@ -0,0 +1,131 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +const ClefTests = { + Start() { + QUnit.module('Clef'); + const run = VexFlowTests.runTests; + run('Clef Test', draw); + run('Clef End Test', drawEnd); + run('Small Clef Test', drawSmall); + run('Small Clef End Test', drawSmallEnd); + run('Clef Change Test', drawClefChange); + }, +}; +function draw(options) { + const f = VexFlowTests.makeFactory(options, 800, 120); + f.Stave() + .addClef('treble') + .addClef('treble', 'default', '8va') + .addClef('treble', 'default', '8vb') + .addClef('alto') + .addClef('tenor') + .addClef('soprano') + .addClef('bass') + .addClef('bass', 'default', '8vb') + .addClef('mezzo-soprano') + .addClef('baritone-c') + .addClef('baritone-f') + .addClef('subbass') + .addClef('percussion') + .addClef('french') + .addEndClef('treble'); + f.draw(); + options.assert.ok(true, 'all pass'); +} +function drawEnd(options) { + const f = VexFlowTests.makeFactory(options, 800, 120); + f.Stave() + .addClef('bass') + .addEndClef('treble') + .addEndClef('treble', 'default', '8va') + .addEndClef('treble', 'default', '8vb') + .addEndClef('alto') + .addEndClef('tenor') + .addEndClef('soprano') + .addEndClef('bass') + .addEndClef('bass', 'default', '8vb') + .addEndClef('mezzo-soprano') + .addEndClef('baritone-c') + .addEndClef('baritone-f') + .addEndClef('subbass') + .addEndClef('percussion') + .addEndClef('french'); + f.draw(); + options.assert.ok(true, 'all pass'); +} +function drawSmall(options) { + const f = VexFlowTests.makeFactory(options, 800, 120); + f.Stave() + .addClef('treble', 'small') + .addClef('treble', 'small', '8va') + .addClef('treble', 'small', '8vb') + .addClef('alto', 'small') + .addClef('tenor', 'small') + .addClef('soprano', 'small') + .addClef('bass', 'small') + .addClef('bass', 'small', '8vb') + .addClef('mezzo-soprano', 'small') + .addClef('baritone-c', 'small') + .addClef('baritone-f', 'small') + .addClef('subbass', 'small') + .addClef('percussion', 'small') + .addClef('french', 'small') + .addEndClef('treble', 'small'); + f.draw(); + options.assert.ok(true, 'all pass'); +} +function drawSmallEnd(options) { + const f = VexFlowTests.makeFactory(options, 800, 120); + f.Stave() + .addClef('bass', 'small') + .addEndClef('treble', 'small') + .addEndClef('treble', 'small', '8va') + .addEndClef('treble', 'small', '8vb') + .addEndClef('alto', 'small') + .addEndClef('tenor', 'small') + .addEndClef('soprano', 'small') + .addEndClef('bass', 'small') + .addEndClef('bass', 'small', '8vb') + .addEndClef('mezzo-soprano', 'small') + .addEndClef('baritone-c', 'small') + .addEndClef('baritone-f', 'small') + .addEndClef('subbass', 'small') + .addEndClef('percussion', 'small') + .addEndClef('french', 'small'); + f.draw(); + options.assert.ok(true, 'all pass'); +} +function drawClefChange(options) { + const f = VexFlowTests.makeFactory(options, 800, 180); + const stave = f.Stave().addClef('treble'); + const notes = [ + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), + f.ClefNote({ type: 'alto', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'alto' }), + f.ClefNote({ type: 'tenor', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'tenor' }), + f.ClefNote({ type: 'soprano', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'soprano' }), + f.ClefNote({ type: 'bass', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'bass' }), + f.ClefNote({ type: 'mezzo-soprano', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'mezzo-soprano' }), + f.ClefNote({ type: 'baritone-c', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'baritone-c' }), + f.ClefNote({ type: 'baritone-f', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'baritone-f' }), + f.ClefNote({ type: 'subbass', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'subbass' }), + f.ClefNote({ type: 'french', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'french' }), + f.ClefNote({ type: 'treble', options: { size: 'small', annotation: '8vb' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble', octave_shift: -1 }), + f.ClefNote({ type: 'treble', options: { size: 'small', annotation: '8va' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble', octave_shift: 1 }), + ]; + const voice = f.Voice({ time: '12/4' }).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(ClefTests); +export { ClefTests }; diff --git a/build/esm/tests/crossbeam_tests.js b/build/esm/tests/crossbeam_tests.js new file mode 100644 index 0000000000..18bd75d14a --- /dev/null +++ b/build/esm/tests/crossbeam_tests.js @@ -0,0 +1,306 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Stave } from '../src/stave.js'; +const CrossBeamTests = { + Start() { + QUnit.module('CrossBeam'); + const run = VexFlowTests.runTests; + const crossStaveTests = []; + crossStaveTests.push({ + title: 'Single clef mixed 1', + time: '3/4', + voices: [ + { + notes: [{ notestring: 'g4/16, f4/16, a6/16, g6/16, b4/4/r, g6/8, g4/8 ', clef: 'treble' }], + stavemask: [0, 0, 0, 0, 0, 0, 0], + beammask: [1, 1, -1, -1, 0, -1, 1], + clef: 'treble', + }, + ], + }); + crossStaveTests.push({ + title: 'Single clef mixed 2', + time: '3/4', + voices: [ + { + notes: [{ notestring: 'g4/16, f6/16, a4/16, g6/16, b4/4/r, g6/8, g4/8 ', clef: 'treble' }], + stavemask: [0, 0, 0, 0, 0, 0, 0], + beammask: [1, -1, 1, -1, 0, -1, 1], + clef: 'treble', + }, + ], + }); + crossStaveTests.push({ + title: 'Mixed clef voice middle', + time: '2/4', + voices: [ + { + notes: [{ notestring: 'e#5/4, b4/16/r, b4/16, d5/16., c5/32 ', clef: 'treble' }], + stavemask: [0, 0, 0, 0, 0], + beammask: [0, 0, 1, 1, 1], + clef: 'treble', + }, + { + notes: [ + { notestring: 'C3/16, B3/16, C4/16', clef: 'bass' }, + { notestring: 'E#4/16', clef: 'treble' }, + { notestring: 'C4/4', clef: 'bass' }, + ], + stavemask: [1, 1, 1, 0, 1], + beammask: [1, 1, 1, -1, 0], + clef: 'bass', + }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam up1)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 1, 1, 1, 1], + stavemask: [0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam up2)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, 1, 1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam up3)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, 1, 1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam up4)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, 1, 1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam down1)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, -1, -1, -1, -1], + stavemask: [0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam down2)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, -1, -1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam down3)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, -1, -1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam down4)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, -1, -1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam middle1)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, -1, -1, 1, 1], + stavemask: [0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam middle2)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam middle3)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam middle4)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.forEach((cst) => { + run(cst.title, crossClef, cst); + }); + }, +}; +function crossClef(options) { + const f = VexFlowTests.makeFactory(options, 400 + Stave.defaultPadding, 250); + f.getContext().scale(0.8, 0.8); + const score = f.EasyScore(); + const system = f.System({ + details: { softmaxFactor: 100 }, + autoWidth: true, + debugFormatter: false, + }); + const testdata = options.params; + const voicedata = testdata.voices; + const stavemap = []; + for (let i = 0; i < voicedata.length; ++i) { + const clef = voicedata[i].clef; + stavemap.push(system.addStave({ voices: [] }).addClef(clef).addTimeSignature(testdata.time)); + } + for (let i = 0; i < voicedata.length; ++i) { + const stavemask = voicedata[i].stavemask; + let scoreNotes = []; + const voicenotes = voicedata[i].notes; + for (let k = 0; k < voicenotes.length; ++k) { + scoreNotes = scoreNotes.concat(score.notes(voicenotes[k].notestring, { clef: voicenotes[k].clef })); + } + const beammask = voicedata[i].beammask; + let curGroup = []; + const beamGroups = []; + for (let j = 0; j < scoreNotes.length; ++j) { + const note = scoreNotes[j]; + note.setStave(stavemap[stavemask[j]]); + if (beammask[j] !== 0) { + note.setStemDirection(beammask[j]); + curGroup.push(note); + } + else { + if (curGroup.length) { + beamGroups.push(curGroup); + curGroup = []; + } + } + } + if (curGroup.length) { + beamGroups.push(curGroup); + } + beamGroups.forEach((bg) => { + score.beam(bg); + }); + if (scoreNotes.length > 0) { + const voice = score.voice(scoreNotes, { time: testdata.time }); + system.addVoices([voice]); + } + } + f.draw(); + options.assert.ok(true); +} +VexFlowTests.register(CrossBeamTests); +export { CrossBeamTests }; diff --git a/build/esm/tests/curve_tests.js b/build/esm/tests/curve_tests.js new file mode 100644 index 0000000000..0986bc95c4 --- /dev/null +++ b/build/esm/tests/curve_tests.js @@ -0,0 +1,118 @@ +import { concat, VexFlowTests } from './vexflow_test_helpers.js'; +import { CurvePosition } from '../src/curve.js'; +const CurveTests = { + Start() { + QUnit.module('Curve'); + const run = VexFlowTests.runTests; + run('Simple Curve', simple); + run('Rounded Curve', rounded); + run('Thick Thin Curves', thickThin); + run('Top Curve', top); + }, +}; +function createTest(noteGroup1, noteGroup2, setupCurves) { + return (options) => { + const factory = VexFlowTests.makeFactory(options, 350, 200); + const stave = factory.Stave({ y: 50 }); + const score = factory.EasyScore(); + const staveNotes = [ + score.beam(score.notes(...noteGroup1)), + score.beam(score.notes(...noteGroup2)), + ].reduce(concat); + setupCurves(factory, staveNotes); + const voices = [score.voice(staveNotes, { time: '4/4' })]; + factory.Formatter().joinVoices(voices).formatToStave(voices, stave); + factory.draw(); + options.assert.ok('Simple Curve'); + }; +} +const simple = createTest(['c4/8, f5, d5, g5', { stem: 'up' }], ['d6/8, f5, d5, g5', { stem: 'down' }], (f, notes) => { + f.Curve({ + from: notes[0], + to: notes[3], + options: { + cps: [ + { x: 0, y: 10 }, + { x: 0, y: 50 }, + ], + }, + }); + f.Curve({ + from: notes[4], + to: notes[7], + options: { + cps: [ + { x: 0, y: 10 }, + { x: 0, y: 20 }, + ], + }, + }); +}); +const rounded = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], ['d5/8, d6, d6, g5', { stem: 'down' }], (f, notes) => { + f.Curve({ + from: notes[0], + to: notes[3], + options: { + x_shift: -10, + y_shift: 30, + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 50 }, + ], + }, + }); + f.Curve({ + from: notes[4], + to: notes[7], + options: { + cps: [ + { x: 0, y: 50 }, + { x: 0, y: 50 }, + ], + }, + }); +}); +const thickThin = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], ['d5/8, d6, d6, g5', { stem: 'down' }], (f, notes) => { + f.Curve({ + from: notes[0], + to: notes[3], + options: { + thickness: 10, + x_shift: -10, + y_shift: 30, + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 50 }, + ], + }, + }); + f.Curve({ + from: notes[4], + to: notes[7], + options: { + thickness: 0, + cps: [ + { x: 0, y: 50 }, + { x: 0, y: 50 }, + ], + }, + }); +}); +const top = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], ['d5/8, d6, d6, g5', { stem: 'down' }], (f, notes) => { + f.Curve({ + from: notes[0], + to: notes[7], + options: { + x_shift: -3, + y_shift: 10, + position: CurvePosition.NEAR_TOP, + position_end: CurvePosition.NEAR_HEAD, + cps: [ + { x: 0, y: 20 }, + { x: 40, y: 80 }, + ], + }, + }); +}); +VexFlowTests.register(CurveTests); +export { CurveTests }; diff --git a/build/esm/tests/dot_tests.js b/build/esm/tests/dot_tests.js new file mode 100644 index 0000000000..56f805ad37 --- /dev/null +++ b/build/esm/tests/dot_tests.js @@ -0,0 +1,119 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Beam } from '../src/beam.js'; +import { Dot } from '../src/dot.js'; +import { Formatter } from '../src/formatter.js'; +import { ModifierContext } from '../src/modifiercontext.js'; +import { Note } from '../src/note.js'; +import { Stave } from '../src/stave.js'; +import { StaveNote } from '../src/stavenote.js'; +import { TickContext } from '../src/tickcontext.js'; +import { Voice } from '../src/voice.js'; +const DotTests = { + Start() { + QUnit.module('Dot'); + const run = VexFlowTests.runTests; + run('Basic', basic); + run('Multi Voice', multiVoice); + }, +}; +function showOneNote(note1, stave, ctx, x) { + const modifierContext = new ModifierContext(); + note1.setStave(stave).addToModifierContext(modifierContext); + new TickContext().addTickable(note1).preFormat().setX(x); + note1.setContext(ctx).draw(); + Note.plotMetrics(ctx, note1, 140); +} +function basic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 1000, 240); + const stave = new Stave(10, 10, 975); + stave.setContext(ctx); + stave.draw(); + const notes = [ + new StaveNote({ keys: ['c/4', 'e/4', 'a/4', 'b/4'], duration: 'w' }), + new StaveNote({ keys: ['a/4', 'b/4', 'c/5'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['g/4', 'a/4', 'b/4'], duration: '4', stem_direction: -1 }), + new StaveNote({ keys: ['e/4', 'f/4', 'b/4', 'c/5'], duration: '4' }), + new StaveNote({ + keys: ['g/4', 'a/4', 'd/5', 'e/5', 'g/5'], + duration: '4', + stem_direction: -1, + }), + new StaveNote({ keys: ['g/4', 'b/4', 'd/5', 'e/5'], duration: '4', stem_direction: -1 }), + new StaveNote({ keys: ['e/4', 'g/4', 'b/4', 'c/5'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }), + new StaveNote({ + keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], + duration: '16', + stem_direction: -1, + }), + new StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16', stem_direction: 1 }), + new StaveNote({ + keys: ['e/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'f/5'], + duration: '16', + stem_direction: 1, + }), + new StaveNote({ + keys: ['e/4', 'g/4', 'a/4', 'b/4', 'c/5'], + duration: '16', + stem_direction: 1, + }), + new StaveNote({ keys: ['e/4', 'a/4', 'b/4', 'c/5'], duration: '16', stem_direction: 1 }), + ]; + Dot.buildAndAttach(notes, { all: true }); + Dot.buildAndAttach([notes[7], notes[8], notes[9]], { all: true }); + Dot.buildAndAttach([notes[8], notes[9]], { all: true }); + const beam = new Beam(notes.slice(notes.length - 2)); + for (let i = 0; i < notes.length; i++) { + showOneNote(notes[i], stave, ctx, 30 + i * 65); + const dots = notes[i].getModifiersByType('Dot'); + options.assert.ok(dots.length > 0, 'Note ' + i + ' has dots'); + for (let j = 0; j < dots.length; ++j) { + options.assert.ok(dots[j].getWidth() > 0, 'Dot ' + j + ' has width set'); + } + } + beam.setContext(ctx).draw(); + VexFlowTests.plotLegendForNoteWidth(ctx, 890, 140); + options.assert.ok(true, 'Full Dot'); +} +function multiVoice(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 750, 300); + const stave = new Stave(30, 45, 700).setContext(ctx).draw(); + const notes1 = [ + new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '2', stem_direction: -1 }), + new StaveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: '2', stem_direction: -1 }), + new StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '2', stem_direction: -1 }), + new StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '8', stem_direction: -1 }), + new StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '8', stem_direction: -1 }), + ]; + Dot.buildAndAttach([notes1[0], notes1[2], notes1[3], notes1[4]], { all: true }); + Dot.buildAndAttach([notes1[0], notes1[2], notes1[3], notes1[4]], { all: true }); + Dot.buildAndAttach([notes1[1]], { index: 0 }); + Dot.buildAndAttach([notes1[1]], { index: 0 }); + Dot.buildAndAttach([notes1[1]], { index: 1 }); + Dot.buildAndAttach([notes1[1]], { index: 1 }); + Dot.buildAndAttach([notes1[1]], { index: 2 }); + Dot.buildAndAttach([notes1[1]], { index: 2 }); + Dot.buildAndAttach([notes1[1]], { index: 2 }); + Dot.buildAndAttach([notes1[2], notes1[3], notes1[4]]); + const notes2 = [ + new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '2', stem_direction: 1 }), + new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['d/5', 'g/5', 'a/5', 'b/5'], duration: '8', stem_direction: 1 }), + new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '8', stem_direction: 1 }), + ]; + Dot.buildAndAttach(notes2, { all: true }); + Dot.buildAndAttach([notes2[1]], { all: true }); + const voice1 = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes1); + const voice2 = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes2); + const formatter = new Formatter().joinVoices([voice1, voice2]); + formatter.format([voice1, voice2], 700); + voice1.draw(ctx, stave); + voice2.draw(ctx, stave); + notes1.forEach((note) => Note.plotMetrics(ctx, note, 190)); + notes2.forEach((note) => Note.plotMetrics(ctx, note, 20)); + VexFlowTests.plotLegendForNoteWidth(ctx, 620, 220); + options.assert.ok(true, 'Full Dot'); +} +VexFlowTests.register(DotTests); +export { DotTests }; diff --git a/build/esm/tests/easyscore_tests.js b/build/esm/tests/easyscore_tests.js new file mode 100644 index 0000000000..2985d702ed --- /dev/null +++ b/build/esm/tests/easyscore_tests.js @@ -0,0 +1,488 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Articulation } from '../src/articulation.js'; +import { EasyScore } from '../src/easyscore.js'; +import { FretHandFinger } from '../src/frethandfinger.js'; +import { Modifier } from '../src/modifier.js'; +import { Parenthesis } from '../src/parenthesis.js'; +import { StaveConnector } from '../src/staveconnector.js'; +import { Stem } from '../src/stem.js'; +import { Tuplet } from '../src/tuplet.js'; +const EasyScoreTests = { + Start() { + QUnit.module('EasyScore'); + QUnit.test('Basic', basic); + QUnit.test('Accidentals', accidentals); + QUnit.test('Durations', durations); + QUnit.test('Chords', chords); + QUnit.test('Dots', dots); + QUnit.test('Types', types); + QUnit.test('Options', options); + const run = VexFlowTests.runTests; + run('Draw Basic', drawBasicTest); + run('Draw Different KeySignature', drawDiffKeysig); + run('Draw Basic Muted', drawBasicMutedTest); + run('Draw Basic Harmonic', drawBasicHarmonicTest); + run('Draw Basic Slash', drawBasicSlashTest); + run('Draw Ghostnote Basic', drawGhostBasicTest); + run('Draw Ghostnote Dotted', drawGhostDottedTest); + run('Draw Parenthesised', drawParenthesisedTest); + run('Draw Accidentals', drawAccidentalsTest); + run('Draw Beams', drawBeamsTest); + run('Draw Tuplets', drawTupletsTest); + run('Draw Dots', drawDotsTest); + run('Draw Options', drawOptionsTest); + run('Draw Fingerings', drawFingeringsTest); + run('Keys', keys); + }, +}; +function createShortcuts(score) { + return { + voice: score.voice.bind(score), + notes: score.notes.bind(score), + beam: score.beam.bind(score), + tuplet: score.tuplet.bind(score), + }; +} +function basic(assert) { + const score = new EasyScore(); + const mustPass = ['c4', 'c#4', 'c4/r', 'c#5', 'c3/m', 'c3//m', 'c3//h', 'c3/s', 'c3//s', 'c3/g', 'c3//g']; + const mustFail = ['', '()', '7', '(c#4 e5 g6']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function accidentals(assert) { + const score = new EasyScore(); + const mustPass = [ + 'c3', + 'c##3, cb3', + 'Cn3', + 'f3//m', + '(c##3 cbb3 cn3), cb3', + 'cbbs7', + 'cbb7', + 'cbss7', + 'cbs7', + 'cb7', + 'cdb7', + 'cd7', + 'c##7', + 'c#7', + 'cn7', + 'c++-7', + 'c++7', + 'c+-7', + 'c+7', + '(cbs3 bbs3 dbs3), ebs3', + '(cd7 cbb3 cn3), cb3', + 'co7', + 'ck7', + ]; + const mustFail = [ + 'ct3', + 'cdbb7', + '(cq cbb3 cn3), cb3', + '(cdd7 cbb3 cn3), cb3', + 'cbbbs7', + 'cbbss7', + 'cbsss7', + 'csbs7', + 'cddb7', + 'cddbb7', + 'cdd7', + 'c##b7', + 'c#bs7', + 'cnb#7', + 'c+#+b-d7', + 'c+--7', + 'c++--7', + 'c+++7', + 'cbk7', + 'cok7', + 'cko7', + 'c#s7', + ]; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function durations(assert) { + const score = new EasyScore(); + const mustPass = ['c3/4', 'c##3/w, cb3', 'c##3/w, cb3/q', 'c##3/q, cb3/32', '(c##3 cbb3 cn3), cb3']; + const mustFail = ['Cn3/]', '/', '(cq cbb3 cn3), cb3', '(cdd7 cbb3 cn3), cb3']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function chords(assert) { + const score = new EasyScore(); + const mustPass = [ + '(c5)', + '(c3 e0 g9)', + '(c##4 cbb4 cn4)/w, (c#5 cb2 a3)/32', + '(d##4 cbb4 cn4)/w/r, (c#5 cb2 a3)', + '(c##4 cbb4 cn4)/4, (c#5 cb2 a3)', + '(c##4 cbb4 cn4)/m, (c#5 cb2 a3)', + ]; + const mustFail = ['(c)']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function dots(assert) { + const score = new EasyScore(); + const mustPass = [ + 'c3/4.', + 'c##3/w.., cb3', + 'f##3/s, cb3/q...', + 'c##3/q, cb3/32', + '(c##3 cbb3 cn3)., cb3', + '(c5).', + '(c##4 cbb4 cn4)/w.., (c#5 cb2 a3)/32', + ]; + const mustFail = ['.', 'c.#', 'c#4./4']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function types(assert) { + const score = new EasyScore(); + const mustPass = ['c3/4/m.', 'c##3//r.., cb3', 'c##3/m.., cb3', 'c##3/r.., cb3', 'd##3/w/s, cb3/q...', 'Fb4']; + const mustFail = ['c4/q/U', '(c##4, cbb4 cn4)/w.., (c#5 cb2 a3)/32', 'z#3']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function options(assert) { + const score = new EasyScore(); + const mustPass = [ + 'c3/4.[foo="bar"]', + 'c##3/w.., cb3[id="blah"]', + 'c##3/q, cb3/32', + '(c##3 cbb3 cn3).[blah="bod4o"], cb3', + '(c5)[fooooo="booo"]', + 'c#5[id="foobar"]', + ]; + const mustFail = ['.[', 'f##3/w[], cb3/q...']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function drawBasicTest(options) { + const f = VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })), + voice(notes('c#5/h., c5/q', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c#3/q, cn3/q, bb3/q, d##3/q', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawDiffKeysig(options) { + const f = VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })), + voice(notes('c5/h., c5/q', { stem: 'up' })), + ], + }) + .addClef('treble') + .addTimeSignature('4/4') + .addKeySignature('D'); + system + .addStave({ + voices: [voice(notes('c#3/q, cn3/q, bb3/q, d##3/q', { clef: 'bass' }))], + }) + .addClef('bass') + .addTimeSignature('4/4'); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawBasicMutedTest(options) { + const f = VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q/m, c4/q/m, c4/q/r, c4/q/m', { stem: 'down' })), + voice(notes('c#5/h/m., c5/q/m', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c#3/q/m, cn3/q/m, bb3/q/m, d##3/q/m', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawBasicHarmonicTest(options) { + const f = VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q/h, c4/q/h, c4/q/r, c4/q/h', { stem: 'down' })), + voice(notes('c#5/h/h., c5/q/h', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c#3/q/h, cn3/q/h, bb3/q/h, d##3/q/h', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawBasicSlashTest(options) { + const f = VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q/s, c4/q/s, c4/q/r, c4/q/s', { stem: 'down' })), + voice(notes('c#5/h/s., c5/q/s', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c#3/q/s, cn3/q/s, bb3/q/s, d##3/q/s', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawGhostBasicTest(options) { + const f = VexFlowTests.makeFactory(options, 550); + const score = f.EasyScore(); + const system = f.System(); + system.addStave({ + voices: [ + score.voice([ + ...score.notes('f#5/4, f5, db5, c5', { stem: 'up' }), + ...score.beam(score.notes('c5/8, d5, fn5, e5', { stem: 'up' })), + ...score.beam(score.notes('d5, c5', { stem: 'up' })), + ], { time: '7/4' }), + score.voice(score.notes('c4/h/g, f4/4, c4/4/g, e4/4, c4/8/g, d##4/8, c4/8, c4/8', { stem: 'down' }), { + time: '7/4', + }), + ], + }); + f.draw(); + options.assert.expect(0); +} +function drawGhostDottedTest(options) { + const f = VexFlowTests.makeFactory(options, 550); + const score = f.EasyScore(); + const system = f.System(); + system.addStave({ + voices: [ + score.voice([ + ...score.notes('c4/4/g., fbb5/8, d5/4', { stem: 'up' }), + ...score.beam(score.notes('c5/8, c#5/16, d5/16', { stem: 'up' })), + ...score.notes('c4/2/g.., fn5/8', { stem: 'up' }), + ], { time: '8/4' }), + score.voice([ + ...score.notes('f#4/4', { stem: 'down' }), + ...score.beam(score.notes('e4/8, d4/8', { stem: 'down' })), + ...score.notes('c4/4/g.., cb4/16, c#4/h, d4/4', { stem: 'down' }), + ...score.beam(score.notes('fn4/8, e4/8', { stem: 'down' })), + ], { time: '8/4' }), + ], + }); + f.draw(); + options.assert.expect(0); +} +function drawParenthesisedTest(options) { + const f = VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + const notes1 = notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' }); + Parenthesis.buildAndAttach([notes1[0], notes1[3]]); + const notes2 = notes('c#5/h., c5/q', { stem: 'down' }); + Parenthesis.buildAndAttach([notes2[0], notes2[1]]); + system + .addStave({ + voices: [voice(notes1), voice(notes2)], + }) + .addClef('treble'); + const notes3 = notes('c#3/q, cn3/q, bb3/q, d##3/q', { stem: 'down' }); + Parenthesis.buildAndAttach(notes3); + system + .addStave({ + voices: [voice(notes3)], + }) + .addClef('bass'); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawAccidentalsTest(options) { + const f = VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(cbbs4 ebb4 gbss4)/q, cbs4/q, cdb4/q/r, cd4/q', { stem: 'down' })), + voice(notes('c++-5/h., c++5/q', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c+-3/q, c+3/q, bb3/q, d##3/q', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawBeamsTest(options) { + const f = VexFlowTests.makeFactory(options, 600, 250); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes, beam } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(c4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })), + voice([...notes('c#5/h.', { stem: 'up' }), ...beam(notes('c5/8, c5/8', { stem: 'up' }))]), + ], + }) + .addClef('treble'); + f.draw(); + options.assert.expect(0); +} +function drawTupletsTest(options) { + const f = VexFlowTests.makeFactory(options, 600, 250); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes, tuplet, beam } = createShortcuts(score); + const v1_tuplet = tuplet(notes('(c4 e4 g4)/q, cbb4/q, c4/q', { stem: 'down' }), { + location: Tuplet.LOCATION_BOTTOM, + }); + const v1_halfNote = notes('c4/h', { stem: 'down' }); + const v1 = voice([...v1_tuplet, ...v1_halfNote]); + const v2_halfNote = notes('c#5/h.', { stem: 'up' }); + const v2_tuplet = tuplet(beam(notes('cb5/8, cn5/8, c5/8', { stem: 'up' }))); + const v2 = voice([...v2_halfNote, ...v2_tuplet]); + system.addStave({ voices: [v1, v2] }).addClef('treble'); + f.draw(); + options.assert.expect(0); +} +function drawDotsTest(options) { + const f = VexFlowTests.makeFactory(options, 600, 250); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [voice(notes('(c4 e4 g4)/8., (c4 e4 g4)/8.., (c4 e4 g4)/8..., (c4 e4 g4)/8...., (c4 e4 g4)/16...'))], + }) + .addClef('treble'); + f.draw(); + options.assert.expect(0); +} +function drawOptionsTest(options) { + const f = VexFlowTests.makeFactory(options, 500, 200); + const score = f.EasyScore(); + const system = f.System(); + const notes = score.notes('B4/h[id="foobar", class="red,bold", stem="up", articulations="staccato.below,tenuto"], B4/q[articulations="accent.above"], B4/q[stem="down"]'); + system.addStave({ voices: [score.voice(notes)] }); + f.draw(); + const note0 = notes[0]; + const note1 = notes[1]; + const note0_modifier0 = note0.getModifiers()[0]; + const note0_modifier1 = note0.getModifiers()[1]; + const note1_modifier0 = note1.getModifiers()[0]; + options.assert.equal(note0.getAttribute('id'), 'foobar'); + options.assert.ok(note0.hasClass('red')); + options.assert.ok(note0.hasClass('bold')); + options.assert.equal(note0_modifier0.getCategory(), Articulation.CATEGORY); + options.assert.equal(note0_modifier0.type, 'a.'); + options.assert.equal(note0_modifier0.getPosition(), Modifier.Position.BELOW); + options.assert.equal(note0_modifier1.getCategory(), Articulation.CATEGORY); + options.assert.equal(note0_modifier1.type, 'a-'); + options.assert.equal(note0_modifier1.getPosition(), Modifier.Position.ABOVE); + options.assert.equal(note0.getStemDirection(), Stem.UP); + options.assert.equal(note1_modifier0.getCategory(), Articulation.CATEGORY); + options.assert.equal(note1_modifier0.type, 'a>'); + options.assert.equal(note1_modifier0.getPosition(), Modifier.Position.ABOVE); + options.assert.equal(notes[2].getStemDirection(), Stem.DOWN); +} +function drawFingeringsTest(options) { + const f = VexFlowTests.makeFactory(options, 500, 200); + const score = f.EasyScore(); + const system = f.System(); + const notes = score.notes('C4/q[fingerings="1"], E4[fingerings="3.above"], G4[fingerings="5.below"], (C4 E4 G4)[fingerings="1,3,5"]'); + system.addStave({ voices: [score.voice(notes)] }); + f.draw(); + const note0_modifier0 = notes[0].getModifiers()[0]; + options.assert.equal(note0_modifier0.getCategory(), FretHandFinger.CATEGORY); + options.assert.equal(note0_modifier0.getFretHandFinger(), '1'); + options.assert.equal(note0_modifier0.getPosition(), Modifier.Position.LEFT); + const note1_modifier0 = notes[1].getModifiers()[0]; + options.assert.equal(note1_modifier0.getCategory(), FretHandFinger.CATEGORY); + options.assert.equal(note1_modifier0.getFretHandFinger(), '3'); + options.assert.equal(note1_modifier0.getPosition(), Modifier.Position.ABOVE); + const note2_modifier0 = notes[2].getModifiers()[0]; + options.assert.equal(note2_modifier0.getCategory(), FretHandFinger.CATEGORY); + options.assert.equal(note2_modifier0.getFretHandFinger(), '5'); + options.assert.equal(note2_modifier0.getPosition(), Modifier.Position.BELOW); + const note3_modifiers = notes[3].getModifiers(); + const note3_modifier0 = note3_modifiers[0]; + const note3_modifier1 = note3_modifiers[1]; + const note3_modifier2 = note3_modifiers[2]; + options.assert.equal(note3_modifier0.getCategory(), FretHandFinger.CATEGORY); + options.assert.equal(note3_modifier0.getFretHandFinger(), '1'); + options.assert.equal(note3_modifier0.getPosition(), Modifier.Position.LEFT); + options.assert.equal(note3_modifier1.getCategory(), FretHandFinger.CATEGORY); + options.assert.equal(note3_modifier1.getFretHandFinger(), '3'); + options.assert.equal(note3_modifier1.getPosition(), Modifier.Position.LEFT); + options.assert.equal(note3_modifier2.getCategory(), FretHandFinger.CATEGORY); + options.assert.equal(note3_modifier2.getFretHandFinger(), '5'); + options.assert.equal(note3_modifier2.getPosition(), Modifier.Position.LEFT); +} +function keys(options) { + const f = VexFlowTests.makeFactory(options, 700, 200); + const score = f.EasyScore(); + const system = f.System(); + const notes = score.notes('c#3/q, c##3, cb3, cbb3, cn3, c3, cbbs3, cbss3, cbs3, cdb3, cd3, c++-3, c++3, c+-3, c+3, co3, ck3', { clef: 'bass' }); + system.addStave({ voices: [f.Voice().setStrict(false).addTickables(notes)] }).addClef('bass'); + f.draw(); + options.assert.equal(notes[0].keys, 'c#/3'); + options.assert.equal(notes[1].keys, 'c##/3'); + options.assert.equal(notes[2].keys, 'cb/3'); + options.assert.equal(notes[3].keys, 'cbb/3'); + options.assert.equal(notes[4].keys, 'cn/3'); + for (let i = 5; i < notes.length; i++) { + options.assert.equal(notes[i].keys, 'c/3'); + } +} +VexFlowTests.register(EasyScoreTests); +export { EasyScoreTests }; diff --git a/build/esm/tests/factory_tests.js b/build/esm/tests/factory_tests.js new file mode 100644 index 0000000000..58fed29d65 --- /dev/null +++ b/build/esm/tests/factory_tests.js @@ -0,0 +1,44 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Factory } from '../src/factory.js'; +import { Barline } from '../src/stavebarline.js'; +const FactoryTests = { + Start() { + QUnit.module('Factory'); + QUnit.test('Defaults', defaults); + const run = VexFlowTests.runTests; + run('Draw', draw); + run('Draw Tab (repeat barlines must be aligned)', drawTab); + }, +}; +function defaults(assert) { + assert.throws(() => new Factory({ renderer: { elementId: '', width: 700, height: 500 } }), 'Empty string for elementId throws an exception.'); + const factory = new Factory({ + renderer: { elementId: null, width: 700, height: 500 }, + }); + const options = factory.options; + assert.equal(options.renderer.width, 700); + assert.equal(options.renderer.height, 500); + assert.equal(options.renderer.elementId, null); + assert.equal(options.stave.space, 10); +} +function draw(options) { + const f = Factory.newFromElementId(options.elementId); + f.Stave().setClef('treble'); + f.draw(); + options.assert.expect(0); +} +function drawTab(options) { + const factory = VexFlowTests.makeFactory(options, 500, 400); + const system = factory.System({ width: 500 }); + const stave = factory.Stave().setClef('treble').setKeySignature('C#').setBegBarType(Barline.type.REPEAT_BEGIN); + const voices = [factory.Voice().addTickables([factory.GhostNote({ duration: 'w' })])]; + system.addStave({ stave, voices }); + const tabStave = factory.TabStave().setClef('tab').setBegBarType(Barline.type.REPEAT_BEGIN); + const tabVoices = [factory.Voice().addTickables([factory.GhostNote({ duration: 'w' })])]; + system.addStave({ stave: tabStave, voices: tabVoices }); + factory.draw(); + options.assert.equal(stave.getModifiers()[0].getX(), tabStave.getModifiers()[0].getX()); + options.assert.expect(1); +} +VexFlowTests.register(FactoryTests); +export { FactoryTests }; diff --git a/build/esm/tests/font_tests.js b/build/esm/tests/font_tests.js new file mode 100644 index 0000000000..17f138869c --- /dev/null +++ b/build/esm/tests/font_tests.js @@ -0,0 +1,135 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Accidental } from '../src/accidental.js'; +import { Bend } from '../src/bend.js'; +import { CanvasContext } from '../src/canvascontext.js'; +import { Element } from '../src/element.js'; +import { Flow } from '../src/flow.js'; +import { Font, FontStyle, FontWeight } from '../src/font.js'; +import { PedalMarking } from '../src/pedalmarking.js'; +import { StaveNote } from '../src/stavenote.js'; +import { TextBracket } from '../src/textbracket.js'; +import { TextNote } from '../src/textnote.js'; +import { Voice } from '../src/voice.js'; +const FontTests = { + Start() { + QUnit.module('Font'); + QUnit.test('setFont', setFont); + QUnit.test('Parsing', fontParsing); + QUnit.test('Sizes', fontSizes); + const run = VexFlowTests.runTests; + run('Set Text Font to Georgia', setTextFontToGeorgia); + run('Set Music Font to Petaluma', setMusicFontToPetaluma); + }, +}; +function setFont(assert) { + const canvas = document.createElement('canvas'); + canvas.width = 800; + canvas.height = 400; + const ctx = new CanvasContext(canvas.getContext('2d')); + ctx.setFont('PetalumaScript', '100px', 'normal', 'italic'); + assert.equal(ctx.font, 'italic 100px PetalumaScript'); + const voice = new Voice(); + assert.propEqual(voice.fontInfo, Element.TEXT_FONT); + voice.setFont('bold 32pt Arial'); + const fontInfo = voice.fontInfo; + assert.equal(fontInfo === null || fontInfo === void 0 ? void 0 : fontInfo.size, '32pt'); + const flat = new Accidental('b'); + assert.equal(flat.textFont, undefined); + flat.setFont(undefined, undefined, undefined, FontStyle.ITALIC); + assert.equal(flat.getFont(), 'italic 10pt Arial, sans-serif'); + flat.setFont(undefined, undefined, FontWeight.BOLD, undefined); + assert.equal(flat.getFont(), 'bold 10pt Arial, sans-serif'); + flat.setFont(undefined, undefined, FontWeight.BOLD, FontStyle.ITALIC); + assert.equal(flat.getFont(), 'italic bold 10pt Arial, sans-serif'); + flat.setFont(undefined, undefined, FontWeight.BOLD, 'oblique'); + assert.equal(flat.getFont(), 'oblique bold 10pt Arial, sans-serif'); + flat.setFont(undefined, undefined, 'normal', ''); + assert.equal(flat.getFont(), '10pt Arial, sans-serif'); +} +function fontParsing(assert) { + const b = new Bend('1/2', true); + const bFont = b.fontInfo; + assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.family, Font.SANS_SERIF); + assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.size, Font.SIZE); + assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.weight, FontWeight.NORMAL); + assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.style, FontStyle.NORMAL); + const f1 = 'Roboto Slab, serif'; + const t = new TextNote({ duration: '4', font: { family: f1 } }); + assert.equal(f1, t.fontInfo.family); + const n1 = new StaveNote({ keys: ['e/5'], duration: '4' }); + const n2 = new StaveNote({ keys: ['c/5'], duration: '4' }); + const tb = new TextBracket({ start: n1, stop: n2 }); + const f2 = tb.fontInfo; + assert.equal(f2 === null || f2 === void 0 ? void 0 : f2.size, 15); + assert.equal(f2 === null || f2 === void 0 ? void 0 : f2.style, FontStyle.ITALIC); + const f3 = Font.fromCSSString(`bold 1.5em/3 "Lucida Sans Typewriter", "Lucida Console", Consolas, monospace`); + const f3SizeInPx = Font.convertSizeToPixelValue(f3.size); + assert.equal(f3SizeInPx, 24); +} +function fontSizes(assert) { + { + const size = '17px'; + const sizeInEm = Font.convertSizeToPixelValue(size) / Font.scaleToPxFrom.em; + assert.equal(sizeInEm, 1.0625); + } + { + const size = '2em'; + const sizeInPx = Font.convertSizeToPixelValue(size); + assert.equal(sizeInPx, 32); + } + { + const pedal = new PedalMarking([]); + assert.equal(pedal.getFont(), 'italic bold 12pt Times New Roman, serif'); + assert.equal(pedal.fontSizeInPoints, 12); + assert.equal(pedal.fontSizeInPixels, 16); + const doubledSizePx = pedal.fontSizeInPixels * 2; + assert.equal(doubledSizePx, 32); + const doubledSizePt = Font.scaleSize(pedal.fontSizeInPoints, 2); + assert.equal(doubledSizePt, 24); + assert.equal(Font.scaleSize('1.5em', 3), '4.5em'); + } +} +function setTextFontToGeorgia(options) { + const factory = VexFlowTests.makeFactory(options, 400, 200); + const stave = factory.Stave({ y: 40 }); + const score = factory.EasyScore(); + const voice1 = score.voice([ + factory.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }), + factory.StaveNote({ keys: ['d/4', 'f/4'], stem_direction: -1, duration: 'q' }), + factory.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }), + ]); + const defaultFont = TextNote.TEXT_FONT; + TextNote.TEXT_FONT = { + family: 'Georgia, Courier New, serif', + size: 14, + weight: 'bold', + style: 'italic', + }; + const voice2 = score.voice([ + factory + .TextNote({ text: 'Here are some fun lyrics...', duration: 'w' }) + .setJustification(TextNote.Justification.LEFT), + ]); + const formatter = factory.Formatter(); + formatter.joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + factory.draw(); + TextNote.TEXT_FONT = defaultFont; + options.assert.ok(true); +} +function setMusicFontToPetaluma(options) { + Flow.setMusicFont('Petaluma'); + const factory = VexFlowTests.makeFactory(options, 400, 200); + const stave = factory.Stave({ y: 40 }); + const score = factory.EasyScore(); + const voice = score.voice([ + factory.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }), + factory.StaveNote({ keys: ['d/4', 'f/4'], stem_direction: -1, duration: 'q' }), + factory.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }), + ]); + const formatter = factory.Formatter(); + formatter.joinVoices([voice]).formatToStave([voice], stave); + factory.draw(); + options.assert.ok(true); +} +VexFlowTests.register(FontTests); +export { FontTests }; diff --git a/build/esm/tests/formatter/framestack.js b/build/esm/tests/formatter/framestack.js new file mode 100644 index 0000000000..87b85af75b --- /dev/null +++ b/build/esm/tests/formatter/framestack.js @@ -0,0 +1,61 @@ +"use strict"; +class FrameStack { + constructor(parentEl, numFrames, params) { + this.parentEl = parentEl; + this.numFrames = numFrames; + this.options = Object.assign({ prefix: 'vex-frame-', width: 700, height: 800, iterationCallback: null }, params); + this.frames = []; + this.currentFrame = 0; + document.getElementById(this.parentEl).innerHTML = ''; + for (let i = 0; i < this.numFrames; i++) { + const div = document.createElement('div'); + div.id = this.frameID(i); + div.style.position = 'absolute'; + div.style.top = 0; + div.style.left = 0; + div.style.width = `${this.options.width}px`; + div.style.height = `${this.options.height}px`; + div.style.display = 'none'; + this.frames[i] = div; + } + } + frameID(i) { + return `${this.options.prefix}${i}`; + } + install() { + this.show(0); + setTimeout(() => { + const fragment = document.createDocumentFragment(); + for (let i = 0; i < this.numFrames; i++) { + fragment.appendChild(this.frames[i]); + } + const parent = document.getElementById(this.parentEl); + parent.appendChild(fragment); + parent.style.width = `${this.options.width}px`; + parent.style.height = `${this.options.height}px`; + }, 0); + } + get(i) { + return this.frames[i]; + } + show(i) { + this.frames[this.currentFrame].style.display = 'none'; + this.frames[i].style.display = 'block'; + this.currentFrame = i; + } + start(params) { + const options = Object.assign({ start: 0, end: this.numFrames, intervalms: 100 }, params); + this.animationTimer = setInterval(() => { + const frame = this.currentFrame + 1 === this.numFrames ? 0 : this.currentFrame + 1; + this.show(frame); + if (this.options.iterationCallback) + this.options.iterationCallback(frame); + }, options.intervalms); + } + stop() { + clearInterval(this.animationTimer); + } +} +if (typeof module != 'undefined') { + module.exports = { FrameStack }; +} diff --git a/build/esm/tests/formatter/tests.js b/build/esm/tests/formatter/tests.js new file mode 100644 index 0000000000..4140ad78db --- /dev/null +++ b/build/esm/tests/formatter/tests.js @@ -0,0 +1,203 @@ +"use strict"; +const VF = Vex.Flow; +function subgroup(el, iterations, params) { + const options = Object.assign({ systemWidth: 550, debug: true }, params); + const f = new VF.Factory({ + renderer: { + elementId: el, + width: options.width, + height: options.height, + }, + }); + f.StaveNote = f.StaveNote.bind(f); + const stave1 = f.Stave({ x: 15, y: 40, width: options.systemWidth }).setClef('treble'); + const notes1 = [ + { keys: ['f/5'], stem_direction: 1, duration: '4' }, + { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' }, + ].map(f.StaveNote); + const notes2 = [ + { keys: ['c/4'], stem_direction: -1, duration: '4' }, + { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' }, + { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' }, + { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' }, + ].map(f.StaveNote); + const stave2 = f.Stave({ x: 15, y: 160, width: options.systemWidth }).setClef('bass'); + const notes3 = [ + { keys: ['e/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + { keys: ['g/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['d/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['f/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['c/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['g/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + { keys: ['d/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + { keys: ['f/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + ].map(f.StaveNote); + f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'brace' }); + f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleLeft' }); + f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleRight' }); + function addAccidental(note, acc) { + return note.addModifier(f.Accidental({ type: acc }), 0); + } + function addSubGroup(note, subNotes) { + return note.addModifier(f.NoteSubGroup({ notes: subNotes }), 0); + } + f.Beam({ notes: notes3.slice(1, 4) }); + f.Beam({ notes: notes3.slice(5) }); + addAccidental(notes1[1], '#'); + addSubGroup(notes1[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } }), f.TimeSigNote({ time: '3/4' })]); + addSubGroup(notes2[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } }), f.TimeSigNote({ time: '9/8' })]); + addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]); + addSubGroup(notes3[1], [f.ClefNote({ type: 'treble', options: { size: 'small' } })]); + addSubGroup(notes3[5], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]); + addAccidental(notes3[0], '#'); + addAccidental(notes3[3], 'b'); + addAccidental(notes3[5], '#'); + addAccidental(notes1[2], 'b'); + addAccidental(notes2[3], '#'); + const voice = f.Voice().addTickables(notes1); + const voice2 = f.Voice().addTickables(notes2); + const voice3 = f.Voice().addTickables(notes3); + const formatter = f.Formatter(); + formatter.joinVoices([voice, voice2]).joinVoices([voice3]).formatToStave([voice, voice2, voice3], stave1); + for (let i = 0; i < iterations; i++) { + formatter.tune({ alpha: 0.01 }); + } + f.draw(); + if (options.debug) { + VF.Formatter.plotDebugging(f.getContext(), formatter, stave1.getNoteStartX(), 20, 320); + } +} +function tuplets(el, iterations, params) { + const options = Object.assign({ systemWidth: 500, debug: true }, params); + const f = new VF.Factory({ + renderer: { + elementId: el, + width: options.width, + height: options.height, + }, + }); + const system = f.System({ + x: 50, + width: options.systemWidth, + debugFormatter: options.debug, + formatIterations: iterations, + }); + const score = f.EasyScore(); + const newVoice = function (notes) { + return score.voice(notes, { time: '1/4' }); + }; + const newStave = function (voice) { + return system + .addStave({ voices: [voice], debugNoteMetrics: options.debug }) + .addClef('treble') + .addTimeSignature('1/4'); + }; + const voices = [ + score.notes('c5/8, c5'), + score.tuplet(score.notes('a4/8, a4, a4'), { notes_occupied: 2 }), + score.notes('c5/16, c5, c5, c5'), + score.tuplet(score.notes('a4/16, a4, a4, a4, a4'), { notes_occupied: 4 }), + score.tuplet(score.notes('a4/32, a4, a4, a4, a4, a4, a4'), { notes_occupied: 8 }), + ]; + voices.map(newVoice).forEach(newStave); + system.addConnector().setType(VF.StaveConnector.type.BRACKET); + f.draw(); +} +function multistave(el, iterations, params) { + const options = Object.assign({ systemWidth: 550, debug: true, justify: true, alpha: 0.1 }, params); + const f = new VF.Factory({ + renderer: { + elementId: el, + width: options.width, + height: options.height, + }, + }); + const score = f.EasyScore(); + const stave11 = f.Stave({ y: 20, width: 275 }).addTrebleGlyph().addTimeSignature('6/8'); + const notes11 = score.notes('f4/4, d4/8, g4/4, eb4/8'); + const voice11 = score.voice(notes11, { time: '6/8' }); + const stave21 = f.Stave({ y: 130, width: 275 }).addTrebleGlyph().addTimeSignature('6/8'); + const notes21 = score.notes('d4/8, d4, d4, d4, eb4, eb4'); + const voice21 = score.voice(notes21, { time: '6/8' }); + const stave31 = f.Stave({ y: 250, width: 275 }).addClef('bass').addTimeSignature('6/8'); + const notes31 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' }); + const voice31 = score.voice(notes31, { time: '6/8' }); + f.StaveConnector({ + top_stave: stave21, + bottom_stave: stave31, + type: 'brace', + }); + f.Beam({ notes: notes21.slice(0, 3) }); + f.Beam({ notes: notes21.slice(3, 6) }); + f.Beam({ notes: notes31.slice(0, 3) }); + f.Beam({ notes: notes31.slice(3, 6) }); + let formatter = f.Formatter().joinVoices([voice11]).joinVoices([voice21]).joinVoices([voice31]); + if (options.justify) { + formatter.formatToStave([voice11, voice21, voice31], stave11); + } + else { + formatter.format([voice11, voice21, voice31], 0); + } + for (let i = 0; i < iterations; i++) { + formatter.tune({ alphs: options.alpha }); + } + if (options.debug) { + VF.Formatter.plotDebugging(f.getContext(), formatter, stave11.getNoteStartX(), 20, 320); + } + const stave12 = f.Stave({ + x: stave11.width + stave11.x, + y: stave11.y, + width: stave11.width, + }); + var notes12 = score.notes('ab4/4, bb4/8, (cb5 eb5)/4[stem="down"], d5/8[stem="down"]'); + var voice12 = score.voice(notes12, { time: '6/8' }); + f.Stave({ + x: stave21.width + stave21.x, + y: stave21.y, + width: stave21.width, + }); + var notes22 = score.notes('(eb4 ab4)/4., (c4 eb4 ab4)/4, db5/8', { stem: 'up' }); + var voice22 = score.voice(notes22, { time: '6/8' }); + f.Stave({ + x: stave31.width + stave31.x, + y: stave31.y, + width: stave31.width, + }); + var notes32 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' }); + var voice32 = score.voice(notes32, { time: '6/8' }); + formatter = f.Formatter().joinVoices([voice12]).joinVoices([voice22]).joinVoices([voice32]); + if (options.justify) { + formatter.formatToStave([voice12, voice22, voice32], stave12); + } + else { + formatter.format([voice12, voice22, voice32], 0); + } + for (var j = 0; j < iterations; j++) { + formatter.tune({ alpha: options.alpha }); + } + f.Beam({ notes: notes32.slice(0, 3) }); + f.Beam({ notes: notes32.slice(3, 6) }); + f.draw(); + if (options.debug) { + VF.Formatter.plotDebugging(f.getContext(), formatter, stave12.getNoteStartX(), 20, 320); + } +} +const Tests = { + tuplets: { + options: { width: 600, height: 750, debug: true }, + fn: tuplets, + }, + subgroup: { + options: { width: 650, height: 350, debug: true }, + fn: subgroup, + }, + multistave: { + options: { width: 650, height: 350, debug: true }, + fn: multistave, + }, +}; +if (typeof module != 'undefined') { + module.exports = Tests; +} diff --git a/build/esm/tests/formatter_tests.js b/build/esm/tests/formatter_tests.js new file mode 100644 index 0000000000..e26d46f5fb --- /dev/null +++ b/build/esm/tests/formatter_tests.js @@ -0,0 +1,721 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Accidental } from '../src/accidental.js'; +import { Annotation, AnnotationVerticalJustify } from '../src/annotation.js'; +import { Articulation } from '../src/articulation.js'; +import { Beam } from '../src/beam.js'; +import { Bend } from '../src/bend.js'; +import { Dot } from '../src/dot.js'; +import { Flow } from '../src/flow.js'; +import { Font, FontWeight } from '../src/font.js'; +import { Formatter } from '../src/formatter.js'; +import { FretHandFinger } from '../src/frethandfinger.js'; +import { ModifierPosition } from '../src/modifier.js'; +import { Note } from '../src/note.js'; +import { Registry } from '../src/registry.js'; +import { Stave } from '../src/stave.js'; +import { StaveConnector } from '../src/staveconnector.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Stem } from '../src/stem.js'; +import { StringNumber } from '../src/stringnumber.js'; +import { Tables } from '../src/tables.js'; +import { Tuplet } from '../src/tuplet.js'; +import { Voice } from '../src/voice.js'; +import { MockTickable } from './mocks.js'; +const FormatterTests = { + Start() { + QUnit.module('Formatter'); + QUnit.test('TickContext Building', buildTickContexts); + const run = VexFlowTests.runTests; + run('Penultimate Note Padding', penultimateNote); + run('Whitespace and justify', rightJustify); + run('Notehead padding', noteHeadPadding); + run('Justification and alignment with accidentals', accidentalJustification); + run('Long measure taking full space', longMeasureProblems); + run('Vertical alignment - few unaligned beats', unalignedNoteDurations1); + run('Vertical alignment - many unaligned beats', unalignedNoteDurations2, { globalSoftmax: false }); + run('Vertical alignment - many unaligned beats (global softmax)', unalignedNoteDurations2, { globalSoftmax: true }); + run('Vertical alignment - many mixed elements', alignedMixedElements, { globalSoftmax: true }); + run('StaveNote - Justification', justifyStaveNotes); + run('Notes with Tab', notesWithTab); + run('Multiple Staves - Justified', multiStaves, { debug: true }); + run('Softmax', softMax); + run('Mixtime', mixTime); + run('Tight', tightNotes1); + run('Tight 2', tightNotes2); + run('Annotations', annotations); + run('Proportional Formatting - No Tuning', proportional, { debug: true, iterations: 0 }); + run('Proportional Formatting - No Justification', proportional, { justify: false, debug: true, iterations: 0 }); + run('Proportional Formatting (20 iterations)', proportional, { debug: true, iterations: 20, alpha: 0.5 }); + }, +}; +function getGlyphWidth(glyphName) { + const musicFont = Tables.currentMusicFont(); + const glyph = musicFont.getGlyphs()[glyphName]; + const widthInEm = (glyph.x_max - glyph.x_min) / musicFont.getResolution(); + return widthInEm * 38 * Font.scaleToPxFrom.pt; +} +function buildTickContexts(assert) { + function createTickable(beat) { + return new MockTickable().setTicks(beat); + } + const BEAT = (1 * Flow.RESOLUTION) / 4; + const tickables1 = [ + createTickable(BEAT).setWidth(10), + createTickable(BEAT * 2).setWidth(20), + createTickable(BEAT).setWidth(30), + ]; + const tickables2 = [ + createTickable(BEAT * 2).setWidth(10), + createTickable(BEAT).setWidth(20), + createTickable(BEAT).setWidth(30), + ]; + const voice1 = new Voice(Flow.TIME4_4); + const voice2 = new Voice(Flow.TIME4_4); + voice1.addTickables(tickables1); + voice2.addTickables(tickables2); + const formatter = new Formatter(); + const tContexts = formatter.createTickContexts([voice1, voice2]); + assert.equal(tContexts.list.length, 4, 'Voices should have four tick contexts'); + assert.throws(() => formatter.getMinTotalWidth(), /NoMinTotalWidth/, 'Expected to throw exception'); + assert.ok(formatter.preCalculateMinTotalWidth([voice1, voice2]), 'Successfully runs preCalculateMinTotalWidth'); + assert.equal(formatter.getMinTotalWidth(), 88, 'Get minimum total width without passing voices'); + formatter.preFormat(); + assert.equal(formatter.getMinTotalWidth(), 88, 'Minimum total width'); + assert.equal(tickables1[0].getX(), tickables2[0].getX(), 'First notes of both voices have the same X'); + assert.equal(tickables1[2].getX(), tickables2[2].getX(), 'Last notes of both voices have the same X'); + assert.ok(tickables1[1].getX() < tickables2[1].getX(), 'Second note of voice 2 is to the right of the second note of voice 1'); +} +function rightJustify(options) { + const f = VexFlowTests.makeFactory(options, 1200, 150); + const getTickables = (time, n, duration, duration2) => { + const tickar = []; + let i = 0; + for (i = 0; i < n; ++i) { + const dd = i === n - 1 ? duration2 : duration; + tickar.push(new StaveNote({ keys: ['f/4'], duration: dd })); + } + return new Voice(time).addTickables(tickar); + }; + const renderTest = (time, n, duration, duration2, x, width) => { + const formatter = f.Formatter(); + const stave = f.Stave({ x, y: 20, width }); + const voice = getTickables(time, n, duration, duration2); + formatter.joinVoices([voice]).formatToStave([voice], stave); + stave.draw(); + voice.draw(f.getContext(), stave); + }; + renderTest({ num_beats: 4, beat_value: 4, resolution: 4 * 4096 }, 3, '4', '2', 10, 300); + renderTest({ num_beats: 4, beat_value: 4, resolution: 4 * 4096 }, 1, 'w', 'w', 310, 300); + renderTest({ num_beats: 3, beat_value: 4, resolution: 4 * 4096 }, 3, '4', '4', 610, 300); + renderTest({ num_beats: 3, beat_value: 4, resolution: 4 * 4096 }, 6, '8', '8', 910, 300); + options.assert.ok(true); +} +function penultimateNote(options) { + const f = VexFlowTests.makeFactory(options, 500, 550); + const score = f.EasyScore(); + const staffWidth = 310; + let system = undefined; + let voices = []; + let notes = []; + let note = undefined; + let stave = undefined; + let y = 10; + const draw = (softmax) => { + system = f.System({ + width: staffWidth, + y, + formatOptions: { align_rests: true }, + details: { softmaxFactor: softmax }, + }); + notes = []; + voices = []; + note = score.notes('C4/8/r', { clef: 'bass' })[0]; + notes.push(note); + note = score.notes('A3/8', { stem: 'up', clef: 'bass' })[0]; + notes.push(note); + note = score.notes('C4/4', { stem: 'up', clef: 'bass' })[0]; + notes.push(note); + voices.push(score.voice(notes).setMode(2)); + notes = []; + note = score.notes('( F3 A3 )/4', { stem: 'down', clef: 'bass' })[0]; + notes.push(note); + note = score.notes('B4/4/r', {})[0]; + notes.push(note); + voices.push(score.voice(notes).setMode(2)); + notes = []; + stave = system.addStave({ voices: voices }); + stave.addClef('bass'); + stave.addTimeSignature('2/4'); + voices = []; + f.draw(); + f.getContext().fillText(`softmax: ${softmax.toString()}`, staffWidth + 20, y + 50); + y += 100; + }; + draw(15); + draw(10); + draw(5); + draw(2); + draw(1); + options.assert.ok(true); +} +function noteHeadPadding(options) { + const registry = new Registry(); + Registry.enableDefaultRegistry(registry); + const f = VexFlowTests.makeFactory(options, 600, 300); + const score = f.EasyScore(); + score.set({ time: '9/8' }); + const notes1 = score.notes('(d5 f5)/8,(c5 e5)/8,(d5 f5)/8,(c5 e5)/2.'); + const beams = [new Beam(notes1.slice(0, 3), true)]; + const voice1 = new Voice().setMode(Voice.Mode.SOFT); + const notes2 = score.notes('(g4 an4)/2.,(g4 a4)/4.', { clef: 'treble' }); + const voice2 = new Voice().setMode(Voice.Mode.SOFT); + voice2.addTickables(notes2); + voice1.addTickables(notes1); + const formatter = f.Formatter().joinVoices([voice1]).joinVoices([voice2]); + const width = formatter.preCalculateMinTotalWidth([voice1, voice2]); + formatter.format([voice1, voice2], width); + const staveWidth = width + Stave.defaultPadding; + const stave1 = f.Stave({ y: 50, width: staveWidth }); + const stave2 = f.Stave({ y: 150, width: staveWidth }); + stave1.draw(); + stave2.draw(); + voice1.draw(f.getContext(), stave1); + voice2.draw(f.getContext(), stave2); + beams.forEach((b) => b.setContext(f.getContext()).draw()); + options.assert.ok(true); +} +function longMeasureProblems(options) { + const registry = new Registry(); + Registry.enableDefaultRegistry(registry); + const f = VexFlowTests.makeFactory(options, 1500, 300); + const score = f.EasyScore(); + score.set({ time: '4/4' }); + const notes1 = score.notes('b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/2,b4/8,b4/8'); + const voice1 = new Voice().setMode(Voice.Mode.SOFT); + const notes2 = score.notes('d3/4,(ab3 f4)/2,d3/4,ab3/4,d3/2,ab3/4,d3/4,ab3/2,d3/4,ab3/4,d3/2,ab3/4,d3/4,ab3/2,d3/4,ab3/4,d3/2,ab3/4,d4/4,d4/2,d4/4', { clef: 'bass' }); + const voice2 = new Voice().setMode(Voice.Mode.SOFT); + voice2.addTickables(notes2); + voice1.addTickables(notes1); + const formatter = f.Formatter().joinVoices([voice1]).joinVoices([voice2]); + const width = formatter.preCalculateMinTotalWidth([voice1, voice2]); + formatter.format([voice1, voice2], width); + const stave1 = f.Stave({ y: 50, width: width + Stave.defaultPadding }); + const stave2 = f.Stave({ y: 200, width: width + Stave.defaultPadding }); + stave1.draw(); + stave2.draw(); + voice1.draw(f.getContext(), stave1); + voice2.draw(f.getContext(), stave2); + options.assert.ok(true); +} +function accidentalJustification(options) { + const f = VexFlowTests.makeFactory(options, 600, 300); + const score = f.EasyScore(); + const notes11 = score.notes('a4/2, a4/4, a4/8, ab4/16, an4/16'); + const voice11 = score.voice(notes11, { time: '4/4' }); + const notes21 = score.notes('c4/2, d4/8, d4/8, e4/8, e4/8'); + const voice21 = score.voice(notes21, { time: '4/4' }); + let beams = Beam.generateBeams(notes11.slice(2)); + beams = beams.concat(beams, Beam.generateBeams(notes21.slice(1, 3))); + beams = beams.concat(Beam.generateBeams(notes21.slice(3))); + const formatter = f.Formatter({}).joinVoices([voice11]).joinVoices([voice21]); + const width = formatter.preCalculateMinTotalWidth([voice11, voice21]); + const stave11 = f.Stave({ y: 20, width: width + Stave.defaultPadding }); + const stave21 = f.Stave({ y: 130, width: width + Stave.defaultPadding }); + formatter.format([voice11, voice21], width); + const ctx = f.getContext(); + stave11.setContext(ctx).draw(); + stave21.setContext(ctx).draw(); + voice11.draw(ctx, stave11); + voice21.draw(ctx, stave21); + beams.forEach((b) => b.setContext(ctx).draw()); + options.assert.ok(true); +} +function unalignedNoteDurations1(options) { + const f = VexFlowTests.makeFactory(options, 600, 250); + const score = f.EasyScore(); + const notes11 = [ + new StaveNote({ keys: ['a/4'], duration: '8' }), + new StaveNote({ keys: ['b/4'], duration: '4' }), + new StaveNote({ keys: ['b/4'], duration: '8' }), + ]; + const notes21 = [ + new StaveNote({ keys: ['a/4'], duration: '16' }), + new StaveNote({ keys: ['b/4.'], duration: '4' }), + new StaveNote({ keys: ['a/4'], duration: '8d' }), + ]; + Dot.buildAndAttach([notes21[2]], { all: true }); + const ctx = f.getContext(); + const voice11 = score.voice(notes11, { time: '2/4' }).setMode(Voice.Mode.SOFT); + const voice21 = score.voice(notes21, { time: '2/4' }).setMode(Voice.Mode.SOFT); + const beams21 = Beam.generateBeams(notes21); + const beams11 = Beam.generateBeams(notes11); + const formatter = new Formatter(); + formatter.joinVoices([voice11]); + formatter.joinVoices([voice21]); + const width = formatter.preCalculateMinTotalWidth([voice11, voice21]); + const stave11 = f.Stave({ y: 20, width: width + Stave.defaultPadding }); + const stave21 = f.Stave({ y: 130, width: width + Stave.defaultPadding }); + formatter.format([voice11, voice21], width); + stave11.setContext(ctx).draw(); + stave21.setContext(ctx).draw(); + voice11.draw(ctx, stave11); + voice21.draw(ctx, stave21); + beams21.forEach((b) => b.setContext(ctx).draw()); + beams11.forEach((b) => b.setContext(ctx).draw()); + options.assert.ok(voice11.getTickables()[1].getX() > voice21.getTickables()[1].getX()); +} +function unalignedNoteDurations2(options) { + const notes1 = [ + new StaveNote({ keys: ['b/4'], duration: '8r' }), + new StaveNote({ keys: ['g/4'], duration: '16' }), + new StaveNote({ keys: ['c/5'], duration: '16' }), + new StaveNote({ keys: ['e/5'], duration: '16' }), + new StaveNote({ keys: ['g/4'], duration: '16' }), + new StaveNote({ keys: ['c/5'], duration: '16' }), + new StaveNote({ keys: ['e/5'], duration: '16' }), + new StaveNote({ keys: ['b/4'], duration: '8r' }), + new StaveNote({ keys: ['g/4'], duration: '16' }), + new StaveNote({ keys: ['c/5'], duration: '16' }), + new StaveNote({ keys: ['e/5'], duration: '16' }), + new StaveNote({ keys: ['g/4'], duration: '16' }), + new StaveNote({ keys: ['c/5'], duration: '16' }), + new StaveNote({ keys: ['e/5'], duration: '16' }), + ]; + const notes2 = [ + new StaveNote({ keys: ['a/4'], duration: '16r' }), + new StaveNote({ keys: ['e/4.'], duration: '8d' }), + new StaveNote({ keys: ['e/4'], duration: '4' }), + new StaveNote({ keys: ['a/4'], duration: '16r' }), + new StaveNote({ keys: ['e/4.'], duration: '8d' }), + new StaveNote({ keys: ['e/4'], duration: '4' }), + ]; + const f = VexFlowTests.makeFactory(options, 750, 280); + const context = f.getContext(); + const voice1 = new Voice({ num_beats: 4, beat_value: 4 }); + voice1.addTickables(notes1); + const voice2 = new Voice({ num_beats: 4, beat_value: 4 }); + voice2.addTickables(notes2); + const formatter = new Formatter({ globalSoftmax: options.params.globalSoftmax }); + formatter.joinVoices([voice1]); + formatter.joinVoices([voice2]); + const width = formatter.preCalculateMinTotalWidth([voice1, voice2]); + formatter.format([voice1, voice2], width); + const stave1 = new Stave(10, 40, width + Stave.defaultPadding); + const stave2 = new Stave(10, 100, width + Stave.defaultPadding); + stave1.setContext(context).draw(); + stave2.setContext(context).draw(); + voice1.draw(context, stave1); + voice2.draw(context, stave2); + options.assert.ok(voice1.getTickables()[1].getX() > voice2.getTickables()[1].getX()); +} +function alignedMixedElements(options) { + const f = VexFlowTests.makeFactory(options, 800, 500); + const context = f.getContext(); + const stave = new Stave(10, 200, 400); + const stave2 = new Stave(410, 200, 400); + const notes = [ + new StaveNote({ keys: ['c/5'], duration: '8' }) + .addModifier(new Accidental('##'), 0) + .addModifier(new FretHandFinger('4').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new StringNumber('3').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a>').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a^').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('am').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Annotation('yyyy').setVerticalJustification(AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(new Annotation('xxxx').setVerticalJustification(AnnotationVerticalJustify.BOTTOM).setFont('sans-serif', 20), 0) + .addModifier(new Annotation('ttt').setVerticalJustification(AnnotationVerticalJustify.BOTTOM).setFont('sans-serif', 20), 0), + new StaveNote({ keys: ['c/5'], duration: '8', stem_direction: Stem.DOWN }) + .addModifier(new StringNumber('3').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a>').setPosition(ModifierPosition.BELOW), 0), + new StaveNote({ keys: ['c/5'], duration: '8' }), + ]; + const notes2 = [ + new StaveNote({ keys: ['c/5'], duration: '8' }) + .addModifier(new StringNumber('3').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Annotation('yyyy').setVerticalJustification(AnnotationVerticalJustify.TOP), 0), + new StaveNote({ keys: ['c/5'], duration: '8', stem_direction: Stem.DOWN }) + .addModifier(new FretHandFinger('4').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new StringNumber('3').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a>').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a^').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('am').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a@u').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Annotation('yyyy').setVerticalJustification(AnnotationVerticalJustify.TOP), 0) + .addModifier(new Annotation('xxxx').setVerticalJustification(AnnotationVerticalJustify.TOP).setFont('sans-serif', 20), 0) + .addModifier(new Annotation('ttt').setVerticalJustification(AnnotationVerticalJustify.TOP).setFont('sans-serif', 20), 0), + new StaveNote({ keys: ['c/5'], duration: '8' }), + ]; + const tuplet = new Tuplet(notes).setTupletLocation(-1); + const tuplet2 = new Tuplet(notes2).setTupletLocation(1); + Formatter.FormatAndDraw(context, stave, notes); + Formatter.FormatAndDraw(context, stave2, notes2); + stave.setContext(context).draw(); + stave2.setContext(context).draw(); + tuplet.setContext(context).draw(); + tuplet2.setContext(context).draw(); + options.assert.ok(true); +} +function justifyStaveNotes(options) { + const f = VexFlowTests.makeFactory(options, 520, 280); + const ctx = f.getContext(); + const score = f.EasyScore(); + let y = 30; + function justifyToWidth(width) { + f.Stave({ y: y }).addClef('treble'); + const voices = [ + score.voice(score.notes('(cbb4 en4 a4)/2, (d4 e4 f4)/8, (d4 f4 a4)/8, (cn4 f#4 a4)/4', { stem: 'down' })), + score.voice(score.notes('(bb4 e#5 a5)/4, (d5 e5 f5)/2, (c##5 fb5 a5)/4', { stem: 'up' })), + ]; + f.Formatter() + .joinVoices(voices) + .format(voices, width - (Stave.defaultPadding + getGlyphWidth('gClef'))); + voices[0].getTickables().forEach((note) => Note.plotMetrics(ctx, note, y + 140)); + voices[1].getTickables().forEach((note) => Note.plotMetrics(ctx, note, y - 20)); + y += 210; + } + justifyToWidth(520); + f.draw(); + options.assert.ok(true); +} +function notesWithTab(options) { + const f = VexFlowTests.makeFactory(options, 420, 580); + const score = f.EasyScore(); + let y = 10; + function justifyToWidth(width) { + const stave = f.Stave({ y: y }).addClef('treble'); + const voice = score.voice(score.notes('d#4/2, (c4 d4)/8, d4/8, (c#4 e4 a4)/4', { stem: 'up' })); + y += 100; + f.TabStave({ y: y }).addTabGlyph().setNoteStartX(stave.getNoteStartX()); + const tabVoice = score.voice([ + f.TabNote({ positions: [{ str: 3, fret: 6 }], duration: '2' }).addModifier(new Bend('Full'), 0), + f + .TabNote({ + positions: [ + { str: 2, fret: 3 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }) + .addModifier(new Bend('Unison'), 1), + f.TabNote({ positions: [{ str: 3, fret: 7 }], duration: '8' }), + f.TabNote({ + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 7 }, + { str: 2, fret: 5 }, + ], + duration: '4', + }), + ]); + f.Formatter().joinVoices([voice]).joinVoices([tabVoice]).format([voice, tabVoice], width); + y += 150; + } + justifyToWidth(0); + justifyToWidth(300); + f.draw(); + options.assert.ok(true); +} +function multiStaves(options) { + const f = VexFlowTests.makeFactory(options, 600, 400); + const ctx = f.getContext(); + const score = f.EasyScore(); + const notes11 = score.notes('f4/4, d4/8, g4/4, eb4/8'); + const notes21 = score.notes('d4/8, d4, d4, d4, e4, eb4'); + const notes31 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' }); + let voices = [ + score.voice(notes11, { time: '6/8' }), + score.voice(notes21, { time: '6/8' }), + score.voice(notes31, { time: '6/8' }), + ]; + let formatter = f.Formatter(); + voices.forEach((v) => formatter.joinVoices([v])); + let width = formatter.preCalculateMinTotalWidth(voices); + formatter.format(voices, width); + let beams = [ + new Beam(notes21.slice(0, 3), true), + new Beam(notes21.slice(3, 6), true), + new Beam(notes31.slice(0, 3), true), + new Beam(notes31.slice(3, 6), true), + ]; + const staveYs = [20, 130, 250]; + let staveWidth = width + getGlyphWidth('gClef') + getGlyphWidth('timeSig8') + Stave.defaultPadding; + let staves = [ + f.Stave({ y: staveYs[0], width: staveWidth }).addClef('treble').addTimeSignature('6/8'), + f.Stave({ y: staveYs[1], width: staveWidth }).addClef('treble').addTimeSignature('6/8'), + f.Stave({ y: staveYs[2], width: staveWidth }).addClef('bass').addTimeSignature('6/8'), + ]; + f.StaveConnector({ + top_stave: staves[1], + bottom_stave: staves[2], + type: 'brace', + }); + for (let i = 0; i < staves.length; ++i) { + staves[i].setContext(ctx).draw(); + voices[i].draw(ctx, staves[i]); + } + beams.forEach((beam) => beam.setContext(ctx).draw()); + const notes12 = score.notes('ab4/4, bb4/8, (cb5 eb5)/4[stem="down"], d5/8[stem="down"]'); + const notes22 = score.notes('(eb4 ab4)/4., (c4 eb4 ab4)/4, db5/8', { stem: 'up' }); + const notes32 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' }); + voices = [ + score.voice(notes12, { time: '6/8' }), + score.voice(notes22, { time: '6/8' }), + score.voice(notes32, { time: '6/8' }), + ]; + formatter = f.Formatter(); + voices.forEach((v) => formatter.joinVoices([v])); + width = formatter.preCalculateMinTotalWidth(voices); + const staveX = staves[0].getX() + staves[0].getWidth(); + staveWidth = width + Stave.defaultPadding; + staves = [ + f.Stave({ x: staveX, y: staveYs[0], width: staveWidth }), + f.Stave({ x: staveX, y: staveYs[1], width: staveWidth }), + f.Stave({ x: staveX, y: staveYs[2], width: staveWidth }), + ]; + formatter.format(voices, width); + beams = [ + new Beam(notes32.slice(0, 3), true), + new Beam(notes32.slice(3, 6), true), + ]; + for (let i = 0; i < staves.length; ++i) { + staves[i].setContext(ctx).draw(); + voices[i].draw(ctx, staves[i]); + voices[i].getTickables().forEach((note) => Note.plotMetrics(ctx, note, staveYs[i] - 20)); + } + beams.forEach((beam) => beam.setContext(ctx).draw()); + options.assert.ok(true); +} +function proportional(options) { + const debug = options.params.debug; + Registry.enableDefaultRegistry(new Registry()); + const f = VexFlowTests.makeFactory(options, 775, 750); + const system = f.System({ + x: 50, + autoWidth: true, + debugFormatter: debug, + noJustification: !(options.params.justify === undefined && true), + formatIterations: options.params.iterations, + details: { alpha: options.params.alpha }, + }); + const score = f.EasyScore(); + const voices = [ + score.notes('c5/8, c5'), + score.tuplet(score.notes('a4/8, a4, a4'), { notes_occupied: 2 }), + score.notes('c5/16, c5, c5, c5'), + score.tuplet(score.notes('a4/16, a4, a4, a4, a4'), { notes_occupied: 4 }), + score.tuplet(score.notes('a4/32, a4, a4, a4, a4, a4, a4'), { notes_occupied: 8 }), + ]; + const createVoice = (notes) => score.voice(notes, { time: '1/4' }); + const createStave = (voice) => system + .addStave({ voices: [voice], debugNoteMetrics: debug }) + .addClef('treble') + .addTimeSignature('1/4'); + voices.map(createVoice).forEach(createStave); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + Registry.disableDefaultRegistry(); + options.assert.ok(true); +} +function softMax(options) { + const f = VexFlowTests.makeFactory(options, 550, 500); + const textX = 450 / 0.8; + f.getContext().scale(0.8, 0.8); + function draw(y, factor) { + const score = f.EasyScore(); + const system = f.System({ + x: 100, + y, + details: { softmaxFactor: factor }, + autoWidth: true, + }); + system + .addStave({ + voices: [ + score.voice(score + .notes('C#5/h, a4/q') + .concat(score.beam(score.notes('Abb4/8, A4/8'))) + .concat(score.beam(score.notes('A4/16, A#4, A4, Ab4/32, A4'))), { time: '5/4' }), + ], + }) + .addClef('treble') + .addTimeSignature('5/4'); + f.draw(); + f.getContext().fillText(`softmax: ${factor.toString()}`, textX, y + 50); + options.assert.ok(true); + } + draw(50, 1); + draw(150, 2); + draw(250, 5); + draw(350, 10); + draw(450, 15); +} +function mixTime(options) { + const f = VexFlowTests.makeFactory(options, 400 + Stave.defaultPadding, 250); + f.getContext().scale(0.8, 0.8); + const score = f.EasyScore(); + const system = f.System({ + details: {}, + autoWidth: true, + debugFormatter: true, + }); + system + .addStave({ + voices: [score.voice(score.notes('C#5/q, B4').concat(score.beam(score.notes('A4/8, E4, C4, D4'))))], + }) + .addClef('treble') + .addTimeSignature('4/4'); + system + .addStave({ + voices: [score.voice(score.notes('C#5/q, B4, B4').concat(score.tuplet(score.beam(score.notes('A4/8, E4, C4')))))], + }) + .addClef('treble') + .addTimeSignature('4/4'); + f.draw(); + options.assert.ok(true); +} +function tightNotes1(options) { + const f = VexFlowTests.makeFactory(options, 440, 250); + f.getContext().scale(0.8, 0.8); + const score = f.EasyScore(); + const system = f.System({ + autoWidth: true, + debugFormatter: true, + details: { maxIterations: 10 }, + }); + system + .addStave({ + voices: [ + score.voice(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')).concat(score.notes('B4/q, B4'))), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + system + .addStave({ + voices: [ + score.voice(score.notes('B4/q, B4').concat(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')))), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + f.draw(); + options.assert.ok(true); +} +function tightNotes2(options) { + const f = VexFlowTests.makeFactory(options, 440, 250); + f.getContext().scale(0.8, 0.8); + const score = f.EasyScore(); + const system = f.System({ + autoWidth: true, + debugFormatter: true, + }); + system + .addStave({ + voices: [ + score.voice(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')).concat(score.notes('B4/q, B4'))), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + system + .addStave({ + voices: [score.voice(score.notes('B4/w'))], + }) + .addClef('treble') + .addTimeSignature('4/4'); + f.draw(); + options.assert.ok(true); +} +function annotations(options) { + const pageWidth = 916; + const pageHeight = 600; + const f = VexFlowTests.makeFactory(options, pageWidth, pageHeight); + const context = f.getContext(); + const lyrics1 = ['ipso', 'ipso-', 'ipso', 'ipso', 'ipsoz', 'ipso-', 'ipso', 'ipso', 'ipso', 'ip', 'ipso']; + const lyrics2 = ['ipso', 'ipso-', 'ipsoz', 'ipso', 'ipso', 'ipso-', 'ipso', 'ipso', 'ipso', 'ip', 'ipso']; + const smar = [ + { + sm: 5, + width: 550, + lyrics: lyrics1, + title: '550px,softMax:5', + }, + { + sm: 5, + width: 550, + lyrics: lyrics2, + title: '550px,softmax:5,different word order', + }, + { + sm: 10, + width: 550, + lyrics: lyrics2, + title: '550px,softmax:10', + }, + { + sm: 15, + width: 550, + lyrics: lyrics2, + title: '550px,softmax:15', + }, + ]; + const rowSize = 140; + const beats = 12; + const beatsPer = 8; + const beamGroup = 3; + const durations = ['8d', '16', '8', '8d', '16', '8', '8d', '16', '8', '4', '8']; + const beams = []; + let y = 40; + smar.forEach((sm) => { + const stave = new Stave(10, y, sm.width); + const notes = []; + let iii = 0; + context.fillText(sm.title, 100, y); + y += rowSize; + durations.forEach((dd) => { + const note = new StaveNote({ keys: ['b/4'], duration: dd }); + if (dd.indexOf('d') >= 0) { + Dot.buildAndAttach([note], { all: true }); + } + if (sm.lyrics.length > iii) { + note.addModifier(new Annotation(sm.lyrics[iii]) + .setVerticalJustification(Annotation.VerticalJustify.BOTTOM) + .setFont(Font.SERIF, 12, FontWeight.NORMAL)); + } + notes.push(note); + iii += 1; + }); + notes.forEach((note) => { + if (note.getDuration().indexOf('d') >= 0) { + Dot.buildAndAttach([note], { all: true }); + } + }); + let notesToBeam = []; + notes.forEach((note) => { + if (note.getIntrinsicTicks() < 4096) { + notesToBeam.push(note); + if (notesToBeam.length >= beamGroup) { + beams.push(new Beam(notesToBeam)); + notesToBeam = []; + } + } + else { + notesToBeam = []; + } + }); + const voice1 = new Voice({ num_beats: beats, beat_value: beatsPer }).setMode(Voice.Mode.SOFT).addTickables(notes); + const fmt = new Formatter({ softmaxFactor: sm.sm, maxIterations: 2 }).joinVoices([voice1]); + fmt.format([voice1], sm.width - 11); + stave.setContext(context).draw(); + voice1.draw(context, stave); + beams.forEach((b) => b.setContext(context).draw()); + }); + options.assert.ok(true); +} +VexFlowTests.register(FormatterTests); +export { FormatterTests }; diff --git a/build/esm/tests/fraction_tests.js b/build/esm/tests/fraction_tests.js new file mode 100644 index 0000000000..2dec3ee0e9 --- /dev/null +++ b/build/esm/tests/fraction_tests.js @@ -0,0 +1,72 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Fraction } from '../src/fraction.js'; +const FractionTests = { + Start() { + QUnit.module('Fraction'); + QUnit.test('Basic', basic); + QUnit.test('With Other Fractions', withOtherFractions); + }, +}; +function basic(assert) { + const f_1_2 = new Fraction(1, 2); + assert.ok(f_1_2.equals(0.5), 'Fraction: 1/2 equals 0.5'); + assert.ok(f_1_2.equals(new Fraction(1, 2)), 'Fraction: 1/2 equals 1/2'); + assert.ok(f_1_2.equals(new Fraction(2, 4)), 'Fraction: 1/2 equals 2/4'); + assert.notOk(f_1_2.greaterThan(1), 'Fraction: ! 1/2 > 1'); + assert.ok(f_1_2.greaterThan(0.2), 'Fraction: 1/2 > 0.2'); + assert.ok(f_1_2.greaterThanEquals(0.2), 'Fraction: 1/2 >= 0.2'); + assert.ok(f_1_2.greaterThanEquals(0.5), 'Fraction: 1/2 >= 0.5'); + assert.notOk(f_1_2.greaterThanEquals(1), 'Fraction: ! 1/2 >= 1'); + assert.notOk(f_1_2.lessThan(0.5), 'Fraction: ! 1/2 < 0.5'); + assert.ok(f_1_2.lessThan(1), 'Fraction: 1/2 < 1'); + assert.ok(f_1_2.lessThanEquals(0.6), 'Fraction: 1/2 <= 0.6'); + assert.ok(f_1_2.lessThanEquals(0.5), 'Fraction: 1/2 <= 0.5'); + assert.notOk(f_1_2.lessThanEquals(0.4), 'Fraction: ! 1/2 <= 0.4'); + const f_05 = f_1_2.copy(0.5); + assert.strictEqual(f_05, f_1_2, 'Fraction: f_05 === f_1_2'); + assert.strictEqual(f_05.toString(), '0.5/1', 'Fraction: f_05.toString() === "0.5/1"'); + assert.strictEqual(f_05.toSimplifiedString(), '1/2', 'Fraction: f_05.toSimplifiedString() === "1/2"'); + const tF_n = f_05.clone(); + assert.notStrictEqual(tF_n, f_05, 'Fraction: tF_n !== f_05'); + assert.notEqual(tF_n, f_05, 'Fraction: tF_n != f_05'); + assert.deepEqual(tF_n, f_05, 'tF_n deepEqual f_05'); + assert.notDeepEqual(tF_n, {}, 'tF_n notDeepEqual {}'); + tF_n.subtract(-0.5); + assert.ok(tF_n.equals(1), 'Fraction: 0.5 -(-0.5) equals 1'); + tF_n.add(1); + assert.ok(tF_n.equals(2), 'Fraction: 1 + 1 equals 2'); + tF_n.multiply(2); + assert.ok(tF_n.equals(4), 'Fraction: 2 * 2 equals 4'); + tF_n.divide(2); + assert.ok(tF_n.equals(2), 'Fraction: 4 / 2 equals 2'); + assert.equal(Fraction.LCMM([]), 0); + assert.equal(Fraction.LCMM([17]), 17); + assert.equal(Fraction.LCMM([2, 5]), 10); + assert.equal(Fraction.LCMM([15, 3, 5]), 15); + assert.equal(Fraction.LCMM([2, 4, 6]), 12); + assert.equal(Fraction.LCMM([2, 3, 4, 5]), 60); + assert.equal(Fraction.LCMM([12, 15, 10, 75]), 300); + assert.equal(Fraction.GCD(0, 0), 0); + assert.equal(Fraction.GCD(0, 99), 99); + assert.equal(Fraction.GCD(77, 0), 77); + assert.equal(Fraction.GCD(42, 14), 14); + assert.equal(Fraction.GCD(15, 10), 5); +} +function withOtherFractions(assert) { + const f_1_2 = new Fraction(1, 2); + const f_1_4 = new Fraction(1, 4); + const f_1_8 = new Fraction(1, 8); + const f_2 = new Fraction(2, 1); + const a = f_1_2.clone().multiply(f_1_2); + assert.ok(a.equals(f_1_4), '1/2 x 1/2 == 1/4'); + const b = f_1_2.clone().divide(f_1_4); + assert.ok(b.equals(f_2), '1/2 / 1/4 == 2'); + const c = f_2.clone().subtract(f_1_2).subtract(f_1_2).subtract(f_1_4); + const d = f_1_8.clone().add(f_1_8).add(f_1_8).multiply(f_2); + assert.ok(c.equals(d), '2-1/2-1/2-1/4 == (1/8+1/8+1/8)*(2/1)'); + assert.equal(c.value(), 0.75, '3/4 == 0.75'); + const e = f_1_8.clone().add(f_1_4).add(f_1_8); + assert.ok(e.equals(f_1_2), '1/8 + 1/4 + 1/8 == 1/2'); +} +VexFlowTests.register(FractionTests); +export { FractionTests }; diff --git a/build/esm/tests/ghostnote_tests.js b/build/esm/tests/ghostnote_tests.js new file mode 100644 index 0000000000..ac38601788 --- /dev/null +++ b/build/esm/tests/ghostnote_tests.js @@ -0,0 +1,77 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +const GhostNoteTests = { + Start() { + QUnit.module('GhostNote'); + const run = VexFlowTests.runTests; + run('GhostNote Basic', basic); + run('GhostNote Dotted', dotted); + }, +}; +function createTest(addItems) { + return (options) => { + const factory = VexFlowTests.makeFactory(options, 550); + const stave = factory.Stave(); + const score = factory.EasyScore(); + addItems(factory, score); + const voices = factory.getVoices(); + factory.Formatter().joinVoices(voices).formatToStave(voices, stave); + factory.draw(); + options.assert.ok(true, 'all pass'); + }; +} +const basic = createTest((f, score) => { + const voiceTop = score.voice(score.notes('f#5/4, f5, db5, c5, c5/8, d5, fn5, e5, d5, c5', { stem: 'up' }), { + time: '7/4', + }); + const notesTop = voiceTop.getTickables(); + f.Beam({ notes: notesTop.slice(4, 8) }); + f.Beam({ notes: notesTop.slice(8, 10) }); + score.voice([ + f.GhostNote({ duration: '2' }), + f.StaveNote({ keys: ['f/4'], stem_direction: -1, duration: '4' }), + f.GhostNote({ duration: '4' }), + f.StaveNote({ keys: ['e/4'], stem_direction: -1, duration: '4' }), + f.GhostNote({ duration: '8' }), + f.StaveNote({ keys: ['d/4'], stem_direction: -1, duration: '8' }).addModifier(f.Accidental({ type: '##' }), 0), + f.StaveNote({ keys: ['c/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4'], stem_direction: -1, duration: '8' }), + ], { time: '7/4' }); +}); +const dotted = createTest((f, score) => { + const voice1 = score.voice([ + f.GhostNote({ duration: '4d' }), + f.StaveNote({ duration: '8', keys: ['f/5'], stem_direction: 1 }), + f.StaveNote({ duration: '4', keys: ['d/5'], stem_direction: 1 }), + f.StaveNote({ duration: '8', keys: ['c/5'], stem_direction: 1 }), + f.StaveNote({ duration: '16', keys: ['c/5'], stem_direction: 1 }), + f.StaveNote({ duration: '16', keys: ['d/5'], stem_direction: 1 }), + f.GhostNote({ duration: '2dd' }), + f.StaveNote({ duration: '8', keys: ['f/5'], stem_direction: 1 }), + ], { time: '8/4' }); + const voice2 = score.voice([ + f.StaveNote({ duration: '4', keys: ['f/4'], stem_direction: -1 }), + f.StaveNote({ duration: '8', keys: ['e/4'], stem_direction: -1 }), + f.StaveNote({ duration: '8', keys: ['d/4'], stem_direction: -1 }), + f.GhostNote({ duration: '4dd' }), + f.StaveNote({ duration: '16', keys: ['c/4'], stem_direction: -1 }), + f.StaveNote({ duration: '2', keys: ['c/4'], stem_direction: -1 }), + f.StaveNote({ duration: '4', keys: ['d/4'], stem_direction: -1 }), + f.StaveNote({ duration: '8', keys: ['f/4'], stem_direction: -1 }), + f.StaveNote({ duration: '8', keys: ['e/4'], stem_direction: -1 }), + ], { time: '8/4' }); + const notes1 = voice1.getTickables(); + const notes2 = voice2.getTickables(); + const addAccidental = (note, type) => note.addModifier(f.Accidental({ type }), 0); + addAccidental(notes1[1], 'bb'); + addAccidental(notes1[4], '#'); + addAccidental(notes1[7], 'n'); + addAccidental(notes2[0], '#'); + addAccidental(notes2[4], 'b'); + addAccidental(notes2[5], '#'); + addAccidental(notes2[7], 'n'); + f.Beam({ notes: notes1.slice(3, 6) }); + f.Beam({ notes: notes2.slice(1, 3) }); + f.Beam({ notes: notes2.slice(7, 9) }); +}); +VexFlowTests.register(GhostNoteTests); +export { GhostNoteTests }; diff --git a/build/esm/tests/glyphnote_tests.js b/build/esm/tests/glyphnote_tests.js new file mode 100644 index 0000000000..d3f8d20ca2 --- /dev/null +++ b/build/esm/tests/glyphnote_tests.js @@ -0,0 +1,113 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { ChordSymbol } from '../src/chordsymbol.js'; +import { Glyph } from '../src/glyph.js'; +import { Registry } from '../src/registry.js'; +import { StaveConnector } from '../src/staveconnector.js'; +const GlyphNoteTests = { + Start() { + QUnit.module('GlyphNote'); + const run = VexFlowTests.runTests; + run('GlyphNote with ChordSymbols', chordChanges, { debug: false, noPadding: false }); + run('GlyphNote Positioning', basic, { debug: false, noPadding: false }); + run('GlyphNote No Stave Padding', basic, { debug: true, noPadding: true }); + run('GlyphNote RepeatNote', repeatNote, { debug: false, noPadding: true }); + }, +}; +function chordChanges(options) { + Registry.enableDefaultRegistry(new Registry()); + const f = VexFlowTests.makeFactory(options, 300, 200); + const system = f.System({ + x: 50, + width: 250, + debugFormatter: options.params.debug, + noPadding: options.params.noPadding, + details: { alpha: options.params.alpha }, + }); + const score = f.EasyScore(); + const notes = [ + f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }), + f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }), + f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }), + f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }), + ]; + const chord1 = f + .ChordSymbol({ reportWidth: false }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('(#11b9)', { symbolModifier: ChordSymbol.symbolModifiers.SUPERSCRIPT }); + const chord2 = f + .ChordSymbol() + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('#11', { symbolModifier: ChordSymbol.symbolModifiers.SUPERSCRIPT }) + .addGlyphOrText('b9', { symbolModifier: ChordSymbol.symbolModifiers.SUBSCRIPT }); + notes[0].addModifier(chord1, 0); + notes[2].addModifier(chord2, 0); + const voice = score.voice(notes); + system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug }); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + Registry.disableDefaultRegistry(); + options.assert.ok(true); +} +function basic(options) { + Registry.enableDefaultRegistry(new Registry()); + const f = VexFlowTests.makeFactory(options, 300, 400); + const system = f.System({ + x: 50, + width: 250, + debugFormatter: options.params.debug, + noPadding: options.params.noPadding, + details: { alpha: options.params.alpha }, + }); + const score = f.EasyScore(); + const newVoice = (notes) => score.voice(notes, { time: '1/4' }); + const newStave = (voice) => system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug }); + const voices = [ + [f.GlyphNote(new Glyph('repeat1Bar', 40), { duration: 'q' }, { line: 4 })], + [f.GlyphNote(new Glyph('repeat2Bars', 40), { duration: 'q', align_center: true })], + [ + f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: '16' }), + f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: '16' }), + f.GlyphNote(new Glyph('repeat4Bars', 40), { duration: '16' }), + f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: '16' }), + ], + ]; + voices.map(newVoice).forEach(newStave); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + Registry.disableDefaultRegistry(); + options.assert.ok(true); +} +function repeatNote(options) { + Registry.enableDefaultRegistry(new Registry()); + const f = VexFlowTests.makeFactory(options, 300, 500); + const system = f.System({ + x: 50, + width: 250, + debugFormatter: options.params.debug, + noPadding: options.params.noPadding, + details: { alpha: options.params.alpha }, + }); + const score = f.EasyScore(); + const createVoice = (notes) => score.voice(notes, { time: '1/4' }); + const addStaveWithVoice = (voice) => system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug }); + const voices = [ + [f.RepeatNote('1')], + [f.RepeatNote('2')], + [f.RepeatNote('4')], + [ + f.RepeatNote('slash', { duration: '16' }), + f.RepeatNote('slash', { duration: '16' }), + f.RepeatNote('slash', { duration: '16' }), + f.RepeatNote('slash', { duration: '16' }), + ], + ]; + voices.map(createVoice).forEach(addStaveWithVoice); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + Registry.disableDefaultRegistry(); + options.assert.ok(true); +} +VexFlowTests.register(GlyphNoteTests); +export { GlyphNoteTests }; diff --git a/build/esm/tests/gracenote_tests.js b/build/esm/tests/gracenote_tests.js new file mode 100644 index 0000000000..7e31c96e75 --- /dev/null +++ b/build/esm/tests/gracenote_tests.js @@ -0,0 +1,413 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Accidental } from '../src/accidental.js'; +import { Annotation } from '../src/annotation.js'; +import { Articulation } from '../src/articulation.js'; +import { Dot } from '../src/dot.js'; +import { Formatter } from '../src/formatter.js'; +const GraceNoteTests = { + Start() { + QUnit.module('Grace Notes'); + const run = VexFlowTests.runTests; + run('Grace Note Basic', basic); + run('With Articulation and Annotation on Parent Note', graceNoteModifiers); + run('Grace Note Basic with Slurs', basicSlurred); + run('Grace Note Stem', stem); + run('Grace Note Stem with Beams 1', stemWithBeamed, { + keys1: ['g/4'], + stemDirection1: 1, + keys2: ['d/5'], + stemDirection2: -1, + }); + run('Grace Note Stem with Beams 2', stemWithBeamed, { + keys1: ['a/3'], + stemDirection1: 1, + keys2: ['a/5'], + stemDirection2: -1, + }); + run('Grace Note Stem with Beams 3', stemWithBeamed, { + keys1: ['c/4'], + stemDirection1: 1, + keys2: ['c/6'], + stemDirection2: -1, + }); + run('Grace Note Slash', slash); + run('Grace Note Slash with Beams', slashWithBeams); + run('Grace Notes Multiple Voices', multipleVoices); + run('Grace Notes Multiple Voices Multiple Draws', multipleVoicesMultipleDraws); + }, +}; +function basic(options) { + const f = VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + const gracenotes = [ + { keys: ['e/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['g/4'], duration: '32' }, + { keys: ['a/4'], duration: '32' }, + ].map(f.GraceNote.bind(f)); + const gracenotes1 = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f)); + const gracenotes2 = [{ keys: ['b/4'], duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes3 = [ + { keys: ['e/4'], duration: '8' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['e/4', 'g/4'], duration: '8' }, + { keys: ['a/4'], duration: '32' }, + { keys: ['b/4'], duration: '32' }, + ].map(f.GraceNote.bind(f)); + const gracenotes4 = [ + { keys: ['g/4'], duration: '8' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + ].map(f.GraceNote.bind(f)); + gracenotes[1].addModifier(f.Accidental({ type: '##' }), 0); + gracenotes3[3].addModifier(f.Accidental({ type: 'bb' }), 0); + Dot.buildAndAttach([gracenotes4[0]], { all: true }); + const notes = [ + f + .StaveNote({ keys: ['b/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }).beamNotes(), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.GraceNoteGroup({ notes: gracenotes1 }).beamNotes(), 0), + f + .StaveNote({ keys: ['c/5', 'd/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0), + f + .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0), + f + .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0), + ]; + const voice = f.Voice().setStrict(false).addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteBasic'); +} +function graceNoteModifiers(options) { + const f = VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + const gracenotes = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f)); + const notes = [ + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new Articulation('a-').setPosition(3), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new Articulation('a-').setPosition(3), 0) + .addModifier(new Accidental('#')), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new Articulation('a-').setPosition(3), 0) + .addModifier(new Annotation('words')), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new Articulation('a-').setPosition(3), 0) + .addModifier(new Articulation('a>').setPosition(3), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new Articulation('a-').setPosition(3), 0) + .addModifier(new Articulation('a>').setPosition(3), 0) + .addModifier(new Articulation('a@a').setPosition(3), 0), + ]; + const voice = f.Voice().setStrict(false).addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteModifiers'); +} +function basicSlurred(options) { + const f = VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + const gracenotes0 = [ + { keys: ['e/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['g/4'], duration: '32' }, + { keys: ['a/4'], duration: '32' }, + ].map(f.GraceNote.bind(f)); + const gracenotes1 = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f)); + const gracenotes2 = [{ keys: ['b/4'], duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes3 = [ + { keys: ['e/4'], duration: '8' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['e/4', 'g/4'], duration: '8' }, + { keys: ['a/4'], duration: '32' }, + { keys: ['b/4'], duration: '32' }, + ].map(f.GraceNote.bind(f)); + const gracenotes4 = [ + { keys: ['a/4'], duration: '8' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + ].map(f.GraceNote.bind(f)); + gracenotes0[1].addModifier(f.Accidental({ type: '#' }), 0); + gracenotes3[3].addModifier(f.Accidental({ type: 'b' }), 0); + gracenotes3[2].addModifier(f.Accidental({ type: 'n' }), 0); + Dot.buildAndAttach([gracenotes4[0]], { all: true }); + const notes = [ + f + .StaveNote({ keys: ['b/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes0, slur: true }).beamNotes(), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.GraceNoteGroup({ notes: gracenotes1, slur: true }).beamNotes(), 0), + f + .StaveNote({ keys: ['c/5', 'd/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes2, slur: true }).beamNotes(), 0), + f + .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes3, slur: true }).beamNotes(), 0), + f + .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes4, slur: true }).beamNotes(), 0), + f.StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }), + ]; + const voice = f.Voice().setStrict(false).addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteBasic'); +} +const createNoteForStemTest = (duration, noteBuilder, keys, stem_direction, slash = false) => { + const struct = { duration, slash }; + struct.stem_direction = stem_direction; + struct.keys = keys; + return noteBuilder(struct); +}; +const durationsForStemTest = ['8', '16', '32', '64', '128']; +function stem(options) { + const f = VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + function createNotes(noteBuilder, keys, stem_direction) { + return durationsForStemTest.map((duration) => createNoteForStemTest(duration, noteBuilder, keys, stem_direction)); + } + function createNoteBlock(keys, stem_direction) { + const staveNotes = createNotes(f.StaveNote.bind(f), keys, stem_direction); + const gracenotes = createNotes(f.GraceNote.bind(f), keys, stem_direction); + staveNotes[0].addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0); + return staveNotes; + } + const voice = f.Voice().setStrict(false); + voice.addTickables(createNoteBlock(['g/4'], 1)); + voice.addTickables(createNoteBlock(['d/5'], -1)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteStem'); +} +function stemWithBeamed(options) { + const f = VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + function createBeamedNotes(noteBuilder, keys, stem_direction, beams, isGrace = false, notesToBeam) { + const ret = []; + durationsForStemTest.map((duration) => { + const n0 = createNoteForStemTest(duration, noteBuilder, keys, stem_direction); + const n1 = createNoteForStemTest(duration, noteBuilder, keys, stem_direction); + ret.push(n0); + ret.push(n1); + if (notesToBeam) { + notesToBeam.push([n0, n1]); + } + if (!isGrace) { + beams.push(f.Beam({ notes: [n0, n1] })); + } + }); + return ret; + } + function createBeamedNoteBlock(keys, stem_direction, beams) { + const bnotes = createBeamedNotes(f.StaveNote.bind(f), keys, stem_direction, beams); + const notesToBeam = []; + const gracenotes = createBeamedNotes(f.GraceNote.bind(f), keys, stem_direction, beams, true, notesToBeam); + const graceNoteGroup = f.GraceNoteGroup({ notes: gracenotes }); + notesToBeam.map(graceNoteGroup.beamNotes.bind(graceNoteGroup)); + bnotes[0].addModifier(graceNoteGroup, 0); + return bnotes; + } + const beams = []; + const voice = f.Voice().setStrict(false); + voice.addTickables(createBeamedNoteBlock(options.params.keys1, options.params.stemDirection1, beams)); + voice.addTickables(createBeamedNoteBlock(options.params.keys2, options.params.stemDirection2, beams)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteStem'); +} +function slash(options) { + const f = VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + function createNotes(noteT, keys, stem_direction, slash) { + return durationsForStemTest.map((d) => createNoteForStemTest(d, noteT, keys, stem_direction, slash)); + } + function createNoteBlock(keys, stem_direction) { + const notes = [f.StaveNote({ keys: ['f/4'], stem_direction, duration: '16' })]; + let graceNotes = createNotes(f.GraceNote.bind(f), keys, stem_direction, true); + const duration = '8'; + const gns = [ + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, + ].map(f.GraceNote.bind(f)); + const notesToBeam = []; + notesToBeam.push([gns[0], gns[1], gns[2]]); + notesToBeam.push([gns[3], gns[4], gns[5]]); + notesToBeam.push([gns[6], gns[7], gns[8]]); + graceNotes = graceNotes.concat(gns); + const graceNoteGroup = f.GraceNoteGroup({ notes: graceNotes }); + notesToBeam.forEach((notes) => graceNoteGroup.beamNotes(notes)); + notes[0].addModifier(graceNoteGroup, 0); + return notes; + } + const voice = f.Voice().setStrict(false); + voice.addTickables(createNoteBlock(['d/4', 'a/4'], 1)); + voice.addTickables(createNoteBlock(['d/4', 'a/4'], -1)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteSlash'); +} +function slashWithBeams(options) { + const f = VexFlowTests.makeFactory(options, 800, 130); + const stave = f.Stave({ x: 10, y: 10, width: 750 }); + function createNoteBlock(keys, stem_direction) { + const notes = [f.StaveNote({ keys: ['f/4'], stem_direction, duration: '16' })]; + let allGraceNotes = []; + const graceNotesToBeam = []; + ['8', '16', '32', '64'].forEach(function (duration) { + const graceNotes = [ + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: false }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: false }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: false }, + ].map(f.GraceNote.bind(f)); + graceNotesToBeam.push([graceNotes[0], graceNotes[1]]); + graceNotesToBeam.push([graceNotes[2], graceNotes[3]]); + graceNotesToBeam.push([graceNotes[4], graceNotes[5]]); + allGraceNotes = allGraceNotes.concat(graceNotes); + }); + const graceNoteGroup = f.GraceNoteGroup({ notes: allGraceNotes }); + graceNotesToBeam.forEach((g) => graceNoteGroup.beamNotes(g)); + notes[0].addModifier(graceNoteGroup, 0); + return notes; + } + const voice = f.Voice().setStrict(false); + voice.addTickables(createNoteBlock(['d/4', 'a/4'], 1)); + voice.addTickables(createNoteBlock(['d/4', 'a/4'], -1)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteSlashWithBeams'); +} +function multipleVoices(options) { + const f = VexFlowTests.makeFactory(options, 450, 140); + const stave = f.Stave({ x: 10, y: 10, width: 450 }); + const notes = [ + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['d/5'], stem_direction: 1, duration: '16' }, + { keys: ['c/5'], stem_direction: 1, duration: '16' }, + { keys: ['c/5'], stem_direction: 1, duration: '16' }, + { keys: ['d/5'], stem_direction: 1, duration: '16' }, + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['e/5'], stem_direction: 1, duration: '16' }, + ].map(f.StaveNote.bind(f)); + const notes2 = [ + { keys: ['f/4'], stem_direction: -1, duration: '16' }, + { keys: ['e/4'], stem_direction: -1, duration: '16' }, + { keys: ['d/4'], stem_direction: -1, duration: '16' }, + { keys: ['c/4'], stem_direction: -1, duration: '16' }, + { keys: ['c/4'], stem_direction: -1, duration: '16' }, + { keys: ['d/4'], stem_direction: -1, duration: '16' }, + { keys: ['f/4'], stem_direction: -1, duration: '16' }, + { keys: ['e/4'], stem_direction: -1, duration: '16' }, + ].map(f.StaveNote.bind(f)); + const gracenotes1 = [{ keys: ['b/4'], stem_direction: 1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes2 = [{ keys: ['f/4'], stem_direction: -1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes3 = [ + { keys: ['f/4'], duration: '32', stem_direction: -1 }, + { keys: ['e/4'], duration: '32', stem_direction: -1 }, + ].map(f.GraceNote.bind(f)); + const gracenotes4 = [ + { keys: ['f/5'], duration: '32', stem_direction: 1 }, + { keys: ['e/5'], duration: '32', stem_direction: 1 }, + { keys: ['e/5'], duration: '8', stem_direction: 1 }, + ].map(f.GraceNote.bind(f)); + gracenotes2[0].setStemDirection(-1); + gracenotes2[0].addModifier(f.Accidental({ type: '#' }), 0); + notes[1].addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0); + notes[3].addModifier(f.GraceNoteGroup({ notes: gracenotes1 }), 0); + notes2[1].addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0); + notes2[5].addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0); + const voice = f.Voice().setStrict(false).addTickables(notes); + const voice2 = f.Voice().setStrict(false).addTickables(notes2); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Beam({ notes: notes2.slice(0, 4) }); + f.Beam({ notes: notes2.slice(4, 8) }); + f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave); + f.draw(); + options.assert.ok(true, 'Sixteenth Test'); +} +function multipleVoicesMultipleDraws(options) { + const f = VexFlowTests.makeFactory(options, 450, 140); + const stave = f.Stave({ x: 10, y: 10, width: 450 }); + const notes = [ + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['d/5'], stem_direction: 1, duration: '16' }, + { keys: ['c/5'], stem_direction: 1, duration: '16' }, + { keys: ['c/5'], stem_direction: 1, duration: '16' }, + { keys: ['d/5'], stem_direction: 1, duration: '16' }, + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['e/5'], stem_direction: 1, duration: '16' }, + ].map(f.StaveNote.bind(f)); + const notes2 = [ + { keys: ['f/4'], stem_direction: -1, duration: '16' }, + { keys: ['e/4'], stem_direction: -1, duration: '16' }, + { keys: ['d/4'], stem_direction: -1, duration: '16' }, + { keys: ['c/4'], stem_direction: -1, duration: '16' }, + { keys: ['c/4'], stem_direction: -1, duration: '16' }, + { keys: ['d/4'], stem_direction: -1, duration: '16' }, + { keys: ['f/4'], stem_direction: -1, duration: '16' }, + { keys: ['e/4'], stem_direction: -1, duration: '16' }, + ].map(f.StaveNote.bind(f)); + const gracenotes1 = [{ keys: ['b/4'], stem_direction: 1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes2 = [{ keys: ['f/4'], stem_direction: -1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes3 = [ + { keys: ['f/4'], duration: '32', stem_direction: -1 }, + { keys: ['e/4'], duration: '32', stem_direction: -1 }, + ].map(f.GraceNote.bind(f)); + const gracenotes4 = [ + { keys: ['f/5'], duration: '32', stem_direction: 1 }, + { keys: ['e/5'], duration: '32', stem_direction: 1 }, + { keys: ['e/5'], duration: '8', stem_direction: 1 }, + ].map(f.GraceNote.bind(f)); + gracenotes2[0].setStemDirection(-1); + gracenotes2[0].addModifier(f.Accidental({ type: '#' }), 0); + notes[1].addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0); + notes[3].addModifier(f.GraceNoteGroup({ notes: gracenotes1 }), 0); + notes2[1].addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0); + notes2[5].addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0); + const voice = f.Voice().setStrict(false).addTickables(notes); + const voice2 = f.Voice().setStrict(false).addTickables(notes2); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Beam({ notes: notes2.slice(0, 4) }); + f.Beam({ notes: notes2.slice(4, 8) }); + f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave); + f.draw(); + f.draw(); + options.assert.ok(true, 'Seventeenth Test'); +} +VexFlowTests.register(GraceNoteTests); +export { GraceNoteTests }; diff --git a/build/esm/tests/gracetabnote_tests.js b/build/esm/tests/gracetabnote_tests.js new file mode 100644 index 0000000000..39bd780d78 --- /dev/null +++ b/build/esm/tests/gracetabnote_tests.js @@ -0,0 +1,79 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Flow } from '../src/flow.js'; +import { Formatter } from '../src/formatter.js'; +import { GraceNoteGroup } from '../src/gracenotegroup.js'; +import { GraceTabNote } from '../src/gracetabnote.js'; +import { TabNote } from '../src/tabnote.js'; +import { TabStave } from '../src/tabstave.js'; +import { Voice } from '../src/voice.js'; +const GraceTabNoteTests = { + Start() { + QUnit.module('Grace Tab Notes'); + const run = VexFlowTests.runTests; + run('Grace Tab Note Simple', simple); + run('Grace Tab Note Slurred', slurred); + }, +}; +const tabNote = (noteStruct) => new TabNote(noteStruct); +const graceTabNote = (noteStruct) => new GraceTabNote(noteStruct); +function setupContext(opts, ctxBuilder) { + const context = ctxBuilder(opts.elementId, 350, 140); + const stave = new TabStave(10, 10, 350).addTabGlyph().setContext(context).draw(); + return { context, stave }; +} +function simple(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder); + const note0 = tabNote({ positions: [{ str: 4, fret: 6 }], duration: '4' }); + const note1 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: '4' }); + const note2 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: '4' }); + const note3 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: '4' }); + const gracenote_group0 = [{ positions: [{ str: 4, fret: 'x' }], duration: '8' }]; + const gracenote_group1 = [ + { positions: [{ str: 4, fret: 9 }], duration: '16' }, + { positions: [{ str: 4, fret: 10 }], duration: '16' }, + ]; + const gracenote_group2 = [{ positions: [{ str: 4, fret: 9 }], duration: '8' }]; + const gracenote_group3 = [ + { positions: [{ str: 5, fret: 10 }], duration: '8' }, + { positions: [{ str: 4, fret: 9 }], duration: '8' }, + ]; + const gracenotes0 = gracenote_group0.map(graceTabNote); + const gracenotes1 = gracenote_group1.map(graceTabNote); + const gracenotes2 = gracenote_group2.map(graceTabNote); + gracenotes2[0].setGhost(true); + const gracenotes3 = gracenote_group3.map(graceTabNote); + note0.addModifier(new GraceNoteGroup(gracenotes0), 0); + note1.addModifier(new GraceNoteGroup(gracenotes1), 0); + note2.addModifier(new GraceNoteGroup(gracenotes2), 0); + note3.addModifier(new GraceNoteGroup(gracenotes3), 0); + const voice = new Voice(Flow.TIME4_4); + voice.addTickables([note0, note1, note2, note3]); + new Formatter().joinVoices([voice]).format([voice], 250); + voice.draw(context, stave); + options.assert.ok(true, 'Simple Test'); +} +function slurred(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder); + const note0 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: 'h' }); + const note1 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: 'h' }); + const gracenote_group0 = [ + { positions: [{ str: 4, fret: 9 }], duration: '8' }, + { positions: [{ str: 4, fret: 10 }], duration: '8' }, + ]; + const gracenote_group1 = [ + { positions: [{ str: 4, fret: 7 }], duration: '16' }, + { positions: [{ str: 4, fret: 8 }], duration: '16' }, + { positions: [{ str: 4, fret: 9 }], duration: '16' }, + ]; + const gracenotes0 = gracenote_group0.map(graceTabNote); + const gracenotes1 = gracenote_group1.map(graceTabNote); + note0.addModifier(new GraceNoteGroup(gracenotes0, true), 0); + note1.addModifier(new GraceNoteGroup(gracenotes1, true), 0); + const voice = new Voice(Flow.TIME4_4); + voice.addTickables([note0, note1]); + new Formatter().joinVoices([voice]).format([voice], 200); + voice.draw(context, stave); + options.assert.ok(true, 'Slurred Test'); +} +VexFlowTests.register(GraceTabNoteTests); +export { GraceTabNoteTests }; diff --git a/build/esm/tests/index.js b/build/esm/tests/index.js new file mode 100644 index 0000000000..60d6917b7a --- /dev/null +++ b/build/esm/tests/index.js @@ -0,0 +1,69 @@ +export * from './accidental_tests.js'; +export * from './annotation_tests.js'; +export * from './articulation_tests.js'; +export * from './auto_beam_formatting_tests.js'; +export * from './bach_tests.js'; +export * from './barline_tests.js'; +export * from './beam_tests.js'; +export * from './bend_tests.js'; +export * from './boundingbox_tests.js'; +export * from './chordsymbol_tests.js'; +export * from './clef_tests.js'; +export * from './crossbeam_tests.js'; +export * from './curve_tests.js'; +export * from './dot_tests.js'; +export * from './easyscore_tests.js'; +export * from './factory_tests.js'; +export * from './font_tests.js'; +export * from './formatter_tests.js'; +export * from './fraction_tests.js'; +export * from './ghostnote_tests.js'; +export * from './glyphnote_tests.js'; +export * from './gracenote_tests.js'; +export * from './gracetabnote_tests.js'; +export * from './key_clef_tests.js'; +export * from './keymanager_tests.js'; +export * from './keysignature_tests.js'; +export * from './modifier_tests.js'; +export * from './multimeasurerest_tests.js'; +export * from './music_tests.js'; +export * from './notehead_tests.js'; +export * from './notesubgroup_tests.js'; +export * from './offscreencanvas_tests.js'; +export * from './ornament_tests.js'; +export * from './parser_tests.js'; +export * from './pedalmarking_tests.js'; +export * from './percussion_tests.js'; +export * from './registry_tests.js'; +export * from './renderer_tests.js'; +export * from './rests_tests.js'; +export * from './rhythm_tests.js'; +export * from './stave_tests.js'; +export * from './staveconnector_tests.js'; +export * from './stavehairpin_tests.js'; +export * from './staveline_tests.js'; +export * from './stavemodifier_tests.js'; +export * from './stavenote_tests.js'; +export * from './stavetie_tests.js'; +export * from './stringnumber_tests.js'; +export * from './strokes_tests.js'; +export * from './style_tests.js'; +export * from './tabnote_tests.js'; +export * from './tabslide_tests.js'; +export * from './tabstave_tests.js'; +export * from './tabtie_tests.js'; +export * from './textbracket_tests.js'; +export * from './textformatter_tests.js'; +export * from './textnote_tests.js'; +export * from './threevoice_tests.js'; +export * from './tickcontext_tests.js'; +export * from './timesignature_tests.js'; +export * from './tremolo_tests.js'; +export * from './tuning_tests.js'; +export * from './tuplet_tests.js'; +export * from './typeguard_tests.js'; +export * from './unison_tests.js'; +export * from './vf_prefix_tests.js'; +export * from './vibrato_tests.js'; +export * from './vibratobracket_tests.js'; +export * from './voice_tests.js'; diff --git a/build/esm/tests/key_clef_tests.js b/build/esm/tests/key_clef_tests.js new file mode 100644 index 0000000000..97bfdf8546 --- /dev/null +++ b/build/esm/tests/key_clef_tests.js @@ -0,0 +1,106 @@ +import { MAJOR_KEYS, MINOR_KEYS, VexFlowTests } from './vexflow_test_helpers.js'; +import { Glyph } from '../src/glyph.js'; +import { KeySignature } from '../src/keysignature.js'; +import { Stave } from '../src/stave.js'; +const ClefKeySignatureTests = { + Start() { + QUnit.module('Clef Keys'); + const run = VexFlowTests.runTests; + run('Major Key Clef Test', keys, { majorKeys: true }); + run('Minor Key Clef Test', keys, { majorKeys: false }); + run('Stave Helper', staveHelper); + }, +}; +const fontWidths = () => { + const glyphScale = 39; + const sharpWidth = Glyph.getWidth('accidentalSharp', glyphScale) + 1; + const flatWidth = Glyph.getWidth('accidentalFlat', glyphScale) + 1; + const ksPadding = 10; + const naturalWidth = Glyph.getWidth('accidentalNatural', glyphScale) + 2; + const clefWidth = Glyph.getWidth('gClef', glyphScale); + return { sharpWidth, flatWidth, naturalWidth, clefWidth, ksPadding }; +}; +function keys(options, contextBuilder) { + const w = fontWidths(); + const accidentalCount = 28; + const sharpTestWidth = accidentalCount * w.sharpWidth + w.clefWidth + Stave.defaultPadding + 6 * w.ksPadding; + const flatTestWidth = accidentalCount * w.flatWidth + w.clefWidth + Stave.defaultPadding + 6 * w.ksPadding; + const clefs = [ + 'treble', + 'soprano', + 'mezzo-soprano', + 'alto', + 'tenor', + 'baritone-f', + 'baritone-c', + 'bass', + 'french', + 'subbass', + 'percussion', + ]; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 20 + 80 * 2 * clefs.length); + const staves = []; + const keys = options.params.majorKeys ? MAJOR_KEYS : MINOR_KEYS; + let i; + let flat; + let sharp; + let keySig; + const yOffsetForFlatStaves = 10 + 80 * clefs.length; + for (i = 0; i < clefs.length; i++) { + staves[i] = new Stave(10, 10 + 80 * i, flatTestWidth); + staves[i].addClef(clefs[i]); + staves[i + clefs.length] = new Stave(10, yOffsetForFlatStaves + 10 + 80 * i, sharpTestWidth); + staves[i + clefs.length].addClef(clefs[i]); + for (flat = 0; flat < 8; flat++) { + keySig = new KeySignature(keys[flat]); + keySig.addToStave(staves[i]); + } + for (sharp = 8; sharp < keys.length; sharp++) { + keySig = new KeySignature(keys[sharp]); + keySig.addToStave(staves[i + clefs.length]); + } + } + Stave.formatBegModifiers(staves); + for (i = 0; i < clefs.length; i++) { + staves[i].setContext(ctx); + staves[i].draw(); + staves[i + clefs.length].setContext(ctx); + staves[i + clefs.length].draw(); + } + options.assert.ok(true, 'all pass'); +} +function staveHelper(options, contextBuilder) { + const w = fontWidths(); + const accidentalCount = 28; + const sharpTestWidth = accidentalCount * w.sharpWidth + w.clefWidth + Stave.defaultPadding + 7 * w.ksPadding; + const flatTestWidth = accidentalCount * w.flatWidth + w.clefWidth + Stave.defaultPadding + 7 * w.ksPadding; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 400); + const stave1 = new Stave(10, 10, flatTestWidth); + const stave2 = new Stave(10, 90, flatTestWidth); + const stave3 = new Stave(10, 170, sharpTestWidth); + const stave4 = new Stave(10, 260, sharpTestWidth); + const keys = MAJOR_KEYS; + stave1.addClef('treble'); + stave2.addClef('bass'); + stave3.addClef('alto'); + stave4.addClef('tenor'); + for (let n = 0; n < 8; ++n) { + stave1.addKeySignature(keys[n]); + stave2.addKeySignature(keys[n]); + } + for (let i = 8; i < keys.length; ++i) { + stave3.addKeySignature(keys[i]); + stave4.addKeySignature(keys[i]); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + stave3.setContext(ctx); + stave3.draw(); + stave4.setContext(ctx); + stave4.draw(); + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(ClefKeySignatureTests); +export { ClefKeySignatureTests }; diff --git a/build/esm/tests/keymanager_tests.js b/build/esm/tests/keymanager_tests.js new file mode 100644 index 0000000000..a2b5e55f6d --- /dev/null +++ b/build/esm/tests/keymanager_tests.js @@ -0,0 +1,68 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { KeyManager } from '../src/index.js'; +const KeyManagerTests = { + Start() { + QUnit.module('KeyManager'); + QUnit.test('Valid Notes', works); + QUnit.test('Select Notes', selectNotes); + }, +}; +function works(assert) { + const manager = new KeyManager('g'); + assert.equal(manager.getAccidental('f').accidental, '#'); + manager.setKey('a'); + assert.equal(manager.getAccidental('c').accidental, '#'); + assert.equal(manager.getAccidental('a').accidental, null); + assert.equal(manager.getAccidental('f').accidental, '#'); + manager.setKey('A'); + assert.equal(manager.getAccidental('c').accidental, '#'); + assert.equal(manager.getAccidental('a').accidental, null); + assert.equal(manager.getAccidental('f').accidental, '#'); +} +function selectNotes(assert) { + const manager = new KeyManager('f'); + assert.equal(manager.selectNote('bb').note, 'bb'); + assert.equal(manager.selectNote('bb').accidental, 'b'); + assert.equal(manager.selectNote('g').note, 'g'); + assert.equal(manager.selectNote('g').accidental, null); + assert.equal(manager.selectNote('b').note, 'b'); + assert.equal(manager.selectNote('b').accidental, null); + assert.equal(manager.selectNote('a#').note, 'bb'); + assert.equal(manager.selectNote('g#').note, 'g#'); + assert.equal(manager.selectNote('g#').note, 'g#'); + assert.equal(manager.selectNote('bb').note, 'bb'); + assert.equal(manager.selectNote('bb').accidental, 'b'); + assert.equal(manager.selectNote('g').note, 'g'); + assert.equal(manager.selectNote('g').accidental, null); + assert.equal(manager.selectNote('b').note, 'b'); + assert.equal(manager.selectNote('b').accidental, null); + assert.equal(manager.selectNote('a#').note, 'bb'); + assert.equal(manager.selectNote('g#').note, 'g#'); + manager.reset(); + assert.equal(manager.selectNote('g#').change, true); + assert.equal(manager.selectNote('g#').change, false); + assert.equal(manager.selectNote('g').change, true); + assert.equal(manager.selectNote('g').change, false); + assert.equal(manager.selectNote('g#').change, true); + manager.reset(); + let note = manager.selectNote('bb'); + assert.equal(note.change, false); + assert.equal(note.accidental, 'b'); + note = manager.selectNote('g'); + assert.equal(note.change, false); + assert.equal(note.accidental, null); + note = manager.selectNote('g#'); + assert.equal(note.change, true); + assert.equal(note.accidental, '#'); + note = manager.selectNote('g'); + assert.equal(note.change, true); + assert.equal(note.accidental, null); + note = manager.selectNote('g'); + assert.equal(note.change, false); + assert.equal(note.accidental, null); + note = manager.selectNote('g#'); + assert.equal(note.change, true); + assert.equal(note.accidental, '#'); +} +VexFlowTests.register(KeyManagerTests); +export { KeyManagerTests }; diff --git a/build/esm/tests/keysignature_tests.js b/build/esm/tests/keysignature_tests.js new file mode 100644 index 0000000000..d3a18496aa --- /dev/null +++ b/build/esm/tests/keysignature_tests.js @@ -0,0 +1,332 @@ +import { MAJOR_KEYS, MINOR_KEYS, VexFlowTests } from './vexflow_test_helpers.js'; +import { Flow } from '../src/flow.js'; +import { Glyph } from '../src/glyph.js'; +import { KeySignature } from '../src/keysignature.js'; +import { Stave } from '../src/stave.js'; +import { BarlineType } from '../src/stavebarline.js'; +const KeySignatureTests = { + Start() { + QUnit.module('KeySignature'); + QUnit.test('Key Parser Test', parser); + const run = VexFlowTests.runTests; + run('Major Key Test', majorKeys); + run('Minor Key Test', minorKeys); + run('Stave Helper', staveHelper); + run('Cancelled key test', majorKeysCanceled); + run('Cancelled key (for each clef) test', keysCanceledForEachClef); + run('Altered key test', majorKeysAltered); + run('End key with clef test', endKeyWithClef); + run('Key Signature Change test', changeKey); + run('Key Signature with/without clef symbol', clefKeySignature); + }, +}; +const fontWidths = () => { + const glyphScale = 39; + const sharpWidth = Glyph.getWidth('accidentalSharp', glyphScale) + 1; + const flatWidth = Glyph.getWidth('accidentalFlat', glyphScale) + 1; + const naturalWidth = Glyph.getWidth('accidentalNatural', glyphScale) + 2; + const clefWidth = Glyph.getWidth('gClef', glyphScale) * 2; + return { sharpWidth, flatWidth, naturalWidth, clefWidth }; +}; +function parser(assert) { + assert.expect(11); + function catchError(spec) { + assert.throws(() => Flow.keySignature(spec), /BadKeySignature/); + } + catchError('asdf'); + catchError('D!'); + catchError('E#'); + catchError('D#'); + catchError('#'); + catchError('b'); + catchError('Kb'); + catchError('Fb'); + catchError('Dbm'); + catchError('B#m'); + Flow.keySignature('B'); + Flow.keySignature('C'); + Flow.keySignature('Fm'); + Flow.keySignature('Ab'); + Flow.keySignature('Abm'); + Flow.keySignature('F#'); + Flow.keySignature('G#m'); + assert.ok(true, 'all pass'); +} +function majorKeys(options, contextBuilder) { + const w = fontWidths(); + const accidentalCount = 28; + const casePadding = 10; + const testCases = 7; + const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + Stave.defaultPadding; + const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + Stave.defaultPadding; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240); + const stave1 = new Stave(10, 10, flatTestWidth); + const stave2 = new Stave(10, 90, sharpTestWidth); + const keys = MAJOR_KEYS; + let keySig = null; + for (let i = 0; i < 8; ++i) { + keySig = new KeySignature(keys[i]); + keySig.addToStave(stave1); + } + for (let n = 8; n < keys.length; ++n) { + keySig = new KeySignature(keys[n]); + keySig.addToStave(stave2); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + options.assert.ok(true, 'all pass'); +} +function majorKeysCanceled(options, contextBuilder) { + const scale = 0.9; + const w = fontWidths(); + const flatPadding = 18; + const sharpPadding = 20; + const flatTestCases = 8; + const sharpTestCases = 7; + const sharpTestWidth = 28 * w.sharpWidth + 21 * w.naturalWidth + sharpPadding * sharpTestCases + Stave.defaultPadding + w.clefWidth; + const flatTestWidth = 28 * w.flatWidth + 28 * w.naturalWidth + flatPadding * flatTestCases + Stave.defaultPadding + w.clefWidth; + const eFlatTestWidth = 28 * w.flatWidth + 32 * w.naturalWidth + flatPadding * flatTestCases + Stave.defaultPadding + w.clefWidth; + const eSharpTestWidth = 28 * w.sharpWidth + 28 * w.naturalWidth + sharpPadding * sharpTestCases + Stave.defaultPadding + w.clefWidth; + const maxWidth = Math.max(Math.max(sharpTestWidth, flatTestWidth, Math.max(eSharpTestWidth, eFlatTestWidth))); + const ctx = contextBuilder(options.elementId, maxWidth + 100, 500); + ctx.scale(scale, scale); + const stave1 = new Stave(10, 10, flatTestWidth).addClef('treble'); + const stave2 = new Stave(10, 90, sharpTestWidth).addClef('treble'); + const stave3 = new Stave(10, 170, eFlatTestWidth).addClef('treble'); + const stave4 = new Stave(10, 250, eSharpTestWidth).addClef('treble'); + const keys = MAJOR_KEYS; + let keySig = null; + let i; + let n; + for (i = 0; i < 8; ++i) { + keySig = new KeySignature(keys[i]); + keySig.cancelKey('Cb'); + keySig.setPadding(flatPadding); + keySig.addToStave(stave1); + } + for (n = 8; n < keys.length; ++n) { + keySig = new KeySignature(keys[n]); + keySig.cancelKey('C#'); + keySig.setPadding(sharpPadding); + keySig.addToStave(stave2); + } + for (i = 0; i < 8; ++i) { + keySig = new KeySignature(keys[i]); + keySig.cancelKey('E'); + keySig.setPadding(flatPadding); + keySig.addToStave(stave3); + } + for (n = 8; n < keys.length; ++n) { + keySig = new KeySignature(keys[n]); + keySig.cancelKey('Ab'); + keySig.setPadding(sharpPadding); + keySig.addToStave(stave4); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + stave3.setContext(ctx); + stave3.draw(); + stave4.setContext(ctx); + stave4.draw(); + options.assert.ok(true, 'all pass'); +} +function keysCanceledForEachClef(options, contextBuilder) { + const scale = 0.8; + const w = fontWidths(); + const keyPadding = 10; + const keys = ['C#', 'Cb']; + const flatsKey = [7, 14]; + const sharpsKey = [14, 7]; + const natsKey = [7, 7]; + const max = 21 * Math.max(w.sharpWidth, w.flatWidth) * 2 + keyPadding * 6 + Stave.defaultPadding + w.clefWidth; + const ctx = contextBuilder(options.elementId, max + 100, 380); + ctx.scale(scale, scale); + const x = 20; + let y = 20; + let tx = x; + ['bass', 'tenor', 'soprano', 'mezzo-soprano', 'baritone-f'].forEach(function (clef) { + keys.forEach((key, keyIx) => { + const cancelKey = keys[(keyIx + 1) % 2]; + const width = flatsKey[keyIx] * w.flatWidth + + natsKey[keyIx] * w.naturalWidth + + sharpsKey[keyIx] * w.sharpWidth + + keyPadding * 3 + + w.clefWidth + + Stave.defaultPadding; + const stave = new Stave(tx, y, width); + stave.setClef(clef); + stave.addKeySignature(cancelKey); + stave.addKeySignature(key, cancelKey); + stave.addKeySignature(key); + stave.setContext(ctx).draw(); + tx += width; + }); + tx = x; + y += 80; + }); + options.assert.ok(true, 'all pass'); +} +function majorKeysAltered(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 780, 500); + ctx.scale(0.9, 0.9); + const stave1 = new Stave(10, 10, 750).addClef('treble'); + const stave2 = new Stave(10, 90, 750).addClef('treble'); + const stave3 = new Stave(10, 170, 750).addClef('treble'); + const stave4 = new Stave(10, 250, 750).addClef('treble'); + const keys = MAJOR_KEYS; + let keySig = null; + let i; + let n; + for (i = 0; i < 8; ++i) { + keySig = new KeySignature(keys[i]); + keySig.alterKey(['bs', 'bs']); + keySig.setPadding(18); + keySig.addToStave(stave1); + } + for (n = 8; n < keys.length; ++n) { + keySig = new KeySignature(keys[n]); + keySig.alterKey(['+', '+', '+']); + keySig.setPadding(20); + keySig.addToStave(stave2); + } + for (i = 0; i < 8; ++i) { + keySig = new KeySignature(keys[i]); + keySig.alterKey(['n', 'bs', 'bb']); + keySig.setPadding(18); + keySig.addToStave(stave3); + } + for (n = 8; n < keys.length; ++n) { + keySig = new KeySignature(keys[n]); + keySig.alterKey(['++', '+', 'n', '+']); + keySig.setPadding(20); + keySig.addToStave(stave4); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + stave3.setContext(ctx); + stave3.draw(); + stave4.setContext(ctx); + stave4.draw(); + options.assert.ok(true, 'all pass'); +} +function minorKeys(options, contextBuilder) { + const accidentalCount = 28; + const w = fontWidths(); + const casePadding = 10; + const testCases = 7; + const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + Stave.defaultPadding; + const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + Stave.defaultPadding; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240); + const stave1 = new Stave(10, 10, flatTestWidth); + const stave2 = new Stave(10, 90, sharpTestWidth); + const keys = MINOR_KEYS; + let keySig = null; + for (let i = 0; i < 8; ++i) { + keySig = new KeySignature(keys[i]); + keySig.addToStave(stave1); + } + for (let n = 8; n < keys.length; ++n) { + keySig = new KeySignature(keys[n]); + keySig.addToStave(stave2); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + options.assert.ok(true, 'all pass'); +} +function endKeyWithClef(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 200); + ctx.scale(0.9, 0.9); + const stave1 = new Stave(10, 10, 350); + stave1 + .setKeySignature('G') + .setBegBarType(BarlineType.REPEAT_BEGIN) + .setEndBarType(BarlineType.REPEAT_END) + .setClef('treble') + .addTimeSignature('4/4') + .setEndClef('bass') + .setEndKeySignature('Cb'); + const stave2 = new Stave(10, 90, 350); + stave2.setKeySignature('Cb').setClef('bass').setEndClef('treble').setEndKeySignature('G'); + stave1.setContext(ctx).draw(); + stave2.setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function staveHelper(options, contextBuilder) { + const w = fontWidths(); + const accidentalCount = 28; + const casePadding = 10; + const testCases = 7; + const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + Stave.defaultPadding; + const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + Stave.defaultPadding; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240); + const stave1 = new Stave(10, 10, flatTestWidth); + const stave2 = new Stave(10, 90, sharpTestWidth); + const keys = MAJOR_KEYS; + for (let i = 0; i < 8; ++i) { + stave1.addKeySignature(keys[i]); + } + for (let n = 8; n < keys.length; ++n) { + stave2.addKeySignature(keys[n]); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + options.assert.ok(true, 'all pass'); +} +function changeKey(options) { + const f = VexFlowTests.makeFactory(options, 900); + const stave = f.Stave({ x: 10, y: 10, width: 800 }).addClef('treble').addTimeSignature('C|'); + const voice = f + .Voice() + .setStrict(false) + .addTickables([ + f.KeySigNote({ key: 'Bb' }), + f.StaveNote({ keys: ['c/4'], duration: '1' }), + f.BarNote(), + f.KeySigNote({ key: 'D', cancelKey: 'Bb' }), + f.StaveNote({ keys: ['c/4'], duration: '1' }), + f.BarNote(), + f.KeySigNote({ key: 'Bb' }), + f.StaveNote({ keys: ['c/4'], duration: '1' }), + f.BarNote(), + f.KeySigNote({ key: 'D', alterKey: ['b', 'n'] }), + f.StaveNote({ keys: ['c/4'], duration: '1' }), + ]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'all pass'); +} +function clefKeySignature(options) { + const f = VexFlowTests.makeFactory(options, 900); + const stave = f.Stave({ x: 10, y: 10, width: 800 }).addClef('bass').addTimeSignature('C|').setClefLines('bass'); + const voice = f + .Voice() + .setStrict(false) + .addTickables([ + f.KeySigNote({ key: 'Bb' }), + f.StaveNote({ keys: ['c/4'], duration: '1', clef: 'bass' }), + f.BarNote(), + f.KeySigNote({ key: 'D', cancelKey: 'Bb' }), + f.StaveNote({ keys: ['c/4'], duration: '1', clef: 'bass' }), + f.BarNote(), + f.KeySigNote({ key: 'Bb' }), + f.StaveNote({ keys: ['c/4'], duration: '1', clef: 'bass' }), + f.BarNote(), + f.KeySigNote({ key: 'D', alterKey: ['b', 'n'] }), + f.StaveNote({ keys: ['c/4'], duration: '1', clef: 'bass' }), + ]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(KeySignatureTests); +export { KeySignatureTests }; diff --git a/build/esm/tests/mocks.js b/build/esm/tests/mocks.js new file mode 100644 index 0000000000..64d6a6f680 --- /dev/null +++ b/build/esm/tests/mocks.js @@ -0,0 +1,71 @@ +import { Fraction } from '../src/fraction.js'; +import { Tickable } from '../src/tickable.js'; +class MockTickable extends Tickable { + constructor() { + super(...arguments); + this.ticks = new Fraction(1, 1); + this.width = 0; + this.ignore_ticks = false; + } + init() { + } + getX() { + return this.tickContext.getX(); + } + getIntrinsicTicks() { + return this.ticks.value(); + } + getTicks() { + return this.ticks; + } + setTicks(t) { + this.ticks = new Fraction(t, 1); + return this; + } + getMetrics() { + return { + width: 0, + glyphWidth: 0, + notePx: this.width, + modLeftPx: 0, + modRightPx: 0, + leftDisplacedHeadPx: 0, + rightDisplacedHeadPx: 0, + glyphPx: 0, + }; + } + getWidth() { + return this.width; + } + setWidth(w) { + this.width = w; + return this; + } + setVoice(v) { + this.voice = v; + return this; + } + setStave(stave) { + this.stave = stave; + return this; + } + getStave() { + return this.stave; + } + setTickContext(tc) { + this.tickContext = tc; + return this; + } + setIgnoreTicks(flag) { + this.ignore_ticks = flag; + return this; + } + shouldIgnoreTicks() { + return this.ignore_ticks; + } + preFormat() { + } + draw(...args) { + } +} +export { MockTickable }; diff --git a/build/esm/tests/modifier_tests.js b/build/esm/tests/modifier_tests.js new file mode 100644 index 0000000000..70c78a3ce8 --- /dev/null +++ b/build/esm/tests/modifier_tests.js @@ -0,0 +1,24 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Modifier, ModifierContext } from '../src/index.js'; +const ModifierContextTests = { + Start() { + QUnit.module('ModifierContext'); + QUnit.test('Modifier Width Test', width); + QUnit.test('Modifier Management', management); + }, +}; +function width(assert) { + const mc = new ModifierContext(); + assert.equal(mc.getWidth(), 0, 'New modifier context has no width'); +} +function management(assert) { + const mc = new ModifierContext(); + const modifier1 = new Modifier(); + const modifier2 = new Modifier(); + mc.addMember(modifier1); + mc.addMember(modifier2); + const modifiers = mc.getMembers(Modifier.CATEGORY); + assert.equal(modifiers.length, 2, 'Added two modifiers'); +} +VexFlowTests.register(ModifierContextTests); +export { ModifierContextTests }; diff --git a/build/esm/tests/multimeasurerest_tests.js b/build/esm/tests/multimeasurerest_tests.js new file mode 100644 index 0000000000..3965181f94 --- /dev/null +++ b/build/esm/tests/multimeasurerest_tests.js @@ -0,0 +1,141 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Flow } from '../src/flow.js'; +import { Font } from '../src/font.js'; +const MultiMeasureRestTests = { + Start() { + QUnit.module('MultiMeasureRest'); + const run = VexFlowTests.runTests; + run('Simple Test', simple); + run('Stave with modifiers Test', staveWithModifiers); + }, +}; +function simple(options) { + const width = 910; + const f = VexFlowTests.makeFactory(options, width, 300); + const line_spacing_15px = { options: { spacing_between_lines_px: 15 } }; + const params = [ + [{}, { number_of_measures: 2, show_number: false }], + [{}, { number_of_measures: 2 }], + [{}, { number_of_measures: 2, line_thickness: 8, serif_thickness: 3 }], + [{}, { number_of_measures: 1, use_symbols: true }], + [{}, { number_of_measures: 2, use_symbols: true }], + [{}, { number_of_measures: 3, use_symbols: true }], + [{}, { number_of_measures: 4, use_symbols: true }], + [{}, { number_of_measures: 5, use_symbols: true }], + [{}, { number_of_measures: 6, use_symbols: true }], + [{}, { number_of_measures: 7, use_symbols: true }], + [{}, { number_of_measures: 8, use_symbols: true }], + [{}, { number_of_measures: 9, use_symbols: true }], + [{}, { number_of_measures: 10, use_symbols: true }], + [{}, { number_of_measures: 11, use_symbols: true }], + [{}, { number_of_measures: 11, use_symbols: false, padding_left: 20, padding_right: 20 }], + [{}, { number_of_measures: 11, use_symbols: true, symbol_spacing: 5 }], + [{}, { number_of_measures: 11, use_symbols: false, line: 3, number_line: 2 }], + [{}, { number_of_measures: 11, use_symbols: true, line: 3, number_line: 2 }], + [line_spacing_15px, { number_of_measures: 12 }], + [line_spacing_15px, { number_of_measures: 9, use_symbols: true }], + [line_spacing_15px, { number_of_measures: 12, spacing_between_lines_px: 15, number_glyph_point: 40 * 1.5 }], + [ + line_spacing_15px, + { + number_of_measures: 9, + spacing_between_lines_px: 15, + use_symbols: true, + number_glyph_point: 40 * 1.5, + }, + ], + [ + line_spacing_15px, + { + number_of_measures: 9, + spacing_between_lines_px: 15, + use_symbols: true, + number_glyph_point: 40 * 1.5, + semibreve_rest_glyph_scale: Flow.NOTATION_FONT_SCALE * 1.5, + }, + ], + ]; + const staveWidth = 100; + let x = 0; + let y = 0; + const mmRests = params.map((param) => { + if (x + staveWidth * 2 > width) { + x = 0; + y += 80; + } + const staveParams = param[0]; + const mmRestParams = param[1]; + staveParams.x = x; + staveParams.y = y; + staveParams.width = staveWidth; + x += staveWidth; + const stave = f.Stave(staveParams); + return f.MultiMeasureRest(mmRestParams).setStave(stave); + }); + f.draw(); + const xs = mmRests[0].getXs(); + const strY = mmRests[0].getStave().getYForLine(-0.5); + const str = 'TACET'; + const context = f.getContext(); + context.save(); + context.setFont(Font.SERIF, 16, 'bold'); + const metrics = context.measureText(str); + context.fillText(str, xs.left + (xs.right - xs.left) * 0.5 - metrics.width * 0.5, strY); + context.restore(); + options.assert.ok(true, 'Simple Test'); +} +function staveWithModifiers(options) { + const width = 910; + const f = VexFlowTests.makeFactory(options, width, 200); + let x = 0; + let y = 0; + const params = [ + [{ clef: 'treble', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', keySig: 'G', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', timeSig: '4/4', keySig: 'G', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', endClef: 'bass', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', endKeySig: 'F', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', endTimeSig: '2/4', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', endClef: 'bass', endTimeSig: '2/4', params: { width: 150 } }, { number_of_measures: 5 }], + [ + { clef: 'treble', endClef: 'bass', endTimeSig: '2/4', params: { width: 150 } }, + { number_of_measures: 5, use_symbols: true }, + ], + ]; + params.forEach((param) => { + const staveOptions = param[0]; + const staveParams = staveOptions.params; + const mmrestParams = param[1]; + if (x + staveParams.width > width) { + x = 0; + y += 80; + } + staveParams.x = x; + x += staveParams.width; + staveParams.y = y; + const stave = f.Stave(staveParams); + if (staveOptions.clef) { + stave.addClef(staveOptions.clef); + } + if (staveOptions.timeSig) { + stave.addTimeSignature(staveOptions.timeSig); + } + if (staveOptions.keySig) { + stave.addKeySignature(staveOptions.keySig); + } + if (staveOptions.endClef) { + stave.addEndClef(staveOptions.endClef); + } + if (staveOptions.endKeySig) { + stave.setEndKeySignature(staveOptions.endKeySig); + } + if (staveOptions.endTimeSig) { + stave.setEndTimeSignature(staveOptions.endTimeSig); + } + return f.MultiMeasureRest(mmrestParams).setStave(stave); + }); + f.draw(); + options.assert.ok(true, 'Stave with modifiers Test'); +} +VexFlowTests.register(MultiMeasureRestTests); +export { MultiMeasureRestTests }; diff --git a/build/esm/tests/music_tests.js b/build/esm/tests/music_tests.js new file mode 100644 index 0000000000..a11ce6901e --- /dev/null +++ b/build/esm/tests/music_tests.js @@ -0,0 +1,161 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { KeyManager } from '../src/keymanager.js'; +import { Music } from '../src/music.js'; +const MusicTests = { + Start() { + QUnit.module('MusicTests'); + QUnit.test('Valid Notes', validNotes); + QUnit.test('Valid Keys', validKeys); + QUnit.test('Note Values', noteValue); + QUnit.test('Interval Values', intervalValue); + QUnit.test('Relative Notes', relativeNotes); + QUnit.test('Relative Note Names', relativeNoteNames); + QUnit.test('Canonical Notes', canonicalNotes); + QUnit.test('Canonical Intervals', canonicalIntervals); + QUnit.test('Scale Tones', scaleTones); + QUnit.test('Scale Intervals', scaleIntervals); + }, +}; +function validNotes(assert) { + assert.expect(10); + const music = new Music(); + let parts = music.getNoteParts('c'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, null); + parts = music.getNoteParts('C'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, null); + parts = music.getNoteParts('c#'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, '#'); + parts = music.getNoteParts('c##'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, '##'); + assert.throws(() => music.getNoteParts('r'), /BadArguments/, 'Invalid note: r'); + assert.throws(() => music.getNoteParts(''), /BadArguments/, "Invalid note: ''"); +} +function validKeys(assert) { + assert.expect(18); + const music = new Music(); + let parts = music.getKeyParts('c'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, null); + assert.equal(parts.type, 'M'); + parts = music.getKeyParts('d#'); + assert.equal(parts.root, 'd'); + assert.equal(parts.accidental, '#'); + assert.equal(parts.type, 'M'); + parts = music.getKeyParts('fbm'); + assert.equal(parts.root, 'f'); + assert.equal(parts.accidental, 'b'); + assert.equal(parts.type, 'm'); + parts = music.getKeyParts('c#mel'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, '#'); + assert.equal(parts.type, 'mel'); + parts = music.getKeyParts('g#harm'); + assert.equal(parts.root, 'g'); + assert.equal(parts.accidental, '#'); + assert.equal(parts.type, 'harm'); + assert.throws(() => music.getKeyParts('r'), /BadArguments/, 'Invalid key: r'); + assert.throws(() => music.getKeyParts(''), /BadArguments/, `Invalid key: ''`); + assert.throws(() => music.getKeyParts('#m'), /BadArguments/, 'Invalid key: #m'); +} +function noteValue(assert) { + assert.expect(3); + const music = new Music(); + let note = music.getNoteValue('c'); + assert.equal(note, 0); + assert.throws(() => music.getNoteValue('r'), /BadArguments/, 'Invalid note name'); + note = music.getNoteValue('f#'); + assert.equal(note, 6); +} +function intervalValue(assert) { + assert.expect(2); + const music = new Music(); + const value = music.getIntervalValue('b2'); + assert.equal(value, 1); + assert.throws(() => music.getIntervalValue('7'), /BadArguments/, 'Invalid interval name'); +} +function relativeNotes(assert) { + assert.expect(8); + const music = new Music(); + let value = music.getRelativeNoteValue(music.getNoteValue('c'), music.getIntervalValue('b5')); + assert.equal(value, 6); + assert.throws(() => music.getRelativeNoteValue(music.getNoteValue('bc'), music.getIntervalValue('b2')), /BadArguments/, 'Invalid note'); + assert.throws(() => music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('p3')), /BadArguments/, 'Invalid interval'); + value = music.getRelativeNoteValue(music.getNoteValue('d'), music.getIntervalValue('2'), -1); + assert.equal(value, 0); + assert.throws(() => music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('p4'), 0), /BadArguments/, 'Invalid direction: 0'); + value = music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('b5')); + assert.equal(value, 5); + value = music.getRelativeNoteValue(music.getNoteValue('c'), music.getIntervalValue('b2'), -1); + assert.equal(value, 11); + value = music.getRelativeNoteValue(music.getNoteValue('g'), music.getIntervalValue('p5')); + assert.equal(value, 2); +} +function relativeNoteNames(assert) { + assert.expect(9); + const music = new Music(); + assert.equal(music.getRelativeNoteName('b', music.getNoteValue('c#')), 'b##'); + assert.equal(music.getRelativeNoteName('c', music.getNoteValue('c')), 'c'); + assert.equal(music.getRelativeNoteName('c', music.getNoteValue('db')), 'c#'); + assert.equal(music.getRelativeNoteName('c', music.getNoteValue('b')), 'cb'); + assert.equal(music.getRelativeNoteName('c#', music.getNoteValue('db')), 'c#'); + assert.equal(music.getRelativeNoteName('e', music.getNoteValue('f#')), 'e##'); + assert.equal(music.getRelativeNoteName('e', music.getNoteValue('d#')), 'eb'); + assert.equal(music.getRelativeNoteName('e', music.getNoteValue('fb')), 'e'); + assert.throws(() => music.getRelativeNoteName('e', music.getNoteValue('g#')), /BadArguments/, 'Too far away. Notes not related.'); +} +function canonicalNotes(assert) { + assert.expect(3); + const music = new Music(); + assert.equal(music.getCanonicalNoteName(0), 'c'); + assert.equal(music.getCanonicalNoteName(2), 'd'); + assert.throws(() => music.getCanonicalNoteName(-1), /BadArguments/, 'Invalid note value'); +} +function canonicalIntervals(assert) { + assert.expect(3); + const music = new Music(); + assert.equal(music.getCanonicalIntervalName(0), 'unison'); + assert.equal(music.getCanonicalIntervalName(2), 'M2'); + assert.throws(() => music.getCanonicalIntervalName(-1), /BadArguments/, 'Invalid interval value'); +} +function scaleTones(assert) { + assert.expect(24); + const music = new Music(); + const manager = new KeyManager('CM'); + const c_major = music.getScaleTones(music.getNoteValue('c'), Music.scales.major); + let values = ['c', 'd', 'e', 'f', 'g', 'a', 'b']; + assert.equal(c_major.length, 7); + for (let i = 0; i < c_major.length; ++i) { + assert.equal(music.getCanonicalNoteName(c_major[i]), values[i]); + } + const c_dorian = music.getScaleTones(music.getNoteValue('c'), Music.scales.dorian); + values = ['c', 'd', 'eb', 'f', 'g', 'a', 'bb']; + let note = null; + assert.equal(c_dorian.length, 7); + for (let i = 0; i < c_dorian.length; ++i) { + note = music.getCanonicalNoteName(c_dorian[i]); + assert.equal(manager.selectNote(note).note, values[i]); + } + const c_mixolydian = music.getScaleTones(music.getNoteValue('c'), Music.scales.mixolydian); + values = ['c', 'd', 'e', 'f', 'g', 'a', 'bb']; + assert.equal(c_mixolydian.length, 7); + for (let i = 0; i < c_mixolydian.length; ++i) { + note = music.getCanonicalNoteName(c_mixolydian[i]); + assert.equal(manager.selectNote(note).note, values[i]); + } +} +function scaleIntervals(assert) { + assert.expect(6); + const m = new Music(); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('c'), m.getNoteValue('d'))), 'M2'); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('g'), m.getNoteValue('c'))), 'p4'); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('c'), m.getNoteValue('c'))), 'unison'); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('f'), m.getNoteValue('cb'))), 'dim5'); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('d'), m.getNoteValue('c'), 1)), 'b7'); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('d'), m.getNoteValue('c'), -1)), 'M2'); +} +VexFlowTests.register(MusicTests); +export { MusicTests }; diff --git a/build/esm/tests/notehead_tests.js b/build/esm/tests/notehead_tests.js new file mode 100644 index 0000000000..3ccac28c56 --- /dev/null +++ b/build/esm/tests/notehead_tests.js @@ -0,0 +1,221 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Flow } from '../src/flow.js'; +import { Formatter } from '../src/formatter.js'; +import { NoteHead } from '../src/notehead.js'; +import { Stave } from '../src/stave.js'; +import { StaveNote } from '../src/stavenote.js'; +import { TickContext } from '../src/tickcontext.js'; +import { Voice } from '../src/voice.js'; +const NoteHeadTests = { + Start() { + QUnit.module('NoteHead'); + const run = VexFlowTests.runTests; + run('Basic', basic); + run('Various Note Heads 1', variousNoteHeads); + run('Various Note Heads 2', variousNoteHeads2); + run('Various Heads', variousHeads); + run('Drum Chord Heads', drumChordHeads); + run('Bounding Boxes', basicBoundingBoxes); + }, +}; +function setContextStyle(ctx) { + ctx.scale(0.9, 0.9); + ctx.scale(2.0, 2.0); + ctx.font = '10pt Arial'; +} +function basic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 450, 250); + setContextStyle(ctx); + const stave = new Stave(10, 0, 250).addClef('treble'); + stave.setContext(ctx).draw(); + const formatter = new Formatter(); + const voice = new Voice(Flow.TIME4_4).setStrict(false); + const note_head1 = new NoteHead({ duration: '4', line: 3 }); + const note_head2 = new NoteHead({ duration: '1', line: 2.5 }); + const note_head3 = new NoteHead({ duration: '2', line: 0 }); + voice.addTickables([note_head1, note_head2, note_head3]); + formatter.joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok('Basic NoteHead test'); +} +function showNote(noteStruct, stave, ctx, x) { + const note = new StaveNote(noteStruct).setStave(stave); + new TickContext().addTickable(note).preFormat().setX(x); + note.setContext(ctx).draw(); + return note; +} +function variousHeads(options, contextBuilder) { + const notes = [ + { keys: ['g/5/d0'], duration: '4' }, + { keys: ['g/5/d1'], duration: '4' }, + { keys: ['g/5/d2'], duration: '4' }, + { keys: ['g/5/d3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/t0'], duration: '1' }, + { keys: ['g/5/t1'], duration: '4' }, + { keys: ['g/5/t2'], duration: '4' }, + { keys: ['g/5/t3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/x0'], duration: '1' }, + { keys: ['g/5/x1'], duration: '4' }, + { keys: ['g/5/x2'], duration: '4' }, + { keys: ['g/5/x3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/s1'], duration: '4' }, + { keys: ['g/5/s2'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/r1'], duration: '4' }, + { keys: ['g/5/r2'], duration: '4' }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + for (let staveNum = 0; staveNum < 2; ++staveNum) { + const stave = new Stave(10, 10 + staveNum * 120, notes.length * 25 + 75) + .addClef('percussion') + .setContext(ctx) + .draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.stem_direction = staveNum === 0 ? -1 : 1; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } + } +} +function variousNoteHeads(options, contextBuilder) { + const notes = [ + { keys: ['g/5/d'], duration: '1/2' }, + { keys: ['g/5/d'], duration: '1' }, + { keys: ['g/5/d'], duration: '2' }, + { keys: ['g/5/d'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/x'], duration: '1/2' }, + { keys: ['g/5/x'], duration: '1' }, + { keys: ['g/5/x'], duration: '2' }, + { keys: ['g/5/x'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/cx'], duration: '1/2' }, + { keys: ['g/5/cx'], duration: '1' }, + { keys: ['g/5/cx'], duration: '2' }, + { keys: ['g/5/cx'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/tu'], duration: '1/2' }, + { keys: ['g/5/tu'], duration: '1' }, + { keys: ['g/5/tu'], duration: '2' }, + { keys: ['g/5/tu'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/td'], duration: '1/2' }, + { keys: ['g/5/td'], duration: '1' }, + { keys: ['g/5/td'], duration: '2' }, + { keys: ['g/5/td'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/sf'], duration: '1/2' }, + { keys: ['g/5/sf'], duration: '1' }, + { keys: ['g/5/sf'], duration: '2' }, + { keys: ['g/5/sf'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/sb'], duration: '1/2' }, + { keys: ['g/5/sb'], duration: '1' }, + { keys: ['g/5/sb'], duration: '2' }, + { keys: ['g/5/sb'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/ci'], duration: '1/2' }, + { keys: ['g/5/ci'], duration: '1' }, + { keys: ['g/5/ci'], duration: '2' }, + { keys: ['g/5/ci'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/sq'], duration: '1/2' }, + { keys: ['g/5/sq'], duration: '1' }, + { keys: ['g/5/sq'], duration: '2' }, + { keys: ['g/5/sq'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + for (let staveNum = 0; staveNum < 2; ++staveNum) { + const stave = new Stave(10, 10 + staveNum * 120, notes.length * 25 + 75) + .addClef('percussion') + .setContext(ctx) + .draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.stem_direction = staveNum === 0 ? -1 : 1; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } + } +} +function variousNoteHeads2(options, contextBuilder) { + const notes = [ + { keys: ['g/5/do'], duration: '4', auto_stem: true }, + { keys: ['g/5/re'], duration: '4', auto_stem: true }, + { keys: ['g/5/mi'], duration: '4', auto_stem: true }, + { keys: ['g/5/fa'], duration: '4', auto_stem: true }, + { keys: ['e/4/faup'], duration: '4', auto_stem: true }, + { keys: ['g/5/so'], duration: '4', auto_stem: true }, + { keys: ['g/5/la'], duration: '4', auto_stem: true }, + { keys: ['g/5/ti'], duration: '4', auto_stem: true }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + const stave = new Stave(10, 10, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drumChordHeads(options, contextBuilder) { + const notes = [ + { keys: ['a/4/d0', 'g/5/x3'], duration: '4' }, + { keys: ['a/4/x3', 'g/5/d0'], duration: '4' }, + { keys: ['a/4/d1', 'g/5/x2'], duration: '4' }, + { keys: ['a/4/x2', 'g/5/d1'], duration: '4' }, + { keys: ['a/4/d2', 'g/5/x1'], duration: '4' }, + { keys: ['a/4/x1', 'g/5/d2'], duration: '4' }, + { keys: ['a/4/d3', 'g/5/x0'], duration: '4' }, + { keys: ['a/4/x0', 'g/5/d3'], duration: '4' }, + { keys: ['a/4', 'g/5/d0'], duration: '4' }, + { keys: ['a/4/x3', 'g/5'], duration: '4' }, + { keys: ['a/4/t0', 'g/5/s1'], duration: '4' }, + { keys: ['a/4/s1', 'g/5/t0'], duration: '4' }, + { keys: ['a/4/t1', 'g/5/s2'], duration: '4' }, + { keys: ['a/4/s2', 'g/5/t1'], duration: '4' }, + { keys: ['a/4/t2', 'g/5/r1'], duration: '4' }, + { keys: ['a/4/r1', 'g/5/t2'], duration: '4' }, + { keys: ['a/4/t3', 'g/5/r2'], duration: '4' }, + { keys: ['a/4/r2', 'g/5/t3'], duration: '4' }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + for (let h = 0; h < 2; ++h) { + const stave = new Stave(10, 10 + h * 120, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.stem_direction = h === 0 ? -1 : 1; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } + } +} +function basicBoundingBoxes(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 450, 250); + setContextStyle(ctx); + const stave = new Stave(10, 0, 250).addClef('treble'); + stave.setContext(ctx).draw(); + const formatter = new Formatter(); + const voice = new Voice(Flow.TIME4_4).setStrict(false); + const nh1 = new StaveNote({ keys: ['b/4'], duration: '4' }); + const nh2 = new StaveNote({ keys: ['a/4'], duration: '2' }); + const nh3 = new NoteHead({ duration: '1', line: 0 }); + voice.addTickables([nh1, nh2, nh3]); + formatter.joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + for (const bb of [nh1.noteHeads[0].getBoundingBox(), nh2.noteHeads[0].getBoundingBox(), nh3.getBoundingBox()]) { + ctx.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH()); + } + ctx.stroke(); + options.assert.ok('NoteHead Bounding Boxes'); +} +VexFlowTests.register(NoteHeadTests); +export { NoteHeadTests }; diff --git a/build/esm/tests/notesubgroup_tests.js b/build/esm/tests/notesubgroup_tests.js new file mode 100644 index 0000000000..a7d3fc47d6 --- /dev/null +++ b/build/esm/tests/notesubgroup_tests.js @@ -0,0 +1,149 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { BarNote } from '../src/barnote.js'; +import { Note } from '../src/note.js'; +import { BarlineType } from '../src/stavebarline.js'; +const NoteSubGroupTests = { + Start() { + QUnit.module('NoteSubGroup'); + const run = VexFlowTests.runTests; + run('Basic - ClefNote, TimeSigNote and BarNote', basic); + run('Multi Voice', multiVoiceSingleDraw); + run('Multi Voice Multiple Draws', multiVoiceDoubleDraw); + run('Multi Staff', multiStaff); + }, +}; +function createShortcuts(f) { + return { + createStaveNote: (noteStruct) => f.StaveNote(noteStruct), + addAccidental: (note, accid) => note.addModifier(f.Accidental({ type: accid }), 0), + addSubGroup: (note, subNotes) => note.addModifier(f.NoteSubGroup({ notes: subNotes }), 0), + }; +} +function basic(options) { + const f = VexFlowTests.makeFactory(options, 750, 200); + const ctx = f.getContext(); + const stave = f.Stave({ width: 600 }).addClef('treble'); + const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f); + const notes = [ + { keys: ['f/5'], stem_direction: -1, duration: '4' }, + { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'bass' }, + { keys: ['g/4'], stem_direction: -1, duration: '4', clef: 'alto' }, + { keys: ['a/4'], stem_direction: -1, duration: '4', clef: 'alto' }, + { keys: ['c/4'], stem_direction: -1, duration: '4', clef: 'tenor' }, + { keys: ['c/3'], stem_direction: +1, duration: '4', clef: 'tenor' }, + { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'tenor' }, + { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'tenor' }, + ].map(createStaveNote); + addAccidental(notes[1], '#'); + addAccidental(notes[2], 'n'); + addSubGroup(notes[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]); + addSubGroup(notes[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } })]); + addSubGroup(notes[4], [f.ClefNote({ type: 'tenor', options: { size: 'small' } }), new BarNote()]); + addSubGroup(notes[5], [f.TimeSigNote({ time: '6/8' })]); + addSubGroup(notes[6], [new BarNote(BarlineType.REPEAT_BEGIN)]); + addAccidental(notes[4], 'b'); + addAccidental(notes[6], 'bb'); + const voice = f.Voice().setStrict(false).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + notes.forEach((note) => Note.plotMetrics(ctx, note, 150)); + VexFlowTests.plotLegendForNoteWidth(ctx, 620, 120); + options.assert.ok(true, 'all pass'); +} +function multiVoiceSingleDraw(options) { + multiVoiceHelper(options, 1); +} +function multiVoiceDoubleDraw(options) { + multiVoiceHelper(options, 2); +} +function multiVoiceHelper(options, numDraws) { + const f = VexFlowTests.makeFactory(options, 550, 200); + const ctx = f.getContext(); + const stave = f.Stave().addClef('treble'); + const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f); + const notes1 = [ + { keys: ['f/5'], stem_direction: 1, duration: '4' }, + { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' }, + ].map(createStaveNote); + const notes2 = [ + { keys: ['c/4'], stem_direction: -1, duration: '4' }, + { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' }, + { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' }, + { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' }, + ].map(createStaveNote); + addAccidental(notes1[1], '#'); + addSubGroup(notes1[1], [ + f.ClefNote({ type: 'bass', options: { size: 'small' } }), + new BarNote(BarlineType.REPEAT_BEGIN), + f.TimeSigNote({ time: '3/4' }), + ]); + addSubGroup(notes2[2], [ + f.ClefNote({ type: 'alto', options: { size: 'small' } }), + f.TimeSigNote({ time: '9/8' }), + new BarNote(BarlineType.DOUBLE), + ]); + addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]); + addAccidental(notes1[2], 'b'); + addAccidental(notes2[3], '#'); + const voices = [f.Voice().addTickables(notes1), f.Voice().addTickables(notes2)]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + for (let i = 0; i < numDraws; i++) { + f.draw(); + } + notes1.forEach((note) => Note.plotMetrics(ctx, note, 150)); + options.assert.ok(true, 'all pass'); +} +function multiStaff(options) { + const f = VexFlowTests.makeFactory(options, 550, 400); + const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f); + const stave1 = f.Stave({ x: 15, y: 30, width: 500 }).setClef('treble'); + const notes1 = [ + { keys: ['f/5'], stem_direction: 1, duration: '4' }, + { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' }, + ].map(createStaveNote); + const notes2 = [ + { keys: ['c/4'], stem_direction: -1, duration: '4' }, + { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' }, + { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' }, + { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' }, + ].map(createStaveNote); + const stave2 = f.Stave({ x: 15, y: 150, width: 500 }).setClef('bass'); + const notes3 = [ + { keys: ['e/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + { keys: ['g/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['d/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['f/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['c/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['g/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + { keys: ['d/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + { keys: ['f/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + ].map(createStaveNote); + f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'brace' }); + f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleLeft' }); + f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleRight' }); + f.Beam({ notes: notes3.slice(1, 4) }); + f.Beam({ notes: notes3.slice(5) }); + addAccidental(notes1[1], '#'); + addSubGroup(notes1[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } }), f.TimeSigNote({ time: '3/4' })]); + addSubGroup(notes2[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } }), f.TimeSigNote({ time: '9/8' })]); + addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]); + addSubGroup(notes3[1], [f.ClefNote({ type: 'treble', options: { size: 'small' } })]); + addSubGroup(notes3[5], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]); + addAccidental(notes3[0], '#'); + addAccidental(notes3[3], 'b'); + addAccidental(notes3[5], '#'); + addAccidental(notes1[2], 'b'); + addAccidental(notes2[3], '#'); + const voice1 = f.Voice().addTickables(notes1); + const voice2 = f.Voice().addTickables(notes2); + const voice3 = f.Voice().addTickables(notes3); + f.Formatter().joinVoices([voice1, voice2]).joinVoices([voice3]).formatToStave([voice1, voice2, voice3], stave1); + f.draw(); + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(NoteSubGroupTests); +export { NoteSubGroupTests }; diff --git a/build/esm/tests/offscreencanvas_tests.js b/build/esm/tests/offscreencanvas_tests.js new file mode 100644 index 0000000000..a16b29f97f --- /dev/null +++ b/build/esm/tests/offscreencanvas_tests.js @@ -0,0 +1,47 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { CanvasContext } from '../src/canvascontext.js'; +import { Formatter } from '../src/formatter.js'; +import { Stave } from '../src/stave.js'; +import { BarlineType } from '../src/stavebarline.js'; +import { StaveNote } from '../src/stavenote.js'; +import { globalObject } from '../src/util.js'; +const OffscreenCanvasTests = { + Start() { + if (globalObject().OffscreenCanvas === undefined) { + return; + } + QUnit.module('OffscreenCanvas'); + QUnit.test('Simple Test', simpleTest); + }, +}; +function simpleTest(assert) { + const offscreenCanvas = new OffscreenCanvas(550, 200); + const offscreenCtx = offscreenCanvas.getContext('2d'); + if (offscreenCtx == null) { + throw new Error("Couldn't create offscreen context"); + } + const ctx = new CanvasContext(offscreenCtx); + const stave = new Stave(10, 50, 200); + stave.setEndBarType(BarlineType.END); + stave.addClef('treble').setContext(ctx).draw(); + const notes = [ + new StaveNote({ keys: ['c/4'], duration: 'q' }), + new StaveNote({ keys: ['d/4'], duration: 'q' }), + new StaveNote({ keys: ['b/4'], duration: 'qr' }), + new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + const imgBmp = offscreenCanvas.transferToImageBitmap(); + const canvas = document.createElement('canvas'); + canvas.width = offscreenCanvas.width; + canvas.height = offscreenCanvas.height; + const canvasCtx = canvas.getContext('2d'); + if (canvasCtx == null) { + throw new Error("Couldn't create canvas context"); + } + canvasCtx.drawImage(imgBmp, 0, 0); + document.body.appendChild(canvas); + assert.ok(true, 'all pass'); +} +VexFlowTests.register(OffscreenCanvasTests); +export { OffscreenCanvasTests }; diff --git a/build/esm/tests/ornament_tests.js b/build/esm/tests/ornament_tests.js new file mode 100644 index 0000000000..bd0f31a135 --- /dev/null +++ b/build/esm/tests/ornament_tests.js @@ -0,0 +1,332 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Accidental } from '../src/accidental.js'; +import { Beam } from '../src/beam.js'; +import { Dot } from '../src/dot.js'; +import { Formatter } from '../src/formatter.js'; +import { Glyph } from '../src/glyph.js'; +import { Ornament } from '../src/ornament.js'; +import { Stave } from '../src/stave.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Voice, VoiceMode } from '../src/voice.js'; +const OrnamentTests = { + Start() { + QUnit.module('Ornament'); + const run = VexFlowTests.runTests; + run('Ornaments', drawOrnaments); + run('Ornaments Vertically Shifted', drawOrnamentsDisplaced); + run('Ornaments - Delayed turns', drawOrnamentsDelayed); + run('Ornaments - Delayed turns, Multiple Draws', drawOrnamentsDelayedMultipleDraws); + run('Ornaments - Delayed turns, Multiple Voices', drawOrnamentsDelayedMultipleVoices); + run('Stacked', drawOrnamentsStacked); + run('With Upper/Lower Accidentals', drawOrnamentsWithAccidentals); + run('Jazz Ornaments', jazzOrnaments); + }, +}; +function drawOrnaments(options, contextBuilder) { + options.assert.expect(0); + const ctx = contextBuilder(options.elementId, 750, 195); + const stave = new Stave(10, 30, 700); + stave.setContext(ctx).draw(); + const notes = [ + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(new Ornament('mordent'), 0); + notes[1].addModifier(new Ornament('mordent_inverted'), 0); + notes[2].addModifier(new Ornament('turn'), 0); + notes[3].addModifier(new Ornament('turn_inverted'), 0); + notes[4].addModifier(new Ornament('tr'), 0); + notes[5].addModifier(new Ornament('upprall'), 0); + notes[6].addModifier(new Ornament('downprall'), 0); + notes[7].addModifier(new Ornament('prallup'), 0); + notes[8].addModifier(new Ornament('pralldown'), 0); + notes[9].addModifier(new Ornament('upmordent'), 0); + notes[10].addModifier(new Ornament('downmordent'), 0); + notes[11].addModifier(new Ornament('lineprall'), 0); + notes[12].addModifier(new Ornament('prallprall'), 0); + Formatter.FormatAndDraw(ctx, stave, notes); +} +function drawOrnamentsDisplaced(options, contextBuilder) { + options.assert.expect(0); + const ctx = contextBuilder(options.elementId, 750, 195); + const stave = new Stave(10, 30, 700); + stave.setContext(ctx).draw(); + const notes = [ + new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(new Ornament('mordent'), 0); + notes[1].addModifier(new Ornament('mordent_inverted'), 0); + notes[1].addModifier(new Ornament('mordent_inverted'), 0); + notes[2].addModifier(new Ornament('turn'), 0); + notes[3].addModifier(new Ornament('turn_inverted'), 0); + notes[4].addModifier(new Ornament('tr'), 0); + notes[5].addModifier(new Ornament('upprall'), 0); + notes[6].addModifier(new Ornament('downprall'), 0); + notes[7].addModifier(new Ornament('prallup'), 0); + notes[8].addModifier(new Ornament('pralldown'), 0); + notes[9].addModifier(new Ornament('upmordent'), 0); + notes[10].addModifier(new Ornament('downmordent'), 0); + notes[11].addModifier(new Ornament('lineprall'), 0); + notes[12].addModifier(new Ornament('prallprall'), 0); + Formatter.FormatAndDraw(ctx, stave, notes); +} +const addDelayedTurns = (f) => { + const context = f.getContext(); + const stave = f.Stave({ x: 10, y: 30, width: 500 }); + stave.setContext(context).draw(); + const notes = [ + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(f.Ornament('turn', { delayed: true }), 0); + notes[1].addModifier(f.Ornament('turn_inverted', { delayed: true }), 0); + notes[2].addModifier(f.Ornament('turn_inverted', { delayed: true }), 0); + notes[3].addModifier(f.Ornament('turn', { delayed: true }), 0); + return { context, stave, notes }; +}; +function drawOrnamentsDelayed(options) { + options.assert.expect(0); + const f = VexFlowTests.makeFactory(options, 550, 195); + const { context, stave, notes } = addDelayedTurns(f); + Formatter.FormatAndDraw(context, stave, notes); +} +function drawOrnamentsDelayedMultipleDraws(options) { + options.assert.expect(0); + const f = VexFlowTests.makeFactory(options, 550, 195); + const { context, stave, notes } = addDelayedTurns(f); + Formatter.FormatAndDraw(context, stave, notes); + Formatter.FormatAndDraw(context, stave, notes); +} +function drawOrnamentsDelayedMultipleVoices(options, contextBuilder) { + options.assert.expect(0); + const ctx = contextBuilder(options.elementId, 550, 195); + const stave = new Stave(10, 30, 500); + stave.addClef('treble'); + stave.addKeySignature('C#'); + stave.addTimeSignature('4/4'); + const notes1 = [ + new StaveNote({ keys: ['f/5'], duration: '2r' }), + new StaveNote({ keys: ['c/5'], duration: '2', stem_direction: 1 }), + ]; + const notes2 = [ + new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: -1 }), + new StaveNote({ keys: ['e/4'], duration: '4r' }), + new StaveNote({ keys: ['e/4'], duration: '2r' }), + ]; + notes1[1].addModifier(new Ornament('turn_inverted').setDelayed(true), 0); + notes2[0].addModifier(new Ornament('turn').setDelayed(true), 0); + const voice1 = new Voice({ num_beats: 4, beat_value: 4, }); + voice1.addTickables(notes1); + const voice2 = new Voice({ num_beats: 4, beat_value: 4, }); + voice2.addTickables(notes2); + const formatWidth = stave.getNoteEndX() - stave.getNoteStartX(); + const formatter = new Formatter(); + formatter.joinVoices([voice1]); + formatter.joinVoices([voice2]); + formatter.format([voice1, voice2], formatWidth); + stave.setContext(ctx).draw(); + voice1.draw(ctx, stave); + voice2.draw(ctx, stave); +} +function drawOrnamentsStacked(options) { + options.assert.expect(0); + const f = VexFlowTests.makeFactory(options, 550, 195); + const ctx = f.getContext(); + const stave = f.Stave({ x: 10, y: 30, width: 500 }); + stave.setContext(ctx).draw(); + const notes = [ + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(f.Ornament('mordent'), 0); + notes[1].addModifier(f.Ornament('turn_inverted'), 0); + notes[2].addModifier(f.Ornament('turn'), 0); + notes[3].addModifier(f.Ornament('turn_inverted'), 0); + notes[0].addModifier(f.Ornament('turn'), 0); + notes[1].addModifier(f.Ornament('prallup'), 0); + notes[2].addModifier(f.Ornament('upmordent'), 0); + notes[3].addModifier(f.Ornament('lineprall'), 0); + Formatter.FormatAndDraw(ctx, stave, notes); +} +function drawOrnamentsWithAccidentals(options) { + options.assert.expect(0); + const f = VexFlowTests.makeFactory(options, 650, 250); + const ctx = f.getContext(); + const stave = f.Stave({ x: 10, y: 60, width: 600 }); + stave.setContext(ctx).draw(); + const notes = [ + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(f.Ornament('mordent', { lowerAccidental: '#', upperAccidental: '#' }), 0); + notes[1].addModifier(f.Ornament('turn_inverted', { lowerAccidental: 'b', upperAccidental: 'b' }), 0); + notes[2].addModifier(f.Ornament('turn', { upperAccidental: '##', lowerAccidental: '##' }), 0); + notes[3].addModifier(f.Ornament('mordent_inverted', { lowerAccidental: 'db', upperAccidental: 'db' }), 0); + notes[4].addModifier(f.Ornament('turn_inverted', { upperAccidental: '++', lowerAccidental: '++' }), 0); + notes[5].addModifier(f.Ornament('tr', { upperAccidental: 'n', lowerAccidental: 'n' }), 0); + notes[6].addModifier(f.Ornament('prallup', { upperAccidental: 'd', lowerAccidental: 'd' }), 0); + notes[7].addModifier(f.Ornament('lineprall', { upperAccidental: 'db', lowerAccidental: 'db' }), 0); + notes[8].addModifier(f.Ornament('upmordent', { upperAccidental: 'bbs', lowerAccidental: 'bbs' }), 0); + notes[9].addModifier(f.Ornament('prallprall', { upperAccidental: 'bb', lowerAccidental: 'bb' }), 0); + notes[10].addModifier(f.Ornament('turn_inverted', { upperAccidental: '+', lowerAccidental: '+' }), 0); + Formatter.FormatAndDraw(ctx, stave, notes); +} +function jazzOrnaments(options) { + const clefWidth = Glyph.getWidth('gClef', 38); + function draw(modifiers, keys, x, width, y, stemDirection) { + const note = (keys, duration, modifier, stemDirection) => { + const n = new StaveNote({ keys, duration, stem_direction: stemDirection }) + .addModifier(modifier, 0) + .addModifier(new Accidental('b'), 0); + const dot = duration.indexOf('d') >= 0; + if (dot) { + Dot.buildAndAttach([n], { all: true }); + } + return n; + }; + const stave = new Stave(x, y, width).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(keys, '4d', modifiers[0], stemDirection), + note(keys, '8', modifiers[1], stemDirection), + note(keys, '4d', modifiers[2], stemDirection), + note(keys, '8', modifiers[3], stemDirection), + ]; + if (modifiers.length > 4) { + notes[3].addModifier(modifiers[4], 0); + } + Beam.generateBeams(notes); + const voice = new Voice({ + num_beats: 4, + beat_value: 4, + }).setMode(VoiceMode.SOFT); + voice.addTickables(notes); + const formatter = new Formatter().joinVoices([voice]); + formatter.format([voice], width - Stave.defaultPadding - clefWidth); + stave.setContext(ctx).draw(); + voice.draw(ctx, stave); + } + options.assert.expect(0); + const f = VexFlowTests.makeFactory(options, 950, 400); + const ctx = f.getContext(); + ctx.scale(1, 1); + const xStart = 10; + const width = 300; + const yStart = 50; + const staffHeight = 70; + let curX = xStart; + let curY = yStart; + let mods = [ + f.Ornament('scoop'), + f.Ornament('doit'), + f.Ornament('fall'), + f.Ornament('doitLong'), + ]; + draw(mods, ['a/5'], curX, width, curY, -1); + curX += width; + mods = [ + f.Ornament('fallLong'), + f.Ornament('bend'), + f.Ornament('plungerClosed'), + f.Ornament('plungerOpen'), + f.Ornament('bend'), + ]; + draw(mods, ['a/5'], curX, width, curY, -1); + curX += width; + mods = [ + f.Ornament('flip'), + f.Ornament('jazzTurn'), + f.Ornament('smear'), + f.Ornament('doit'), + ]; + draw(mods, ['a/5'], curX, width, curY, 1); + curX = xStart; + curY += staffHeight; + mods = [ + f.Ornament('scoop'), + f.Ornament('doit'), + f.Ornament('fall'), + f.Ornament('doitLong'), + ]; + draw(mods, ['e/5'], curX, width, curY); + curX += width; + mods = [ + f.Ornament('fallLong'), + f.Ornament('bend'), + f.Ornament('plungerClosed'), + f.Ornament('plungerOpen'), + f.Ornament('bend'), + ]; + draw(mods, ['e/5'], curX, width, curY); + curX += width; + mods = [ + f.Ornament('flip'), + f.Ornament('jazzTurn'), + f.Ornament('smear'), + f.Ornament('doit'), + ]; + draw(mods, ['e/5'], curX, width, curY); + curX = xStart; + curY += staffHeight; + mods = [ + f.Ornament('scoop'), + f.Ornament('doit'), + f.Ornament('fall'), + f.Ornament('doitLong'), + ]; + draw(mods, ['e/4'], curX, width, curY); + curX += width; + mods = [ + f.Ornament('fallLong'), + f.Ornament('bend'), + f.Ornament('plungerClosed'), + f.Ornament('plungerOpen'), + f.Ornament('bend'), + ]; + draw(mods, ['e/4'], curX, width, curY); + curX += width; + mods = [ + f.Ornament('flip'), + f.Ornament('jazzTurn'), + f.Ornament('smear'), + f.Ornament('doit'), + ]; + draw(mods, ['e/4'], curX, width, curY); +} +VexFlowTests.register(OrnamentTests); +export { OrnamentTests }; diff --git a/build/esm/tests/parser_tests.js b/build/esm/tests/parser_tests.js new file mode 100644 index 0000000000..218dd42b13 --- /dev/null +++ b/build/esm/tests/parser_tests.js @@ -0,0 +1,122 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Parser } from '../src/parser.js'; +const ParserTests = { + Start() { + QUnit.module('Parser'); + QUnit.test('Basic', basic); + QUnit.test('Advanced', advanced); + QUnit.test('Mixed', mixed); + QUnit.test('Micro Score', microscore); + }, +}; +class TestGrammar { + begin() { + return () => ({ expect: this.expect }); + } + BIGORLITTLE() { + return { expect: [this.BIGLINE, this.LITTLELINE], or: true }; + } + BIGLINE() { + return { expect: [this.LBRACE, this.WORD, this.WORDS, this.MAYBEEXCLAIM, this.RBRACE] }; + } + LITTLELINE() { + return { expect: [this.WORD, this.WORDS] }; + } + WORDS() { + return { expect: [this.COMMA, this.WORD], zeroOrMore: true }; + } + MAYBEEXCLAIM() { + return { expect: [this.EXCLAIM], maybe: true }; + } + LBRACE() { + return { token: '[{]' }; + } + RBRACE() { + return { token: '[}]' }; + } + WORD() { + return { token: '[a-zA-Z]+' }; + } + COMMA() { + return { token: '[,]' }; + } + EXCLAIM() { + return { token: '[!]' }; + } + EOL() { + return { token: '$' }; + } +} +class MicroScoreGrammar { + constructor() { + this.ITEM = () => ({ expect: [this.PIANO_KEY_NUMBER, this.CHORD], or: true }); + this.MAYBE_MORE_ITEMS = () => ({ expect: [this.ITEM], zeroOrMore: true }); + this.PIANO_KEY_NUMBER = () => ({ expect: [this.NUM], oneOrMore: true }); + this.CHORD = () => ({ expect: [this.LEFT_BRACKET, this.PIANO_KEY_NUMBER, this.MORE_CHORD_PARTS, this.RIGHT_BRACKET] }); + this.MORE_CHORD_PARTS = () => ({ expect: [this.PERIOD, this.PIANO_KEY_NUMBER], oneOrMore: true }); + this.NUM = () => ({ token: '\\d+' }); + this.WHITESPACE = () => ({ token: '\\s+' }); + this.PERIOD = () => ({ token: '\\.' }); + this.LEFT_BRACKET = () => ({ token: '\\[' }); + this.RIGHT_BRACKET = () => ({ token: '\\]' }); + this.EOL = () => ({ token: '$' }); + } + begin() { + return () => ({ expect: [this.ITEM, this.MAYBE_MORE_ITEMS, this.EOL] }); + } +} +function fails(assert, result, expectedErrorPos, msg) { + assert.notOk(result.success, msg); + assert.equal(result.errorPos, expectedErrorPos, msg); +} +function basic(assert) { + const grammar = new TestGrammar(); + grammar.expect = [grammar.LITTLELINE, grammar.EOL]; + const parser = new Parser(grammar); + const mustPass = ['first, second', 'first,second', 'first', 'first,second, third']; + mustPass.forEach((line) => assert.equal(parser.parse(line).success, true, line)); + fails(assert, parser.parse(''), 0); + fails(assert, parser.parse('first second'), 6); + fails(assert, parser.parse('first,,'), 5); + fails(assert, parser.parse('first,'), 5); + fails(assert, parser.parse(',,'), 0); +} +function advanced(assert) { + const grammar = new TestGrammar(); + grammar.expect = [grammar.BIGLINE, grammar.EOL]; + const parser = new Parser(grammar); + const mustPass = ['{first}', '{first!}', '{first,second}', '{first,second!}', '{first,second,third!}']; + mustPass.forEach((line) => assert.equal(parser.parse(line).success, true, line)); + fails(assert, parser.parse('{first,second,third,}'), 19); + fails(assert, parser.parse('first,second,third'), 0); + fails(assert, parser.parse('{first,second,third'), 19); + fails(assert, parser.parse('{!}'), 1); +} +function mixed(assert) { + const grammar = new TestGrammar(); + grammar.expect = [grammar.BIGORLITTLE, grammar.EOL]; + const parser = new Parser(grammar); + const mustPass = ['{first,second,third!}', 'first, second']; + mustPass.forEach((line) => assert.equal(parser.parse(line).success, true, line)); + fails(assert, parser.parse('first second'), 6); +} +function microscore(assert) { + const grammar = new MicroScoreGrammar(); + const parser = new Parser(grammar); + const mustPass = [ + '40 42 44 45 47 49 51 52', + '[40.44.47] [45.49.52] [47.51.54] [49.52.56]', + '40 [40.44.47] 45 47 [44.47.51]', + ]; + mustPass.forEach((line) => { + var _a; + const result = parser.parse(line); + assert.equal(result.success, true, line); + assert.equal((_a = result.matches) === null || _a === void 0 ? void 0 : _a.length, 3, line); + }); + fails(assert, parser.parse('40 42 44 45 47 49 5A 52'), 19); + fails(assert, parser.parse('40.44.47] [45.49.52] [47.51.54] [49.52.56]'), 2); + fails(assert, parser.parse('40 [40] 45 47 [44.47.51]'), 3); +} +VexFlowTests.register(ParserTests); +export { ParserTests }; diff --git a/build/esm/tests/pedalmarking_tests.js b/build/esm/tests/pedalmarking_tests.js new file mode 100644 index 0000000000..34396cfc46 --- /dev/null +++ b/build/esm/tests/pedalmarking_tests.js @@ -0,0 +1,64 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +const PedalMarkingTests = { + Start() { + QUnit.module('PedalMarking'); + const run = VexFlowTests.runTests; + run('Simple Pedal 1', simple1); + run('Simple Pedal 2', simple2); + run('Simple Pedal 3', simple3); + run('Release and Depress on Same Note 1', releaseDepress1); + run('Release and Depress on Same Note 2', releaseDepress2); + run('Custom Text 1', customTest1); + run('Custom Text 2', customTest2); + }, +}; +function createTest(makePedal) { + return (options) => { + const f = VexFlowTests.makeFactory(options, 550, 200); + const score = f.EasyScore(); + const stave0 = f.Stave({ width: 250 }).addClef('treble'); + const voice0 = score.voice(score.notes('b4/4, b4, b4, b4[stem="down"]', { stem: 'up' })); + f.Formatter().joinVoices([voice0]).formatToStave([voice0], stave0); + const stave1 = f.Stave({ width: 260, x: 250 }); + const voice1 = score.voice(score.notes('c4/4, c4, c4, c4', { stem: 'up' })); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + makePedal(f, voice0.getTickables(), voice1.getTickables()); + f.draw(); + options.assert.ok(true, 'Must render'); + }; +} +function withSimplePedal(style) { + return (factory, notes0, notes1) => factory.PedalMarking({ + notes: [notes0[0], notes0[2], notes0[3], notes1[3]], + options: { style }, + }); +} +function withReleaseAndDepressedPedal(style) { + return (factory, notes0, notes1) => factory.PedalMarking({ + notes: [notes0[0], notes0[3], notes0[3], notes1[1], notes1[1], notes1[3]], + options: { style }, + }); +} +const simple1 = createTest(withSimplePedal('text')); +const simple2 = createTest(withSimplePedal('bracket')); +const simple3 = createTest(withSimplePedal('mixed')); +const releaseDepress1 = createTest(withReleaseAndDepressedPedal('bracket')); +const releaseDepress2 = createTest(withReleaseAndDepressedPedal('mixed')); +const customTest1 = createTest((factory, notes0, notes1) => { + const pedal = factory.PedalMarking({ + notes: [notes0[0], notes1[3]], + options: { style: 'text' }, + }); + pedal.setCustomText('una corda', 'tre corda'); + return pedal; +}); +const customTest2 = createTest((factory, notes0, notes1) => { + const pedal = factory.PedalMarking({ + notes: [notes0[0], notes1[3]], + options: { style: 'mixed' }, + }); + pedal.setCustomText('Sost. Ped.'); + return pedal; +}); +VexFlowTests.register(PedalMarkingTests); +export { PedalMarkingTests }; diff --git a/build/esm/tests/percussion_tests.js b/build/esm/tests/percussion_tests.js new file mode 100644 index 0000000000..deaadfdf5e --- /dev/null +++ b/build/esm/tests/percussion_tests.js @@ -0,0 +1,180 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Dot, Font, FontStyle, FontWeight, Stave, StaveNote, TickContext, Tremolo, } from '../src/index.js'; +const PercussionTests = { + Start() { + QUnit.module('Percussion'); + const run = VexFlowTests.runTests; + run('Percussion Clef', draw); + run('Percussion Notes', drawNotes); + run('Percussion Basic0', basic0); + run('Percussion Basic1', basic1); + run('Percussion Basic2', basic2); + run('Percussion Snare0', snare0); + run('Percussion Snare1', snare1); + run('Percussion Snare2', snare2); + run('Percussion Snare3', snare3); + }, +}; +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new Stave(10, 10, 300).addClef('percussion').setContext(ctx).draw(); + options.assert.ok(true); +} +function showNote(struct, stave, ctx, x) { + const staveNote = new StaveNote(struct).setStave(stave); + new TickContext().addTickable(staveNote).preFormat().setX(x); + staveNote.setContext(ctx).draw(); + return staveNote; +} +function drawNotes(options, contextBuilder) { + const notes = [ + { keys: ['g/5/d0'], duration: '4' }, + { keys: ['g/5/d1'], duration: '4' }, + { keys: ['g/5/d2'], duration: '4' }, + { keys: ['g/5/d3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/t0'], duration: '1' }, + { keys: ['g/5/t1'], duration: '4' }, + { keys: ['g/5/t2'], duration: '4' }, + { keys: ['g/5/t3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/x0'], duration: '1' }, + { keys: ['g/5/x1'], duration: '4' }, + { keys: ['g/5/x2'], duration: '4' }, + { keys: ['g/5/x3'], duration: '4' }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + for (let h = 0; h < 2; ++h) { + const stave = new Stave(10, 10 + h * 120, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.stem_direction = h === 0 ? -1 : 1; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } + } +} +function createSingleMeasureTest(setup) { + return (options) => { + const f = VexFlowTests.makeFactory(options, 500); + const stave = f.Stave().addClef('percussion').setTimeSignature('4/4'); + setup(f); + f.Formatter().joinVoices(f.getVoices()).formatToStave(f.getVoices(), stave); + f.draw(); + options.assert.ok(true); + }; +} +const basic0 = createSingleMeasureTest((f) => { + const voice0 = f + .Voice() + .addTickables([ + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + ]); + const voice1 = f + .Voice() + .addTickables([ + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + ]); + f.Beam({ notes: voice0.getTickables() }); + f.Beam({ notes: voice1.getTickables().slice(0, 2) }); + f.Beam({ notes: voice1.getTickables().slice(3, 5) }); +}); +const basic1 = createSingleMeasureTest((f) => { + f.Voice().addTickables([ + f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), + f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), + f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), + f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), + ]); + f.Voice().addTickables([ + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + ]); +}); +const basic2 = createSingleMeasureTest((f) => { + const voice0 = f + .Voice() + .addTickables([ + f.StaveNote({ keys: ['a/5/x3'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5'], duration: '8' }), + f.StaveNote({ keys: ['g/4/n', 'g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + ]); + f.Beam({ notes: voice0.getTickables().slice(1, 8) }); + const notes1 = [ + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '8d', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: -1 }), + ]; + Dot.buildAndAttach([notes1[4]], { all: true }); + const voice1 = f.Voice().addTickables(notes1); + f.Beam({ notes: voice1.getTickables().slice(0, 2) }); + f.Beam({ notes: voice1.getTickables().slice(4, 6) }); +}); +const snare0 = createSingleMeasureTest((f) => { + const font = { + family: Font.SERIF, + size: 14, + weight: FontWeight.BOLD, + style: FontStyle.ITALIC, + }; + f.Voice().addTickables([ + f + .StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }) + .addModifier(f.Articulation({ type: 'a>' }), 0) + .addModifier(f.Annotation({ text: 'L', font }), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'R', font }), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'L', font }), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'L', font }), 0), + ]); +}); +const snare1 = createSingleMeasureTest((f) => { + f.Voice().addTickables([ + f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'ah' }), 0), + f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'ah' }), 0), + f.StaveNote({ keys: ['a/5/x3'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'a,' }), 0), + ]); +}); +const snare2 = createSingleMeasureTest((f) => { + f.Voice().addTickables([ + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(1), 0), + f.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(1), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(3), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(4), 0), + ]); +}); +const snare3 = createSingleMeasureTest((factory) => { + factory + .Voice() + .addTickables([ + factory.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(2), 0), + factory.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(2), 0), + factory.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(3), 0), + factory.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(4), 0), + ]); +}); +VexFlowTests.register(PercussionTests); +export { PercussionTests }; diff --git a/build/esm/tests/qunit/qunit.js b/build/esm/tests/qunit/qunit.js new file mode 100644 index 0000000000..0d456d769a --- /dev/null +++ b/build/esm/tests/qunit/qunit.js @@ -0,0 +1,5643 @@ +"use strict"; +(function () { + 'use strict'; + function _typeof(obj) { + "@babel/helpers - typeof"; + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof(obj); + } + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) + descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) + _defineProperties(Constructor.prototype, protoProps); + if (staticProps) + _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); + } + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); + } + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) + return _arrayLikeToArray(arr); + } + function _arrayWithHoles(arr) { + if (Array.isArray(arr)) + return arr; + } + function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) + return Array.from(iter); + } + function _iterableToArrayLimit(arr, i) { + var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; + if (_i == null) + return; + var _arr = []; + var _n = true; + var _d = false; + var _s, _e; + try { + for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + if (i && _arr.length === i) + break; + } + } + catch (err) { + _d = true; + _e = err; + } + finally { + try { + if (!_n && _i["return"] != null) + _i["return"](); + } + finally { + if (_d) + throw _e; + } + } + return _arr; + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) + return; + if (typeof o === "string") + return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) + n = o.constructor.name; + if (n === "Map" || n === "Set") + return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) + return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) + len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) + arr2[i] = arr[i]; + return arr2; + } + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _createForOfIteratorHelper(o, allowArrayLike) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (!it) { + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) + o = it; + var i = 0; + var F = function () { }; + return { + s: F, + n: function () { + if (i >= o.length) + return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }, + e: function (e) { + throw e; + }, + f: F + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var normalCompletion = true, didErr = false, err; + return { + s: function () { + it = it.call(o); + }, + n: function () { + var step = it.next(); + normalCompletion = step.done; + return step; + }, + e: function (e) { + didErr = true; + err = e; + }, + f: function () { + try { + if (!normalCompletion && it.return != null) + it.return(); + } + finally { + if (didErr) + throw err; + } + } + }; + } + function getGlobalThis() { + if (typeof globalThis !== 'undefined') { + return globalThis; + } + if (typeof self !== 'undefined') { + return self; + } + if (typeof window$1 !== 'undefined') { + return window$1; + } + if (typeof global !== 'undefined') { + return global; + } + throw new Error('Unable to locate global object'); + } + var g = getGlobalThis(); + var window$1 = g.window; + var console$1 = g.console; + var setTimeout$1 = g.setTimeout; + var clearTimeout = g.clearTimeout; + var document = window$1 && window$1.document; + var navigator = window$1 && window$1.navigator; + var localSessionStorage = function () { + var x = 'qunit-test-string'; + try { + g.sessionStorage.setItem(x, x); + g.sessionStorage.removeItem(x); + return g.sessionStorage; + } + catch (e) { + return undefined; + } + }(); + var StringMap = typeof g.Map === 'function' && typeof g.Map.prototype.keys === 'function' && typeof g.Symbol === 'function' && _typeof(g.Symbol.iterator) === 'symbol' ? g.Map : function StringMap(input) { + var _this = this; + var store = Object.create(null); + var hasOwn = Object.prototype.hasOwnProperty; + this.has = function (strKey) { + return hasOwn.call(store, strKey); + }; + this.get = function (strKey) { + return store[strKey]; + }; + this.set = function (strKey, val) { + if (!hasOwn.call(store, strKey)) { + this.size++; + } + store[strKey] = val; + return this; + }; + this.delete = function (strKey) { + if (hasOwn.call(store, strKey)) { + delete store[strKey]; + this.size--; + } + }; + this.forEach = function (callback) { + for (var strKey in store) { + callback(store[strKey], strKey); + } + }; + this.keys = function () { + return Object.keys(store); + }; + this.clear = function () { + store = Object.create(null); + this.size = 0; + }; + this.size = 0; + if (input) { + input.forEach(function (val, strKey) { + _this.set(strKey, val); + }); + } + }; + var StringSet = typeof g.Set === 'function' && typeof g.Set.prototype.values === 'function' ? g.Set : function (input) { + var set = Object.create(null); + if (Array.isArray(input)) { + input.forEach(function (item) { + set[item] = true; + }); + } + return { + add: function add(value) { + set[value] = true; + }, + has: function has(value) { + return value in set; + }, + get size() { + return Object.keys(set).length; + } + }; + }; + var Logger = { + warn: console$1 ? Function.prototype.bind.call(console$1.warn || console$1.log, console$1) : function () { } + }; + var toString = Object.prototype.toString; + var hasOwn$1 = Object.prototype.hasOwnProperty; + var nativePerf = getNativePerf(); + function getNativePerf() { + if (window$1 && typeof window$1.performance !== 'undefined' && typeof window$1.performance.mark === 'function' && typeof window$1.performance.measure === 'function') { + return window$1.performance; + } + else { + return undefined; + } + } + var performance = { + now: nativePerf ? nativePerf.now.bind(nativePerf) : Date.now, + measure: nativePerf ? function (comment, startMark, endMark) { + try { + nativePerf.measure(comment, startMark, endMark); + } + catch (ex) { + Logger.warn('performance.measure could not be executed because of ', ex.message); + } + } : function () { }, + mark: nativePerf ? nativePerf.mark.bind(nativePerf) : function () { } + }; + function diff(a, b) { + return a.filter(function (a) { + return b.indexOf(a) === -1; + }); + } + function inArray(elem, array) { + return array.indexOf(elem) !== -1; + } + function objectValues(obj) { + var allowArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var vals = allowArray && is('array', obj) ? [] : {}; + for (var key in obj) { + if (hasOwn$1.call(obj, key)) { + var val = obj[key]; + vals[key] = val === Object(val) ? objectValues(val, allowArray) : val; + } + } + return vals; + } + function objectValuesSubset(obj, model) { + if (obj !== Object(obj)) { + return obj; + } + var subset = {}; + for (var key in model) { + if (hasOwn$1.call(model, key) && hasOwn$1.call(obj, key)) { + subset[key] = objectValuesSubset(obj[key], model[key]); + } + } + return subset; + } + function extend(a, b, undefOnly) { + for (var prop in b) { + if (hasOwn$1.call(b, prop)) { + if (b[prop] === undefined) { + delete a[prop]; + } + else if (!(undefOnly && typeof a[prop] !== 'undefined')) { + a[prop] = b[prop]; + } + } + } + return a; + } + function objectType(obj) { + if (typeof obj === 'undefined') { + return 'undefined'; + } + if (obj === null) { + return 'null'; + } + var match = toString.call(obj).match(/^\[object\s(.*)\]$/); + var type = match && match[1]; + switch (type) { + case 'Number': + if (isNaN(obj)) { + return 'nan'; + } + return 'number'; + case 'String': + case 'Boolean': + case 'Array': + case 'Set': + case 'Map': + case 'Date': + case 'RegExp': + case 'Function': + case 'Symbol': + return type.toLowerCase(); + default: + return _typeof(obj); + } + } + function is(type, obj) { + return objectType(obj) === type; + } + function generateHash(module, testName) { + var str = module + '\x1C' + testName; + var hash = 0; + for (var i = 0; i < str.length; i++) { + hash = (hash << 5) - hash + str.charCodeAt(i); + hash |= 0; + } + var hex = (0x100000000 + hash).toString(16); + if (hex.length < 8) { + hex = '0000000' + hex; + } + return hex.slice(-8); + } + function errorString(error) { + var resultErrorString = String(error); + if (resultErrorString.slice(0, 7) === '[object') { + return (error.name || 'Error') + (error.message ? ": ".concat(error.message) : ''); + } + else { + return resultErrorString; + } + } + var BOXABLE_TYPES = new StringSet(['boolean', 'number', 'string']); + var memory = []; + function useStrictEquality(a, b) { + return a === b; + } + function useObjectValueEquality(a, b) { + return a === b || a.valueOf() === b.valueOf(); + } + function compareConstructors(a, b) { + return getConstructor(a) === getConstructor(b); + } + function getConstructor(obj) { + var proto = Object.getPrototypeOf(obj); + return !proto || proto.constructor === null ? Object : obj.constructor; + } + function getRegExpFlags(regexp) { + return 'flags' in regexp ? regexp.flags : regexp.toString().match(/[gimuy]*$/)[0]; + } + var objTypeCallbacks = { + undefined: useStrictEquality, + null: useStrictEquality, + boolean: useObjectValueEquality, + number: function number(a, b) { + return a === b || a.valueOf() === b.valueOf() || isNaN(a.valueOf()) && isNaN(b.valueOf()); + }, + string: useObjectValueEquality, + symbol: useStrictEquality, + date: useObjectValueEquality, + nan: function nan() { + return true; + }, + regexp: function regexp(a, b) { + return a.source === b.source && + getRegExpFlags(a) === getRegExpFlags(b); + }, + function: useStrictEquality, + array: function array(a, b) { + if (a.length !== b.length) { + return false; + } + for (var i = 0; i < a.length; i++) { + if (!typeEquiv(a[i], b[i])) { + return false; + } + } + return true; + }, + set: function set(a, b) { + if (a.size !== b.size) { + return false; + } + var outerEq = true; + a.forEach(function (aVal) { + if (!outerEq) { + return; + } + var innerEq = false; + b.forEach(function (bVal) { + if (innerEq) { + return; + } + var originalMemory = memory; + memory = []; + if (typeEquiv(bVal, aVal)) { + innerEq = true; + } + memory = originalMemory; + }); + if (!innerEq) { + outerEq = false; + } + }); + return outerEq; + }, + map: function map(a, b) { + if (a.size !== b.size) { + return false; + } + var outerEq = true; + a.forEach(function (aVal, aKey) { + if (!outerEq) { + return; + } + var innerEq = false; + b.forEach(function (bVal, bKey) { + if (innerEq) { + return; + } + var originalMemory = memory; + memory = []; + if (objTypeCallbacks.array([bVal, bKey], [aVal, aKey])) { + innerEq = true; + } + memory = originalMemory; + }); + if (!innerEq) { + outerEq = false; + } + }); + return outerEq; + } + }; + var entryTypeCallbacks = { + undefined: useStrictEquality, + null: useStrictEquality, + boolean: useStrictEquality, + number: function number(a, b) { + return a === b || isNaN(a) && isNaN(b); + }, + string: useStrictEquality, + symbol: useStrictEquality, + function: useStrictEquality, + object: function object(a, b) { + if (memory.some(function (pair) { + return pair.a === a && pair.b === b; + })) { + return true; + } + memory.push({ + a: a, + b: b + }); + var aObjType = objectType(a); + var bObjType = objectType(b); + if (aObjType !== 'object' || bObjType !== 'object') { + return aObjType === bObjType && objTypeCallbacks[aObjType](a, b); + } + if (compareConstructors(a, b) === false) { + return false; + } + var aProperties = []; + var bProperties = []; + for (var i in a) { + aProperties.push(i); + if (a.constructor !== Object && typeof a.constructor !== 'undefined' && typeof a[i] === 'function' && typeof b[i] === 'function' && a[i].toString() === b[i].toString()) { + continue; + } + if (!typeEquiv(a[i], b[i])) { + return false; + } + } + for (var _i in b) { + bProperties.push(_i); + } + return objTypeCallbacks.array(aProperties.sort(), bProperties.sort()); + } + }; + function typeEquiv(a, b) { + if (a === b) { + return true; + } + var aType = _typeof(a); + var bType = _typeof(b); + if (aType !== bType) { + return (aType === 'object' && BOXABLE_TYPES.has(objectType(a)) ? a.valueOf() : a) === (bType === 'object' && BOXABLE_TYPES.has(objectType(b)) ? b.valueOf() : b); + } + return entryTypeCallbacks[aType](a, b); + } + function innerEquiv(a, b) { + var res = typeEquiv(a, b); + memory = []; + return res; + } + function equiv(a, b) { + if (arguments.length === 2) { + return a === b || innerEquiv(a, b); + } + var i = arguments.length - 1; + while (i > 0) { + if (!innerEquiv(arguments[i - 1], arguments[i])) { + return false; + } + i--; + } + return true; + } + var config = { + altertitle: true, + collapse: true, + failOnZeroTests: true, + filter: undefined, + maxDepth: 5, + module: undefined, + moduleId: undefined, + reorder: true, + requireExpects: false, + scrolltop: true, + storage: localSessionStorage, + testId: undefined, + urlConfig: [], + currentModule: { + name: '', + tests: [], + childModules: [], + testsRun: 0, + testsIgnored: 0, + hooks: { + before: [], + beforeEach: [], + afterEach: [], + after: [] + } + }, + globalHooks: {}, + blocking: true, + callbacks: {}, + modules: [], + queue: [], + stats: { + all: 0, + bad: 0, + testCount: 0 + } + }; + var preConfig = g && g.QUnit && !g.QUnit.version && g.QUnit.config; + if (preConfig) { + extend(config, preConfig); + } + config.modules.push(config.currentModule); + var dump = (function () { + function quote(str) { + return '"' + str.toString().replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"'; + } + function literal(o) { + return o + ''; + } + function join(pre, arr, post) { + var s = dump.separator(); + var inner = dump.indent(1); + if (arr.join) { + arr = arr.join(',' + s + inner); + } + if (!arr) { + return pre + post; + } + var base = dump.indent(); + return [pre, inner + arr, base + post].join(s); + } + function array(arr, stack) { + if (dump.maxDepth && dump.depth > dump.maxDepth) { + return '[object Array]'; + } + this.up(); + var i = arr.length; + var ret = new Array(i); + while (i--) { + ret[i] = this.parse(arr[i], undefined, stack); + } + this.down(); + return join('[', ret, ']'); + } + function isArray(obj) { + return (toString.call(obj) === '[object Array]' || + typeof obj.length === 'number' && obj.item !== undefined && (obj.length ? obj.item(0) === obj[0] : obj.item(0) === null && obj[0] === undefined)); + } + var reName = /^function (\w+)/; + var dump = { + parse: function parse(obj, objType, stack) { + stack = stack || []; + var objIndex = stack.indexOf(obj); + if (objIndex !== -1) { + return "recursion(".concat(objIndex - stack.length, ")"); + } + objType = objType || this.typeOf(obj); + var parser = this.parsers[objType]; + var parserType = _typeof(parser); + if (parserType === 'function') { + stack.push(obj); + var res = parser.call(this, obj, stack); + stack.pop(); + return res; + } + if (parserType === 'string') { + return parser; + } + return '[ERROR: Missing QUnit.dump formatter for type ' + objType + ']'; + }, + typeOf: function typeOf(obj) { + var type; + if (obj === null) { + type = 'null'; + } + else if (typeof obj === 'undefined') { + type = 'undefined'; + } + else if (is('regexp', obj)) { + type = 'regexp'; + } + else if (is('date', obj)) { + type = 'date'; + } + else if (is('function', obj)) { + type = 'function'; + } + else if (obj.setInterval !== undefined && obj.document !== undefined && obj.nodeType === undefined) { + type = 'window'; + } + else if (obj.nodeType === 9) { + type = 'document'; + } + else if (obj.nodeType) { + type = 'node'; + } + else if (isArray(obj)) { + type = 'array'; + } + else if (obj.constructor === Error.prototype.constructor) { + type = 'error'; + } + else { + type = _typeof(obj); + } + return type; + }, + separator: function separator() { + if (this.multiline) { + return this.HTML ? '
' : '\n'; + } + else { + return this.HTML ? ' ' : ' '; + } + }, + indent: function indent(extra) { + if (!this.multiline) { + return ''; + } + var chr = this.indentChar; + if (this.HTML) { + chr = chr.replace(/\t/g, ' ').replace(/ /g, ' '); + } + return new Array(this.depth + (extra || 0)).join(chr); + }, + up: function up(a) { + this.depth += a || 1; + }, + down: function down(a) { + this.depth -= a || 1; + }, + setParser: function setParser(name, parser) { + this.parsers[name] = parser; + }, + quote: quote, + literal: literal, + join: join, + depth: 1, + maxDepth: config.maxDepth, + parsers: { + window: '[Window]', + document: '[Document]', + error: function error(_error) { + return 'Error("' + _error.message + '")'; + }, + unknown: '[Unknown]', + null: 'null', + undefined: 'undefined', + function: function _function(fn) { + var ret = 'function'; + var name = 'name' in fn ? fn.name : (reName.exec(fn) || [])[1]; + if (name) { + ret += ' ' + name; + } + ret += '('; + ret = [ret, dump.parse(fn, 'functionArgs'), '){'].join(''); + return join(ret, dump.parse(fn, 'functionCode'), '}'); + }, + array: array, + nodelist: array, + arguments: array, + object: function object(map, stack) { + var ret = []; + if (dump.maxDepth && dump.depth > dump.maxDepth) { + return '[object Object]'; + } + dump.up(); + var keys = []; + for (var key in map) { + keys.push(key); + } + var nonEnumerableProperties = ['message', 'name']; + for (var i in nonEnumerableProperties) { + var _key = nonEnumerableProperties[i]; + if (_key in map && !inArray(_key, keys)) { + keys.push(_key); + } + } + keys.sort(); + for (var _i = 0; _i < keys.length; _i++) { + var _key2 = keys[_i]; + var val = map[_key2]; + ret.push(dump.parse(_key2, 'key') + ': ' + dump.parse(val, undefined, stack)); + } + dump.down(); + return join('{', ret, '}'); + }, + node: function node(_node) { + var open = dump.HTML ? '<' : '<'; + var close = dump.HTML ? '>' : '>'; + var tag = _node.nodeName.toLowerCase(); + var ret = open + tag; + var attrs = _node.attributes; + if (attrs) { + for (var i = 0; i < attrs.length; i++) { + var val = attrs[i].nodeValue; + if (val && val !== 'inherit') { + ret += ' ' + attrs[i].nodeName + '=' + dump.parse(val, 'attribute'); + } + } + } + ret += close; + if (_node.nodeType === 3 || _node.nodeType === 4) { + ret += _node.nodeValue; + } + return ret + open + '/' + tag + close; + }, + functionArgs: function functionArgs(fn) { + var l = fn.length; + if (!l) { + return ''; + } + var args = new Array(l); + while (l--) { + args[l] = String.fromCharCode(97 + l); + } + return ' ' + args.join(', ') + ' '; + }, + key: quote, + functionCode: '[code]', + attribute: quote, + string: quote, + date: quote, + regexp: literal, + number: literal, + boolean: literal, + symbol: function symbol(sym) { + return sym.toString(); + } + }, + HTML: false, + indentChar: ' ', + multiline: true + }; + return dump; + })(); + var SuiteReport = function () { + function SuiteReport(name, parentSuite) { + _classCallCheck(this, SuiteReport); + this.name = name; + this.fullName = parentSuite ? parentSuite.fullName.concat(name) : []; + this.globalFailureCount = 0; + this.tests = []; + this.childSuites = []; + if (parentSuite) { + parentSuite.pushChildSuite(this); + } + } + _createClass(SuiteReport, [{ + key: "start", + value: function start(recordTime) { + if (recordTime) { + this._startTime = performance.now(); + var suiteLevel = this.fullName.length; + performance.mark("qunit_suite_".concat(suiteLevel, "_start")); + } + return { + name: this.name, + fullName: this.fullName.slice(), + tests: this.tests.map(function (test) { + return test.start(); + }), + childSuites: this.childSuites.map(function (suite) { + return suite.start(); + }), + testCounts: { + total: this.getTestCounts().total + } + }; + } + }, { + key: "end", + value: function end(recordTime) { + if (recordTime) { + this._endTime = performance.now(); + var suiteLevel = this.fullName.length; + var suiteName = this.fullName.join(' – '); + performance.mark("qunit_suite_".concat(suiteLevel, "_end")); + performance.measure(suiteLevel === 0 ? 'QUnit Test Run' : "QUnit Test Suite: ".concat(suiteName), "qunit_suite_".concat(suiteLevel, "_start"), "qunit_suite_".concat(suiteLevel, "_end")); + } + return { + name: this.name, + fullName: this.fullName.slice(), + tests: this.tests.map(function (test) { + return test.end(); + }), + childSuites: this.childSuites.map(function (suite) { + return suite.end(); + }), + testCounts: this.getTestCounts(), + runtime: this.getRuntime(), + status: this.getStatus() + }; + } + }, { + key: "pushChildSuite", + value: function pushChildSuite(suite) { + this.childSuites.push(suite); + } + }, { + key: "pushTest", + value: function pushTest(test) { + this.tests.push(test); + } + }, { + key: "getRuntime", + value: function getRuntime() { + return Math.round(this._endTime - this._startTime); + } + }, { + key: "getTestCounts", + value: function getTestCounts() { + var counts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { + passed: 0, + failed: 0, + skipped: 0, + todo: 0, + total: 0 + }; + counts.failed += this.globalFailureCount; + counts.total += this.globalFailureCount; + counts = this.tests.reduce(function (counts, test) { + if (test.valid) { + counts[test.getStatus()]++; + counts.total++; + } + return counts; + }, counts); + return this.childSuites.reduce(function (counts, suite) { + return suite.getTestCounts(counts); + }, counts); + } + }, { + key: "getStatus", + value: function getStatus() { + var _this$getTestCounts = this.getTestCounts(), total = _this$getTestCounts.total, failed = _this$getTestCounts.failed, skipped = _this$getTestCounts.skipped, todo = _this$getTestCounts.todo; + if (failed) { + return 'failed'; + } + else { + if (skipped === total) { + return 'skipped'; + } + else if (todo === total) { + return 'todo'; + } + else { + return 'passed'; + } + } + } + }]); + return SuiteReport; + }(); + var moduleStack = []; + var runSuite = new SuiteReport(); + function isParentModuleInQueue() { + var modulesInQueue = config.modules.filter(function (module) { + return !module.ignored; + }).map(function (module) { + return module.moduleId; + }); + return moduleStack.some(function (module) { + return modulesInQueue.includes(module.moduleId); + }); + } + function createModule(name, testEnvironment, modifiers) { + var parentModule = moduleStack.length ? moduleStack.slice(-1)[0] : null; + var moduleName = parentModule !== null ? [parentModule.name, name].join(' > ') : name; + var parentSuite = parentModule ? parentModule.suiteReport : runSuite; + var skip = parentModule !== null && parentModule.skip || modifiers.skip; + var todo = parentModule !== null && parentModule.todo || modifiers.todo; + var env = {}; + if (parentModule) { + extend(env, parentModule.testEnvironment); + } + extend(env, testEnvironment); + var module = { + name: moduleName, + parentModule: parentModule, + hooks: { + before: [], + beforeEach: [], + afterEach: [], + after: [] + }, + testEnvironment: env, + tests: [], + moduleId: generateHash(moduleName), + testsRun: 0, + testsIgnored: 0, + childModules: [], + suiteReport: new SuiteReport(name, parentSuite), + stats: null, + skip: skip, + todo: skip ? false : todo, + ignored: modifiers.ignored || false + }; + if (parentModule) { + parentModule.childModules.push(module); + } + config.modules.push(module); + return module; + } + function setHookFromEnvironment(hooks, environment, name) { + var potentialHook = environment[name]; + if (typeof potentialHook === 'function') { + hooks[name].push(potentialHook); + } + delete environment[name]; + } + function makeSetHook(module, hookName) { + return function setHook(callback) { + if (config.currentModule !== module) { + Logger.warn('The `' + hookName + '` hook was called inside the wrong module (`' + config.currentModule.name + '`). ' + 'Instead, use hooks provided by the callback to the containing module (`' + module.name + '`). ' + 'This will become an error in QUnit 3.0.'); + } + module.hooks[hookName].push(callback); + }; + } + function processModule(name, options, executeNow) { + var modifiers = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + if (typeof options === 'function') { + executeNow = options; + options = undefined; + } + var module = createModule(name, options, modifiers); + var testEnvironment = module.testEnvironment; + var hooks = module.hooks; + setHookFromEnvironment(hooks, testEnvironment, 'before'); + setHookFromEnvironment(hooks, testEnvironment, 'beforeEach'); + setHookFromEnvironment(hooks, testEnvironment, 'afterEach'); + setHookFromEnvironment(hooks, testEnvironment, 'after'); + var moduleFns = { + before: makeSetHook(module, 'before'), + beforeEach: makeSetHook(module, 'beforeEach'), + afterEach: makeSetHook(module, 'afterEach'), + after: makeSetHook(module, 'after') + }; + var prevModule = config.currentModule; + config.currentModule = module; + if (typeof executeNow === 'function') { + moduleStack.push(module); + try { + var cbReturnValue = executeNow.call(module.testEnvironment, moduleFns); + if (cbReturnValue && typeof cbReturnValue.then === 'function') { + Logger.warn('Returning a promise from a module callback is not supported. ' + 'Instead, use hooks for async behavior. ' + 'This will become an error in QUnit 3.0.'); + } + } + finally { + moduleStack.pop(); + config.currentModule = module.parentModule || prevModule; + } + } + } + var focused$1 = false; + function module$1(name, options, executeNow) { + var ignored = focused$1 && !isParentModuleInQueue(); + processModule(name, options, executeNow, { + ignored: ignored + }); + } + module$1.only = function () { + if (!focused$1) { + config.modules.length = 0; + config.queue.length = 0; + config.currentModule.ignored = true; + } + focused$1 = true; + processModule.apply(void 0, arguments); + }; + module$1.skip = function (name, options, executeNow) { + if (focused$1) { + return; + } + processModule(name, options, executeNow, { + skip: true + }); + }; + module$1.todo = function (name, options, executeNow) { + if (focused$1) { + return; + } + processModule(name, options, executeNow, { + todo: true + }); + }; + var fileName = (sourceFromStacktrace(0) || '').replace(/(:\d+)+\)?/, '') + .replace(/.+[/\\]/, ''); + function extractStacktrace(e, offset) { + offset = offset === undefined ? 4 : offset; + if (e && e.stack) { + var stack = e.stack.split('\n'); + if (/^error$/i.test(stack[0])) { + stack.shift(); + } + if (fileName) { + var include = []; + for (var i = offset; i < stack.length; i++) { + if (stack[i].indexOf(fileName) !== -1) { + break; + } + include.push(stack[i]); + } + if (include.length) { + return include.join('\n'); + } + } + return stack[offset]; + } + } + function sourceFromStacktrace(offset) { + var error = new Error(); + if (!error.stack) { + try { + throw error; + } + catch (err) { + error = err; + } + } + return extractStacktrace(error, offset); + } + var Assert = function () { + function Assert(testContext) { + _classCallCheck(this, Assert); + this.test = testContext; + } + _createClass(Assert, [{ + key: "timeout", + value: function timeout(duration) { + if (typeof duration !== 'number') { + throw new Error('You must pass a number as the duration to assert.timeout'); + } + this.test.timeout = duration; + if (config.timeout) { + clearTimeout(config.timeout); + config.timeout = null; + if (config.timeoutHandler && this.test.timeout > 0) { + this.test.internalResetTimeout(this.test.timeout); + } + } + } + }, { + key: "step", + value: function step(message) { + var assertionMessage = message; + var result = !!message; + this.test.steps.push(message); + if (typeof message === 'undefined' || message === '') { + assertionMessage = 'You must provide a message to assert.step'; + } + else if (typeof message !== 'string') { + assertionMessage = 'You must provide a string value to assert.step'; + result = false; + } + this.pushResult({ + result: result, + message: assertionMessage + }); + } + }, { + key: "verifySteps", + value: function verifySteps(steps, message) { + var actualStepsClone = this.test.steps.slice(); + this.deepEqual(actualStepsClone, steps, message); + this.test.steps.length = 0; + } + }, { + key: "expect", + value: function expect(asserts) { + if (arguments.length === 1) { + this.test.expected = asserts; + } + else { + return this.test.expected; + } + } + }, { + key: "async", + value: function async(count) { + var requiredCalls = count === undefined ? 1 : count; + return this.test.internalStop(requiredCalls); + } + }, { + key: "push", + value: function push(result, actual, expected, message, negative) { + Logger.warn('assert.push is deprecated and will be removed in QUnit 3.0.' + ' Please use assert.pushResult instead (https://api.qunitjs.com/assert/pushResult).'); + var currentAssert = this instanceof Assert ? this : config.current.assert; + return currentAssert.pushResult({ + result: result, + actual: actual, + expected: expected, + message: message, + negative: negative + }); + } + }, { + key: "pushResult", + value: function pushResult(resultInfo) { + var assert = this; + var currentTest = assert instanceof Assert && assert.test || config.current; + if (!currentTest) { + throw new Error('assertion outside test context, in ' + sourceFromStacktrace(2)); + } + if (!(assert instanceof Assert)) { + assert = currentTest.assert; + } + return assert.test.pushResult(resultInfo); + } + }, { + key: "ok", + value: function ok(result, message) { + if (!message) { + message = result ? 'okay' : "failed, expected argument to be truthy, was: ".concat(dump.parse(result)); + } + this.pushResult({ + result: !!result, + actual: result, + expected: true, + message: message + }); + } + }, { + key: "notOk", + value: function notOk(result, message) { + if (!message) { + message = !result ? 'okay' : "failed, expected argument to be falsy, was: ".concat(dump.parse(result)); + } + this.pushResult({ + result: !result, + actual: result, + expected: false, + message: message + }); + } + }, { + key: "true", + value: function _true(result, message) { + this.pushResult({ + result: result === true, + actual: result, + expected: true, + message: message + }); + } + }, { + key: "false", + value: function _false(result, message) { + this.pushResult({ + result: result === false, + actual: result, + expected: false, + message: message + }); + } + }, { + key: "equal", + value: function equal(actual, expected, message) { + this.pushResult({ + result: expected == actual, + actual: actual, + expected: expected, + message: message + }); + } + }, { + key: "notEqual", + value: function notEqual(actual, expected, message) { + this.pushResult({ + result: expected != actual, + actual: actual, + expected: expected, + message: message, + negative: true + }); + } + }, { + key: "propEqual", + value: function propEqual(actual, expected, message) { + actual = objectValues(actual); + expected = objectValues(expected); + this.pushResult({ + result: equiv(actual, expected), + actual: actual, + expected: expected, + message: message + }); + } + }, { + key: "notPropEqual", + value: function notPropEqual(actual, expected, message) { + actual = objectValues(actual); + expected = objectValues(expected); + this.pushResult({ + result: !equiv(actual, expected), + actual: actual, + expected: expected, + message: message, + negative: true + }); + } + }, { + key: "propContains", + value: function propContains(actual, expected, message) { + actual = objectValuesSubset(actual, expected); + expected = objectValues(expected, false); + this.pushResult({ + result: equiv(actual, expected), + actual: actual, + expected: expected, + message: message + }); + } + }, { + key: "notPropContains", + value: function notPropContains(actual, expected, message) { + actual = objectValuesSubset(actual, expected); + expected = objectValues(expected); + this.pushResult({ + result: !equiv(actual, expected), + actual: actual, + expected: expected, + message: message, + negative: true + }); + } + }, { + key: "deepEqual", + value: function deepEqual(actual, expected, message) { + this.pushResult({ + result: equiv(actual, expected), + actual: actual, + expected: expected, + message: message + }); + } + }, { + key: "notDeepEqual", + value: function notDeepEqual(actual, expected, message) { + this.pushResult({ + result: !equiv(actual, expected), + actual: actual, + expected: expected, + message: message, + negative: true + }); + } + }, { + key: "strictEqual", + value: function strictEqual(actual, expected, message) { + this.pushResult({ + result: expected === actual, + actual: actual, + expected: expected, + message: message + }); + } + }, { + key: "notStrictEqual", + value: function notStrictEqual(actual, expected, message) { + this.pushResult({ + result: expected !== actual, + actual: actual, + expected: expected, + message: message, + negative: true + }); + } + }, { + key: 'throws', + value: function throws(block, expected, message) { + var _validateExpectedExce = validateExpectedExceptionArgs(expected, message, 'throws'); + var _validateExpectedExce2 = _slicedToArray(_validateExpectedExce, 2); + expected = _validateExpectedExce2[0]; + message = _validateExpectedExce2[1]; + var currentTest = this instanceof Assert && this.test || config.current; + if (typeof block !== 'function') { + currentTest.assert.pushResult({ + result: false, + actual: block, + message: 'The value provided to `assert.throws` in ' + '"' + currentTest.testName + '" was not a function.' + }); + return; + } + var actual; + var result = false; + currentTest.ignoreGlobalErrors = true; + try { + block.call(currentTest.testEnvironment); + } + catch (e) { + actual = e; + } + currentTest.ignoreGlobalErrors = false; + if (actual) { + var _validateException = validateException(actual, expected, message); + var _validateException2 = _slicedToArray(_validateException, 3); + result = _validateException2[0]; + expected = _validateException2[1]; + message = _validateException2[2]; + } + currentTest.assert.pushResult({ + result: result, + actual: actual && errorString(actual), + expected: expected, + message: message + }); + } + }, { + key: "rejects", + value: function rejects(promise, expected, message) { + var _validateExpectedExce3 = validateExpectedExceptionArgs(expected, message, 'rejects'); + var _validateExpectedExce4 = _slicedToArray(_validateExpectedExce3, 2); + expected = _validateExpectedExce4[0]; + message = _validateExpectedExce4[1]; + var currentTest = this instanceof Assert && this.test || config.current; + var then = promise && promise.then; + if (typeof then !== 'function') { + currentTest.assert.pushResult({ + result: false, + message: 'The value provided to `assert.rejects` in ' + '"' + currentTest.testName + '" was not a promise.', + actual: promise + }); + return; + } + var done = this.async(); + return then.call(promise, function handleFulfillment() { + currentTest.assert.pushResult({ + result: false, + message: 'The promise returned by the `assert.rejects` callback in ' + '"' + currentTest.testName + '" did not reject.', + actual: promise + }); + done(); + }, function handleRejection(actual) { + var result; + var _validateException3 = validateException(actual, expected, message); + var _validateException4 = _slicedToArray(_validateException3, 3); + result = _validateException4[0]; + expected = _validateException4[1]; + message = _validateException4[2]; + currentTest.assert.pushResult({ + result: result, + actual: actual && errorString(actual), + expected: expected, + message: message + }); + done(); + }); + } + }]); + return Assert; + }(); + function validateExpectedExceptionArgs(expected, message, assertionMethod) { + var expectedType = objectType(expected); + if (expectedType === 'string') { + if (message === undefined) { + message = expected; + expected = undefined; + return [expected, message]; + } + else { + throw new Error('assert.' + assertionMethod + ' does not accept a string value for the expected argument.\n' + 'Use a non-string object value (e.g. RegExp or validator function) ' + 'instead if necessary.'); + } + } + var valid = !expected || + expectedType === 'regexp' || expectedType === 'function' || expectedType === 'object'; + if (!valid) { + throw new Error('Invalid expected value type (' + expectedType + ') ' + 'provided to assert.' + assertionMethod + '.'); + } + return [expected, message]; + } + function validateException(actual, expected, message) { + var result = false; + var expectedType = objectType(expected); + if (!expected) { + result = true; + } + else if (expectedType === 'regexp') { + result = expected.test(errorString(actual)); + expected = String(expected); + } + else if (expectedType === 'function' && expected.prototype !== undefined && actual instanceof expected) { + result = true; + } + else if (expectedType === 'object') { + result = actual instanceof expected.constructor && actual.name === expected.name && actual.message === expected.message; + expected = errorString(expected); + } + else if (expectedType === 'function') { + try { + result = expected.call({}, actual) === true; + expected = null; + } + catch (e) { + expected = errorString(e); + } + } + return [result, expected, message]; + } + Assert.prototype.raises = Assert.prototype['throws']; + var LISTENERS = Object.create(null); + var SUPPORTED_EVENTS = ['error', 'runStart', 'suiteStart', 'testStart', 'assertion', 'testEnd', 'suiteEnd', 'runEnd']; + function emit(eventName, data) { + if (typeof eventName !== 'string') { + throw new TypeError('eventName must be a string when emitting an event'); + } + var originalCallbacks = LISTENERS[eventName]; + var callbacks = originalCallbacks ? _toConsumableArray(originalCallbacks) : []; + for (var i = 0; i < callbacks.length; i++) { + callbacks[i](data); + } + } + function on(eventName, callback) { + if (typeof eventName !== 'string') { + throw new TypeError('eventName must be a string when registering a listener'); + } + else if (!inArray(eventName, SUPPORTED_EVENTS)) { + var events = SUPPORTED_EVENTS.join(', '); + throw new Error("\"".concat(eventName, "\" is not a valid event; must be one of: ").concat(events, ".")); + } + else if (typeof callback !== 'function') { + throw new TypeError('callback must be a function when registering a listener'); + } + if (!LISTENERS[eventName]) { + LISTENERS[eventName] = []; + } + if (!inArray(callback, LISTENERS[eventName])) { + LISTENERS[eventName].push(callback); + } + } + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + function commonjsRequire(path) { + throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.'); + } + var promisePolyfill = { exports: {} }; + (function () { + var globalNS = function () { + if (typeof globalThis !== 'undefined') { + return globalThis; + } + if (typeof self !== 'undefined') { + return self; + } + if (typeof window !== 'undefined') { + return window; + } + if (typeof commonjsGlobal !== 'undefined') { + return commonjsGlobal; + } + throw new Error('unable to locate global object'); + }(); + if (typeof globalNS['Promise'] === 'function') { + promisePolyfill.exports = globalNS['Promise']; + return; + } + function finallyConstructor(callback) { + var constructor = this.constructor; + return this.then(function (value) { + return constructor.resolve(callback()).then(function () { + return value; + }); + }, function (reason) { + return constructor.resolve(callback()).then(function () { + return constructor.reject(reason); + }); + }); + } + function allSettled(arr) { + var P = this; + return new P(function (resolve, reject) { + if (!(arr && typeof arr.length !== 'undefined')) { + return reject(new TypeError(_typeof(arr) + ' ' + arr + ' is not iterable(cannot read property Symbol(Symbol.iterator))')); + } + var args = Array.prototype.slice.call(arr); + if (args.length === 0) + return resolve([]); + var remaining = args.length; + function res(i, val) { + if (val && (_typeof(val) === 'object' || typeof val === 'function')) { + var then = val.then; + if (typeof then === 'function') { + then.call(val, function (val) { + res(i, val); + }, function (e) { + args[i] = { + status: 'rejected', + reason: e + }; + if (--remaining === 0) { + resolve(args); + } + }); + return; + } + } + args[i] = { + status: 'fulfilled', + value: val + }; + if (--remaining === 0) { + resolve(args); + } + } + for (var i = 0; i < args.length; i++) { + res(i, args[i]); + } + }); + } + var setTimeoutFunc = setTimeout; + function isArray(x) { + return Boolean(x && typeof x.length !== 'undefined'); + } + function noop() { } + function bind(fn, thisArg) { + return function () { + fn.apply(thisArg, arguments); + }; + } + function Promise(fn) { + if (!(this instanceof Promise)) + throw new TypeError('Promises must be constructed via new'); + if (typeof fn !== 'function') + throw new TypeError('not a function'); + this._state = 0; + this._handled = false; + this._value = undefined; + this._deferreds = []; + doResolve(fn, this); + } + function handle(self, deferred) { + while (self._state === 3) { + self = self._value; + } + if (self._state === 0) { + self._deferreds.push(deferred); + return; + } + self._handled = true; + Promise._immediateFn(function () { + var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected; + if (cb === null) { + (self._state === 1 ? resolve : reject)(deferred.promise, self._value); + return; + } + var ret; + try { + ret = cb(self._value); + } + catch (e) { + reject(deferred.promise, e); + return; + } + resolve(deferred.promise, ret); + }); + } + function resolve(self, newValue) { + try { + if (newValue === self) + throw new TypeError('A promise cannot be resolved with itself.'); + if (newValue && (_typeof(newValue) === 'object' || typeof newValue === 'function')) { + var then = newValue.then; + if (newValue instanceof Promise) { + self._state = 3; + self._value = newValue; + finale(self); + return; + } + else if (typeof then === 'function') { + doResolve(bind(then, newValue), self); + return; + } + } + self._state = 1; + self._value = newValue; + finale(self); + } + catch (e) { + reject(self, e); + } + } + function reject(self, newValue) { + self._state = 2; + self._value = newValue; + finale(self); + } + function finale(self) { + if (self._state === 2 && self._deferreds.length === 0) { + Promise._immediateFn(function () { + if (!self._handled) { + Promise._unhandledRejectionFn(self._value); + } + }); + } + for (var i = 0, len = self._deferreds.length; i < len; i++) { + handle(self, self._deferreds[i]); + } + self._deferreds = null; + } + function Handler(onFulfilled, onRejected, promise) { + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.promise = promise; + } + function doResolve(fn, self) { + var done = false; + try { + fn(function (value) { + if (done) + return; + done = true; + resolve(self, value); + }, function (reason) { + if (done) + return; + done = true; + reject(self, reason); + }); + } + catch (ex) { + if (done) + return; + done = true; + reject(self, ex); + } + } + Promise.prototype['catch'] = function (onRejected) { + return this.then(null, onRejected); + }; + Promise.prototype.then = function (onFulfilled, onRejected) { + var prom = new this.constructor(noop); + handle(this, new Handler(onFulfilled, onRejected, prom)); + return prom; + }; + Promise.prototype['finally'] = finallyConstructor; + Promise.all = function (arr) { + return new Promise(function (resolve, reject) { + if (!isArray(arr)) { + return reject(new TypeError('Promise.all accepts an array')); + } + var args = Array.prototype.slice.call(arr); + if (args.length === 0) + return resolve([]); + var remaining = args.length; + function res(i, val) { + try { + if (val && (_typeof(val) === 'object' || typeof val === 'function')) { + var then = val.then; + if (typeof then === 'function') { + then.call(val, function (val) { + res(i, val); + }, reject); + return; + } + } + args[i] = val; + if (--remaining === 0) { + resolve(args); + } + } + catch (ex) { + reject(ex); + } + } + for (var i = 0; i < args.length; i++) { + res(i, args[i]); + } + }); + }; + Promise.allSettled = allSettled; + Promise.resolve = function (value) { + if (value && _typeof(value) === 'object' && value.constructor === Promise) { + return value; + } + return new Promise(function (resolve) { + resolve(value); + }); + }; + Promise.reject = function (value) { + return new Promise(function (resolve, reject) { + reject(value); + }); + }; + Promise.race = function (arr) { + return new Promise(function (resolve, reject) { + if (!isArray(arr)) { + return reject(new TypeError('Promise.race accepts an array')); + } + for (var i = 0, len = arr.length; i < len; i++) { + Promise.resolve(arr[i]).then(resolve, reject); + } + }); + }; + Promise._immediateFn = + typeof setImmediate === 'function' && function (fn) { + setImmediate(fn); + } || function (fn) { + setTimeoutFunc(fn, 0); + }; + Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) { + if (typeof console !== 'undefined' && console) { + console.warn('Possible Unhandled Promise Rejection:', err); + } + }; + promisePolyfill.exports = Promise; + })(); + var _Promise = promisePolyfill.exports; + function registerLoggingCallbacks(obj) { + var callbackNames = ['begin', 'done', 'log', 'testStart', 'testDone', 'moduleStart', 'moduleDone']; + function registerLoggingCallback(key) { + return function loggingCallback(callback) { + if (typeof callback !== 'function') { + throw new Error('Callback parameter must be a function'); + } + config.callbacks[key].push(callback); + }; + } + for (var i = 0; i < callbackNames.length; i++) { + var key = callbackNames[i]; + if (typeof config.callbacks[key] === 'undefined') { + config.callbacks[key] = []; + } + obj[key] = registerLoggingCallback(key); + } + } + function runLoggingCallbacks(key, args) { + var callbacks = config.callbacks[key]; + if (key === 'log') { + callbacks.map(function (callback) { + return callback(args); + }); + return; + } + var promiseChain = _Promise.resolve(); + callbacks.forEach(function (callback) { + promiseChain = promiseChain.then(function () { + return _Promise.resolve(callback(args)); + }); + }); + return promiseChain; + } + var priorityCount = 0; + var unitSampler; + var taskQueue = []; + function advance() { + advanceTaskQueue(); + if (!taskQueue.length && !config.blocking && !config.current) { + advanceTestQueue(); + } + } + function advanceTaskQueue() { + var start = performance.now(); + config.depth = (config.depth || 0) + 1; + processTaskQueue(start); + config.depth--; + } + function processTaskQueue(start) { + if (taskQueue.length && !config.blocking) { + var elapsedTime = performance.now() - start; + if (!setTimeout$1 || config.updateRate <= 0 || elapsedTime < config.updateRate) { + var task = taskQueue.shift(); + _Promise.resolve(task()).then(function () { + if (!taskQueue.length) { + advance(); + } + else { + processTaskQueue(start); + } + }); + } + else { + setTimeout$1(advance); + } + } + } + function advanceTestQueue() { + if (!config.blocking && !config.queue.length && config.depth === 0) { + done(); + return; + } + var testTasks = config.queue.shift(); + addToTaskQueue(testTasks()); + if (priorityCount > 0) { + priorityCount--; + } + advance(); + } + function addToTaskQueue(tasksArray) { + taskQueue.push.apply(taskQueue, _toConsumableArray(tasksArray)); + } + function taskQueueLength() { + return taskQueue.length; + } + function addToTestQueue(testTasksFunc, prioritize, seed) { + if (prioritize) { + config.queue.splice(priorityCount++, 0, testTasksFunc); + } + else if (seed) { + if (!unitSampler) { + unitSampler = unitSamplerGenerator(seed); + } + var index = Math.floor(unitSampler() * (config.queue.length - priorityCount + 1)); + config.queue.splice(priorityCount + index, 0, testTasksFunc); + } + else { + config.queue.push(testTasksFunc); + } + } + function unitSamplerGenerator(seed) { + var sample = parseInt(generateHash(seed), 16) || -1; + return function () { + sample ^= sample << 13; + sample ^= sample >>> 17; + sample ^= sample << 5; + if (sample < 0) { + sample += 0x100000000; + } + return sample / 0x100000000; + }; + } + function done() { + if (config.stats.testCount === 0 && config.failOnZeroTests === true) { + var error; + if (config.filter && config.filter.length) { + error = new Error("No tests matched the filter \"".concat(config.filter, "\".")); + } + else if (config.module && config.module.length) { + error = new Error("No tests matched the module \"".concat(config.module, "\".")); + } + else if (config.moduleId && config.moduleId.length) { + error = new Error("No tests matched the moduleId \"".concat(config.moduleId, "\".")); + } + else if (config.testId && config.testId.length) { + error = new Error("No tests matched the testId \"".concat(config.testId, "\".")); + } + else { + error = new Error('No tests were run.'); + } + test('global failure', extend(function (assert) { + assert.pushResult({ + result: false, + message: error.message, + source: error.stack + }); + }, { + validTest: true + })); + advance(); + return; + } + var storage = config.storage; + var runtime = Math.round(performance.now() - config.started); + var passed = config.stats.all - config.stats.bad; + ProcessingQueue.finished = true; + emit('runEnd', runSuite.end(true)); + runLoggingCallbacks('done', { + passed: passed, + failed: config.stats.bad, + total: config.stats.all, + runtime: runtime + }).then(function () { + if (storage && config.stats.bad === 0) { + for (var i = storage.length - 1; i >= 0; i--) { + var key = storage.key(i); + if (key.indexOf('qunit-test-') === 0) { + storage.removeItem(key); + } + } + } + }); + } + var ProcessingQueue = { + finished: false, + add: addToTestQueue, + advance: advance, + taskCount: taskQueueLength + }; + var TestReport = function () { + function TestReport(name, suite, options) { + _classCallCheck(this, TestReport); + this.name = name; + this.suiteName = suite.name; + this.fullName = suite.fullName.concat(name); + this.runtime = 0; + this.assertions = []; + this.skipped = !!options.skip; + this.todo = !!options.todo; + this.valid = options.valid; + this._startTime = 0; + this._endTime = 0; + suite.pushTest(this); + } + _createClass(TestReport, [{ + key: "start", + value: function start(recordTime) { + if (recordTime) { + this._startTime = performance.now(); + performance.mark('qunit_test_start'); + } + return { + name: this.name, + suiteName: this.suiteName, + fullName: this.fullName.slice() + }; + } + }, { + key: "end", + value: function end(recordTime) { + if (recordTime) { + this._endTime = performance.now(); + if (performance) { + performance.mark('qunit_test_end'); + var testName = this.fullName.join(' – '); + performance.measure("QUnit Test: ".concat(testName), 'qunit_test_start', 'qunit_test_end'); + } + } + return extend(this.start(), { + runtime: this.getRuntime(), + status: this.getStatus(), + errors: this.getFailedAssertions(), + assertions: this.getAssertions() + }); + } + }, { + key: "pushAssertion", + value: function pushAssertion(assertion) { + this.assertions.push(assertion); + } + }, { + key: "getRuntime", + value: function getRuntime() { + return Math.round(this._endTime - this._startTime); + } + }, { + key: "getStatus", + value: function getStatus() { + if (this.skipped) { + return 'skipped'; + } + var testPassed = this.getFailedAssertions().length > 0 ? this.todo : !this.todo; + if (!testPassed) { + return 'failed'; + } + else if (this.todo) { + return 'todo'; + } + else { + return 'passed'; + } + } + }, { + key: "getFailedAssertions", + value: function getFailedAssertions() { + return this.assertions.filter(function (assertion) { + return !assertion.passed; + }); + } + }, { + key: "getAssertions", + value: function getAssertions() { + return this.assertions.slice(); + } + }, { + key: "slimAssertions", + value: function slimAssertions() { + this.assertions = this.assertions.map(function (assertion) { + delete assertion.actual; + delete assertion.expected; + return assertion; + }); + } + }]); + return TestReport; + }(); + function Test(settings) { + this.expected = null; + this.assertions = []; + this.module = config.currentModule; + this.steps = []; + this.timeout = undefined; + this.data = undefined; + this.withData = false; + this.pauses = new StringMap(); + this.nextPauseId = 1; + this.stackOffset = 3; + extend(this, settings); + if (this.module.skip) { + this.skip = true; + this.todo = false; + } + else if (this.module.todo && !this.skip) { + this.todo = true; + } + if (ProcessingQueue.finished) { + Logger.warn('Unexpected test after runEnd. This is unstable and will fail in QUnit 3.0.'); + return; + } + if (!this.skip && typeof this.callback !== 'function') { + var method = this.todo ? 'QUnit.todo' : 'QUnit.test'; + throw new TypeError("You must provide a callback to ".concat(method, "(\"").concat(this.testName, "\")")); + } + for (var i = 0, l = this.module.tests; i < l.length; i++) { + if (this.module.tests[i].name === this.testName) { + this.testName += ' '; + } + } + this.testId = generateHash(this.module.name, this.testName); + ++Test.count; + this.errorForStack = new Error(); + if (this.callback && this.callback.validTest) { + this.errorForStack.stack = undefined; + } + this.testReport = new TestReport(this.testName, this.module.suiteReport, { + todo: this.todo, + skip: this.skip, + valid: this.valid() + }); + this.module.tests.push({ + name: this.testName, + testId: this.testId, + skip: !!this.skip + }); + if (this.skip) { + this.callback = function () { }; + this.async = false; + this.expected = 0; + } + else { + this.assert = new Assert(this); + } + } + Test.count = 0; + function getNotStartedModules(startModule) { + var module = startModule; + var modules = []; + while (module && module.testsRun === 0) { + modules.push(module); + module = module.parentModule; + } + return modules.reverse(); + } + Test.prototype = { + get stack() { + return extractStacktrace(this.errorForStack, this.stackOffset); + }, + before: function before() { + var _this = this; + var module = this.module; + var notStartedModules = getNotStartedModules(module); + var moduleStartChain = _Promise.resolve(); + notStartedModules.forEach(function (startModule) { + moduleStartChain = moduleStartChain.then(function () { + startModule.stats = { + all: 0, + bad: 0, + started: performance.now() + }; + emit('suiteStart', startModule.suiteReport.start(true)); + return runLoggingCallbacks('moduleStart', { + name: startModule.name, + tests: startModule.tests + }); + }); + }); + return moduleStartChain.then(function () { + config.current = _this; + _this.testEnvironment = extend({}, module.testEnvironment); + _this.started = performance.now(); + emit('testStart', _this.testReport.start(true)); + return runLoggingCallbacks('testStart', { + name: _this.testName, + module: module.name, + testId: _this.testId, + previousFailure: _this.previousFailure + }).then(function () { + if (!config.pollution) { + saveGlobal(); + } + }); + }); + }, + run: function run() { + config.current = this; + if (config.notrycatch) { + runTest(this); + return; + } + try { + runTest(this); + } + catch (e) { + this.pushFailure('Died on test #' + (this.assertions.length + 1) + ': ' + (e.message || e) + '\n' + this.stack, extractStacktrace(e, 0)); + saveGlobal(); + if (config.blocking) { + internalRecover(this); + } + } + function runTest(test) { + var promise; + if (test.withData) { + promise = test.callback.call(test.testEnvironment, test.assert, test.data); + } + else { + promise = test.callback.call(test.testEnvironment, test.assert); + } + test.resolvePromise(promise); + if (test.timeout === 0 && test.pauses.size > 0) { + pushFailure('Test did not finish synchronously even though assert.timeout( 0 ) was used.', sourceFromStacktrace(2)); + } + } + }, + after: function after() { + checkPollution(); + }, + queueGlobalHook: function queueGlobalHook(hook, hookName) { + var _this2 = this; + var runHook = function runHook() { + config.current = _this2; + var promise; + if (config.notrycatch) { + promise = hook.call(_this2.testEnvironment, _this2.assert); + } + else { + try { + promise = hook.call(_this2.testEnvironment, _this2.assert); + } + catch (error) { + _this2.pushFailure('Global ' + hookName + ' failed on ' + _this2.testName + ': ' + errorString(error), extractStacktrace(error, 0)); + return; + } + } + _this2.resolvePromise(promise, hookName); + }; + return runHook; + }, + queueHook: function queueHook(hook, hookName, hookOwner) { + var _this3 = this; + var callHook = function callHook() { + var promise = hook.call(_this3.testEnvironment, _this3.assert); + _this3.resolvePromise(promise, hookName); + }; + var runHook = function runHook() { + if (hookName === 'before') { + if (hookOwner.testsRun !== 0) { + return; + } + _this3.preserveEnvironment = true; + } + if (hookName === 'after' && !lastTestWithinModuleExecuted(hookOwner) && (config.queue.length > 0 || ProcessingQueue.taskCount() > 2)) { + return; + } + config.current = _this3; + if (config.notrycatch) { + callHook(); + return; + } + try { + callHook(); + } + catch (error) { + _this3.pushFailure(hookName + ' failed on ' + _this3.testName + ': ' + (error.message || error), extractStacktrace(error, 0)); + } + }; + return runHook; + }, + hooks: function hooks(handler) { + var hooks = []; + function processGlobalhooks(test) { + if ((handler === 'beforeEach' || handler === 'afterEach') && config.globalHooks[handler]) { + for (var i = 0; i < config.globalHooks[handler].length; i++) { + hooks.push(test.queueGlobalHook(config.globalHooks[handler][i], handler)); + } + } + } + function processHooks(test, module) { + if (module.parentModule) { + processHooks(test, module.parentModule); + } + if (module.hooks[handler].length) { + for (var i = 0; i < module.hooks[handler].length; i++) { + hooks.push(test.queueHook(module.hooks[handler][i], handler, module)); + } + } + } + if (!this.skip) { + processGlobalhooks(this); + processHooks(this, this.module); + } + return hooks; + }, + finish: function finish() { + config.current = this; + if (setTimeout$1) { + clearTimeout(this.timeout); + config.timeoutHandler = null; + } + this.callback = undefined; + if (this.steps.length) { + var stepsList = this.steps.join(', '); + this.pushFailure('Expected assert.verifySteps() to be called before end of test ' + "after using assert.step(). Unverified steps: ".concat(stepsList), this.stack); + } + if (config.requireExpects && this.expected === null) { + this.pushFailure('Expected number of assertions to be defined, but expect() was ' + 'not called.', this.stack); + } + else if (this.expected !== null && this.expected !== this.assertions.length) { + this.pushFailure('Expected ' + this.expected + ' assertions, but ' + this.assertions.length + ' were run', this.stack); + } + else if (this.expected === null && !this.assertions.length) { + this.pushFailure('Expected at least one assertion, but none were run - call ' + 'expect(0) to accept zero assertions.', this.stack); + } + var module = this.module; + var moduleName = module.name; + var testName = this.testName; + var skipped = !!this.skip; + var todo = !!this.todo; + var bad = 0; + var storage = config.storage; + this.runtime = Math.round(performance.now() - this.started); + config.stats.all += this.assertions.length; + config.stats.testCount += 1; + module.stats.all += this.assertions.length; + for (var i = 0; i < this.assertions.length; i++) { + if (!this.assertions[i].result) { + bad++; + config.stats.bad++; + module.stats.bad++; + } + } + if (skipped) { + incrementTestsIgnored(module); + } + else { + incrementTestsRun(module); + } + if (storage) { + if (bad) { + storage.setItem('qunit-test-' + moduleName + '-' + testName, bad); + } + else { + storage.removeItem('qunit-test-' + moduleName + '-' + testName); + } + } + emit('testEnd', this.testReport.end(true)); + this.testReport.slimAssertions(); + var test = this; + return runLoggingCallbacks('testDone', { + name: testName, + module: moduleName, + skipped: skipped, + todo: todo, + failed: bad, + passed: this.assertions.length - bad, + total: this.assertions.length, + runtime: skipped ? 0 : this.runtime, + assertions: this.assertions, + testId: this.testId, + get source() { + return test.stack; + } + }).then(function () { + if (allTestsExecuted(module)) { + var completedModules = [module]; + var parent = module.parentModule; + while (parent && allTestsExecuted(parent)) { + completedModules.push(parent); + parent = parent.parentModule; + } + var moduleDoneChain = _Promise.resolve(); + completedModules.forEach(function (completedModule) { + moduleDoneChain = moduleDoneChain.then(function () { + return logSuiteEnd(completedModule); + }); + }); + return moduleDoneChain; + } + }).then(function () { + config.current = undefined; + }); + function logSuiteEnd(module) { + var modules = [module]; + while (modules.length) { + var nextModule = modules.shift(); + nextModule.hooks = {}; + modules.push.apply(modules, _toConsumableArray(nextModule.childModules)); + } + emit('suiteEnd', module.suiteReport.end(true)); + return runLoggingCallbacks('moduleDone', { + name: module.name, + tests: module.tests, + failed: module.stats.bad, + passed: module.stats.all - module.stats.bad, + total: module.stats.all, + runtime: Math.round(performance.now() - module.stats.started) + }); + } + }, + preserveTestEnvironment: function preserveTestEnvironment() { + if (this.preserveEnvironment) { + this.module.testEnvironment = this.testEnvironment; + this.testEnvironment = extend({}, this.module.testEnvironment); + } + }, + queue: function queue() { + var test = this; + if (!this.valid()) { + incrementTestsIgnored(this.module); + return; + } + function runTest() { + return [function () { + return test.before(); + }].concat(_toConsumableArray(test.hooks('before')), [function () { + test.preserveTestEnvironment(); + }], _toConsumableArray(test.hooks('beforeEach')), [function () { + test.run(); + }], _toConsumableArray(test.hooks('afterEach').reverse()), _toConsumableArray(test.hooks('after').reverse()), [function () { + test.after(); + }, function () { + return test.finish(); + }]); + } + var previousFailCount = config.storage && +config.storage.getItem('qunit-test-' + this.module.name + '-' + this.testName); + var prioritize = config.reorder && !!previousFailCount; + this.previousFailure = !!previousFailCount; + ProcessingQueue.add(runTest, prioritize, config.seed); + }, + pushResult: function pushResult(resultInfo) { + if (this !== config.current) { + var message = resultInfo && resultInfo.message || ''; + var testName = this && this.testName || ''; + var error = 'Assertion occurred after test finished.\n' + '> Test: ' + testName + '\n' + '> Message: ' + message + '\n'; + throw new Error(error); + } + var details = { + module: this.module.name, + name: this.testName, + result: resultInfo.result, + message: resultInfo.message, + actual: resultInfo.actual, + testId: this.testId, + negative: resultInfo.negative || false, + runtime: Math.round(performance.now() - this.started), + todo: !!this.todo + }; + if (hasOwn$1.call(resultInfo, 'expected')) { + details.expected = resultInfo.expected; + } + if (!resultInfo.result) { + var source = resultInfo.source || sourceFromStacktrace(); + if (source) { + details.source = source; + } + } + this.logAssertion(details); + this.assertions.push({ + result: !!resultInfo.result, + message: resultInfo.message + }); + }, + pushFailure: function pushFailure(message, source, actual) { + if (!(this instanceof Test)) { + throw new Error('pushFailure() assertion outside test context, was ' + sourceFromStacktrace(2)); + } + this.pushResult({ + result: false, + message: message || 'error', + actual: actual || null, + source: source + }); + }, + logAssertion: function logAssertion(details) { + runLoggingCallbacks('log', details); + var assertion = { + passed: details.result, + actual: details.actual, + expected: details.expected, + message: details.message, + stack: details.source, + todo: details.todo + }; + this.testReport.pushAssertion(assertion); + emit('assertion', assertion); + }, + internalResetTimeout: function internalResetTimeout(timeoutDuration) { + clearTimeout(config.timeout); + config.timeout = setTimeout$1(config.timeoutHandler(timeoutDuration), timeoutDuration); + }, + internalStop: function internalStop() { + var requiredCalls = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; + config.blocking = true; + var test = this; + var pauseId = this.nextPauseId++; + var pause = { + cancelled: false, + remaining: requiredCalls + }; + test.pauses.set(pauseId, pause); + function release() { + if (pause.cancelled) { + return; + } + if (config.current === undefined) { + throw new Error('Unexpected release of async pause after tests finished.\n' + "> Test: ".concat(test.testName, " [async #").concat(pauseId, "]")); + } + if (config.current !== test) { + throw new Error('Unexpected release of async pause during a different test.\n' + "> Test: ".concat(test.testName, " [async #").concat(pauseId, "]")); + } + if (pause.remaining <= 0) { + throw new Error('Tried to release async pause that was already released.\n' + "> Test: ".concat(test.testName, " [async #").concat(pauseId, "]")); + } + pause.remaining--; + if (pause.remaining === 0) { + test.pauses.delete(pauseId); + } + internalStart(test); + } + if (setTimeout$1) { + var timeoutDuration; + if (typeof test.timeout === 'number') { + timeoutDuration = test.timeout; + } + else if (typeof config.testTimeout === 'number') { + timeoutDuration = config.testTimeout; + } + if (typeof timeoutDuration === 'number' && timeoutDuration > 0) { + config.timeoutHandler = function (timeout) { + return function () { + config.timeout = null; + pause.cancelled = true; + test.pauses.delete(pauseId); + test.pushFailure("Test took longer than ".concat(timeout, "ms; test timed out."), sourceFromStacktrace(2)); + internalStart(test); + }; + }; + clearTimeout(config.timeout); + config.timeout = setTimeout$1(config.timeoutHandler(timeoutDuration), timeoutDuration); + } + } + return release; + }, + resolvePromise: function resolvePromise(promise, phase) { + if (promise != null) { + var _test = this; + var then = promise.then; + if (typeof then === 'function') { + var resume = _test.internalStop(); + var resolve = function resolve() { + resume(); + }; + if (config.notrycatch) { + then.call(promise, resolve); + } + else { + var reject = function reject(error) { + var message = 'Promise rejected ' + (!phase ? 'during' : phase.replace(/Each$/, '')) + ' "' + _test.testName + '": ' + (error && error.message || error); + _test.pushFailure(message, extractStacktrace(error, 0)); + saveGlobal(); + internalRecover(_test); + }; + then.call(promise, resolve, reject); + } + } + } + }, + valid: function valid() { + if (this.callback && this.callback.validTest) { + return true; + } + function moduleChainIdMatch(testModule, selectedId) { + return (!selectedId || !selectedId.length || inArray(testModule.moduleId, selectedId) || testModule.parentModule && moduleChainIdMatch(testModule.parentModule, selectedId)); + } + if (!moduleChainIdMatch(this.module, config.moduleId)) { + return false; + } + if (config.testId && config.testId.length && !inArray(this.testId, config.testId)) { + return false; + } + function moduleChainNameMatch(testModule, selectedModule) { + if (!selectedModule) { + return true; + } + var testModuleName = testModule.name ? testModule.name.toLowerCase() : null; + if (testModuleName === selectedModule) { + return true; + } + else if (testModule.parentModule) { + return moduleChainNameMatch(testModule.parentModule, selectedModule); + } + else { + return false; + } + } + var selectedModule = config.module && config.module.toLowerCase(); + if (!moduleChainNameMatch(this.module, selectedModule)) { + return false; + } + var filter = config.filter; + if (!filter) { + return true; + } + var regexFilter = /^(!?)\/([\w\W]*)\/(i?$)/.exec(filter); + var fullName = this.module.name + ': ' + this.testName; + return regexFilter ? this.regexFilter(!!regexFilter[1], regexFilter[2], regexFilter[3], fullName) : this.stringFilter(filter, fullName); + }, + regexFilter: function regexFilter(exclude, pattern, flags, fullName) { + var regex = new RegExp(pattern, flags); + var match = regex.test(fullName); + return match !== exclude; + }, + stringFilter: function stringFilter(filter, fullName) { + filter = filter.toLowerCase(); + fullName = fullName.toLowerCase(); + var include = filter.charAt(0) !== '!'; + if (!include) { + filter = filter.slice(1); + } + if (fullName.indexOf(filter) !== -1) { + return include; + } + return !include; + } + }; + function pushFailure() { + if (!config.current) { + throw new Error('pushFailure() assertion outside test context, in ' + sourceFromStacktrace(2)); + } + var currentTest = config.current; + return currentTest.pushFailure.apply(currentTest, arguments); + } + function saveGlobal() { + config.pollution = []; + if (config.noglobals) { + for (var key in g) { + if (hasOwn$1.call(g, key)) { + if (/^qunit-test-output/.test(key)) { + continue; + } + config.pollution.push(key); + } + } + } + } + function checkPollution() { + var old = config.pollution; + saveGlobal(); + var newGlobals = diff(config.pollution, old); + if (newGlobals.length > 0) { + pushFailure('Introduced global variable(s): ' + newGlobals.join(', ')); + } + var deletedGlobals = diff(old, config.pollution); + if (deletedGlobals.length > 0) { + pushFailure('Deleted global variable(s): ' + deletedGlobals.join(', ')); + } + } + var focused = false; + function addTest(settings) { + if (focused || config.currentModule.ignored) { + return; + } + var newTest = new Test(settings); + newTest.queue(); + } + function addOnlyTest(settings) { + if (config.currentModule.ignored) { + return; + } + if (!focused) { + config.queue.length = 0; + focused = true; + } + var newTest = new Test(settings); + newTest.queue(); + } + function test(testName, callback) { + addTest({ + testName: testName, + callback: callback + }); + } + function makeEachTestName(testName, argument) { + return "".concat(testName, " [").concat(argument, "]"); + } + function runEach(data, eachFn) { + if (Array.isArray(data)) { + for (var i = 0; i < data.length; i++) { + eachFn(data[i], i); + } + } + else if (_typeof(data) === 'object' && data !== null) { + for (var key in data) { + eachFn(data[key], key); + } + } + else { + throw new Error("test.each() expects an array or object as input, but\nfound ".concat(_typeof(data), " instead.")); + } + } + extend(test, { + todo: function todo(testName, callback) { + addTest({ + testName: testName, + callback: callback, + todo: true + }); + }, + skip: function skip(testName) { + addTest({ + testName: testName, + skip: true + }); + }, + only: function only(testName, callback) { + addOnlyTest({ + testName: testName, + callback: callback + }); + }, + each: function each(testName, dataset, callback) { + runEach(dataset, function (data, testKey) { + addTest({ + testName: makeEachTestName(testName, testKey), + callback: callback, + withData: true, + stackOffset: 5, + data: data + }); + }); + } + }); + test.todo.each = function (testName, dataset, callback) { + runEach(dataset, function (data, testKey) { + addTest({ + testName: makeEachTestName(testName, testKey), + callback: callback, + todo: true, + withData: true, + stackOffset: 5, + data: data + }); + }); + }; + test.skip.each = function (testName, dataset) { + runEach(dataset, function (_, testKey) { + addTest({ + testName: makeEachTestName(testName, testKey), + stackOffset: 5, + skip: true + }); + }); + }; + test.only.each = function (testName, dataset, callback) { + runEach(dataset, function (data, testKey) { + addOnlyTest({ + testName: makeEachTestName(testName, testKey), + callback: callback, + withData: true, + stackOffset: 5, + data: data + }); + }); + }; + function internalRecover(test) { + test.pauses.forEach(function (pause) { + pause.cancelled = true; + }); + test.pauses.clear(); + internalStart(test); + } + function internalStart(test) { + if (test.pauses.size > 0) { + return; + } + if (setTimeout$1) { + clearTimeout(config.timeout); + config.timeout = setTimeout$1(function () { + if (test.pauses.size > 0) { + return; + } + clearTimeout(config.timeout); + config.timeout = null; + config.blocking = false; + ProcessingQueue.advance(); + }); + } + else { + config.blocking = false; + ProcessingQueue.advance(); + } + } + function collectTests(module) { + var tests = [].concat(module.tests); + var modules = _toConsumableArray(module.childModules); + while (modules.length) { + var nextModule = modules.shift(); + tests.push.apply(tests, nextModule.tests); + modules.push.apply(modules, _toConsumableArray(nextModule.childModules)); + } + return tests; + } + function allTestsExecuted(module) { + return module.testsRun + module.testsIgnored === collectTests(module).length; + } + function lastTestWithinModuleExecuted(module) { + return module.testsRun === collectTests(module).filter(function (test) { + return !test.skip; + }).length - 1; + } + function incrementTestsRun(module) { + module.testsRun++; + while (module = module.parentModule) { + module.testsRun++; + } + } + function incrementTestsIgnored(module) { + module.testsIgnored++; + while (module = module.parentModule) { + module.testsIgnored++; + } + } + function exportQUnit(QUnit) { + var exportedModule = false; + if (window$1 && document) { + if (window$1.QUnit && window$1.QUnit.version) { + throw new Error('QUnit has already been defined.'); + } + window$1.QUnit = QUnit; + exportedModule = true; + } + if (typeof module !== 'undefined' && module && module.exports) { + module.exports = QUnit; + module.exports.QUnit = QUnit; + exportedModule = true; + } + if (typeof exports !== 'undefined' && exports) { + exports.QUnit = QUnit; + exportedModule = true; + } + if (typeof define === 'function' && define.amd) { + define(function () { + return QUnit; + }); + QUnit.config.autostart = false; + exportedModule = true; + } + if (!exportedModule) { + g.QUnit = QUnit; + } + } + var ConsoleReporter = function () { + function ConsoleReporter(runner) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + _classCallCheck(this, ConsoleReporter); + this.log = options.log || Function.prototype.bind.call(console$1.log, console$1); + runner.on('error', this.onError.bind(this)); + runner.on('runStart', this.onRunStart.bind(this)); + runner.on('testStart', this.onTestStart.bind(this)); + runner.on('testEnd', this.onTestEnd.bind(this)); + runner.on('runEnd', this.onRunEnd.bind(this)); + } + _createClass(ConsoleReporter, [{ + key: "onError", + value: function onError(error) { + this.log('error', error); + } + }, { + key: "onRunStart", + value: function onRunStart(runStart) { + this.log('runStart', runStart); + } + }, { + key: "onTestStart", + value: function onTestStart(test) { + this.log('testStart', test); + } + }, { + key: "onTestEnd", + value: function onTestEnd(test) { + this.log('testEnd', test); + } + }, { + key: "onRunEnd", + value: function onRunEnd(runEnd) { + this.log('runEnd', runEnd); + } + }], [{ + key: "init", + value: function init(runner, options) { + return new ConsoleReporter(runner, options); + } + }]); + return ConsoleReporter; + }(); + var FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY = true; + if (typeof process !== 'undefined') { + var _ref = process.env || {}; + FORCE_COLOR = _ref.FORCE_COLOR; + NODE_DISABLE_COLORS = _ref.NODE_DISABLE_COLORS; + NO_COLOR = _ref.NO_COLOR; + TERM = _ref.TERM; + isTTY = process.stdout && process.stdout.isTTY; + } + var $ = { + enabled: !NODE_DISABLE_COLORS && NO_COLOR == null && TERM !== 'dumb' && (FORCE_COLOR != null && FORCE_COLOR !== '0' || isTTY), + reset: init(0, 0), + bold: init(1, 22), + dim: init(2, 22), + italic: init(3, 23), + underline: init(4, 24), + inverse: init(7, 27), + hidden: init(8, 28), + strikethrough: init(9, 29), + black: init(30, 39), + red: init(31, 39), + green: init(32, 39), + yellow: init(33, 39), + blue: init(34, 39), + magenta: init(35, 39), + cyan: init(36, 39), + white: init(37, 39), + gray: init(90, 39), + grey: init(90, 39), + bgBlack: init(40, 49), + bgRed: init(41, 49), + bgGreen: init(42, 49), + bgYellow: init(43, 49), + bgBlue: init(44, 49), + bgMagenta: init(45, 49), + bgCyan: init(46, 49), + bgWhite: init(47, 49) + }; + function run(arr, str) { + var i = 0, tmp, beg = '', end = ''; + for (; i < arr.length; i++) { + tmp = arr[i]; + beg += tmp.open; + end += tmp.close; + if (!!~str.indexOf(tmp.close)) { + str = str.replace(tmp.rgx, tmp.close + tmp.open); + } + } + return beg + str + end; + } + function chain(has, keys) { + var ctx = { + has: has, + keys: keys + }; + ctx.reset = $.reset.bind(ctx); + ctx.bold = $.bold.bind(ctx); + ctx.dim = $.dim.bind(ctx); + ctx.italic = $.italic.bind(ctx); + ctx.underline = $.underline.bind(ctx); + ctx.inverse = $.inverse.bind(ctx); + ctx.hidden = $.hidden.bind(ctx); + ctx.strikethrough = $.strikethrough.bind(ctx); + ctx.black = $.black.bind(ctx); + ctx.red = $.red.bind(ctx); + ctx.green = $.green.bind(ctx); + ctx.yellow = $.yellow.bind(ctx); + ctx.blue = $.blue.bind(ctx); + ctx.magenta = $.magenta.bind(ctx); + ctx.cyan = $.cyan.bind(ctx); + ctx.white = $.white.bind(ctx); + ctx.gray = $.gray.bind(ctx); + ctx.grey = $.grey.bind(ctx); + ctx.bgBlack = $.bgBlack.bind(ctx); + ctx.bgRed = $.bgRed.bind(ctx); + ctx.bgGreen = $.bgGreen.bind(ctx); + ctx.bgYellow = $.bgYellow.bind(ctx); + ctx.bgBlue = $.bgBlue.bind(ctx); + ctx.bgMagenta = $.bgMagenta.bind(ctx); + ctx.bgCyan = $.bgCyan.bind(ctx); + ctx.bgWhite = $.bgWhite.bind(ctx); + return ctx; + } + function init(open, close) { + var blk = { + open: "\x1B[".concat(open, "m"), + close: "\x1B[".concat(close, "m"), + rgx: new RegExp("\\x1b\\[".concat(close, "m"), 'g') + }; + return function (txt) { + if (this !== void 0 && this.has !== void 0) { + !!~this.has.indexOf(open) || (this.has.push(open), this.keys.push(blk)); + return txt === void 0 ? this : $.enabled ? run(this.keys, txt + '') : txt + ''; + } + return txt === void 0 ? chain([open], [blk]) : $.enabled ? run([blk], txt + '') : txt + ''; + }; + } + var hasOwn = Object.prototype.hasOwnProperty; + function prettyYamlValue(value) { + var indent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 4; + if (value === undefined) { + value = String(value); + } + if (typeof value === 'number' && !isFinite(value)) { + value = String(value); + } + if (typeof value === 'number') { + return JSON.stringify(value); + } + if (typeof value === 'string') { + var rSpecialJson = /['"\\/[{}\]\r\n]/; + var rSpecialYaml = /[-?:,[\]{}#&*!|=>'"%@`]/; + var rUntrimmed = /(^\s|\s$)/; + var rNumerical = /^[\d._-]+$/; + var rBool = /^(true|false|y|n|yes|no|on|off)$/i; + if (value === '' || rSpecialJson.test(value) || rSpecialYaml.test(value[0]) || rUntrimmed.test(value) || rNumerical.test(value) || rBool.test(value)) { + if (!/\n/.test(value)) { + return JSON.stringify(value); + } + var prefix = new Array(indent + 1).join(' '); + var trailingLinebreakMatch = value.match(/\n+$/); + var trailingLinebreaks = trailingLinebreakMatch ? trailingLinebreakMatch[0].length : 0; + if (trailingLinebreaks === 1) { + var lines = value + .replace(/\n$/, '').split('\n').map(function (line) { + return prefix + line; + }); + return '|\n' + lines.join('\n'); + } + else { + var _lines = value.split('\n').map(function (line) { + return prefix + line; + }); + return '|+\n' + _lines.join('\n'); + } + } + else { + return value; + } + } + return JSON.stringify(decycledShallowClone(value), null, 2); + } + function decycledShallowClone(object) { + var ancestors = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + if (ancestors.indexOf(object) !== -1) { + return '[Circular]'; + } + var type = Object.prototype.toString.call(object).replace(/^\[.+\s(.+?)]$/, '$1').toLowerCase(); + var clone; + switch (type) { + case 'array': + ancestors.push(object); + clone = object.map(function (element) { + return decycledShallowClone(element, ancestors); + }); + ancestors.pop(); + break; + case 'object': + ancestors.push(object); + clone = {}; + Object.keys(object).forEach(function (key) { + clone[key] = decycledShallowClone(object[key], ancestors); + }); + ancestors.pop(); + break; + default: + clone = object; + } + return clone; + } + var TapReporter = function () { + function TapReporter(runner) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + _classCallCheck(this, TapReporter); + this.log = options.log || Function.prototype.bind.call(console$1.log, console$1); + this.testCount = 0; + this.ended = false; + this.bailed = false; + runner.on('error', this.onError.bind(this)); + runner.on('runStart', this.onRunStart.bind(this)); + runner.on('testEnd', this.onTestEnd.bind(this)); + runner.on('runEnd', this.onRunEnd.bind(this)); + } + _createClass(TapReporter, [{ + key: "onRunStart", + value: function onRunStart(_runSuite) { + this.log('TAP version 13'); + } + }, { + key: "onError", + value: function onError(error) { + if (this.bailed) { + return; + } + this.bailed = true; + if (!this.ended) { + this.testCount = this.testCount + 1; + this.log($.red("not ok ".concat(this.testCount, " global failure"))); + this.logError(error); + } + this.log('Bail out! ' + errorString(error).split('\n')[0]); + if (this.ended) { + this.logError(error); + } + } + }, { + key: "onTestEnd", + value: function onTestEnd(test) { + var _this = this; + this.testCount = this.testCount + 1; + if (test.status === 'passed') { + this.log("ok ".concat(this.testCount, " ").concat(test.fullName.join(' > '))); + } + else if (test.status === 'skipped') { + this.log($.yellow("ok ".concat(this.testCount, " # SKIP ").concat(test.fullName.join(' > ')))); + } + else if (test.status === 'todo') { + this.log($.cyan("not ok ".concat(this.testCount, " # TODO ").concat(test.fullName.join(' > ')))); + test.errors.forEach(function (error) { + return _this.logAssertion(error, 'todo'); + }); + } + else { + this.log($.red("not ok ".concat(this.testCount, " ").concat(test.fullName.join(' > ')))); + test.errors.forEach(function (error) { + return _this.logAssertion(error); + }); + } + } + }, { + key: "onRunEnd", + value: function onRunEnd(runSuite) { + this.ended = true; + this.log("1..".concat(runSuite.testCounts.total)); + this.log("# pass ".concat(runSuite.testCounts.passed)); + this.log($.yellow("# skip ".concat(runSuite.testCounts.skipped))); + this.log($.cyan("# todo ".concat(runSuite.testCounts.todo))); + this.log($.red("# fail ".concat(runSuite.testCounts.failed))); + } + }, { + key: "logAssertion", + value: function logAssertion(error, severity) { + var out = ' ---'; + out += "\n message: ".concat(prettyYamlValue(error.message || 'failed')); + out += "\n severity: ".concat(prettyYamlValue(severity || 'failed')); + if (hasOwn.call(error, 'actual')) { + out += "\n actual : ".concat(prettyYamlValue(error.actual)); + } + if (hasOwn.call(error, 'expected')) { + out += "\n expected: ".concat(prettyYamlValue(error.expected)); + } + if (error.stack) { + out += "\n stack: ".concat(prettyYamlValue(error.stack + '\n')); + } + out += '\n ...'; + this.log(out); + } + }, { + key: "logError", + value: function logError(error) { + var out = ' ---'; + out += "\n message: ".concat(prettyYamlValue(errorString(error))); + out += "\n severity: ".concat(prettyYamlValue('failed')); + if (error && error.stack) { + out += "\n stack: ".concat(prettyYamlValue(error.stack + '\n')); + } + out += '\n ...'; + this.log(out); + } + }], [{ + key: "init", + value: function init(runner, options) { + return new TapReporter(runner, options); + } + }]); + return TapReporter; + }(); + var reporters = { + console: ConsoleReporter, + tap: TapReporter + }; + function makeAddGlobalHook(hookName) { + return function addGlobalHook(callback) { + if (!config.globalHooks[hookName]) { + config.globalHooks[hookName] = []; + } + config.globalHooks[hookName].push(callback); + }; + } + var hooks = { + beforeEach: makeAddGlobalHook('beforeEach'), + afterEach: makeAddGlobalHook('afterEach') + }; + function onUncaughtException(error) { + if (config.current) { + config.current.assert.pushResult({ + result: false, + message: "global failure: ".concat(errorString(error)), + source: error && error.stack || sourceFromStacktrace(2) + }); + } + else { + runSuite.globalFailureCount++; + config.stats.bad++; + config.stats.all++; + emit('error', error); + } + } + function onWindowError(details) { + Logger.warn('QUnit.onError is deprecated and will be removed in QUnit 3.0.' + ' Please use QUnit.onUncaughtException instead.'); + if (config.current && config.current.ignoreGlobalErrors) { + return true; + } + var err = new Error(details.message); + err.stack = details.stacktrace || details.fileName + ':' + details.lineNumber; + onUncaughtException(err); + return false; + } + var QUnit = {}; + config.currentModule.suiteReport = runSuite; + var globalStartCalled = false; + var runStarted = false; + QUnit.isLocal = window$1 && window$1.location && window$1.location.protocol === 'file:'; + QUnit.version = '2.19.4'; + extend(QUnit, { + config: config, + dump: dump, + equiv: equiv, + reporters: reporters, + hooks: hooks, + is: is, + objectType: objectType, + on: on, + onError: onWindowError, + onUncaughtException: onUncaughtException, + pushFailure: pushFailure, + assert: Assert.prototype, + module: module$1, + test: test, + todo: test.todo, + skip: test.skip, + only: test.only, + start: function start(count) { + if (config.current) { + throw new Error('QUnit.start cannot be called inside a test context.'); + } + var globalStartAlreadyCalled = globalStartCalled; + globalStartCalled = true; + if (runStarted) { + throw new Error('Called start() while test already started running'); + } + if (globalStartAlreadyCalled || count > 1) { + throw new Error('Called start() outside of a test context too many times'); + } + if (config.autostart) { + throw new Error('Called start() outside of a test context when ' + 'QUnit.config.autostart was true'); + } + if (!config.pageLoaded) { + config.autostart = true; + if (!document) { + QUnit.load(); + } + return; + } + scheduleBegin(); + }, + onUnhandledRejection: function onUnhandledRejection(reason) { + Logger.warn('QUnit.onUnhandledRejection is deprecated and will be removed in QUnit 3.0.' + ' Please use QUnit.onUncaughtException instead.'); + onUncaughtException(reason); + }, + extend: function extend$1() { + Logger.warn('QUnit.extend is deprecated and will be removed in QUnit 3.0.' + ' Please use Object.assign instead.'); + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + return extend.apply(this, args); + }, + load: function load() { + config.pageLoaded = true; + extend(config, { + started: 0, + updateRate: 1000, + autostart: true, + filter: '' + }, true); + if (!runStarted) { + config.blocking = false; + if (config.autostart) { + scheduleBegin(); + } + } + }, + stack: function stack(offset) { + offset = (offset || 0) + 2; + return sourceFromStacktrace(offset); + } + }); + registerLoggingCallbacks(QUnit); + function scheduleBegin() { + runStarted = true; + if (setTimeout$1) { + setTimeout$1(function () { + begin(); + }); + } + else { + begin(); + } + } + function unblockAndAdvanceQueue() { + config.blocking = false; + ProcessingQueue.advance(); + } + function begin() { + if (config.started) { + unblockAndAdvanceQueue(); + return; + } + config.started = performance.now(); + if (config.modules[0].name === '' && config.modules[0].tests.length === 0) { + config.modules.shift(); + } + var modulesLog = []; + for (var i = 0; i < config.modules.length; i++) { + if (config.modules[i].name !== '') { + modulesLog.push({ + name: config.modules[i].name, + moduleId: config.modules[i].moduleId, + tests: config.modules[i].tests + }); + } + } + emit('runStart', runSuite.start(true)); + runLoggingCallbacks('begin', { + totalTests: Test.count, + modules: modulesLog + }).then(unblockAndAdvanceQueue); + } + exportQUnit(QUnit); + (function () { + if (!window$1 || !document) { + return; + } + var config = QUnit.config; + var hasOwn = Object.prototype.hasOwnProperty; + function storeFixture() { + if (hasOwn.call(config, 'fixture')) { + return; + } + var fixture = document.getElementById('qunit-fixture'); + if (fixture) { + config.fixture = fixture.cloneNode(true); + } + } + QUnit.begin(storeFixture); + function resetFixture() { + if (config.fixture == null) { + return; + } + var fixture = document.getElementById('qunit-fixture'); + var resetFixtureType = _typeof(config.fixture); + if (resetFixtureType === 'string') { + var newFixture = document.createElement('div'); + newFixture.setAttribute('id', 'qunit-fixture'); + newFixture.innerHTML = config.fixture; + fixture.parentNode.replaceChild(newFixture, fixture); + } + else { + var clonedFixture = config.fixture.cloneNode(true); + fixture.parentNode.replaceChild(clonedFixture, fixture); + } + } + QUnit.testStart(resetFixture); + })(); + (function () { + var location = typeof window$1 !== 'undefined' && window$1.location; + if (!location) { + return; + } + var urlParams = getUrlParams(); + QUnit.urlParams = urlParams; + QUnit.config.filter = urlParams.filter; + QUnit.config.module = urlParams.module; + QUnit.config.moduleId = [].concat(urlParams.moduleId || []); + QUnit.config.testId = [].concat(urlParams.testId || []); + if (urlParams.seed === true) { + QUnit.config.seed = Math.random().toString(36).slice(2); + } + else if (urlParams.seed) { + QUnit.config.seed = urlParams.seed; + } + QUnit.config.urlConfig.push({ + id: 'hidepassed', + label: 'Hide passed tests', + tooltip: 'Only show tests and assertions that fail. Stored as query-strings.' + }, { + id: 'noglobals', + label: 'Check for Globals', + tooltip: 'Enabling this will test if any test introduces new properties on the ' + 'global object (`window` in Browsers). Stored as query-strings.' + }, { + id: 'notrycatch', + label: 'No try-catch', + tooltip: 'Enabling this will run tests outside of a try-catch block. Makes debugging ' + 'exceptions in IE reasonable. Stored as query-strings.' + }); + QUnit.begin(function () { + var urlConfig = QUnit.config.urlConfig; + for (var i = 0; i < urlConfig.length; i++) { + var option = QUnit.config.urlConfig[i]; + if (typeof option !== 'string') { + option = option.id; + } + if (QUnit.config[option] === undefined) { + QUnit.config[option] = urlParams[option]; + } + } + }); + function getUrlParams() { + var urlParams = Object.create(null); + var params = location.search.slice(1).split('&'); + var length = params.length; + for (var i = 0; i < length; i++) { + if (params[i]) { + var param = params[i].split('='); + var name = decodeQueryParam(param[0]); + var value = param.length === 1 || decodeQueryParam(param.slice(1).join('=')); + if (name in urlParams) { + urlParams[name] = [].concat(urlParams[name], value); + } + else { + urlParams[name] = value; + } + } + } + return urlParams; + } + function decodeQueryParam(param) { + return decodeURIComponent(param.replace(/\+/g, '%20')); + } + })(); + var fuzzysort$1 = { exports: {} }; + (function (module) { + (function (root, UMD) { + if (module.exports) + module.exports = UMD(); + else + root.fuzzysort = UMD(); + })(commonjsGlobal, function UMD() { + function fuzzysortNew(instanceOptions) { + var fuzzysort = { + single: function single(search, target, options) { + if (search == 'farzher') + return { + target: "farzher was here (^-^*)/", + score: 0, + indexes: [0, 1, 2, 3, 4, 5, 6] + }; + if (!search) + return null; + if (!isObj(search)) + search = fuzzysort.getPreparedSearch(search); + if (!target) + return null; + if (!isObj(target)) + target = fuzzysort.getPrepared(target); + var allowTypo = options && options.allowTypo !== undefined ? options.allowTypo : instanceOptions && instanceOptions.allowTypo !== undefined ? instanceOptions.allowTypo : true; + var algorithm = allowTypo ? fuzzysort.algorithm : fuzzysort.algorithmNoTypo; + return algorithm(search, target, search[0]); + }, + go: function go(search, targets, options) { + if (search == 'farzher') + return [{ + target: "farzher was here (^-^*)/", + score: 0, + indexes: [0, 1, 2, 3, 4, 5, 6], + obj: targets ? targets[0] : null + }]; + if (!search) + return noResults; + search = fuzzysort.prepareSearch(search); + var searchLowerCode = search[0]; + var threshold = options && options.threshold || instanceOptions && instanceOptions.threshold || -9007199254740991; + var limit = options && options.limit || instanceOptions && instanceOptions.limit || 9007199254740991; + var allowTypo = options && options.allowTypo !== undefined ? options.allowTypo : instanceOptions && instanceOptions.allowTypo !== undefined ? instanceOptions.allowTypo : true; + var algorithm = allowTypo ? fuzzysort.algorithm : fuzzysort.algorithmNoTypo; + var resultsLen = 0; + var limitedCount = 0; + var targetsLen = targets.length; + if (options && options.keys) { + var scoreFn = options.scoreFn || defaultScoreFn; + var keys = options.keys; + var keysLen = keys.length; + for (var i = targetsLen - 1; i >= 0; --i) { + var obj = targets[i]; + var objResults = new Array(keysLen); + for (var keyI = keysLen - 1; keyI >= 0; --keyI) { + var key = keys[keyI]; + var target = getValue(obj, key); + if (!target) { + objResults[keyI] = null; + continue; + } + if (!isObj(target)) + target = fuzzysort.getPrepared(target); + objResults[keyI] = algorithm(search, target, searchLowerCode); + } + objResults.obj = obj; + var score = scoreFn(objResults); + if (score === null) + continue; + if (score < threshold) + continue; + objResults.score = score; + if (resultsLen < limit) { + q.add(objResults); + ++resultsLen; + } + else { + ++limitedCount; + if (score > q.peek().score) + q.replaceTop(objResults); + } + } + } + else if (options && options.key) { + var key = options.key; + for (var i = targetsLen - 1; i >= 0; --i) { + var obj = targets[i]; + var target = getValue(obj, key); + if (!target) + continue; + if (!isObj(target)) + target = fuzzysort.getPrepared(target); + var result = algorithm(search, target, searchLowerCode); + if (result === null) + continue; + if (result.score < threshold) + continue; + result = { + target: result.target, + _targetLowerCodes: null, + _nextBeginningIndexes: null, + score: result.score, + indexes: result.indexes, + obj: obj + }; + if (resultsLen < limit) { + q.add(result); + ++resultsLen; + } + else { + ++limitedCount; + if (result.score > q.peek().score) + q.replaceTop(result); + } + } + } + else { + for (var i = targetsLen - 1; i >= 0; --i) { + var target = targets[i]; + if (!target) + continue; + if (!isObj(target)) + target = fuzzysort.getPrepared(target); + var result = algorithm(search, target, searchLowerCode); + if (result === null) + continue; + if (result.score < threshold) + continue; + if (resultsLen < limit) { + q.add(result); + ++resultsLen; + } + else { + ++limitedCount; + if (result.score > q.peek().score) + q.replaceTop(result); + } + } + } + if (resultsLen === 0) + return noResults; + var results = new Array(resultsLen); + for (var i = resultsLen - 1; i >= 0; --i) { + results[i] = q.poll(); + } + results.total = resultsLen + limitedCount; + return results; + }, + goAsync: function goAsync(search, targets, options) { + var canceled = false; + var p = new Promise(function (resolve, reject) { + if (search == 'farzher') + return resolve([{ + target: "farzher was here (^-^*)/", + score: 0, + indexes: [0, 1, 2, 3, 4, 5, 6], + obj: targets ? targets[0] : null + }]); + if (!search) + return resolve(noResults); + search = fuzzysort.prepareSearch(search); + var searchLowerCode = search[0]; + var q = fastpriorityqueue(); + var iCurrent = targets.length - 1; + var threshold = options && options.threshold || instanceOptions && instanceOptions.threshold || -9007199254740991; + var limit = options && options.limit || instanceOptions && instanceOptions.limit || 9007199254740991; + var allowTypo = options && options.allowTypo !== undefined ? options.allowTypo : instanceOptions && instanceOptions.allowTypo !== undefined ? instanceOptions.allowTypo : true; + var algorithm = allowTypo ? fuzzysort.algorithm : fuzzysort.algorithmNoTypo; + var resultsLen = 0; + var limitedCount = 0; + function step() { + if (canceled) + return reject('canceled'); + var startMs = Date.now(); + if (options && options.keys) { + var scoreFn = options.scoreFn || defaultScoreFn; + var keys = options.keys; + var keysLen = keys.length; + for (; iCurrent >= 0; --iCurrent) { + if (iCurrent % 1000 === 0) { + if (Date.now() - startMs >= 10) { + isNode ? setImmediate(step) : setTimeout(step); + return; + } + } + var obj = targets[iCurrent]; + var objResults = new Array(keysLen); + for (var keyI = keysLen - 1; keyI >= 0; --keyI) { + var key = keys[keyI]; + var target = getValue(obj, key); + if (!target) { + objResults[keyI] = null; + continue; + } + if (!isObj(target)) + target = fuzzysort.getPrepared(target); + objResults[keyI] = algorithm(search, target, searchLowerCode); + } + objResults.obj = obj; + var score = scoreFn(objResults); + if (score === null) + continue; + if (score < threshold) + continue; + objResults.score = score; + if (resultsLen < limit) { + q.add(objResults); + ++resultsLen; + } + else { + ++limitedCount; + if (score > q.peek().score) + q.replaceTop(objResults); + } + } + } + else if (options && options.key) { + var key = options.key; + for (; iCurrent >= 0; --iCurrent) { + if (iCurrent % 1000 === 0) { + if (Date.now() - startMs >= 10) { + isNode ? setImmediate(step) : setTimeout(step); + return; + } + } + var obj = targets[iCurrent]; + var target = getValue(obj, key); + if (!target) + continue; + if (!isObj(target)) + target = fuzzysort.getPrepared(target); + var result = algorithm(search, target, searchLowerCode); + if (result === null) + continue; + if (result.score < threshold) + continue; + result = { + target: result.target, + _targetLowerCodes: null, + _nextBeginningIndexes: null, + score: result.score, + indexes: result.indexes, + obj: obj + }; + if (resultsLen < limit) { + q.add(result); + ++resultsLen; + } + else { + ++limitedCount; + if (result.score > q.peek().score) + q.replaceTop(result); + } + } + } + else { + for (; iCurrent >= 0; --iCurrent) { + if (iCurrent % 1000 === 0) { + if (Date.now() - startMs >= 10) { + isNode ? setImmediate(step) : setTimeout(step); + return; + } + } + var target = targets[iCurrent]; + if (!target) + continue; + if (!isObj(target)) + target = fuzzysort.getPrepared(target); + var result = algorithm(search, target, searchLowerCode); + if (result === null) + continue; + if (result.score < threshold) + continue; + if (resultsLen < limit) { + q.add(result); + ++resultsLen; + } + else { + ++limitedCount; + if (result.score > q.peek().score) + q.replaceTop(result); + } + } + } + if (resultsLen === 0) + return resolve(noResults); + var results = new Array(resultsLen); + for (var i = resultsLen - 1; i >= 0; --i) { + results[i] = q.poll(); + } + results.total = resultsLen + limitedCount; + resolve(results); + } + isNode ? setImmediate(step) : step(); + }); + p.cancel = function () { + canceled = true; + }; + return p; + }, + highlight: function highlight(result, hOpen, hClose) { + if (typeof hOpen == 'function') + return fuzzysort.highlightCallback(result, hOpen); + if (result === null) + return null; + if (hOpen === undefined) + hOpen = ''; + if (hClose === undefined) + hClose = ''; + var highlighted = ''; + var matchesIndex = 0; + var opened = false; + var target = result.target; + var targetLen = target.length; + var matchesBest = result.indexes; + for (var i = 0; i < targetLen; ++i) { + var char = target[i]; + if (matchesBest[matchesIndex] === i) { + ++matchesIndex; + if (!opened) { + opened = true; + highlighted += hOpen; + } + if (matchesIndex === matchesBest.length) { + highlighted += char + hClose + target.substr(i + 1); + break; + } + } + else { + if (opened) { + opened = false; + highlighted += hClose; + } + } + highlighted += char; + } + return highlighted; + }, + highlightCallback: function highlightCallback(result, cb) { + if (result === null) + return null; + var target = result.target; + var targetLen = target.length; + var indexes = result.indexes; + var highlighted = ''; + var matchI = 0; + var indexesI = 0; + var opened = false; + var result = []; + for (var i = 0; i < targetLen; ++i) { + var char = target[i]; + if (indexes[indexesI] === i) { + ++indexesI; + if (!opened) { + opened = true; + result.push(highlighted); + highlighted = ''; + } + if (indexesI === indexes.length) { + highlighted += char; + result.push(cb(highlighted, matchI++)); + highlighted = ''; + result.push(target.substr(i + 1)); + break; + } + } + else { + if (opened) { + opened = false; + result.push(cb(highlighted, matchI++)); + highlighted = ''; + } + } + highlighted += char; + } + return result; + }, + prepare: function prepare(target) { + if (!target) + return { + target: '', + _targetLowerCodes: [0], + _nextBeginningIndexes: null, + score: null, + indexes: null, + obj: null + }; + return { + target: target, + _targetLowerCodes: fuzzysort.prepareLowerCodes(target), + _nextBeginningIndexes: null, + score: null, + indexes: null, + obj: null + }; + }, + prepareSlow: function prepareSlow(target) { + if (!target) + return { + target: '', + _targetLowerCodes: [0], + _nextBeginningIndexes: null, + score: null, + indexes: null, + obj: null + }; + return { + target: target, + _targetLowerCodes: fuzzysort.prepareLowerCodes(target), + _nextBeginningIndexes: fuzzysort.prepareNextBeginningIndexes(target), + score: null, + indexes: null, + obj: null + }; + }, + prepareSearch: function prepareSearch(search) { + if (!search) + search = ''; + return fuzzysort.prepareLowerCodes(search); + }, + getPrepared: function getPrepared(target) { + if (target.length > 999) + return fuzzysort.prepare(target); + var targetPrepared = preparedCache.get(target); + if (targetPrepared !== undefined) + return targetPrepared; + targetPrepared = fuzzysort.prepare(target); + preparedCache.set(target, targetPrepared); + return targetPrepared; + }, + getPreparedSearch: function getPreparedSearch(search) { + if (search.length > 999) + return fuzzysort.prepareSearch(search); + var searchPrepared = preparedSearchCache.get(search); + if (searchPrepared !== undefined) + return searchPrepared; + searchPrepared = fuzzysort.prepareSearch(search); + preparedSearchCache.set(search, searchPrepared); + return searchPrepared; + }, + algorithm: function algorithm(searchLowerCodes, prepared, searchLowerCode) { + var targetLowerCodes = prepared._targetLowerCodes; + var searchLen = searchLowerCodes.length; + var targetLen = targetLowerCodes.length; + var searchI = 0; + var targetI = 0; + var typoSimpleI = 0; + var matchesSimpleLen = 0; + for (;;) { + var isMatch = searchLowerCode === targetLowerCodes[targetI]; + if (isMatch) { + matchesSimple[matchesSimpleLen++] = targetI; + ++searchI; + if (searchI === searchLen) + break; + searchLowerCode = searchLowerCodes[typoSimpleI === 0 ? searchI : typoSimpleI === searchI ? searchI + 1 : typoSimpleI === searchI - 1 ? searchI - 1 : searchI]; + } + ++targetI; + if (targetI >= targetLen) { + for (;;) { + if (searchI <= 1) + return null; + if (typoSimpleI === 0) { + --searchI; + var searchLowerCodeNew = searchLowerCodes[searchI]; + if (searchLowerCode === searchLowerCodeNew) + continue; + typoSimpleI = searchI; + } + else { + if (typoSimpleI === 1) + return null; + --typoSimpleI; + searchI = typoSimpleI; + searchLowerCode = searchLowerCodes[searchI + 1]; + var searchLowerCodeNew = searchLowerCodes[searchI]; + if (searchLowerCode === searchLowerCodeNew) + continue; + } + matchesSimpleLen = searchI; + targetI = matchesSimple[matchesSimpleLen - 1] + 1; + break; + } + } + } + var searchI = 0; + var typoStrictI = 0; + var successStrict = false; + var matchesStrictLen = 0; + var nextBeginningIndexes = prepared._nextBeginningIndexes; + if (nextBeginningIndexes === null) + nextBeginningIndexes = prepared._nextBeginningIndexes = fuzzysort.prepareNextBeginningIndexes(prepared.target); + var firstPossibleI = targetI = matchesSimple[0] === 0 ? 0 : nextBeginningIndexes[matchesSimple[0] - 1]; + if (targetI !== targetLen) + for (;;) { + if (targetI >= targetLen) { + if (searchI <= 0) { + ++typoStrictI; + if (typoStrictI > searchLen - 2) + break; + if (searchLowerCodes[typoStrictI] === searchLowerCodes[typoStrictI + 1]) + continue; + targetI = firstPossibleI; + continue; + } + --searchI; + var lastMatch = matchesStrict[--matchesStrictLen]; + targetI = nextBeginningIndexes[lastMatch]; + } + else { + var isMatch = searchLowerCodes[typoStrictI === 0 ? searchI : typoStrictI === searchI ? searchI + 1 : typoStrictI === searchI - 1 ? searchI - 1 : searchI] === targetLowerCodes[targetI]; + if (isMatch) { + matchesStrict[matchesStrictLen++] = targetI; + ++searchI; + if (searchI === searchLen) { + successStrict = true; + break; + } + ++targetI; + } + else { + targetI = nextBeginningIndexes[targetI]; + } + } + } + { + if (successStrict) { + var matchesBest = matchesStrict; + var matchesBestLen = matchesStrictLen; + } + else { + var matchesBest = matchesSimple; + var matchesBestLen = matchesSimpleLen; + } + var score = 0; + var lastTargetI = -1; + for (var i = 0; i < searchLen; ++i) { + var targetI = matchesBest[i]; + if (lastTargetI !== targetI - 1) + score -= targetI; + lastTargetI = targetI; + } + if (!successStrict) { + score *= 1000; + if (typoSimpleI !== 0) + score += -20; + } + else { + if (typoStrictI !== 0) + score += -20; + } + score -= targetLen - searchLen; + prepared.score = score; + prepared.indexes = new Array(matchesBestLen); + for (var i = matchesBestLen - 1; i >= 0; --i) { + prepared.indexes[i] = matchesBest[i]; + } + return prepared; + } + }, + algorithmNoTypo: function algorithmNoTypo(searchLowerCodes, prepared, searchLowerCode) { + var targetLowerCodes = prepared._targetLowerCodes; + var searchLen = searchLowerCodes.length; + var targetLen = targetLowerCodes.length; + var searchI = 0; + var targetI = 0; + var matchesSimpleLen = 0; + for (;;) { + var isMatch = searchLowerCode === targetLowerCodes[targetI]; + if (isMatch) { + matchesSimple[matchesSimpleLen++] = targetI; + ++searchI; + if (searchI === searchLen) + break; + searchLowerCode = searchLowerCodes[searchI]; + } + ++targetI; + if (targetI >= targetLen) + return null; + } + var searchI = 0; + var successStrict = false; + var matchesStrictLen = 0; + var nextBeginningIndexes = prepared._nextBeginningIndexes; + if (nextBeginningIndexes === null) + nextBeginningIndexes = prepared._nextBeginningIndexes = fuzzysort.prepareNextBeginningIndexes(prepared.target); + targetI = matchesSimple[0] === 0 ? 0 : nextBeginningIndexes[matchesSimple[0] - 1]; + if (targetI !== targetLen) + for (;;) { + if (targetI >= targetLen) { + if (searchI <= 0) + break; + --searchI; + var lastMatch = matchesStrict[--matchesStrictLen]; + targetI = nextBeginningIndexes[lastMatch]; + } + else { + var isMatch = searchLowerCodes[searchI] === targetLowerCodes[targetI]; + if (isMatch) { + matchesStrict[matchesStrictLen++] = targetI; + ++searchI; + if (searchI === searchLen) { + successStrict = true; + break; + } + ++targetI; + } + else { + targetI = nextBeginningIndexes[targetI]; + } + } + } + { + if (successStrict) { + var matchesBest = matchesStrict; + var matchesBestLen = matchesStrictLen; + } + else { + var matchesBest = matchesSimple; + var matchesBestLen = matchesSimpleLen; + } + var score = 0; + var lastTargetI = -1; + for (var i = 0; i < searchLen; ++i) { + var targetI = matchesBest[i]; + if (lastTargetI !== targetI - 1) + score -= targetI; + lastTargetI = targetI; + } + if (!successStrict) + score *= 1000; + score -= targetLen - searchLen; + prepared.score = score; + prepared.indexes = new Array(matchesBestLen); + for (var i = matchesBestLen - 1; i >= 0; --i) { + prepared.indexes[i] = matchesBest[i]; + } + return prepared; + } + }, + prepareLowerCodes: function prepareLowerCodes(str) { + var strLen = str.length; + var lowerCodes = []; + var lower = str.toLowerCase(); + for (var i = 0; i < strLen; ++i) { + lowerCodes[i] = lower.charCodeAt(i); + } + return lowerCodes; + }, + prepareBeginningIndexes: function prepareBeginningIndexes(target) { + var targetLen = target.length; + var beginningIndexes = []; + var beginningIndexesLen = 0; + var wasUpper = false; + var wasAlphanum = false; + for (var i = 0; i < targetLen; ++i) { + var targetCode = target.charCodeAt(i); + var isUpper = targetCode >= 65 && targetCode <= 90; + var isAlphanum = isUpper || targetCode >= 97 && targetCode <= 122 || targetCode >= 48 && targetCode <= 57; + var isBeginning = isUpper && !wasUpper || !wasAlphanum || !isAlphanum; + wasUpper = isUpper; + wasAlphanum = isAlphanum; + if (isBeginning) + beginningIndexes[beginningIndexesLen++] = i; + } + return beginningIndexes; + }, + prepareNextBeginningIndexes: function prepareNextBeginningIndexes(target) { + var targetLen = target.length; + var beginningIndexes = fuzzysort.prepareBeginningIndexes(target); + var nextBeginningIndexes = []; + var lastIsBeginning = beginningIndexes[0]; + var lastIsBeginningI = 0; + for (var i = 0; i < targetLen; ++i) { + if (lastIsBeginning > i) { + nextBeginningIndexes[i] = lastIsBeginning; + } + else { + lastIsBeginning = beginningIndexes[++lastIsBeginningI]; + nextBeginningIndexes[i] = lastIsBeginning === undefined ? targetLen : lastIsBeginning; + } + } + return nextBeginningIndexes; + }, + cleanup: cleanup, + new: fuzzysortNew + }; + return fuzzysort; + } + var isNode = typeof commonjsRequire !== 'undefined' && typeof window === 'undefined'; + var MyMap = typeof Map === 'function' ? Map : function () { + var s = Object.create(null); + this.get = function (k) { + return s[k]; + }; + this.set = function (k, val) { + s[k] = val; + return this; + }; + this.clear = function () { + s = Object.create(null); + }; + }; + var preparedCache = new MyMap(); + var preparedSearchCache = new MyMap(); + var noResults = []; + noResults.total = 0; + var matchesSimple = []; + var matchesStrict = []; + function cleanup() { + preparedCache.clear(); + preparedSearchCache.clear(); + matchesSimple = []; + matchesStrict = []; + } + function defaultScoreFn(a) { + var max = -9007199254740991; + for (var i = a.length - 1; i >= 0; --i) { + var result = a[i]; + if (result === null) + continue; + var score = result.score; + if (score > max) + max = score; + } + if (max === -9007199254740991) + return null; + return max; + } + function getValue(obj, prop) { + var tmp = obj[prop]; + if (tmp !== undefined) + return tmp; + var segs = prop; + if (!Array.isArray(prop)) + segs = prop.split('.'); + var len = segs.length; + var i = -1; + while (obj && ++i < len) { + obj = obj[segs[i]]; + } + return obj; + } + function isObj(x) { + return _typeof(x) === 'object'; + } + var fastpriorityqueue = function fastpriorityqueue() { + var r = [], o = 0, e = {}; + function n() { + for (var e = 0, n = r[e], c = 1; c < o;) { + var f = c + 1; + e = c, f < o && r[f].score < r[c].score && (e = f), r[e - 1 >> 1] = r[e], c = 1 + (e << 1); + } + for (var a = e - 1 >> 1; e > 0 && n.score < r[a].score; a = (e = a) - 1 >> 1) { + r[e] = r[a]; + } + r[e] = n; + } + return e.add = function (e) { + var n = o; + r[o++] = e; + for (var c = n - 1 >> 1; n > 0 && e.score < r[c].score; c = (n = c) - 1 >> 1) { + r[n] = r[c]; + } + r[n] = e; + }, e.poll = function () { + if (0 !== o) { + var e = r[0]; + return r[0] = r[--o], n(), e; + } + }, e.peek = function (e) { + if (0 !== o) + return r[0]; + }, e.replaceTop = function (o) { + r[0] = o, n(); + }, e; + }; + var q = fastpriorityqueue(); + return fuzzysortNew(); + }); + })(fuzzysort$1); + var fuzzysort = fuzzysort$1.exports; + var stats = { + failedTests: [], + defined: 0, + completed: 0 + }; + function escapeText(str) { + if (!str) { + return ''; + } + return ('' + str).replace(/['"<>&]/g, function (s) { + switch (s) { + case "'": + return '''; + case '"': + return '"'; + case '<': + return '<'; + case '>': + return '>'; + case '&': + return '&'; + } + }); + } + (function () { + if (!window$1 || !document) { + return; + } + var config = QUnit.config; + var hiddenTests = []; + var collapseNext = false; + var hasOwn = Object.prototype.hasOwnProperty; + var unfilteredUrl = setUrl({ + filter: undefined, + module: undefined, + moduleId: undefined, + testId: undefined + }); + var dropdownData = null; + function trim(string) { + if (typeof string.trim === 'function') { + return string.trim(); + } + else { + return string.replace(/^\s+|\s+$/g, ''); + } + } + function addEvent(elem, type, fn) { + elem.addEventListener(type, fn, false); + } + function removeEvent(elem, type, fn) { + elem.removeEventListener(type, fn, false); + } + function addEvents(elems, type, fn) { + var i = elems.length; + while (i--) { + addEvent(elems[i], type, fn); + } + } + function hasClass(elem, name) { + return (' ' + elem.className + ' ').indexOf(' ' + name + ' ') >= 0; + } + function addClass(elem, name) { + if (!hasClass(elem, name)) { + elem.className += (elem.className ? ' ' : '') + name; + } + } + function toggleClass(elem, name, force) { + if (force || typeof force === 'undefined' && !hasClass(elem, name)) { + addClass(elem, name); + } + else { + removeClass(elem, name); + } + } + function removeClass(elem, name) { + var set = ' ' + elem.className + ' '; + while (set.indexOf(' ' + name + ' ') >= 0) { + set = set.replace(' ' + name + ' ', ' '); + } + elem.className = trim(set); + } + function id(name) { + return document.getElementById && document.getElementById(name); + } + function abortTests() { + var abortButton = id('qunit-abort-tests-button'); + if (abortButton) { + abortButton.disabled = true; + abortButton.innerHTML = 'Aborting...'; + } + QUnit.config.queue.length = 0; + return false; + } + function interceptNavigation(ev) { + var filterInputElem = id('qunit-filter-input'); + filterInputElem.value = trim(filterInputElem.value); + applyUrlParams(); + if (ev && ev.preventDefault) { + ev.preventDefault(); + } + return false; + } + function getUrlConfigHtml() { + var selection = false; + var urlConfig = config.urlConfig; + var urlConfigHtml = ''; + for (var i = 0; i < urlConfig.length; i++) { + var val = config.urlConfig[i]; + if (typeof val === 'string') { + val = { + id: val, + label: val + }; + } + var escaped = escapeText(val.id); + var escapedTooltip = escapeText(val.tooltip); + if (!val.value || typeof val.value === 'string') { + urlConfigHtml += "'; + } + else { + urlConfigHtml += "'; + } + } + return urlConfigHtml; + } + function toolbarChanged() { + var field = this; + var params = {}; + var value; + if ('selectedIndex' in field) { + value = field.options[field.selectedIndex].value || undefined; + } + else { + value = field.checked ? field.defaultValue || true : undefined; + } + params[field.name] = value; + var updatedUrl = setUrl(params); + if (field.name === 'hidepassed' && 'replaceState' in window$1.history) { + QUnit.urlParams[field.name] = value; + config[field.name] = value || false; + var tests = id('qunit-tests'); + if (tests) { + var length = tests.children.length; + var children = tests.children; + if (field.checked) { + for (var i = 0; i < length; i++) { + var test = children[i]; + var className = test ? test.className : ''; + var classNameHasPass = className.indexOf('pass') > -1; + var classNameHasSkipped = className.indexOf('skipped') > -1; + if (classNameHasPass || classNameHasSkipped) { + hiddenTests.push(test); + } + } + var _iterator = _createForOfIteratorHelper(hiddenTests), _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var hiddenTest = _step.value; + tests.removeChild(hiddenTest); + } + } + catch (err) { + _iterator.e(err); + } + finally { + _iterator.f(); + } + } + else { + var _test; + while ((_test = hiddenTests.pop()) != null) { + tests.appendChild(_test); + } + } + } + window$1.history.replaceState(null, '', updatedUrl); + } + else { + window$1.location = updatedUrl; + } + } + function setUrl(params) { + var querystring = '?'; + var location = window$1.location; + params = extend(extend({}, QUnit.urlParams), params); + for (var key in params) { + if (hasOwn.call(params, key) && params[key] !== undefined) { + var arrValue = [].concat(params[key]); + for (var i = 0; i < arrValue.length; i++) { + querystring += encodeURIComponent(key); + if (arrValue[i] !== true) { + querystring += '=' + encodeURIComponent(arrValue[i]); + } + querystring += '&'; + } + } + } + return location.protocol + '//' + location.host + location.pathname + querystring.slice(0, -1); + } + function applyUrlParams() { + var filter = id('qunit-filter-input').value; + window$1.location = setUrl({ + filter: filter === '' ? undefined : filter, + moduleId: _toConsumableArray(dropdownData.selectedMap.keys()), + module: undefined, + testId: undefined + }); + } + function toolbarUrlConfigContainer() { + var urlConfigContainer = document.createElement('span'); + urlConfigContainer.innerHTML = getUrlConfigHtml(); + addClass(urlConfigContainer, 'qunit-url-config'); + addEvents(urlConfigContainer.getElementsByTagName('input'), 'change', toolbarChanged); + addEvents(urlConfigContainer.getElementsByTagName('select'), 'change', toolbarChanged); + return urlConfigContainer; + } + function abortTestsButton() { + var button = document.createElement('button'); + button.id = 'qunit-abort-tests-button'; + button.innerHTML = 'Abort'; + addEvent(button, 'click', abortTests); + return button; + } + function toolbarLooseFilter() { + var filter = document.createElement('form'); + var label = document.createElement('label'); + var input = document.createElement('input'); + var button = document.createElement('button'); + addClass(filter, 'qunit-filter'); + label.innerHTML = 'Filter: '; + input.type = 'text'; + input.value = config.filter || ''; + input.name = 'filter'; + input.id = 'qunit-filter-input'; + button.innerHTML = 'Go'; + label.appendChild(input); + filter.appendChild(label); + filter.appendChild(document.createTextNode(' ')); + filter.appendChild(button); + addEvent(filter, 'submit', interceptNavigation); + return filter; + } + function createModuleListItem(moduleId, name, checked) { + return '
  • '; + } + function moduleListHtml(results) { + var html = ''; + dropdownData.selectedMap.forEach(function (name, moduleId) { + html += createModuleListItem(moduleId, name, true); + }); + for (var i = 0; i < results.length; i++) { + var mod = results[i].obj; + if (!dropdownData.selectedMap.has(mod.moduleId)) { + html += createModuleListItem(mod.moduleId, mod.name, false); + } + } + return html; + } + function toolbarModuleFilter(beginDetails) { + var initialSelected = null; + dropdownData = { + options: beginDetails.modules.slice(), + selectedMap: new StringMap(), + isDirty: function isDirty() { + return _toConsumableArray(dropdownData.selectedMap.keys()).sort().join(',') !== _toConsumableArray(initialSelected.keys()).sort().join(','); + } + }; + if (config.moduleId.length) { + for (var i = 0; i < beginDetails.modules.length; i++) { + var mod = beginDetails.modules[i]; + if (config.moduleId.indexOf(mod.moduleId) !== -1) { + dropdownData.selectedMap.set(mod.moduleId, mod.name); + } + } + } + initialSelected = new StringMap(dropdownData.selectedMap); + var moduleSearch = document.createElement('input'); + moduleSearch.id = 'qunit-modulefilter-search'; + moduleSearch.autocomplete = 'off'; + addEvent(moduleSearch, 'input', searchInput); + addEvent(moduleSearch, 'input', searchFocus); + addEvent(moduleSearch, 'focus', searchFocus); + addEvent(moduleSearch, 'click', searchFocus); + var label = document.createElement('label'); + label.htmlFor = 'qunit-modulefilter-search'; + label.textContent = 'Module:'; + var searchContainer = document.createElement('span'); + searchContainer.id = 'qunit-modulefilter-search-container'; + searchContainer.appendChild(moduleSearch); + var applyButton = document.createElement('button'); + applyButton.textContent = 'Apply'; + applyButton.title = 'Re-run the selected test modules'; + addEvent(applyButton, 'click', applyUrlParams); + var resetButton = document.createElement('button'); + resetButton.textContent = 'Reset'; + resetButton.type = 'reset'; + resetButton.title = 'Restore the previous module selection'; + var clearButton = document.createElement('button'); + clearButton.textContent = 'Select none'; + clearButton.type = 'button'; + clearButton.title = 'Clear the current module selection'; + addEvent(clearButton, 'click', function () { + dropdownData.selectedMap.clear(); + selectionChange(); + searchInput(); + }); + var actions = document.createElement('span'); + actions.id = 'qunit-modulefilter-actions'; + actions.appendChild(applyButton); + actions.appendChild(resetButton); + if (initialSelected.size) { + actions.appendChild(clearButton); + } + var dropDownList = document.createElement('ul'); + dropDownList.id = 'qunit-modulefilter-dropdown-list'; + var dropDown = document.createElement('div'); + dropDown.id = 'qunit-modulefilter-dropdown'; + dropDown.style.display = 'none'; + dropDown.appendChild(actions); + dropDown.appendChild(dropDownList); + addEvent(dropDown, 'change', selectionChange); + searchContainer.appendChild(dropDown); + selectionChange(); + var moduleFilter = document.createElement('form'); + moduleFilter.id = 'qunit-modulefilter'; + moduleFilter.appendChild(label); + moduleFilter.appendChild(document.createTextNode(' ')); + moduleFilter.appendChild(searchContainer); + addEvent(moduleFilter, 'submit', interceptNavigation); + addEvent(moduleFilter, 'reset', function () { + dropdownData.selectedMap = new StringMap(initialSelected); + selectionChange(); + searchInput(); + }); + function searchFocus() { + if (dropDown.style.display !== 'none') { + return; + } + searchInput(); + dropDown.style.display = 'block'; + addEvent(document, 'click', hideHandler); + addEvent(document, 'keydown', hideHandler); + function hideHandler(e) { + var inContainer = moduleFilter.contains(e.target); + if (e.keyCode === 27 || !inContainer) { + if (e.keyCode === 27 && inContainer) { + moduleSearch.focus(); + } + dropDown.style.display = 'none'; + removeEvent(document, 'click', hideHandler); + removeEvent(document, 'keydown', hideHandler); + moduleSearch.value = ''; + searchInput(); + } + } + } + function filterModules(searchText) { + var results; + if (searchText === '') { + results = dropdownData.options.map(function (obj) { + return { + obj: obj + }; + }); + } + else { + results = fuzzysort.go(searchText, dropdownData.options, { + limit: 1000, + key: 'name', + allowTypo: true + }); + } + return moduleListHtml(results); + } + var searchInputTimeout; + function searchInput() { + window$1.clearTimeout(searchInputTimeout); + searchInputTimeout = window$1.setTimeout(function () { + dropDownList.innerHTML = filterModules(moduleSearch.value); + }); + } + function selectionChange(evt) { + var checkbox = evt && evt.target || null; + if (checkbox) { + if (checkbox.checked) { + dropdownData.selectedMap.set(checkbox.value, checkbox.parentNode.textContent); + } + else { + dropdownData.selectedMap.delete(checkbox.value); + } + toggleClass(checkbox.parentNode, 'checked', checkbox.checked); + } + var textForm = dropdownData.selectedMap.size ? dropdownData.selectedMap.size + ' ' + (dropdownData.selectedMap.size === 1 ? 'module' : 'modules') : 'All modules'; + moduleSearch.placeholder = textForm; + moduleSearch.title = 'Type to search through and reduce the list.'; + resetButton.disabled = !dropdownData.isDirty(); + clearButton.style.display = dropdownData.selectedMap.size ? '' : 'none'; + } + return moduleFilter; + } + function appendToolbar(beginDetails) { + var toolbar = id('qunit-testrunner-toolbar'); + if (toolbar) { + toolbar.appendChild(toolbarUrlConfigContainer()); + var toolbarFilters = document.createElement('span'); + toolbarFilters.id = 'qunit-toolbar-filters'; + toolbarFilters.appendChild(toolbarLooseFilter()); + toolbarFilters.appendChild(toolbarModuleFilter(beginDetails)); + var clearfix = document.createElement('div'); + clearfix.className = 'clearfix'; + toolbar.appendChild(toolbarFilters); + toolbar.appendChild(clearfix); + } + } + function appendHeader() { + var header = id('qunit-header'); + if (header) { + header.innerHTML = "" + header.innerHTML + ' '; + } + } + function appendBanner() { + var banner = id('qunit-banner'); + if (banner) { + banner.className = ''; + } + } + function appendTestResults() { + var tests = id('qunit-tests'); + var result = id('qunit-testresult'); + var controls; + if (result) { + result.parentNode.removeChild(result); + } + if (tests) { + tests.innerHTML = ''; + result = document.createElement('p'); + result.id = 'qunit-testresult'; + result.className = 'result'; + tests.parentNode.insertBefore(result, tests); + result.innerHTML = '
    Running...
     
    ' + '
    ' + '
    '; + controls = id('qunit-testresult-controls'); + } + if (controls) { + controls.appendChild(abortTestsButton()); + } + } + function appendFilteredTest() { + var testId = QUnit.config.testId; + if (!testId || testId.length <= 0) { + return ''; + } + return "
    Rerunning selected tests: " + escapeText(testId.join(', ')) + " Run all tests
    "; + } + function appendUserAgent() { + var userAgent = id('qunit-userAgent'); + if (userAgent) { + userAgent.innerHTML = ''; + userAgent.appendChild(document.createTextNode('QUnit ' + QUnit.version + '; ' + navigator.userAgent)); + } + } + function appendInterface(beginDetails) { + var qunit = id('qunit'); + if (qunit) { + qunit.setAttribute('role', 'main'); + qunit.innerHTML = "

    " + escapeText(document.title) + '

    ' + "

    " + "" + appendFilteredTest() + "

    " + "
      "; + } + appendHeader(); + appendBanner(); + appendTestResults(); + appendUserAgent(); + appendToolbar(beginDetails); + } + function appendTest(name, testId, moduleName) { + var tests = id('qunit-tests'); + if (!tests) { + return; + } + var title = document.createElement('strong'); + title.innerHTML = getNameHtml(name, moduleName); + var testBlock = document.createElement('li'); + testBlock.appendChild(title); + if (testId !== undefined) { + var rerunTrigger = document.createElement('a'); + rerunTrigger.innerHTML = 'Rerun'; + rerunTrigger.href = setUrl({ + testId: testId + }); + testBlock.id = 'qunit-test-output-' + testId; + testBlock.appendChild(rerunTrigger); + } + var assertList = document.createElement('ol'); + assertList.className = 'qunit-assert-list'; + testBlock.appendChild(assertList); + tests.appendChild(testBlock); + return testBlock; + } + QUnit.on('runStart', function (runStart) { + stats.defined = runStart.testCounts.total; + }); + QUnit.begin(function (beginDetails) { + appendInterface(beginDetails); + }); + function getRerunFailedHtml(failedTests) { + if (failedTests.length === 0) { + return ''; + } + var href = setUrl({ + testId: failedTests + }); + return ["
      ", failedTests.length === 1 ? 'Rerun 1 failed test' : 'Rerun ' + failedTests.length + ' failed tests', ''].join(''); + } + QUnit.on('runEnd', function (runEnd) { + var banner = id('qunit-banner'); + var tests = id('qunit-tests'); + var abortButton = id('qunit-abort-tests-button'); + var assertPassed = config.stats.all - config.stats.bad; + var html = [runEnd.testCounts.total, ' tests completed in ', runEnd.runtime, ' milliseconds, with ', runEnd.testCounts.failed, ' failed, ', runEnd.testCounts.skipped, ' skipped, and ', runEnd.testCounts.todo, ' todo.
      ', "", assertPassed, " assertions of ", config.stats.all, " passed, ", config.stats.bad, ' failed.', getRerunFailedHtml(stats.failedTests)].join(''); + var test; + var assertLi; + var assertList; + if (abortButton && abortButton.disabled) { + html = 'Tests aborted after ' + runEnd.runtime + ' milliseconds.'; + for (var i = 0; i < tests.children.length; i++) { + test = tests.children[i]; + if (test.className === '' || test.className === 'running') { + test.className = 'aborted'; + assertList = test.getElementsByTagName('ol')[0]; + assertLi = document.createElement('li'); + assertLi.className = 'fail'; + assertLi.innerHTML = 'Test aborted.'; + assertList.appendChild(assertLi); + } + } + } + if (banner && (!abortButton || abortButton.disabled === false)) { + banner.className = runEnd.status === 'failed' ? 'qunit-fail' : 'qunit-pass'; + } + if (abortButton) { + abortButton.parentNode.removeChild(abortButton); + } + if (tests) { + id('qunit-testresult-display').innerHTML = html; + } + if (config.altertitle && document.title) { + document.title = [runEnd.status === 'failed' ? "\u2716" : "\u2714", document.title.replace(/^[\u2714\u2716] /i, '')].join(' '); + } + if (config.scrolltop && window$1.scrollTo) { + window$1.scrollTo(0, 0); + } + }); + function getNameHtml(name, module) { + var nameHtml = ''; + if (module) { + nameHtml = "" + escapeText(module) + ': '; + } + nameHtml += "" + escapeText(name) + ''; + return nameHtml; + } + function getProgressHtml(stats) { + return [stats.completed, ' / ', stats.defined, ' tests completed.
      '].join(''); + } + QUnit.testStart(function (details) { + var running, bad; + appendTest(details.name, details.testId, details.module); + running = id('qunit-testresult-display'); + if (running) { + addClass(running, 'running'); + bad = QUnit.config.reorder && details.previousFailure; + running.innerHTML = [getProgressHtml(stats), bad ? 'Rerunning previously failed test:
      ' : 'Running: ', getNameHtml(details.name, details.module), getRerunFailedHtml(stats.failedTests)].join(''); + } + }); + function stripHtml(string) { + return string.replace(/<\/?[^>]+(>|$)/g, '').replace(/"/g, '').replace(/\s+/g, ''); + } + QUnit.log(function (details) { + var testItem = id('qunit-test-output-' + details.testId); + if (!testItem) { + return; + } + var message = escapeText(details.message) || (details.result ? 'okay' : 'failed'); + message = "" + message + ''; + message += "@ " + details.runtime + ' ms'; + var expected; + var actual; + var diff; + var showDiff = false; + if (!details.result && hasOwn.call(details, 'expected')) { + if (details.negative) { + expected = 'NOT ' + QUnit.dump.parse(details.expected); + } + else { + expected = QUnit.dump.parse(details.expected); + } + actual = QUnit.dump.parse(details.actual); + message += "'; + if (actual !== expected) { + message += "'; + if (typeof details.actual === 'number' && typeof details.expected === 'number') { + if (!isNaN(details.actual) && !isNaN(details.expected)) { + showDiff = true; + diff = details.actual - details.expected; + diff = (diff > 0 ? '+' : '') + diff; + } + } + else if (typeof details.actual !== 'boolean' && typeof details.expected !== 'boolean') { + diff = QUnit.diff(expected, actual); + showDiff = stripHtml(diff).length !== stripHtml(expected).length + stripHtml(actual).length; + } + if (showDiff) { + message += "'; + } + } + else if (expected.indexOf('[object Array]') !== -1 || expected.indexOf('[object Object]') !== -1) { + message += "'; + } + else { + message += "'; + } + if (details.source) { + message += "'; + } + message += '
      Expected:
      " + escapeText(expected) + '
      Result:
      " + escapeText(actual) + '
      Diff:
      " + diff + '
      Message: " + 'Diff suppressed as the depth of object is more than current max depth (' + QUnit.config.maxDepth + ').

      Hint: Use QUnit.dump.maxDepth to ' + " run with a higher max depth or " + 'Rerun without max depth.

      Message: " + 'Diff suppressed as the expected and actual results have an equivalent' + ' serialization
      Source:
      " + escapeText(details.source) + '
      '; + } + else if (!details.result && details.source) { + message += '' + "' + '
      Source:
      " + escapeText(details.source) + '
      '; + } + var assertList = testItem.getElementsByTagName('ol')[0]; + var assertLi = document.createElement('li'); + assertLi.className = details.result ? 'pass' : 'fail'; + assertLi.innerHTML = message; + assertList.appendChild(assertLi); + }); + QUnit.testDone(function (details) { + var tests = id('qunit-tests'); + var testItem = id('qunit-test-output-' + details.testId); + if (!tests || !testItem) { + return; + } + removeClass(testItem, 'running'); + var status; + if (details.failed > 0) { + status = 'failed'; + } + else if (details.todo) { + status = 'todo'; + } + else { + status = details.skipped ? 'skipped' : 'passed'; + } + var assertList = testItem.getElementsByTagName('ol')[0]; + var good = details.passed; + var bad = details.failed; + var testPassed = details.failed > 0 ? details.todo : !details.todo; + if (testPassed) { + addClass(assertList, 'qunit-collapsed'); + } + else { + stats.failedTests.push(details.testId); + if (config.collapse) { + if (!collapseNext) { + collapseNext = true; + } + else { + addClass(assertList, 'qunit-collapsed'); + } + } + } + var testTitle = testItem.firstChild; + var testCounts = bad ? "" + bad + ', ' + "" + good + ', ' : ''; + testTitle.innerHTML += " (" + testCounts + details.assertions.length + ')'; + stats.completed++; + if (details.skipped) { + testItem.className = 'skipped'; + var skipped = document.createElement('em'); + skipped.className = 'qunit-skipped-label'; + skipped.innerHTML = 'skipped'; + testItem.insertBefore(skipped, testTitle); + } + else { + addEvent(testTitle, 'click', function () { + toggleClass(assertList, 'qunit-collapsed'); + }); + testItem.className = testPassed ? 'pass' : 'fail'; + if (details.todo) { + var todoLabel = document.createElement('em'); + todoLabel.className = 'qunit-todo-label'; + todoLabel.innerHTML = 'todo'; + testItem.className += ' todo'; + testItem.insertBefore(todoLabel, testTitle); + } + var time = document.createElement('span'); + time.className = 'runtime'; + time.innerHTML = details.runtime + ' ms'; + testItem.insertBefore(time, assertList); + } + if (details.source) { + var sourceName = document.createElement('p'); + sourceName.innerHTML = 'Source: ' + escapeText(details.source); + addClass(sourceName, 'qunit-source'); + if (testPassed) { + addClass(sourceName, 'qunit-collapsed'); + } + addEvent(testTitle, 'click', function () { + toggleClass(sourceName, 'qunit-collapsed'); + }); + testItem.appendChild(sourceName); + } + if (config.hidepassed && (status === 'passed' || details.skipped)) { + hiddenTests.push(testItem); + tests.removeChild(testItem); + } + }); + QUnit.on('error', function (error) { + var testItem = appendTest('global failure'); + if (!testItem) { + return; + } + var message = escapeText(errorString(error)); + message = "" + message + ''; + if (error && error.stack) { + message += '' + "' + '
      Source:
      " + escapeText(error.stack) + '
      '; + } + var assertList = testItem.getElementsByTagName('ol')[0]; + var assertLi = document.createElement('li'); + assertLi.className = 'fail'; + assertLi.innerHTML = message; + assertList.appendChild(assertLi); + testItem.className = 'fail'; + }); + var usingPhantom = function (p) { + return p && p.version && p.version.major > 0; + }(window$1.phantom); + if (usingPhantom) { + console$1.warn('Support for PhantomJS is deprecated and will be removed in QUnit 3.0.'); + } + if (!usingPhantom && document.readyState === 'complete') { + QUnit.load(); + } + else { + addEvent(window$1, 'load', QUnit.load); + } + var originalWindowOnError = window$1.onerror; + window$1.onerror = function (message, fileName, lineNumber, columnNumber, errorObj) { + var ret = false; + if (originalWindowOnError) { + for (var _len = arguments.length, args = new Array(_len > 5 ? _len - 5 : 0), _key = 5; _key < _len; _key++) { + args[_key - 5] = arguments[_key]; + } + ret = originalWindowOnError.call.apply(originalWindowOnError, [this, message, fileName, lineNumber, columnNumber, errorObj].concat(args)); + } + if (ret !== true) { + if (config.current && config.current.ignoreGlobalErrors) { + return true; + } + var error = errorObj || new Error(message); + if (!error.stack && fileName && lineNumber) { + error.stack = "".concat(fileName, ":").concat(lineNumber); + } + QUnit.onUncaughtException(error); + } + return ret; + }; + window$1.addEventListener('unhandledrejection', function (event) { + QUnit.onUncaughtException(event.reason); + }); + })(); + QUnit.diff = function () { + function DiffMatchPatch() { } + var DIFF_DELETE = -1; + var DIFF_INSERT = 1; + var DIFF_EQUAL = 0; + var hasOwn = Object.prototype.hasOwnProperty; + DiffMatchPatch.prototype.DiffMain = function (text1, text2, optChecklines) { + var deadline = Date.now() + 1000; + if (text1 === null || text2 === null) { + throw new Error('Cannot diff null input.'); + } + if (text1 === text2) { + if (text1) { + return [[DIFF_EQUAL, text1]]; + } + return []; + } + if (typeof optChecklines === 'undefined') { + optChecklines = true; + } + var commonlength = this.diffCommonPrefix(text1, text2); + var commonprefix = text1.substring(0, commonlength); + text1 = text1.substring(commonlength); + text2 = text2.substring(commonlength); + commonlength = this.diffCommonSuffix(text1, text2); + var commonsuffix = text1.substring(text1.length - commonlength); + text1 = text1.substring(0, text1.length - commonlength); + text2 = text2.substring(0, text2.length - commonlength); + var diffs = this.diffCompute(text1, text2, optChecklines, deadline); + if (commonprefix) { + diffs.unshift([DIFF_EQUAL, commonprefix]); + } + if (commonsuffix) { + diffs.push([DIFF_EQUAL, commonsuffix]); + } + this.diffCleanupMerge(diffs); + return diffs; + }; + DiffMatchPatch.prototype.diffCleanupEfficiency = function (diffs) { + var changes, equalities, equalitiesLength, lastequality, pointer, preIns, preDel, postIns, postDel; + changes = false; + equalities = []; + equalitiesLength = 0; + lastequality = null; + pointer = 0; + preIns = false; + preDel = false; + postIns = false; + postDel = false; + while (pointer < diffs.length) { + if (diffs[pointer][0] === DIFF_EQUAL) { + if (diffs[pointer][1].length < 4 && (postIns || postDel)) { + equalities[equalitiesLength++] = pointer; + preIns = postIns; + preDel = postDel; + lastequality = diffs[pointer][1]; + } + else { + equalitiesLength = 0; + lastequality = null; + } + postIns = postDel = false; + } + else { + if (diffs[pointer][0] === DIFF_DELETE) { + postDel = true; + } + else { + postIns = true; + } + if (lastequality && (preIns && preDel && postIns && postDel || lastequality.length < 2 && preIns + preDel + postIns + postDel === 3)) { + diffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastequality]); + diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT; + equalitiesLength--; + lastequality = null; + if (preIns && preDel) { + postIns = postDel = true; + equalitiesLength = 0; + } + else { + equalitiesLength--; + pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1; + postIns = postDel = false; + } + changes = true; + } + } + pointer++; + } + if (changes) { + this.diffCleanupMerge(diffs); + } + }; + DiffMatchPatch.prototype.diffPrettyHtml = function (diffs) { + var html = []; + for (var x = 0; x < diffs.length; x++) { + var op = diffs[x][0]; + var data = diffs[x][1]; + switch (op) { + case DIFF_INSERT: + html[x] = '' + escapeText(data) + ''; + break; + case DIFF_DELETE: + html[x] = '' + escapeText(data) + ''; + break; + case DIFF_EQUAL: + html[x] = '' + escapeText(data) + ''; + break; + } + } + return html.join(''); + }; + DiffMatchPatch.prototype.diffCommonPrefix = function (text1, text2) { + var pointermid, pointermax, pointermin, pointerstart; + if (!text1 || !text2 || text1.charAt(0) !== text2.charAt(0)) { + return 0; + } + pointermin = 0; + pointermax = Math.min(text1.length, text2.length); + pointermid = pointermax; + pointerstart = 0; + while (pointermin < pointermid) { + if (text1.substring(pointerstart, pointermid) === text2.substring(pointerstart, pointermid)) { + pointermin = pointermid; + pointerstart = pointermin; + } + else { + pointermax = pointermid; + } + pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); + } + return pointermid; + }; + DiffMatchPatch.prototype.diffCommonSuffix = function (text1, text2) { + var pointermid, pointermax, pointermin, pointerend; + if (!text1 || !text2 || text1.charAt(text1.length - 1) !== text2.charAt(text2.length - 1)) { + return 0; + } + pointermin = 0; + pointermax = Math.min(text1.length, text2.length); + pointermid = pointermax; + pointerend = 0; + while (pointermin < pointermid) { + if (text1.substring(text1.length - pointermid, text1.length - pointerend) === text2.substring(text2.length - pointermid, text2.length - pointerend)) { + pointermin = pointermid; + pointerend = pointermin; + } + else { + pointermax = pointermid; + } + pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); + } + return pointermid; + }; + DiffMatchPatch.prototype.diffCompute = function (text1, text2, checklines, deadline) { + var diffs, longtext, shorttext, i, hm, text1A, text2A, text1B, text2B, midCommon, diffsA, diffsB; + if (!text1) { + return [[DIFF_INSERT, text2]]; + } + if (!text2) { + return [[DIFF_DELETE, text1]]; + } + longtext = text1.length > text2.length ? text1 : text2; + shorttext = text1.length > text2.length ? text2 : text1; + i = longtext.indexOf(shorttext); + if (i !== -1) { + diffs = [[DIFF_INSERT, longtext.substring(0, i)], [DIFF_EQUAL, shorttext], [DIFF_INSERT, longtext.substring(i + shorttext.length)]]; + if (text1.length > text2.length) { + diffs[0][0] = diffs[2][0] = DIFF_DELETE; + } + return diffs; + } + if (shorttext.length === 1) { + return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]]; + } + hm = this.diffHalfMatch(text1, text2); + if (hm) { + text1A = hm[0]; + text1B = hm[1]; + text2A = hm[2]; + text2B = hm[3]; + midCommon = hm[4]; + diffsA = this.DiffMain(text1A, text2A, checklines, deadline); + diffsB = this.DiffMain(text1B, text2B, checklines, deadline); + return diffsA.concat([[DIFF_EQUAL, midCommon]], diffsB); + } + if (checklines && text1.length > 100 && text2.length > 100) { + return this.diffLineMode(text1, text2, deadline); + } + return this.diffBisect(text1, text2, deadline); + }; + DiffMatchPatch.prototype.diffHalfMatch = function (text1, text2) { + var longtext, shorttext, dmp, text1A, text2B, text2A, text1B, midCommon, hm1, hm2, hm; + longtext = text1.length > text2.length ? text1 : text2; + shorttext = text1.length > text2.length ? text2 : text1; + if (longtext.length < 4 || shorttext.length * 2 < longtext.length) { + return null; + } + dmp = this; + function diffHalfMatchI(longtext, shorttext, i) { + var seed, j, bestCommon, prefixLength, suffixLength, bestLongtextA, bestLongtextB, bestShorttextA, bestShorttextB; + seed = longtext.substring(i, i + Math.floor(longtext.length / 4)); + j = -1; + bestCommon = ''; + while ((j = shorttext.indexOf(seed, j + 1)) !== -1) { + prefixLength = dmp.diffCommonPrefix(longtext.substring(i), shorttext.substring(j)); + suffixLength = dmp.diffCommonSuffix(longtext.substring(0, i), shorttext.substring(0, j)); + if (bestCommon.length < suffixLength + prefixLength) { + bestCommon = shorttext.substring(j - suffixLength, j) + shorttext.substring(j, j + prefixLength); + bestLongtextA = longtext.substring(0, i - suffixLength); + bestLongtextB = longtext.substring(i + prefixLength); + bestShorttextA = shorttext.substring(0, j - suffixLength); + bestShorttextB = shorttext.substring(j + prefixLength); + } + } + if (bestCommon.length * 2 >= longtext.length) { + return [bestLongtextA, bestLongtextB, bestShorttextA, bestShorttextB, bestCommon]; + } + else { + return null; + } + } + hm1 = diffHalfMatchI(longtext, shorttext, Math.ceil(longtext.length / 4)); + hm2 = diffHalfMatchI(longtext, shorttext, Math.ceil(longtext.length / 2)); + if (!hm1 && !hm2) { + return null; + } + else if (!hm2) { + hm = hm1; + } + else if (!hm1) { + hm = hm2; + } + else { + hm = hm1[4].length > hm2[4].length ? hm1 : hm2; + } + if (text1.length > text2.length) { + text1A = hm[0]; + text1B = hm[1]; + text2A = hm[2]; + text2B = hm[3]; + } + else { + text2A = hm[0]; + text2B = hm[1]; + text1A = hm[2]; + text1B = hm[3]; + } + midCommon = hm[4]; + return [text1A, text1B, text2A, text2B, midCommon]; + }; + DiffMatchPatch.prototype.diffLineMode = function (text1, text2, deadline) { + var a, diffs, linearray, pointer, countInsert, countDelete, textInsert, textDelete, j; + a = this.diffLinesToChars(text1, text2); + text1 = a.chars1; + text2 = a.chars2; + linearray = a.lineArray; + diffs = this.DiffMain(text1, text2, false, deadline); + this.diffCharsToLines(diffs, linearray); + this.diffCleanupSemantic(diffs); + diffs.push([DIFF_EQUAL, '']); + pointer = 0; + countDelete = 0; + countInsert = 0; + textDelete = ''; + textInsert = ''; + while (pointer < diffs.length) { + switch (diffs[pointer][0]) { + case DIFF_INSERT: + countInsert++; + textInsert += diffs[pointer][1]; + break; + case DIFF_DELETE: + countDelete++; + textDelete += diffs[pointer][1]; + break; + case DIFF_EQUAL: + if (countDelete >= 1 && countInsert >= 1) { + diffs.splice(pointer - countDelete - countInsert, countDelete + countInsert); + pointer = pointer - countDelete - countInsert; + a = this.DiffMain(textDelete, textInsert, false, deadline); + for (j = a.length - 1; j >= 0; j--) { + diffs.splice(pointer, 0, a[j]); + } + pointer = pointer + a.length; + } + countInsert = 0; + countDelete = 0; + textDelete = ''; + textInsert = ''; + break; + } + pointer++; + } + diffs.pop(); + return diffs; + }; + DiffMatchPatch.prototype.diffBisect = function (text1, text2, deadline) { + var text1Length, text2Length, maxD, vOffset, vLength, v1, v2, x, delta, front, k1start, k1end, k2start, k2end, k2Offset, k1Offset, x1, x2, y1, y2, d, k1, k2; + text1Length = text1.length; + text2Length = text2.length; + maxD = Math.ceil((text1Length + text2Length) / 2); + vOffset = maxD; + vLength = 2 * maxD; + v1 = new Array(vLength); + v2 = new Array(vLength); + for (x = 0; x < vLength; x++) { + v1[x] = -1; + v2[x] = -1; + } + v1[vOffset + 1] = 0; + v2[vOffset + 1] = 0; + delta = text1Length - text2Length; + front = delta % 2 !== 0; + k1start = 0; + k1end = 0; + k2start = 0; + k2end = 0; + for (d = 0; d < maxD; d++) { + if (Date.now() > deadline) { + break; + } + for (k1 = -d + k1start; k1 <= d - k1end; k1 += 2) { + k1Offset = vOffset + k1; + if (k1 === -d || k1 !== d && v1[k1Offset - 1] < v1[k1Offset + 1]) { + x1 = v1[k1Offset + 1]; + } + else { + x1 = v1[k1Offset - 1] + 1; + } + y1 = x1 - k1; + while (x1 < text1Length && y1 < text2Length && text1.charAt(x1) === text2.charAt(y1)) { + x1++; + y1++; + } + v1[k1Offset] = x1; + if (x1 > text1Length) { + k1end += 2; + } + else if (y1 > text2Length) { + k1start += 2; + } + else if (front) { + k2Offset = vOffset + delta - k1; + if (k2Offset >= 0 && k2Offset < vLength && v2[k2Offset] !== -1) { + x2 = text1Length - v2[k2Offset]; + if (x1 >= x2) { + return this.diffBisectSplit(text1, text2, x1, y1, deadline); + } + } + } + } + for (k2 = -d + k2start; k2 <= d - k2end; k2 += 2) { + k2Offset = vOffset + k2; + if (k2 === -d || k2 !== d && v2[k2Offset - 1] < v2[k2Offset + 1]) { + x2 = v2[k2Offset + 1]; + } + else { + x2 = v2[k2Offset - 1] + 1; + } + y2 = x2 - k2; + while (x2 < text1Length && y2 < text2Length && text1.charAt(text1Length - x2 - 1) === text2.charAt(text2Length - y2 - 1)) { + x2++; + y2++; + } + v2[k2Offset] = x2; + if (x2 > text1Length) { + k2end += 2; + } + else if (y2 > text2Length) { + k2start += 2; + } + else if (!front) { + k1Offset = vOffset + delta - k2; + if (k1Offset >= 0 && k1Offset < vLength && v1[k1Offset] !== -1) { + x1 = v1[k1Offset]; + y1 = vOffset + x1 - k1Offset; + x2 = text1Length - x2; + if (x1 >= x2) { + return this.diffBisectSplit(text1, text2, x1, y1, deadline); + } + } + } + } + } + return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]]; + }; + DiffMatchPatch.prototype.diffBisectSplit = function (text1, text2, x, y, deadline) { + var text1a, text1b, text2a, text2b, diffs, diffsb; + text1a = text1.substring(0, x); + text2a = text2.substring(0, y); + text1b = text1.substring(x); + text2b = text2.substring(y); + diffs = this.DiffMain(text1a, text2a, false, deadline); + diffsb = this.DiffMain(text1b, text2b, false, deadline); + return diffs.concat(diffsb); + }; + DiffMatchPatch.prototype.diffCleanupSemantic = function (diffs) { + var changes = false; + var equalities = []; + var equalitiesLength = 0; + var lastequality = null; + var pointer = 0; + var lengthInsertions1 = 0; + var lengthDeletions1 = 0; + var lengthInsertions2 = 0; + var lengthDeletions2 = 0; + while (pointer < diffs.length) { + if (diffs[pointer][0] === DIFF_EQUAL) { + equalities[equalitiesLength++] = pointer; + lengthInsertions1 = lengthInsertions2; + lengthDeletions1 = lengthDeletions2; + lengthInsertions2 = 0; + lengthDeletions2 = 0; + lastequality = diffs[pointer][1]; + } + else { + if (diffs[pointer][0] === DIFF_INSERT) { + lengthInsertions2 += diffs[pointer][1].length; + } + else { + lengthDeletions2 += diffs[pointer][1].length; + } + if (lastequality && lastequality.length <= Math.max(lengthInsertions1, lengthDeletions1) && lastequality.length <= Math.max(lengthInsertions2, lengthDeletions2)) { + diffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastequality]); + diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT; + equalitiesLength--; + equalitiesLength--; + pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1; + lengthInsertions1 = 0; + lengthDeletions1 = 0; + lengthInsertions2 = 0; + lengthDeletions2 = 0; + lastequality = null; + changes = true; + } + } + pointer++; + } + if (changes) { + this.diffCleanupMerge(diffs); + } + var deletion, insertion, overlapLength1, overlapLength2; + pointer = 1; + while (pointer < diffs.length) { + if (diffs[pointer - 1][0] === DIFF_DELETE && diffs[pointer][0] === DIFF_INSERT) { + deletion = diffs[pointer - 1][1]; + insertion = diffs[pointer][1]; + overlapLength1 = this.diffCommonOverlap(deletion, insertion); + overlapLength2 = this.diffCommonOverlap(insertion, deletion); + if (overlapLength1 >= overlapLength2) { + if (overlapLength1 >= deletion.length / 2 || overlapLength1 >= insertion.length / 2) { + diffs.splice(pointer, 0, [DIFF_EQUAL, insertion.substring(0, overlapLength1)]); + diffs[pointer - 1][1] = deletion.substring(0, deletion.length - overlapLength1); + diffs[pointer + 1][1] = insertion.substring(overlapLength1); + pointer++; + } + } + else { + if (overlapLength2 >= deletion.length / 2 || overlapLength2 >= insertion.length / 2) { + diffs.splice(pointer, 0, [DIFF_EQUAL, deletion.substring(0, overlapLength2)]); + diffs[pointer - 1][0] = DIFF_INSERT; + diffs[pointer - 1][1] = insertion.substring(0, insertion.length - overlapLength2); + diffs[pointer + 1][0] = DIFF_DELETE; + diffs[pointer + 1][1] = deletion.substring(overlapLength2); + pointer++; + } + } + pointer++; + } + pointer++; + } + }; + DiffMatchPatch.prototype.diffCommonOverlap = function (text1, text2) { + var text1Length = text1.length; + var text2Length = text2.length; + if (text1Length === 0 || text2Length === 0) { + return 0; + } + if (text1Length > text2Length) { + text1 = text1.substring(text1Length - text2Length); + } + else if (text1Length < text2Length) { + text2 = text2.substring(0, text1Length); + } + var textLength = Math.min(text1Length, text2Length); + if (text1 === text2) { + return textLength; + } + var best = 0; + var length = 1; + while (true) { + var pattern = text1.substring(textLength - length); + var found = text2.indexOf(pattern); + if (found === -1) { + return best; + } + length += found; + if (found === 0 || text1.substring(textLength - length) === text2.substring(0, length)) { + best = length; + length++; + } + } + }; + DiffMatchPatch.prototype.diffLinesToChars = function (text1, text2) { + var lineArray = []; + var lineHash = {}; + lineArray[0] = ''; + function diffLinesToCharsMunge(text) { + var chars = ''; + var lineStart = 0; + var lineEnd = -1; + var lineArrayLength = lineArray.length; + while (lineEnd < text.length - 1) { + lineEnd = text.indexOf('\n', lineStart); + if (lineEnd === -1) { + lineEnd = text.length - 1; + } + var line = text.substring(lineStart, lineEnd + 1); + lineStart = lineEnd + 1; + if (hasOwn.call(lineHash, line)) { + chars += String.fromCharCode(lineHash[line]); + } + else { + chars += String.fromCharCode(lineArrayLength); + lineHash[line] = lineArrayLength; + lineArray[lineArrayLength++] = line; + } + } + return chars; + } + var chars1 = diffLinesToCharsMunge(text1); + var chars2 = diffLinesToCharsMunge(text2); + return { + chars1: chars1, + chars2: chars2, + lineArray: lineArray + }; + }; + DiffMatchPatch.prototype.diffCharsToLines = function (diffs, lineArray) { + for (var x = 0; x < diffs.length; x++) { + var chars = diffs[x][1]; + var text = []; + for (var y = 0; y < chars.length; y++) { + text[y] = lineArray[chars.charCodeAt(y)]; + } + diffs[x][1] = text.join(''); + } + }; + DiffMatchPatch.prototype.diffCleanupMerge = function (diffs) { + diffs.push([DIFF_EQUAL, '']); + var pointer = 0; + var countDelete = 0; + var countInsert = 0; + var textDelete = ''; + var textInsert = ''; + while (pointer < diffs.length) { + switch (diffs[pointer][0]) { + case DIFF_INSERT: + countInsert++; + textInsert += diffs[pointer][1]; + pointer++; + break; + case DIFF_DELETE: + countDelete++; + textDelete += diffs[pointer][1]; + pointer++; + break; + case DIFF_EQUAL: + if (countDelete + countInsert > 1) { + if (countDelete !== 0 && countInsert !== 0) { + var commonlength = this.diffCommonPrefix(textInsert, textDelete); + if (commonlength !== 0) { + if (pointer - countDelete - countInsert > 0 && diffs[pointer - countDelete - countInsert - 1][0] === DIFF_EQUAL) { + diffs[pointer - countDelete - countInsert - 1][1] += textInsert.substring(0, commonlength); + } + else { + diffs.splice(0, 0, [DIFF_EQUAL, textInsert.substring(0, commonlength)]); + pointer++; + } + textInsert = textInsert.substring(commonlength); + textDelete = textDelete.substring(commonlength); + } + commonlength = this.diffCommonSuffix(textInsert, textDelete); + if (commonlength !== 0) { + diffs[pointer][1] = textInsert.substring(textInsert.length - commonlength) + diffs[pointer][1]; + textInsert = textInsert.substring(0, textInsert.length - commonlength); + textDelete = textDelete.substring(0, textDelete.length - commonlength); + } + } + if (countDelete === 0) { + diffs.splice(pointer - countInsert, countDelete + countInsert, [DIFF_INSERT, textInsert]); + } + else if (countInsert === 0) { + diffs.splice(pointer - countDelete, countDelete + countInsert, [DIFF_DELETE, textDelete]); + } + else { + diffs.splice(pointer - countDelete - countInsert, countDelete + countInsert, [DIFF_DELETE, textDelete], [DIFF_INSERT, textInsert]); + } + pointer = pointer - countDelete - countInsert + (countDelete ? 1 : 0) + (countInsert ? 1 : 0) + 1; + } + else if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) { + diffs[pointer - 1][1] += diffs[pointer][1]; + diffs.splice(pointer, 1); + } + else { + pointer++; + } + countInsert = 0; + countDelete = 0; + textDelete = ''; + textInsert = ''; + break; + } + } + if (diffs[diffs.length - 1][1] === '') { + diffs.pop(); + } + var changes = false; + pointer = 1; + while (pointer < diffs.length - 1) { + if (diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL) { + var diffPointer = diffs[pointer][1]; + var position = diffPointer.substring(diffPointer.length - diffs[pointer - 1][1].length); + if (position === diffs[pointer - 1][1]) { + diffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length); + diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1]; + diffs.splice(pointer - 1, 1); + changes = true; + } + else if (diffPointer.substring(0, diffs[pointer + 1][1].length) === diffs[pointer + 1][1]) { + diffs[pointer - 1][1] += diffs[pointer + 1][1]; + diffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1]; + diffs.splice(pointer + 1, 1); + changes = true; + } + } + pointer++; + } + if (changes) { + this.diffCleanupMerge(diffs); + } + }; + return function (o, n) { + var diff, output, text; + diff = new DiffMatchPatch(); + output = diff.DiffMain(o, n); + diff.diffCleanupEfficiency(output); + text = diff.diffPrettyHtml(output); + return text; + }; + }(); +})(); diff --git a/build/esm/tests/registry_tests.js b/build/esm/tests/registry_tests.js new file mode 100644 index 0000000000..2901cc30b0 --- /dev/null +++ b/build/esm/tests/registry_tests.js @@ -0,0 +1,64 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { EasyScore, Factory, Registry, StaveNote } from '../src/index.js'; +const RegistryTests = { + Start() { + QUnit.module('Registry'); + QUnit.test('Register and Clear', registerAndClear); + QUnit.test('Default Registry', defaultRegistry); + QUnit.test('Multiple Classes', classes); + }, +}; +function registerAndClear(assert) { + const registry = new Registry(); + const score = new EasyScore({ factory: Factory.newFromElementId(null) }); + registry.register(score.notes('C4')[0], 'foobar'); + const foobar = registry.getElementById('foobar'); + assert.ok(foobar); + assert.equal(foobar.getAttribute('id'), 'foobar'); + registry.clear(); + assert.notOk(registry.getElementById('foobar')); + assert.throws(() => registry.register(score.notes('C4'))); + registry.clear(); + assert.ok(registry.register(score.notes('C4[id="boobar"]')[0]).getElementById('boobar')); +} +function defaultRegistry(assert) { + const registry = new Registry(); + const score = new EasyScore({ factory: Factory.newFromElementId(null) }); + Registry.enableDefaultRegistry(registry); + score.notes('C4[id="foobar"]'); + const note = registry.getElementById('foobar'); + assert.ok(note); + note.setAttribute('id', 'boobar'); + assert.ok(registry.getElementById('boobar')); + assert.notOk(registry.getElementById('foobar')); + registry.clear(); + assert.equal(registry.getElementsByType(StaveNote.CATEGORY).length, 0); + score.notes('C5'); + const elements = registry.getElementsByType(StaveNote.CATEGORY); + assert.equal(elements.length, 1); +} +function classes(assert) { + const registry = new Registry(); + const score = new EasyScore({ factory: Factory.newFromElementId(null) }); + Registry.enableDefaultRegistry(registry); + score.notes('C4[id="foobar"]'); + const note = registry.getElementById('foobar'); + note.addClass('foo'); + assert.ok(note.hasClass('foo')); + assert.notOk(note.hasClass('boo')); + assert.equal(registry.getElementsByClass('foo').length, 1); + assert.equal(registry.getElementsByClass('boo').length, 0); + note.addClass('boo'); + assert.ok(note.hasClass('foo')); + assert.ok(note.hasClass('boo')); + assert.equal(registry.getElementsByClass('foo').length, 1); + assert.equal(registry.getElementsByClass('boo').length, 1); + note.removeClass('boo'); + note.removeClass('foo'); + assert.notOk(note.hasClass('foo')); + assert.notOk(note.hasClass('boo')); + assert.equal(registry.getElementsByClass('foo').length, 0); + assert.equal(registry.getElementsByClass('boo').length, 0); +} +VexFlowTests.register(RegistryTests); +export { RegistryTests }; diff --git a/build/esm/tests/renderer_tests.js b/build/esm/tests/renderer_tests.js new file mode 100644 index 0000000000..fecc2d444c --- /dev/null +++ b/build/esm/tests/renderer_tests.js @@ -0,0 +1,113 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { CanvasContext, Factory, Formatter, isHTMLCanvas, Renderer, RuntimeError, Stave, StaveNote, SVGContext, } from '../src/index.js'; +const STAVE_WIDTH = 700; +const STAVE_HEIGHT = 100; +const STAVE_RIGHT_MARGIN = 10; +const USE_RENDERER = { useRendererAPI: true }; +const USE_FACTORY = { useRendererAPI: false }; +const RendererTests = { + Start() { + QUnit.module('Renderer'); + const run = VexFlowTests.runTests; + run('Random', random); + run('Renderer API with element ID string', stringElementId, USE_RENDERER); + run('Renderer API with canvas or div', canvasOrDivElement, USE_RENDERER); + run('Renderer API with context', passRenderContext); + run('Factory API with element ID string', stringElementId, USE_FACTORY); + run('Factory API with canvas or div', canvasOrDivElement, USE_FACTORY); + }, +}; +function drawStave(stave, context) { + stave.addClef('bass').addTimeSignature('3/4').draw(); + Formatter.FormatAndDraw(context, stave, [ + new StaveNote({ keys: ['C/4'], duration: '4' }), + new StaveNote({ keys: ['E/4'], duration: '4' }), + new StaveNote({ keys: ['G/4'], duration: '4' }), + ]); +} +function random(options) { + const useElementIDString = Math.random() > 0.5; + const useRendererAPI = Math.random() > 0.5; + options.params = { useRendererAPI }; + if (useElementIDString) { + stringElementId(options); + } + else { + canvasOrDivElement(options); + } + const element = document.getElementById(options.elementId); + const colorForElementType = useElementIDString ? '#CCCCCC' : '#0074d9'; + const lineStyleForWhichAPI = useRendererAPI ? 'solid' : 'dashed'; + const borderStyle = `3px ${lineStyleForWhichAPI} ${colorForElementType}`; + let elementType; + if (options.backend === Renderer.Backends.CANVAS) { + element.style.border = borderStyle; + elementType = '<canvas> element object'; + } + else { + element.children[0].style.border = borderStyle; + elementType = '<svg> element object'; + } + if (useElementIDString) { + elementType = 'elementID string'; + } + const whichAPI = useRendererAPI ? 'Renderer API' : 'Factory API'; + element.parentElement.insertAdjacentHTML('beforeend', `
      ` + + `${whichAPI}` + + ` with ` + + `${elementType}` + + `

      `); +} +function useRendererAPI(e, backend) { + const renderer = new Renderer(e, backend); + renderer.resize(STAVE_WIDTH, STAVE_HEIGHT); + const context = renderer.getContext(); + drawStave(new Stave(0, 0, STAVE_WIDTH - STAVE_RIGHT_MARGIN).setContext(context), context); +} +function useFactoryAPI(e, backend) { + const opts = { + renderer: { elementId: e, width: STAVE_WIDTH, height: STAVE_HEIGHT, backend }, + }; + const factory = new Factory(opts); + drawStave(factory.Stave(), factory.getContext()); +} +function stringElementId(options) { + const elementId = options.elementId; + if (options.params.useRendererAPI) { + useRendererAPI(elementId, options.backend); + } + else { + useFactoryAPI(elementId, options.backend); + } + options.assert.ok(true); +} +function canvasOrDivElement(options) { + const element = document.getElementById(options.elementId); + if (options.params.useRendererAPI) { + useRendererAPI(element, options.backend); + } + else { + useFactoryAPI(element, options.backend); + } + options.assert.ok(true); +} +function passRenderContext(options) { + let context; + const element = document.getElementById(options.elementId); + if (isHTMLCanvas(element)) { + const ctx = element.getContext('2d'); + if (!ctx) { + throw new RuntimeError(`Couldn't get context from element "${options.elementId}"`); + } + context = new CanvasContext(ctx); + } + else { + context = new SVGContext(element); + } + const renderer = new Renderer(context); + renderer.resize(STAVE_WIDTH, STAVE_HEIGHT); + drawStave(new Stave(0, 0, STAVE_WIDTH - STAVE_RIGHT_MARGIN).setContext(context), context); + options.assert.ok(true); +} +VexFlowTests.register(RendererTests); +export { RendererTests }; diff --git a/build/esm/tests/rests_tests.js b/build/esm/tests/rests_tests.js new file mode 100644 index 0000000000..ba4cd1c16c --- /dev/null +++ b/build/esm/tests/rests_tests.js @@ -0,0 +1,260 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Beam } from '../src/beam.js'; +import { Dot } from '../src/dot.js'; +import { Flow } from '../src/flow.js'; +import { Formatter } from '../src/formatter.js'; +import { Stave } from '../src/stave.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Tuplet } from '../src/tuplet.js'; +import { Voice } from '../src/voice.js'; +const RestsTests = { + Start() { + QUnit.module('Rests'); + const run = VexFlowTests.runTests; + run('Outside Stave', ledgerRest); + run('Dotted', basic); + run('Auto Align - Beamed Notes Stems Up', beamsUp); + run('Auto Align - Beamed Notes Stems Down', beamsDown); + run('Auto Align - Tuplets Stems Up', tupletsUp); + run('Auto Align - Tuplets Stems Down', tupletsDown); + run('Auto Align - Single Voice (Default)', singleVoiceDefaultAlignment); + run('Auto Align - Single Voice (Align All)', singleVoiceAlignAll); + run('Auto Align - Multi Voice', multiVoice); + }, +}; +function setupContext(options, contextBuilder, width = 350, height = 150) { + const context = contextBuilder(options.elementId, width, height); + context.scale(0.9, 0.9); + context.font = '10pt Arial'; + const stave = new Stave(10, 30, width).addClef('treble').addTimeSignature('4/4').setContext(context).draw(); + return { context, stave }; +} +function basic(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 700); + const notes = [ + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'wr' }), + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'hr' }), + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '16r' }), + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '32r' }), + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '64r' }), + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '128r' }), + ]; + Dot.buildAndAttach(notes, { all: true }); + Formatter.FormatAndDraw(context, stave, notes); + options.assert.ok(true, 'Dotted Rest Test'); +} +function ledgerRest(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 700); + const notes = [ + new StaveNote({ keys: ['a/5'], stem_direction: 1, duration: 'wr' }), + new StaveNote({ keys: ['c/6'], stem_direction: 1, duration: 'hr' }), + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'hr' }), + new StaveNote({ keys: ['a/3'], stem_direction: 1, duration: 'wr' }), + new StaveNote({ keys: ['f/3'], stem_direction: 1, duration: 'hr' }), + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'wr' }), + ]; + Formatter.FormatAndDraw(context, stave, notes); + options.assert.ok(true, 'Leger/Ledger Rest Test'); +} +const note = (noteStruct) => new StaveNote(noteStruct); +function beamsUp(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['e/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + note({ keys: ['b/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['c/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + note({ keys: ['c/4'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + note({ keys: ['c/4'], stem_direction: 1, duration: '8' }), + ]; + const beam1 = new Beam(notes.slice(0, 4)); + const beam2 = new Beam(notes.slice(4, 8)); + const beam3 = new Beam(notes.slice(8, 12)); + Formatter.FormatAndDraw(context, stave, notes); + beam1.setContext(context).draw(); + beam2.setContext(context).draw(); + beam3.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Beams Up Test'); +} +function beamsDown(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['c/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['e/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['e/4'], stem_direction: -1, duration: '8' }), + ]; + const beam1 = new Beam(notes.slice(0, 4)); + const beam2 = new Beam(notes.slice(4, 8)); + const beam3 = new Beam(notes.slice(8, 12)); + Formatter.FormatAndDraw(context, stave, notes); + beam1.setContext(context).draw(); + beam2.setContext(context).draw(); + beam3.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Beams Down Test'); +} +function tupletsUp(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['b/4'], stem_direction: 1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4r' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4r' }), + note({ keys: ['g/5'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['g/5'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + ]; + const tuplet1 = new Tuplet(notes.slice(0, 3)).setTupletLocation(Tuplet.LOCATION_TOP); + const tuplet2 = new Tuplet(notes.slice(3, 6)).setTupletLocation(Tuplet.LOCATION_TOP); + const tuplet3 = new Tuplet(notes.slice(6, 9)).setTupletLocation(Tuplet.LOCATION_TOP); + const tuplet4 = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_TOP); + Formatter.FormatAndDraw(context, stave, notes); + tuplet1.setContext(context).draw(); + tuplet2.setContext(context).draw(); + tuplet3.setContext(context).draw(); + tuplet4.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Tuplets Stem Up Test'); +} +function tupletsDown(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['a/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + ]; + const beam1 = new Beam(notes.slice(0, 3)); + const beam2 = new Beam(notes.slice(3, 6)); + const beam3 = new Beam(notes.slice(6, 9)); + const beam4 = new Beam(notes.slice(9, 12)); + const tuplet1 = new Tuplet(notes.slice(0, 3)).setTupletLocation(Tuplet.LOCATION_BOTTOM); + const tuplet2 = new Tuplet(notes.slice(3, 6)).setTupletLocation(Tuplet.LOCATION_BOTTOM); + const tuplet3 = new Tuplet(notes.slice(6, 9)).setTupletLocation(Tuplet.LOCATION_BOTTOM); + const tuplet4 = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_BOTTOM); + Formatter.FormatAndDraw(context, stave, notes); + tuplet1.setContext(context).draw(); + tuplet2.setContext(context).draw(); + tuplet3.setContext(context).draw(); + tuplet4.setContext(context).draw(); + beam1.setContext(context).draw(); + beam2.setContext(context).draw(); + beam3.setContext(context).draw(); + beam4.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Tuplets Stem Down Test'); +} +function singleVoiceDefaultAlignment(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['f/4'], stem_direction: -1, duration: '4' }), + note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['d/5'], stem_direction: -1, duration: '4' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + ]; + const beam = new Beam(notes.slice(5, 9)); + const tuplet = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_TOP); + Formatter.FormatAndDraw(context, stave, notes); + tuplet.setContext(context).draw(); + beam.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Default Test'); +} +function singleVoiceAlignAll(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['f/4'], stem_direction: -1, duration: '4' }), + note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['d/5'], stem_direction: -1, duration: '4' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + ]; + const beam = new Beam(notes.slice(5, 9)); + const tuplet = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_TOP); + Formatter.FormatAndDraw(context, stave, notes, { align_rests: true }); + tuplet.setContext(context).draw(); + beam.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Align All Test'); +} +function multiVoice(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + const stave = new Stave(50, 10, 500).addClef('treble').setContext(ctx).addTimeSignature('4/4').draw(); + const noteOnStave = (noteStruct) => new StaveNote(noteStruct).setStave(stave); + const notes1 = [ + noteOnStave({ keys: ['c/4', 'e/4', 'g/4'], duration: '4' }), + noteOnStave({ keys: ['b/4'], duration: '4r' }), + noteOnStave({ keys: ['c/4', 'd/4', 'a/4'], duration: '4' }), + noteOnStave({ keys: ['b/4'], duration: '4r' }), + ]; + const notes2 = [ + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + ]; + const voice1 = new Voice(Flow.TIME4_4).addTickables(notes1); + const voice2 = new Voice(Flow.TIME4_4).addTickables(notes2); + new Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave, { align_rests: true }); + const beam2_1 = new Beam(notes2.slice(0, 4)); + const beam2_2 = new Beam(notes2.slice(4, 8)); + voice2.draw(ctx); + voice1.draw(ctx); + beam2_1.setContext(ctx).draw(); + beam2_2.setContext(ctx).draw(); + options.assert.ok(true, 'Strokes Test Multi Voice'); +} +VexFlowTests.register(RestsTests); +export { RestsTests }; diff --git a/build/esm/tests/rhythm_tests.js b/build/esm/tests/rhythm_tests.js new file mode 100644 index 0000000000..5330f5f3e4 --- /dev/null +++ b/build/esm/tests/rhythm_tests.js @@ -0,0 +1,357 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Annotation } from '../src/annotation.js'; +import { Beam } from '../src/beam.js'; +import { Formatter } from '../src/formatter.js'; +import { Stave } from '../src/stave.js'; +import { BarlineType } from '../src/stavebarline.js'; +import { StaveNote } from '../src/stavenote.js'; +const RhythmTests = { + Start() { + QUnit.module('Rhythm'); + const run = VexFlowTests.runTests; + run('Rhythm Draw - slash notes', drawBasic); + run('Rhythm Draw - beamed slash notes', drawBeamedSlashNotes); + run('Rhythm Draw - beamed slash notes, some rests', drawSlashAndBeamAndRests); + run('Rhythm Draw - 16th note rhythm with scratches', drawSixtenthWithScratches); + run('Rhythm Draw - 32nd note rhythm with scratches', drawThirtySecondWithScratches); + }, +}; +function drawBasic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + const staveBar1 = new Stave(10, 30, 150); + staveBar1.setBegBarType(BarlineType.DOUBLE); + staveBar1.setEndBarType(BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('C'); + staveBar1.setContext(ctx).draw(); + const notesBar1 = [new StaveNote({ keys: ['b/4'], duration: '1s', stem_direction: -1 })]; + Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); + const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 120); + staveBar2.setBegBarType(BarlineType.SINGLE); + staveBar2.setEndBarType(BarlineType.SINGLE); + staveBar2.setContext(ctx).draw(); + const notesBar2 = [ + new StaveNote({ keys: ['b/4'], duration: '2s', stem_direction: -1 }), + new StaveNote({ keys: ['b/4'], duration: '2s', stem_direction: -1 }), + ]; + Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); + const staveBar3 = new Stave(staveBar2.getWidth() + staveBar2.getX(), staveBar2.getY(), 170); + staveBar3.setContext(ctx).draw(); + const notesBar3 = [ + new StaveNote({ + keys: ['b/4'], + duration: '4s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '4s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '4s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '4s', + stem_direction: -1, + }), + ]; + Formatter.FormatAndDraw(ctx, staveBar3, notesBar3); + const staveBar4 = new Stave(staveBar3.getWidth() + staveBar3.getX(), staveBar3.getY(), 200); + staveBar4.setContext(ctx).draw(); + const notesBar4 = [ + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + ]; + Formatter.FormatAndDraw(ctx, staveBar4, notesBar4); + options.assert.expect(0); +} +function drawBeamedSlashNotes(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + const staveBar1 = new Stave(10, 30, 300); + staveBar1.setBegBarType(BarlineType.DOUBLE); + staveBar1.setEndBarType(BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('C'); + staveBar1.setContext(ctx).draw(); + const notesBar1_part1 = [ + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + ]; + const notesBar1_part2 = [ + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + ]; + const beam1 = new Beam(notesBar1_part1); + const beam2 = new Beam(notesBar1_part2); + const notesBar1 = notesBar1_part1.concat(notesBar1_part2); + Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + options.assert.expect(0); +} +function drawSlashAndBeamAndRests(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + const staveBar1 = new Stave(10, 30, 300); + staveBar1.setBegBarType(BarlineType.DOUBLE); + staveBar1.setEndBarType(BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('F'); + staveBar1.setContext(ctx).draw(); + const notesBar1_part1 = [ + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ keys: ['b/4'], duration: '8s', stem_direction: -1 }), + ]; + notesBar1_part1[0].addModifier(new Annotation('C7').setFont('Times', VexFlowTests.Font.size + 2), 0); + const notesBar1_part2 = [ + new StaveNote({ + keys: ['b/4'], + duration: '8r', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8r', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8r', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + ]; + const beam1 = new Beam(notesBar1_part1); + Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1.concat(notesBar1_part2)); + beam1.setContext(ctx).draw(); + const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 220); + staveBar2.setContext(ctx).draw(); + const notesBar2 = [ + new StaveNote({ + keys: ['b/4'], + duration: '1s', + stem_direction: -1, + }), + ]; + notesBar2[0].addModifier(new Annotation('F').setFont('Times', VexFlowTests.Font.size + 2), 0); + Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); + options.assert.expect(0); +} +function drawSixtenthWithScratches(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + const staveBar1 = new Stave(10, 30, 300); + staveBar1.setBegBarType(BarlineType.DOUBLE); + staveBar1.setEndBarType(BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('F'); + staveBar1.setContext(ctx).draw(); + const notesBar1_part1 = [ + new StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '16m', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + ]; + const notesBar1_part2 = [ + new StaveNote({ + keys: ['b/4'], + duration: '16m', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '16r', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + ]; + notesBar1_part1[0].addModifier(new Annotation('C7').setFont('Times', VexFlowTests.Font.size + 3), 0); + const beam1 = new Beam(notesBar1_part1); + const beam2 = new Beam(notesBar1_part2); + Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1.concat(notesBar1_part2)); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + options.assert.expect(0); +} +function drawThirtySecondWithScratches(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + const staveBar1 = new Stave(10, 30, 300); + staveBar1.setBegBarType(BarlineType.DOUBLE); + staveBar1.setEndBarType(BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('F'); + staveBar1.setContext(ctx).draw(); + const notesBar1_part1 = [ + new StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '32m', + stem_direction: 1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '32m', + stem_direction: 1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '32r', + stem_direction: 1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + ]; + notesBar1_part1[0].addModifier(new Annotation('C7').setFont('Times', VexFlowTests.Font.size + 3), 0); + const beam1 = new Beam(notesBar1_part1); + Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1); + beam1.setContext(ctx).draw(); + options.assert.expect(0); +} +VexFlowTests.register(RhythmTests); +export { RhythmTests }; diff --git a/build/esm/tests/stave_tests.js b/build/esm/tests/stave_tests.js new file mode 100644 index 0000000000..7c731a91db --- /dev/null +++ b/build/esm/tests/stave_tests.js @@ -0,0 +1,560 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Accidental } from '../src/accidental.js'; +import { Beam } from '../src/beam.js'; +import { Clef } from '../src/clef.js'; +import { Formatter } from '../src/formatter.js'; +import { KeySignature } from '../src/keysignature.js'; +import { Modifier } from '../src/modifier.js'; +import { Stave } from '../src/stave.js'; +import { Barline, BarlineType } from '../src/stavebarline.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Repetition } from '../src/staverepetition.js'; +import { VoltaType } from '../src/stavevolta.js'; +import { TextJustification } from '../src/textnote.js'; +import { TimeSignature } from '../src/timesignature.js'; +const StaveTests = { + Start() { + QUnit.module('Stave'); + QUnit.test('StaveModifiers SortByCategory', sortByCategory); + const run = VexFlowTests.runTests; + run('Stave Draw Test', draw); + run('Open Stave Draw Test', drawOpenStave); + run('Multiple Stave Barline Test', drawMultipleMeasures); + run('Multiple Stave Barline Test (14pt Section)', drawMultipleMeasures, { fontSize: 14 }); + run('Multiple Stave Repeats Test', drawRepeats); + run('Stave End Modifiers Test', drawEndModifiers); + run('Stave Repetition (CODA) Positioning', drawStaveRepetition, { yShift: 0 }); + run('Stave Repetition (CODA) Positioning (-20)', drawStaveRepetition, { yShift: -20 }); + run('Stave Repetition (CODA) Positioning (+10)', drawStaveRepetition, { yShift: +10 }); + run('Multiple Staves Volta Test', drawVolta); + run('Volta + Modifier Measure Test', drawVoltaModifier); + run('Tempo Test', drawTempo); + run('Single Line Configuration Test', configureSingleLine); + run('Batch Line Configuration Test', configureAllLines); + run('Stave Text Test', drawStaveText); + run('Multiple Line Stave Text Test', drawStaveTextMultiLine); + run('Factory API', factoryAPI); + }, +}; +function sortByCategory(assert) { + const stave = new Stave(0, 0, 300); + const clef0 = new Clef('treble'); + const clef1 = new Clef('alto'); + const clef2 = new Clef('bass'); + const time0 = new TimeSignature('C'); + const time1 = new TimeSignature('C|'); + const time2 = new TimeSignature('9/8'); + const key0 = new KeySignature('G'); + const key1 = new KeySignature('F'); + const key2 = new KeySignature('D'); + const bar0 = new Barline(BarlineType.SINGLE); + const bar1 = new Barline(BarlineType.DOUBLE); + const bar2 = new Barline(BarlineType.NONE); + const order0 = { Barline: 0, Clef: 1, KeySignature: 2, TimeSignature: 3 }; + const order1 = { TimeSignature: 0, KeySignature: 1, Barline: 2, Clef: 3 }; + const sortAndCompare = (title, a, b, order) => { + stave.sortByCategory(a, order); + let isSame = true; + if (a.length !== b.length) + isSame = false; + for (let i = 0; i < a.length; ++i) { + if (a[i] !== b[i]) + isSame = false; + } + assert.ok(isSame, title); + }; + sortAndCompare('Keep the original order 1', [bar0, bar1, clef0, clef1, key0, key1, time0, time1], [bar0, bar1, clef0, clef1, key0, key1, time0, time1], order0); + sortAndCompare('Keep the original order 2', [time0, time1, key0, key1, bar0, bar1, clef0, clef1], [time0, time1, key0, key1, bar0, bar1, clef0, clef1], order1); + sortAndCompare('Sort and keep 1', [bar0, bar1, clef0, clef1, key0, key1, time0, time1], [time0, time1, key0, key1, bar0, bar1, clef0, clef1], order1); + sortAndCompare('Sort and keep 2', [bar0, clef0, key0, time0, key1, time1, clef1, bar1, time2, clef2, bar2, key2], [bar0, bar1, bar2, clef0, clef1, clef2, key0, key1, key2, time0, time1, time2], order0); + sortAndCompare('Sort and keep 3', [bar2, clef2, key2, time0, key0, time2, clef1, bar1, time1, clef0, bar0, key1], [time0, time2, time1, key2, key0, key1, bar2, bar1, bar0, clef2, clef1, clef0], order1); +} +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 150); + const stave = new Stave(10, 10, 300); + stave.setContext(ctx); + stave.draw(); + options.assert.equal(stave.getYForNote(0), 100, 'getYForNote(0)'); + options.assert.equal(stave.getYForLine(5), 100, 'getYForLine(5)'); + options.assert.equal(stave.getYForLine(0), 50, 'getYForLine(0) - Top Line'); + options.assert.equal(stave.getYForLine(4), 90, 'getYForLine(4) - Bottom Line'); + options.assert.ok(true, 'all pass'); +} +function drawOpenStave(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 350); + let stave = new Stave(10, 10, 300, { left_bar: false }); + stave.setContext(ctx); + stave.draw(); + stave = new Stave(10, 150, 300, { right_bar: false }); + stave.setContext(ctx); + stave.draw(); + options.assert.ok(true, 'all pass'); +} +function drawMultipleMeasures(options, contextBuilder) { + var _a, _b; + options.assert.expect(0); + const ctx = contextBuilder(options.elementId, 550, 200); + const staveBar1 = new Stave(10, 50, 200); + staveBar1.setBegBarType(BarlineType.REPEAT_BEGIN); + staveBar1.setEndBarType(BarlineType.DOUBLE); + staveBar1.setSection('A', 0, 0, (_a = options.params) === null || _a === void 0 ? void 0 : _a.fontSize, false); + staveBar1.addClef('treble').setContext(ctx).draw(); + const notesBar1 = [ + new StaveNote({ keys: ['c/4'], duration: 'q' }), + new StaveNote({ keys: ['d/4'], duration: 'q' }), + new StaveNote({ keys: ['b/4'], duration: 'qr' }), + new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); + const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 300); + staveBar2.setSection('B', 0, 0, (_b = options.params) === null || _b === void 0 ? void 0 : _b.fontSize); + staveBar2.setEndBarType(BarlineType.END); + staveBar2.setContext(ctx).draw(); + const notesBar2_part1 = [ + new StaveNote({ keys: ['c/4'], duration: '8' }), + new StaveNote({ keys: ['d/4'], duration: '8' }), + new StaveNote({ keys: ['g/4'], duration: '8' }), + new StaveNote({ keys: ['e/4'], duration: '8' }), + ]; + const notesBar2_part2 = [ + new StaveNote({ keys: ['c/4'], duration: '8' }), + new StaveNote({ keys: ['d/4'], duration: '8' }), + new StaveNote({ keys: ['g/4'], duration: '8' }), + new StaveNote({ keys: ['e/4'], duration: '8' }), + ]; + const beam1 = new Beam(notesBar2_part1); + const beam2 = new Beam(notesBar2_part2); + const notesBar2 = notesBar2_part1.concat(notesBar2_part2); + Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); +} +function drawRepeats(options, contextBuilder) { + options.assert.expect(0); + const ctx = contextBuilder(options.elementId, 750, 120); + const staveBar1 = new Stave(10, 0, 250); + staveBar1.setBegBarType(BarlineType.REPEAT_BEGIN); + staveBar1.setEndBarType(BarlineType.REPEAT_END); + staveBar1.addClef('treble'); + staveBar1.addKeySignature('A'); + staveBar1.setContext(ctx).draw(); + const notesBar1 = [ + new StaveNote({ keys: ['c/4'], duration: 'q' }), + new StaveNote({ keys: ['d/4'], duration: 'q' }), + new StaveNote({ keys: ['b/4'], duration: 'qr' }), + new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); + const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 250); + staveBar2.setBegBarType(BarlineType.REPEAT_BEGIN); + staveBar2.setEndBarType(BarlineType.REPEAT_END); + staveBar2.setContext(ctx).draw(); + const notesBar2_part1 = [ + new StaveNote({ keys: ['c/4'], duration: '8' }), + new StaveNote({ keys: ['d/4'], duration: '8' }), + new StaveNote({ keys: ['g/4'], duration: '8' }), + new StaveNote({ keys: ['e/4'], duration: '8' }), + ]; + const notesBar2_part2 = [ + new StaveNote({ keys: ['c/4'], duration: '8' }), + new StaveNote({ keys: ['d/4'], duration: '8' }), + new StaveNote({ keys: ['g/4'], duration: '8' }), + new StaveNote({ keys: ['e/4'], duration: '8' }), + ]; + notesBar2_part2[0].addModifier(new Accidental('#'), 0); + notesBar2_part2[1].addModifier(new Accidental('#'), 0); + notesBar2_part2[3].addModifier(new Accidental('b'), 0); + const beam1 = new Beam(notesBar2_part1); + const beam2 = new Beam(notesBar2_part2); + const notesBar2 = notesBar2_part1.concat(notesBar2_part2); + Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + const staveBar3 = new Stave(staveBar2.getWidth() + staveBar2.getX(), staveBar2.getY(), 50); + staveBar3.setContext(ctx).draw(); + const notesBar3 = [new StaveNote({ keys: ['d/5'], duration: 'wr' })]; + Formatter.FormatAndDraw(ctx, staveBar3, notesBar3); + const staveBar4 = new Stave(staveBar3.getWidth() + staveBar3.getX(), staveBar3.getY(), 250 - staveBar1.getModifierXShift()); + staveBar4.setBegBarType(BarlineType.REPEAT_BEGIN); + staveBar4.setEndBarType(BarlineType.REPEAT_END); + staveBar4.setContext(ctx).draw(); + const notesBar4 = [ + new StaveNote({ keys: ['c/4'], duration: 'q' }), + new StaveNote({ keys: ['d/4'], duration: 'q' }), + new StaveNote({ keys: ['b/4'], duration: 'qr' }), + new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, staveBar4, notesBar4); +} +function drawEndModifiers(options, contextBuilder) { + options.assert.expect(0); + const staveWidth = 230; + const blockHeight = 80; + let x = 10; + let y = 0; + const ctx = contextBuilder(options.elementId, 800, 700); + function drawStavesInTwoLines(endBarLine) { + function drawStave(x, y, width, begMods, endMods) { + const staveBar = new Stave(x, y, width - 10); + if (begMods) { + if (begMods.barLine !== undefined) { + staveBar.setBegBarType(begMods.barLine); + } + if (begMods.clef !== undefined) { + staveBar.addClef(begMods.clef); + } + if (begMods.keySig !== undefined) { + staveBar.addKeySignature(begMods.keySig); + } + if (begMods.timeSig !== undefined) { + staveBar.setTimeSignature(begMods.timeSig); + } + } + if (endMods) { + if (endMods.barLine !== undefined) { + staveBar.setEndBarType(endMods.barLine); + } + if (endMods.clef !== undefined) { + staveBar.addEndClef(endMods.clef); + } + if (endMods.keySig !== undefined) { + staveBar.setEndKeySignature(endMods.keySig); + } + if (endMods.timeSig !== undefined) { + staveBar.setEndTimeSignature(endMods.timeSig); + } + } + staveBar.setContext(ctx).draw(); + const notesBar = [ + new StaveNote({ keys: ['c/4'], duration: 'q' }), + new StaveNote({ keys: ['d/4'], duration: 'q' }), + new StaveNote({ keys: ['b/4'], duration: 'qr' }), + new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, staveBar, notesBar); + } + drawStave(x, y, staveWidth + 50, { barLine: BarlineType.REPEAT_BEGIN, clef: 'treble', keySig: 'A' }, { barLine: endBarLine, clef: 'bass' }); + x += staveWidth + 50; + drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, keySig: 'E' }); + x += staveWidth; + drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, timeSig: '2/4' }); + x += staveWidth; + x = 10; + y += blockHeight; + drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'bass', timeSig: '2/4' }); + x += staveWidth; + drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'treble', keySig: 'Ab' }); + x += staveWidth; + drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'bass', keySig: 'Ab', timeSig: '2/4' }); + x += staveWidth; + } + y = 0; + x = 10; + drawStavesInTwoLines(BarlineType.SINGLE); + y += blockHeight + 10; + x = 10; + drawStavesInTwoLines(BarlineType.DOUBLE); + y += blockHeight + 10; + x = 10; + drawStavesInTwoLines(BarlineType.REPEAT_END); + y += blockHeight + 10; + x = 10; + drawStavesInTwoLines(BarlineType.REPEAT_BOTH); +} +function drawStaveRepetition(options, contextBuilder) { + options.assert.expect(0); + const ctx = contextBuilder(options.elementId, 725, 200); + const mm1 = new Stave(10, 50, 150); + mm1.addClef('treble'); + mm1.setRepetitionType(Repetition.type.DS_AL_FINE, options.params.yShift); + mm1.setMeasure(1); + mm1.setContext(ctx).draw(); + const notesmm1 = [ + new StaveNote({ keys: ['a/4'], duration: 'q' }), + new StaveNote({ keys: ['f/4'], duration: 'q' }), + new StaveNote({ keys: ['f/4'], duration: 'q' }), + new StaveNote({ keys: ['a/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, mm1, notesmm1); + const mm2 = new Stave(mm1.getWidth() + mm1.getX(), mm1.getY(), 150); + mm2.setRepetitionType(Repetition.type.TO_CODA, options.params.yShift); + mm2.setMeasure(2); + mm2.setContext(ctx).draw(); + const notesmm2 = [ + new StaveNote({ keys: ['a/4'], duration: 'q' }), + new StaveNote({ keys: ['f/4'], duration: 'q' }), + new StaveNote({ keys: ['f/4'], duration: 'q' }), + new StaveNote({ keys: ['a/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, mm2, notesmm2); + const mm3 = new Stave(mm2.getWidth() + mm2.getX(), mm1.getY(), 150); + mm3.setRepetitionType(Repetition.type.DS_AL_CODA, options.params.yShift); + mm3.setMeasure(3); + mm3.setContext(ctx).draw(); + const notesmm3 = [ + new StaveNote({ keys: ['a/4'], duration: 'q' }), + new StaveNote({ keys: ['f/4'], duration: 'q' }), + new StaveNote({ keys: ['f/4'], duration: 'q' }), + new StaveNote({ keys: ['a/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, mm3, notesmm3); + const mm4 = new Stave(mm3.getWidth() + mm3.getX(), mm1.getY(), 150); + mm4.setRepetitionType(Repetition.type.CODA_LEFT, options.params.yShift); + mm4.setMeasure(4); + mm4.setContext(ctx).draw(); + const notesmm4 = [ + new StaveNote({ keys: ['a/4'], duration: 'q' }), + new StaveNote({ keys: ['f/4'], duration: 'q' }), + new StaveNote({ keys: ['f/4'], duration: 'q' }), + new StaveNote({ keys: ['a/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, mm4, notesmm4); +} +function drawVolta(options, contextBuilder) { + options.assert.expect(0); + const ctx = contextBuilder(options.elementId, 725, 200); + const mm1 = new Stave(10, 50, 125); + mm1.setBegBarType(BarlineType.REPEAT_BEGIN); + mm1.setRepetitionType(Repetition.type.SEGNO_LEFT); + mm1.addClef('treble'); + mm1.addKeySignature('A'); + mm1.setMeasure(1); + mm1.setSection('A', 0); + mm1.setContext(ctx).draw(); + const notesmm1 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm1, notesmm1); + const mm2 = new Stave(mm1.getWidth() + mm1.getX(), mm1.getY(), 60); + mm2.setRepetitionType(Repetition.type.CODA_RIGHT); + mm2.setMeasure(2); + mm2.setContext(ctx).draw(); + const notesmm2 = [new StaveNote({ keys: ['d/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm2, notesmm2); + const mm3 = new Stave(mm2.getWidth() + mm2.getX(), mm1.getY(), 60); + mm3.setVoltaType(VoltaType.BEGIN, '1.', -5); + mm3.setMeasure(3); + mm3.setContext(ctx).draw(); + const notesmm3 = [new StaveNote({ keys: ['e/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm3, notesmm3); + const mm4 = new Stave(mm3.getWidth() + mm3.getX(), mm1.getY(), 60); + mm4.setVoltaType(VoltaType.MID, '', -5); + mm4.setMeasure(4); + mm4.setContext(ctx).draw(); + const notesmm4 = [new StaveNote({ keys: ['f/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm4, notesmm4); + const mm5 = new Stave(mm4.getWidth() + mm4.getX(), mm1.getY(), 60); + mm5.setEndBarType(BarlineType.REPEAT_END); + mm5.setVoltaType(VoltaType.END, '', -5); + mm5.setMeasure(5); + mm5.setContext(ctx).draw(); + const notesmm5 = [new StaveNote({ keys: ['g/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm5, notesmm5); + const mm6 = new Stave(mm5.getWidth() + mm5.getX(), mm1.getY(), 60); + mm6.setVoltaType(VoltaType.BEGIN_END, '2.', -5); + mm6.setEndBarType(BarlineType.DOUBLE); + mm6.setMeasure(6); + mm6.setContext(ctx).draw(); + const notesmm6 = [new StaveNote({ keys: ['a/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm6, notesmm6); + const mm7 = new Stave(mm6.getWidth() + mm6.getX(), mm1.getY(), 60); + mm7.setMeasure(7); + mm7.setSection('B', 0); + mm7.setContext(ctx).draw(); + const notesmm7 = [new StaveNote({ keys: ['b/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm7, notesmm7); + const mm8 = new Stave(mm7.getWidth() + mm7.getX(), mm1.getY(), 60); + mm8.setEndBarType(BarlineType.DOUBLE); + mm8.setRepetitionType(Repetition.type.DS_AL_CODA); + mm8.setMeasure(8); + mm8.setContext(ctx).draw(); + const notesmm8 = [new StaveNote({ keys: ['c/5'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm8, notesmm8); + const mm9 = new Stave(mm8.getWidth() + mm8.getX() + 20, mm1.getY(), 125); + mm9.setEndBarType(BarlineType.END); + mm9.setRepetitionType(Repetition.type.CODA_LEFT); + mm9.addClef('treble'); + mm9.addKeySignature('A'); + mm9.setMeasure(9); + mm9.setContext(ctx).draw(); + const notesmm9 = [new StaveNote({ keys: ['d/5'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm9, notesmm9); +} +function drawVoltaModifier(options, contextBuilder) { + options.assert.expect(0); + const ctx = contextBuilder(options.elementId, 1100, 200); + const mm1 = new Stave(10, 50, 175); + mm1.setBegBarType(BarlineType.REPEAT_BEGIN); + mm1.setVoltaType(VoltaType.BEGIN_END, '1.', -5); + mm1.addClef('treble'); + mm1.addKeySignature('A'); + mm1.setMeasure(1); + mm1.setSection('A', 0); + mm1.setContext(ctx).draw(); + const notesmm1 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm1, notesmm1); + const mm2 = new Stave(mm1.getX() + mm1.getWidth(), mm1.getY(), 175); + mm2.setBegBarType(BarlineType.REPEAT_BEGIN); + mm2.setRepetitionType(Repetition.type.DS); + mm2.setVoltaType(VoltaType.BEGIN, '2.', -5); + mm2.addClef('treble'); + mm2.addKeySignature('A'); + mm2.setMeasure(2); + mm2.setContext(ctx).draw(); + const notesmm2 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm2, notesmm2); + const mm3 = new Stave(mm2.getX() + mm2.getWidth(), mm2.getY(), 175); + mm3.setVoltaType(VoltaType.MID, '', -5); + mm3.setRepetitionType(Repetition.type.DS); + mm3.addClef('treble'); + mm3.addKeySignature('B'); + mm3.setMeasure(3); + mm3.setSection('B', 0); + mm3.setContext(ctx).draw(); + const notesmm3 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm3, notesmm3); + const mm4 = new Stave(mm3.getX() + mm3.getWidth(), mm3.getY(), 175); + mm4.setVoltaType(VoltaType.END, '1.', -5); + mm4.setRepetitionType(Repetition.type.DS); + mm4.addClef('treble'); + mm4.addKeySignature('A'); + mm4.setMeasure(4); + mm4.setSection('C', 0); + mm4.setContext(ctx).draw(); + const notesmm4 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm4, notesmm4); + const mm5 = new Stave(mm4.getX() + mm4.getWidth(), mm4.getY(), 175); + mm5.setEndBarType(BarlineType.DOUBLE); + mm5.setRepetitionType(Repetition.type.DS); + mm5.addClef('treble'); + mm5.addKeySignature('A'); + mm5.setMeasure(5); + mm5.setSection('D', 0); + mm5.setContext(ctx).draw(); + const notesmm5 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm5, notesmm5); + const mm6 = new Stave(mm5.getX() + mm5.getWidth(), mm5.getY(), 175); + mm6.setRepetitionType(Repetition.type.DS); + mm6.setMeasure(6); + mm6.setSection('E', 0); + mm6.setContext(ctx).draw(); + const notesmm6 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm6, notesmm6); +} +function drawTempo(options, contextBuilder) { + options.assert.expect(0); + const ctx = contextBuilder(options.elementId, 725, 350); + const padding = 10; + let x = 0; + let y = 50; + function drawTempoStaveBar(width, tempo, tempo_y, notes) { + const staveBar = new Stave(padding + x, y, width); + if (x === 0) + staveBar.addClef('treble'); + staveBar.setTempo(tempo, tempo_y); + staveBar.setContext(ctx).draw(); + const notesBar = notes || [ + new StaveNote({ keys: ['c/4'], duration: 'q' }), + new StaveNote({ keys: ['d/4'], duration: 'q' }), + new StaveNote({ keys: ['b/4'], duration: 'q' }), + new StaveNote({ keys: ['c/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, staveBar, notesBar); + x += width; + } + drawTempoStaveBar(120, { duration: 'q', dots: 1, bpm: 80 }, 0); + drawTempoStaveBar(100, { duration: '8', dots: 2, bpm: 90 }, 0); + drawTempoStaveBar(100, { duration: '16', dots: 1, bpm: 96 }, 0); + drawTempoStaveBar(100, { duration: '32', bpm: 70 }, 0); + drawTempoStaveBar(250, { name: 'Andante', bpm: 120 }, -20, [ + new StaveNote({ keys: ['c/4'], duration: '8' }), + new StaveNote({ keys: ['d/4'], duration: '8' }), + new StaveNote({ keys: ['g/4'], duration: '8' }), + new StaveNote({ keys: ['e/5'], duration: '8' }), + new StaveNote({ keys: ['c/4'], duration: '8' }), + new StaveNote({ keys: ['d/4'], duration: '8' }), + new StaveNote({ keys: ['g/4'], duration: '8' }), + new StaveNote({ keys: ['e/4'], duration: '8' }), + ]); + x = 0; + y += 150; + drawTempoStaveBar(120, { duration: 'w', bpm: 80 }, 0); + drawTempoStaveBar(100, { duration: 'h', bpm: 90 }, 0); + drawTempoStaveBar(100, { duration: 'q', bpm: 96 }, 0); + drawTempoStaveBar(100, { duration: '8', bpm: 70 }, 0); + drawTempoStaveBar(250, { name: 'Andante grazioso' }, 0, [ + new StaveNote({ keys: ['c/4'], duration: '8' }), + new StaveNote({ keys: ['d/4'], duration: '8' }), + new StaveNote({ keys: ['g/4'], duration: '8' }), + new StaveNote({ keys: ['e/4'], duration: '8' }), + new StaveNote({ keys: ['c/4'], duration: '8' }), + new StaveNote({ keys: ['d/4'], duration: '8' }), + new StaveNote({ keys: ['g/4'], duration: '8' }), + new StaveNote({ keys: ['e/4'], duration: '8' }), + ]); +} +function configureSingleLine(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + const stave = new Stave(10, 10, 300); + stave + .setConfigForLine(0, { visible: true }) + .setConfigForLine(1, { visible: false }) + .setConfigForLine(2, { visible: true }) + .setConfigForLine(3, { visible: false }) + .setConfigForLine(4, { visible: true }); + stave.setContext(ctx).draw(); + const config = stave.getConfigForLines(); + options.assert.equal(config[0].visible, true, 'getLinesConfiguration() - Line 0'); + options.assert.equal(config[1].visible, false, 'getLinesConfiguration() - Line 1'); + options.assert.equal(config[2].visible, true, 'getLinesConfiguration() - Line 2'); + options.assert.equal(config[3].visible, false, 'getLinesConfiguration() - Line 3'); + options.assert.equal(config[4].visible, true, 'getLinesConfiguration() - Line 4'); + options.assert.ok(true, 'all pass'); +} +function configureAllLines(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + const stave = new Stave(10, 10, 300); + stave + .setConfigForLines([{ visible: false }, {}, { visible: false }, { visible: true }, { visible: false }]) + .setContext(ctx) + .draw(); + const config = stave.getConfigForLines(); + options.assert.equal(config[0].visible, false, 'getLinesConfiguration() - Line 0'); + options.assert.equal(config[1].visible, true, 'getLinesConfiguration() - Line 1'); + options.assert.equal(config[2].visible, false, 'getLinesConfiguration() - Line 2'); + options.assert.equal(config[3].visible, true, 'getLinesConfiguration() - Line 3'); + options.assert.equal(config[4].visible, false, 'getLinesConfiguration() - Line 4'); + options.assert.ok(true, 'all pass'); +} +function drawStaveText(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 900, 140); + const stave = new Stave(300, 10, 300); + stave.setText('Violin', Modifier.Position.LEFT); + stave.setText('Right Text', Modifier.Position.RIGHT); + stave.setText('Above Text', Modifier.Position.ABOVE); + stave.setText('Below Text', Modifier.Position.BELOW); + stave.setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function drawStaveTextMultiLine(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 900, 200); + const stave = new Stave(300, 40, 300); + stave.setText('Violin', Modifier.Position.LEFT, { shift_y: -10 }); + stave.setText('2nd line', Modifier.Position.LEFT, { shift_y: 10 }); + stave.setText('Right Text', Modifier.Position.RIGHT, { shift_y: -10 }); + stave.setText('2nd line', Modifier.Position.RIGHT, { shift_y: 10 }); + stave.setText('Above Text', Modifier.Position.ABOVE, { shift_y: -10 }); + stave.setText('2nd line', Modifier.Position.ABOVE, { shift_y: 10 }); + stave.setText('Left Below Text', Modifier.Position.BELOW, { shift_y: -10, justification: TextJustification.LEFT }); + stave.setText('Right Below Text', Modifier.Position.BELOW, { shift_y: 10, justification: TextJustification.RIGHT }); + stave.setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function factoryAPI(options) { + const f = VexFlowTests.makeFactory(options, 900, 200); + const stave = f.Stave({ x: 300, y: 40, width: 300 }); + stave.setText('Violin', Modifier.Position.LEFT, { shift_y: -10 }); + stave.setText('2nd line', Modifier.Position.LEFT, { shift_y: 10 }); + f.draw(); + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(StaveTests); +export { StaveTests }; diff --git a/build/esm/tests/staveconnector_tests.js b/build/esm/tests/staveconnector_tests.js new file mode 100644 index 0000000000..a22d123894 --- /dev/null +++ b/build/esm/tests/staveconnector_tests.js @@ -0,0 +1,402 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Flow } from '../src/flow.js'; +import { Modifier } from '../src/modifier.js'; +import { Stave } from '../src/stave.js'; +import { BarlineType } from '../src/stavebarline.js'; +import { StaveConnector } from '../src/staveconnector.js'; +const StaveConnectorTests = { + Start() { + QUnit.module('StaveConnector'); + const run = VexFlowTests.runTests; + run('Single Draw Test', drawSingle); + run('Single Draw Test, 4px Stave Line Thickness', drawSingle4pxStaveLines); + run('Single Both Sides Test', drawSingleBoth); + run('Double Draw Test', drawDouble); + run('Bold Double Line Left Draw Test', drawRepeatBegin); + run('Bold Double Line Right Draw Test', drawRepeatEnd); + run('Thin Double Line Right Draw Test', drawThinDouble); + run('Bold Double Lines Overlapping Draw Test', drawRepeatAdjacent); + run('Bold Double Lines Offset Draw Test', drawRepeatOffset); + run('Bold Double Lines Offset Draw Test 2', drawRepeatOffset2); + run('Brace Draw Test', drawBrace); + run('Brace Wide Draw Test', drawBraceWide); + run('Bracket Draw Test', drawBracket); + run('Combined Draw Test', drawCombined); + }, +}; +function drawSingle(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 300); + const stave2 = new Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new StaveConnector(stave1, stave2); + connector.setType(StaveConnector.type.SINGLE); + connector.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + options.assert.ok(true, 'all pass'); +} +function drawSingle4pxStaveLines(options, contextBuilder) { + const oldThickness = Flow.STAVE_LINE_THICKNESS; + Flow.STAVE_LINE_THICKNESS = 4; + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 300); + const stave2 = new Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new StaveConnector(stave1, stave2); + connector.setType(StaveConnector.type.SINGLE); + connector.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + Flow.STAVE_LINE_THICKNESS = oldThickness; + options.assert.ok(true, 'all pass'); +} +function drawSingleBoth(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 300); + const stave2 = new Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector1 = new StaveConnector(stave1, stave2); + connector1.setType(StaveConnector.type.SINGLE_LEFT); + connector1.setContext(ctx); + const connector2 = new StaveConnector(stave1, stave2); + connector2.setType(StaveConnector.type.SINGLE_RIGHT); + connector2.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector1.draw(); + connector2.draw(); + options.assert.ok(true, 'all pass'); +} +function drawDouble(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 300); + const stave2 = new Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new StaveConnector(stave1, stave2); + const line = new StaveConnector(stave1, stave2); + connector.setType(StaveConnector.type.DOUBLE); + connector.setContext(ctx); + line.setType(StaveConnector.type.SINGLE); + connector.setContext(ctx); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawBrace(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 450, 300); + const stave1 = new Stave(100, 10, 300); + const stave2 = new Stave(100, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new StaveConnector(stave1, stave2); + const line = new StaveConnector(stave1, stave2); + connector.setType(StaveConnector.type.BRACE); + connector.setContext(ctx); + connector.setText('Piano'); + line.setType(StaveConnector.type.SINGLE); + connector.setContext(ctx); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawBraceWide(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, -20, 300); + const stave2 = new Stave(25, 200, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new StaveConnector(stave1, stave2); + const line = new StaveConnector(stave1, stave2); + connector.setType(StaveConnector.type.BRACE); + connector.setContext(ctx); + line.setType(StaveConnector.type.SINGLE); + connector.setContext(ctx); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawBracket(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 300); + const stave2 = new Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new StaveConnector(stave1, stave2); + const line = new StaveConnector(stave1, stave2); + connector.setType(StaveConnector.type.BRACKET); + connector.setContext(ctx); + line.setType(StaveConnector.type.SINGLE); + connector.setContext(ctx); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatBegin(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 300); + const stave2 = new Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave1.setBegBarType(BarlineType.REPEAT_BEGIN); + stave2.setBegBarType(BarlineType.REPEAT_BEGIN); + const line = new StaveConnector(stave1, stave2); + line.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatEnd(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 300); + const stave2 = new Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave1.setEndBarType(BarlineType.REPEAT_END); + stave2.setEndBarType(BarlineType.REPEAT_END); + const line = new StaveConnector(stave1, stave2); + line.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawThinDouble(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 300); + const stave2 = new Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave1.setEndBarType(BarlineType.DOUBLE); + stave2.setEndBarType(BarlineType.DOUBLE); + const line = new StaveConnector(stave1, stave2); + line.setType(StaveConnector.type.THIN_DOUBLE); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatAdjacent(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 150); + const stave2 = new Stave(25, 120, 150); + const stave3 = new Stave(175, 10, 150); + const stave4 = new Stave(175, 120, 150); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave3.setContext(ctx); + stave4.setContext(ctx); + stave1.setEndBarType(BarlineType.REPEAT_END); + stave2.setEndBarType(BarlineType.REPEAT_END); + stave3.setEndBarType(BarlineType.END); + stave4.setEndBarType(BarlineType.END); + stave1.setBegBarType(BarlineType.REPEAT_BEGIN); + stave2.setBegBarType(BarlineType.REPEAT_BEGIN); + stave3.setBegBarType(BarlineType.REPEAT_BEGIN); + stave4.setBegBarType(BarlineType.REPEAT_BEGIN); + const connector1 = new StaveConnector(stave1, stave2); + const connector2 = new StaveConnector(stave1, stave2); + const connector3 = new StaveConnector(stave3, stave4); + const connector4 = new StaveConnector(stave3, stave4); + connector1.setContext(ctx); + connector2.setContext(ctx); + connector3.setContext(ctx); + connector4.setContext(ctx); + connector1.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); + connector2.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector3.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); + connector4.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); + stave1.draw(); + stave2.draw(); + stave3.draw(); + stave4.draw(); + connector1.draw(); + connector2.draw(); + connector3.draw(); + connector4.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatOffset2(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 150); + const stave2 = new Stave(25, 120, 150); + const stave3 = new Stave(175, 10, 150); + const stave4 = new Stave(175, 120, 150); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave3.setContext(ctx); + stave4.setContext(ctx); + stave1.addClef('treble'); + stave2.addClef('bass'); + stave3.addClef('alto'); + stave4.addClef('treble'); + stave1.addTimeSignature('4/4'); + stave2.addTimeSignature('4/4'); + stave3.addTimeSignature('6/8'); + stave4.addTimeSignature('6/8'); + stave1.setEndBarType(BarlineType.REPEAT_END); + stave2.setEndBarType(BarlineType.REPEAT_END); + stave3.setEndBarType(BarlineType.END); + stave4.setEndBarType(BarlineType.END); + stave1.setBegBarType(BarlineType.REPEAT_BEGIN); + stave2.setBegBarType(BarlineType.REPEAT_BEGIN); + stave3.setBegBarType(BarlineType.REPEAT_BEGIN); + stave4.setBegBarType(BarlineType.REPEAT_BEGIN); + const connector1 = new StaveConnector(stave1, stave2); + const connector2 = new StaveConnector(stave1, stave2); + const connector3 = new StaveConnector(stave3, stave4); + const connector4 = new StaveConnector(stave3, stave4); + const connector5 = new StaveConnector(stave3, stave4); + connector1.setContext(ctx); + connector2.setContext(ctx); + connector3.setContext(ctx); + connector4.setContext(ctx); + connector5.setContext(ctx); + connector1.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); + connector2.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector3.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); + connector4.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector5.setType(StaveConnector.type.SINGLE_LEFT); + connector1.setXShift(stave1.getModifierXShift()); + connector3.setXShift(stave3.getModifierXShift()); + stave1.draw(); + stave2.draw(); + stave3.draw(); + stave4.draw(); + connector1.draw(); + connector2.draw(); + connector3.draw(); + connector4.draw(); + connector5.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatOffset(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 150); + const stave2 = new Stave(25, 120, 150); + const stave3 = new Stave(185, 10, 150); + const stave4 = new Stave(185, 120, 150); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave3.setContext(ctx); + stave4.setContext(ctx); + stave1.addClef('bass'); + stave2.addClef('alto'); + stave3.addClef('treble'); + stave4.addClef('tenor'); + stave3.addKeySignature('Ab'); + stave4.addKeySignature('Ab'); + stave1.addTimeSignature('4/4'); + stave2.addTimeSignature('4/4'); + stave3.addTimeSignature('6/8'); + stave4.addTimeSignature('6/8'); + stave1.setEndBarType(BarlineType.REPEAT_END); + stave2.setEndBarType(BarlineType.REPEAT_END); + stave3.setEndBarType(BarlineType.END); + stave4.setEndBarType(BarlineType.END); + stave1.setBegBarType(BarlineType.REPEAT_BEGIN); + stave2.setBegBarType(BarlineType.REPEAT_BEGIN); + stave3.setBegBarType(BarlineType.REPEAT_BEGIN); + stave4.setBegBarType(BarlineType.REPEAT_BEGIN); + const connector1 = new StaveConnector(stave1, stave2); + const connector2 = new StaveConnector(stave1, stave2); + const connector3 = new StaveConnector(stave3, stave4); + const connector4 = new StaveConnector(stave3, stave4); + const connector5 = new StaveConnector(stave3, stave4); + connector1.setContext(ctx); + connector2.setContext(ctx); + connector3.setContext(ctx); + connector4.setContext(ctx); + connector5.setContext(ctx); + connector1.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); + connector2.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector3.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); + connector4.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector5.setType(StaveConnector.type.SINGLE_LEFT); + connector1.setXShift(stave1.getModifierXShift()); + connector3.setXShift(stave3.getModifierXShift()); + stave1.draw(); + stave2.draw(); + stave3.draw(); + stave4.draw(); + connector1.draw(); + connector2.draw(); + connector3.draw(); + connector4.draw(); + connector5.draw(); + options.assert.ok(true, 'all pass'); +} +function drawCombined(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 550, 700); + const stave1 = new Stave(150, 10, 300); + const stave2 = new Stave(150, 100, 300); + const stave3 = new Stave(150, 190, 300); + const stave4 = new Stave(150, 280, 300); + const stave5 = new Stave(150, 370, 300); + const stave6 = new Stave(150, 460, 300); + const stave7 = new Stave(150, 560, 300); + stave1.setText('Violin', Modifier.Position.LEFT); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave3.setContext(ctx); + stave4.setContext(ctx); + stave5.setContext(ctx); + stave6.setContext(ctx); + stave7.setContext(ctx); + const conn_single = new StaveConnector(stave1, stave7); + const conn_double = new StaveConnector(stave2, stave3); + const conn_bracket = new StaveConnector(stave4, stave7); + const conn_none = new StaveConnector(stave4, stave5); + const conn_brace = new StaveConnector(stave6, stave7); + conn_single.setType(StaveConnector.type.SINGLE); + conn_double.setType(StaveConnector.type.DOUBLE); + conn_bracket.setType(StaveConnector.type.BRACKET); + conn_brace.setType(StaveConnector.type.BRACE); + conn_brace.setXShift(-5); + conn_double.setText('Piano'); + conn_none.setText('Multiple', { shift_y: -15 }); + conn_none.setText('Line Text', { shift_y: 15 }); + conn_brace.setText('Harpsichord'); + conn_single.setContext(ctx); + conn_double.setContext(ctx); + conn_bracket.setContext(ctx); + conn_none.setContext(ctx); + conn_brace.setContext(ctx); + stave1.draw(); + stave2.draw(); + stave3.draw(); + stave4.draw(); + stave5.draw(); + stave6.draw(); + stave7.draw(); + conn_single.draw(); + conn_double.draw(); + conn_bracket.draw(); + conn_none.draw(); + conn_brace.draw(); + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(StaveConnectorTests); +export { StaveConnectorTests }; diff --git a/build/esm/tests/stavehairpin_tests.js b/build/esm/tests/stavehairpin_tests.js new file mode 100644 index 0000000000..8da96e5f8a --- /dev/null +++ b/build/esm/tests/stavehairpin_tests.js @@ -0,0 +1,90 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { StaveHairpin } from '../src/stavehairpin.js'; +const StaveHairpinTests = { + Start() { + QUnit.module('StaveHairpin'); + const run = VexFlowTests.runTests; + run('Simple StaveHairpin', simple); + run('Horizontal Offset StaveHairpin', horizontal); + run('Vertical Offset StaveHairpin', vertical); + run('Height StaveHairpin', height); + }, +}; +function drawHairpin(first_note, last_note, ctx, type, position, options) { + const hairpin = new StaveHairpin({ first_note, last_note }, type); + hairpin.setContext(ctx); + hairpin.setPosition(position); + if (options) { + hairpin.setRenderOptions(options); + } + hairpin.draw(); +} +function createTest(drawTwoHairpins) { + return (options) => { + const factory = VexFlowTests.makeFactory(options); + const ctx = factory.getContext(); + const stave = factory.Stave(); + const notes = [ + factory + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' }) + .addModifier(factory.Accidental({ type: 'b' }), 0) + .addModifier(factory.Accidental({ type: '#' }), 1), + factory.StaveNote({ keys: ['d/4'], stem_direction: 1, duration: '4' }), + factory.StaveNote({ keys: ['e/4'], stem_direction: 1, duration: '4' }), + factory.StaveNote({ keys: ['f/4'], stem_direction: 1, duration: '4' }), + ]; + const voice = factory.Voice().addTickables(notes); + factory.Formatter().joinVoices([voice]).formatToStave([voice], stave); + factory.draw(); + drawTwoHairpins(ctx, notes); + options.assert.ok(true, 'Simple Test'); + }; +} +const simple = createTest((ctx, notes) => { + drawHairpin(notes[0], notes[2], ctx, 1, 4); + drawHairpin(notes[1], notes[3], ctx, 2, 3); +}); +const horizontal = createTest((ctx, notes) => { + drawHairpin(notes[0], notes[2], ctx, 1, 3, { + height: 10, + vo: 20, + left_ho: 20, + right_ho: -20, + }); + drawHairpin(notes[3], notes[3], ctx, 2, 4, { + height: 10, + y_shift: 0, + left_shift_px: 0, + right_shift_px: 120, + }); +}); +const vertical = createTest((ctx, notes) => { + drawHairpin(notes[0], notes[2], ctx, 1, 4, { + height: 10, + y_shift: 0, + left_shift_px: 0, + right_shift_px: 0, + }); + drawHairpin(notes[2], notes[3], ctx, 2, 4, { + height: 10, + y_shift: -15, + left_shift_px: 2, + right_shift_px: 0, + }); +}); +const height = createTest((ctx, notes) => { + drawHairpin(notes[0], notes[2], ctx, 1, 4, { + height: 10, + y_shift: 0, + left_shift_px: 0, + right_shift_px: 0, + }); + drawHairpin(notes[2], notes[3], ctx, 2, 4, { + height: 15, + y_shift: 0, + left_shift_px: 2, + right_shift_px: 0, + }); +}); +VexFlowTests.register(StaveHairpinTests); +export { StaveHairpinTests }; diff --git a/build/esm/tests/staveline_tests.js b/build/esm/tests/staveline_tests.js new file mode 100644 index 0000000000..b8169d62a2 --- /dev/null +++ b/build/esm/tests/staveline_tests.js @@ -0,0 +1,122 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Dot } from '../src/dot.js'; +import { Font, FontStyle } from '../src/font.js'; +const StaveLineTests = { + Start() { + QUnit.module('StaveLine'); + const run = VexFlowTests.runTests; + run('Simple StaveLine', simple0); + run('StaveLine Arrow Options', simple1); + }, +}; +function simple0(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave().addClef('treble'); + const notes = [ + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), + f.StaveNote({ keys: ['c/5'], duration: '4', clef: 'treble' }), + f.StaveNote({ keys: ['c/4', 'g/4', 'b/4'], duration: '4', clef: 'treble' }), + f.StaveNote({ keys: ['f/4', 'a/4', 'f/5'], duration: '4', clef: 'treble' }), + ]; + const voice = f.Voice().addTickables(notes); + f.StaveLine({ + from: notes[0], + to: notes[1], + first_indices: [0], + last_indices: [0], + options: { + font: { family: Font.SERIF, size: 12, style: FontStyle.ITALIC }, + text: 'gliss.', + }, + }); + const staveLine2 = f.StaveLine({ + from: notes[2], + to: notes[3], + first_indices: [2, 1, 0], + last_indices: [0, 1, 2], + }); + staveLine2.render_options.line_dash = [10, 10]; + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function simple1(options) { + const f = VexFlowTests.makeFactory(options, 770); + const stave = f.Stave().addClef('treble'); + const notes = [ + f.StaveNote({ keys: ['c#/5', 'd/5'], duration: '4', clef: 'treble', stem_direction: -1 }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }).addModifier(f.Accidental({ type: '#' }), 0), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '4', clef: 'treble' }), + f + .StaveNote({ keys: ['f/4', 'a/4', 'c/5'], duration: '4', clef: 'treble' }) + .addModifier(f.Accidental({ type: '#' }), 2), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }).addModifier(f.Accidental({ type: '#' }), 0), + f.StaveNote({ keys: ['c#/5', 'd/5'], duration: '4', clef: 'treble', stem_direction: -1 }), + f.StaveNote({ keys: ['c/4', 'd/4', 'g/4'], duration: '4', clef: 'treble' }), + f + .StaveNote({ keys: ['f/4', 'a/4', 'c/5'], duration: '4', clef: 'treble' }) + .addModifier(f.Accidental({ type: '#' }), 2), + ]; + Dot.buildAndAttach([notes[0]], { all: true }); + const voice = f.Voice().setStrict(false).addTickables(notes); + const staveLine0 = f.StaveLine({ + from: notes[0], + to: notes[1], + first_indices: [0], + last_indices: [0], + options: { text: 'Left' }, + }); + const staveLine4 = f.StaveLine({ + from: notes[2], + to: notes[3], + first_indices: [1], + last_indices: [1], + options: { text: 'Right' }, + }); + const staveLine1 = f.StaveLine({ + from: notes[4], + to: notes[5], + first_indices: [0], + last_indices: [0], + options: { text: 'Center' }, + }); + const staveLine2 = f.StaveLine({ + from: notes[6], + to: notes[7], + first_indices: [1], + last_indices: [0], + }); + const staveLine3 = f.StaveLine({ + from: notes[6], + to: notes[7], + first_indices: [2], + last_indices: [2], + options: { text: 'Top' }, + }); + staveLine0.render_options.draw_end_arrow = true; + staveLine0.render_options.text_justification = 1; + staveLine0.render_options.text_position_vertical = 2; + staveLine1.render_options.draw_end_arrow = true; + staveLine1.render_options.arrowhead_length = 30; + staveLine1.render_options.line_width = 5; + staveLine1.render_options.text_justification = 2; + staveLine1.render_options.text_position_vertical = 2; + staveLine4.render_options.line_width = 2; + staveLine4.render_options.draw_end_arrow = true; + staveLine4.render_options.draw_start_arrow = true; + staveLine4.render_options.arrowhead_angle = 0.5; + staveLine4.render_options.arrowhead_length = 20; + staveLine4.render_options.text_justification = 3; + staveLine4.render_options.text_position_vertical = 2; + staveLine2.render_options.draw_start_arrow = true; + staveLine2.render_options.line_dash = [5, 4]; + staveLine3.render_options.draw_end_arrow = true; + staveLine3.render_options.draw_start_arrow = true; + staveLine3.render_options.color = 'red'; + staveLine3.render_options.text_position_vertical = 1; + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +VexFlowTests.register(StaveLineTests); +export { StaveLineTests }; diff --git a/build/esm/tests/stavemodifier_tests.js b/build/esm/tests/stavemodifier_tests.js new file mode 100644 index 0000000000..c551f136ab --- /dev/null +++ b/build/esm/tests/stavemodifier_tests.js @@ -0,0 +1,51 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Stave } from '../src/stave.js'; +import { BarlineType } from '../src/stavebarline.js'; +import { StaveModifierPosition } from '../src/stavemodifier.js'; +const StaveModifierTests = { + Start() { + QUnit.module('StaveModifier'); + const run = VexFlowTests.runTests; + run('Stave Draw Test', draw); + run('Begin & End StaveModifier Test', drawBeginAndEnd); + }, +}; +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + const stave = new Stave(10, 10, 300); + stave.setContext(ctx); + stave.draw(); + options.assert.equal(stave.getYForNote(0), 100, 'getYForNote(0)'); + options.assert.equal(stave.getYForLine(5), 100, 'getYForLine(5)'); + options.assert.equal(stave.getYForLine(0), 50, 'getYForLine(0) - Top Line'); + options.assert.equal(stave.getYForLine(4), 90, 'getYForLine(4) - Bottom Line'); + options.assert.ok(true, 'all pass'); +} +function drawBeginAndEnd(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + const stave = new Stave(10, 10, 400); + stave.setContext(ctx); + stave.setTimeSignature('C|'); + stave.setKeySignature('Db'); + stave.setClef('treble'); + stave.setBegBarType(BarlineType.REPEAT_BEGIN); + stave.setEndClef('alto'); + stave.setEndTimeSignature('9/8'); + stave.setEndKeySignature('G', 'C#'); + stave.setEndBarType(BarlineType.DOUBLE); + stave.draw(); + const END = StaveModifierPosition.END; + stave.setY(100); + stave.setTimeSignature('3/4'); + stave.setKeySignature('G', 'C#'); + stave.setClef('bass'); + stave.setBegBarType(BarlineType.SINGLE); + stave.setClef('treble', undefined, undefined, END); + stave.setTimeSignature('C', undefined, END); + stave.setKeySignature('F', undefined, END); + stave.setEndBarType(BarlineType.SINGLE); + stave.draw(); + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(StaveModifierTests); +export { StaveModifierTests }; diff --git a/build/esm/tests/stavenote_tests.js b/build/esm/tests/stavenote_tests.js new file mode 100644 index 0000000000..b9ec479136 --- /dev/null +++ b/build/esm/tests/stavenote_tests.js @@ -0,0 +1,928 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Accidental } from '../src/accidental.js'; +import { Annotation, AnnotationVerticalJustify } from '../src/annotation.js'; +import { Articulation } from '../src/articulation.js'; +import { Beam } from '../src/beam.js'; +import { Dot } from '../src/dot.js'; +import { Flow } from '../src/flow.js'; +import { Formatter } from '../src/formatter.js'; +import { Fraction } from '../src/fraction.js'; +import { FretHandFinger } from '../src/frethandfinger.js'; +import { Modifier } from '../src/modifier.js'; +import { ModifierContext } from '../src/modifiercontext.js'; +import { Stave } from '../src/stave.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Stem } from '../src/stem.js'; +import { StringNumber } from '../src/stringnumber.js'; +import { Stroke } from '../src/strokes.js'; +import { TickContext } from '../src/tickcontext.js'; +const StaveNoteTests = { + Start() { + QUnit.module('StaveNote'); + QUnit.test('Tick', ticks); + QUnit.test('Tick - New API', ticksNewAPI); + QUnit.test('Stem', stem); + QUnit.test('Automatic Stem Direction', autoStem); + QUnit.test('Stem Extension Pitch', stemExtensionPitch); + QUnit.test('Displacement after calling setStemDirection', setStemDirectionDisplacement); + QUnit.test('StaveLine', staveLine); + QUnit.test('Width', width); + QUnit.test('TickContext', tickContext); + const run = VexFlowTests.runTests; + run('StaveNote Draw - Treble', drawBasic, { clef: 'treble', octaveShift: 0, restKey: 'r/4' }); + run('StaveNote BoundingBoxes - Treble', drawBoundingBoxes, { clef: 'treble', octaveShift: 0, restKey: 'r/4' }); + run('StaveNote Draw - Alto', drawBasic, { clef: 'alto', octaveShift: -1, restKey: 'r/4' }); + run('StaveNote Draw - Tenor', drawBasic, { clef: 'tenor', octaveShift: -1, restKey: 'r/3' }); + run('StaveNote Draw - Bass', drawBasic, { clef: 'bass', octaveShift: -2, restKey: 'r/3' }); + run('StaveNote Draw - Harmonic And Muted', drawHarmonicAndMuted); + run('StaveNote Draw - Slash', drawSlash); + run('Displacements', displacements); + run('StaveNote Draw - Bass 2', drawBass); + run('StaveNote Draw - Key Styles', drawKeyStyles); + run('StaveNote Draw - StaveNote Stem Styles', drawNoteStemStyles); + run('StaveNote Draw - StaveNote Stem Lengths', drawNoteStemLengths); + run('StaveNote Draw - StaveNote Flag Styles', drawNoteStylesWithFlag); + run('StaveNote Draw - StaveNote Styles', drawNoteStyles); + run('Stave, Ledger Line, Beam, Stem and Flag Styles', drawBeamStyles); + run('Flag and Dot Placement - Stem Up', dotsAndFlagsStemUp); + run('Flag and Dots Placement - Stem Down', dotsAndFlagsStemDown); + run('Beam and Dot Placement - Stem Up', dotsAndBeamsUp); + run('Beam and Dot Placement - Stem Down', dotsAndBeamsDown); + run('No Padding', noPadding); + run('Note Heads Placement - Simple', noteHeadsSimple); + run('Note Heads Placement - Hidden Notes', noteHeadsHidden); + run('Center Aligned Note', centerAlignedRest); + run('Center Aligned Note with Articulation', centerAlignedRestFermata); + run('Center Aligned Note with Annotation', centerAlignedRestAnnotation); + run('Center Aligned Note - Multi Voice', centerAlignedMultiVoice); + run('Center Aligned Note with Multiple Modifiers', centerAlignedNoteMultiModifiers); + VexFlowTests.runSVGTest('Interactive Mouseover StaveNote', drawBasic, { + clef: 'treble', + octaveShift: 0, + restKey: 'r/4', + ui: true, + }); + }, +}; +const staveNote = (struct) => new StaveNote(struct); +function draw(note, stave, context, x, drawBoundingBox = false, addModifierContext = true) { + note.setStave(stave); + if (addModifierContext) { + note.addToModifierContext(new ModifierContext()); + } + new TickContext().addTickable(note).preFormat().setX(x); + note.setContext(context).draw(); + if (drawBoundingBox) { + const bb = note.getBoundingBox(); + context.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH()); + context.stroke(); + } + return note; +} +function ticks(assert) { + const BEAT = (1 * Flow.RESOLUTION) / 4; + const tickTests = { + 'Breve note': ['1/2', 8.0, 'n'], + 'Whole note': ['w', 4.0, 'n'], + 'Quarter note': ['q', 1.0, 'n'], + 'Dotted half note': ['hd', 3.0, 'n'], + 'Doubled-dotted half note': ['hdd', 3.5, 'n'], + 'Triple-dotted half note': ['hddd', 3.75, 'n'], + 'Dotted half rest': ['hdr', 3.0, 'r'], + 'Double-dotted half rest': ['hddr', 3.5, 'r'], + 'Triple-dotted half rest': ['hdddr', 3.75, 'r'], + 'Dotted harmonic quarter note': ['qdh', 1.5, 'h'], + 'Double-dotted harmonic quarter note': ['qddh', 1.75, 'h'], + 'Triple-dotted harmonic quarter note': ['qdddh', 1.875, 'h'], + 'Dotted muted 8th note': ['8dm', 0.75, 'm'], + 'Double-dotted muted 8th note': ['8ddm', 0.875, 'm'], + 'Triple-dotted muted 8th note': ['8dddm', 0.9375, 'm'], + }; + Object.keys(tickTests).forEach((testName) => { + const testData = tickTests[testName]; + const durationString = testData[0]; + const expectedBeats = testData[1]; + const expectedNoteType = testData[2]; + const note = new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: durationString }); + assert.equal(note.getTicks().value(), BEAT * expectedBeats, testName + ' must have ' + expectedBeats + ' beats'); + assert.equal(note.getNoteType(), expectedNoteType, 'Note type must be ' + expectedNoteType); + }); + assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '8.7dddm' }), /BadArguments/, "Invalid note duration '8.7' throws BadArguments exception"); + assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2Z' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); + assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2dddZ' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); +} +function ticksNewAPI(assert) { + const BEAT = (1 * Flow.RESOLUTION) / 4; + const tickTests = { + 'Breve note': [{ duration: '1/2' }, 8.0, 'n'], + 'Whole note': [{ duration: 'w' }, 4.0, 'n'], + 'Quarter note': [{ duration: 'q' }, 1.0, 'n'], + 'Dotted half note': [{ duration: 'h', dots: 1 }, 3.0, 'n'], + 'Doubled-dotted half note': [{ duration: 'h', dots: 2 }, 3.5, 'n'], + 'Triple-dotted half note': [{ duration: 'h', dots: 3 }, 3.75, 'n'], + 'Dotted half rest': [{ duration: 'h', dots: 1, type: 'r' }, 3.0, 'r'], + 'Double-dotted half rest': [{ duration: 'h', dots: 2, type: 'r' }, 3.5, 'r'], + 'Triple-dotted half rest': [{ duration: 'h', dots: 3, type: 'r' }, 3.75, 'r'], + 'Dotted harmonic quarter note': [{ duration: 'q', dots: 1, type: 'h' }, 1.5, 'h'], + 'Double-dotted harmonic quarter note': [{ duration: 'q', dots: 2, type: 'h' }, 1.75, 'h'], + 'Triple-dotted harmonic quarter note': [{ duration: 'q', dots: 3, type: 'h' }, 1.875, 'h'], + 'Dotted muted 8th note': [{ duration: '8', dots: 1, type: 'm' }, 0.75, 'm'], + 'Double-dotted muted 8th note': [{ duration: '8', dots: 2, type: 'm' }, 0.875, 'm'], + 'Triple-dotted muted 8th note': [{ duration: '8', dots: 3, type: 'm' }, 0.9375, 'm'], + }; + Object.keys(tickTests).forEach(function (testName) { + const testData = tickTests[testName]; + const noteData = testData[0]; + const expectedBeats = testData[1]; + const expectedNoteType = testData[2]; + noteData.keys = ['c/4', 'e/4', 'g/4']; + const note = new StaveNote(noteData); + assert.equal(note.getTicks().value(), BEAT * expectedBeats, testName + ' must have ' + expectedBeats + ' beats'); + assert.equal(note.getNoteType(), expectedNoteType, 'Note type must be ' + expectedNoteType); + }); + assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '8.7dddm' }), /BadArguments/, "Invalid note duration '8.7' throws BadArguments exception"); + assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2Z' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); + assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2dddZ' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); +} +function stem(assert) { + const note = new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'w' }); + assert.equal(note.getStemDirection(), Stem.UP, 'Default note has UP stem'); +} +function autoStem(assert) { + const testData = [ + [['c/5', 'e/5', 'g/5'], Stem.DOWN], + [['e/4', 'g/4', 'c/5'], Stem.UP], + [['c/5'], Stem.DOWN], + [['a/4', 'e/5', 'g/5'], Stem.DOWN], + [['b/4'], Stem.DOWN], + ]; + testData.forEach((td) => { + const keys = td[0]; + const expectedStemDirection = td[1]; + const note = new StaveNote({ keys: keys, auto_stem: true, duration: '8' }); + assert.equal(note.getStemDirection(), expectedStemDirection, 'Stem must be ' + (expectedStemDirection === Stem.UP ? 'up' : 'down')); + }); +} +function stemExtensionPitch(assert) { + const testData = [ + [['c/5', 'e/5', 'g/5'], 0, 0], + [['e/4', 'g/4', 'c/5'], 0, 0], + [['c/5'], 0, 0], + [['f/3'], 15, 0], + [['f/3'], 15, Stem.UP], + [['f/3'], 0, Stem.DOWN], + [['f/3', 'e/5'], 0, 0], + [['g/6'], 25, 0], + [['g/6'], 25, Stem.DOWN], + [['g/6'], 0, Stem.UP], + ]; + testData.forEach((td) => { + const keys = td[0]; + const expectedStemExtension = td[1]; + const overrideStemDirection = td[2]; + let note; + if (overrideStemDirection === 0) { + note = new StaveNote({ keys: keys, auto_stem: true, duration: '4' }); + } + else { + note = new StaveNote({ keys: keys, duration: '4', stem_direction: overrideStemDirection }); + } + assert.equal(note.getStemExtension(), expectedStemExtension, 'For ' + keys.toString() + ' StemExtension must be ' + expectedStemExtension); + const stave = new Stave(10, 10, 300, { spacing_between_lines_px: 20 }); + note.setStave(stave); + assert.equal(note.getStemExtension(), expectedStemExtension * 2, 'For wide staff ' + keys.toString() + ' StemExtension must be ' + expectedStemExtension * 2); + }); +} +function setStemDirectionDisplacement(assert) { + function getDisplacements(note) { + return note.noteHeads.map((noteHead) => noteHead.isDisplaced()); + } + const stemUpDisplacements = [false, true, false]; + const stemDownDisplacements = [true, false, false]; + const note = new StaveNote({ keys: ['c/5', 'd/5', 'g/5'], stem_direction: Stem.UP, duration: '4' }); + assert.deepEqual(getDisplacements(note), stemUpDisplacements); + note.setStemDirection(Stem.DOWN); + assert.deepEqual(getDisplacements(note), stemDownDisplacements); + note.setStemDirection(Stem.UP); + assert.deepEqual(getDisplacements(note), stemUpDisplacements); +} +function staveLine(assert) { + const stave = new Stave(10, 10, 300); + const note = new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }); + note.setStave(stave); + const props = note.getKeyProps(); + assert.equal(props[0].line, 0, 'C/4 on line 0'); + assert.equal(props[1].line, 1, 'E/4 on line 1'); + assert.equal(props[2].line, 2.5, 'A/4 on line 2.5'); + const ys = note.getYs(); + assert.equal(ys.length, 3, 'Chord should be rendered on three lines'); + assert.equal(ys[0], 100, 'Line for C/4'); + assert.equal(ys[1], 90, 'Line for E/4'); + assert.equal(ys[2], 75, 'Line for A/4'); +} +function width(assert) { + const note = new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }); + assert.throws(() => note.getWidth(), /UnformattedNote/, 'Unformatted note should have no width'); +} +function tickContext(assert) { + const stave = new Stave(10, 10, 400); + const note = new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }).setStave(stave); + new TickContext().addTickable(note).preFormat().setX(10).setPadding(0); + assert.expect(0); +} +function drawBasic(options, contextBuilder) { + const clef = options.params.clef; + const octaveShift = options.params.octaveShift; + const restKey = options.params.restKey; + const ctx = contextBuilder(options.elementId, 700, 180); + const stave = new Stave(10, 30, 750); + stave.setContext(ctx); + stave.addClef(clef); + stave.draw(); + const lowerKeys = ['c/', 'e/', 'a/']; + const higherKeys = ['c/', 'e/', 'a/']; + for (let k = 0; k < lowerKeys.length; k++) { + lowerKeys[k] = lowerKeys[k] + (4 + octaveShift); + higherKeys[k] = higherKeys[k] + (5 + octaveShift); + } + const restKeys = [restKey]; + const noteStructs = [ + { clef: clef, keys: higherKeys, duration: '1/2' }, + { clef: clef, keys: lowerKeys, duration: 'w' }, + { clef: clef, keys: higherKeys, duration: 'h' }, + { clef: clef, keys: lowerKeys, duration: 'q' }, + { clef: clef, keys: higherKeys, duration: '8' }, + { clef: clef, keys: lowerKeys, duration: '16' }, + { clef: clef, keys: higherKeys, duration: '32' }, + { clef: clef, keys: higherKeys, duration: '64' }, + { clef: clef, keys: higherKeys, duration: '128' }, + { clef: clef, keys: lowerKeys, duration: '1/2', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'w', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'h', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'q', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '8', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '16', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '32', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '64', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '128', stem_direction: Stem.DOWN }, + { clef: clef, keys: restKeys, duration: '1/2r' }, + { clef: clef, keys: restKeys, duration: 'wr' }, + { clef: clef, keys: restKeys, duration: 'hr' }, + { clef: clef, keys: restKeys, duration: 'qr' }, + { clef: clef, keys: restKeys, duration: '8r' }, + { clef: clef, keys: restKeys, duration: '16r' }, + { clef: clef, keys: restKeys, duration: '32r' }, + { clef: clef, keys: restKeys, duration: '64r' }, + { clef: clef, keys: restKeys, duration: '128r' }, + { keys: ['x/4'], duration: 'h' }, + ]; + options.assert.expect(noteStructs.length * 2); + const colorDescendants = (parentItem, color) => () => parentItem.querySelectorAll('*').forEach((child) => { + child.setAttribute('fill', color); + child.setAttribute('stroke', color); + }); + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25); + if (options.params.ui) { + const item = note.getSVGElement(); + if (item) { + item.addEventListener('mouseover', colorDescendants(item, 'green'), false); + item.addEventListener('mouseout', colorDescendants(item, 'black'), false); + } + } + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawBoundingBoxes(options, contextBuilder) { + const clef = options.params.clef; + const octaveShift = options.params.octaveShift; + const restKey = options.params.restKey; + const ctx = contextBuilder(options.elementId, 700, 180); + const stave = new Stave(10, 30, 750); + stave.setContext(ctx); + stave.addClef(clef); + stave.draw(); + const lowerKeys = ['c/', 'e/', 'a/']; + const higherKeys = ['c/', 'e/', 'a/']; + for (let k = 0; k < lowerKeys.length; k++) { + lowerKeys[k] = lowerKeys[k] + (4 + octaveShift); + higherKeys[k] = higherKeys[k] + (5 + octaveShift); + } + const restKeys = [restKey]; + const noteStructs = [ + { clef: clef, keys: higherKeys, duration: '1/2' }, + { clef: clef, keys: lowerKeys, duration: 'w' }, + { clef: clef, keys: higherKeys, duration: 'h' }, + { clef: clef, keys: lowerKeys, duration: 'q' }, + { clef: clef, keys: higherKeys, duration: '8' }, + { clef: clef, keys: lowerKeys, duration: '16' }, + { clef: clef, keys: higherKeys, duration: '32' }, + { clef: clef, keys: higherKeys, duration: '64' }, + { clef: clef, keys: higherKeys, duration: '128' }, + { clef: clef, keys: lowerKeys, duration: '1/2', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'w', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'h', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'q', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '8', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '16', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '32', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '64', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '128' }, + { clef: clef, keys: restKeys, duration: '1/2r' }, + { clef: clef, keys: restKeys, duration: 'wr' }, + { clef: clef, keys: restKeys, duration: 'hr' }, + { clef: clef, keys: restKeys, duration: 'qr' }, + { clef: clef, keys: restKeys, duration: '8r' }, + { clef: clef, keys: restKeys, duration: '16r' }, + { clef: clef, keys: restKeys, duration: '32r' }, + { clef: clef, keys: restKeys, duration: '64r' }, + { clef: clef, keys: restKeys, duration: '128r' }, + { keys: ['x/4'], duration: 'h' }, + ]; + options.assert.expect(noteStructs.length * 2); + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25, true, false); + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawBass(options, contextBuilder) { + options.assert.expect(40); + const ctx = contextBuilder(options.elementId, 600, 280); + const stave = new Stave(10, 10, 650); + stave.setContext(ctx); + stave.addClef('bass'); + stave.draw(); + const noteStructs = [ + { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '1/2' }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'w' }, + { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: 'h' }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'q' }, + { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '8' }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '16' }, + { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '32' }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'h', stem_direction: Stem.DOWN }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'q', stem_direction: Stem.DOWN }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '8', stem_direction: Stem.DOWN }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '16', stem_direction: Stem.DOWN }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '32', stem_direction: Stem.DOWN }, + { keys: ['r/4'], duration: '1/2r' }, + { keys: ['r/4'], duration: 'wr' }, + { keys: ['r/4'], duration: 'hr' }, + { keys: ['r/4'], duration: 'qr' }, + { keys: ['r/4'], duration: '8r' }, + { keys: ['r/4'], duration: '16r' }, + { keys: ['r/4'], duration: '32r' }, + { keys: ['x/4'], duration: 'h' }, + ]; + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25); + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function displacements(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 700, 155); + ctx.scale(0.9, 0.9); + const stave = new Stave(10, 10, 675); + stave.setContext(ctx); + stave.draw(); + const noteStructs = [ + { keys: ['g/3', 'a/3', 'c/4', 'd/4', 'e/4'], duration: '1/2' }, + { keys: ['g/3', 'a/3', 'c/4', 'd/4', 'e/4'], duration: 'w' }, + { keys: ['d/4', 'e/4', 'f/4'], duration: 'h' }, + { keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: 'q' }, + { keys: ['e/3', 'b/3', 'c/4', 'e/4', 'f/4', 'g/5', 'a/5'], duration: '8' }, + { keys: ['a/3', 'c/4', 'e/4', 'g/4', 'a/4', 'b/4'], duration: '16' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32' }, + { keys: ['c/4', 'e/4', 'a/4', 'a/4'], duration: '64' }, + { keys: ['g/3', 'c/4', 'd/4', 'e/4'], duration: 'h', stem_direction: Stem.DOWN }, + { keys: ['d/4', 'e/4', 'f/4'], duration: 'q', stem_direction: Stem.DOWN }, + { keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: '8', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'd/4', 'e/4', 'f/4', 'g/4', 'a/4'], duration: '16', stem_direction: Stem.DOWN }, + { keys: ['b/3', 'c/4', 'e/4', 'a/4', 'b/5', 'c/6', 'e/6'], duration: '32', stem_direction: Stem.DOWN }, + { + keys: ['b/3', 'c/4', 'e/4', 'a/4', 'b/5', 'c/6', 'e/6', 'e/6'], + duration: '64', + stem_direction: Stem.DOWN, + }, + ]; + options.assert.expect(noteStructs.length * 2); + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 45); + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawHarmonicAndMuted(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 1000, 180); + const stave = new Stave(10, 10, 950); + stave.setContext(ctx); + stave.draw(); + const noteStructs = [ + { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'wh' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'hh' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'qh' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '8h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '16h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '64h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '128h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2h', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'wh', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'hh', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'qh', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '8h', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '16h', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32h', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '64h', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '128h', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'wm' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'hm' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'qm' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '8m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '16m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '64m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '128m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2m', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'wm', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'hm', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'qm', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '8m', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '16m', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32m', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '64m', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '128m', stem_direction: Stem.DOWN }, + ]; + options.assert.expect(noteStructs.length * 2); + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, i * 25 + 5); + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawSlash(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 700, 180); + const stave = new Stave(10, 10, 650); + stave.setContext(ctx); + stave.draw(); + const notes = [ + { keys: ['b/4'], duration: '1/2s', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: 'ws', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: 'hs', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: 'qs', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '8s', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '16s', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '32s', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '64s', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '128s', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '1/2s', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: 'ws', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: 'hs', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: 'qs', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: '8s', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: '16s', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: '32s', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: '64s', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: '128s', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: '8s', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '8s', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '8s', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: '8s', stem_direction: Stem.UP }, + ]; + const stave_notes = notes.map((struct) => new StaveNote(struct)); + const beam1 = new Beam([stave_notes[16], stave_notes[17]]); + const beam2 = new Beam([stave_notes[18], stave_notes[19]]); + Formatter.FormatAndDraw(ctx, stave, stave_notes, false); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + options.assert.ok('Slash Note Heads'); +} +function drawKeyStyles(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 300, 280); + ctx.scale(3, 3); + const stave = new Stave(10, 0, 100); + const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: 'q' }) + .setStave(stave) + .addModifier(new Accidental('b'), 1) + .setKeyStyle(1, { shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue' }); + new TickContext().addTickable(note).preFormat().setX(25); + stave.setContext(ctx).draw(); + note.setContext(ctx).draw(); + options.assert.ok(note.getX() > 0, 'Note has X value'); + options.assert.ok(note.getYs().length > 0, 'Note has Y values'); +} +function drawNoteStyles(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 300, 280); + const stave = new Stave(10, 0, 100); + ctx.scale(3, 3); + const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: '8' }) + .setStave(stave) + .addModifier(new Accidental('b'), 1); + note.setStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); + new TickContext().addTickable(note).preFormat().setX(25); + stave.setContext(ctx).draw(); + note.setContext(ctx).draw(); + options.assert.ok(note.getX() > 0, 'Note has X value'); + options.assert.ok(note.getYs().length > 0, 'Note has Y values'); +} +function drawNoteStemStyles(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 300, 280); + const stave = new Stave(10, 0, 100); + ctx.scale(3, 3); + const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: 'q' }) + .setStave(stave) + .addModifier(new Accidental('b'), 1); + note.setStemStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); + new TickContext().addTickable(note).preFormat().setX(25); + stave.setContext(ctx).draw(); + note.setContext(ctx).draw(); + options.assert.ok('Note Stem Style'); +} +function drawNoteStemLengths(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 975, 150); + const stave = new Stave(10, 10, 975); + stave.setContext(ctx).draw(); + const keys = [ + 'e/3', + 'f/3', + 'g/3', + 'a/3', + 'b/3', + 'c/4', + 'd/4', + 'e/4', + 'f/4', + 'g/4', + 'f/5', + 'g/5', + 'a/5', + 'b/5', + 'c/6', + 'd/6', + 'e/6', + 'f/6', + 'g/6', + 'a/6', + ]; + const notes = []; + let note; + let i; + for (i = 0; i < keys.length; i++) { + let duration = 'q'; + if (i % 2 === 1) { + duration = '8'; + } + note = new StaveNote({ keys: [keys[i]], duration, auto_stem: true }).setStave(stave); + new TickContext().addTickable(note); + note.setContext(ctx); + notes.push(note); + } + const whole_keys = ['e/3', 'a/3', 'f/5', 'a/5', 'd/6', 'a/6']; + for (i = 0; i < whole_keys.length; i++) { + note = new StaveNote({ keys: [whole_keys[i]], duration: 'w' }).setStave(stave); + new TickContext().addTickable(note); + note.setContext(ctx); + notes.push(note); + } + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok('Note Stem Length'); +} +function drawNoteStylesWithFlag(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 300, 280); + const stave = new Stave(10, 0, 100); + ctx.scale(3, 3); + const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: '8' }) + .setStave(stave) + .addModifier(new Accidental('b'), 1); + note.setFlagStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); + new TickContext().addTickable(note).preFormat().setX(25); + stave.setContext(ctx).draw(); + note.setContext(ctx).draw(); + options.assert.ok(note.getX() > 0, 'Note has X value'); + options.assert.ok(note.getYs().length > 0, 'Note has Y values'); +} +function drawBeamStyles(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 160); + const stave = new Stave(10, 10, 380); + stave.setStyle({ strokeStyle: '#EEAAEE', lineWidth: 3 }); + stave.setContext(ctx); + stave.draw(); + const notes = [ + { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '8', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: '8', stem_direction: Stem.UP }, + { keys: ['d/6'], duration: '8', stem_direction: Stem.DOWN }, + { keys: ['c/6', 'd/6'], duration: '8', stem_direction: Stem.DOWN }, + { keys: ['d/6', 'e/6'], duration: '8', stem_direction: Stem.DOWN }, + { keys: ['e/6', 'f/6'], duration: '8', stem_direction: Stem.DOWN }, + ]; + const staveNotes = notes.map((note) => new StaveNote(note)); + const beam1 = new Beam(staveNotes.slice(0, 2)); + const beam2 = new Beam(staveNotes.slice(3, 5)); + const beam3 = new Beam(staveNotes.slice(5, 7)); + const beam4 = new Beam(staveNotes.slice(7, 9)); + beam1.setStyle({ fillStyle: 'blue', strokeStyle: 'blue' }); + staveNotes[0].setKeyStyle(0, { fillStyle: 'purple' }); + staveNotes[0].setStemStyle({ strokeStyle: 'green' }); + staveNotes[1].setStemStyle({ strokeStyle: 'orange' }); + staveNotes[1].setKeyStyle(0, { fillStyle: 'darkturquoise' }); + staveNotes[5].setStyle({ fillStyle: 'tomato', strokeStyle: 'tomato' }); + beam3.setStyle({ shadowBlur: 4, shadowColor: 'blue' }); + staveNotes[9].setLedgerLineStyle({ fillStyle: 'lawngreen', strokeStyle: 'lawngreen', lineWidth: 1 }); + staveNotes[9].setFlagStyle({ fillStyle: 'orange', strokeStyle: 'orange' }); + Formatter.FormatAndDraw(ctx, stave, staveNotes, false); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + beam3.setContext(ctx).draw(); + beam4.setContext(ctx).draw(); + options.assert.ok('draw beam styles'); +} +function dotsAndFlagsStemUp(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + ctx.scale(1.0, 1.0); + const stave = new Stave(10, 10, 975); + const notes = [ + staveNote({ keys: ['f/4'], duration: '4', stem_direction: Stem.UP }), + staveNote({ keys: ['f/4'], duration: '8', stem_direction: Stem.UP }), + staveNote({ keys: ['f/4'], duration: '16', stem_direction: Stem.UP }), + staveNote({ keys: ['f/4'], duration: '32', stem_direction: Stem.UP }), + staveNote({ keys: ['f/4'], duration: '64', stem_direction: Stem.UP }), + staveNote({ keys: ['f/4'], duration: '128', stem_direction: Stem.UP }), + staveNote({ keys: ['g/4'], duration: '4', stem_direction: Stem.UP }), + staveNote({ keys: ['g/4'], duration: '8', stem_direction: Stem.UP }), + staveNote({ keys: ['g/4'], duration: '16', stem_direction: Stem.UP }), + staveNote({ keys: ['g/4'], duration: '32' }), + staveNote({ keys: ['g/4'], duration: '64', stem_direction: Stem.UP }), + staveNote({ keys: ['g/4'], duration: '128', stem_direction: Stem.UP }), + ]; + Dot.buildAndAttach(notes, { all: true }); + Dot.buildAndAttach([notes[5], notes[11]], { all: true }); + stave.setContext(ctx).draw(); + for (let i = 0; i < notes.length; ++i) { + draw(notes[i], stave, ctx, i * 65); + } + options.assert.ok(true, 'Full Dot'); +} +function dotsAndFlagsStemDown(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 160); + ctx.scale(1.0, 1.0); + const stave = new Stave(10, 10, 975); + const staveNotes = [ + staveNote({ keys: ['e/5'], duration: '4', stem_direction: Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '8', stem_direction: Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '16', stem_direction: Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '32', stem_direction: Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '64', stem_direction: Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '128', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '4', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '8', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '16', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '32', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '64', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '128', stem_direction: Stem.DOWN }), + ]; + Dot.buildAndAttach(staveNotes, { all: true }); + stave.setContext(ctx).draw(); + for (let i = 0; i < staveNotes.length; ++i) { + draw(staveNotes[i], stave, ctx, i * 65); + } + options.assert.ok(true, 'Full Dot'); +} +function dotsAndBeamsUp(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + ctx.scale(1.0, 1.0); + const stave = new Stave(10, 10, 975); + const staveNotes = [ + staveNote({ keys: ['f/4'], duration: '8', stem_direction: Stem.UP }), + staveNote({ keys: ['f/4'], duration: '16', stem_direction: Stem.UP }), + staveNote({ keys: ['f/4'], duration: '32', stem_direction: Stem.UP }), + staveNote({ keys: ['f/4'], duration: '64', stem_direction: Stem.UP }), + staveNote({ keys: ['f/4'], duration: '128', stem_direction: Stem.UP }), + staveNote({ keys: ['g/4'], duration: '8', stem_direction: Stem.UP }), + staveNote({ keys: ['g/4'], duration: '16', stem_direction: Stem.UP }), + staveNote({ keys: ['g/4'], duration: '32' }), + staveNote({ keys: ['g/4'], duration: '64', stem_direction: Stem.UP }), + staveNote({ keys: ['g/4'], duration: '128', stem_direction: Stem.UP }), + ]; + Dot.buildAndAttach(staveNotes, { all: true }); + Dot.buildAndAttach([staveNotes[4], staveNotes[9]], { all: true }); + const beam = new Beam(staveNotes); + stave.setContext(ctx).draw(); + for (let i = 0; i < staveNotes.length; ++i) { + draw(staveNotes[i], stave, ctx, i * 65); + } + beam.setContext(ctx).draw(); + options.assert.ok(true, 'Full Dot'); +} +function dotsAndBeamsDown(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 160); + ctx.scale(1.0, 1.0); + const stave = new Stave(10, 10, 975); + const staveNotes = [ + staveNote({ keys: ['e/5'], duration: '8', stem_direction: Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '16', stem_direction: Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '32', stem_direction: Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '64', stem_direction: Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '128', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '8', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '16', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '32', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '64', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '128', stem_direction: Stem.DOWN }), + ]; + Dot.buildAndAttach(staveNotes, { all: true }); + const beam = new Beam(staveNotes); + stave.setContext(ctx).draw(); + for (let i = 0; i < staveNotes.length; ++i) { + draw(staveNotes[i], stave, ctx, i * 65); + } + beam.setContext(ctx).draw(); + options.assert.ok(true, 'Full Dot'); +} +function noteHeadsSimple(options) { + const vf = VexFlowTests.makeFactory(options, 800, 250); + const score = vf.EasyScore(); + const system1 = vf.System({ y: 100, x: 50, width: 200 }); + system1 + .addStave({ + voices: [ + score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q/r, a4/h/r')]), + score.voice(score.notes('g4/w')), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + const system2 = vf.System({ y: 100, x: 250, width: 150 }); + system2.addStave({ + voices: [score.voice(score.notes('b4/h, b4/h/r')), score.voice(score.notes('b4/w'))], + }); + const system3 = vf.System({ y: 100, x: 400, width: 150 }); + system3.addStave({ + voices: [score.voice(score.notes('d5/h, d5/h/r')), score.voice(score.notes('e4/w'))], + }); + const system4 = vf.System({ y: 100, x: 550, width: 150 }); + system4.addStave({ + voices: [ + score.voice(score.notes('e4/q, e4/q/r, e4/h/r')), + score.voice(score.notes('e4/8, e4/8/r, e4/q/r, e4/h/r')), + ], + }); + vf.draw(); + options.assert.expect(0); +} +function noPadding(options) { + const vf = VexFlowTests.makeFactory(options, 800, 500); + const score = vf.EasyScore(); + function newStave(y, noPadding) { + let system = vf.System({ y, x: 50, width: 200, noPadding }); + system + .addStave({ + voices: [ + score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q, a4/h')]), + score.voice(score.notes('g4/w')), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + system = vf.System({ y, x: 250, width: 150, noPadding }); + system.addStave({ + voices: [score.voice(score.notes('b4/h, b4/h')), score.voice(score.notes('b4/w'))], + }); + system = vf.System({ y, x: 400, width: 150, noPadding }); + system.addStave({ + voices: [score.voice(score.notes('d5/h, d5/h')), score.voice(score.notes('e4/w'))], + }); + system = vf.System({ y, x: 550, width: 150, noPadding }); + system.addStave({ + voices: [score.voice(score.notes('e4/q, e4/q, e4/h')), score.voice(score.notes('e4/8, e4/8, e4/q, e4/h'))], + }); + } + newStave(100, true); + newStave(200, false); + vf.draw(); + options.assert.expect(0); +} +function noteHeadsHidden(options) { + const vf = VexFlowTests.makeFactory(options, 800, 250); + const score = vf.EasyScore(); + const system1 = vf.System({ y: 100, x: 50, width: 200 }); + const notes1 = score.notes('g4/w'); + notes1[0].render_options.draw = false; + system1 + .addStave({ + voices: [ + score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q/r, a4/h/r')]), + score.voice(notes1), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + const system2 = vf.System({ y: 100, x: 250, width: 150 }); + const notes2 = score.notes('b4/w'); + notes2[0].render_options.draw = false; + system2.addStave({ + voices: [score.voice(score.notes('b4/h, b4/h/r')), score.voice(notes2)], + }); + const system3 = vf.System({ y: 100, x: 400, width: 150 }); + system3.addStave({ + voices: [score.voice(score.notes('d5/h, d5/h/r')), score.voice(score.notes('e4/w'))], + }); + const system4 = vf.System({ y: 100, x: 550, width: 150 }); + const notes4 = score.notes('e4/q, e4/q/r, e4/h/r'); + notes4[0].render_options.draw = false; + notes4[2].render_options.draw = false; + system4.addStave({ + voices: [score.voice(notes4), score.voice(score.notes('e4/8, e4/8/r, e4/q/r, e4/h/r'))], + }); + vf.draw(); + options.assert.expect(0); +} +function centerAlignedRest(options) { + const f = VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); + const note = f.StaveNote({ keys: ['b/4'], duration: '1r', align_center: true }); + const voice = f.Voice().setStrict(false).addTickables([note]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function centerAlignedRestFermata(options) { + const f = VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); + const note = f + .StaveNote({ keys: ['b/4'], duration: '1r', align_center: true }) + .addModifier(new Articulation('a@a').setPosition(3), 0); + const voice = f.Voice().setStrict(false).addTickables([note]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function centerAlignedRestAnnotation(options) { + const f = VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); + const note = f + .StaveNote({ keys: ['b/4'], duration: '1r', align_center: true }) + .addModifier(new Annotation('Whole measure rest').setVerticalJustification(AnnotationVerticalJustify.TOP), 0); + const voice = f.Voice().setStrict(false).addTickables([note]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function centerAlignedNoteMultiModifiers(options) { + const f = VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); + function newFinger(num, pos) { + return new FretHandFinger(num).setPosition(pos); + } + const note = f + .StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '4', align_center: true }) + .addModifier(new Annotation('Test').setPosition(3), 0) + .addStroke(0, new Stroke(2)) + .addModifier(new Accidental('#'), 1) + .addModifier(newFinger('3', Modifier.Position.LEFT), 0) + .addModifier(newFinger('2', Modifier.Position.LEFT), 2) + .addModifier(newFinger('1', Modifier.Position.RIGHT), 1) + .addModifier(new StringNumber('4').setPosition(Modifier.Position.BELOW), 2); + Dot.buildAndAttach([note], { all: true }); + const voice = f.Voice().setStrict(false).addTickables([note]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function centerAlignedMultiVoice(options) { + const f = VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('3/8'); + const custom_duration = new Fraction(3, 8); + const notes0 = [ + f.StaveNote({ + keys: ['c/4'], + duration: '1r', + align_center: true, + duration_override: custom_duration, + }), + ]; + const createStaveNote = (struct) => f.StaveNote(struct); + const notes1 = [ + { keys: ['b/4'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + ].map(createStaveNote); + notes1[1].addModifier(f.Accidental({ type: '#' }), 0); + f.Beam({ notes: notes1 }); + const voice0 = f.Voice({ time: '3/8' }).setStrict(false).addTickables(notes0); + const voice1 = f.Voice({ time: '3/8' }).setStrict(false).addTickables(notes1); + f.Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave); + f.draw(); + options.assert.ok(true); +} +VexFlowTests.register(StaveNoteTests); +export { StaveNoteTests }; diff --git a/build/esm/tests/stavetie_tests.js b/build/esm/tests/stavetie_tests.js new file mode 100644 index 0000000000..ff9194fbb5 --- /dev/null +++ b/build/esm/tests/stavetie_tests.js @@ -0,0 +1,108 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Stem } from '../src/stem.js'; +const StaveTieTests = { + Start() { + QUnit.module('StaveTie'); + const run = VexFlowTests.runTests; + run('Simple StaveTie', simple); + run('Chord StaveTie', chord); + run('Stem Up StaveTie', stemUp); + run('No End Note With Clef', noEndNote1); + run('No End Note', noEndNote2); + run('No Start Note With Clef', noStartNote1); + run('No Start Note', noStartNote2); + run('Set Direction Down', setDirectionDown); + run('Set Direction Up', setDirectionUp); + }, +}; +function createTest(notesData, setupTies) { + return (options) => { + const factory = VexFlowTests.makeFactory(options, 300); + const stave = factory.Stave(); + const score = factory.EasyScore(); + const notes = score.notes(notesData[0], notesData[1]); + const voice = score.voice(notes); + setupTies(factory, notes, stave); + factory.Formatter().joinVoices([voice]).formatToStave([voice], stave); + factory.draw(); + options.assert.ok(true); + }; +} +const simple = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1], + last_indices: [0, 1], + }); +}); +const chord = createTest(['(d4 e4 f4)/2, (cn4 f#4 a4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1, 2], + last_indices: [0, 1, 2], + }); +}); +const stemUp = createTest(['(d4 e4 f4)/2, (cn4 f#4 a4)', { stem: 'up' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1, 2], + last_indices: [0, 1, 2], + }); +}); +const noEndNote1 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes, stave) => { + stave.addEndClef('treble'); + f.StaveTie({ + from: notes[1], + first_indices: [2], + last_indices: [2], + text: 'slow.', + }); +}); +const noEndNote2 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[1], + first_indices: [2], + last_indices: [2], + text: 'slow.', + }); +}); +const noStartNote1 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes, stave) => { + stave.addClef('treble'); + f.StaveTie({ + to: notes[0], + first_indices: [2], + last_indices: [2], + text: 'H', + }); +}); +const noStartNote2 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + to: notes[0], + first_indices: [2], + last_indices: [2], + text: 'H', + }); +}); +const setDirectionDown = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1], + last_indices: [0, 1], + options: { direction: Stem.DOWN }, + }); +}); +const setDirectionUp = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1], + last_indices: [0, 1], + options: { direction: Stem.UP }, + }); +}); +VexFlowTests.register(StaveTieTests); +export { StaveTieTests }; diff --git a/build/esm/tests/stringnumber_tests.js b/build/esm/tests/stringnumber_tests.js new file mode 100644 index 0000000000..63ab45f459 --- /dev/null +++ b/build/esm/tests/stringnumber_tests.js @@ -0,0 +1,283 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Glyph } from '../src/glyph.js'; +import { Renderer } from '../src/renderer.js'; +import { Stave } from '../src/stave.js'; +import { BarlineType } from '../src/stavebarline.js'; +import { Stroke } from '../src/strokes.js'; +const StringNumberTests = { + Start() { + QUnit.module('StringNumber'); + const run = VexFlowTests.runTests; + run('String Number In Notation', drawMultipleMeasures); + run('String Number In Notation - no circle', drawMultipleMeasures, { drawCircle: false }); + run('Fret Hand Finger In Notation', drawFretHandFingers); + run('Multi Voice With Strokes, String & Finger Numbers', multi); + run('Complex Measure With String & Finger Numbers', drawAccidentals); + run('Shifted Notehead, Multiple Modifiers', shiftedNoteheadMultipleModifiers); + }, +}; +function drawMultipleMeasures(options) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y; + const f = VexFlowTests.makeFactory(options, 775, 200); + const score = f.EasyScore(); + const stave1 = f.Stave({ width: 300 }).setEndBarType(BarlineType.DOUBLE).addClef('treble'); + const notes1 = score.notes('(c4 e4 g4)/4., (c5 e5 g5)/8, (c4 f4 g4)/4, (c4 f4 g4)/4', { stem: 'down' }); + notes1[0] + .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_a = options.params) === null || _a === void 0 ? void 0 : _a.drawCircle), 0) + .addModifier(f.StringNumber({ number: '4', position: 'left' }, (_b = options.params) === null || _b === void 0 ? void 0 : _b.drawCircle), 1) + .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_c = options.params) === null || _c === void 0 ? void 0 : _c.drawCircle), 2); + notes1[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_d = options.params) === null || _d === void 0 ? void 0 : _d.drawCircle), 0) + .addModifier(f.Accidental({ type: '#' }).setAsCautionary(), 1) + .addModifier(f + .StringNumber({ number: '3', position: 'above' }, (_e = options.params) === null || _e === void 0 ? void 0 : _e.drawCircle) + .setLastNote(notes1[3]) + .setLineEndType(Renderer.LineEndType.DOWN), 2); + notes1[2] + .addModifier(f.StringNumber({ number: '5', position: 'left' }, (_f = options.params) === null || _f === void 0 ? void 0 : _f.drawCircle), 0) + .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_g = options.params) === null || _g === void 0 ? void 0 : _g.drawCircle), 2) + .addModifier(f.Accidental({ type: '#' }), 1); + notes1[3] + .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_h = options.params) === null || _h === void 0 ? void 0 : _h.drawCircle).setOffsetY(7), 0) + .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_j = options.params) === null || _j === void 0 ? void 0 : _j.drawCircle).setOffsetY(6), 1) + .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_k = options.params) === null || _k === void 0 ? void 0 : _k.drawCircle).setOffsetY(-6), 2); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) + .setEndBarType(BarlineType.DOUBLE); + const notes2 = score.notes('(c4 e4 g4)/4, (c5 e5 g5), (c4 f4 g4), (c4 f4 g4)', { stem: 'up' }); + notes2[0] + .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_l = options.params) === null || _l === void 0 ? void 0 : _l.drawCircle), 0) + .addModifier(f.StringNumber({ number: '4', position: 'left' }, (_m = options.params) === null || _m === void 0 ? void 0 : _m.drawCircle), 1) + .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_o = options.params) === null || _o === void 0 ? void 0 : _o.drawCircle), 2); + notes2[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_p = options.params) === null || _p === void 0 ? void 0 : _p.drawCircle), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f + .StringNumber({ number: '3', position: 'above' }, (_q = options.params) === null || _q === void 0 ? void 0 : _q.drawCircle) + .setLastNote(notes2[3]) + .setDashed(false), 2); + notes2[2] + .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_r = options.params) === null || _r === void 0 ? void 0 : _r.drawCircle), 2) + .addModifier(f.Accidental({ type: '#' }), 1); + notes2[3] + .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_s = options.params) === null || _s === void 0 ? void 0 : _s.drawCircle).setOffsetY(7), 0) + .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_t = options.params) === null || _t === void 0 ? void 0 : _t.drawCircle).setOffsetY(6), 1) + .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_u = options.params) === null || _u === void 0 ? void 0 : _u.drawCircle).setOffsetY(-6), 2); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + const stave3 = f + .Stave({ x: stave2.getWidth() + stave2.getX(), y: stave2.getY(), width: 150 }) + .setEndBarType(BarlineType.END); + const notesBar3 = score.notes('(c4 e4 g4 a4)/1.'); + notesBar3[0] + .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_v = options.params) === null || _v === void 0 ? void 0 : _v.drawCircle), 0) + .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_w = options.params) === null || _w === void 0 ? void 0 : _w.drawCircle), 1) + .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_x = options.params) === null || _x === void 0 ? void 0 : _x.drawCircle), 2) + .addModifier(f.StringNumber({ number: '2', position: 'above' }, (_y = options.params) === null || _y === void 0 ? void 0 : _y.drawCircle), 3); + const voice3 = score.voice(notesBar3, { time: '6/4' }); + f.Formatter().joinVoices([voice3]).formatToStave([voice3], stave3); + f.draw(); + options.assert.ok(true, 'String Number'); +} +function drawFretHandFingers(options) { + const f = VexFlowTests.makeFactory(options, 725, 200); + const score = f.EasyScore(); + const stave1 = f.Stave({ width: 350 }).setEndBarType(BarlineType.DOUBLE).addClef('treble'); + const notes1 = score.notes('(c4 e4 g4)/4, (c5 e5 g5), (c4 f4 g4), (c4 f4 g4)', { stem: 'down' }); + notes1[0] + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2); + notes1[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2); + notes1[2] + .addModifier(f.Fingering({ number: '3', position: 'below' }), 0) + .addModifier(f.Fingering({ number: '4', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'above' }), 2) + .addModifier(f.Accidental({ type: '#' }), 1); + notes1[3] + .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) + .addModifier(f.StringNumber({ number: '5', position: 'right' }).setOffsetY(7), 0) + .addModifier(f.Fingering({ number: '4', position: 'right' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'right' }).setOffsetY(6), 1) + .addModifier(f.Fingering({ number: '0', position: 'right' }).setOffsetY(-5), 2) + .addModifier(f.StringNumber({ number: '3', position: 'right' }).setOffsetY(-6), 2); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 350 }) + .setEndBarType(BarlineType.END); + const notes2 = score.notes('(c4 e4 g4)/4., (c5 e5 g5)/8, (c4 f4 g4)/8, (c4 f4 g4)/4.[stem="down"]', { + stem: 'up', + }); + notes2[0] + .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'above' }), 2); + notes2[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2); + notes2[2] + .addModifier(f.Fingering({ number: '3', position: 'below' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1) + .addModifier(f.Fingering({ number: '1', position: 'right' }), 2) + .addModifier(f.Accidental({ type: '#' }), 2); + notes2[3] + .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) + .addModifier(f.StringNumber({ number: '5', position: 'right' }).setOffsetY(7), 0) + .addModifier(f.Fingering({ number: '4', position: 'right' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'right' }).setOffsetY(6), 1) + .addModifier(f.Fingering({ number: '1', position: 'right' }).setOffsetY(-6), 2) + .addModifier(f.StringNumber({ number: '3', position: 'right' }).setOffsetY(-6), 2); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + f.draw(); + options.assert.ok(true, 'String Number'); +} +function multi(options) { + const f = VexFlowTests.makeFactory(options, 700, 200); + const score = f.EasyScore(); + const stave = f.Stave(); + const notes1 = score.notes('(c4 e4 g4)/4, (a3 e4 g4), (c4 d4 a4), (c4 d4 a4)', { stem: 'up' }); + notes1[0] + .addStroke(0, new Stroke(5)) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2) + .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '3', position: 'above' }), 2); + notes1[1] + .addStroke(0, new Stroke(6)) + .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1) + .addModifier(f.StringNumber({ number: '3', position: 'above' }), 2) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2); + notes1[2] + .addStroke(0, new Stroke(2)) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '0', position: 'right' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1) + .addModifier(f.Fingering({ number: '1', position: 'left' }), 2) + .addModifier(f.StringNumber({ number: '3', position: 'right' }), 2); + notes1[3] + .addStroke(0, new Stroke(1)) + .addModifier(f.StringNumber({ number: '3', position: 'left' }), 2) + .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1); + const notes2 = score.notes('e3/8, e3, e3, e3, e3, e3, e3, e3', { stem: 'down' }); + notes2[0] + .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) + .addModifier(f.StringNumber({ number: '6', position: 'below' }), 0); + notes2[2].addModifier(f.Accidental({ type: '#' }), 0); + notes2[4].addModifier(f.Fingering({ number: '0', position: 'left' }), 0); + notes2[4].addModifier(f.StringNumber({ number: '6', position: 'left' }).setOffsetX(15).setOffsetY(18), 0); + const voices = [score.voice(notes2), score.voice(notes1)]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.Beam({ notes: notes2.slice(0, 4) }); + f.Beam({ notes: notes2.slice(4, 8) }); + f.draw(); + options.assert.ok(true, 'Strokes Test Multi Voice'); +} +function drawAccidentals(options) { + const f = VexFlowTests.makeFactory(options, 750); + const glyphScale = 39; + const clefWidth = Glyph.getWidth('gClef', glyphScale); + const notes = [ + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5', 'e/5', 'g/5'], stem_direction: 1, duration: '4' }), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: 1, duration: '4' }), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: -1, duration: '4' }), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: -1, duration: '4' }), + ]; + notes[0] + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '2', position: 'left' }), 1) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 3) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Fingering({ number: '2', position: 'right' }), 4) + .addModifier(f.StringNumber({ number: '3', position: 'right' }), 4) + .addModifier(f.Accidental({ type: '#' }), 4) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 5) + .addModifier(f.Accidental({ type: '#' }), 5); + notes[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Accidental({ type: '#' }), 4) + .addModifier(f.Accidental({ type: '#' }), 5); + notes[2] + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '2', position: 'left' }), 1) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 3) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Fingering({ number: '2', position: 'right' }), 4) + .addModifier(f.StringNumber({ number: '3', position: 'right' }), 4) + .addModifier(f.Accidental({ type: '#' }), 4) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 5) + .addModifier(f.Accidental({ type: '#' }), 5); + notes[3] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Accidental({ type: '#' }), 4) + .addModifier(f.Accidental({ type: '#' }), 5); + const voice = f.Voice().addTickables(notes); + const ctx = f.getContext(); + const formatter = f.Formatter().joinVoices([voice]); + const stavePadding = clefWidth + Stave.defaultPadding + 10; + const nwidth = Math.max(formatter.preCalculateMinTotalWidth([voice]), 490 - stavePadding); + formatter.format([voice], nwidth); + const stave = f + .Stave({ x: 0, y: 0, width: nwidth + stavePadding }) + .setContext(ctx) + .setEndBarType(BarlineType.DOUBLE) + .addClef('treble') + .draw(); + voice.draw(ctx, stave); + options.assert.ok(true, 'String Number'); +} +function shiftedNoteheadMultipleModifiers(options) { + const f = VexFlowTests.makeFactory(options, 900, 150); + const score = f.EasyScore(); + score.set({ time: '6/4' }); + const stave = f.Stave({ width: 900 }).setEndBarType(BarlineType.END).addClef('treble'); + const notes = ['A4 B4', 'B4 C5', 'A4 B#4', 'B4 C#5', 'A#4 B#4', 'B#4 C#5'] + .map((keys) => score.notes(`(${keys})/q`)) + .flat(); + notes.forEach((note) => { + note + .addModifier(f.StringNumber({ number: '2', position: 'left' }, true), 1) + .addModifier(f.StringNumber({ number: '2', position: 'right' }, true), 1); + }); + const voice = score.voice(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'String Number'); +} +VexFlowTests.register(StringNumberTests); +export { StringNumberTests }; diff --git a/build/esm/tests/strokes_tests.js b/build/esm/tests/strokes_tests.js new file mode 100644 index 0000000000..13671c5443 --- /dev/null +++ b/build/esm/tests/strokes_tests.js @@ -0,0 +1,275 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Barline, Beam, Bend, Stroke } from '../src/index.js'; +const StrokesTests = { + Start() { + QUnit.module('Strokes'); + const run = VexFlowTests.runTests; + run('Strokes - Brush/Roll/Rasquedo', brushRollRasquedo); + run('Strokes - Arpeggio directionless (without arrows)', arpeggioDirectionless); + run('Strokes - Multi Voice', multiVoice); + run('Strokes - Notation and Tab', notesWithTab); + run('Strokes - Multi-Voice Notation and Tab', multiNotationAndTab); + }, +}; +function brushRollRasquedo(options) { + const f = VexFlowTests.makeFactory(options, 600, 200); + const score = f.EasyScore(); + const stave1 = f.Stave({ width: 250 }).setEndBarType(Barline.type.DOUBLE); + const notes1 = score.notes('(a3 e4 a4)/4, (c4 e4 g4), (c4 e4 g4), (c4 e4 g4)', { stem: 'up' }); + notes1[0].addStroke(0, new Stroke(1)); + notes1[1] + .addStroke(0, new Stroke(2)) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Accidental({ type: '#' }), 0); + notes1[2].addStroke(0, new Stroke(1)); + notes1[3].addStroke(0, new Stroke(2)); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) + .setEndBarType(Barline.type.DOUBLE); + const notes2 = score.notes('(c4 d4 g4)/4, (c4 d4 g4), (c4 d4 g4), (c4 d4 a4)', { stem: 'up' }); + notes2[0].addStroke(0, new Stroke(3)); + notes2[1].addStroke(0, new Stroke(4)); + notes2[2].addStroke(0, new Stroke(5)); + notes2[3] + .addStroke(0, new Stroke(6)) + .addModifier(f.Accidental({ type: 'bb' }), 0) + .addModifier(f.Accidental({ type: 'bb' }), 1) + .addModifier(f.Accidental({ type: 'bb' }), 2); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + f.draw(); + options.assert.ok(true, 'Brush/Roll/Rasquedo'); +} +function arpeggioDirectionless(options) { + const f = VexFlowTests.makeFactory(options, 700, 200); + const score = f.EasyScore(); + const stave1 = f.Stave({ x: 100, width: 500 }).setEndBarType(Barline.type.DOUBLE); + const notes1 = score.notes('(g4 b4 d5)/4, (g4 b4 d5 g5), (g4 b4 d5 g5), (g4 b4 d5)', { stem: 'up' }); + const graceNoteStructs = [ + { keys: ['e/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['g/4'], duration: '32' }, + ]; + const graceNotes = graceNoteStructs.map((graceNoteStruct) => f.GraceNote(graceNoteStruct)); + const graceNoteGroup = f.GraceNoteGroup({ notes: graceNotes, slur: false }); + graceNoteGroup.beamNotes(); + notes1[0].addStroke(0, new Stroke(7)); + notes1[1] + .addStroke(0, new Stroke(7)) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Accidental({ type: '#' }), 3); + notes1[2] + .addStroke(0, new Stroke(7)) + .addModifier(f.Accidental({ type: 'b' }), 1) + .addModifier(graceNoteGroup, 0); + notes1[3].addStroke(0, new Stroke(7)).addModifier(f.NoteSubGroup({ + notes: [f.ClefNote({ type: 'treble', options: { size: 'default', annotation: '8va' } })], + }), 0); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + f.draw(); + options.assert.ok(true, 'Arpeggio directionless (without arrows)'); +} +function multiVoice(options) { + const f = VexFlowTests.makeFactory(options, 500, 200); + const score = f.EasyScore(); + const stave = f.Stave(); + const notes1 = score.notes('(c4 e4 g4)/4, (c4 e4 g4), (c4 d4 a4), (c4 d4 a4)', { stem: 'up' }); + notes1[0].addStroke(0, new Stroke(5)); + notes1[1] + .addStroke(0, new Stroke(6)) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 2); + notes1[2].addStroke(0, new Stroke(2)); + notes1[3].addStroke(0, new Stroke(1)); + const notes2 = score.notes('e3/8, e3, e3, e3, e3, e3, e3, e3', { stem: 'down' }); + f.Beam({ notes: notes2.slice(0, 4) }); + f.Beam({ notes: notes2.slice(4, 8) }); + const voices = [notes1, notes2].map((notes) => score.voice(notes)); + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Strokes Test Multi Voice'); +} +function multiNotationAndTab(options) { + const f = VexFlowTests.makeFactory(options, 400, 275); + const score = f.EasyScore(); + const stave = f.Stave().addClef('treble'); + const notes1 = score.notes('(g4 b4 e5)/4, (g4 b4 e5), (g4 b4 e5), (g4 b4 e5)', { stem: 'up' }); + notes1[0].addStroke(0, new Stroke(3, { all_voices: false })); + notes1[1].addStroke(0, new Stroke(6)); + notes1[2].addStroke(0, new Stroke(2, { all_voices: false })); + notes1[3].addStroke(0, new Stroke(1)); + const notes2 = score.notes('g3/4, g3, g3, g3', { stem: 'down' }); + f.TabStave({ y: 100 }).addClef('tab').setNoteStartX(stave.getNoteStartX()); + const tabNotes1 = [ + f.TabNote({ + positions: [ + { str: 3, fret: 0 }, + { str: 2, fret: 0 }, + { str: 1, fret: 1 }, + ], + duration: '4', + }), + f.TabNote({ + positions: [ + { str: 3, fret: 0 }, + { str: 2, fret: 0 }, + { str: 1, fret: 1 }, + ], + duration: '4', + }), + f.TabNote({ + positions: [ + { str: 3, fret: 0 }, + { str: 2, fret: 0 }, + { str: 1, fret: 1 }, + ], + duration: '4', + }), + f.TabNote({ + positions: [ + { str: 3, fret: 0 }, + { str: 2, fret: 0 }, + { str: 1, fret: 1 }, + ], + duration: '4', + }), + ]; + tabNotes1[0].addStroke(0, new Stroke(3, { all_voices: false })); + tabNotes1[1].addStroke(0, new Stroke(6)); + tabNotes1[2].addStroke(0, new Stroke(2, { all_voices: false })); + tabNotes1[3].addStroke(0, new Stroke(1)); + const tabNotes2 = [ + f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), + f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), + f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), + f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), + ]; + const voices = [notes1, notes2, tabNotes1, tabNotes2].map((notes) => score.voice(notes)); + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Strokes Test Notation & Tab Multi Voice'); +} +function notesWithTab(options) { + const f = VexFlowTests.makeFactory(options, 500, 300); + const stave = f.Stave({ x: 15, y: 40, width: 450 }).addClef('treble'); + const notes = [ + f + .StaveNote({ keys: ['b/4', 'd/5', 'g/5'], stem_direction: -1, duration: '4' }) + .addModifier(f.Accidental({ type: 'b' }), 1) + .addModifier(f.Accidental({ type: 'b' }), 0), + f.StaveNote({ keys: ['c/5', 'd/5'], stem_direction: -1, duration: '4' }), + f.StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5'], stem_direction: 1, duration: '8' }), + f + .StaveNote({ keys: ['a/3', 'e/4', 'a/4', 'c/5', 'e/5', 'a/5'], stem_direction: 1, duration: '8' }) + .addModifier(f.Accidental({ type: '#' }), 3), + f.StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5'], stem_direction: 1, duration: '8' }), + f + .StaveNote({ keys: ['a/3', 'e/4', 'a/4', 'c/5', 'f/5', 'a/5'], stem_direction: 1, duration: '8' }) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Accidental({ type: '#' }), 4), + ]; + const tabstave = f + .TabStave({ x: stave.getX(), y: 140, width: 450 }) + .addClef('tab') + .setNoteStartX(stave.getNoteStartX()); + const tabNotes = [ + f + .TabNote({ + positions: [ + { str: 1, fret: 3 }, + { str: 2, fret: 2 }, + { str: 3, fret: 3 }, + ], + duration: '4', + }) + .addModifier(new Bend('Full'), 0), + f + .TabNote({ + positions: [ + { str: 2, fret: 3 }, + { str: 3, fret: 5 }, + ], + duration: '4', + }) + .addModifier(new Bend('Unison'), 1), + f.TabNote({ + positions: [ + { str: 3, fret: 7 }, + { str: 4, fret: 7 }, + { str: 5, fret: 7 }, + { str: 6, fret: 7 }, + ], + duration: '8', + }), + f.TabNote({ + positions: [ + { str: 1, fret: 5 }, + { str: 2, fret: 5 }, + { str: 3, fret: 6 }, + { str: 4, fret: 7 }, + { str: 5, fret: 7 }, + { str: 6, fret: 5 }, + ], + duration: '8', + }), + f.TabNote({ + positions: [ + { str: 3, fret: 7 }, + { str: 4, fret: 7 }, + { str: 5, fret: 7 }, + { str: 6, fret: 7 }, + ], + duration: '8', + }), + f.TabNote({ + positions: [ + { str: 1, fret: 5 }, + { str: 2, fret: 5 }, + { str: 3, fret: 6 }, + { str: 4, fret: 7 }, + { str: 5, fret: 7 }, + { str: 6, fret: 5 }, + ], + duration: '8', + }), + ]; + notes[0].addStroke(0, new Stroke(1)); + notes[1].addStroke(0, new Stroke(2)); + notes[2].addStroke(0, new Stroke(3)); + notes[3].addStroke(0, new Stroke(4)); + notes[4].addStroke(0, new Stroke(5)); + notes[5].addStroke(0, new Stroke(6)); + tabNotes[0].addStroke(0, new Stroke(1)); + tabNotes[1].addStroke(0, new Stroke(2)); + tabNotes[2].addStroke(0, new Stroke(3)); + tabNotes[3].addStroke(0, new Stroke(4)); + tabNotes[4].addStroke(0, new Stroke(5)); + tabNotes[5].addStroke(0, new Stroke(6)); + f.StaveConnector({ + top_stave: stave, + bottom_stave: tabstave, + type: 'bracket', + }); + f.StaveConnector({ + top_stave: stave, + bottom_stave: tabstave, + type: 'single', + }); + const voice = f.Voice().addTickables(notes); + const tabVoice = f.Voice().addTickables(tabNotes); + const beams = Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).joinVoices([tabVoice]).formatToStave([voice, tabVoice], stave); + f.draw(); + beams.forEach(function (beam) { + beam.setContext(f.getContext()).draw(); + }); + options.assert.ok(true); +} +VexFlowTests.register(StrokesTests); +export { StrokesTests }; diff --git a/build/esm/tests/style_tests.js b/build/esm/tests/style_tests.js new file mode 100644 index 0000000000..633c820f94 --- /dev/null +++ b/build/esm/tests/style_tests.js @@ -0,0 +1,96 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Annotation } from '../src/annotation.js'; +import { Articulation } from '../src/articulation.js'; +import { Bend } from '../src/bend.js'; +import { Formatter } from '../src/formatter.js'; +import { KeySignature } from '../src/keysignature.js'; +import { NoteSubGroup } from '../src/notesubgroup.js'; +import { Ornament } from '../src/ornament.js'; +import { StaveModifierPosition } from '../src/stavemodifier.js'; +import { Stroke } from '../src/strokes.js'; +import { TabNote } from '../src/tabnote.js'; +import { TabStave } from '../src/tabstave.js'; +import { TimeSignature } from '../src/timesignature.js'; +const StyleTests = { + Start() { + QUnit.module('Style'); + const run = VexFlowTests.runTests; + run('Basic Style', stave); + run('TabNote modifiers Style', tab); + }, +}; +function FS(fillStyle, strokeStyle) { + const ret = { fillStyle }; + if (strokeStyle) { + ret.strokeStyle = strokeStyle; + } + return ret; +} +function stave(options) { + const f = VexFlowTests.makeFactory(options, 600, 150); + const stave = f.Stave({ x: 25, y: 20, width: 500 }); + const keySig = new KeySignature('D'); + keySig.addToStave(stave); + keySig.setStyle(FS('blue')); + stave.addTimeSignature('4/4'); + const timeSig = stave.getModifiers(StaveModifierPosition.BEGIN, TimeSignature.CATEGORY); + timeSig[0].setStyle(FS('brown')); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['e/4'], stem_direction: 1, duration: '4' }), + f.StaveNote({ keys: ['f/4'], stem_direction: 1, duration: '8' }), + f.TextDynamics({ text: 'sfz', duration: '16' }).setStyle(FS('blue')), + f.GhostNote({ duration: '16' }).addModifier(new Annotation('GhostNote green text').setStyle(FS('green')), 0), + ]; + const notes0 = notes[0]; + const notes1 = notes[1]; + notes0.setKeyStyle(0, FS('red')); + notes1.setKeyStyle(0, FS('red')); + const mods1 = notes1.getModifiers(); + mods1[0].setStyle(FS('green')); + notes0.addModifier(new Articulation('a.').setPosition(4).setStyle(FS('green')), 0); + notes0.addModifier(new Ornament('mordent').setStyle(FS('lightgreen')), 0); + notes1.addModifier(new Annotation('blue').setStyle(FS('blue')), 0); + notes1.addModifier(new NoteSubGroup([f.ClefNote({ options: { size: 'small' } }).setStyle(FS('blue'))]), 0); + const voice = f.Voice().addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Basic Style'); +} +function tab(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 140); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 10, 450).addTabGlyph(); + stave.getModifiers()[2].setStyle(FS('blue')); + stave.setContext(ctx).draw(); + const tabNote = (noteStruct) => new TabNote(noteStruct); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }).addModifier(new Annotation('green text').setStyle(FS('green')), 0), + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }) + .addModifier(new Bend('Full').setStyle(FS('brown')), 0) + .addStroke(0, new Stroke(1, { all_voices: false }).setStyle(FS('blue'))), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'TabNote Modifiers Style'); +} +VexFlowTests.register(StyleTests); +export { StyleTests }; diff --git a/build/esm/tests/tabnote_tests.js b/build/esm/tests/tabnote_tests.js new file mode 100644 index 0000000000..d7fd2cd0f5 --- /dev/null +++ b/build/esm/tests/tabnote_tests.js @@ -0,0 +1,474 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Dot } from '../src/dot.js'; +import { Flow } from '../src/flow.js'; +import { Font, FontWeight } from '../src/font.js'; +import { Formatter } from '../src/formatter.js'; +import { Stave } from '../src/stave.js'; +import { TabNote } from '../src/tabnote.js'; +import { TabStave } from '../src/tabstave.js'; +import { TickContext } from '../src/tickcontext.js'; +import { Voice, VoiceMode } from '../src/voice.js'; +const TabNoteTests = { + Start() { + QUnit.module('TabNote'); + QUnit.test('Tick', ticks); + QUnit.test('TabStave Line', tabStaveLine); + QUnit.test('Width', width); + QUnit.test('TickContext', tickContext); + const run = VexFlowTests.runTests; + run('TabNote Draw', draw); + run('TabNote Stems Up', drawStemsUp); + run('TabNote Stems Down', drawStemsDown); + run('TabNote Stems Up Through Stave', drawStemsUpThrough); + run('TabNote Stems Down Through Stave', drawStemsDownThrough); + run('TabNote Stems with Dots', drawStemsDotted); + }, +}; +function ticks(assert) { + const BEAT = (1 * Flow.RESOLUTION) / 4; + let note = new TabNote({ positions: [{ str: 6, fret: 6 }], duration: '1' }); + assert.equal(note.getTicks().value(), BEAT * 4, 'Whole note has 4 beats'); + note = new TabNote({ positions: [{ str: 3, fret: 4 }], duration: '4' }); + assert.equal(note.getTicks().value(), BEAT, 'Quarter note has 1 beat'); +} +function tabStaveLine(assert) { + const note = new TabNote({ + positions: [ + { str: 6, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '1', + }); + const positions = note.getPositions(); + assert.equal(positions[0].str, 6, 'String 6, Fret 6'); + assert.equal(positions[0].fret, 6, 'String 6, Fret 6'); + assert.equal(positions[1].str, 4, 'String 4, Fret 5'); + assert.equal(positions[1].fret, 5, 'String 4, Fret 5'); + const stave = new Stave(10, 10, 300); + note.setStave(stave); + const ys = note.getYs(); + assert.equal(ys.length, 2, 'Chord should be rendered on two lines'); + assert.equal(ys[0], 100, 'Line for String 6, Fret 6'); + assert.equal(ys[1], 80, 'Line for String 4, Fret 5'); +} +function width(assert) { + assert.expect(1); + const note = new TabNote({ + positions: [ + { str: 6, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '1', + }); + assert.throws(() => note.getWidth(), /UnformattedNote/, 'Unformatted note should have no width'); +} +function tickContext(assert) { + const note = new TabNote({ + positions: [ + { str: 6, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '1', + }); + const tickContext = new TickContext().addTickable(note).preFormat().setX(10).setPadding(0); + assert.equal(tickContext.getWidth(), 7); +} +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 140); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const notes = [ + { positions: [{ str: 6, fret: 6 }], duration: '4' }, + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 'x' }, + { str: 5, fret: 15 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 'x' }, + { str: 5, fret: 5 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '4', + }, + { + positions: [ + { str: 6, fret: 0 }, + { str: 5, fret: 5 }, + { str: 4, fret: 5 }, + { str: 3, fret: 4 }, + { str: 2, fret: 3 }, + { str: 1, fret: 0 }, + ], + duration: '4', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '4', + }, + ]; + function showNote(noteStruct, stave, ctx, x) { + const tabNote = new TabNote(noteStruct); + const tickContext = new TickContext(); + tickContext.addTickable(tabNote).preFormat().setX(x); + tabNote.setContext(ctx).setStave(stave); + tabNote.draw(); + return tabNote; + } + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + const tabNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(tabNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(tabNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawStemsUp(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 30, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + ]; + const notes = specs.map((struct) => { + const tabNote = new TabNote(struct); + tabNote.render_options.draw_stem = true; + return tabNote; + }); + const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT); + voice.addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +function drawStemsDown(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + ]; + const notes = specs.map((struct) => { + const tabNote = new TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.setStemDirection(-1); + return tabNote; + }); + const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT); + voice.addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'All objects have been drawn'); +} +function drawStemsUpThrough(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 30, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + ]; + const notes = specs.map((struct) => { + const tabNote = new TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_stem_through_stave = true; + return tabNote; + }); + ctx.setFont(Font.SANS_SERIF, 10, FontWeight.BOLD); + const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT); + voice.addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +function drawStemsDownThrough(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 250); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 10, 550, { num_lines: 8 }); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + { str: 6, fret: 10 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + { str: 5, fret: 5 }, + { str: 7, fret: 5 }, + ], + duration: '128', + }, + ]; + const notes = specs.map((struct) => { + const tabNote = new TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_stem_through_stave = true; + tabNote.setStemDirection(-1); + return tabNote; + }); + ctx.setFont('Arial', 10, 'bold'); + const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT); + voice.addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'All objects have been drawn'); +} +function drawStemsDotted(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4d', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '4dd', + stem_direction: -1, + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + stem_direction: -1, + }, + ]; + const notes = specs.map((struct) => new TabNote(struct, true)); + Dot.buildAndAttach([notes[0], notes[2], notes[2]]); + const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT); + voice.addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +VexFlowTests.register(TabNoteTests); +export { TabNoteTests }; diff --git a/build/esm/tests/tabslide_tests.js b/build/esm/tests/tabslide_tests.js new file mode 100644 index 0000000000..2e698f1bfb --- /dev/null +++ b/build/esm/tests/tabslide_tests.js @@ -0,0 +1,133 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Flow } from '../src/flow.js'; +import { Formatter } from '../src/formatter.js'; +import { TabNote } from '../src/tabnote.js'; +import { TabSlide } from '../src/tabslide.js'; +import { TabStave } from '../src/tabstave.js'; +import { Voice } from '../src/voice.js'; +const TabSlideTests = { + Start() { + QUnit.module('TabSlide'); + const run = VexFlowTests.runTests; + run('Simple TabSlide', simple); + run('Slide Up', slideUp); + run('Slide Down', slideDown); + }, +}; +function tieNotes(notes, indices, stave, ctx) { + const voice = new Voice(Flow.TIME4_4); + voice.addTickables(notes); + new Formatter().joinVoices([voice]).format([voice], 100); + voice.draw(ctx, stave); + const tie = new TabSlide({ + first_note: notes[0], + last_note: notes[1], + first_indices: indices, + last_indices: indices, + }, TabSlide.SLIDE_UP); + tie.setContext(ctx); + tie.draw(); +} +function setupContext(options, width) { + const context = options.contextBuilder(options.elementId, 350, 140); + context.scale(0.9, 0.9); + context.font = '10pt Arial'; + const stave = new TabStave(10, 10, width || 350).addTabGlyph().setContext(context).draw(); + return { context, stave }; +} +const tabNote = (noteStruct) => new TabNote(noteStruct); +function simple(options, contextBuilder) { + options.contextBuilder = contextBuilder; + const { stave, context } = setupContext(options); + tieNotes([ + tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'h' }), + tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }), + ], [0], stave, context); + options.assert.ok(true, 'Simple Test'); +} +function multiTest(options, buildTabSlide) { + const { context, stave } = setupContext(options, 440); + const notes = [ + tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), + tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), + tabNote({ + positions: [ + { str: 4, fret: 4 }, + { str: 5, fret: 4 }, + ], + duration: '8', + }), + tabNote({ + positions: [ + { str: 4, fret: 6 }, + { str: 5, fret: 6 }, + ], + duration: '8', + }), + tabNote({ positions: [{ str: 2, fret: 14 }], duration: '8' }), + tabNote({ positions: [{ str: 2, fret: 16 }], duration: '8' }), + tabNote({ + positions: [ + { str: 2, fret: 14 }, + { str: 3, fret: 14 }, + ], + duration: '8', + }), + tabNote({ + positions: [ + { str: 2, fret: 16 }, + { str: 3, fret: 16 }, + ], + duration: '8', + }), + ]; + const voice = new Voice(Flow.TIME4_4).addTickables(notes); + new Formatter().joinVoices([voice]).format([voice], 300); + voice.draw(context, stave); + buildTabSlide({ + first_note: notes[0], + last_note: notes[1], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Single note'); + buildTabSlide({ + first_note: notes[2], + last_note: notes[3], + first_indices: [0, 1], + last_indices: [0, 1], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Chord'); + buildTabSlide({ + first_note: notes[4], + last_note: notes[5], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Single note high-fret'); + buildTabSlide({ + first_note: notes[6], + last_note: notes[7], + first_indices: [0, 1], + last_indices: [0, 1], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Chord high-fret'); +} +function slideUp(options, contextBuilder) { + options.contextBuilder = contextBuilder; + multiTest(options, TabSlide.createSlideUp); +} +function slideDown(options, contextBuilder) { + options.contextBuilder = contextBuilder; + multiTest(options, TabSlide.createSlideDown); +} +VexFlowTests.register(TabSlideTests); +export { TabSlideTests }; diff --git a/build/esm/tests/tabstave_tests.js b/build/esm/tests/tabstave_tests.js new file mode 100644 index 0000000000..e021266be0 --- /dev/null +++ b/build/esm/tests/tabstave_tests.js @@ -0,0 +1,23 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { TabStave } from '../src/tabstave.js'; +const TabStaveTests = { + Start() { + QUnit.module('TabStave'); + const run = VexFlowTests.runTests; + run('TabStave Draw Test', draw); + }, +}; +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 160); + const stave = new TabStave(10, 10, 300); + stave.setNumLines(6); + stave.setContext(ctx); + stave.draw(); + options.assert.equal(stave.getYForNote(0), 127, 'getYForNote(0)'); + options.assert.equal(stave.getYForLine(5), 127, 'getYForLine(5)'); + options.assert.equal(stave.getYForLine(0), 62, 'getYForLine(0) - Top Line'); + options.assert.equal(stave.getYForLine(4), 114, 'getYForLine(4) - Bottom Line'); + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(TabStaveTests); +export { TabStaveTests }; diff --git a/build/esm/tests/tabtie_tests.js b/build/esm/tests/tabtie_tests.js new file mode 100644 index 0000000000..1d4bedc20a --- /dev/null +++ b/build/esm/tests/tabtie_tests.js @@ -0,0 +1,171 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Annotation } from '../src/annotation.js'; +import { Flow } from '../src/flow.js'; +import { Formatter } from '../src/formatter.js'; +import { TabNote } from '../src/tabnote.js'; +import { TabStave } from '../src/tabstave.js'; +import { TabTie } from '../src/tabtie.js'; +import { Voice } from '../src/voice.js'; +const TabTieTests = { + Start() { + QUnit.module('TabTie'); + const run = VexFlowTests.runTests; + run('Simple TabTie', simple); + run('Hammerons', simpleHammerOn); + run('Pulloffs', simplePullOff); + run('Tapping', tap); + run('Continuous', continuous); + }, +}; +const tabNote = (noteStruct) => new TabNote(noteStruct); +function setupContext(options, w = 0, h = 0) { + const context = options.contextBuilder(options.elementId, w || 350, h || 160); + context.setFont('Arial', VexFlowTests.Font.size); + const stave = new TabStave(10, 10, w || 350).addTabGlyph().setContext(context).draw(); + return { context, stave }; +} +function tieNotes(notes, indices, stave, ctx, text) { + const voice = new Voice(Flow.TIME4_4); + voice.addTickables(notes); + new Formatter().joinVoices([voice]).format([voice], 100); + voice.draw(ctx, stave); + const tie = new TabTie({ + first_note: notes[0], + last_note: notes[1], + first_indices: indices, + last_indices: indices, + }, text !== null && text !== void 0 ? text : 'Annotation'); + tie.setContext(ctx); + tie.draw(); +} +function simple(options, contextBuilder) { + options.contextBuilder = contextBuilder; + const { context, stave } = setupContext(options); + const note1 = tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'h' }); + const note2 = tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }); + tieNotes([note1, note2], [0], stave, context); + options.assert.ok(true, 'Simple Test'); +} +function simpleHammerOn(options, contextBuilder) { + options.contextBuilder = contextBuilder; + multiTest(options, TabTie.createHammeron); +} +function simplePullOff(options, contextBuilder) { + options.contextBuilder = contextBuilder; + multiTest(options, TabTie.createPulloff); +} +function multiTest(options, createTabTie) { + const { context, stave } = setupContext(options, 440, 140); + const notes = [ + tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), + tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), + tabNote({ + positions: [ + { str: 4, fret: 4 }, + { str: 5, fret: 4 }, + ], + duration: '8', + }), + tabNote({ + positions: [ + { str: 4, fret: 6 }, + { str: 5, fret: 6 }, + ], + duration: '8', + }), + tabNote({ positions: [{ str: 2, fret: 14 }], duration: '8' }), + tabNote({ positions: [{ str: 2, fret: 16 }], duration: '8' }), + tabNote({ + positions: [ + { str: 2, fret: 14 }, + { str: 3, fret: 14 }, + ], + duration: '8', + }), + tabNote({ + positions: [ + { str: 2, fret: 16 }, + { str: 3, fret: 16 }, + ], + duration: '8', + }), + ]; + const voice = new Voice(Flow.TIME4_4).addTickables(notes); + new Formatter().joinVoices([voice]).format([voice], 300); + voice.draw(context, stave); + createTabTie({ + first_note: notes[0], + last_note: notes[1], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Single note'); + createTabTie({ + first_note: notes[2], + last_note: notes[3], + first_indices: [0, 1], + last_indices: [0, 1], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Chord'); + createTabTie({ + first_note: notes[4], + last_note: notes[5], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Single note high-fret'); + createTabTie({ + first_note: notes[6], + last_note: notes[7], + first_indices: [0, 1], + last_indices: [0, 1], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Chord high-fret'); +} +function tap(options, contextBuilder) { + options.contextBuilder = contextBuilder; + const { context, stave } = setupContext(options); + const note1 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: 'h' }).addModifier(new Annotation('T'), 0); + const note2 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: 'h' }); + tieNotes([note1, note2], [0], stave, context, 'P'); + options.assert.ok(true, 'Tapping Test'); +} +function continuous(options, contextBuilder) { + options.contextBuilder = contextBuilder; + const { context, stave } = setupContext(options, 440, 140); + const notes = [ + tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'q' }), + tabNote({ positions: [{ str: 4, fret: 5 }], duration: 'q' }), + tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }), + ]; + const voice = new Voice(Flow.TIME4_4).addTickables(notes); + new Formatter().joinVoices([voice]).format([voice], 300); + voice.draw(context, stave); + TabTie.createHammeron({ + first_note: notes[0], + last_note: notes[1], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + TabTie.createPulloff({ + first_note: notes[1], + last_note: notes[2], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Continuous Hammeron'); +} +VexFlowTests.register(TabTieTests); +export { TabTieTests }; diff --git a/build/esm/tests/textbracket_tests.js b/build/esm/tests/textbracket_tests.js new file mode 100644 index 0000000000..8f8a22d923 --- /dev/null +++ b/build/esm/tests/textbracket_tests.js @@ -0,0 +1,100 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +const TextBracketTests = { + Start() { + QUnit.module('TextBracket'); + const run = VexFlowTests.runTests; + run('Simple TextBracket', simple0); + run('TextBracket Styles', simple1); + }, +}; +function simple0(options) { + const f = VexFlowTests.makeFactory(options, 550); + const stave = f.Stave(); + const score = f.EasyScore(); + const notes = score.notes('c4/4, c4, c4, c4, c4', { stem: 'up' }); + const voice = score.voice(notes, { time: '5/4' }); + f.TextBracket({ + from: notes[0], + to: notes[4], + text: '15', + options: { + superscript: 'va', + position: 'top', + }, + }); + f.TextBracket({ + from: notes[0], + to: notes[4], + text: '8', + options: { + superscript: 'vb', + position: 'bottom', + line: 3, + }, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function simple1(options) { + const f = VexFlowTests.makeFactory(options, 550); + const stave = f.Stave(); + const score = f.EasyScore(); + const notes = score.notes('c4/4, c4, c4, c4, c4', { stem: 'up' }); + const voice = score.voice(notes, { time: '5/4' }); + const topOctaves = [ + f.TextBracket({ + from: notes[0], + to: notes[1], + text: 'Cool notes', + options: { + superscript: '', + position: 'top', + }, + }), + f.TextBracket({ + from: notes[2], + to: notes[4], + text: 'Testing', + options: { + position: 'top', + superscript: 'superscript', + font: { family: 'Arial', size: 15, weight: 'normal', style: 'normal' }, + }, + }), + ]; + const bottomOctaves = [ + f.TextBracket({ + from: notes[0], + to: notes[1], + text: '8', + options: { + superscript: 'vb', + position: 'bottom', + line: 3, + font: { size: 30 }, + }, + }), + f.TextBracket({ + from: notes[2], + to: notes[4], + text: 'Not cool notes', + options: { + superscript: ' super uncool', + position: 'bottom', + line: 4, + }, + }), + ]; + topOctaves[1].render_options.line_width = 2; + topOctaves[1].render_options.show_bracket = false; + bottomOctaves[0].render_options.underline_superscript = false; + bottomOctaves[0].setDashed(false); + bottomOctaves[1].render_options.bracket_height = 40; + bottomOctaves[1].setDashed(true, [2, 2]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +VexFlowTests.register(TextBracketTests); +export { TextBracketTests }; diff --git a/build/esm/tests/textformatter_tests.js b/build/esm/tests/textformatter_tests.js new file mode 100644 index 0000000000..511229300c --- /dev/null +++ b/build/esm/tests/textformatter_tests.js @@ -0,0 +1,134 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Font, FontStyle, FontWeight } from '../src/font.js'; +import { TextFormatter } from '../src/textformatter.js'; +const TextFormatterTests = { + Start() { + QUnit.module('TextFormatter'); + QUnit.test('Basic', basic); + const run = VexFlowTests.runTextTests; + run('Accuracy', accuracy); + run('Box Text', textBoxAccuracy); + }, +}; +function basic(assert) { + var _a; + const registeredFamilies = TextFormatter.getFontFamilies(); + assert.equal(registeredFamilies.length, 5, `There are five registered font families: 'Roboto Slab' & 'PetalumaScript' and default 'Serif', 'Serif-Bold' and 'Sans'`); + const petalumaFormatterInfo = TextFormatter.getInfo('PetalumaScript'); + assert.equal((_a = petalumaFormatterInfo === null || petalumaFormatterInfo === void 0 ? void 0 : petalumaFormatterInfo.glyphs) === null || _a === void 0 ? void 0 : _a.C.advanceWidth, 623, 'PetalumaScript advanceWidth of C character is 623.'); + const formatterForPetalumaScript = TextFormatter.create({ family: 'PetalumaScript', size: '100px' }); + const metricsPetalumaScriptH = formatterForPetalumaScript.getGlyphMetrics('H'); + assert.equal(metricsPetalumaScriptH.leftSideBearing, 37); + const formatterForRobotoSlab = TextFormatter.create({ family: 'Roboto Slab', size: '100px', style: 'italic' }); + const metricsRobotoSlabH = formatterForRobotoSlab.getGlyphMetrics('H'); + assert.equal(metricsRobotoSlabH.advanceWidth, 1578); + assert.equal(formatterForRobotoSlab.cacheKey, 'Roboto_Slab%75%normal%normal'); +} +function accuracy(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 500); + const lineHeight = 30; + const startX = 50; + const fonts = [ + { + family: Font.SERIF, + size: 14, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, + }, + { + family: 'Roboto Slab', + size: 14, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, + }, + { + family: Font.SANS_SERIF, + size: 14, + weight: FontWeight.BOLD, + style: FontStyle.NORMAL, + }, + ]; + let startY = 20; + for (let j = 0; j < fonts.length; ++j) { + const font = fonts[j]; + const textFormatter = TextFormatter.create(font); + ctx.setFont(font); + const texts = ['AVo(i)a', 'bghjIVex1/2', '@@@@@@@@', 'a very long String with Mixed Case Text,(0123456789)']; + for (let i = 0; i < texts.length; i++) { + ctx.setFillStyle('black'); + ctx.fillText(texts[i], startX, startY); + startY += 5; + ctx.setFillStyle('#3a2'); + ctx.fillRect(startX, startY, textFormatter.getWidthForTextInPx(texts[i]), 2); + ctx.setFillStyle('#32a'); + startY += 5; + ctx.fillRect(startX, startY, ctx.measureText(texts[i]).width, 2); + startY += lineHeight; + } + } + options.assert.ok(true, 'all pass'); +} +function textBoxAccuracy(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 800); + let startY = 35; + const boxBorder = 2; + const boxPadding = 3; + const startX = 50; + const fonts = [ + { + family: Font.SERIF, + size: 14, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, + }, + { + family: 'Roboto Slab', + size: 14, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, + }, + { + family: Font.SANS_SERIF, + size: 14, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, + }, + ]; + const texts = ['AVID', 'bghjIVex1/2', '@@@@@@@@']; + for (let j = 0; j < fonts.length; ++j) { + const font = fonts[j]; + const textFormatter = TextFormatter.create(font); + ctx.save(); + ctx.setFont(font); + for (let i = 0; i < texts.length; i++) { + const textY = textFormatter.getYForStringInPx(texts[i]); + const height = textY.height + 2 * boxPadding; + const headroom = -1 * textY.yMin; + const width = textFormatter.getWidthForTextInPx(texts[i]) + 2 * boxPadding; + ctx.setFillStyle('black'); + ctx.fillText(texts[i], startX + boxPadding, startY - boxPadding); + ctx.setLineWidth(boxBorder); + ctx.setStrokeStyle('#3a2'); + ctx.setFillStyle('#3a2'); + ctx.beginPath(); + ctx.rect(startX, startY - height + headroom, width, height); + ctx.stroke(); + startY += height * 1.5 + boxBorder * 3; + const measureBox = ctx.measureText(texts[i]); + const mwidth = measureBox.width + boxBorder * 2; + const mheight = measureBox.height + boxBorder * 2; + ctx.setFillStyle('black'); + ctx.fillText(texts[i], startX + boxPadding, startY - boxPadding); + ctx.setStrokeStyle('#32a'); + ctx.setFillStyle('#32a'); + ctx.beginPath(); + ctx.rect(startX, startY - mheight, mwidth, mheight); + ctx.stroke(); + startY += mheight * 1.5 + boxBorder * 3; + } + ctx.restore(); + } + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(TextFormatterTests); +export { TextFormatterTests }; diff --git a/build/esm/tests/textnote_tests.js b/build/esm/tests/textnote_tests.js new file mode 100644 index 0000000000..3a32b6bbc4 --- /dev/null +++ b/build/esm/tests/textnote_tests.js @@ -0,0 +1,217 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Crescendo } from '../src/crescendo.js'; +import { Flow } from '../src/flow.js'; +import { Font } from '../src/font.js'; +import { Note } from '../src/note.js'; +import { Stave } from '../src/stave.js'; +import { TextNote } from '../src/textnote.js'; +const TextNoteTests = { + Start() { + QUnit.module('TextNote'); + const run = VexFlowTests.runTests; + run('TextNote Formatting', formatTextNotes); + run('TextNote Formatting 2', formatTextNotes2); + run('TextNote Superscript and Subscript', superscriptAndSubscript); + run('TextNote Formatting With Glyphs 0', formatTextGlyphs0); + run('TextNote Formatting With Glyphs 1', formatTextGlyphs1); + run('Crescendo', crescendo); + run('Text Dynamics', textDynamics); + }, +}; +function formatTextNotes(options) { + const f = VexFlowTests.makeFactory(options, 400, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: 'q' }), + f + .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }) + .addModifier(f.Accidental({ type: 'n' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + ]); + const voice2 = score.voice([ + f.TextNote({ text: 'Center Justification', duration: 'h' }).setJustification(TextNote.Justification.CENTER), + f.TextNote({ text: 'Left Line 1', duration: 'q' }).setLine(1), + f.TextNote({ text: 'Right', duration: 'q' }).setJustification(TextNote.Justification.RIGHT), + ]); + const formatter = f.Formatter(); + formatter.joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true); +} +function formatTextNotes2(options) { + const f = VexFlowTests.makeFactory(options, 600, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: 'q' }), + ]); + const voice2 = score.voice([ + f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER), + f.TextNote({ text: 'L', duration: '16' }), + f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT), + f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER), + f.TextNote({ text: 'L', duration: '16' }), + f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT), + f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER), + f.TextNote({ text: 'L', duration: '16' }), + f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT), + f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER), + f.TextNote({ text: 'L', duration: '16' }), + f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT), + f.TextNote({ text: 'R', duration: 'q' }).setJustification(TextNote.Justification.RIGHT), + ]); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + voice2.getTickables().forEach((note) => Note.plotMetrics(f.getContext(), note, 170)); + f.draw(); + options.assert.ok(true); +} +function superscriptAndSubscript(options) { + const f = VexFlowTests.makeFactory(options, 600, 230); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: 'h' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: 1, duration: 'q' }), + f + .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: 1, duration: 'q' }) + .addModifier(f.Accidental({ type: 'n' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + ]); + const notes2 = [ + f.TextNote({ text: Flow.unicode.flat + 'I', superscript: '+5', duration: '8' }), + f.TextNote({ text: 'D' + Flow.unicode.sharp + '/F', duration: '4d', superscript: 'sus2' }), + f.TextNote({ text: 'ii', superscript: '6', subscript: '4', duration: '8' }), + f.TextNote({ text: 'C', superscript: Flow.unicode.triangle + '7', subscript: '', duration: '8' }), + f.TextNote({ text: 'vii', superscript: Flow.unicode['o-with-slash'] + '7', duration: '8' }), + f.TextNote({ text: 'V', superscript: '7', duration: '8' }), + ]; + options.assert.equal(notes2[0].getText(), Flow.unicode.flat + 'I', 'TextNote.getText() return .text'); + const voice2 = score.voice(notes2); + voice2.getTickables().forEach((note) => { + const textNote = note; + textNote.setFont({ family: Font.SERIF, size: 15 }); + textNote.setLine(13); + textNote.setJustification(TextNote.Justification.LEFT); + }); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true); +} +function formatTextGlyphs0(options) { + const f = VexFlowTests.makeFactory(options, 600, 230); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + ]); + const voice2 = score.voice([ + f.TextNote({ text: 'Center', duration: '8' }).setJustification(TextNote.Justification.CENTER), + f.TextNote({ glyph: 'f', duration: '8' }), + f.TextNote({ glyph: 'p', duration: '8' }), + f.TextNote({ glyph: 'm', duration: '8' }), + f.TextNote({ glyph: 'z', duration: '8' }), + f.TextNote({ glyph: 'mordent_upper', duration: '16' }), + f.TextNote({ glyph: 'mordent_lower', duration: '16' }), + f.TextNote({ glyph: 'segno', duration: '8' }), + f.TextNote({ glyph: 'coda', duration: '8' }), + ]); + voice2.getTickables().forEach((n) => n.setJustification(TextNote.Justification.CENTER)); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true); +} +function formatTextGlyphs1(options) { + const f = VexFlowTests.makeFactory(options, 600, 230); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + ]); + const voice2 = score.voice([ + f.TextNote({ glyph: 'turn', duration: '16' }), + f.TextNote({ glyph: 'turn_inverted', duration: '16' }), + f.TextNote({ glyph: 'pedal_open', duration: '8' }).setLine(10), + f.TextNote({ glyph: 'pedal_close', duration: '8' }).setLine(10), + f.TextNote({ glyph: 'caesura_curved', duration: '8' }).setLine(3), + f.TextNote({ glyph: 'caesura_straight', duration: '8' }).setLine(3), + f.TextNote({ glyph: 'breath', duration: '8' }).setLine(2), + f.TextNote({ glyph: 'tick', duration: '8' }).setLine(3), + f.TextNote({ glyph: 'tr', duration: '8', smooth: true }).setJustification(TextNote.Justification.CENTER), + ]); + voice2.getTickables().forEach((n) => n.setJustification(TextNote.Justification.CENTER)); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true); +} +function crescendo(options) { + const f = VexFlowTests.makeFactory(options, 600, 230); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice([ + f.TextNote({ glyph: 'p', duration: '16' }), + new Crescendo({ duration: '4d' }).setLine(0).setHeight(25).setStave(stave), + f.TextNote({ glyph: 'f', duration: '16' }), + new Crescendo({ duration: '4' }).setLine(5).setStave(stave), + new Crescendo({ duration: '4' }).setLine(10).setDecrescendo(true).setHeight(5).setStave(stave), + ]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function textDynamics(options) { + const f = VexFlowTests.makeFactory(options, 600, 230); + const score = f.EasyScore(); + const voice = score.voice([ + f.TextDynamics({ text: 'sfz', duration: '4' }), + f.TextDynamics({ text: 'rfz', duration: '4' }), + f.TextDynamics({ text: 'mp', duration: '4' }), + f.TextDynamics({ text: 'ppp', duration: '4' }), + f.TextDynamics({ text: 'fff', duration: '4' }), + f.TextDynamics({ text: 'mf', duration: '4' }), + f.TextDynamics({ text: 'sff', duration: '4' }), + ], { time: '7/4' }); + const formatter = f.Formatter(); + formatter.joinVoices([voice]); + const width = formatter.preCalculateMinTotalWidth([voice]); + formatter.format([voice]); + const stave = f.Stave({ y: 40, width: width + Stave.defaultPadding }); + stave.draw(); + voice.draw(f.getContext(), stave); + options.assert.ok(true); +} +VexFlowTests.register(TextNoteTests); +export { TextNoteTests }; diff --git a/build/esm/tests/threevoice_tests.js b/build/esm/tests/threevoice_tests.js new file mode 100644 index 0000000000..786f84b557 --- /dev/null +++ b/build/esm/tests/threevoice_tests.js @@ -0,0 +1,132 @@ +import { concat, VexFlowTests } from './vexflow_test_helpers.js'; +import { Beam } from '../src/beam.js'; +const ThreeVoicesTests = { + Start() { + QUnit.module('Three Voice Rests'); + const run = VexFlowTests.runTests; + run('Three Voices - #1', threeVoices1); + run('Three Voices - #2 Complex', threeVoices2); + run('Three Voices - #3', threeVoices3); + run('Auto Adjust Rest Positions - Two Voices', autoRestTwoVoices); + run('Auto Adjust Rest Positions - Three Voices #1', autoRestThreeVoices1); + run('Auto Adjust Rest Positions - Three Voices #2', autoRestThreeVoices2); + }, +}; +function createThreeVoicesTest(noteGroup1, noteGroup2, noteGroup3, setup) { + return (options) => { + const factory = VexFlowTests.makeFactory(options, 600, 200); + const stave = factory.Stave().addClef('treble').addTimeSignature('4/4'); + const score = factory.EasyScore(); + const noteGroups = [noteGroup1, noteGroup2, noteGroup3].map((args) => score.notes(...args)); + const voices = noteGroups.map((notes) => score.voice(notes)); + setup(factory, voices); + const beams = [ + Beam.applyAndGetBeams(voices[0], +1), + Beam.applyAndGetBeams(voices[1], -1), + Beam.applyAndGetBeams(voices[2], -1), + ].reduce(concat); + factory.Formatter().joinVoices(voices).formatToStave(voices, stave); + factory.draw(); + for (let i = 0; i < beams.length; i++) { + beams[i].setContext(factory.getContext()).draw(); + } + options.assert.ok(true); + }; +} +const threeVoices1 = createThreeVoicesTest(['e5/2, e5', { stem: 'up' }], ['(d4 a4 d#5)/8, b4, (d4 a4 c5), b4, (d4 a4 c5), b4, (d4 a4 c5), b4', { stem: 'down' }], ['b3/4, e3, f3, a3', { stem: 'down' }], (f, voices) => { + voices[0].getTickables()[0].addModifier(f.Fingering({ number: '0', position: 'left' }), 0); + voices[1] + .getTickables()[0] + .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '4', position: 'left' }), 1); +}); +const threeVoices2 = createThreeVoicesTest(['(a4 e5)/16, e5, e5, e5, e5/8, e5, e5/2', { stem: 'up' }], ['(d4 d#5)/16, (b4 c5), d5, e5, (d4 a4 c5)/8, b4, (d4 a4 c5), b4, (d4 a4 c5), b4', { stem: 'down' }], ['b3/8, b3, e3/4, f3, a3', { stem: 'down' }], (f, voices) => { + voices[0] + .getTickables()[0] + .addModifier(f.Fingering({ number: '2', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '0', position: 'above' }), 1); + voices[1] + .getTickables()[0] + .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '4', position: 'left' }), 1); +}); +const threeVoices3 = createThreeVoicesTest(['(g4 e5)/4, e5, (g4 e5)/2', { stem: 'up' }], ['c#5/4, b4/8, b4/8/r, a4/4., g4/8', { stem: 'down' }], ['c4/4, b3, a3, g3', { stem: 'down' }], (f, voices) => { + voices[0] + .getTickables()[0] + .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 1); + voices[1].getTickables()[0].addModifier(f.Fingering({ number: '1', position: 'left' }), 0); + voices[2].getTickables()[0].addModifier(f.Fingering({ number: '3', position: 'left' }), 0); +}); +function autoRestTwoVoices(options) { + const f = VexFlowTests.makeFactory(options, 900, 200); + const score = f.EasyScore(); + let x = 10; + let beams = []; + function createMeasure(measureTitle, width, align_rests) { + const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1); + x += width; + const noteArrays = [ + score.notes('b4/8/r, e5/16, b4/r, b4/8/r, e5/16, b4/r, b4/8/r, d5/16, b4/r, e5/4', { stem: 'up' }), + score.notes('c5/16, c4, b4/r, d4, e4, f4, b4/r, g4, g4[stem="up"], a4[stem="up"], b4/r, b4[stem="up"], e4/4', { + stem: 'down', + }), + [f.TextNote({ text: measureTitle, line: -1, duration: '1', smooth: true })], + ]; + const voices = noteArrays.map((notes) => score.voice(notes)); + beams = beams.concat(Beam.applyAndGetBeams(voices[0], 1)).concat(Beam.applyAndGetBeams(voices[1], -1)); + f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests }); + } + createMeasure('Default Rest Positions', 400, false); + createMeasure('Rests Repositioned To Avoid Collisions', 400, true); + f.draw(); + for (let i = 0; i < beams.length; i++) { + beams[i].setContext(f.getContext()).draw(); + } + options.assert.ok(true, 'Auto Adjust Rests - Two Voices'); +} +function autoRestThreeVoices1(options) { + const f = VexFlowTests.makeFactory(options, 850, 200); + const score = f.EasyScore(); + let x = 10; + function createMeasure(measureTitle, width, align_rests) { + const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1); + const voices = [ + score.voice(score.notes('b4/4/r, e5, e5/r, e5/r, e5, e5, e5, e5/r', { stem: 'up' }), { time: '8/4' }), + score.voice(score.notes('b4/4/r, b4/r, b4/r, b4, b4/r, b4/r, b4, b4', { stem: 'down' }), { time: '8/4' }), + score.voice(score.notes('e4/4/r, e4/r, f4, b4/r, g4, c4, e4/r, c4', { stem: 'down' }), { time: '8/4' }), + score.voice([ + f.TextNote({ text: measureTitle, duration: '1', line: -1, smooth: true }), + f.TextNote({ text: '', duration: '1', line: -1, smooth: true }), + ], { time: '8/4' }), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests }); + x += width; + } + createMeasure('Default Rest Positions', 400, false); + createMeasure('Rests Repositioned To Avoid Collisions', 400, true); + f.draw(); + options.assert.ok(true); +} +function autoRestThreeVoices2(options) { + const f = VexFlowTests.makeFactory(options, 850, 200); + const score = f.EasyScore(); + let x = 10; + function createMeasure(measureTitle, width, align_rests) { + const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1); + const voices = [ + score.voice(score.notes('b4/16/r, e5, e5/r, e5/r, e5, e5, e5, e5/r'), { time: '2/4' }), + score.voice(score.notes('b4/16/r, b4/r, b4/r, b4, b4/r, b4/r, b4, b4'), { time: '2/4' }), + score.voice(score.notes('e4/16/r, e4/r, f4, b4/r, g4, c4, e4/r, c4'), { time: '2/4' }), + score.voice([f.TextNote({ text: measureTitle, duration: 'h', line: -1, smooth: true })], { time: '2/4' }), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests }); + x += width; + } + createMeasure('Default Rest Positions', 400, false); + createMeasure('Rests Repositioned To Avoid Collisions', 400, true); + f.draw(); + options.assert.ok(true); +} +VexFlowTests.register(ThreeVoicesTests); +export { ThreeVoicesTests }; diff --git a/build/esm/tests/tickcontext_tests.js b/build/esm/tests/tickcontext_tests.js new file mode 100644 index 0000000000..ade56ac212 --- /dev/null +++ b/build/esm/tests/tickcontext_tests.js @@ -0,0 +1,36 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Flow } from '../src/flow.js'; +import { TickContext } from '../src/tickcontext.js'; +import { MockTickable } from './mocks.js'; +const TickContextTests = { + Start() { + QUnit.module('TickContext'); + QUnit.test('Current Tick Test', currentTick); + QUnit.test('Tracking Test', tracking); + }, +}; +function currentTick(assert) { + const tc = new TickContext(); + assert.equal(tc.getCurrentTick().value(), 0, 'New tick context has no ticks'); +} +function tracking(assert) { + const BEAT = (1 * Flow.RESOLUTION) / 4; + const tickables = [ + new MockTickable().setTicks(BEAT).setWidth(10), + new MockTickable().setTicks(BEAT * 2).setWidth(20), + new MockTickable().setTicks(BEAT).setWidth(30), + ]; + const tc = new TickContext(); + tc.setPadding(0); + tc.addTickable(tickables[0]); + assert.equal(tc.getMaxTicks().value(), BEAT); + tc.addTickable(tickables[1]); + assert.equal(tc.getMaxTicks().value(), BEAT * 2); + tc.addTickable(tickables[2]); + assert.equal(tc.getMaxTicks().value(), BEAT * 2); + assert.equal(tc.getWidth(), 0); + tc.preFormat(); + assert.equal(tc.getWidth(), 30); +} +VexFlowTests.register(TickContextTests); +export { TickContextTests }; diff --git a/build/esm/tests/timesignature_tests.js b/build/esm/tests/timesignature_tests.js new file mode 100644 index 0000000000..fe76f56519 --- /dev/null +++ b/build/esm/tests/timesignature_tests.js @@ -0,0 +1,143 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Stave } from '../src/stave.js'; +import { StaveConnector } from '../src/staveconnector.js'; +import { TimeSignature } from '../src/timesignature.js'; +const TimeSignatureTests = { + Start() { + QUnit.module('TimeSignature'); + QUnit.test('Time Signature Parser', parser); + const run = VexFlowTests.runTests; + run('Basic Time Signatures', basic); + run('Big Signature Test', big); + run('Additive Signature Test', additive); + run('Alternating Signature Test', alternating); + run('Interchangeable Signature Test', interchangeable); + run('Aggregate Signature Test', agregate); + run('Complex Signature Test', complex); + run('Time Signature multiple staves alignment test', multiple); + run('Time Signature Change Test', change); + }, +}; +function parser(assert) { + const timeSig = new TimeSignature(); + assert.equal(timeSig.getTimeSpec(), '4/4', 'default time signature is 4/4'); + const mustFail = ['asdf', '123/', '/10', '/', '4567', 'C+', '1+', '+1', '(3+', '+3)', '()', '(+)']; + mustFail.forEach((invalidString) => { + assert.throws(() => timeSig.parseTimeSpec(invalidString), /BadTimeSignature/); + }); + const mustPass = ['4/4', '10/12', '1/8', '1234567890/1234567890', 'C', 'C|', '+']; + mustPass.forEach((validString) => timeSig.parseTimeSpec(validString)); + timeSig.setTimeSig('4/4'); + assert.equal(timeSig.getIsNumeric(), true, '4/4 is numeric'); + assert.equal(timeSig.getLine(), 0, 'digits are on line 0'); + timeSig.setTimeSig('C|'); + assert.equal(timeSig.getTimeSpec(), 'C|', 'timeSpec changed to C|'); + assert.equal(timeSig.getIsNumeric(), false, 'cut time is not numeric'); + assert.equal(timeSig.getLine(), 2, 'cut/common are on line 2'); + assert.ok(true, 'all pass'); +} +function basic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 120); + new Stave(10, 10, 500) + .addTimeSignature('2/2') + .addTimeSignature('3/4') + .addTimeSignature('4/4') + .addTimeSignature('6/8') + .addTimeSignature('C') + .addTimeSignature('C|') + .addEndTimeSignature('2/2') + .addEndTimeSignature('3/4') + .addEndTimeSignature('4/4') + .addEndClef('treble') + .addEndTimeSignature('6/8') + .addEndTimeSignature('C') + .addEndTimeSignature('C|') + .setContext(ctx) + .draw(); + options.assert.ok(true, 'all pass'); +} +function big(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new Stave(10, 10, 300) + .addTimeSignature('12/8') + .addTimeSignature('7/16') + .addTimeSignature('1234567/890') + .addTimeSignature('987/654321') + .setContext(ctx) + .draw(); + options.assert.ok(true, 'all pass'); +} +function additive(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new Stave(10, 10, 300).addTimeSignature('2+3+2/8').setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function alternating(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new Stave(10, 10, 300).addTimeSignature('6/8').addTimeSignature('+').addTimeSignature('3/4').setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function interchangeable(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new Stave(10, 10, 300).addTimeSignature('3/4').addTimeSignature('-').addTimeSignature('2/4').setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function agregate(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new Stave(10, 10, 300) + .addTimeSignature('2/4') + .addTimeSignature('+') + .addTimeSignature('3/8') + .addTimeSignature('+') + .addTimeSignature('5/4') + .setContext(ctx) + .draw(); + options.assert.ok(true, 'all pass'); +} +function complex(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new Stave(10, 10, 300) + .addTimeSignature('(2+3)/16') + .addTimeSignature('+') + .addTimeSignature('3/8') + .setContext(ctx) + .draw(); + options.assert.ok(true, 'all pass'); +} +function multiple(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 350); + const stave1LineConfig = [false, false, true, false, false].map((visible) => ({ visible })); + const stave1 = new Stave(15, 0, 300) + .setConfigForLines(stave1LineConfig) + .addClef('percussion') + .addTimeSignature('4/4', 25) + .setContext(ctx) + .draw(); + const stave2 = new Stave(15, 110, 300).addClef('treble').addTimeSignature('4/4').setContext(ctx).draw(); + const stave3 = new Stave(15, 220, 300).addClef('bass').addTimeSignature('4/4').setContext(ctx).draw(); + Stave.formatBegModifiers([stave1, stave2, stave3]); + new StaveConnector(stave1, stave2).setType('single').setContext(ctx).draw(); + new StaveConnector(stave2, stave3).setType('single').setContext(ctx).draw(); + new StaveConnector(stave2, stave3).setType('brace').setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function change(options) { + const f = VexFlowTests.makeFactory(options, 900); + const stave = f.Stave({ x: 0, y: 0 }).addClef('treble').addTimeSignature('C|'); + const tickables = [ + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), + f.TimeSigNote({ time: '3/4' }), + f.StaveNote({ keys: ['d/4'], duration: '4', clef: 'alto' }), + f.StaveNote({ keys: ['b/3'], duration: '4r', clef: 'alto' }), + f.TimeSigNote({ time: 'C' }), + f.StaveNote({ keys: ['c/3', 'e/3', 'g/3'], duration: '4', clef: 'bass' }), + f.TimeSigNote({ time: '9/8' }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), + ]; + const voice = f.Voice().setStrict(false).addTickables(tickables); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(TimeSignatureTests); +export { TimeSignatureTests }; diff --git a/build/esm/tests/tremolo_tests.js b/build/esm/tests/tremolo_tests.js new file mode 100644 index 0000000000..17ae3da75f --- /dev/null +++ b/build/esm/tests/tremolo_tests.js @@ -0,0 +1,75 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Barline } from '../src/stavebarline.js'; +import { Tremolo } from '../src/tremolo.js'; +const TremoloTests = { + Start() { + QUnit.module('Tremolo'); + const run = VexFlowTests.runTests; + run('Tremolo - Basic', tremoloBasic); + run('Tremolo - Big', tremoloBig); + }, +}; +function tremoloBasic(options) { + const f = VexFlowTests.makeFactory(options, 600, 200); + const score = f.EasyScore(); + const stave1 = f.Stave({ width: 250 }).setEndBarType(Barline.type.DOUBLE); + const notes1 = score.notes('e4/4, e4, e4, e4', { stem: 'up' }); + notes1[0].addModifier(new Tremolo(3), 0); + notes1[1].addModifier(new Tremolo(2), 0); + notes1[2].addModifier(new Tremolo(1), 0); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) + .setEndBarType(Barline.type.DOUBLE); + const notes2 = score.notes('e5/4, e5, e5, e5', { stem: 'down' }); + notes2[1].addModifier(new Tremolo(1), 0); + notes2[2].addModifier(new Tremolo(2), 0); + notes2[3].addModifier(new Tremolo(3), 0); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + f.draw(); + options.assert.ok(true, 'Tremolo - Basic'); +} +function tremoloBig(options) { + const f = VexFlowTests.makeFactory(options, 600, 200); + const score = f.EasyScore(); + const stave1 = f.Stave({ width: 250 }).setEndBarType(Barline.type.DOUBLE); + const notes1 = score.notes('e4/4, e4, e4, e4', { stem: 'up' }); + const tremolo1 = new Tremolo(3); + tremolo1.extra_stroke_scale = 1.7; + tremolo1.y_spacing_scale = 1.5; + const tremolo2 = new Tremolo(2); + tremolo2.extra_stroke_scale = 1.7; + tremolo2.y_spacing_scale = 1.5; + const tremolo3 = new Tremolo(1); + tremolo3.extra_stroke_scale = 1.7; + tremolo3.y_spacing_scale = 1.5; + notes1[0].addModifier(tremolo1, 0); + notes1[1].addModifier(tremolo2, 0); + notes1[2].addModifier(tremolo3, 0); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) + .setEndBarType(Barline.type.DOUBLE); + const notes2 = score.notes('e5/4, e5, e5, e5', { stem: 'down' }); + const tremolo4 = new Tremolo(1); + tremolo4.extra_stroke_scale = 1.7; + tremolo4.y_spacing_scale = 1.5; + const tremolo5 = new Tremolo(2); + tremolo5.extra_stroke_scale = 1.7; + tremolo5.y_spacing_scale = 1.5; + const tremolo6 = new Tremolo(3); + tremolo6.extra_stroke_scale = 1.7; + tremolo6.y_spacing_scale = 1.5; + notes2[1].addModifier(tremolo4, 0); + notes2[2].addModifier(tremolo5, 0); + notes2[3].addModifier(tremolo6, 0); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + f.draw(); + options.assert.ok(true, 'Tremolo - Big'); +} +VexFlowTests.register(TremoloTests); +export { TremoloTests }; diff --git a/build/esm/tests/tuning_tests.js b/build/esm/tests/tuning_tests.js new file mode 100644 index 0000000000..fda1442ca2 --- /dev/null +++ b/build/esm/tests/tuning_tests.js @@ -0,0 +1,56 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Tuning } from '../src/tuning.js'; +const TuningTests = { + Start() { + QUnit.module('Tuning'); + QUnit.test('Standard Tuning', standard); + QUnit.test('Standard Banjo Tuning', banjo); + QUnit.test('Return note for fret', noteForFret); + }, +}; +function checkStandard(assert, tuning) { + assert.throws(() => tuning.getValueForString(0), /BadArguments/, 'String 0'); + assert.throws(() => tuning.getValueForString(9), /BadArguments/, 'String 9'); + assert.equal(tuning.getValueForString(6), 40, 'Low E string'); + assert.equal(tuning.getValueForString(5), 45, 'A string'); + assert.equal(tuning.getValueForString(4), 50, 'D string'); + assert.equal(tuning.getValueForString(3), 55, 'G string'); + assert.equal(tuning.getValueForString(2), 59, 'B string'); + assert.equal(tuning.getValueForString(1), 64, 'High E string'); +} +function checkStandardBanjo(assert, tuning) { + assert.throws(() => tuning.getValueForString(0), /BadArguments/, 'String 0'); + assert.throws(() => tuning.getValueForString(6), /BadArguments/, 'String 6'); + assert.equal(tuning.getValueForString(5), 67, 'High G string'); + assert.equal(tuning.getValueForString(4), 50, 'D string'); + assert.equal(tuning.getValueForString(3), 55, 'G string'); + assert.equal(tuning.getValueForString(2), 59, 'B string'); + assert.equal(tuning.getValueForString(1), 62, 'High D string'); +} +function standard(assert) { + assert.expect(16); + const tuning = new Tuning(); + checkStandard(assert, tuning); + tuning.setTuning('standard'); + checkStandard(assert, tuning); +} +function banjo(assert) { + assert.expect(7); + const tuning = new Tuning(); + tuning.setTuning('standardBanjo'); + checkStandardBanjo(assert, tuning); +} +function noteForFret(assert) { + assert.expect(8); + const tuning = new Tuning('E/5,B/4,G/4,D/4,A/3,E/3'); + assert.throws(() => tuning.getNoteForFret(-1, 1), /BadArguments/, 'Fret = -1'); + assert.throws(() => tuning.getNoteForFret(1, -1), /BadArguments/, 'String = -1'); + assert.equal(tuning.getNoteForFret(0, 1), 'E/5', 'High E string'); + assert.equal(tuning.getNoteForFret(5, 1), 'A/5', 'High E string, fret 5'); + assert.equal(tuning.getNoteForFret(0, 2), 'B/4', 'B string'); + assert.equal(tuning.getNoteForFret(0, 3), 'G/4', 'G string'); + assert.equal(tuning.getNoteForFret(12, 2), 'B/5', 'B string, fret 12'); + assert.equal(tuning.getNoteForFret(0, 6), 'E/3', 'Low E string'); +} +VexFlowTests.register(TuningTests); +export { TuningTests }; diff --git a/build/esm/tests/tuplet_tests.js b/build/esm/tests/tuplet_tests.js new file mode 100644 index 0000000000..2c35a14694 --- /dev/null +++ b/build/esm/tests/tuplet_tests.js @@ -0,0 +1,450 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Dot } from '../src/dot.js'; +import { Formatter } from '../src/formatter.js'; +import { Stem } from '../src/stem.js'; +import { Tuplet } from '../src/tuplet.js'; +const TupletTests = { + Start() { + QUnit.module('Tuplet'); + const run = VexFlowTests.runTests; + run('Simple Tuplet', simple); + run('Beamed Tuplet', beamed); + run('Ratioed Tuplet', ratio); + run('Bottom Tuplet', bottom); + run('Bottom Ratioed Tuplet', bottomRatio); + run('Awkward Tuplet', awkward); + run('Complex Tuplet', complex); + run('Mixed Stem Direction Tuplet', mixedTop); + run('Mixed Stem Direction Bottom Tuplet', mixedBottom); + run('Nested Tuplets', nested); + run('Single Tuplets', single); + }, +}; +const set = (key) => (value) => (object) => { + object[key] = value; + return object; +}; +const setStemDirection = set('stem_direction'); +const setStemUp = setStemDirection(Stem.UP); +const setStemDown = setStemDirection(Stem.DOWN); +const setDurationToQuarterNote = set('duration')('4'); +function simple(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('3/4'); + const notes = [ + { keys: ['g/4'], duration: '4' }, + { keys: ['a/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['b/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Tuplet({ notes: notes.slice(0, 3) }); + f.Tuplet({ notes: notes.slice(3, 6) }); + const voice = f + .Voice({ time: { num_beats: 3, beat_value: 4 } }) + .setStrict(true) + .addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Simple Test'); +} +function beamed(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('3/8'); + const notes = [ + { keys: ['b/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ notes: notes.slice(0, 3) }); + f.Beam({ notes: notes.slice(3, 10) }); + f.Tuplet({ notes: notes.slice(0, 3) }); + f.Tuplet({ notes: notes.slice(3, 10) }); + const voice = f + .Voice({ time: { num_beats: 3, beat_value: 8 } }) + .setStrict(true) + .addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Beamed Test'); +} +function ratio(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('4/4'); + const notes = [ + { keys: ['f/4'], duration: '4' }, + { keys: ['a/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['g/4'], duration: '8' }, + { keys: ['e/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(3, 6), + }); + f.Tuplet({ + notes: notes.slice(0, 3), + options: { + ratioed: true, + }, + }); + f.Tuplet({ + notes: notes.slice(3, 6), + options: { + ratioed: true, + notes_occupied: 4, + }, + }); + const voice = f.Voice().setStrict(true).addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Ratioed Test'); +} +function bottom(options) { + const f = VexFlowTests.makeFactory(options, 350, 160); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('3/4'); + const notes = [ + { keys: ['f/4'], duration: '4' }, + { keys: ['c/4'], duration: '4' }, + { keys: ['g/4'], duration: '4' }, + { keys: ['d/5'], duration: '8' }, + { keys: ['g/3'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + ] + .map(setStemDown) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(3, 6), + }); + f.Tuplet({ + notes: notes.slice(0, 3), + options: { location: Tuplet.LOCATION_BOTTOM }, + }); + f.Tuplet({ + notes: notes.slice(3, 6), + options: { location: Tuplet.LOCATION_BOTTOM }, + }); + const voice = f + .Voice({ time: { num_beats: 3, beat_value: 4 } }) + .setStrict(true) + .addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Bottom Test'); +} +function bottomRatio(options) { + const f = VexFlowTests.makeFactory(options, 350, 160); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('5/8'); + const notes = [ + { keys: ['f/4'], duration: '4' }, + { keys: ['c/4'], duration: '4' }, + { keys: ['d/4'], duration: '4' }, + { keys: ['d/5'], duration: '8' }, + { keys: ['g/5'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + ] + .map(setStemDown) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(3, 6), + }); + f.Tuplet({ + notes: notes.slice(0, 3), + options: { + location: Tuplet.LOCATION_BOTTOM, + ratioed: true, + }, + }); + f.Tuplet({ + notes: notes.slice(3, 6), + options: { + location: Tuplet.LOCATION_BOTTOM, + notes_occupied: 1, + }, + }); + const voice = f + .Voice({ time: { num_beats: 5, beat_value: 8 } }) + .setStrict(true) + .addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Bottom Ratioed Test'); +} +function awkward(options) { + const f = VexFlowTests.makeFactory(options, 370, 160); + const stave = f.Stave({ x: 10, y: 10 }); + const notes = [ + { keys: ['g/4'], duration: '16' }, + { keys: ['b/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['e/4'], duration: '16' }, + { keys: ['c/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['e/4'], duration: '16' }, + { keys: ['c/4'], duration: '8' }, + { keys: ['d/4'], duration: '8' }, + { keys: ['e/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ notes: notes.slice(0, 12) }); + f.Tuplet({ + notes: notes.slice(0, 12), + options: { + notes_occupied: 142, + ratioed: true, + }, + }); + f.Tuplet({ + notes: notes.slice(12, 15), + options: { + ratioed: true, + }, + }).setBracketed(true); + const voice = f.Voice().setStrict(false).addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Awkward Test'); +} +function complex(options) { + const f = VexFlowTests.makeFactory(options, 600); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4'); + const notes1 = [ + { keys: ['b/4'], duration: '8d' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['g/4'], duration: '8' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['b/4'], duration: '16r' }, + { keys: ['g/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['g/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + Dot.buildAndAttach([notes1[0]], { all: true }); + const notes2 = [{ keys: ['c/4'] }, { keys: ['c/4'] }, { keys: ['c/4'] }, { keys: ['c/4'] }] + .map(setDurationToQuarterNote) + .map(setStemDown) + .map(f.StaveNote.bind(f)); + f.Beam({ notes: notes1.slice(0, 3) }); + f.Beam({ notes: notes1.slice(5, 9) }); + f.Beam({ notes: notes1.slice(11, 16) }); + f.Tuplet({ + notes: notes1.slice(0, 3), + }); + f.Tuplet({ + notes: notes1.slice(3, 11), + options: { + num_notes: 7, + notes_occupied: 4, + ratioed: false, + }, + }); + f.Tuplet({ + notes: notes1.slice(11, 16), + options: { + notes_occupied: 4, + }, + }); + const voice1 = f.Voice().setStrict(true).addTickables(notes1); + const voice2 = f.Voice().setStrict(true).addTickables(notes2); + new Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true, 'Complex Test'); +} +function mixedTop(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10 }); + const notes = [ + { keys: ['a/4'], stem_direction: 1 }, + { keys: ['c/6'], stem_direction: -1 }, + { keys: ['a/4'], stem_direction: 1 }, + { keys: ['f/5'], stem_direction: 1 }, + { keys: ['a/4'], stem_direction: -1 }, + { keys: ['c/6'], stem_direction: -1 }, + ] + .map(setDurationToQuarterNote) + .map(f.StaveNote.bind(f)); + f.Tuplet({ + notes: notes.slice(0, 2), + options: { + notes_occupied: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(2, 4), + options: { + notes_occupied: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(4, 6), + options: { + notes_occupied: 3, + }, + }); + const voice = f.Voice().setStrict(false).addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Mixed Stem Direction Tuplet'); +} +function mixedBottom(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10 }); + const notes = [ + { keys: ['f/3'], stem_direction: 1 }, + { keys: ['a/5'], stem_direction: -1 }, + { keys: ['a/4'], stem_direction: 1 }, + { keys: ['f/3'], stem_direction: 1 }, + { keys: ['a/4'], stem_direction: -1 }, + { keys: ['c/4'], stem_direction: -1 }, + ] + .map(setDurationToQuarterNote) + .map(f.StaveNote.bind(f)); + f.Tuplet({ + notes: notes.slice(0, 2), + options: { + notes_occupied: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(2, 4), + options: { + notes_occupied: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(4, 6), + options: { + notes_occupied: 3, + }, + }); + const voice = f.Voice().setStrict(false).addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Mixed Stem Direction Bottom Tuplet'); +} +function nested(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4'); + const notes = [ + { keys: ['b/4'], duration: '4' }, + { keys: ['a/4'], duration: '4' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['b/4'], duration: '2' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(2, 7), + }); + f.Tuplet({ + notes: notes.slice(0, 7), + options: { + notes_occupied: 2, + num_notes: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(2, 7), + options: { + notes_occupied: 4, + num_notes: 5, + }, + }); + const voice = f.Voice().setStrict(true).addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Nested Tuplets'); +} +function single(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4'); + const notes = [ + { keys: ['c/4'], duration: '4' }, + { keys: ['d/4'], duration: '8' }, + { keys: ['e/4'], duration: '8' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + { keys: ['a/4'], duration: '2' }, + { keys: ['b/4'], duration: '4' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(1, 4), + }); + f.Tuplet({ + notes: notes.slice(0, -1), + options: { + num_notes: 4, + notes_occupied: 3, + ratioed: true, + bracketed: true, + }, + }); + f.Tuplet({ + notes: notes.slice(0, 1), + options: { + num_notes: 3, + notes_occupied: 2, + ratioed: true, + }, + }); + f.Tuplet({ + notes: notes.slice(1, 4), + options: { + num_notes: 3, + notes_occupied: 2, + }, + }); + f.Tuplet({ + notes: notes.slice(4, 5), + options: { + num_notes: 3, + notes_occupied: 2, + ratioed: true, + bracketed: true, + }, + }); + const voice = f + .Voice({ time: { num_beats: 4, beat_value: 4 } }) + .setStrict(true) + .addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Nested Tuplets'); +} +VexFlowTests.register(TupletTests); +export { TupletTests }; diff --git a/build/esm/tests/typeguard_tests.js b/build/esm/tests/typeguard_tests.js new file mode 100644 index 0000000000..ffe0a3cdde --- /dev/null +++ b/build/esm/tests/typeguard_tests.js @@ -0,0 +1,82 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { CanvasContext } from '../src/canvascontext.js'; +import { StaveNote } from '../src/stavenote.js'; +import { StemmableNote } from '../src/stemmablenote.js'; +import { TabNote } from '../src/tabnote.js'; +import { isCategory, isNote, isRenderContext, isStaveNote, isStemmableNote, isTabNote } from '../src/typeguard.js'; +const TypeGuardTests = { + Start() { + QUnit.module('TypeGuard'); + QUnit.test('Real VexFlow Types', real); + QUnit.test('Fake VexFlow Types in ES5', fakeES5); + QUnit.test('Fake VexFlow Types in ES6', fakeES6); + QUnit.test('Edge Case ES5/ES6', edgeCaseES5vsES6); + }, +}; +function real(assert) { + const s = new StaveNote({ keys: ['c/4'], duration: 'w' }); + assert.ok(isStaveNote(s), 'isStaveNote helper function'); + assert.ok(isCategory(s, 'StaveNote'), 'Use isCategory(s, "StaveNote") directly'); + assert.notOk(isTabNote(s), 'isTabNote helper function. s is NOT a TabNote.'); + const t = new TabNote({ positions: [{ str: 2, fret: 1 }], duration: '1' }); + assert.ok(isTabNote(t), 'isTabNote helper function'); + assert.notOk(isStaveNote(t), 't is NOT a StaveNote'); + assert.ok(isNote(s), 'StaveNote extends StemmableNote which extends Note, so s is a Note'); + assert.ok(isStemmableNote(t), 'TabNote extends StemmableNote'); + assert.ok(isNote(t), 'TabNote extends StemmableNote which extends Note, so t is a Note'); + const canvas = document.createElement('canvas'); + canvas.width = 800; + canvas.height = 400; + const ctx = new CanvasContext(canvas.getContext('2d')); + assert.ok(isRenderContext(ctx), 'ctx is a RenderContext'); +} +function checkFakeObjects(assert, fakeStemmableNote, fakeStaveNote) { + assert.ok(isStemmableNote(fakeStemmableNote), 'Fake StemmableNote is a StemmableNote.'); + assert.notOk(isNote(fakeStemmableNote), 'Fake StemmableNote is not a Note (no ancestors with the correct CATEGORY).'); + assert.ok(isCategory(fakeStaveNote, 'StaveNote'), 'Fake StaveNote is a StaveNote.'); + assert.ok(isStaveNote(fakeStaveNote), 'Fake StaveNote is a StaveNote (via helper function).'); + assert.ok(isCategory(fakeStaveNote, 'StemmableNote'), 'Fake StaveNote is also a StemmableNote (via inheritance).'); + assert.notOk(isNote(fakeStaveNote), 'Fake StaveNote is not a Note. CATEGORY does not match.'); +} +function fakeES5(assert) { + function FakeStemmableNote() { + this.isFake = true; + } + FakeStemmableNote.CATEGORY = StemmableNote.CATEGORY; + function FakeStaveNote() { + FakeStemmableNote.call(this); + } + FakeStaveNote.CATEGORY = StaveNote.CATEGORY; + FakeStaveNote.prototype = Object.create(FakeStemmableNote.prototype); + FakeStaveNote.prototype.constructor = FakeStaveNote; + const fakeStemmableNote = new FakeStemmableNote(); + const fakeStaveNote = new FakeStaveNote(); + checkFakeObjects(assert, fakeStemmableNote, fakeStaveNote); +} +function fakeES6(assert) { + class FakeStemmableNote { + } + FakeStemmableNote.CATEGORY = StemmableNote.CATEGORY; + class FakeStaveNote extends FakeStemmableNote { + } + FakeStaveNote.CATEGORY = StaveNote.CATEGORY; + const fakeStemmableNote = new FakeStemmableNote(); + const fakeStaveNote = new FakeStaveNote(); + checkFakeObjects(assert, fakeStemmableNote, fakeStaveNote); +} +function edgeCaseES5vsES6(assert) { + class Z extends Object { + } + class Y extends Z { + } + class X extends Y { + } + const zInstance = new Z(); + const xInstance = new X(); + assert.ok(xInstance instanceof Object, 'es5 & es6: x IS an instanceof Object'); + assert.ok(zInstance instanceof Z, 'es6: z IS an instanceof Z'); + assert.ok(xInstance instanceof Y, 'es6: x IS an instanceof Y'); + assert.ok(xInstance instanceof Z, 'es6: x IS an instanceof Z'); +} +VexFlowTests.register(TypeGuardTests); +export { TypeGuardTests }; diff --git a/build/esm/tests/unison_tests.js b/build/esm/tests/unison_tests.js new file mode 100644 index 0000000000..3e398a37f8 --- /dev/null +++ b/build/esm/tests/unison_tests.js @@ -0,0 +1,74 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Tables } from '../src/tables.js'; +const UnisonTests = { + Start() { + QUnit.module('Unison'); + const run = VexFlowTests.runTests; + run('Simple(true)', simple, { unison: true, voice1: 'e4/q, e4/q, e4/h', voice2: 'e4/8, e4/8, e4/q, e4/h' }); + run('Simple(false)', simple, { unison: false, voice1: 'e4/q, e4/q, e4/h', voice2: 'e4/8, e4/8, e4/q, e4/h' }); + run('Accidentals(true)', simple, { + unison: true, + voice1: 'e4/q, e#4/q, e#4/h', + voice2: 'e4/8, e4/8, eb4/q, eb4/h', + }); + run('Accidentals(false)', simple, { + unison: false, + voice1: 'e4/q, e#4/q, e#4/h', + voice2: 'e4/8, e4/8, eb4/q, eb4/h', + }); + run('Dots(true)', simple, { unison: true, voice1: 'e4/q.., e4/16, e4/h', voice2: '(a4 e4)/q., e4/8, e4/h' }); + run('Dots(false)', simple, { unison: false, voice1: 'e4/q.., e4/16, e4/h', voice2: '(a4 e4)/q., e4/8, e4/h' }); + run('Breve(true)', breve, { unison: true }); + run('Breve(false)', breve, { unison: false }); + run('Style(true)', style, { unison: true }); + run('Style(false)', style, { unison: false }); + }, +}; +function simple(options) { + Tables.UNISON = options.params.unison; + const vf = VexFlowTests.makeFactory(options, 500, 200); + const score = vf.EasyScore(); + const system = vf.System({ y: 40, x: 10, width: 400 }); + system.addStave({ + voices: [score.voice(score.notes(options.params.voice1)), score.voice(score.notes(options.params.voice2))], + }); + system.getStaves()[0].setClef('treble'); + system.getStaves()[0].setTimeSignature('4/4'); + vf.draw(); + options.assert.expect(0); +} +function style(options) { + Tables.UNISON = options.params.unison; + const vf = VexFlowTests.makeFactory(options, 500, 200); + const score = vf.EasyScore(); + const system = vf.System({ y: 40, x: 10, width: 400 }); + const notes1 = score.notes('e4/q, e4/q, e4/h'); + const notes2 = score.notes('e4/8, e4/8, e4/q, e4/h'); + notes1[2].setStyle({ fillStyle: 'blue', strokeStyle: 'blue' }); + notes2[3].setStyle({ fillStyle: 'green', strokeStyle: 'green' }); + system.addStave({ + voices: [score.voice(notes1), score.voice(notes2)], + }); + system.getStaves()[0].setClef('treble'); + system.getStaves()[0].setTimeSignature('4/4'); + vf.draw(); + options.assert.expect(0); +} +function breve(options) { + Tables.UNISON = options.params.unison; + const vf = VexFlowTests.makeFactory(options, 500, 200); + const score = vf.EasyScore(); + const system = vf.System({ y: 40, x: 10, width: 400 }); + system.addStave({ + voices: [ + score.voice([vf.StaveNote({ keys: ['e/4'], duration: '1/2' })], { time: '8/4' }), + score.voice(score.notes('e4/1, e4/1'), { time: '8/4' }), + ], + }); + system.getStaves()[0].setClef('treble'); + system.getStaves()[0].setTimeSignature('8/4'); + vf.draw(); + options.assert.expect(0); +} +VexFlowTests.register(UnisonTests); +export { UnisonTests }; diff --git a/build/esm/tests/vexflow_test_helpers.js b/build/esm/tests/vexflow_test_helpers.js new file mode 100644 index 0000000000..fb57202bf4 --- /dev/null +++ b/build/esm/tests/vexflow_test_helpers.js @@ -0,0 +1,296 @@ +import { Factory, Flow, Font, Renderer } from '../src/index.js'; +import { globalObject } from '../src/util.js'; +const global = globalObject(); +let originalFontNames; +function useTempFontStack(fontName) { + originalFontNames = Flow.getMusicFont(); + Flow.setMusicFont(...VexFlowTests.FONT_STACKS[fontName]); +} +function restoreOriginalFontStack() { + Flow.setMusicFont(...originalFontNames); +} +if (!global.$) { + global.$ = (param) => { + let element; + if (typeof param !== 'string') { + element = param; + } + else if (param.startsWith('<')) { + const tagName = param.match(/[A-Za-z]+/g)[0]; + element = document.createElement(tagName); + } + else { + element = document.querySelector(param); + } + const $element = { + get(index) { + return element; + }, + addClass(c) { + element.classList.add(c); + return $element; + }, + text(t) { + element.textContent = t; + return $element; + }, + html(h) { + if (!h) { + return element.innerHTML; + } + else { + element.innerHTML = h; + return $element; + } + }, + append(...elementsToAppend) { + elementsToAppend.forEach((e) => { + element.appendChild(e); + }); + return $element; + }, + attr(attrName, val) { + element.setAttribute(attrName, val); + return $element; + }, + }; + return $element; + }; +} +function sanitizeName(name) { + return name.replace(/[^a-zA-Z0-9]/g, '_'); +} +const CANVAS_TEST_CONFIG = { + backend: Renderer.Backends.CANVAS, + tagName: 'canvas', + testType: 'Canvas', + fontStacks: ['Bravura'], +}; +const CANVAS_TEXT_CONFIG = { + backend: Renderer.Backends.CANVAS, + tagName: 'canvas', + testType: 'Canvas', + fontStacks: ['Bravura'], +}; +const SVG_TEST_CONFIG = { + backend: Renderer.Backends.SVG, + tagName: 'div', + testType: 'SVG', + fontStacks: ['Bravura', 'Gonville', 'Petaluma', 'Leland'], +}; +const SVG_TEXT_CONFIG = { + backend: Renderer.Backends.SVG, + tagName: 'div', + testType: 'SVG', + fontStacks: ['Bravura'], +}; +const NODE_TEST_CONFIG = { + backend: Renderer.Backends.CANVAS, + tagName: 'canvas', + testType: 'NodeCanvas', + fontStacks: ['Bravura', 'Gonville', 'Petaluma', 'Leland'], +}; +class VexFlowTests { + static register(test) { + VexFlowTests.tests.push(test); + } + static parseJobOptions(runOptions) { + let { jobs, job } = runOptions || { jobs: 1, job: 0 }; + if (window) { + const { location } = window; + if (location) { + const sps = new URLSearchParams(location.search); + const jobsParam = sps.get('jobs'); + const jobParam = sps.get('job'); + if (jobsParam) { + jobs = parseInt(jobsParam, 10); + } + if (jobParam) { + job = parseInt(jobParam, 10); + } + } + } + return { + jobs, + job, + }; + } + static run(runOptions) { + const { jobs, job } = VexFlowTests.parseJobOptions(runOptions); + VexFlowTests.tests.forEach((test, idx) => { + if (jobs === 1 || idx % jobs === job) { + test.Start(); + } + }); + } + static set NODE_FONT_STACKS(fontStacks) { + NODE_TEST_CONFIG.fontStacks = fontStacks; + } + static generateTestID(prefix) { + return prefix + '_' + VexFlowTests.NEXT_TEST_ID++; + } + static runTests(name, testFunc, params) { + VexFlowTests.runCanvasTest(name, testFunc, params); + VexFlowTests.runSVGTest(name, testFunc, params); + VexFlowTests.runNodeTest(name, testFunc, params); + } + static runTextTests(name, testFunc, params) { + VexFlowTests.runCanvasText(name, testFunc, params); + VexFlowTests.runSVGText(name, testFunc, params); + } + static createTest(elementId, testTitle, tagName, titleId = '') { + const anchorTestTitle = `${testTitle}`; + const title = $('
      ').addClass('name').attr('id', titleId).html(anchorTestTitle).get(0); + const vexOutput = $(`<${tagName}/>`).addClass('vex-tabdiv').attr('id', elementId).get(0); + const container = $('
      ').addClass('testcanvas').append(title, vexOutput).get(0); + $('#qunit-tests').append(container); + return vexOutput; + } + static makeFactory(options, width = 450, height = 140) { + const { elementId, backend } = options; + return new Factory({ renderer: { elementId, backend, width, height } }); + } + static runCanvasTest(name, testFunc, params) { + if (VexFlowTests.RUN_CANVAS_TESTS) { + const helper = null; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, CANVAS_TEST_CONFIG), { name, testFunc, params, helper })); + } + } + static runCanvasText(name, testFunc, params) { + if (VexFlowTests.RUN_CANVAS_TESTS) { + const helper = null; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, CANVAS_TEXT_CONFIG), { name, testFunc, params, helper })); + } + } + static runSVGTest(name, testFunc, params) { + if (VexFlowTests.RUN_SVG_TESTS) { + const helper = null; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, SVG_TEST_CONFIG), { name, testFunc, params, helper })); + } + } + static runSVGText(name, testFunc, params) { + if (VexFlowTests.RUN_SVG_TESTS) { + const helper = null; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, SVG_TEXT_CONFIG), { name, testFunc, params, helper })); + } + } + static runNodeTest(name, testFunc, params) { + if (VexFlowTests.RUN_NODE_TESTS) { + const helper = VexFlowTests.runNodeTestHelper; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, NODE_TEST_CONFIG), { name, testFunc, params, helper })); + } + } + static runNodeTestHelper(fontName, element) { + if (Renderer.lastContext !== undefined) { + const moduleName = sanitizeName(QUnit.module.name); + const testName = sanitizeName(QUnit.test.name); + const onlyBravura = NODE_TEST_CONFIG.fontStacks.length === 1 && fontName === 'Bravura'; + const fontInfo = onlyBravura ? '' : `.${fontName}`; + const fileName = `${VexFlowTests.NODE_IMAGEDIR}/${moduleName}.${testName}${fontInfo}.png`; + const imageData = element.toDataURL().split(';base64,').pop(); + const imageBuffer = Buffer.from(imageData, 'base64'); + VexFlowTests.shims.fs.writeFileSync(fileName, imageBuffer, { encoding: 'base64' }); + } + } + static runWithParams({ fontStacks, testFunc, name, params, backend, tagName, testType, helper }) { + if (name === undefined) { + throw new Error('Test name is undefined.'); + } + const testTypeLowerCase = testType.toLowerCase(); + fontStacks.forEach((fontStackName) => { + QUnit.test(name, (assert) => { + useTempFontStack(fontStackName); + const elementId = VexFlowTests.generateTestID(`${testTypeLowerCase}_` + fontStackName); + const moduleName = assert.test.module.name; + const title = moduleName + ' › ' + name + ` › ${testType} + ${fontStackName}`; + let prefix = ''; + if (testTypeLowerCase === 'canvas') { + prefix = testTypeLowerCase + '_'; + } + else { + } + const titleId = `${prefix}${sanitizeName(moduleName)}.${sanitizeName(name)}.${fontStackName}`; + const element = VexFlowTests.createTest(elementId, title, tagName, titleId); + const options = { elementId, params, assert, backend }; + const isSVG = backend === Renderer.Backends.SVG; + const contextBuilder = isSVG ? Renderer.getSVGContext : Renderer.getCanvasContext; + testFunc(options, contextBuilder); + restoreOriginalFontStack(); + if (helper) + helper(fontStackName, element); + }); + }); + } + static plotLegendForNoteWidth(ctx, x, y) { + ctx.save(); + ctx.setFont(Font.SANS_SERIF, 8); + const spacing = 12; + let lastY = y; + function legend(color, text) { + ctx.beginPath(); + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + ctx.setLineWidth(10); + ctx.moveTo(x, lastY - 4); + ctx.lineTo(x + 10, lastY - 4); + ctx.stroke(); + ctx.setFillStyle('black'); + ctx.fillText(text, x + 15, lastY); + lastY += spacing; + } + legend('green', 'Note + Flag'); + legend('red', 'Modifiers'); + legend('#999', 'Displaced Head'); + legend('#DDD', 'Formatter Shift'); + ctx.restore(); + } +} +VexFlowTests.tests = []; +VexFlowTests.RUN_CANVAS_TESTS = true; +VexFlowTests.RUN_SVG_TESTS = true; +VexFlowTests.RUN_NODE_TESTS = false; +VexFlowTests.Font = { size: 10 }; +VexFlowTests.FONT_STACKS = { + Bravura: ['Bravura', 'Custom'], + Gonville: ['Gonville', 'Bravura', 'Custom'], + Petaluma: ['Petaluma', 'Gonville', 'Bravura', 'Custom'], + Leland: ['Leland', 'Bravura', 'Custom'], +}; +VexFlowTests.NEXT_TEST_ID = 0; +export { VexFlowTests }; +export const concat = (a, b) => a.concat(b); +export const MAJOR_KEYS = [ + 'C', + 'F', + 'Bb', + 'Eb', + 'Ab', + 'Db', + 'Gb', + 'Cb', + 'G', + 'D', + 'A', + 'E', + 'B', + 'F#', + 'C#', +]; +export const MINOR_KEYS = [ + 'Am', + 'Dm', + 'Gm', + 'Cm', + 'Fm', + 'Bbm', + 'Ebm', + 'Abm', + 'Em', + 'Bm', + 'F#m', + 'C#m', + 'G#m', + 'D#m', + 'A#m', +]; +Flow.Test = VexFlowTests; diff --git a/build/esm/tests/vf_prefix_tests.js b/build/esm/tests/vf_prefix_tests.js new file mode 100644 index 0000000000..bae6b9c6e4 --- /dev/null +++ b/build/esm/tests/vf_prefix_tests.js @@ -0,0 +1,115 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Accidental, Annotation, Articulation, Barline, BarNote, Beam, Bend, BoundingBox, BoundingBoxComputation, ChordSymbol, Clef, ClefNote, Crescendo, Curve, Dot, EasyScore, Element, Factory, Flow, Font, Formatter, Fraction, FretHandFinger, GhostNote, Glyph, GlyphNote, GraceNote, GraceNoteGroup, GraceTabNote, KeyManager, KeySignature, KeySigNote, Modifier, ModifierContext, MultiMeasureRest, Music, Note, NoteHead, NoteSubGroup, Ornament, Parser, PedalMarking, Registry, Renderer, RepeatNote, Repetition, Stave, StaveConnector, StaveHairpin, StaveLine, StaveModifier, StaveNote, StaveTempo, StaveText, StaveTie, Stem, StringNumber, Stroke, System, TabNote, TabSlide, TabStave, TabTie, TextBracket, TextDynamics, TextFormatter, TextNote, TickContext, TimeSignature, TimeSigNote, Tremolo, Tuning, Tuplet, Vibrato, VibratoBracket, Voice, Volta, } from '../src/index.js'; +const VFPrefixTests = { + Start() { + QUnit.module('VF.* API'); + QUnit.test('VF.* API', VF_Prefix); + QUnit.test('VF Alias', VF_Alias); + }, +}; +function VF_Prefix(assert) { + const VF = Vex.Flow; + assert.equal(Accidental, VF.Accidental); + assert.equal(Annotation, VF.Annotation); + assert.equal(Articulation, VF.Articulation); + assert.equal(Barline, VF.Barline); + assert.equal(BarNote, VF.BarNote); + assert.equal(Beam, VF.Beam); + assert.equal(Bend, VF.Bend); + assert.equal(BoundingBox, VF.BoundingBox); + assert.equal(BoundingBoxComputation, VF.BoundingBoxComputation); + assert.equal(ChordSymbol, VF.ChordSymbol); + assert.equal(Clef, VF.Clef); + assert.equal(ClefNote, VF.ClefNote); + assert.equal(Crescendo, VF.Crescendo); + assert.equal(Curve, VF.Curve); + assert.equal(Dot, VF.Dot); + assert.equal(EasyScore, VF.EasyScore); + assert.equal(Element, VF.Element); + assert.equal(Factory, VF.Factory); + assert.equal(Flow.RESOLUTION, VF.RESOLUTION); + assert.equal(Font, VF.Font); + assert.equal(Formatter, VF.Formatter); + assert.propEqual(new Formatter(), new VF.Formatter(), 'new Formatter()'); + assert.equal(Fraction, VF.Fraction); + assert.equal(FretHandFinger, VF.FretHandFinger); + assert.equal(GhostNote, VF.GhostNote); + assert.equal(Glyph, VF.Glyph); + assert.equal(GlyphNote, VF.GlyphNote); + assert.equal(GraceNote, VF.GraceNote); + assert.equal(GraceNoteGroup, VF.GraceNoteGroup); + assert.equal(GraceTabNote, VF.GraceTabNote); + assert.equal(KeyManager, VF.KeyManager); + assert.equal(KeySignature, VF.KeySignature); + assert.equal(KeySigNote, VF.KeySigNote); + assert.equal(Modifier, VF.Modifier); + assert.equal(ModifierContext, VF.ModifierContext); + assert.equal(MultiMeasureRest, VF.MultiMeasureRest); + assert.equal(Music, VF.Music); + assert.equal(Note, VF.Note); + assert.equal(NoteHead, VF.NoteHead); + assert.equal(NoteSubGroup, VF.NoteSubGroup); + assert.equal(Ornament, VF.Ornament); + assert.equal(Parser, VF.Parser); + assert.equal(PedalMarking, VF.PedalMarking); + assert.equal(Registry, VF.Registry); + assert.equal(Renderer, VF.Renderer); + assert.equal(RepeatNote, VF.RepeatNote); + assert.equal(Repetition, VF.Repetition); + assert.equal(Stave, VF.Stave); + assert.notEqual(Stave, VF.StaveNote); + assert.equal(StaveConnector, VF.StaveConnector); + assert.equal(StaveHairpin, VF.StaveHairpin); + assert.equal(StaveLine, VF.StaveLine); + assert.equal(StaveModifier, VF.StaveModifier); + assert.equal(StaveNote, VF.StaveNote); + assert.equal(StaveTempo, VF.StaveTempo); + assert.equal(StaveText, VF.StaveText); + assert.equal(StaveTie, VF.StaveTie); + assert.equal(Stem, VF.Stem); + assert.equal(StringNumber, VF.StringNumber); + assert.equal(Stroke, VF.Stroke); + assert.equal(System, VF.System); + assert.equal(TabNote, VF.TabNote); + assert.equal(TabSlide, VF.TabSlide); + assert.equal(TabStave, VF.TabStave); + assert.equal(TabTie, VF.TabTie); + assert.equal(TextBracket, VF.TextBracket); + assert.equal(TextDynamics, VF.TextDynamics); + assert.equal(TextFormatter, VF.TextFormatter); + assert.equal(TextNote, VF.TextNote); + assert.equal(TickContext, VF.TickContext); + assert.equal(TimeSignature, VF.TimeSignature); + assert.equal(TimeSigNote, VF.TimeSigNote); + assert.equal(Tremolo, VF.Tremolo); + assert.equal(Tuning, VF.Tuning); + assert.equal(Tuplet, VF.Tuplet); + assert.equal(Vibrato, VF.Vibrato); + assert.equal(VibratoBracket, VF.VibratoBracket); + assert.equal(Voice, VF.Voice); + assert.equal(Volta, VF.Volta); +} +function VF_Alias(assert) { + const Flow = Vex.Flow; + const VFAliases = { + get VFAccidental() { + return Flow.Accidental; + }, + get VFAnnotation() { + return Flow.Annotation; + }, + get VFVibrato() { + return Flow.Vibrato; + }, + }; + const { VFVibrato, VFAccidental, VFAnnotation } = VFAliases; + assert.equal(Accidental, VFAccidental); + assert.equal(Annotation, VFAnnotation); + const vibrato = new VFVibrato(); + assert.ok(vibrato); + const acc1 = new VFAccidental('##'); + const acc2 = new Accidental('##'); + assert.equal(acc1.type, acc2.type); +} +VexFlowTests.register(VFPrefixTests); +export { VFPrefixTests }; diff --git a/build/esm/tests/vibrato_tests.js b/build/esm/tests/vibrato_tests.js new file mode 100644 index 0000000000..3d194870f2 --- /dev/null +++ b/build/esm/tests/vibrato_tests.js @@ -0,0 +1,86 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Bend, Font, Formatter, TabNote, TabStave, Vibrato } from '../src/index.js'; +const VibratoTests = { + Start() { + QUnit.module('Vibrato'); + const run = VexFlowTests.runTests; + run('Simple Vibrato', simple); + run('Harsh Vibrato', harsh); + run('Vibrato with Bend', withBend); + }, +}; +const tabNote = (noteStruct) => new TabNote(noteStruct); +function simple(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }).addModifier(new Vibrato(), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'h', + }).addModifier(new Vibrato(), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Simple Vibrato'); +} +function harsh(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }).addModifier(new Vibrato().setHarsh(true), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'h', + }).addModifier(new Vibrato().setHarsh(true), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Harsh Vibrato'); +} +function withBend(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.3, 1.3); + ctx.setFont(Font.SANS_SERIF, VexFlowTests.Font.size); + const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 9 }, + { str: 3, fret: 9 }, + ], + duration: 'q', + }) + .addModifier(new Bend('1/2', true), 0) + .addModifier(new Bend('1/2', true), 1) + .addModifier(new Vibrato(), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'q', + }) + .addModifier(new Bend('Full', false), 0) + .addModifier(new Vibrato().setVibratoWidth(60), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'h', + }).addModifier(new Vibrato().setVibratoWidth(120).setHarsh(true), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Vibrato with Bend'); +} +VexFlowTests.register(VibratoTests); +export { VibratoTests }; diff --git a/build/esm/tests/vibratobracket_tests.js b/build/esm/tests/vibratobracket_tests.js new file mode 100644 index 0000000000..d4e7abfb17 --- /dev/null +++ b/build/esm/tests/vibratobracket_tests.js @@ -0,0 +1,45 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +const VibratoBracketTests = { + Start() { + QUnit.module('VibratoBracket'); + const run = VexFlowTests.runTests; + run('Simple VibratoBracket', simple); + run('Harsh VibratoBracket Without End Note', withoutEndNote); + run('Harsh VibratoBracket Without Start Note', withoutStartNote); + }, +}; +function createTest(noteGroup, setupVibratoBracket) { + return (options) => { + const factory = VexFlowTests.makeFactory(options, 650, 200); + const stave = factory.Stave(); + const score = factory.EasyScore(); + const voice = score.voice(score.notes(noteGroup)); + setupVibratoBracket(factory, voice.getTickables()); + factory.Formatter().joinVoices([voice]).formatToStave([voice], stave); + factory.draw(); + options.assert.ok(true); + }; +} +const simple = createTest('c4/4, c4, c4, c4', (factory, notes) => { + factory.VibratoBracket({ + from: notes[0], + to: notes[3], + options: { line: 2 }, + }); +}); +const withoutEndNote = createTest('c4/4, c4, c4, c4', (factory, notes) => { + factory.VibratoBracket({ + from: notes[2], + to: null, + options: { line: 2, harsh: true }, + }); +}); +const withoutStartNote = createTest('c4/4, c4, c4, c4', (factory, notes) => { + factory.VibratoBracket({ + from: null, + to: notes[2], + options: { line: 2, harsh: true }, + }); +}); +VexFlowTests.register(VibratoBracketTests); +export { VibratoBracketTests }; diff --git a/build/esm/tests/voice_tests.js b/build/esm/tests/voice_tests.js new file mode 100644 index 0000000000..f45fdd22c1 --- /dev/null +++ b/build/esm/tests/voice_tests.js @@ -0,0 +1,69 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Flow } from '../src/flow.js'; +import { Formatter } from '../src/formatter.js'; +import { Stave } from '../src/stave.js'; +import { Barline } from '../src/stavebarline.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Voice } from '../src/voice.js'; +import { MockTickable } from './mocks.js'; +const VoiceTests = { + Start() { + QUnit.module('Voice'); + QUnit.test('Strict Test', strict); + QUnit.test('Ignore Test', ignore); + VexFlowTests.runTests('Full Voice Mode Test', full); + }, +}; +const BEAT = (1 * Flow.RESOLUTION) / 4; +const createTickable = () => new MockTickable().setTicks(BEAT); +function strict(assert) { + assert.expect(8); + const tickables = [createTickable(), createTickable(), createTickable()]; + const voice = new Voice(Flow.TIME4_4); + assert.equal(voice.getTotalTicks().value(), BEAT * 4, '4/4 Voice has 4 beats'); + assert.equal(voice.getTicksUsed().value(), BEAT * 0, 'No beats in voice'); + voice.addTickables(tickables); + assert.equal(voice.getTicksUsed().value(), BEAT * 3, 'Three beats in voice'); + voice.addTickable(createTickable()); + assert.equal(voice.getTicksUsed().value(), BEAT * 4, 'Four beats in voice'); + assert.equal(voice.isComplete(), true, 'Voice is complete'); + const numeratorBeforeException = voice.getTicksUsed().numerator; + assert.throws(() => voice.addTickable(createTickable()), /BadArgument/, '"Too many ticks" exception'); + assert.equal(voice.getTicksUsed().numerator, numeratorBeforeException, 'Revert `ticksUsed` after a "Too many ticks" exception'); + assert.equal(voice.getSmallestTickCount().value(), BEAT, 'Smallest tick count is BEAT'); +} +function ignore(assert) { + const tickables = [ + createTickable(), + createTickable(), + createTickable().setIgnoreTicks(true), + createTickable(), + createTickable().setIgnoreTicks(true), + createTickable(), + ]; + const voice = new Voice(Flow.TIME4_4); + voice.addTickables(tickables); + assert.ok(true, 'all pass'); +} +function full(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 550, 200); + const stave = new Stave(10, 50, 500).addClef('treble').addTimeSignature('4/4').setEndBarType(Barline.type.END); + const notes = [ + new StaveNote({ keys: ['c/4'], duration: '4' }), + new StaveNote({ keys: ['d/4'], duration: '4' }), + new StaveNote({ keys: ['r/4'], duration: '4r' }), + ]; + notes.forEach((note) => note.setStave(stave)); + const voice = new Voice(Flow.TIME4_4).setMode(Voice.Mode.FULL).addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + stave.setContext(ctx).draw(); + voice.draw(ctx); + const bb = voice.getBoundingBox(); + if (bb) { + ctx.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH()); + } + ctx.stroke(); + options.assert.throws(() => voice.addTickable(new StaveNote({ keys: ['c/4'], duration: '2' })), /BadArgument/, 'Voice cannot exceed full amount of ticks'); +} +VexFlowTests.register(VoiceTests); +export { VoiceTests }; diff --git a/build/types/entry/vexflow-bravura.d.ts b/build/types/entry/vexflow-bravura.d.ts new file mode 100644 index 0000000000..a5193666d7 --- /dev/null +++ b/build/types/entry/vexflow-bravura.d.ts @@ -0,0 +1,2 @@ +export * from '../src/index'; +export * as default from '../src/index'; diff --git a/build/types/entry/vexflow-core.d.ts b/build/types/entry/vexflow-core.d.ts new file mode 100644 index 0000000000..a5193666d7 --- /dev/null +++ b/build/types/entry/vexflow-core.d.ts @@ -0,0 +1,2 @@ +export * from '../src/index'; +export * as default from '../src/index'; diff --git a/build/types/entry/vexflow-debug.d.ts b/build/types/entry/vexflow-debug.d.ts new file mode 100644 index 0000000000..a5193666d7 --- /dev/null +++ b/build/types/entry/vexflow-debug.d.ts @@ -0,0 +1,2 @@ +export * from '../src/index'; +export * as default from '../src/index'; diff --git a/build/types/entry/vexflow-font-bravura.d.ts b/build/types/entry/vexflow-font-bravura.d.ts new file mode 100644 index 0000000000..e49fb945ac --- /dev/null +++ b/build/types/entry/vexflow-font-bravura.d.ts @@ -0,0 +1,3930 @@ +export declare const Font: { + data: { + glyphs: { + bracketTop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + bracketBottom: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + barlineTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + segno: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + coda: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + gClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + cClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + unpitchedPercussionClef1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + '6stringTabClef': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig0: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig3: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig4: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig5: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig6: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig7: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig8: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig9: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCutCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlusSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRightSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeftSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleX: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWholeSquare: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareWhite: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesis: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadMoonBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleLeftBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRightBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRoundDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + augmentationDot: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + tremolo1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNatural: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneFlatStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBakiyeFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKomaSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKucukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKoron: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSori: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkComma: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkUpbow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesura: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesuraCurved: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restMaxima: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWholeLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalfLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restQuarter: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest8th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest16th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest32nd: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest64th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest128th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicPiano: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicMezzo: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicForte: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicRinforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicSforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicZ: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurnSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentMordent: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentShortTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTremblement: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompAppoggTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillDAnglebert: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillBach: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillSuffixDandrieu: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillLowerSuffix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassScoop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassDoitMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFallLipShort: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassLiftMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFallRoughMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassBend: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteClosed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteOpen: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFlip: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassJazzTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassSmear: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsDownBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsUpBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsHarmonic: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedLeftHandPizzicato: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalPed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pictChokeCymbal: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + wiggleArpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arrowheadBlackUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arrowheadBlackDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arpeggiatoDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat1Bar: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat2Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat4Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeatBarSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymHalfDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymAugmented: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMajorSeventh: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMinor: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensLeftTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensRightTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymBracketLeftTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymBracketRightTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensLeftVeryTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensRightVeryTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiagonalArrangementSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v7KleismaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v7KleismaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal25SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal25SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal35MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal35MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal35LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal35LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp25SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat25SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v7kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v7kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v7kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v7kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp25SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat25SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp35MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat35MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp35LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat35LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp25SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat25SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp7CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat7CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5v7kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5v7kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v11KleismaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v11KleismaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal17CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal17CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal55CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal55CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v11CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v11CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v11SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v11SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v11SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v11SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v11CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v11CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp55CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat55CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp17CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat17CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v11kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v11kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v11kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v11kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp17CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat17CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp55CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat55CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v11CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v11CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v11SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v11SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5v11SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5v11SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp7v11CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat7v11CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp55CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat55CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp17CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat17CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp7v11kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat7v11kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal23CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal23CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v19CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v19CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v23SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v23SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp23CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat23CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp23CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat23CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5v23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5v23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp23CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat23CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal19SchismaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal19SchismaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal17KleismaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal17KleismaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal143CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal143CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v49CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v49CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal19CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal19CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v19CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v19CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal23SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal23SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v13MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v13MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v19MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v19MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v49MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v49MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v19LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v19LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v13LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v13LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp49SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat49SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11v49CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11v49CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp143CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat143CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp17kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat17kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp19sDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat19sUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp19sUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat19sDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp17kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat17kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp143CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat143CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11v49CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11v49CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp49SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat49SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v13MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v13MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11v19MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11v19MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp49MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat49MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v49MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v49MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp49LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat49LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11v19LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11v19LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v13LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v13LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp49SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat49SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp7v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat7v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp11v49CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat11v49CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp143CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat143CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp17kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat17kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp19sDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat19sUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalShaftUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalShaftDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalAcute: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalGrave: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal1MinaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal1MinaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal2MinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal2MinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal1TinaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal1TinaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal2TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal2TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal3TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal3TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal4TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal4TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal6TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal6TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal8TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal8TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal9TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal9TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFractionalTinaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFractionalTinaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlatAndFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalWilsonPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalWilsonMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; + }; + metrics: { + smufl: boolean; + stave: { + padding: number; + endPaddingMax: number; + endPaddingMin: number; + unalignedNotePadding: number; + }; + accidental: { + noteheadAccidentalPadding: number; + leftPadding: number; + accidentalSpacing: number; + }; + chordSymbol: { + global: { + superscriptOffset: number; + subscriptOffset: number; + kerningOffset: number; + lowerKerningText: string[]; + upperKerningText: string[]; + spacing: number; + superSubRatio: number; + }; + glyphs: { + csymDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymHalfDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymAugmented: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymDiagonalArrangementSlash: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMinor: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMajorSeventh: { + leftSideBearing: number; + yOffset: number; + advanceWidth: number; + }; + accidentalSharp: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + accidentalFlat: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + }; + }; + clef_default: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + clef_small: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + ornament: { + brassScoop: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassDoitMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallLipShort: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassLiftMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallRoughMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassBend: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteClosed: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteOpen: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFlip: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassJazzTurn: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassSmear: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + }; + parenthesis: { + default: { + width: number; + }; + gracenote: { + width: number; + }; + }; + pedalMarking: {}; + digits: { + shiftLine: number; + shiftY: number; + }; + articulation: { + articStaccatissimoAbove: { + padding: number; + }; + articStaccatissimoBelow: { + padding: number; + }; + }; + tremolo: { + default: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + grace: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + }; + staveRepetition: { + symbolText: { + offsetX: number; + offsetY: number; + spacing: number; + }; + coda: { + offsetY: number; + }; + segno: { + offsetY: number; + }; + }; + noteHead: { + minPadding: number; + }; + stem: { + heightAdjustmentForFlag: number; + noteHead: { + noteheadTriangleUpHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadSquareWhite: { + offsetYBaseStemDown: number; + offsetYBaseStemUp: number; + }; + }; + }; + stringNumber: { + verticalPadding: number; + stemPadding: number; + leftPadding: number; + rightPadding: number; + }; + tuplet: { + noteHeadOffset: number; + stemOffset: number; + bottomLine: number; + topModifierOffset: number; + }; + glyphs: { + coda: { + shiftX: number; + shiftY: number; + }; + segno: { + shiftX: number; + }; + flag: { + shiftX: number; + staveTempo: { + shiftX: number; + }; + }; + clef_default: {}; + clef_small: { + gClef: { + shiftY: number; + }; + }; + clefNote_default: {}; + clefNote_small: {}; + stroke_straight: { + arrowheadBlackDown: { + shiftX: number; + }; + arrowheadBlackUp: { + shiftX: number; + }; + }; + stroke_wiggly: { + arrowheadBlackDown: { + shiftX: number; + shiftY: number; + }; + arrowheadBlackUp: { + shiftX: number; + shiftY: number; + }; + }; + textNote: { + breathMarkTick: { + shiftY: number; + }; + breathMarkComma: {}; + segno: { + shiftX: number; + shiftY: number; + }; + coda: { + shiftX: number; + shiftY: number; + }; + ornamentTrill: { + shiftX: number; + shiftY: number; + }; + ornamentTurn: {}; + ornamentTurnSlash: {}; + ornamentMordent: { + shiftX: number; + }; + ornamentShortTrill: { + shiftX: number; + }; + }; + noteHead: {}; + chordSymbol: { + scale: number; + }; + }; + }; +}; +export default Font; diff --git a/build/types/entry/vexflow-font-custom.d.ts b/build/types/entry/vexflow-font-custom.d.ts new file mode 100644 index 0000000000..91caa916bd --- /dev/null +++ b/build/types/entry/vexflow-font-custom.d.ts @@ -0,0 +1,429 @@ +export declare const Font: { + data: { + resolution: number; + fontFamily: string; + glyphs: { + vexAccidentalMicrotonal1: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexAccidentalMicrotonal3: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexAccidentalMicrotonal4: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexNoteHeadRectBlack: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexNoteHeadRectWhite: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexWiggleArpeggioUp: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + }; + }; + metrics: { + smufl: boolean; + stave: { + padding: number; + endPaddingMax: number; + endPaddingMin: number; + unalignedNotePadding: number; + }; + accidental: { + noteheadAccidentalPadding: number; + leftPadding: number; + accidentalSpacing: number; + }; + chordSymbol: { + global: { + superscriptOffset: number; + subscriptOffset: number; + kerningOffset: number; + lowerKerningText: string[]; + upperKerningText: string[]; + spacing: number; + superSubRatio: number; + }; + glyphs: { + csymDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymHalfDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymAugmented: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymDiagonalArrangementSlash: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMinor: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMajorSeventh: { + leftSideBearing: number; + yOffset: number; + advanceWidth: number; + }; + accidentalSharp: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + accidentalFlat: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + }; + }; + clef_default: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + clef_small: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + ornament: { + brassScoop: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassDoitMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallLipShort: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassLiftMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallRoughMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassBend: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteClosed: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteOpen: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFlip: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassJazzTurn: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassSmear: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + }; + parenthesis: { + default: { + width: number; + }; + gracenote: { + width: number; + }; + }; + pedalMarking: {}; + digits: { + shiftLine: number; + shiftY: number; + }; + articulation: { + articStaccatissimoAbove: { + padding: number; + }; + articStaccatissimoBelow: { + padding: number; + }; + }; + tremolo: { + default: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + grace: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + }; + staveRepetition: { + symbolText: { + offsetX: number; + offsetY: number; + spacing: number; + }; + coda: { + offsetY: number; + }; + segno: { + offsetY: number; + }; + }; + noteHead: { + minPadding: number; + }; + stem: { + heightAdjustmentForFlag: number; + noteHead: { + noteheadTriangleUpHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadSquareWhite: { + offsetYBaseStemDown: number; + offsetYBaseStemUp: number; + }; + }; + }; + stringNumber: { + verticalPadding: number; + stemPadding: number; + leftPadding: number; + rightPadding: number; + }; + tuplet: { + noteHeadOffset: number; + stemOffset: number; + bottomLine: number; + topModifierOffset: number; + }; + glyphs: { + coda: { + shiftX: number; + shiftY: number; + }; + segno: { + shiftX: number; + }; + flag: { + shiftX: number; + staveTempo: { + shiftX: number; + }; + }; + clef_default: {}; + clef_small: { + gClef: { + shiftY: number; + }; + }; + clefNote_default: {}; + clefNote_small: {}; + stroke_straight: { + arrowheadBlackDown: { + shiftX: number; + }; + arrowheadBlackUp: { + shiftX: number; + }; + }; + stroke_wiggly: { + arrowheadBlackDown: { + shiftX: number; + shiftY: number; + }; + arrowheadBlackUp: { + shiftX: number; + shiftY: number; + }; + }; + textNote: { + breathMarkTick: { + shiftY: number; + }; + breathMarkComma: {}; + segno: { + shiftX: number; + shiftY: number; + }; + coda: { + shiftX: number; + shiftY: number; + }; + ornamentTrill: { + shiftX: number; + shiftY: number; + }; + ornamentTurn: {}; + ornamentTurnSlash: {}; + ornamentMordent: { + shiftX: number; + }; + ornamentShortTrill: { + shiftX: number; + }; + }; + noteHead: {}; + chordSymbol: { + scale: number; + }; + }; + }; +}; +export default Font; diff --git a/build/types/entry/vexflow-font-gonville.d.ts b/build/types/entry/vexflow-font-gonville.d.ts new file mode 100644 index 0000000000..176b896adc --- /dev/null +++ b/build/types/entry/vexflow-font-gonville.d.ts @@ -0,0 +1,1506 @@ +export declare const Font: { + data: { + glyphs: { + bracketTop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + bracketBottom: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + barlineTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + segno: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + coda: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + gClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + cClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + unpitchedPercussionClef1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + '6stringTabClef': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig0: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig3: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig4: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig5: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig6: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig7: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig8: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig9: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCutCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlusSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRightSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeftSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleX: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + augmentationDot: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + tremolo1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNatural: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneFlatStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBakiyeFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKomaSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKucukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkComma: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkUpbow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesura: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesuraCurved: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restMaxima: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWholeLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalfLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restQuarter: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest8th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest16th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest32nd: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest64th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest128th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicPiano: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicMezzo: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicForte: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicRinforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicSforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicZ: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurnSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentMordent: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentShortTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTremblement: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompAppoggTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillDAnglebert: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillBach: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillSuffixDandrieu: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillLowerSuffix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsDownBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsUpBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsHarmonic: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedLeftHandPizzicato: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalPed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pictChokeCymbal: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + wiggleArpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arrowheadBlackUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arrowheadBlackDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; + }; + metrics: { + smufl: boolean; + stave: { + padding: number; + endPaddingMax: number; + endPaddingMin: number; + unalignedNotePadding: number; + }; + accidental: { + noteheadAccidentalPadding: number; + leftPadding: number; + accidentalSpacing: number; + }; + chordSymbol: { + global: { + superscriptOffset: number; + subscriptOffset: number; + kerningOffset: number; + lowerKerningText: string[]; + upperKerningText: string[]; + spacing: number; + superSubRatio: number; + }; + glyphs: { + csymDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymHalfDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymAugmented: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymDiagonalArrangementSlash: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMinor: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMajorSeventh: { + leftSideBearing: number; + yOffset: number; + advanceWidth: number; + }; + accidentalSharp: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + accidentalFlat: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + }; + }; + clef_default: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + clef_small: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + ornament: { + brassScoop: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassDoitMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallLipShort: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassLiftMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallRoughMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassBend: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteClosed: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteOpen: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFlip: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassJazzTurn: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassSmear: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + }; + parenthesis: { + default: { + width: number; + }; + gracenote: { + width: number; + }; + }; + pedalMarking: {}; + digits: { + shiftLine: number; + shiftY: number; + }; + articulation: { + articStaccatissimoAbove: { + padding: number; + }; + articStaccatissimoBelow: { + padding: number; + }; + }; + tremolo: { + default: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + grace: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + }; + staveRepetition: { + symbolText: { + offsetX: number; + offsetY: number; + spacing: number; + }; + coda: { + offsetY: number; + }; + segno: { + offsetY: number; + }; + }; + noteHead: { + minPadding: number; + }; + stem: { + heightAdjustmentForFlag: number; + noteHead: { + noteheadTriangleUpHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadSquareWhite: { + offsetYBaseStemDown: number; + offsetYBaseStemUp: number; + }; + }; + }; + stringNumber: { + verticalPadding: number; + stemPadding: number; + leftPadding: number; + rightPadding: number; + }; + tuplet: { + noteHeadOffset: number; + stemOffset: number; + bottomLine: number; + topModifierOffset: number; + }; + glyphs: { + coda: { + shiftX: number; + shiftY: number; + }; + segno: { + shiftX: number; + }; + flag: { + shiftX: number; + staveTempo: { + shiftX: number; + }; + }; + clef_default: {}; + clef_small: { + gClef: { + shiftY: number; + }; + }; + clefNote_default: {}; + clefNote_small: {}; + stroke_straight: { + arrowheadBlackDown: { + shiftX: number; + }; + arrowheadBlackUp: { + shiftX: number; + }; + }; + stroke_wiggly: { + arrowheadBlackDown: { + shiftX: number; + shiftY: number; + }; + arrowheadBlackUp: { + shiftX: number; + shiftY: number; + }; + }; + textNote: { + breathMarkTick: { + shiftY: number; + }; + breathMarkComma: {}; + segno: { + shiftX: number; + shiftY: number; + }; + coda: { + shiftX: number; + shiftY: number; + }; + ornamentTrill: { + shiftX: number; + shiftY: number; + }; + ornamentTurn: {}; + ornamentTurnSlash: {}; + ornamentMordent: { + shiftX: number; + }; + ornamentShortTrill: { + shiftX: number; + }; + }; + noteHead: {}; + chordSymbol: { + scale: number; + }; + }; + }; +}; +export default Font; diff --git a/build/types/entry/vexflow-font-leland.d.ts b/build/types/entry/vexflow-font-leland.d.ts new file mode 100644 index 0000000000..4dd58cfb3d --- /dev/null +++ b/build/types/entry/vexflow-font-leland.d.ts @@ -0,0 +1,1578 @@ +export declare const Font: { + data: { + glyphs: { + bracketTop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + bracketBottom: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + segno: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + coda: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + gClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + cClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + unpitchedPercussionClef1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + '6stringTabClef': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig0: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig3: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig4: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig5: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig6: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig7: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig8: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig9: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCutCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleX: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWholeSquare: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareWhite: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadMoonBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleLeftBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRightBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRoundDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + augmentationDot: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + tremolo1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNatural: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneFlatStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBakiyeFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKucukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkComma: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesura: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesuraCurved: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restMaxima: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWholeLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalfLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restQuarter: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest8th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest16th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest32nd: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest64th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest128th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicPiano: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicMezzo: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicForte: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicRinforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicSforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicZ: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurnSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentMordent: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentShortTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTremblement: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompAppoggTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillDAnglebert: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillBach: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillSuffixDandrieu: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillLowerSuffix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteClosed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteOpen: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsDownBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsUpBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsHarmonic: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalPed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + wiggleArpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat1Bar: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat2Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat4Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeatBarSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymHalfDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymAugmented: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMajorSeventh: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlatAndFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; + }; + metrics: { + smufl: boolean; + stave: { + padding: number; + endPaddingMax: number; + endPaddingMin: number; + unalignedNotePadding: number; + }; + accidental: { + noteheadAccidentalPadding: number; + leftPadding: number; + accidentalSpacing: number; + }; + chordSymbol: { + global: { + superscriptOffset: number; + subscriptOffset: number; + kerningOffset: number; + lowerKerningText: string[]; + upperKerningText: string[]; + spacing: number; + superSubRatio: number; + }; + glyphs: { + csymDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymHalfDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymAugmented: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymDiagonalArrangementSlash: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMinor: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMajorSeventh: { + leftSideBearing: number; + yOffset: number; + advanceWidth: number; + }; + accidentalSharp: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + accidentalFlat: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + }; + }; + clef_default: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + clef_small: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + ornament: { + brassScoop: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassDoitMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallLipShort: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassLiftMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallRoughMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassBend: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteClosed: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteOpen: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFlip: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassJazzTurn: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassSmear: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + }; + parenthesis: { + default: { + width: number; + }; + gracenote: { + width: number; + }; + }; + pedalMarking: {}; + digits: { + shiftLine: number; + shiftY: number; + }; + articulation: { + articStaccatissimoAbove: { + padding: number; + }; + articStaccatissimoBelow: { + padding: number; + }; + }; + tremolo: { + default: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + grace: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + }; + staveRepetition: { + symbolText: { + offsetX: number; + offsetY: number; + spacing: number; + }; + coda: { + offsetY: number; + }; + segno: { + offsetY: number; + }; + }; + noteHead: { + minPadding: number; + }; + stem: { + heightAdjustmentForFlag: number; + noteHead: { + noteheadTriangleUpHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadSquareWhite: { + offsetYBaseStemDown: number; + offsetYBaseStemUp: number; + }; + }; + }; + stringNumber: { + verticalPadding: number; + stemPadding: number; + leftPadding: number; + rightPadding: number; + }; + tuplet: { + noteHeadOffset: number; + stemOffset: number; + bottomLine: number; + topModifierOffset: number; + }; + glyphs: { + coda: { + shiftX: number; + shiftY: number; + }; + segno: { + shiftX: number; + }; + flag: { + shiftX: number; + staveTempo: { + shiftX: number; + }; + }; + clef_default: {}; + clef_small: { + gClef: { + shiftY: number; + }; + }; + clefNote_default: {}; + clefNote_small: {}; + stroke_straight: { + arrowheadBlackDown: { + shiftX: number; + }; + arrowheadBlackUp: { + shiftX: number; + }; + }; + stroke_wiggly: { + arrowheadBlackDown: { + shiftX: number; + shiftY: number; + }; + arrowheadBlackUp: { + shiftX: number; + shiftY: number; + }; + }; + textNote: { + breathMarkTick: { + shiftY: number; + }; + breathMarkComma: {}; + segno: { + shiftX: number; + shiftY: number; + }; + coda: { + shiftX: number; + shiftY: number; + }; + ornamentTrill: { + shiftX: number; + shiftY: number; + }; + ornamentTurn: {}; + ornamentTurnSlash: {}; + ornamentMordent: { + shiftX: number; + }; + ornamentShortTrill: { + shiftX: number; + }; + }; + noteHead: {}; + chordSymbol: { + scale: number; + }; + }; + }; +}; +export default Font; diff --git a/build/types/entry/vexflow-font-petaluma.d.ts b/build/types/entry/vexflow-font-petaluma.d.ts new file mode 100644 index 0000000000..c402c8449d --- /dev/null +++ b/build/types/entry/vexflow-font-petaluma.d.ts @@ -0,0 +1,2026 @@ +export declare const Font: { + data: { + glyphs: { + bracketTop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + bracketBottom: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + barlineTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + segno: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + coda: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + gClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + cClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + unpitchedPercussionClef1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + '6stringTabClef': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig0: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig3: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig4: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig5: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig6: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig7: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig8: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig9: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCutCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlusSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRightSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeftSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleX: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWholeSquare: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareWhite: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesis: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadMoonBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleLeftBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRightBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRoundDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + augmentationDot: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + tremolo1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNatural: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneFlatStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBakiyeFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKomaSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKucukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKoron: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSori: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkComma: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkUpbow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesura: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesuraCurved: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restMaxima: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWholeLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalfLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restQuarter: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest8th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest16th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest32nd: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest64th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest128th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicPiano: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicMezzo: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicForte: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicRinforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicSforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicZ: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurnSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentMordent: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentShortTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTremblement: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompAppoggTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillDAnglebert: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillBach: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillSuffixDandrieu: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillLowerSuffix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassScoop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassDoitMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFallLipShort: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassLiftMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFallRoughMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassBend: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteClosed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteOpen: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFlip: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassJazzTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassSmear: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsDownBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsUpBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsHarmonic: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedLeftHandPizzicato: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalPed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pictChokeCymbal: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + wiggleArpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arpeggiatoDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat1Bar: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat2Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat4Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeatBarSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymHalfDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymAugmented: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMajorSeventh: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMinor: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensLeftTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensRightTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymBracketLeftTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymBracketRightTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensLeftVeryTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensRightVeryTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiagonalArrangementSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlatAndFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalWilsonPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalWilsonMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; + }; + metrics: { + smufl: boolean; + stave: { + padding: number; + endPaddingMax: number; + endPaddingMin: number; + unalignedNotePadding: number; + }; + accidental: { + noteheadAccidentalPadding: number; + leftPadding: number; + accidentalSpacing: number; + }; + chordSymbol: { + global: { + superscriptOffset: number; + subscriptOffset: number; + kerningOffset: number; + lowerKerningText: string[]; + upperKerningText: string[]; + spacing: number; + superSubRatio: number; + }; + glyphs: { + csymDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymHalfDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymAugmented: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymDiagonalArrangementSlash: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMinor: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMajorSeventh: { + leftSideBearing: number; + yOffset: number; + advanceWidth: number; + }; + accidentalSharp: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + accidentalFlat: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + }; + }; + clef_default: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + clef_small: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + ornament: { + brassScoop: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassDoitMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallLipShort: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassLiftMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallRoughMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassBend: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteClosed: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteOpen: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFlip: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassJazzTurn: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassSmear: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + }; + parenthesis: { + default: { + width: number; + }; + gracenote: { + width: number; + }; + }; + pedalMarking: {}; + digits: { + shiftLine: number; + shiftY: number; + }; + articulation: { + articStaccatissimoAbove: { + padding: number; + }; + articStaccatissimoBelow: { + padding: number; + }; + }; + tremolo: { + default: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + grace: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + }; + staveRepetition: { + symbolText: { + offsetX: number; + offsetY: number; + spacing: number; + }; + coda: { + offsetY: number; + }; + segno: { + offsetY: number; + }; + }; + noteHead: { + minPadding: number; + }; + stem: { + heightAdjustmentForFlag: number; + noteHead: { + noteheadTriangleUpHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadSquareWhite: { + offsetYBaseStemDown: number; + offsetYBaseStemUp: number; + }; + }; + }; + stringNumber: { + verticalPadding: number; + stemPadding: number; + leftPadding: number; + rightPadding: number; + }; + tuplet: { + noteHeadOffset: number; + stemOffset: number; + bottomLine: number; + topModifierOffset: number; + }; + glyphs: { + coda: { + shiftX: number; + shiftY: number; + }; + segno: { + shiftX: number; + }; + flag: { + shiftX: number; + staveTempo: { + shiftX: number; + }; + }; + clef_default: {}; + clef_small: { + gClef: { + shiftY: number; + }; + }; + clefNote_default: {}; + clefNote_small: {}; + stroke_straight: { + arrowheadBlackDown: { + shiftX: number; + }; + arrowheadBlackUp: { + shiftX: number; + }; + }; + stroke_wiggly: { + arrowheadBlackDown: { + shiftX: number; + shiftY: number; + }; + arrowheadBlackUp: { + shiftX: number; + shiftY: number; + }; + }; + textNote: { + breathMarkTick: { + shiftY: number; + }; + breathMarkComma: {}; + segno: { + shiftX: number; + shiftY: number; + }; + coda: { + shiftX: number; + shiftY: number; + }; + ornamentTrill: { + shiftX: number; + shiftY: number; + }; + ornamentTurn: {}; + ornamentTurnSlash: {}; + ornamentMordent: { + shiftX: number; + }; + ornamentShortTrill: { + shiftX: number; + }; + }; + noteHead: {}; + chordSymbol: { + scale: number; + }; + }; + }; +}; +export default Font; diff --git a/build/types/entry/vexflow-gonville.d.ts b/build/types/entry/vexflow-gonville.d.ts new file mode 100644 index 0000000000..a5193666d7 --- /dev/null +++ b/build/types/entry/vexflow-gonville.d.ts @@ -0,0 +1,2 @@ +export * from '../src/index'; +export * as default from '../src/index'; diff --git a/build/types/entry/vexflow-leland.d.ts b/build/types/entry/vexflow-leland.d.ts new file mode 100644 index 0000000000..a5193666d7 --- /dev/null +++ b/build/types/entry/vexflow-leland.d.ts @@ -0,0 +1,2 @@ +export * from '../src/index'; +export * as default from '../src/index'; diff --git a/build/types/entry/vexflow-petaluma.d.ts b/build/types/entry/vexflow-petaluma.d.ts new file mode 100644 index 0000000000..a5193666d7 --- /dev/null +++ b/build/types/entry/vexflow-petaluma.d.ts @@ -0,0 +1,2 @@ +export * from '../src/index'; +export * as default from '../src/index'; diff --git a/build/types/entry/vexflow.d.ts b/build/types/entry/vexflow.d.ts new file mode 100644 index 0000000000..a5193666d7 --- /dev/null +++ b/build/types/entry/vexflow.d.ts @@ -0,0 +1,2 @@ +export * from '../src/index'; +export * as default from '../src/index'; diff --git a/build/types/src/accidental.d.ts b/build/types/src/accidental.d.ts new file mode 100644 index 0000000000..708736e913 --- /dev/null +++ b/build/types/src/accidental.d.ts @@ -0,0 +1,75 @@ +import { Glyph } from './glyph'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { Note } from './note'; +import { Voice } from './voice'; +type StaveLineAccidentalLayoutMetrics = { + column: number; + line: number; + /** + * A flat line needs more clearance above than below. This is + * set to true if the accidental is either a flat or double flat. + */ + flatLine: boolean; + /** + * Double sharps need less clearance above and below than other + * accidentals. + */ + dblSharpLine: boolean; + numAcc: number; + width: number; +}; +/** + * An `Accidental` inherits from `Modifier`, and is formatted within a + * `ModifierContext`. Accidentals are modifiers that can be attached to + * notes. Support is included for both western and microtonal accidentals. + * + * See `tests/accidental_tests.ts` for usage examples. + */ +export declare class Accidental extends Modifier { + /** Accidental code provided to the constructor. */ + readonly type: string; + /** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */ + static DEBUG: boolean; + protected accidental: { + code: string; + parenRightPaddingAdjustment: number; + }; + render_options: { + parenLeftPadding: number; + font_scale: number; + parenRightPadding: number; + }; + protected cautionary: boolean; + protected glyph: Glyph; + protected parenRight?: Glyph; + protected parenLeft?: Glyph; + /** Accidentals category string. */ + static get CATEGORY(): string; + /** Arrange accidentals inside a ModifierContext. */ + static format(accidentals: Accidental[], state: ModifierContextState): void; + /** Helper function to determine whether two lines of accidentals collide vertically */ + static checkCollision(line1: StaveLineAccidentalLayoutMetrics, line2: StaveLineAccidentalLayoutMetrics): boolean; + /** + * Use this method to automatically apply accidentals to a set of `voices`. + * The accidentals will be remembered between all the voices provided. + * Optionally, you can also provide an initial `keySignature`. + */ + static applyAccidentals(voices: Voice[], keySignature: string): void; + /** + * Create accidental. + * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`. + * For example: `#`, `##`, `b`, `n`, etc. + */ + constructor(type: string); + protected reset(): void; + /** Get width in pixels. */ + getWidth(): number; + /** Attach this accidental to `note`, which must be a `StaveNote`. */ + setNote(note: Note): this; + /** If called, draws parenthesis around accidental. */ + setAsCautionary(): this; + /** Render accidental onto canvas. */ + draw(): void; +} +export {}; diff --git a/build/types/src/annotation.d.ts b/build/types/src/annotation.d.ts new file mode 100644 index 0000000000..f94eb8d63b --- /dev/null +++ b/build/types/src/annotation.d.ts @@ -0,0 +1,61 @@ +import { FontInfo } from './font'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +export declare enum AnnotationHorizontalJustify { + LEFT = 1, + CENTER = 2, + RIGHT = 3, + CENTER_STEM = 4 +} +export declare enum AnnotationVerticalJustify { + TOP = 1, + CENTER = 2, + BOTTOM = 3, + CENTER_STEM = 4 +} +/** + * Annotations are modifiers that can be attached to + * notes. + * + * See `tests/annotation_tests.ts` for usage examples. + */ +export declare class Annotation extends Modifier { + /** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */ + static DEBUG: boolean; + /** Annotations category string. */ + static get CATEGORY(): string; + static TEXT_FONT: Required; + /** Text annotations can be positioned and justified relative to the note. */ + static HorizontalJustify: typeof AnnotationHorizontalJustify; + static HorizontalJustifyString: Record; + static VerticalJustify: typeof AnnotationVerticalJustify; + static VerticalJustifyString: Record; + static get minAnnotationPadding(): number; + /** Arrange annotations within a `ModifierContext` */ + static format(annotations: Annotation[], state: ModifierContextState): boolean; + protected horizontalJustification: AnnotationHorizontalJustify; + protected verticalJustification: AnnotationVerticalJustify; + protected text: string; + /** + * Annotations inherit from `Modifier` and is positioned correctly when + * in a `ModifierContext`. + * Create a new `Annotation` with the string `text`. + */ + constructor(text: string); + /** + * Set vertical position of text (above or below stave). + * @param just value in `AnnotationVerticalJustify`. + */ + setVerticalJustification(just: string | AnnotationVerticalJustify): this; + /** + * Get horizontal justification. + */ + getJustification(): AnnotationHorizontalJustify; + /** + * Set horizontal justification. + * @param justification value in `Annotation.Justify`. + */ + setJustification(just: string | AnnotationHorizontalJustify): this; + /** Render text beside the note. */ + draw(): void; +} diff --git a/build/types/src/articulation.d.ts b/build/types/src/articulation.d.ts new file mode 100644 index 0000000000..f9c7de7593 --- /dev/null +++ b/build/types/src/articulation.d.ts @@ -0,0 +1,68 @@ +import { Builder } from './easyscore'; +import { Glyph } from './glyph'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { StemmableNote } from './stemmablenote'; +export interface ArticulationStruct { + code?: string; + aboveCode?: string; + belowCode?: string; + between_lines: boolean; +} +/** + * Articulations and Accents are modifiers that can be + * attached to notes. The complete list of articulations is available in + * `tables.ts` under `Vex.Flow.articulationCodes`. + * + * See `tests/articulation_tests.ts` for usage examples. + */ +export declare class Articulation extends Modifier { + /** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */ + static DEBUG: boolean; + /** Articulations category string. */ + static get CATEGORY(): string; + protected static readonly INITIAL_OFFSET: number; + /** Articulation code provided to the constructor. */ + readonly type: string; + render_options: { + font_scale: number; + }; + protected articulation: ArticulationStruct; + protected glyph: Glyph; + /** + * FIXME: + * Most of the complex formatting logic (ie: snapping to space) is + * actually done in .render(). But that logic belongs in this method. + * + * Unfortunately, this isn't possible because, by this point, stem lengths + * have not yet been finalized. Finalized stem lengths are required to determine the + * initial position of any stem-side articulation. + * + * This indicates that all objects should have their stave set before being + * formatted. It can't be an optional if you want accurate vertical positioning. + * Consistently positioned articulations that play nice with other modifiers + * won't be possible until we stop relying on render-time formatting. + * + * Ideally, when this function has completed, the vertical articulation positions + * should be ready to render without further adjustment. But the current state + * is far from this ideal. + */ + static format(articulations: Articulation[], state: ModifierContextState): boolean; + static easyScoreHook({ articulations }: { + articulations: string; + }, note: StemmableNote, builder: Builder): void; + /** + * Create a new articulation. + * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code. + * + * Notes (by default): + * - Glyph codes ending with 'Above' will be positioned ABOVE + * - Glyph codes ending with 'Below' will be positioned BELOW + */ + constructor(type: string); + protected reset(): void; + /** Set if articulation should be rendered between lines. */ + setBetweenLines(betweenLines?: boolean): this; + /** Render articulation in position next to note. */ + draw(): void; +} diff --git a/build/types/src/barnote.d.ts b/build/types/src/barnote.d.ts new file mode 100644 index 0000000000..932d88d698 --- /dev/null +++ b/build/types/src/barnote.d.ts @@ -0,0 +1,30 @@ +import { ModifierContext } from './modifiercontext'; +import { Note } from './note'; +import { Barline, BarlineType } from './stavebarline'; +/** + * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can + * be added to a voice and rendered in the middle of a stave. Since it has no + * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter. + * + * See `tests/barnote_tests.ts` for usage examples. + */ +export declare class BarNote extends Note { + /** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */ + static DEBUG: boolean; + static get CATEGORY(): string; + protected metrics: { + widths: Record; + }; + protected type: BarlineType; + barline: Barline; + constructor(type?: string | BarlineType); + /** Get the type of bar note.*/ + getType(): BarlineType; + /** Set the type of bar note. */ + setType(type: string | BarlineType): this; + addToModifierContext(mc: ModifierContext): this; + /** Overridden to ignore. */ + preFormat(): this; + /** Render note to stave. */ + draw(): void; +} diff --git a/build/types/src/beam.d.ts b/build/types/src/beam.d.ts new file mode 100644 index 0000000000..3ea8b54da6 --- /dev/null +++ b/build/types/src/beam.d.ts @@ -0,0 +1,153 @@ +import { Element } from './element'; +import { Fraction } from './fraction'; +import { RenderContext } from './rendercontext'; +import { StemmableNote } from './stemmablenote'; +import { Voice } from './voice'; +export declare const BEAM_LEFT = "L"; +export declare const BEAM_RIGHT = "R"; +export declare const BEAM_BOTH = "B"; +export type PartialBeamDirection = typeof BEAM_LEFT | typeof BEAM_RIGHT | typeof BEAM_BOTH; +/** `Beams` span over a set of `StemmableNotes`. */ +export declare class Beam extends Element { + static get CATEGORY(): string; + render_options: { + flat_beam_offset?: number; + flat_beams: boolean; + secondary_break_ticks?: number; + show_stemlets: boolean; + beam_width: number; + max_slope: number; + min_slope: number; + slope_iterations: number; + slope_cost: number; + stemlet_extension: number; + partial_beam_length: number; + min_flat_beam_offset: number; + }; + notes: StemmableNote[]; + postFormatted: boolean; + slope: number; + private readonly stem_direction; + private readonly ticks; + private y_shift; + private break_on_indices; + private beam_count; + private unbeamable?; + /** + * Overrides to default beam directions for secondary-level beams that do not + * connect to any other note. See further explanation at + * `setPartialBeamSideAt` + */ + private forcedPartialDirections; + /** Get the direction of the beam */ + getStemDirection(): number; + /** + * Get the default beam groups for a provided time signature. + * Attempt to guess if the time signature is not found in table. + * Currently this is fairly naive. + */ + static getDefaultBeamGroups(time_sig: string): Fraction[]; + /** + * A helper function to automatically build basic beams for a voice. For more + * complex auto-beaming use `Beam.generateBeams()`. + * @param voice the voice to generate the beams for + * @param stem_direction a stem direction to apply to the entire voice + * @param groups an array of `Fraction` representing beat groupings for the beam + */ + static applyAndGetBeams(voice: Voice, stem_direction?: number, groups?: Fraction[]): Beam[]; + /** + * A helper function to autimatically build beams for a voice with + * configuration options. + * + * Example configuration object: + * + * ``` + * config = { + * groups: [new Vex.Flow.Fraction(2, 8)], + * stem_direction: -1, + * beam_rests: true, + * beam_middle_only: true, + * show_stemlets: false + * }; + * ``` + * @param notes an array of notes to create the beams for + * @param config the configuration object + * @param config.stem_direction set to apply the same direction to all notes + * @param config.beam_rests set to `true` to include rests in the beams + * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat + * @param config.show_stemlets set to `true` to draw stemlets for rests + * @param config.maintain_stem_directions set to `true` to not apply new stem directions + * @param config.groups array of `Fractions` that represent the beat structure to beam the notes + * + */ + static generateBeams(notes: StemmableNote[], config?: { + flat_beam_offset?: number; + flat_beams?: boolean; + secondary_breaks?: string; + show_stemlets?: boolean; + maintain_stem_directions?: boolean; + beam_middle_only?: boolean; + beam_rests?: boolean; + groups?: Fraction[]; + stem_direction?: number; + }): Beam[]; + constructor(notes: StemmableNote[], auto_stem?: boolean); + /** Get the notes in this beam. */ + getNotes(): StemmableNote[]; + /** Get the max number of beams in the set of notes. */ + getBeamCount(): number; + /** Set which note `indices` to break the secondary beam at. */ + breakSecondaryAt(indices: number[]): this; + /** + * Forces the direction of a partial beam (a secondary-level beam that exists + * on one note only of the beam group). This is useful in rhythms such as 6/8 + * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the + * first sixteenth note can help imply whether the rhythm is to be felt as + * three groups of eighth notes (typical) or as two groups of three-sixteenths + * (less common): + * ``` + * ┌───┬──┬──┐ ┌──┬──┬──┐ + * │ ├─ │ ─┤ vs │ ─┤ │ ─┤ + * │ │ │ │ │ │ │ │ + * ``` + */ + setPartialBeamSideAt(noteIndex: number, side: PartialBeamDirection): this; + /** + * Restore the default direction of a partial beam (a secondary-level beam + * that does not connect to any other notes). + */ + unsetPartialBeamSideAt(noteIndex: number): this; + /** Return the y coordinate for linear function. */ + getSlopeY(x: number, first_x_px: number, first_y_px: number, slope: number): number; + /** Calculate the best possible slope for the provided notes. */ + calculateSlope(): void; + /** Calculate a slope and y-shift for flat beams. */ + calculateFlatSlope(): void; + /** Return the Beam y offset. */ + getBeamYToDraw(): number; + /** + * Create new stems for the notes in the beam, so that each stem + * extends into the beams. + */ + applyStemExtensions(): void; + /** Return upper level beam direction. */ + lookupBeamDirection(duration: string, prev_tick: number, tick: number, next_tick: number, noteIndex: number): PartialBeamDirection; + /** Get the x coordinates for the beam lines of specific `duration`. */ + getBeamLines(duration: string): { + start: number; + end?: number; + }[]; + /** Render the stems for each note. */ + protected drawStems(ctx: RenderContext): void; + protected drawBeamLines(ctx: RenderContext): void; + /** Pre-format the beam. */ + preFormat(): this; + /** + * Post-format the beam. This can only be called after + * the notes in the beam have both `x` and `y` values. ie: they've + * been formatted and have staves. + */ + postFormat(): void; + /** Render the beam to the canvas context */ + draw(): void; +} diff --git a/build/types/src/bend.d.ts b/build/types/src/bend.d.ts new file mode 100644 index 0000000000..a9a98cd821 --- /dev/null +++ b/build/types/src/bend.d.ts @@ -0,0 +1,73 @@ +import { FontInfo } from './font'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +export interface BendPhrase { + x?: number; + type: number; + text: string; + width?: number; + draw_width?: number; +} +/** Bend implements tablature bends. */ +export declare class Bend extends Modifier { + static get CATEGORY(): string; + static get UP(): number; + static get DOWN(): number; + /** Default text font. */ + static TEXT_FONT: Required; + static format(bends: Bend[], state: ModifierContextState): boolean; + protected text: string; + protected tap: string; + protected release: boolean; + protected phrase: BendPhrase[]; + render_options: { + line_width: number; + release_width: number; + bend_width: number; + line_style: string; + }; + /** + * Example of a phrase: + * ``` + * [{ + * type: UP, + * text: "whole" + * width: 8; + * }, + * { + * type: DOWN, + * text: "whole" + * width: 8; + * }, + * { + * type: UP, + * text: "half" + * width: 8; + * }, + * { + * type: UP, + * text: "whole" + * width: 8; + * }, + * { + * type: DOWN, + * text: "1 1/2" + * width: 8; + * }] + * ``` + * @param text text for bend ("Full", "Half", etc.) (DEPRECATED) + * @param release if true, render a release. (DEPRECATED) + * @param phrase if set, ignore "text" and "release", and use the more sophisticated phrase specified + */ + constructor(text: string, release?: boolean, phrase?: BendPhrase[]); + /** Set horizontal shift in pixels. */ + setXShift(value: number): this; + setTap(value: string): this; + /** Get text provided in the constructor. */ + getText(): string; + getTextHeight(): number; + /** Recalculate width. */ + protected updateWidth(): this; + /** Draw the bend on the rendering context. */ + draw(): void; +} diff --git a/build/types/src/boundingbox.d.ts b/build/types/src/boundingbox.d.ts new file mode 100644 index 0000000000..dfe3b3bce0 --- /dev/null +++ b/build/types/src/boundingbox.d.ts @@ -0,0 +1,42 @@ +export interface Bounds { + x: number; + y: number; + w: number; + h: number; +} +export declare class BoundingBox implements Bounds { + x: number; + y: number; + w: number; + h: number; + /** + * Create a new copy. + */ + static copy(that: BoundingBox): BoundingBox; + constructor(x: number, y: number, w: number, h: number); + /** Get x position. */ + getX(): number; + /** Get y position. */ + getY(): number; + /** Get width. */ + getW(): number; + /** Get height. */ + getH(): number; + /** Set x position. */ + setX(x: number): this; + /** Set y position. */ + setY(y: number): this; + /** Set width. */ + setW(w: number): this; + /** Set height. */ + setH(h: number): this; + /** Move to position. */ + move(x: number, y: number): this; + /** Clone. */ + clone(): BoundingBox; + /** + * Merge my box with given box. Creates a bigger bounding box unless + * the given box is contained in this one. + */ + mergeWith(boundingBox: BoundingBox): this; +} diff --git a/build/types/src/boundingboxcomputation.d.ts b/build/types/src/boundingboxcomputation.d.ts new file mode 100644 index 0000000000..3ad9086536 --- /dev/null +++ b/build/types/src/boundingboxcomputation.d.ts @@ -0,0 +1,33 @@ +/** + * BoundingBoxComputation computes metrics for a bounding box by continuously + * taking canvas path commands. + * + * Warning: This class is merely a crutch to get bounding box information without + * explicit metadata. This is likely to get deprecated following SMuFL support. + * + * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License) + */ +export declare class BoundingBoxComputation { + protected x1: number; + protected y1: number; + protected x2: number; + protected y2: number; + /** Get calculated X1. */ + getX1(): number; + /** Get calculated Y1. */ + getY1(): number; + /** Get calculated width. */ + width(): number; + /** Get calculated height. */ + height(): number; + /** Add point to BoundingBox. */ + addPoint(x: number, y: number): void; + /** Add X to BoundingBox. */ + addX(x: number): void; + /** Add Y to BoundingBox. */ + addY(y: number): void; + /** Add quadratic curve to BoundingBox. */ + addQuadraticCurve(p0x: number, p0y: number, p1x: number, p1y: number, p2x: number, p2y: number): void; + /** Add bezier curve to BoundingBox. */ + addBezierCurve(p0x: number, p0y: number, p1x: number, p1y: number, p2x: number, p2y: number, p3x: number, p3y: number): void; +} diff --git a/build/types/src/canvascontext.d.ts b/build/types/src/canvascontext.d.ts new file mode 100644 index 0000000000..62bae708e4 --- /dev/null +++ b/build/types/src/canvascontext.d.ts @@ -0,0 +1,89 @@ +import { FontInfo } from './font'; +import { GroupAttributes, RenderContext, TextMeasure } from './rendercontext'; +interface OffscreenCanvas extends EventTarget { + width: number; + height: number; +} +interface OffscreenCanvasRenderingContext2D extends CanvasState, CanvasTransform, CanvasCompositing, CanvasImageSmoothing, CanvasFillStrokeStyles, CanvasShadowStyles, CanvasFilters, CanvasRect, CanvasDrawPath, CanvasText, CanvasDrawImage, CanvasImageData, CanvasPathDrawingStyles, CanvasTextDrawingStyles, CanvasPath { + readonly canvas: OffscreenCanvas; +} +/** + * A rendering context for the Canvas backend. This class serves as a proxy for the + * underlying CanvasRenderingContext2D object, part of the browser's API. + */ +export declare class CanvasContext extends RenderContext { + /** The 2D rendering context from the Canvas API. Forward method calls to this object. */ + context2D: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D; + /** + * The HTMLCanvasElement or OffscreenCanvas that is associated with the above context. + * If there was no associated `` element, just store the default WIDTH / HEIGHT. + */ + canvas: HTMLCanvasElement | OffscreenCanvas | { + width: number; + height: number; + }; + /** Height of one line of text (in pixels). */ + textHeight: number; + static get WIDTH(): number; + static get HEIGHT(): number; + static get CANVAS_BROWSER_SIZE_LIMIT(): number; + /** + * Ensure that width and height do not exceed the browser limit. + * @returns array of [width, height] clamped to the browser limit. + */ + static sanitizeCanvasDims(width: number, height: number): [number, number]; + constructor(context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D); + /** + * Set all pixels to transparent black rgba(0,0,0,0). + */ + clear(): void; + openGroup(cls?: string, id?: string, attrs?: GroupAttributes): any; + closeGroup(): void; + add(child: any): void; + setFillStyle(style: string): this; + /** CanvasContext ignores `setBackgroundFillStyle()`. */ + setBackgroundFillStyle(style: string): this; + setStrokeStyle(style: string): this; + setShadowColor(color: string): this; + setShadowBlur(blur: number): this; + setLineWidth(width: number): this; + setLineCap(capType: CanvasLineCap): this; + setLineDash(dash: number[]): this; + scale(x: number, y: number): this; + resize(width: number, height: number, devicePixelRatio?: number): this; + rect(x: number, y: number, width: number, height: number): this; + fillRect(x: number, y: number, width: number, height: number): this; + /** + * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0). + */ + clearRect(x: number, y: number, width: number, height: number): this; + beginPath(): this; + moveTo(x: number, y: number): this; + lineTo(x: number, y: number): this; + bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this; + quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this; + arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise: boolean): this; + fill(): this; + stroke(): this; + closePath(): this; + measureText(text: string): TextMeasure; + fillText(text: string, x: number, y: number): this; + save(): this; + restore(): this; + set fillStyle(style: string | CanvasGradient | CanvasPattern); + get fillStyle(): string | CanvasGradient | CanvasPattern; + set strokeStyle(style: string | CanvasGradient | CanvasPattern); + get strokeStyle(): string | CanvasGradient | CanvasPattern; + /** + * @param f is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). + * @param style is a string (e.g., 'italic', 'normal'). + */ + setFont(f?: string | FontInfo, size?: string | number, weight?: string | number, style?: string): this; + /** Return a string of the form `'italic bold 15pt Arial'` */ + getFont(): string; +} +export {}; diff --git a/build/types/src/chordsymbol.d.ts b/build/types/src/chordsymbol.d.ts new file mode 100644 index 0000000000..b79a87991d --- /dev/null +++ b/build/types/src/chordsymbol.d.ts @@ -0,0 +1,167 @@ +import { FontInfo } from './font'; +import { Glyph } from './glyph'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { TextFormatter } from './textformatter'; +export interface ChordSymbolBlock { + text: string; + symbolType: SymbolTypes; + symbolModifier: SymbolModifiers; + xShift: number; + yShift: number; + vAlign: boolean; + width: number; + glyph?: Glyph; +} +export interface ChordSymbolGlyphMetrics { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; +} +export interface ChordSymbolMetrics { + global: { + superscriptOffset: number; + subscriptOffset: number; + kerningOffset: number; + lowerKerningText: string[]; + upperKerningText: string[]; + spacing: number; + superSubRatio: number; + }; + glyphs: Record; +} +export declare enum ChordSymbolHorizontalJustify { + LEFT = 1, + CENTER = 2, + RIGHT = 3, + CENTER_STEM = 4 +} +export declare enum ChordSymbolVerticalJustify { + TOP = 1, + BOTTOM = 2 +} +export declare enum SymbolTypes { + GLYPH = 1, + TEXT = 2, + LINE = 3 +} +export declare enum SymbolModifiers { + NONE = 1, + SUBSCRIPT = 2, + SUPERSCRIPT = 3 +} +/** + * ChordSymbol is a modifier that creates a chord symbol above/below a chord. + * As a modifier, it is attached to an existing note. + */ +export declare class ChordSymbol extends Modifier { + static DEBUG: boolean; + static get CATEGORY(): string; + static readonly HorizontalJustify: typeof ChordSymbolHorizontalJustify; + static readonly HorizontalJustifyString: Record; + static readonly VerticalJustify: typeof ChordSymbolVerticalJustify; + static readonly VerticalJustifyString: Record; + static get superSubRatio(): number; + /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */ + static set NO_TEXT_FORMAT(val: boolean); + static get NO_TEXT_FORMAT(): boolean; + static getMetricForGlyph(glyphCode: string): ChordSymbolGlyphMetrics | undefined; + static get engravingFontResolution(): number; + static get spacingBetweenBlocks(): number; + static getWidthForGlyph(glyph: Glyph): number; + static getYShiftForGlyph(glyph: Glyph): number; + static getXShiftForGlyph(glyph: Glyph): number; + static get superscriptOffset(): number; + static get subscriptOffset(): number; + static get kerningOffset(): number; + static readonly glyphs: Record; + static readonly symbolTypes: typeof SymbolTypes; + static readonly symbolModifiers: typeof SymbolModifiers; + static get metrics(): ChordSymbolMetrics; + static get lowerKerningText(): string[]; + static get upperKerningText(): string[]; + static isSuperscript(block: ChordSymbolBlock): boolean; + static isSubscript(block: ChordSymbolBlock): boolean; + static get minPadding(): number; + /** + * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks. + * Estimate how many lines above/below the staff we need. + */ + static format(symbols: ChordSymbol[], state: ModifierContextState): boolean; + /** Currently unused. */ + protected static noFormat: boolean; + protected symbolBlocks: ChordSymbolBlock[]; + protected horizontal: number; + protected vertical: number; + protected useKerning: boolean; + protected reportWidth: boolean; + protected textFormatter: TextFormatter; + constructor(); + /** + * Default text font. + * Choose a font family that works well with the current music engraving font. + * @override `Element.TEXT_FONT`. + */ + static get TEXT_FONT(): Required; + /** + * The offset is specified in `em`. Scale this value by the font size in pixels. + */ + get superscriptOffset(): number; + get subscriptOffset(): number; + setReportWidth(value: boolean): this; + getReportWidth(): boolean; + updateOverBarAdjustments(): void; + updateKerningAdjustments(): void; + /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */ + getKerningAdjustment(j: number): number; + /** + * ChordSymbol allows multiple blocks so we can mix glyphs and font text. + * Each block can have its own vertical orientation. + */ + getSymbolBlock(params?: any): ChordSymbolBlock; + /** Add a symbol to this chord, could be text, glyph or line. */ + addSymbolBlock(parameters: any): this; + /** Add a text block. */ + addText(text: string, parameters?: any): this; + /** Add a text block with superscript modifier. */ + addTextSuperscript(text: string): this; + /** Add a text block with subscript modifier. */ + addTextSubscript(text: string): this; + /** Add a glyph block with superscript modifier. */ + addGlyphSuperscript(glyph: string): this; + /** Add a glyph block. */ + addGlyph(glyph: string, params?: any): this; + /** + * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font. + * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else. + */ + addGlyphOrText(text: string, params?: any): this; + /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */ + addLine(width: number, params?: any): this; + /** + * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`). + * + * @param f is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). + * @param style is a string (e.g., 'italic', 'normal'). + * + * @override See: Element. + */ + setFont(f?: string | FontInfo, size?: string | number, weight?: string | number, style?: string): this; + setEnableKerning(val: boolean): this; + /** Set vertical position of text (above or below stave). */ + setVertical(vj: ChordSymbolVerticalJustify | string | number): this; + getVertical(): number; + /** Set horizontal justification. */ + setHorizontal(hj: ChordSymbolHorizontalJustify | string | number): this; + getHorizontal(): number; + getWidth(): number; + getYOffsetForText(text: string): number; + /** Render text and glyphs above/below the note. */ + draw(): void; +} diff --git a/build/types/src/clef.d.ts b/build/types/src/clef.d.ts new file mode 100644 index 0000000000..8819c1ef34 --- /dev/null +++ b/build/types/src/clef.d.ts @@ -0,0 +1,59 @@ +import { Glyph } from './glyph'; +import { Stave } from './stave'; +import { StaveModifier } from './stavemodifier'; +export interface ClefType { + code: string; + line: number; +} +export interface ClefAnnotatiomType extends ClefType { + x_shift: number; + point: number; +} +export interface ClefMetrics { + width: number; + annotations: { + [key: string]: { + [type: string]: { + line?: number; + shiftX?: number; + } | number; + }; + }; +} +/** + * Clef implements various types of clefs that can be rendered on a stave. + * + * See `tests/clef_tests.ts` for usage examples. + */ +export declare class Clef extends StaveModifier { + /** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */ + static DEBUG: boolean; + static get CATEGORY(): string; + annotation?: ClefAnnotatiomType; + /** + * The attribute `clef` must be a key from + * `Clef.types` + */ + clef: ClefType; + protected attachment?: Glyph; + protected size?: string; + protected type?: string; + /** + * Every clef name is associated with a glyph code from the font file + * and a default stave line number. + */ + static get types(): Record; + static get annotationSmufl(): Record; + /** Create a new clef. */ + constructor(type: string, size?: string, annotation?: string); + /** Set clef type, size and annotation. */ + setType(type: string, size?: string, annotation?: string): this; + /** Get clef width. */ + getWidth(): number; + /** Get point for clefs. */ + static getPoint(size?: string): number; + /** Set associated stave. */ + setStave(stave: Stave): this; + /** Render clef. */ + draw(): void; +} diff --git a/build/types/src/clefnote.d.ts b/build/types/src/clefnote.d.ts new file mode 100644 index 0000000000..76340ba8eb --- /dev/null +++ b/build/types/src/clefnote.d.ts @@ -0,0 +1,18 @@ +import { ClefAnnotatiomType, ClefType } from './clef'; +import { Note } from './note'; +/** ClefNote implements clef annotations in measures. */ +export declare class ClefNote extends Note { + static get CATEGORY(): string; + protected clef: ClefType; + protected annotation?: ClefAnnotatiomType; + protected type: string; + protected size: string; + constructor(type: string, size?: string, annotation?: string); + /** Set clef type, size and annotation. */ + setType(type: string, size: string, annotation: string): this; + /** Get associated clef. */ + getClef(): ClefType; + preFormat(): this; + /** Render clef note. */ + draw(): void; +} diff --git a/build/types/src/crescendo.d.ts b/build/types/src/crescendo.d.ts new file mode 100644 index 0000000000..af5069b5f4 --- /dev/null +++ b/build/types/src/crescendo.d.ts @@ -0,0 +1,27 @@ +import { Note, NoteStruct } from './note'; +export interface CrescendoParams { + reverse: boolean; + height: number; + y: number; + end_x: number; + begin_x: number; +} +export declare class Crescendo extends Note { + static DEBUG: boolean; + /** Crescendo category string. */ + static get CATEGORY(): string; + protected decrescendo: boolean; + protected height: number; + protected line: number; + protected options: { + extend_left: number; + extend_right: number; + y_shift: number; + }; + constructor(noteStruct: NoteStruct); + setLine(line: number): this; + setHeight(height: number): this; + setDecrescendo(decresc: boolean): this; + preFormat(): this; + draw(): void; +} diff --git a/build/types/src/curve.d.ts b/build/types/src/curve.d.ts new file mode 100644 index 0000000000..2742f3d30e --- /dev/null +++ b/build/types/src/curve.d.ts @@ -0,0 +1,41 @@ +import { Element } from './element'; +import { Note } from './note'; +export interface CurveOptions { + /** Two control points for the bezier curves. */ + cps?: { + x: number; + y: number; + }[]; + thickness?: number; + x_shift?: number; + y_shift?: number; + position?: string | number; + position_end?: string | number; + invert?: boolean; +} +export declare enum CurvePosition { + NEAR_HEAD = 1, + NEAR_TOP = 2 +} +export declare class Curve extends Element { + static get CATEGORY(): string; + render_options: Required; + protected from: Note; + protected to: Note; + static get Position(): typeof CurvePosition; + static get PositionString(): Record; + constructor(from: Note, to: Note, options: CurveOptions); + setNotes(from: Note, to: Note): this; + /** + * @return {boolean} Returns true if this is a partial bar. + */ + isPartial(): boolean; + renderCurve(params: { + last_y: number; + last_x: number; + first_y: number; + first_x: number; + direction: number; + }): void; + draw(): boolean; +} diff --git a/build/types/src/dot.d.ts b/build/types/src/dot.d.ts new file mode 100644 index 0000000000..7cfff84e6f --- /dev/null +++ b/build/types/src/dot.d.ts @@ -0,0 +1,20 @@ +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { Note } from './note'; +export declare class Dot extends Modifier { + static get CATEGORY(): string; + protected radius: number; + protected dot_shiftY: number; + /** Returns the dots associated to a Note. */ + static getDots(note: Note): Dot[]; + /** Add a dot on the specified keys to the notes. */ + static buildAndAttach(notes: Note[], options?: { + index?: number; + all?: boolean; + }): void; + static format(dots: Dot[], state: ModifierContextState): boolean; + constructor(); + setNote(note: Note): this; + setDotShiftY(y: number): this; + draw(): void; +} diff --git a/build/types/src/easyscore.d.ts b/build/types/src/easyscore.d.ts new file mode 100644 index 0000000000..7627c33d6d --- /dev/null +++ b/build/types/src/easyscore.d.ts @@ -0,0 +1,152 @@ +import { Accidental } from './accidental'; +import { PartialBeamDirection } from './beam'; +import { Factory } from './factory'; +import { Note } from './note'; +import { Grammar, Match, Parser, Result, Rule, RuleFunction } from './parser'; +import { RenderContext } from './rendercontext'; +import { StemmableNote } from './stemmablenote'; +import { TupletOptions } from './tuplet'; +import { Voice } from './voice'; +export type CommitHook = (obj: any, note: StemmableNote, builder: Builder) => void; +export declare class EasyScoreGrammar implements Grammar { + builder: Builder; + constructor(builder: Builder); + begin(): RuleFunction; + LINE(): Rule; + PIECE(): Rule; + PIECES(): Rule; + PARAMS(): Rule; + CHORDORNOTE(): Rule; + CHORD(): Rule; + NOTES(): Rule; + NOTE(): Rule; + SINGLENOTE(): Rule; + ACCIDENTAL(): Rule; + DOTS(): Rule; + TYPE(): Rule; + DURATION(): Rule; + OPTS(): Rule; + KEYVALS(): Rule; + KEYVAL(): Rule; + VAL(): Rule; + KEY(): Rule; + DVAL(): Rule; + SVAL(): Rule; + NOTENAME(): Rule; + OCTAVE(): Rule; + ACCIDENTALS(): Rule; + MICROTONES(): Rule; + DURATIONS(): Rule; + TYPES(): Rule; + LPAREN(): Rule; + RPAREN(): Rule; + COMMA(): Rule; + DOT(): Rule; + SLASH(): Rule; + MAYBESLASH(): Rule; + EQUALS(): Rule; + LBRACKET(): Rule; + RBRACKET(): Rule; + EOL(): Rule; +} +export interface NotePiece { + key: string; + accid?: string | null; + octave?: string; +} +export declare class Piece { + chord: NotePiece[]; + duration: string; + dots: number; + type?: string; + options: { + [x: string]: string; + }; + constructor(duration: string); +} +export interface BuilderElements { + notes: StemmableNote[]; + accidentals: (Accidental | undefined)[][]; +} +export interface BuilderOptions extends Record { + stem?: string; + clef?: string; +} +export declare class Builder { + factory: Factory; + elements: BuilderElements; + options: BuilderOptions; + piece: Piece; + commitHooks: CommitHook[]; + rollingDuration: string; + constructor(factory: Factory); + reset(options?: BuilderOptions): void; + getFactory(): Factory; + getElements(): BuilderElements; + addCommitHook(commitHook: CommitHook): void; + resetPiece(): void; + setNoteDots(dots: Match[]): void; + setNoteDuration(duration?: string): void; + setNoteType(type?: string): void; + addNoteOption(key: string, value: string): void; + addNote(key?: string, accid?: string | null, octave?: string): void; + addSingleNote(key: string, accid?: string | null, octave?: string): void; + addChord(notes: Match[]): void; + commitPiece(): void; +} +export interface EasyScoreOptions { + factory?: Factory; + builder?: Builder; + commitHooks?: CommitHook[]; + throwOnError?: boolean; +} +export interface EasyScoreDefaults extends Record { + clef?: string; + time?: string; + stem?: string; +} +/** + * EasyScore implements a parser for a simple language to generate VexFlow objects. + */ +export declare class EasyScore { + static DEBUG: boolean; + defaults: EasyScoreDefaults; + options: EasyScoreOptions; + factory: Factory; + builder: Builder; + grammar: EasyScoreGrammar; + parser: Parser; + constructor(options?: EasyScoreOptions); + /** + * Set the score defaults. + * clef must be set appropriately to avoid errors when adding Staves. + * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types} + * @param defaults.time default time signature ( 4/4 | 9/8 ...) + * @param defaults.stem default stem arrangement (auto | up | down) + * @returns this + */ + set(defaults: EasyScoreDefaults): this; + /** + * @param options.factory is required. + * @returns this + */ + setOptions(options: EasyScoreOptions): this; + setContext(context: RenderContext): this; + parse(line: string, options?: BuilderOptions): Result; + beam(notes: StemmableNote[], options?: { + autoStem?: boolean; + secondaryBeamBreaks?: number[]; + partialBeamDirections?: { + [noteIndex: number]: PartialBeamDirection; + }; + }): StemmableNote[]; + tuplet(notes: StemmableNote[], options?: TupletOptions): StemmableNote[]; + notes(line: string, options?: BuilderOptions): StemmableNote[]; + voice(notes: Note[], options?: { + time?: string; + options?: { + softmaxFactor: number; + }; + }): Voice; + addCommitHook(commitHook: CommitHook): void; +} diff --git a/build/types/src/element.d.ts b/build/types/src/element.d.ts new file mode 100644 index 0000000000..168bb42fcc --- /dev/null +++ b/build/types/src/element.d.ts @@ -0,0 +1,229 @@ +import { BoundingBox } from './boundingbox'; +import { FontInfo } from './font'; +import { Registry } from './registry'; +import { RenderContext } from './rendercontext'; +/** Element attributes. */ +export interface ElementAttributes { + [name: string]: string | undefined; + id: string; + type: string; + class: string; +} +/** Element style */ +export interface ElementStyle { + /** + * CSS color used for the shadow. + * + * Examples: 'red', '#ff0000', '#ff000010', 'rgb(255,0,0)' + * + * See [CSS Legal Color Values](https://www.w3schools.com/cssref/css_colors_legal.asp) + */ + shadowColor?: string; + /** + * Level of blur applied to shadows. + * + * Values that are not finite numbers greater than or equal to zero are ignored. + */ + shadowBlur?: number; + /** + * CSS color used with context fill command. + * + * Examples: 'red', '#ff0000', '#ff000010', 'rgb(255,0,0)' + * + * See [CSS Legal Color Values](https://www.w3schools.com/cssref/css_colors_legal.asp) + */ + fillStyle?: string; + /** + * CSS color used with context stroke command. + * + * Examples: 'red', '#ff0000', '#ff000010', 'rgb(255,0,0)' + * + * See [CSS Legal Color Values](https://www.w3schools.com/cssref/css_colors_legal.asp) + */ + strokeStyle?: string; + /** + * Line width, 1.0 by default. + */ + lineWidth?: number; +} +/** + * Element implements a generic base class for VexFlow, with implementations + * of general functions and properties that can be inherited by all VexFlow elements. + * + * The Element is an abstract class that needs to be subclassed to work. It handles + * style and text-font properties for the Element and any child elements, along with + * working with the Registry to create unique ids, but does not have any tools for + * formatting x or y positions or connections to a Stave. + */ +export declare abstract class Element { + static get CATEGORY(): string; + protected children: Element[]; + protected static ID: number; + protected static newID(): string; + /** + * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)` + * to customize the font for musical symbols placed on the score. + */ + static TEXT_FONT: Required; + private context?; + protected rendered: boolean; + protected style?: ElementStyle; + private attrs; + protected boundingBox?: BoundingBox; + protected registry?: Registry; + /** + * Some elements include text. + * The `textFont` property contains information required to style the text (i.e., font family, size, weight, and style). + * It is undefined by default, and can be set using `setFont(...)` or `resetFont()`. + */ + protected textFont?: Required; + constructor(); + /** + * Adds a child Element to the Element, which lets it inherit the + * same style as the parent when setGroupStyle() is called. + * + * Examples of children are noteheads and stems. Modifiers such + * as Accidentals are generally not set as children. + * + * Note that StaveNote calls setGroupStyle() when setStyle() is called. + */ + addChildElement(child: Element): this; + getCategory(): string; + /** + * Set the element style used to render. + * + * Example: + * ```typescript + * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); + * element.draw(); + * ``` + * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave), + * the style can be applied to all of them by means of the context: + * ```typescript + * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); + * element.getContext().setFillStyle('red'); + * element.getContext().setStrokeStyle('red'); + * element.draw(); + * ``` + * or using drawWithStyle: + * ```typescript + * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); + * element.drawWithStyle(); + * ``` + */ + setStyle(style: ElementStyle | undefined): this; + /** Set the element & associated children style used for rendering. */ + setGroupStyle(style: ElementStyle): this; + /** Get the element style used for rendering. */ + getStyle(): ElementStyle | undefined; + /** Apply the element style to `context`. */ + applyStyle(context?: RenderContext | undefined, style?: ElementStyle | undefined): this; + /** Restore the style of `context`. */ + restoreStyle(context?: RenderContext | undefined, style?: ElementStyle | undefined): this; + /** + * Draw the element and all its sub-elements (ie.: Modifiers in a Stave) + * with the element's style (see `getStyle()` and `setStyle()`) + */ + drawWithStyle(): void; + /** Draw an element. */ + abstract draw(...args: any[]): void; + /** Check if it has a class label (An element can have multiple class labels). */ + hasClass(className: string): boolean; + /** Add a class label (An element can have multiple class labels). */ + addClass(className: string): this; + /** Remove a class label (An element can have multiple class labels). */ + removeClass(className: string): this; + /** Call back from registry after the element is registered. */ + onRegister(registry: Registry): this; + /** Return the rendered status. */ + isRendered(): boolean; + /** Set the rendered status. */ + setRendered(rendered?: boolean): this; + /** Return the element attributes. */ + getAttributes(): ElementAttributes; + /** Return an attribute, such as 'id', 'type' or 'class'. */ + getAttribute(name: string): any; + /** Return associated SVGElement. */ + getSVGElement(suffix?: string): SVGElement | undefined; + /** Set an attribute such as 'id', 'class', or 'type'. */ + setAttribute(name: string, value: string | undefined): this; + /** Get the boundingBox. */ + getBoundingBox(): BoundingBox | undefined; + /** Return the context, such as an SVGContext or CanvasContext object. */ + getContext(): RenderContext | undefined; + /** Set the context to an SVGContext or CanvasContext object */ + setContext(context?: RenderContext): this; + /** Validate and return the rendering context. */ + checkContext(): RenderContext; + /** + * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied + * to text (not glyphs). + */ + set font(f: string); + /** Returns the CSS compatible font string for the text font. */ + get font(): string; + /** + * Set the element's text font family, size, weight, style + * (e.g., `Arial`, `10pt`, `bold`, `italic`). + * + * This attribute does not determine the font used for musical Glyphs like treble clefs. + * + * @param font is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). + * @param style is a string (e.g., 'italic', 'normal'). + * If no arguments are provided, then the font is set to the default font. + * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property. + */ + setFont(font?: string | FontInfo, size?: string | number, weight?: string | number, style?: string): this; + /** + * Get the css string describing this Element's text font. e.g., + * 'bold 10pt Arial'. + */ + getFont(): string; + /** + * Reset the text font to the style indicated by the static `TEXT_FONT` property. + * Subclasses can call this to initialize `textFont` for the first time. + */ + resetFont(): void; + /** Return a copy of the current FontInfo object. */ + get fontInfo(): Required; + set fontInfo(fontInfo: FontInfo); + /** Change the font size, while keeping everything else the same. */ + setFontSize(size?: string | number): this; + /** + * @returns a CSS font-size string (e.g., '18pt', '12px', '1em'). + * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes. + */ + getFontSize(): string; + /** + * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property. + * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt'). + */ + set fontSize(size: string | number); + /** + * @returns a CSS font-size string (e.g., '18pt', '12px', '1em'). + */ + get fontSize(): string; + /** + * @returns the font size in `pt`. + */ + get fontSizeInPoints(): number; + /** + * @returns the font size in `px`. + */ + get fontSizeInPixels(): number; + /** + * @returns a CSS font-style string (e.g., 'italic'). + */ + get fontStyle(): string; + set fontStyle(style: string); + /** + * @returns a CSS font-weight string (e.g., 'bold'). + * As in CSS, font-weight is always returned as a string, even if it was set as a number. + */ + get fontWeight(): string; + set fontWeight(weight: string | number); +} diff --git a/build/types/src/factory.d.ts b/build/types/src/factory.d.ts new file mode 100644 index 0000000000..981dabeebf --- /dev/null +++ b/build/types/src/factory.d.ts @@ -0,0 +1,279 @@ +import { Accidental } from './accidental'; +import { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation'; +import { Articulation } from './articulation'; +import { BarNote } from './barnote'; +import { Beam, PartialBeamDirection } from './beam'; +import { ChordSymbol } from './chordsymbol'; +import { ClefNote } from './clefnote'; +import { Curve, CurveOptions } from './curve'; +import { EasyScore, EasyScoreOptions } from './easyscore'; +import { Element } from './element'; +import { FontInfo } from './font'; +import { Formatter, FormatterOptions } from './formatter'; +import { FretHandFinger } from './frethandfinger'; +import { GhostNote } from './ghostnote'; +import { Glyph } from './glyph'; +import { GlyphNote, GlyphNoteOptions } from './glyphnote'; +import { GraceNote, GraceNoteStruct } from './gracenote'; +import { GraceNoteGroup } from './gracenotegroup'; +import { KeySigNote } from './keysignote'; +import { ModifierContext } from './modifiercontext'; +import { MultiMeasureRest, MultimeasureRestRenderOptions } from './multimeasurerest'; +import { Note, NoteStruct } from './note'; +import { NoteSubGroup } from './notesubgroup'; +import { Ornament } from './ornament'; +import { PedalMarking } from './pedalmarking'; +import { RenderContext } from './rendercontext'; +import { RepeatNote } from './repeatnote'; +import { Stave, StaveOptions } from './stave'; +import { BarlineType } from './stavebarline'; +import { StaveConnector, StaveConnectorType } from './staveconnector'; +import { StaveLine } from './staveline'; +import { StaveNote, StaveNoteStruct } from './stavenote'; +import { StaveTie } from './stavetie'; +import { StemmableNote } from './stemmablenote'; +import { StringNumber } from './stringnumber'; +import { System, SystemOptions } from './system'; +import { TabNote, TabNoteStruct } from './tabnote'; +import { TabStave } from './tabstave'; +import { TextBracket } from './textbracket'; +import { TextDynamics } from './textdynamics'; +import { TextNote, TextNoteStruct } from './textnote'; +import { TickContext } from './tickcontext'; +import { TimeSigNote } from './timesignote'; +import { Tuplet, TupletOptions } from './tuplet'; +import { VibratoBracket } from './vibratobracket'; +import { Voice, VoiceTime } from './voice'; +export interface FactoryOptions { + stave?: { + space: number; + }; + renderer?: { + elementId: string | null; + backend?: number; + width: number; + height: number; + background?: string; + }; + font?: FontInfo; +} +/** + * Factory implements a high level API around VexFlow. + */ +export declare class Factory { + /** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */ + static DEBUG: boolean; + /** Default text font. */ + static TEXT_FONT: Required; + /** + * Static simplified function to access constructor without providing FactoryOptions + * + * Example: + * + * Create an SVG renderer and attach it to the DIV element named "boo" to render using 1200 and 600 + * + * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );` + */ + static newFromElementId(elementId: string | null, width?: number, height?: number): Factory; + protected options: Required; + protected stave?: Stave; + protected context: RenderContext; + protected staves: Stave[]; + protected voices: Voice[]; + protected renderQ: Element[]; + protected systems: System[]; + /** + * Example: + * + * Create an SVG renderer and attach it to the DIV element named "boo" to render using 1200 and 600 + * + * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});` + */ + constructor(options?: FactoryOptions); + reset(): void; + setOptions(options?: FactoryOptions): void; + initRenderer(): void; + getContext(): RenderContext; + setContext(context: RenderContext): this; + getStave(): Stave | undefined; + getVoices(): Voice[]; + /** Return pixels from current stave spacing. */ + Stave(params?: { + x?: number; + y?: number; + width?: number; + options?: StaveOptions; + }): Stave; + TabStave(params?: { + x?: number; + y?: number; + width?: number; + options?: StaveOptions; + }): TabStave; + StaveNote(noteStruct: StaveNoteStruct): StaveNote; + GlyphNote(glyph: Glyph, noteStruct: NoteStruct, options?: GlyphNoteOptions): GlyphNote; + RepeatNote(type: string, noteStruct?: NoteStruct, options?: GlyphNoteOptions): RepeatNote; + GhostNote(noteStruct: string | NoteStruct): GhostNote; + TextNote(noteStruct: TextNoteStruct): TextNote; + BarNote(params?: { + type?: BarlineType | string; + }): BarNote; + ClefNote(params?: { + type?: string; + options?: { + size?: string; + annotation?: string; + }; + }): ClefNote; + TimeSigNote(params?: { + time?: string; + }): TimeSigNote; + KeySigNote(params: { + key: string; + cancelKey?: string; + alterKey?: string[]; + }): KeySigNote; + TabNote(noteStruct: TabNoteStruct): TabNote; + GraceNote(noteStruct: GraceNoteStruct): GraceNote; + GraceNoteGroup(params: { + notes: StemmableNote[]; + slur?: boolean; + }): GraceNoteGroup; + Accidental(params: { + type: string; + }): Accidental; + Annotation(params?: { + text?: string; + hJustify?: string | AnnotationHorizontalJustify; + vJustify?: string | AnnotationVerticalJustify; + font?: FontInfo; + }): Annotation; + ChordSymbol(params?: { + vJustify?: string; + hJustify?: string; + kerning?: boolean; + reportWidth?: boolean; + fontFamily?: string; + fontSize?: number; + fontWeight?: string; + }): ChordSymbol; + Articulation(params?: { + betweenLines?: boolean; + type?: string; + position?: string | number; + }): Articulation; + Ornament(type: string, params?: { + position?: string | number; + upperAccidental?: string; + lowerAccidental?: string; + delayed?: boolean; + }): Ornament; + TextDynamics(params?: { + text?: string; + duration?: string; + dots?: number; + line?: number; + }): TextDynamics; + Fingering(params: { + number?: string; + position?: string; + }): FretHandFinger; + StringNumber(params: { + number: string; + position: string; + }, drawCircle?: boolean): StringNumber; + TickContext(): TickContext; + ModifierContext(): ModifierContext; + MultiMeasureRest(params: MultimeasureRestRenderOptions): MultiMeasureRest; + Voice(params?: { + time?: VoiceTime | string; + }): Voice; + StaveConnector(params: { + top_stave: Stave; + bottom_stave: Stave; + type: StaveConnectorType; + }): StaveConnector; + Formatter(options?: FormatterOptions): Formatter; + Tuplet(params?: { + notes?: Note[]; + options?: TupletOptions; + }): Tuplet; + Beam(params: { + notes: StemmableNote[]; + options?: { + autoStem?: boolean; + secondaryBeamBreaks?: number[]; + partialBeamDirections?: { + [noteIndex: number]: PartialBeamDirection; + }; + }; + }): Beam; + Curve(params: { + from: Note; + to: Note; + options: CurveOptions; + }): Curve; + StaveTie(params: { + from?: Note | null; + to?: Note | null; + first_indices?: number[]; + last_indices?: number[]; + text?: string; + options?: { + direction?: number; + }; + }): StaveTie; + StaveLine(params: { + from: StaveNote; + to: StaveNote; + first_indices: number[]; + last_indices: number[]; + options?: { + text?: string; + font?: FontInfo; + }; + }): StaveLine; + VibratoBracket(params: { + from: Note | null; + to: Note | null; + options: { + harsh?: boolean; + line?: number; + }; + }): VibratoBracket; + TextBracket(params: { + from: Note; + to: Note; + text: string; + options: { + superscript: string; + position: string; + line?: number; + font?: FontInfo; + }; + }): TextBracket; + System(params?: SystemOptions): System; + /** + * Creates EasyScore. Normally the first step after constructing a Factory. For example: + * ``` + * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }}); + * const score: EasyScore = vf.EasyScore(); + * ``` + * @param options.factory optional instance of Factory + * @param options.builder instance of Builder + * @param options.commitHooks function to call after a note element is created + * @param options.throwOnError throw error in case of parsing error + */ + EasyScore(options?: EasyScoreOptions): EasyScore; + PedalMarking(params?: { + notes?: StaveNote[]; + options?: { + style: string; + }; + }): PedalMarking; + NoteSubGroup(params?: { + notes?: Note[]; + }): NoteSubGroup; + /** Render the score. */ + draw(): void; +} diff --git a/build/types/src/flow.d.ts b/build/types/src/flow.d.ts new file mode 100644 index 0000000000..a7cca426ed --- /dev/null +++ b/build/types/src/flow.d.ts @@ -0,0 +1,265 @@ +import { Accidental } from './accidental'; +import { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation'; +import { Articulation } from './articulation'; +import { BarNote } from './barnote'; +import { Beam } from './beam'; +import { Bend } from './bend'; +import { BoundingBox } from './boundingbox'; +import { BoundingBoxComputation } from './boundingboxcomputation'; +import { CanvasContext } from './canvascontext'; +import { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes } from './chordsymbol'; +import { Clef } from './clef'; +import { ClefNote } from './clefnote'; +import { Crescendo } from './crescendo'; +import { Curve, CurvePosition } from './curve'; +import { Dot } from './dot'; +import { EasyScore } from './easyscore'; +import { Element } from './element'; +import { Factory } from './factory'; +import { Font, FontModule, FontStyle, FontWeight } from './font'; +import { Formatter } from './formatter'; +import { Fraction } from './fraction'; +import { FretHandFinger } from './frethandfinger'; +import { GhostNote } from './ghostnote'; +import { Glyph } from './glyph'; +import { GlyphNote } from './glyphnote'; +import { GraceNote } from './gracenote'; +import { GraceNoteGroup } from './gracenotegroup'; +import { GraceTabNote } from './gracetabnote'; +import { KeyManager } from './keymanager'; +import { KeySignature } from './keysignature'; +import { KeySigNote } from './keysignote'; +import { Modifier, ModifierPosition } from './modifier'; +import { ModifierContext } from './modifiercontext'; +import { MultiMeasureRest } from './multimeasurerest'; +import { Music } from './music'; +import { Note } from './note'; +import { NoteHead } from './notehead'; +import { NoteSubGroup } from './notesubgroup'; +import { Ornament } from './ornament'; +import { Parenthesis } from './parenthesis'; +import { Parser } from './parser'; +import { PedalMarking } from './pedalmarking'; +import { Registry } from './registry'; +import { RenderContext } from './rendercontext'; +import { Renderer, RendererBackends, RendererLineEndType } from './renderer'; +import { RepeatNote } from './repeatnote'; +import { Stave } from './stave'; +import { Barline, BarlineType } from './stavebarline'; +import { StaveConnector } from './staveconnector'; +import { StaveHairpin } from './stavehairpin'; +import { StaveLine } from './staveline'; +import { StaveModifier, StaveModifierPosition } from './stavemodifier'; +import { StaveNote } from './stavenote'; +import { Repetition } from './staverepetition'; +import { StaveTempo } from './stavetempo'; +import { StaveText } from './stavetext'; +import { StaveTie } from './stavetie'; +import { Volta, VoltaType } from './stavevolta'; +import { Stem } from './stem'; +import { StringNumber } from './stringnumber'; +import { Stroke } from './strokes'; +import { SVGContext } from './svgcontext'; +import { System } from './system'; +import { TabNote } from './tabnote'; +import { TabSlide } from './tabslide'; +import { TabStave } from './tabstave'; +import { TabTie } from './tabtie'; +import { TextBracket, TextBracketPosition } from './textbracket'; +import { TextDynamics } from './textdynamics'; +import { TextFormatter } from './textformatter'; +import { TextJustification, TextNote } from './textnote'; +import { TickContext } from './tickcontext'; +import { TimeSignature } from './timesignature'; +import { TimeSigNote } from './timesignote'; +import { Tremolo } from './tremolo'; +import { Tuning } from './tuning'; +import { Tuplet } from './tuplet'; +import { Vibrato } from './vibrato'; +import { VibratoBracket } from './vibratobracket'; +import { Voice, VoiceMode } from './voice'; +export declare class Flow { + static get BUILD(): { + /** version number. */ + VERSION: string; + /** git commit ID that this library was built from. */ + ID: string; + /** The date when this library was compiled. */ + DATE: string; + }; + static Accidental: typeof Accidental; + static Annotation: typeof Annotation; + static Articulation: typeof Articulation; + static Barline: typeof Barline; + static BarNote: typeof BarNote; + static Beam: typeof Beam; + static Bend: typeof Bend; + static BoundingBox: typeof BoundingBox; + static BoundingBoxComputation: typeof BoundingBoxComputation; + static CanvasContext: typeof CanvasContext; + static ChordSymbol: typeof ChordSymbol; + static Clef: typeof Clef; + static ClefNote: typeof ClefNote; + static Crescendo: typeof Crescendo; + static Curve: typeof Curve; + static Dot: typeof Dot; + static EasyScore: typeof EasyScore; + static Element: typeof Element; + static Factory: typeof Factory; + static Font: typeof Font; + static Formatter: typeof Formatter; + static Fraction: typeof Fraction; + static FretHandFinger: typeof FretHandFinger; + static GhostNote: typeof GhostNote; + static Glyph: typeof Glyph; + static GlyphNote: typeof GlyphNote; + static GraceNote: typeof GraceNote; + static GraceNoteGroup: typeof GraceNoteGroup; + static GraceTabNote: typeof GraceTabNote; + static KeyManager: typeof KeyManager; + static KeySignature: typeof KeySignature; + static KeySigNote: typeof KeySigNote; + static Modifier: typeof Modifier; + static ModifierContext: typeof ModifierContext; + static MultiMeasureRest: typeof MultiMeasureRest; + static Music: typeof Music; + static Note: typeof Note; + static NoteHead: typeof NoteHead; + static NoteSubGroup: typeof NoteSubGroup; + static Ornament: typeof Ornament; + static Parenthesis: typeof Parenthesis; + static Parser: typeof Parser; + static PedalMarking: typeof PedalMarking; + static Registry: typeof Registry; + static RenderContext: typeof RenderContext; + static Renderer: typeof Renderer; + static RepeatNote: typeof RepeatNote; + static Repetition: typeof Repetition; + static Stave: typeof Stave; + static StaveConnector: typeof StaveConnector; + static StaveHairpin: typeof StaveHairpin; + static StaveLine: typeof StaveLine; + static StaveModifier: typeof StaveModifier; + static StaveNote: typeof StaveNote; + static StaveTempo: typeof StaveTempo; + static StaveText: typeof StaveText; + static StaveTie: typeof StaveTie; + static Stem: typeof Stem; + static StringNumber: typeof StringNumber; + static Stroke: typeof Stroke; + static SVGContext: typeof SVGContext; + static System: typeof System; + static TabNote: typeof TabNote; + static TabSlide: typeof TabSlide; + static TabStave: typeof TabStave; + static TabTie: typeof TabTie; + static TextBracket: typeof TextBracket; + static TextDynamics: typeof TextDynamics; + static TextFormatter: typeof TextFormatter; + static TextNote: typeof TextNote; + static TickContext: typeof TickContext; + static TimeSignature: typeof TimeSignature; + static TimeSigNote: typeof TimeSigNote; + static Tremolo: typeof Tremolo; + static Tuning: typeof Tuning; + static Tuplet: typeof Tuplet; + static Vibrato: typeof Vibrato; + static VibratoBracket: typeof VibratoBracket; + static Voice: typeof Voice; + static Volta: typeof Volta; + static AnnotationHorizontalJustify: typeof AnnotationHorizontalJustify; + static AnnotationVerticalJustify: typeof AnnotationVerticalJustify; + static ChordSymbolHorizontalJustify: typeof ChordSymbolHorizontalJustify; + static ChordSymbolVerticalJustify: typeof ChordSymbolVerticalJustify; + static SymbolTypes: typeof SymbolTypes; + static SymbolModifiers: typeof SymbolModifiers; + static CurvePosition: typeof CurvePosition; + static FontWeight: typeof FontWeight; + static FontStyle: typeof FontStyle; + static ModifierPosition: typeof ModifierPosition; + static RendererBackends: typeof RendererBackends; + static RendererLineEndType: typeof RendererLineEndType; + static BarlineType: typeof BarlineType; + static StaveModifierPosition: typeof StaveModifierPosition; + static VoltaType: typeof VoltaType; + static TextBracketPosition: typeof TextBracketPosition; + static TextJustification: typeof TextJustification; + static VoiceMode: typeof VoiceMode; + /** + * Examples: + * ``` + * Vex.Flow.setMusicFont('Petaluma'); + * Vex.Flow.setMusicFont('Bravura', 'Gonville'); + * ``` + * + * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom). + * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of: + * 'Bravura', 'Gonville', 'Custom'. + * + * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`, + * which includes a single music font. Calling this method is unnecessary. + * + * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts. + * In this case, the default music font stack is empty. + * Example: + * ``` + * await Vex.Flow.fetchMusicFont('Petaluma'); + * Vex.Flow.setMusicFont('Petaluma'); + * ... (do VexFlow stuff) ... + * ``` + * See `demos/fonts/` for more examples. + * + * @returns an array of Font objects corresponding to the provided `fontNames`. + */ + static setMusicFont(...fontNames: string[]): Font[]; + /** + * Used with vexflow-core which supports dynamic font loading. + */ + static fetchMusicFont(fontName: string, fontModuleOrPath?: string | FontModule): Promise; + static getMusicFont(): string[]; + static getMusicFontStack(): Font[]; + static get RENDER_PRECISION_PLACES(): number; + static set RENDER_PRECISION_PLACES(precision: number); + static get SOFTMAX_FACTOR(): number; + static set SOFTMAX_FACTOR(factor: number); + static get NOTATION_FONT_SCALE(): number; + static set NOTATION_FONT_SCALE(value: number); + static get TABLATURE_FONT_SCALE(): number; + static set TABLATURE_FONT_SCALE(value: number); + static get RESOLUTION(): number; + static set RESOLUTION(value: number); + static get SLASH_NOTEHEAD_WIDTH(): number; + static set SLASH_NOTEHEAD_WIDTH(value: number); + static get STAVE_LINE_DISTANCE(): number; + static set STAVE_LINE_DISTANCE(value: number); + static get STAVE_LINE_THICKNESS(): number; + static set STAVE_LINE_THICKNESS(value: number); + static get STEM_HEIGHT(): number; + static set STEM_HEIGHT(value: number); + static get STEM_WIDTH(): number; + static set STEM_WIDTH(value: number); + static get TIME4_4(): { + num_beats: number; + beat_value: number; + resolution: number; + }; + static get accidentalMap(): Record; + static get unicode(): Record; + static keySignature(spec: string): { + type: string; + line: number; + }[]; + static hasKeySignature(spec: string): boolean; + static getKeySignatures(): Record; + static clefProperties(clef: string): { + line_shift: number; + }; + static keyProperties(key: string, clef?: string, params?: any): any; + static durationToTicks(duration: string): number; +} diff --git a/build/types/src/font.d.ts b/build/types/src/font.d.ts new file mode 100644 index 0000000000..6de2151817 --- /dev/null +++ b/build/types/src/font.d.ts @@ -0,0 +1,201 @@ +import { ChordSymbolMetrics } from './chordsymbol'; +import { ClefMetrics } from './clef'; +import { NoteHeadMetrics } from './notehead'; +import { OrnamentMetrics } from './ornament'; +import { StringNumberMetrics } from './stringnumber'; +import { TupletMetrics } from './tuplet'; +export interface FontInfo { + /** CSS font-family, e.g., 'Arial', 'Helvetica Neue, Arial, sans-serif', 'Times, serif' */ + family?: string; + /** + * CSS font-size (e.g., '10pt', '12px'). + * For backwards compatibility with 3.0.9, plain numbers are assumed to be specified in 'pt'. + */ + size?: number | string; + /** `bold` or a number (e.g., 900) as inspired by CSS font-weight. */ + weight?: string | number; + /** `italic` as inspired by CSS font-style. */ + style?: string; +} +export type FontModule = { + data: FontData; + metrics: FontMetrics; +}; +export interface FontData { + glyphs: Record; + fontFamily?: string; + resolution: number; + generatedOn?: string; +} +/** Specified in the `xxx_metrics.ts` files. */ +export interface FontMetrics extends Record { + smufl: boolean; + stave?: Record; + accidental?: Record; + clef_default?: ClefMetrics; + clef_small?: ClefMetrics; + pedalMarking?: Record>; + digits?: Record; + articulation?: Record>; + tremolo?: Record>; + chordSymbol?: ChordSymbolMetrics; + ornament?: Record; + noteHead?: NoteHeadMetrics; + stringNumber?: StringNumberMetrics; + tuplet?: TupletMetrics; + glyphs: Record; +} +export interface FontGlyph { + x_min: number; + x_max: number; + y_min?: number; + y_max?: number; + ha: number; + leftSideBearing?: number; + advanceWidth?: number; + o?: string; + cached_outline?: number[]; +} +export declare enum FontWeight { + NORMAL = "normal", + BOLD = "bold" +} +export declare enum FontStyle { + NORMAL = "normal", + ITALIC = "italic" +} +export declare class Font { + /** Default sans-serif font family. */ + static SANS_SERIF: string; + /** Default serif font family. */ + static SERIF: string; + /** Default font size in `pt`. */ + static SIZE: number; + /** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */ + static scaleToPxFrom: Record; + /** + * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em') + * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported + * units (e.g., pt, em, %). + * @returns the number of pixels that is equivalent to `fontSize` + */ + static convertSizeToPixelValue(fontSize?: string | number): number; + /** + * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em') + * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported + * units (e.g., pt, em, %). + * @returns the number of points that is equivalent to `fontSize` + */ + static convertSizeToPointValue(fontSize?: string | number): number; + /** + * @param f + * @param size + * @param weight + * @param style + * @returns the `size` field will include the units (e.g., '12pt', '16px'). + */ + static validate(f?: string | FontInfo, size?: string | number, weight?: string | number, style?: string): Required; + /** + * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial'). + */ + static fromCSSString(cssFontShorthand: string): Required; + /** + * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`. + */ + static toCSSString(fontInfo?: FontInfo): string; + /** + * @param fontSize a number representing a font size, or a string font size with units. + * @param scaleFactor multiply the size by this factor. + * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48). + * If the fontSize argument was a number, the return value will be a number. + * If the fontSize argument was a string, the return value will be a string. + */ + static scaleSize(fontSize: T, scaleFactor: number): T; + /** + * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec). + * @returns true if the font weight indicates bold. + */ + static isBold(weight?: string | number): boolean; + /** + * @param style + * @returns true if the font style indicates 'italic'. + */ + static isItalic(style?: string): boolean; + /** + * Customize this field to specify a different CDN for delivering web fonts. + * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/ + * Or you can use your own host. + */ + static WEB_FONT_HOST: string; + /** + * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when + * `await Font.loadWebFonts()` is called. Customize this field to specify a different + * set of fonts to load. See: `Font.loadWebFonts()`. + */ + static WEB_FONT_FILES: Record; + /** + * @param fontName + * @param woffURL The absolute or relative URL to the woff file. + * @param includeWoff2 If true, we assume that a woff2 file is in + * the same folder as the woff file, and will append a `2` to the url. + */ + static loadWebFont(fontName: string, woffURL: string, includeWoff2?: boolean): Promise; + /** + * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls: + * `await Vex.Flow.Font.loadWebFonts();` + * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts), + * and a @font-face { font-family: ... } rule in your CSS. + * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial, + * depending on the current music engraving font. + * + * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts + * for your app. + */ + static loadWebFonts(): Promise; + /** + * @param fontName + * @param data optionally set the Font object's `.data` property. + * This is usually done when setting up a font for the first time. + * @param metrics optionally set the Font object's `.metrics` property. + * This is usually done when setting up a font for the first time. + * @returns a Font object with the given `fontName`. + * Reuse an existing Font object if a matching one is found. + */ + static load(fontName: string, data?: FontData, metrics?: FontMetrics): Font; + protected name: string; + protected data?: FontData; + protected metrics?: FontMetrics; + /** + * Use `Font.load(fontName)` to get a Font object. + * Do not call this constructor directly. + */ + private constructor(); + getName(): string; + getData(): FontData; + getMetrics(): FontMetrics; + setData(data: FontData): void; + setMetrics(metrics: FontMetrics): void; + hasData(): boolean; + getResolution(): number; + getGlyphs(): Record; + /** + * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts). + * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY). + * @param defaultValue is returned if the lookup fails. + * @returns the retrieved value (or `defaultValue` if the lookup fails). + */ + lookupMetric(key: string, defaultValue?: Record | number): any; + /** For debugging. */ + toString(): string; +} diff --git a/build/types/src/fonts/bravura_glyphs.d.ts b/build/types/src/fonts/bravura_glyphs.d.ts new file mode 100644 index 0000000000..cedea92b8b --- /dev/null +++ b/build/types/src/fonts/bravura_glyphs.d.ts @@ -0,0 +1,3543 @@ +export declare const BravuraFont: { + glyphs: { + bracketTop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + bracketBottom: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + barlineTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + segno: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + coda: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + gClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + cClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + unpitchedPercussionClef1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + '6stringTabClef': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig0: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig3: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig4: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig5: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig6: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig7: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig8: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig9: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCutCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlusSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRightSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeftSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleX: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWholeSquare: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareWhite: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesis: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadMoonBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleLeftBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRightBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRoundDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + augmentationDot: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + tremolo1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNatural: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneFlatStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBakiyeFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKomaSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKucukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKoron: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSori: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkComma: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkUpbow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesura: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesuraCurved: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restMaxima: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWholeLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalfLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restQuarter: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest8th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest16th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest32nd: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest64th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest128th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicPiano: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicMezzo: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicForte: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicRinforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicSforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicZ: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurnSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentMordent: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentShortTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTremblement: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompAppoggTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillDAnglebert: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillBach: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillSuffixDandrieu: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillLowerSuffix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassScoop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassDoitMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFallLipShort: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassLiftMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFallRoughMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassBend: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteClosed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteOpen: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFlip: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassJazzTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassSmear: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsDownBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsUpBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsHarmonic: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedLeftHandPizzicato: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalPed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pictChokeCymbal: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + wiggleArpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arrowheadBlackUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arrowheadBlackDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arpeggiatoDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat1Bar: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat2Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat4Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeatBarSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymHalfDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymAugmented: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMajorSeventh: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMinor: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensLeftTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensRightTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymBracketLeftTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymBracketRightTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensLeftVeryTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensRightVeryTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiagonalArrangementSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v7KleismaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v7KleismaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal25SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal25SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal35MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal35MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal35LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal35LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp25SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat25SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v7kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v7kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v7kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v7kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp25SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat25SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp35MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat35MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp35LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat35LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp25SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat25SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp7CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat7CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5v7kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5v7kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v11KleismaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v11KleismaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal17CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal17CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal55CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal55CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v11CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v11CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v11SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v11SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v11SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v11SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v11CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v11CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp55CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat55CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp17CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat17CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v11kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v11kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v11kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v11kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp17CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat17CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp55CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat55CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v11CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v11CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v11SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v11SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5v11SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5v11SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp7v11CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat7v11CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp55CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat55CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp17CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat17CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp7v11kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat7v11kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal23CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal23CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v19CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v19CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v23SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v23SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp23CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat23CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp23CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat23CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5v23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5v23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp23CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat23CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal19SchismaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal19SchismaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal17KleismaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal17KleismaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal143CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal143CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v49CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v49CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal19CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal19CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v19CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v19CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal23SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal23SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v13MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v13MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v19MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v19MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v49MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v49MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v19LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v19LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v13LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v13LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp49SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat49SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11v49CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11v49CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp143CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat143CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp17kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat17kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp19sDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat19sUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp19sUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat19sDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp17kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat17kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp143CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat143CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11v49CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11v49CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp49SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat49SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v13MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v13MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11v19MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11v19MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp49MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat49MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v49MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v49MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp49LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat49LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11v19LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11v19LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v13LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v13LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp49SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat49SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp7v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat7v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp11v49CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat11v49CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp143CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat143CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp17kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat17kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp19sDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat19sUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalShaftUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalShaftDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalAcute: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalGrave: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal1MinaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal1MinaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal2MinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal2MinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal1TinaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal1TinaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal2TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal2TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal3TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal3TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal4TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal4TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal6TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal6TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal8TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal8TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal9TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal9TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFractionalTinaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFractionalTinaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlatAndFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalWilsonPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalWilsonMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; +}; diff --git a/build/types/src/fonts/common_metrics.d.ts b/build/types/src/fonts/common_metrics.d.ts new file mode 100644 index 0000000000..dfd064a4ef --- /dev/null +++ b/build/types/src/fonts/common_metrics.d.ts @@ -0,0 +1,384 @@ +export declare const CommonMetrics: { + smufl: boolean; + stave: { + padding: number; + endPaddingMax: number; + endPaddingMin: number; + unalignedNotePadding: number; + }; + accidental: { + noteheadAccidentalPadding: number; + leftPadding: number; + accidentalSpacing: number; + }; + chordSymbol: { + global: { + superscriptOffset: number; + subscriptOffset: number; + kerningOffset: number; + lowerKerningText: string[]; + upperKerningText: string[]; + spacing: number; + superSubRatio: number; + }; + glyphs: { + csymDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymHalfDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymAugmented: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymDiagonalArrangementSlash: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMinor: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMajorSeventh: { + leftSideBearing: number; + yOffset: number; + advanceWidth: number; + }; + accidentalSharp: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + accidentalFlat: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + }; + }; + clef_default: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + clef_small: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + ornament: { + brassScoop: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassDoitMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallLipShort: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassLiftMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallRoughMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassBend: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteClosed: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteOpen: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFlip: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassJazzTurn: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassSmear: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + }; + parenthesis: { + default: { + width: number; + }; + gracenote: { + width: number; + }; + }; + pedalMarking: {}; + digits: { + shiftLine: number; + shiftY: number; + }; + articulation: { + articStaccatissimoAbove: { + padding: number; + }; + articStaccatissimoBelow: { + padding: number; + }; + }; + tremolo: { + default: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + grace: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + }; + staveRepetition: { + symbolText: { + offsetX: number; + offsetY: number; + spacing: number; + }; + coda: { + offsetY: number; + }; + segno: { + offsetY: number; + }; + }; + noteHead: { + minPadding: number; + }; + stem: { + heightAdjustmentForFlag: number; + noteHead: { + noteheadTriangleUpHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadSquareWhite: { + offsetYBaseStemDown: number; + offsetYBaseStemUp: number; + }; + }; + }; + stringNumber: { + verticalPadding: number; + stemPadding: number; + leftPadding: number; + rightPadding: number; + }; + tuplet: { + noteHeadOffset: number; + stemOffset: number; + bottomLine: number; + topModifierOffset: number; + }; + glyphs: { + coda: { + shiftX: number; + shiftY: number; + }; + segno: { + shiftX: number; + }; + flag: { + shiftX: number; + staveTempo: { + shiftX: number; + }; + }; + clef_default: {}; + clef_small: { + gClef: { + shiftY: number; + }; + }; + clefNote_default: {}; + clefNote_small: {}; + stroke_straight: { + arrowheadBlackDown: { + shiftX: number; + }; + arrowheadBlackUp: { + shiftX: number; + }; + }; + stroke_wiggly: { + arrowheadBlackDown: { + shiftX: number; + shiftY: number; + }; + arrowheadBlackUp: { + shiftX: number; + shiftY: number; + }; + }; + textNote: { + breathMarkTick: { + shiftY: number; + }; + breathMarkComma: {}; + segno: { + shiftX: number; + shiftY: number; + }; + coda: { + shiftX: number; + shiftY: number; + }; + ornamentTrill: { + shiftX: number; + shiftY: number; + }; + ornamentTurn: {}; + ornamentTurnSlash: {}; + ornamentMordent: { + shiftX: number; + }; + ornamentShortTrill: { + shiftX: number; + }; + }; + noteHead: {}; + chordSymbol: { + scale: number; + }; + }; +}; diff --git a/build/types/src/fonts/custom_glyphs.d.ts b/build/types/src/fonts/custom_glyphs.d.ts new file mode 100644 index 0000000000..6da20639d2 --- /dev/null +++ b/build/types/src/fonts/custom_glyphs.d.ts @@ -0,0 +1,42 @@ +export declare const CustomFont: { + resolution: number; + fontFamily: string; + glyphs: { + vexAccidentalMicrotonal1: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexAccidentalMicrotonal3: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexAccidentalMicrotonal4: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexNoteHeadRectBlack: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexNoteHeadRectWhite: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexWiggleArpeggioUp: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + }; +}; diff --git a/build/types/src/fonts/gonville_glyphs.d.ts b/build/types/src/fonts/gonville_glyphs.d.ts new file mode 100644 index 0000000000..ec2e48b8c9 --- /dev/null +++ b/build/types/src/fonts/gonville_glyphs.d.ts @@ -0,0 +1,1119 @@ +export declare const GonvilleSmuflFont: { + glyphs: { + bracketTop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + bracketBottom: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + barlineTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + segno: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + coda: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + gClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + cClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + unpitchedPercussionClef1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + '6stringTabClef': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig0: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig3: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig4: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig5: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig6: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig7: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig8: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig9: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCutCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlusSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRightSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeftSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleX: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + augmentationDot: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + tremolo1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNatural: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneFlatStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBakiyeFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKomaSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKucukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkComma: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkUpbow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesura: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesuraCurved: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restMaxima: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWholeLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalfLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restQuarter: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest8th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest16th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest32nd: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest64th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest128th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicPiano: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicMezzo: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicForte: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicRinforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicSforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicZ: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurnSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentMordent: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentShortTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTremblement: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompAppoggTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillDAnglebert: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillBach: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillSuffixDandrieu: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillLowerSuffix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsDownBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsUpBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsHarmonic: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedLeftHandPizzicato: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalPed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pictChokeCymbal: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + wiggleArpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arrowheadBlackUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arrowheadBlackDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; +}; diff --git a/build/types/src/fonts/leland_glyphs.d.ts b/build/types/src/fonts/leland_glyphs.d.ts new file mode 100644 index 0000000000..37fb4902e6 --- /dev/null +++ b/build/types/src/fonts/leland_glyphs.d.ts @@ -0,0 +1,1191 @@ +export declare const LelandFont: { + glyphs: { + bracketTop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + bracketBottom: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + segno: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + coda: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + gClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + cClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + unpitchedPercussionClef1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + '6stringTabClef': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig0: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig3: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig4: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig5: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig6: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig7: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig8: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig9: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCutCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleX: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWholeSquare: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareWhite: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadMoonBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleLeftBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRightBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRoundDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + augmentationDot: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + tremolo1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNatural: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneFlatStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBakiyeFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKucukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkComma: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesura: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesuraCurved: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restMaxima: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWholeLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalfLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restQuarter: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest8th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest16th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest32nd: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest64th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest128th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicPiano: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicMezzo: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicForte: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicRinforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicSforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicZ: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurnSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentMordent: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentShortTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTremblement: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompAppoggTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillDAnglebert: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillBach: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillSuffixDandrieu: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillLowerSuffix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteClosed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteOpen: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsDownBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsUpBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsHarmonic: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalPed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + wiggleArpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat1Bar: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat2Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat4Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeatBarSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymHalfDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymAugmented: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMajorSeventh: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlatAndFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; +}; diff --git a/build/types/src/fonts/load_all.d.ts b/build/types/src/fonts/load_all.d.ts new file mode 100644 index 0000000000..c8159357a9 --- /dev/null +++ b/build/types/src/fonts/load_all.d.ts @@ -0,0 +1 @@ +export declare function loadAllMusicFonts(): void; diff --git a/build/types/src/fonts/load_bravura.d.ts b/build/types/src/fonts/load_bravura.d.ts new file mode 100644 index 0000000000..368afa2244 --- /dev/null +++ b/build/types/src/fonts/load_bravura.d.ts @@ -0,0 +1 @@ +export declare function loadBravura(): void; diff --git a/build/types/src/fonts/load_custom.d.ts b/build/types/src/fonts/load_custom.d.ts new file mode 100644 index 0000000000..2b3b5207a7 --- /dev/null +++ b/build/types/src/fonts/load_custom.d.ts @@ -0,0 +1 @@ +export declare function loadCustom(): void; diff --git a/build/types/src/fonts/load_gonville.d.ts b/build/types/src/fonts/load_gonville.d.ts new file mode 100644 index 0000000000..1dad266116 --- /dev/null +++ b/build/types/src/fonts/load_gonville.d.ts @@ -0,0 +1 @@ +export declare function loadGonville(): void; diff --git a/build/types/src/fonts/load_leland.d.ts b/build/types/src/fonts/load_leland.d.ts new file mode 100644 index 0000000000..cd62e01095 --- /dev/null +++ b/build/types/src/fonts/load_leland.d.ts @@ -0,0 +1 @@ +export declare function loadLeland(): void; diff --git a/build/types/src/fonts/load_petaluma.d.ts b/build/types/src/fonts/load_petaluma.d.ts new file mode 100644 index 0000000000..db8a66540a --- /dev/null +++ b/build/types/src/fonts/load_petaluma.d.ts @@ -0,0 +1 @@ +export declare function loadPetaluma(): void; diff --git a/build/types/src/fonts/petaluma_glyphs.d.ts b/build/types/src/fonts/petaluma_glyphs.d.ts new file mode 100644 index 0000000000..4b8ea71551 --- /dev/null +++ b/build/types/src/fonts/petaluma_glyphs.d.ts @@ -0,0 +1,1639 @@ +export declare const PetalumaFont: { + glyphs: { + bracketTop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + bracketBottom: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + barlineTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + segno: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + coda: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + gClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + cClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + unpitchedPercussionClef1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + '6stringTabClef': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig0: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig3: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig4: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig5: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig6: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig7: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig8: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig9: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCutCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlusSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRightSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeftSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleX: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWholeSquare: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareWhite: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesis: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadMoonBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleLeftBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRightBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRoundDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + augmentationDot: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + tremolo1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNatural: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneFlatStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBakiyeFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKomaSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKucukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKoron: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSori: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkComma: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkUpbow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesura: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesuraCurved: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restMaxima: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWholeLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalfLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restQuarter: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest8th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest16th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest32nd: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest64th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest128th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicPiano: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicMezzo: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicForte: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicRinforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicSforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicZ: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurnSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentMordent: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentShortTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTremblement: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompAppoggTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillDAnglebert: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillBach: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillSuffixDandrieu: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillLowerSuffix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassScoop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassDoitMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFallLipShort: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassLiftMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFallRoughMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassBend: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteClosed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteOpen: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFlip: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassJazzTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassSmear: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsDownBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsUpBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsHarmonic: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedLeftHandPizzicato: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalPed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pictChokeCymbal: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + wiggleArpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arpeggiatoDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat1Bar: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat2Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat4Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeatBarSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymHalfDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymAugmented: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMajorSeventh: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMinor: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensLeftTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensRightTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymBracketLeftTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymBracketRightTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensLeftVeryTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensRightVeryTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiagonalArrangementSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlatAndFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalWilsonPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalWilsonMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; +}; diff --git a/build/types/src/fonts/petalumascript_glyphs.d.ts b/build/types/src/fonts/petalumascript_glyphs.d.ts new file mode 100644 index 0000000000..82295a6a3a --- /dev/null +++ b/build/types/src/fonts/petalumascript_glyphs.d.ts @@ -0,0 +1,863 @@ +export declare const PetalumaScriptFont: { + spacing: number; + glyphs: { + ' ': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '0': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '1': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '2': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '3': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '4': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '5': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '6': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '7': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '8': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '9': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '!': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '"': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '#': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + $: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '%': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '&': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + "'": { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '(': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ')': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '*': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '+': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ',': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '-': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '.': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '/': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ':': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ';': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '<': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '=': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '>': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '?': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '@': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + A: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + B: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + C: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + D: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + E: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + F: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + G: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + H: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + I: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + J: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + K: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + L: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + M: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + N: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + O: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + P: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + R: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + S: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + T: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + U: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + V: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + W: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + X: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '[': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '\\': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ']': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '^': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + _: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '`': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + a: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + b: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + c: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + d: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + e: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + f: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + g: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + h: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + i: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + j: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + k: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + l: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + m: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + n: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + o: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + p: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + r: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + s: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + t: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + u: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + v: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + w: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + x: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '{': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '|': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '}': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '~': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; +}; diff --git a/build/types/src/fonts/robotoslab_glyphs.d.ts b/build/types/src/fonts/robotoslab_glyphs.d.ts new file mode 100644 index 0000000000..3bfa79f006 --- /dev/null +++ b/build/types/src/fonts/robotoslab_glyphs.d.ts @@ -0,0 +1,863 @@ +export declare const RobotoSlabFont: { + spacing: number; + glyphs: { + ' ': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '0': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '1': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '2': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '3': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '4': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '5': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '6': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '7': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '8': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '9': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '!': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '"': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '#': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + $: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '%': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '&': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + "'": { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '(': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ')': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '*': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '+': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ',': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '-': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '.': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '/': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ':': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ';': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '<': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '=': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '>': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '?': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '@': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + A: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + B: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + C: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + D: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + E: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + F: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + G: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + H: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + I: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + J: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + K: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + L: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + M: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + N: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + O: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + P: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + R: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + S: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + T: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + U: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + V: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + W: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + X: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '[': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '\\': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ']': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '^': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + _: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '`': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + a: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + b: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + c: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + d: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + e: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + f: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + g: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + h: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + i: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + j: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + k: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + l: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + m: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + n: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + o: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + p: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + r: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + s: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + t: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + u: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + v: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + w: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + x: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '{': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '|': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '}': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '~': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; +}; diff --git a/build/types/src/fonts/sans_bold_text_metrics.d.ts b/build/types/src/fonts/sans_bold_text_metrics.d.ts new file mode 100644 index 0000000000..b33f6cdf66 --- /dev/null +++ b/build/types/src/fonts/sans_bold_text_metrics.d.ts @@ -0,0 +1,862 @@ +export declare const SansFontBold: { + glyphs: { + '0': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '1': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '2': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '3': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '4': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '5': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '6': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '7': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '8': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '9': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ' ': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '!': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '"': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '#': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + $: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '%': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '&': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + "'": { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '(': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ')': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '*': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '+': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ',': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '-': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '.': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '/': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ':': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ';': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '<': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '=': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '>': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '?': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '@': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + A: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + B: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + C: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + D: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + E: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + F: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + G: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + H: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + I: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + J: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + K: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + L: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + M: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + N: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + O: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + P: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + R: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + S: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + T: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + U: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + V: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + W: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + X: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '[': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '\\': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ']': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '^': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + _: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '`': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + a: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + b: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + c: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + d: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + e: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + f: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + g: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + h: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + i: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + j: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + k: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + l: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + m: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + n: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + o: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + p: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + r: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + s: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + t: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + u: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + v: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + w: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + x: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '{': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '|': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '}': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '~': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; +}; diff --git a/build/types/src/fonts/sans_text_metrics.d.ts b/build/types/src/fonts/sans_text_metrics.d.ts new file mode 100644 index 0000000000..1d0036b8a5 --- /dev/null +++ b/build/types/src/fonts/sans_text_metrics.d.ts @@ -0,0 +1,870 @@ +export declare const SansFont: { + smufl: boolean; + name: string; + spacing: number; + Description: string; + bold: boolean; + italic: boolean; + monospaced: boolean; + serifs: boolean; + glyphs: { + '0': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '1': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '2': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '3': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '4': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '5': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '6': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '7': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '8': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '9': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ' ': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '!': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '"': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '#': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + $: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '%': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '&': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + "'": { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '(': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ')': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '*': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '+': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ',': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '-': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '.': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '/': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ':': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ';': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '<': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '=': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '>': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '?': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '@': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + A: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + B: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + C: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + D: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + E: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + F: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + G: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + H: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + I: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + J: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + K: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + L: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + M: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + N: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + O: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + P: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + R: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + S: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + T: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + U: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + V: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + W: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + X: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '[': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '\\': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ']': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '^': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + _: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '`': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + a: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + b: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + c: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + d: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + e: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + f: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + g: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + h: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + i: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + j: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + k: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + l: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + m: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + n: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + o: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + p: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + r: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + s: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + t: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + u: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + v: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + w: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + x: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '{': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '|': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '}': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '~': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; +}; diff --git a/build/types/src/fonts/serif_text_metrics.d.ts b/build/types/src/fonts/serif_text_metrics.d.ts new file mode 100644 index 0000000000..3202b0e5a7 --- /dev/null +++ b/build/types/src/fonts/serif_text_metrics.d.ts @@ -0,0 +1,870 @@ +export declare const SerifFont: { + smufl: boolean; + name: string; + spacing: number; + Description: string; + bold: boolean; + italic: boolean; + monospaced: boolean; + serifs: boolean; + glyphs: { + '0': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '1': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '2': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '3': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '4': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '5': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '6': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '7': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '8': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '9': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ' ': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '!': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '"': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '#': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + $: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '%': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '&': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + "'": { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '(': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ')': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '*': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '+': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ',': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '-': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '.': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '/': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ':': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ';': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '<': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '=': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '>': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '?': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '@': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + A: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + B: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + C: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + D: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + E: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + F: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + G: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + H: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + I: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + J: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + K: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + L: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + M: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + N: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + O: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + P: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + R: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + S: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + T: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + U: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + V: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + W: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + X: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '[': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '\\': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ']': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '^': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + _: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '`': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + a: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + b: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + c: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + d: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + e: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + f: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + g: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + h: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + i: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + j: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + k: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + l: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + m: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + n: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + o: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + p: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + r: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + s: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + t: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + u: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + v: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + w: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + x: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '{': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '|': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '}': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '~': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; +}; diff --git a/build/types/src/fonts/textfonts.d.ts b/build/types/src/fonts/textfonts.d.ts new file mode 100644 index 0000000000..a9a1721cd3 --- /dev/null +++ b/build/types/src/fonts/textfonts.d.ts @@ -0,0 +1 @@ +export declare function loadTextFonts(): void; diff --git a/build/types/src/formatter.d.ts b/build/types/src/formatter.d.ts new file mode 100644 index 0000000000..28a915d788 --- /dev/null +++ b/build/types/src/formatter.d.ts @@ -0,0 +1,215 @@ +import { BoundingBox } from './boundingbox'; +import { ModifierContext } from './modifiercontext'; +import { RenderContext } from './rendercontext'; +import { Stave } from './stave'; +import { StemmableNote } from './stemmablenote'; +import { TabNote } from './tabnote'; +import { TabStave } from './tabstave'; +import { Tickable } from './tickable'; +import { TickContext } from './tickcontext'; +import { Voice } from './voice'; +export interface FormatterOptions { + /** Defaults to Tables.SOFTMAX_FACTOR. */ + softmaxFactor?: number; + /** Defaults to `false`. */ + globalSoftmax?: boolean; + /** Defaults to 5. */ + maxIterations?: number; +} +export interface FormatParams { + align_rests?: boolean; + stave?: Stave; + context?: RenderContext; + auto_beam?: boolean; +} +export interface AlignmentContexts { + list: number[]; + map: Record; + array: T[]; + resolutionMultiplier: number; +} +export interface AlignmentModifierContexts { + map: Map>; + array: ModifierContext[]; + resolutionMultiplier: number; +} +/** + * Format implements the formatting and layout algorithms that are used + * to position notes in a voice. The algorithm can align multiple voices both + * within a stave, and across multiple staves. + * + * To do this, the formatter breaks up voices into a grid of rational-valued + * `ticks`, to which each note is assigned. Then, minimum widths are assigned + * to each tick based on the widths of the notes and modifiers in that tick. This + * establishes the smallest amount of space required for each tick. + * + * Finally, the formatter distributes the left over space proportionally to + * all the ticks, setting the `x` values of the notes in each tick. + * + * See `tests/formatter_tests.ts` for usage examples. The helper functions included + * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples. + */ +export declare class Formatter { + static DEBUG: boolean; + protected hasMinTotalWidth: boolean; + protected minTotalWidth: number; + protected contextGaps: { + total: number; + gaps: { + x1: number; + x2: number; + }[]; + }; + protected justifyWidth: number; + protected totalCost: number; + protected totalShift: number; + protected tickContexts: AlignmentContexts; + protected formatterOptions: Required; + protected modifierContexts: AlignmentModifierContexts[]; + protected voices: Voice[]; + protected lossHistory: number[]; + protected durationStats: Record; + /** + * Helper function to layout "notes" one after the other without + * regard for proportions. Useful for tests and debugging. + */ + static SimpleFormat(notes: Tickable[], x?: number, { paddingBetween }?: { + paddingBetween?: number | undefined; + }): void; + /** Helper function to plot formatter debug info. */ + static plotDebugging(ctx: RenderContext, formatter: Formatter, xPos: number, y1: number, y2: number, options?: { + stavePadding: number; + }): void; + /** + * Helper function to format and draw a single voice. Returns a bounding + * box for the notation. + * @param ctx the rendering context + * @param stave the stave to which to draw (`Stave` or `TabStave`) + * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.) + * @param params one of below: + * * Setting `autobeam` only `(context, stave, notes, true)` or + * `(ctx, stave, notes, {autobeam: true})` + * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})` + * * Setting both a struct is needed `(context, stave, notes, { + * autobeam: true, align_rests: true})` + * * `autobeam` automatically generates beams for the notes. + * * `align_rests` aligns rests with nearby notes. + */ + static FormatAndDraw(ctx: RenderContext, stave: Stave, notes: StemmableNote[], params?: FormatParams | boolean): BoundingBox | undefined; + /** + * Helper function to format and draw aligned tab and stave notes in two + * separate staves. + * @param ctx the rendering context + * @param tabstave a `TabStave` instance on which to render `TabNote`s. + * @param stave a `Stave` instance on which to render `Note`s. + * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.) + * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.) + * @param autobeam automatically generate beams. + * @param params a configuration object: + * * `autobeam` automatically generates beams for the notes. + * * `align_rests` aligns rests with nearby notes. + */ + static FormatAndDrawTab(ctx: RenderContext, tabstave: TabStave, stave: Stave, tabnotes: TabNote[], notes: Tickable[], autobeam: boolean, params: FormatParams): void; + /** + * Automatically set the vertical position of rests based on previous/next note positions. + * @param tickables an array of Tickables. + * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes. + * @param alignTuplets If `false`, ignores tuplets. + */ + static AlignRestsToNotes(tickables: Tickable[], alignAllNotes: boolean, alignTuplets?: boolean): void; + constructor(options?: FormatterOptions); + /** + * Find all the rests in each of the `voices` and align them to neighboring notes. + * + * @param voices + * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests. + */ + alignRests(voices: Voice[], alignAllNotes: boolean): void; + /** + * Estimate the width required to render 'voices'. This is done by: + * 1. Sum the widths of all the tick contexts + * 2. Estimate the padding. + * The latter is done by calculating the padding 3 different ways, and taking the + * greatest value: + * 1. the padding required for unaligned notes in different voices + * 2. the padding based on the stddev of the tickable widths + * 3. the padding based on the stddev of the tickable durations. + * + * The last 2 quantities estimate a 'width entropy', where notes might need more + * room than the proportional formatting gives them. A measure of all same duration + * and width will need no extra padding, and all these quantities will be + * zero in that case. + * + * Note: joinVoices has to be called before calling preCalculateMinTotalWidth. + * + * @param voices the voices that contain the notes + * @returns the estimated width in pixels + */ + preCalculateMinTotalWidth(voices: Voice[]): number; + /** + * Get minimum width required to render all voices. Either `format` or + * `preCalculateMinTotalWidth` must be called before this method. + */ + getMinTotalWidth(): number; + /** Calculate the resolution multiplier for `voices`. */ + static getResolutionMultiplier(voices: Voice[]): number; + /** Create a `ModifierContext` for each tick in `voices`. */ + createModifierContexts(voices: Voice[]): void; + /** + * Create a `TickContext` for each tick in `voices`. Also calculate the + * total number of ticks in voices. + */ + createTickContexts(voices: Voice[]): AlignmentContexts; + /** + * Get the AlignmentContexts of TickContexts that were created by createTickContexts. + * Returns undefined if createTickContexts has not yet been run. + */ + getTickContexts(): AlignmentContexts | undefined; + /** + * This is the core formatter logic. Format voices and justify them + * to `justifyWidth` pixels. `renderingContext` is required to justify elements + * that can't retrieve widths without a canvas. This method sets the `x` positions + * of all the tickables/notes in the formatter. + */ + preFormat(justifyWidth?: number, renderingContext?: RenderContext, voicesParam?: Voice[], stave?: Stave): number; + /** Calculate the total cost of this formatting decision. */ + evaluate(): number; + /** + * Run a single iteration of rejustification. At a high level, this method calculates + * the overall "loss" (or cost) of this layout, and repositions tickcontexts in an + * attempt to reduce the cost. You can call this method multiple times until it finds + * and oscillates around a global minimum. + * @param options[alpha] the "learning rate" for the formatter. It determines how much of a shift + * the formatter should make based on its cost function. + */ + tune(options?: { + alpha?: number; + }): number; + /** + * This is the top-level call for all formatting logic completed + * after `x` *and* `y` values have been computed for the notes + * in the voices. + */ + postFormat(): this; + /** + * Take all `voices` and create `ModifierContext`s out of them. This tells + * the formatters that the voices belong on a single stave. + */ + joinVoices(voices: Voice[]): this; + /** + * Align rests in voices, justify the contexts, and position the notes + * so voices are aligned and ready to render onto the stave. This method + * mutates the `x` positions of all tickables in `voices`. + * + * Voices are full justified to fit in `justifyWidth` pixels. + * + * Set `options.context` to the rendering context. Set `options.align_rests` + * to true to enable rest alignment. + */ + format(voices: Voice[], justifyWidth?: number, options?: FormatParams): this; + formatToStave(voices: Voice[], stave: Stave, optionsParam?: FormatParams): this; + getTickContext(tick: number): TickContext | undefined; +} diff --git a/build/types/src/fraction.d.ts b/build/types/src/fraction.d.ts new file mode 100644 index 0000000000..41aad5c956 --- /dev/null +++ b/build/types/src/fraction.d.ts @@ -0,0 +1,62 @@ +/** Fraction represents a rational number. */ +export declare class Fraction { + static get CATEGORY(): string; + private static __staticFractionA; + private static __staticFractionB; + private static __staticFractionTmp; + /** + * GCD: Greatest common divisor using the Euclidean algorithm. + * Note: GCD(0, 0) => 0 and GCD(0, n) => n. + */ + static GCD(a: number, b: number): number; + /** LCM: Lowest common multiple. */ + static LCM(a: number, b: number): number; + /** Lowest common multiple for more than two numbers. */ + static LCMM(args: number[]): number; + numerator: number; + denominator: number; + /** Set the numerator and denominator. */ + constructor(numerator?: number, denominator?: number); + /** Set the numerator and denominator. */ + set(numerator?: number, denominator?: number): this; + /** Return the value of the fraction. */ + value(): number; + /** Simplify numerator and denominator using GCD. */ + simplify(): this; + /** Add value of another fraction. */ + add(param1?: Fraction | number, param2?: number): this; + /** Substract value of another fraction. */ + subtract(param1?: Fraction | number, param2?: number): this; + /** Multiply by value of another fraction. */ + multiply(param1?: Fraction | number, param2?: number): this; + /** Divide by value of another Fraction. */ + divide(param1?: Fraction | number, param2?: number): this; + /** Simplify both sides and check if they are equal. */ + equals(compare: Fraction | number): boolean; + /** Greater than operator. */ + greaterThan(compare: Fraction | number): boolean; + /** Greater than or equals operator. */ + greaterThanEquals(compare: Fraction | number): boolean; + /** Less than operator. */ + lessThan(compare: Fraction | number): boolean; + /** Less than or equals operator. */ + lessThanEquals(compare: Fraction | number): boolean; + /** Return a new copy with current values. */ + clone(): Fraction; + /** Copy value of another fraction. */ + copy(other: Fraction | number): this; + /** Return the integer component (eg. 5/2 => 2). */ + quotient(): number; + /** Return the remainder component (eg. 5/2 => 1). */ + remainder(): number; + /** Calculate absolute value. */ + makeAbs(): this; + /** Return a raw string representation (eg. "5/2"). */ + toString(): string; + /** Return a simplified string respresentation. */ + toSimplifiedString(): string; + /** Return string representation in mixed form. */ + toMixedString(): string; + /** Parse a fraction string. */ + parse(str: string): this; +} diff --git a/build/types/src/frethandfinger.d.ts b/build/types/src/frethandfinger.d.ts new file mode 100644 index 0000000000..d7946ce0b6 --- /dev/null +++ b/build/types/src/frethandfinger.d.ts @@ -0,0 +1,22 @@ +import { Builder } from './easyscore'; +import { FontInfo } from './font'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { StemmableNote } from './stemmablenote'; +export declare class FretHandFinger extends Modifier { + static get CATEGORY(): string; + static TEXT_FONT: Required; + static format(nums: FretHandFinger[], state: ModifierContextState): boolean; + static easyScoreHook({ fingerings }: { + fingerings?: string | undefined; + } | undefined, note: StemmableNote, builder: Builder): void; + protected finger: string; + protected x_offset: number; + protected y_offset: number; + constructor(finger: string); + setFretHandFinger(finger: string): this; + getFretHandFinger(): string; + setOffsetX(x: number): this; + setOffsetY(y: number): this; + draw(): void; +} diff --git a/build/types/src/ghostnote.d.ts b/build/types/src/ghostnote.d.ts new file mode 100644 index 0000000000..ba30a4337b --- /dev/null +++ b/build/types/src/ghostnote.d.ts @@ -0,0 +1,16 @@ +import { ModifierContext } from './modifiercontext'; +import { NoteStruct } from './note'; +import { Stave } from './stave'; +import { StemmableNote } from './stemmablenote'; +export declare class GhostNote extends StemmableNote { + static get CATEGORY(): string; + constructor(parameter: string | NoteStruct); + /** + * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score. + */ + isRest(): boolean; + setStave(stave: Stave): this; + addToModifierContext(mc: ModifierContext): this; + preFormat(): this; + draw(): void; +} diff --git a/build/types/src/glyph.d.ts b/build/types/src/glyph.d.ts new file mode 100644 index 0000000000..6bed039ec4 --- /dev/null +++ b/build/types/src/glyph.d.ts @@ -0,0 +1,140 @@ +import { BoundingBox } from './boundingbox'; +import { Element } from './element'; +import { Font, FontGlyph } from './font'; +import { RenderContext } from './rendercontext'; +import { Stave } from './stave'; +export interface GlyphProps { + code_head: string; + ledger_code_head?: string; + dot_shiftY: number; + position: string; + rest: boolean; + line_below: number; + line_above: number; + stem_beam_extension: number; + stem_up_extension: number; + stem_down_extension: number; + stem: boolean; + code?: string; + code_flag_upstem?: string; + code_flag_downstem?: string; + flag?: boolean; + width?: number; + text?: string; + tabnote_stem_down_extension: number; + tabnote_stem_up_extension: number; + beam_count: number; + shift_y?: number; + getWidth(a?: number): number; +} +export interface GlyphOptions { + category?: string; +} +export interface GlyphMetrics { + width: number; + height: number; + x_min: number; + x_max: number; + x_shift: number; + y_shift: number; + scale: number; + ha: number; + outline: number[]; + font: Font; +} +export declare const enum OutlineCode { + MOVE = 0, + LINE = 1, + QUADRATIC = 2, + BEZIER = 3 +} +declare class GlyphCacheEntry { + metrics: GlyphMetrics; + bbox: BoundingBox; + point: number; + constructor(fontStack: Font[], code: string, category?: string); +} +declare class GlyphCache { + protected cache: Map>; + lookup(code: string, category?: string): GlyphCacheEntry; +} +export declare class Glyph extends Element { + static get CATEGORY(): string; + protected static cache: GlyphCache; + static CURRENT_CACHE_KEY: string; + static MUSIC_FONT_STACK: Font[]; + /** + * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails, + * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue. + * + * @param font + * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc. + * @param code + * @param key + * @param defaultValue + */ + static lookupFontMetric(font: Font, category: string, code: string, key: string, defaultValue: number): number; + static lookupGlyph(fontStack: Font[], code: string): { + font: Font; + glyph: FontGlyph; + }; + static loadMetrics(fontStack: Font[], code: string, category?: string): GlyphMetrics; + /** + * Renders glyphs from the default font stack. + * + * @param ctx Canvas or SVG context + * @param x_pos x coordinate + * @param y_pos y coordinate + * @param point the point size of the font + * @param code the glyph code in font.getGlyphs() + * @param options + * @returns + */ + static renderGlyph(ctx: RenderContext, x_pos: number, y_pos: number, point: number, code: string, options?: { + category?: string; + scale?: number; + }): GlyphMetrics; + static renderOutline(ctx: RenderContext, outline: number[], scale: number, x_pos: number, y_pos: number): void; + static getOutlineBoundingBox(outline: number[], scale: number, x_pos: number, y_pos: number): BoundingBox; + static getWidth(code: string, point: number, category?: string): number; + bbox: BoundingBox; + code: string; + metrics: GlyphMetrics; + topGlyphs: Glyph[]; + botGlyphs: Glyph[]; + protected options: GlyphOptions; + protected originShift: { + x: number; + y: number; + }; + protected x_shift: number; + protected y_shift: number; + scale: number; + protected point: number; + protected stave?: Stave; + /** + * @param code + * @param point + * @param options + */ + constructor(code: string, point: number, options?: GlyphOptions); + draw(...args: any[]): void; + getCode(): string; + setOptions(options: any): void; + setPoint(point: number): this; + setStave(stave: Stave): this; + getXShift(): number; + setXShift(x_shift: number): this; + getYshift(): number; + setYShift(y_shift: number): this; + reset(): void; + checkMetrics(): GlyphMetrics; + getMetrics(): GlyphMetrics; + setOriginX(x: number): void; + setOriginY(y: number): void; + setOrigin(x: number, y: number): void; + render(ctx: RenderContext, x: number, y: number): void; + checkStave(): Stave; + renderToStave(x: number): void; +} +export {}; diff --git a/build/types/src/glyphnote.d.ts b/build/types/src/glyphnote.d.ts new file mode 100644 index 0000000000..b507cdf478 --- /dev/null +++ b/build/types/src/glyphnote.d.ts @@ -0,0 +1,20 @@ +import { BoundingBox } from './boundingbox'; +import { Glyph } from './glyph'; +import { Note, NoteStruct } from './note'; +export interface GlyphNoteOptions { + ignoreTicks?: boolean; + line?: number; +} +export declare class GlyphNote extends Note { + static get CATEGORY(): string; + protected options: Required; + protected glyph: Glyph; + constructor(glyph: Glyph, noteStruct: NoteStruct, options?: GlyphNoteOptions); + setGlyph(glyph: Glyph): this; + getBoundingBox(): BoundingBox | undefined; + preFormat(): this; + drawModifiers(): void; + /** Get the glyph width. */ + getGlyphWidth(): number; + draw(): void; +} diff --git a/build/types/src/gracenote.d.ts b/build/types/src/gracenote.d.ts new file mode 100644 index 0000000000..55c1f26593 --- /dev/null +++ b/build/types/src/gracenote.d.ts @@ -0,0 +1,19 @@ +import { StaveNote, StaveNoteStruct } from './stavenote'; +export interface GraceNoteStruct extends StaveNoteStruct { + slash?: boolean; +} +export declare class GraceNote extends StaveNote { + static get CATEGORY(): string; + static get LEDGER_LINE_OFFSET(): number; + static get SCALE(): number; + protected slash: boolean; + protected slur: boolean; + constructor(noteStruct: GraceNoteStruct); + getStemExtension(): number; + getStaveNoteScale(): number; + draw(): void; + calcBeamedNotesSlashBBox(slashStemOffset: number, slashBeamOffset: number, protrusions: { + beam: number; + stem: number; + }): Record; +} diff --git a/build/types/src/gracenotegroup.d.ts b/build/types/src/gracenotegroup.d.ts new file mode 100644 index 0000000000..9b807374d1 --- /dev/null +++ b/build/types/src/gracenotegroup.d.ts @@ -0,0 +1,33 @@ +import { Beam } from './beam'; +import { Formatter } from './formatter'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { Note } from './note'; +import { StaveTie } from './stavetie'; +import { StemmableNote } from './stemmablenote'; +import { TabTie } from './tabtie'; +import { Voice } from './voice'; +/** GraceNoteGroup is used to format and render grace notes. */ +export declare class GraceNoteGroup extends Modifier { + static DEBUG: boolean; + static get CATEGORY(): string; + protected readonly voice: Voice; + protected readonly grace_notes: StemmableNote[]; + protected readonly show_slur?: boolean; + protected preFormatted: boolean; + protected formatter?: Formatter; + render_options: { + slur_y_shift: number; + }; + protected slur?: StaveTie | TabTie; + protected beams: Beam[]; + /** Arranges groups inside a `ModifierContext`. */ + static format(gracenote_groups: GraceNoteGroup[], state: ModifierContextState): boolean; + constructor(grace_notes: StemmableNote[], show_slur?: boolean); + preFormat(): void; + beamNotes(grace_notes?: StemmableNote[]): this; + setWidth(width: number): this; + getWidth(): number; + getGraceNotes(): Note[]; + draw(): void; +} diff --git a/build/types/src/gracetabnote.d.ts b/build/types/src/gracetabnote.d.ts new file mode 100644 index 0000000000..fe6bcf3819 --- /dev/null +++ b/build/types/src/gracetabnote.d.ts @@ -0,0 +1,5 @@ +import { TabNote, TabNoteStruct } from './tabnote'; +export declare class GraceTabNote extends TabNote { + static get CATEGORY(): string; + constructor(noteStruct: TabNoteStruct); +} diff --git a/build/types/src/index.d.ts b/build/types/src/index.d.ts new file mode 100644 index 0000000000..dfefbc7915 --- /dev/null +++ b/build/types/src/index.d.ts @@ -0,0 +1,89 @@ +export * from './accidental'; +export * from './annotation'; +export * from './articulation'; +export * from './barnote'; +export * from './beam'; +export * from './bend'; +export * from './boundingbox'; +export * from './boundingboxcomputation'; +export * from './canvascontext'; +export * from './chordsymbol'; +export * from './clef'; +export * from './clefnote'; +export * from './crescendo'; +export * from './curve'; +export * from './dot'; +export * from './easyscore'; +export * from './element'; +export * from './factory'; +export * from './flow'; +export * from './font'; +export * from './formatter'; +export * from './fraction'; +export * from './frethandfinger'; +export * from './ghostnote'; +export * from './glyph'; +export * from './glyphnote'; +export * from './gracenote'; +export * from './gracenotegroup'; +export * from './gracetabnote'; +export * from './keymanager'; +export * from './keysignature'; +export * from './keysignote'; +export * from './modifier'; +export * from './modifiercontext'; +export * from './multimeasurerest'; +export * from './music'; +export * from './note'; +export * from './notehead'; +export * from './notesubgroup'; +export * from './ornament'; +export * from './parenthesis'; +export * from './parser'; +export * from './pedalmarking'; +export * from './registry'; +export * from './rendercontext'; +export * from './renderer'; +export * from './repeatnote'; +export * from './stave'; +export * from './stavebarline'; +export * from './staveconnector'; +export * from './stavehairpin'; +export * from './staveline'; +export * from './stavemodifier'; +export * from './stavenote'; +export * from './staverepetition'; +export * from './stavesection'; +export * from './stavetempo'; +export * from './stavetext'; +export * from './stavetie'; +export * from './stavevolta'; +export * from './stem'; +export * from './stemmablenote'; +export * from './stringnumber'; +export * from './strokes'; +export * from './svgcontext'; +export * from './system'; +export * from './tabnote'; +export * from './tabslide'; +export * from './tabstave'; +export * from './tabtie'; +export * from './textbracket'; +export * from './textdynamics'; +export * from './textformatter'; +export * from './textnote'; +export * from './tickable'; +export * from './tickcontext'; +export * from './timesigglyph'; +export * from './timesignature'; +export * from './timesignote'; +export * from './tremolo'; +export * from './tuning'; +export * from './tuplet'; +export * from './typeguard'; +export * from './util'; +export * from './vex'; +export * from './vibrato'; +export * from './vibratobracket'; +export * from './voice'; +export * from './web'; diff --git a/build/types/src/keymanager.d.ts b/build/types/src/keymanager.d.ts new file mode 100644 index 0000000000..dfa97e269f --- /dev/null +++ b/build/types/src/keymanager.d.ts @@ -0,0 +1,25 @@ +import { KeyParts, Music } from './music'; +export declare class KeyManager { + protected music: Music; + protected keyParts: KeyParts; + protected keyString: string; + protected key: string; + protected scale: number[]; + protected scaleMap: Record; + protected scaleMapByValue: Record; + protected originalScaleMapByValue: Record; + constructor(key: string); + setKey(key: string): this; + getKey(): string; + reset(): this; + getAccidental(key: string): { + note: string; + accidental?: string; + change?: boolean; + }; + selectNote(note: string): { + note: string; + accidental?: string; + change: boolean; + }; +} diff --git a/build/types/src/keysignature.d.ts b/build/types/src/keysignature.d.ts new file mode 100644 index 0000000000..fe68d97320 --- /dev/null +++ b/build/types/src/keysignature.d.ts @@ -0,0 +1,54 @@ +import { Glyph } from './glyph'; +import { Stave } from './stave'; +import { StaveModifier } from './stavemodifier'; +export declare class KeySignature extends StaveModifier { + static get CATEGORY(): string; + protected glyphFontScale: number; + protected glyphs: Glyph[]; + protected xPositions: number[]; + protected paddingForced: boolean; + protected formatted?: boolean; + protected cancelKeySpec?: string; + protected accList: { + type: string; + line: number; + }[]; + protected keySpec?: string; + protected alterKeySpec?: string[]; + static accidentalSpacing: Record; + constructor(keySpec: string, cancelKeySpec?: string, alterKeySpec?: string[]); + convertToGlyph(acc: { + type: string; + line: number; + }, nextAcc: { + type: string; + line: number; + }): void; + cancelKey(spec: string): this; + convertToCancelAccList(spec: string): { + type: string; + accList: { + type: string; + line: number; + }[]; + } | undefined; + addToStave(stave: Stave): this; + convertAccLines(clef: string, type?: string, accList?: { + type: string; + line: number; + }[]): void; + getPadding(index: number): number; + getWidth(): number; + setKeySig(keySpec: string, cancelKeySpec?: string, alterKeySpec?: string[]): this; + alterKey(alterKeySpec: string[]): this; + convertToAlterAccList(alterKeySpec: string[]): void; + format(): void; + /** + * Return the Glyph objects making up this KeySignature. + */ + getGlyphs(): Glyph[]; + draw(): void; +} diff --git a/build/types/src/keysignote.d.ts b/build/types/src/keysignote.d.ts new file mode 100644 index 0000000000..56032e4c37 --- /dev/null +++ b/build/types/src/keysignote.d.ts @@ -0,0 +1,11 @@ +import { KeySignature } from './keysignature'; +import { ModifierContext } from './modifiercontext'; +import { Note } from './note'; +export declare class KeySigNote extends Note { + static get CATEGORY(): string; + protected keySignature: KeySignature; + constructor(keySpec: string, cancelKeySpec?: string, alterKeySpec?: string[]); + addToModifierContext(mc: ModifierContext): this; + preFormat(): this; + draw(): void; +} diff --git a/build/types/src/modifier.d.ts b/build/types/src/modifier.d.ts new file mode 100644 index 0000000000..73758e277a --- /dev/null +++ b/build/types/src/modifier.d.ts @@ -0,0 +1,97 @@ +import { Element } from './element'; +import { ModifierContext } from './modifiercontext'; +import { Note } from './note'; +export declare enum ModifierPosition { + CENTER = 0, + LEFT = 1, + RIGHT = 2, + ABOVE = 3, + BELOW = 4 +} +/** + * `Modifier` is an abstract interface for notational elements that modify + * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc. + * + * For a `Modifier` instance to be positioned correctly, it must be part of + * a `ModifierContext`. All modifiers in the same context are rendered relative to + * one another. + * + * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also, + * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same + * `ModifierContext`. This ensures that multiple voices don't trample all over each other. + */ +export declare class Modifier extends Element { + /** + * Modifiers category string. Every modifier has a different category. + * The `ModifierContext` uses this to determine the type and order of the modifiers. + */ + static get CATEGORY(): string; + /** Modifiers can be positioned almost anywhere, relative to a note. */ + static get Position(): typeof ModifierPosition; + static get PositionString(): Record; + protected note?: Note; + protected index?: number; + protected width: number; + protected text_line: number; + protected position: ModifierPosition; + protected y_shift: number; + protected x_shift: number; + private spacingFromNextModifier; + private modifierContext?; + constructor(); + /** Called when position changes. */ + protected reset(): void; + /** Get modifier widths. */ + getWidth(): number; + /** Set modifier widths. */ + setWidth(width: number): this; + /** Get attached note (`StaveNote`, `TabNote`, etc.) */ + getNote(): Note; + /** + * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.). + * Also verifies that the index is valid. + */ + checkAttachedNote(): Note; + /** + * Set attached note. + * @param note (`StaveNote`, `TabNote`, etc.) + */ + setNote(note: Note): this; + /** Get note index, which is a specific note in a chord. */ + getIndex(): number | undefined; + /** Check and get note index, which is a specific note in a chord. */ + checkIndex(): number; + /** Set note index, which is a specific note in a chord. */ + setIndex(index: number): this; + /** Get `ModifierContext`. */ + getModifierContext(): ModifierContext | undefined; + /** Check and get `ModifierContext`. */ + checkModifierContext(): ModifierContext; + /** Every modifier must be part of a `ModifierContext`. */ + setModifierContext(c: ModifierContext): this; + /** Get position. */ + getPosition(): number; + /** + * Set position. + * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW + */ + setPosition(position: string | number): this; + /** Set the `text_line` for the modifier. */ + setTextLine(line: number): this; + /** Shift modifier down `y` pixels. Negative values shift up. */ + setYShift(y: number): this; + /** Set spacing from next modifier. */ + setSpacingFromNextModifier(x: number): void; + /** Get spacing from next modifier. */ + getSpacingFromNextModifier(): number; + /** + * Shift modifier `x` pixels in the direction of the modifier. Negative values + * shift reverse. + */ + setXShift(x: number): this; + /** Get shift modifier `x` */ + getXShift(): number; + /** Render the modifier onto the canvas. */ + draw(): void; + alignSubNotesWithNote(subNotes: Note[], note: Note): void; +} diff --git a/build/types/src/modifiercontext.d.ts b/build/types/src/modifiercontext.d.ts new file mode 100644 index 0000000000..9456dbdf05 --- /dev/null +++ b/build/types/src/modifiercontext.d.ts @@ -0,0 +1,48 @@ +import { Modifier } from './modifier'; +import { StaveNote } from './stavenote'; +import { TabNote } from './tabnote'; +import { Tickable } from './tickable'; +export interface ModifierContextState { + right_shift: number; + left_shift: number; + text_line: number; + top_text_line: number; +} +export interface ModifierContextMetrics { + width: number; + spacing: number; +} +export type ModifierContextMember = Tickable | Modifier | StaveNote | TabNote; +export declare class ModifierContext { + static DEBUG: boolean; + protected state: ModifierContextState; + protected members: Record; + protected preFormatted: boolean; + protected postFormatted: boolean; + protected formatted: boolean; + protected width: number; + protected spacing: number; + addModifier(member: ModifierContextMember): this; + /** + * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote. + * Here we add a new member to this.members, and create a new array if needed. + * @param member + * @returns this + */ + addMember(member: ModifierContextMember): this; + /** + * @deprecated + */ + getModifiers(category: string): ModifierContextMember[]; + getMembers(category: string): ModifierContextMember[]; + /** + * Get the width of the entire + */ + getWidth(): number; + getLeftShift(): number; + getRightShift(): number; + getState(): ModifierContextState; + getMetrics(): ModifierContextMetrics; + preFormat(): void; + postFormat(): void; +} diff --git a/build/types/src/multimeasurerest.d.ts b/build/types/src/multimeasurerest.d.ts new file mode 100644 index 0000000000..f63dee846d --- /dev/null +++ b/build/types/src/multimeasurerest.d.ts @@ -0,0 +1,61 @@ +import { Element } from './element'; +import { RenderContext } from './rendercontext'; +import { Stave } from './stave'; +export interface MultimeasureRestRenderOptions { + /** Extracted by Factory.MultiMeasureRest() and passed to the MultiMeasureRest constructor. */ + number_of_measures: number; + /** Use rest symbols. Defaults to `false`, which renders a thick horizontal line with serifs at both ends. */ + use_symbols?: boolean; + /** Horizontal spacing between rest symbol glyphs (if `use_symbols` is `true`).*/ + symbol_spacing?: number; + /** Show the number of measures at the top. Defaults to `true`. */ + show_number?: boolean; + /** Vertical position of the "number of measures" text (measured in stave lines). Defaults to -0.5, which is above the stave. 6.5 is below the stave. */ + number_line?: number; + /** Font size of the "number of measures" text. */ + number_glyph_point?: number; + /** Left padding from `stave.getX()`. */ + padding_left?: number; + /** Right padding from `stave.getX() + stave.getWidth()` */ + padding_right?: number; + /** Vertical position of the rest line or symbols, expressed as stave lines. Default: 2. The top stave line is 1, and the bottom stave line is 5. */ + line?: number; + /** Defaults to the number of vertical pixels between stave lines. Used for serif height or 2-bar / 4-bar symbol height. */ + spacing_between_lines_px?: number; + /** Size of the semibreve (1-bar) rest symbol. Other symbols are scaled accordingly. */ + semibreve_rest_glyph_scale?: number; + /** Thickness of the rest line. Used when `use_symbols` is false. Defaults to half the space between stave lines. */ + line_thickness?: number; + /** Thickness of the rest line's serif. Used when `use_symbols` is false. */ + serif_thickness?: number; +} +export declare class MultiMeasureRest extends Element { + static get CATEGORY(): string; + render_options: Required; + protected xs: { + left: number; + right: number; + }; + protected number_of_measures: number; + protected stave?: Stave; + private hasPaddingLeft; + private hasPaddingRight; + private hasLineThickness; + private hasSymbolSpacing; + /** + * + * @param number_of_measures Number of measures. + * @param options The options object. + */ + constructor(number_of_measures: number, options: MultimeasureRestRenderOptions); + getXs(): { + left: number; + right: number; + }; + setStave(stave: Stave): this; + getStave(): Stave | undefined; + checkStave(): Stave; + drawLine(stave: Stave, ctx: RenderContext, left: number, right: number, spacingBetweenLines: number): void; + drawSymbols(stave: Stave, ctx: RenderContext, left: number, right: number, spacingBetweenLines: number): void; + draw(): void; +} diff --git a/build/types/src/music.d.ts b/build/types/src/music.d.ts new file mode 100644 index 0000000000..a927c39ee6 --- /dev/null +++ b/build/types/src/music.d.ts @@ -0,0 +1,91 @@ +export interface NoteAccidental { + note: number; + accidental: AccidentalValue; +} +export interface NoteParts { + root: string; + accidental: string; +} +export interface KeyParts { + root: string; + accidental: string; + type: string; +} +export type KeyValue = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11; +export type RootValue = 0 | 1 | 2 | 3 | 4 | 5 | 6; +export type AccidentalValue = -2 | -1 | 0 | 1 | 2; +export interface Key { + root_index: RootValue; + int_val: KeyValue; +} +/** Music implements some standard music theory routines. */ +export declare class Music { + /** Number of an canonical notes (12). */ + static get NUM_TONES(): number; + /** Names of root notes ('c', 'd',...) */ + static get roots(): string[]; + /** Values of the root notes.*/ + static get root_values(): KeyValue[]; + /** Indices of the root notes.*/ + static get root_indices(): Record; + /** Names of canonical notes ('c', 'c#', 'd',...). */ + static get canonical_notes(): string[]; + /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */ + static get diatonic_intervals(): string[]; + /** NoteAccidental associated to diatonic intervals. */ + static get diatonic_accidentals(): Record; + /** Semitones shift associated to intervals .*/ + static get intervals(): Record; + /** Semitones shifts associated with scales. */ + static get scales(): Record; + /** Scales associated with m (minor) and M (major). */ + static get scaleTypes(): Record; + /** Accidentals abbreviations. */ + static get accidentals(): string[]; + /** Note values. */ + static get noteValues(): Record; + protected isValidNoteValue(note: number): boolean; + protected isValidIntervalValue(interval: number): boolean; + /** Return root and accidental associated to a note. */ + getNoteParts(noteString: string): NoteParts; + /** Return root, accidental and type associated to a key. */ + getKeyParts(keyString: string): KeyParts; + /** Note value associated to a note name. */ + getNoteValue(noteString: string): number; + /** Interval value associated to an interval name. */ + getIntervalValue(intervalString: string): number; + /** Canonical note name associated to a value. */ + getCanonicalNoteName(noteValue: number): string; + /** Interval name associated to a value. */ + getCanonicalIntervalName(intervalValue: number): string; + /** + * Given a note, interval, and interval direction, produce the relative note. + */ + getRelativeNoteValue(noteValue: number, intervalValue: number, direction?: number): number; + /** + * Given a root and note value, produce the relative note name. + */ + getRelativeNoteName(root: string, noteValue: number): string; + /** + * Return scale tones, given intervals. Each successive interval is + * relative to the previous one, e.g., Major Scale: + * + * TTSTTTS = [2,2,1,2,2,2,1] + * + * When used with key = 0, returns C scale (which is isomorphic to + * interval list). + */ + getScaleTones(key: number, intervals: number[]): number[]; + /** + * Return the interval of a note, given a diatonic scale. + * e.g., given the scale C, and the note E, returns M3. + */ + getIntervalBetween(note1: number, note2: number, direction?: number): number; + /** + * Create a scale map that represents the pitch state for a + * `keySignature`. For example, passing a `G` to `keySignature` would + * return a scale map with every note naturalized except for `F` which + * has an `F#` state. + */ + createScaleMap(keySignature: string): Record; +} diff --git a/build/types/src/note.d.ts b/build/types/src/note.d.ts new file mode 100644 index 0000000000..bd2483b21c --- /dev/null +++ b/build/types/src/note.d.ts @@ -0,0 +1,238 @@ +import { Beam } from './beam'; +import { Fraction } from './fraction'; +import { GlyphProps } from './glyph'; +import { Modifier } from './modifier'; +import { RenderContext } from './rendercontext'; +import { Stave } from './stave'; +import { Stroke } from './strokes'; +import { Tickable } from './tickable'; +import { TickContext } from './tickcontext'; +import { Voice } from './voice'; +export interface KeyProps { + stem_down_x_offset?: number; + stem_up_x_offset?: number; + key: string; + octave: number; + line: number; + int_value?: number; + accidental?: string; + code?: string; + stroke: number; + shift_right?: number; + displaced: boolean; +} +export interface NoteMetrics { + /** The total width of the note (including modifiers). */ + width: number; + glyphWidth?: number; + /** The width of the note head only. */ + notePx: number; + /** Start `X` for left modifiers. */ + modLeftPx: number; + /** Start `X` for right modifiers. */ + modRightPx: number; + /** Extra space on left of note. */ + leftDisplacedHeadPx: number; + glyphPx: number; + /** Extra space on right of note. */ + rightDisplacedHeadPx: number; +} +export interface NoteDuration { + duration: string; + dots: number; + type: string; +} +export interface ParsedNote { + duration: string; + type: string; + customTypes: string[]; + dots: number; + ticks: number; +} +export interface NoteStruct { + /** Array of pitches, e.g: `['c/4', 'e/4', 'g/4']` */ + keys?: string[]; + /** The time length (e.g., `q` for quarter, `h` for half, `8` for eighth etc.). */ + duration: string; + line?: number; + /** The number of dots, which affects the duration. */ + dots?: number; + /** The note type (e.g., `r` for rest, `s` for slash notes, etc.). */ + type?: string; + align_center?: boolean; + duration_override?: Fraction; +} +/** + * Note implements an abstract interface for notes and chords that + * are rendered on a stave. Notes have some common properties: All of them + * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.) + * + * Some notes have stems, heads, dots, etc. Most notational elements that + * surround a note are called *modifiers*, and every note has an associated + * array of them. All notes also have a rendering context and belong to a stave. + */ +export declare abstract class Note extends Tickable { + static get CATEGORY(): string; + /** Debug helper. Displays various note metrics for the given note. */ + static plotMetrics(ctx: RenderContext, note: Tickable, yPos: number): void; + protected static parseDuration(durationString?: string): NoteDuration | undefined; + protected static parseNoteStruct(noteStruct: NoteStruct): ParsedNote | undefined; + glyphProps: GlyphProps; + keys: string[]; + keyProps: KeyProps[]; + protected stave?: Stave; + render_options: { + draw_stem_through_stave?: boolean; + draw?: boolean; + draw_dots?: boolean; + draw_stem?: boolean; + y_shift: number; + extend_left?: number; + extend_right?: number; + glyph_font_scale: number; + annotation_spacing: number; + glyph_font_size?: number; + scale: number; + font: string; + stroke_px: number; + }; + protected duration: string; + protected leftDisplacedHeadPx: number; + protected rightDisplacedHeadPx: number; + protected noteType: string; + protected customGlyphs: GlyphProps[]; + protected ys: number[]; + protected customTypes: string[]; + protected playNote?: Note; + protected beam?: Beam; + /** + * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for + * positioning and layout. + * + * @param noteStruct To create a new note you need to provide a `noteStruct`. + */ + constructor(noteStruct: NoteStruct); + /** + * Get the play note, which is arbitrary data that can be used by an + * audio player. + */ + getPlayNote(): Note | undefined; + /** + * Set the play note, which is arbitrary data that can be used by an + * audio player. + */ + setPlayNote(note: Note): this; + /** + * @returns true if this note is a type of rest. + * + * Rests don't have pitches, but take up space in the score. + * Subclasses should override this default implementation. + */ + isRest(): boolean; + /** Add stroke. */ + addStroke(index: number, stroke: Stroke): this; + /** Get the target stave. */ + getStave(): Stave | undefined; + /** Check and get the target stave. */ + checkStave(): Stave; + /** Set the target stave. */ + setStave(stave: Stave): this; + /** Get spacing to the left of the notes. */ + getLeftDisplacedHeadPx(): number; + /** Get spacing to the right of the notes. */ + getRightDisplacedHeadPx(): number; + /** Set spacing to the left of the notes. */ + setLeftDisplacedHeadPx(x: number): this; + /** Set spacing to the right of the notes. */ + setRightDisplacedHeadPx(x: number): this; + /** True if this note has no duration (e.g., bar notes, spacers, etc.). */ + shouldIgnoreTicks(): boolean; + /** Get the stave line number for the note. */ + getLineNumber(isTopNote?: boolean): number; + /** Get the stave line number for rest. */ + getLineForRest(): number; + /** + * @deprecated Use `getGlyphProps()` instead. + */ + getGlyph(): any; + /** Get the glyph associated with this note. */ + getGlyphProps(): GlyphProps; + /** Get the glyph width. */ + getGlyphWidth(): number; + /** + * Set Y positions for this note. Each Y value is associated with + * an individual pitch/key within the note/chord. + */ + setYs(ys: number[]): this; + /** + * Get Y positions for this note. Each Y value is associated with + * an individual pitch/key within the note/chord. + */ + getYs(): number[]; + /** + * Get the Y position of the space above the stave onto which text can + * be rendered. + */ + getYForTopText(text_line: number): number; + /** Return the voice that this note belongs in. */ + getVoice(): Voice; + /** Attach this note to `voice`. */ + setVoice(voice: Voice): this; + /** Get the `TickContext` for this note. */ + getTickContext(): TickContext; + /** Set the `TickContext` for this note. */ + setTickContext(tc: TickContext): this; + /** Accessor to duration. */ + getDuration(): string; + /** Accessor to isDotted. */ + isDotted(): boolean; + /** Accessor to hasStem. */ + hasStem(): boolean; + /** Accessor to note type. */ + getNoteType(): string; + /** Get the beam. */ + getBeam(): Beam | undefined; + /** Check and get the beam. */ + checkBeam(): Beam; + /** Check it has a beam. */ + hasBeam(): boolean; + /** Set the beam. */ + setBeam(beam: Beam): this; + /** + * Attach a modifier to this note. + * @param modifier the Modifier to add. + * @param index of the key to modify. + * @returns this + */ + addModifier(modifier: Modifier, index?: number): this; + /** Get all modifiers of a specific type in `this.modifiers`. */ + getModifiersByType(type: string): Modifier[]; + /** Get the coordinates for where modifiers begin. */ + getModifierStartXY(position?: number, index?: number, options?: any): { + x: number; + y: number; + }; + getRightParenthesisPx(index: number): number; + getLeftParenthesisPx(index: number): number; + getFirstDotPx(): number; + /** Get the metrics for this note. */ + getMetrics(): NoteMetrics; + /** + * Get the absolute `X` position of this note's tick context. This + * excludes x_shift, so you'll need to factor it in if you're + * looking for the post-formatted x-position. + */ + getAbsoluteX(): number; + /** Get point for notes. */ + static getPoint(size?: string): number; + /** Get the direction of the stem. */ + getStemDirection(): number; + /** Get the top and bottom `y` values of the stem. */ + getStemExtents(): Record; + /** Get the `x` coordinate to the right of the note. */ + getTieRightX(): number; + /** Get the `x` coordinate to the left of the note. */ + getTieLeftX(): number; + getKeys(): string[]; + getKeyProps(): KeyProps[]; +} diff --git a/build/types/src/notehead.d.ts b/build/types/src/notehead.d.ts new file mode 100644 index 0000000000..ca85202677 --- /dev/null +++ b/build/types/src/notehead.d.ts @@ -0,0 +1,71 @@ +import { BoundingBox } from './boundingbox'; +import { ElementStyle } from './element'; +import { Note, NoteStruct } from './note'; +import { Stave } from './stave'; +export interface NoteHeadMetrics { + minPadding?: number; + displacedShiftX?: number; +} +export interface NoteHeadStruct extends NoteStruct { + line?: number; + glyph_font_scale?: number; + slashed?: boolean; + style?: ElementStyle; + stem_down_x_offset?: number; + stem_up_x_offset?: number; + custom_glyph_code?: string; + x_shift?: number; + stem_direction?: number; + displaced?: boolean; + note_type?: string; + x?: number; + y?: number; + index?: number; +} +/** + * `NoteHeads` are typically not manipulated + * directly, but used internally in `StaveNote`. + * + * See `tests/notehead_tests.ts` for usage examples. + */ +export declare class NoteHead extends Note { + /** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */ + static DEBUG: boolean; + static get CATEGORY(): string; + glyph_code: string; + protected custom_glyph: boolean; + protected stem_up_x_offset: number; + protected stem_down_x_offset: number; + protected displaced: boolean; + protected stem_direction: number; + protected x: number; + protected y: number; + protected line: number; + protected index?: number; + protected slashed: boolean; + constructor(noteStruct: NoteHeadStruct); + /** Get the width of the notehead. */ + getWidth(): number; + /** Determine if the notehead is displaced. */ + isDisplaced(): boolean; + /** Set the X coordinate. */ + setX(x: number): this; + /** Get the Y coordinate. */ + getY(): number; + /** Set the Y coordinate. */ + setY(y: number): this; + /** Get the stave line the notehead is placed on. */ + getLine(): number; + /** Set the stave line the notehead is placed on. */ + setLine(line: number): this; + /** Get the canvas `x` coordinate position of the notehead. */ + getAbsoluteX(): number; + /** Get the `BoundingBox` for the `NoteHead`. */ + getBoundingBox(): BoundingBox; + /** Set notehead to a provided `stave`. */ + setStave(stave: Stave): this; + /** Pre-render formatting. */ + preFormat(): this; + /** Draw the notehead. */ + draw(): void; +} diff --git a/build/types/src/notesubgroup.d.ts b/build/types/src/notesubgroup.d.ts new file mode 100644 index 0000000000..4bc695ed2f --- /dev/null +++ b/build/types/src/notesubgroup.d.ts @@ -0,0 +1,18 @@ +import { Formatter } from './formatter'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { Note } from './note'; +import { Voice } from './voice'; +export declare class NoteSubGroup extends Modifier { + static get CATEGORY(): string; + static format(groups: NoteSubGroup[], state: ModifierContextState): boolean; + protected subNotes: Note[]; + protected preFormatted: boolean; + protected formatter: Formatter; + protected voice: Voice; + constructor(subNotes: Note[]); + preFormat(): void; + setWidth(width: number): this; + getWidth(): number; + draw(): void; +} diff --git a/build/types/src/ornament.d.ts b/build/types/src/ornament.d.ts new file mode 100644 index 0000000000..cf7d7b3301 --- /dev/null +++ b/build/types/src/ornament.d.ts @@ -0,0 +1,83 @@ +import { Glyph } from './glyph'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +export interface OrnamentMetrics { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; +} +/** + * Ornament implements ornaments as modifiers that can be + * attached to notes. The complete list of ornaments is available in + * `tables.ts` under `Vex.Flow.ornamentCodes`. + * + * See `tests/ornament_tests.ts` for usage examples. + */ +export declare class Ornament extends Modifier { + /** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */ + static DEBUG: boolean; + /** Ornaments category string. */ + static get CATEGORY(): string; + static get minPadding(): number; + protected ornament: { + code: string; + }; + protected stemUpYOffset: number; + protected ornamentAlignWithNoteHead: string[] | boolean; + protected type: string; + protected delayed: boolean; + protected reportedWidth: number; + protected adjustForStemDirection: boolean; + render_options: { + accidentalUpperPadding: number; + accidentalLowerPadding: number; + font_scale: number; + }; + protected glyph: Glyph; + protected accidentalUpper?: Glyph; + protected accidentalLower?: Glyph; + protected delayXShift?: number; + /** Arrange ornaments inside `ModifierContext` */ + static format(ornaments: Ornament[], state: ModifierContextState): boolean; + /** + * ornamentNoteTransition means the jazz ornament represents an effect from one note to another, + * these are generally on the top of the staff. + */ + static get ornamentNoteTransition(): string[]; + /** + * ornamentAttack indicates something that happens in the attach, placed before the note and + * any accidentals + */ + static get ornamentAttack(): string[]; + /** + * The ornament is aligned based on the note head, but without regard to whether the + * stem goes up or down. + */ + static get ornamentAlignWithNoteHead(): string[]; + /** + * An ornament that happens on the release of the note, generally placed after the + * note and overlapping the next beat/measure.. + */ + static get ornamentRelease(): string[]; + /** ornamentArticulation goes above/below the note based on space availablity */ + static get ornamentArticulation(): string[]; + /** + * Legacy ornaments have hard-coded metrics. If additional ornament types are + * added, get their metrics here. + */ + getMetrics(): OrnamentMetrics; + /** + * Create a new ornament of type `type`, which is an entry in + * `Vex.Flow.ornamentCodes` in `tables.ts`. + */ + constructor(type: string); + /** Set whether the ornament is to be delayed. */ + setDelayed(delayed: boolean): this; + /** Set the upper accidental for the ornament. */ + setUpperAccidental(accid: string): this; + /** Set the lower accidental for the ornament. */ + setLowerAccidental(accid: string): this; + /** Render ornament in position next to note. */ + draw(): void; +} diff --git a/build/types/src/parenthesis.d.ts b/build/types/src/parenthesis.d.ts new file mode 100644 index 0000000000..5189a3edda --- /dev/null +++ b/build/types/src/parenthesis.d.ts @@ -0,0 +1,22 @@ +import { Modifier, ModifierPosition } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { Note } from './note'; +/** Parenthesis implements parenthesis modifiers for notes. */ +export declare class Parenthesis extends Modifier { + static get CATEGORY(): string; + protected point: number; + /** Add parentheses to the notes. */ + static buildAndAttach(notes: Note[]): void; + /** Arrange parentheses inside a ModifierContext. */ + static format(parentheses: Parenthesis[], state: ModifierContextState): boolean; + /** + * Constructor + * + * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT + */ + constructor(position: ModifierPosition); + /** Set the associated note. */ + setNote(note: Note): this; + /** Render the parenthesis. */ + draw(): void; +} diff --git a/build/types/src/parser.d.ts b/build/types/src/parser.d.ts new file mode 100644 index 0000000000..bdf609f878 --- /dev/null +++ b/build/types/src/parser.d.ts @@ -0,0 +1,45 @@ +export type Match = string | Match[] | null; +export type RuleFunction = () => Rule; +export type TriggerFunction = (state?: { + matches: Match[]; +}) => void; +export interface Rule { + token?: string; + noSpace?: boolean; + expect?: RuleFunction[]; + zeroOrMore?: boolean; + oneOrMore?: boolean; + maybe?: boolean; + or?: boolean; + run?: TriggerFunction; +} +export interface Result { + success: boolean; + pos?: number; + incrementPos?: number; + matchedString?: string; + matches?: Match[]; + numMatches?: number; + results?: GroupedResults; + errorPos?: number; +} +export type GroupedResults = (Result | Result[])[]; +export interface Grammar { + begin(): RuleFunction; +} +export declare class Parser { + static DEBUG: boolean; + protected grammar: Grammar; + protected line: string; + protected pos: number; + protected errorPos: number; + constructor(grammar: Grammar); + parse(line: string): Result; + matchFail(returnPos: number): void; + matchSuccess(): void; + matchToken(token: string, noSpace?: boolean): Result; + expectOne(rule: Rule, maybe?: boolean): Result; + expectOneOrMore(rule: Rule, maybe?: boolean): Result; + expectZeroOrMore(rule: Rule): Result; + expect(ruleFunc: RuleFunction): Result; +} diff --git a/build/types/src/pedalmarking.d.ts b/build/types/src/pedalmarking.d.ts new file mode 100644 index 0000000000..a9f60173f3 --- /dev/null +++ b/build/types/src/pedalmarking.d.ts @@ -0,0 +1,67 @@ +import { Element } from './element'; +import { FontInfo } from './font'; +import { StaveNote } from './stavenote'; +/** + * PedalMarking implements different types of pedal markings. These notation + * elements indicate to the performer when to depress and release the a pedal. + * + * In order to create "Sostenuto", and "una corda" markings, you must set + * custom text for the release/depress pedal markings. + */ +export declare class PedalMarking extends Element { + /** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */ + static DEBUG: boolean; + static get CATEGORY(): string; + static TEXT_FONT: Required; + protected line: number; + protected type: number; + protected custom_depress_text: string; + protected custom_release_text: string; + render_options: { + color: string; + bracket_height: number; + text_margin_right: number; + bracket_line_width: number; + }; + protected notes: StaveNote[]; + /** Glyph data */ + static readonly GLYPHS: Record; + /** Pedal type as number. */ + static readonly type: { + TEXT: number; + BRACKET: number; + MIXED: number; + }; + /** Pedal type as string. */ + static readonly typeString: Record; + /** + * Create a sustain pedal marking. Returns the defaults PedalMarking. + * Which uses the traditional "Ped" and "*"" markings. + */ + static createSustain(notes: StaveNote[]): PedalMarking; + /** Create a sostenuto pedal marking */ + static createSostenuto(notes: StaveNote[]): PedalMarking; + /** Create an una corda pedal marking */ + static createUnaCorda(notes: StaveNote[]): PedalMarking; + constructor(notes: StaveNote[]); + /** Set pedal type. */ + setType(type: string | number): this; + /** + * Set custom text for the `depress`/`release` pedal markings. No text is + * set if the parameter is falsy. + */ + setCustomText(depress: string, release?: string): this; + /** Set the staff line to render the markings on. */ + setLine(line: number): this; + /** Draw the bracket based pedal markings. */ + drawBracketed(): void; + /** + * Draw the text based pedal markings. This defaults to the traditional + * "Ped" and "*"" symbols if no custom text has been provided. + */ + drawText(): void; + /** Render the pedal marking in position on the rendering context. */ + draw(): void; +} diff --git a/build/types/src/registry.d.ts b/build/types/src/registry.d.ts new file mode 100644 index 0000000000..6959b79f28 --- /dev/null +++ b/build/types/src/registry.d.ts @@ -0,0 +1,40 @@ +import { Element } from './element'; +declare class Index { + [key: string]: { + [key: string]: { + [key: string]: Element; + }; + }; + constructor(); +} +export interface RegistryUpdate { + id: string; + name: string; + value: string | undefined; + oldValue: string | undefined; +} +export declare class Registry { + private static defaultRegistry?; + static getDefaultRegistry(): Registry | undefined; + static enableDefaultRegistry(registry: Registry): void; + static disableDefaultRegistry(): void; + protected index: Index; + constructor(); + clear(): this; + setIndexValue(name: string, value: string, id: string, elem: Element): void; + updateIndex({ id, name, value, oldValue }: RegistryUpdate): void; + /** + * Register element `elem` with this registry. + * This adds the element to its index and watches it for attribute changes. + * @param elem + * @param id + * @returns this + */ + register(elem: Element, id?: string): this; + getElementById(id: string): Element | undefined; + getElementsByAttribute(attribute: string, value: string): Element[]; + getElementsByType(type: string): Element[]; + getElementsByClass(className: string): Element[]; + onUpdate(info: RegistryUpdate): this; +} +export {}; diff --git a/build/types/src/rendercontext.d.ts b/build/types/src/rendercontext.d.ts new file mode 100644 index 0000000000..e4bb0882ae --- /dev/null +++ b/build/types/src/rendercontext.d.ts @@ -0,0 +1,64 @@ +import { FontInfo } from './font'; +export interface TextMeasure { + x: number; + y: number; + width: number; + height: number; +} +export interface GroupAttributes { + pointerBBox: boolean; +} +export declare abstract class RenderContext { + static get CATEGORY(): string; + abstract clear(): void; + abstract setFillStyle(style: string): this; + abstract setBackgroundFillStyle(style: string): this; + abstract setStrokeStyle(style: string): this; + abstract setShadowColor(color: string): this; + abstract setShadowBlur(blur: number): this; + abstract setLineWidth(width: number): this; + abstract setLineCap(capType: CanvasLineCap): this; + abstract setLineDash(dashPattern: number[]): this; + abstract scale(x: number, y: number): this; + abstract rect(x: number, y: number, width: number, height: number): this; + abstract resize(width: number, height: number): this; + abstract fillRect(x: number, y: number, width: number, height: number): this; + abstract clearRect(x: number, y: number, width: number, height: number): this; + abstract beginPath(): this; + abstract moveTo(x: number, y: number): this; + abstract lineTo(x: number, y: number): this; + abstract bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this; + abstract quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this; + abstract arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise: boolean): this; + abstract fill(attributes?: any): this; + abstract stroke(): this; + abstract closePath(): this; + abstract fillText(text: string, x: number, y: number): this; + abstract save(): this; + abstract restore(): this; + abstract openGroup(cls?: string, id?: string, attrs?: GroupAttributes): any; + abstract closeGroup(): void; + abstract add(child: any): void; + abstract measureText(text: string): TextMeasure; + abstract set fillStyle(style: string | CanvasGradient | CanvasPattern); + abstract get fillStyle(): string | CanvasGradient | CanvasPattern; + abstract set strokeStyle(style: string | CanvasGradient | CanvasPattern); + abstract get strokeStyle(): string | CanvasGradient | CanvasPattern; + abstract setFont(f?: string | FontInfo, size?: string | number, weight?: string | number, style?: string): this; + abstract getFont(): string; + set font(f: string); + get font(): string; + /** + * This is kept for backwards compatibility with 3.0.9. + * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand. + */ + setRawFont(f: string): this; +} +/** + * Draw a tiny dot marker on the specified context. A great debugging aid. + * @param ctx context + * @param x dot x coordinate + * @param y dot y coordinate + * @param color + */ +export declare function drawDot(ctx: RenderContext, x: number, y: number, color?: string): void; diff --git a/build/types/src/renderer.d.ts b/build/types/src/renderer.d.ts new file mode 100644 index 0000000000..de85d12e99 --- /dev/null +++ b/build/types/src/renderer.d.ts @@ -0,0 +1,35 @@ +import { RenderContext } from './rendercontext'; +export type ContextBuilder = typeof Renderer.getSVGContext | typeof Renderer.getCanvasContext; +export declare enum RendererBackends { + CANVAS = 1, + SVG = 2 +} +export declare enum RendererLineEndType { + NONE = 1, + UP = 2, + DOWN = 3 +} +/** + * Support Canvas & SVG rendering contexts. + */ +export declare class Renderer { + static Backends: typeof RendererBackends; + static LineEndType: typeof RendererLineEndType; + static lastContext?: RenderContext; + static buildContext(elementId: string | HTMLCanvasElement | HTMLDivElement, backend: number, width: number, height: number, background?: string): RenderContext; + static getCanvasContext(elementId: string, width: number, height: number, background?: string): RenderContext; + static getSVGContext(elementId: string, width: number, height: number, background?: string): RenderContext; + static drawDashedLine(context: RenderContext, fromX: number, fromY: number, toX: number, toY: number, dashPattern: number[]): void; + protected ctx: RenderContext; + /** + * @param canvasId can be: + * - a string element ID (of a canvas or div element) + * - a canvas element + * - a div element, which will contain the SVG output + * @param backend Renderer.Backends.CANVAS or Renderer.Backends.SVG + */ + constructor(context: RenderContext); + constructor(canvas: string | HTMLCanvasElement | HTMLDivElement, backend: number); + resize(width: number, height: number): this; + getContext(): RenderContext; +} diff --git a/build/types/src/repeatnote.d.ts b/build/types/src/repeatnote.d.ts new file mode 100644 index 0000000000..f3df63ab8c --- /dev/null +++ b/build/types/src/repeatnote.d.ts @@ -0,0 +1,6 @@ +import { GlyphNote, GlyphNoteOptions } from './glyphnote'; +import { NoteStruct } from './note'; +export declare class RepeatNote extends GlyphNote { + static get CATEGORY(): string; + constructor(type: string, noteStruct?: NoteStruct, options?: GlyphNoteOptions); +} diff --git a/build/types/src/stave.d.ts b/build/types/src/stave.d.ts new file mode 100644 index 0000000000..39a8b3232b --- /dev/null +++ b/build/types/src/stave.d.ts @@ -0,0 +1,198 @@ +import { BoundingBox, Bounds } from './boundingbox'; +import { Element, ElementStyle } from './element'; +import { FontInfo } from './font'; +import { BarlineType } from './stavebarline'; +import { StaveModifier } from './stavemodifier'; +import { StaveTempoOptions } from './stavetempo'; +export interface StaveLineConfig { + visible?: boolean; +} +export interface StaveOptions { + bottom_text_position?: number; + line_config?: StaveLineConfig[]; + space_below_staff_ln?: number; + space_above_staff_ln?: number; + vertical_bar_width?: number; + fill_style?: string; + left_bar?: boolean; + right_bar?: boolean; + spacing_between_lines_px?: number; + top_text_position?: number; + num_lines?: number; +} +export declare class Stave extends Element { + static get CATEGORY(): string; + static TEXT_FONT: Required; + readonly options: Required; + protected start_x: number; + protected clef: string; + protected endClef?: string; + protected x: number; + protected y: number; + protected width: number; + protected height: number; + protected formatted: boolean; + protected end_x: number; + protected measure: number; + protected bounds: Bounds; + protected readonly modifiers: StaveModifier[]; + protected defaultLedgerLineStyle: ElementStyle; + static get defaultPadding(): number; + static get rightPadding(): number; + constructor(x: number, y: number, width: number, options?: StaveOptions); + /** Set default style for ledger lines. */ + setDefaultLedgerLineStyle(style: ElementStyle): void; + /** Get default style for ledger lines. */ + getDefaultLedgerLineStyle(): ElementStyle; + space(spacing: number): number; + resetLines(): void; + setNoteStartX(x: number): this; + getNoteStartX(): number; + getNoteEndX(): number; + getTieStartX(): number; + getTieEndX(): number; + getX(): number; + getNumLines(): number; + setNumLines(n: number): this; + setY(y: number): this; + getY(): number; + getTopLineTopY(): number; + getBottomLineBottomY(): number; + setX(x: number): this; + setWidth(width: number): this; + getWidth(): number; + getStyle(): ElementStyle; + /** + * Set the measure number of this Stave. + */ + setMeasure(measure: number): this; + /** + * Return the measure number of this Stave. + */ + getMeasure(): number; + /** + * Gets the pixels to shift from the beginning of the stave + * following the modifier at the provided index + * @param {Number} index The index from which to determine the shift + * @return {Number} The amount of pixels shifted + */ + getModifierXShift(index?: number): number; + /** Coda & Segno Symbol functions */ + setRepetitionType(type: number, yShift?: number): this; + setVoltaType(type: number, number_t: string, y: number): this; + setSection(section: string, y: number, xOffset?: number, fontSize?: number, drawRect?: boolean): this; + setTempo(tempo: StaveTempoOptions, y: number): this; + setText(text: string, position: number, options?: { + shift_x?: number; + shift_y?: number; + justification?: number; + }): this; + getHeight(): number; + getSpacingBetweenLines(): number; + getBoundingBox(): BoundingBox; + getBottomY(): number; + getBottomLineY(): number; + /** @returns the y for the *center* of a staff line */ + getYForLine(line: number): number; + getLineForY(y: number): number; + getYForTopText(line?: number): number; + getYForBottomText(line?: number): number; + getYForNote(line: number): number; + getYForGlyphs(): number; + addModifier(modifier: StaveModifier, position?: number): this; + addEndModifier(modifier: StaveModifier): this; + setBegBarType(type: number | BarlineType): this; + setEndBarType(type: number | BarlineType): this; + /** + * treat the stave as if the clef is clefSpec, but don't display the clef + */ + setClefLines(clefSpec: string): this; + setClef(clefSpec: string, size?: string, annotation?: string, position?: number): this; + getClef(): string; + setEndClef(clefSpec: string, size?: string, annotation?: string): this; + getEndClef(): string | undefined; + setKeySignature(keySpec: string, cancelKeySpec?: string, position?: number): this; + setEndKeySignature(keySpec: string, cancelKeySpec?: string): this; + setTimeSignature(timeSpec: string, customPadding?: number, position?: number): this; + setEndTimeSignature(timeSpec: string, customPadding?: number): this; + /** + * Add a key signature to the stave. + * + * Example: + * `stave.addKeySignature('Db');` + * @param keySpec new key specification `[A-G][b|#]?` + * @param cancelKeySpec + * @param position + * @returns + */ + addKeySignature(keySpec: string, cancelKeySpec?: string, position?: number): this; + /** + * Add a clef to the stave. + * + * Example: + * + * stave.addClef('treble') + * @param clef clef (treble|bass|...) see {@link Clef.types} + * @param size + * @param annotation + * @param position + * @returns + */ + addClef(clef: string, size?: string, annotation?: string, position?: number): this; + addEndClef(clef: string, size?: string, annotation?: string): this; + /** + * Add a time signature to the stave + * + * Example: + * + * `stave.addTimeSignature('4/4');` + * @param timeSpec time signature specification `(C\||C|\d\/\d)` + * @param customPadding + * @param position + * @returns + */ + addTimeSignature(timeSpec: string, customPadding?: number, position?: number): this; + addEndTimeSignature(timeSpec: string, customPadding?: number): this; + addTrebleGlyph(): this; + /** + * @param position + * @param category + * @returns array of StaveModifiers that match the provided position and category. + */ + getModifiers(position?: number, category?: string): StaveModifier[]; + /** + * Use the modifier's `getCategory()` as a key for the `order` array. + * The retrieved value is used to sort modifiers from left to right (0 to to 3). + */ + sortByCategory(items: StaveModifier[], order: Record): void; + format(): void; + /** + * All drawing functions below need the context to be set. + */ + draw(): this; + getVerticalBarWidth(): number; + /** + * Get the current configuration for the Stave. + * @return {Array} An array of configuration objects. + */ + getConfigForLines(): StaveLineConfig[]; + /** + * Configure properties of the lines in the Stave + * @param line_number The index of the line to configure. + * @param line_config An configuration object for the specified line. + * @throws RuntimeError "StaveConfigError" When the specified line number is out of + * range of the number of lines specified in the constructor. + */ + setConfigForLine(line_number: number, line_config: StaveLineConfig): this; + /** + * Set the staff line configuration array for all of the lines at once. + * @param lines_configuration An array of line configuration objects. These objects + * are of the same format as the single one passed in to setLineConfiguration(). + * The caller can set null for any line config entry if it is desired that the default be used + * @throws RuntimeError "StaveConfigError" When the lines_configuration array does not have + * exactly the same number of elements as the num_lines configuration object set in + * the constructor. + */ + setConfigForLines(lines_configuration: StaveLineConfig[]): this; + static formatBegModifiers(staves: Stave[]): void; +} diff --git a/build/types/src/stavebarline.d.ts b/build/types/src/stavebarline.d.ts new file mode 100644 index 0000000000..67b51bb437 --- /dev/null +++ b/build/types/src/stavebarline.d.ts @@ -0,0 +1,28 @@ +import { Stave } from './stave'; +import { LayoutMetrics, StaveModifier } from './stavemodifier'; +export declare enum BarlineType { + SINGLE = 1, + DOUBLE = 2, + END = 3, + REPEAT_BEGIN = 4, + REPEAT_END = 5, + REPEAT_BOTH = 6, + NONE = 7 +} +export declare class Barline extends StaveModifier { + static get CATEGORY(): string; + protected widths: Record; + protected paddings: Record; + protected layoutMetricsMap: Record; + protected thickness: number; + protected type: BarlineType; + static get type(): typeof BarlineType; + static get typeString(): Record; + constructor(type: BarlineType | string); + getType(): number; + setType(type: string | number): this; + draw(stave: Stave): void; + drawVerticalBar(stave: Stave, x: number, double_bar?: boolean): void; + drawVerticalEndBar(stave: Stave, x: number): void; + drawRepeatBar(stave: Stave, x: number, begin: boolean): void; +} diff --git a/build/types/src/staveconnector.d.ts b/build/types/src/staveconnector.d.ts new file mode 100644 index 0000000000..883549a35e --- /dev/null +++ b/build/types/src/staveconnector.d.ts @@ -0,0 +1,65 @@ +import { Element } from './element'; +import { FontInfo } from './font'; +import { Stave } from './stave'; +/** + * see {@link StaveConnector.type} & {@link StaveConnector.typeString} + */ +export type StaveConnectorType = 'singleRight' | 'singleLeft' | 'single' | 'double' | 'brace' | 'bracket' | 'boldDoubleLeft' | 'boldDoubleRight' | 'thinDouble' | 'none' | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; +/** StaveConnector implements the connector lines between staves of a system. */ +export declare class StaveConnector extends Element { + static get CATEGORY(): string; + static TEXT_FONT: Required; + /** + * SINGLE_LEFT and SINGLE are the same value for compatibility + * with older versions of vexflow which didn't have right sided + * stave connectors. + */ + static readonly type: Record>; + /** + * Connector type: + * * "singleRight" + * * "singleLeft" + * * "single" + * * "double" + * * "brace" + * * "bracket" + * * "boldDoubleLeft" + * * "boldDoubleRight" + * * "thinDouble" + * * "none" + */ + static readonly typeString: Record, Exclude>; + protected width: number; + protected texts: { + content: string; + options: { + shift_x: number; + shift_y: number; + }; + }[]; + protected type: typeof StaveConnector['type'][keyof typeof StaveConnector['type']]; + readonly top_stave: Stave; + readonly bottom_stave: Stave; + readonly thickness: number; + protected x_shift: number; + constructor(top_stave: Stave, bottom_stave: Stave); + /** + * Set type. + * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString} + */ + setType(type: StaveConnectorType): this; + /** + * Get type. + * @returns number {@link StaveConnector.type} + */ + getType(): number; + /** Set optional associated Text. */ + setText(text: string, options?: { + shift_x?: number; + shift_y?: number; + }): this; + setXShift(x_shift: number): this; + getXShift(): number; + /** Render connector and associated text. */ + draw(): void; +} diff --git a/build/types/src/stavehairpin.d.ts b/build/types/src/stavehairpin.d.ts new file mode 100644 index 0000000000..ef02eb2563 --- /dev/null +++ b/build/types/src/stavehairpin.d.ts @@ -0,0 +1,56 @@ +import { Element } from './element'; +import { Note } from './note'; +import { RenderContext } from './rendercontext'; +export interface StaveHairpinRenderOptions { + right_shift_ticks?: number; + left_shift_ticks?: number; + left_shift_px: number; + right_shift_px: number; + height: number; + y_shift: number; +} +export declare class StaveHairpin extends Element { + static get CATEGORY(): string; + protected hairpin: number; + protected position: number; + render_options: StaveHairpinRenderOptions; + protected notes: Record; + protected first_note?: Note; + protected last_note?: Note; + static readonly type: { + CRESC: number; + DECRESC: number; + }; + static FormatByTicksAndDraw(ctx: RenderContext, formatter: { + pixelsPerTick: number; + }, notes: Record, type: number, position: number, options: StaveHairpinRenderOptions): void; + /** + * Create a new hairpin from the specified notes. + * + * @param {!Object} notes The notes to tie up. + * Notes is a struct that has: + * + * { + * first_note: Note, + * last_note: Note, + * } + * @param {!Object} type The type of hairpin + */ + constructor(notes: Record, type: number); + setPosition(position: number): this; + setRenderOptions(options: StaveHairpinRenderOptions): this; + /** + * Set the notes to attach this hairpin to. + * + * @param {!Object} notes The start and end notes. + */ + setNotes(notes: Record): this; + renderHairpin(params: { + first_x: number; + last_x: number; + first_y: number; + last_y: number; + staff_height: number; + }): void; + draw(): void; +} diff --git a/build/types/src/staveline.d.ts b/build/types/src/staveline.d.ts new file mode 100644 index 0000000000..16f0679234 --- /dev/null +++ b/build/types/src/staveline.d.ts @@ -0,0 +1,54 @@ +import { Element } from './element'; +import { FontInfo } from './font'; +import { RenderContext } from './rendercontext'; +import { StaveNote } from './stavenote'; +import { TextJustification } from './textnote'; +export interface StaveLineNotes { + first_note: StaveNote; + first_indices: number[]; + last_note: StaveNote; + last_indices: number[]; +} +export declare class StaveLine extends Element { + static get CATEGORY(): string; + /** Default text font. */ + static TEXT_FONT: Required; + static readonly TextVerticalPosition: { + TOP: number; + BOTTOM: number; + }; + static readonly TextJustification: typeof TextJustification; + render_options: { + padding_left: number; + padding_right: number; + line_width: number; + line_dash?: number[]; + rounded_end: boolean; + color?: string; + draw_start_arrow: boolean; + draw_end_arrow: boolean; + arrowhead_length: number; + arrowhead_angle: number; + text_position_vertical: number; + text_justification: number; + }; + protected text: string; + protected notes: StaveLineNotes; + protected first_note: StaveNote; + protected first_indices: number[]; + protected last_note: StaveNote; + protected last_indices: number[]; + constructor(notes: StaveLineNotes); + setText(text: string): this; + setNotes(notes: StaveLineNotes): this; + applyLineStyle(): void; + applyFontStyle(): void; + protected drawArrowLine(ctx: RenderContext, pt1: { + x: number; + y: number; + }, pt2: { + x: number; + y: number; + }): void; + draw(): this; +} diff --git a/build/types/src/stavemodifier.d.ts b/build/types/src/stavemodifier.d.ts new file mode 100644 index 0000000000..e8b105f4b4 --- /dev/null +++ b/build/types/src/stavemodifier.d.ts @@ -0,0 +1,53 @@ +import { Element } from './element'; +import { Glyph } from './glyph'; +import { Stave } from './stave'; +export interface LayoutMetrics { + xMin: number; + xMax: number; + paddingLeft: number; + paddingRight: number; +} +export declare enum StaveModifierPosition { + CENTER = 0, + LEFT = 1, + RIGHT = 2, + ABOVE = 3, + BELOW = 4, + BEGIN = 5, + END = 6 +} +export declare class StaveModifier extends Element { + static get CATEGORY(): string; + static get Position(): typeof StaveModifierPosition; + protected width: number; + protected x: number; + protected padding: number; + protected position: StaveModifierPosition; + protected stave?: Stave; + protected layoutMetrics?: LayoutMetrics; + constructor(); + getPosition(): number; + setPosition(position: number): this; + getStave(): Stave | undefined; + checkStave(): Stave; + setStave(stave: Stave): this; + getWidth(): number; + setWidth(width: number): this; + getX(): number; + setX(x: number): this; + /** + * Runs setYShift() for the Glyph object so that it matches the position of line for + * the Stave provided. A `customShift` can also be given (measured in the same units + * as `setYShift` not in lines) and this will be added after all other positions are + * calculated from the Stave. + * + * Note that this routine only sets the yShift; it does not actually "place" (meaning + * draw) the Glyph on the Stave. Call .draw() afterwards to do that. + */ + placeGlyphOnLine(glyph: Glyph, stave: Stave, line?: number, customShift?: number): void; + getPadding(index: number): number; + setPadding(padding: number): this; + setLayoutMetrics(layoutMetrics: LayoutMetrics): this; + getLayoutMetrics(): LayoutMetrics | undefined; + draw(...args: any[]): void; +} diff --git a/build/types/src/stavenote.d.ts b/build/types/src/stavenote.d.ts new file mode 100644 index 0000000000..c01e6e66d8 --- /dev/null +++ b/build/types/src/stavenote.d.ts @@ -0,0 +1,154 @@ +import { Beam } from './beam'; +import { BoundingBox } from './boundingbox'; +import { ElementStyle } from './element'; +import { ModifierContextState } from './modifiercontext'; +import { Note, NoteStruct } from './note'; +import { NoteHead } from './notehead'; +import { Stave } from './stave'; +import { StemOptions } from './stem'; +import { StemmableNote } from './stemmablenote'; +export interface StaveNoteHeadBounds { + y_top: number; + y_bottom: number; + displaced_x?: number; + non_displaced_x?: number; + highest_line: number; + lowest_line: number; + highest_displaced_line?: number; + lowest_displaced_line?: number; + highest_non_displaced_line: number; + lowest_non_displaced_line: number; +} +export interface StaveNoteFormatSettings { + line: number; + maxLine: number; + minLine: number; + isrest: boolean; + stemDirection?: number; + stemMax: number; + stemMin: number; + voice_shift: number; + is_displaced: boolean; + note: StaveNote; +} +export interface StaveNoteStruct extends NoteStruct { + /** `Stem.UP` or `Stem.DOWN`. */ + stem_direction?: number; + auto_stem?: boolean; + stem_down_x_offset?: number; + stem_up_x_offset?: number; + stroke_px?: number; + glyph_font_scale?: number; + octave_shift?: number; + clef?: string; +} +export declare class StaveNote extends StemmableNote { + static DEBUG: boolean; + static get CATEGORY(): string; + /** + * @deprecated Use Stem.UP. + */ + static get STEM_UP(): number; + /** + * @deprecated Use Stem.DOWN. + */ + static get STEM_DOWN(): number; + static get LEDGER_LINE_OFFSET(): number; + static get minNoteheadPadding(): number; + /** Format notes inside a ModifierContext. */ + static format(notes: StaveNote[], state: ModifierContextState): boolean; + static postFormat(notes: Note[]): boolean; + minLine: number; + maxLine: number; + protected readonly clef: string; + protected readonly octave_shift?: number; + protected displaced: boolean; + protected dot_shiftY: number; + protected use_default_head_x: boolean; + protected ledgerLineStyle: ElementStyle; + private _noteHeads; + private sortedKeyProps; + constructor(noteStruct: StaveNoteStruct); + reset(): this; + setBeam(beam: Beam): this; + buildStem(): this; + buildNoteHeads(): NoteHead[]; + autoStem(): void; + calculateOptimalStemDirection(): number; + calculateKeyProps(): void; + getBoundingBox(): BoundingBox; + getLineNumber(isTopNote?: boolean): number; + /** + * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score. + */ + isRest(): boolean; + isChord(): boolean; + hasStem(): boolean; + hasFlag(): boolean; + getStemX(): number; + getYForTopText(textLine: number): number; + getYForBottomText(textLine: number): number; + setStave(stave: Stave): this; + isDisplaced(): boolean; + setNoteDisplaced(displaced: boolean): this; + getTieRightX(): number; + getTieLeftX(): number; + getLineForRest(): number; + getModifierStartXY(position: number, index: number, options?: { + forceFlagRight?: boolean; + }): { + x: number; + y: number; + }; + setStyle(style: ElementStyle): this; + setStemStyle(style: ElementStyle): this; + getStemStyle(): ElementStyle | undefined; + setLedgerLineStyle(style: ElementStyle): void; + getLedgerLineStyle(): ElementStyle; + setFlagStyle(style: ElementStyle): void; + getFlagStyle(): ElementStyle | undefined; + setKeyStyle(index: number, style: ElementStyle): this; + setKeyLine(index: number, line: number): this; + getKeyLine(index: number): number; + getVoiceShiftWidth(): number; + calcNoteDisplacements(): void; + preFormat(): void; + /** + * @typedef {Object} noteHeadBounds + * @property {number} y_top the highest notehead bound + * @property {number} y_bottom the lowest notehead bound + * @property {number|Null} displaced_x the starting x for displaced noteheads + * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads + * @property {number} highest_line the highest notehead line in traditional music line + * numbering (bottom line = 1, top line = 5) + * @property {number} lowest_line the lowest notehead line + * @property {number|false} highest_displaced_line the highest staff line number + * for a displaced notehead + * @property {number|false} lowest_displaced_line + * @property {number} highest_non_displaced_line + * @property {number} lowest_non_displaced_line + */ + /** + * Get the staff line and y value for the highest & lowest noteheads + * @returns {noteHeadBounds} + */ + getNoteHeadBounds(): StaveNoteHeadBounds; + getNoteHeadBeginX(): number; + getNoteHeadEndX(): number; + get noteHeads(): NoteHead[]; + /** @deprecated use StaveNote.noteHeads instead. */ + get note_heads(): NoteHead[]; + drawLedgerLines(): void; + drawModifiers(noteheadParam: NoteHead): void; + shouldDrawFlag(): boolean; + drawFlag(): void; + drawNoteHeads(): void; + drawStem(stemOptions?: StemOptions): void; + /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */ + getStaveNoteScale(): number; + /** + * Override stemmablenote stem extension to adjust for distance from middle line. + */ + getStemExtension(): number; + draw(): void; +} diff --git a/build/types/src/staverepetition.d.ts b/build/types/src/staverepetition.d.ts new file mode 100644 index 0000000000..afa3bf95c0 --- /dev/null +++ b/build/types/src/staverepetition.d.ts @@ -0,0 +1,32 @@ +import { FontInfo } from './font'; +import { Stave } from './stave'; +import { StaveModifier } from './stavemodifier'; +export declare class Repetition extends StaveModifier { + static get CATEGORY(): string; + static TEXT_FONT: Required; + static readonly type: { + NONE: number; + CODA_LEFT: number; + CODA_RIGHT: number; + SEGNO_LEFT: number; + SEGNO_RIGHT: number; + DC: number; + DC_AL_CODA: number; + DC_AL_FINE: number; + DS: number; + DS_AL_CODA: number; + DS_AL_FINE: number; + FINE: number; + TO_CODA: number; + }; + protected symbol_type: number; + protected x_shift: number; + protected y_shift: number; + constructor(type: number, x: number, y_shift: number); + setShiftX(x: number): this; + setShiftY(y: number): this; + draw(stave: Stave, x: number): this; + drawCodaFixed(stave: Stave, x: number): this; + drawSignoFixed(stave: Stave, x: number): this; + drawSymbolText(stave: Stave, x: number, text: string, draw_coda: boolean): this; +} diff --git a/build/types/src/stavesection.d.ts b/build/types/src/stavesection.d.ts new file mode 100644 index 0000000000..b918b6e764 --- /dev/null +++ b/build/types/src/stavesection.d.ts @@ -0,0 +1,16 @@ +import { FontInfo } from './font'; +import { Stave } from './stave'; +import { StaveModifier } from './stavemodifier'; +export declare class StaveSection extends StaveModifier { + static get CATEGORY(): string; + static TEXT_FONT: Required; + protected section: string; + protected shift_x: number; + protected shift_y: number; + protected drawRect: boolean; + constructor(section: string, x: number, shift_y: number, drawRect?: boolean); + setStaveSection(section: string): this; + setShiftX(x: number): this; + setShiftY(y: number): this; + draw(stave: Stave, shift_x: number): this; +} diff --git a/build/types/src/stavetempo.d.ts b/build/types/src/stavetempo.d.ts new file mode 100644 index 0000000000..6fe3003fd7 --- /dev/null +++ b/build/types/src/stavetempo.d.ts @@ -0,0 +1,25 @@ +import { FontInfo } from './font'; +import { Stave } from './stave'; +import { StaveModifier } from './stavemodifier'; +export interface StaveTempoOptions { + bpm?: number; + duration?: string; + dots?: number; + name?: string; +} +export declare class StaveTempo extends StaveModifier { + static get CATEGORY(): string; + static TEXT_FONT: Required; + protected tempo: StaveTempoOptions; + protected shift_x: number; + protected shift_y: number; + /** Font size for note. */ + render_options: { + glyph_font_scale: number; + }; + constructor(tempo: StaveTempoOptions, x: number, shift_y: number); + setTempo(tempo: StaveTempoOptions): this; + setShiftX(x: number): this; + setShiftY(y: number): this; + draw(stave: Stave, shift_x: number): this; +} diff --git a/build/types/src/stavetext.d.ts b/build/types/src/stavetext.d.ts new file mode 100644 index 0000000000..23a01dd860 --- /dev/null +++ b/build/types/src/stavetext.d.ts @@ -0,0 +1,25 @@ +import { FontInfo } from './font'; +import { Stave } from './stave'; +import { StaveModifier } from './stavemodifier'; +export declare class StaveText extends StaveModifier { + static get CATEGORY(): string; + static TEXT_FONT: Required; + protected options: { + shift_x: number; + shift_y: number; + justification: number; + }; + protected text: string; + protected shift_x?: number; + protected shift_y?: number; + constructor(text: string, position: number, options?: { + shift_x?: number; + shift_y?: number; + justification?: number; + }); + setStaveText(text: string): this; + setShiftX(x: number): this; + setShiftY(y: number): this; + setText(text: string): this; + draw(stave: Stave): this; +} diff --git a/build/types/src/stavetie.d.ts b/build/types/src/stavetie.d.ts new file mode 100644 index 0000000000..22a3a4541e --- /dev/null +++ b/build/types/src/stavetie.d.ts @@ -0,0 +1,63 @@ +import { Element } from './element'; +import { FontInfo } from './font'; +import { Note } from './note'; +export interface TieNotes { + first_note?: Note | null; + last_note?: Note | null; + first_indices?: number[]; + last_indices?: number[]; +} +export declare class StaveTie extends Element { + static get CATEGORY(): string; + /** Default text font. */ + static TEXT_FONT: Required; + render_options: { + cp2: number; + last_x_shift: number; + tie_spacing: number; + cp1: number; + first_x_shift: number; + text_shift_x: number; + y_shift: number; + }; + protected text?: string; + protected notes: TieNotes; + protected direction?: number; + /** + * @param notes is a struct that has: + * + * { + * first_note: Note, + * last_note: Note, + * first_indices: [n1, n2, n3], + * last_indices: [n1, n2, n3] + * } + * + * @param text + */ + constructor(notes: TieNotes, text?: string); + setDirection(direction: number): this; + /** + * Set the notes to attach this tie to. + * + * @param {!Object} notes The notes to tie up. + */ + setNotes(notes: TieNotes): this; + /** + * @return {boolean} Returns true if this is a partial bar. + */ + isPartial(): boolean; + renderTie(params: { + direction: number; + first_x_px: number; + last_x_px: number; + last_ys: number[]; + first_ys: number[]; + }): void; + renderText(first_x_px: number, last_x_px: number): void; + /** + * Returns the TieNotes structure of the first and last note this tie connects. + */ + getNotes(): TieNotes; + draw(): boolean; +} diff --git a/build/types/src/stavevolta.d.ts b/build/types/src/stavevolta.d.ts new file mode 100644 index 0000000000..d23dddce6c --- /dev/null +++ b/build/types/src/stavevolta.d.ts @@ -0,0 +1,21 @@ +import { FontInfo } from './font'; +import { Stave } from './stave'; +import { StaveModifier } from './stavemodifier'; +export declare enum VoltaType { + NONE = 1, + BEGIN = 2, + MID = 3, + END = 4, + BEGIN_END = 5 +} +export declare class Volta extends StaveModifier { + static get CATEGORY(): string; + static get type(): typeof VoltaType; + static TEXT_FONT: Required; + protected volta: number; + protected number: string; + protected y_shift: number; + constructor(type: number, number: string, x: number, y_shift: number); + setShiftY(y: number): this; + draw(stave: Stave, x: number): this; +} diff --git a/build/types/src/stem.d.ts b/build/types/src/stem.d.ts new file mode 100644 index 0000000000..727332e7bc --- /dev/null +++ b/build/types/src/stem.d.ts @@ -0,0 +1,58 @@ +import { BoundingBox } from './boundingbox'; +import { Element } from './element'; +export interface StemOptions { + stem_down_y_base_offset?: number; + stem_up_y_base_offset?: number; + stem_down_y_offset?: number; + stem_up_y_offset?: number; + stemletHeight?: number; + isStemlet?: boolean; + hide?: boolean; + stem_direction?: number; + stem_extension?: number; + y_bottom?: number; + y_top?: number; + x_end?: number; + x_begin?: number; +} +export declare class Stem extends Element { + /** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */ + static DEBUG: boolean; + static get CATEGORY(): string; + static get UP(): number; + static get DOWN(): number; + static get WIDTH(): number; + static get HEIGHT(): number; + protected hide: boolean; + protected isStemlet: boolean; + protected stemletHeight: number; + protected x_begin: number; + protected x_end: number; + protected y_top: number; + protected stem_up_y_offset: number; + protected y_bottom: number; + protected stem_down_y_offset: number; + protected stem_up_y_base_offset: number; + protected stem_down_y_base_offset: number; + protected stem_direction: number; + protected stem_extension: number; + protected renderHeightAdjustment: number; + constructor(options?: StemOptions); + setOptions(options?: StemOptions): void; + setNoteHeadXBounds(x_begin: number, x_end: number): this; + setDirection(direction: number): void; + setExtension(ext: number): void; + getExtension(): number; + setYBounds(y_top: number, y_bottom: number): void; + getHeight(): number; + getBoundingBox(): BoundingBox; + getExtents(): { + topY: number; + baseY: number; + }; + setVisibility(isVisible: boolean): this; + setStemlet(isStemlet: boolean, stemletHeight: number): this; + adjustHeightForFlag(): void; + adjustHeightForBeam(): void; + draw(): void; +} diff --git a/build/types/src/stemmablenote.d.ts b/build/types/src/stemmablenote.d.ts new file mode 100644 index 0000000000..988d9c677e --- /dev/null +++ b/build/types/src/stemmablenote.d.ts @@ -0,0 +1,39 @@ +import { Glyph, GlyphProps } from './glyph'; +import { Note, NoteStruct } from './note'; +import { Stem, StemOptions } from './stem'; +export declare abstract class StemmableNote extends Note { + static get CATEGORY(): string; + stem_direction?: number; + stem?: Stem; + protected flag?: Glyph; + protected stem_extension_override?: number; + constructor(noteStruct: NoteStruct); + getStem(): Stem | undefined; + checkStem(): Stem; + setStem(stem: Stem): this; + buildStem(): this; + buildFlag(category?: string): void; + getBaseCustomNoteHeadGlyphProps(): GlyphProps; + getStemLength(): number; + getBeamCount(): number; + getStemMinimumLength(): number; + getStemDirection(): number; + setStemDirection(direction?: number): this; + getStemX(): number; + getCenterGlyphX(): number; + getStemExtension(): number; + setStemLength(height: number): this; + getStemExtents(): { + topY: number; + baseY: number; + }; + /** Gets the `y` value for the top modifiers at a specific `textLine`. */ + getYForTopText(textLine: number): number; + /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */ + getYForBottomText(textLine: number): number; + hasFlag(): boolean; + /** Post formats the note. */ + postFormat(): this; + /** Renders the stem onto the canvas. */ + drawStem(stemOptions: StemOptions): void; +} diff --git a/build/types/src/stringnumber.d.ts b/build/types/src/stringnumber.d.ts new file mode 100644 index 0000000000..0b509fc012 --- /dev/null +++ b/build/types/src/stringnumber.d.ts @@ -0,0 +1,35 @@ +import { FontInfo } from './font'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { Note } from './note'; +export interface StringNumberMetrics { + verticalPadding: number; + stemPadding: number; + leftPadding: number; + rightPadding: number; +} +export declare class StringNumber extends Modifier { + static get CATEGORY(): string; + static TEXT_FONT: Required; + static get metrics(): StringNumberMetrics; + static format(nums: StringNumber[], state: ModifierContextState): boolean; + protected radius: number; + protected drawCircle: boolean; + protected last_note?: Note; + protected string_number: string; + protected x_offset: number; + protected y_offset: number; + protected text_line: number; + protected stem_offset: number; + protected dashed: boolean; + protected leg: number; + constructor(number: string); + setLineEndType(leg: number): this; + setStringNumber(number: string): this; + setOffsetX(x: number): this; + setOffsetY(y: number): this; + setLastNote(note: Note): this; + setDashed(dashed: boolean): this; + setDrawCircle(drawCircle: boolean): this; + draw(): void; +} diff --git a/build/types/src/strokes.d.ts b/build/types/src/strokes.d.ts new file mode 100644 index 0000000000..8e6329489c --- /dev/null +++ b/build/types/src/strokes.d.ts @@ -0,0 +1,33 @@ +import { FontInfo } from './font'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { Note } from './note'; +export declare class Stroke extends Modifier { + static get CATEGORY(): string; + static readonly Type: { + BRUSH_DOWN: number; + BRUSH_UP: number; + ROLL_DOWN: number; + ROLL_UP: number; + RASQUEDO_DOWN: number; + RASQUEDO_UP: number; + ARPEGGIO_DIRECTIONLESS: number; + }; + static TEXT_FONT: Required; + static format(strokes: Stroke[], state: ModifierContextState): boolean; + protected options: { + all_voices: boolean; + }; + protected all_voices: boolean; + protected type: number; + protected note_end?: Note; + render_options: { + font_scale: number; + }; + constructor(type: number, options?: { + all_voices: boolean; + }); + getPosition(): number; + addEndNote(note: Note): this; + draw(): void; +} diff --git a/build/types/src/svgcontext.d.ts b/build/types/src/svgcontext.d.ts new file mode 100644 index 0000000000..ef282fad1a --- /dev/null +++ b/build/types/src/svgcontext.d.ts @@ -0,0 +1,142 @@ +import { FontInfo } from './font'; +import { GroupAttributes, RenderContext, TextMeasure } from './rendercontext'; +export type Attributes = { + [name: string]: string | number | undefined; + 'font-family'?: string; + 'font-size'?: string | number; + 'font-style'?: string; + 'font-weight'?: string | number; + scaleX?: number; + scaleY?: number; +}; +export interface State { + state: Attributes; + attributes: Attributes; + shadow_attributes: Attributes; + lineWidth: number; +} +declare class MeasureTextCache { + protected txt?: SVGTextElement; + protected cache: Record>; + lookup(text: string, svg: SVGSVGElement, attributes: Attributes): TextMeasure; + measureImpl(text: string, svg: SVGSVGElement, attributes: Attributes): TextMeasure; +} +/** + * SVG rendering context with an API similar to CanvasRenderingContext2D. + */ +export declare class SVGContext extends RenderContext { + protected static measureTextCache: MeasureTextCache; + element: HTMLElement; + svg: SVGSVGElement; + width: number; + height: number; + path: string; + pen: { + x: number; + y: number; + }; + lineWidth: number; + attributes: Attributes; + shadow_attributes: Attributes; + state: Attributes; + state_stack: State[]; + parent: SVGGElement; + groups: SVGGElement[]; + protected groupAttributes: Attributes[]; + protected precision: number; + backgroundFillStyle: string; + /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */ + protected fontCSSString: string; + constructor(element: HTMLElement); + protected round(n: number): number; + /** + * Use one of the overload signatures to create an SVG element of a specific type. + * The last overload accepts an arbitrary string, and is identical to the + * implementation signature. + * Feel free to add new overloads for other SVG element types as required. + */ + create(svgElementType: 'g'): SVGGElement; + create(svgElementType: 'path'): SVGPathElement; + create(svgElementType: 'rect'): SVGRectElement; + create(svgElementType: 'svg'): SVGSVGElement; + create(svgElementType: 'text'): SVGTextElement; + create(svgElementType: string): SVGElement; + openGroup(cls?: string, id?: string, attrs?: GroupAttributes): SVGGElement; + closeGroup(): void; + add(elem: SVGElement): void; + setFillStyle(style: string): this; + /** + * Used to set the fill color for `clearRect()`. This allows us to simulate + * cutting a "hole" into the SVG drawing. + */ + setBackgroundFillStyle(style: string): this; + setStrokeStyle(style: string): this; + setShadowColor(color: string): this; + /** + * @param blur A non-negative float specifying the level of shadow blur, where 0 + * represents no blur and larger numbers represent increasingly more blur. + * @returns this + */ + setShadowBlur(blur: number): this; + /** + * @param width + * @returns this + */ + setLineWidth(width: number): this; + /** + * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...] + * @returns this + * + * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray) + */ + setLineDash(lineDash: number[]): this; + /** + * @param capType + * @returns this + */ + setLineCap(capType: CanvasLineCap): this; + resize(width: number, height: number): this; + scale(x: number, y: number): this; + /** + * 1 arg: string in the "x y w h" format + * 4 args: x:number, y:number, w:number, h:number + */ + setViewBox(viewBox_or_minX: string | number, minY?: number, width?: number, height?: number): void; + applyAttributes(element: SVGElement, attributes: Attributes): SVGElement; + clear(): void; + rect(x: number, y: number, width: number, height: number, attributes?: Attributes): this; + fillRect(x: number, y: number, width: number, height: number): this; + clearRect(x: number, y: number, width: number, height: number): this; + beginPath(): this; + moveTo(x: number, y: number): this; + lineTo(x: number, y: number): this; + bezierCurveTo(x1: number, y1: number, x2: number, y2: number, x: number, y: number): this; + quadraticCurveTo(x1: number, y1: number, x: number, y: number): this; + arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise: boolean): this; + closePath(): this; + private getShadowStyle; + fill(attributes?: Attributes): this; + stroke(): this; + measureText(text: string): TextMeasure; + fillText(text: string, x: number, y: number): this; + save(): this; + restore(): this; + set fillStyle(style: string | CanvasGradient | CanvasPattern); + get fillStyle(): string | CanvasGradient | CanvasPattern; + set strokeStyle(style: string | CanvasGradient | CanvasPattern); + get strokeStyle(): string | CanvasGradient | CanvasPattern; + /** + * @param f is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted + * into the font-weight attribute (e.g., font-weight="bold") + * @param style is a string (e.g., 'italic', 'normal') that is inserted into the + * font-style attribute (e.g., font-style="italic") + */ + setFont(f?: string | FontInfo, size?: string | number, weight?: string | number, style?: string): this; + /** Return a string of the form `'italic bold 15pt Arial'` */ + getFont(): string; +} +export {}; diff --git a/build/types/src/system.d.ts b/build/types/src/system.d.ts new file mode 100644 index 0000000000..59c4b0cfdf --- /dev/null +++ b/build/types/src/system.d.ts @@ -0,0 +1,118 @@ +import { Element } from './element'; +import { Factory } from './factory'; +import { FormatParams, Formatter, FormatterOptions } from './formatter'; +import { RenderContext } from './rendercontext'; +import { Stave, StaveOptions } from './stave'; +import { StaveConnector, StaveConnectorType } from './staveconnector'; +import { Voice } from './voice'; +export interface SystemFormatterOptions extends FormatterOptions { + alpha?: number; +} +export interface SystemStave { + voices: Voice[]; + stave?: Stave; + noJustification?: boolean; + options?: StaveOptions; + spaceAbove?: number; + spaceBelow?: number; + debugNoteMetrics?: boolean; +} +interface StaveInfo { + noJustification: boolean; + options: StaveOptions; + spaceAbove: number; + spaceBelow: number; + debugNoteMetrics: boolean; +} +/** + * Formatting for systems created/drawn from factory: + * + * If width is provided, the system will use the specified width. + * + * If noJustification flag is 'true', there is no justification between voices + * Otherwise, autoWidth defaults to true. + * + * If autowidth is true, the system uses format.preCalculateMinWidth + * for the width of all voices, and default stave padding + */ +export interface SystemOptions { + factory?: Factory; + noPadding?: boolean; + debugFormatter?: boolean; + spaceBetweenStaves?: number; + formatIterations?: number; + autoWidth?: boolean; + x?: number; + width?: number; + y?: number; + details?: SystemFormatterOptions; + formatOptions?: FormatParams; + noJustification?: boolean; +} +/** + * System implements a musical system, which is a collection of staves, + * each which can have one or more voices. All voices across all staves in + * the system are formatted together. + */ +export declare class System extends Element { + static get CATEGORY(): string; + protected options: Required; + protected factory: Factory; + protected formatter?: Formatter; + protected startX?: number; + protected lastY?: number; + protected partStaves: Stave[]; + protected partStaveInfos: StaveInfo[]; + protected partVoices: Voice[]; + protected connector?: StaveConnector; + protected debugNoteMetricsYs?: { + y: number; + stave: Stave; + }[]; + constructor(params?: SystemOptions); + /** Set formatting options. */ + setOptions(options?: SystemOptions): void; + /** Get origin X. */ + getX(): number; + /** Set origin X. */ + setX(x: number): void; + /** Get origin y. */ + getY(): number; + /** Set origin y. */ + setY(y: number): void; + /** Get associated staves. */ + getStaves(): Stave[]; + /** Get associated voices. */ + getVoices(): Voice[]; + /** Set associated context. */ + setContext(context: RenderContext): this; + /** + * Add connector between staves. + * @param type see {@link StaveConnector.typeString} + */ + addConnector(type?: StaveConnectorType): StaveConnector; + /** + * Add a stave to the system. + * + * Example (one voice): + * + * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});` + * + * Example (two voices): + * + * `system.addStave({voices: [` + * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),` + * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))` + * `]});` + */ + addStave(params: SystemStave): Stave; + /** + * Add voices to the system with stave already assigned. + */ + addVoices(voices: Voice[]): void; + /** Format the system. */ + format(): void; + /** Render the system. */ + draw(): void; +} +export {}; diff --git a/build/types/src/tables.d.ts b/build/types/src/tables.d.ts new file mode 100644 index 0000000000..3fbf26fc7f --- /dev/null +++ b/build/types/src/tables.d.ts @@ -0,0 +1,97 @@ +import { ArticulationStruct } from './articulation'; +import { Font } from './font'; +import { Fraction } from './fraction'; +import { GlyphProps } from './glyph'; +import { KeyProps } from './note'; +export declare class Tables { + static UNISON: boolean; + static SOFTMAX_FACTOR: number; + static STEM_WIDTH: number; + static STEM_HEIGHT: number; + static STAVE_LINE_THICKNESS: number; + static RENDER_PRECISION_PLACES: number; + static RESOLUTION: number; + /** + * Customize this by calling Flow.setMusicFont(...fontNames); + */ + static MUSIC_FONT_STACK: Font[]; + /** + * @returns the `Font` object at the head of the music font stack. + */ + static currentMusicFont(): Font; + static NOTATION_FONT_SCALE: number; + static TABLATURE_FONT_SCALE: number; + static SLASH_NOTEHEAD_WIDTH: number; + static STAVE_LINE_DISTANCE: number; + static TEXT_HEIGHT_OFFSET_HACK: number; + static clefProperties(clef: string): { + line_shift: number; + }; + /** + * @param keyOctaveGlyph a string in the format "key/octave" (e.g., "c/5") or "key/octave/custom-note-head-code" (e.g., "g/5/t3"). + * @param clef + * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.). + * @returns properties for the specified note. + */ + static keyProperties(keyOctaveGlyph: string, clef?: string, params?: { + octave_shift?: number; + }): KeyProps; + static integerToNote(integer?: number): string; + static tabToGlyphProps(fret: string, scale?: number): GlyphProps; + static textWidth(text: string): number; + static articulationCodes(artic: string): ArticulationStruct; + static accidentalMap: Record; + static accidentalCodes(acc: string): { + code: string; + parenRightPaddingAdjustment: number; + }; + static accidentalColumnsTable: Record; + static ornamentCodes(acc: string): { + code: string; + }; + static keySignature(spec: string): { + type: string; + line: number; + }[]; + static getKeySignatures(): Record; + static hasKeySignature(spec: string): boolean; + static unicode: { + sharp: string; + flat: string; + natural: string; + triangle: string; + 'o-with-slash': string; + degrees: string; + circle: string; + }; + /** + * Convert duration aliases to the number based duration. + * If the input isn't an alias, simply return the input. + * @param duration + * @returns Example: 'q' -> '4', '8' -> '8' + */ + static sanitizeDuration(duration: string): string; + /** Convert the `duration` to a fraction. */ + static durationToFraction(duration: string): Fraction; + /** Convert the `duration` to a number. */ + static durationToNumber(duration: string): number; + static durationToTicks(duration: string): number; + static codeNoteHead(type: string, duration: string): string; + static getGlyphProps(duration: string, type?: string): GlyphProps; + static validTypes: Record; + static TIME4_4: { + num_beats: number; + beat_value: number; + resolution: number; + }; +} diff --git a/build/types/src/tabnote.d.ts b/build/types/src/tabnote.d.ts new file mode 100644 index 0000000000..8d88a546bf --- /dev/null +++ b/build/types/src/tabnote.d.ts @@ -0,0 +1,44 @@ +import { GlyphProps } from './glyph'; +import { Stave } from './stave'; +import { StaveNoteStruct } from './stavenote'; +import { StemmableNote } from './stemmablenote'; +export interface TabNotePosition { + str: number; + fret: number | string; +} +export interface TabNoteStruct extends StaveNoteStruct { + positions: TabNotePosition[]; +} +export declare class TabNote extends StemmableNote { + static get CATEGORY(): string; + protected ghost: boolean; + protected glyphPropsArr: GlyphProps[]; + protected positions: TabNotePosition[]; + constructor(noteStruct: TabNoteStruct, draw_stem?: boolean); + greatestString: () => number; + leastString: () => number; + reset(): this; + setGhost(ghost: boolean): this; + hasStem(): boolean; + getStemExtension(): number; + updateWidth(): void; + setStave(stave: Stave): this; + getPositions(): TabNotePosition[]; + getModifierStartXY(position: number, index: number): { + x: number; + y: number; + }; + getLineForRest(): number; + preFormat(): void; + getStemX(): number; + getStemY(): number; + getStemExtents(): { + topY: number; + baseY: number; + }; + drawFlag(): void; + drawModifiers(): void; + drawStemThrough(): void; + drawPositions(): void; + draw(): void; +} diff --git a/build/types/src/tabslide.d.ts b/build/types/src/tabslide.d.ts new file mode 100644 index 0000000000..553e52f321 --- /dev/null +++ b/build/types/src/tabslide.d.ts @@ -0,0 +1,34 @@ +import { FontInfo } from './font'; +import { TieNotes } from './stavetie'; +import { TabTie } from './tabtie'; +export declare class TabSlide extends TabTie { + static get CATEGORY(): string; + static TEXT_FONT: Required; + static get SLIDE_UP(): number; + static get SLIDE_DOWN(): number; + static createSlideUp(notes: TieNotes): TabSlide; + static createSlideDown(notes: TieNotes): TabSlide; + /** + * @param notes is a struct of the form: + * { + * first_note: Note, + * last_note: Note, + * first_indices: [n1, n2, n3], + * last_indices: [n1, n2, n3] + * } + * @param notes.first_note the starting note of the slide + * @param notes.last_note the ending note of the slide + * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed. + * @param notes.last_indices currently unused. we assume it's the same as first_indices. + * + * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN + */ + constructor(notes: TieNotes, direction?: number); + renderTie(params: { + direction: number; + first_x_px: number; + last_x_px: number; + last_ys: number[]; + first_ys: number[]; + }): void; +} diff --git a/build/types/src/tabstave.d.ts b/build/types/src/tabstave.d.ts new file mode 100644 index 0000000000..ac87718cd2 --- /dev/null +++ b/build/types/src/tabstave.d.ts @@ -0,0 +1,7 @@ +import { Stave, StaveOptions } from './stave'; +export declare class TabStave extends Stave { + static get CATEGORY(): string; + constructor(x: number, y: number, width: number, options?: StaveOptions); + getYForGlyphs(): number; + addTabGlyph(): this; +} diff --git a/build/types/src/tabtie.d.ts b/build/types/src/tabtie.d.ts new file mode 100644 index 0000000000..bfc26fa027 --- /dev/null +++ b/build/types/src/tabtie.d.ts @@ -0,0 +1,18 @@ +import { StaveTie, TieNotes } from './stavetie'; +export declare class TabTie extends StaveTie { + static get CATEGORY(): string; + static createHammeron(notes: TieNotes): TabTie; + static createPulloff(notes: TieNotes): TabTie; + /** + * @param notes is a struct that has: + * { + * first_note: Note, + * last_note: Note, + * first_indices: [n1, n2, n3], + * last_indices: [n1, n2, n3] + * } + * + * @param text + */ + constructor(notes: TieNotes, text?: string); +} diff --git a/build/types/src/textbracket.d.ts b/build/types/src/textbracket.d.ts new file mode 100644 index 0000000000..201f9d49fb --- /dev/null +++ b/build/types/src/textbracket.d.ts @@ -0,0 +1,55 @@ +import { Element } from './element'; +import { FontInfo } from './font'; +import { Note } from './note'; +import { RenderContext } from './rendercontext'; +export interface TextBracketParams { + start: Note; + stop: Note; + text?: string; + superscript?: string; + position?: number | string; +} +export declare enum TextBracketPosition { + TOP = 1, + BOTTOM = -1 +} +export declare class TextBracket extends Element { + static DEBUG: boolean; + static get CATEGORY(): string; + static TEXT_FONT: Required; + render_options: { + dashed: boolean; + color: string; + line_width: number; + underline_superscript: boolean; + show_bracket: boolean; + dash: number[]; + bracket_height: number; + }; + protected readonly text: string; + protected readonly superscript: string; + protected line: number; + readonly position: TextBracketPosition; + readonly start: Note; + readonly stop: Note; + static get Position(): typeof TextBracketPosition; + static get PositionString(): Record; + /** + * @deprecated Use `TextBracket.Position` instead. + */ + static get Positions(): typeof TextBracketPosition; + /** + * @deprecated Use `TextBracket.PositionString` instead. + */ + static get PositionsString(): Record; + constructor({ start, stop, text, superscript, position }: TextBracketParams); + /** + * Apply the text backet styling to the provided context. + * @param ctx + * @returns this + */ + applyStyle(ctx: RenderContext): this; + setDashed(dashed: boolean, dash?: number[]): this; + setLine(line: number): this; + draw(): void; +} diff --git a/build/types/src/textdynamics.d.ts b/build/types/src/textdynamics.d.ts new file mode 100644 index 0000000000..fa07c00a82 --- /dev/null +++ b/build/types/src/textdynamics.d.ts @@ -0,0 +1,39 @@ +import { Glyph } from './glyph'; +import { Note } from './note'; +import { TextNoteStruct } from './textnote'; +/** + * `TextDynamics` renders traditional + * text dynamics markings, **ie: p, f, sfz, rfz, ppp** + * + * You can render any dynamics string that contains a combination of + * the following letters: P, M, F, Z, R, S + */ +export declare class TextDynamics extends Note { + /** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */ + static DEBUG: boolean; + static get CATEGORY(): string; + protected sequence: string; + protected line: number; + protected glyphs: Glyph[]; + /** The glyph data for each dynamics letter. */ + static get GLYPHS(): Record; + /** + * Create the dynamics marking. + * + * A `TextDynamics` object inherits from `Note` so that it can be formatted + * within a `Voice`. + * + * @param noteStruct an object that contains a `duration` property and a + * `sequence` of letters that represents the letters to render. + */ + constructor(noteStruct: TextNoteStruct); + /** Set the Stave line on which the note should be placed. */ + setLine(line: number): this; + /** Preformat the dynamics text. */ + preFormat(): this; + /** Draw the dynamics text on the rendering context. */ + draw(): void; +} diff --git a/build/types/src/textformatter.d.ts b/build/types/src/textformatter.d.ts new file mode 100644 index 0000000000..0ec73b1408 --- /dev/null +++ b/build/types/src/textformatter.d.ts @@ -0,0 +1,123 @@ +import { FontGlyph, FontInfo } from './font'; +export interface TextFormatterInfo extends Record { + family: string; + resolution?: number; + glyphs?: Record; + serifs: boolean; + monospaced: boolean; + italic: boolean; + bold: boolean; + maxSizeGlyph?: string; + superscriptOffset?: number; + subscriptOffset?: number; + description: string; +} +/** + * Y information, 0 is baseline, yMin is lowest point. + */ +export interface yExtent { + yMin: number; + yMax: number; + height: number; +} +export declare class TextFormatter { + /** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */ + static DEBUG: boolean; + /** + * Return all registered font families. + */ + static getFontFamilies(): TextFormatterInfo[]; + /** + * Call `TextFormatter.registerInfo(info)` to register font information before using this method. + * + * This method creates a formatter for the font that most closely matches the requested font. + * We compare font family, bold, and italic attributes. + * This method will return a fallback formatter if there are no matches. + */ + static create(requestedFont?: FontInfo): TextFormatter; + /** + * @param fontFamily used as a key to the font registry. + * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)` + */ + static getInfo(fontFamily: string): TextFormatterInfo | undefined; + /** + * Apps may register their own fonts and metrics, and those metrics + * will be available to the app for formatting. + * + * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory. + * @param info + * @param overwrite + */ + static registerInfo(info: TextFormatterInfo, overwrite?: boolean): void; + /** Font family. */ + protected family: string; + /** Specified in `pt` units. */ + protected size: number; + /** Font metrics are extracted at 1000 upem (units per em). */ + protected resolution: number; + /** + * For text formatting, we do not require glyph outlines, but instead rely on glyph + * bounding box metrics such as: + * ``` + * { + * x_min: 48, + * x_max: 235, + * y_min: -17, + * y_max: 734, + * ha: 751, + * leftSideBearing: 48, + * advanceWidth: 286, + * } + * ``` + */ + protected glyphs: Record; + protected description?: string; + protected serifs: boolean; + protected monospaced: boolean; + protected italic: boolean; + protected bold: boolean; + protected superscriptOffset: number; + protected subscriptOffset: number; + protected maxSizeGlyph: string; + protected cacheKey: string; + /** + * Use `TextFormatter.create(...)` to build an instance from information previously + * registered via `TextFormatter.registerInfo(info)`. + */ + private constructor(); + get localHeightCache(): Record; + updateParams(params: TextFormatterInfo): void; + /** Create a hash with the current font data, so we can cache computed widths. */ + updateCacheKey(): void; + /** + * The glyphs table is indexed by the character (e.g., 'C', '@'). + * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts. + */ + getGlyphMetrics(character: string): FontGlyph; + get maxHeight(): number; + /** + * Retrieve the character's advanceWidth as a fraction of an `em` unit. + * For the space character ' ' as defined in the: + * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25. + * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485. + */ + getWidthForCharacterInEm(c: string): number; + /** + * Retrieve the character's y bounds (ymin, ymax) and height. + */ + getYForCharacterInPx(c: string): yExtent; + getYForStringInPx(str: string): yExtent; + /** + * Retrieve the total width of `text` in `em` units. + */ + getWidthForTextInEm(text: string): number; + /** The width of the text (in `em`) is scaled by the font size (in `px`). */ + getWidthForTextInPx(text: string): number; + /** + * @param size in pt. + */ + setFontSize(size: number): this; + /** `this.size` is specified in points. Convert to pixels. */ + get fontSizeInPixels(): number; + getResolution(): number; +} diff --git a/build/types/src/textnote.d.ts b/build/types/src/textnote.d.ts new file mode 100644 index 0000000000..e3eea99ae9 --- /dev/null +++ b/build/types/src/textnote.d.ts @@ -0,0 +1,55 @@ +import { FontInfo } from './font'; +import { Glyph } from './glyph'; +import { Note, NoteStruct } from './note'; +export declare enum TextJustification { + LEFT = 1, + CENTER = 2, + RIGHT = 3 +} +export interface TextNoteStruct extends NoteStruct { + text?: string; + glyph?: string; + ignore_ticks?: boolean; + smooth?: boolean; + font?: FontInfo; + subscript?: string; + superscript?: string; +} +/** + * `TextNote` is a notation element that is positioned in time. Generally + * meant for objects that sit above/below the staff and inline with each other. + * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`. + * Examples of this would be such as dynamics, lyrics, chord changes, etc. + */ +export declare class TextNote extends Note { + static get CATEGORY(): string; + static TEXT_FONT: Required; + static readonly Justification: typeof TextJustification; + /** Glyph data. */ + static get GLYPHS(): Record; + protected text: string; + protected glyph?: Glyph; + protected superscript?: string; + protected subscript?: string; + protected smooth: boolean; + protected justification: TextJustification; + protected line: number; + constructor(noteStruct: TextNoteStruct); + /** Set the horizontal justification of the TextNote. */ + setJustification(just: TextJustification): this; + /** Set the Stave line on which the note should be placed. */ + setLine(line: number): this; + /** Return the Stave line on which the TextNote is placed. */ + getLine(): number; + /** Return the unformatted text of this TextNote. */ + getText(): string; + /** Pre-render formatting. */ + preFormat(): void; + /** + * Renders the TextNote. + * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`. + */ + draw(): void; +} diff --git a/build/types/src/tickable.d.ts b/build/types/src/tickable.d.ts new file mode 100644 index 0000000000..5730ab27b2 --- /dev/null +++ b/build/types/src/tickable.d.ts @@ -0,0 +1,140 @@ +import { Element } from './element'; +import { Fraction } from './fraction'; +import { Modifier } from './modifier'; +import { ModifierContext } from './modifiercontext'; +import { Stave } from './stave'; +import { TickContext } from './tickcontext'; +import { Tuplet } from './tuplet'; +import { Voice } from './voice'; +/** Formatter metrics interface */ +export interface FormatterMetrics { + duration: string; + freedom: { + left: number; + right: number; + }; + iterations: number; + space: { + used: number; + mean: number; + deviation: number; + }; +} +/** + * Tickable represents a element that sit on a score and + * has a duration, i.e., Tickables occupy space in the musical rendering dimension. + */ +export declare abstract class Tickable extends Element { + static get CATEGORY(): string; + protected ignore_ticks: boolean; + protected tupletStack: Tuplet[]; + protected tuplet?: Tuplet; + protected ticks: Fraction; + protected center_x_shift: number; + protected voice?: Voice; + protected width: number; + protected x_shift: number; + protected modifierContext?: ModifierContext; + protected tickContext?: TickContext; + protected modifiers: Modifier[]; + protected tickMultiplier: Fraction; + protected formatterMetrics: FormatterMetrics; + protected intrinsicTicks: number; + protected align_center: boolean; + private _preFormatted; + private _postFormatted; + constructor(); + /** Reset the Tickable, this function will be overloaded. */ + reset(): this; + /** Return the ticks. */ + getTicks(): Fraction; + /** Check if it ignores the ticks. */ + shouldIgnoreTicks(): boolean; + /** Ignore the ticks. */ + setIgnoreTicks(flag: boolean): this; + /** Set width of note. Used by the formatter for positioning. */ + setWidth(width: number): void; + /** Get width of note. Used by the formatter for positioning. */ + getWidth(): number; + /** Displace note by `x` pixels. Used by the formatter. */ + setXShift(x: number): this; + /** Get the `x` displaced pixels of the note. */ + getXShift(): number; + /** Get `x` position of this tick context. */ + getX(): number; + /** Return the formatterMetrics. */ + getFormatterMetrics(): FormatterMetrics; + /** Return the center `x` shift. */ + getCenterXShift(): number; + /** Set the center `x` shift. */ + setCenterXShift(centerXShift: number): this; + isCenterAligned(): boolean; + setCenterAlignment(align_center: boolean): this; + /** + * Return the associated voice. Every tickable must be associated with a voice. + * This allows formatters and preFormatter to associate them with the right modifierContexts. + */ + getVoice(): Voice; + /** Set the associated voice. */ + setVoice(voice: Voice): void; + /** Get the tuplet. */ + getTuplet(): Tuplet | undefined; + /** Return a list of Tuplets. */ + getTupletStack(): Tuplet[]; + /** + * Reset the specific Tuplet (if this is not provided, all tuplets are reset). + * Remove any prior tuplets from the tick calculation and + * reset the intrinsic tick value. + */ + resetTuplet(tuplet?: Tuplet): this; + /** Attach to new tuplet. */ + setTuplet(tuplet: Tuplet): this; + /** + * Add self to the provided ModifierContext `mc`. + * If this tickable has modifiers, set modifierContext. + * @returns this + */ + addToModifierContext(mc: ModifierContext): this; + /** + * Optional, if tickable has modifiers, associate a Modifier. + * @param mod the modifier + */ + addModifier(modifier: Modifier, index?: number): this; + /** Get the list of associated modifiers. */ + getModifiers(): Modifier[]; + /** Set the Tick Context. */ + setTickContext(tc: TickContext): void; + checkTickContext(message?: string): TickContext; + /** Preformat the Tickable. */ + preFormat(): void; + /** Set preformatted status. */ + set preFormatted(value: boolean); + get preFormatted(): boolean; + /** Postformat the Tickable. */ + postFormat(): this; + /** Set postformatted status. */ + set postFormatted(value: boolean); + get postFormatted(): boolean; + /** Return the intrinsic ticks. */ + getIntrinsicTicks(): number; + /** Set the intrinsic ticks. */ + setIntrinsicTicks(intrinsicTicks: number): void; + /** Get the tick multiplier. */ + getTickMultiplier(): Fraction; + /** Apply a tick multiplier. */ + applyTickMultiplier(numerator: number, denominator: number): void; + /** Set the duration. */ + setDuration(duration: Fraction): void; + getAbsoluteX(): number; + /** Attach this note to a modifier context. */ + setModifierContext(mc?: ModifierContext): this; + /** Get `ModifierContext`. */ + getModifierContext(): ModifierContext | undefined; + /** Check and get `ModifierContext`. */ + checkModifierContext(): ModifierContext; + /** Get the target stave. */ + abstract getStave(): Stave | undefined; + /** Set the target stave. */ + abstract setStave(stave: Stave): this; + abstract getMetrics(): any; +} diff --git a/build/types/src/tickcontext.d.ts b/build/types/src/tickcontext.d.ts new file mode 100644 index 0000000000..20e5a92957 --- /dev/null +++ b/build/types/src/tickcontext.d.ts @@ -0,0 +1,82 @@ +import { Fraction } from './fraction'; +import { NoteMetrics } from './note'; +import { Tickable } from './tickable'; +export interface TickContextMetrics extends NoteMetrics { + totalLeftPx: number; + totalRightPx: number; +} +export interface TickContextOptions { + tickID: number; +} +/** + * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc. + */ +export declare class TickContext { + protected readonly tickID: number; + protected readonly tickables: Tickable[]; + protected readonly tickablesByVoice: Record; + protected currentTick: Fraction; + protected maxTicks: Fraction; + protected padding: number; + protected xBase: number; + protected x: number; + protected xOffset: number; + protected notePx: number; + protected glyphPx: number; + protected leftDisplacedHeadPx: number; + protected rightDisplacedHeadPx: number; + protected modLeftPx: number; + protected modRightPx: number; + protected totalLeftPx: number; + protected totalRightPx: number; + protected maxTickable?: Tickable; + protected minTicks?: Fraction; + protected minTickable?: Tickable; + tContexts: TickContext[]; + protected preFormatted: boolean; + protected postFormatted: boolean; + protected width: number; + protected formatterMetrics: { + freedom: { + left: number; + right: number; + }; + }; + static getNextContext(tContext: TickContext): TickContext | undefined; + constructor(options?: TickContextOptions); + getTickID(): number; + getX(): number; + setX(x: number): this; + getXBase(): number; + setXBase(xBase: number): void; + getXOffset(): number; + setXOffset(xOffset: number): void; + getWidth(): number; + setPadding(padding: number): this; + getMaxTicks(): Fraction; + getMinTicks(): Fraction | undefined; + getMaxTickable(): Tickable | undefined; + getMinTickable(): Tickable | undefined; + getTickables(): Tickable[]; + /** + * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex). + * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63 + * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable. + */ + getTickableForVoice(voiceIndex: number): Tickable; + getTickablesByVoice(): Record; + getCenterAlignedTickables(): Tickable[]; + /** Gets widths context, note and left/right modifiers for formatting. */ + getMetrics(): TickContextMetrics; + getCurrentTick(): Fraction; + setCurrentTick(tick: Fraction): void; + addTickable(tickable: Tickable, voiceIndex?: number): this; + preFormat(): this; + postFormat(): this; + getFormatterMetrics(): { + freedom: { + left: number; + right: number; + }; + }; +} diff --git a/build/types/src/timesigglyph.d.ts b/build/types/src/timesigglyph.d.ts new file mode 100644 index 0000000000..014de35321 --- /dev/null +++ b/build/types/src/timesigglyph.d.ts @@ -0,0 +1,15 @@ +import { Glyph, GlyphMetrics } from './glyph'; +import { TimeSignature } from './timesignature'; +export declare class TimeSignatureGlyph extends Glyph { + timeSignature: TimeSignature; + topStartX: number; + botStartX: number; + width: number; + lineShift: number; + xMin: number; + constructor(timeSignature: TimeSignature, topDigits: string, botDigits: string, code: string, point: number, options?: { + category: string; + }); + getMetrics(): GlyphMetrics; + renderToStave(x: number): void; +} diff --git a/build/types/src/timesignature.d.ts b/build/types/src/timesignature.d.ts new file mode 100644 index 0000000000..5eec9b365c --- /dev/null +++ b/build/types/src/timesignature.d.ts @@ -0,0 +1,90 @@ +import { Glyph } from './glyph'; +import { StaveModifier } from './stavemodifier'; +import { TimeSignatureGlyph } from './timesigglyph'; +export interface TimeSignatureInfo { + glyph: Glyph; + line: number; + num: boolean; +} +/** + * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from + * a provided "timeSpec" such as "4/4", "C|" (cut time), or even something more advanced + * such as "3/4(6/8)" or "2/4+5/8". + */ +export declare class TimeSignature extends StaveModifier { + static get CATEGORY(): string; + static get glyphs(): Record; + point: number; + bottomLine: number; + topLine: number; + protected timeSpec: string; + protected line: number; + protected glyph: Glyph; + protected is_numeric: boolean; + protected validate_args: boolean; + constructor(timeSpec?: string, customPadding?: number, validate_args?: boolean); + /** + * Return TimeSignatureInfo given a string, consisting of line (number), + * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or + * TimeSignatureGlyph object). + */ + parseTimeSpec(timeSpec: string): TimeSignatureInfo; + /** + * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both + * top and bottom digits along with plus signs etc.) + */ + makeTimeSignatureGlyph(topDigits: string, botDigits: string): TimeSignatureGlyph; + /** + * Returns {line, num (=getIsNumeric), glyph} -- + * but these can also be accessed directly w/ getters and setters. + */ + getInfo(): TimeSignatureInfo; + /** + * Set a new time signature specification without changing customPadding, etc. + * + * The getter for this is `getTimeSpec` not `getTimeSig`. + */ + setTimeSig(timeSpec: string): this; + /** + * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature + */ + getTimeSpec(): string; + /** + * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/ + * denominator time signatures such as 3/4 and 2 for cut/common. + */ + getLine(): number; + /** + * Set the line number that the TimeSignature sits on. Half-values are acceptable + * for spaces, etc. Can be altered, for instance, for signatures that sit above the + * staff in large orchestral scores. + */ + setLine(line: number): void; + /** + * Get the Glyph object used to create the time signature. Numeric time signatures + * such as 3/8 have a composite Glyph stored as a single Glyph object. + */ + getGlyph(): Glyph; + /** + * Set the Glyph object used to draw the time signature, and update the width of the + * TimeSignature to match. The Glyph must define width in its metrics. + */ + setGlyph(glyph: Glyph): void; + /** + * Return a boolean on whether this TimeSignature is drawn with one or more numbers + * (such as 4/4) or not (as in cut time). + */ + getIsNumeric(): boolean; + /** + * Set whether this TimeSignature is drawn with one or more numbers. + */ + setIsNumeric(isNumeric: boolean): void; + /** + * Draw the time signature on a Stave using its RenderContext. Both setStave + * and setContext must already be run. + */ + draw(): void; +} diff --git a/build/types/src/timesignote.d.ts b/build/types/src/timesignote.d.ts new file mode 100644 index 0000000000..56bdf2faeb --- /dev/null +++ b/build/types/src/timesignote.d.ts @@ -0,0 +1,11 @@ +import { ModifierContext } from './modifiercontext'; +import { Note } from './note'; +import { TimeSignature } from './timesignature'; +export declare class TimeSigNote extends Note { + static get CATEGORY(): string; + protected timeSig: TimeSignature; + constructor(timeSpec: string, customPadding?: number); + addToModifierContext(mc: ModifierContext): this; + preFormat(): this; + draw(): void; +} diff --git a/build/types/src/tremolo.d.ts b/build/types/src/tremolo.d.ts new file mode 100644 index 0000000000..8a5f3db4f1 --- /dev/null +++ b/build/types/src/tremolo.d.ts @@ -0,0 +1,17 @@ +import { Modifier } from './modifier'; +/** Tremolo implements tremolo notation. */ +export declare class Tremolo extends Modifier { + static get CATEGORY(): string; + protected readonly code: string; + protected readonly num: number; + /** Extra spacing required for big strokes. */ + y_spacing_scale: number; + /** Font scaling for big strokes. */ + extra_stroke_scale: number; + /** + * @param num number of bars + */ + constructor(num: number); + /** Draw the tremolo on the rendering context. */ + draw(): void; +} diff --git a/build/types/src/tuning.d.ts b/build/types/src/tuning.d.ts new file mode 100644 index 0000000000..c0195742e2 --- /dev/null +++ b/build/types/src/tuning.d.ts @@ -0,0 +1,23 @@ +/** `Tuning` implements varies types of tunings for tablature. */ +export declare class Tuning { + protected tuningValues: number[]; + static get names(): Record; + /** + * Constructor. + * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings + */ + constructor(tuningString?: string); + /** Return the note number associated to the note string. */ + noteToInteger(noteString: string): number; + /** + * Set tuning identified by tuning name (eg. 'dagdad') + * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings + */ + setTuning(tuningString: string): void; + /** Return the note number associated with a tablature string. */ + getValueForString(stringNum: string | number): number; + /** Return the note number associated with a tablature string and fret. */ + getValueForFret(fretNum: string | number, stringNum: string | number): number; + /** Return the note string associated with tablature string and fret. */ + getNoteForFret(fretNum: string | number, stringNum: string | number): string; +} diff --git a/build/types/src/tuplet.d.ts b/build/types/src/tuplet.d.ts new file mode 100644 index 0000000000..912c91f04e --- /dev/null +++ b/build/types/src/tuplet.d.ts @@ -0,0 +1,111 @@ +/** + * ## Description + * + * Create a new tuplet from the specified notes. The notes must + * be part of the same voice. If they are of different rhythmic + * values, then options.num_notes must be set. + * + * @constructor + * @param {Array.} A set of notes: staveNotes, + * notes, etc... any class that inherits stemmableNote at some + * point in its prototype chain. + * @param options: object { + * + * num_notes: fit this many notes into... + * notes_occupied: ...the space of this many notes + * + * Together, these two properties make up the tuplet ratio + * in the form of num_notes : notes_occupied. + * num_notes defaults to the number of notes passed in, so + * it is important that if you omit this property, all of + * the notes passed should be of the same note value. + * notes_occupied defaults to 2 -- so you should almost + * certainly pass this parameter for anything other than + * a basic triplet. + * + * location: + * default 1, which is above the notes: ┌─── 3 ───┐ + * -1 is below the notes └─── 3 ───┘ + * + * bracketed: boolean, draw a bracket around the tuplet number + * when true: ┌─── 3 ───┐ when false: 3 + * defaults to true if notes are not beamed, false otherwise + * + * ratioed: boolean + * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐ + * defaults to true if the difference between num_notes and + * notes_occupied is greater than 1. + * + * y_offset: int, default 0 + * manually offset a tuplet, for instance to avoid collisions + * with articulations, etc... + * } + */ +import { Element } from './element'; +import { Glyph } from './glyph'; +import { Note } from './note'; +export interface TupletOptions { + beats_occupied?: number; + bracketed?: boolean; + location?: number; + notes_occupied?: number; + num_notes?: number; + ratioed?: boolean; + y_offset?: number; +} +export interface TupletMetrics { + noteHeadOffset: number; + stemOffset: number; + bottomLine: number; + topModifierOffset: number; +} +export declare const enum TupletLocation { + BOTTOM = -1, + TOP = 1 +} +export declare class Tuplet extends Element { + static get CATEGORY(): string; + notes: Note[]; + protected options: TupletOptions; + protected num_notes: number; + protected point: number; + protected bracketed: boolean; + protected y_pos: number; + protected x_pos: number; + protected width: number; + protected location: number; + protected notes_occupied: number; + protected ratioed: boolean; + protected numerator_glyphs: Glyph[]; + protected denom_glyphs: Glyph[]; + static get LOCATION_TOP(): number; + static get LOCATION_BOTTOM(): number; + static get NESTING_OFFSET(): number; + static get metrics(): TupletMetrics; + constructor(notes: Note[], options?: TupletOptions); + attach(): void; + detach(): void; + /** + * Set whether or not the bracket is drawn. + */ + setBracketed(bracketed: boolean): this; + /** + * Set whether or not the ratio is shown. + */ + setRatioed(ratioed: boolean): this; + /** + * Set the tuplet indicator to be displayed either on the top or bottom of the stave. + */ + setTupletLocation(location: number): this; + getNotes(): Note[]; + getNoteCount(): number; + beatsOccupiedDeprecationWarning(): void; + getBeatsOccupied(): number; + setBeatsOccupied(beats: number): void; + getNotesOccupied(): number; + setNotesOccupied(notes: number): void; + resolveGlyphs(): void; + getNestedTupletCount(): number; + getYPosition(): number; + draw(): void; +} diff --git a/build/types/src/typeguard.d.ts b/build/types/src/typeguard.d.ts new file mode 100644 index 0000000000..e1399a8862 --- /dev/null +++ b/build/types/src/typeguard.d.ts @@ -0,0 +1,99 @@ +import { Accidental } from './accidental'; +import { Annotation } from './annotation'; +import { Dot } from './dot'; +import { GraceNote } from './gracenote'; +import { GraceNoteGroup } from './gracenotegroup'; +import { Note } from './note'; +import { RenderContext } from './rendercontext.js'; +import { Barline } from './stavebarline'; +import { StaveNote } from './stavenote'; +import { StemmableNote } from './stemmablenote'; +import { TabNote } from './tabnote'; +/** + * Use instead of `instanceof` as a more flexible type guard. + * @param obj check if this object's CATEGORY matches the provided category. + * @param category a string representing a category of VexFlow objects. + * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`. + * If `false`, we do not check the superclass or other ancestors. + * @returns true if `obj` has a static `CATEGORY` property that matches `category`. + */ +export declare function isCategory(obj: any, category: string, checkAncestors?: boolean): obj is T; +export declare const isAccidental: (obj: unknown) => obj is Accidental; +export declare const isAnnotation: (obj: unknown) => obj is Annotation; +export declare const isBarline: (obj: unknown) => obj is Barline; +export declare const isDot: (obj: unknown) => obj is Dot; +export declare const isGraceNote: (obj: unknown) => obj is GraceNote; +export declare const isGraceNoteGroup: (obj: unknown) => obj is GraceNoteGroup; +export declare const isNote: (obj: unknown) => obj is Note; +export declare const isRenderContext: (obj: unknown) => obj is RenderContext; +export declare const isStaveNote: (obj: unknown) => obj is StaveNote; +export declare const isStemmableNote: (obj: unknown) => obj is StemmableNote; +export declare const isTabNote: (obj: unknown) => obj is TabNote; +export declare const enum Category { + Accidental = "Accidental", + Annotation = "Annotation", + Articulation = "Articulation", + Barline = "Barline", + BarNote = "BarNote", + Beam = "Beam", + Bend = "Bend", + ChordSymbol = "ChordSymbol", + Clef = "Clef", + ClefNote = "ClefNote", + Crescendo = "Crescendo", + Curve = "Curve", + Dot = "Dot", + Element = "Element", + Fraction = "Fraction", + FretHandFinger = "FretHandFinger", + GhostNote = "GhostNote", + Glyph = "Glyph", + GlyphNote = "GlyphNote", + GraceNote = "GraceNote", + GraceNoteGroup = "GraceNoteGroup", + GraceTabNote = "GraceTabNote", + KeySignature = "KeySignature", + KeySigNote = "KeySigNote", + Modifier = "Modifier", + MultiMeasureRest = "MultiMeasureRest", + Note = "Note", + NoteHead = "NoteHead", + NoteSubGroup = "NoteSubGroup", + Ornament = "Ornament", + Parenthesis = "Parenthesis", + PedalMarking = "PedalMarking", + RenderContext = "RenderContext", + RepeatNote = "RepeatNote", + Repetition = "Repetition", + Stave = "Stave", + StaveConnector = "StaveConnector", + StaveHairpin = "StaveHairpin", + StaveLine = "StaveLine", + StaveModifier = "StaveModifier", + StaveNote = "StaveNote", + StaveSection = "StaveSection", + StaveTempo = "StaveTempo", + StaveText = "StaveText", + StaveTie = "StaveTie", + Stem = "Stem", + StemmableNote = "StemmableNote", + StringNumber = "StringNumber", + Stroke = "Stroke", + System = "System", + TabNote = "TabNote", + TabSlide = "TabSlide", + TabStave = "TabStave", + TabTie = "TabTie", + TextBracket = "TextBracket", + TextDynamics = "TextDynamics", + TextNote = "TextNote", + Tickable = "Tickable", + TimeSignature = "TimeSignature", + TimeSigNote = "TimeSigNote", + Tremolo = "Tremolo", + Tuplet = "Tuplet", + Vibrato = "Vibrato", + VibratoBracket = "VibratoBracket", + Voice = "Voice", + Volta = "Volta" +} diff --git a/build/types/src/util.d.ts b/build/types/src/util.d.ts new file mode 100644 index 0000000000..7a04e0e6d6 --- /dev/null +++ b/build/types/src/util.d.ts @@ -0,0 +1,31 @@ +/** `RuntimeError` will be thrown by VexFlow classes in case of error. */ +export declare class RuntimeError extends Error { + code: string; + constructor(code: string, message?: string); +} +/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */ +export declare function globalObject(): typeof globalThis & any; +/** + * Check that `x` is of type `T` and not `undefined`. + * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message. + */ +export declare function defined(x?: T, code?: string, message?: string): T; +/** Default log function sends all arguments to console. */ +export declare function log(block: string, ...args: any[]): void; +/** Dump warning to console. */ +export declare function warn(...args: any[]): void; +/** Locate the mid point between stave lines. Returns a fractional line if a space. */ +export declare function midLine(a: number, b: number): number; +/** + * Used by various classes (e.g., SVGContext) to provide a + * unique prefix to element names (or other keys in shared namespaces). + */ +export declare function prefix(text: string): string; +/** + * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi). + */ +export declare function normalizeAngle(a: number): number; +/** + * Return the sum of an array of numbers. + */ +export declare function sumArray(arr: number[]): number; diff --git a/build/types/src/version.d.ts b/build/types/src/version.d.ts new file mode 100644 index 0000000000..e5292457ed --- /dev/null +++ b/build/types/src/version.d.ts @@ -0,0 +1,3 @@ +export declare const VERSION: string; +export declare const ID: string; +export declare const DATE: string; diff --git a/build/types/src/vex.d.ts b/build/types/src/vex.d.ts new file mode 100644 index 0000000000..d05bfe36fe --- /dev/null +++ b/build/types/src/vex.d.ts @@ -0,0 +1,18 @@ +import { Flow } from './flow'; +import { RuntimeError } from './util'; +export declare class Vex { + static Flow: typeof Flow; + /** + * Take `arr` and return a new list consisting of the sorted, unique, + * contents of arr. Does not modify `arr`. + */ + static sortAndUnique(arr: any[], cmp: any, eq: any): any[]; + /** Check if array `arr` contains `obj`. */ + static contains(arr: any[], obj: any): boolean; + static getCanvasContext(canvasSelector: string): RenderingContext; + /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */ + static benchmark(s: any, f: any): void; + static stackTrace(): string | undefined; + static RERR: RuntimeError; + static RuntimeError: RuntimeError; +} diff --git a/build/types/src/vibrato.d.ts b/build/types/src/vibrato.d.ts new file mode 100644 index 0000000000..adfa194c07 --- /dev/null +++ b/build/types/src/vibrato.d.ts @@ -0,0 +1,29 @@ +import { Modifier } from './modifier'; +import { ModifierContext, ModifierContextState } from './modifiercontext'; +import { RenderContext } from './rendercontext'; +export interface VibratoRenderOptions { + wave_height: number; + wave_girth: number; + vibrato_width: number; + harsh: boolean; + wave_width: number; +} +/** `Vibrato` implements diverse vibratos. */ +export declare class Vibrato extends Modifier { + static get CATEGORY(): string; + render_options: VibratoRenderOptions; + /** Arrange vibratos inside a `ModifierContext`. */ + static format(vibratos: Vibrato[], state: ModifierContextState, context: ModifierContext): boolean; + constructor(); + /** Set harsh vibrato. */ + setHarsh(harsh: boolean): this; + /** Set vibrato width in pixels. */ + setVibratoWidth(width: number): this; + /** Draw the vibrato on the rendering context. */ + draw(): void; + /** + * Static rendering method that can be called from + * other classes (e.g. VibratoBracket). + */ + static renderVibrato(ctx: RenderContext, x: number, y: number, opts: VibratoRenderOptions): void; +} diff --git a/build/types/src/vibratobracket.d.ts b/build/types/src/vibratobracket.d.ts new file mode 100644 index 0000000000..3d823d14e1 --- /dev/null +++ b/build/types/src/vibratobracket.d.ts @@ -0,0 +1,33 @@ +import { Element } from './element'; +import { Note } from './note'; +/** `VibratoBracket` renders vibrato effect between two notes. */ +export declare class VibratoBracket extends Element { + /** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */ + static DEBUG: boolean; + static get CATEGORY(): string; + protected line: number; + protected start?: Note; + protected stop?: Note; + render_options: { + vibrato_width: number; + wave_height: number; + wave_girth: number; + harsh: boolean; + wave_width: number; + }; + /** + * Either the stop or start note must be set, or both of them. + * An undefined value for the start or stop note indicates that the vibrato + * is drawn from the beginning or until the end of the stave accordingly. + */ + constructor(bracket_data: { + stop?: Note | null; + start?: Note | null; + }); + /** Set line position of the vibrato bracket. */ + setLine(line: number): this; + /** Set harsh vibrato bracket. */ + setHarsh(harsh: boolean): this; + /** Draw the vibrato bracket on the rendering context. */ + draw(): void; +} diff --git a/build/types/src/voice.d.ts b/build/types/src/voice.d.ts new file mode 100644 index 0000000000..6d3046d081 --- /dev/null +++ b/build/types/src/voice.d.ts @@ -0,0 +1,109 @@ +import { BoundingBox } from './boundingbox'; +import { Element } from './element'; +import { Fraction } from './fraction'; +import { RenderContext } from './rendercontext'; +import { Stave } from './stave'; +import { Tickable } from './tickable'; +export interface VoiceTime { + num_beats: number; + beat_value: number; + /** Defaults to `Flow.RESOLUTION` if not provided. */ + resolution?: number; +} +export declare enum VoiceMode { + STRICT = 1, + SOFT = 2, + FULL = 3 +} +/** + * `Voice` is mainly a container object to group `Tickables` for formatting. + */ +export declare class Voice extends Element { + static get CATEGORY(): string; + /** + * Modes allow the addition of ticks in three different ways: + * - STRICT: This is the default. Ticks must fill the voice. + * - SOFT: Ticks can be added without restrictions. + * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length. + */ + static get Mode(): typeof VoiceMode; + protected resolutionMultiplier: number; + protected smallestTickCount: Fraction; + protected stave?: Stave; + protected mode: VoiceMode; + protected expTicksUsed?: number; + protected preFormatted: boolean; + protected options: { + softmaxFactor: number; + }; + protected readonly totalTicks: Fraction; + protected readonly ticksUsed: Fraction; + protected readonly largestTickWidth: number; + protected readonly tickables: Tickable[]; + protected readonly time: Required; + constructor(time?: VoiceTime | string); + /** Get the total ticks in the voice. */ + getTotalTicks(): Fraction; + /** Get the total ticks used in the voice by all the tickables. */ + getTicksUsed(): Fraction; + /** Get the largest width of all the tickables. */ + getLargestTickWidth(): number; + /** Get the tick count for the shortest tickable */ + getSmallestTickCount(): Fraction; + /** Get the tickables in the voice. */ + getTickables(): Tickable[]; + /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */ + getMode(): number; + /** + * Set the voice mode. + * @param mode value from `VoiceMode` or Voice.Mode + */ + setMode(mode: number): this; + /** Get the resolution multiplier for the voice. */ + getResolutionMultiplier(): number; + /** Get the actual tick resolution for the voice. */ + getActualResolution(): number; + /** Set the voice's stave. */ + setStave(stave: Stave): this; + getStave(): Stave | undefined; + /** Get the bounding box for the voice. */ + getBoundingBox(): BoundingBox | undefined; + /** Set the voice mode to strict or soft. */ + setStrict(strict: boolean): this; + /** Determine if the voice is complete according to the voice mode. */ + isComplete(): boolean; + /** + * We use softmax to layout the tickables proportional to the exponent of + * their duration. The softmax factor is used to determine the 'linearness' of + * the layout. + * + * The softmax of all the tickables in this voice should sum to 1. + */ + setSoftmaxFactor(factor: number): this; + /** + * Calculate the sum of the exponents of all the ticks in this voice to use + * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables) + * + * Note that the "exp" of "expTicksUsed" stands for "expontential" ticks used, + * not "expected" ticks used. + */ + protected reCalculateExpTicksUsed(): number; + /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */ + softmax(tickValue: number): number; + /** Add a tickable to the voice. */ + addTickable(tickable: Tickable): this; + /** Add an array of tickables to the voice. */ + addTickables(tickables: Tickable[]): this; + /** Preformat the voice by applying the voice's stave to each note. */ + preFormat(): this; + checkStave(): Stave; + /** + * Render the voice onto the canvas `context` and an optional `stave`. + * If `stave` is omitted, it is expected that the notes have staves + * already set. + * + * This method also calculates the voice's boundingBox while drawing + * the notes. Note the similarities with this.getBoundingBox(). + */ + draw(context?: RenderContext, stave?: Stave): void; +} diff --git a/build/types/src/web.d.ts b/build/types/src/web.d.ts new file mode 100644 index 0000000000..e5bd19628f --- /dev/null +++ b/build/types/src/web.d.ts @@ -0,0 +1,2 @@ +export declare function isHTMLCanvas(element: any): element is HTMLCanvasElement; +export declare function isHTMLDiv(element: any): element is HTMLDivElement; diff --git a/package-lock.json b/package-lock.json index d6d090455d..40e233ac4b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vexflow4", - "version": "4.2.5", + "version": "4.2.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "vexflow4", - "version": "4.2.5", + "version": "4.2.6", "license": "MIT", "devDependencies": { "@types/node": "^18.16.3", diff --git a/package.json b/package.json index 6bee3a9221..499fcc37a5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vexflow4", - "version": "4.2.5", + "version": "4.2.6", "description": "A JavaScript library for rendering music notation and guitar tablature.", "exports": { ".": {